Lines Matching refs:cl

361 struct mei_cl_cb *mei_io_cb_init(struct mei_cl *cl, enum mei_cb_file_ops type,  in mei_io_cb_init()  argument
372 cb->cl = cl; in mei_io_cb_init()
386 struct mei_cl *cl, bool free) in __mei_io_list_flush() argument
392 if (!cl || mei_cl_cmp_id(cl, cb->cl)) { in __mei_io_list_flush()
406 void mei_io_list_flush(struct mei_cl_cb *list, struct mei_cl *cl) in mei_io_list_flush() argument
408 __mei_io_list_flush(list, cl, false); in mei_io_list_flush()
417 static inline void mei_io_list_free(struct mei_cl_cb *list, struct mei_cl *cl) in mei_io_list_free() argument
419 __mei_io_list_flush(list, cl, true); in mei_io_list_free()
457 struct mei_cl_cb *mei_cl_alloc_cb(struct mei_cl *cl, size_t length, in mei_cl_alloc_cb() argument
462 cb = mei_io_cb_init(cl, type, fp); in mei_cl_alloc_cb()
483 struct mei_cl_cb *mei_cl_read_cb(const struct mei_cl *cl, const struct file *fp) in mei_cl_read_cb() argument
487 list_for_each_entry(cb, &cl->rd_completed, list) in mei_cl_read_cb()
501 void mei_cl_read_cb_flush(const struct mei_cl *cl, const struct file *fp) in mei_cl_read_cb_flush() argument
505 list_for_each_entry_safe(cb, next, &cl->rd_completed, list) in mei_cl_read_cb_flush()
510 list_for_each_entry_safe(cb, next, &cl->rd_pending, list) in mei_cl_read_cb_flush()
523 int mei_cl_flush_queues(struct mei_cl *cl, const struct file *fp) in mei_cl_flush_queues() argument
527 if (WARN_ON(!cl || !cl->dev)) in mei_cl_flush_queues()
530 dev = cl->dev; in mei_cl_flush_queues()
532 cl_dbg(dev, cl, "remove list entry belonging to cl\n"); in mei_cl_flush_queues()
533 mei_io_list_free(&cl->dev->write_list, cl); in mei_cl_flush_queues()
534 mei_io_list_free(&cl->dev->write_waiting_list, cl); in mei_cl_flush_queues()
535 mei_io_list_flush(&cl->dev->ctrl_wr_list, cl); in mei_cl_flush_queues()
536 mei_io_list_flush(&cl->dev->ctrl_rd_list, cl); in mei_cl_flush_queues()
537 mei_io_list_flush(&cl->dev->amthif_cmd_list, cl); in mei_cl_flush_queues()
538 mei_io_list_flush(&cl->dev->amthif_rd_complete_list, cl); in mei_cl_flush_queues()
540 mei_cl_read_cb_flush(cl, fp); in mei_cl_flush_queues()
552 void mei_cl_init(struct mei_cl *cl, struct mei_device *dev) in mei_cl_init() argument
554 memset(cl, 0, sizeof(struct mei_cl)); in mei_cl_init()
555 init_waitqueue_head(&cl->wait); in mei_cl_init()
556 init_waitqueue_head(&cl->rx_wait); in mei_cl_init()
557 init_waitqueue_head(&cl->tx_wait); in mei_cl_init()
558 init_waitqueue_head(&cl->ev_wait); in mei_cl_init()
559 INIT_LIST_HEAD(&cl->rd_completed); in mei_cl_init()
560 INIT_LIST_HEAD(&cl->rd_pending); in mei_cl_init()
561 INIT_LIST_HEAD(&cl->link); in mei_cl_init()
562 cl->writing_state = MEI_IDLE; in mei_cl_init()
563 cl->state = MEI_FILE_INITIALIZING; in mei_cl_init()
564 cl->dev = dev; in mei_cl_init()
575 struct mei_cl *cl; in mei_cl_allocate() local
577 cl = kmalloc(sizeof(struct mei_cl), GFP_KERNEL); in mei_cl_allocate()
578 if (!cl) in mei_cl_allocate()
581 mei_cl_init(cl, dev); in mei_cl_allocate()
583 return cl; in mei_cl_allocate()
596 int mei_cl_link(struct mei_cl *cl, int id) in mei_cl_link() argument
601 if (WARN_ON(!cl || !cl->dev)) in mei_cl_link()
604 dev = cl->dev; in mei_cl_link()
625 cl->host_client_id = id; in mei_cl_link()
626 list_add_tail(&cl->link, &dev->file_list); in mei_cl_link()
630 cl->state = MEI_FILE_INITIALIZING; in mei_cl_link()
632 cl_dbg(dev, cl, "link cl\n"); in mei_cl_link()
643 int mei_cl_unlink(struct mei_cl *cl) in mei_cl_unlink() argument
648 if (!cl) in mei_cl_unlink()
652 if (!cl->dev) in mei_cl_unlink()
655 dev = cl->dev; in mei_cl_unlink()
657 cl_dbg(dev, cl, "unlink client"); in mei_cl_unlink()
663 if (cl->host_client_id) in mei_cl_unlink()
664 clear_bit(cl->host_client_id, dev->host_clients_map); in mei_cl_unlink()
666 list_del_init(&cl->link); in mei_cl_unlink()
668 cl->state = MEI_FILE_INITIALIZING; in mei_cl_unlink()
734 void mei_cl_set_disconnected(struct mei_cl *cl) in mei_cl_set_disconnected() argument
736 struct mei_device *dev = cl->dev; in mei_cl_set_disconnected()
738 if (cl->state == MEI_FILE_DISCONNECTED || in mei_cl_set_disconnected()
739 cl->state == MEI_FILE_INITIALIZING) in mei_cl_set_disconnected()
742 cl->state = MEI_FILE_DISCONNECTED; in mei_cl_set_disconnected()
743 mei_io_list_flush(&dev->ctrl_rd_list, cl); in mei_cl_set_disconnected()
744 mei_io_list_flush(&dev->ctrl_wr_list, cl); in mei_cl_set_disconnected()
745 cl->mei_flow_ctrl_creds = 0; in mei_cl_set_disconnected()
746 cl->timer_count = 0; in mei_cl_set_disconnected()
748 if (!cl->me_cl) in mei_cl_set_disconnected()
751 if (!WARN_ON(cl->me_cl->connect_count == 0)) in mei_cl_set_disconnected()
752 cl->me_cl->connect_count--; in mei_cl_set_disconnected()
754 if (cl->me_cl->connect_count == 0) in mei_cl_set_disconnected()
755 cl->me_cl->mei_flow_ctrl_creds = 0; in mei_cl_set_disconnected()
757 mei_me_cl_put(cl->me_cl); in mei_cl_set_disconnected()
758 cl->me_cl = NULL; in mei_cl_set_disconnected()
761 static int mei_cl_set_connecting(struct mei_cl *cl, struct mei_me_client *me_cl) in mei_cl_set_connecting() argument
774 cl->me_cl = me_cl; in mei_cl_set_connecting()
775 cl->state = MEI_FILE_CONNECTING; in mei_cl_set_connecting()
776 cl->me_cl->connect_count++; in mei_cl_set_connecting()
789 static int mei_cl_send_disconnect(struct mei_cl *cl, struct mei_cl_cb *cb) in mei_cl_send_disconnect() argument
794 dev = cl->dev; in mei_cl_send_disconnect()
796 ret = mei_hbm_cl_disconnect_req(dev, cl); in mei_cl_send_disconnect()
797 cl->status = ret; in mei_cl_send_disconnect()
799 cl->state = MEI_FILE_DISCONNECT_REPLY; in mei_cl_send_disconnect()
804 cl->timer_count = MEI_CONNECT_TIMEOUT; 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
822 struct mei_device *dev = cl->dev; in mei_cl_irq_disconnect()
833 ret = mei_cl_send_disconnect(cl, cb); in mei_cl_irq_disconnect()
848 static int __mei_cl_disconnect(struct mei_cl *cl) in __mei_cl_disconnect() argument
854 dev = cl->dev; in __mei_cl_disconnect()
856 cl->state = MEI_FILE_DISCONNECTING; in __mei_cl_disconnect()
858 cb = mei_io_cb_init(cl, MEI_FOP_DISCONNECT, NULL); in __mei_cl_disconnect()
863 cl_dbg(dev, cl, "add disconnect cb to control write list\n"); in __mei_cl_disconnect()
867 rets = mei_cl_send_disconnect(cl, cb); in __mei_cl_disconnect()
869 cl_err(dev, cl, "failed to disconnect.\n"); in __mei_cl_disconnect()
875 wait_event_timeout(cl->wait, cl->state == MEI_FILE_DISCONNECT_REPLY, in __mei_cl_disconnect()
879 rets = cl->status; in __mei_cl_disconnect()
880 if (cl->state != MEI_FILE_DISCONNECT_REPLY) { in __mei_cl_disconnect()
881 cl_dbg(dev, cl, "timeout on disconnect from FW client.\n"); in __mei_cl_disconnect()
887 mei_cl_set_disconnected(cl); in __mei_cl_disconnect()
889 cl_dbg(dev, cl, "successfully disconnected from FW client.\n"); in __mei_cl_disconnect()
904 int mei_cl_disconnect(struct mei_cl *cl) in mei_cl_disconnect() argument
909 if (WARN_ON(!cl || !cl->dev)) in mei_cl_disconnect()
912 dev = cl->dev; in mei_cl_disconnect()
914 cl_dbg(dev, cl, "disconnecting"); in mei_cl_disconnect()
916 if (!mei_cl_is_connected(cl)) in mei_cl_disconnect()
919 if (mei_cl_is_fixed_address(cl)) { in mei_cl_disconnect()
920 mei_cl_set_disconnected(cl); in mei_cl_disconnect()
927 cl_err(dev, cl, "rpm: get failed %d\n", rets); in mei_cl_disconnect()
931 rets = __mei_cl_disconnect(cl); in mei_cl_disconnect()
933 cl_dbg(dev, cl, "rpm: autosuspend\n"); in mei_cl_disconnect()
949 static bool mei_cl_is_other_connecting(struct mei_cl *cl) in mei_cl_is_other_connecting() argument
954 dev = cl->dev; 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
978 dev = cl->dev; in mei_cl_send_connect()
980 ret = mei_hbm_cl_connect_req(dev, cl); in mei_cl_send_connect()
981 cl->status = ret; in mei_cl_send_connect()
983 cl->state = MEI_FILE_DISCONNECT_REPLY; in mei_cl_send_connect()
988 cl->timer_count = MEI_CONNECT_TIMEOUT; 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
1004 struct mei_device *dev = cl->dev; in mei_cl_irq_connect()
1012 if (mei_cl_is_other_connecting(cl)) in mei_cl_irq_connect()
1018 rets = mei_cl_send_connect(cl, cb); in mei_cl_irq_connect()
1036 int mei_cl_connect(struct mei_cl *cl, struct mei_me_client *me_cl, in mei_cl_connect() argument
1043 if (WARN_ON(!cl || !cl->dev || !me_cl)) in mei_cl_connect()
1046 dev = cl->dev; in mei_cl_connect()
1048 rets = mei_cl_set_connecting(cl, me_cl); in mei_cl_connect()
1052 if (mei_cl_is_fixed_address(cl)) { in mei_cl_connect()
1053 cl->state = MEI_FILE_CONNECTED; in mei_cl_connect()
1060 cl_err(dev, cl, "rpm: get failed %d\n", rets); in mei_cl_connect()
1064 cb = mei_io_cb_init(cl, MEI_FOP_CONNECT, file); in mei_cl_connect()
1072 if (!mei_cl_is_other_connecting(cl) && mei_hbuf_acquire(dev)) { in mei_cl_connect()
1073 rets = mei_cl_send_connect(cl, cb); in mei_cl_connect()
1079 wait_event_timeout(cl->wait, in mei_cl_connect()
1080 (cl->state == MEI_FILE_CONNECTED || in mei_cl_connect()
1081 cl->state == MEI_FILE_DISCONNECT_REQUIRED || in mei_cl_connect()
1082 cl->state == MEI_FILE_DISCONNECT_REPLY), in mei_cl_connect()
1086 if (!mei_cl_is_connected(cl)) { in mei_cl_connect()
1087 if (cl->state == MEI_FILE_DISCONNECT_REQUIRED) { in mei_cl_connect()
1088 mei_io_list_flush(&dev->ctrl_rd_list, cl); in mei_cl_connect()
1089 mei_io_list_flush(&dev->ctrl_wr_list, cl); in mei_cl_connect()
1093 __mei_cl_disconnect(cl); in mei_cl_connect()
1099 if (!cl->status) in mei_cl_connect()
1100 cl->status = -EFAULT; in mei_cl_connect()
1103 rets = cl->status; in mei_cl_connect()
1105 cl_dbg(dev, cl, "rpm: autosuspend\n"); in mei_cl_connect()
1112 if (!mei_cl_is_connected(cl)) in mei_cl_connect()
1113 mei_cl_set_disconnected(cl); in mei_cl_connect()
1128 struct mei_cl *cl; in mei_cl_alloc_linked() local
1131 cl = mei_cl_allocate(dev); in mei_cl_alloc_linked()
1132 if (!cl) { in mei_cl_alloc_linked()
1137 ret = mei_cl_link(cl, id); in mei_cl_alloc_linked()
1141 return cl; in mei_cl_alloc_linked()
1143 kfree(cl); in mei_cl_alloc_linked()
1156 int mei_cl_flow_ctrl_creds(struct mei_cl *cl) in mei_cl_flow_ctrl_creds() argument
1160 if (WARN_ON(!cl || !cl->me_cl)) in mei_cl_flow_ctrl_creds()
1163 if (cl->mei_flow_ctrl_creds > 0) in mei_cl_flow_ctrl_creds()
1166 if (mei_cl_is_fixed_address(cl)) { in mei_cl_flow_ctrl_creds()
1167 rets = mei_cl_read_start(cl, mei_cl_mtu(cl), NULL); in mei_cl_flow_ctrl_creds()
1173 if (mei_cl_is_single_recv_buf(cl)) { in mei_cl_flow_ctrl_creds()
1174 if (cl->me_cl->mei_flow_ctrl_creds > 0) in mei_cl_flow_ctrl_creds()
1189 int mei_cl_flow_ctrl_reduce(struct mei_cl *cl) in mei_cl_flow_ctrl_reduce() argument
1191 if (WARN_ON(!cl || !cl->me_cl)) in mei_cl_flow_ctrl_reduce()
1194 if (mei_cl_is_fixed_address(cl)) in mei_cl_flow_ctrl_reduce()
1197 if (mei_cl_is_single_recv_buf(cl)) { in mei_cl_flow_ctrl_reduce()
1198 if (WARN_ON(cl->me_cl->mei_flow_ctrl_creds <= 0)) in mei_cl_flow_ctrl_reduce()
1200 cl->me_cl->mei_flow_ctrl_creds--; in mei_cl_flow_ctrl_reduce()
1202 if (WARN_ON(cl->mei_flow_ctrl_creds <= 0)) in mei_cl_flow_ctrl_reduce()
1204 cl->mei_flow_ctrl_creds--; in mei_cl_flow_ctrl_reduce()
1248 int mei_cl_irq_notify(struct mei_cl *cl, struct mei_cl_cb *cb, in mei_cl_irq_notify() argument
1251 struct mei_device *dev = cl->dev; in mei_cl_irq_notify()
1264 ret = mei_hbm_cl_notify_req(dev, cl, request); in mei_cl_irq_notify()
1266 cl->status = ret; in mei_cl_irq_notify()
1286 int mei_cl_notify_request(struct mei_cl *cl, struct file *file, u8 request) in mei_cl_notify_request() argument
1293 if (WARN_ON(!cl || !cl->dev)) in mei_cl_notify_request()
1296 dev = cl->dev; in mei_cl_notify_request()
1299 cl_dbg(dev, cl, "notifications not supported\n"); in mei_cl_notify_request()
1306 cl_err(dev, cl, "rpm: get failed %d\n", rets); in mei_cl_notify_request()
1311 cb = mei_io_cb_init(cl, fop_type, file); in mei_cl_notify_request()
1318 if (mei_hbm_cl_notify_req(dev, cl, request)) { in mei_cl_notify_request()
1328 wait_event_timeout(cl->wait, cl->notify_en == request, in mei_cl_notify_request()
1332 if (cl->notify_en != request) { in mei_cl_notify_request()
1333 mei_io_list_flush(&dev->ctrl_rd_list, cl); in mei_cl_notify_request()
1334 mei_io_list_flush(&dev->ctrl_wr_list, cl); in mei_cl_notify_request()
1335 if (!cl->status) in mei_cl_notify_request()
1336 cl->status = -EFAULT; in mei_cl_notify_request()
1339 rets = cl->status; in mei_cl_notify_request()
1342 cl_dbg(dev, cl, "rpm: autosuspend\n"); in mei_cl_notify_request()
1357 void mei_cl_notify(struct mei_cl *cl) in mei_cl_notify() argument
1361 if (!cl || !cl->dev) in mei_cl_notify()
1364 dev = cl->dev; in mei_cl_notify()
1366 if (!cl->notify_en) in mei_cl_notify()
1369 cl_dbg(dev, cl, "notify event"); in mei_cl_notify()
1370 cl->notify_ev = true; in mei_cl_notify()
1371 wake_up_interruptible_all(&cl->ev_wait); in mei_cl_notify()
1373 if (cl->ev_async) in mei_cl_notify()
1374 kill_fasync(&cl->ev_async, SIGIO, POLL_PRI); in mei_cl_notify()
1376 mei_cl_bus_notify_event(cl); in mei_cl_notify()
1390 int mei_cl_notify_get(struct mei_cl *cl, bool block, bool *notify_ev) in mei_cl_notify_get() argument
1397 if (WARN_ON(!cl || !cl->dev)) in mei_cl_notify_get()
1400 dev = cl->dev; in mei_cl_notify_get()
1402 if (!mei_cl_is_connected(cl)) in mei_cl_notify_get()
1405 if (cl->notify_ev) in mei_cl_notify_get()
1412 rets = wait_event_interruptible(cl->ev_wait, cl->notify_ev); in mei_cl_notify_get()
1419 *notify_ev = cl->notify_ev; in mei_cl_notify_get()
1420 cl->notify_ev = false; in mei_cl_notify_get()
1433 int mei_cl_read_start(struct mei_cl *cl, size_t length, struct file *fp) in mei_cl_read_start() argument
1439 if (WARN_ON(!cl || !cl->dev)) in mei_cl_read_start()
1442 dev = cl->dev; in mei_cl_read_start()
1444 if (!mei_cl_is_connected(cl)) in mei_cl_read_start()
1448 if (!list_empty(&cl->rd_pending)) in mei_cl_read_start()
1451 if (!mei_me_cl_is_active(cl->me_cl)) { in mei_cl_read_start()
1452 cl_err(dev, cl, "no such me client\n"); in mei_cl_read_start()
1457 length = max_t(size_t, length, mei_cl_mtu(cl)); in mei_cl_read_start()
1458 cb = mei_cl_alloc_cb(cl, length, MEI_FOP_READ, fp); in mei_cl_read_start()
1462 if (mei_cl_is_fixed_address(cl)) { in mei_cl_read_start()
1463 list_add_tail(&cb->list, &cl->rd_pending); in mei_cl_read_start()
1470 cl_err(dev, cl, "rpm: get failed %d\n", rets); in mei_cl_read_start()
1475 rets = mei_hbm_cl_flow_control_req(dev, cl); in mei_cl_read_start()
1479 list_add_tail(&cb->list, &cl->rd_pending); in mei_cl_read_start()
1486 cl_dbg(dev, cl, "rpm: autosuspend\n"); 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
1518 if (WARN_ON(!cl || !cl->dev)) in mei_cl_irq_write()
1521 dev = cl->dev; in mei_cl_irq_write()
1527 rets = first_chunk ? mei_cl_flow_ctrl_creds(cl) : 1; in mei_cl_irq_write()
1532 cl_dbg(dev, cl, "No flow control credentials: not sending.\n"); in mei_cl_irq_write()
1540 mei_hdr.host_addr = mei_cl_host_addr(cl); in mei_cl_irq_write()
1541 mei_hdr.me_addr = mei_cl_me_id(cl); in mei_cl_irq_write()
1559 cl_dbg(dev, cl, "buf: size = %d idx = %lu\n", in mei_cl_irq_write()
1564 cl->status = rets; in mei_cl_irq_write()
1569 cl->status = 0; in mei_cl_irq_write()
1570 cl->writing_state = MEI_WRITING; in mei_cl_irq_write()
1575 if (mei_cl_flow_ctrl_reduce(cl)) 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
1604 if (WARN_ON(!cl || !cl->dev)) in mei_cl_write()
1610 dev = cl->dev; in mei_cl_write()
1615 cl_dbg(dev, cl, "size=%d\n", size); in mei_cl_write()
1620 cl_err(dev, cl, "rpm: get failed %d\n", rets); in mei_cl_write()
1625 cl->writing_state = MEI_IDLE; in mei_cl_write()
1627 mei_hdr.host_addr = mei_cl_host_addr(cl); in mei_cl_write()
1628 mei_hdr.me_addr = mei_cl_me_id(cl); in mei_cl_write()
1633 rets = mei_cl_flow_ctrl_creds(cl); in mei_cl_write()
1638 cl_dbg(dev, cl, "No flow control credentials: not sending.\n"); in mei_cl_write()
1643 cl_dbg(dev, cl, "Cannot acquire the host buffer: not sending.\n"); in mei_cl_write()
1661 rets = mei_cl_flow_ctrl_reduce(cl); in mei_cl_write()
1665 cl->writing_state = MEI_WRITING; in mei_cl_write()
1676 if (blocking && cl->writing_state != MEI_WRITE_COMPLETE) { in mei_cl_write()
1679 rets = wait_event_interruptible(cl->tx_wait, in mei_cl_write()
1680 cl->writing_state == MEI_WRITE_COMPLETE); in mei_cl_write()
1692 cl_dbg(dev, cl, "rpm: autosuspend\n"); in mei_cl_write()
1706 void mei_cl_complete(struct mei_cl *cl, struct mei_cl_cb *cb) in mei_cl_complete() argument
1708 struct mei_device *dev = cl->dev; in mei_cl_complete()
1713 cl->writing_state = MEI_WRITE_COMPLETE; in mei_cl_complete()
1714 if (waitqueue_active(&cl->tx_wait)) { in mei_cl_complete()
1715 wake_up_interruptible(&cl->tx_wait); in mei_cl_complete()
1723 list_add_tail(&cb->list, &cl->rd_completed); in mei_cl_complete()
1724 if (waitqueue_active(&cl->rx_wait)) in mei_cl_complete()
1725 wake_up_interruptible_all(&cl->rx_wait); in mei_cl_complete()
1727 mei_cl_bus_rx_event(cl); in mei_cl_complete()
1734 if (waitqueue_active(&cl->wait)) in mei_cl_complete()
1735 wake_up(&cl->wait); in mei_cl_complete()
1740 mei_cl_set_disconnected(cl); in mei_cl_complete()
1755 struct mei_cl *cl; in mei_cl_all_disconnect() local
1757 list_for_each_entry(cl, &dev->file_list, link) in mei_cl_all_disconnect()
1758 mei_cl_set_disconnected(cl); in mei_cl_all_disconnect()
1769 struct mei_cl *cl; in mei_cl_all_wakeup() local
1771 list_for_each_entry(cl, &dev->file_list, link) { in mei_cl_all_wakeup()
1772 if (waitqueue_active(&cl->rx_wait)) { in mei_cl_all_wakeup()
1773 cl_dbg(dev, cl, "Waking up reading client!\n"); in mei_cl_all_wakeup()
1774 wake_up_interruptible(&cl->rx_wait); in mei_cl_all_wakeup()
1776 if (waitqueue_active(&cl->tx_wait)) { in mei_cl_all_wakeup()
1777 cl_dbg(dev, cl, "Waking up writing client!\n"); in mei_cl_all_wakeup()
1778 wake_up_interruptible(&cl->tx_wait); in mei_cl_all_wakeup()
1782 if (waitqueue_active(&cl->ev_wait)) { in mei_cl_all_wakeup()
1783 cl_dbg(dev, cl, "Waking up waiting for event clients!\n"); in mei_cl_all_wakeup()
1784 wake_up_interruptible(&cl->ev_wait); in mei_cl_all_wakeup()