mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 08:26:29 +00:00 
			
		
		
		
	 0bb6408777
			
		
	
	
		0bb6408777
		
	
	
	
	
		
			
			Powersave looks like it got broken at some point but we'll fix that up when the command submission stuff is more understandable, which this series helps to do. That said, this patch should not further break powersave. Signed-off-by: Dan Williams <dcbw@redhat.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
		
			
				
	
	
		
			973 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			973 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**
 | |
|   * This file function prototypes, data structure
 | |
|   * and  definitions for all the host/station commands
 | |
|   */
 | |
| 
 | |
| #ifndef _LBS_HOST_H_
 | |
| #define _LBS_HOST_H_
 | |
| 
 | |
| #include "types.h"
 | |
| #include "defs.h"
 | |
| 
 | |
| #define DEFAULT_AD_HOC_CHANNEL                  6
 | |
| 
 | |
| #define CMD_OPTION_WAITFORRSP                   0x0002
 | |
| 
 | |
| /** Host command IDs */
 | |
| 
 | |
| /* Return command are almost always the same as the host command, but with
 | |
|  * bit 15 set high.  There are a few exceptions, though...
 | |
|  */
 | |
| #define CMD_RET(cmd)                            (0x8000 | cmd)
 | |
| 
 | |
| /* Return command convention exceptions: */
 | |
| #define CMD_RET_802_11_ASSOCIATE                0x8012
 | |
| 
 | |
| /* Command codes */
 | |
| #define CMD_GET_HW_SPEC                         0x0003
 | |
| #define CMD_EEPROM_UPDATE                       0x0004
 | |
| #define CMD_802_11_RESET                        0x0005
 | |
| #define CMD_802_11_SCAN                         0x0006
 | |
| #define CMD_802_11_GET_LOG                      0x000b
 | |
| #define CMD_MAC_MULTICAST_ADR                   0x0010
 | |
| #define CMD_802_11_AUTHENTICATE                 0x0011
 | |
| #define CMD_802_11_EEPROM_ACCESS                0x0059
 | |
| #define CMD_802_11_ASSOCIATE                    0x0050
 | |
| #define CMD_802_11_SET_WEP                      0x0013
 | |
| #define CMD_802_11_GET_STAT                     0x0014
 | |
| #define CMD_802_3_GET_STAT                      0x0015
 | |
| #define CMD_802_11_SNMP_MIB                     0x0016
 | |
| #define CMD_MAC_REG_MAP                         0x0017
 | |
| #define CMD_BBP_REG_MAP                         0x0018
 | |
| #define CMD_MAC_REG_ACCESS                      0x0019
 | |
| #define CMD_BBP_REG_ACCESS                      0x001a
 | |
| #define CMD_RF_REG_ACCESS                       0x001b
 | |
| #define CMD_802_11_RADIO_CONTROL                0x001c
 | |
| #define CMD_802_11_RF_CHANNEL                   0x001d
 | |
| #define CMD_802_11_RF_TX_POWER                  0x001e
 | |
| #define CMD_802_11_RSSI                         0x001f
 | |
| #define CMD_802_11_RF_ANTENNA                   0x0020
 | |
| #define CMD_802_11_PS_MODE                      0x0021
 | |
| #define CMD_802_11_DATA_RATE                    0x0022
 | |
| #define CMD_RF_REG_MAP                          0x0023
 | |
| #define CMD_802_11_DEAUTHENTICATE               0x0024
 | |
| #define CMD_802_11_REASSOCIATE                  0x0025
 | |
| #define CMD_MAC_CONTROL                         0x0028
 | |
| #define CMD_802_11_AD_HOC_START                 0x002b
 | |
| #define CMD_802_11_AD_HOC_JOIN                  0x002c
 | |
| #define CMD_802_11_QUERY_TKIP_REPLY_CNTRS       0x002e
 | |
| #define CMD_802_11_ENABLE_RSN                   0x002f
 | |
| #define CMD_802_11_SET_AFC                      0x003c
 | |
| #define CMD_802_11_GET_AFC                      0x003d
 | |
| #define CMD_802_11_DEEP_SLEEP                   0x003e
 | |
| #define CMD_802_11_AD_HOC_STOP                  0x0040
 | |
| #define CMD_802_11_HOST_SLEEP_CFG               0x0043
 | |
| #define CMD_802_11_WAKEUP_CONFIRM               0x0044
 | |
| #define CMD_802_11_HOST_SLEEP_ACTIVATE          0x0045
 | |
| #define CMD_802_11_BEACON_STOP                  0x0049
 | |
| #define CMD_802_11_MAC_ADDRESS                  0x004d
 | |
| #define CMD_802_11_LED_GPIO_CTRL                0x004e
 | |
| #define CMD_802_11_EEPROM_ACCESS                0x0059
 | |
| #define CMD_802_11_BAND_CONFIG                  0x0058
 | |
| #define CMD_GSPI_BUS_CONFIG                     0x005a
 | |
| #define CMD_802_11D_DOMAIN_INFO                 0x005b
 | |
| #define CMD_802_11_KEY_MATERIAL                 0x005e
 | |
