xref: /linux/drivers/net/wireless/ath/ath12k/htc.h (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
1*d8899132SKalle Valo /* SPDX-License-Identifier: BSD-3-Clause-Clear */
2*d8899132SKalle Valo /*
3*d8899132SKalle Valo  * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
4*d8899132SKalle Valo  * Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
5*d8899132SKalle Valo  */
6*d8899132SKalle Valo 
7*d8899132SKalle Valo #ifndef ATH12K_HTC_H
8*d8899132SKalle Valo #define ATH12K_HTC_H
9*d8899132SKalle Valo 
10*d8899132SKalle Valo #include <linux/kernel.h>
11*d8899132SKalle Valo #include <linux/list.h>
12*d8899132SKalle Valo #include <linux/bug.h>
13*d8899132SKalle Valo #include <linux/skbuff.h>
14*d8899132SKalle Valo #include <linux/timer.h>
15*d8899132SKalle Valo 
16*d8899132SKalle Valo struct ath12k_base;
17*d8899132SKalle Valo 
18*d8899132SKalle Valo #define HTC_HDR_ENDPOINTID                       GENMASK(7, 0)
19*d8899132SKalle Valo #define HTC_HDR_FLAGS                            GENMASK(15, 8)
20*d8899132SKalle Valo #define HTC_HDR_PAYLOADLEN                       GENMASK(31, 16)
21*d8899132SKalle Valo #define HTC_HDR_CONTROLBYTES0                    GENMASK(7, 0)
22*d8899132SKalle Valo #define HTC_HDR_CONTROLBYTES1                    GENMASK(15, 8)
23*d8899132SKalle Valo #define HTC_HDR_RESERVED                         GENMASK(31, 16)
24*d8899132SKalle Valo 
25*d8899132SKalle Valo #define HTC_SVC_MSG_SERVICE_ID                   GENMASK(31, 16)
26*d8899132SKalle Valo #define HTC_SVC_MSG_CONNECTIONFLAGS              GENMASK(15, 0)
27*d8899132SKalle Valo #define HTC_SVC_MSG_SERVICEMETALENGTH            GENMASK(23, 16)
28*d8899132SKalle Valo #define HTC_READY_MSG_CREDITCOUNT                GENMASK(31, 16)
29*d8899132SKalle Valo #define HTC_READY_MSG_CREDITSIZE                 GENMASK(15, 0)
30*d8899132SKalle Valo #define HTC_READY_MSG_MAXENDPOINTS               GENMASK(23, 16)
31*d8899132SKalle Valo 
32*d8899132SKalle Valo #define HTC_READY_EX_MSG_HTCVERSION              GENMASK(7, 0)
33*d8899132SKalle Valo #define HTC_READY_EX_MSG_MAXMSGSPERHTCBUNDLE     GENMASK(15, 8)
34*d8899132SKalle Valo 
35*d8899132SKalle Valo #define HTC_SVC_RESP_MSG_SERVICEID           GENMASK(31, 16)
36*d8899132SKalle Valo #define HTC_SVC_RESP_MSG_STATUS              GENMASK(7, 0)
37*d8899132SKalle Valo #define HTC_SVC_RESP_MSG_ENDPOINTID          GENMASK(15, 8)
38*d8899132SKalle Valo #define HTC_SVC_RESP_MSG_MAXMSGSIZE          GENMASK(31, 16)
39*d8899132SKalle Valo #define HTC_SVC_RESP_MSG_SERVICEMETALENGTH   GENMASK(7, 0)
40*d8899132SKalle Valo 
41*d8899132SKalle Valo #define HTC_MSG_MESSAGEID                        GENMASK(15, 0)
42*d8899132SKalle Valo #define HTC_SETUP_COMPLETE_EX_MSG_SETUPFLAGS     GENMASK(31, 0)
43*d8899132SKalle Valo #define HTC_SETUP_COMPLETE_EX_MSG_MAXMSGSPERBUNDLEDRECV      GENMASK(7, 0)
44*d8899132SKalle Valo #define HTC_SETUP_COMPLETE_EX_MSG_RSVD0          GENMASK(15, 8)
45*d8899132SKalle Valo #define HTC_SETUP_COMPLETE_EX_MSG_RSVD1          GENMASK(23, 16)
46*d8899132SKalle Valo #define HTC_SETUP_COMPLETE_EX_MSG_RSVD2          GENMASK(31, 24)
47*d8899132SKalle Valo 
48*d8899132SKalle Valo enum ath12k_htc_tx_flags {
49*d8899132SKalle Valo 	ATH12K_HTC_FLAG_NEED_CREDIT_UPDATE = 0x01,
50*d8899132SKalle Valo 	ATH12K_HTC_FLAG_SEND_BUNDLE        = 0x02
51*d8899132SKalle Valo };
52*d8899132SKalle Valo 
53*d8899132SKalle Valo enum ath12k_htc_rx_flags {
54*d8899132SKalle Valo 	ATH12K_HTC_FLAG_TRAILER_PRESENT = 0x02,
55*d8899132SKalle Valo 	ATH12K_HTC_FLAG_BUNDLE_MASK     = 0xF0
56*d8899132SKalle Valo };
57*d8899132SKalle Valo 
58*d8899132SKalle Valo struct ath12k_htc_hdr {
59*d8899132SKalle Valo 	__le32 htc_info;
60*d8899132SKalle Valo 	__le32 ctrl_info;
61*d8899132SKalle Valo } __packed __aligned(4);
62*d8899132SKalle Valo 
63*d8899132SKalle Valo enum ath12k_htc_msg_id {
64*d8899132SKalle Valo 	ATH12K_HTC_MSG_READY_ID                = 1,
65*d8899132SKalle Valo 	ATH12K_HTC_MSG_CONNECT_SERVICE_ID      = 2,
66*d8899132SKalle Valo 	ATH12K_HTC_MSG_CONNECT_SERVICE_RESP_ID = 3,
67*d8899132SKalle Valo 	ATH12K_HTC_MSG_SETUP_COMPLETE_ID       = 4,
68*d8899132SKalle Valo 	ATH12K_HTC_MSG_SETUP_COMPLETE_EX_ID    = 5,
69*d8899132SKalle Valo 	ATH12K_HTC_MSG_SEND_SUSPEND_COMPLETE   = 6,
70*d8899132SKalle Valo 	ATH12K_HTC_MSG_NACK_SUSPEND	       = 7,
71*d8899132SKalle Valo 	ATH12K_HTC_MSG_WAKEUP_FROM_SUSPEND_ID  = 8,
72*d8899132SKalle Valo };
73*d8899132SKalle Valo 
74*d8899132SKalle Valo enum ath12k_htc_version {
75*d8899132SKalle Valo 	ATH12K_HTC_VERSION_2P0 = 0x00, /* 2.0 */
76*d8899132SKalle Valo 	ATH12K_HTC_VERSION_2P1 = 0x01, /* 2.1 */
77*d8899132SKalle Valo };
78*d8899132SKalle Valo 
79*d8899132SKalle Valo enum ath12k_htc_conn_flag_threshold_level {
80*d8899132SKalle Valo 	ATH12K_HTC_CONN_FLAGS_THRESHOLD_LEVEL_ONE_FOURTH,
81*d8899132SKalle Valo 	ATH12K_HTC_CONN_FLAGS_THRESHOLD_LEVEL_ONE_HALF,
82*d8899132SKalle Valo 	ATH12K_HTC_CONN_FLAGS_THRESHOLD_LEVEL_THREE_FOURTHS,
83*d8899132SKalle Valo 	ATH12K_HTC_CONN_FLAGS_THRESHOLD_LEVEL_UNITY,
84*d8899132SKalle Valo };
85*d8899132SKalle Valo 
86*d8899132SKalle Valo #define ATH12K_HTC_CONN_FLAGS_THRESHOLD_LEVEL_MASK	GENMASK(1, 0)
87*d8899132SKalle Valo #define ATH12K_HTC_CONN_FLAGS_REDUCE_CREDIT_DRIBBLE	BIT(2)
88*d8899132SKalle Valo #define ATH12K_HTC_CONN_FLAGS_DISABLE_CREDIT_FLOW_CTRL	BIT(3)
89*d8899132SKalle Valo #define ATH12K_HTC_CONN_FLAGS_RECV_ALLOC		GENMASK(15, 8)
90*d8899132SKalle Valo 
91*d8899132SKalle Valo enum ath12k_htc_conn_svc_status {
92*d8899132SKalle Valo 	ATH12K_HTC_CONN_SVC_STATUS_SUCCESS      = 0,
93*d8899132SKalle Valo 	ATH12K_HTC_CONN_SVC_STATUS_NOT_FOUND    = 1,
94*d8899132SKalle Valo 	ATH12K_HTC_CONN_SVC_STATUS_FAILED       = 2,
95*d8899132SKalle Valo 	ATH12K_HTC_CONN_SVC_STATUS_NO_RESOURCES = 3,
96*d8899132SKalle Valo 	ATH12K_HTC_CONN_SVC_STATUS_NO_MORE_EP   = 4
97*d8899132SKalle Valo };
98*d8899132SKalle Valo 
99*d8899132SKalle Valo struct ath12k_htc_ready {
100*d8899132SKalle Valo 	__le32 id_credit_count;
101*d8899132SKalle Valo 	__le32 size_ep;
102*d8899132SKalle Valo } __packed;
103*d8899132SKalle Valo 
104*d8899132SKalle Valo struct ath12k_htc_ready_extended {
105*d8899132SKalle Valo 	struct ath12k_htc_ready base;
106*d8899132SKalle Valo 	__le32 ver_bundle;
107*d8899132SKalle Valo } __packed;
108*d8899132SKalle Valo 
109*d8899132SKalle Valo struct ath12k_htc_conn_svc {
110*d8899132SKalle Valo 	__le32 msg_svc_id;
111*d8899132SKalle Valo 	__le32 flags_len;
112*d8899132SKalle Valo } __packed;
113*d8899132SKalle Valo 
114*d8899132SKalle Valo struct ath12k_htc_conn_svc_resp {
115*d8899132SKalle Valo 	__le32 msg_svc_id;
116*d8899132SKalle Valo 	__le32 flags_len;
117*d8899132SKalle Valo 	__le32 svc_meta_pad;
118*d8899132SKalle Valo } __packed;
119*d8899132SKalle Valo 
120*d8899132SKalle Valo struct ath12k_htc_setup_complete_extended {
121*d8899132SKalle Valo 	__le32 msg_id;
122*d8899132SKalle Valo 	__le32 flags;
123*d8899132SKalle Valo 	__le32 max_msgs_per_bundled_recv;
124*d8899132SKalle Valo } __packed;
125*d8899132SKalle Valo 
126*d8899132SKalle Valo struct ath12k_htc_msg {
127*d8899132SKalle Valo 	__le32 msg_svc_id;
128*d8899132SKalle Valo 	__le32 flags_len;
129*d8899132SKalle Valo } __packed __aligned(4);
130*d8899132SKalle Valo 
131*d8899132SKalle Valo enum ath12k_htc_record_id {
132*d8899132SKalle Valo 	ATH12K_HTC_RECORD_NULL    = 0,
133*d8899132SKalle Valo 	ATH12K_HTC_RECORD_CREDITS = 1
134*d8899132SKalle Valo };
135*d8899132SKalle Valo 
136*d8899132SKalle Valo struct ath12k_htc_record_hdr {
137*d8899132SKalle Valo 	u8 id; /* @enum ath12k_htc_record_id */
138*d8899132SKalle Valo 	u8 len;
139*d8899132SKalle Valo 	u8 pad0;
140*d8899132SKalle Valo 	u8 pad1;
141*d8899132SKalle Valo } __packed;
142*d8899132SKalle Valo 
143*d8899132SKalle Valo struct ath12k_htc_credit_report {
144*d8899132SKalle Valo 	u8 eid; /* @enum ath12k_htc_ep_id */
145*d8899132SKalle Valo 	u8 credits;
146*d8899132SKalle Valo 	u8 pad0;
147*d8899132SKalle Valo 	u8 pad1;
148*d8899132SKalle Valo } __packed;
149*d8899132SKalle Valo 
150*d8899132SKalle Valo struct ath12k_htc_record {
151*d8899132SKalle Valo 	struct ath12k_htc_record_hdr hdr;
152*d8899132SKalle Valo 	struct ath12k_htc_credit_report credit_report[];
153*d8899132SKalle Valo } __packed __aligned(4);
154*d8899132SKalle Valo 
155*d8899132SKalle Valo /* HTC FRAME structure layout draft
156*d8899132SKalle Valo  *
157*d8899132SKalle Valo  * note: the trailer offset is dynamic depending
158*d8899132SKalle Valo  * on payload length. this is only a struct layout draft
159*d8899132SKalle Valo  *
160*d8899132SKalle Valo  *=======================================================
161*d8899132SKalle Valo  *
162*d8899132SKalle Valo  *                 HTC HEADER
163*d8899132SKalle Valo  *
164*d8899132SKalle Valo  *=======================================================
165*d8899132SKalle Valo  *                      |
166*d8899132SKalle Valo  *      HTC message     |        payload
167*d8899132SKalle Valo  *   (variable length)  |    (variable length)
168*d8899132SKalle Valo  *=======================================================
169*d8899132SKalle Valo  *
170*d8899132SKalle Valo  *                  HTC Record
171*d8899132SKalle Valo  *
172*d8899132SKalle Valo  *=======================================================
173*d8899132SKalle Valo  */
174*d8899132SKalle Valo 
175*d8899132SKalle Valo enum ath12k_htc_svc_gid {
176*d8899132SKalle Valo 	ATH12K_HTC_SVC_GRP_RSVD = 0,
177*d8899132SKalle Valo 	ATH12K_HTC_SVC_GRP_WMI = 1,
178*d8899132SKalle Valo 	ATH12K_HTC_SVC_GRP_NMI = 2,
179*d8899132SKalle Valo 	ATH12K_HTC_SVC_GRP_HTT = 3,
180*d8899132SKalle Valo 	ATH12K_HTC_SVC_GRP_CFG = 4,
181*d8899132SKalle Valo 	ATH12K_HTC_SVC_GRP_IPA = 5,
182*d8899132SKalle Valo 	ATH12K_HTC_SVC_GRP_PKTLOG = 6,
183*d8899132SKalle Valo 
184*d8899132SKalle Valo 	ATH12K_HTC_SVC_GRP_TEST = 254,
185*d8899132SKalle Valo 	ATH12K_HTC_SVC_GRP_LAST = 255,
186*d8899132SKalle Valo };
187*d8899132SKalle Valo 
188*d8899132SKalle Valo #define SVC(group, idx) \
189*d8899132SKalle Valo 	(int)(((int)(group) << 8) | (int)(idx))
190*d8899132SKalle Valo 
191*d8899132SKalle Valo enum ath12k_htc_svc_id {
192*d8899132SKalle Valo 	/* NOTE: service ID of 0x0000 is reserved and should never be used */
193*d8899132SKalle Valo 	ATH12K_HTC_SVC_ID_RESERVED	= 0x0000,
194*d8899132SKalle Valo 	ATH12K_HTC_SVC_ID_UNUSED	= ATH12K_HTC_SVC_ID_RESERVED,
195*d8899132SKalle Valo 
196*d8899132SKalle Valo 	ATH12K_HTC_SVC_ID_RSVD_CTRL	= SVC(ATH12K_HTC_SVC_GRP_RSVD, 1),
197*d8899132SKalle Valo 	ATH12K_HTC_SVC_ID_WMI_CONTROL	= SVC(ATH12K_HTC_SVC_GRP_WMI, 0),
198*d8899132SKalle Valo 	ATH12K_HTC_SVC_ID_WMI_DATA_BE	= SVC(ATH12K_HTC_SVC_GRP_WMI, 1),
199*d8899132SKalle Valo 	ATH12K_HTC_SVC_ID_WMI_DATA_BK	= SVC(ATH12K_HTC_SVC_GRP_WMI, 2),
200*d8899132SKalle Valo 	ATH12K_HTC_SVC_ID_WMI_DATA_VI	= SVC(ATH12K_HTC_SVC_GRP_WMI, 3),
201*d8899132SKalle Valo 	ATH12K_HTC_SVC_ID_WMI_DATA_VO	= SVC(ATH12K_HTC_SVC_GRP_WMI, 4),
202*d8899132SKalle Valo 	ATH12K_HTC_SVC_ID_WMI_CONTROL_MAC1 = SVC(ATH12K_HTC_SVC_GRP_WMI, 5),
203*d8899132SKalle Valo 	ATH12K_HTC_SVC_ID_WMI_CONTROL_MAC2 = SVC(ATH12K_HTC_SVC_GRP_WMI, 6),
204*d8899132SKalle Valo 	ATH12K_HTC_SVC_ID_WMI_CONTROL_DIAG = SVC(ATH12K_HTC_SVC_GRP_WMI, 7),
205*d8899132SKalle Valo 
206*d8899132SKalle Valo 	ATH12K_HTC_SVC_ID_NMI_CONTROL	= SVC(ATH12K_HTC_SVC_GRP_NMI, 0),
207*d8899132SKalle Valo 	ATH12K_HTC_SVC_ID_NMI_DATA	= SVC(ATH12K_HTC_SVC_GRP_NMI, 1),
208*d8899132SKalle Valo 
209*d8899132SKalle Valo 	ATH12K_HTC_SVC_ID_HTT_DATA_MSG	= SVC(ATH12K_HTC_SVC_GRP_HTT, 0),
210*d8899132SKalle Valo 
211*d8899132SKalle Valo 	/* raw stream service (i.e. flash, tcmd, calibration apps) */
212*d8899132SKalle Valo 	ATH12K_HTC_SVC_ID_TEST_RAW_STREAMS = SVC(ATH12K_HTC_SVC_GRP_TEST, 0),
213*d8899132SKalle Valo 	ATH12K_HTC_SVC_ID_IPA_TX = SVC(ATH12K_HTC_SVC_GRP_IPA, 0),
214*d8899132SKalle Valo 	ATH12K_HTC_SVC_ID_PKT_LOG = SVC(ATH12K_HTC_SVC_GRP_PKTLOG, 0),
215*d8899132SKalle Valo };
216*d8899132SKalle Valo 
217*d8899132SKalle Valo #undef SVC
218*d8899132SKalle Valo 
219*d8899132SKalle Valo enum ath12k_htc_ep_id {
220*d8899132SKalle Valo 	ATH12K_HTC_EP_UNUSED = -1,
221*d8899132SKalle Valo 	ATH12K_HTC_EP_0 = 0,
222*d8899132SKalle Valo 	ATH12K_HTC_EP_1 = 1,
223*d8899132SKalle Valo 	ATH12K_HTC_EP_2,
224*d8899132SKalle Valo 	ATH12K_HTC_EP_3,
225*d8899132SKalle Valo 	ATH12K_HTC_EP_4,
226*d8899132SKalle Valo 	ATH12K_HTC_EP_5,
227*d8899132SKalle Valo 	ATH12K_HTC_EP_6,
228*d8899132SKalle Valo 	ATH12K_HTC_EP_7,
229*d8899132SKalle Valo 	ATH12K_HTC_EP_8,
230*d8899132SKalle Valo 	ATH12K_HTC_EP_COUNT,
231*d8899132SKalle Valo };
232*d8899132SKalle Valo 
233*d8899132SKalle Valo struct ath12k_htc_ep_ops {
234*d8899132SKalle Valo 	void (*ep_tx_complete)(struct ath12k_base *ab, struct sk_buff *skb);
235*d8899132SKalle Valo 	void (*ep_rx_complete)(struct ath12k_base *ab, struct sk_buff *skb);
236*d8899132SKalle Valo 	void (*ep_tx_credits)(struct ath12k_base *ab);
237*d8899132SKalle Valo };
238*d8899132SKalle Valo 
239*d8899132SKalle Valo /* service connection information */
240*d8899132SKalle Valo struct ath12k_htc_svc_conn_req {
241*d8899132SKalle Valo 	u16 service_id;
242*d8899132SKalle Valo 	struct ath12k_htc_ep_ops ep_ops;
243*d8899132SKalle Valo 	int max_send_queue_depth;
244*d8899132SKalle Valo };
245*d8899132SKalle Valo 
246*d8899132SKalle Valo /* service connection response information */
247*d8899132SKalle Valo struct ath12k_htc_svc_conn_resp {
248*d8899132SKalle Valo 	u8 buffer_len;
249*d8899132SKalle Valo 	u8 actual_len;
250*d8899132SKalle Valo 	enum ath12k_htc_ep_id eid;
251*d8899132SKalle Valo 	unsigned int max_msg_len;
252*d8899132SKalle Valo 	u8 connect_resp_code;
253*d8899132SKalle Valo };
254*d8899132SKalle Valo 
255*d8899132SKalle Valo #define ATH12K_NUM_CONTROL_TX_BUFFERS 2
256*d8899132SKalle Valo #define ATH12K_HTC_MAX_LEN 4096
257*d8899132SKalle Valo #define ATH12K_HTC_MAX_CTRL_MSG_LEN 256
258*d8899132SKalle Valo #define ATH12K_HTC_WAIT_TIMEOUT_HZ (1 * HZ)
259*d8899132SKalle Valo #define ATH12K_HTC_CONTROL_BUFFER_SIZE (ATH12K_HTC_MAX_CTRL_MSG_LEN + \
260*d8899132SKalle Valo 					sizeof(struct ath12k_htc_hdr))
261*d8899132SKalle Valo #define ATH12K_HTC_CONN_SVC_TIMEOUT_HZ (1 * HZ)
262*d8899132SKalle Valo #define ATH12K_HTC_MAX_SERVICE_ALLOC_ENTRIES 8
263*d8899132SKalle Valo 
264*d8899132SKalle Valo struct ath12k_htc_ep {
265*d8899132SKalle Valo 	struct ath12k_htc *htc;
266*d8899132SKalle Valo 	enum ath12k_htc_ep_id eid;
267*d8899132SKalle Valo 	enum ath12k_htc_svc_id service_id;
268*d8899132SKalle Valo 	struct ath12k_htc_ep_ops ep_ops;
269*d8899132SKalle Valo 
270*d8899132SKalle Valo 	int max_tx_queue_depth;
271*d8899132SKalle Valo 	int max_ep_message_len;
272*d8899132SKalle Valo 	u8 ul_pipe_id;
273*d8899132SKalle Valo 	u8 dl_pipe_id;
274*d8899132SKalle Valo 
275*d8899132SKalle Valo 	u8 seq_no; /* for debugging */
276*d8899132SKalle Valo 	int tx_credits;
277*d8899132SKalle Valo 	bool tx_credit_flow_enabled;
278*d8899132SKalle Valo };
279*d8899132SKalle Valo 
280*d8899132SKalle Valo struct ath12k_htc_svc_tx_credits {
281*d8899132SKalle Valo 	u16 service_id;
282*d8899132SKalle Valo 	u8  credit_allocation;
283*d8899132SKalle Valo };
284*d8899132SKalle Valo 
285*d8899132SKalle Valo struct ath12k_htc {
286*d8899132SKalle Valo 	struct ath12k_base *ab;
287*d8899132SKalle Valo 	struct ath12k_htc_ep endpoint[ATH12K_HTC_EP_COUNT];
288*d8899132SKalle Valo 
289*d8899132SKalle Valo 	/* protects endpoints */
290*d8899132SKalle Valo 	spinlock_t tx_lock;
291*d8899132SKalle Valo 
292*d8899132SKalle Valo 	u8 control_resp_buffer[ATH12K_HTC_MAX_CTRL_MSG_LEN];
293*d8899132SKalle Valo 	int control_resp_len;
294*d8899132SKalle Valo 
295*d8899132SKalle Valo 	struct completion ctl_resp;
296*d8899132SKalle Valo 
297*d8899132SKalle Valo 	int total_transmit_credits;
298*d8899132SKalle Valo 	struct ath12k_htc_svc_tx_credits
299*d8899132SKalle Valo 		service_alloc_table[ATH12K_HTC_MAX_SERVICE_ALLOC_ENTRIES];
300*d8899132SKalle Valo 	int target_credit_size;
301*d8899132SKalle Valo 	u8 wmi_ep_count;
302*d8899132SKalle Valo };
303*d8899132SKalle Valo 
304*d8899132SKalle Valo int ath12k_htc_init(struct ath12k_base *ar);
305*d8899132SKalle Valo int ath12k_htc_wait_target(struct ath12k_htc *htc);
306*d8899132SKalle Valo int ath12k_htc_start(struct ath12k_htc *htc);
307*d8899132SKalle Valo int ath12k_htc_connect_service(struct ath12k_htc *htc,
308*d8899132SKalle Valo 			       struct ath12k_htc_svc_conn_req  *conn_req,
309*d8899132SKalle Valo 			       struct ath12k_htc_svc_conn_resp *conn_resp);
310*d8899132SKalle Valo int ath12k_htc_send(struct ath12k_htc *htc, enum ath12k_htc_ep_id eid,
311*d8899132SKalle Valo 		    struct sk_buff *packet);
312*d8899132SKalle Valo struct sk_buff *ath12k_htc_alloc_skb(struct ath12k_base *ar, int size);
313*d8899132SKalle Valo void ath12k_htc_rx_completion_handler(struct ath12k_base *ar,
314*d8899132SKalle Valo 				      struct sk_buff *skb);
315*d8899132SKalle Valo 
316*d8899132SKalle Valo #endif
317