xref: /wlan-driver/qca-wifi-host-cmn/target_if/dp/inc/target_if_dp.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name 
20*5113495bSYour Name /**
21*5113495bSYour Name  * DOC: This target interface shall be used by DP
22*5113495bSYour Name  *      to communicate with target using WMI.
23*5113495bSYour Name  */
24*5113495bSYour Name 
25*5113495bSYour Name #ifndef _WLAN_TARGET_IF_DP_H_
26*5113495bSYour Name #define _WLAN_TARGET_IF_DP_H_
27*5113495bSYour Name 
28*5113495bSYour Name #include <qdf_types.h>
29*5113495bSYour Name #include <qdf_status.h>
30*5113495bSYour Name #include <wmi_unified_priv.h>
31*5113495bSYour Name #include <wlan_objmgr_psoc_obj.h>
32*5113495bSYour Name #include <target_if.h>
33*5113495bSYour Name #include <cdp_txrx_ops.h>
34*5113495bSYour Name #include <wlan_cfg.h>
35*5113495bSYour Name 
36*5113495bSYour Name #define PEER_ROUTING_LMAC_ID_INDEX	6
37*5113495bSYour Name #define PEER_ROUTING_LMAC_ID_BITS	2
38*5113495bSYour Name 
39*5113495bSYour Name /**
40*5113495bSYour Name  * struct reorder_q_setup - reorder queue setup params
41*5113495bSYour Name  * @psoc: psoc
42*5113495bSYour Name  * @vdev_id: vdev id
43*5113495bSYour Name  * @pdev_id: pdev id
44*5113495bSYour Name  * @peer_mac: peer mac address
45*5113495bSYour Name  * @hw_qdesc_paddr: hw queue descriptor
46*5113495bSYour Name  * @tid: tid number
47*5113495bSYour Name  * @queue_no: queue number
48*5113495bSYour Name  * @ba_window_size_valid: BA window size validity flag
49*5113495bSYour Name  * @ba_window_size: BA window size
50*5113495bSYour Name  */
51*5113495bSYour Name struct reorder_q_setup {
52*5113495bSYour Name 	struct cdp_ctrl_objmgr_psoc *psoc;
53*5113495bSYour Name 	uint8_t vdev_id;
54*5113495bSYour Name 	uint8_t pdev_id;
55*5113495bSYour Name 	uint8_t peer_mac[QDF_MAC_ADDR_SIZE];
56*5113495bSYour Name 	qdf_dma_addr_t hw_qdesc_paddr;
57*5113495bSYour Name 	uint8_t tid;
58*5113495bSYour Name 	uint16_t queue_no;
59*5113495bSYour Name 	uint8_t ba_window_size_valid;
60*5113495bSYour Name 	uint16_t ba_window_size;
61*5113495bSYour Name };
62*5113495bSYour Name 
63*5113495bSYour Name /**
64*5113495bSYour Name  * struct reorder_q_setup_list - Specific tid params for each tid
65*5113495bSYour Name  * @hw_qdesc_paddr: hw queue descriptor
66*5113495bSYour Name  * @queue_no: queue number
67*5113495bSYour Name  * @ba_window_size: BA window size
68*5113495bSYour Name  * @ba_window_size_valid: BA window size validity flag
69*5113495bSYour Name  */
70*5113495bSYour Name struct reorder_q_setup_list {
71*5113495bSYour Name 	qdf_dma_addr_t hw_qdesc_paddr;
72*5113495bSYour Name 	uint16_t queue_no;
73*5113495bSYour Name 	uint16_t ba_window_size;
74*5113495bSYour Name 	uint8_t ba_window_size_valid;
75*5113495bSYour Name };
76*5113495bSYour Name 
77*5113495bSYour Name /**
78*5113495bSYour Name  * struct multi_reorder_q_setup - multi reorder queue setup
79*5113495bSYour Name  *	params for setting up TIDs at a time
80*5113495bSYour Name  * @q_setup_list:  An array for recording the specific params for each tid
81*5113495bSYour Name  * @peer_mac: peer mac address
82*5113495bSYour Name  * @psoc: psoc
83*5113495bSYour Name  * @vdev_id: vdev id
84*5113495bSYour Name  * @pdev_id: pdev id
85*5113495bSYour Name  * @tid_num: Total number of TIDs to be set up
86*5113495bSYour Name  * @tid_bitmap: TIDs to be set up
87*5113495bSYour Name  */
88*5113495bSYour Name struct multi_reorder_q_setup {
89*5113495bSYour Name 	struct reorder_q_setup_list q_setup_list[DP_MAX_TIDS];
90*5113495bSYour Name 	uint8_t peer_mac[QDF_MAC_ADDR_SIZE];
91*5113495bSYour Name 	struct cdp_ctrl_objmgr_psoc *psoc;
92*5113495bSYour Name 	uint8_t vdev_id;
93*5113495bSYour Name 	uint8_t pdev_id;
94*5113495bSYour Name 	uint8_t tid_num;
95*5113495bSYour Name 	uint32_t tid_bitmap;
96*5113495bSYour Name };
97*5113495bSYour Name 
98*5113495bSYour Name /**
99*5113495bSYour Name  * target_if_get_active_mac_phy_number() - Get max MAC-PHY number enabled by
100*5113495bSYour Name  * target
101*5113495bSYour Name  * @psoc: psoc
102*5113495bSYour Name  *
103*5113495bSYour Name  * Get max active MAC-PHY number in all type of hw modes.
104*5113495bSYour Name  *
105*5113495bSYour Name  * return: active number of MAC-PHY pairs
106*5113495bSYour Name  */
107*5113495bSYour Name uint32_t target_if_get_active_mac_phy_number(struct wlan_objmgr_psoc *psoc);
108*5113495bSYour Name 
109*5113495bSYour Name /**
110*5113495bSYour Name  * target_if_peer_set_default_routing() - set peer default routing
111*5113495bSYour Name  * @psoc: psoc pointer
112*5113495bSYour Name  * @pdev_id: pdev id
113*5113495bSYour Name  * @peer_macaddr: peer mac address
114*5113495bSYour Name  * @vdev_id: vdev id
115*5113495bSYour Name  * @hash_based: hash based routing
116*5113495bSYour Name  * @ring_num: ring number
117*5113495bSYour Name  * @lmac_peer_id_msb: lmac_peer_id_msb
118*5113495bSYour Name  *
119*5113495bSYour Name  * return: void
120*5113495bSYour Name  */
121*5113495bSYour Name void
122*5113495bSYour Name target_if_peer_set_default_routing(struct cdp_ctrl_objmgr_psoc *psoc,
123*5113495bSYour Name 				   uint8_t pdev_id,
124*5113495bSYour Name 				   uint8_t *peer_macaddr, uint8_t vdev_id,
125*5113495bSYour Name 				   bool hash_based, uint8_t ring_num,
126*5113495bSYour Name 				   uint8_t lmac_peer_id_msb);
127*5113495bSYour Name /**
128*5113495bSYour Name  * target_if_peer_rx_reorder_queue_setup() - set up rx reorder queue
129*5113495bSYour Name  * @psoc: psoc pointer
130*5113495bSYour Name  * @pdev_id: pdev id
131*5113495bSYour Name  * @vdev_id: vdev id
132*5113495bSYour Name  * @peer_macaddr: peer mac address
133*5113495bSYour Name  * @hw_qdesc: hw queue descriptor
134*5113495bSYour Name  * @tid: tid number
135*5113495bSYour Name  * @queue_no: queue number
136*5113495bSYour Name  * @ba_window_size_valid: BA window size validity flag
137*5113495bSYour Name  * @ba_window_size: BA window size
138*5113495bSYour Name  *
139*5113495bSYour Name  * return: QDF_STATUS_SUCCESS for success or error code
140*5113495bSYour Name  */
141*5113495bSYour Name QDF_STATUS
142*5113495bSYour Name target_if_peer_rx_reorder_queue_setup(struct cdp_ctrl_objmgr_psoc *psoc,
143*5113495bSYour Name 				      uint8_t pdev_id,
144*5113495bSYour Name 				      uint8_t vdev_id, uint8_t *peer_macaddr,
145*5113495bSYour Name 				      qdf_dma_addr_t hw_qdesc, int tid,
146*5113495bSYour Name 				      uint16_t queue_no,
147*5113495bSYour Name 				      uint8_t ba_window_size_valid,
148*5113495bSYour Name 				      uint16_t ba_window_size);
149*5113495bSYour Name 
150*5113495bSYour Name /**
151*5113495bSYour Name  * target_if_peer_multi_rx_reorder_queue_setup() - set up multi rx reorder queue
152*5113495bSYour Name  * @psoc: psoc pointer
153*5113495bSYour Name  * @pdev_id: pdev id
154*5113495bSYour Name  * @tid_params: TIDs with their parameters to be set
155*5113495bSYour Name  *
156*5113495bSYour Name  * return: QDF_STATUS_SUCCESS for success or error code
157*5113495bSYour Name  */
158*5113495bSYour Name QDF_STATUS
159*5113495bSYour Name target_if_peer_multi_rx_reorder_queue_setup(
160*5113495bSYour Name 	struct cdp_ctrl_objmgr_psoc *psoc,
161*5113495bSYour Name 	uint8_t pdev_id,
162*5113495bSYour Name 	struct multi_rx_reorder_queue_setup_params *tid_params);
163*5113495bSYour Name 
164*5113495bSYour Name /**
165*5113495bSYour Name  * target_if_peer_rx_reorder_queue_remove() - remove rx reorder queue
166*5113495bSYour Name  * @psoc: psoc pointer
167*5113495bSYour Name  * @pdev_id: pdev id
168*5113495bSYour Name  * @vdev_id: vdev id
169*5113495bSYour Name  * @peer_macaddr: peer mac address
170*5113495bSYour Name  * @peer_tid_bitmap: peer tid bitmap
171*5113495bSYour Name  *
172*5113495bSYour Name  * return: QDF_STATUS_SUCCESS for success or error code
173*5113495bSYour Name  */
174*5113495bSYour Name QDF_STATUS
175*5113495bSYour Name target_if_peer_rx_reorder_queue_remove(struct cdp_ctrl_objmgr_psoc *psoc,
176*5113495bSYour Name 				       uint8_t pdev_id,
177*5113495bSYour Name 				       uint8_t vdev_id, uint8_t *peer_macaddr,
178*5113495bSYour Name 				       uint32_t peer_tid_bitmap);
179*5113495bSYour Name 
180*5113495bSYour Name /**
181*5113495bSYour Name  * target_if_lro_hash_config() - send LRO hash config to FW
182*5113495bSYour Name  * @psoc: psoc pointer
183*5113495bSYour Name  * @pdev_id: pdev id
184*5113495bSYour Name  * @lro_hash_cfg: LRO hash config parameters
185*5113495bSYour Name  *
186*5113495bSYour Name  * return: QDF_STATUS_SUCCESS for success or error code
187*5113495bSYour Name  */
188*5113495bSYour Name QDF_STATUS
189*5113495bSYour Name target_if_lro_hash_config(struct cdp_ctrl_objmgr_psoc *psoc, uint8_t pdev_id,
190*5113495bSYour Name 			  struct cdp_lro_hash_config *lro_hash_cfg);
191*5113495bSYour Name 
192*5113495bSYour Name #ifdef WLAN_SUPPORT_PPEDS
193*5113495bSYour Name /**
194*5113495bSYour Name  * target_if_peer_set_ppeds_default_routing() - Set PPE DS routing API
195*5113495bSYour Name  * @soc: psoc handle pointer
196*5113495bSYour Name  * @peer_macaddr: Peer MAC address
197*5113495bSYour Name  * @service_code: Service code
198*5113495bSYour Name  * @priority_valid: Priority valid field
199*5113495bSYour Name  * @src_info: Source information
200*5113495bSYour Name  * @vdev_id: VDEV ID
201*5113495bSYour Name  * @use_ppe: use ppe field value
202*5113495bSYour Name  * @ppe_routing_enabled: PPE routing enabled
203*5113495bSYour Name  *
204*5113495bSYour Name  * This API is used for setting PPE default routing configuration
205*5113495bSYour Name  *
206*5113495bSYour Name  * return: QDF_STATUS_SUCCESS for success or error code
207*5113495bSYour Name  */
208*5113495bSYour Name QDF_STATUS
209*5113495bSYour Name target_if_peer_set_ppeds_default_routing(struct cdp_ctrl_objmgr_psoc *soc,
210*5113495bSYour Name 					 uint8_t *peer_macaddr,
211*5113495bSYour Name 					 uint16_t service_code,
212*5113495bSYour Name 					 uint8_t priority_valid,
213*5113495bSYour Name 					 uint16_t src_info,
214*5113495bSYour Name 					 uint8_t vdev_id, uint8_t use_ppe,
215*5113495bSYour Name 					 uint8_t ppe_routing_enabled);
216*5113495bSYour Name #endif
217*5113495bSYour Name 
218*5113495bSYour Name #ifdef WDS_CONV_TARGET_IF_OPS_ENABLE
219*5113495bSYour Name /**
220*5113495bSYour Name  * target_if_add_wds_entry() - send wds peer add command to fw
221*5113495bSYour Name  * @soc: SoC handle
222*5113495bSYour Name  * @vdev_id: vdev_id
223*5113495bSYour Name  * @peer_mac: peer mac address
224*5113495bSYour Name  * @dest_mac: MAC address of ast node
225*5113495bSYour Name  * @flags: WDS entry type WMI_HOST_WDS_FLAG_STATIC for static entry
226*5113495bSYour Name  * @type: type from enum cdp_txrx_ast_entry_type
227*5113495bSYour Name  *
228*5113495bSYour Name  * This API is used by WDS source port learning function to
229*5113495bSYour Name  * add a new AST entry in the fw.
230*5113495bSYour Name  *
231*5113495bSYour Name  * return: QDF_STATUS_SUCCESS for success or error code
232*5113495bSYour Name  */
233*5113495bSYour Name QDF_STATUS
234*5113495bSYour Name target_if_add_wds_entry(struct cdp_ctrl_objmgr_psoc *soc, uint8_t vdev_id,
235*5113495bSYour Name 			uint8_t *peer_mac, const uint8_t *dest_mac,
236*5113495bSYour Name 			uint32_t flags, uint8_t type);
237*5113495bSYour Name 
238*5113495bSYour Name /**
239*5113495bSYour Name  * target_if_del_wds_entry() - send wds peer del command to fw
240*5113495bSYour Name  * @soc: SoC handle
241*5113495bSYour Name  * @vdev_id: vdev_id
242*5113495bSYour Name  * @dest_mac: MAC address of ast node
243*5113495bSYour Name  * @type: type from enum cdp_txrx_ast_entry_type
244*5113495bSYour Name  * @delete_in_fw: flag to indicate if entry needs to be deleted in fw
245*5113495bSYour Name  *
246*5113495bSYour Name  * This API is used to delete an AST entry from fw
247*5113495bSYour Name  *
248*5113495bSYour Name  * Return: None
249*5113495bSYour Name  */
250*5113495bSYour Name void
251*5113495bSYour Name target_if_del_wds_entry(struct cdp_ctrl_objmgr_psoc *soc, uint8_t vdev_id,
252*5113495bSYour Name 			uint8_t *dest_mac, uint8_t type, uint8_t delete_in_fw);
253*5113495bSYour Name 
254*5113495bSYour Name /**
255*5113495bSYour Name  * target_if_update_wds_entry() - send wds peer update command to fw
256*5113495bSYour Name  * @soc: SoC handle
257*5113495bSYour Name  * @vdev_id: vdev_id
258*5113495bSYour Name  * @dest_mac: MAC address of ast node
259*5113495bSYour Name  * @peer_mac: peer mac address
260*5113495bSYour Name  * @flags: WDS entry type WMI_HOST_WDS_FLAG_STATIC for static entry
261*5113495bSYour Name  *
262*5113495bSYour Name  * This API is used by update the peer mac address for the ast
263*5113495bSYour Name  * in the fw.
264*5113495bSYour Name  *
265*5113495bSYour Name  * return: QDF_STATUS_SUCCESS for success or error code
266*5113495bSYour Name  */
267*5113495bSYour Name QDF_STATUS
268*5113495bSYour Name target_if_update_wds_entry(struct cdp_ctrl_objmgr_psoc *soc, uint8_t vdev_id,
269*5113495bSYour Name 			   uint8_t *dest_mac, uint8_t *peer_mac,
270*5113495bSYour Name 			   uint32_t flags);
271*5113495bSYour Name #else
272*5113495bSYour Name static inline QDF_STATUS
target_if_add_wds_entry(struct cdp_ctrl_objmgr_psoc * soc,uint8_t vdev_id,uint8_t * peer_mac,const uint8_t * dest_mac,uint32_t flags,uint8_t type)273*5113495bSYour Name target_if_add_wds_entry(struct cdp_ctrl_objmgr_psoc *soc, uint8_t vdev_id,
274*5113495bSYour Name 			uint8_t *peer_mac, const uint8_t *dest_mac,
275*5113495bSYour Name 			uint32_t flags, uint8_t type)
276*5113495bSYour Name {
277*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
278*5113495bSYour Name }
279*5113495bSYour Name 
280*5113495bSYour Name static inline void
target_if_del_wds_entry(struct cdp_ctrl_objmgr_psoc * soc,uint8_t vdev_id,uint8_t * dest_mac,uint8_t type,uint8_t delete_in_fw)281*5113495bSYour Name target_if_del_wds_entry(struct cdp_ctrl_objmgr_psoc *soc, uint8_t vdev_id,
282*5113495bSYour Name 			uint8_t *dest_mac, uint8_t type, uint8_t delete_in_fw)
283*5113495bSYour Name {
284*5113495bSYour Name }
285*5113495bSYour Name 
286*5113495bSYour Name static inline QDF_STATUS
target_if_update_wds_entry(struct cdp_ctrl_objmgr_psoc * soc,uint8_t vdev_id,uint8_t * dest_mac,uint8_t * peer_mac,uint32_t flags)287*5113495bSYour Name target_if_update_wds_entry(struct cdp_ctrl_objmgr_psoc *soc, uint8_t vdev_id,
288*5113495bSYour Name 			   uint8_t *dest_mac, uint8_t *peer_mac,
289*5113495bSYour Name 			   uint32_t flags)
290*5113495bSYour Name {
291*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
292*5113495bSYour Name }
293*5113495bSYour Name #endif /* FEATURE_MCL_REPEATER */
294*5113495bSYour Name 
295*5113495bSYour Name #ifdef WLAN_FEATURE_PEER_TXQ_FLUSH_CONF
296*5113495bSYour Name /**
297*5113495bSYour Name  * target_if_peer_txq_flush_config() - Send flush command for pending frames
298*5113495bSYour Name  * @psoc: psoc handle pointer
299*5113495bSYour Name  * @vdev_id: VDEV id
300*5113495bSYour Name  * @mac: MAC addr of peer for which the tx queue flush is intended
301*5113495bSYour Name  * @ac: AC mask for identifying the tx queues to be flushed
302*5113495bSYour Name  * @tid: TID mask for identifying the tx queues to be flushed
303*5113495bSYour Name  * @policy: Defines the flush policy
304*5113495bSYour Name  *
305*5113495bSYour Name  * Return: 0 for success or error code
306*5113495bSYour Name  */
307*5113495bSYour Name int target_if_peer_txq_flush_config(struct cdp_ctrl_objmgr_psoc *psoc,
308*5113495bSYour Name 				    uint8_t vdev_id, uint8_t *mac,
309*5113495bSYour Name 				    uint8_t ac, uint32_t tid, uint32_t policy);
310*5113495bSYour Name #else
311*5113495bSYour Name static inline int
target_if_peer_txq_flush_config(struct cdp_ctrl_objmgr_psoc * psoc,uint8_t vdev_id,uint8_t * mac,uint8_t ac,uint32_t tid,enum cdp_peer_txq_flush_policy policy)312*5113495bSYour Name target_if_peer_txq_flush_config(struct cdp_ctrl_objmgr_psoc *psoc,
313*5113495bSYour Name 				uint8_t vdev_id, uint8_t *mac,
314*5113495bSYour Name 				uint8_t ac, uint32_t tid,
315*5113495bSYour Name 				enum cdp_peer_txq_flush_policy policy)
316*5113495bSYour Name {
317*5113495bSYour Name 	return 0;
318*5113495bSYour Name }
319*5113495bSYour Name #endif /* WLAN_FEATURE_PEER_TXQ_FLUSH_CONF */
320*5113495bSYour Name #endif /* _WLAN_TARGET_IF_DP_H_ */
321