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