| #define CMD_802_11_SLEEP_PARAMS                 0x0066
 | |
| #define CMD_802_11_INACTIVITY_TIMEOUT           0x0067
 | |
| #define CMD_802_11_SLEEP_PERIOD                 0x0068
 | |
| #define CMD_802_11_TPC_CFG                      0x0072
 | |
| #define CMD_802_11_PA_CFG                       0x0073
 | |
| #define CMD_802_11_FW_WAKE_METHOD               0x0074
 | |
| #define CMD_802_11_SUBSCRIBE_EVENT              0x0075
 | |
| #define CMD_802_11_RATE_ADAPT_RATESET           0x0076
 | |
| #define CMD_802_11_TX_RATE_QUERY                0x007f
 | |
| #define CMD_GET_TSF                             0x0080
 | |
| #define CMD_BT_ACCESS                           0x0087
 | |
| #define CMD_FWT_ACCESS                          0x0095
 | |
| #define CMD_802_11_MONITOR_MODE                 0x0098
 | |
| #define CMD_MESH_ACCESS                         0x009b
 | |
| #define CMD_MESH_CONFIG_OLD                     0x00a3
 | |
| #define CMD_MESH_CONFIG                         0x00ac
 | |
| #define CMD_SET_BOOT2_VER                       0x00a5
 | |
| #define CMD_FUNC_INIT                           0x00a9
 | |
| #define CMD_FUNC_SHUTDOWN                       0x00aa
 | |
| #define CMD_802_11_BEACON_CTRL                  0x00b0
 | |
| 
 | |
| /* For the IEEE Power Save */
 | |
| #define PS_MODE_ACTION_ENTER_PS                 0x0030
 | |
| #define PS_MODE_ACTION_EXIT_PS                  0x0031
 | |
| #define PS_MODE_ACTION_SLEEP_CONFIRMED          0x0034
 | |
| 
 | |
| #define CMD_ENABLE_RSN                          0x0001
 | |
| #define CMD_DISABLE_RSN                         0x0000
 | |
| 
 | |
| #define CMD_ACT_GET                             0x0000
 | |
| #define CMD_ACT_SET                             0x0001
 | |
| 
 | |
| /* Define action or option for CMD_802_11_SET_WEP */
 | |
| #define CMD_ACT_ADD                             0x0002
 | |
| #define CMD_ACT_REMOVE                          0x0004
 | |
| 
 | |
| #define CMD_TYPE_WEP_40_BIT                     0x01
 | |
| #define CMD_TYPE_WEP_104_BIT                    0x02
 | |
| 
 | |
| #define CMD_NUM_OF_WEP_KEYS                     4
 | |
| 
 | |
| #define CMD_WEP_KEY_INDEX_MASK                  0x3fff
 | |
| 
 | |
| /* Define action or option for CMD_802_11_SCAN */
 | |
| #define CMD_BSS_TYPE_BSS                        0x0001
 | |
| #define CMD_BSS_TYPE_IBSS                       0x0002
 | |
| #define CMD_BSS_TYPE_ANY                        0x0003
 | |
| 
 | |
| /* Define action or option for CMD_802_11_SCAN */
 | |
| #define CMD_SCAN_TYPE_ACTIVE                    0x0000
 | |
| #define CMD_SCAN_TYPE_PASSIVE                   0x0001
 | |
| 
 | |
| #define CMD_SCAN_RADIO_TYPE_BG                  0
 | |
| 
 | |
| #define CMD_SCAN_PROBE_DELAY_TIME               0
 | |
| 
 | |
| /* Define action or option for CMD_MAC_CONTROL */
 | |
| #define CMD_ACT_MAC_RX_ON                       0x0001
 | |
| #define CMD_ACT_MAC_TX_ON                       0x0002
 | |
| #define CMD_ACT_MAC_LOOPBACK_ON                 0x0004
 | |
| #define CMD_ACT_MAC_WEP_ENABLE                  0x0008
 | |
| #define CMD_ACT_MAC_INT_ENABLE                  0x0010
 | |
| #define CMD_ACT_MAC_MULTICAST_ENABLE            0x0020
 | |
| #define CMD_ACT_MAC_BROADCAST_ENABLE            0x0040
 | |
| #define CMD_ACT_MAC_PROMISCUOUS_ENABLE          0x0080
 | |
| #define CMD_ACT_MAC_ALL_MULTICAST_ENABLE        0x0100
 | |
| #define CMD_ACT_MAC_STRICT_PROTECTION_ENABLE    0x0400
 | |
| 
 | |
| /* Event flags for CMD_802_11_SUBSCRIBE_EVENT */
 | |
| #define CMD_SUBSCRIBE_RSSI_LOW                  0x0001
 | |
| #define CMD_SUBSCRIBE_SNR_LOW                   0x0002
 | |
| #define CMD_SUBSCRIBE_FAILCOUNT                 0x0004
 | |
| #define CMD_SUBSCRIBE_BCNMISS                   0x0008
 | |
| #define CMD_SUBSCRIBE_RSSI_HIGH                 0x0010
 | |
