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