ivpu_ipc.h (043a2d5d71d87553985816065da41cff72f5f2df) | ivpu_ipc.h (3b434a3445fff3149128db0169da864d67057325) |
---|---|
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Copyright (C) 2020-2023 Intel Corporation 4 */ 5 6#ifndef __IVPU_IPC_H__ 7#define __IVPU_IPC_H__ 8 --- 28 unchanged lines hidden (view full) --- 37 u32 data_addr; 38 u32 data_size; 39 u16 channel; 40 u8 src_node; 41 u8 dst_node; 42 u8 status; 43} __packed __aligned(IVPU_IPC_ALIGNMENT); 44 | 1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Copyright (C) 2020-2023 Intel Corporation 4 */ 5 6#ifndef __IVPU_IPC_H__ 7#define __IVPU_IPC_H__ 8 --- 28 unchanged lines hidden (view full) --- 37 u32 data_addr; 38 u32 data_size; 39 u16 channel; 40 u8 src_node; 41 u8 dst_node; 42 u8 status; 43} __packed __aligned(IVPU_IPC_ALIGNMENT); 44 |
45typedef void (*ivpu_ipc_rx_callback_t)(struct ivpu_device *vdev, 46 struct ivpu_ipc_hdr *ipc_hdr, 47 struct vpu_jsm_msg *jsm_msg); 48 49struct ivpu_ipc_rx_msg { 50 struct list_head link; 51 struct ivpu_ipc_hdr *ipc_hdr; 52 struct vpu_jsm_msg *jsm_msg; 53 ivpu_ipc_rx_callback_t callback; 54}; 55 |
|
45struct ivpu_ipc_consumer { 46 struct list_head link; 47 u32 channel; 48 u32 tx_vpu_addr; 49 u32 request_id; 50 bool aborted; | 56struct ivpu_ipc_consumer { 57 struct list_head link; 58 u32 channel; 59 u32 tx_vpu_addr; 60 u32 request_id; 61 bool aborted; |
62 ivpu_ipc_rx_callback_t rx_callback; |
|
51 52 spinlock_t rx_lock; /* Protects rx_msg_list and aborted */ 53 struct list_head rx_msg_list; 54 wait_queue_head_t rx_msg_wq; 55}; 56 57struct ivpu_ipc_info { 58 struct gen_pool *mm_tx; 59 struct ivpu_bo *mem_tx; 60 struct ivpu_bo *mem_rx; 61 62 atomic_t rx_msg_count; 63 | 63 64 spinlock_t rx_lock; /* Protects rx_msg_list and aborted */ 65 struct list_head rx_msg_list; 66 wait_queue_head_t rx_msg_wq; 67}; 68 69struct ivpu_ipc_info { 70 struct gen_pool *mm_tx; 71 struct ivpu_bo *mem_tx; 72 struct ivpu_bo *mem_rx; 73 74 atomic_t rx_msg_count; 75 |
64 spinlock_t cons_list_lock; /* Protects cons_list */ | 76 spinlock_t cons_lock; /* Protects cons_list and cb_msg_list */ |
65 struct list_head cons_list; | 77 struct list_head cons_list; |
78 struct list_head cb_msg_list; |
|
66 67 atomic_t request_id; 68 struct mutex lock; /* Lock on status */ 69 bool on; 70}; 71 72int ivpu_ipc_init(struct ivpu_device *vdev); 73void ivpu_ipc_fini(struct ivpu_device *vdev); 74 75void ivpu_ipc_enable(struct ivpu_device *vdev); 76void ivpu_ipc_disable(struct ivpu_device *vdev); 77void ivpu_ipc_reset(struct ivpu_device *vdev); 78 | 79 80 atomic_t request_id; 81 struct mutex lock; /* Lock on status */ 82 bool on; 83}; 84 85int ivpu_ipc_init(struct ivpu_device *vdev); 86void ivpu_ipc_fini(struct ivpu_device *vdev); 87 88void ivpu_ipc_enable(struct ivpu_device *vdev); 89void ivpu_ipc_disable(struct ivpu_device *vdev); 90void ivpu_ipc_reset(struct ivpu_device *vdev); 91 |
79int ivpu_ipc_irq_handler(struct ivpu_device *vdev); | 92void ivpu_ipc_irq_handler(struct ivpu_device *vdev, bool *wake_thread); 93irqreturn_t ivpu_ipc_irq_thread_handler(struct ivpu_device *vdev); |
80 81void ivpu_ipc_consumer_add(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons, | 94 95void ivpu_ipc_consumer_add(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons, |
82 u32 channel); | 96 u32 channel, ivpu_ipc_rx_callback_t callback); |
83void ivpu_ipc_consumer_del(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons); 84 85int ivpu_ipc_receive(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons, | 97void ivpu_ipc_consumer_del(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons); 98 99int ivpu_ipc_receive(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons, |
86 struct ivpu_ipc_hdr *ipc_buf, struct vpu_jsm_msg *ipc_payload, | 100 struct ivpu_ipc_hdr *ipc_buf, struct vpu_jsm_msg *jsm_msg, |
87 unsigned long timeout_ms); 88 89int ivpu_ipc_send_receive_active(struct ivpu_device *vdev, struct vpu_jsm_msg *req, 90 enum vpu_ipc_msg_type expected_resp, struct vpu_jsm_msg *resp, 91 u32 channel, unsigned long timeout_ms); 92int ivpu_ipc_send_receive(struct ivpu_device *vdev, struct vpu_jsm_msg *req, 93 enum vpu_ipc_msg_type expected_resp, struct vpu_jsm_msg *resp, 94 u32 channel, unsigned long timeout_ms); 95 96#endif /* __IVPU_IPC_H__ */ | 101 unsigned long timeout_ms); 102 103int ivpu_ipc_send_receive_active(struct ivpu_device *vdev, struct vpu_jsm_msg *req, 104 enum vpu_ipc_msg_type expected_resp, struct vpu_jsm_msg *resp, 105 u32 channel, unsigned long timeout_ms); 106int ivpu_ipc_send_receive(struct ivpu_device *vdev, struct vpu_jsm_msg *req, 107 enum vpu_ipc_msg_type expected_resp, struct vpu_jsm_msg *resp, 108 u32 channel, unsigned long timeout_ms); 109 110#endif /* __IVPU_IPC_H__ */ |