aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/misc')
-rw-r--r--drivers/misc/mei/amthif.c39
-rw-r--r--drivers/misc/mei/main.c25
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 */
265int mei_amthif_write(struct mei_device *dev, struct mei_cl_cb *cb) 266static 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 */
341int 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;