diff options
| author | Vaibhav Jain <vaibhav@linux.vnet.ibm.com> | 2015-04-29 06:17:23 -0400 |
|---|---|---|
| committer | Michael Ellerman <mpe@ellerman.id.au> | 2015-06-02 23:27:15 -0400 |
| commit | 27d4dc7116eed98775902627ba61b70e9045e321 (patch) | |
| tree | 1fd00dbdc54706726c892cb2fe22e699f2809ce3 /include/uapi/misc | |
| parent | 989898b707f74716ec27a4ae2b57e404ca54cbd2 (diff) | |
cxl: Implement an ioctl to fetch afu card-id, offset-id and mode
Given a file descriptor on an afu device, libcxl currently uses the
major/minor number obtained from fstat on the fd to construct path to
the afu's sysfs directory. However it is possible that rather than using
one of the device in /dev/cxl, a kernel driver creates its own device
which export generic cxl interface to the userspace. This causes
problems with libcxl as it tries to use a wrong major/minor number to
construct the sysfs path and fail.
So this patch introduces a new ioctl called CXL_IOCTL_GET_AFU_ID on the
afu file descriptor to fetch the cxl_afu_id struct that holds the
card/offset-id and mode information. These info is then used by libcxl to
construct the correct path to the afu sysfs directory.
Testing:
- Build against pseries be/le configs
- Testing with corresponding libcxl changes to verify that it constructs
right sysfs path to the afu.
Signed-off-by: Vaibhav Jain <vaibhav@linux.vnet.ibm.com>
Acked-by: Ian Munsie <imunsie@au1.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'include/uapi/misc')
| -rw-r--r-- | include/uapi/misc/cxl.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/include/uapi/misc/cxl.h b/include/uapi/misc/cxl.h index cd6d789b73ec..99a8ca15fe64 100644 --- a/include/uapi/misc/cxl.h +++ b/include/uapi/misc/cxl.h | |||
| @@ -32,10 +32,32 @@ struct cxl_ioctl_start_work { | |||
| 32 | #define CXL_START_WORK_ALL (CXL_START_WORK_AMR |\ | 32 | #define CXL_START_WORK_ALL (CXL_START_WORK_AMR |\ |
| 33 | CXL_START_WORK_NUM_IRQS) | 33 | CXL_START_WORK_NUM_IRQS) |
| 34 | 34 | ||
| 35 | |||
| 36 | /* Possible modes that an afu can be in */ | ||
| 37 | #define CXL_MODE_DEDICATED 0x1 | ||
| 38 | #define CXL_MODE_DIRECTED 0x2 | ||
| 39 | |||
| 40 | /* possible flags for the cxl_afu_id flags field */ | ||
| 41 | #define CXL_AFUID_FLAG_SLAVE 0x1 /* In directed-mode afu is in slave mode */ | ||
| 42 | |||
| 43 | struct cxl_afu_id { | ||
| 44 | __u64 flags; /* One of CXL_AFUID_FLAG_X */ | ||
| 45 | __u32 card_id; | ||
| 46 | __u32 afu_offset; | ||
| 47 | __u32 afu_mode; /* one of the CXL_MODE_X */ | ||
| 48 | __u32 reserved1; | ||
| 49 | __u64 reserved2; | ||
| 50 | __u64 reserved3; | ||
| 51 | __u64 reserved4; | ||
| 52 | __u64 reserved5; | ||
| 53 | __u64 reserved6; | ||
| 54 | }; | ||
| 55 | |||
| 35 | /* ioctl numbers */ | 56 | /* ioctl numbers */ |
| 36 | #define CXL_MAGIC 0xCA | 57 | #define CXL_MAGIC 0xCA |
| 37 | #define CXL_IOCTL_START_WORK _IOW(CXL_MAGIC, 0x00, struct cxl_ioctl_start_work) | 58 | #define CXL_IOCTL_START_WORK _IOW(CXL_MAGIC, 0x00, struct cxl_ioctl_start_work) |
| 38 | #define CXL_IOCTL_GET_PROCESS_ELEMENT _IOR(CXL_MAGIC, 0x01, __u32) | 59 | #define CXL_IOCTL_GET_PROCESS_ELEMENT _IOR(CXL_MAGIC, 0x01, __u32) |
| 60 | #define CXL_IOCTL_GET_AFU_ID _IOR(CXL_MAGIC, 0x02, struct cxl_afu_id) | ||
| 39 | 61 | ||
| 40 | #define CXL_READ_MIN_SIZE 0x1000 /* 4K */ | 62 | #define CXL_READ_MIN_SIZE 0x1000 /* 4K */ |
| 41 | 63 | ||
