aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc/mei/interrupt.c
diff options
context:
space:
mode:
authorTomas Winkler <tomas.winkler@intel.com>2014-02-12 14:41:52 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-02-14 14:12:46 -0500
commit6bb948c9e500d24321c36c67c81daf8d1a7e561e (patch)
treebd45c66165b1e42c0eed0cc64b15aa75345d9a34 /drivers/misc/mei/interrupt.c
parent02a7eecc6ee565f5f3af836d56fe25bafcc49c98 (diff)
mei: get rid of ext_msg
Use more standard message writing for oob data. Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/misc/mei/interrupt.c')
-rw-r--r--drivers/misc/mei/interrupt.c47
1 files changed, 40 insertions, 7 deletions
diff --git a/drivers/misc/mei/interrupt.c b/drivers/misc/mei/interrupt.c
index 3f0b0b9ce951..75ff4092953e 100644
--- a/drivers/misc/mei/interrupt.c
+++ b/drivers/misc/mei/interrupt.c
@@ -161,6 +161,41 @@ static int mei_cl_irq_read_msg(struct mei_device *dev,
161} 161}
162 162
163/** 163/**
164 * mei_cl_irq_disconnect_rsp - send disconnection response message
165 *
166 * @cl: client
167 * @cb: callback block.
168 * @slots: free slots.
169 * @cmpl_list: complete list.
170 *
171 * returns 0, OK; otherwise, error.
172 */
173static int mei_cl_irq_disconnect_rsp(struct mei_cl *cl, struct mei_cl_cb *cb,
174 s32 *slots, struct mei_cl_cb *cmpl_list)
175{
176 struct mei_device *dev = cl->dev;
177 int ret;
178
179 u32 msg_slots =
180 mei_data2slots(sizeof(struct hbm_client_connect_response));
181
182 if (*slots < msg_slots)
183 return -EMSGSIZE;
184
185 *slots -= msg_slots;
186
187 ret = mei_hbm_cl_disconnect_rsp(dev, cl);
188
189 cl->state = MEI_FILE_DISCONNECTED;
190 cl->status = 0;
191 mei_io_cb_free(cb);
192
193 return ret;
194}
195
196
197
198/**
164 * mei_cl_irq_close - processes close related operation from 199 * mei_cl_irq_close - processes close related operation from
165 * interrupt thread context - send disconnect request 200 * interrupt thread context - send disconnect request
166 * 201 *
@@ -452,12 +487,6 @@ int mei_irq_write_handler(struct mei_device *dev, struct mei_cl_cb *cmpl_list)
452 wake_up_interruptible(&dev->wait_stop_wd); 487 wake_up_interruptible(&dev->wait_stop_wd);
453 } 488 }
454 489
455 if (dev->wr_ext_msg.hdr.length) {
456 mei_write_message(dev, &dev->wr_ext_msg.hdr,
457 dev->wr_ext_msg.data);
458 slots -= mei_data2slots(dev->wr_ext_msg.hdr.length);
459 dev->wr_ext_msg.hdr.length = 0;
460 }
461 if (dev->dev_state == MEI_DEV_ENABLED) { 490 if (dev->dev_state == MEI_DEV_ENABLED) {
462 if (dev->wd_pending && 491 if (dev->wd_pending &&
463 mei_cl_flow_ctrl_creds(&dev->wd_cl) > 0) { 492 mei_cl_flow_ctrl_creds(&dev->wd_cl) > 0) {
@@ -505,7 +534,11 @@ int mei_irq_write_handler(struct mei_device *dev, struct mei_cl_cb *cmpl_list)
505 return ret; 534 return ret;
506 535
507 break; 536 break;
508 537 case MEI_FOP_DISCONNECT_RSP:
538 /* send disconnect resp */
539 ret = mei_cl_irq_disconnect_rsp(cl, cb, &slots, cmpl_list);
540 if (ret)
541 return ret;
509 default: 542 default:
510 BUG(); 543 BUG();
511 } 544 }