mei: extract AMTHI functions into the amthif.c file

Move AMT Host Interface functions into the new amthif.c file.
All functions has now common prefix: mei_amthif_

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
这个提交包含在:
Tomas Winkler
2012-11-01 21:17:15 +02:00
提交者 Greg Kroah-Hartman
父节点 3870c3206b
当前提交 19838fb853
修改 7 个文件,包含 613 行新增556 行删除

查看文件

@@ -73,92 +73,6 @@ static void _mei_cmpl(struct mei_cl *cl, struct mei_cl_cb *cb_pos)
}
}
/**
* _mei_cmpl_iamthif - processes completed iamthif operation.
*
* @dev: the device structure.
* @cb_pos: callback block.
*/
static void _mei_cmpl_iamthif(struct mei_device *dev, struct mei_cl_cb *cb_pos)
{
if (dev->iamthif_canceled != 1) {
dev->iamthif_state = MEI_IAMTHIF_READ_COMPLETE;
dev->iamthif_stall_timer = 0;
memcpy(cb_pos->response_buffer.data,
dev->iamthif_msg_buf,
dev->iamthif_msg_buf_index);
list_add_tail(&cb_pos->list, &dev->amthi_read_complete_list.list);
dev_dbg(&dev->pdev->dev, "amthi read completed\n");
dev->iamthif_timer = jiffies;
dev_dbg(&dev->pdev->dev, "dev->iamthif_timer = %ld\n",
dev->iamthif_timer);
} else {
mei_run_next_iamthif_cmd(dev);
}
dev_dbg(&dev->pdev->dev, "completing amthi call back.\n");
wake_up_interruptible(&dev->iamthif_cl.wait);
}
/**
* mei_irq_thread_read_amthi_message - bottom half read routine after ISR to
* handle the read amthi message data processing.
*
* @complete_list: An instance of our list structure
* @dev: the device structure
* @mei_hdr: header of amthi message
*
* returns 0 on success, <0 on failure.
*/
static int mei_irq_thread_read_amthi_message(struct mei_cl_cb *complete_list,
struct mei_device *dev,
struct mei_msg_hdr *mei_hdr)
{
struct mei_cl *cl;
struct mei_cl_cb *cb;
unsigned char *buffer;
BUG_ON(mei_hdr->me_addr != dev->iamthif_cl.me_client_id);
BUG_ON(dev->iamthif_state != MEI_IAMTHIF_READING);
buffer = dev->iamthif_msg_buf + dev->iamthif_msg_buf_index;
BUG_ON(dev->iamthif_mtu < dev->iamthif_msg_buf_index + mei_hdr->length);
mei_read_slots(dev, buffer, mei_hdr->length);
dev->iamthif_msg_buf_index += mei_hdr->length;
if (!mei_hdr->msg_complete)
return 0;
dev_dbg(&dev->pdev->dev,
"amthi_message_buffer_index =%d\n",
mei_hdr->length);
dev_dbg(&dev->pdev->dev, "completed amthi read.\n ");
if (!dev->iamthif_current_cb)
return -ENODEV;
cb = dev->iamthif_current_cb;
dev->iamthif_current_cb = NULL;
cl = (struct mei_cl *)cb->file_private;
if (!cl)
return -ENODEV;
dev->iamthif_stall_timer = 0;
cb->buf_idx = dev->iamthif_msg_buf_index;
cb->read_time = jiffies;
if (dev->iamthif_ioctl && cl == &dev->iamthif_cl) {
/* found the iamthif cb */
dev_dbg(&dev->pdev->dev, "complete the amthi read cb.\n ");
dev_dbg(&dev->pdev->dev, "add the amthi read cb to complete.\n ");
list_add_tail(&cb->list, &complete_list->list);
}
return 0;
}
/**
* _mei_irq_thread_state_ok - checks if mei header matches file private data
*
@@ -243,37 +157,6 @@ quit:
return 0;
}
/**
* _mei_irq_thread_iamthif_read - prepares to read iamthif data.
*
* @dev: the device structure.
* @slots: free slots.
*
* returns 0, OK; otherwise, error.
*/
static int _mei_irq_thread_iamthif_read(struct mei_device *dev, s32 *slots)
{
if (((*slots) * sizeof(u32)) < (sizeof(struct mei_msg_hdr)
+ sizeof(struct hbm_flow_control))) {
return -EMSGSIZE;
}
*slots -= mei_data2slots(sizeof(struct hbm_flow_control));
if (mei_send_flow_control(dev, &dev->iamthif_cl)) {
dev_dbg(&dev->pdev->dev, "iamthif flow control failed\n");
return -EIO;
}
dev_dbg(&dev->pdev->dev, "iamthif flow control success\n");
dev->iamthif_state = MEI_IAMTHIF_READING;
dev->iamthif_flow_control_pending = false;
dev->iamthif_msg_buf_index = 0;
dev->iamthif_msg_buf_size = 0;
dev->iamthif_stall_timer = MEI_IAMTHIF_STALL_TIMER;
dev->mei_host_buffer_is_empty = mei_hbuf_is_empty(dev);
return 0;
}
/**
* _mei_irq_thread_close - processes close related operation.
*
@@ -370,7 +253,7 @@ static void mei_client_connect_response(struct mei_device *dev,
mei_watchdog_register(dev);
/* next step in the state maching */
mei_host_init_iamthif(dev);
mei_amthif_host_init(dev);
return;
}
@@ -728,7 +611,7 @@ static void mei_irq_thread_read_bus_message(struct mei_device *dev,
* will be received
*/
if (mei_wd_host_init(dev))
mei_host_init_iamthif(dev);
mei_amthif_host_init(dev);
}
} else {
@@ -963,87 +846,6 @@ static int _mei_irq_thread_cmpl(struct mei_device *dev, s32 *slots,
return 0;
}
/**
* _mei_irq_thread_cmpl_iamthif - processes completed iamthif operation.
*
* @dev: the device structure.
* @slots: free slots.
* @cb_pos: callback block.
* @cl: private data of the file object.
* @cmpl_list: complete list.
*
* returns 0, OK; otherwise, error.
*/
static int _mei_irq_thread_cmpl_iamthif(struct mei_device *dev, s32 *slots,
struct mei_cl_cb *cb_pos,
struct mei_cl *cl,
struct mei_cl_cb *cmpl_list)
{
struct mei_msg_hdr *mei_hdr;
if ((*slots * sizeof(u32)) >= (sizeof(struct mei_msg_hdr) +
dev->iamthif_msg_buf_size -
dev->iamthif_msg_buf_index)) {
mei_hdr = (struct mei_msg_hdr *) &dev->wr_msg_buf[0];
mei_hdr->host_addr = cl->host_client_id;
mei_hdr->me_addr = cl->me_client_id;
mei_hdr->length = dev->iamthif_msg_buf_size -
dev->iamthif_msg_buf_index;
mei_hdr->msg_complete = 1;
mei_hdr->reserved = 0;
*slots -= mei_data2slots(mei_hdr->length);
if (mei_write_message(dev, mei_hdr,
(dev->iamthif_msg_buf +
dev->iamthif_msg_buf_index),
mei_hdr->length)) {
dev->iamthif_state = MEI_IAMTHIF_IDLE;
cl->status = -ENODEV;
list_del(&cb_pos->list);
return -ENODEV;
} else {
if (mei_flow_ctrl_reduce(dev, cl))
return -ENODEV;
dev->iamthif_msg_buf_index += mei_hdr->length;
cb_pos->buf_idx = dev->iamthif_msg_buf_index;
cl->status = 0;
dev->iamthif_state = MEI_IAMTHIF_FLOW_CONTROL;
dev->iamthif_flow_control_pending = true;
/* save iamthif cb sent to amthi client */
dev->iamthif_current_cb = cb_pos;
list_move_tail(&cb_pos->list, &dev->write_waiting_list.list);
}
} else if (*slots == dev->hbuf_depth) {
/* buffer is still empty */
mei_hdr = (struct mei_msg_hdr *) &dev->wr_msg_buf[0];
mei_hdr->host_addr = cl->host_client_id;
mei_hdr->me_addr = cl->me_client_id;
mei_hdr->length =
(*slots * sizeof(u32)) - sizeof(struct mei_msg_hdr);
mei_hdr->msg_complete = 0;
mei_hdr->reserved = 0;
*slots -= mei_data2slots(mei_hdr->length);
if (mei_write_message(dev, mei_hdr,
(dev->iamthif_msg_buf +
dev->iamthif_msg_buf_index),
mei_hdr->length)) {
cl->status = -ENODEV;
list_del(&cb_pos->list);
} else {
dev->iamthif_msg_buf_index += mei_hdr->length;
}
return -EMSGSIZE;
} else {
return -EBADMSG;
}
return 0;
}
/**
* mei_irq_thread_read_handler - bottom half read routine after ISR to
* handle the read processing.
@@ -1117,8 +919,8 @@ static int mei_irq_thread_read_handler(struct mei_cl_cb *cmpl_list,
dev_dbg(&dev->pdev->dev, "call mei_irq_thread_read_iamthif_message.\n");
dev_dbg(&dev->pdev->dev, "mei_hdr->length =%d\n",
mei_hdr->length);
ret = mei_irq_thread_read_amthi_message(cmpl_list,
dev, mei_hdr);
ret = mei_amthif_irq_read_message(cmpl_list, dev, mei_hdr);
if (ret)
goto end;
@@ -1195,7 +997,7 @@ static int mei_irq_thread_write_handler(struct mei_cl_cb *cmpl_list,
if (cl == &dev->iamthif_cl) {
dev_dbg(&dev->pdev->dev, "check iamthif flow control.\n");
if (dev->iamthif_flow_control_pending) {
ret = _mei_irq_thread_iamthif_read(dev, slots);
ret = mei_amthif_irq_read(dev, slots);
if (ret)
return ret;
}
@@ -1300,8 +1102,8 @@ static int mei_irq_thread_write_handler(struct mei_cl_cb *cmpl_list,
cl->host_client_id);
continue;
}
ret = _mei_irq_thread_cmpl_iamthif(dev, slots, pos,
cl, cmpl_list);
ret = mei_amthif_irq_process_completed(dev, slots, pos,
cl, cmpl_list);
if (ret)
return ret;
@@ -1372,7 +1174,7 @@ void mei_timer(struct work_struct *work)
dev->iamthif_current_cb = NULL;
dev->iamthif_file_object = NULL;
mei_run_next_iamthif_cmd(dev);
mei_amthif_run_next_cmd(dev);
}
}
@@ -1409,7 +1211,7 @@ void mei_timer(struct work_struct *work)
dev->iamthif_file_object->private_data = NULL;
dev->iamthif_file_object = NULL;
dev->iamthif_timer = 0;
mei_run_next_iamthif_cmd(dev);
mei_amthif_run_next_cmd(dev);
}
}
@@ -1524,7 +1326,7 @@ end:
_mei_cmpl(cl, cb_pos);
cb_pos = NULL;
} else if (cl == &dev->iamthif_cl) {
_mei_cmpl_iamthif(dev, cb_pos);
mei_amthif_complete(dev, cb_pos);
}
}
}