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