Lines Matching refs:cb
342 void mei_io_cb_free(struct mei_cl_cb *cb) in mei_io_cb_free() argument
344 if (cb == NULL) in mei_io_cb_free()
347 list_del(&cb->list); in mei_io_cb_free()
348 kfree(cb->buf.data); in mei_io_cb_free()
349 kfree(cb); in mei_io_cb_free()
364 struct mei_cl_cb *cb; in mei_io_cb_init() local
366 cb = kzalloc(sizeof(struct mei_cl_cb), GFP_KERNEL); in mei_io_cb_init()
367 if (!cb) in mei_io_cb_init()
370 INIT_LIST_HEAD(&cb->list); in mei_io_cb_init()
371 cb->file_object = fp; in mei_io_cb_init()
372 cb->cl = cl; in mei_io_cb_init()
373 cb->buf_idx = 0; in mei_io_cb_init()
374 cb->fop_type = type; in mei_io_cb_init()
375 return cb; in mei_io_cb_init()
388 struct mei_cl_cb *cb, *next; in __mei_io_list_flush() local
391 list_for_each_entry_safe(cb, next, &list->list, list) { in __mei_io_list_flush()
392 if (!cl || mei_cl_cmp_id(cl, cb->cl)) { in __mei_io_list_flush()
393 list_del_init(&cb->list); in __mei_io_list_flush()
395 mei_io_cb_free(cb); in __mei_io_list_flush()
432 int mei_io_cb_alloc_buf(struct mei_cl_cb *cb, size_t length) in mei_io_cb_alloc_buf() argument
434 if (!cb) in mei_io_cb_alloc_buf()
440 cb->buf.data = kmalloc(length, GFP_KERNEL); in mei_io_cb_alloc_buf()
441 if (!cb->buf.data) in mei_io_cb_alloc_buf()
443 cb->buf.size = length; in mei_io_cb_alloc_buf()
460 struct mei_cl_cb *cb; in mei_cl_alloc_cb() local
462 cb = mei_io_cb_init(cl, type, fp); in mei_cl_alloc_cb()
463 if (!cb) in mei_cl_alloc_cb()
466 if (mei_io_cb_alloc_buf(cb, length)) { in mei_cl_alloc_cb()
467 mei_io_cb_free(cb); in mei_cl_alloc_cb()
471 return cb; in mei_cl_alloc_cb()
485 struct mei_cl_cb *cb; in mei_cl_read_cb() local
487 list_for_each_entry(cb, &cl->rd_completed, list) in mei_cl_read_cb()
488 if (!fp || fp == cb->file_object) in mei_cl_read_cb()
489 return cb; in mei_cl_read_cb()
503 struct mei_cl_cb *cb, *next; in mei_cl_read_cb_flush() local
505 list_for_each_entry_safe(cb, next, &cl->rd_completed, list) in mei_cl_read_cb_flush()
506 if (!fp || fp == cb->file_object) in mei_cl_read_cb_flush()
507 mei_io_cb_free(cb); in mei_cl_read_cb_flush()
510 list_for_each_entry_safe(cb, next, &cl->rd_pending, list) in mei_cl_read_cb_flush()
511 if (!fp || fp == cb->file_object) in mei_cl_read_cb_flush()
512 mei_io_cb_free(cb); in mei_cl_read_cb_flush()
789 static int mei_cl_send_disconnect(struct mei_cl *cl, struct mei_cl_cb *cb) in mei_cl_send_disconnect() argument
803 list_move_tail(&cb->list, &dev->ctrl_rd_list.list); in mei_cl_send_disconnect()
819 int mei_cl_irq_disconnect(struct mei_cl *cl, struct mei_cl_cb *cb, in mei_cl_irq_disconnect() argument
833 ret = mei_cl_send_disconnect(cl, cb); in mei_cl_irq_disconnect()
835 list_move_tail(&cb->list, &cmpl_list->list); in mei_cl_irq_disconnect()
851 struct mei_cl_cb *cb; in __mei_cl_disconnect() local
858 cb = mei_io_cb_init(cl, MEI_FOP_DISCONNECT, NULL); in __mei_cl_disconnect()
859 rets = cb ? 0 : -ENOMEM; in __mei_cl_disconnect()
864 list_add_tail(&cb->list, &dev->ctrl_wr_list.list); in __mei_cl_disconnect()
867 rets = mei_cl_send_disconnect(cl, cb); in __mei_cl_disconnect()
891 mei_io_cb_free(cb); in __mei_cl_disconnect()
952 struct mei_cl_cb *cb; in mei_cl_is_other_connecting() local
956 list_for_each_entry(cb, &dev->ctrl_rd_list.list, list) { in mei_cl_is_other_connecting()
957 if (cb->fop_type == MEI_FOP_CONNECT && in mei_cl_is_other_connecting()
958 mei_cl_me_id(cl) == mei_cl_me_id(cb->cl)) in mei_cl_is_other_connecting()
973 static int mei_cl_send_connect(struct mei_cl *cl, struct mei_cl_cb *cb) in mei_cl_send_connect() argument
987 list_move_tail(&cb->list, &dev->ctrl_rd_list.list); in mei_cl_send_connect()
1001 int mei_cl_irq_connect(struct mei_cl *cl, struct mei_cl_cb *cb, in mei_cl_irq_connect() argument
1018 rets = mei_cl_send_connect(cl, cb); in mei_cl_irq_connect()
1020 list_move_tail(&cb->list, &cmpl_list->list); in mei_cl_irq_connect()
1040 struct mei_cl_cb *cb; in mei_cl_connect() local
1064 cb = mei_io_cb_init(cl, MEI_FOP_CONNECT, file); in mei_cl_connect()
1065 rets = cb ? 0 : -ENOMEM; in mei_cl_connect()
1069 list_add_tail(&cb->list, &dev->ctrl_wr_list.list); in mei_cl_connect()
1073 rets = mei_cl_send_connect(cl, cb); in mei_cl_connect()
1109 mei_io_cb_free(cb); in mei_cl_connect()
1248 int mei_cl_irq_notify(struct mei_cl *cl, struct mei_cl_cb *cb, in mei_cl_irq_notify() argument
1263 request = mei_cl_notify_fop2req(cb->fop_type); in mei_cl_irq_notify()
1267 list_move_tail(&cb->list, &cmpl_list->list); in mei_cl_irq_notify()
1271 list_move_tail(&cb->list, &dev->ctrl_rd_list.list); in mei_cl_irq_notify()
1289 struct mei_cl_cb *cb; in mei_cl_notify_request() local
1311 cb = mei_io_cb_init(cl, fop_type, file); in mei_cl_notify_request()
1312 if (!cb) { in mei_cl_notify_request()
1322 list_add_tail(&cb->list, &dev->ctrl_rd_list.list); in mei_cl_notify_request()
1324 list_add_tail(&cb->list, &dev->ctrl_wr_list.list); in mei_cl_notify_request()
1346 mei_io_cb_free(cb); in mei_cl_notify_request()
1436 struct mei_cl_cb *cb; in mei_cl_read_start() local
1458 cb = mei_cl_alloc_cb(cl, length, MEI_FOP_READ, fp); in mei_cl_read_start()
1459 if (!cb) in mei_cl_read_start()
1463 list_add_tail(&cb->list, &cl->rd_pending); in mei_cl_read_start()
1479 list_add_tail(&cb->list, &cl->rd_pending); in mei_cl_read_start()
1482 list_add_tail(&cb->list, &dev->ctrl_wr_list.list); in mei_cl_read_start()
1491 mei_io_cb_free(cb); in mei_cl_read_start()
1506 int mei_cl_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb, in mei_cl_irq_write() argument
1523 buf = &cb->buf; in mei_cl_irq_write()
1525 first_chunk = cb->buf_idx == 0; in mei_cl_irq_write()
1537 len = buf->size - cb->buf_idx; in mei_cl_irq_write()
1543 mei_hdr.internal = cb->internal; in mei_cl_irq_write()
1560 cb->buf.size, cb->buf_idx); in mei_cl_irq_write()
1562 rets = mei_write_message(dev, &mei_hdr, buf->data + cb->buf_idx); in mei_cl_irq_write()
1565 list_move_tail(&cb->list, &cmpl_list->list); in mei_cl_irq_write()
1571 cb->buf_idx += mei_hdr.length; in mei_cl_irq_write()
1572 cb->completed = mei_hdr.msg_complete == 1; in mei_cl_irq_write()
1580 list_move_tail(&cb->list, &dev->write_waiting_list.list); in mei_cl_irq_write()
1595 int mei_cl_write(struct mei_cl *cl, struct mei_cl_cb *cb, bool blocking) in mei_cl_write() argument
1607 if (WARN_ON(!cb)) in mei_cl_write()
1612 buf = &cb->buf; in mei_cl_write()
1624 cb->buf_idx = 0; in mei_cl_write()
1631 mei_hdr.internal = cb->internal; in mei_cl_write()
1666 cb->buf_idx = mei_hdr.length; in mei_cl_write()
1667 cb->completed = mei_hdr.msg_complete == 1; in mei_cl_write()
1671 list_add_tail(&cb->list, &dev->write_waiting_list.list); in mei_cl_write()
1673 list_add_tail(&cb->list, &dev->write_list.list); in mei_cl_write()
1675 cb = NULL; in mei_cl_write()
1706 void mei_cl_complete(struct mei_cl *cl, struct mei_cl_cb *cb) in mei_cl_complete() argument
1710 switch (cb->fop_type) { in mei_cl_complete()
1712 mei_io_cb_free(cb); in mei_cl_complete()
1723 list_add_tail(&cb->list, &cl->rd_completed); in mei_cl_complete()
1739 mei_io_cb_free(cb); in mei_cl_complete()