xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/nxp/mlinux/moal_uap.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /** @file moal_uap.h
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * @brief This file contains uap driver specific defines etc.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * Copyright 2008-2022 NXP
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  * This software file (the File) is distributed by NXP
9*4882a593Smuzhiyun  * under the terms of the GNU General Public License Version 2, June 1991
10*4882a593Smuzhiyun  * (the License).  You may use, redistribute and/or modify the File in
11*4882a593Smuzhiyun  * accordance with the terms and conditions of the License, a copy of which
12*4882a593Smuzhiyun  * is available by writing to the Free Software Foundation, Inc.,
13*4882a593Smuzhiyun  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the
14*4882a593Smuzhiyun  * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
15*4882a593Smuzhiyun  *
16*4882a593Smuzhiyun  * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
17*4882a593Smuzhiyun  * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
18*4882a593Smuzhiyun  * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
19*4882a593Smuzhiyun  * this warranty disclaimer.
20*4882a593Smuzhiyun  *
21*4882a593Smuzhiyun  */
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun /********************************************************
24*4882a593Smuzhiyun Change log:
25*4882a593Smuzhiyun     02/02/2009: initial version
26*4882a593Smuzhiyun ********************************************************/
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun #ifndef _MOAL_UAP_H
29*4882a593Smuzhiyun #define _MOAL_UAP_H
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun /** Maximum buffer length for WOAL_UAP_SET_GET_256_CHAR */
32*4882a593Smuzhiyun #define MAX_BUF_LEN 256
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun /** Private command ID to send ioctl */
35*4882a593Smuzhiyun #define UAP_IOCTL_CMD (SIOCDEVPRIVATE + 2)
36*4882a593Smuzhiyun /** Updating ADDBA variables */
37*4882a593Smuzhiyun #define UAP_ADDBA_PARA 0
38*4882a593Smuzhiyun /** Updating priority table for AMPDU/AMSDU */
39*4882a593Smuzhiyun #define UAP_AGGR_PRIOTBL 1
40*4882a593Smuzhiyun /** Updating addbareject table */
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun #define UAP_ADDBA_REJECT 2
43*4882a593Smuzhiyun /** Get FW INFO */
44*4882a593Smuzhiyun #define UAP_FW_INFO 4
45*4882a593Smuzhiyun /** Updating Deep sleep variables */
46*4882a593Smuzhiyun #define UAP_DEEP_SLEEP 3
47*4882a593Smuzhiyun /** Tx data pause subcommand */
48*4882a593Smuzhiyun #define UAP_TX_DATA_PAUSE 5
49*4882a593Smuzhiyun #ifdef SDIO
50*4882a593Smuzhiyun /** sdcmd52 read write subcommand */
51*4882a593Smuzhiyun #define UAP_SDCMD52_RW 6
52*4882a593Smuzhiyun #endif
53*4882a593Smuzhiyun /** snmp mib subcommand */
54*4882a593Smuzhiyun #define UAP_SNMP_MIB 7
55*4882a593Smuzhiyun /** domain info subcommand */
56*4882a593Smuzhiyun #define UAP_DOMAIN_INFO 8
57*4882a593Smuzhiyun /** TX beamforming configuration */
58*4882a593Smuzhiyun #define UAP_TX_BF_CFG 9
59*4882a593Smuzhiyun /** dfs testing subcommand */
60*4882a593Smuzhiyun #define UAP_DFS_TESTING 10
61*4882a593Smuzhiyun /** sub command ID to set/get Host Sleep configuration */
62*4882a593Smuzhiyun #define UAP_HS_CFG 11
63*4882a593Smuzhiyun /** sub command ID to set/get Host Sleep Parameters */
64*4882a593Smuzhiyun #define UAP_HS_SET_PARA 12
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun /** Management Frame Control Mask */
67*4882a593Smuzhiyun #define UAP_MGMT_FRAME_CONTROL 13
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun #define UAP_TX_RATE_CFG 14
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun /** Subcommand ID to set/get antenna configuration */
72*4882a593Smuzhiyun #define UAP_ANTENNA_CFG 15
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun #define UAP_DFS_REPEATER_MODE 16
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun #define UAP_CAC_TIMER_STATUS 17
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun /** Skip CAC */
79*4882a593Smuzhiyun #define UAP_SKIP_CAC 18
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun #define UAP_HT_TX_CFG 19
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun #define UAP_VHT_CFG 20
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun #define UAP_HT_STREAM_CFG 21
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun #define UAP_OPERATION_CTRL 22
88*4882a593Smuzhiyun 
89*4882a593Smuzhiyun #define UAP_CHAN_SWITCH_COUNT_CFG 23
90*4882a593Smuzhiyun #define UAP_BAND_STEER 24
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun #define UAP_BEACON_STUCK_DETECT 25
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun /** Private command ID to Power Mode */
95*4882a593Smuzhiyun #define UAP_POWER_MODE (SIOCDEVPRIVATE + 3)
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun /** Private command id to start/stop/reset bss */
98*4882a593Smuzhiyun #define UAP_BSS_CTRL (SIOCDEVPRIVATE + 4)
99*4882a593Smuzhiyun /** BSS START */
100*4882a593Smuzhiyun #define UAP_BSS_START 0
101*4882a593Smuzhiyun /** BSS STOP */
102*4882a593Smuzhiyun #define UAP_BSS_STOP 1
103*4882a593Smuzhiyun /** BSS RESET */
104*4882a593Smuzhiyun #define UAP_BSS_RESET 2
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun /** wapi_msg */
107*4882a593Smuzhiyun typedef struct _wapi_msg {
108*4882a593Smuzhiyun 	/** message type */
109*4882a593Smuzhiyun 	t_u16 msg_type;
110*4882a593Smuzhiyun 	/** message len */
111*4882a593Smuzhiyun 	t_u16 msg_len;
112*4882a593Smuzhiyun 	/** message */
113*4882a593Smuzhiyun 	t_u8 msg[96];
114*4882a593Smuzhiyun } wapi_msg;
115*4882a593Smuzhiyun 
116*4882a593Smuzhiyun /* wapi key msg */
117*4882a593Smuzhiyun typedef struct _wapi_key_msg {
118*4882a593Smuzhiyun 	/** mac address */
119*4882a593Smuzhiyun 	t_u8 mac_addr[MLAN_MAC_ADDR_LENGTH];
120*4882a593Smuzhiyun 	/** pad */
121*4882a593Smuzhiyun 	t_u8 pad;
122*4882a593Smuzhiyun 	/** key id */
123*4882a593Smuzhiyun 	t_u8 key_id;
124*4882a593Smuzhiyun 	/** key */
125*4882a593Smuzhiyun 	t_u8 key[32];
126*4882a593Smuzhiyun } wapi_key_msg;
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun /** Private command ID to set wapi info */
129*4882a593Smuzhiyun #define UAP_WAPI_MSG (SIOCDEVPRIVATE + 10)
130*4882a593Smuzhiyun /** set wapi flag */
131*4882a593Smuzhiyun #define P80211_PACKET_WAPIFLAG 0x0001
132*4882a593Smuzhiyun /** set wapi key */
133*4882a593Smuzhiyun #define P80211_PACKET_SETKEY 0x0003
134*4882a593Smuzhiyun /** wapi mode psk */
135*4882a593Smuzhiyun #define WAPI_MODE_PSK 0x04
136*4882a593Smuzhiyun /** wapi mode certificate */
137*4882a593Smuzhiyun #define WAPI_MODE_CERT 0x08
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun typedef struct _tx_rate_cfg_t {
140*4882a593Smuzhiyun 	/** sub command */
141*4882a593Smuzhiyun 	int subcmd;
142*4882a593Smuzhiyun 	/** Action */
143*4882a593Smuzhiyun 	int action;
144*4882a593Smuzhiyun 	/** Rate format */
145*4882a593Smuzhiyun 	int rate_format;
146*4882a593Smuzhiyun 	/** Rate configured */
147*4882a593Smuzhiyun 	int rate;
148*4882a593Smuzhiyun 	/** nss */
149*4882a593Smuzhiyun 	int nss;
150*4882a593Smuzhiyun 	/** user_data_cnt */
151*4882a593Smuzhiyun 	int user_data_cnt;
152*4882a593Smuzhiyun 	/** Rate bitmap */
153*4882a593Smuzhiyun 	t_u16 bitmap_rates[MAX_BITMAP_RATES_SIZE];
154*4882a593Smuzhiyun 	/** Rate Setting */
155*4882a593Smuzhiyun 	t_u16 rate_setting;
156*4882a593Smuzhiyun } tx_rate_cfg_t;
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun /** ant_cfg structure */
159*4882a593Smuzhiyun typedef struct _ant_cfg_t {
160*4882a593Smuzhiyun 	/** Subcommand */
161*4882a593Smuzhiyun 	int subcmd;
162*4882a593Smuzhiyun 	/** Action */
163*4882a593Smuzhiyun 	int action;
164*4882a593Smuzhiyun 	/** TX mode configured */
165*4882a593Smuzhiyun 	int tx_mode;
166*4882a593Smuzhiyun 	/** RX mode configured */
167*4882a593Smuzhiyun 	int rx_mode;
168*4882a593Smuzhiyun } ant_cfg_t;
169*4882a593Smuzhiyun 
170*4882a593Smuzhiyun /** htstream_cfg structure */
171*4882a593Smuzhiyun typedef struct _htstream_cfg_t {
172*4882a593Smuzhiyun 	/** Subcommand */
173*4882a593Smuzhiyun 	int subcmd;
174*4882a593Smuzhiyun 	/** Action */
175*4882a593Smuzhiyun 	int action;
176*4882a593Smuzhiyun 	/** HT stream configuration */
177*4882a593Smuzhiyun 	t_u32 stream_cfg;
178*4882a593Smuzhiyun } htstream_cfg_t;
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun /* dfs repeater mode */
181*4882a593Smuzhiyun typedef struct _dfs_repeater_mode {
182*4882a593Smuzhiyun 	/** subcmd */
183*4882a593Smuzhiyun 	t_u32 subcmd;
184*4882a593Smuzhiyun 	/** set/get */
185*4882a593Smuzhiyun 	t_u32 action;
186*4882a593Smuzhiyun 	/** mode */
187*4882a593Smuzhiyun 	t_u32 mode;
188*4882a593Smuzhiyun } dfs_repeater_mode;
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun /* */
191*4882a593Smuzhiyun typedef struct _cac_timer_status {
192*4882a593Smuzhiyun 	/** subcmd */
193*4882a593Smuzhiyun 	t_u32 subcmd;
194*4882a593Smuzhiyun 	/** set/get */
195*4882a593Smuzhiyun 	t_u32 action;
196*4882a593Smuzhiyun 	/** mode */
197*4882a593Smuzhiyun 	t_u32 mode;
198*4882a593Smuzhiyun } cac_timer_status;
199*4882a593Smuzhiyun 
200*4882a593Smuzhiyun /** skip_cac parameters */
201*4882a593Smuzhiyun typedef struct _skip_cac_para {
202*4882a593Smuzhiyun 	/** subcmd */
203*4882a593Smuzhiyun 	t_u32 subcmd;
204*4882a593Smuzhiyun 	/** Set */
205*4882a593Smuzhiyun 	t_u32 action;
206*4882a593Smuzhiyun 	/** enable/disable skip cac*/
207*4882a593Smuzhiyun 	t_u16 skip_cac;
208*4882a593Smuzhiyun 	/** channel */
209*4882a593Smuzhiyun 	t_u8 channel;
210*4882a593Smuzhiyun 	/** bandwidth */
211*4882a593Smuzhiyun 	t_u8 bw;
212*4882a593Smuzhiyun } skip_cac_para;
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun /** radio control command */
215*4882a593Smuzhiyun #define UAP_RADIO_CTL (SIOCDEVPRIVATE + 5)
216*4882a593Smuzhiyun 
217*4882a593Smuzhiyun /** Private command ID to BSS config */
218*4882a593Smuzhiyun #define UAP_BSS_CONFIG (SIOCDEVPRIVATE + 6)
219*4882a593Smuzhiyun 
220*4882a593Smuzhiyun /** deauth station */
221*4882a593Smuzhiyun #define UAP_STA_DEAUTH (SIOCDEVPRIVATE + 7)
222*4882a593Smuzhiyun 
223*4882a593Smuzhiyun /** enable UAP report mic error */
224*4882a593Smuzhiyun #define UAP_REPORT_MIC_ERR (SIOCDEVPRIVATE + 8)
225*4882a593Smuzhiyun /** uap set key */
226*4882a593Smuzhiyun #define UAP_SET_KEY (SIOCDEVPRIVATE + 9)
227*4882a593Smuzhiyun /** encrypt key */
228*4882a593Smuzhiyun typedef struct _encrypt_key {
229*4882a593Smuzhiyun 	/** Key index */
230*4882a593Smuzhiyun 	t_u32 key_index;
231*4882a593Smuzhiyun 	/** Key length */
232*4882a593Smuzhiyun 	t_u32 key_len;
233*4882a593Smuzhiyun 	/** Key */
234*4882a593Smuzhiyun 	t_u8 key_material[MLAN_MAX_KEY_LENGTH];
235*4882a593Smuzhiyun 	/** mac address */
236*4882a593Smuzhiyun 	t_u8 mac_addr[MLAN_MAC_ADDR_LENGTH];
237*4882a593Smuzhiyun } encrypt_key;
238*4882a593Smuzhiyun 
239*4882a593Smuzhiyun /** pkt_header */
240*4882a593Smuzhiyun typedef struct _pkt_header {
241*4882a593Smuzhiyun 	/** pkt_len */
242*4882a593Smuzhiyun 	u32 pkt_len;
243*4882a593Smuzhiyun 	/** pkt_type */
244*4882a593Smuzhiyun 	u32 TxPktType;
245*4882a593Smuzhiyun 	/** tx control */
246*4882a593Smuzhiyun 	u32 TxControl;
247*4882a593Smuzhiyun } pkt_header;
248*4882a593Smuzhiyun /** uap get station list */
249*4882a593Smuzhiyun #define UAP_GET_STA_LIST (SIOCDEVPRIVATE + 11)
250*4882a593Smuzhiyun /** Packet inject command ioctl number */
251*4882a593Smuzhiyun #define UAPHOSTPKTINJECT WOAL_MGMT_FRAME_TX_IOCTL
252*4882a593Smuzhiyun 
253*4882a593Smuzhiyun /** Private command ID to set/get custom IE buffer */
254*4882a593Smuzhiyun #define UAP_CUSTOM_IE (SIOCDEVPRIVATE + 13)
255*4882a593Smuzhiyun 
256*4882a593Smuzhiyun /** HS WAKE UP event id */
257*4882a593Smuzhiyun #define UAP_EVENT_ID_HS_WAKEUP 0x80000001
258*4882a593Smuzhiyun /** HS_ACTIVATED event id */
259*4882a593Smuzhiyun #define UAP_EVENT_ID_DRV_HS_ACTIVATED 0x80000002
260*4882a593Smuzhiyun /** HS DEACTIVATED event id */
261*4882a593Smuzhiyun #define UAP_EVENT_ID_DRV_HS_DEACTIVATED 0x80000003
262*4882a593Smuzhiyun 
263*4882a593Smuzhiyun /** Host sleep flag set */
264*4882a593Smuzhiyun #define HS_CFG_FLAG_GET 0
265*4882a593Smuzhiyun /** Host sleep flag get */
266*4882a593Smuzhiyun #define HS_CFG_FLAG_SET 1
267*4882a593Smuzhiyun /** Host sleep flag for condition */
268*4882a593Smuzhiyun #define HS_CFG_FLAG_CONDITION 2
269*4882a593Smuzhiyun /** Host sleep flag for GPIO */
270*4882a593Smuzhiyun #define HS_CFG_FLAG_GPIO 4
271*4882a593Smuzhiyun /** Host sleep flag for Gap */
272*4882a593Smuzhiyun #define HS_CFG_FLAG_GAP 8
273*4882a593Smuzhiyun /** Host sleep flag for all */
274*4882a593Smuzhiyun #define HS_CFG_FLAG_ALL 0x0f
275*4882a593Smuzhiyun /** Host sleep mask to get condition */
276*4882a593Smuzhiyun #define HS_CFG_CONDITION_MASK 0x0f
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun /** ds_hs_cfg */
279*4882a593Smuzhiyun typedef struct _ds_hs_cfg {
280*4882a593Smuzhiyun 	/** subcmd */
281*4882a593Smuzhiyun 	t_u32 subcmd;
282*4882a593Smuzhiyun 	/** Bit0: 0 - Get, 1 Set
283*4882a593Smuzhiyun 	 *  Bit1: 1 - conditions is valid
284*4882a593Smuzhiyun 	 *  Bit2: 2 - gpio is valid
285*4882a593Smuzhiyun 	 *  Bit3: 3 - gap is valid
286*4882a593Smuzhiyun 	 */
287*4882a593Smuzhiyun 	t_u32 flags;
288*4882a593Smuzhiyun 	/** Host sleep config condition */
289*4882a593Smuzhiyun 	/** Bit0: non-unicast data
290*4882a593Smuzhiyun 	 *  Bit1: unicast data
291*4882a593Smuzhiyun 	 *  Bit2: mac events
292*4882a593Smuzhiyun 	 *  Bit3: magic packet
293*4882a593Smuzhiyun 	 */
294*4882a593Smuzhiyun 	t_u32 conditions;
295*4882a593Smuzhiyun 	/** GPIO */
296*4882a593Smuzhiyun 	t_u32 gpio;
297*4882a593Smuzhiyun 	/** Gap in milliseconds */
298*4882a593Smuzhiyun 	t_u32 gap;
299*4882a593Smuzhiyun } ds_hs_cfg;
300*4882a593Smuzhiyun 
301*4882a593Smuzhiyun /** Private command ID to get BSS type */
302*4882a593Smuzhiyun #define UAP_GET_BSS_TYPE (SIOCDEVPRIVATE + 15)
303*4882a593Smuzhiyun 
304*4882a593Smuzhiyun /** addba_param */
305*4882a593Smuzhiyun typedef struct _uap_addba_param {
306*4882a593Smuzhiyun 	/** subcmd */
307*4882a593Smuzhiyun 	t_u32 subcmd;
308*4882a593Smuzhiyun 	/** Set/Get */
309*4882a593Smuzhiyun 	t_u32 action;
310*4882a593Smuzhiyun 	/** block ack timeout for ADDBA request */
311*4882a593Smuzhiyun 	t_u32 timeout;
312*4882a593Smuzhiyun 	/** Buffer size for ADDBA request */
313*4882a593Smuzhiyun 	t_u32 txwinsize;
314*4882a593Smuzhiyun 	/** Buffer size for ADDBA response */
315*4882a593Smuzhiyun 	t_u32 rxwinsize;
316*4882a593Smuzhiyun 	/** amsdu for ADDBA request */
317*4882a593Smuzhiyun 	t_u8 txamsdu;
318*4882a593Smuzhiyun 	/** amsdu for ADDBA response */
319*4882a593Smuzhiyun 	t_u8 rxamsdu;
320*4882a593Smuzhiyun } uap_addba_param;
321*4882a593Smuzhiyun 
322*4882a593Smuzhiyun /** aggr_prio_tbl */
323*4882a593Smuzhiyun typedef struct _uap_aggr_prio_tbl {
324*4882a593Smuzhiyun 	/** subcmd */
325*4882a593Smuzhiyun 	t_u32 subcmd;
326*4882a593Smuzhiyun 	/** Set/Get */
327*4882a593Smuzhiyun 	t_u32 action;
328*4882a593Smuzhiyun 	/** ampdu priority table */
329*4882a593Smuzhiyun 	t_u8 ampdu[MAX_NUM_TID];
330*4882a593Smuzhiyun 	/** amsdu priority table */
331*4882a593Smuzhiyun 	t_u8 amsdu[MAX_NUM_TID];
332*4882a593Smuzhiyun } uap_aggr_prio_tbl;
333*4882a593Smuzhiyun 
334*4882a593Smuzhiyun /** addba_reject parameters */
335*4882a593Smuzhiyun typedef struct _addba_reject_para {
336*4882a593Smuzhiyun 	/** subcmd */
337*4882a593Smuzhiyun 	t_u32 subcmd;
338*4882a593Smuzhiyun 	/** Set/Get */
339*4882a593Smuzhiyun 	t_u32 action;
340*4882a593Smuzhiyun 	/** BA Reject paramters */
341*4882a593Smuzhiyun 	t_u8 addba_reject[MAX_NUM_TID];
342*4882a593Smuzhiyun } addba_reject_para;
343*4882a593Smuzhiyun 
344*4882a593Smuzhiyun /** fw_info */
345*4882a593Smuzhiyun typedef struct _uap_fw_info {
346*4882a593Smuzhiyun 	/** subcmd */
347*4882a593Smuzhiyun 	t_u32 subcmd;
348*4882a593Smuzhiyun 	/** Get */
349*4882a593Smuzhiyun 	t_u32 action;
350*4882a593Smuzhiyun 	/** Firmware release number */
351*4882a593Smuzhiyun 	t_u32 fw_release_number;
352*4882a593Smuzhiyun 	/** Device support for MIMO abstraction of MCSs */
353*4882a593Smuzhiyun 	t_u8 hw_dev_mcs_support;
354*4882a593Smuzhiyun 	/** fw_bands*/
355*4882a593Smuzhiyun 	t_u8 fw_bands;
356*4882a593Smuzhiyun 	/** Region Code */
357*4882a593Smuzhiyun 	t_u16 region_code;
358*4882a593Smuzhiyun 	/** 802.11n device capabilities */
359*4882a593Smuzhiyun 	t_u32 hw_dot_11n_dev_cap;
360*4882a593Smuzhiyun } uap_fw_info;
361*4882a593Smuzhiyun 
362*4882a593Smuzhiyun typedef struct _ht_tx_cfg_para_hdr {
363*4882a593Smuzhiyun 	/** Sub command */
364*4882a593Smuzhiyun 	t_u32 subcmd;
365*4882a593Smuzhiyun 	/** Action: Set/Get */
366*4882a593Smuzhiyun 	t_u32 action;
367*4882a593Smuzhiyun } ht_tx_cfg_para_hdr;
368*4882a593Smuzhiyun 
369*4882a593Smuzhiyun typedef struct _tx_bf_cfg_para_hdr {
370*4882a593Smuzhiyun 	/** Sub command */
371*4882a593Smuzhiyun 	t_u32 subcmd;
372*4882a593Smuzhiyun 	/** Action: Set/Get */
373*4882a593Smuzhiyun 	t_u32 action;
374*4882a593Smuzhiyun } tx_bf_cfg_para_hdr;
375*4882a593Smuzhiyun 
376*4882a593Smuzhiyun typedef struct _vht_cfg_para_hdr {
377*4882a593Smuzhiyun 	/** Sub command */
378*4882a593Smuzhiyun 	t_u32 subcmd;
379*4882a593Smuzhiyun 	/** Action: Set/Get */
380*4882a593Smuzhiyun 	t_u32 action;
381*4882a593Smuzhiyun } vht_cfg_para_hdr;
382*4882a593Smuzhiyun 
383*4882a593Smuzhiyun typedef struct _uap_oper_para_hdr {
384*4882a593Smuzhiyun 	/** Sub command */
385*4882a593Smuzhiyun 	t_u32 subcmd;
386*4882a593Smuzhiyun 	/** Action: Set/Get */
387*4882a593Smuzhiyun 	t_u32 action;
388*4882a593Smuzhiyun } uap_oper_para_hdr;
389*4882a593Smuzhiyun 
390*4882a593Smuzhiyun #ifdef SDIO
391*4882a593Smuzhiyun /** sdcmd52rw parameters */
392*4882a593Smuzhiyun typedef struct _sdcmd52_para {
393*4882a593Smuzhiyun 	/** subcmd */
394*4882a593Smuzhiyun 	t_u32 subcmd;
395*4882a593Smuzhiyun 	/** Write /Read */
396*4882a593Smuzhiyun 	t_u32 action;
397*4882a593Smuzhiyun 	/** Command 52 paramters */
398*4882a593Smuzhiyun 	t_u8 cmd52_params[3];
399*4882a593Smuzhiyun } sdcmd52_para;
400*4882a593Smuzhiyun #endif
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun /** deep_sleep parameters */
403*4882a593Smuzhiyun typedef struct _deep_sleep_para {
404*4882a593Smuzhiyun 	/** subcmd */
405*4882a593Smuzhiyun 	t_u32 subcmd;
406*4882a593Smuzhiyun 	/** Set/Get */
407*4882a593Smuzhiyun 	t_u32 action;
408*4882a593Smuzhiyun 	/** enable/disable deepsleep*/
409*4882a593Smuzhiyun 	t_u16 deep_sleep;
410*4882a593Smuzhiyun 	/** idle_time */
411*4882a593Smuzhiyun 	t_u16 idle_time;
412*4882a593Smuzhiyun } deep_sleep_para;
413*4882a593Smuzhiyun 
414*4882a593Smuzhiyun /** band_steering parameters */
415*4882a593Smuzhiyun typedef struct _band_steer_para {
416*4882a593Smuzhiyun 	/** subcmd */
417*4882a593Smuzhiyun 	t_u32 subcmd;
418*4882a593Smuzhiyun 	/** Set/Get */
419*4882a593Smuzhiyun 	t_u8 action;
420*4882a593Smuzhiyun 	/** enable/disable band steering*/
421*4882a593Smuzhiyun 	t_u8 state;
422*4882a593Smuzhiyun 	/** Probe Response will be blocked to 2G channel for first
423*4882a593Smuzhiyun 	 * block_2g_prb_req probe requests*/
424*4882a593Smuzhiyun 	t_u8 block_2g_prb_req;
425*4882a593Smuzhiyun 	/** When band steering is enabled, limit the btm request sent to STA at
426*4882a593Smuzhiyun 	 * <max_btm_req_allowed>*/
427*4882a593Smuzhiyun 	t_u8 max_btm_req_allowed;
428*4882a593Smuzhiyun 
429*4882a593Smuzhiyun } band_steer_para;
430*4882a593Smuzhiyun 
431*4882a593Smuzhiyun /** beacon stuck detect mechanism parameters */
432*4882a593Smuzhiyun typedef struct _beacon_stuck_detect_para {
433*4882a593Smuzhiyun 	/** subcmd */
434*4882a593Smuzhiyun 	t_u32 subcmd;
435*4882a593Smuzhiyun 	/** Set/Get */
436*4882a593Smuzhiyun 	t_u8 action;
437*4882a593Smuzhiyun 	/** No of beacon interval after which firmware will check if beacon Tx
438*4882a593Smuzhiyun 	 * is going fine */
439*4882a593Smuzhiyun 	t_u8 beacon_stuck_detect_count;
440*4882a593Smuzhiyun 	/** Upon performing MAC reset, no of beacon interval after which
441*4882a593Smuzhiyun 	 * firmware will check if recovery was successful */
442*4882a593Smuzhiyun 	t_u8 recovery_confirm_count;
443*4882a593Smuzhiyun } beacon_stuck_detect_para;
444*4882a593Smuzhiyun 
445*4882a593Smuzhiyun /** tx_data_pause parameters */
446*4882a593Smuzhiyun typedef struct _tx_data_pause_para {
447*4882a593Smuzhiyun 	/** subcmd */
448*4882a593Smuzhiyun 	t_u32 subcmd;
449*4882a593Smuzhiyun 	/** Set/Get */
450*4882a593Smuzhiyun 	t_u32 action;
451*4882a593Smuzhiyun 	/** enable/disable Tx data pause*/
452*4882a593Smuzhiyun 	t_u16 txpause;
453*4882a593Smuzhiyun 	/** Max number of TX buffer allowed for all PS client*/
454*4882a593Smuzhiyun 	t_u16 txbufcnt;
455*4882a593Smuzhiyun } tx_data_pause_para;
456*4882a593Smuzhiyun 
457*4882a593Smuzhiyun /** mgmt_frame_ctrl */
458*4882a593Smuzhiyun typedef struct _mgmt_frame_ctrl {
459*4882a593Smuzhiyun 	/** subcmd */
460*4882a593Smuzhiyun 	t_u32 subcmd;
461*4882a593Smuzhiyun 	/** Set/Get */
462*4882a593Smuzhiyun 	t_u32 action;
463*4882a593Smuzhiyun 	/** mask */
464*4882a593Smuzhiyun 	t_u32 mask;
465*4882a593Smuzhiyun } mgmt_frame_ctrl;
466*4882a593Smuzhiyun 
467*4882a593Smuzhiyun typedef struct _snmp_mib_para {
468*4882a593Smuzhiyun 	/** subcmd */
469*4882a593Smuzhiyun 	t_u32 subcmd;
470*4882a593Smuzhiyun 	/** Set/Get */
471*4882a593Smuzhiyun 	t_u32 action;
472*4882a593Smuzhiyun 	/** oid to set/get */
473*4882a593Smuzhiyun 	t_u16 oid;
474*4882a593Smuzhiyun 	/** length of oid value */
475*4882a593Smuzhiyun 	t_u16 oid_val_len;
476*4882a593Smuzhiyun 	/** oid value to set/get */
477*4882a593Smuzhiyun 	t_u8 oid_value[];
478*4882a593Smuzhiyun } snmp_mib_para;
479*4882a593Smuzhiyun 
480*4882a593Smuzhiyun /** Max length for oid_value field */
481*4882a593Smuzhiyun #define MAX_SNMP_VALUE_SIZE 128
482*4882a593Smuzhiyun 
483*4882a593Smuzhiyun /** Oid for 802.11D enable/disable */
484*4882a593Smuzhiyun #define OID_80211D_ENABLE 0x0009
485*4882a593Smuzhiyun /** Oid for 802.11H enable/disable */
486*4882a593Smuzhiyun #define OID_80211H_ENABLE 0x000a
487*4882a593Smuzhiyun 
488*4882a593Smuzhiyun int woal_uap_11h_ctrl(moal_private *priv, t_u32 enable);
489*4882a593Smuzhiyun 
490*4882a593Smuzhiyun /** dfs_testing parameters */
491*4882a593Smuzhiyun typedef struct _dfs_testing_param {
492*4882a593Smuzhiyun 	/** subcmd */
493*4882a593Smuzhiyun 	t_u32 subcmd;
494*4882a593Smuzhiyun 	/** Set/Get */
495*4882a593Smuzhiyun 	t_u32 action;
496*4882a593Smuzhiyun 	/** user CAC period (msec) */
497*4882a593Smuzhiyun 	t_u32 usr_cac_period;
498*4882a593Smuzhiyun 	/** user NOP period (sec) */
499*4882a593Smuzhiyun 	t_u16 usr_nop_period;
500*4882a593Smuzhiyun 	/** don't change channel on radar */
501*4882a593Smuzhiyun 	t_u8 no_chan_change;
502*4882a593Smuzhiyun 	/** fixed channel to change to on radar */
503*4882a593Smuzhiyun 	t_u8 fixed_new_chan;
504*4882a593Smuzhiyun 	/** CAC restart */
505*4882a593Smuzhiyun 	t_u8 cac_restart;
506*4882a593Smuzhiyun } dfs_testing_para;
507*4882a593Smuzhiyun 
508*4882a593Smuzhiyun /** Channel switch count config */
509*4882a593Smuzhiyun typedef struct _cscount_cfg_t {
510*4882a593Smuzhiyun 	/** subcmd */
511*4882a593Smuzhiyun 	t_u32 subcmd;
512*4882a593Smuzhiyun 	/** Set/Get */
513*4882a593Smuzhiyun 	t_u32 action;
514*4882a593Smuzhiyun 	/** user channel switch count */
515*4882a593Smuzhiyun 	t_u8 cs_count;
516*4882a593Smuzhiyun } cscount_cfg_t;
517*4882a593Smuzhiyun 
518*4882a593Smuzhiyun /** domain_info parameters */
519*4882a593Smuzhiyun typedef struct _domain_info_param {
520*4882a593Smuzhiyun 	/** subcmd */
521*4882a593Smuzhiyun 	t_u32 subcmd;
522*4882a593Smuzhiyun 	/** Set/Get */
523*4882a593Smuzhiyun 	t_u32 action;
524*4882a593Smuzhiyun 	/** domain_param TLV (incl. header) */
525*4882a593Smuzhiyun 	t_u8 tlv[];
526*4882a593Smuzhiyun } domain_info_para;
527*4882a593Smuzhiyun 
528*4882a593Smuzhiyun /** DOMAIN_INFO param sizes */
529*4882a593Smuzhiyun #define TLV_HEADER_LEN (2 + 2)
530*4882a593Smuzhiyun #define SUB_BAND_LEN 3
531*4882a593Smuzhiyun #define MAX_SUB_BANDS 40
532*4882a593Smuzhiyun 
533*4882a593Smuzhiyun /** MAX domain TLV length */
534*4882a593Smuzhiyun #define MAX_DOMAIN_TLV_LEN                                                     \
535*4882a593Smuzhiyun 	(TLV_HEADER_LEN + COUNTRY_CODE_LEN + (SUB_BAND_LEN * MAX_SUB_BANDS))
536*4882a593Smuzhiyun 
537*4882a593Smuzhiyun /** DOMAIN_INFO param size of dfs_region */
538*4882a593Smuzhiyun #define DFS_REGION_LEN 1
539*4882a593Smuzhiyun /** MAX reg domain TLV length*/
540*4882a593Smuzhiyun #define MAX_REG_DOMAIN_TLV_LEN (TLV_HEADER_LEN + DFS_REGION_LEN)
541*4882a593Smuzhiyun 
542*4882a593Smuzhiyun /** Get/Set channel DFS state */
543*4882a593Smuzhiyun int woal_11h_chan_dfs_state(moal_private *priv, t_u8 action,
544*4882a593Smuzhiyun 			    mlan_ds_11h_chan_dfs_state *ch_dfs_state);
545*4882a593Smuzhiyun #ifdef UAP_CFG80211
546*4882a593Smuzhiyun #if CFG80211_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)
547*4882a593Smuzhiyun void woal_update_channels_dfs_state(moal_private *priv, t_u8 channel,
548*4882a593Smuzhiyun 				    t_u8 bandwidth, t_u8 dfs_state);
549*4882a593Smuzhiyun #endif
550*4882a593Smuzhiyun #endif
551*4882a593Smuzhiyun 
552*4882a593Smuzhiyun mlan_status woal_set_get_uap_power_mode(moal_private *priv, t_u32 action,
553*4882a593Smuzhiyun 					mlan_ds_ps_mgmt *ps_mgmt);
554*4882a593Smuzhiyun void woal_uap_set_multicast_list(struct net_device *dev);
555*4882a593Smuzhiyun 
556*4882a593Smuzhiyun #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 15, 0)
557*4882a593Smuzhiyun int woal_uap_do_ioctl(struct net_device *dev, struct ifreq *req,
558*4882a593Smuzhiyun 		      void __user *data, int cmd);
559*4882a593Smuzhiyun #else
560*4882a593Smuzhiyun int woal_uap_do_ioctl(struct net_device *dev, struct ifreq *req, int cmd);
561*4882a593Smuzhiyun #endif
562*4882a593Smuzhiyun 
563*4882a593Smuzhiyun int woal_uap_bss_ctrl(moal_private *priv, t_u8 wait_option, int data);
564*4882a593Smuzhiyun 
565*4882a593Smuzhiyun int woal_uap_get_channel_nop_info(moal_private *priv, t_u8 wait_option,
566*4882a593Smuzhiyun 				  pmlan_ds_11h_chan_nop_info ch_info);
567*4882a593Smuzhiyun 
568*4882a593Smuzhiyun mlan_status woal_set_get_ap_channel(moal_private *priv, t_u16 action,
569*4882a593Smuzhiyun 				    t_u8 wait_option,
570*4882a593Smuzhiyun 				    chan_band_info *uap_channel);
571*4882a593Smuzhiyun #ifdef CONFIG_PROC_FS
572*4882a593Smuzhiyun void woal_uap_get_version(moal_private *priv, char *version, int max_len);
573*4882a593Smuzhiyun #endif
574*4882a593Smuzhiyun mlan_status woal_uap_get_stats(moal_private *priv, t_u8 wait_option,
575*4882a593Smuzhiyun 			       pmlan_ds_uap_stats ustats);
576*4882a593Smuzhiyun #if defined(UAP_WEXT) || defined(UAP_CFG80211)
577*4882a593Smuzhiyun extern struct iw_handler_def woal_uap_handler_def;
578*4882a593Smuzhiyun struct iw_statistics *woal_get_uap_wireless_stats(struct net_device *dev);
579*4882a593Smuzhiyun /** IOCTL function for wireless private IOCTLs */
580*4882a593Smuzhiyun int woal_uap_do_priv_ioctl(struct net_device *dev, struct ifreq *req, int cmd);
581*4882a593Smuzhiyun #endif
582*4882a593Smuzhiyun /** Set invalid data for each member of mlan_uap_bss_param */
583*4882a593Smuzhiyun void woal_set_sys_config_invalid_data(pmlan_uap_bss_param config);
584*4882a593Smuzhiyun /** Set/Get system configuration parameters */
585*4882a593Smuzhiyun mlan_status woal_set_get_sys_config(moal_private *priv, t_u16 action,
586*4882a593Smuzhiyun 				    t_u8 wait_option,
587*4882a593Smuzhiyun 				    mlan_uap_bss_param *sys_cfg);
588*4882a593Smuzhiyun /** Set get AP wmm parameter */
589*4882a593Smuzhiyun mlan_status woal_set_get_ap_wmm_para(moal_private *priv, t_u16 action,
590*4882a593Smuzhiyun 				     wmm_parameter_t *ap_wmm_para);
591*4882a593Smuzhiyun int woal_uap_set_ap_cfg(moal_private *priv, t_u8 *data, int len);
592*4882a593Smuzhiyun 
593*4882a593Smuzhiyun int woal_uap_set_11ac_status(moal_private *priv, t_u8 action, t_u8 vht20_40,
594*4882a593Smuzhiyun 			     IEEEtypes_VHTCap_t *vhtcap_ie);
595*4882a593Smuzhiyun int woal_11ax_cfg(moal_private *priv, t_u8 action, mlan_ds_11ax_he_cfg *he_cfg);
596*4882a593Smuzhiyun int woal_uap_set_11ax_status(moal_private *priv, t_u8 action, t_u8 band,
597*4882a593Smuzhiyun 			     IEEEtypes_HECap_t *hecap_ie);
598*4882a593Smuzhiyun int woal_set_uap_ht_tx_cfg(moal_private *priv, Band_Config_t bandcfg,
599*4882a593Smuzhiyun 			   t_u16 ht_cap, t_u8 en);
600*4882a593Smuzhiyun mlan_status woal_uap_set_11n_status(moal_private *priv,
601*4882a593Smuzhiyun 				    mlan_uap_bss_param *sys_cfg, t_u8 action);
602*4882a593Smuzhiyun #ifdef UAP_WEXT
603*4882a593Smuzhiyun void woal_ioctl_get_uap_info_resp(moal_private *priv, pmlan_ds_get_info info);
604*4882a593Smuzhiyun int woal_set_get_custom_ie(moal_private *priv, t_u16 mask, t_u8 *ie,
605*4882a593Smuzhiyun 			   int ie_len);
606*4882a593Smuzhiyun #endif /* UAP_WEXT */
607*4882a593Smuzhiyun 
608*4882a593Smuzhiyun #endif /* _MOAL_UAP_H */
609