1 /*
2  * Copyright (c) 2021, The Linux Foundation. All rights reserved.
3  * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17 
18 /**
19  *  DOC: wlan_mgmt_txrx_rx_reo_tgt_api.h
20  *  This file contains mgmt rx re-ordering tgt layer related APIs
21  */
22 
23 #ifndef _WLAN_MGMT_TXRX_RX_REO_TGT_API_H
24 #define _WLAN_MGMT_TXRX_RX_REO_TGT_API_H
25 #include <wlan_objmgr_pdev_obj.h>
26 #include <qdf_types.h>
27 #include <wlan_mgmt_txrx_rx_reo_public_structs.h>
28 #include <wlan_mgmt_txrx_rx_reo_utils_api.h>
29 #include <wlan_mgmt_txrx_tgt_api.h>
30 #include <wlan_lmac_if_def.h>
31 
32 #ifdef WLAN_MGMT_RX_REO_SUPPORT
33 /**
34  * wlan_pdev_get_mgmt_rx_reo_txops() - Get management rx-reorder txops from pdev
35  * @pdev: Pointer to pdev object
36  *
37  * Return: Pointer to management rx-reorder txops in case of success, else NULL
38  */
39 static inline struct wlan_lmac_if_mgmt_rx_reo_tx_ops *
40 wlan_pdev_get_mgmt_rx_reo_txops(struct wlan_objmgr_pdev *pdev)
41 {
42 	struct wlan_lmac_if_mgmt_txrx_tx_ops *mgmt_txrx_tx_ops;
43 
44 	mgmt_txrx_tx_ops = wlan_pdev_get_mgmt_txrx_txops(pdev);
45 	if (!mgmt_txrx_tx_ops) {
46 		mgmt_txrx_err("txops is null for mgmt txrx module");
47 		return NULL;
48 	}
49 
50 	return &mgmt_txrx_tx_ops->mgmt_rx_reo_tx_ops;
51 }
52 
53 /**
54  * wlan_psoc_get_mgmt_rx_reo_txops() - Get management rx-reorder txops from psoc
55  * @psoc: Pointer to psoc object
56  *
57  * Return: Pointer to management rx-reorder txops in case of success, else NULL
58  */
59 static inline struct wlan_lmac_if_mgmt_rx_reo_tx_ops *
60 wlan_psoc_get_mgmt_rx_reo_txops(struct wlan_objmgr_psoc *psoc)
61 {
62 	struct wlan_lmac_if_mgmt_txrx_tx_ops *mgmt_txrx_tx_ops;
63 
64 	mgmt_txrx_tx_ops = wlan_psoc_get_mgmt_txrx_txops(psoc);
65 	if (!mgmt_txrx_tx_ops) {
66 		mgmt_txrx_err("txops is null for mgmt txrx module");
67 		return NULL;
68 	}
69 
70 	return &mgmt_txrx_tx_ops->mgmt_rx_reo_tx_ops;
71 }
72 
73 /**
74  * tgt_mgmt_rx_reo_get_num_active_hw_links() - Get number of active MLO HW
75  * links
76  * @psoc: Pointer to psoc object
77  * @num_active_hw_links: pointer to number of active MLO HW links
78  *
79  * Get number of active MLO HW links from the MLO global shared memory arena.
80  *
81  * Return: QDF_STATUS
82  */
83 QDF_STATUS
84 tgt_mgmt_rx_reo_get_num_active_hw_links(struct wlan_objmgr_psoc *psoc,
85 					int8_t *num_active_hw_links);
86 
87 /**
88  * tgt_mgmt_rx_reo_get_valid_hw_link_bitmap() - Get valid MLO HW link bitmap
89  * @psoc: Pointer to psoc object
90  * @valid_hw_link_bitmap: Pointer to valid MLO HW link bitmap
91  *
92  * Get valid MLO HW link bitmap from the MLO global shared memory arena.
93  *
94  * Return: QDF_STATUS
95  */
96 QDF_STATUS
97 tgt_mgmt_rx_reo_get_valid_hw_link_bitmap(struct wlan_objmgr_psoc *psoc,
98 					 uint16_t *valid_hw_link_bitmap);
99 
100 /**
101  * tgt_mgmt_rx_reo_read_snapshot() - Read management rx-reorder snapshot
102  * @pdev: Pointer to pdev object
103  * @snapshot_info: Snapshot info
104  * @id: Snapshot ID
105  * @value: Pointer to the snapshot value where the snapshot
106  * should be written
107  *
108  * Read management rx-reorder snapshots from target.
109  *
110  * Return: QDF_STATUS
111  */
112 QDF_STATUS
113 tgt_mgmt_rx_reo_read_snapshot(
114 			struct wlan_objmgr_pdev *pdev,
115 			struct mgmt_rx_reo_snapshot_info *snapshot_info,
116 			enum mgmt_rx_reo_shared_snapshot_id id,
117 			struct mgmt_rx_reo_snapshot_params *value,
118 			struct mgmt_rx_reo_shared_snapshot (*raw_snapshot)
119 			[MGMT_RX_REO_SNAPSHOT_B2B_READ_SWAR_RETRY_LIMIT]);
120 
121 /**
122  * tgt_mgmt_rx_reo_fw_consumed_event_handler() - MGMT Rx REO FW consumed
123  * event handler
124  * @pdev: pdev for which this event is intended
125  * @params: Pointer to MGMT Rx REO parameters
126  *
127  * Return: QDF_STATUS of operation
128  */
129 QDF_STATUS
130 tgt_mgmt_rx_reo_fw_consumed_event_handler(struct wlan_objmgr_pdev *pdev,
131 					  struct mgmt_rx_reo_params *params);
132 
133 /**
134  * tgt_mgmt_rx_reo_filter_config() - Configure MGMT Rx REO filter
135  * @pdev: Pointer to pdev object
136  * @filter: Pointer to MGMT Rx REO filter
137  *
138  * Return: QDF_STATUS_SUCCESS for success or error code
139  */
140 QDF_STATUS tgt_mgmt_rx_reo_filter_config(struct wlan_objmgr_pdev *pdev,
141 					 struct mgmt_rx_reo_filter *filter);
142 
143 /**
144  * tgt_mgmt_rx_reo_get_snapshot_info() - Get information regarding management
145  * rx-reorder snapshot
146  * @pdev: Pointer to pdev object
147  * @id: Snapshot ID
148  * @snapshot_info: Pointer to snapshot info
149  *
150  * Return: QDF_STATUS
151  */
152 QDF_STATUS
153 tgt_mgmt_rx_reo_get_snapshot_info
154 			(struct wlan_objmgr_pdev *pdev,
155 			 enum mgmt_rx_reo_shared_snapshot_id id,
156 			 struct mgmt_rx_reo_snapshot_info *snapshot_info);
157 
158 /**
159  * tgt_mgmt_rx_reo_frame_handler() - REO handler for management Rx frames.
160  * @pdev: pdev for which this management frame is intended
161  * @buf: buffer
162  * @mgmt_rx_params: rx event params
163  *
164  * Return: QDF_STATUS of operation.
165  */
166 QDF_STATUS tgt_mgmt_rx_reo_frame_handler(
167 			struct wlan_objmgr_pdev *pdev,
168 			qdf_nbuf_t buf,
169 			struct mgmt_rx_event_params *mgmt_rx_params);
170 
171 /**
172  * tgt_mgmt_rx_reo_host_drop_handler() - MGMT Rx REO handler for the
173  * management Rx frames that gets dropped in the Host before entering
174  * MGMT Rx REO algorithm
175  * @pdev: pdev for which this frame was intended
176  * @params: MGMT Rx event parameters
177  *
178  * Return: QDF_STATUS of operation
179  */
180 QDF_STATUS
181 tgt_mgmt_rx_reo_host_drop_handler(struct wlan_objmgr_pdev *pdev,
182 				  struct mgmt_rx_reo_params *params);
183 #else
184 /**
185  * tgt_mgmt_rx_reo_frame_handler() - REO handler for management Rx frames.
186  * @pdev: pdev for which this management frame is intended
187  * @buf: buffer
188  * @mgmt_rx_params: rx event params
189  *
190  * Return: QDF_STATUS of operation.
191  */
192 static inline QDF_STATUS tgt_mgmt_rx_reo_frame_handler(
193 			struct wlan_objmgr_pdev *pdev,
194 			qdf_nbuf_t buf,
195 			struct mgmt_rx_event_params *mgmt_rx_params)
196 {
197 	/**
198 	 * If MGMT Rx REO feature is not compiled,
199 	 * process the frame right away.
200 	 */
201 	return tgt_mgmt_txrx_process_rx_frame(pdev, buf, mgmt_rx_params);
202 }
203 #endif /* WLAN_MGMT_RX_REO_SUPPORT */
204 #endif /* _WLAN_MGMT_TXRX_RX_REO_TGT_API_H */
205