Lines Matching refs:cons
72 ivpu_ipc_tx_prepare(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons,
107 tx_buf->ipc.channel = cons->channel;
117 cons->request_id = req->request_id;
120 cons->tx_vpu_addr = tx_buf_vpu_addr;
142 ivpu_ipc_consumer_add(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons, u32 channel)
146 INIT_LIST_HEAD(&cons->link);
147 cons->channel = channel;
148 cons->tx_vpu_addr = 0;
149 cons->request_id = 0;
150 spin_lock_init(&cons->rx_msg_lock);
151 INIT_LIST_HEAD(&cons->rx_msg_list);
152 init_waitqueue_head(&cons->rx_msg_wq);
155 list_add_tail(&cons->link, &ipc->cons_list);
159 void ivpu_ipc_consumer_del(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons)
165 list_del(&cons->link);
168 spin_lock_irq(&cons->rx_msg_lock);
169 list_for_each_entry_safe(rx_msg, r, &cons->rx_msg_list, link) {
175 spin_unlock_irq(&cons->rx_msg_lock);
177 ivpu_ipc_tx_release(vdev, cons->tx_vpu_addr);
181 ivpu_ipc_send(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons, struct vpu_jsm_msg *req)
193 ret = ivpu_ipc_tx_prepare(vdev, cons, req);
197 ivpu_ipc_tx(vdev, cons->tx_vpu_addr);
204 int ivpu_ipc_receive(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons,
212 wait_ret = wait_event_timeout(cons->rx_msg_wq,
214 !list_empty(&cons->rx_msg_list),
223 spin_lock_irq(&cons->rx_msg_lock);
224 rx_msg = list_first_entry_or_null(&cons->rx_msg_list, struct ivpu_ipc_rx_msg, link);
226 spin_unlock_irq(&cons->rx_msg_lock);
230 spin_unlock_irq(&cons->rx_msg_lock);
259 struct ivpu_ipc_consumer cons;
262 ivpu_ipc_consumer_add(vdev, &cons, channel);
264 ret = ivpu_ipc_send(vdev, &cons, req);
270 ret = ivpu_ipc_receive(vdev, &cons, NULL, resp, timeout_ms);
282 ivpu_ipc_consumer_del(vdev, &cons);
318 ivpu_ipc_match_consumer(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons,
321 if (cons->channel != ipc_hdr->channel)
324 if (!jsm_msg || jsm_msg->request_id == cons->request_id)
331 ivpu_ipc_dispatch(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons,
351 spin_lock_irqsave(&cons->rx_msg_lock, flags);
352 list_add_tail(&rx_msg->link, &cons->rx_msg_list);
353 spin_unlock_irqrestore(&cons->rx_msg_lock, flags);
355 wake_up(&cons->rx_msg_wq);
361 struct ivpu_ipc_consumer *cons;
405 list_for_each_entry(cons, &ipc->cons_list, link) {
406 if (ivpu_ipc_match_consumer(vdev, cons, ipc_hdr, jsm_msg)) {
407 ivpu_ipc_dispatch(vdev, cons, ipc_hdr, jsm_msg);
481 struct ivpu_ipc_consumer *cons, *c;
489 list_for_each_entry_safe(cons, c, &ipc->cons_list, link)
490 wake_up(&cons->rx_msg_wq);