| #define CMD_SUBSCRIBE_SNR_HIGH                  0x0020
 | |
| 
 | |
| #define RADIO_PREAMBLE_LONG                     0x00
 | |
| #define RADIO_PREAMBLE_SHORT                    0x02
 | |
| #define RADIO_PREAMBLE_AUTO                     0x04
 | |
| 
 | |
| /* Define action or option for CMD_802_11_RF_CHANNEL */
 | |
| #define CMD_OPT_802_11_RF_CHANNEL_GET           0x00
 | |
| #define CMD_OPT_802_11_RF_CHANNEL_SET           0x01
 | |
| 
 | |
| /* Define action or option for CMD_802_11_DATA_RATE */
 | |
| #define CMD_ACT_SET_TX_AUTO                     0x0000
 | |
| #define CMD_ACT_SET_TX_FIX_RATE                 0x0001
 | |
| #define CMD_ACT_GET_TX_RATE                     0x0002
 | |
| 
 | |
| /* Options for CMD_802_11_FW_WAKE_METHOD */
 | |
| #define CMD_WAKE_METHOD_UNCHANGED               0x0000
 | |
| #define CMD_WAKE_METHOD_COMMAND_INT             0x0001
 | |
| #define CMD_WAKE_METHOD_GPIO                    0x0002
 | |
| 
 | |
| /* Object IDs for CMD_802_11_SNMP_MIB */
 | |
| #define SNMP_MIB_OID_BSS_TYPE                   0x0000
 | |
| #define SNMP_MIB_OID_OP_RATE_SET                0x0001
 | |
| #define SNMP_MIB_OID_BEACON_PERIOD              0x0002  /* Reserved on v9+ */
 | |
| #define SNMP_MIB_OID_DTIM_PERIOD                0x0003  /* Reserved on v9+ */
 | |
| #define SNMP_MIB_OID_ASSOC_TIMEOUT              0x0004  /* Reserved on v9+ */
 | |
| #define SNMP_MIB_OID_RTS_THRESHOLD              0x0005
 | |
| #define SNMP_MIB_OID_SHORT_RETRY_LIMIT          0x0006
 | |
| #define SNMP_MIB_OID_LONG_RETRY_LIMIT           0x0007
 | |
| #define SNMP_MIB_OID_FRAG_THRESHOLD             0x0008
 | |
| #define SNMP_MIB_OID_11D_ENABLE                 0x0009
 | |
| #define SNMP_MIB_OID_11H_ENABLE                 0x000A
 | |
| 
 | |
| /* Define action or option for CMD_BT_ACCESS */
 | |
| enum cmd_bt_access_opts {
 | |
| 	/* The bt commands start at 5 instead of 1 because the old dft commands
 | |
| 	 * are mapped to 1-4.  These old commands are no longer maintained and
 | |
| 	 * should not be called.
 | |
| 	 */
 | |
| 	CMD_ACT_BT_ACCESS_ADD = 5,
 | |
| 	CMD_ACT_BT_ACCESS_DEL,
 | |
| 	CMD_ACT_BT_ACCESS_LIST,
 | |
| 	CMD_ACT_BT_ACCESS_RESET,
 | |
| 	CMD_ACT_BT_ACCESS_SET_INVERT,
 | |
| 	CMD_ACT_BT_ACCESS_GET_INVERT
 | |
| };
 | |
| 
 | |
| /* Define action or option for CMD_FWT_ACCESS */
 | |
| enum cmd_fwt_access_opts {
 | |
| 	CMD_ACT_FWT_ACCESS_ADD = 1,
 | |
| 	CMD_ACT_FWT_ACCESS_DEL,
 | |
| 	CMD_ACT_FWT_ACCESS_LOOKUP,
 | |
| 	CMD_ACT_FWT_ACCESS_LIST,
 | |
| 	CMD_ACT_FWT_ACCESS_LIST_ROUTE,
 | |
| 	CMD_ACT_FWT_ACCESS_LIST_NEIGHBOR,
 | |
| 	CMD_ACT_FWT_ACCESS_RESET,
 | |
| 	CMD_ACT_FWT_ACCESS_CLEANUP,
 | |
| 	CMD_ACT_FWT_ACCESS_TIME,
 | |
| };
 | |
| 
 | |
| /* Define action or option for CMD_802_11_HOST_SLEEP_CFG */
 | |
| enum cmd_wol_cfg_opts {
 | |
| 	CMD_ACT_ACTION_NONE = 0,
 | |
| 	CMD_ACT_SET_WOL_RULE,
 | |
| 	CMD_ACT_GET_WOL_RULE,
 | |
| 	CMD_ACT_RESET_WOL_RULE,
 | |
| };
 | |
| 
 | |
| /* Define action or option for CMD_MESH_ACCESS */
 | |
