|
@@ -281,12 +281,10 @@ void mei_reset(struct mei_device *dev, int interrupts_enabled)
|
|
|
cl_pos->timer_count = 0;
|
|
|
}
|
|
|
/* remove entry if already in list */
|
|
|
- dev_dbg(&dev->pdev->dev, "list del iamthif and wd file list.\n");
|
|
|
- mei_remove_client_from_file_list(dev,
|
|
|
- dev->wd_cl.host_client_id);
|
|
|
+ dev_dbg(&dev->pdev->dev, "remove iamthif and wd from the file list.\n");
|
|
|
+ mei_me_cl_unlink(dev, &dev->wd_cl);
|
|
|
|
|
|
- mei_remove_client_from_file_list(dev,
|
|
|
- dev->iamthif_cl.host_client_id);
|
|
|
+ mei_me_cl_unlink(dev, &dev->iamthif_cl);
|
|
|
|
|
|
mei_amthif_reset_params(dev);
|
|
|
dev->extra_write_index = 0;
|
|
@@ -520,17 +518,20 @@ int mei_me_cl_by_uuid(const struct mei_device *dev, const uuid_le *cuuid)
|
|
|
|
|
|
|
|
|
/**
|
|
|
- * mei_me_cl_update_filext - searches for ME client guid
|
|
|
- * sets client_id in mei_file_private if found
|
|
|
+ * mei_me_cl_link - create link between host and me clinet and add
|
|
|
+ * me_cl to the list
|
|
|
+ *
|
|
|
* @dev: the device structure
|
|
|
- * @cl: private file structure to set client_id in
|
|
|
- * @cuuid: searched uuid of ME client
|
|
|
- * @client_id: id of host client to be set in file private structure
|
|
|
+ * @cl: link between me and host client assocated with opened file descriptor
|
|
|
+ * @cuuid: uuid of ME client
|
|
|
+ * @client_id: id of the host client
|
|
|
*
|
|
|
- * returns ME client index
|
|
|
+ * returns ME client index if ME client
|
|
|
+ * -EINVAL on incorrect values
|
|
|
+ * -ENONET if client not found
|
|
|
*/
|
|
|
-int mei_me_cl_update_filext(struct mei_device *dev, struct mei_cl *cl,
|
|
|
- const uuid_le *cuuid, u8 host_cl_id)
|
|
|
+int mei_me_cl_link(struct mei_device *dev, struct mei_cl *cl,
|
|
|
+ const uuid_le *cuuid, u8 host_cl_id)
|
|
|
{
|
|
|
int i;
|
|
|
|
|
@@ -550,6 +551,24 @@ int mei_me_cl_update_filext(struct mei_device *dev, struct mei_cl *cl,
|
|
|
|
|
|
return -ENOENT;
|
|
|
}
|
|
|
+/**
|
|
|
+ * mei_me_cl_unlink - remove me_cl from the list
|
|
|
+ *
|
|
|
+ * @dev: the device structure
|
|
|
+ * @host_client_id: host client id to be removed
|
|
|
+ */
|
|
|
+void mei_me_cl_unlink(struct mei_device *dev, struct mei_cl *cl)
|
|
|
+{
|
|
|
+ struct mei_cl *pos, *next;
|
|
|
+ list_for_each_entry_safe(pos, next, &dev->file_list, link) {
|
|
|
+ if (cl->host_client_id == pos->host_client_id) {
|
|
|
+ dev_dbg(&dev->pdev->dev, "remove host client = %d, ME client = %d\n",
|
|
|
+ pos->host_client_id, pos->me_client_id);
|
|
|
+ list_del_init(&pos->link);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
/**
|
|
|
* mei_alloc_file_private - allocates a private file structure and sets it up.
|
|
@@ -642,25 +661,3 @@ free:
|
|
|
return rets;
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * mei_remove_client_from_file_list -
|
|
|
- * removes file private data from device file list
|
|
|
- *
|
|
|
- * @dev: the device structure
|
|
|
- * @host_client_id: host client id to be removed
|
|
|
- */
|
|
|
-void mei_remove_client_from_file_list(struct mei_device *dev,
|
|
|
- u8 host_client_id)
|
|
|
-{
|
|
|
- struct mei_cl *cl_pos = NULL;
|
|
|
- struct mei_cl *cl_next = NULL;
|
|
|
- list_for_each_entry_safe(cl_pos, cl_next, &dev->file_list, link) {
|
|
|
- if (host_client_id == cl_pos->host_client_id) {
|
|
|
- dev_dbg(&dev->pdev->dev, "remove host client = %d, ME client = %d\n",
|
|
|
- cl_pos->host_client_id,
|
|
|
- cl_pos->me_client_id);
|
|
|
- list_del_init(&cl_pos->link);
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-}
|