diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-commands.h')
| -rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-commands.h | 299 | 
1 files changed, 281 insertions, 18 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-commands.h b/drivers/net/wireless/iwlwifi/iwl-commands.h index 2c5c88fc38f..e9150753192 100644 --- a/drivers/net/wireless/iwlwifi/iwl-commands.h +++ b/drivers/net/wireless/iwlwifi/iwl-commands.h @@ -109,11 +109,12 @@ enum {  	REPLY_TX_LINK_QUALITY_CMD = 0x4e, /* 4965 only */  	/* WiMAX coexistence */ -	COEX_PRIORITY_TABLE_CMD = 0x5a,	/*5000 only */ +	COEX_PRIORITY_TABLE_CMD = 0x5a,	/* for 5000 series and up */  	COEX_MEDIUM_NOTIFICATION = 0x5b,  	COEX_EVENT_CMD = 0x5c,  	/* Calibration */ +	TEMPERATURE_NOTIFICATION = 0x62,  	CALIBRATION_CFG_CMD = 0x65,  	CALIBRATION_RES_NOTIFICATION = 0x66,  	CALIBRATION_COMPLETE_NOTIFICATION = 0x67, @@ -148,7 +149,7 @@ enum {  	QUIET_NOTIFICATION = 0x96,		/* not used */  	REPLY_TX_PWR_TABLE_CMD = 0x97,  	REPLY_TX_POWER_DBM_CMD_V1 = 0x98,	/* old version of API */ -	TX_ANT_CONFIGURATION_CMD = 0x98,	/* not used */ +	TX_ANT_CONFIGURATION_CMD = 0x98,  	MEASURE_ABORT_NOTIFICATION = 0x99,	/* not used */  	/* Bluetooth device coexistence config command */ @@ -353,6 +354,9 @@ struct iwl3945_power_per_rate {  #define POWER_TABLE_NUM_HT_OFDM_ENTRIES		32  #define POWER_TABLE_CCK_ENTRY			32 +#define IWL_PWR_NUM_HT_OFDM_ENTRIES		24 +#define IWL_PWR_CCK_ENTRIES			2 +  /**   * union iwl4965_tx_power_dual_stream   * @@ -411,6 +415,16 @@ struct iwl5000_tx_power_dbm_cmd {  	u8 reserved;  } __attribute__ ((packed)); +/** + * Command TX_ANT_CONFIGURATION_CMD = 0x98 + * This command is used to configure valid Tx antenna. + * By default uCode concludes the valid antenna according to the radio flavor. + * This command enables the driver to override/modify this conclusion. + */ +struct iwl_tx_ant_config_cmd { +	__le32 valid; +} __attribute__ ((packed)); +  /******************************************************************************   * (0a)   * Alive and Error Commands & Responses: @@ -793,7 +807,7 @@ struct iwl3945_channel_switch_cmd {  	struct iwl3945_power_per_rate power[IWL_MAX_RATES];  } __attribute__ ((packed)); -struct iwl_channel_switch_cmd { +struct iwl4965_channel_switch_cmd {  	u8 band;  	u8 expect_beacon;  	__le16 channel; @@ -803,6 +817,48 @@ struct iwl_channel_switch_cmd {  	struct iwl4965_tx_power_db tx_power;  } __attribute__ ((packed)); +/** + * struct iwl5000_channel_switch_cmd + * @band: 0- 5.2GHz, 1- 2.4GHz + * @expect_beacon: 0- resume transmits after channel switch + *		   1- wait for beacon to resume transmits + * @channel: new channel number + * @rxon_flags: Rx on flags + * @rxon_filter_flags: filtering parameters + * @switch_time: switch time in extended beacon format + * @reserved: reserved bytes + */ +struct iwl5000_channel_switch_cmd { +	u8 band; +	u8 expect_beacon; +	__le16 channel; +	__le32 rxon_flags; +	__le32 rxon_filter_flags; +	__le32 switch_time; +	__le32 reserved[2][IWL_PWR_NUM_HT_OFDM_ENTRIES + IWL_PWR_CCK_ENTRIES]; +} __attribute__ ((packed)); + +/** + * struct iwl6000_channel_switch_cmd + * @band: 0- 5.2GHz, 1- 2.4GHz + * @expect_beacon: 0- resume transmits after channel switch + *		   1- wait for beacon to resume transmits + * @channel: new channel number + * @rxon_flags: Rx on flags + * @rxon_filter_flags: filtering parameters + * @switch_time: switch time in extended beacon format + * @reserved: reserved bytes + */ +struct iwl6000_channel_switch_cmd { +	u8 band; +	u8 expect_beacon; +	__le16 channel; +	__le32 rxon_flags; +	__le32 rxon_filter_flags; +	__le32 switch_time; +	__le32 reserved[3][IWL_PWR_NUM_HT_OFDM_ENTRIES + IWL_PWR_CCK_ENTRIES]; +} __attribute__ ((packed)); +  /*   * CHANNEL_SWITCH_NOTIFICATION = 0x73 (notification only, not a command)   */ @@ -921,6 +977,7 @@ struct iwl_qosparam_cmd {  #define	STA_MODIFY_TX_RATE_MSK		0x04  #define STA_MODIFY_ADDBA_TID_MSK	0x08  #define STA_MODIFY_DELBA_TID_MSK	0x10 +#define STA_MODIFY_SLEEP_TX_COUNT_MSK	0x20  /* Receiver address (actually, Rx station's index into station table),   * combined with Traffic ID (QOS priority), in format used by Tx Scheduler */ @@ -1051,7 +1108,14 @@ struct iwl4965_addsta_cmd {  	 * Set modify_mask bit STA_MODIFY_ADDBA_TID_MSK to use this field. */  	__le16 add_immediate_ba_ssn; -	__le32 reserved2; +	/* +	 * Number of packets OK to transmit to station even though +	 * it is asleep -- used to synchronise PS-poll and u-APSD +	 * responses while ucode keeps track of STA sleep state. +	 */ +	__le16 sleep_tx_count; + +	__le16 reserved2;  } __attribute__ ((packed));  /* 5000 */ @@ -1082,7 +1146,14 @@ struct iwl_addsta_cmd {  	 * Set modify_mask bit STA_MODIFY_ADDBA_TID_MSK to use this field. */  	__le16 add_immediate_ba_ssn; -	__le32 reserved2; +	/* +	 * Number of packets OK to transmit to station even though +	 * it is asleep -- used to synchronise PS-poll and u-APSD +	 * responses while ucode keeps track of STA sleep state. +	 */ +	__le16 sleep_tx_count; + +	__le16 reserved2;  } __attribute__ ((packed)); @@ -1154,7 +1225,7 @@ struct iwl_wep_cmd {  #define RX_RES_PHY_FLAGS_MOD_CCK_MSK		cpu_to_le16(1 << 1)  #define RX_RES_PHY_FLAGS_SHORT_PREAMBLE_MSK	cpu_to_le16(1 << 2)  #define RX_RES_PHY_FLAGS_NARROW_BAND_MSK	cpu_to_le16(1 << 3) -#define RX_RES_PHY_FLAGS_ANTENNA_MSK		cpu_to_le16(0xf0) +#define RX_RES_PHY_FLAGS_ANTENNA_MSK		0xf0  #define RX_RES_PHY_FLAGS_ANTENNA_POS		4  #define RX_RES_STATUS_SEC_TYPE_MSK	(0x7 << 8) @@ -1634,6 +1705,21 @@ enum {  	TX_ABORT_REQUIRED_MSK = 0x80000000,	/* bits 31:31 */  }; +static inline u32 iwl_tx_status_to_mac80211(u32 status) +{ +	status &= TX_STATUS_MSK; + +	switch (status) { +	case TX_STATUS_SUCCESS: +	case TX_STATUS_DIRECT_DONE: +		return IEEE80211_TX_STAT_ACK; +	case TX_STATUS_FAIL_DEST_PS: +		return IEEE80211_TX_STAT_TX_FILTERED; +	default: +		return 0; +	} +} +  static inline bool iwl_is_tx_success(u32 status)  {  	status &= TX_STATUS_MSK; @@ -2162,6 +2248,19 @@ struct iwl_link_quality_cmd {  	__le32 reserved2;  } __attribute__ ((packed)); +#define BT_COEX_DISABLE (0x0) +#define BT_COEX_MODE_2W (0x1) +#define BT_COEX_MODE_3W (0x2) +#define BT_COEX_MODE_4W (0x3) + +#define BT_LEAD_TIME_MIN (0x0) +#define BT_LEAD_TIME_DEF (0x1E) +#define BT_LEAD_TIME_MAX (0xFF) + +#define BT_MAX_KILL_MIN (0x1) +#define BT_MAX_KILL_DEF (0x5) +#define BT_MAX_KILL_MAX (0xFF) +  /*   * REPLY_BT_CONFIG = 0x9b (command, has simple generic response)   * @@ -2497,9 +2596,10 @@ struct iwl_scan_channel {  /**   * struct iwl_ssid_ie - directed scan network information element   * - * Up to 4 of these may appear in REPLY_SCAN_CMD, selected by "type" field - * in struct iwl_scan_channel; each channel may select different ssids from - * among the 4 entries.  SSID IEs get transmitted in reverse order of entry. + * Up to 20 of these may appear in REPLY_SCAN_CMD (Note: Only 4 are in + * 3945 SCAN api), selected by "type" bit field in struct iwl_scan_channel; + * each channel may select different ssids from among the 20 (4) entries. + * SSID IEs get transmitted in reverse order of entry.   */  struct iwl_ssid_ie {  	u8 id; @@ -3001,6 +3101,10 @@ struct statistics_general {  	__le32 reserved3;  } __attribute__ ((packed)); +#define UCODE_STATISTICS_CLEAR_MSK		(0x1 << 0) +#define UCODE_STATISTICS_FREQUENCY_MSK		(0x1 << 1) +#define UCODE_STATISTICS_NARROW_BAND_MSK	(0x1 << 2) +  /*   * REPLY_STATISTICS_CMD = 0x9c,   * 3945 and 4965 identical. @@ -3237,12 +3341,6 @@ struct iwl_missed_beacon_notif {   *   Lower values mean higher energy; this means making sure that the value   *   in HD_MIN_ENERGY_CCK_DET_INDEX is at or *above* "Max cck energy".   * - * Driver should set the following entries to fixed values: - * - *   HD_MIN_ENERGY_OFDM_DET_INDEX               100 - *   HD_BARKER_CORR_TH_ADD_MIN_INDEX            190 - *   HD_BARKER_CORR_TH_ADD_MIN_MRC_INDEX        390 - *   HD_OFDM_ENERGY_TH_IN_INDEX                  62   */  /* @@ -3440,30 +3538,134 @@ struct iwl_led_cmd {  } __attribute__ ((packed));  /* - * Coexistence WIFI/WIMAX  Command - * COEX_PRIORITY_TABLE_CMD = 0x5a - * + * station priority table entries + * also used as potential "events" value for both + * COEX_MEDIUM_NOTIFICATION and COEX_EVENT_CMD + */ + +/* + * COEX events entry flag masks + * RP - Requested Priority + * WP - Win Medium Priority: priority assigned when the contention has been won   */ +#define COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG        (0x1) +#define COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG        (0x2) +#define COEX_EVT_FLAG_DELAY_MEDIUM_FREE_NTFY_FLG  (0x4) + +#define COEX_CU_UNASSOC_IDLE_RP               4 +#define COEX_CU_UNASSOC_MANUAL_SCAN_RP        4 +#define COEX_CU_UNASSOC_AUTO_SCAN_RP          4 +#define COEX_CU_CALIBRATION_RP                4 +#define COEX_CU_PERIODIC_CALIBRATION_RP       4 +#define COEX_CU_CONNECTION_ESTAB_RP           4 +#define COEX_CU_ASSOCIATED_IDLE_RP            4 +#define COEX_CU_ASSOC_MANUAL_SCAN_RP          4 +#define COEX_CU_ASSOC_AUTO_SCAN_RP            4 +#define COEX_CU_ASSOC_ACTIVE_LEVEL_RP         4 +#define COEX_CU_RF_ON_RP                      6 +#define COEX_CU_RF_OFF_RP                     4 +#define COEX_CU_STAND_ALONE_DEBUG_RP          6 +#define COEX_CU_IPAN_ASSOC_LEVEL_RP           4 +#define COEX_CU_RSRVD1_RP                     4 +#define COEX_CU_RSRVD2_RP                     4 + +#define COEX_CU_UNASSOC_IDLE_WP               3 +#define COEX_CU_UNASSOC_MANUAL_SCAN_WP        3 +#define COEX_CU_UNASSOC_AUTO_SCAN_WP          3 +#define COEX_CU_CALIBRATION_WP                3 +#define COEX_CU_PERIODIC_CALIBRATION_WP       3 +#define COEX_CU_CONNECTION_ESTAB_WP           3 +#define COEX_CU_ASSOCIATED_IDLE_WP            3 +#define COEX_CU_ASSOC_MANUAL_SCAN_WP          3 +#define COEX_CU_ASSOC_AUTO_SCAN_WP            3 +#define COEX_CU_ASSOC_ACTIVE_LEVEL_WP         3 +#define COEX_CU_RF_ON_WP                      3 +#define COEX_CU_RF_OFF_WP                     3 +#define COEX_CU_STAND_ALONE_DEBUG_WP          6 +#define COEX_CU_IPAN_ASSOC_LEVEL_WP           3 +#define COEX_CU_RSRVD1_WP                     3 +#define COEX_CU_RSRVD2_WP                     3 + +#define COEX_UNASSOC_IDLE_FLAGS                     0 +#define COEX_UNASSOC_MANUAL_SCAN_FLAGS		\ +	(COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG |	\ +	COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG) +#define COEX_UNASSOC_AUTO_SCAN_FLAGS		\ +	(COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG |	\ +	COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG) +#define COEX_CALIBRATION_FLAGS			\ +	(COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG |	\ +	COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG) +#define COEX_PERIODIC_CALIBRATION_FLAGS             0 +/* + * COEX_CONNECTION_ESTAB: + * we need DELAY_MEDIUM_FREE_NTFY to let WiMAX disconnect from network. + */ +#define COEX_CONNECTION_ESTAB_FLAGS		\ +	(COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG |	\ +	COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG |	\ +	COEX_EVT_FLAG_DELAY_MEDIUM_FREE_NTFY_FLG) +#define COEX_ASSOCIATED_IDLE_FLAGS                  0 +#define COEX_ASSOC_MANUAL_SCAN_FLAGS		\ +	(COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG |	\ +	COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG) +#define COEX_ASSOC_AUTO_SCAN_FLAGS		\ +	(COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG |	\ +	 COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG) +#define COEX_ASSOC_ACTIVE_LEVEL_FLAGS               0 +#define COEX_RF_ON_FLAGS                            0 +#define COEX_RF_OFF_FLAGS                           0 +#define COEX_STAND_ALONE_DEBUG_FLAGS		\ +	(COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG |	\ +	 COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG) +#define COEX_IPAN_ASSOC_LEVEL_FLAGS		\ +	(COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG |	\ +	 COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG |	\ +	 COEX_EVT_FLAG_DELAY_MEDIUM_FREE_NTFY_FLG) +#define COEX_RSRVD1_FLAGS                           0 +#define COEX_RSRVD2_FLAGS                           0 +/* + * COEX_CU_RF_ON is the event wrapping all radio ownership. + * We need DELAY_MEDIUM_FREE_NTFY to let WiMAX disconnect from network. + */ +#define COEX_CU_RF_ON_FLAGS			\ +	(COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG |	\ +	 COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG |	\ +	 COEX_EVT_FLAG_DELAY_MEDIUM_FREE_NTFY_FLG) + +  enum { +	/* un-association part */  	COEX_UNASSOC_IDLE		= 0,  	COEX_UNASSOC_MANUAL_SCAN	= 1,  	COEX_UNASSOC_AUTO_SCAN		= 2, +	/* calibration */  	COEX_CALIBRATION		= 3,  	COEX_PERIODIC_CALIBRATION	= 4, +	/* connection */  	COEX_CONNECTION_ESTAB		= 5, +	/* association part */  	COEX_ASSOCIATED_IDLE		= 6,  	COEX_ASSOC_MANUAL_SCAN		= 7,  	COEX_ASSOC_AUTO_SCAN		= 8,  	COEX_ASSOC_ACTIVE_LEVEL		= 9, +	/* RF ON/OFF */  	COEX_RF_ON			= 10,  	COEX_RF_OFF			= 11,  	COEX_STAND_ALONE_DEBUG		= 12, +	/* IPAN */  	COEX_IPAN_ASSOC_LEVEL		= 13, +	/* reserved */  	COEX_RSRVD1			= 14,  	COEX_RSRVD2			= 15,  	COEX_NUM_OF_EVENTS		= 16  }; +/* + * Coexistence WIFI/WIMAX  Command + * COEX_PRIORITY_TABLE_CMD = 0x5a + * + */  struct iwl_wimax_coex_event_entry {  	u8 request_prio;  	u8 win_medium_prio; @@ -3488,6 +3690,55 @@ struct iwl_wimax_coex_cmd {  	struct iwl_wimax_coex_event_entry sta_prio[COEX_NUM_OF_EVENTS];  } __attribute__ ((packed)); +/* + * Coexistence MEDIUM NOTIFICATION + * COEX_MEDIUM_NOTIFICATION = 0x5b + * + * notification from uCode to host to indicate medium changes + * + */ +/* + * status field + * bit 0 - 2: medium status + * bit 3: medium change indication + * bit 4 - 31: reserved + */ +/* status option values, (0 - 2 bits) */ +#define COEX_MEDIUM_BUSY	(0x0) /* radio belongs to WiMAX */ +#define COEX_MEDIUM_ACTIVE	(0x1) /* radio belongs to WiFi */ +#define COEX_MEDIUM_PRE_RELEASE	(0x2) /* received radio release */ +#define COEX_MEDIUM_MSK		(0x7) + +/* send notification status (1 bit) */ +#define COEX_MEDIUM_CHANGED	(0x8) +#define COEX_MEDIUM_CHANGED_MSK	(0x8) +#define COEX_MEDIUM_SHIFT	(3) + +struct iwl_coex_medium_notification { +	__le32 status; +	__le32 events; +} __attribute__ ((packed)); + +/* + * Coexistence EVENT  Command + * COEX_EVENT_CMD = 0x5c + * + * send from host to uCode for coex event request. + */ +/* flags options */ +#define COEX_EVENT_REQUEST_MSK	(0x1) + +struct iwl_coex_event_cmd { +	u8 flags; +	u8 event; +	__le16 reserved; +} __attribute__ ((packed)); + +struct iwl_coex_event_resp { +	__le32 status; +} __attribute__ ((packed)); + +  /******************************************************************************   * (13)   * Union of all expected notifications/responses: @@ -3495,6 +3746,16 @@ struct iwl_wimax_coex_cmd {   *****************************************************************************/  struct iwl_rx_packet { +	/* +	 * The first 4 bytes of the RX frame header contain both the RX frame +	 * size and some flags. +	 * Bit fields: +	 * 31:    flag flush RB request +	 * 30:    flag ignore TC (terminal counter) request +	 * 29:    flag fast IRQ request +	 * 28-14: Reserved +	 * 13-00: RX frame size +	 */  	__le32 len_n_flags;  	struct iwl_cmd_header hdr;  	union { @@ -3514,6 +3775,8 @@ struct iwl_rx_packet {  		struct iwl_notif_statistics stats;  		struct iwl_compressed_ba_resp compressed_ba;  		struct iwl_missed_beacon_notif missed_beacon; +		struct iwl_coex_medium_notification coex_medium_notif; +		struct iwl_coex_event_resp coex_event;  		__le32 status;  		u8 raw[0];  	} u;  |