diff options
author | Tomas Winkler <tomas.winkler@intel.com> | 2013-01-08 16:07:14 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-01-08 19:40:44 -0500 |
commit | 90e0b5f18569bdd03c5ddd1d8c99946f42af77b8 (patch) | |
tree | 2d70ede445345397032a92fe9f5e24eb8d3c4981 /drivers/misc | |
parent | 9ca9050b3df690d9d44e39424ab2a531120af936 (diff) |
mei: fix client functions names
Use common prefix for function names:
mei_cl_ - for host clients
mei_me_ - for me clients
mei_io_ - for io callback functions
Because mei_cl holds mei_device back pointer
we can also drop the dev argument from the client
functions
add client.h header to export the clients API
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/misc')
-rw-r--r-- | drivers/misc/mei/amthif.c | 9 | ||||
-rw-r--r-- | drivers/misc/mei/client.c | 221 | ||||
-rw-r--r-- | drivers/misc/mei/client.h | 97 | ||||
-rw-r--r-- | drivers/misc/mei/init.c | 6 | ||||
-rw-r--r-- | drivers/misc/mei/interface.h | 8 | ||||
-rw-r--r-- | drivers/misc/mei/interrupt.c | 11 | ||||
-rw-r--r-- | drivers/misc/mei/main.c | 47 | ||||
-rw-r--r-- | drivers/misc/mei/mei_dev.h | 53 | ||||
-rw-r--r-- | drivers/misc/mei/wd.c | 13 |
9 files changed, 267 insertions, 198 deletions
diff --git a/drivers/misc/mei/amthif.c b/drivers/misc/mei/amthif.c index add4254eb850..cbc9c4e4e321 100644 --- a/drivers/misc/mei/amthif.c +++ b/drivers/misc/mei/amthif.c | |||
@@ -36,6 +36,7 @@ | |||
36 | #include "mei_dev.h" | 36 | #include "mei_dev.h" |
37 | #include "hbm.h" | 37 | #include "hbm.h" |
38 | #include "interface.h" | 38 | #include "interface.h" |
39 | #include "client.h" | ||
39 | 40 | ||
40 | const uuid_le mei_amthi_guid = UUID_LE(0x12f80028, 0xb4b7, 0x4b2d, 0xac, | 41 | const uuid_le mei_amthi_guid = UUID_LE(0x12f80028, 0xb4b7, 0x4b2d, 0xac, |
41 | 0xa8, 0x46, 0xe0, 0xff, 0x65, | 42 | 0xa8, 0x46, 0xe0, 0xff, 0x65, |
@@ -73,7 +74,7 @@ void mei_amthif_host_init(struct mei_device *dev) | |||
73 | dev->iamthif_cl.state = MEI_FILE_DISCONNECTED; | 74 | dev->iamthif_cl.state = MEI_FILE_DISCONNECTED; |
74 | 75 | ||
75 | /* find ME amthi client */ | 76 | /* find ME amthi client */ |
76 | i = mei_me_cl_link(dev, &dev->iamthif_cl, | 77 | i = mei_cl_link_me(&dev->iamthif_cl, |
77 | &mei_amthi_guid, MEI_IAMTHIF_HOST_CLIENT_ID); | 78 | &mei_amthi_guid, MEI_IAMTHIF_HOST_CLIENT_ID); |
78 | if (i < 0) { | 79 | if (i < 0) { |
79 | dev_info(&dev->pdev->dev, "failed to find iamthif client.\n"); | 80 | dev_info(&dev->pdev->dev, "failed to find iamthif client.\n"); |
@@ -280,7 +281,7 @@ static int mei_amthif_send_cmd(struct mei_device *dev, struct mei_cl_cb *cb) | |||
280 | memcpy(dev->iamthif_msg_buf, cb->request_buffer.data, | 281 | memcpy(dev->iamthif_msg_buf, cb->request_buffer.data, |
281 | cb->request_buffer.size); | 282 | cb->request_buffer.size); |
282 | 283 | ||
283 | ret = mei_flow_ctrl_creds(dev, &dev->iamthif_cl); | 284 | ret = mei_cl_flow_ctrl_creds(&dev->iamthif_cl); |
284 | if (ret < 0) | 285 | if (ret < 0) |
285 | return ret; | 286 | return ret; |
286 | 287 | ||
@@ -304,7 +305,7 @@ static int mei_amthif_send_cmd(struct mei_device *dev, struct mei_cl_cb *cb) | |||
304 | return -ENODEV; | 305 | return -ENODEV; |
305 | 306 | ||
306 | if (mei_hdr.msg_complete) { | 307 | if (mei_hdr.msg_complete) { |
307 | if (mei_flow_ctrl_reduce(dev, &dev->iamthif_cl)) | 308 | if (mei_cl_flow_ctrl_reduce(&dev->iamthif_cl)) |
308 | return -ENODEV; | 309 | return -ENODEV; |
309 | dev->iamthif_flow_control_pending = true; | 310 | dev->iamthif_flow_control_pending = true; |
310 | dev->iamthif_state = MEI_IAMTHIF_FLOW_CONTROL; | 311 | dev->iamthif_state = MEI_IAMTHIF_FLOW_CONTROL; |
@@ -467,7 +468,7 @@ int mei_amthif_irq_write_complete(struct mei_device *dev, s32 *slots, | |||
467 | return -ENODEV; | 468 | return -ENODEV; |
468 | } | 469 | } |
469 | 470 | ||
470 | if (mei_flow_ctrl_reduce(dev, cl)) | 471 | if (mei_cl_flow_ctrl_reduce(cl)) |
471 | return -ENODEV; | 472 | return -ENODEV; |
472 | 473 | ||
473 | dev->iamthif_msg_buf_index += mei_hdr.length; | 474 | dev->iamthif_msg_buf_index += mei_hdr.length; |
diff --git a/drivers/misc/mei/client.c b/drivers/misc/mei/client.c index 19f62073fa67..e300637c89ed 100644 --- a/drivers/misc/mei/client.c +++ b/drivers/misc/mei/client.c | |||
@@ -24,6 +24,54 @@ | |||
24 | #include "mei_dev.h" | 24 | #include "mei_dev.h" |
25 | #include "hbm.h" | 25 | #include "hbm.h" |
26 | #include "interface.h" | 26 | #include "interface.h" |
27 | #include "client.h" | ||
28 | |||
29 | /** | ||
30 | * mei_me_cl_by_uuid - locate index of me client | ||
31 | * | ||
32 | * @dev: mei device | ||
33 | * returns me client index or -ENOENT if not found | ||
34 | */ | ||
35 | int mei_me_cl_by_uuid(const struct mei_device *dev, const uuid_le *uuid) | ||
36 | { | ||
37 | int i, res = -ENOENT; | ||
38 | |||
39 | for (i = 0; i < dev->me_clients_num; ++i) | ||
40 | if (uuid_le_cmp(*uuid, | ||
41 | dev->me_clients[i].props.protocol_name) == 0) { | ||
42 | res = i; | ||
43 | break; | ||
44 | } | ||
45 | |||
46 | return res; | ||
47 | } | ||
48 | |||
49 | |||
50 | /** | ||
51 | * mei_me_cl_by_id return index to me_clients for client_id | ||
52 | * | ||
53 | * @dev: the device structure | ||
54 | * @client_id: me client id | ||
55 | * | ||
56 | * Locking: called under "dev->device_lock" lock | ||
57 | * | ||
58 | * returns index on success, -ENOENT on failure. | ||
59 | */ | ||
60 | |||
61 | int mei_me_cl_by_id(struct mei_device *dev, u8 client_id) | ||
62 | { | ||
63 | int i; | ||
64 | for (i = 0; i < dev->me_clients_num; i++) | ||
65 | if (dev->me_clients[i].client_id == client_id) | ||
66 | break; | ||
67 | if (WARN_ON(dev->me_clients[i].client_id != client_id)) | ||
68 | return -ENOENT; | ||
69 | |||
70 | if (i == dev->me_clients_num) | ||
71 | return -ENOENT; | ||
72 | |||
73 | return i; | ||
74 | } | ||
27 | 75 | ||
28 | 76 | ||
29 | /** | 77 | /** |
@@ -141,7 +189,7 @@ int mei_io_cb_alloc_resp_buf(struct mei_cl_cb *cb, size_t length) | |||
141 | */ | 189 | */ |
142 | int mei_cl_flush_queues(struct mei_cl *cl) | 190 | int mei_cl_flush_queues(struct mei_cl *cl) |
143 | { | 191 | { |
144 | if (!cl || !cl->dev) | 192 | if (WARN_ON(!cl || !cl->dev)) |
145 | return -EINVAL; | 193 | return -EINVAL; |
146 | 194 | ||
147 | dev_dbg(&cl->dev->pdev->dev, "remove list entry belonging to cl\n"); | 195 | dev_dbg(&cl->dev->pdev->dev, "remove list entry belonging to cl\n"); |
@@ -155,52 +203,6 @@ int mei_cl_flush_queues(struct mei_cl *cl) | |||
155 | return 0; | 203 | return 0; |
156 | } | 204 | } |
157 | 205 | ||
158 | /** | ||
159 | * mei_me_cl_by_uuid - locate index of me client | ||
160 | * | ||
161 | * @dev: mei device | ||
162 | * returns me client index or -ENOENT if not found | ||
163 | */ | ||
164 | int mei_me_cl_by_uuid(const struct mei_device *dev, const uuid_le *uuid) | ||
165 | { | ||
166 | int i, res = -ENOENT; | ||
167 | |||
168 | for (i = 0; i < dev->me_clients_num; ++i) | ||
169 | if (uuid_le_cmp(*uuid, | ||
170 | dev->me_clients[i].props.protocol_name) == 0) { | ||
171 | res = i; | ||
172 | break; | ||
173 | } | ||
174 | |||
175 | return res; | ||
176 | } | ||
177 | |||
178 | |||
179 | /** | ||
180 | * mei_me_cl_by_id return index to me_clients for client_id | ||
181 | * | ||
182 | * @dev: the device structure | ||
183 | * @client_id: me client id | ||
184 | * | ||
185 | * Locking: called under "dev->device_lock" lock | ||
186 | * | ||
187 | * returns index on success, -ENOENT on failure. | ||
188 | */ | ||
189 | |||
190 | int mei_me_cl_by_id(struct mei_device *dev, u8 client_id) | ||
191 | { | ||
192 | int i; | ||
193 | for (i = 0; i < dev->me_clients_num; i++) | ||
194 | if (dev->me_clients[i].client_id == client_id) | ||
195 | break; | ||
196 | if (WARN_ON(dev->me_clients[i].client_id != client_id)) | ||
197 | return -ENOENT; | ||
198 | |||
199 | if (i == dev->me_clients_num) | ||
200 | return -ENOENT; | ||
201 | |||
202 | return i; | ||
203 | } | ||
204 | 206 | ||
205 | /** | 207 | /** |
206 | * mei_cl_init - initializes intialize cl. | 208 | * mei_cl_init - initializes intialize cl. |
@@ -239,12 +241,29 @@ struct mei_cl *mei_cl_allocate(struct mei_device *dev) | |||
239 | return cl; | 241 | return cl; |
240 | } | 242 | } |
241 | 243 | ||
244 | /** | ||
245 | * mei_cl_find_read_cb - find this cl's callback in the read list | ||
246 | * | ||
247 | * @dev: device structure | ||
248 | * returns cb on success, NULL on error | ||
249 | */ | ||
250 | struct mei_cl_cb *mei_cl_find_read_cb(struct mei_cl *cl) | ||
251 | { | ||
252 | struct mei_device *dev = cl->dev; | ||
253 | struct mei_cl_cb *cb = NULL; | ||
254 | struct mei_cl_cb *next = NULL; | ||
255 | |||
256 | list_for_each_entry_safe(cb, next, &dev->read_list.list, list) | ||
257 | if (mei_cl_cmp_id(cl, cb->cl)) | ||
258 | return cb; | ||
259 | return NULL; | ||
260 | } | ||
261 | |||
242 | 262 | ||
243 | /** | 263 | /** |
244 | * mei_me_cl_link - create link between host and me clinet and add | 264 | * mei_me_cl_link - create link between host and me clinet and add |
245 | * me_cl to the list | 265 | * me_cl to the list |
246 | * | 266 | * |
247 | * @dev: the device structure | ||
248 | * @cl: link between me and host client assocated with opened file descriptor | 267 | * @cl: link between me and host client assocated with opened file descriptor |
249 | * @uuid: uuid of ME client | 268 | * @uuid: uuid of ME client |
250 | * @client_id: id of the host client | 269 | * @client_id: id of the host client |
@@ -253,14 +272,16 @@ struct mei_cl *mei_cl_allocate(struct mei_device *dev) | |||
253 | * -EINVAL on incorrect values | 272 | * -EINVAL on incorrect values |
254 | * -ENONET if client not found | 273 | * -ENONET if client not found |
255 | */ | 274 | */ |
256 | int mei_me_cl_link(struct mei_device *dev, struct mei_cl *cl, | 275 | int mei_cl_link_me(struct mei_cl *cl, const uuid_le *uuid, u8 host_cl_id) |
257 | const uuid_le *uuid, u8 host_cl_id) | ||
258 | { | 276 | { |
277 | struct mei_device *dev; | ||
259 | int i; | 278 | int i; |
260 | 279 | ||
261 | if (!dev || !cl || !uuid) | 280 | if (WARN_ON(!cl || !cl->dev || !uuid)) |
262 | return -EINVAL; | 281 | return -EINVAL; |
263 | 282 | ||
283 | dev = cl->dev; | ||
284 | |||
264 | /* check for valid client id */ | 285 | /* check for valid client id */ |
265 | i = mei_me_cl_by_uuid(dev, uuid); | 286 | i = mei_me_cl_by_uuid(dev, uuid); |
266 | if (i >= 0) { | 287 | if (i >= 0) { |
@@ -275,22 +296,30 @@ int mei_me_cl_link(struct mei_device *dev, struct mei_cl *cl, | |||
275 | return -ENOENT; | 296 | return -ENOENT; |
276 | } | 297 | } |
277 | /** | 298 | /** |
278 | * mei_me_cl_unlink - remove me_cl from the list | 299 | * mei_cl_unlink - remove me_cl from the list |
279 | * | 300 | * |
280 | * @dev: the device structure | 301 | * @dev: the device structure |
281 | * @host_client_id: host client id to be removed | 302 | * @host_client_id: host client id to be removed |
282 | */ | 303 | */ |
283 | void mei_me_cl_unlink(struct mei_device *dev, struct mei_cl *cl) | 304 | int mei_cl_unlink(struct mei_cl *cl) |
284 | { | 305 | { |
306 | struct mei_device *dev; | ||
285 | struct mei_cl *pos, *next; | 307 | struct mei_cl *pos, *next; |
308 | |||
309 | if (WARN_ON(!cl || !cl->dev)) | ||
310 | return -EINVAL; | ||
311 | |||
312 | dev = cl->dev; | ||
313 | |||
286 | list_for_each_entry_safe(pos, next, &dev->file_list, link) { | 314 | list_for_each_entry_safe(pos, next, &dev->file_list, link) { |
287 | if (cl->host_client_id == pos->host_client_id) { | 315 | if (cl->host_client_id == pos->host_client_id) { |
288 | dev_dbg(&dev->pdev->dev, "remove host client = %d, ME client = %d\n", | 316 | dev_dbg(&dev->pdev->dev, "remove host client = %d, ME client = %d\n", |
289 | pos->host_client_id, pos->me_client_id); | 317 | pos->host_client_id, pos->me_client_id); |
290 | list_del_init(&pos->link); | 318 | list_del_init(&pos->link); |
291 | break; | 319 | break; |
292 | } | 320 | } |
293 | } | 321 | } |
322 | return 0; | ||
294 | } | 323 | } |
295 | 324 | ||
296 | 325 | ||
@@ -330,23 +359,25 @@ void mei_host_client_init(struct work_struct *work) | |||
330 | 359 | ||
331 | 360 | ||
332 | /** | 361 | /** |
333 | * mei_disconnect_host_client - sends disconnect message to fw from host client. | 362 | * mei_cl_disconnect - disconnect host clinet form the me one |
334 | * | 363 | * |
335 | * @dev: the device structure | 364 | * @cl: host client |
336 | * @cl: private data of the file object | ||
337 | * | 365 | * |
338 | * Locking: called under "dev->device_lock" lock | 366 | * Locking: called under "dev->device_lock" lock |
339 | * | 367 | * |
340 | * returns 0 on success, <0 on failure. | 368 | * returns 0 on success, <0 on failure. |
341 | */ | 369 | */ |
342 | int mei_disconnect_host_client(struct mei_device *dev, struct mei_cl *cl) | 370 | int mei_cl_disconnect(struct mei_cl *cl) |
343 | { | 371 | { |
372 | struct mei_device *dev; | ||
344 | struct mei_cl_cb *cb; | 373 | struct mei_cl_cb *cb; |
345 | int rets, err; | 374 | int rets, err; |
346 | 375 | ||
347 | if (!dev || !cl) | 376 | if (WARN_ON(!cl || !cl->dev)) |
348 | return -ENODEV; | 377 | return -ENODEV; |
349 | 378 | ||
379 | dev = cl->dev; | ||
380 | |||
350 | if (cl->state != MEI_FILE_DISCONNECTING) | 381 | if (cl->state != MEI_FILE_DISCONNECTING) |
351 | return 0; | 382 | return 0; |
352 | 383 | ||
@@ -401,32 +432,36 @@ free: | |||
401 | 432 | ||
402 | 433 | ||
403 | /** | 434 | /** |
404 | * mei_other_client_is_connecting - checks if other | 435 | * mei_cl_is_other_connecting - checks if other |
405 | * client with the same client id is connected. | 436 | * client with the same me client id is connecting |
406 | * | 437 | * |
407 | * @dev: the device structure | ||
408 | * @cl: private data of the file object | 438 | * @cl: private data of the file object |
409 | * | 439 | * |
410 | * returns 1 if other client is connected, 0 - otherwise. | 440 | * returns ture if other client is connected, 0 - otherwise. |
411 | */ | 441 | */ |
412 | int mei_other_client_is_connecting(struct mei_device *dev, | 442 | bool mei_cl_is_other_connecting(struct mei_cl *cl) |
413 | struct mei_cl *cl) | ||
414 | { | 443 | { |
415 | struct mei_cl *cl_pos = NULL; | 444 | struct mei_device *dev; |
416 | struct mei_cl *cl_next = NULL; | 445 | struct mei_cl *pos; |
446 | struct mei_cl *next; | ||
417 | 447 | ||
418 | list_for_each_entry_safe(cl_pos, cl_next, &dev->file_list, link) { | 448 | if (WARN_ON(!cl || !cl->dev)) |
419 | if ((cl_pos->state == MEI_FILE_CONNECTING) && | 449 | return false; |
420 | (cl_pos != cl) && | 450 | |
421 | cl->me_client_id == cl_pos->me_client_id) | 451 | dev = cl->dev; |
422 | return 1; | 452 | |
453 | list_for_each_entry_safe(pos, next, &dev->file_list, link) { | ||
454 | if ((pos->state == MEI_FILE_CONNECTING) && | ||
455 | (pos != cl) && cl->me_client_id == pos->me_client_id) | ||
456 | return true; | ||
423 | 457 | ||
424 | } | 458 | } |
425 | return 0; | 459 | |
460 | return false; | ||
426 | } | 461 | } |
427 | 462 | ||
428 | /** | 463 | /** |
429 | * mei_flow_ctrl_creds - checks flow_control credentials. | 464 | * mei_cl_flow_ctrl_creds - checks flow_control credits for cl. |
430 | * | 465 | * |
431 | * @dev: the device structure | 466 | * @dev: the device structure |
432 | * @cl: private data of the file object | 467 | * @cl: private data of the file object |
@@ -435,10 +470,16 @@ int mei_other_client_is_connecting(struct mei_device *dev, | |||
435 | * -ENOENT if mei_cl is not present | 470 | * -ENOENT if mei_cl is not present |
436 | * -EINVAL if single_recv_buf == 0 | 471 | * -EINVAL if single_recv_buf == 0 |
437 | */ | 472 | */ |
438 | int mei_flow_ctrl_creds(struct mei_device *dev, struct mei_cl *cl) | 473 | int mei_cl_flow_ctrl_creds(struct mei_cl *cl) |
439 | { | 474 | { |
475 | struct mei_device *dev; | ||
440 | int i; | 476 | int i; |
441 | 477 | ||
478 | if (WARN_ON(!cl || !cl->dev)) | ||
479 | return -EINVAL; | ||
480 | |||
481 | dev = cl->dev; | ||
482 | |||
442 | if (!dev->me_clients_num) | 483 | if (!dev->me_clients_num) |
443 | return 0; | 484 | return 0; |
444 | 485 | ||
@@ -461,7 +502,7 @@ int mei_flow_ctrl_creds(struct mei_device *dev, struct mei_cl *cl) | |||
461 | } | 502 | } |
462 | 503 | ||
463 | /** | 504 | /** |
464 | * mei_flow_ctrl_reduce - reduces flow_control. | 505 | * mei_cl_flow_ctrl_reduce - reduces flow_control. |
465 | * | 506 | * |
466 | * @dev: the device structure | 507 | * @dev: the device structure |
467 | * @cl: private data of the file object | 508 | * @cl: private data of the file object |
@@ -470,10 +511,16 @@ int mei_flow_ctrl_creds(struct mei_device *dev, struct mei_cl *cl) | |||
470 | * -ENOENT when me client is not found | 511 | * -ENOENT when me client is not found |
471 | * -EINVAL when ctrl credits are <= 0 | 512 | * -EINVAL when ctrl credits are <= 0 |
472 | */ | 513 | */ |
473 | int mei_flow_ctrl_reduce(struct mei_device *dev, struct mei_cl *cl) | 514 | int mei_cl_flow_ctrl_reduce(struct mei_cl *cl) |
474 | { | 515 | { |
516 | struct mei_device *dev; | ||
475 | int i; | 517 | int i; |
476 | 518 | ||
519 | if (WARN_ON(!cl || !cl->dev)) | ||
520 | return -EINVAL; | ||
521 | |||
522 | dev = cl->dev; | ||
523 | |||
477 | if (!dev->me_clients_num) | 524 | if (!dev->me_clients_num) |
478 | return -ENOENT; | 525 | return -ENOENT; |
479 | 526 | ||
@@ -571,7 +618,7 @@ int mei_ioctl_connect_client(struct file *file, | |||
571 | goto end; | 618 | goto end; |
572 | } | 619 | } |
573 | clear_bit(cl->host_client_id, dev->host_clients_map); | 620 | clear_bit(cl->host_client_id, dev->host_clients_map); |
574 | mei_me_cl_unlink(dev, cl); | 621 | mei_cl_unlink(cl); |
575 | 622 | ||
576 | kfree(cl); | 623 | kfree(cl); |
577 | cl = NULL; | 624 | cl = NULL; |
@@ -598,8 +645,8 @@ int mei_ioctl_connect_client(struct file *file, | |||
598 | client->max_msg_length = dev->me_clients[i].props.max_msg_length; | 645 | client->max_msg_length = dev->me_clients[i].props.max_msg_length; |
599 | client->protocol_version = dev->me_clients[i].props.protocol_version; | 646 | client->protocol_version = dev->me_clients[i].props.protocol_version; |
600 | dev_dbg(&dev->pdev->dev, "Can connect?\n"); | 647 | dev_dbg(&dev->pdev->dev, "Can connect?\n"); |
601 | if (dev->mei_host_buffer_is_empty | 648 | if (dev->mei_host_buffer_is_empty && |
602 | && !mei_other_client_is_connecting(dev, cl)) { | 649 | !mei_cl_is_other_connecting(cl)) { |
603 | dev_dbg(&dev->pdev->dev, "Sending Connect Message\n"); | 650 | dev_dbg(&dev->pdev->dev, "Sending Connect Message\n"); |
604 | dev->mei_host_buffer_is_empty = false; | 651 | dev->mei_host_buffer_is_empty = false; |
605 | if (mei_hbm_cl_connect_req(dev, cl)) { | 652 | if (mei_hbm_cl_connect_req(dev, cl)) { |
@@ -650,20 +697,24 @@ end: | |||
650 | } | 697 | } |
651 | 698 | ||
652 | /** | 699 | /** |
653 | * mei_start_read - the start read client message function. | 700 | * mei_cl_start_read - the start read client message function. |
654 | * | 701 | * |
655 | * @dev: the device structure | 702 | * @cl: host client |
656 | * @if_num: minor number | ||
657 | * @cl: private data of the file object | ||
658 | * | 703 | * |
659 | * returns 0 on success, <0 on failure. | 704 | * returns 0 on success, <0 on failure. |
660 | */ | 705 | */ |
661 | int mei_start_read(struct mei_device *dev, struct mei_cl *cl) | 706 | int mei_cl_read_start(struct mei_cl *cl) |
662 | { | 707 | { |
708 | struct mei_device *dev; | ||
663 | struct mei_cl_cb *cb; | 709 | struct mei_cl_cb *cb; |
664 | int rets; | 710 | int rets; |
665 | int i; | 711 | int i; |
666 | 712 | ||
713 | if (WARN_ON(!cl || !cl->dev)) | ||
714 | return -ENODEV; | ||
715 | |||
716 | dev = cl->dev; | ||
717 | |||
667 | if (cl->state != MEI_FILE_CONNECTED) | 718 | if (cl->state != MEI_FILE_CONNECTED) |
668 | return -ENODEV; | 719 | return -ENODEV; |
669 | 720 | ||
diff --git a/drivers/misc/mei/client.h b/drivers/misc/mei/client.h new file mode 100644 index 000000000000..8dfd052dd0e6 --- /dev/null +++ b/drivers/misc/mei/client.h | |||
@@ -0,0 +1,97 @@ | |||
1 | /* | ||
2 | * | ||
3 | * Intel Management Engine Interface (Intel MEI) Linux driver | ||
4 | * Copyright (c) 2003-2012, Intel Corporation. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms and conditions of the GNU General Public License, | ||
8 | * version 2, as published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
11 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
12 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
13 | * more details. | ||
14 | * | ||
15 | */ | ||
16 | |||
17 | #ifndef _MEI_CLIENT_H_ | ||
18 | #define _MEI_CLIENT_H_ | ||
19 | |||
20 | #include <linux/types.h> | ||
21 | #include <linux/watchdog.h> | ||
22 | #include <linux/poll.h> | ||
23 | #include <linux/mei.h> | ||
24 | |||
25 | #include "mei_dev.h" | ||
26 | |||
27 | int mei_me_cl_by_uuid(const struct mei_device *dev, const uuid_le *cuuid); | ||
28 | int mei_me_cl_by_id(struct mei_device *dev, u8 client_id); | ||
29 | |||
30 | /* | ||
31 | * MEI IO Functions | ||
32 | */ | ||
33 | struct mei_cl_cb *mei_io_cb_init(struct mei_cl *cl, struct file *fp); | ||
34 | void mei_io_cb_free(struct mei_cl_cb *priv_cb); | ||
35 | int mei_io_cb_alloc_req_buf(struct mei_cl_cb *cb, size_t length); | ||
36 | int mei_io_cb_alloc_resp_buf(struct mei_cl_cb *cb, size_t length); | ||
37 | |||
38 | |||
39 | /** | ||
40 | * mei_io_list_init - Sets up a queue list. | ||
41 | * | ||
42 | * @list: An instance cl callback structure | ||
43 | */ | ||
44 | static inline void mei_io_list_init(struct mei_cl_cb *list) | ||
45 | { | ||
46 | INIT_LIST_HEAD(&list->list); | ||
47 | } | ||
48 | void mei_io_list_flush(struct mei_cl_cb *list, struct mei_cl *cl); | ||
49 | |||
50 | /* | ||
51 | * MEI Host Client Functions | ||
52 | */ | ||
53 | |||
54 | struct mei_cl *mei_cl_allocate(struct mei_device *dev); | ||
55 | void mei_cl_init(struct mei_cl *cl, struct mei_device *dev); | ||
56 | |||
57 | |||
58 | int mei_cl_link_me(struct mei_cl *cl, const uuid_le *uuid, u8 host_cl_id); | ||
59 | int mei_cl_unlink(struct mei_cl *cl); | ||
60 | |||
61 | int mei_cl_flush_queues(struct mei_cl *cl); | ||
62 | struct mei_cl_cb *mei_cl_find_read_cb(struct mei_cl *cl); | ||
63 | |||
64 | /** | ||
65 | * mei_cl_cmp_id - tells if file private data have same id | ||
66 | * | ||
67 | * @fe1: private data of 1. file object | ||
68 | * @fe2: private data of 2. file object | ||
69 | * | ||
70 | * returns true - if ids are the same and not NULL | ||
71 | */ | ||
72 | static inline bool mei_cl_cmp_id(const struct mei_cl *cl1, | ||
73 | const struct mei_cl *cl2) | ||
74 | { | ||
75 | return cl1 && cl2 && | ||
76 | (cl1->host_client_id == cl2->host_client_id) && | ||
77 | (cl1->me_client_id == cl2->me_client_id); | ||
78 | } | ||
79 | |||
80 | |||
81 | int mei_cl_flow_ctrl_creds(struct mei_cl *cl); | ||
82 | |||
83 | int mei_cl_flow_ctrl_reduce(struct mei_cl *cl); | ||
84 | /* | ||
85 | * MEI input output function prototype | ||
86 | */ | ||
87 | bool mei_cl_is_other_connecting(struct mei_cl *cl); | ||
88 | int mei_cl_disconnect(struct mei_cl *cl); | ||
89 | |||
90 | int mei_cl_read_start(struct mei_cl *cl); | ||
91 | |||
92 | int mei_cl_connect(struct mei_cl *cl, struct file *file); | ||
93 | |||
94 | void mei_host_client_init(struct work_struct *work); | ||
95 | |||
96 | |||
97 | #endif /* _MEI_CLIENT_H_ */ | ||
diff --git a/drivers/misc/mei/init.c b/drivers/misc/mei/init.c index 6c1f1f838d2b..7028dbd99cf7 100644 --- a/drivers/misc/mei/init.c +++ b/drivers/misc/mei/init.c | |||
@@ -23,6 +23,7 @@ | |||
23 | 23 | ||
24 | #include "mei_dev.h" | 24 | #include "mei_dev.h" |
25 | #include "interface.h" | 25 | #include "interface.h" |
26 | #include "client.h" | ||
26 | 27 | ||
27 | const char *mei_dev_state_str(int state) | 28 | const char *mei_dev_state_str(int state) |
28 | { | 29 | { |
@@ -241,9 +242,8 @@ void mei_reset(struct mei_device *dev, int interrupts_enabled) | |||
241 | } | 242 | } |
242 | /* remove entry if already in list */ | 243 | /* remove entry if already in list */ |
243 | dev_dbg(&dev->pdev->dev, "remove iamthif and wd from the file list.\n"); | 244 | dev_dbg(&dev->pdev->dev, "remove iamthif and wd from the file list.\n"); |
244 | mei_me_cl_unlink(dev, &dev->wd_cl); | 245 | mei_cl_unlink(&dev->wd_cl); |
245 | 246 | mei_cl_unlink(&dev->iamthif_cl); | |
246 | mei_me_cl_unlink(dev, &dev->iamthif_cl); | ||
247 | 247 | ||
248 | mei_amthif_reset_params(dev); | 248 | mei_amthif_reset_params(dev); |
249 | memset(&dev->wr_ext_msg, 0, sizeof(dev->wr_ext_msg)); | 249 | memset(&dev->wr_ext_msg, 0, sizeof(dev->wr_ext_msg)); |
diff --git a/drivers/misc/mei/interface.h b/drivers/misc/mei/interface.h index 3d06c087ddd2..01d1ef518595 100644 --- a/drivers/misc/mei/interface.h +++ b/drivers/misc/mei/interface.h | |||
@@ -50,7 +50,6 @@ static inline unsigned char mei_data2slots(size_t length) | |||
50 | int mei_count_full_read_slots(struct mei_device *dev); | 50 | int mei_count_full_read_slots(struct mei_device *dev); |
51 | 51 | ||
52 | 52 | ||
53 | int mei_flow_ctrl_creds(struct mei_device *dev, struct mei_cl *cl); | ||
54 | 53 | ||
55 | 54 | ||
56 | 55 | ||
@@ -69,12 +68,5 @@ void mei_watchdog_register(struct mei_device *dev); | |||
69 | */ | 68 | */ |
70 | void mei_watchdog_unregister(struct mei_device *dev); | 69 | void mei_watchdog_unregister(struct mei_device *dev); |
71 | 70 | ||
72 | int mei_other_client_is_connecting(struct mei_device *dev, struct mei_cl *cl); | ||
73 | int mei_flow_ctrl_reduce(struct mei_device *dev, struct mei_cl *cl); | ||
74 | |||
75 | void mei_host_client_init(struct work_struct *work); | ||
76 | |||
77 | |||
78 | |||
79 | 71 | ||
80 | #endif /* _MEI_INTERFACE_H_ */ | 72 | #endif /* _MEI_INTERFACE_H_ */ |
diff --git a/drivers/misc/mei/interrupt.c b/drivers/misc/mei/interrupt.c index 2495e35ccb27..0a141afcea89 100644 --- a/drivers/misc/mei/interrupt.c +++ b/drivers/misc/mei/interrupt.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include "mei_dev.h" | 26 | #include "mei_dev.h" |
27 | #include "hbm.h" | 27 | #include "hbm.h" |
28 | #include "interface.h" | 28 | #include "interface.h" |
29 | #include "client.h" | ||
29 | 30 | ||
30 | 31 | ||
31 | /** | 32 | /** |
@@ -297,7 +298,7 @@ static int mei_irq_thread_write_complete(struct mei_device *dev, s32 *slots, | |||
297 | return -ENODEV; | 298 | return -ENODEV; |
298 | } | 299 | } |
299 | 300 | ||
300 | if (mei_flow_ctrl_reduce(dev, cl)) | 301 | if (mei_cl_flow_ctrl_reduce(cl)) |
301 | return -ENODEV; | 302 | return -ENODEV; |
302 | 303 | ||
303 | cl->status = 0; | 304 | cl->status = 0; |
@@ -478,10 +479,10 @@ static int mei_irq_thread_write_handler(struct mei_device *dev, | |||
478 | } | 479 | } |
479 | if (dev->dev_state == MEI_DEV_ENABLED) { | 480 | if (dev->dev_state == MEI_DEV_ENABLED) { |
480 | if (dev->wd_pending && | 481 | if (dev->wd_pending && |
481 | mei_flow_ctrl_creds(dev, &dev->wd_cl) > 0) { | 482 | mei_cl_flow_ctrl_creds(&dev->wd_cl) > 0) { |
482 | if (mei_wd_send(dev)) | 483 | if (mei_wd_send(dev)) |
483 | dev_dbg(&dev->pdev->dev, "wd send failed.\n"); | 484 | dev_dbg(&dev->pdev->dev, "wd send failed.\n"); |
484 | else if (mei_flow_ctrl_reduce(dev, &dev->wd_cl)) | 485 | else if (mei_cl_flow_ctrl_reduce(&dev->wd_cl)) |
485 | return -ENODEV; | 486 | return -ENODEV; |
486 | 487 | ||
487 | dev->wd_pending = false; | 488 | dev->wd_pending = false; |
@@ -520,7 +521,7 @@ static int mei_irq_thread_write_handler(struct mei_device *dev, | |||
520 | break; | 521 | break; |
521 | case MEI_FOP_IOCTL: | 522 | case MEI_FOP_IOCTL: |
522 | /* connect message */ | 523 | /* connect message */ |
523 | if (mei_other_client_is_connecting(dev, cl)) | 524 | if (mei_cl_is_other_connecting(cl)) |
524 | continue; | 525 | continue; |
525 | ret = _mei_irq_thread_ioctl(dev, &slots, pos, | 526 | ret = _mei_irq_thread_ioctl(dev, &slots, pos, |
526 | cl, cmpl_list); | 527 | cl, cmpl_list); |
@@ -540,7 +541,7 @@ static int mei_irq_thread_write_handler(struct mei_device *dev, | |||
540 | cl = pos->cl; | 541 | cl = pos->cl; |
541 | if (cl == NULL) | 542 | if (cl == NULL) |
542 | continue; | 543 | continue; |
543 | if (mei_flow_ctrl_creds(dev, cl) <= 0) { | 544 | if (mei_cl_flow_ctrl_creds(cl) <= 0) { |
544 | dev_dbg(&dev->pdev->dev, | 545 | dev_dbg(&dev->pdev->dev, |
545 | "No flow control credentials for client %d, not sending.\n", | 546 | "No flow control credentials for client %d, not sending.\n", |
546 | cl->host_client_id); | 547 | cl->host_client_id); |
diff --git a/drivers/misc/mei/main.c b/drivers/misc/mei/main.c index da9426054815..95f05d97a115 100644 --- a/drivers/misc/mei/main.c +++ b/drivers/misc/mei/main.c | |||
@@ -41,6 +41,7 @@ | |||
41 | 41 | ||
42 | #include "mei_dev.h" | 42 | #include "mei_dev.h" |
43 | #include "interface.h" | 43 | #include "interface.h" |
44 | #include "client.h" | ||
44 | 45 | ||
45 | /* AMT device is a singleton on the platform */ | 46 | /* AMT device is a singleton on the platform */ |
46 | static struct pci_dev *mei_pdev; | 47 | static struct pci_dev *mei_pdev; |
@@ -91,28 +92,6 @@ static DEFINE_MUTEX(mei_mutex); | |||
91 | 92 | ||
92 | 93 | ||
93 | /** | 94 | /** |
94 | * find_read_list_entry - find read list entry | ||
95 | * | ||
96 | * @dev: device structure | ||
97 | * @file: pointer to file structure | ||
98 | * | ||
99 | * returns cb on success, NULL on error | ||
100 | */ | ||
101 | static struct mei_cl_cb *find_read_list_entry( | ||
102 | struct mei_device *dev, | ||
103 | struct mei_cl *cl) | ||
104 | { | ||
105 | struct mei_cl_cb *pos = NULL; | ||
106 | struct mei_cl_cb *next = NULL; | ||
107 | |||
108 | dev_dbg(&dev->pdev->dev, "remove read_list CB\n"); | ||
109 | list_for_each_entry_safe(pos, next, &dev->read_list.list, list) | ||
110 | if (mei_cl_cmp_id(cl, pos->cl)) | ||
111 | return pos; | ||
112 | return NULL; | ||
113 | } | ||
114 | |||
115 | /** | ||
116 | * mei_open - the open function | 95 | * mei_open - the open function |
117 | * | 96 | * |
118 | * @inode: pointer to inode structure | 97 | * @inode: pointer to inode structure |
@@ -217,7 +196,7 @@ static int mei_release(struct inode *inode, struct file *file) | |||
217 | "ME client = %d\n", | 196 | "ME client = %d\n", |
218 | cl->host_client_id, | 197 | cl->host_client_id, |
219 | cl->me_client_id); | 198 | cl->me_client_id); |
220 | rets = mei_disconnect_host_client(dev, cl); | 199 | rets = mei_cl_disconnect(cl); |
221 | } | 200 | } |
222 | mei_cl_flush_queues(cl); | 201 | mei_cl_flush_queues(cl); |
223 | dev_dbg(&dev->pdev->dev, "remove client host client = %d, ME client = %d\n", | 202 | dev_dbg(&dev->pdev->dev, "remove client host client = %d, ME client = %d\n", |
@@ -228,12 +207,12 @@ static int mei_release(struct inode *inode, struct file *file) | |||
228 | clear_bit(cl->host_client_id, dev->host_clients_map); | 207 | clear_bit(cl->host_client_id, dev->host_clients_map); |
229 | dev->open_handle_count--; | 208 | dev->open_handle_count--; |
230 | } | 209 | } |
231 | mei_me_cl_unlink(dev, cl); | 210 | mei_cl_unlink(cl); |
232 | 211 | ||
233 | /* free read cb */ | 212 | /* free read cb */ |
234 | cb = NULL; | 213 | cb = NULL; |
235 | if (cl->read_cb) { | 214 | if (cl->read_cb) { |
236 | cb = find_read_list_entry(dev, cl); | 215 | cb = mei_cl_find_read_cb(cl); |
237 | /* Remove entry from read list */ | 216 | /* Remove entry from read list */ |
238 | if (cb) | 217 | if (cb) |
239 | list_del(&cb->list); | 218 | list_del(&cb->list); |
@@ -323,7 +302,7 @@ static ssize_t mei_read(struct file *file, char __user *ubuf, | |||
323 | goto out; | 302 | goto out; |
324 | } | 303 | } |
325 | 304 | ||
326 | err = mei_start_read(dev, cl); | 305 | err = mei_cl_read_start(cl); |
327 | if (err && err != -EBUSY) { | 306 | if (err && err != -EBUSY) { |
328 | dev_dbg(&dev->pdev->dev, | 307 | dev_dbg(&dev->pdev->dev, |
329 | "mei start read failure with status = %d\n", err); | 308 | "mei start read failure with status = %d\n", err); |
@@ -394,7 +373,7 @@ copy_buffer: | |||
394 | goto out; | 373 | goto out; |
395 | 374 | ||
396 | free: | 375 | free: |
397 | cb_pos = find_read_list_entry(dev, cl); | 376 | cb_pos = mei_cl_find_read_cb(cl); |
398 | /* Remove entry from read list */ | 377 | /* Remove entry from read list */ |
399 | if (cb_pos) | 378 | if (cb_pos) |
400 | list_del(&cb_pos->list); | 379 | list_del(&cb_pos->list); |
@@ -476,7 +455,7 @@ static ssize_t mei_write(struct file *file, const char __user *ubuf, | |||
476 | /* free entry used in read */ | 455 | /* free entry used in read */ |
477 | if (cl->reading_state == MEI_READ_COMPLETE) { | 456 | if (cl->reading_state == MEI_READ_COMPLETE) { |
478 | *offset = 0; | 457 | *offset = 0; |
479 | write_cb = find_read_list_entry(dev, cl); | 458 | write_cb = mei_cl_find_read_cb(cl); |
480 | if (write_cb) { | 459 | if (write_cb) { |
481 | list_del(&write_cb->list); | 460 | list_del(&write_cb->list); |
482 | mei_io_cb_free(write_cb); | 461 | mei_io_cb_free(write_cb); |
@@ -531,7 +510,7 @@ static ssize_t mei_write(struct file *file, const char __user *ubuf, | |||
531 | 510 | ||
532 | dev_dbg(&dev->pdev->dev, "host client = %d, ME client = %d\n", | 511 | dev_dbg(&dev->pdev->dev, "host client = %d, ME client = %d\n", |
533 | cl->host_client_id, cl->me_client_id); | 512 | cl->host_client_id, cl->me_client_id); |
534 | rets = mei_flow_ctrl_creds(dev, cl); | 513 | rets = mei_cl_flow_ctrl_creds(cl); |
535 | if (rets < 0) | 514 | if (rets < 0) |
536 | goto err; | 515 | goto err; |
537 | 516 | ||
@@ -565,7 +544,7 @@ static ssize_t mei_write(struct file *file, const char __user *ubuf, | |||
565 | 544 | ||
566 | out: | 545 | out: |
567 | if (mei_hdr.msg_complete) { | 546 | if (mei_hdr.msg_complete) { |
568 | if (mei_flow_ctrl_reduce(dev, cl)) { | 547 | if (mei_cl_flow_ctrl_reduce(cl)) { |
569 | rets = -ENODEV; | 548 | rets = -ENODEV; |
570 | goto err; | 549 | goto err; |
571 | } | 550 | } |
@@ -904,11 +883,11 @@ static void mei_remove(struct pci_dev *pdev) | |||
904 | 883 | ||
905 | if (dev->iamthif_cl.state == MEI_FILE_CONNECTED) { | 884 | if (dev->iamthif_cl.state == MEI_FILE_CONNECTED) { |
906 | dev->iamthif_cl.state = MEI_FILE_DISCONNECTING; | 885 | dev->iamthif_cl.state = MEI_FILE_DISCONNECTING; |
907 | mei_disconnect_host_client(dev, &dev->iamthif_cl); | 886 | mei_cl_disconnect(&dev->iamthif_cl); |
908 | } | 887 | } |
909 | if (dev->wd_cl.state == MEI_FILE_CONNECTED) { | 888 | if (dev->wd_cl.state == MEI_FILE_CONNECTED) { |
910 | dev->wd_cl.state = MEI_FILE_DISCONNECTING; | 889 | dev->wd_cl.state = MEI_FILE_DISCONNECTING; |
911 | mei_disconnect_host_client(dev, &dev->wd_cl); | 890 | mei_cl_disconnect(&dev->wd_cl); |
912 | } | 891 | } |
913 | 892 | ||
914 | /* Unregistering watchdog device */ | 893 | /* Unregistering watchdog device */ |
@@ -916,8 +895,8 @@ static void mei_remove(struct pci_dev *pdev) | |||
916 | 895 | ||
917 | /* remove entry if already in list */ | 896 | /* remove entry if already in list */ |
918 | dev_dbg(&pdev->dev, "list del iamthif and wd file list.\n"); | 897 | dev_dbg(&pdev->dev, "list del iamthif and wd file list.\n"); |
919 | mei_me_cl_unlink(dev, &dev->wd_cl); | 898 | mei_cl_unlink(&dev->wd_cl); |
920 | mei_me_cl_unlink(dev, &dev->iamthif_cl); | 899 | mei_cl_unlink(&dev->iamthif_cl); |
921 | 900 | ||
922 | dev->iamthif_current_cb = NULL; | 901 | dev->iamthif_current_cb = NULL; |
923 | dev->me_clients_num = 0; | 902 | dev->me_clients_num = 0; |
diff --git a/drivers/misc/mei/mei_dev.h b/drivers/misc/mei/mei_dev.h index 1b54e675d3f1..5a1ac9a37e10 100644 --- a/drivers/misc/mei/mei_dev.h +++ b/drivers/misc/mei/mei_dev.h | |||
@@ -329,59 +329,9 @@ void mei_reset(struct mei_device *dev, int interrupts); | |||
329 | int mei_hw_init(struct mei_device *dev); | 329 | int mei_hw_init(struct mei_device *dev); |
330 | int mei_task_initialize_clients(void *data); | 330 | int mei_task_initialize_clients(void *data); |
331 | int mei_initialize_clients(struct mei_device *dev); | 331 | int mei_initialize_clients(struct mei_device *dev); |
332 | int mei_disconnect_host_client(struct mei_device *dev, struct mei_cl *cl); | ||
333 | void mei_allocate_me_clients_storage(struct mei_device *dev); | 332 | void mei_allocate_me_clients_storage(struct mei_device *dev); |
334 | 333 | ||
335 | 334 | ||
336 | int mei_me_cl_link(struct mei_device *dev, struct mei_cl *cl, | ||
337 | const uuid_le *cguid, u8 host_client_id); | ||
338 | void mei_me_cl_unlink(struct mei_device *dev, struct mei_cl *cl); | ||
339 | int mei_me_cl_by_uuid(const struct mei_device *dev, const uuid_le *cuuid); | ||
340 | int mei_me_cl_by_id(struct mei_device *dev, u8 client_id); | ||
341 | |||
342 | /* | ||
343 | * MEI IO Functions | ||
344 | */ | ||
345 | struct mei_cl_cb *mei_io_cb_init(struct mei_cl *cl, struct file *fp); | ||
346 | void mei_io_cb_free(struct mei_cl_cb *priv_cb); | ||
347 | int mei_io_cb_alloc_req_buf(struct mei_cl_cb *cb, size_t length); | ||
348 | int mei_io_cb_alloc_resp_buf(struct mei_cl_cb *cb, size_t length); | ||
349 | |||
350 | |||
351 | /** | ||
352 | * mei_io_list_init - Sets up a queue list. | ||
353 | * | ||
354 | * @list: An instance cl callback structure | ||
355 | */ | ||
356 | static inline void mei_io_list_init(struct mei_cl_cb *list) | ||
357 | { | ||
358 | INIT_LIST_HEAD(&list->list); | ||
359 | } | ||
360 | void mei_io_list_flush(struct mei_cl_cb *list, struct mei_cl *cl); | ||
361 | |||
362 | /* | ||
363 | * MEI ME Client Functions | ||
364 | */ | ||
365 | |||
366 | struct mei_cl *mei_cl_allocate(struct mei_device *dev); | ||
367 | void mei_cl_init(struct mei_cl *cl, struct mei_device *dev); | ||
368 | int mei_cl_flush_queues(struct mei_cl *cl); | ||
369 | /** | ||
370 | * mei_cl_cmp_id - tells if file private data have same id | ||
371 | * | ||
372 | * @fe1: private data of 1. file object | ||
373 | * @fe2: private data of 2. file object | ||
374 | * | ||
375 | * returns true - if ids are the same and not NULL | ||
376 | */ | ||
377 | static inline bool mei_cl_cmp_id(const struct mei_cl *cl1, | ||
378 | const struct mei_cl *cl2) | ||
379 | { | ||
380 | return cl1 && cl2 && | ||
381 | (cl1->host_client_id == cl2->host_client_id) && | ||
382 | (cl1->me_client_id == cl2->me_client_id); | ||
383 | } | ||
384 | |||
385 | 335 | ||
386 | /* | 336 | /* |
387 | * MEI interrupt functions prototype | 337 | * MEI interrupt functions prototype |
@@ -395,9 +345,6 @@ void mei_timer(struct work_struct *work); | |||
395 | */ | 345 | */ |
396 | int mei_ioctl_connect_client(struct file *file, | 346 | int mei_ioctl_connect_client(struct file *file, |
397 | struct mei_connect_client_data *data); | 347 | struct mei_connect_client_data *data); |
398 | |||
399 | int mei_start_read(struct mei_device *dev, struct mei_cl *cl); | ||
400 | |||
401 | /* | 348 | /* |
402 | * AMTHIF - AMT Host Interface Functions | 349 | * AMTHIF - AMT Host Interface Functions |
403 | */ | 350 | */ |
diff --git a/drivers/misc/mei/wd.c b/drivers/misc/mei/wd.c index 9814bc1dba01..5ad5225ea2b9 100644 --- a/drivers/misc/mei/wd.c +++ b/drivers/misc/mei/wd.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include "mei_dev.h" | 26 | #include "mei_dev.h" |
27 | #include "hbm.h" | 27 | #include "hbm.h" |
28 | #include "interface.h" | 28 | #include "interface.h" |
29 | #include "client.h" | ||
29 | 30 | ||
30 | static const u8 mei_start_wd_params[] = { 0x02, 0x12, 0x13, 0x10 }; | 31 | static const u8 mei_start_wd_params[] = { 0x02, 0x12, 0x13, 0x10 }; |
31 | static const u8 mei_stop_wd_params[] = { 0x02, 0x02, 0x14, 0x10 }; | 32 | static const u8 mei_stop_wd_params[] = { 0x02, 0x02, 0x14, 0x10 }; |
@@ -72,7 +73,7 @@ int mei_wd_host_init(struct mei_device *dev) | |||
72 | dev->wd_state = MEI_WD_IDLE; | 73 | dev->wd_state = MEI_WD_IDLE; |
73 | 74 | ||
74 | /* Connect WD ME client to the host client */ | 75 | /* Connect WD ME client to the host client */ |
75 | id = mei_me_cl_link(dev, &dev->wd_cl, | 76 | id = mei_cl_link_me(&dev->wd_cl, |
76 | &mei_wd_guid, MEI_WD_HOST_CLIENT_ID); | 77 | &mei_wd_guid, MEI_WD_HOST_CLIENT_ID); |
77 | 78 | ||
78 | if (id < 0) { | 79 | if (id < 0) { |
@@ -141,7 +142,7 @@ int mei_wd_stop(struct mei_device *dev) | |||
141 | 142 | ||
142 | dev->wd_state = MEI_WD_STOPPING; | 143 | dev->wd_state = MEI_WD_STOPPING; |
143 | 144 | ||
144 | ret = mei_flow_ctrl_creds(dev, &dev->wd_cl); | 145 | ret = mei_cl_flow_ctrl_creds(&dev->wd_cl); |
145 | if (ret < 0) | 146 | if (ret < 0) |
146 | goto out; | 147 | goto out; |
147 | 148 | ||
@@ -150,7 +151,7 @@ int mei_wd_stop(struct mei_device *dev) | |||
150 | dev->mei_host_buffer_is_empty = false; | 151 | dev->mei_host_buffer_is_empty = false; |
151 | 152 | ||
152 | if (!mei_wd_send(dev)) { | 153 | if (!mei_wd_send(dev)) { |
153 | ret = mei_flow_ctrl_reduce(dev, &dev->wd_cl); | 154 | ret = mei_cl_flow_ctrl_reduce(&dev->wd_cl); |
154 | if (ret) | 155 | if (ret) |
155 | goto out; | 156 | goto out; |
156 | } else { | 157 | } else { |
@@ -271,7 +272,7 @@ static int mei_wd_ops_ping(struct watchdog_device *wd_dev) | |||
271 | 272 | ||
272 | /* Check if we can send the ping to HW*/ | 273 | /* Check if we can send the ping to HW*/ |
273 | if (dev->mei_host_buffer_is_empty && | 274 | if (dev->mei_host_buffer_is_empty && |
274 | mei_flow_ctrl_creds(dev, &dev->wd_cl) > 0) { | 275 | mei_cl_flow_ctrl_creds(&dev->wd_cl) > 0) { |
275 | 276 | ||
276 | dev->mei_host_buffer_is_empty = false; | 277 | dev->mei_host_buffer_is_empty = false; |
277 | dev_dbg(&dev->pdev->dev, "wd: sending ping\n"); | 278 | dev_dbg(&dev->pdev->dev, "wd: sending ping\n"); |
@@ -282,9 +283,9 @@ static int mei_wd_ops_ping(struct watchdog_device *wd_dev) | |||
282 | goto end; | 283 | goto end; |
283 | } | 284 | } |
284 | 285 | ||
285 | if (mei_flow_ctrl_reduce(dev, &dev->wd_cl)) { | 286 | if (mei_cl_flow_ctrl_reduce(&dev->wd_cl)) { |
286 | dev_err(&dev->pdev->dev, | 287 | dev_err(&dev->pdev->dev, |
287 | "wd: mei_flow_ctrl_reduce() failed.\n"); | 288 | "wd: mei_cl_flow_ctrl_reduce() failed.\n"); |
288 | ret = -EIO; | 289 | ret = -EIO; |
289 | goto end; | 290 | goto end; |
290 | } | 291 | } |