aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc/mei/client.c
diff options
context:
space:
mode:
authorTomas Winkler <tomas.winkler@intel.com>2014-08-24 05:08:55 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-09-24 01:57:47 -0400
commitd320832f64666089a06778782e42fac29abd7bf7 (patch)
tree19fd44ea6cd1b93a178763345a736f193284132f /drivers/misc/mei/client.c
parent68d1aa65978b86b2ca5bdf7211b27cfd32c3212d (diff)
mei: me_client lookup function to return me_client object
For support of dynamic addition and removal of me clients it is more convenient to use a list instead of static array as is use now. As the first step of the transition to the new data structure we change the lookup function so it returns me client address instead of an index. Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/misc/mei/client.c')
-rw-r--r--drivers/misc/mei/client.c43
1 files changed, 20 insertions, 23 deletions
diff --git a/drivers/misc/mei/client.c b/drivers/misc/mei/client.c
index 3c5a1d328977..a20e6e9422f8 100644
--- a/drivers/misc/mei/client.c
+++ b/drivers/misc/mei/client.c
@@ -33,18 +33,19 @@
33 * 33 *
34 * Locking: called under "dev->device_lock" lock 34 * Locking: called under "dev->device_lock" lock
35 * 35 *
36 * returns me client index or -ENOENT if not found 36 * returns me client or NULL if not found
37 */ 37 */
38int mei_me_cl_by_uuid(const struct mei_device *dev, const uuid_le *uuid) 38struct mei_me_client *mei_me_cl_by_uuid(const struct mei_device *dev,
39 const uuid_le *uuid)
39{ 40{
40 int i; 41 int i;
41 42
42 for (i = 0; i < dev->me_clients_num; ++i) 43 for (i = 0; i < dev->me_clients_num; ++i)
43 if (uuid_le_cmp(*uuid, 44 if (uuid_le_cmp(*uuid,
44 dev->me_clients[i].props.protocol_name) == 0) 45 dev->me_clients[i].props.protocol_name) == 0)
45 return i; 46 return &dev->me_clients[i];
46 47
47 return -ENOENT; 48 return NULL;
48} 49}
49 50
50 51
@@ -56,18 +57,18 @@ int mei_me_cl_by_uuid(const struct mei_device *dev, const uuid_le *uuid)
56 * 57 *
57 * Locking: called under "dev->device_lock" lock 58 * Locking: called under "dev->device_lock" lock
58 * 59 *
59 * returns index on success, -ENOENT on failure. 60 * returns me client or NULL if not found
60 */ 61 */
61 62
62int mei_me_cl_by_id(struct mei_device *dev, u8 client_id) 63struct mei_me_client *mei_me_cl_by_id(struct mei_device *dev, u8 client_id)
63{ 64{
64 int i; 65 int i;
65 66
66 for (i = 0; i < dev->me_clients_num; i++) 67 for (i = 0; i < dev->me_clients_num; i++)
67 if (dev->me_clients[i].client_id == client_id) 68 if (dev->me_clients[i].client_id == client_id)
68 return i; 69 return &dev->me_clients[i];
69 70
70 return -ENOENT; 71 return NULL;
71} 72}
72 73
73 74
@@ -646,7 +647,6 @@ int mei_cl_flow_ctrl_creds(struct mei_cl *cl)
646{ 647{
647 struct mei_device *dev; 648 struct mei_device *dev;
648 struct mei_me_client *me_cl; 649 struct mei_me_client *me_cl;
649 int id;
650 650
651 if (WARN_ON(!cl || !cl->dev)) 651 if (WARN_ON(!cl || !cl->dev))
652 return -EINVAL; 652 return -EINVAL;
@@ -659,13 +659,12 @@ int mei_cl_flow_ctrl_creds(struct mei_cl *cl)
659 if (cl->mei_flow_ctrl_creds > 0) 659 if (cl->mei_flow_ctrl_creds > 0)
660 return 1; 660 return 1;
661 661
662 id = mei_me_cl_by_id(dev, cl->me_client_id); 662 me_cl = mei_me_cl_by_id(dev, cl->me_client_id);
663 if (id < 0) { 663 if (!me_cl) {
664 cl_err(dev, cl, "no such me client %d\n", cl->me_client_id); 664 cl_err(dev, cl, "no such me client %d\n", cl->me_client_id);
665 return id; 665 return -ENOENT;
666 } 666 }
667 667
668 me_cl = &dev->me_clients[id];
669 if (me_cl->mei_flow_ctrl_creds) { 668 if (me_cl->mei_flow_ctrl_creds) {
670 if (WARN_ON(me_cl->props.single_recv_buf == 0)) 669 if (WARN_ON(me_cl->props.single_recv_buf == 0))
671 return -EINVAL; 670 return -EINVAL;
@@ -688,21 +687,19 @@ int mei_cl_flow_ctrl_reduce(struct mei_cl *cl)
688{ 687{
689 struct mei_device *dev; 688 struct mei_device *dev;
690 struct mei_me_client *me_cl; 689 struct mei_me_client *me_cl;
691 int id;
692 690
693 if (WARN_ON(!cl || !cl->dev)) 691 if (WARN_ON(!cl || !cl->dev))
694 return -EINVAL; 692 return -EINVAL;
695 693
696 dev = cl->dev; 694 dev = cl->dev;
697 695
698 id = mei_me_cl_by_id(dev, cl->me_client_id); 696 me_cl = mei_me_cl_by_id(dev, cl->me_client_id);
699 if (id < 0) { 697 if (!me_cl) {
700 cl_err(dev, cl, "no such me client %d\n", cl->me_client_id); 698 cl_err(dev, cl, "no such me client %d\n", cl->me_client_id);
701 return id; 699 return -ENOENT;
702 } 700 }
703 701
704 me_cl = &dev->me_clients[id]; 702 if (me_cl->props.single_recv_buf) {
705 if (me_cl->props.single_recv_buf != 0) {
706 if (WARN_ON(me_cl->mei_flow_ctrl_creds <= 0)) 703 if (WARN_ON(me_cl->mei_flow_ctrl_creds <= 0))
707 return -EINVAL; 704 return -EINVAL;
708 me_cl->mei_flow_ctrl_creds--; 705 me_cl->mei_flow_ctrl_creds--;
@@ -725,8 +722,8 @@ int mei_cl_read_start(struct mei_cl *cl, size_t length)
725{ 722{
726 struct mei_device *dev; 723 struct mei_device *dev;
727 struct mei_cl_cb *cb; 724 struct mei_cl_cb *cb;
725 struct mei_me_client *me_cl;
728 int rets; 726 int rets;
729 int i;
730 727
731 if (WARN_ON(!cl || !cl->dev)) 728 if (WARN_ON(!cl || !cl->dev))
732 return -ENODEV; 729 return -ENODEV;
@@ -740,8 +737,8 @@ int mei_cl_read_start(struct mei_cl *cl, size_t length)
740 cl_dbg(dev, cl, "read is pending.\n"); 737 cl_dbg(dev, cl, "read is pending.\n");
741 return -EBUSY; 738 return -EBUSY;
742 } 739 }
743 i = mei_me_cl_by_id(dev, cl->me_client_id); 740 me_cl = mei_me_cl_by_id(dev, cl->me_client_id);
744 if (i < 0) { 741 if (!me_cl) {
745 cl_err(dev, cl, "no such me client %d\n", cl->me_client_id); 742 cl_err(dev, cl, "no such me client %d\n", cl->me_client_id);
746 return -ENOTTY; 743 return -ENOTTY;
747 } 744 }
@@ -760,7 +757,7 @@ int mei_cl_read_start(struct mei_cl *cl, size_t length)
760 } 757 }
761 758
762 /* always allocate at least client max message */ 759 /* always allocate at least client max message */
763 length = max_t(size_t, length, dev->me_clients[i].props.max_msg_length); 760 length = max_t(size_t, length, me_cl->props.max_msg_length);
764 rets = mei_io_cb_alloc_resp_buf(cb, length); 761 rets = mei_io_cb_alloc_resp_buf(cb, length);
765 if (rets) 762 if (rets)
766 goto out; 763 goto out;