1 /*
2  * Copyright (c) 2014-2017,2019-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 /**
21  * DOC: i_qdf_nbuf_api_m.h
22  *
23  * Platform specific qdf_nbuf_public network buffer API
24  * This file defines the network buffer abstraction.
25  * Included by qdf_nbuf.h and should not be included
26  * directly from other files.
27  */
28 
29 #ifndef _QDF_NBUF_M_H
30 #define _QDF_NBUF_M_H
31 
qdf_nbuf_ipa_owned_get(qdf_nbuf_t buf)32 static inline int qdf_nbuf_ipa_owned_get(qdf_nbuf_t buf)
33 {
34 	return __qdf_nbuf_ipa_owned_get(buf);
35 }
36 
qdf_nbuf_ipa_owned_set(qdf_nbuf_t buf)37 static inline void qdf_nbuf_ipa_owned_set(qdf_nbuf_t buf)
38 {
39 	__qdf_nbuf_ipa_owned_set(buf);
40 }
41 
qdf_nbuf_ipa_owned_clear(qdf_nbuf_t buf)42 static inline void qdf_nbuf_ipa_owned_clear(qdf_nbuf_t buf)
43 {
44 	__qdf_nbuf_ipa_owned_clear(buf);
45 }
46 
qdf_nbuf_ipa_priv_get(qdf_nbuf_t buf)47 static inline int qdf_nbuf_ipa_priv_get(qdf_nbuf_t buf)
48 {
49 	return __qdf_nbuf_ipa_priv_get(buf);
50 }
51 
qdf_nbuf_ipa_priv_set(qdf_nbuf_t buf,uint32_t priv)52 static inline void qdf_nbuf_ipa_priv_set(qdf_nbuf_t buf, uint32_t priv)
53 {
54 
55 	QDF_BUG(!(priv & QDF_NBUF_IPA_CHECK_MASK));
56 	__qdf_nbuf_ipa_priv_set(buf, priv);
57 }
58 
qdf_nbuf_tx_notify_comp_set(qdf_nbuf_t buf,uint8_t val)59 static inline void qdf_nbuf_tx_notify_comp_set(qdf_nbuf_t buf, uint8_t val)
60 {
61 	QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_NOTIFY_COMP(buf) = val;
62 }
63 
qdf_nbuf_tx_notify_comp_get(qdf_nbuf_t buf)64 static inline uint8_t qdf_nbuf_tx_notify_comp_get(qdf_nbuf_t buf)
65 {
66 	return QDF_NBUF_CB_TX_EXTRA_FRAG_FLAGS_NOTIFY_COMP(buf);
67 }
68 
69 /**
70  * qdf_nbuf_set_rx_protocol_tag()
71  * @buf: Network buffer
72  * @val: Value to be set in the nbuf
73  * Return: None
74  */
qdf_nbuf_set_rx_protocol_tag(qdf_nbuf_t buf,uint16_t val)75 static inline void qdf_nbuf_set_rx_protocol_tag(qdf_nbuf_t buf, uint16_t val)
76 {
77 }
78 
79 /**
80  * qdf_nbuf_get_rx_protocol_tag()
81  * @buf: Network buffer
82  * Return: Value of rx protocol tag, here 0
83  */
qdf_nbuf_get_rx_protocol_tag(qdf_nbuf_t buf)84 static inline uint16_t qdf_nbuf_get_rx_protocol_tag(qdf_nbuf_t buf)
85 {
86 	return 0;
87 }
88 
89 /**
90  * qdf_nbuf_set_rx_flow_tag() - set given value in flow tag field
91  * of buf(skb->cb)
92  * @buf: Network buffer
93  * @val: Rx Flow Tag to be set in the nbuf
94  * Return: None
95  */
qdf_nbuf_set_rx_flow_tag(qdf_nbuf_t buf,uint16_t val)96 static inline void qdf_nbuf_set_rx_flow_tag(qdf_nbuf_t buf, uint16_t val)
97 {
98 }
99 
100 /**
101  * qdf_nbuf_get_rx_flow_tag() - Get the value of flow_tag
102  * field of buf(skb->cb)
103  * @buf: Network buffer
104  * Return: Value of rx flow tag, here 0
105  */
qdf_nbuf_get_rx_flow_tag(qdf_nbuf_t buf)106 static inline uint16_t qdf_nbuf_get_rx_flow_tag(qdf_nbuf_t buf)
107 {
108 	return 0;
109 }
110 
111 /**
112  * qdf_nbuf_set_exc_frame() - set exception frame flag
113  * @buf: Network buffer whose cb is to set exception frame flag
114  * @value: exception frame flag, value 0 or 1.
115  *
116  * Return: none
117  */
qdf_nbuf_set_exc_frame(qdf_nbuf_t buf,uint8_t value)118 static inline void qdf_nbuf_set_exc_frame(qdf_nbuf_t buf, uint8_t value)
119 {
120 	QDF_NBUF_CB_RX_PACKET_EXC_FRAME(buf) = value;
121 }
122 
123 /**
124  * qdf_nbuf_is_exc_frame() - check exception frame flag bit
125  * @buf: Network buffer to get exception flag
126  *
127  * Return: 0 or 1
128  */
qdf_nbuf_is_exc_frame(qdf_nbuf_t buf)129 static inline uint8_t qdf_nbuf_is_exc_frame(qdf_nbuf_t buf)
130 {
131 	return QDF_NBUF_CB_RX_PACKET_EXC_FRAME(buf);
132 }
133 
134 /**
135  * qdf_nbuf_set_lmac_id() - set lmac ID
136  * @buf: Network buffer
137  * @value: lmac ID value
138  *
139  * Return: none
140  */
qdf_nbuf_set_lmac_id(qdf_nbuf_t buf,uint8_t value)141 static inline void qdf_nbuf_set_lmac_id(qdf_nbuf_t buf, uint8_t value)
142 {
143 	QDF_NBUF_CB_RX_PACKET_LMAC_ID(buf) = value;
144 }
145 
146 /**
147  * qdf_nbuf_get_lmac_id() - get lmac ID of RX packet
148  * @buf: Network buffer
149  *
150  * Return: lmac ID value
151  */
qdf_nbuf_get_lmac_id(qdf_nbuf_t buf)152 static inline uint8_t qdf_nbuf_get_lmac_id(qdf_nbuf_t buf)
153 {
154 	return QDF_NBUF_CB_RX_PACKET_LMAC_ID(buf);
155 }
156 
157 /**
158  * qdf_nbuf_get_mpdu_seq_num() - get MPDU sequence number
159  * @buf: Network buffer
160  *
161  * Return: mpdu sequence number value
162  */
qdf_nbuf_get_mpdu_seq_num(qdf_nbuf_t buf)163 static inline uint16_t qdf_nbuf_get_mpdu_seq_num(qdf_nbuf_t buf)
164 {
165 	return QDF_NBUF_CB_RX_MPDU_SEQ_NUM(buf);
166 }
167 
168 /**
169  * qdf_nbuf_set_rx_ipa_smmu_map() - set ipa smmu mapped flag
170  * @buf: Network buffer
171  * @value: 1 - ipa smmu mapped, 0 - ipa smmu unmapped
172  *
173  * Return: none
174  */
qdf_nbuf_set_rx_ipa_smmu_map(qdf_nbuf_t buf,uint8_t value)175 static inline void qdf_nbuf_set_rx_ipa_smmu_map(qdf_nbuf_t buf,
176 						uint8_t value)
177 {
178 	QDF_NBUF_CB_RX_PACKET_IPA_SMMU_MAP(buf) = value;
179 }
180 
181 /**
182  * qdf_nbuf_is_rx_ipa_smmu_map() - check ipa smmu map flag
183  * @buf: Network buffer
184  *
185  * Return 0 or 1
186  */
qdf_nbuf_is_rx_ipa_smmu_map(qdf_nbuf_t buf)187 static inline uint8_t qdf_nbuf_is_rx_ipa_smmu_map(qdf_nbuf_t buf)
188 {
189 	return QDF_NBUF_CB_RX_PACKET_IPA_SMMU_MAP(buf);
190 }
191 
192 /**
193  * qdf_nbuf_set_rx_reo_dest_ind_or_sw_excpt() - set reo destination indication
194  *						or sw exception flag
195  * @buf: Network buffer
196  * @value: value to set
197  *
198  * Return: none
199  */
qdf_nbuf_set_rx_reo_dest_ind_or_sw_excpt(qdf_nbuf_t buf,uint8_t value)200 static inline void qdf_nbuf_set_rx_reo_dest_ind_or_sw_excpt(qdf_nbuf_t buf,
201 							    uint8_t value)
202 {
203 	QDF_NBUF_CB_RX_PACKET_REO_DEST_IND_OR_SW_EXCPT(buf) = value;
204 }
205 
206 /**
207  * qdf_nbuf_get_rx_reo_dest_ind_or_sw_excpt() - get reo destination indication
208  *						or sw exception flag
209  * @buf: Network buffer
210  *
211  * Return reo destination indication value (0 ~ 31) or sw exception (0 ~ 1)
212  */
qdf_nbuf_get_rx_reo_dest_ind_or_sw_excpt(qdf_nbuf_t buf)213 static inline uint8_t qdf_nbuf_get_rx_reo_dest_ind_or_sw_excpt(qdf_nbuf_t buf)
214 {
215 	return QDF_NBUF_CB_RX_PACKET_REO_DEST_IND_OR_SW_EXCPT(buf);
216 }
217 
218 /**
219  * qdf_nbuf_get_tx_fctx() - get fctx of nbuf
220  *
221  * @buf: Network buffer
222  * Return: fctx value
223  */
qdf_nbuf_get_tx_fctx(qdf_nbuf_t buf)224 static inline void *qdf_nbuf_get_tx_fctx(qdf_nbuf_t buf)
225 {
226 	return NULL;
227 }
228 
229 /**
230  * qdf_nbuf_set_tx_fctx_type() - set ftype and fctx
231  *
232  * @buf: Network buffer
233  * @ctx: address to fctx
234  * @type: ftype
235  *
236  * Return: void
237  */
238 static inline void
qdf_nbuf_set_tx_fctx_type(qdf_nbuf_t buf,void * ctx,uint8_t type)239 qdf_nbuf_set_tx_fctx_type(qdf_nbuf_t buf, void *ctx, uint8_t type)
240 {
241 }
242 
243 /**
244  * qdf_nbuf_tx_set_band() - Set band in nbuf cb
245  * @nbuf: nbuf pointer
246  * @band: peer band
247  *
248  * Return: None
249  */
250 static inline void
qdf_nbuf_tx_set_band(qdf_nbuf_t nbuf,uint8_t band)251 qdf_nbuf_tx_set_band(qdf_nbuf_t nbuf, uint8_t band)
252 {
253 	QDF_NBUF_CB_TX_BAND(nbuf) = band;
254 }
255 
256 /**
257  * qdf_nbuf_tx_get_band() - Get band from nbuf cb
258  * @nbuf: nbuf pointer
259  *
260  * Return: Band
261  */
262 static inline uint8_t
qdf_nbuf_tx_get_band(qdf_nbuf_t nbuf)263 qdf_nbuf_tx_get_band(qdf_nbuf_t nbuf)
264 {
265 	return QDF_NBUF_CB_TX_BAND(nbuf);
266 }
267 
268 /**
269  * qdf_nbuf_rx_set_band() - Set band in nbuf cb
270  * @nbuf: nbuf pointer
271  * @band: peer band
272  *
273  * Return: None
274  */
275 static inline void
qdf_nbuf_rx_set_band(qdf_nbuf_t nbuf,uint8_t band)276 qdf_nbuf_rx_set_band(qdf_nbuf_t nbuf, uint8_t band)
277 {
278 	QDF_NBUF_CB_RX_BAND(nbuf) = band;
279 }
280 
281 /**
282  * qdf_nbuf_rx_get_band() - Get band from nbuf cb
283  * @nbuf: nbuf pointer
284  *
285  * Return: Band
286  */
287 static inline uint8_t
qdf_nbuf_rx_get_band(qdf_nbuf_t nbuf)288 qdf_nbuf_rx_get_band(qdf_nbuf_t nbuf)
289 {
290 	return QDF_NBUF_CB_RX_BAND(nbuf);
291 }
292 
293 /**
294  * qdf_nbuf_set_tx_ts() - set tx timestamp of nbuf
295  * @buf: Network buffer
296  *
297  * Return: None
298  */
qdf_nbuf_set_tx_ts(qdf_nbuf_t buf)299 static inline void qdf_nbuf_set_tx_ts(qdf_nbuf_t buf)
300 {
301 	__qdf_nbuf_set_tx_ts(buf, qdf_ktime_real_get());
302 }
303 
304 /**
305  * qdf_nbuf_get_tx_ts() - get tx timestamp of nbuf
306  * @buf: Network buffer
307  * @clear: clear the fields after getting tx timestamp
308  *
309  * Return: tx timestamp
310  */
qdf_nbuf_get_tx_ts(qdf_nbuf_t buf,bool clear)311 static inline qdf_time_t qdf_nbuf_get_tx_ts(qdf_nbuf_t buf, bool clear)
312 {
313 	qdf_time_t ts = __qdf_nbuf_get_tx_ts(buf);
314 
315 	if (clear)
316 		__qdf_nbuf_clear_tx_ts(buf);
317 	return ts;
318 }
319 #endif /* _QDF_NBUF_M_H */
320