Commit abc51b6d authored by Oren Weil's avatar Oren Weil Committed by Greg Kroah-Hartman

staging: mei: Organize the initialization state machine.

moving the final state, clearing of the client maps and
updating of mei state out from mei_host_client_properties function.
Acked-by: default avatarTomas Winkler <tomas.winkler@intel.com>
Signed-off-by: default avatarOren Weil <oren.jer.weil@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 8f019bfe
...@@ -470,9 +470,12 @@ void mei_allocate_me_clients_storage(struct mei_device *dev) ...@@ -470,9 +470,12 @@ void mei_allocate_me_clients_storage(struct mei_device *dev)
* *
* @dev: the device structure * @dev: the device structure
* *
* returns none. * returns:
* < 0 - Error.
* = 0 - no more clients.
* = 1 - still have clients to send properties request.
*/ */
void mei_host_client_properties(struct mei_device *dev) int mei_host_client_properties(struct mei_device *dev)
{ {
struct mei_msg_hdr *mei_header; struct mei_msg_hdr *mei_header;
struct hbm_props_request *host_cli_req; struct hbm_props_request *host_cli_req;
...@@ -504,32 +507,15 @@ void mei_host_client_properties(struct mei_device *dev) ...@@ -504,32 +507,15 @@ void mei_host_client_properties(struct mei_device *dev)
dev->mei_state = MEI_RESETING; dev->mei_state = MEI_RESETING;
dev_dbg(&dev->pdev->dev, "write send enumeration request message to FW fail.\n"); dev_dbg(&dev->pdev->dev, "write send enumeration request message to FW fail.\n");
mei_reset(dev, 1); mei_reset(dev, 1);
return; return -EIO;
} }
dev->init_clients_timer = INIT_CLIENTS_TIMEOUT; dev->init_clients_timer = INIT_CLIENTS_TIMEOUT;
dev->me_client_index = b; dev->me_client_index = b;
return; return 1;
} }
return 0;
/*
* Clear Map for indicating now ME clients
* with associated host client
*/
bitmap_zero(dev->host_clients_map, MEI_CLIENTS_MAX);
dev->open_handle_count = 0;
bitmap_set(dev->host_clients_map, 0, 3);
dev->mei_state = MEI_ENABLED;
/* if wd initialization fails, initialization the AMTHI client,
* otherwise the AMTHI client will be initialized after the WD client connect response
* will be received
*/
if (mei_wd_host_init(dev))
mei_host_init_iamthif(dev);
return;
} }
/** /**
......
...@@ -653,6 +653,7 @@ static void mei_irq_thread_read_bus_message(struct mei_device *dev, ...@@ -653,6 +653,7 @@ static void mei_irq_thread_read_bus_message(struct mei_device *dev,
struct hbm_host_enum_response *enum_res; struct hbm_host_enum_response *enum_res;
struct hbm_client_disconnect_request *disconnect_req; struct hbm_client_disconnect_request *disconnect_req;
struct hbm_host_stop_request *host_stop_req; struct hbm_host_stop_request *host_stop_req;
int res;
unsigned char *buffer; unsigned char *buffer;
...@@ -746,7 +747,38 @@ static void mei_irq_thread_read_bus_message(struct mei_device *dev, ...@@ -746,7 +747,38 @@ static void mei_irq_thread_read_bus_message(struct mei_device *dev,
MEI_CLIENT_PROPERTIES_MESSAGE) { MEI_CLIENT_PROPERTIES_MESSAGE) {
dev->me_client_index++; dev->me_client_index++;
dev->me_client_presentation_num++; dev->me_client_presentation_num++;
mei_host_client_properties(dev);
/** Send Client Propeties request **/
res = mei_host_client_properties(dev);
if (res < 0) {
dev_dbg(&dev->pdev->dev, "mei_host_client_properties() failed");
return;
} else if (!res) {
/*
* No more clients to send to.
* Clear Map for indicating now ME clients
* with associated host client
*/
bitmap_zero(dev->host_clients_map, MEI_CLIENTS_MAX);
dev->open_handle_count = 0;
/*
* Reserving the first three client IDs
* Client Id 0 - Reserved for MEI Bus Message communications
* Client Id 1 - Reserved for Watchdog
* Client ID 2 - Reserved for AMTHI
*/
bitmap_set(dev->host_clients_map, 0, 3);
dev->mei_state = MEI_ENABLED;
/* if wd initialization fails, initialization the AMTHI client,
* otherwise the AMTHI client will be initialized after the WD client connect response
* will be received
*/
if (mei_wd_host_init(dev))
mei_host_init_iamthif(dev);
}
} else { } else {
dev_dbg(&dev->pdev->dev, "reset due to received host client properties response bus message"); dev_dbg(&dev->pdev->dev, "reset due to received host client properties response bus message");
mei_reset(dev, 1); mei_reset(dev, 1);
......
...@@ -329,7 +329,7 @@ static inline bool mei_cl_cmp_id(const struct mei_cl *cl1, ...@@ -329,7 +329,7 @@ static inline bool mei_cl_cmp_id(const struct mei_cl *cl1,
*/ */
void mei_host_start_message(struct mei_device *dev); void mei_host_start_message(struct mei_device *dev);
void mei_host_enum_clients_message(struct mei_device *dev); void mei_host_enum_clients_message(struct mei_device *dev);
void mei_host_client_properties(struct mei_device *dev); int mei_host_client_properties(struct mei_device *dev);
/* /*
* MEI interrupt functions prototype * MEI interrupt functions prototype
......
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