mei: drop global me_client_index
Global me_client_index is used only during the enumeration process and can be effectively replaced by me_addr data from the last enumeration response as we always enumerate clients in the increasing order. Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
b9c79543ef
commit
cc25aa94e4
@ -113,8 +113,6 @@ void mei_hbm_idle(struct mei_device *dev)
|
|||||||
*/
|
*/
|
||||||
void mei_hbm_reset(struct mei_device *dev)
|
void mei_hbm_reset(struct mei_device *dev)
|
||||||
{
|
{
|
||||||
dev->me_client_index = 0;
|
|
||||||
|
|
||||||
mei_me_cl_rm_all(dev);
|
mei_me_cl_rm_all(dev);
|
||||||
|
|
||||||
mei_hbm_idle(dev);
|
mei_hbm_idle(dev);
|
||||||
@ -530,24 +528,22 @@ static void mei_hbm_cl_notify(struct mei_device *dev,
|
|||||||
* mei_hbm_prop_req - request property for a single client
|
* mei_hbm_prop_req - request property for a single client
|
||||||
*
|
*
|
||||||
* @dev: the device structure
|
* @dev: the device structure
|
||||||
|
* @start_idx: client index to start search
|
||||||
*
|
*
|
||||||
* Return: 0 on success and < 0 on failure
|
* Return: 0 on success and < 0 on failure
|
||||||
*/
|
*/
|
||||||
|
static int mei_hbm_prop_req(struct mei_device *dev, unsigned long start_idx)
|
||||||
static int mei_hbm_prop_req(struct mei_device *dev)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
struct mei_msg_hdr *mei_hdr = &dev->wr_msg.hdr;
|
struct mei_msg_hdr *mei_hdr = &dev->wr_msg.hdr;
|
||||||
struct hbm_props_request *prop_req;
|
struct hbm_props_request *prop_req;
|
||||||
const size_t len = sizeof(struct hbm_props_request);
|
const size_t len = sizeof(struct hbm_props_request);
|
||||||
unsigned long next_client_index;
|
unsigned long addr;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
next_client_index = find_next_bit(dev->me_clients_map, MEI_CLIENTS_MAX,
|
addr = find_next_bit(dev->me_clients_map, MEI_CLIENTS_MAX, start_idx);
|
||||||
dev->me_client_index);
|
|
||||||
|
|
||||||
/* We got all client properties */
|
/* We got all client properties */
|
||||||
if (next_client_index == MEI_CLIENTS_MAX) {
|
if (addr == MEI_CLIENTS_MAX) {
|
||||||
dev->hbm_state = MEI_HBM_STARTED;
|
dev->hbm_state = MEI_HBM_STARTED;
|
||||||
mei_host_client_init(dev);
|
mei_host_client_init(dev);
|
||||||
|
|
||||||
@ -560,7 +556,7 @@ static int mei_hbm_prop_req(struct mei_device *dev)
|
|||||||
memset(prop_req, 0, sizeof(struct hbm_props_request));
|
memset(prop_req, 0, sizeof(struct hbm_props_request));
|
||||||
|
|
||||||
prop_req->hbm_cmd = HOST_CLIENT_PROPERTIES_REQ_CMD;
|
prop_req->hbm_cmd = HOST_CLIENT_PROPERTIES_REQ_CMD;
|
||||||
prop_req->me_addr = next_client_index;
|
prop_req->me_addr = addr;
|
||||||
|
|
||||||
ret = mei_write_message(dev, mei_hdr, dev->wr_msg.data);
|
ret = mei_write_message(dev, mei_hdr, dev->wr_msg.data);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
@ -570,7 +566,6 @@ static int mei_hbm_prop_req(struct mei_device *dev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
dev->init_clients_timer = MEI_CLIENTS_INIT_TIMEOUT;
|
dev->init_clients_timer = MEI_CLIENTS_INIT_TIMEOUT;
|
||||||
dev->me_client_index = next_client_index;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1152,10 +1147,8 @@ int mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr)
|
|||||||
|
|
||||||
mei_hbm_me_cl_add(dev, props_res);
|
mei_hbm_me_cl_add(dev, props_res);
|
||||||
|
|
||||||
dev->me_client_index++;
|
|
||||||
|
|
||||||
/* request property for the next client */
|
/* request property for the next client */
|
||||||
if (mei_hbm_prop_req(dev))
|
if (mei_hbm_prop_req(dev, props_res->me_addr + 1))
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -1181,7 +1174,7 @@ int mei_hbm_dispatch(struct mei_device *dev, struct mei_msg_hdr *hdr)
|
|||||||
dev->hbm_state = MEI_HBM_CLIENT_PROPERTIES;
|
dev->hbm_state = MEI_HBM_CLIENT_PROPERTIES;
|
||||||
|
|
||||||
/* first property request */
|
/* first property request */
|
||||||
if (mei_hbm_prop_req(dev))
|
if (mei_hbm_prop_req(dev, 0))
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -396,7 +396,6 @@ const char *mei_pg_state_str(enum mei_pg_state state);
|
|||||||
* @me_clients : list of FW clients
|
* @me_clients : list of FW clients
|
||||||
* @me_clients_map : FW clients bit map
|
* @me_clients_map : FW clients bit map
|
||||||
* @host_clients_map : host clients id pool
|
* @host_clients_map : host clients id pool
|
||||||
* @me_client_index : last FW client index in enumeration
|
|
||||||
*
|
*
|
||||||
* @allow_fixed_address: allow user space to connect a fixed client
|
* @allow_fixed_address: allow user space to connect a fixed client
|
||||||
* @override_fixed_address: force allow fixed address behavior
|
* @override_fixed_address: force allow fixed address behavior
|
||||||
@ -486,7 +485,6 @@ struct mei_device {
|
|||||||
struct list_head me_clients;
|
struct list_head me_clients;
|
||||||
DECLARE_BITMAP(me_clients_map, MEI_CLIENTS_MAX);
|
DECLARE_BITMAP(me_clients_map, MEI_CLIENTS_MAX);
|
||||||
DECLARE_BITMAP(host_clients_map, MEI_CLIENTS_MAX);
|
DECLARE_BITMAP(host_clients_map, MEI_CLIENTS_MAX);
|
||||||
unsigned long me_client_index;
|
|
||||||
|
|
||||||
bool allow_fixed_address;
|
bool allow_fixed_address;
|
||||||
bool override_fixed_address;
|
bool override_fixed_address;
|
||||||
|
Loading…
Reference in New Issue
Block a user