forked from Minki/linux
mei: add me client remove functions
To support dynamic addition/remove we add wrappers for removal of me clients Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
5ca2d3882d
commit
25ca6472b5
@ -47,7 +47,6 @@ struct mei_me_client *mei_me_cl_by_uuid(const struct mei_device *dev,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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)
|
||||
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
|
||||
|
@ -27,6 +27,8 @@
|
||||
struct mei_me_client *mei_me_cl_by_uuid(const struct mei_device *dev,
|
||||
const uuid_le *cuuid);
|
||||
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
|
||||
|
@ -70,6 +70,20 @@ void mei_hbm_idle(struct mei_device *dev)
|
||||
dev->hbm_state = MEI_HBM_IDLE;
|
||||
}
|
||||
|
||||
/**
|
||||
* mei_me_cl_remove_all - remove all me clients
|
||||
*
|
||||
* @dev: the device structure
|
||||
*/
|
||||
static void mei_me_cl_remove_all(struct mei_device *dev)
|
||||
{
|
||||
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
|
||||
*
|
||||
@ -77,15 +91,10 @@ void mei_hbm_idle(struct mei_device *dev)
|
||||
*/
|
||||
void mei_hbm_reset(struct mei_device *dev)
|
||||
{
|
||||
struct mei_me_client *me_cl, *next;
|
||||
|
||||
dev->me_client_presentation_num = 0;
|
||||
dev->me_client_index = 0;
|
||||
|
||||
list_for_each_entry_safe(me_cl, next, &dev->me_clients, list) {
|
||||
list_del(&me_cl->list);
|
||||
kfree(me_cl);
|
||||
}
|
||||
mei_me_cl_remove_all(dev);
|
||||
|
||||
mei_hbm_idle(dev);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user