1*4882a593Smuzhiyun /****************************************************************************** 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Copyright(c) 2007 - 2017 Realtek Corporation. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify it 6*4882a593Smuzhiyun * under the terms of version 2 of the GNU General Public License as 7*4882a593Smuzhiyun * published by the Free Software Foundation. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * This program is distributed in the hope that it will be useful, but WITHOUT 10*4882a593Smuzhiyun * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11*4882a593Smuzhiyun * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12*4882a593Smuzhiyun * more details. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun *****************************************************************************/ 15*4882a593Smuzhiyun #ifndef __RTW_CMD_H_ 16*4882a593Smuzhiyun #define __RTW_CMD_H_ 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #define C2H_MEM_SZ (16*1024) 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun #define FREE_CMDOBJ_SZ 128 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun #define MAX_CMDSZ 1536 24*4882a593Smuzhiyun #define MAX_RSPSZ 512 25*4882a593Smuzhiyun #define MAX_EVTSZ 1024 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun #define CMDBUFF_ALIGN_SZ 512 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun struct cmd_obj { 30*4882a593Smuzhiyun _adapter *padapter; 31*4882a593Smuzhiyun u16 cmdcode; 32*4882a593Smuzhiyun u8 res; 33*4882a593Smuzhiyun u8 *parmbuf; 34*4882a593Smuzhiyun u32 cmdsz; 35*4882a593Smuzhiyun u8 *rsp; 36*4882a593Smuzhiyun u32 rspsz; 37*4882a593Smuzhiyun struct submit_ctx *sctx; 38*4882a593Smuzhiyun u8 no_io; 39*4882a593Smuzhiyun /* _sema cmd_sem; */ 40*4882a593Smuzhiyun _list list; 41*4882a593Smuzhiyun }; 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun /* cmd flags */ 44*4882a593Smuzhiyun enum { 45*4882a593Smuzhiyun RTW_CMDF_DIRECTLY = BIT0, 46*4882a593Smuzhiyun RTW_CMDF_WAIT_ACK = BIT1, 47*4882a593Smuzhiyun }; 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun struct cmd_priv { 50*4882a593Smuzhiyun _sema cmd_queue_sema; 51*4882a593Smuzhiyun /* _sema cmd_done_sema; */ 52*4882a593Smuzhiyun _sema start_cmdthread_sema; 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun _queue cmd_queue; 55*4882a593Smuzhiyun u8 cmd_seq; 56*4882a593Smuzhiyun u8 *cmd_buf; /* shall be non-paged, and 4 bytes aligned */ 57*4882a593Smuzhiyun u8 *cmd_allocated_buf; 58*4882a593Smuzhiyun u8 *rsp_buf; /* shall be non-paged, and 4 bytes aligned */ 59*4882a593Smuzhiyun u8 *rsp_allocated_buf; 60*4882a593Smuzhiyun u32 cmd_issued_cnt; 61*4882a593Smuzhiyun u32 cmd_done_cnt; 62*4882a593Smuzhiyun u32 rsp_cnt; 63*4882a593Smuzhiyun ATOMIC_T cmdthd_running; 64*4882a593Smuzhiyun /* u8 cmdthd_running; */ 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun _adapter *padapter; 67*4882a593Smuzhiyun _mutex sctx_mutex; 68*4882a593Smuzhiyun }; 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun #ifdef CONFIG_EVENT_THREAD_MODE 71*4882a593Smuzhiyun struct evt_obj { 72*4882a593Smuzhiyun u16 evtcode; 73*4882a593Smuzhiyun u8 res; 74*4882a593Smuzhiyun u8 *parmbuf; 75*4882a593Smuzhiyun u32 evtsz; 76*4882a593Smuzhiyun _list list; 77*4882a593Smuzhiyun }; 78*4882a593Smuzhiyun #endif 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun struct evt_priv { 81*4882a593Smuzhiyun #ifdef CONFIG_EVENT_THREAD_MODE 82*4882a593Smuzhiyun _sema evt_notify; 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun _queue evt_queue; 85*4882a593Smuzhiyun #endif 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun #ifdef CONFIG_FW_C2H_REG 88*4882a593Smuzhiyun #define CONFIG_C2H_WK 89*4882a593Smuzhiyun #endif 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun #ifdef CONFIG_C2H_WK 92*4882a593Smuzhiyun _workitem c2h_wk; 93*4882a593Smuzhiyun bool c2h_wk_alive; 94*4882a593Smuzhiyun struct rtw_cbuf *c2h_queue; 95*4882a593Smuzhiyun #define C2H_QUEUE_MAX_LEN 10 96*4882a593Smuzhiyun #endif 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun #ifdef CONFIG_H2CLBK 99*4882a593Smuzhiyun _sema lbkevt_done; 100*4882a593Smuzhiyun u8 lbkevt_limit; 101*4882a593Smuzhiyun u8 lbkevt_num; 102*4882a593Smuzhiyun u8 *cmdevt_parm; 103*4882a593Smuzhiyun #endif 104*4882a593Smuzhiyun ATOMIC_T event_seq; 105*4882a593Smuzhiyun u8 *evt_buf; /* shall be non-paged, and 4 bytes aligned */ 106*4882a593Smuzhiyun u8 *evt_allocated_buf; 107*4882a593Smuzhiyun u32 evt_done_cnt; 108*4882a593Smuzhiyun #if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) 109*4882a593Smuzhiyun u8 *c2h_mem; 110*4882a593Smuzhiyun u8 *allocated_c2h_mem; 111*4882a593Smuzhiyun #endif 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun }; 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun #define init_h2fwcmd_w_parm_no_rsp(pcmd, pparm, code) \ 116*4882a593Smuzhiyun do {\ 117*4882a593Smuzhiyun _rtw_init_listhead(&pcmd->list);\ 118*4882a593Smuzhiyun pcmd->cmdcode = code;\ 119*4882a593Smuzhiyun pcmd->parmbuf = (u8 *)(pparm);\ 120*4882a593Smuzhiyun pcmd->cmdsz = sizeof (*pparm);\ 121*4882a593Smuzhiyun pcmd->rsp = NULL;\ 122*4882a593Smuzhiyun pcmd->rspsz = 0;\ 123*4882a593Smuzhiyun } while (0) 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun #define init_h2fwcmd_w_parm_no_parm_rsp(pcmd, code) \ 126*4882a593Smuzhiyun do {\ 127*4882a593Smuzhiyun _rtw_init_listhead(&pcmd->list);\ 128*4882a593Smuzhiyun pcmd->cmdcode = code;\ 129*4882a593Smuzhiyun pcmd->parmbuf = NULL;\ 130*4882a593Smuzhiyun pcmd->cmdsz = 0;\ 131*4882a593Smuzhiyun pcmd->rsp = NULL;\ 132*4882a593Smuzhiyun pcmd->rspsz = 0;\ 133*4882a593Smuzhiyun } while (0) 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun struct P2P_PS_Offload_t { 136*4882a593Smuzhiyun u8 Offload_En:1; 137*4882a593Smuzhiyun u8 role:1; /* 1: Owner, 0: Client */ 138*4882a593Smuzhiyun u8 CTWindow_En:1; 139*4882a593Smuzhiyun u8 NoA0_En:1; 140*4882a593Smuzhiyun u8 NoA1_En:1; 141*4882a593Smuzhiyun u8 AllStaSleep:1; /* Only valid in Owner */ 142*4882a593Smuzhiyun u8 discovery:1; 143*4882a593Smuzhiyun u8 rsvd:1; 144*4882a593Smuzhiyun #ifdef CONFIG_P2P_PS_NOA_USE_MACID_SLEEP 145*4882a593Smuzhiyun u8 p2p_macid:7; 146*4882a593Smuzhiyun u8 disable_close_rf:1; /*1: not close RF but just pause p2p_macid when NoA duration*/ 147*4882a593Smuzhiyun #endif /* CONFIG_P2P_PS_NOA_USE_MACID_SLEEP */ 148*4882a593Smuzhiyun }; 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun struct P2P_PS_CTWPeriod_t { 151*4882a593Smuzhiyun u8 CTWPeriod; /* TU */ 152*4882a593Smuzhiyun }; 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun #ifdef CONFIG_P2P_WOWLAN 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun struct P2P_WoWlan_Offload_t { 157*4882a593Smuzhiyun u8 Disconnect_Wkup_Drv:1; 158*4882a593Smuzhiyun u8 role:2; 159*4882a593Smuzhiyun u8 Wps_Config[2]; 160*4882a593Smuzhiyun }; 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun #endif /* CONFIG_P2P_WOWLAN */ 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun extern u32 rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *obj); 165*4882a593Smuzhiyun extern struct cmd_obj *rtw_dequeue_cmd(struct cmd_priv *pcmdpriv); 166*4882a593Smuzhiyun extern void rtw_free_cmd_obj(struct cmd_obj *pcmd); 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun #ifdef CONFIG_EVENT_THREAD_MODE 169*4882a593Smuzhiyun extern u32 rtw_enqueue_evt(struct evt_priv *pevtpriv, struct evt_obj *obj); 170*4882a593Smuzhiyun extern struct evt_obj *rtw_dequeue_evt(_queue *queue); 171*4882a593Smuzhiyun extern void rtw_free_evt_obj(struct evt_obj *pcmd); 172*4882a593Smuzhiyun #endif 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun void rtw_stop_cmd_thread(_adapter *adapter); 175*4882a593Smuzhiyun thread_return rtw_cmd_thread(thread_context context); 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun extern u32 rtw_init_cmd_priv(struct cmd_priv *pcmdpriv); 178*4882a593Smuzhiyun extern void rtw_free_cmd_priv(struct cmd_priv *pcmdpriv); 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun extern u32 rtw_init_evt_priv(struct evt_priv *pevtpriv); 181*4882a593Smuzhiyun extern void rtw_free_evt_priv(struct evt_priv *pevtpriv); 182*4882a593Smuzhiyun extern void rtw_cmd_clr_isr(struct cmd_priv *pcmdpriv); 183*4882a593Smuzhiyun extern void rtw_evt_notify_isr(struct evt_priv *pevtpriv); 184*4882a593Smuzhiyun #ifdef CONFIG_P2P 185*4882a593Smuzhiyun u8 p2p_protocol_wk_cmd(_adapter *padapter, int intCmdType); 186*4882a593Smuzhiyun #endif /* CONFIG_P2P */ 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun #ifdef CONFIG_IOCTL_CFG80211 189*4882a593Smuzhiyun struct rtw_roch_parm { 190*4882a593Smuzhiyun u64 cookie; 191*4882a593Smuzhiyun struct wireless_dev *wdev; 192*4882a593Smuzhiyun struct ieee80211_channel ch; 193*4882a593Smuzhiyun enum nl80211_channel_type ch_type; 194*4882a593Smuzhiyun unsigned int duration; 195*4882a593Smuzhiyun }; 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun u8 rtw_roch_cmd(_adapter *adapter 198*4882a593Smuzhiyun , u64 cookie, struct wireless_dev *wdev 199*4882a593Smuzhiyun , struct ieee80211_channel *ch, enum nl80211_channel_type ch_type 200*4882a593Smuzhiyun , unsigned int duration 201*4882a593Smuzhiyun , u8 flags 202*4882a593Smuzhiyun ); 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun u8 rtw_cancel_roch_cmd(_adapter *adapter, u64 cookie, struct wireless_dev *wdev, u8 flags); 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun u8 rtw_mgnt_tx_cmd(_adapter *adapter, u8 tx_ch, u8 no_cck, const u8 *buf, size_t len, int wait_ack, u8 flags); 207*4882a593Smuzhiyun struct mgnt_tx_parm { 208*4882a593Smuzhiyun u8 tx_ch; 209*4882a593Smuzhiyun u8 no_cck; 210*4882a593Smuzhiyun const u8 *buf; 211*4882a593Smuzhiyun size_t len; 212*4882a593Smuzhiyun int wait_ack; 213*4882a593Smuzhiyun }; 214*4882a593Smuzhiyun #endif 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun enum rtw_drvextra_cmd_id { 217*4882a593Smuzhiyun NONE_WK_CID, 218*4882a593Smuzhiyun STA_MSTATUS_RPT_WK_CID, 219*4882a593Smuzhiyun DYNAMIC_CHK_WK_CID, 220*4882a593Smuzhiyun DM_CTRL_WK_CID, 221*4882a593Smuzhiyun PBC_POLLING_WK_CID, 222*4882a593Smuzhiyun POWER_SAVING_CTRL_WK_CID,/* IPS,AUTOSuspend */ 223*4882a593Smuzhiyun LPS_CTRL_WK_CID, 224*4882a593Smuzhiyun ANT_SELECT_WK_CID, 225*4882a593Smuzhiyun P2P_PS_WK_CID, 226*4882a593Smuzhiyun P2P_PROTO_WK_CID, 227*4882a593Smuzhiyun CHECK_HIQ_WK_CID,/* for softap mode, check hi queue if empty */ 228*4882a593Smuzhiyun C2H_WK_CID, 229*4882a593Smuzhiyun RTP_TIMER_CFG_WK_CID, 230*4882a593Smuzhiyun RESET_SECURITYPRIV, /* add for CONFIG_IEEE80211W, none 11w also can use */ 231*4882a593Smuzhiyun FREE_ASSOC_RESOURCES, /* add for CONFIG_IEEE80211W, none 11w also can use */ 232*4882a593Smuzhiyun DM_IN_LPS_WK_CID, 233*4882a593Smuzhiyun DM_RA_MSK_WK_CID, /* add for STA update RAMask when bandwith change. */ 234*4882a593Smuzhiyun BEAMFORMING_WK_CID, 235*4882a593Smuzhiyun LPS_CHANGE_DTIM_CID, 236*4882a593Smuzhiyun BTINFO_WK_CID, 237*4882a593Smuzhiyun BTC_REDUCE_WL_TXPWR_CID, 238*4882a593Smuzhiyun DFS_RADAR_DETECT_WK_CID, 239*4882a593Smuzhiyun DFS_RADAR_DETECT_EN_DEC_WK_CID, 240*4882a593Smuzhiyun SESSION_TRACKER_WK_CID, 241*4882a593Smuzhiyun EN_HW_UPDATE_TSF_WK_CID, 242*4882a593Smuzhiyun PERIOD_TSF_UPDATE_END_WK_CID, 243*4882a593Smuzhiyun TEST_H2C_CID, 244*4882a593Smuzhiyun MP_CMD_WK_CID, 245*4882a593Smuzhiyun CUSTOMER_STR_WK_CID, 246*4882a593Smuzhiyun #ifdef CONFIG_RTW_REPEATER_SON 247*4882a593Smuzhiyun RSON_SCAN_WK_CID, 248*4882a593Smuzhiyun #endif 249*4882a593Smuzhiyun ROCH_WK_CID, 250*4882a593Smuzhiyun MGNT_TX_WK_CID, 251*4882a593Smuzhiyun REQ_PER_CMD_WK_CID, 252*4882a593Smuzhiyun SSMPS_WK_CID, 253*4882a593Smuzhiyun #ifdef CONFIG_CTRL_TXSS_BY_TP 254*4882a593Smuzhiyun TXSS_WK_CID, 255*4882a593Smuzhiyun #endif 256*4882a593Smuzhiyun AC_PARM_CMD_WK_CID, 257*4882a593Smuzhiyun #ifdef CONFIG_AP_MODE 258*4882a593Smuzhiyun STOP_AP_WK_CID, 259*4882a593Smuzhiyun #endif 260*4882a593Smuzhiyun #ifdef CONFIG_RTW_TOKEN_BASED_XMIT 261*4882a593Smuzhiyun TBTX_CONTROL_TX_WK_CID, 262*4882a593Smuzhiyun #endif 263*4882a593Smuzhiyun MAX_WK_CID 264*4882a593Smuzhiyun }; 265*4882a593Smuzhiyun 266*4882a593Smuzhiyun enum LPS_CTRL_TYPE { 267*4882a593Smuzhiyun LPS_CTRL_SCAN = 0, 268*4882a593Smuzhiyun LPS_CTRL_JOINBSS = 1, 269*4882a593Smuzhiyun LPS_CTRL_CONNECT = 2, 270*4882a593Smuzhiyun LPS_CTRL_DISCONNECT = 3, 271*4882a593Smuzhiyun LPS_CTRL_SPECIAL_PACKET = 4, 272*4882a593Smuzhiyun LPS_CTRL_LEAVE = 5, 273*4882a593Smuzhiyun LPS_CTRL_TRAFFIC_BUSY = 6, 274*4882a593Smuzhiyun LPS_CTRL_TX_TRAFFIC_LEAVE = 7, 275*4882a593Smuzhiyun LPS_CTRL_RX_TRAFFIC_LEAVE = 8, 276*4882a593Smuzhiyun LPS_CTRL_ENTER = 9, 277*4882a593Smuzhiyun LPS_CTRL_LEAVE_CFG80211_PWRMGMT = 10, 278*4882a593Smuzhiyun LPS_CTRL_LEAVE_SET_OPTION = 11, 279*4882a593Smuzhiyun }; 280*4882a593Smuzhiyun 281*4882a593Smuzhiyun enum STAKEY_TYPE { 282*4882a593Smuzhiyun GROUP_KEY = 0, 283*4882a593Smuzhiyun UNICAST_KEY = 1, 284*4882a593Smuzhiyun TDLS_KEY = 2, 285*4882a593Smuzhiyun }; 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun enum RFINTFS { 288*4882a593Smuzhiyun SWSI, 289*4882a593Smuzhiyun HWSI, 290*4882a593Smuzhiyun HWPI, 291*4882a593Smuzhiyun }; 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun 294*4882a593Smuzhiyun /* 295*4882a593Smuzhiyun Caller Mode: Infra, Ad-Hoc 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun Notes: To join the specified bss 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun Command Event Mode 300*4882a593Smuzhiyun 301*4882a593Smuzhiyun */ 302*4882a593Smuzhiyun struct joinbss_parm { 303*4882a593Smuzhiyun WLAN_BSSID_EX network; 304*4882a593Smuzhiyun }; 305*4882a593Smuzhiyun 306*4882a593Smuzhiyun /* 307*4882a593Smuzhiyun Caller Mode: Infra, Ad-HoC(C) 308*4882a593Smuzhiyun 309*4882a593Smuzhiyun Notes: To disconnect the current associated BSS 310*4882a593Smuzhiyun 311*4882a593Smuzhiyun Command Mode 312*4882a593Smuzhiyun 313*4882a593Smuzhiyun */ 314*4882a593Smuzhiyun struct disconnect_parm { 315*4882a593Smuzhiyun u32 deauth_timeout_ms; 316*4882a593Smuzhiyun }; 317*4882a593Smuzhiyun 318*4882a593Smuzhiyun /* 319*4882a593Smuzhiyun Caller Mode: AP, Ad-HoC(M) 320*4882a593Smuzhiyun 321*4882a593Smuzhiyun Notes: To create a BSS 322*4882a593Smuzhiyun 323*4882a593Smuzhiyun Command Mode 324*4882a593Smuzhiyun */ 325*4882a593Smuzhiyun struct createbss_parm { 326*4882a593Smuzhiyun bool adhoc; 327*4882a593Smuzhiyun 328*4882a593Smuzhiyun /* used by AP/Mesh mode now */ 329*4882a593Smuzhiyun u8 ifbmp; 330*4882a593Smuzhiyun u8 excl_ifbmp; 331*4882a593Smuzhiyun s16 req_ch; 332*4882a593Smuzhiyun s8 req_bw; 333*4882a593Smuzhiyun s8 req_offset; 334*4882a593Smuzhiyun }; 335*4882a593Smuzhiyun 336*4882a593Smuzhiyun 337*4882a593Smuzhiyun struct setopmode_parm { 338*4882a593Smuzhiyun u8 mode; 339*4882a593Smuzhiyun u8 rsvd[3]; 340*4882a593Smuzhiyun }; 341*4882a593Smuzhiyun 342*4882a593Smuzhiyun /* 343*4882a593Smuzhiyun Caller Mode: AP, Ad-HoC, Infra 344*4882a593Smuzhiyun 345*4882a593Smuzhiyun Notes: To ask RTL8711 performing site-survey 346*4882a593Smuzhiyun 347*4882a593Smuzhiyun Command-Event Mode 348*4882a593Smuzhiyun 349*4882a593Smuzhiyun */ 350*4882a593Smuzhiyun 351*4882a593Smuzhiyun #define RTW_SSID_SCAN_AMOUNT 9 /* for WEXT_CSCAN_AMOUNT 9 */ 352*4882a593Smuzhiyun #define RTW_CHANNEL_SCAN_AMOUNT (14+37) 353*4882a593Smuzhiyun struct sitesurvey_parm { 354*4882a593Smuzhiyun sint scan_mode; /* active: 1, passive: 0 */ 355*4882a593Smuzhiyun /* sint bsslimit; // 1 ~ 48 */ 356*4882a593Smuzhiyun u8 ssid_num; 357*4882a593Smuzhiyun u8 ch_num; 358*4882a593Smuzhiyun NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT]; 359*4882a593Smuzhiyun struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT]; 360*4882a593Smuzhiyun 361*4882a593Smuzhiyun u32 token; /* 80211k use it to identify caller */ 362*4882a593Smuzhiyun u16 duration; /* 0: use default, otherwise: channel scan time */ 363*4882a593Smuzhiyun u8 igi; /* 0: use defalut */ 364*4882a593Smuzhiyun u8 bw; /* 0: use default */ 365*4882a593Smuzhiyun 366*4882a593Smuzhiyun bool acs; /* aim to trigger channel selection when scan done */ 367*4882a593Smuzhiyun u8 reason; 368*4882a593Smuzhiyun }; 369*4882a593Smuzhiyun 370*4882a593Smuzhiyun /* 371*4882a593Smuzhiyun Caller Mode: Any 372*4882a593Smuzhiyun 373*4882a593Smuzhiyun Notes: To set the auth type of RTL8711. open/shared/802.1x 374*4882a593Smuzhiyun 375*4882a593Smuzhiyun Command Mode 376*4882a593Smuzhiyun 377*4882a593Smuzhiyun */ 378*4882a593Smuzhiyun struct setauth_parm { 379*4882a593Smuzhiyun u8 mode; /* 0: legacy open, 1: legacy shared 2: 802.1x */ 380*4882a593Smuzhiyun u8 _1x; /* 0: PSK, 1: TLS */ 381*4882a593Smuzhiyun u8 rsvd[2]; 382*4882a593Smuzhiyun }; 383*4882a593Smuzhiyun 384*4882a593Smuzhiyun /* 385*4882a593Smuzhiyun Caller Mode: Infra 386*4882a593Smuzhiyun 387*4882a593Smuzhiyun a. algorithm: wep40, wep104, tkip & aes 388*4882a593Smuzhiyun b. keytype: grp key/unicast key 389*4882a593Smuzhiyun c. key contents 390*4882a593Smuzhiyun 391*4882a593Smuzhiyun when shared key ==> keyid is the camid 392*4882a593Smuzhiyun when 802.1x ==> keyid [0:1] ==> grp key 393*4882a593Smuzhiyun when 802.1x ==> keyid > 2 ==> unicast key 394*4882a593Smuzhiyun 395*4882a593Smuzhiyun */ 396*4882a593Smuzhiyun struct setkey_parm { 397*4882a593Smuzhiyun u8 algorithm; /* encryption algorithm, could be none, wep40, TKIP, CCMP, wep104 */ 398*4882a593Smuzhiyun u8 keyid; 399*4882a593Smuzhiyun u8 set_tx; /* 1: main tx key for wep. 0: other key. */ 400*4882a593Smuzhiyun u8 key[32]; /* this could be 40 or 104 */ 401*4882a593Smuzhiyun }; 402*4882a593Smuzhiyun 403*4882a593Smuzhiyun /* 404*4882a593Smuzhiyun When in AP or Ad-Hoc mode, this is used to 405*4882a593Smuzhiyun allocate an sw/hw entry for a newly associated sta. 406*4882a593Smuzhiyun 407*4882a593Smuzhiyun Command 408*4882a593Smuzhiyun 409*4882a593Smuzhiyun when shared key ==> algorithm/keyid 410*4882a593Smuzhiyun 411*4882a593Smuzhiyun */ 412*4882a593Smuzhiyun struct set_stakey_parm { 413*4882a593Smuzhiyun u8 addr[ETH_ALEN]; 414*4882a593Smuzhiyun u8 algorithm; 415*4882a593Smuzhiyun u8 keyid; 416*4882a593Smuzhiyun u8 key[32]; 417*4882a593Smuzhiyun u8 gk; 418*4882a593Smuzhiyun }; 419*4882a593Smuzhiyun 420*4882a593Smuzhiyun struct set_stakey_rsp { 421*4882a593Smuzhiyun u8 addr[ETH_ALEN]; 422*4882a593Smuzhiyun u8 keyid; 423*4882a593Smuzhiyun u8 rsvd; 424*4882a593Smuzhiyun }; 425*4882a593Smuzhiyun 426*4882a593Smuzhiyun struct Tx_Beacon_param { 427*4882a593Smuzhiyun WLAN_BSSID_EX network; 428*4882a593Smuzhiyun }; 429*4882a593Smuzhiyun 430*4882a593Smuzhiyun /* 431*4882a593Smuzhiyun Notes: This command is used for H2C/C2H loopback testing 432*4882a593Smuzhiyun 433*4882a593Smuzhiyun mac[0] == 0 434*4882a593Smuzhiyun ==> CMD mode, return H2C_SUCCESS. 435*4882a593Smuzhiyun The following condition must be ture under CMD mode 436*4882a593Smuzhiyun mac[1] == mac[4], mac[2] == mac[3], mac[0]=mac[5]= 0; 437*4882a593Smuzhiyun s0 == 0x1234, s1 == 0xabcd, w0 == 0x78563412, w1 == 0x5aa5def7; 438*4882a593Smuzhiyun s2 == (b1 << 8 | b0); 439*4882a593Smuzhiyun 440*4882a593Smuzhiyun mac[0] == 1 441*4882a593Smuzhiyun ==> CMD_RSP mode, return H2C_SUCCESS_RSP 442*4882a593Smuzhiyun 443*4882a593Smuzhiyun The rsp layout shall be: 444*4882a593Smuzhiyun rsp: parm: 445*4882a593Smuzhiyun mac[0] = mac[5]; 446*4882a593Smuzhiyun mac[1] = mac[4]; 447*4882a593Smuzhiyun mac[2] = mac[3]; 448*4882a593Smuzhiyun mac[3] = mac[2]; 449*4882a593Smuzhiyun mac[4] = mac[1]; 450*4882a593Smuzhiyun mac[5] = mac[0]; 451*4882a593Smuzhiyun s0 = s1; 452*4882a593Smuzhiyun s1 = swap16(s0); 453*4882a593Smuzhiyun w0 = swap32(w1); 454*4882a593Smuzhiyun b0 = b1 455*4882a593Smuzhiyun s2 = s0 + s1 456*4882a593Smuzhiyun b1 = b0 457*4882a593Smuzhiyun w1 = w0 458*4882a593Smuzhiyun 459*4882a593Smuzhiyun mac[0] == 2 460*4882a593Smuzhiyun ==> CMD_EVENT mode, return H2C_SUCCESS 461*4882a593Smuzhiyun The event layout shall be: 462*4882a593Smuzhiyun event: parm: 463*4882a593Smuzhiyun mac[0] = mac[5]; 464*4882a593Smuzhiyun mac[1] = mac[4]; 465*4882a593Smuzhiyun mac[2] = event's sequence number, starting from 1 to parm's marc[3] 466*4882a593Smuzhiyun mac[3] = mac[2]; 467*4882a593Smuzhiyun mac[4] = mac[1]; 468*4882a593Smuzhiyun mac[5] = mac[0]; 469*4882a593Smuzhiyun s0 = swap16(s0) - event.mac[2]; 470*4882a593Smuzhiyun s1 = s1 + event.mac[2]; 471*4882a593Smuzhiyun w0 = swap32(w0); 472*4882a593Smuzhiyun b0 = b1 473*4882a593Smuzhiyun s2 = s0 + event.mac[2] 474*4882a593Smuzhiyun b1 = b0 475*4882a593Smuzhiyun w1 = swap32(w1) - event.mac[2]; 476*4882a593Smuzhiyun 477*4882a593Smuzhiyun parm->mac[3] is the total event counts that host requested. 478*4882a593Smuzhiyun 479*4882a593Smuzhiyun 480*4882a593Smuzhiyun event will be the same with the cmd's param. 481*4882a593Smuzhiyun 482*4882a593Smuzhiyun */ 483*4882a593Smuzhiyun 484*4882a593Smuzhiyun #ifdef CONFIG_H2CLBK 485*4882a593Smuzhiyun 486*4882a593Smuzhiyun struct seth2clbk_parm { 487*4882a593Smuzhiyun u8 mac[6]; 488*4882a593Smuzhiyun u16 s0; 489*4882a593Smuzhiyun u16 s1; 490*4882a593Smuzhiyun u32 w0; 491*4882a593Smuzhiyun u8 b0; 492*4882a593Smuzhiyun u16 s2; 493*4882a593Smuzhiyun u8 b1; 494*4882a593Smuzhiyun u32 w1; 495*4882a593Smuzhiyun }; 496*4882a593Smuzhiyun 497*4882a593Smuzhiyun struct geth2clbk_parm { 498*4882a593Smuzhiyun u32 rsv; 499*4882a593Smuzhiyun }; 500*4882a593Smuzhiyun 501*4882a593Smuzhiyun struct geth2clbk_rsp { 502*4882a593Smuzhiyun u8 mac[6]; 503*4882a593Smuzhiyun u16 s0; 504*4882a593Smuzhiyun u16 s1; 505*4882a593Smuzhiyun u32 w0; 506*4882a593Smuzhiyun u8 b0; 507*4882a593Smuzhiyun u16 s2; 508*4882a593Smuzhiyun u8 b1; 509*4882a593Smuzhiyun u32 w1; 510*4882a593Smuzhiyun }; 511*4882a593Smuzhiyun 512*4882a593Smuzhiyun #endif /* CONFIG_H2CLBK */ 513*4882a593Smuzhiyun 514*4882a593Smuzhiyun /* CMD param Formart for driver extra cmd handler */ 515*4882a593Smuzhiyun struct drvextra_cmd_parm { 516*4882a593Smuzhiyun int ec_id; /* extra cmd id */ 517*4882a593Smuzhiyun int type; /* Can use this field as the type id or command size */ 518*4882a593Smuzhiyun int size; /* buffer size */ 519*4882a593Smuzhiyun unsigned char *pbuf; 520*4882a593Smuzhiyun }; 521*4882a593Smuzhiyun 522*4882a593Smuzhiyun /*------------------- Below are used for RF/BB tunning ---------------------*/ 523*4882a593Smuzhiyun struct addBaReq_parm { 524*4882a593Smuzhiyun unsigned int tid; 525*4882a593Smuzhiyun u8 addr[ETH_ALEN]; 526*4882a593Smuzhiyun }; 527*4882a593Smuzhiyun 528*4882a593Smuzhiyun struct addBaRsp_parm { 529*4882a593Smuzhiyun unsigned int tid; 530*4882a593Smuzhiyun unsigned int start_seq; 531*4882a593Smuzhiyun u8 addr[ETH_ALEN]; 532*4882a593Smuzhiyun u8 status; 533*4882a593Smuzhiyun u8 size; 534*4882a593Smuzhiyun }; 535*4882a593Smuzhiyun 536*4882a593Smuzhiyun struct set_ch_parm { 537*4882a593Smuzhiyun u8 ch; 538*4882a593Smuzhiyun u8 bw; 539*4882a593Smuzhiyun u8 ch_offset; 540*4882a593Smuzhiyun }; 541*4882a593Smuzhiyun 542*4882a593Smuzhiyun struct SetChannelPlan_param { 543*4882a593Smuzhiyun enum regd_src_t regd_src; 544*4882a593Smuzhiyun enum rtw_regd_inr inr; 545*4882a593Smuzhiyun struct country_chplan country_ent; 546*4882a593Smuzhiyun bool has_country; 547*4882a593Smuzhiyun u8 channel_plan; 548*4882a593Smuzhiyun #if CONFIG_IEEE80211_BAND_6GHZ 549*4882a593Smuzhiyun u8 channel_plan_6g; 550*4882a593Smuzhiyun #endif 551*4882a593Smuzhiyun 552*4882a593Smuzhiyun #ifdef CONFIG_80211D 553*4882a593Smuzhiyun /* used for regd_src == RTK_PRIV and inr == COUNTRY_IE */ 554*4882a593Smuzhiyun struct country_ie_slave_record cisr; 555*4882a593Smuzhiyun bool has_cisr; 556*4882a593Smuzhiyun #endif 557*4882a593Smuzhiyun 558*4882a593Smuzhiyun #ifdef PLATFORM_LINUX 559*4882a593Smuzhiyun bool rtnl_lock_needed; 560*4882a593Smuzhiyun #endif 561*4882a593Smuzhiyun }; 562*4882a593Smuzhiyun 563*4882a593Smuzhiyun struct get_channel_plan_param { 564*4882a593Smuzhiyun struct get_chplan_resp **chplan; 565*4882a593Smuzhiyun }; 566*4882a593Smuzhiyun 567*4882a593Smuzhiyun struct LedBlink_param { 568*4882a593Smuzhiyun void *pLed; 569*4882a593Smuzhiyun }; 570*4882a593Smuzhiyun 571*4882a593Smuzhiyun struct TDLSoption_param { 572*4882a593Smuzhiyun u8 addr[ETH_ALEN]; 573*4882a593Smuzhiyun u8 option; 574*4882a593Smuzhiyun }; 575*4882a593Smuzhiyun 576*4882a593Smuzhiyun struct RunInThread_param { 577*4882a593Smuzhiyun void (*func)(void *); 578*4882a593Smuzhiyun void *context; 579*4882a593Smuzhiyun }; 580*4882a593Smuzhiyun 581*4882a593Smuzhiyun #ifdef CONFIG_WRITE_BCN_LEN_TO_FW 582*4882a593Smuzhiyun struct write_bcnlen_param { 583*4882a593Smuzhiyun u16 bcn_len; 584*4882a593Smuzhiyun }; 585*4882a593Smuzhiyun #endif 586*4882a593Smuzhiyun 587*4882a593Smuzhiyun struct reqtxrpt_param { 588*4882a593Smuzhiyun u8 macid; 589*4882a593Smuzhiyun }; 590*4882a593Smuzhiyun 591*4882a593Smuzhiyun #define GEN_CMD_CODE(cmd) cmd ## _CMD_ 592*4882a593Smuzhiyun 593*4882a593Smuzhiyun 594*4882a593Smuzhiyun /* 595*4882a593Smuzhiyun 596*4882a593Smuzhiyun Result: 597*4882a593Smuzhiyun 0x00: success 598*4882a593Smuzhiyun 0x01: sucess, and check Response. 599*4882a593Smuzhiyun 0x02: cmd ignored due to duplicated sequcne number 600*4882a593Smuzhiyun 0x03: cmd dropped due to invalid cmd code 601*4882a593Smuzhiyun 0x04: reserved. 602*4882a593Smuzhiyun 603*4882a593Smuzhiyun */ 604*4882a593Smuzhiyun 605*4882a593Smuzhiyun #define H2C_RSP_OFFSET 512 606*4882a593Smuzhiyun 607*4882a593Smuzhiyun #define H2C_SUCCESS 0x00 608*4882a593Smuzhiyun #define H2C_SUCCESS_RSP 0x01 609*4882a593Smuzhiyun #define H2C_DUPLICATED 0x02 610*4882a593Smuzhiyun #define H2C_DROPPED 0x03 611*4882a593Smuzhiyun #define H2C_PARAMETERS_ERROR 0x04 612*4882a593Smuzhiyun #define H2C_REJECTED 0x05 613*4882a593Smuzhiyun #define H2C_CMD_OVERFLOW 0x06 614*4882a593Smuzhiyun #define H2C_RESERVED 0x07 615*4882a593Smuzhiyun #define H2C_ENQ_HEAD 0x08 616*4882a593Smuzhiyun #define H2C_ENQ_HEAD_FAIL 0x09 617*4882a593Smuzhiyun #define H2C_CMD_FAIL 0x0A 618*4882a593Smuzhiyun 619*4882a593Smuzhiyun void rtw_init_sitesurvey_parm(_adapter *padapter, struct sitesurvey_parm *pparm); 620*4882a593Smuzhiyun u8 rtw_sitesurvey_cmd(_adapter *padapter, struct sitesurvey_parm *pparm); 621*4882a593Smuzhiyun #ifdef CONFIG_AP_MODE 622*4882a593Smuzhiyun u8 rtw_create_ibss_cmd(_adapter *adapter, int flags); 623*4882a593Smuzhiyun u8 rtw_startbss_cmd(_adapter *adapter, int flags); 624*4882a593Smuzhiyun #endif 625*4882a593Smuzhiyun 626*4882a593Smuzhiyun #define REQ_CH_NONE -1 627*4882a593Smuzhiyun #define REQ_CH_INT_INFO -2 628*4882a593Smuzhiyun #define REQ_BW_NONE -1 629*4882a593Smuzhiyun #define REQ_BW_ORI -2 630*4882a593Smuzhiyun #define REQ_OFFSET_NONE -1 631*4882a593Smuzhiyun 632*4882a593Smuzhiyun struct sta_info; 633*4882a593Smuzhiyun extern u8 rtw_setstakey_cmd(_adapter *padapter, struct sta_info *sta, u8 key_type, bool enqueue); 634*4882a593Smuzhiyun extern u8 rtw_clearstakey_cmd(_adapter *padapter, struct sta_info *sta, u8 enqueue); 635*4882a593Smuzhiyun 636*4882a593Smuzhiyun extern u8 rtw_joinbss_cmd(_adapter *padapter, struct wlan_network *pnetwork); 637*4882a593Smuzhiyun u8 rtw_disassoc_cmd(_adapter *padapter, u32 deauth_timeout_ms, int flags); 638*4882a593Smuzhiyun #ifdef CONFIG_AP_MODE 639*4882a593Smuzhiyun u8 rtw_change_bss_chbw_cmd(_adapter *adapter, int flags 640*4882a593Smuzhiyun , u8 ifbmp, u8 excl_ifbmp, s16 req_ch, s8 req_bw, s8 req_offset); 641*4882a593Smuzhiyun u8 rtw_stop_ap_cmd(_adapter *adapter, u8 flags); 642*4882a593Smuzhiyun #endif 643*4882a593Smuzhiyun #ifdef CONFIG_RTW_TOKEN_BASED_XMIT 644*4882a593Smuzhiyun u8 rtw_tx_control_cmd(_adapter *adapter); 645*4882a593Smuzhiyun #endif 646*4882a593Smuzhiyun extern u8 rtw_setopmode_cmd(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype, u8 flags); 647*4882a593Smuzhiyun 648*4882a593Smuzhiyun extern u8 rtw_addbareq_cmd(_adapter *padapter, u8 tid, u8 *addr); 649*4882a593Smuzhiyun extern u8 rtw_addbarsp_cmd(_adapter *padapter, u8 *addr, u16 tid, u8 status, u8 size, u16 start_seq); 650*4882a593Smuzhiyun /* add for CONFIG_IEEE80211W, none 11w also can use */ 651*4882a593Smuzhiyun extern u8 rtw_reset_securitypriv_cmd(_adapter *padapter); 652*4882a593Smuzhiyun extern u8 rtw_free_assoc_resources_cmd(_adapter *padapter, u8 lock_scanned_queue, int flags); 653*4882a593Smuzhiyun extern u8 rtw_dynamic_chk_wk_cmd(_adapter *adapter); 654*4882a593Smuzhiyun 655*4882a593Smuzhiyun u8 rtw_lps_ctrl_wk_cmd(_adapter *padapter, u8 lps_ctrl_type, u8 flags); 656*4882a593Smuzhiyun u8 rtw_lps_ctrl_leave_set_level_cmd(_adapter *adapter, u8 lps_level, u8 flags); 657*4882a593Smuzhiyun #ifdef CONFIG_LPS_1T1R 658*4882a593Smuzhiyun u8 rtw_lps_ctrl_leave_set_1t1r_cmd(_adapter *adapter, u8 lps_1t1r, u8 flags); 659*4882a593Smuzhiyun #endif 660*4882a593Smuzhiyun u8 rtw_dm_in_lps_wk_cmd(_adapter *padapter); 661*4882a593Smuzhiyun u8 rtw_lps_change_dtim_cmd(_adapter *padapter, u8 dtim); 662*4882a593Smuzhiyun 663*4882a593Smuzhiyun #if (RATE_ADAPTIVE_SUPPORT == 1) 664*4882a593Smuzhiyun u8 rtw_rpt_timer_cfg_cmd(_adapter *padapter, u16 minRptTime); 665*4882a593Smuzhiyun #endif 666*4882a593Smuzhiyun 667*4882a593Smuzhiyun #ifdef CONFIG_ANTENNA_DIVERSITY 668*4882a593Smuzhiyun extern u8 rtw_antenna_select_cmd(_adapter *padapter, u8 antenna, u8 enqueue); 669*4882a593Smuzhiyun #endif 670*4882a593Smuzhiyun 671*4882a593Smuzhiyun u8 rtw_dm_ra_mask_wk_cmd(_adapter *padapter, u8 *psta); 672*4882a593Smuzhiyun 673*4882a593Smuzhiyun extern u8 rtw_ps_cmd(_adapter *padapter); 674*4882a593Smuzhiyun 675*4882a593Smuzhiyun #if CONFIG_DFS 676*4882a593Smuzhiyun void rtw_dfs_ch_switch_hdl(struct dvobj_priv *dvobj); 677*4882a593Smuzhiyun #endif 678*4882a593Smuzhiyun 679*4882a593Smuzhiyun #ifdef CONFIG_AP_MODE 680*4882a593Smuzhiyun u8 rtw_chk_hi_queue_cmd(_adapter *padapter); 681*4882a593Smuzhiyun #ifdef CONFIG_DFS_MASTER 682*4882a593Smuzhiyun u8 rtw_dfs_rd_cmd(_adapter *adapter, bool enqueue); 683*4882a593Smuzhiyun void rtw_dfs_rd_timer_hdl(void *ctx); 684*4882a593Smuzhiyun void rtw_dfs_rd_en_decision(_adapter *adapter, u8 mlme_act, u8 excl_ifbmp); 685*4882a593Smuzhiyun u8 rtw_dfs_rd_en_decision_cmd(_adapter *adapter); 686*4882a593Smuzhiyun #endif /* CONFIG_DFS_MASTER */ 687*4882a593Smuzhiyun #endif /* CONFIG_AP_MODE */ 688*4882a593Smuzhiyun 689*4882a593Smuzhiyun #ifdef CONFIG_BT_COEXIST 690*4882a593Smuzhiyun u8 rtw_btinfo_cmd(PADAPTER padapter, u8 *pbuf, u16 length); 691*4882a593Smuzhiyun u8 rtw_btc_reduce_wl_txpwr_cmd(_adapter *adapter, u32 val); 692*4882a593Smuzhiyun #endif 693*4882a593Smuzhiyun 694*4882a593Smuzhiyun u8 rtw_test_h2c_cmd(_adapter *adapter, u8 *buf, u8 len); 695*4882a593Smuzhiyun 696*4882a593Smuzhiyun u8 rtw_enable_hw_update_tsf_cmd(_adapter *padapter); 697*4882a593Smuzhiyun u8 rtw_periodic_tsf_update_end_cmd(_adapter *adapter); 698*4882a593Smuzhiyun 699*4882a593Smuzhiyun u8 rtw_set_chbw_cmd(_adapter *padapter, u8 ch, u8 bw, u8 ch_offset, u8 flags); 700*4882a593Smuzhiyun u8 rtw_iqk_cmd(_adapter *padapter, u8 flags); 701*4882a593Smuzhiyun 702*4882a593Smuzhiyun u8 rtw_set_chplan_cmd(_adapter *adapter, int flags, u8 chplan, u8 chplan_6g, enum rtw_regd_inr inr); 703*4882a593Smuzhiyun u8 rtw_set_country_cmd(_adapter *adapter, int flags, const char *country_code, enum rtw_regd_inr inr); 704*4882a593Smuzhiyun #ifdef CONFIG_REGD_SRC_FROM_OS 705*4882a593Smuzhiyun u8 rtw_sync_os_regd_cmd(_adapter *adapter, int flags, const char *country_code, u8 dfs_region, enum rtw_regd_inr inr); 706*4882a593Smuzhiyun #endif 707*4882a593Smuzhiyun u8 rtw_get_chplan_cmd(_adapter *adapter, int flags, struct get_chplan_resp **chplan); 708*4882a593Smuzhiyun 709*4882a593Smuzhiyun #ifdef CONFIG_80211D 710*4882a593Smuzhiyun u8 rtw_apply_recv_country_ie_cmd(_adapter *adapter, int flags, BAND_TYPE band,u8 opch, const u8 *country_ie); 711*4882a593Smuzhiyun #endif 712*4882a593Smuzhiyun 713*4882a593Smuzhiyun extern u8 rtw_led_blink_cmd(_adapter *padapter, void *pLed); 714*4882a593Smuzhiyun extern u8 rtw_set_csa_cmd(_adapter *adapter); 715*4882a593Smuzhiyun extern u8 rtw_set_ap_csa_cmd(_adapter *adapter); 716*4882a593Smuzhiyun extern u8 rtw_tdls_cmd(_adapter *padapter, u8 *addr, u8 option); 717*4882a593Smuzhiyun 718*4882a593Smuzhiyun u8 rtw_mp_cmd(_adapter *adapter, u8 mp_cmd_id, u8 flags); 719*4882a593Smuzhiyun 720*4882a593Smuzhiyun #ifdef CONFIG_RTW_CUSTOMER_STR 721*4882a593Smuzhiyun u8 rtw_customer_str_req_cmd(_adapter *adapter); 722*4882a593Smuzhiyun u8 rtw_customer_str_write_cmd(_adapter *adapter, const u8 *cstr); 723*4882a593Smuzhiyun #endif 724*4882a593Smuzhiyun 725*4882a593Smuzhiyun #ifdef CONFIG_FW_C2H_REG 726*4882a593Smuzhiyun u8 rtw_c2h_reg_wk_cmd(_adapter *adapter, u8 *c2h_evt); 727*4882a593Smuzhiyun #endif 728*4882a593Smuzhiyun #ifdef CONFIG_FW_C2H_PKT 729*4882a593Smuzhiyun u8 rtw_c2h_packet_wk_cmd(_adapter *adapter, u8 *c2h_evt, u16 length); 730*4882a593Smuzhiyun #endif 731*4882a593Smuzhiyun 732*4882a593Smuzhiyun #ifdef CONFIG_RTW_REPEATER_SON 733*4882a593Smuzhiyun #define RSON_SCAN_PROCESS 10 734*4882a593Smuzhiyun #define RSON_SCAN_DISABLE 11 735*4882a593Smuzhiyun u8 rtw_rson_scan_wk_cmd(_adapter *adapter, int op); 736*4882a593Smuzhiyun #endif 737*4882a593Smuzhiyun 738*4882a593Smuzhiyun u8 rtw_run_in_thread_cmd(_adapter *adapter, void (*func)(void *), void *context); 739*4882a593Smuzhiyun u8 rtw_run_in_thread_cmd_wait(_adapter *adapter, void (*func)(void *), void *context, s32 timeout_ms); 740*4882a593Smuzhiyun 741*4882a593Smuzhiyun struct ssmps_cmd_parm { 742*4882a593Smuzhiyun struct sta_info *sta; 743*4882a593Smuzhiyun u8 smps; 744*4882a593Smuzhiyun }; 745*4882a593Smuzhiyun u8 rtw_ssmps_wk_cmd(_adapter *adapter, struct sta_info *sta, u8 smps, u8 enqueue); 746*4882a593Smuzhiyun 747*4882a593Smuzhiyun u8 session_tracker_chk_cmd(_adapter *adapter, struct sta_info *sta); 748*4882a593Smuzhiyun u8 session_tracker_add_cmd(_adapter *adapter, struct sta_info *sta, u8 *local_naddr, u8 *local_port, u8 *remote_naddr, u8 *remote_port); 749*4882a593Smuzhiyun u8 session_tracker_del_cmd(_adapter *adapter, struct sta_info *sta, u8 *local_naddr, u8 *local_port, u8 *remote_naddr, u8 *remote_port); 750*4882a593Smuzhiyun 751*4882a593Smuzhiyun u8 set_txq_params_cmd(_adapter *adapter, u32 ac_parm, u8 ac_type); 752*4882a593Smuzhiyun 753*4882a593Smuzhiyun #if defined(CONFIG_RTW_MESH) && defined(RTW_PER_CMD_SUPPORT_FW) 754*4882a593Smuzhiyun u8 rtw_req_per_cmd(_adapter * adapter); 755*4882a593Smuzhiyun #endif 756*4882a593Smuzhiyun #ifdef CONFIG_RTW_TOKEN_BASED_XMIT 757*4882a593Smuzhiyun u8 rtw_tbtx_chk_cmd(_adapter *adapter); 758*4882a593Smuzhiyun u8 rtw_tbtx_token_dispatch_cmd(_adapter *adapter); 759*4882a593Smuzhiyun #endif 760*4882a593Smuzhiyun 761*4882a593Smuzhiyun #ifdef CONFIG_WRITE_BCN_LEN_TO_FW 762*4882a593Smuzhiyun u8 rtw_write_bcnlen_to_fw_cmd(_adapter *padapter, u16 bcn_len); 763*4882a593Smuzhiyun #endif 764*4882a593Smuzhiyun 765*4882a593Smuzhiyun u8 rtw_reqtxrpt_cmd(_adapter *adapter, u8 macid); 766*4882a593Smuzhiyun 767*4882a593Smuzhiyun #ifdef CONFIG_CTRL_TXSS_BY_TP 768*4882a593Smuzhiyun struct txss_cmd_parm { 769*4882a593Smuzhiyun struct sta_info *sta; 770*4882a593Smuzhiyun bool tx_1ss; 771*4882a593Smuzhiyun }; 772*4882a593Smuzhiyun 773*4882a593Smuzhiyun void rtw_ctrl_txss_update_mimo_type(_adapter *adapter, struct sta_info *sta); 774*4882a593Smuzhiyun u8 rtw_ctrl_txss(_adapter *adapter, struct sta_info *sta, bool tx_1ss); 775*4882a593Smuzhiyun void rtw_ctrl_tx_ss_by_tp(_adapter *adapter, u8 from_timer); 776*4882a593Smuzhiyun 777*4882a593Smuzhiyun #ifdef DBG_CTRL_TXSS 778*4882a593Smuzhiyun void dbg_ctrl_txss(_adapter *adapter, bool tx_1ss); 779*4882a593Smuzhiyun #endif 780*4882a593Smuzhiyun #endif 781*4882a593Smuzhiyun 782*4882a593Smuzhiyun u8 rtw_drvextra_cmd_hdl(_adapter *padapter, unsigned char *pbuf); 783*4882a593Smuzhiyun 784*4882a593Smuzhiyun extern void rtw_survey_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); 785*4882a593Smuzhiyun extern void rtw_disassoc_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); 786*4882a593Smuzhiyun extern void rtw_joinbss_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd); 787*4882a593Smuzhiyun void rtw_create_ibss_post_hdl(_adapter *padapter, int status); 788*4882a593Smuzhiyun extern void rtw_readtssi_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd); 789*4882a593Smuzhiyun 790*4882a593Smuzhiyun extern void rtw_setstaKey_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd); 791*4882a593Smuzhiyun extern void rtw_getrttbl_cmdrsp_callback(_adapter *padapter, struct cmd_obj *pcmd); 792*4882a593Smuzhiyun 793*4882a593Smuzhiyun enum rtw_cmd_id { 794*4882a593Smuzhiyun CMD_JOINBSS, /*0*/ 795*4882a593Smuzhiyun CMD_DISCONNECT, /*1*/ 796*4882a593Smuzhiyun CMD_CREATE_BSS,/*2*/ 797*4882a593Smuzhiyun CMD_SET_OPMODE, /*3*/ 798*4882a593Smuzhiyun CMD_SITE_SURVEY, /*4*/ 799*4882a593Smuzhiyun CMD_SET_AUTH, /*5*/ 800*4882a593Smuzhiyun CMD_SET_KEY, /*6*/ 801*4882a593Smuzhiyun CMD_SET_STAKEY, /*7*/ 802*4882a593Smuzhiyun CMD_ADD_BAREQ, /*8*/ 803*4882a593Smuzhiyun CMD_SET_CHANNEL, /*9*/ 804*4882a593Smuzhiyun CMD_TX_BEACON, /*10*/ 805*4882a593Smuzhiyun CMD_SET_MLME_EVT, /*11*/ 806*4882a593Smuzhiyun CMD_SET_DRV_EXTRA, /*12*/ 807*4882a593Smuzhiyun CMD_SET_CHANPLAN, /*13*/ 808*4882a593Smuzhiyun CMD_LEDBLINK, /*14*/ 809*4882a593Smuzhiyun CMD_SET_CHANSWITCH, /*15*/ 810*4882a593Smuzhiyun CMD_TDLS, /*16*/ 811*4882a593Smuzhiyun CMD_CHK_BMCSLEEPQ, /*17*/ 812*4882a593Smuzhiyun CMD_RUN_INTHREAD, /*18*/ 813*4882a593Smuzhiyun CMD_ADD_BARSP, /*19*/ 814*4882a593Smuzhiyun CMD_RM_POST_EVENT, /*20*/ 815*4882a593Smuzhiyun CMD_SET_MESH_PLINK_STATE, /* 21 */ 816*4882a593Smuzhiyun CMD_DO_IQK, /* 22 */ 817*4882a593Smuzhiyun CMD_GET_CHANPLAN, /*23*/ 818*4882a593Smuzhiyun CMD_WRITE_BCN_LEN, /*24 */ 819*4882a593Smuzhiyun CMD_AP_CHANSWITCH, /* 25 AP switch channel */ 820*4882a593Smuzhiyun CMD_REQ_TXRPT, /* 26 */ 821*4882a593Smuzhiyun CMD_ID_MAX 822*4882a593Smuzhiyun }; 823*4882a593Smuzhiyun 824*4882a593Smuzhiyun #define CMD_FMT "cmd=%d,%d,%d" 825*4882a593Smuzhiyun #define CMD_ARG(cmd) \ 826*4882a593Smuzhiyun (cmd)->cmdcode, \ 827*4882a593Smuzhiyun (cmd)->cmdcode == CMD_SET_DRV_EXTRA ? ((struct drvextra_cmd_parm *)(cmd)->parmbuf)->ec_id : ((cmd)->cmdcode == CMD_SET_MLME_EVT ? ((struct rtw_evt_header *)(cmd)->parmbuf)->id : 0), \ 828*4882a593Smuzhiyun (cmd)->cmdcode == CMD_SET_DRV_EXTRA ? ((struct drvextra_cmd_parm *)(cmd)->parmbuf)->type : 0 829*4882a593Smuzhiyun 830*4882a593Smuzhiyun #endif /* _CMD_H_ */ 831