| enum cmd_mesh_access_opts {
 | |
| 	CMD_ACT_MESH_GET_TTL = 1,
 | |
| 	CMD_ACT_MESH_SET_TTL,
 | |
| 	CMD_ACT_MESH_GET_STATS,
 | |
| 	CMD_ACT_MESH_GET_ANYCAST,
 | |
| 	CMD_ACT_MESH_SET_ANYCAST,
 | |
| 	CMD_ACT_MESH_SET_LINK_COSTS,
 | |
| 	CMD_ACT_MESH_GET_LINK_COSTS,
 | |
| 	CMD_ACT_MESH_SET_BCAST_RATE,
 | |
| 	CMD_ACT_MESH_GET_BCAST_RATE,
 | |
| 	CMD_ACT_MESH_SET_RREQ_DELAY,
 | |
| 	CMD_ACT_MESH_GET_RREQ_DELAY,
 | |
| 	CMD_ACT_MESH_SET_ROUTE_EXP,
 | |
| 	CMD_ACT_MESH_GET_ROUTE_EXP,
 | |
| 	CMD_ACT_MESH_SET_AUTOSTART_ENABLED,
 | |
| 	CMD_ACT_MESH_GET_AUTOSTART_ENABLED,
 | |
| 	CMD_ACT_MESH_SET_GET_PRB_RSP_LIMIT = 17,
 | |
| };
 | |
| 
 | |
| /* Define actions and types for CMD_MESH_CONFIG */
 | |
| enum cmd_mesh_config_actions {
 | |
| 	CMD_ACT_MESH_CONFIG_STOP = 0,
 | |
| 	CMD_ACT_MESH_CONFIG_START,
 | |
| 	CMD_ACT_MESH_CONFIG_SET,
 | |
| 	CMD_ACT_MESH_CONFIG_GET,
 | |
| };
 | |
| 
 | |
| enum cmd_mesh_config_types {
 | |
| 	CMD_TYPE_MESH_SET_BOOTFLAG = 1,
 | |
| 	CMD_TYPE_MESH_SET_BOOTTIME,
 | |
| 	CMD_TYPE_MESH_SET_DEF_CHANNEL,
 | |
| 	CMD_TYPE_MESH_SET_MESH_IE,
 | |
| 	CMD_TYPE_MESH_GET_DEFAULTS,
 | |
| 	CMD_TYPE_MESH_GET_MESH_IE, /* GET_DEFAULTS is superset of GET_MESHIE */
 | |
| };
 | |
| 
 | |
| /** Card Event definition */
 | |
| #define MACREG_INT_CODE_TX_PPA_FREE		0
 | |
| #define MACREG_INT_CODE_TX_DMA_DONE		1
 | |
| #define MACREG_INT_CODE_LINK_LOST_W_SCAN	2
 | |
| #define MACREG_INT_CODE_LINK_LOST_NO_SCAN	3
 | |
| #define MACREG_INT_CODE_LINK_SENSED		4
 | |
| #define MACREG_INT_CODE_CMD_FINISHED		5
 | |
| #define MACREG_INT_CODE_MIB_CHANGED		6
 | |
| #define MACREG_INT_CODE_INIT_DONE		7
 | |
| #define MACREG_INT_CODE_DEAUTHENTICATED		8
 | |
| #define MACREG_INT_CODE_DISASSOCIATED		9
 | |
| #define MACREG_INT_CODE_PS_AWAKE		10
 | |
| #define MACREG_INT_CODE_PS_SLEEP		11
 | |
| #define MACREG_INT_CODE_MIC_ERR_MULTICAST	13
 | |
| #define MACREG_INT_CODE_MIC_ERR_UNICAST		14
 | |
| #define MACREG_INT_CODE_WM_AWAKE		15
 | |
| #define MACREG_INT_CODE_DEEP_SLEEP_AWAKE	16
 | |
| #define MACREG_INT_CODE_ADHOC_BCN_LOST		17
 | |
| #define MACREG_INT_CODE_HOST_AWAKE		18
 | |
| #define MACREG_INT_CODE_STOP_TX			19
 | |
| #define MACREG_INT_CODE_START_TX		20
 | |
| #define MACREG_INT_CODE_CHANNEL_SWITCH		21
 | |
| #define MACREG_INT_CODE_MEASUREMENT_RDY		22
 | |
| #define MACREG_INT_CODE_WMM_CHANGE		23
 | |
| #define MACREG_INT_CODE_BG_SCAN_REPORT		24
 | |
| #define MACREG_INT_CODE_RSSI_LOW		25
 | |
| #define MACREG_INT_CODE_SNR_LOW			26
 | |
| #define MACREG_INT_CODE_MAX_FAIL		27
 | |
| #define MACREG_INT_CODE_RSSI_HIGH		28
 | |
| #define MACREG_INT_CODE_SNR_HIGH		29
 | |
| #define MACREG_INT_CODE_MESH_AUTO_STARTED	35
 | |
| #define MACREG_INT_CODE_FIRMWARE_READY		48
 | |
| 
 | |
| 
 | |
| /* 802.11-related definitions */
 | |
| 
 | |
| /* TxPD descriptor */
 | |
