Commit 0e8ae77c authored by Srinivas Pandruvada's avatar Srinivas Pandruvada Committed by Hans de Goede

platform/x86: ISST: Add API version of the target

User space can get the API version using IOCTL
ISST_IF_GET_PLATFORM_INFO. This information can be used to get IOCTLs
supported by the kernel driver. This version is hardcoded in the driver.

Allow the registered client to specify the supported API version. In
this way a registered client can specify a higher API version to extend
IOCTL set.
Signed-off-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Link: https://lore.kernel.org/r/20230211063257.311746-5-srinivas.pandruvada@linux.intel.comSigned-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
parent 33c16dc1
...@@ -262,11 +262,13 @@ bool isst_if_mbox_cmd_set_req(struct isst_if_mbox_cmd *cmd) ...@@ -262,11 +262,13 @@ bool isst_if_mbox_cmd_set_req(struct isst_if_mbox_cmd *cmd)
} }
EXPORT_SYMBOL_GPL(isst_if_mbox_cmd_set_req); EXPORT_SYMBOL_GPL(isst_if_mbox_cmd_set_req);
static int isst_if_api_version;
static int isst_if_get_platform_info(void __user *argp) static int isst_if_get_platform_info(void __user *argp)
{ {
struct isst_if_platform_info info; struct isst_if_platform_info info;
info.api_version = ISST_IF_API_VERSION; info.api_version = isst_if_api_version;
info.driver_version = ISST_IF_DRIVER_VERSION; info.driver_version = ISST_IF_DRIVER_VERSION;
info.max_cmds_per_ioctl = ISST_IF_CMD_LIMIT; info.max_cmds_per_ioctl = ISST_IF_CMD_LIMIT;
info.mbox_supported = punit_callbacks[ISST_IF_DEV_MBOX].registered; info.mbox_supported = punit_callbacks[ISST_IF_DEV_MBOX].registered;
...@@ -767,6 +769,10 @@ int isst_if_cdev_register(int device_type, struct isst_if_cmd_cb *cb) ...@@ -767,6 +769,10 @@ int isst_if_cdev_register(int device_type, struct isst_if_cmd_cb *cb)
mutex_unlock(&punit_misc_dev_open_lock); mutex_unlock(&punit_misc_dev_open_lock);
return -EAGAIN; return -EAGAIN;
} }
if (!cb->api_version)
cb->api_version = ISST_IF_API_VERSION;
if (cb->api_version > isst_if_api_version)
isst_if_api_version = cb->api_version;
memcpy(&punit_callbacks[device_type], cb, sizeof(*cb)); memcpy(&punit_callbacks[device_type], cb, sizeof(*cb));
punit_callbacks[device_type].registered = 1; punit_callbacks[device_type].registered = 1;
mutex_unlock(&punit_misc_dev_open_lock); mutex_unlock(&punit_misc_dev_open_lock);
......
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
* @offset: Offset to the first valid member in command structure. * @offset: Offset to the first valid member in command structure.
* This will be the offset of the start of the command * This will be the offset of the start of the command
* after command count field * after command count field
* @api_version: API version supported for this target. 0, if none.
* @owner: Registered module owner * @owner: Registered module owner
* @cmd_callback: Callback function to handle IOCTL. The callback has the * @cmd_callback: Callback function to handle IOCTL. The callback has the
* command pointer with data for command. There is a pointer * command pointer with data for command. There is a pointer
...@@ -60,7 +61,7 @@ struct isst_if_cmd_cb { ...@@ -60,7 +61,7 @@ struct isst_if_cmd_cb {
int registered; int registered;
int cmd_size; int cmd_size;
int offset; int offset;
int api_version;
struct module *owner; struct module *owner;
long (*cmd_callback)(u8 *ptr, int *write_only, int resume); long (*cmd_callback)(u8 *ptr, int *write_only, int resume);
long (*def_ioctl)(struct file *file, unsigned int cmd, unsigned long arg); long (*def_ioctl)(struct file *file, unsigned int cmd, unsigned long arg);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment