aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc/mei/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/misc/mei/init.c')
-rw-r--r--drivers/misc/mei/init.c78
1 files changed, 34 insertions, 44 deletions
diff --git a/drivers/misc/mei/init.c b/drivers/misc/mei/init.c
index 4fcb0bb2c9f0..02784af1d1a1 100644
--- a/drivers/misc/mei/init.c
+++ b/drivers/misc/mei/init.c
@@ -43,6 +43,7 @@ const char *mei_dev_state_str(int state)
43} 43}
44 44
45 45
46
46/** 47/**
47 * mei_io_list_flush - removes list entry belonging to cl. 48 * mei_io_list_flush - removes list entry belonging to cl.
48 * 49 *
@@ -331,25 +332,20 @@ void mei_reset(struct mei_device *dev, int interrupts_enabled)
331void mei_host_start_message(struct mei_device *dev) 332void mei_host_start_message(struct mei_device *dev)
332{ 333{
333 struct mei_msg_hdr *mei_hdr; 334 struct mei_msg_hdr *mei_hdr;
334 struct hbm_host_version_request *host_start_req; 335 struct hbm_host_version_request *start_req;
336 const size_t len = sizeof(struct hbm_host_version_request);
337
338 mei_hdr = mei_hbm_hdr(&dev->wr_msg_buf[0], len);
335 339
336 /* host start message */ 340 /* host start message */
337 mei_hdr = (struct mei_msg_hdr *) &dev->wr_msg_buf[0]; 341 start_req = (struct hbm_host_version_request *)&dev->wr_msg_buf[1];
338 mei_hdr->host_addr = 0; 342 memset(start_req, 0, len);
339 mei_hdr->me_addr = 0; 343 start_req->hbm_cmd = HOST_START_REQ_CMD;
340 mei_hdr->length = sizeof(struct hbm_host_version_request); 344 start_req->host_version.major_version = HBM_MAJOR_VERSION;
341 mei_hdr->msg_complete = 1; 345 start_req->host_version.minor_version = HBM_MINOR_VERSION;
342 mei_hdr->reserved = 0; 346
343
344 host_start_req =
345 (struct hbm_host_version_request *) &dev->wr_msg_buf[1];
346 memset(host_start_req, 0, sizeof(struct hbm_host_version_request));
347 host_start_req->hbm_cmd = HOST_START_REQ_CMD;
348 host_start_req->host_version.major_version = HBM_MAJOR_VERSION;
349 host_start_req->host_version.minor_version = HBM_MINOR_VERSION;
350 dev->recvd_msg = false; 347 dev->recvd_msg = false;
351 if (mei_write_message(dev, mei_hdr, (unsigned char *)host_start_req, 348 if (mei_write_message(dev, mei_hdr, (unsigned char *)start_req, len)) {
352 mei_hdr->length)) {
353 dev_dbg(&dev->pdev->dev, "write send version message to FW fail.\n"); 349 dev_dbg(&dev->pdev->dev, "write send version message to FW fail.\n");
354 dev->dev_state = MEI_DEV_RESETING; 350 dev->dev_state = MEI_DEV_RESETING;
355 mei_reset(dev, 1); 351 mei_reset(dev, 1);
@@ -369,20 +365,16 @@ void mei_host_start_message(struct mei_device *dev)
369void mei_host_enum_clients_message(struct mei_device *dev) 365void mei_host_enum_clients_message(struct mei_device *dev)
370{ 366{
371 struct mei_msg_hdr *mei_hdr; 367 struct mei_msg_hdr *mei_hdr;
372 struct hbm_host_enum_request *host_enum_req; 368 struct hbm_host_enum_request *enum_req;
373 mei_hdr = (struct mei_msg_hdr *) &dev->wr_msg_buf[0]; 369 const size_t len = sizeof(struct hbm_host_enum_request);
374 /* enumerate clients */ 370 /* enumerate clients */
375 mei_hdr->host_addr = 0; 371 mei_hdr = mei_hbm_hdr(&dev->wr_msg_buf[0], len);
376 mei_hdr->me_addr = 0; 372
377 mei_hdr->length = sizeof(struct hbm_host_enum_request); 373 enum_req = (struct hbm_host_enum_request *) &dev->wr_msg_buf[1];
378 mei_hdr->msg_complete = 1; 374 memset(enum_req, 0, sizeof(struct hbm_host_enum_request));
379 mei_hdr->reserved = 0; 375 enum_req->hbm_cmd = HOST_ENUM_REQ_CMD;
380 376
381 host_enum_req = (struct hbm_host_enum_request *) &dev->wr_msg_buf[1]; 377 if (mei_write_message(dev, mei_hdr, (unsigned char *)enum_req, len)) {
382 memset(host_enum_req, 0, sizeof(struct hbm_host_enum_request));
383 host_enum_req->hbm_cmd = HOST_ENUM_REQ_CMD;
384 if (mei_write_message(dev, mei_hdr, (unsigned char *)host_enum_req,
385 mei_hdr->length)) {
386 dev->dev_state = MEI_DEV_RESETING; 378 dev->dev_state = MEI_DEV_RESETING;
387 dev_dbg(&dev->pdev->dev, "write send enumeration request message to FW fail.\n"); 379 dev_dbg(&dev->pdev->dev, "write send enumeration request message to FW fail.\n");
388 mei_reset(dev, 1); 380 mei_reset(dev, 1);
@@ -443,33 +435,31 @@ void mei_allocate_me_clients_storage(struct mei_device *dev)
443 */ 435 */
444int mei_host_client_properties(struct mei_device *dev) 436int mei_host_client_properties(struct mei_device *dev)
445{ 437{
446 struct mei_msg_hdr *mei_header; 438
447 struct hbm_props_request *host_cli_req; 439 struct mei_msg_hdr *mei_hdr;
440 struct hbm_props_request *prop_req;
441 const size_t len = sizeof(struct hbm_props_request);
442
448 int b; 443 int b;
449 u8 client_num = dev->me_client_presentation_num; 444 u8 client_num = dev->me_client_presentation_num;
450 445
446 prop_req = (struct hbm_props_request *)&dev->wr_msg_buf[1];
447
451 b = dev->me_client_index; 448 b = dev->me_client_index;
452 b = find_next_bit(dev->me_clients_map, MEI_CLIENTS_MAX, b); 449 b = find_next_bit(dev->me_clients_map, MEI_CLIENTS_MAX, b);
453 if (b < MEI_CLIENTS_MAX) { 450 if (b < MEI_CLIENTS_MAX) {
454 dev->me_clients[client_num].client_id = b; 451 dev->me_clients[client_num].client_id = b;
455 dev->me_clients[client_num].mei_flow_ctrl_creds = 0; 452 dev->me_clients[client_num].mei_flow_ctrl_creds = 0;
456 mei_header = (struct mei_msg_hdr *)&dev->wr_msg_buf[0]; 453 mei_hdr = mei_hbm_hdr(&dev->wr_msg_buf[0], len);
457 mei_header->host_addr = 0;
458 mei_header->me_addr = 0;
459 mei_header->length = sizeof(struct hbm_props_request);
460 mei_header->msg_complete = 1;
461 mei_header->reserved = 0;
462 454
463 host_cli_req = (struct hbm_props_request *)&dev->wr_msg_buf[1];
464 455
465 memset(host_cli_req, 0, sizeof(struct hbm_props_request)); 456 memset(prop_req, 0, sizeof(struct hbm_props_request));
466 457
467 host_cli_req->hbm_cmd = HOST_CLIENT_PROPERTIES_REQ_CMD; 458 prop_req->hbm_cmd = HOST_CLIENT_PROPERTIES_REQ_CMD;
468 host_cli_req->address = b; 459 prop_req->address = b;
469 460
470 if (mei_write_message(dev, mei_header, 461 if (mei_write_message(dev, mei_hdr,
471 (unsigned char *)host_cli_req, 462 (unsigned char *)prop_req, len)) {
472 mei_header->length)) {
473 dev->dev_state = MEI_DEV_RESETING; 463 dev->dev_state = MEI_DEV_RESETING;
474 dev_dbg(&dev->pdev->dev, "write send enumeration request message to FW fail.\n"); 464 dev_dbg(&dev->pdev->dev, "write send enumeration request message to FW fail.\n");
475 mei_reset(dev, 1); 465 mei_reset(dev, 1);