1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * This file function prototypes, data structure 4*4882a593Smuzhiyun * and definitions for all the host/station commands 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef _LBS_HOST_H_ 8*4882a593Smuzhiyun #define _LBS_HOST_H_ 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun #include "types.h" 11*4882a593Smuzhiyun #include "defs.h" 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #define DEFAULT_AD_HOC_CHANNEL 6 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #define CMD_OPTION_WAITFORRSP 0x0002 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun /* Host command IDs */ 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun /* 20*4882a593Smuzhiyun * Return command are almost always the same as the host command, but with 21*4882a593Smuzhiyun * bit 15 set high. There are a few exceptions, though... 22*4882a593Smuzhiyun */ 23*4882a593Smuzhiyun #define CMD_RET(cmd) (0x8000 | cmd) 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun /* Return command convention exceptions: */ 26*4882a593Smuzhiyun #define CMD_RET_802_11_ASSOCIATE 0x8012 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun /* Command codes */ 29*4882a593Smuzhiyun #define CMD_GET_HW_SPEC 0x0003 30*4882a593Smuzhiyun #define CMD_EEPROM_UPDATE 0x0004 31*4882a593Smuzhiyun #define CMD_802_11_RESET 0x0005 32*4882a593Smuzhiyun #define CMD_802_11_SCAN 0x0006 33*4882a593Smuzhiyun #define CMD_802_11_GET_LOG 0x000b 34*4882a593Smuzhiyun #define CMD_MAC_MULTICAST_ADR 0x0010 35*4882a593Smuzhiyun #define CMD_802_11_AUTHENTICATE 0x0011 36*4882a593Smuzhiyun #define CMD_802_11_EEPROM_ACCESS 0x0059 37*4882a593Smuzhiyun #define CMD_802_11_ASSOCIATE 0x0050 38*4882a593Smuzhiyun #define CMD_802_11_SET_WEP 0x0013 39*4882a593Smuzhiyun #define CMD_802_11_GET_STAT 0x0014 40*4882a593Smuzhiyun #define CMD_802_3_GET_STAT 0x0015 41*4882a593Smuzhiyun #define CMD_802_11_SNMP_MIB 0x0016 42*4882a593Smuzhiyun #define CMD_MAC_REG_MAP 0x0017 43*4882a593Smuzhiyun #define CMD_BBP_REG_MAP 0x0018 44*4882a593Smuzhiyun #define CMD_MAC_REG_ACCESS 0x0019 45*4882a593Smuzhiyun #define CMD_BBP_REG_ACCESS 0x001a 46*4882a593Smuzhiyun #define CMD_RF_REG_ACCESS 0x001b 47*4882a593Smuzhiyun #define CMD_802_11_RADIO_CONTROL 0x001c 48*4882a593Smuzhiyun #define CMD_802_11_RF_CHANNEL 0x001d 49*4882a593Smuzhiyun #define CMD_802_11_RF_TX_POWER 0x001e 50*4882a593Smuzhiyun #define CMD_802_11_RSSI 0x001f 51*4882a593Smuzhiyun #define CMD_802_11_RF_ANTENNA 0x0020 52*4882a593Smuzhiyun #define CMD_802_11_PS_MODE 0x0021 53*4882a593Smuzhiyun #define CMD_802_11_DATA_RATE 0x0022 54*4882a593Smuzhiyun #define CMD_RF_REG_MAP 0x0023 55*4882a593Smuzhiyun #define CMD_802_11_DEAUTHENTICATE 0x0024 56*4882a593Smuzhiyun #define CMD_802_11_REASSOCIATE 0x0025 57*4882a593Smuzhiyun #define CMD_MAC_CONTROL 0x0028 58*4882a593Smuzhiyun #define CMD_802_11_AD_HOC_START 0x002b 59*4882a593Smuzhiyun #define CMD_802_11_AD_HOC_JOIN 0x002c 60*4882a593Smuzhiyun #define CMD_802_11_QUERY_TKIP_REPLY_CNTRS 0x002e 61*4882a593Smuzhiyun #define CMD_802_11_ENABLE_RSN 0x002f 62*4882a593Smuzhiyun #define CMD_802_11_SET_AFC 0x003c 63*4882a593Smuzhiyun #define CMD_802_11_GET_AFC 0x003d 64*4882a593Smuzhiyun #define CMD_802_11_DEEP_SLEEP 0x003e 65*4882a593Smuzhiyun #define CMD_802_11_AD_HOC_STOP 0x0040 66*4882a593Smuzhiyun #define CMD_802_11_HOST_SLEEP_CFG 0x0043 67*4882a593Smuzhiyun #define CMD_802_11_WAKEUP_CONFIRM 0x0044 68*4882a593Smuzhiyun #define CMD_802_11_HOST_SLEEP_ACTIVATE 0x0045 69*4882a593Smuzhiyun #define CMD_802_11_BEACON_STOP 0x0049 70*4882a593Smuzhiyun #define CMD_802_11_MAC_ADDRESS 0x004d 71*4882a593Smuzhiyun #define CMD_802_11_LED_GPIO_CTRL 0x004e 72*4882a593Smuzhiyun #define CMD_802_11_BAND_CONFIG 0x0058 73*4882a593Smuzhiyun #define CMD_GSPI_BUS_CONFIG 0x005a 74*4882a593Smuzhiyun #define CMD_802_11D_DOMAIN_INFO 0x005b 75*4882a593Smuzhiyun #define CMD_802_11_KEY_MATERIAL 0x005e 76*4882a593Smuzhiyun #define CMD_802_11_SLEEP_PARAMS 0x0066 77*4882a593Smuzhiyun #define CMD_802_11_INACTIVITY_TIMEOUT 0x0067 78*4882a593Smuzhiyun #define CMD_802_11_SLEEP_PERIOD 0x0068 79*4882a593Smuzhiyun #define CMD_802_11_TPC_CFG 0x0072 80*4882a593Smuzhiyun #define CMD_802_11_PA_CFG 0x0073 81*4882a593Smuzhiyun #define CMD_802_11_FW_WAKE_METHOD 0x0074 82*4882a593Smuzhiyun #define CMD_802_11_SUBSCRIBE_EVENT 0x0075 83*4882a593Smuzhiyun #define CMD_802_11_RATE_ADAPT_RATESET 0x0076 84*4882a593Smuzhiyun #define CMD_802_11_TX_RATE_QUERY 0x007f 85*4882a593Smuzhiyun #define CMD_GET_TSF 0x0080 86*4882a593Smuzhiyun #define CMD_BT_ACCESS 0x0087 87*4882a593Smuzhiyun #define CMD_FWT_ACCESS 0x0095 88*4882a593Smuzhiyun #define CMD_802_11_MONITOR_MODE 0x0098 89*4882a593Smuzhiyun #define CMD_MESH_ACCESS 0x009b 90*4882a593Smuzhiyun #define CMD_MESH_CONFIG_OLD 0x00a3 91*4882a593Smuzhiyun #define CMD_MESH_CONFIG 0x00ac 92*4882a593Smuzhiyun #define CMD_SET_BOOT2_VER 0x00a5 93*4882a593Smuzhiyun #define CMD_FUNC_INIT 0x00a9 94*4882a593Smuzhiyun #define CMD_FUNC_SHUTDOWN 0x00aa 95*4882a593Smuzhiyun #define CMD_802_11_BEACON_CTRL 0x00b0 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun /* For the IEEE Power Save */ 98*4882a593Smuzhiyun #define PS_MODE_ACTION_ENTER_PS 0x0030 99*4882a593Smuzhiyun #define PS_MODE_ACTION_EXIT_PS 0x0031 100*4882a593Smuzhiyun #define PS_MODE_ACTION_SLEEP_CONFIRMED 0x0034 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun #define CMD_ENABLE_RSN 0x0001 103*4882a593Smuzhiyun #define CMD_DISABLE_RSN 0x0000 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun #define CMD_ACT_GET 0x0000 106*4882a593Smuzhiyun #define CMD_ACT_SET 0x0001 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun /* Define action or option for CMD_802_11_SET_WEP */ 109*4882a593Smuzhiyun #define CMD_ACT_ADD 0x0002 110*4882a593Smuzhiyun #define CMD_ACT_REMOVE 0x0004 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun #define CMD_TYPE_WEP_40_BIT 0x01 113*4882a593Smuzhiyun #define CMD_TYPE_WEP_104_BIT 0x02 114*4882a593Smuzhiyun 115*4882a593Smuzhiyun #define CMD_NUM_OF_WEP_KEYS 4 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun #define CMD_WEP_KEY_INDEX_MASK 0x3fff 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun /* Define action or option for CMD_802_11_SCAN */ 120*4882a593Smuzhiyun #define CMD_BSS_TYPE_BSS 0x0001 121*4882a593Smuzhiyun #define CMD_BSS_TYPE_IBSS 0x0002 122*4882a593Smuzhiyun #define CMD_BSS_TYPE_ANY 0x0003 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun /* Define action or option for CMD_802_11_SCAN */ 125*4882a593Smuzhiyun #define CMD_SCAN_TYPE_ACTIVE 0x0000 126*4882a593Smuzhiyun #define CMD_SCAN_TYPE_PASSIVE 0x0001 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun #define CMD_SCAN_RADIO_TYPE_BG 0 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun #define CMD_SCAN_PROBE_DELAY_TIME 0 131*4882a593Smuzhiyun 132*4882a593Smuzhiyun /* Define action or option for CMD_MAC_CONTROL */ 133*4882a593Smuzhiyun #define CMD_ACT_MAC_RX_ON 0x0001 134*4882a593Smuzhiyun #define CMD_ACT_MAC_TX_ON 0x0002 135*4882a593Smuzhiyun #define CMD_ACT_MAC_LOOPBACK_ON 0x0004 136*4882a593Smuzhiyun #define CMD_ACT_MAC_WEP_ENABLE 0x0008 137*4882a593Smuzhiyun #define CMD_ACT_MAC_INT_ENABLE 0x0010 138*4882a593Smuzhiyun #define CMD_ACT_MAC_MULTICAST_ENABLE 0x0020 139*4882a593Smuzhiyun #define CMD_ACT_MAC_BROADCAST_ENABLE 0x0040 140*4882a593Smuzhiyun #define CMD_ACT_MAC_PROMISCUOUS_ENABLE 0x0080 141*4882a593Smuzhiyun #define CMD_ACT_MAC_ALL_MULTICAST_ENABLE 0x0100 142*4882a593Smuzhiyun #define CMD_ACT_MAC_STRICT_PROTECTION_ENABLE 0x0400 143*4882a593Smuzhiyun 144*4882a593Smuzhiyun /* Event flags for CMD_802_11_SUBSCRIBE_EVENT */ 145*4882a593Smuzhiyun #define CMD_SUBSCRIBE_RSSI_LOW 0x0001 146*4882a593Smuzhiyun #define CMD_SUBSCRIBE_SNR_LOW 0x0002 147*4882a593Smuzhiyun #define CMD_SUBSCRIBE_FAILCOUNT 0x0004 148*4882a593Smuzhiyun #define CMD_SUBSCRIBE_BCNMISS 0x0008 149*4882a593Smuzhiyun #define CMD_SUBSCRIBE_RSSI_HIGH 0x0010 150*4882a593Smuzhiyun #define CMD_SUBSCRIBE_SNR_HIGH 0x0020 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun #define RADIO_PREAMBLE_LONG 0x00 153*4882a593Smuzhiyun #define RADIO_PREAMBLE_SHORT 0x02 154*4882a593Smuzhiyun #define RADIO_PREAMBLE_AUTO 0x04 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun /* Define action or option for CMD_802_11_RF_CHANNEL */ 157*4882a593Smuzhiyun #define CMD_OPT_802_11_RF_CHANNEL_GET 0x00 158*4882a593Smuzhiyun #define CMD_OPT_802_11_RF_CHANNEL_SET 0x01 159*4882a593Smuzhiyun 160*4882a593Smuzhiyun /* Define action or option for CMD_802_11_DATA_RATE */ 161*4882a593Smuzhiyun #define CMD_ACT_SET_TX_AUTO 0x0000 162*4882a593Smuzhiyun #define CMD_ACT_SET_TX_FIX_RATE 0x0001 163*4882a593Smuzhiyun #define CMD_ACT_GET_TX_RATE 0x0002 164*4882a593Smuzhiyun 165*4882a593Smuzhiyun /* Options for CMD_802_11_FW_WAKE_METHOD */ 166*4882a593Smuzhiyun #define CMD_WAKE_METHOD_UNCHANGED 0x0000 167*4882a593Smuzhiyun #define CMD_WAKE_METHOD_COMMAND_INT 0x0001 168*4882a593Smuzhiyun #define CMD_WAKE_METHOD_GPIO 0x0002 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun /* Object IDs for CMD_802_11_SNMP_MIB */ 171*4882a593Smuzhiyun #define SNMP_MIB_OID_BSS_TYPE 0x0000 172*4882a593Smuzhiyun #define SNMP_MIB_OID_OP_RATE_SET 0x0001 173*4882a593Smuzhiyun #define SNMP_MIB_OID_BEACON_PERIOD 0x0002 /* Reserved on v9+ */ 174*4882a593Smuzhiyun #define SNMP_MIB_OID_DTIM_PERIOD 0x0003 /* Reserved on v9+ */ 175*4882a593Smuzhiyun #define SNMP_MIB_OID_ASSOC_TIMEOUT 0x0004 /* Reserved on v9+ */ 176*4882a593Smuzhiyun #define SNMP_MIB_OID_RTS_THRESHOLD 0x0005 177*4882a593Smuzhiyun #define SNMP_MIB_OID_SHORT_RETRY_LIMIT 0x0006 178*4882a593Smuzhiyun #define SNMP_MIB_OID_LONG_RETRY_LIMIT 0x0007 179*4882a593Smuzhiyun #define SNMP_MIB_OID_FRAG_THRESHOLD 0x0008 180*4882a593Smuzhiyun #define SNMP_MIB_OID_11D_ENABLE 0x0009 181*4882a593Smuzhiyun #define SNMP_MIB_OID_11H_ENABLE 0x000A 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun /* Define action or option for CMD_BT_ACCESS */ 184*4882a593Smuzhiyun enum cmd_bt_access_opts { 185*4882a593Smuzhiyun /* The bt commands start at 5 instead of 1 because the old dft commands 186*4882a593Smuzhiyun * are mapped to 1-4. These old commands are no longer maintained and 187*4882a593Smuzhiyun * should not be called. 188*4882a593Smuzhiyun */ 189*4882a593Smuzhiyun CMD_ACT_BT_ACCESS_ADD = 5, 190*4882a593Smuzhiyun CMD_ACT_BT_ACCESS_DEL, 191*4882a593Smuzhiyun CMD_ACT_BT_ACCESS_LIST, 192*4882a593Smuzhiyun CMD_ACT_BT_ACCESS_RESET, 193*4882a593Smuzhiyun CMD_ACT_BT_ACCESS_SET_INVERT, 194*4882a593Smuzhiyun CMD_ACT_BT_ACCESS_GET_INVERT 195*4882a593Smuzhiyun }; 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun /* Define action or option for CMD_FWT_ACCESS */ 198*4882a593Smuzhiyun enum cmd_fwt_access_opts { 199*4882a593Smuzhiyun CMD_ACT_FWT_ACCESS_ADD = 1, 200*4882a593Smuzhiyun CMD_ACT_FWT_ACCESS_DEL, 201*4882a593Smuzhiyun CMD_ACT_FWT_ACCESS_LOOKUP, 202*4882a593Smuzhiyun CMD_ACT_FWT_ACCESS_LIST, 203*4882a593Smuzhiyun CMD_ACT_FWT_ACCESS_LIST_ROUTE, 204*4882a593Smuzhiyun CMD_ACT_FWT_ACCESS_LIST_NEIGHBOR, 205*4882a593Smuzhiyun CMD_ACT_FWT_ACCESS_RESET, 206*4882a593Smuzhiyun CMD_ACT_FWT_ACCESS_CLEANUP, 207*4882a593Smuzhiyun CMD_ACT_FWT_ACCESS_TIME, 208*4882a593Smuzhiyun }; 209*4882a593Smuzhiyun 210*4882a593Smuzhiyun /* Define action or option for CMD_802_11_HOST_SLEEP_CFG */ 211*4882a593Smuzhiyun enum cmd_wol_cfg_opts { 212*4882a593Smuzhiyun CMD_ACT_ACTION_NONE = 0, 213*4882a593Smuzhiyun CMD_ACT_SET_WOL_RULE, 214*4882a593Smuzhiyun CMD_ACT_GET_WOL_RULE, 215*4882a593Smuzhiyun CMD_ACT_RESET_WOL_RULE, 216*4882a593Smuzhiyun }; 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun /* Define action or option for CMD_MESH_ACCESS */ 219*4882a593Smuzhiyun enum cmd_mesh_access_opts { 220*4882a593Smuzhiyun CMD_ACT_MESH_GET_TTL = 1, 221*4882a593Smuzhiyun CMD_ACT_MESH_SET_TTL, 222*4882a593Smuzhiyun CMD_ACT_MESH_GET_STATS, 223*4882a593Smuzhiyun CMD_ACT_MESH_GET_ANYCAST, 224*4882a593Smuzhiyun CMD_ACT_MESH_SET_ANYCAST, 225*4882a593Smuzhiyun CMD_ACT_MESH_SET_LINK_COSTS, 226*4882a593Smuzhiyun CMD_ACT_MESH_GET_LINK_COSTS, 227*4882a593Smuzhiyun CMD_ACT_MESH_SET_BCAST_RATE, 228*4882a593Smuzhiyun CMD_ACT_MESH_GET_BCAST_RATE, 229*4882a593Smuzhiyun CMD_ACT_MESH_SET_RREQ_DELAY, 230*4882a593Smuzhiyun CMD_ACT_MESH_GET_RREQ_DELAY, 231*4882a593Smuzhiyun CMD_ACT_MESH_SET_ROUTE_EXP, 232*4882a593Smuzhiyun CMD_ACT_MESH_GET_ROUTE_EXP, 233*4882a593Smuzhiyun CMD_ACT_MESH_SET_AUTOSTART_ENABLED, 234*4882a593Smuzhiyun CMD_ACT_MESH_GET_AUTOSTART_ENABLED, 235*4882a593Smuzhiyun CMD_ACT_MESH_SET_GET_PRB_RSP_LIMIT = 17, 236*4882a593Smuzhiyun }; 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun /* Define actions and types for CMD_MESH_CONFIG */ 239*4882a593Smuzhiyun enum cmd_mesh_config_actions { 240*4882a593Smuzhiyun CMD_ACT_MESH_CONFIG_STOP = 0, 241*4882a593Smuzhiyun CMD_ACT_MESH_CONFIG_START, 242*4882a593Smuzhiyun CMD_ACT_MESH_CONFIG_SET, 243*4882a593Smuzhiyun CMD_ACT_MESH_CONFIG_GET, 244*4882a593Smuzhiyun }; 245*4882a593Smuzhiyun 246*4882a593Smuzhiyun enum cmd_mesh_config_types { 247*4882a593Smuzhiyun CMD_TYPE_MESH_SET_BOOTFLAG = 1, 248*4882a593Smuzhiyun CMD_TYPE_MESH_SET_BOOTTIME, 249*4882a593Smuzhiyun CMD_TYPE_MESH_SET_DEF_CHANNEL, 250*4882a593Smuzhiyun CMD_TYPE_MESH_SET_MESH_IE, 251*4882a593Smuzhiyun CMD_TYPE_MESH_GET_DEFAULTS, 252*4882a593Smuzhiyun CMD_TYPE_MESH_GET_MESH_IE, /* GET_DEFAULTS is superset of GET_MESHIE */ 253*4882a593Smuzhiyun }; 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun /* Card Event definition */ 256*4882a593Smuzhiyun #define MACREG_INT_CODE_TX_PPA_FREE 0 257*4882a593Smuzhiyun #define MACREG_INT_CODE_TX_DMA_DONE 1 258*4882a593Smuzhiyun #define MACREG_INT_CODE_LINK_LOST_W_SCAN 2 259*4882a593Smuzhiyun #define MACREG_INT_CODE_LINK_LOST_NO_SCAN 3 260*4882a593Smuzhiyun #define MACREG_INT_CODE_LINK_SENSED 4 261*4882a593Smuzhiyun #define MACREG_INT_CODE_CMD_FINISHED 5 262*4882a593Smuzhiyun #define MACREG_INT_CODE_MIB_CHANGED 6 263*4882a593Smuzhiyun #define MACREG_INT_CODE_INIT_DONE 7 264*4882a593Smuzhiyun #define MACREG_INT_CODE_DEAUTHENTICATED 8 265*4882a593Smuzhiyun #define MACREG_INT_CODE_DISASSOCIATED 9 266*4882a593Smuzhiyun #define MACREG_INT_CODE_PS_AWAKE 10 267*4882a593Smuzhiyun #define MACREG_INT_CODE_PS_SLEEP 11 268*4882a593Smuzhiyun #define MACREG_INT_CODE_MIC_ERR_MULTICAST 13 269*4882a593Smuzhiyun #define MACREG_INT_CODE_MIC_ERR_UNICAST 14 270*4882a593Smuzhiyun #define MACREG_INT_CODE_WM_AWAKE 15 271*4882a593Smuzhiyun #define MACREG_INT_CODE_DEEP_SLEEP_AWAKE 16 272*4882a593Smuzhiyun #define MACREG_INT_CODE_ADHOC_BCN_LOST 17 273*4882a593Smuzhiyun #define MACREG_INT_CODE_HOST_AWAKE 18 274*4882a593Smuzhiyun #define MACREG_INT_CODE_STOP_TX 19 275*4882a593Smuzhiyun #define MACREG_INT_CODE_START_TX 20 276*4882a593Smuzhiyun #define MACREG_INT_CODE_CHANNEL_SWITCH 21 277*4882a593Smuzhiyun #define MACREG_INT_CODE_MEASUREMENT_RDY 22 278*4882a593Smuzhiyun #define MACREG_INT_CODE_WMM_CHANGE 23 279*4882a593Smuzhiyun #define MACREG_INT_CODE_BG_SCAN_REPORT 24 280*4882a593Smuzhiyun #define MACREG_INT_CODE_RSSI_LOW 25 281*4882a593Smuzhiyun #define MACREG_INT_CODE_SNR_LOW 26 282*4882a593Smuzhiyun #define MACREG_INT_CODE_MAX_FAIL 27 283*4882a593Smuzhiyun #define MACREG_INT_CODE_RSSI_HIGH 28 284*4882a593Smuzhiyun #define MACREG_INT_CODE_SNR_HIGH 29 285*4882a593Smuzhiyun #define MACREG_INT_CODE_MESH_AUTO_STARTED 35 286*4882a593Smuzhiyun #define MACREG_INT_CODE_FIRMWARE_READY 48 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun 289*4882a593Smuzhiyun /* 802.11-related definitions */ 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun /* TxPD descriptor */ 292*4882a593Smuzhiyun struct txpd { 293*4882a593Smuzhiyun /* union to cope up with later FW revisions */ 294*4882a593Smuzhiyun union { 295*4882a593Smuzhiyun /* Current Tx packet status */ 296*4882a593Smuzhiyun __le32 tx_status; 297*4882a593Smuzhiyun struct { 298*4882a593Smuzhiyun /* BSS type: client, AP, etc. */ 299*4882a593Smuzhiyun u8 bss_type; 300*4882a593Smuzhiyun /* BSS number */ 301*4882a593Smuzhiyun u8 bss_num; 302*4882a593Smuzhiyun /* Reserved */ 303*4882a593Smuzhiyun __le16 reserved; 304*4882a593Smuzhiyun } bss; 305*4882a593Smuzhiyun } u; 306*4882a593Smuzhiyun /* Tx control */ 307*4882a593Smuzhiyun __le32 tx_control; 308*4882a593Smuzhiyun __le32 tx_packet_location; 309*4882a593Smuzhiyun /* Tx packet length */ 310*4882a593Smuzhiyun __le16 tx_packet_length; 311*4882a593Smuzhiyun /* First 2 byte of destination MAC address */ 312*4882a593Smuzhiyun u8 tx_dest_addr_high[2]; 313*4882a593Smuzhiyun /* Last 4 byte of destination MAC address */ 314*4882a593Smuzhiyun u8 tx_dest_addr_low[4]; 315*4882a593Smuzhiyun /* Pkt Priority */ 316*4882a593Smuzhiyun u8 priority; 317*4882a593Smuzhiyun /* Pkt Trasnit Power control */ 318*4882a593Smuzhiyun u8 powermgmt; 319*4882a593Smuzhiyun /* Amount of time the packet has been queued (units = 2ms) */ 320*4882a593Smuzhiyun u8 pktdelay_2ms; 321*4882a593Smuzhiyun /* reserved */ 322*4882a593Smuzhiyun u8 reserved1; 323*4882a593Smuzhiyun } __packed; 324*4882a593Smuzhiyun 325*4882a593Smuzhiyun /* RxPD Descriptor */ 326*4882a593Smuzhiyun struct rxpd { 327*4882a593Smuzhiyun /* union to cope up with later FW revisions */ 328*4882a593Smuzhiyun union { 329*4882a593Smuzhiyun /* Current Rx packet status */ 330*4882a593Smuzhiyun __le16 status; 331*4882a593Smuzhiyun struct { 332*4882a593Smuzhiyun /* BSS type: client, AP, etc. */ 333*4882a593Smuzhiyun u8 bss_type; 334*4882a593Smuzhiyun /* BSS number */ 335*4882a593Smuzhiyun u8 bss_num; 336*4882a593Smuzhiyun } __packed bss; 337*4882a593Smuzhiyun } __packed u; 338*4882a593Smuzhiyun 339*4882a593Smuzhiyun /* SNR */ 340*4882a593Smuzhiyun u8 snr; 341*4882a593Smuzhiyun 342*4882a593Smuzhiyun /* Tx control */ 343*4882a593Smuzhiyun u8 rx_control; 344*4882a593Smuzhiyun 345*4882a593Smuzhiyun /* Pkt length */ 346*4882a593Smuzhiyun __le16 pkt_len; 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun /* Noise Floor */ 349*4882a593Smuzhiyun u8 nf; 350*4882a593Smuzhiyun 351*4882a593Smuzhiyun /* Rx Packet Rate */ 352*4882a593Smuzhiyun u8 rx_rate; 353*4882a593Smuzhiyun 354*4882a593Smuzhiyun /* Pkt addr */ 355*4882a593Smuzhiyun __le32 pkt_ptr; 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun /* Next Rx RxPD addr */ 358*4882a593Smuzhiyun __le32 next_rxpd_ptr; 359*4882a593Smuzhiyun 360*4882a593Smuzhiyun /* Pkt Priority */ 361*4882a593Smuzhiyun u8 priority; 362*4882a593Smuzhiyun u8 reserved[3]; 363*4882a593Smuzhiyun } __packed; 364*4882a593Smuzhiyun 365*4882a593Smuzhiyun struct cmd_header { 366*4882a593Smuzhiyun __le16 command; 367*4882a593Smuzhiyun __le16 size; 368*4882a593Smuzhiyun __le16 seqnum; 369*4882a593Smuzhiyun __le16 result; 370*4882a593Smuzhiyun } __packed; 371*4882a593Smuzhiyun 372*4882a593Smuzhiyun /* Generic structure to hold all key types. */ 373*4882a593Smuzhiyun struct enc_key { 374*4882a593Smuzhiyun u16 len; 375*4882a593Smuzhiyun u16 flags; /* KEY_INFO_* from defs.h */ 376*4882a593Smuzhiyun u16 type; /* KEY_TYPE_* from defs.h */ 377*4882a593Smuzhiyun u8 key[32]; 378*4882a593Smuzhiyun }; 379*4882a593Smuzhiyun 380*4882a593Smuzhiyun /* lbs_offset_value */ 381*4882a593Smuzhiyun struct lbs_offset_value { 382*4882a593Smuzhiyun u32 offset; 383*4882a593Smuzhiyun u32 value; 384*4882a593Smuzhiyun } __packed; 385*4882a593Smuzhiyun 386*4882a593Smuzhiyun #define MAX_11D_TRIPLETS 83 387*4882a593Smuzhiyun 388*4882a593Smuzhiyun struct mrvl_ie_domain_param_set { 389*4882a593Smuzhiyun struct mrvl_ie_header header; 390*4882a593Smuzhiyun 391*4882a593Smuzhiyun u8 country_code[IEEE80211_COUNTRY_STRING_LEN]; 392*4882a593Smuzhiyun struct ieee80211_country_ie_triplet triplet[MAX_11D_TRIPLETS]; 393*4882a593Smuzhiyun } __packed; 394*4882a593Smuzhiyun 395*4882a593Smuzhiyun struct cmd_ds_802_11d_domain_info { 396*4882a593Smuzhiyun struct cmd_header hdr; 397*4882a593Smuzhiyun 398*4882a593Smuzhiyun __le16 action; 399*4882a593Smuzhiyun struct mrvl_ie_domain_param_set domain; 400*4882a593Smuzhiyun } __packed; 401*4882a593Smuzhiyun 402*4882a593Smuzhiyun /* 403*4882a593Smuzhiyun * Define data structure for CMD_GET_HW_SPEC 404*4882a593Smuzhiyun * This structure defines the response for the GET_HW_SPEC command 405*4882a593Smuzhiyun */ 406*4882a593Smuzhiyun struct cmd_ds_get_hw_spec { 407*4882a593Smuzhiyun struct cmd_header hdr; 408*4882a593Smuzhiyun 409*4882a593Smuzhiyun /* HW Interface version number */ 410*4882a593Smuzhiyun __le16 hwifversion; 411*4882a593Smuzhiyun /* HW version number */ 412*4882a593Smuzhiyun __le16 version; 413*4882a593Smuzhiyun /* Max number of TxPD FW can handle */ 414*4882a593Smuzhiyun __le16 nr_txpd; 415*4882a593Smuzhiyun /* Max no of Multicast address */ 416*4882a593Smuzhiyun __le16 nr_mcast_adr; 417*4882a593Smuzhiyun /* MAC address */ 418*4882a593Smuzhiyun u8 permanentaddr[6]; 419*4882a593Smuzhiyun 420*4882a593Smuzhiyun /* region Code */ 421*4882a593Smuzhiyun __le16 regioncode; 422*4882a593Smuzhiyun 423*4882a593Smuzhiyun /* Number of antenna used */ 424*4882a593Smuzhiyun __le16 nr_antenna; 425*4882a593Smuzhiyun 426*4882a593Smuzhiyun /* FW release number, example 0x01030304 = 2.3.4p1 */ 427*4882a593Smuzhiyun __le32 fwrelease; 428*4882a593Smuzhiyun 429*4882a593Smuzhiyun /* Base Address of TxPD queue */ 430*4882a593Smuzhiyun __le32 wcb_base; 431*4882a593Smuzhiyun /* Read Pointer of RxPd queue */ 432*4882a593Smuzhiyun __le32 rxpd_rdptr; 433*4882a593Smuzhiyun 434*4882a593Smuzhiyun /* Write Pointer of RxPd queue */ 435*4882a593Smuzhiyun __le32 rxpd_wrptr; 436*4882a593Smuzhiyun 437*4882a593Smuzhiyun /*FW/HW capability */ 438*4882a593Smuzhiyun __le32 fwcapinfo; 439*4882a593Smuzhiyun } __packed; 440*4882a593Smuzhiyun 441*4882a593Smuzhiyun struct cmd_ds_802_11_subscribe_event { 442*4882a593Smuzhiyun struct cmd_header hdr; 443*4882a593Smuzhiyun 444*4882a593Smuzhiyun __le16 action; 445*4882a593Smuzhiyun __le16 events; 446*4882a593Smuzhiyun 447*4882a593Smuzhiyun /* A TLV to the CMD_802_11_SUBSCRIBE_EVENT command can contain a 448*4882a593Smuzhiyun * number of TLVs. From the v5.1 manual, those TLVs would add up to 449*4882a593Smuzhiyun * 40 bytes. However, future firmware might add additional TLVs, so I 450*4882a593Smuzhiyun * bump this up a bit. 451*4882a593Smuzhiyun */ 452*4882a593Smuzhiyun uint8_t tlv[128]; 453*4882a593Smuzhiyun } __packed; 454*4882a593Smuzhiyun 455*4882a593Smuzhiyun /* 456*4882a593Smuzhiyun * This scan handle Country Information IE(802.11d compliant) 457*4882a593Smuzhiyun * Define data structure for CMD_802_11_SCAN 458*4882a593Smuzhiyun */ 459*4882a593Smuzhiyun struct cmd_ds_802_11_scan { 460*4882a593Smuzhiyun struct cmd_header hdr; 461*4882a593Smuzhiyun 462*4882a593Smuzhiyun uint8_t bsstype; 463*4882a593Smuzhiyun uint8_t bssid[ETH_ALEN]; 464*4882a593Smuzhiyun uint8_t tlvbuffer[]; 465*4882a593Smuzhiyun } __packed; 466*4882a593Smuzhiyun 467*4882a593Smuzhiyun struct cmd_ds_802_11_scan_rsp { 468*4882a593Smuzhiyun struct cmd_header hdr; 469*4882a593Smuzhiyun 470*4882a593Smuzhiyun __le16 bssdescriptsize; 471*4882a593Smuzhiyun uint8_t nr_sets; 472*4882a593Smuzhiyun uint8_t bssdesc_and_tlvbuffer[]; 473*4882a593Smuzhiyun } __packed; 474*4882a593Smuzhiyun 475*4882a593Smuzhiyun struct cmd_ds_802_11_get_log { 476*4882a593Smuzhiyun struct cmd_header hdr; 477*4882a593Smuzhiyun 478*4882a593Smuzhiyun __le32 mcasttxframe; 479*4882a593Smuzhiyun __le32 failed; 480*4882a593Smuzhiyun __le32 retry; 481*4882a593Smuzhiyun __le32 multiretry; 482*4882a593Smuzhiyun __le32 framedup; 483*4882a593Smuzhiyun __le32 rtssuccess; 484*4882a593Smuzhiyun __le32 rtsfailure; 485*4882a593Smuzhiyun __le32 ackfailure; 486*4882a593Smuzhiyun __le32 rxfrag; 487*4882a593Smuzhiyun __le32 mcastrxframe; 488*4882a593Smuzhiyun __le32 fcserror; 489*4882a593Smuzhiyun __le32 txframe; 490*4882a593Smuzhiyun __le32 wepundecryptable; 491*4882a593Smuzhiyun } __packed; 492*4882a593Smuzhiyun 493*4882a593Smuzhiyun struct cmd_ds_mac_control { 494*4882a593Smuzhiyun struct cmd_header hdr; 495*4882a593Smuzhiyun __le16 action; 496*4882a593Smuzhiyun u16 reserved; 497*4882a593Smuzhiyun } __packed; 498*4882a593Smuzhiyun 499*4882a593Smuzhiyun struct cmd_ds_mac_multicast_adr { 500*4882a593Smuzhiyun struct cmd_header hdr; 501*4882a593Smuzhiyun __le16 action; 502*4882a593Smuzhiyun __le16 nr_of_adrs; 503*4882a593Smuzhiyun u8 maclist[ETH_ALEN * MRVDRV_MAX_MULTICAST_LIST_SIZE]; 504*4882a593Smuzhiyun } __packed; 505*4882a593Smuzhiyun 506*4882a593Smuzhiyun struct cmd_ds_802_11_authenticate { 507*4882a593Smuzhiyun struct cmd_header hdr; 508*4882a593Smuzhiyun 509*4882a593Smuzhiyun u8 bssid[ETH_ALEN]; 510*4882a593Smuzhiyun u8 authtype; 511*4882a593Smuzhiyun u8 reserved[10]; 512*4882a593Smuzhiyun } __packed; 513*4882a593Smuzhiyun 514*4882a593Smuzhiyun struct cmd_ds_802_11_deauthenticate { 515*4882a593Smuzhiyun struct cmd_header hdr; 516*4882a593Smuzhiyun 517*4882a593Smuzhiyun u8 macaddr[ETH_ALEN]; 518*4882a593Smuzhiyun __le16 reasoncode; 519*4882a593Smuzhiyun } __packed; 520*4882a593Smuzhiyun 521*4882a593Smuzhiyun struct cmd_ds_802_11_associate { 522*4882a593Smuzhiyun struct cmd_header hdr; 523*4882a593Smuzhiyun 524*4882a593Smuzhiyun u8 bssid[6]; 525*4882a593Smuzhiyun __le16 capability; 526*4882a593Smuzhiyun __le16 listeninterval; 527*4882a593Smuzhiyun __le16 bcnperiod; 528*4882a593Smuzhiyun u8 dtimperiod; 529*4882a593Smuzhiyun u8 iebuf[512]; /* Enough for required and most optional IEs */ 530*4882a593Smuzhiyun } __packed; 531*4882a593Smuzhiyun 532*4882a593Smuzhiyun struct cmd_ds_802_11_associate_response { 533*4882a593Smuzhiyun struct cmd_header hdr; 534*4882a593Smuzhiyun 535*4882a593Smuzhiyun __le16 capability; 536*4882a593Smuzhiyun __le16 statuscode; 537*4882a593Smuzhiyun __le16 aid; 538*4882a593Smuzhiyun u8 iebuf[512]; 539*4882a593Smuzhiyun } __packed; 540*4882a593Smuzhiyun 541*4882a593Smuzhiyun struct cmd_ds_802_11_set_wep { 542*4882a593Smuzhiyun struct cmd_header hdr; 543*4882a593Smuzhiyun 544*4882a593Smuzhiyun /* ACT_ADD, ACT_REMOVE or ACT_ENABLE */ 545*4882a593Smuzhiyun __le16 action; 546*4882a593Smuzhiyun 547*4882a593Smuzhiyun /* key Index selected for Tx */ 548*4882a593Smuzhiyun __le16 keyindex; 549*4882a593Smuzhiyun 550*4882a593Smuzhiyun /* 40, 128bit or TXWEP */ 551*4882a593Smuzhiyun uint8_t keytype[4]; 552*4882a593Smuzhiyun uint8_t keymaterial[4][16]; 553*4882a593Smuzhiyun } __packed; 554*4882a593Smuzhiyun 555*4882a593Smuzhiyun struct cmd_ds_802_11_snmp_mib { 556*4882a593Smuzhiyun struct cmd_header hdr; 557*4882a593Smuzhiyun 558*4882a593Smuzhiyun __le16 action; 559*4882a593Smuzhiyun __le16 oid; 560*4882a593Smuzhiyun __le16 bufsize; 561*4882a593Smuzhiyun u8 value[128]; 562*4882a593Smuzhiyun } __packed; 563*4882a593Smuzhiyun 564*4882a593Smuzhiyun struct cmd_ds_reg_access { 565*4882a593Smuzhiyun struct cmd_header hdr; 566*4882a593Smuzhiyun 567*4882a593Smuzhiyun __le16 action; 568*4882a593Smuzhiyun __le16 offset; 569*4882a593Smuzhiyun union { 570*4882a593Smuzhiyun u8 bbp_rf; /* for BBP and RF registers */ 571*4882a593Smuzhiyun __le32 mac; /* for MAC registers */ 572*4882a593Smuzhiyun } value; 573*4882a593Smuzhiyun } __packed; 574*4882a593Smuzhiyun 575*4882a593Smuzhiyun struct cmd_ds_802_11_radio_control { 576*4882a593Smuzhiyun struct cmd_header hdr; 577*4882a593Smuzhiyun 578*4882a593Smuzhiyun __le16 action; 579*4882a593Smuzhiyun __le16 control; 580*4882a593Smuzhiyun } __packed; 581*4882a593Smuzhiyun 582*4882a593Smuzhiyun struct cmd_ds_802_11_beacon_control { 583*4882a593Smuzhiyun struct cmd_header hdr; 584*4882a593Smuzhiyun 585*4882a593Smuzhiyun __le16 action; 586*4882a593Smuzhiyun __le16 beacon_enable; 587*4882a593Smuzhiyun __le16 beacon_period; 588*4882a593Smuzhiyun } __packed; 589*4882a593Smuzhiyun 590*4882a593Smuzhiyun struct cmd_ds_802_11_sleep_params { 591*4882a593Smuzhiyun struct cmd_header hdr; 592*4882a593Smuzhiyun 593*4882a593Smuzhiyun /* ACT_GET/ACT_SET */ 594*4882a593Smuzhiyun __le16 action; 595*4882a593Smuzhiyun 596*4882a593Smuzhiyun /* Sleep clock error in ppm */ 597*4882a593Smuzhiyun __le16 error; 598*4882a593Smuzhiyun 599*4882a593Smuzhiyun /* Wakeup offset in usec */ 600*4882a593Smuzhiyun __le16 offset; 601*4882a593Smuzhiyun 602*4882a593Smuzhiyun /* Clock stabilization time in usec */ 603*4882a593Smuzhiyun __le16 stabletime; 604*4882a593Smuzhiyun 605*4882a593Smuzhiyun /* control periodic calibration */ 606*4882a593Smuzhiyun uint8_t calcontrol; 607*4882a593Smuzhiyun 608*4882a593Smuzhiyun /* control the use of external sleep clock */ 609*4882a593Smuzhiyun uint8_t externalsleepclk; 610*4882a593Smuzhiyun 611*4882a593Smuzhiyun /* reserved field, should be set to zero */ 612*4882a593Smuzhiyun __le16 reserved; 613*4882a593Smuzhiyun } __packed; 614*4882a593Smuzhiyun 615*4882a593Smuzhiyun struct cmd_ds_802_11_rf_channel { 616*4882a593Smuzhiyun struct cmd_header hdr; 617*4882a593Smuzhiyun 618*4882a593Smuzhiyun __le16 action; 619*4882a593Smuzhiyun __le16 channel; 620*4882a593Smuzhiyun __le16 rftype; /* unused */ 621*4882a593Smuzhiyun __le16 reserved; /* unused */ 622*4882a593Smuzhiyun u8 channellist[32]; /* unused */ 623*4882a593Smuzhiyun } __packed; 624*4882a593Smuzhiyun 625*4882a593Smuzhiyun struct cmd_ds_802_11_rssi { 626*4882a593Smuzhiyun struct cmd_header hdr; 627*4882a593Smuzhiyun 628*4882a593Smuzhiyun /* 629*4882a593Smuzhiyun * request: number of beacons (N) to average the SNR and NF over 630*4882a593Smuzhiyun * response: SNR of most recent beacon 631*4882a593Smuzhiyun */ 632*4882a593Smuzhiyun __le16 n_or_snr; 633*4882a593Smuzhiyun 634*4882a593Smuzhiyun /* 635*4882a593Smuzhiyun * The following fields are only set in the response. 636*4882a593Smuzhiyun * In the request these are reserved and should be set to 0. 637*4882a593Smuzhiyun */ 638*4882a593Smuzhiyun __le16 nf; /* most recent beacon noise floor */ 639*4882a593Smuzhiyun __le16 avg_snr; /* average SNR weighted by N from request */ 640*4882a593Smuzhiyun __le16 avg_nf; /* average noise floor weighted by N from request */ 641*4882a593Smuzhiyun } __packed; 642*4882a593Smuzhiyun 643*4882a593Smuzhiyun struct cmd_ds_802_11_mac_address { 644*4882a593Smuzhiyun struct cmd_header hdr; 645*4882a593Smuzhiyun 646*4882a593Smuzhiyun __le16 action; 647*4882a593Smuzhiyun u8 macadd[ETH_ALEN]; 648*4882a593Smuzhiyun } __packed; 649*4882a593Smuzhiyun 650*4882a593Smuzhiyun struct cmd_ds_802_11_rf_tx_power { 651*4882a593Smuzhiyun struct cmd_header hdr; 652*4882a593Smuzhiyun 653*4882a593Smuzhiyun __le16 action; 654*4882a593Smuzhiyun __le16 curlevel; 655*4882a593Smuzhiyun s8 maxlevel; 656*4882a593Smuzhiyun s8 minlevel; 657*4882a593Smuzhiyun } __packed; 658*4882a593Smuzhiyun 659*4882a593Smuzhiyun /* MONITOR_MODE only exists in OLPC v5 firmware */ 660*4882a593Smuzhiyun struct cmd_ds_802_11_monitor_mode { 661*4882a593Smuzhiyun struct cmd_header hdr; 662*4882a593Smuzhiyun 663*4882a593Smuzhiyun __le16 action; 664*4882a593Smuzhiyun __le16 mode; 665*4882a593Smuzhiyun } __packed; 666*4882a593Smuzhiyun 667*4882a593Smuzhiyun struct cmd_ds_set_boot2_ver { 668*4882a593Smuzhiyun struct cmd_header hdr; 669*4882a593Smuzhiyun 670*4882a593Smuzhiyun __le16 action; 671*4882a593Smuzhiyun __le16 version; 672*4882a593Smuzhiyun } __packed; 673*4882a593Smuzhiyun 674*4882a593Smuzhiyun struct cmd_ds_802_11_fw_wake_method { 675*4882a593Smuzhiyun struct cmd_header hdr; 676*4882a593Smuzhiyun 677*4882a593Smuzhiyun __le16 action; 678*4882a593Smuzhiyun __le16 method; 679*4882a593Smuzhiyun } __packed; 680*4882a593Smuzhiyun 681*4882a593Smuzhiyun struct cmd_ds_802_11_ps_mode { 682*4882a593Smuzhiyun struct cmd_header hdr; 683*4882a593Smuzhiyun 684*4882a593Smuzhiyun __le16 action; 685*4882a593Smuzhiyun 686*4882a593Smuzhiyun /* 687*4882a593Smuzhiyun * Interval for keepalive in PS mode: 688*4882a593Smuzhiyun * 0x0000 = don't change 689*4882a593Smuzhiyun * 0x001E = firmware default 690*4882a593Smuzhiyun * 0xFFFF = disable 691*4882a593Smuzhiyun */ 692*4882a593Smuzhiyun __le16 nullpktinterval; 693*4882a593Smuzhiyun 694*4882a593Smuzhiyun /* 695*4882a593Smuzhiyun * Number of DTIM intervals to wake up for: 696*4882a593Smuzhiyun * 0 = don't change 697*4882a593Smuzhiyun * 1 = firmware default 698*4882a593Smuzhiyun * 5 = max 699*4882a593Smuzhiyun */ 700*4882a593Smuzhiyun __le16 multipledtim; 701*4882a593Smuzhiyun 702*4882a593Smuzhiyun __le16 reserved; 703*4882a593Smuzhiyun __le16 locallisteninterval; 704*4882a593Smuzhiyun 705*4882a593Smuzhiyun /* 706*4882a593Smuzhiyun * AdHoc awake period (FW v9+ only): 707*4882a593Smuzhiyun * 0 = don't change 708*4882a593Smuzhiyun * 1 = always awake (IEEE standard behavior) 709*4882a593Smuzhiyun * 2 - 31 = sleep for (n - 1) periods and awake for 1 period 710*4882a593Smuzhiyun * 32 - 254 = invalid 711*4882a593Smuzhiyun * 255 = sleep at each ATIM 712*4882a593Smuzhiyun */ 713*4882a593Smuzhiyun __le16 adhoc_awake_period; 714*4882a593Smuzhiyun } __packed; 715*4882a593Smuzhiyun 716*4882a593Smuzhiyun struct cmd_confirm_sleep { 717*4882a593Smuzhiyun struct cmd_header hdr; 718*4882a593Smuzhiyun 719*4882a593Smuzhiyun __le16 action; 720*4882a593Smuzhiyun __le16 nullpktinterval; 721*4882a593Smuzhiyun __le16 multipledtim; 722*4882a593Smuzhiyun __le16 reserved; 723*4882a593Smuzhiyun __le16 locallisteninterval; 724*4882a593Smuzhiyun } __packed; 725*4882a593Smuzhiyun 726*4882a593Smuzhiyun struct cmd_ds_802_11_data_rate { 727*4882a593Smuzhiyun struct cmd_header hdr; 728*4882a593Smuzhiyun 729*4882a593Smuzhiyun __le16 action; 730*4882a593Smuzhiyun __le16 reserved; 731*4882a593Smuzhiyun u8 rates[MAX_RATES]; 732*4882a593Smuzhiyun } __packed; 733*4882a593Smuzhiyun 734*4882a593Smuzhiyun struct cmd_ds_802_11_rate_adapt_rateset { 735*4882a593Smuzhiyun struct cmd_header hdr; 736*4882a593Smuzhiyun __le16 action; 737*4882a593Smuzhiyun __le16 enablehwauto; 738*4882a593Smuzhiyun __le16 bitmap; 739*4882a593Smuzhiyun } __packed; 740*4882a593Smuzhiyun 741*4882a593Smuzhiyun struct cmd_ds_802_11_ad_hoc_start { 742*4882a593Smuzhiyun struct cmd_header hdr; 743*4882a593Smuzhiyun 744*4882a593Smuzhiyun u8 ssid[IEEE80211_MAX_SSID_LEN]; 745*4882a593Smuzhiyun u8 bsstype; 746*4882a593Smuzhiyun __le16 beaconperiod; 747*4882a593Smuzhiyun u8 dtimperiod; /* Reserved on v9 and later */ 748*4882a593Smuzhiyun struct ieee_ie_ibss_param_set ibss; 749*4882a593Smuzhiyun u8 reserved1[4]; 750*4882a593Smuzhiyun struct ieee_ie_ds_param_set ds; 751*4882a593Smuzhiyun u8 reserved2[4]; 752*4882a593Smuzhiyun __le16 probedelay; /* Reserved on v9 and later */ 753*4882a593Smuzhiyun __le16 capability; 754*4882a593Smuzhiyun u8 rates[MAX_RATES]; 755*4882a593Smuzhiyun u8 tlv_memory_size_pad[100]; 756*4882a593Smuzhiyun } __packed; 757*4882a593Smuzhiyun 758*4882a593Smuzhiyun struct cmd_ds_802_11_ad_hoc_result { 759*4882a593Smuzhiyun struct cmd_header hdr; 760*4882a593Smuzhiyun 761*4882a593Smuzhiyun u8 pad[3]; 762*4882a593Smuzhiyun u8 bssid[ETH_ALEN]; 763*4882a593Smuzhiyun } __packed; 764*4882a593Smuzhiyun 765*4882a593Smuzhiyun struct adhoc_bssdesc { 766*4882a593Smuzhiyun u8 bssid[ETH_ALEN]; 767*4882a593Smuzhiyun u8 ssid[IEEE80211_MAX_SSID_LEN]; 768*4882a593Smuzhiyun u8 type; 769*4882a593Smuzhiyun __le16 beaconperiod; 770*4882a593Smuzhiyun u8 dtimperiod; 771*4882a593Smuzhiyun __le64 timestamp; 772*4882a593Smuzhiyun __le64 localtime; 773*4882a593Smuzhiyun struct ieee_ie_ds_param_set ds; 774*4882a593Smuzhiyun u8 reserved1[4]; 775*4882a593Smuzhiyun struct ieee_ie_ibss_param_set ibss; 776*4882a593Smuzhiyun u8 reserved2[4]; 777*4882a593Smuzhiyun __le16 capability; 778*4882a593Smuzhiyun u8 rates[MAX_RATES]; 779*4882a593Smuzhiyun 780*4882a593Smuzhiyun /* 781*4882a593Smuzhiyun * DO NOT ADD ANY FIELDS TO THIS STRUCTURE. It is used below in the 782*4882a593Smuzhiyun * Adhoc join command and will cause a binary layout mismatch with 783*4882a593Smuzhiyun * the firmware 784*4882a593Smuzhiyun */ 785*4882a593Smuzhiyun } __packed; 786*4882a593Smuzhiyun 787*4882a593Smuzhiyun struct cmd_ds_802_11_ad_hoc_join { 788*4882a593Smuzhiyun struct cmd_header hdr; 789*4882a593Smuzhiyun 790*4882a593Smuzhiyun struct adhoc_bssdesc bss; 791*4882a593Smuzhiyun __le16 failtimeout; /* Reserved on v9 and later */ 792*4882a593Smuzhiyun __le16 probedelay; /* Reserved on v9 and later */ 793*4882a593Smuzhiyun } __packed; 794*4882a593Smuzhiyun 795*4882a593Smuzhiyun struct cmd_ds_802_11_ad_hoc_stop { 796*4882a593Smuzhiyun struct cmd_header hdr; 797*4882a593Smuzhiyun } __packed; 798*4882a593Smuzhiyun 799*4882a593Smuzhiyun struct cmd_ds_802_11_enable_rsn { 800*4882a593Smuzhiyun struct cmd_header hdr; 801*4882a593Smuzhiyun 802*4882a593Smuzhiyun __le16 action; 803*4882a593Smuzhiyun __le16 enable; 804*4882a593Smuzhiyun } __packed; 805*4882a593Smuzhiyun 806*4882a593Smuzhiyun struct MrvlIEtype_keyParamSet { 807*4882a593Smuzhiyun /* type ID */ 808*4882a593Smuzhiyun __le16 type; 809*4882a593Smuzhiyun 810*4882a593Smuzhiyun /* length of Payload */ 811*4882a593Smuzhiyun __le16 length; 812*4882a593Smuzhiyun 813*4882a593Smuzhiyun /* type of key: WEP=0, TKIP=1, AES=2 */ 814*4882a593Smuzhiyun __le16 keytypeid; 815*4882a593Smuzhiyun 816*4882a593Smuzhiyun /* key control Info specific to a keytypeid */ 817*4882a593Smuzhiyun __le16 keyinfo; 818*4882a593Smuzhiyun 819*4882a593Smuzhiyun /* length of key */ 820*4882a593Smuzhiyun __le16 keylen; 821*4882a593Smuzhiyun 822*4882a593Smuzhiyun /* key material of size keylen */ 823*4882a593Smuzhiyun u8 key[32]; 824*4882a593Smuzhiyun } __packed; 825*4882a593Smuzhiyun 826*4882a593Smuzhiyun #define MAX_WOL_RULES 16 827*4882a593Smuzhiyun 828*4882a593Smuzhiyun struct host_wol_rule { 829*4882a593Smuzhiyun uint8_t rule_no; 830*4882a593Smuzhiyun uint8_t rule_ops; 831*4882a593Smuzhiyun __le16 sig_offset; 832*4882a593Smuzhiyun __le16 sig_length; 833*4882a593Smuzhiyun __le16 reserve; 834*4882a593Smuzhiyun __be32 sig_mask; 835*4882a593Smuzhiyun __be32 signature; 836*4882a593Smuzhiyun } __packed; 837*4882a593Smuzhiyun 838*4882a593Smuzhiyun struct wol_config { 839*4882a593Smuzhiyun uint8_t action; 840*4882a593Smuzhiyun uint8_t pattern; 841*4882a593Smuzhiyun uint8_t no_rules_in_cmd; 842*4882a593Smuzhiyun uint8_t result; 843*4882a593Smuzhiyun struct host_wol_rule rule[MAX_WOL_RULES]; 844*4882a593Smuzhiyun } __packed; 845*4882a593Smuzhiyun 846*4882a593Smuzhiyun struct cmd_ds_host_sleep { 847*4882a593Smuzhiyun struct cmd_header hdr; 848*4882a593Smuzhiyun __le32 criteria; 849*4882a593Smuzhiyun uint8_t gpio; 850*4882a593Smuzhiyun uint16_t gap; 851*4882a593Smuzhiyun struct wol_config wol_conf; 852*4882a593Smuzhiyun } __packed; 853*4882a593Smuzhiyun 854*4882a593Smuzhiyun 855*4882a593Smuzhiyun 856*4882a593Smuzhiyun struct cmd_ds_802_11_key_material { 857*4882a593Smuzhiyun struct cmd_header hdr; 858*4882a593Smuzhiyun 859*4882a593Smuzhiyun __le16 action; 860*4882a593Smuzhiyun struct MrvlIEtype_keyParamSet keyParamSet[2]; 861*4882a593Smuzhiyun } __packed; 862*4882a593Smuzhiyun 863*4882a593Smuzhiyun struct cmd_ds_802_11_eeprom_access { 864*4882a593Smuzhiyun struct cmd_header hdr; 865*4882a593Smuzhiyun __le16 action; 866*4882a593Smuzhiyun __le16 offset; 867*4882a593Smuzhiyun __le16 len; 868*4882a593Smuzhiyun /* firmware says it returns a maximum of 20 bytes */ 869*4882a593Smuzhiyun #define LBS_EEPROM_READ_LEN 20 870*4882a593Smuzhiyun u8 value[LBS_EEPROM_READ_LEN]; 871*4882a593Smuzhiyun } __packed; 872*4882a593Smuzhiyun 873*4882a593Smuzhiyun struct cmd_ds_802_11_tpc_cfg { 874*4882a593Smuzhiyun struct cmd_header hdr; 875*4882a593Smuzhiyun 876*4882a593Smuzhiyun __le16 action; 877*4882a593Smuzhiyun uint8_t enable; 878*4882a593Smuzhiyun int8_t P0; 879*4882a593Smuzhiyun int8_t P1; 880*4882a593Smuzhiyun int8_t P2; 881*4882a593Smuzhiyun uint8_t usesnr; 882*4882a593Smuzhiyun } __packed; 883*4882a593Smuzhiyun 884*4882a593Smuzhiyun 885*4882a593Smuzhiyun struct cmd_ds_802_11_pa_cfg { 886*4882a593Smuzhiyun struct cmd_header hdr; 887*4882a593Smuzhiyun 888*4882a593Smuzhiyun __le16 action; 889*4882a593Smuzhiyun uint8_t enable; 890*4882a593Smuzhiyun int8_t P0; 891*4882a593Smuzhiyun int8_t P1; 892*4882a593Smuzhiyun int8_t P2; 893*4882a593Smuzhiyun } __packed; 894*4882a593Smuzhiyun 895*4882a593Smuzhiyun 896*4882a593Smuzhiyun struct cmd_ds_802_11_led_ctrl { 897*4882a593Smuzhiyun struct cmd_header hdr; 898*4882a593Smuzhiyun 899*4882a593Smuzhiyun __le16 action; 900*4882a593Smuzhiyun __le16 numled; 901*4882a593Smuzhiyun u8 data[256]; 902*4882a593Smuzhiyun } __packed; 903*4882a593Smuzhiyun 904*4882a593Smuzhiyun /* Automatic Frequency Control */ 905*4882a593Smuzhiyun struct cmd_ds_802_11_afc { 906*4882a593Smuzhiyun struct cmd_header hdr; 907*4882a593Smuzhiyun 908*4882a593Smuzhiyun __le16 afc_auto; 909*4882a593Smuzhiyun union { 910*4882a593Smuzhiyun struct { 911*4882a593Smuzhiyun __le16 threshold; 912*4882a593Smuzhiyun __le16 period; 913*4882a593Smuzhiyun }; 914*4882a593Smuzhiyun struct { 915*4882a593Smuzhiyun __le16 timing_offset; /* signed */ 916*4882a593Smuzhiyun __le16 carrier_offset; /* signed */ 917*4882a593Smuzhiyun }; 918*4882a593Smuzhiyun }; 919*4882a593Smuzhiyun } __packed; 920*4882a593Smuzhiyun 921*4882a593Smuzhiyun struct cmd_tx_rate_query { 922*4882a593Smuzhiyun __le16 txrate; 923*4882a593Smuzhiyun } __packed; 924*4882a593Smuzhiyun 925*4882a593Smuzhiyun struct cmd_ds_get_tsf { 926*4882a593Smuzhiyun __le64 tsfvalue; 927*4882a593Smuzhiyun } __packed; 928*4882a593Smuzhiyun 929*4882a593Smuzhiyun struct cmd_ds_bt_access { 930*4882a593Smuzhiyun struct cmd_header hdr; 931*4882a593Smuzhiyun 932*4882a593Smuzhiyun __le16 action; 933*4882a593Smuzhiyun __le32 id; 934*4882a593Smuzhiyun u8 addr1[ETH_ALEN]; 935*4882a593Smuzhiyun u8 addr2[ETH_ALEN]; 936*4882a593Smuzhiyun } __packed; 937*4882a593Smuzhiyun 938*4882a593Smuzhiyun struct cmd_ds_fwt_access { 939*4882a593Smuzhiyun struct cmd_header hdr; 940*4882a593Smuzhiyun 941*4882a593Smuzhiyun __le16 action; 942*4882a593Smuzhiyun __le32 id; 943*4882a593Smuzhiyun u8 valid; 944*4882a593Smuzhiyun u8 da[ETH_ALEN]; 945*4882a593Smuzhiyun u8 dir; 946*4882a593Smuzhiyun u8 ra[ETH_ALEN]; 947*4882a593Smuzhiyun __le32 ssn; 948*4882a593Smuzhiyun __le32 dsn; 949*4882a593Smuzhiyun __le32 metric; 950*4882a593Smuzhiyun u8 rate; 951*4882a593Smuzhiyun u8 hopcount; 952*4882a593Smuzhiyun u8 ttl; 953*4882a593Smuzhiyun __le32 expiration; 954*4882a593Smuzhiyun u8 sleepmode; 955*4882a593Smuzhiyun __le32 snr; 956*4882a593Smuzhiyun __le32 references; 957*4882a593Smuzhiyun u8 prec[ETH_ALEN]; 958*4882a593Smuzhiyun } __packed; 959*4882a593Smuzhiyun 960*4882a593Smuzhiyun struct cmd_ds_mesh_config { 961*4882a593Smuzhiyun struct cmd_header hdr; 962*4882a593Smuzhiyun 963*4882a593Smuzhiyun __le16 action; 964*4882a593Smuzhiyun __le16 channel; 965*4882a593Smuzhiyun __le16 type; 966*4882a593Smuzhiyun __le16 length; 967*4882a593Smuzhiyun u8 data[128]; /* last position reserved */ 968*4882a593Smuzhiyun } __packed; 969*4882a593Smuzhiyun 970*4882a593Smuzhiyun struct cmd_ds_mesh_access { 971*4882a593Smuzhiyun struct cmd_header hdr; 972*4882a593Smuzhiyun 973*4882a593Smuzhiyun __le16 action; 974*4882a593Smuzhiyun __le32 data[32]; /* last position reserved */ 975*4882a593Smuzhiyun } __packed; 976*4882a593Smuzhiyun 977*4882a593Smuzhiyun /* Number of stats counters returned by the firmware */ 978*4882a593Smuzhiyun #define MESH_STATS_NUM 8 979*4882a593Smuzhiyun #endif 980