root/drivers/staging/rtl8188eu/include/rtw_cmd.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /******************************************************************************
   3  *
   4  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
   5  *
   6  ******************************************************************************/
   7 #ifndef __RTW_CMD_H_
   8 #define __RTW_CMD_H_
   9 
  10 #include <wlan_bssdef.h>
  11 #include <rtw_rf.h>
  12 #include <rtw_led.h>
  13 
  14 #include <osdep_service.h>
  15 #include <ieee80211.h> /*  <ieee80211/ieee80211.h> */
  16 
  17 #define MAX_CMDSZ       1024
  18 #define MAX_RSPSZ       512
  19 
  20 #define CMDBUFF_ALIGN_SZ 512
  21 
  22 struct cmd_obj {
  23         struct adapter *padapter;
  24         u16     cmdcode;
  25         u8      res;
  26         u8      *parmbuf;
  27         u32     cmdsz;
  28         u8      *rsp;
  29         u32     rspsz;
  30         struct list_head list;
  31 };
  32 
  33 struct cmd_priv {
  34         struct completion cmd_queue_comp;
  35         struct completion terminate_cmdthread_comp;
  36         struct __queue cmd_queue;
  37         u8 cmdthd_running;
  38         struct adapter *padapter;
  39 };
  40 
  41 #define init_h2fwcmd_w_parm_no_rsp(pcmd, pparm, code) \
  42 do {\
  43         INIT_LIST_HEAD(&pcmd->list);\
  44         pcmd->cmdcode = code;\
  45         pcmd->parmbuf = (u8 *)(pparm);\
  46         pcmd->cmdsz = sizeof(*pparm);\
  47         pcmd->rsp = NULL;\
  48         pcmd->rspsz = 0;\
  49 } while (0)
  50 
  51 u32 rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *obj);
  52 struct cmd_obj *rtw_dequeue_cmd(struct __queue *queue);
  53 void rtw_free_cmd_obj(struct cmd_obj *pcmd);
  54 
  55 int rtw_cmd_thread(void *context);
  56 
  57 int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv);
  58 
  59 enum rtw_drvextra_cmd_id {
  60         NONE_WK_CID,
  61         DYNAMIC_CHK_WK_CID,
  62         DM_CTRL_WK_CID,
  63         PBC_POLLING_WK_CID,
  64         POWER_SAVING_CTRL_WK_CID,/* IPS,AUTOSuspend */
  65         LPS_CTRL_WK_CID,
  66         ANT_SELECT_WK_CID,
  67         P2P_PS_WK_CID,
  68         P2P_PROTO_WK_CID,
  69         CHECK_HIQ_WK_CID,/* for softap mode, check hi queue if empty */
  70         INTEl_WIDI_WK_CID,
  71         C2H_WK_CID,
  72         RTP_TIMER_CFG_WK_CID,
  73         MAX_WK_CID
  74 };
  75 
  76 enum LPS_CTRL_TYPE {
  77         LPS_CTRL_SCAN = 0,
  78         LPS_CTRL_JOINBSS = 1,
  79         LPS_CTRL_CONNECT = 2,
  80         LPS_CTRL_DISCONNECT = 3,
  81         LPS_CTRL_SPECIAL_PACKET = 4,
  82         LPS_CTRL_LEAVE = 5,
  83 };
  84 
  85 enum RFINTFS {
  86         SWSI,
  87         HWSI,
  88         HWPI,
  89 };
  90 
  91 /*
  92  * Caller Mode: Infra, Ad-HoC(C)
  93  *
  94  * Notes: To disconnect the current associated BSS
  95  *
  96  * Command Mode
  97  *
  98  */
  99 struct disconnect_parm {
 100         u32 deauth_timeout_ms;
 101 };
 102 
 103 struct  setopmode_parm {
 104         u8      mode;
 105         u8      rsvd[3];
 106 };
 107 
 108 /*
 109  * Caller Mode: AP, Ad-HoC, Infra
 110  *
 111  * Notes: To ask RTL8711 performing site-survey
 112  *
 113  * Command-Event Mode
 114  *
 115  */
 116 
 117 #define RTW_SSID_SCAN_AMOUNT 9 /*  for WEXT_CSCAN_AMOUNT 9 */
 118 #define RTW_CHANNEL_SCAN_AMOUNT (14+37)
 119 struct sitesurvey_parm {
 120         int scan_mode;  /* active: 1, passive: 0 */
 121         u8 ssid_num;
 122         u8 ch_num;
 123         struct ndis_802_11_ssid ssid[RTW_SSID_SCAN_AMOUNT];
 124         struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
 125 };
 126 
 127 /*
 128  * Caller Mode: Any
 129  *
 130  * Notes: To set the auth type of RTL8711. open/shared/802.1x
 131  *
 132  * Command Mode
 133  *
 134  */
 135 struct setauth_parm {
 136         u8 mode;  /* 0: legacy open, 1: legacy shared 2: 802.1x */
 137         u8 _1x;   /* 0: PSK, 1: TLS */
 138         u8 rsvd[2];
 139 };
 140 
 141 /*
 142  * Caller Mode: Infra
 143  *
 144  * a. algorithm: wep40, wep104, tkip & aes
 145  * b. keytype: grp key/unicast key
 146  * c. key contents
 147  *
 148  * when shared key ==> keyid is the camid
 149  * when 802.1x ==> keyid [0:1] ==> grp key
 150  * when 802.1x ==> keyid > 2 ==> unicast key
 151  *
 152  */
 153 struct setkey_parm {
 154         u8      algorithm;      /* could be none, wep40, TKIP, CCMP, wep104 */
 155         u8      keyid;
 156         u8      grpkey;         /* 1: this is the grpkey for 802.1x.
 157                                  * 0: this is the unicast key for 802.1x
 158                                  */
 159         u8      set_tx;         /* 1: main tx key for wep. 0: other key. */
 160         u8      key[16];        /* this could be 40 or 104 */
 161 };
 162 
 163 /*
 164  * When in AP or Ad-Hoc mode, this is used to
 165  * allocate an sw/hw entry for a newly associated sta.
 166  *
 167  * Command
 168  *
 169  * when shared key ==> algorithm/keyid
 170  *
 171  */
 172 struct set_stakey_parm {
 173         u8      addr[ETH_ALEN];
 174         u8      algorithm;
 175         u8      id;/* currently for erasing cam entry if
 176                     * algorithm == _NO_PRIVACY_
 177                     */
 178         u8      key[16];
 179 };
 180 
 181 struct set_stakey_rsp {
 182         u8      addr[ETH_ALEN];
 183         u8      keyid;
 184         u8      rsvd;
 185 };
 186 
 187 /*
 188  * Caller Ad-Hoc/AP
 189  *
 190  * Command -Rsp(AID == CAMID) mode
 191  *
 192  * This is to force fw to add an sta_data entry per driver's request.
 193  *
 194  * FW will write an cam entry associated with it.
 195  *
 196  */
 197 struct set_assocsta_parm {
 198         u8      addr[ETH_ALEN];
 199 };
 200 
 201 struct set_assocsta_rsp {
 202         u8      cam_id;
 203         u8      rsvd[3];
 204 };
 205 
 206 /*
 207  *      Notes: This command is used for H2C/C2H loopback testing
 208  *
 209  *      mac[0] == 0
 210  *      ==> CMD mode, return H2C_SUCCESS.
 211  *      The following condition must be true under CMD mode
 212  *              mac[1] == mac[4], mac[2] == mac[3], mac[0]=mac[5]= 0;
 213  *              s0 == 0x1234, s1 == 0xabcd, w0 == 0x78563412, w1 == 0x5aa5def7;
 214  *              s2 == (b1 << 8 | b0);
 215  *
 216  *      mac[0] == 1
 217  *      ==> CMD_RSP mode, return H2C_SUCCESS_RSP
 218  *
 219  *      The rsp layout shall be:
 220  *      rsp:                    parm:
 221  *              mac[0]  =   mac[5];
 222  *              mac[1]  =   mac[4];
 223  *              mac[2]  =   mac[3];
 224  *              mac[3]  =   mac[2];
 225  *              mac[4]  =   mac[1];
 226  *              mac[5]  =   mac[0];
 227  *              s0              =   s1;
 228  *              s1              =   swap16(s0);
 229  *              w0              =       swap32(w1);
 230  *              b0              =       b1
 231  *              s2              =       s0 + s1
 232  *              b1              =       b0
 233  *              w1              =       w0
 234  *
 235  *      mac[0] ==       2
 236  *      ==> CMD_EVENT mode, return      H2C_SUCCESS
 237  *      The event layout shall be:
 238  *      event:                  parm:
 239  *              mac[0]  =   mac[5];
 240  *              mac[1]  =   mac[4];
 241  *              mac[2]  =   event's seq no, starting from 1 to parm's marc[3]
 242  *              mac[2]  =   event's seq no, starting from 1 to parm's marc[3]
 243  *              mac[2]  =   event's seq no, starting from 1 to parm's marc[3]
 244  *              mac[3]  =   mac[2];
 245  *              mac[4]  =   mac[1];
 246  *              mac[5]  =   mac[0];
 247  *              s0              =   swap16(s0) - event.mac[2];
 248  *              s1              =   s1 + event.mac[2];
 249  *              w0              =       swap32(w0);
 250  *              b0              =       b1
 251  *              s2              =       s0 + event.mac[2]
 252  *              b1              =       b0
 253  *              w1              =       swap32(w1) - event.mac[2];
 254  *
 255  *              parm->mac[3] is the total event counts that host requested.
 256  *      event will be the same with the cmd's param.
 257  */
 258 
 259 /*  CMD param Format for driver extra cmd handler */
 260 struct drvextra_cmd_parm {
 261         int ec_id; /* extra cmd id */
 262         int type_size; /*  Can use this field as the type id or command size */
 263         unsigned char *pbuf;
 264 };
 265 
 266 struct addBaReq_parm {
 267         unsigned int tid;
 268         u8      addr[ETH_ALEN];
 269 };
 270 
 271 /*H2C Handler index: 46 */
 272 struct set_ch_parm {
 273         u8 ch;
 274         u8 bw;
 275         u8 ch_offset;
 276 };
 277 
 278 /*H2C Handler index: 59 */
 279 struct SetChannelPlan_param {
 280         u8 channel_plan;
 281 };
 282 
 283 /*
 284  *
 285  * Result:
 286  * 0x00: success
 287  * 0x01: success, and check Response.
 288  * 0x02: cmd ignored due to duplicated sequcne number
 289  * 0x03: cmd dropped due to invalid cmd code
 290  * 0x04: reserved.
 291  *
 292  */
 293 
 294 #define H2C_SUCCESS             0x00
 295 #define H2C_SUCCESS_RSP         0x01
 296 #define H2C_DROPPED             0x03
 297 #define H2C_PARAMETERS_ERROR    0x04
 298 #define H2C_REJECTED            0x05
 299 
 300 u8 rtw_sitesurvey_cmd(struct adapter *padapter, struct ndis_802_11_ssid *ssid,
 301                       int ssid_num, struct rtw_ieee80211_channel *ch,
 302                       int ch_num);
 303 u8 rtw_createbss_cmd(struct adapter *padapter);
 304 u8 rtw_setstakey_cmd(struct adapter *padapter, u8 *psta, u8 unicast_key);
 305 u8 rtw_clearstakey_cmd(struct adapter *padapter, u8 *psta, u8 entry,
 306                        u8 enqueue);
 307 u8 rtw_joinbss_cmd(struct adapter *padapter, struct wlan_network *pnetwork);
 308 u8 rtw_disassoc_cmd(struct adapter *padapter, u32 deauth_timeout_ms,
 309                     bool enqueue);
 310 u8 rtw_setopmode_cmd(struct adapter *padapter,
 311                      enum ndis_802_11_network_infra networktype);
 312 u8 rtw_addbareq_cmd(struct adapter *padapter, u8 tid, u8 *addr);
 313 
 314 u8 rtw_dynamic_chk_wk_cmd(struct adapter *adapter);
 315 
 316 u8 rtw_lps_ctrl_wk_cmd(struct adapter *padapter, u8 lps_ctrl_type, u8 enqueue);
 317 u8 rtw_rpt_timer_cfg_cmd(struct adapter *padapter, u16 minRptTime);
 318 
 319 u8 rtw_antenna_select_cmd(struct adapter *padapter, u8 antenna, u8 enqueue);
 320 u8 rtw_ps_cmd(struct adapter *padapter);
 321 
 322 #ifdef CONFIG_88EU_AP_MODE
 323 u8 rtw_chk_hi_queue_cmd(struct adapter *padapter);
 324 #endif
 325 
 326 u8 rtw_set_chplan_cmd(struct adapter *padapter, u8 chplan, u8 enqueue);
 327 u8 rtw_drvextra_cmd_hdl(struct adapter *padapter, unsigned char *pbuf);
 328 
 329 void rtw_survey_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd);
 330 void rtw_disassoc_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd);
 331 void rtw_joinbss_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd);
 332 void rtw_createbss_cmd_callback(struct adapter *adapt, struct cmd_obj *pcmd);
 333 void rtw_readtssi_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cmd);
 334 
 335 void rtw_setstaKey_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cmd);
 336 void rtw_setassocsta_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cm);
 337 void rtw_getrttbl_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cmd);
 338 
 339 struct _cmd_callback {
 340         u32     cmd_code;
 341         void (*callback)(struct adapter  *padapter, struct cmd_obj *cmd);
 342 };
 343 
 344 enum rtw_h2c_cmd {
 345         _JoinBss_CMD_,
 346         _DisConnect_CMD_,
 347         _CreateBss_CMD_,
 348         _SetOpMode_CMD_,
 349         _SiteSurvey_CMD_,
 350         _SetAuth_CMD_,
 351         _SetKey_CMD_,
 352         _SetStaKey_CMD_,
 353         _SetAssocSta_CMD_,
 354         _AddBAReq_CMD_,
 355         _SetChannel_CMD_,
 356         _TX_Beacon_CMD_,
 357         _Set_MLME_EVT_CMD_,
 358         _Set_Drv_Extra_CMD_,
 359         _SetChannelPlan_CMD_,
 360 
 361         MAX_H2CCMD
 362 };
 363 
 364 #ifdef _RTW_CMD_C_
 365 static struct _cmd_callback     rtw_cmd_callback[] = {
 366         {_JoinBss_CMD_, &rtw_joinbss_cmd_callback},
 367         {_DisConnect_CMD_, &rtw_disassoc_cmd_callback},
 368         {_CreateBss_CMD_, &rtw_createbss_cmd_callback},
 369         {_SetOpMode_CMD_, NULL},
 370         {_SiteSurvey_CMD_, &rtw_survey_cmd_callback},
 371         {_SetAuth_CMD_, NULL},
 372         {_SetKey_CMD_, NULL},
 373         {_SetStaKey_CMD_, &rtw_setstaKey_cmdrsp_callback},
 374         {_SetAssocSta_CMD_, &rtw_setassocsta_cmdrsp_callback},
 375         {_AddBAReq_CMD_, NULL},
 376         {_SetChannel_CMD_, NULL},
 377         {_TX_Beacon_CMD_, NULL},
 378         {_Set_MLME_EVT_CMD_, NULL},
 379         {_Set_Drv_Extra_CMD_, NULL},
 380         {_SetChannelPlan_CMD_, NULL},
 381 };
 382 #endif
 383 
 384 #endif /*  _CMD_H_ */

/* [<][>][^][v][top][bottom][index][help] */