| struct txpd {
 | |
| 	/* union to cope up with later FW revisions */
 | |
| 	union {
 | |
| 		/* Current Tx packet status */
 | |
| 		__le32 tx_status;
 | |
| 		struct {
 | |
| 			/* BSS type: client, AP, etc. */
 | |
| 			u8 bss_type;
 | |
| 			/* BSS number */
 | |
| 			u8 bss_num;
 | |
| 			/* Reserved */
 | |
| 			__le16 reserved;
 | |
| 		} bss;
 | |
| 	} u;
 | |
| 	/* Tx control */
 | |
| 	__le32 tx_control;
 | |
| 	__le32 tx_packet_location;
 | |
| 	/* Tx packet length */
 | |
| 	__le16 tx_packet_length;
 | |
| 	/* First 2 byte of destination MAC address */
 | |
| 	u8 tx_dest_addr_high[2];
 | |
| 	/* Last 4 byte of destination MAC address */
 | |
| 	u8 tx_dest_addr_low[4];
 | |
| 	/* Pkt Priority */
 | |
| 	u8 priority;
 | |
| 	/* Pkt Trasnit Power control */
 | |
| 	u8 powermgmt;
 | |
| 	/* Amount of time the packet has been queued (units = 2ms) */
 | |
| 	u8 pktdelay_2ms;
 | |
| 	/* reserved */
 | |
| 	u8 reserved1;
 | |
| } __packed;
 | |
| 
 | |
| /* RxPD Descriptor */
 | |
