Lines Matching refs:cb
116 struct mei_cl_cb *cb; in mei_amthif_find_read_list_entry() local
118 list_for_each_entry(cb, &dev->amthif_rd_complete_list.list, list) in mei_amthif_find_read_list_entry()
119 if (cb->file_object == file) in mei_amthif_find_read_list_entry()
120 return cb; in mei_amthif_find_read_list_entry()
145 struct mei_cl_cb *cb; in mei_amthif_read() local
157 cb = mei_amthif_find_read_list_entry(dev, file); in mei_amthif_read()
160 if (cb == NULL && file->f_flags & O_NONBLOCK) in mei_amthif_read()
165 while (cb == NULL) { in mei_amthif_read()
170 (cb = mei_amthif_find_read_list_entry(dev, file))); in mei_amthif_read()
181 if (cb->status) { in mei_amthif_read()
182 rets = cb->status; in mei_amthif_read()
190 timeout = cb->read_time + in mei_amthif_read()
198 list_del_init(&cb->list); in mei_amthif_read()
203 if (cb->buf_idx >= *offset && length >= (cb->buf_idx - *offset)) in mei_amthif_read()
204 list_del_init(&cb->list); in mei_amthif_read()
205 else if (cb->buf_idx > 0 && cb->buf_idx <= *offset) { in mei_amthif_read()
207 list_del_init(&cb->list); in mei_amthif_read()
216 cb->buf.size); in mei_amthif_read()
217 dev_dbg(dev->dev, "amthif cb->buf_idx - %lu\n", cb->buf_idx); in mei_amthif_read()
221 length = min_t(size_t, length, (cb->buf_idx - *offset)); in mei_amthif_read()
223 if (copy_to_user(ubuf, cb->buf.data + *offset, length)) { in mei_amthif_read()
228 if ((*offset + length) < cb->buf_idx) { in mei_amthif_read()
236 mei_io_cb_free(cb); in mei_amthif_read()
252 struct mei_cl_cb *cb; in mei_amthif_read_start() local
256 cb = mei_io_cb_init(cl, MEI_FOP_READ, file); in mei_amthif_read_start()
257 if (!cb) { in mei_amthif_read_start()
262 rets = mei_io_cb_alloc_buf(cb, length); in mei_amthif_read_start()
266 list_add_tail(&cb->list, &dev->ctrl_wr_list.list); in mei_amthif_read_start()
269 dev->iamthif_file_object = cb->file_object; in mei_amthif_read_start()
270 dev->iamthif_current_cb = cb; in mei_amthif_read_start()
274 mei_io_cb_free(cb); in mei_amthif_read_start()
286 static int mei_amthif_send_cmd(struct mei_cl *cl, struct mei_cl_cb *cb) in mei_amthif_send_cmd() argument
291 if (!cl->dev || !cb) in mei_amthif_send_cmd()
297 dev->iamthif_current_cb = cb; in mei_amthif_send_cmd()
298 dev->iamthif_file_object = cb->file_object; in mei_amthif_send_cmd()
301 ret = mei_cl_write(cl, cb, false); in mei_amthif_send_cmd()
305 if (cb->completed) in mei_amthif_send_cmd()
306 cb->status = mei_amthif_read_start(cl, cb->file_object); in mei_amthif_send_cmd()
321 struct mei_cl_cb *cb; in mei_amthif_run_next_cmd() local
330 cb = list_first_entry_or_null(&dev->amthif_cmd_list.list, in mei_amthif_run_next_cmd()
331 typeof(*cb), list); in mei_amthif_run_next_cmd()
332 if (!cb) in mei_amthif_run_next_cmd()
335 list_del_init(&cb->list); in mei_amthif_run_next_cmd()
336 return mei_amthif_send_cmd(cl, cb); in mei_amthif_run_next_cmd()
347 int mei_amthif_write(struct mei_cl *cl, struct mei_cl_cb *cb) in mei_amthif_write() argument
355 if (WARN_ON(!cb)) in mei_amthif_write()
360 list_add_tail(&cb->list, &dev->amthif_cmd_list.list); in mei_amthif_write()
404 int mei_amthif_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb, in mei_amthif_irq_write() argument
409 ret = mei_cl_irq_write(cl, cb, cmpl_list); in mei_amthif_irq_write()
413 if (cb->completed) in mei_amthif_irq_write()
414 cb->status = mei_amthif_read_start(cl, cb->file_object); in mei_amthif_irq_write()
461 void mei_amthif_complete(struct mei_device *dev, struct mei_cl_cb *cb) in mei_amthif_complete() argument
464 if (cb->fop_type == MEI_FOP_WRITE) { in mei_amthif_complete()
465 if (!cb->status) { in mei_amthif_complete()
467 mei_io_cb_free(cb); in mei_amthif_complete()
474 list_add_tail(&cb->list, &dev->amthif_rd_complete_list.list); in mei_amthif_complete()
482 list_add_tail(&cb->list, &dev->amthif_rd_complete_list.list); in mei_amthif_complete()
512 struct mei_cl_cb *cb, *next; in mei_clear_list() local
516 list_for_each_entry_safe(cb, next, mei_cb_list, list) { in mei_clear_list()
518 if (file == cb->file_object) { in mei_clear_list()
520 if (dev->iamthif_current_cb == cb) { in mei_clear_list()
526 mei_io_cb_free(cb); in mei_clear_list()