mei: add mei_irq_compl_handler function
similar to read/write add also irq completion handler that is called for the irq thread rename missnamed mei_irq_complete_handler to mei_cl_complete_handler as it operates on a single client Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
f57f27bc6e
commit
4c6e22b8a9
|
@ -456,8 +456,6 @@ irqreturn_t mei_me_irq_thread_handler(int irq, void *dev_id)
|
|||
{
|
||||
struct mei_device *dev = (struct mei_device *) dev_id;
|
||||
struct mei_cl_cb complete_list;
|
||||
struct mei_cl_cb *cb_pos = NULL, *cb_next = NULL;
|
||||
struct mei_cl *cl;
|
||||
s32 slots;
|
||||
int rets;
|
||||
bool bus_message_received;
|
||||
|
@ -527,23 +525,9 @@ end:
|
|||
wake_up_interruptible(&dev->wait_recvd_msg);
|
||||
bus_message_received = false;
|
||||
}
|
||||
if (list_empty(&complete_list.list))
|
||||
return IRQ_HANDLED;
|
||||
|
||||
mei_irq_compl_handler(dev, &complete_list);
|
||||
|
||||
list_for_each_entry_safe(cb_pos, cb_next, &complete_list.list, list) {
|
||||
cl = cb_pos->cl;
|
||||
list_del(&cb_pos->list);
|
||||
if (cl) {
|
||||
if (cl != &dev->iamthif_cl) {
|
||||
dev_dbg(&dev->pdev->dev, "completing call back.\n");
|
||||
mei_irq_complete_handler(cl, cb_pos);
|
||||
cb_pos = NULL;
|
||||
} else if (cl == &dev->iamthif_cl) {
|
||||
mei_amthif_complete(dev, cb_pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
static const struct mei_hw_ops mei_me_hw_ops = {
|
||||
|
|
|
@ -30,21 +30,21 @@
|
|||
|
||||
|
||||
/**
|
||||
* mei_complete_handler - processes completed operation.
|
||||
* mei_cl_complete_handler - processes completed operation for a client
|
||||
*
|
||||
* @cl: private data of the file object.
|
||||
* @cb_pos: callback block.
|
||||
* @cb: callback block.
|
||||
*/
|
||||
void mei_irq_complete_handler(struct mei_cl *cl, struct mei_cl_cb *cb_pos)
|
||||
static void mei_cl_complete_handler(struct mei_cl *cl, struct mei_cl_cb *cb)
|
||||
{
|
||||
if (cb_pos->fop_type == MEI_FOP_WRITE) {
|
||||
mei_io_cb_free(cb_pos);
|
||||
cb_pos = NULL;
|
||||
if (cb->fop_type == MEI_FOP_WRITE) {
|
||||
mei_io_cb_free(cb);
|
||||
cb = NULL;
|
||||
cl->writing_state = MEI_WRITE_COMPLETE;
|
||||
if (waitqueue_active(&cl->tx_wait))
|
||||
wake_up_interruptible(&cl->tx_wait);
|
||||
|
||||
} else if (cb_pos->fop_type == MEI_FOP_READ &&
|
||||
} else if (cb->fop_type == MEI_FOP_READ &&
|
||||
MEI_READING == cl->reading_state) {
|
||||
cl->reading_state = MEI_READ_COMPLETE;
|
||||
if (waitqueue_active(&cl->rx_wait))
|
||||
|
@ -53,6 +53,31 @@ void mei_irq_complete_handler(struct mei_cl *cl, struct mei_cl_cb *cb_pos)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* mei_irq_compl_handler - dispatch complete handelers
|
||||
* for the completed callbacks
|
||||
*
|
||||
* @dev - mei device
|
||||
* @compl_list - list of completed cbs
|
||||
*/
|
||||
void mei_irq_compl_handler(struct mei_device *dev, struct mei_cl_cb *compl_list)
|
||||
{
|
||||
struct mei_cl_cb *cb, *next;
|
||||
struct mei_cl *cl;
|
||||
|
||||
list_for_each_entry_safe(cb, next, &compl_list->list, list) {
|
||||
cl = cb->cl;
|
||||
list_del(&cb->list);
|
||||
if (!cl)
|
||||
continue;
|
||||
|
||||
dev_dbg(&dev->pdev->dev, "completing call back.\n");
|
||||
if (cl == &dev->iamthif_cl)
|
||||
mei_amthif_complete(dev, cb);
|
||||
else
|
||||
mei_cl_complete_handler(cl, cb);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* _mei_irq_thread_state_ok - checks if mei header matches file private data
|
||||
*
|
||||
|
|
|
@ -405,8 +405,7 @@ int mei_irq_read_handler(struct mei_device *dev,
|
|||
struct mei_cl_cb *cmpl_list, s32 *slots);
|
||||
|
||||
int mei_irq_write_handler(struct mei_device *dev, struct mei_cl_cb *cmpl_list);
|
||||
|
||||
void mei_irq_complete_handler(struct mei_cl *cl, struct mei_cl_cb *cb_pos);
|
||||
void mei_irq_compl_handler(struct mei_device *dev, struct mei_cl_cb *cmpl_list);
|
||||
|
||||
/*
|
||||
* AMTHIF - AMT Host Interface Functions
|
||||
|
|
Loading…
Reference in a new issue