| struct rxpd {
 | |
| 	/* union to cope up with later FW revisions */
 | |
| 	union {
 | |
| 		/* Current Rx packet status */
 | |
| 		__le16 status;
 | |
| 		struct {
 | |
| 			/* BSS type: client, AP, etc. */
 | |
| 			u8 bss_type;
 | |
| 			/* BSS number */
 | |
| 			u8 bss_num;
 | |
| 		} __packed bss;
 | |
| 	} __packed u;
 | |
| 
 | |
| 	/* SNR */
 | |
| 	u8 snr;
 | |
| 
 | |
| 	/* Tx control */
 | |
| 	u8 rx_control;
 | |
| 
 | |
| 	/* Pkt length */
 | |
| 	__le16 pkt_len;
 | |
| 
 | |
| 	/* Noise Floor */
 | |
| 	u8 nf;
 | |
| 
 | |
| 	/* Rx Packet Rate */
 | |
| 	u8 rx_rate;
 | |
| 
 | |
| 	/* Pkt addr */
 | |
| 	__le32 pkt_ptr;
 | |
| 
 | |
| 	/* Next Rx RxPD addr */
 | |
| 	__le32 next_rxpd_ptr;
 | |
| 
 | |
| 	/* Pkt Priority */
 | |
| 	u8 priority;
 | |
| 	u8 reserved[3];
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_header {
 | |
| 	__le16 command;
 | |
| 	__le16 size;
 | |
| 	__le16 seqnum;
 | |
| 	__le16 result;
 | |
| } __packed;
 | |
| 
 | |
| /* Generic structure to hold all key types. */
 | |
| struct enc_key {
 | |
| 	u16 len;
 | |
| 	u16 flags;  /* KEY_INFO_* from defs.h */
 | |
| 	u16 type; /* KEY_TYPE_* from defs.h */
 | |
| 	u8 key[32];
 | |
| };
 | |
| 
 | |
| /* lbs_offset_value */
 | |
| struct lbs_offset_value {
 | |
| 	u32 offset;
 | |
| 	u32 value;
 | |
| } __packed;
 | |
| 
 | |
| #define MAX_11D_TRIPLETS	83
 | |
| 
 | |
| struct mrvl_ie_domain_param_set {
 | |
| 	struct mrvl_ie_header header;
 | |
| 
 | |
| 	u8 country_code[3];
 | |
| 	struct ieee80211_country_ie_triplet triplet[MAX_11D_TRIPLETS];
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11d_domain_info {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	struct mrvl_ie_domain_param_set domain;
 | |
| } __packed;
 | |
| 
 | |
| /*
 | |
|  * Define data structure for CMD_GET_HW_SPEC
 | |
|  * This structure defines the response for the GET_HW_SPEC command
 | |
|  */
 | |
| struct cmd_ds_get_hw_spec {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	/* HW Interface version number */
 | |
| 	__le16 hwifversion;
 | |
| 	/* HW version number */
 | |
| 	__le16 version;
 | |
| 	/* Max number of TxPD FW can handle */
 | |
| 	__le16 nr_txpd;
 | |
| 	/* Max no of Multicast address */
 | |
| 	__le16 nr_mcast_adr;
 | |
| 	/* MAC address */
 | |
| 	u8 permanentaddr[6];
 | |
| 
 | |
| 	/* region Code */
 | |
| 	__le16 regioncode;
 | |
| 
 | |
| 	/* Number of antenna used */
 | |
| 	__le16 nr_antenna;
 | |
| 
 | |
| 	/* FW release number, example 0x01030304 = 2.3.4p1 */
 | |
| 	__le32 fwrelease;
 | |
| 
 | |
| 	/* Base Address of TxPD queue */
 | |
| 	__le32 wcb_base;
 | |
| 	/* Read Pointer of RxPd queue */
 | |
| 	__le32 rxpd_rdptr;
 | |
| 
 | |
| 	/* Write Pointer of RxPd queue */
 | |
| 	__le32 rxpd_wrptr;
 | |
| 
 | |
| 	/*FW/HW capability */
 | |
| 	__le32 fwcapinfo;
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_subscribe_event {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	__le16 events;
 | |
| 
 | |
| 	/* A TLV to the CMD_802_11_SUBSCRIBE_EVENT command can contain a
 | |
| 	 * number of TLVs. From the v5.1 manual, those TLVs would add up to
 | |
| 	 * 40 bytes. However, future firmware might add additional TLVs, so I
 | |
| 	 * bump this up a bit.
 | |
| 	 */
 | |
| 	uint8_t tlv[128];
 | |
| } __packed;
 | |
| 
 | |
| /*
 | |
|  * This scan handle Country Information IE(802.11d compliant)
 | |
|  * Define data structure for CMD_802_11_SCAN
 | |
|  */
 | |
| struct cmd_ds_802_11_scan {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	uint8_t bsstype;
 | |
| 	uint8_t bssid[ETH_ALEN];
 | |
| 	uint8_t tlvbuffer[0];
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_scan_rsp {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 bssdescriptsize;
 | |
| 	uint8_t nr_sets;
 | |
| 	uint8_t bssdesc_and_tlvbuffer[0];
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_get_log {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le32 mcasttxframe;
 | |
| 	__le32 failed;
 | |
| 	__le32 retry;
 | |
| 	__le32 multiretry;
 | |
| 	__le32 framedup;
 | |
| 	__le32 rtssuccess;
 | |
| 	__le32 rtsfailure;
 | |
| 	__le32 ackfailure;
 | |
| 	__le32 rxfrag;
 | |
| 	__le32 mcastrxframe;
 | |
| 	__le32 fcserror;
 | |
| 	__le32 txframe;
 | |
| 	__le32 wepundecryptable;
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_mac_control {
 | |
| 	struct cmd_header hdr;
 | |
| 	__le16 action;
 | |
| 	u16 reserved;
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_mac_multicast_adr {
 | |
| 	struct cmd_header hdr;
 | |
| 	__le16 action;
 | |
| 	__le16 nr_of_adrs;
 | |
| 	u8 maclist[ETH_ALEN * MRVDRV_MAX_MULTICAST_LIST_SIZE];
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_authenticate {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	u8 bssid[ETH_ALEN];
 | |
| 	u8 authtype;
 | |
| 	u8 reserved[10];
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_deauthenticate {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	u8 macaddr[ETH_ALEN];
 | |
| 	__le16 reasoncode;
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_associate {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	u8 bssid[6];
 | |
| 	__le16 capability;
 | |
| 	__le16 listeninterval;
 | |
| 	__le16 bcnperiod;
 | |
| 	u8 dtimperiod;
 | |
| 	u8 iebuf[512];    /* Enough for required and most optional IEs */
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_associate_response {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 capability;
 | |
| 	__le16 statuscode;
 | |
| 	__le16 aid;
 | |
| 	u8 iebuf[512];
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_set_wep {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	/* ACT_ADD, ACT_REMOVE or ACT_ENABLE */
 | |
| 	__le16 action;
 | |
| 
 | |
| 	/* key Index selected for Tx */
 | |
| 	__le16 keyindex;
 | |
| 
 | |
| 	/* 40, 128bit or TXWEP */
 | |
| 	uint8_t keytype[4];
 | |
| 	uint8_t keymaterial[4][16];
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_snmp_mib {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	__le16 oid;
 | |
| 	__le16 bufsize;
 | |
| 	u8 value[128];
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_reg_access {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	__le16 offset;
 | |
| 	union {
 | |
| 		u8 bbp_rf;  /* for BBP and RF registers */
 | |
| 		__le32 mac; /* for MAC registers */
 | |
| 	} value;
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_radio_control {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	__le16 control;
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_beacon_control {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	__le16 beacon_enable;
 | |
| 	__le16 beacon_period;
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_sleep_params {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	/* ACT_GET/ACT_SET */
 | |
| 	__le16 action;
 | |
| 
 | |
| 	/* Sleep clock error in ppm */
 | |
| 	__le16 error;
 | |
| 
 | |
| 	/* Wakeup offset in usec */
 | |
| 	__le16 offset;
 | |
| 
 | |
| 	/* Clock stabilization time in usec */
 | |
| 	__le16 stabletime;
 | |
| 
 | |
| 	/* control periodic calibration */
 | |
| 	uint8_t calcontrol;
 | |
| 
 | |
| 	/* control the use of external sleep clock */
 | |
| 	uint8_t externalsleepclk;
 | |
| 
 | |
| 	/* reserved field, should be set to zero */
 | |
| 	__le16 reserved;
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_rf_channel {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	__le16 channel;
 | |
| 	__le16 rftype;      /* unused */
 | |
| 	__le16 reserved;    /* unused */
 | |
| 	u8 channellist[32]; /* unused */
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_rssi {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	/* request:  number of beacons (N) to average the SNR and NF over
 | |
| 	 * response: SNR of most recent beacon
 | |
| 	 */
 | |
| 	__le16 n_or_snr;
 | |
| 
 | |
| 	/* The following fields are only set in the response.
 | |
| 	 * In the request these are reserved and should be set to 0.
 | |
| 	 */
 | |
| 	__le16 nf;       /* most recent beacon noise floor */
 | |
| 	__le16 avg_snr;  /* average SNR weighted by N from request */
 | |
| 	__le16 avg_nf;   /* average noise floor weighted by N from request */
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_mac_address {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	u8 macadd[ETH_ALEN];
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_rf_tx_power {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	__le16 curlevel;
 | |
| 	s8 maxlevel;
 | |
| 	s8 minlevel;
 | |
| } __packed;
 | |
| 
 | |
| /* MONITOR_MODE only exists in OLPC v5 firmware */
 | |
| struct cmd_ds_802_11_monitor_mode {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	__le16 mode;
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_set_boot2_ver {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	__le16 version;
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_fw_wake_method {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	__le16 method;
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_ps_mode {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 
 | |
| 	/* Interval for keepalive in PS mode:
 | |
| 	 * 0x0000 = don't change
 | |
| 	 * 0x001E = firmware default
 | |
| 	 * 0xFFFF = disable
 | |
| 	 */
 | |
| 	__le16 nullpktinterval;
 | |
| 
 | |
| 	/* Number of DTIM intervals to wake up for:
 | |
| 	 * 0 = don't change
 | |
| 	 * 1 = firmware default
 | |
| 	 * 5 = max
 | |
| 	 */
 | |
| 	__le16 multipledtim;
 | |
| 
 | |
| 	__le16 reserved;
 | |
| 	__le16 locallisteninterval;
 | |
| 
 | |
| 	/* AdHoc awake period (FW v9+ only):
 | |
| 	 * 0 = don't change
 | |
| 	 * 1 = always awake (IEEE standard behavior)
 | |
| 	 * 2 - 31 = sleep for (n - 1) periods and awake for 1 period
 | |
| 	 * 32 - 254 = invalid
 | |
| 	 * 255 = sleep at each ATIM
 | |
| 	 */
 | |
| 	__le16 adhoc_awake_period;
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_confirm_sleep {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	__le16 nullpktinterval;
 | |
| 	__le16 multipledtim;
 | |
| 	__le16 reserved;
 | |
| 	__le16 locallisteninterval;
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_data_rate {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	__le16 reserved;
 | |
| 	u8 rates[MAX_RATES];
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_rate_adapt_rateset {
 | |
| 	struct cmd_header hdr;
 | |
| 	__le16 action;
 | |
| 	__le16 enablehwauto;
 | |
| 	__le16 bitmap;
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_ad_hoc_start {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	u8 ssid[IEEE80211_MAX_SSID_LEN];
 | |
| 	u8 bsstype;
 | |
| 	__le16 beaconperiod;
 | |
| 	u8 dtimperiod;   /* Reserved on v9 and later */
 | |
| 	struct ieee_ie_ibss_param_set ibss;
 | |
| 	u8 reserved1[4];
 | |
| 	struct ieee_ie_ds_param_set ds;
 | |
| 	u8 reserved2[4];
 | |
| 	__le16 probedelay;  /* Reserved on v9 and later */
 | |
| 	__le16 capability;
 | |
| 	u8 rates[MAX_RATES];
 | |
| 	u8 tlv_memory_size_pad[100];
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_ad_hoc_result {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	u8 pad[3];
 | |
| 	u8 bssid[ETH_ALEN];
 | |
| } __packed;
 | |
| 
 | |
| struct adhoc_bssdesc {
 | |
| 	u8 bssid[ETH_ALEN];
 | |
| 	u8 ssid[IEEE80211_MAX_SSID_LEN];
 | |
| 	u8 type;
 | |
| 	__le16 beaconperiod;
 | |
| 	u8 dtimperiod;
 | |
| 	__le64 timestamp;
 | |
| 	__le64 localtime;
 | |
| 	struct ieee_ie_ds_param_set ds;
 | |
| 	u8 reserved1[4];
 | |
| 	struct ieee_ie_ibss_param_set ibss;
 | |
| 	u8 reserved2[4];
 | |
| 	__le16 capability;
 | |
| 	u8 rates[MAX_RATES];
 | |
| 
 | |
| 	/* DO NOT ADD ANY FIELDS TO THIS STRUCTURE. It is used below in the
 | |
| 	 * Adhoc join command and will cause a binary layout mismatch with
 | |
| 	 * the firmware
 | |
| 	 */
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_ad_hoc_join {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	struct adhoc_bssdesc bss;
 | |
| 	__le16 failtimeout;   /* Reserved on v9 and later */
 | |
| 	__le16 probedelay;    /* Reserved on v9 and later */
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_ad_hoc_stop {
 | |
| 	struct cmd_header hdr;
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_enable_rsn {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	__le16 enable;
 | |
| } __packed;
 | |
| 
 | |
| struct MrvlIEtype_keyParamSet {
 | |
| 	/* type ID */
 | |
| 	__le16 type;
 | |
| 
 | |
| 	/* length of Payload */
 | |
| 	__le16 length;
 | |
| 
 | |
| 	/* type of key: WEP=0, TKIP=1, AES=2 */
 | |
| 	__le16 keytypeid;
 | |
| 
 | |
| 	/* key control Info specific to a keytypeid */
 | |
| 	__le16 keyinfo;
 | |
| 
 | |
| 	/* length of key */
 | |
| 	__le16 keylen;
 | |
| 
 | |
| 	/* key material of size keylen */
 | |
| 	u8 key[32];
 | |
| } __packed;
 | |
| 
 | |
| #define MAX_WOL_RULES 		16
 | |
| 
 | |
| struct host_wol_rule {
 | |
| 	uint8_t rule_no;
 | |
| 	uint8_t rule_ops;
 | |
| 	__le16 sig_offset;
 | |
| 	__le16 sig_length;
 | |
| 	__le16 reserve;
 | |
| 	__be32 sig_mask;
 | |
| 	__be32 signature;
 | |
| } __packed;
 | |
| 
 | |
| struct wol_config {
 | |
| 	uint8_t action;
 | |
| 	uint8_t pattern;
 | |
| 	uint8_t no_rules_in_cmd;
 | |
| 	uint8_t result;
 | |
| 	struct host_wol_rule rule[MAX_WOL_RULES];
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_host_sleep {
 | |
| 	struct cmd_header hdr;
 | |
| 	__le32 criteria;
 | |
| 	uint8_t gpio;
 | |
| 	uint16_t gap;
 | |
| 	struct wol_config wol_conf;
 | |
| } __packed;
 | |
| 
 | |
| 
 | |
| 
 | |
| struct cmd_ds_802_11_key_material {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	struct MrvlIEtype_keyParamSet keyParamSet[2];
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_eeprom_access {
 | |
| 	struct cmd_header hdr;
 | |
| 	__le16 action;
 | |
| 	__le16 offset;
 | |
| 	__le16 len;
 | |
| 	/* firmware says it returns a maximum of 20 bytes */
 | |
| #define LBS_EEPROM_READ_LEN 20
 | |
| 	u8 value[LBS_EEPROM_READ_LEN];
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_802_11_tpc_cfg {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	uint8_t enable;
 | |
| 	int8_t P0;
 | |
| 	int8_t P1;
 | |
| 	int8_t P2;
 | |
| 	uint8_t usesnr;
 | |
| } __packed;
 | |
| 
 | |
| 
 | |
| struct cmd_ds_802_11_pa_cfg {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	uint8_t enable;
 | |
| 	int8_t P0;
 | |
| 	int8_t P1;
 | |
| 	int8_t P2;
 | |
| } __packed;
 | |
| 
 | |
| 
 | |
| struct cmd_ds_802_11_led_ctrl {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	__le16 numled;
 | |
| 	u8 data[256];
 | |
| } __packed;
 | |
| 
 | |
| /* Automatic Frequency Control */
 | |
| struct cmd_ds_802_11_afc {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 afc_auto;
 | |
| 	union {
 | |
| 		struct {
 | |
| 			__le16 threshold;
 | |
| 			__le16 period;
 | |
| 		};
 | |
| 		struct {
 | |
| 			__le16 timing_offset; /* signed */
 | |
| 			__le16 carrier_offset; /* signed */
 | |
| 		};
 | |
| 	};
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_tx_rate_query {
 | |
| 	__le16 txrate;
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_get_tsf {
 | |
| 	__le64 tsfvalue;
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_bt_access {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	__le32 id;
 | |
| 	u8 addr1[ETH_ALEN];
 | |
| 	u8 addr2[ETH_ALEN];
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_fwt_access {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	__le32 id;
 | |
| 	u8 valid;
 | |
| 	u8 da[ETH_ALEN];
 | |
| 	u8 dir;
 | |
| 	u8 ra[ETH_ALEN];
 | |
| 	__le32 ssn;
 | |
| 	__le32 dsn;
 | |
| 	__le32 metric;
 | |
| 	u8 rate;
 | |
| 	u8 hopcount;
 | |
| 	u8 ttl;
 | |
| 	__le32 expiration;
 | |
| 	u8 sleepmode;
 | |
| 	__le32 snr;
 | |
| 	__le32 references;
 | |
| 	u8 prec[ETH_ALEN];
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_mesh_config {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	__le16 channel;
 | |
| 	__le16 type;
 | |
| 	__le16 length;
 | |
| 	u8 data[128];	/* last position reserved */
 | |
| } __packed;
 | |
| 
 | |
| struct cmd_ds_mesh_access {
 | |
| 	struct cmd_header hdr;
 | |
| 
 | |
| 	__le16 action;
 | |
| 	__le32 data[32];	/* last position reserved */
 | |
| } __packed;
 | |
| 
 | |
| /* Number of stats counters returned by the firmware */
 | |
| #define MESH_STATS_NUM 8
 | |
| #endif
 |