Commit 25ca6472 authored by Tomas Winkler's avatar Tomas Winkler Committed by Greg Kroah-Hartman

mei: add me client remove functions

To support dynamic addition/remove we add wrappers
for removal of me clients
Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5ca2d388
...@@ -47,7 +47,6 @@ struct mei_me_client *mei_me_cl_by_uuid(const struct mei_device *dev, ...@@ -47,7 +47,6 @@ struct mei_me_client *mei_me_cl_by_uuid(const struct mei_device *dev,
return NULL; return NULL;
} }
/** /**
* mei_me_cl_by_id return index to me_clients for client_id * mei_me_cl_by_id return index to me_clients for client_id
* *
...@@ -70,6 +69,27 @@ struct mei_me_client *mei_me_cl_by_id(struct mei_device *dev, u8 client_id) ...@@ -70,6 +69,27 @@ struct mei_me_client *mei_me_cl_by_id(struct mei_device *dev, u8 client_id)
return NULL; return NULL;
} }
/**
* mei_me_cl_remove - remove me client matching uuid and client_id
*
* @dev: the device structure
* @uuid: me client uuid
* @client_id: me client address
*/
void mei_me_cl_remove(struct mei_device *dev, const uuid_le *uuid, u8 client_id)
{
struct mei_me_client *me_cl, *next;
list_for_each_entry_safe(me_cl, next, &dev->me_clients, list) {
if (uuid_le_cmp(*uuid, me_cl->props.protocol_name) == 0 &&
me_cl->client_id == client_id) {
list_del(&me_cl->list);
kfree(me_cl);
break;
}
}
}
/** /**
* mei_cl_cmp_id - tells if the clients are the same * mei_cl_cmp_id - tells if the clients are the same
......
...@@ -27,6 +27,8 @@ ...@@ -27,6 +27,8 @@
struct mei_me_client *mei_me_cl_by_uuid(const struct mei_device *dev, struct mei_me_client *mei_me_cl_by_uuid(const struct mei_device *dev,
const uuid_le *cuuid); const uuid_le *cuuid);
struct mei_me_client *mei_me_cl_by_id(struct mei_device *dev, u8 client_id); struct mei_me_client *mei_me_cl_by_id(struct mei_device *dev, u8 client_id);
void mei_me_cl_remove(struct mei_device *dev,
const uuid_le *uuid, u8 client_id);
/* /*
* MEI IO Functions * MEI IO Functions
......
...@@ -71,21 +71,30 @@ void mei_hbm_idle(struct mei_device *dev) ...@@ -71,21 +71,30 @@ void mei_hbm_idle(struct mei_device *dev)
} }
/** /**
* mei_hbm_reset - reset hbm counters and book keeping data structurs * mei_me_cl_remove_all - remove all me clients
* *
* @dev: the device structure * @dev: the device structure
*/ */
void mei_hbm_reset(struct mei_device *dev) static void mei_me_cl_remove_all(struct mei_device *dev)
{ {
struct mei_me_client *me_cl, *next; struct mei_me_client *me_cl, *next;
list_for_each_entry_safe(me_cl, next, &dev->me_clients, list) {
list_del(&me_cl->list);
kfree(me_cl);
}
}
/**
* mei_hbm_reset - reset hbm counters and book keeping data structurs
*
* @dev: the device structure
*/
void mei_hbm_reset(struct mei_device *dev)
{
dev->me_client_presentation_num = 0; dev->me_client_presentation_num = 0;
dev->me_client_index = 0; dev->me_client_index = 0;
list_for_each_entry_safe(me_cl, next, &dev->me_clients, list) { mei_me_cl_remove_all(dev);
list_del(&me_cl->list);
kfree(me_cl);
}
mei_hbm_idle(dev); mei_hbm_idle(dev);
} }
......
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