| /* SPDX-License-Identifier: GPL-2.0-only */ |
| /* |
| * GCIP-integrated IIF driver sync file. |
| * |
| * Copyright (C) 2023 Google LLC |
| */ |
| |
| #ifndef __IIF_IIF_SYNC_FILE_H__ |
| #define __IIF_IIF_SYNC_FILE_H__ |
| |
| #include <linux/file.h> |
| #include <linux/wait.h> |
| |
| #include <gcip/iif/iif-fence.h> |
| |
| #define IIF_SYNC_FILE_FLAGS_POLL_ENABLED 0 |
| |
| /* Sync file which will be exported to the userspace to sync with the fence. */ |
| struct iif_sync_file { |
| /* File pointer. */ |
| struct file *file; |
| /* Fence object. */ |
| struct iif_fence *fence; |
| /* Queue of polling the file. */ |
| wait_queue_head_t wq; |
| /* Node which will be added to the callback list of the fence. */ |
| struct iif_fence_poll_cb poll_cb; |
| /* |
| * Flags. |
| * [0:0] - Set if the user has been polling the file. (IIF_SYNC_FILE_FLAGS_POLL_ENABLED) |
| * [1:31] - Reserved. |
| */ |
| unsigned long flags; |
| }; |
| |
| /* Opens a file which will be exported to the userspace to sync with @fence. */ |
| struct iif_sync_file *iif_sync_file_create(struct iif_fence *fence); |
| |
| /* |
| * Gets the sync file from @fd. If @fd is not for iif_sync_file, it will return a negative error |
| * pointer. |
| * |
| * The caller must put the file pointer (i.e., fput(sync_file->file)) to release the file. |
| */ |
| struct iif_sync_file *iif_sync_file_fdget(int fd); |
| |
| #endif /* __IIF_IIF_SYNC_FILE_H__ */ |