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__ */