Lines Matching refs:cb

315 void mei_io_cb_free(struct mei_cl_cb *cb)  in mei_io_cb_free()  argument
317 if (cb == NULL) in mei_io_cb_free()
320 list_del(&cb->list); in mei_io_cb_free()
321 kfree(cb->buf.data); in mei_io_cb_free()
322 kfree(cb); in mei_io_cb_free()
333 static inline void mei_tx_cb_enqueue(struct mei_cl_cb *cb, in mei_tx_cb_enqueue() argument
336 list_add_tail(&cb->list, head); in mei_tx_cb_enqueue()
337 cb->cl->tx_cb_queued++; in mei_tx_cb_enqueue()
347 static inline void mei_tx_cb_dequeue(struct mei_cl_cb *cb) in mei_tx_cb_dequeue() argument
349 if (!WARN_ON(cb->cl->tx_cb_queued == 0)) in mei_tx_cb_dequeue()
350 cb->cl->tx_cb_queued--; in mei_tx_cb_dequeue()
352 mei_io_cb_free(cb); in mei_tx_cb_dequeue()
368 struct mei_cl_cb *cb; in mei_io_cb_init() local
370 cb = kzalloc(sizeof(struct mei_cl_cb), GFP_KERNEL); in mei_io_cb_init()
371 if (!cb) in mei_io_cb_init()
374 INIT_LIST_HEAD(&cb->list); in mei_io_cb_init()
375 cb->fp = fp; in mei_io_cb_init()
376 cb->cl = cl; in mei_io_cb_init()
377 cb->buf_idx = 0; in mei_io_cb_init()
378 cb->fop_type = type; in mei_io_cb_init()
379 return cb; in mei_io_cb_init()
391 struct mei_cl_cb *cb, *next; in mei_io_list_flush_cl() local
393 list_for_each_entry_safe(cb, next, head, list) { in mei_io_list_flush_cl()
394 if (cl == cb->cl) { in mei_io_list_flush_cl()
395 list_del_init(&cb->list); in mei_io_list_flush_cl()
396 if (cb->fop_type == MEI_FOP_READ) in mei_io_list_flush_cl()
397 mei_io_cb_free(cb); in mei_io_list_flush_cl()
411 struct mei_cl_cb *cb, *next; in mei_io_tx_list_free_cl() local
413 list_for_each_entry_safe(cb, next, head, list) { in mei_io_tx_list_free_cl()
414 if (cl == cb->cl) in mei_io_tx_list_free_cl()
415 mei_tx_cb_dequeue(cb); in mei_io_tx_list_free_cl()
427 struct mei_cl_cb *cb, *next; in mei_io_list_free_fp() local
429 list_for_each_entry_safe(cb, next, head, list) in mei_io_list_free_fp()
430 if (!fp || fp == cb->fp) in mei_io_list_free_fp()
431 mei_io_cb_free(cb); in mei_io_list_free_fp()
448 struct mei_cl_cb *cb; in mei_cl_alloc_cb() local
450 cb = mei_io_cb_init(cl, fop_type, fp); in mei_cl_alloc_cb()
451 if (!cb) in mei_cl_alloc_cb()
455 return cb; in mei_cl_alloc_cb()
457 cb->buf.data = kmalloc(roundup(length, MEI_SLOT_SIZE), GFP_KERNEL); in mei_cl_alloc_cb()
458 if (!cb->buf.data) { in mei_cl_alloc_cb()
459 mei_io_cb_free(cb); in mei_cl_alloc_cb()
462 cb->buf.size = length; in mei_cl_alloc_cb()
464 return cb; in mei_cl_alloc_cb()
483 struct mei_cl_cb *cb; in mei_cl_enqueue_ctrl_wr_cb() local
489 cb = mei_cl_alloc_cb(cl, length, fop_type, fp); in mei_cl_enqueue_ctrl_wr_cb()
490 if (!cb) in mei_cl_enqueue_ctrl_wr_cb()
493 list_add_tail(&cb->list, &cl->dev->ctrl_wr_list); in mei_cl_enqueue_ctrl_wr_cb()
494 return cb; in mei_cl_enqueue_ctrl_wr_cb()
508 struct mei_cl_cb *cb; in mei_cl_read_cb() local
510 list_for_each_entry(cb, &cl->rd_completed, list) in mei_cl_read_cb()
511 if (!fp || fp == cb->fp) in mei_cl_read_cb()
512 return cb; in mei_cl_read_cb()
803 static int mei_cl_send_disconnect(struct mei_cl *cl, struct mei_cl_cb *cb) in mei_cl_send_disconnect() argument
817 list_move_tail(&cb->list, &dev->ctrl_rd_list); in mei_cl_send_disconnect()
834 int mei_cl_irq_disconnect(struct mei_cl *cl, struct mei_cl_cb *cb, in mei_cl_irq_disconnect() argument
850 ret = mei_cl_send_disconnect(cl, cb); in mei_cl_irq_disconnect()
852 list_move_tail(&cb->list, cmpl_list); in mei_cl_irq_disconnect()
868 struct mei_cl_cb *cb; in __mei_cl_disconnect() local
875 cb = mei_cl_enqueue_ctrl_wr_cb(cl, 0, MEI_FOP_DISCONNECT, NULL); in __mei_cl_disconnect()
876 if (!cb) { in __mei_cl_disconnect()
882 rets = mei_cl_send_disconnect(cl, cb); in __mei_cl_disconnect()
909 mei_io_cb_free(cb); in __mei_cl_disconnect()
976 struct mei_cl_cb *cb; in mei_cl_is_other_connecting() local
980 list_for_each_entry(cb, &dev->ctrl_rd_list, list) { in mei_cl_is_other_connecting()
981 if (cb->fop_type == MEI_FOP_CONNECT && in mei_cl_is_other_connecting()
982 mei_cl_me_id(cl) == mei_cl_me_id(cb->cl)) in mei_cl_is_other_connecting()
997 static int mei_cl_send_connect(struct mei_cl *cl, struct mei_cl_cb *cb) in mei_cl_send_connect() argument
1011 list_move_tail(&cb->list, &dev->ctrl_rd_list); in mei_cl_send_connect()
1026 int mei_cl_irq_connect(struct mei_cl *cl, struct mei_cl_cb *cb, in mei_cl_irq_connect() argument
1045 rets = mei_cl_send_connect(cl, cb); in mei_cl_irq_connect()
1047 list_move_tail(&cb->list, cmpl_list); in mei_cl_irq_connect()
1067 struct mei_cl_cb *cb; in mei_cl_connect() local
1092 cb = mei_cl_enqueue_ctrl_wr_cb(cl, 0, MEI_FOP_CONNECT, fp); in mei_cl_connect()
1093 if (!cb) { in mei_cl_connect()
1100 rets = mei_cl_send_connect(cl, cb); in mei_cl_connect()
1137 mei_io_cb_free(cb); in mei_cl_connect()
1268 int mei_cl_irq_notify(struct mei_cl *cl, struct mei_cl_cb *cb, in mei_cl_irq_notify() argument
1285 request = mei_cl_notify_fop2req(cb->fop_type); in mei_cl_irq_notify()
1289 list_move_tail(&cb->list, cmpl_list); in mei_cl_irq_notify()
1293 list_move_tail(&cb->list, &dev->ctrl_rd_list); in mei_cl_irq_notify()
1312 struct mei_cl_cb *cb; in mei_cl_notify_request() local
1337 cb = mei_cl_enqueue_ctrl_wr_cb(cl, 0, fop_type, fp); in mei_cl_notify_request()
1338 if (!cb) { in mei_cl_notify_request()
1348 list_move_tail(&cb->list, &dev->ctrl_rd_list); in mei_cl_notify_request()
1369 mei_io_cb_free(cb); in mei_cl_notify_request()
1464 struct mei_cl_cb *cb; in mei_cl_read_start() local
1487 cb = mei_cl_enqueue_ctrl_wr_cb(cl, length, MEI_FOP_READ, fp); in mei_cl_read_start()
1488 if (!cb) in mei_cl_read_start()
1504 list_move_tail(&cb->list, &cl->rd_pending); in mei_cl_read_start()
1514 mei_io_cb_free(cb); in mei_cl_read_start()
1525 static void mei_msg_hdr_init(struct mei_msg_hdr *mei_hdr, struct mei_cl_cb *cb) in mei_msg_hdr_init() argument
1527 mei_hdr->host_addr = mei_cl_host_addr(cb->cl); in mei_msg_hdr_init()
1528 mei_hdr->me_addr = mei_cl_me_id(cb->cl); in mei_msg_hdr_init()
1533 mei_hdr->internal = cb->internal; in mei_msg_hdr_init()
1546 int mei_cl_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb, in mei_cl_irq_write() argument
1567 buf = &cb->buf; in mei_cl_irq_write()
1569 first_chunk = cb->buf_idx == 0; in mei_cl_irq_write()
1580 len = buf->size - cb->buf_idx; in mei_cl_irq_write()
1581 data = buf->data + cb->buf_idx; in mei_cl_irq_write()
1592 mei_msg_hdr_init(&mei_hdr, cb); in mei_cl_irq_write()
1619 mei_dma_ring_write(dev, buf->data + cb->buf_idx, len); in mei_cl_irq_write()
1627 cb->buf_idx += len; in mei_cl_irq_write()
1637 list_move_tail(&cb->list, &dev->write_waiting_list); in mei_cl_irq_write()
1643 list_move_tail(&cb->list, cmpl_list); in mei_cl_irq_write()
1656 ssize_t mei_cl_write(struct mei_cl *cl, struct mei_cl_cb *cb) in mei_cl_write() argument
1673 if (WARN_ON(!cb)) in mei_cl_write()
1678 buf = &cb->buf; in mei_cl_write()
1683 blocking = cb->blocking; in mei_cl_write()
1693 cb->buf_idx = 0; in mei_cl_write()
1701 mei_msg_hdr_init(&mei_hdr, cb); in mei_cl_write()
1756 cb->buf_idx = len; in mei_cl_write()
1762 mei_tx_cb_enqueue(cb, &dev->write_waiting_list); in mei_cl_write()
1764 mei_tx_cb_enqueue(cb, &dev->write_list); in mei_cl_write()
1766 cb = NULL; in mei_cl_write()
1792 mei_io_cb_free(cb); in mei_cl_write()
1804 void mei_cl_complete(struct mei_cl *cl, struct mei_cl_cb *cb) in mei_cl_complete() argument
1808 switch (cb->fop_type) { in mei_cl_complete()
1810 mei_tx_cb_dequeue(cb); in mei_cl_complete()
1821 list_add_tail(&cb->list, &cl->rd_completed); in mei_cl_complete()
1838 mei_io_cb_free(cb); in mei_cl_complete()