Lines Matching refs:cb
328 void mei_io_cb_free(struct mei_cl_cb *cb) in mei_io_cb_free() argument
330 if (cb == NULL) in mei_io_cb_free()
333 list_del(&cb->list); in mei_io_cb_free()
334 kfree(cb->buf.data); in mei_io_cb_free()
335 kfree(cb); in mei_io_cb_free()
350 struct mei_cl_cb *cb; in mei_io_cb_init() local
352 cb = kzalloc(sizeof(struct mei_cl_cb), GFP_KERNEL); in mei_io_cb_init()
353 if (!cb) in mei_io_cb_init()
356 INIT_LIST_HEAD(&cb->list); in mei_io_cb_init()
357 cb->file_object = fp; in mei_io_cb_init()
358 cb->cl = cl; in mei_io_cb_init()
359 cb->buf_idx = 0; in mei_io_cb_init()
360 cb->fop_type = type; in mei_io_cb_init()
361 return cb; in mei_io_cb_init()
374 struct mei_cl_cb *cb, *next; in __mei_io_list_flush() local
377 list_for_each_entry_safe(cb, next, &list->list, list) { in __mei_io_list_flush()
378 if (!cl || mei_cl_cmp_id(cl, cb->cl)) { in __mei_io_list_flush()
379 list_del_init(&cb->list); in __mei_io_list_flush()
381 mei_io_cb_free(cb); in __mei_io_list_flush()
418 int mei_io_cb_alloc_buf(struct mei_cl_cb *cb, size_t length) in mei_io_cb_alloc_buf() argument
420 if (!cb) in mei_io_cb_alloc_buf()
426 cb->buf.data = kmalloc(length, GFP_KERNEL); in mei_io_cb_alloc_buf()
427 if (!cb->buf.data) in mei_io_cb_alloc_buf()
429 cb->buf.size = length; in mei_io_cb_alloc_buf()
446 struct mei_cl_cb *cb; in mei_cl_alloc_cb() local
448 cb = mei_io_cb_init(cl, type, fp); in mei_cl_alloc_cb()
449 if (!cb) in mei_cl_alloc_cb()
452 if (mei_io_cb_alloc_buf(cb, length)) { in mei_cl_alloc_cb()
453 mei_io_cb_free(cb); in mei_cl_alloc_cb()
457 return cb; in mei_cl_alloc_cb()
471 struct mei_cl_cb *cb; in mei_cl_read_cb() local
473 list_for_each_entry(cb, &cl->rd_completed, list) in mei_cl_read_cb()
474 if (!fp || fp == cb->file_object) in mei_cl_read_cb()
475 return cb; in mei_cl_read_cb()
489 struct mei_cl_cb *cb, *next; in mei_cl_read_cb_flush() local
491 list_for_each_entry_safe(cb, next, &cl->rd_completed, list) in mei_cl_read_cb_flush()
492 if (!fp || fp == cb->file_object) in mei_cl_read_cb_flush()
493 mei_io_cb_free(cb); in mei_cl_read_cb_flush()
496 list_for_each_entry_safe(cb, next, &cl->rd_pending, list) in mei_cl_read_cb_flush()
497 if (!fp || fp == cb->file_object) in mei_cl_read_cb_flush()
498 mei_io_cb_free(cb); in mei_cl_read_cb_flush()
729 struct mei_cl_cb *cb; in mei_cl_disconnect() local
749 cb = mei_io_cb_init(cl, MEI_FOP_DISCONNECT, NULL); in mei_cl_disconnect()
750 rets = cb ? 0 : -ENOMEM; in mei_cl_disconnect()
762 list_add_tail(&cb->list, &dev->ctrl_rd_list.list); in mei_cl_disconnect()
765 list_add_tail(&cb->list, &dev->ctrl_wr_list.list); in mei_cl_disconnect()
791 mei_io_cb_free(cb); in mei_cl_disconnect()
838 struct mei_cl_cb *cb; in mei_cl_connect() local
853 cb = mei_io_cb_init(cl, MEI_FOP_CONNECT, file); in mei_cl_connect()
854 rets = cb ? 0 : -ENOMEM; in mei_cl_connect()
866 list_add_tail(&cb->list, &dev->ctrl_rd_list.list); in mei_cl_connect()
869 list_add_tail(&cb->list, &dev->ctrl_wr_list.list); in mei_cl_connect()
896 mei_io_cb_free(cb); in mei_cl_connect()
1027 struct mei_cl_cb *cb; in mei_cl_read_start() local
1059 cb = mei_cl_alloc_cb(cl, length, MEI_FOP_READ, fp); in mei_cl_read_start()
1060 rets = cb ? 0 : -ENOMEM; in mei_cl_read_start()
1069 list_add_tail(&cb->list, &cl->rd_pending); in mei_cl_read_start()
1071 list_add_tail(&cb->list, &dev->ctrl_wr_list.list); in mei_cl_read_start()
1080 mei_io_cb_free(cb); in mei_cl_read_start()
1095 int mei_cl_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb, in mei_cl_irq_write() argument
1111 buf = &cb->buf; in mei_cl_irq_write()
1123 len = buf->size - cb->buf_idx; in mei_cl_irq_write()
1129 mei_hdr.internal = cb->internal; in mei_cl_irq_write()
1146 cb->buf.size, cb->buf_idx); in mei_cl_irq_write()
1148 rets = mei_write_message(dev, &mei_hdr, buf->data + cb->buf_idx); in mei_cl_irq_write()
1151 list_move_tail(&cb->list, &cmpl_list->list); in mei_cl_irq_write()
1157 cb->buf_idx += mei_hdr.length; in mei_cl_irq_write()
1158 cb->completed = mei_hdr.msg_complete == 1; in mei_cl_irq_write()
1163 list_move_tail(&cb->list, &dev->write_waiting_list.list); in mei_cl_irq_write()
1179 int mei_cl_write(struct mei_cl *cl, struct mei_cl_cb *cb, bool blocking) in mei_cl_write() argument
1190 if (WARN_ON(!cb)) in mei_cl_write()
1196 buf = &cb->buf; in mei_cl_write()
1207 cb->buf_idx = 0; in mei_cl_write()
1214 mei_hdr.internal = cb->internal; in mei_cl_write()
1245 cb->buf_idx = mei_hdr.length; in mei_cl_write()
1246 cb->completed = mei_hdr.msg_complete == 1; in mei_cl_write()
1254 list_add_tail(&cb->list, &dev->write_waiting_list.list); in mei_cl_write()
1256 list_add_tail(&cb->list, &dev->write_list.list); in mei_cl_write()
1290 void mei_cl_complete(struct mei_cl *cl, struct mei_cl_cb *cb) in mei_cl_complete() argument
1292 if (cb->fop_type == MEI_FOP_WRITE) { in mei_cl_complete()
1293 mei_io_cb_free(cb); in mei_cl_complete()
1294 cb = NULL; in mei_cl_complete()
1299 } else if (cb->fop_type == MEI_FOP_READ) { in mei_cl_complete()
1300 list_add_tail(&cb->list, &cl->rd_completed); in mei_cl_complete()