Lines Matching refs:cl

337 	cb->cl->tx_cb_queued++;  in mei_tx_cb_enqueue()
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()
364 static struct mei_cl_cb *mei_io_cb_init(struct mei_cl *cl, in mei_io_cb_init() argument
376 cb->cl = cl; in mei_io_cb_init()
389 const struct mei_cl *cl) in mei_io_list_flush_cl() argument
394 if (cl == cb->cl) { in mei_io_list_flush_cl()
409 const struct mei_cl *cl) in mei_io_tx_list_free_cl() argument
414 if (cl == cb->cl) in mei_io_tx_list_free_cl()
444 struct mei_cl_cb *mei_cl_alloc_cb(struct mei_cl *cl, size_t length, in mei_cl_alloc_cb() argument
450 cb = mei_io_cb_init(cl, fop_type, fp); in mei_cl_alloc_cb()
479 struct mei_cl_cb *mei_cl_enqueue_ctrl_wr_cb(struct mei_cl *cl, size_t length, in mei_cl_enqueue_ctrl_wr_cb() argument
487 length = max_t(size_t, length, mei_cl_mtu(cl)); in mei_cl_enqueue_ctrl_wr_cb()
489 cb = mei_cl_alloc_cb(cl, length, fop_type, fp); 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()
506 struct mei_cl_cb *mei_cl_read_cb(const struct mei_cl *cl, const struct file *fp) in mei_cl_read_cb() argument
510 list_for_each_entry(cb, &cl->rd_completed, list) in mei_cl_read_cb()
525 int mei_cl_flush_queues(struct mei_cl *cl, const struct file *fp) in mei_cl_flush_queues() argument
529 if (WARN_ON(!cl || !cl->dev)) in mei_cl_flush_queues()
532 dev = cl->dev; in mei_cl_flush_queues()
534 cl_dbg(dev, cl, "remove list entry belonging to cl\n"); in mei_cl_flush_queues()
535 mei_io_tx_list_free_cl(&cl->dev->write_list, cl); in mei_cl_flush_queues()
536 mei_io_tx_list_free_cl(&cl->dev->write_waiting_list, cl); in mei_cl_flush_queues()
537 mei_io_list_flush_cl(&cl->dev->ctrl_wr_list, cl); in mei_cl_flush_queues()
538 mei_io_list_flush_cl(&cl->dev->ctrl_rd_list, cl); in mei_cl_flush_queues()
539 mei_io_list_free_fp(&cl->rd_pending, fp); in mei_cl_flush_queues()
540 mei_io_list_free_fp(&cl->rd_completed, fp); in mei_cl_flush_queues()
551 static void mei_cl_init(struct mei_cl *cl, struct mei_device *dev) in mei_cl_init() argument
553 memset(cl, 0, sizeof(struct mei_cl)); in mei_cl_init()
554 init_waitqueue_head(&cl->wait); in mei_cl_init()
555 init_waitqueue_head(&cl->rx_wait); in mei_cl_init()
556 init_waitqueue_head(&cl->tx_wait); in mei_cl_init()
557 init_waitqueue_head(&cl->ev_wait); in mei_cl_init()
558 INIT_LIST_HEAD(&cl->rd_completed); in mei_cl_init()
559 INIT_LIST_HEAD(&cl->rd_pending); in mei_cl_init()
560 INIT_LIST_HEAD(&cl->link); in mei_cl_init()
561 cl->writing_state = MEI_IDLE; in mei_cl_init()
562 cl->state = MEI_FILE_UNINITIALIZED; in mei_cl_init()
563 cl->dev = dev; in mei_cl_init()
574 struct mei_cl *cl; in mei_cl_allocate() local
576 cl = kmalloc(sizeof(struct mei_cl), GFP_KERNEL); in mei_cl_allocate()
577 if (!cl) in mei_cl_allocate()
580 mei_cl_init(cl, dev); in mei_cl_allocate()
582 return cl; in mei_cl_allocate()
594 int mei_cl_link(struct mei_cl *cl) in mei_cl_link() argument
599 if (WARN_ON(!cl || !cl->dev)) in mei_cl_link()
602 dev = cl->dev; in mei_cl_link()
618 cl->host_client_id = id; in mei_cl_link()
619 list_add_tail(&cl->link, &dev->file_list); in mei_cl_link()
623 cl->state = MEI_FILE_INITIALIZING; in mei_cl_link()
625 cl_dbg(dev, cl, "link cl\n"); in mei_cl_link()
636 int mei_cl_unlink(struct mei_cl *cl) in mei_cl_unlink() argument
641 if (!cl) in mei_cl_unlink()
644 if (WARN_ON(!cl->dev)) in mei_cl_unlink()
647 dev = cl->dev; in mei_cl_unlink()
649 cl_dbg(dev, cl, "unlink client"); in mei_cl_unlink()
655 if (cl->host_client_id) in mei_cl_unlink()
656 clear_bit(cl->host_client_id, dev->host_clients_map); in mei_cl_unlink()
658 list_del_init(&cl->link); in mei_cl_unlink()
660 cl->state = MEI_FILE_UNINITIALIZED; in mei_cl_unlink()
661 cl->writing_state = MEI_IDLE; in mei_cl_unlink()
663 WARN_ON(!list_empty(&cl->rd_completed) || in mei_cl_unlink()
664 !list_empty(&cl->rd_pending) || in mei_cl_unlink()
665 !list_empty(&cl->link)); in mei_cl_unlink()
712 static void mei_cl_wake_all(struct mei_cl *cl) in mei_cl_wake_all() argument
714 struct mei_device *dev = cl->dev; in mei_cl_wake_all()
717 if (waitqueue_active(&cl->rx_wait)) { in mei_cl_wake_all()
718 cl_dbg(dev, cl, "Waking up reading client!\n"); in mei_cl_wake_all()
719 wake_up_interruptible(&cl->rx_wait); in mei_cl_wake_all()
722 if (waitqueue_active(&cl->tx_wait)) { in mei_cl_wake_all()
723 cl_dbg(dev, cl, "Waking up writing client!\n"); in mei_cl_wake_all()
724 wake_up_interruptible(&cl->tx_wait); in mei_cl_wake_all()
727 if (waitqueue_active(&cl->ev_wait)) { in mei_cl_wake_all()
728 cl_dbg(dev, cl, "Waking up waiting for event clients!\n"); in mei_cl_wake_all()
729 wake_up_interruptible(&cl->ev_wait); in mei_cl_wake_all()
732 if (waitqueue_active(&cl->wait)) { in mei_cl_wake_all()
733 cl_dbg(dev, cl, "Waking up ctrl write clients!\n"); in mei_cl_wake_all()
734 wake_up(&cl->wait); in mei_cl_wake_all()
744 static void mei_cl_set_disconnected(struct mei_cl *cl) in mei_cl_set_disconnected() argument
746 struct mei_device *dev = cl->dev; in mei_cl_set_disconnected()
748 if (cl->state == MEI_FILE_DISCONNECTED || in mei_cl_set_disconnected()
749 cl->state <= MEI_FILE_INITIALIZING) in mei_cl_set_disconnected()
752 cl->state = MEI_FILE_DISCONNECTED; in mei_cl_set_disconnected()
753 mei_io_tx_list_free_cl(&dev->write_list, cl); in mei_cl_set_disconnected()
754 mei_io_tx_list_free_cl(&dev->write_waiting_list, cl); in mei_cl_set_disconnected()
755 mei_io_list_flush_cl(&dev->ctrl_rd_list, cl); in mei_cl_set_disconnected()
756 mei_io_list_flush_cl(&dev->ctrl_wr_list, cl); in mei_cl_set_disconnected()
757 mei_cl_wake_all(cl); in mei_cl_set_disconnected()
758 cl->rx_flow_ctrl_creds = 0; in mei_cl_set_disconnected()
759 cl->tx_flow_ctrl_creds = 0; in mei_cl_set_disconnected()
760 cl->timer_count = 0; in mei_cl_set_disconnected()
762 if (!cl->me_cl) in mei_cl_set_disconnected()
765 if (!WARN_ON(cl->me_cl->connect_count == 0)) in mei_cl_set_disconnected()
766 cl->me_cl->connect_count--; in mei_cl_set_disconnected()
768 if (cl->me_cl->connect_count == 0) in mei_cl_set_disconnected()
769 cl->me_cl->tx_flow_ctrl_creds = 0; in mei_cl_set_disconnected()
771 mei_me_cl_put(cl->me_cl); in mei_cl_set_disconnected()
772 cl->me_cl = NULL; in mei_cl_set_disconnected()
775 static int mei_cl_set_connecting(struct mei_cl *cl, struct mei_me_client *me_cl) in mei_cl_set_connecting() argument
788 cl->me_cl = me_cl; in mei_cl_set_connecting()
789 cl->state = MEI_FILE_CONNECTING; in mei_cl_set_connecting()
790 cl->me_cl->connect_count++; in mei_cl_set_connecting()
803 static int mei_cl_send_disconnect(struct mei_cl *cl, struct mei_cl_cb *cb) in mei_cl_send_disconnect() argument
808 dev = cl->dev; in mei_cl_send_disconnect()
810 ret = mei_hbm_cl_disconnect_req(dev, cl); in mei_cl_send_disconnect()
811 cl->status = ret; in mei_cl_send_disconnect()
813 cl->state = MEI_FILE_DISCONNECT_REPLY; in mei_cl_send_disconnect()
818 cl->timer_count = MEI_CONNECT_TIMEOUT; 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
837 struct mei_device *dev = cl->dev; in mei_cl_irq_disconnect()
850 ret = mei_cl_send_disconnect(cl, cb); in mei_cl_irq_disconnect()
865 static int __mei_cl_disconnect(struct mei_cl *cl) in __mei_cl_disconnect() argument
871 dev = cl->dev; in __mei_cl_disconnect()
873 cl->state = MEI_FILE_DISCONNECTING; in __mei_cl_disconnect()
875 cb = mei_cl_enqueue_ctrl_wr_cb(cl, 0, MEI_FOP_DISCONNECT, NULL); in __mei_cl_disconnect()
882 rets = mei_cl_send_disconnect(cl, cb); in __mei_cl_disconnect()
884 cl_err(dev, cl, "failed to disconnect.\n"); in __mei_cl_disconnect()
890 wait_event_timeout(cl->wait, in __mei_cl_disconnect()
891 cl->state == MEI_FILE_DISCONNECT_REPLY || in __mei_cl_disconnect()
892 cl->state == MEI_FILE_DISCONNECTED, in __mei_cl_disconnect()
896 rets = cl->status; in __mei_cl_disconnect()
897 if (cl->state != MEI_FILE_DISCONNECT_REPLY && in __mei_cl_disconnect()
898 cl->state != MEI_FILE_DISCONNECTED) { in __mei_cl_disconnect()
899 cl_dbg(dev, cl, "timeout on disconnect from FW client.\n"); in __mei_cl_disconnect()
905 mei_cl_set_disconnected(cl); in __mei_cl_disconnect()
907 cl_dbg(dev, cl, "successfully disconnected from FW client.\n"); in __mei_cl_disconnect()
922 int mei_cl_disconnect(struct mei_cl *cl) in mei_cl_disconnect() argument
927 if (WARN_ON(!cl || !cl->dev)) in mei_cl_disconnect()
930 dev = cl->dev; in mei_cl_disconnect()
932 cl_dbg(dev, cl, "disconnecting"); in mei_cl_disconnect()
934 if (!mei_cl_is_connected(cl)) in mei_cl_disconnect()
937 if (mei_cl_is_fixed_address(cl)) { in mei_cl_disconnect()
938 mei_cl_set_disconnected(cl); in mei_cl_disconnect()
943 cl_dbg(dev, cl, "Device is powering down, don't bother with disconnection\n"); in mei_cl_disconnect()
944 mei_cl_set_disconnected(cl); in mei_cl_disconnect()
951 cl_err(dev, cl, "rpm: get failed %d\n", rets); in mei_cl_disconnect()
955 rets = __mei_cl_disconnect(cl); in mei_cl_disconnect()
957 cl_dbg(dev, cl, "rpm: autosuspend\n"); in mei_cl_disconnect()
973 static bool mei_cl_is_other_connecting(struct mei_cl *cl) in mei_cl_is_other_connecting() argument
978 dev = cl->dev; 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
1002 dev = cl->dev; in mei_cl_send_connect()
1004 ret = mei_hbm_cl_connect_req(dev, cl); in mei_cl_send_connect()
1005 cl->status = ret; in mei_cl_send_connect()
1007 cl->state = MEI_FILE_DISCONNECT_REPLY; in mei_cl_send_connect()
1012 cl->timer_count = MEI_CONNECT_TIMEOUT; 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
1029 struct mei_device *dev = cl->dev; in mei_cl_irq_connect()
1034 if (mei_cl_is_other_connecting(cl)) in mei_cl_irq_connect()
1045 rets = mei_cl_send_connect(cl, cb); in mei_cl_irq_connect()
1063 int mei_cl_connect(struct mei_cl *cl, struct mei_me_client *me_cl, in mei_cl_connect() argument
1070 if (WARN_ON(!cl || !cl->dev || !me_cl)) in mei_cl_connect()
1073 dev = cl->dev; in mei_cl_connect()
1075 rets = mei_cl_set_connecting(cl, me_cl); in mei_cl_connect()
1079 if (mei_cl_is_fixed_address(cl)) { in mei_cl_connect()
1080 cl->state = MEI_FILE_CONNECTED; in mei_cl_connect()
1088 cl_err(dev, cl, "rpm: get failed %d\n", rets); in mei_cl_connect()
1092 cb = mei_cl_enqueue_ctrl_wr_cb(cl, 0, MEI_FOP_CONNECT, fp); in mei_cl_connect()
1099 if (!mei_cl_is_other_connecting(cl) && mei_hbuf_acquire(dev)) { in mei_cl_connect()
1100 rets = mei_cl_send_connect(cl, cb); in mei_cl_connect()
1106 wait_event_timeout(cl->wait, in mei_cl_connect()
1107 (cl->state == MEI_FILE_CONNECTED || in mei_cl_connect()
1108 cl->state == MEI_FILE_DISCONNECTED || in mei_cl_connect()
1109 cl->state == MEI_FILE_DISCONNECT_REQUIRED || in mei_cl_connect()
1110 cl->state == MEI_FILE_DISCONNECT_REPLY), in mei_cl_connect()
1114 if (!mei_cl_is_connected(cl)) { in mei_cl_connect()
1115 if (cl->state == MEI_FILE_DISCONNECT_REQUIRED) { in mei_cl_connect()
1116 mei_io_list_flush_cl(&dev->ctrl_rd_list, cl); in mei_cl_connect()
1117 mei_io_list_flush_cl(&dev->ctrl_wr_list, cl); in mei_cl_connect()
1121 __mei_cl_disconnect(cl); in mei_cl_connect()
1127 if (!cl->status) in mei_cl_connect()
1128 cl->status = -EFAULT; in mei_cl_connect()
1131 rets = cl->status; in mei_cl_connect()
1133 cl_dbg(dev, cl, "rpm: autosuspend\n"); in mei_cl_connect()
1140 if (!mei_cl_is_connected(cl)) in mei_cl_connect()
1141 mei_cl_set_disconnected(cl); in mei_cl_connect()
1155 struct mei_cl *cl; in mei_cl_alloc_linked() local
1158 cl = mei_cl_allocate(dev); in mei_cl_alloc_linked()
1159 if (!cl) { in mei_cl_alloc_linked()
1164 ret = mei_cl_link(cl); in mei_cl_alloc_linked()
1168 return cl; in mei_cl_alloc_linked()
1170 kfree(cl); in mei_cl_alloc_linked()
1181 static int mei_cl_tx_flow_ctrl_creds(struct mei_cl *cl) in mei_cl_tx_flow_ctrl_creds() argument
1183 if (WARN_ON(!cl || !cl->me_cl)) in mei_cl_tx_flow_ctrl_creds()
1186 if (cl->tx_flow_ctrl_creds > 0) in mei_cl_tx_flow_ctrl_creds()
1189 if (mei_cl_is_fixed_address(cl)) in mei_cl_tx_flow_ctrl_creds()
1192 if (mei_cl_is_single_recv_buf(cl)) { in mei_cl_tx_flow_ctrl_creds()
1193 if (cl->me_cl->tx_flow_ctrl_creds > 0) in mei_cl_tx_flow_ctrl_creds()
1209 static int mei_cl_tx_flow_ctrl_creds_reduce(struct mei_cl *cl) in mei_cl_tx_flow_ctrl_creds_reduce() argument
1211 if (WARN_ON(!cl || !cl->me_cl)) in mei_cl_tx_flow_ctrl_creds_reduce()
1214 if (mei_cl_is_fixed_address(cl)) in mei_cl_tx_flow_ctrl_creds_reduce()
1217 if (mei_cl_is_single_recv_buf(cl)) { in mei_cl_tx_flow_ctrl_creds_reduce()
1218 if (WARN_ON(cl->me_cl->tx_flow_ctrl_creds <= 0)) in mei_cl_tx_flow_ctrl_creds_reduce()
1220 cl->me_cl->tx_flow_ctrl_creds--; in mei_cl_tx_flow_ctrl_creds_reduce()
1222 if (WARN_ON(cl->tx_flow_ctrl_creds <= 0)) in mei_cl_tx_flow_ctrl_creds_reduce()
1224 cl->tx_flow_ctrl_creds--; in mei_cl_tx_flow_ctrl_creds_reduce()
1268 int mei_cl_irq_notify(struct mei_cl *cl, struct mei_cl_cb *cb, in mei_cl_irq_notify() argument
1271 struct mei_device *dev = cl->dev; in mei_cl_irq_notify()
1286 ret = mei_hbm_cl_notify_req(dev, cl, request); in mei_cl_irq_notify()
1288 cl->status = ret; in mei_cl_irq_notify()
1308 int mei_cl_notify_request(struct mei_cl *cl, in mei_cl_notify_request() argument
1316 if (WARN_ON(!cl || !cl->dev)) in mei_cl_notify_request()
1319 dev = cl->dev; in mei_cl_notify_request()
1322 cl_dbg(dev, cl, "notifications not supported\n"); in mei_cl_notify_request()
1326 if (!mei_cl_is_connected(cl)) in mei_cl_notify_request()
1332 cl_err(dev, cl, "rpm: get failed %d\n", rets); in mei_cl_notify_request()
1337 cb = mei_cl_enqueue_ctrl_wr_cb(cl, 0, fop_type, fp); in mei_cl_notify_request()
1344 if (mei_hbm_cl_notify_req(dev, cl, request)) { in mei_cl_notify_request()
1352 wait_event_timeout(cl->wait, in mei_cl_notify_request()
1353 cl->notify_en == request || in mei_cl_notify_request()
1354 cl->status || in mei_cl_notify_request()
1355 !mei_cl_is_connected(cl), in mei_cl_notify_request()
1359 if (cl->notify_en != request && !cl->status) in mei_cl_notify_request()
1360 cl->status = -EFAULT; in mei_cl_notify_request()
1362 rets = cl->status; in mei_cl_notify_request()
1365 cl_dbg(dev, cl, "rpm: autosuspend\n"); in mei_cl_notify_request()
1380 void mei_cl_notify(struct mei_cl *cl) in mei_cl_notify() argument
1384 if (!cl || !cl->dev) in mei_cl_notify()
1387 dev = cl->dev; in mei_cl_notify()
1389 if (!cl->notify_en) in mei_cl_notify()
1392 cl_dbg(dev, cl, "notify event"); in mei_cl_notify()
1393 cl->notify_ev = true; in mei_cl_notify()
1394 if (!mei_cl_bus_notify_event(cl)) in mei_cl_notify()
1395 wake_up_interruptible(&cl->ev_wait); in mei_cl_notify()
1397 if (cl->ev_async) in mei_cl_notify()
1398 kill_fasync(&cl->ev_async, SIGIO, POLL_PRI); in mei_cl_notify()
1413 int mei_cl_notify_get(struct mei_cl *cl, bool block, bool *notify_ev) in mei_cl_notify_get() argument
1420 if (WARN_ON(!cl || !cl->dev)) in mei_cl_notify_get()
1423 dev = cl->dev; in mei_cl_notify_get()
1426 cl_dbg(dev, cl, "notifications not supported\n"); in mei_cl_notify_get()
1430 if (!mei_cl_is_connected(cl)) in mei_cl_notify_get()
1433 if (cl->notify_ev) in mei_cl_notify_get()
1440 rets = wait_event_interruptible(cl->ev_wait, cl->notify_ev); in mei_cl_notify_get()
1447 *notify_ev = cl->notify_ev; in mei_cl_notify_get()
1448 cl->notify_ev = false; in mei_cl_notify_get()
1461 int mei_cl_read_start(struct mei_cl *cl, size_t length, const struct file *fp) in mei_cl_read_start() argument
1467 if (WARN_ON(!cl || !cl->dev)) in mei_cl_read_start()
1470 dev = cl->dev; in mei_cl_read_start()
1472 if (!mei_cl_is_connected(cl)) in mei_cl_read_start()
1475 if (!mei_me_cl_is_active(cl->me_cl)) { in mei_cl_read_start()
1476 cl_err(dev, cl, "no such me client\n"); in mei_cl_read_start()
1480 if (mei_cl_is_fixed_address(cl)) in mei_cl_read_start()
1484 if (cl->rx_flow_ctrl_creds) in mei_cl_read_start()
1487 cb = mei_cl_enqueue_ctrl_wr_cb(cl, length, MEI_FOP_READ, fp); in mei_cl_read_start()
1494 cl_err(dev, cl, "rpm: get failed %d\n", rets); in mei_cl_read_start()
1500 rets = mei_hbm_cl_flow_control_req(dev, cl); in mei_cl_read_start()
1504 list_move_tail(&cb->list, &cl->rd_pending); in mei_cl_read_start()
1506 cl->rx_flow_ctrl_creds++; in mei_cl_read_start()
1509 cl_dbg(dev, cl, "rpm: autosuspend\n"); in mei_cl_read_start()
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()
1546 int mei_cl_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb, in mei_cl_irq_write() argument
1562 if (WARN_ON(!cl || !cl->dev)) in mei_cl_irq_write()
1565 dev = cl->dev; in mei_cl_irq_write()
1571 rets = first_chunk ? mei_cl_tx_flow_ctrl_creds(cl) : 1; in mei_cl_irq_write()
1576 cl_dbg(dev, cl, "No flow control credentials: not sending.\n"); in mei_cl_irq_write()
1625 cl->status = 0; in mei_cl_irq_write()
1626 cl->writing_state = MEI_WRITING; in mei_cl_irq_write()
1630 if (mei_cl_tx_flow_ctrl_creds_reduce(cl)) { in mei_cl_irq_write()
1642 cl->status = rets; 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
1670 if (WARN_ON(!cl || !cl->dev)) in mei_cl_write()
1676 dev = cl->dev; in mei_cl_write()
1681 cl_dbg(dev, cl, "len=%zd\n", len); in mei_cl_write()
1689 cl_err(dev, cl, "rpm: get failed %zd\n", rets); in mei_cl_write()
1694 cl->writing_state = MEI_IDLE; in mei_cl_write()
1697 rets = mei_cl_tx_flow_ctrl_creds(cl); in mei_cl_write()
1704 cl_dbg(dev, cl, "No flow control credentials: not sending.\n"); in mei_cl_write()
1710 cl_dbg(dev, cl, "Cannot acquire the host buffer: not sending.\n"); in mei_cl_write()
1751 rets = mei_cl_tx_flow_ctrl_creds_reduce(cl); in mei_cl_write()
1755 cl->writing_state = MEI_WRITING; in mei_cl_write()
1767 if (blocking && cl->writing_state != MEI_WRITE_COMPLETE) { in mei_cl_write()
1770 rets = wait_event_interruptible(cl->tx_wait, in mei_cl_write()
1771 cl->writing_state == MEI_WRITE_COMPLETE || in mei_cl_write()
1772 (!mei_cl_is_connected(cl))); in mei_cl_write()
1780 if (cl->writing_state != MEI_WRITE_COMPLETE) { in mei_cl_write()
1788 cl_dbg(dev, cl, "rpm: autosuspend\n"); in mei_cl_write()
1804 void mei_cl_complete(struct mei_cl *cl, struct mei_cl_cb *cb) in mei_cl_complete() argument
1806 struct mei_device *dev = cl->dev; in mei_cl_complete()
1811 cl->writing_state = MEI_WRITE_COMPLETE; in mei_cl_complete()
1812 if (waitqueue_active(&cl->tx_wait)) { in mei_cl_complete()
1813 wake_up_interruptible(&cl->tx_wait); in mei_cl_complete()
1821 list_add_tail(&cb->list, &cl->rd_completed); in mei_cl_complete()
1822 if (!mei_cl_is_fixed_address(cl) && in mei_cl_complete()
1823 !WARN_ON(!cl->rx_flow_ctrl_creds)) in mei_cl_complete()
1824 cl->rx_flow_ctrl_creds--; in mei_cl_complete()
1825 if (!mei_cl_bus_rx_event(cl)) in mei_cl_complete()
1826 wake_up_interruptible(&cl->rx_wait); in mei_cl_complete()
1833 if (waitqueue_active(&cl->wait)) in mei_cl_complete()
1834 wake_up(&cl->wait); in mei_cl_complete()
1839 mei_cl_set_disconnected(cl); in mei_cl_complete()
1854 struct mei_cl *cl; in mei_cl_all_disconnect() local
1856 list_for_each_entry(cl, &dev->file_list, link) in mei_cl_all_disconnect()
1857 mei_cl_set_disconnected(cl); in mei_cl_all_disconnect()