linux/drivers/staging/rtl8188eu/include/rtw_cmd.h
<<
>>
Prefs
   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
  22struct 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
  33struct 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) \
  42do {\
  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
  51u32 rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *obj);
  52struct cmd_obj *rtw_dequeue_cmd(struct __queue *queue);
  53void rtw_free_cmd_obj(struct cmd_obj *pcmd);
  54
  55int rtw_cmd_thread(void *context);
  56
  57int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv);
  58
  59enum 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
  76enum 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
  85enum 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 */
  99struct disconnect_parm {
 100        u32 deauth_timeout_ms;
 101};
 102
 103struct  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)
 119struct 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 */
 135struct 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 */
 153struct 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 */
 172struct 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
 181struct 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 */
 197struct set_assocsta_parm {
 198        u8      addr[ETH_ALEN];
 199};
 200
 201struct 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 */
 260struct 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
 266struct addBaReq_parm {
 267        unsigned int tid;
 268        u8      addr[ETH_ALEN];
 269};
 270
 271/*H2C Handler index: 46 */
 272struct set_ch_parm {
 273        u8 ch;
 274        u8 bw;
 275        u8 ch_offset;
 276};
 277
 278/*H2C Handler index: 59 */
 279struct 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
 300u8 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);
 303u8 rtw_createbss_cmd(struct adapter *padapter);
 304u8 rtw_setstakey_cmd(struct adapter *padapter, u8 *psta, u8 unicast_key);
 305u8 rtw_clearstakey_cmd(struct adapter *padapter, u8 *psta, u8 entry,
 306                       u8 enqueue);
 307u8 rtw_joinbss_cmd(struct adapter *padapter, struct wlan_network *pnetwork);
 308u8 rtw_disassoc_cmd(struct adapter *padapter, u32 deauth_timeout_ms,
 309                    bool enqueue);
 310u8 rtw_setopmode_cmd(struct adapter *padapter,
 311                     enum ndis_802_11_network_infra networktype);
 312u8 rtw_addbareq_cmd(struct adapter *padapter, u8 tid, u8 *addr);
 313
 314u8 rtw_dynamic_chk_wk_cmd(struct adapter *adapter);
 315
 316u8 rtw_lps_ctrl_wk_cmd(struct adapter *padapter, u8 lps_ctrl_type, u8 enqueue);
 317u8 rtw_rpt_timer_cfg_cmd(struct adapter *padapter, u16 minRptTime);
 318
 319u8 rtw_antenna_select_cmd(struct adapter *padapter, u8 antenna, u8 enqueue);
 320u8 rtw_ps_cmd(struct adapter *padapter);
 321
 322#ifdef CONFIG_88EU_AP_MODE
 323u8 rtw_chk_hi_queue_cmd(struct adapter *padapter);
 324#endif
 325
 326u8 rtw_set_chplan_cmd(struct adapter *padapter, u8 chplan, u8 enqueue);
 327u8 rtw_drvextra_cmd_hdl(struct adapter *padapter, unsigned char *pbuf);
 328
 329void rtw_survey_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd);
 330void rtw_disassoc_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd);
 331void rtw_joinbss_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd);
 332void rtw_createbss_cmd_callback(struct adapter *adapt, struct cmd_obj *pcmd);
 333void rtw_readtssi_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cmd);
 334
 335void rtw_setstaKey_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cmd);
 336void rtw_setassocsta_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cm);
 337void rtw_getrttbl_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cmd);
 338
 339struct _cmd_callback {
 340        u32     cmd_code;
 341        void (*callback)(struct adapter  *padapter, struct cmd_obj *cmd);
 342};
 343
 344enum 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_
 365static 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_ */
 385