aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc/mei/interrupt.c
diff options
context:
space:
mode:
authorTomas Winkler <tomas.winkler@intel.com>2012-11-18 08:13:14 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-11-21 15:43:57 -0500
commit5bd647144151082f0e8beb58741e27e6dbd23827 (patch)
treedc63f6e68046d280135cc1823ef65a03dc63dcda /drivers/misc/mei/interrupt.c
parent2c9e9fdc0b2d55886609f0503fb91f96dfec6948 (diff)
mei: compact code for mei bus message creation
1. replace boilerplate code for filling up the bus message header with a common wrapper function 2. shorten variable names and use temporal variables to save some screen space Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/misc/mei/interrupt.c')
-rw-r--r--drivers/misc/mei/interrupt.c96
1 files changed, 38 insertions, 58 deletions
diff --git a/drivers/misc/mei/interrupt.c b/drivers/misc/mei/interrupt.c
index f8821015f3f6..14becc0d5563 100644
--- a/drivers/misc/mei/interrupt.c
+++ b/drivers/misc/mei/interrupt.c
@@ -429,39 +429,30 @@ static int same_disconn_addr(struct mei_cl *cl,
429static void mei_client_disconnect_request(struct mei_device *dev, 429static void mei_client_disconnect_request(struct mei_device *dev,
430 struct hbm_client_connect_request *disconnect_req) 430 struct hbm_client_connect_request *disconnect_req)
431{ 431{
432 struct mei_msg_hdr *mei_hdr;
433 struct hbm_client_connect_response *disconnect_res; 432 struct hbm_client_connect_response *disconnect_res;
434 struct mei_cl *cl_pos = NULL; 433 struct mei_cl *pos, *next;
435 struct mei_cl *cl_next = NULL; 434 const size_t len = sizeof(struct hbm_client_connect_response);
436 435
437 list_for_each_entry_safe(cl_pos, cl_next, &dev->file_list, link) { 436 list_for_each_entry_safe(pos, next, &dev->file_list, link) {
438 if (same_disconn_addr(cl_pos, disconnect_req)) { 437 if (same_disconn_addr(pos, disconnect_req)) {
439 dev_dbg(&dev->pdev->dev, "disconnect request host client %d ME client %d.\n", 438 dev_dbg(&dev->pdev->dev, "disconnect request host client %d ME client %d.\n",
440 disconnect_req->host_addr, 439 disconnect_req->host_addr,
441 disconnect_req->me_addr); 440 disconnect_req->me_addr);
442 cl_pos->state = MEI_FILE_DISCONNECTED; 441 pos->state = MEI_FILE_DISCONNECTED;
443 cl_pos->timer_count = 0; 442 pos->timer_count = 0;
444 if (cl_pos == &dev->wd_cl) 443 if (pos == &dev->wd_cl)
445 dev->wd_pending = false; 444 dev->wd_pending = false;
446 else if (cl_pos == &dev->iamthif_cl) 445 else if (pos == &dev->iamthif_cl)
447 dev->iamthif_timer = 0; 446 dev->iamthif_timer = 0;
448 447
449 /* prepare disconnect response */ 448 /* prepare disconnect response */
450 mei_hdr = 449 (void)mei_hbm_hdr(&dev->ext_msg_buf[0], len);
451 (struct mei_msg_hdr *) &dev->ext_msg_buf[0];
452 mei_hdr->host_addr = 0;
453 mei_hdr->me_addr = 0;
454 mei_hdr->length =
455 sizeof(struct hbm_client_connect_response);
456 mei_hdr->msg_complete = 1;
457 mei_hdr->reserved = 0;
458
459 disconnect_res = 450 disconnect_res =
460 (struct hbm_client_connect_response *) 451 (struct hbm_client_connect_response *)
461 &dev->ext_msg_buf[1]; 452 &dev->ext_msg_buf[1];
462 disconnect_res->host_addr = cl_pos->host_client_id;
463 disconnect_res->me_addr = cl_pos->me_client_id;
464 disconnect_res->hbm_cmd = CLIENT_DISCONNECT_RES_CMD; 453 disconnect_res->hbm_cmd = CLIENT_DISCONNECT_RES_CMD;
454 disconnect_res->host_addr = pos->host_client_id;
455 disconnect_res->me_addr = pos->me_client_id;
465 disconnect_res->status = 0; 456 disconnect_res->status = 0;
466 dev->extra_write_index = 2; 457 dev->extra_write_index = 2;
467 break; 458 break;
@@ -469,7 +460,6 @@ static void mei_client_disconnect_request(struct mei_device *dev,
469 } 460 }
470} 461}
471 462
472
473/** 463/**
474 * mei_irq_thread_read_bus_message - bottom half read routine after ISR to 464 * mei_irq_thread_read_bus_message - bottom half read routine after ISR to
475 * handle the read bus message cmd processing. 465 * handle the read bus message cmd processing.
@@ -488,7 +478,7 @@ static void mei_irq_thread_read_bus_message(struct mei_device *dev,
488 struct hbm_flow_control *flow_control; 478 struct hbm_flow_control *flow_control;
489 struct hbm_props_response *props_res; 479 struct hbm_props_response *props_res;
490 struct hbm_host_enum_response *enum_res; 480 struct hbm_host_enum_response *enum_res;
491 struct hbm_host_stop_request *host_stop_req; 481 struct hbm_host_stop_request *stop_req;
492 int res; 482 int res;
493 483
494 484
@@ -514,26 +504,20 @@ static void mei_irq_thread_read_bus_message(struct mei_device *dev,
514 return; 504 return;
515 } 505 }
516 } else { 506 } else {
507 u32 *buf = dev->wr_msg_buf;
508 const size_t len = sizeof(struct hbm_host_stop_request);
509
517 dev->version = version_res->me_max_version; 510 dev->version = version_res->me_max_version;
511
518 /* send stop message */ 512 /* send stop message */
519 mei_hdr = (struct mei_msg_hdr *)&dev->wr_msg_buf[0]; 513 mei_hdr = mei_hbm_hdr(&buf[0], len);
520 mei_hdr->host_addr = 0; 514 stop_req = (struct hbm_host_stop_request *)&buf[1];
521 mei_hdr->me_addr = 0; 515 memset(stop_req, 0, len);
522 mei_hdr->length = sizeof(struct hbm_host_stop_request); 516 stop_req->hbm_cmd = HOST_STOP_REQ_CMD;
523 mei_hdr->msg_complete = 1; 517 stop_req->reason = DRIVER_STOP_REQUEST;
524 mei_hdr->reserved = 0; 518
525
526 host_stop_req = (struct hbm_host_stop_request *)
527 &dev->wr_msg_buf[1];
528
529 memset(host_stop_req,
530 0,
531 sizeof(struct hbm_host_stop_request));
532 host_stop_req->hbm_cmd = HOST_STOP_REQ_CMD;
533 host_stop_req->reason = DRIVER_STOP_REQUEST;
534 mei_write_message(dev, mei_hdr, 519 mei_write_message(dev, mei_hdr,
535 (unsigned char *) (host_stop_req), 520 (unsigned char *)stop_req, len);
536 mei_hdr->length);
537 dev_dbg(&dev->pdev->dev, "version mismatch.\n"); 521 dev_dbg(&dev->pdev->dev, "version mismatch.\n");
538 return; 522 return;
539 } 523 }
@@ -543,16 +527,14 @@ static void mei_irq_thread_read_bus_message(struct mei_device *dev,
543 break; 527 break;
544 528
545 case CLIENT_CONNECT_RES_CMD: 529 case CLIENT_CONNECT_RES_CMD:
546 connect_res = 530 connect_res = (struct hbm_client_connect_response *) mei_msg;
547 (struct hbm_client_connect_response *) mei_msg;
548 mei_client_connect_response(dev, connect_res); 531 mei_client_connect_response(dev, connect_res);
549 dev_dbg(&dev->pdev->dev, "client connect response message received.\n"); 532 dev_dbg(&dev->pdev->dev, "client connect response message received.\n");
550 wake_up(&dev->wait_recvd_msg); 533 wake_up(&dev->wait_recvd_msg);
551 break; 534 break;
552 535
553 case CLIENT_DISCONNECT_RES_CMD: 536 case CLIENT_DISCONNECT_RES_CMD:
554 disconnect_res = 537 disconnect_res = (struct hbm_client_connect_response *) mei_msg;
555 (struct hbm_client_connect_response *) mei_msg;
556 mei_client_disconnect_response(dev, disconnect_res); 538 mei_client_disconnect_response(dev, disconnect_res);
557 dev_dbg(&dev->pdev->dev, "client disconnect response message received.\n"); 539 dev_dbg(&dev->pdev->dev, "client disconnect response message received.\n");
558 wake_up(&dev->wait_recvd_msg); 540 wake_up(&dev->wait_recvd_msg);
@@ -658,23 +640,21 @@ static void mei_irq_thread_read_bus_message(struct mei_device *dev,
658 break; 640 break;
659 641
660 case ME_STOP_REQ_CMD: 642 case ME_STOP_REQ_CMD:
661 /* prepare stop request */ 643 {
662 mei_hdr = (struct mei_msg_hdr *) &dev->ext_msg_buf[0]; 644 /* prepare stop request: sent in next interrupt event */
663 mei_hdr->host_addr = 0; 645
664 mei_hdr->me_addr = 0; 646 u32 *buf = dev->ext_msg_buf;
665 mei_hdr->length = sizeof(struct hbm_host_stop_request); 647 const size_t len = sizeof(struct hbm_host_stop_request);
666 mei_hdr->msg_complete = 1; 648
667 mei_hdr->reserved = 0; 649 mei_hdr = mei_hbm_hdr(&buf[0], len);
668 host_stop_req = 650 stop_req = (struct hbm_host_stop_request *)&buf[1];
669 (struct hbm_host_stop_request *) &dev->ext_msg_buf[1]; 651 memset(stop_req, 0, len);
670 memset(host_stop_req, 0, sizeof(struct hbm_host_stop_request)); 652 stop_req->hbm_cmd = HOST_STOP_REQ_CMD;
671 host_stop_req->hbm_cmd = HOST_STOP_REQ_CMD; 653 stop_req->reason = DRIVER_STOP_REQUEST;
672 host_stop_req->reason = DRIVER_STOP_REQUEST; 654
673 host_stop_req->reserved[0] = 0;
674 host_stop_req->reserved[1] = 0;
675 dev->extra_write_index = 2; 655 dev->extra_write_index = 2;
676 break; 656 break;
677 657 }
678 default: 658 default:
679 BUG(); 659 BUG();
680 break; 660 break;