diff options
Diffstat (limited to 'drivers/misc')
-rw-r--r-- | drivers/misc/mei/amthif.c | 39 | ||||
-rw-r--r-- | drivers/misc/mei/main.c | 25 |
2 files changed, 41 insertions, 23 deletions
diff --git a/drivers/misc/mei/amthif.c b/drivers/misc/mei/amthif.c index 392203d8d254..96db3ad21259 100644 --- a/drivers/misc/mei/amthif.c +++ b/drivers/misc/mei/amthif.c | |||
@@ -255,14 +255,15 @@ out: | |||
255 | } | 255 | } |
256 | 256 | ||
257 | /** | 257 | /** |
258 | * mei_amthif_write - write amthif data to amthif client | 258 | * mei_amthif_send_cmd - send amthif command to the ME |
259 | * | 259 | * |
260 | * @dev: the device structure | 260 | * @dev: the device structure |
261 | * @cb: mei call back struct | 261 | * @cb: mei call back struct |
262 | * | 262 | * |
263 | * returns 0 on success, <0 on failure. | 263 | * returns 0 on success, <0 on failure. |
264 | * | ||
264 | */ | 265 | */ |
265 | int mei_amthif_write(struct mei_device *dev, struct mei_cl_cb *cb) | 266 | static int mei_amthif_send_cmd(struct mei_device *dev, struct mei_cl_cb *cb) |
266 | { | 267 | { |
267 | struct mei_msg_hdr mei_hdr; | 268 | struct mei_msg_hdr mei_hdr; |
268 | int ret; | 269 | int ret; |
@@ -329,6 +330,38 @@ int mei_amthif_write(struct mei_device *dev, struct mei_cl_cb *cb) | |||
329 | } | 330 | } |
330 | 331 | ||
331 | /** | 332 | /** |
333 | * mei_amthif_write - write amthif data to amthif client | ||
334 | * | ||
335 | * @dev: the device structure | ||
336 | * @cb: mei call back struct | ||
337 | * | ||
338 | * returns 0 on success, <0 on failure. | ||
339 | * | ||
340 | */ | ||
341 | int mei_amthif_write(struct mei_device *dev, struct mei_cl_cb *cb) | ||
342 | { | ||
343 | int ret; | ||
344 | |||
345 | if (!dev || !cb) | ||
346 | return -ENODEV; | ||
347 | |||
348 | ret = mei_io_cb_alloc_resp_buf(cb, dev->iamthif_mtu); | ||
349 | if (ret) | ||
350 | return ret; | ||
351 | |||
352 | cb->major_file_operations = MEI_IOCTL; | ||
353 | |||
354 | if (!list_empty(&dev->amthi_cmd_list.list) || | ||
355 | dev->iamthif_state != MEI_IAMTHIF_IDLE) { | ||
356 | dev_dbg(&dev->pdev->dev, | ||
357 | "amthif state = %d\n", dev->iamthif_state); | ||
358 | dev_dbg(&dev->pdev->dev, "AMTHIF: add cb to the wait list\n"); | ||
359 | list_add_tail(&cb->list, &dev->amthi_cmd_list.list); | ||
360 | return 0; | ||
361 | } | ||
362 | return mei_amthif_send_cmd(dev, cb); | ||
363 | } | ||
364 | /** | ||
332 | * mei_amthif_run_next_cmd | 365 | * mei_amthif_run_next_cmd |
333 | * | 366 | * |
334 | * @dev: the device structure | 367 | * @dev: the device structure |
@@ -360,7 +393,7 @@ void mei_amthif_run_next_cmd(struct mei_device *dev) | |||
360 | cl_tmp = (struct mei_cl *)pos->file_private; | 393 | cl_tmp = (struct mei_cl *)pos->file_private; |
361 | 394 | ||
362 | if (cl_tmp && cl_tmp == &dev->iamthif_cl) { | 395 | if (cl_tmp && cl_tmp == &dev->iamthif_cl) { |
363 | status = mei_amthif_write(dev, pos); | 396 | status = mei_amthif_send_cmd(dev, pos); |
364 | if (status) { | 397 | if (status) { |
365 | dev_dbg(&dev->pdev->dev, | 398 | dev_dbg(&dev->pdev->dev, |
366 | "amthi write failed status = %d\n", | 399 | "amthi write failed status = %d\n", |
diff --git a/drivers/misc/mei/main.c b/drivers/misc/mei/main.c index d8221a5a7ee8..ff50cc14cc39 100644 --- a/drivers/misc/mei/main.c +++ b/drivers/misc/mei/main.c | |||
@@ -620,27 +620,12 @@ static ssize_t mei_write(struct file *file, const char __user *ubuf, | |||
620 | cl->sm_state |= MEI_WD_STATE_INDEPENDENCE_MSG_SENT; | 620 | cl->sm_state |= MEI_WD_STATE_INDEPENDENCE_MSG_SENT; |
621 | 621 | ||
622 | if (cl == &dev->iamthif_cl) { | 622 | if (cl == &dev->iamthif_cl) { |
623 | rets = mei_io_cb_alloc_resp_buf(write_cb, dev->iamthif_mtu); | 623 | rets = mei_amthif_write(dev, write_cb); |
624 | if (rets) | ||
625 | goto err; | ||
626 | 624 | ||
627 | write_cb->major_file_operations = MEI_IOCTL; | 625 | if (rets) { |
628 | 626 | dev_err(&dev->pdev->dev, | |
629 | if (!list_empty(&dev->amthi_cmd_list.list) || | 627 | "amthi write failed with status = %d\n", rets); |
630 | dev->iamthif_state != MEI_IAMTHIF_IDLE) { | 628 | goto err; |
631 | dev_dbg(&dev->pdev->dev, "amthi_state = %d\n", | ||
632 | (int) dev->iamthif_state); | ||
633 | dev_dbg(&dev->pdev->dev, "add amthi cb to amthi cmd waiting list\n"); | ||
634 | list_add_tail(&write_cb->list, &dev->amthi_cmd_list.list); | ||
635 | } else { | ||
636 | dev_dbg(&dev->pdev->dev, "call amthi write\n"); | ||
637 | rets = mei_amthif_write(dev, write_cb); | ||
638 | |||
639 | if (rets) { | ||
640 | dev_err(&dev->pdev->dev, "amthi write failed with status = %d\n", | ||
641 | rets); | ||
642 | goto err; | ||
643 | } | ||
644 | } | 629 | } |
645 | mutex_unlock(&dev->device_lock); | 630 | mutex_unlock(&dev->device_lock); |
646 | return length; | 631 | return length; |