aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-commands.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-commands.h')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-commands.h470
1 files changed, 438 insertions, 32 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-commands.h b/drivers/net/wireless/iwlwifi/iwl-commands.h
index 4083e443082..3e4ba31b5d5 100644
--- a/drivers/net/wireless/iwlwifi/iwl-commands.h
+++ b/drivers/net/wireless/iwlwifi/iwl-commands.h
@@ -62,7 +62,7 @@
62 *****************************************************************************/ 62 *****************************************************************************/
63/* 63/*
64 * Please use this file (iwl-commands.h) only for uCode API definitions. 64 * Please use this file (iwl-commands.h) only for uCode API definitions.
65 * Please use iwl-4965-hw.h for hardware-related definitions. 65 * Please use iwl-xxxx-hw.h for hardware-related definitions.
66 * Please use iwl-dev.h for driver implementation definitions. 66 * Please use iwl-dev.h for driver implementation definitions.
67 */ 67 */
68 68
@@ -173,6 +173,23 @@ enum {
173 REPLY_RX_MPDU_CMD = 0xc1, 173 REPLY_RX_MPDU_CMD = 0xc1,
174 REPLY_RX = 0xc3, 174 REPLY_RX = 0xc3,
175 REPLY_COMPRESSED_BA = 0xc5, 175 REPLY_COMPRESSED_BA = 0xc5,
176
177 /* BT Coex */
178 REPLY_BT_COEX_PRIO_TABLE = 0xcc,
179 REPLY_BT_COEX_PROT_ENV = 0xcd,
180 REPLY_BT_COEX_PROFILE_NOTIF = 0xce,
181 REPLY_BT_COEX_SCO = 0xcf,
182
183 /* PAN commands */
184 REPLY_WIPAN_PARAMS = 0xb2,
185 REPLY_WIPAN_RXON = 0xb3, /* use REPLY_RXON structure */
186 REPLY_WIPAN_RXON_TIMING = 0xb4, /* use REPLY_RXON_TIMING structure */
187 REPLY_WIPAN_RXON_ASSOC = 0xb6, /* use REPLY_RXON_ASSOC structure */
188 REPLY_WIPAN_QOS_PARAM = 0xb7, /* use REPLY_QOS_PARAM structure */
189 REPLY_WIPAN_WEPKEY = 0xb8, /* use REPLY_WEPKEY structure */
190 REPLY_WIPAN_P2P_CHANNEL_SWITCH = 0xb9,
191 REPLY_WIPAN_NOA_NOTIFICATION = 0xbc,
192
176 REPLY_MAX = 0xff 193 REPLY_MAX = 0xff
177}; 194};
178 195
@@ -600,6 +617,9 @@ enum {
600 RXON_DEV_TYPE_ESS = 3, 617 RXON_DEV_TYPE_ESS = 3,
601 RXON_DEV_TYPE_IBSS = 4, 618 RXON_DEV_TYPE_IBSS = 4,
602 RXON_DEV_TYPE_SNIFFER = 6, 619 RXON_DEV_TYPE_SNIFFER = 6,
620 RXON_DEV_TYPE_CP = 7,
621 RXON_DEV_TYPE_2STA = 8,
622 RXON_DEV_TYPE_P2P = 9,
603}; 623};
604 624
605 625
@@ -816,7 +836,8 @@ struct iwl_rxon_time_cmd {
816 __le16 atim_window; 836 __le16 atim_window;
817 __le32 beacon_init_val; 837 __le32 beacon_init_val;
818 __le16 listen_interval; 838 __le16 listen_interval;
819 __le16 reserved; 839 u8 dtim_period;
840 u8 delta_cp_bss_tbtts;
820} __packed; 841} __packed;
821 842
822/* 843/*
@@ -953,11 +974,13 @@ struct iwl_qosparam_cmd {
953 974
954/* Special, dedicated locations within device's station table */ 975/* Special, dedicated locations within device's station table */
955#define IWL_AP_ID 0 976#define IWL_AP_ID 0
977#define IWL_AP_ID_PAN 1
956#define IWL_STA_ID 2 978#define IWL_STA_ID 2
957#define IWL3945_BROADCAST_ID 24 979#define IWL3945_BROADCAST_ID 24
958#define IWL3945_STATION_COUNT 25 980#define IWL3945_STATION_COUNT 25
959#define IWL4965_BROADCAST_ID 31 981#define IWL4965_BROADCAST_ID 31
960#define IWL4965_STATION_COUNT 32 982#define IWL4965_STATION_COUNT 32
983#define IWLAGN_PAN_BCAST_ID 14
961#define IWLAGN_BROADCAST_ID 15 984#define IWLAGN_BROADCAST_ID 15
962#define IWLAGN_STATION_COUNT 16 985#define IWLAGN_STATION_COUNT 16
963 986
@@ -966,6 +989,7 @@ struct iwl_qosparam_cmd {
966 989
967#define STA_FLG_TX_RATE_MSK cpu_to_le32(1 << 2) 990#define STA_FLG_TX_RATE_MSK cpu_to_le32(1 << 2)
968#define STA_FLG_PWR_SAVE_MSK cpu_to_le32(1 << 8) 991#define STA_FLG_PWR_SAVE_MSK cpu_to_le32(1 << 8)
992#define STA_FLG_PAN_STATION cpu_to_le32(1 << 13)
969#define STA_FLG_RTS_MIMO_PROT_MSK cpu_to_le32(1 << 17) 993#define STA_FLG_RTS_MIMO_PROT_MSK cpu_to_le32(1 << 17)
970#define STA_FLG_AGG_MPDU_8US_MSK cpu_to_le32(1 << 18) 994#define STA_FLG_AGG_MPDU_8US_MSK cpu_to_le32(1 << 18)
971#define STA_FLG_MAX_AGG_SIZE_POS (19) 995#define STA_FLG_MAX_AGG_SIZE_POS (19)
@@ -994,6 +1018,7 @@ struct iwl_qosparam_cmd {
994#define STA_KEY_FLG_KEY_SIZE_MSK cpu_to_le16(0x1000) 1018#define STA_KEY_FLG_KEY_SIZE_MSK cpu_to_le16(0x1000)
995#define STA_KEY_MULTICAST_MSK cpu_to_le16(0x4000) 1019#define STA_KEY_MULTICAST_MSK cpu_to_le16(0x4000)
996#define STA_KEY_MAX_NUM 8 1020#define STA_KEY_MAX_NUM 8
1021#define STA_KEY_MAX_NUM_PAN 16
997 1022
998/* Flags indicate whether to modify vs. don't change various station params */ 1023/* Flags indicate whether to modify vs. don't change various station params */
999#define STA_MODIFY_KEY_MASK 0x01 1024#define STA_MODIFY_KEY_MASK 0x01
@@ -1056,7 +1081,8 @@ struct sta_id_modify {
1056 * 1081 *
1057 * The device contains an internal table of per-station information, 1082 * The device contains an internal table of per-station information,
1058 * with info on security keys, aggregation parameters, and Tx rates for 1083 * with info on security keys, aggregation parameters, and Tx rates for
1059 * initial Tx attempt and any retries (4965 uses REPLY_TX_LINK_QUALITY_CMD, 1084 * initial Tx attempt and any retries (agn devices uses
1085 * REPLY_TX_LINK_QUALITY_CMD,
1060 * 3945 uses REPLY_RATE_SCALE to set up rate tables). 1086 * 3945 uses REPLY_RATE_SCALE to set up rate tables).
1061 * 1087 *
1062 * REPLY_ADD_STA sets up the table entry for one station, either creating 1088 * REPLY_ADD_STA sets up the table entry for one station, either creating
@@ -1427,12 +1453,12 @@ struct iwl_rx_mpdu_res_start {
1427 * uCode handles all timing and protocol related to control frames 1453 * uCode handles all timing and protocol related to control frames
1428 * (RTS/CTS/ACK), based on flags in the Tx command. uCode and Tx scheduler 1454 * (RTS/CTS/ACK), based on flags in the Tx command. uCode and Tx scheduler
1429 * handle reception of block-acks; uCode updates the host driver via 1455 * handle reception of block-acks; uCode updates the host driver via
1430 * REPLY_COMPRESSED_BA (4965). 1456 * REPLY_COMPRESSED_BA.
1431 * 1457 *
1432 * uCode handles retrying Tx when an ACK is expected but not received. 1458 * uCode handles retrying Tx when an ACK is expected but not received.
1433 * This includes trying lower data rates than the one requested in the Tx 1459 * This includes trying lower data rates than the one requested in the Tx
1434 * command, as set up by the REPLY_RATE_SCALE (for 3945) or 1460 * command, as set up by the REPLY_RATE_SCALE (for 3945) or
1435 * REPLY_TX_LINK_QUALITY_CMD (4965). 1461 * REPLY_TX_LINK_QUALITY_CMD (agn).
1436 * 1462 *
1437 * Driver sets up transmit power for various rates via REPLY_TX_PWR_TABLE_CMD. 1463 * Driver sets up transmit power for various rates via REPLY_TX_PWR_TABLE_CMD.
1438 * This command must be executed after every RXON command, before Tx can occur. 1464 * This command must be executed after every RXON command, before Tx can occur.
@@ -1468,7 +1494,7 @@ struct iwl_rx_mpdu_res_start {
1468 * Set this for unicast frames, but not broadcast/multicast. */ 1494 * Set this for unicast frames, but not broadcast/multicast. */
1469#define TX_CMD_FLG_ACK_MSK cpu_to_le32(1 << 3) 1495#define TX_CMD_FLG_ACK_MSK cpu_to_le32(1 << 3)
1470 1496
1471/* For 4965: 1497/* For agn devices:
1472 * 1: Use rate scale table (see REPLY_TX_LINK_QUALITY_CMD). 1498 * 1: Use rate scale table (see REPLY_TX_LINK_QUALITY_CMD).
1473 * Tx command's initial_rate_index indicates first rate to try; 1499 * Tx command's initial_rate_index indicates first rate to try;
1474 * uCode walks through table for additional Tx attempts. 1500 * uCode walks through table for additional Tx attempts.
@@ -1487,7 +1513,7 @@ struct iwl_rx_mpdu_res_start {
1487 */ 1513 */
1488#define TX_CMD_FLG_FULL_TXOP_PROT_MSK cpu_to_le32(1 << 7) 1514#define TX_CMD_FLG_FULL_TXOP_PROT_MSK cpu_to_le32(1 << 7)
1489 1515
1490/* Tx antenna selection field; used only for 3945, reserved (0) for 4965. 1516/* Tx antenna selection field; used only for 3945, reserved (0) for agn devices.
1491 * Set field to "0" to allow 3945 uCode to select antenna (normal usage). */ 1517 * Set field to "0" to allow 3945 uCode to select antenna (normal usage). */
1492#define TX_CMD_FLG_ANT_SEL_MSK cpu_to_le32(0xf00) 1518#define TX_CMD_FLG_ANT_SEL_MSK cpu_to_le32(0xf00)
1493#define TX_CMD_FLG_ANT_A_MSK cpu_to_le32(1 << 8) 1519#define TX_CMD_FLG_ANT_A_MSK cpu_to_le32(1 << 8)
@@ -1870,9 +1896,10 @@ enum {
1870 * frame in this new agg block failed in previous agg block(s). 1896 * frame in this new agg block failed in previous agg block(s).
1871 * 1897 *
1872 * Note that, for aggregation, ACK (block-ack) status is not delivered here; 1898 * Note that, for aggregation, ACK (block-ack) status is not delivered here;
1873 * block-ack has not been received by the time the 4965 records this status. 1899 * block-ack has not been received by the time the agn device records
1900 * this status.
1874 * This status relates to reasons the tx might have been blocked or aborted 1901 * This status relates to reasons the tx might have been blocked or aborted
1875 * within the sending station (this 4965), rather than whether it was 1902 * within the sending station (this agn device), rather than whether it was
1876 * received successfully by the destination station. 1903 * received successfully by the destination station.
1877 */ 1904 */
1878struct agg_tx_status { 1905struct agg_tx_status {
@@ -2140,14 +2167,16 @@ struct iwl_link_qual_agg_params {
2140/* 2167/*
2141 * REPLY_TX_LINK_QUALITY_CMD = 0x4e (command, has simple generic response) 2168 * REPLY_TX_LINK_QUALITY_CMD = 0x4e (command, has simple generic response)
2142 * 2169 *
2143 * For 4965 only; 3945 uses REPLY_RATE_SCALE. 2170 * For agn devices only; 3945 uses REPLY_RATE_SCALE.
2144 * 2171 *
2145 * Each station in the 4965's internal station table has its own table of 16 2172 * Each station in the agn device's internal station table has its own table
2173 * of 16
2146 * Tx rates and modulation modes (e.g. legacy/SISO/MIMO) for retrying Tx when 2174 * Tx rates and modulation modes (e.g. legacy/SISO/MIMO) for retrying Tx when
2147 * an ACK is not received. This command replaces the entire table for 2175 * an ACK is not received. This command replaces the entire table for
2148 * one station. 2176 * one station.
2149 * 2177 *
2150 * NOTE: Station must already be in 4965's station table. Use REPLY_ADD_STA. 2178 * NOTE: Station must already be in agn device's station table.
2179 * Use REPLY_ADD_STA.
2151 * 2180 *
2152 * The rate scaling procedures described below work well. Of course, other 2181 * The rate scaling procedures described below work well. Of course, other
2153 * procedures are possible, and may work better for particular environments. 2182 * procedures are possible, and may work better for particular environments.
@@ -2184,12 +2213,12 @@ struct iwl_link_qual_agg_params {
2184 * 2213 *
2185 * ACCUMULATING HISTORY 2214 * ACCUMULATING HISTORY
2186 * 2215 *
2187 * The rate scaling algorithm for 4965, as implemented in Linux driver, uses 2216 * The rate scaling algorithm for agn devices, as implemented in Linux driver,
2188 * two sets of frame Tx success history: One for the current/active modulation 2217 * uses two sets of frame Tx success history: One for the current/active
2189 * mode, and one for a speculative/search mode that is being attempted. If the 2218 * modulation mode, and one for a speculative/search mode that is being
2190 * speculative mode turns out to be more effective (i.e. actual transfer 2219 * attempted. If the speculative mode turns out to be more effective (i.e.
2191 * rate is better), then the driver continues to use the speculative mode 2220 * actual transfer rate is better), then the driver continues to use the
2192 * as the new current active mode. 2221 * speculative mode as the new current active mode.
2193 * 2222 *
2194 * Each history set contains, separately for each possible rate, data for a 2223 * Each history set contains, separately for each possible rate, data for a
2195 * sliding window of the 62 most recent tx attempts at that rate. The data 2224 * sliding window of the 62 most recent tx attempts at that rate. The data
@@ -2200,12 +2229,12 @@ struct iwl_link_qual_agg_params {
2200 * The driver uses the bit map to remove successes from the success sum, as 2229 * The driver uses the bit map to remove successes from the success sum, as
2201 * the oldest tx attempts fall out of the window. 2230 * the oldest tx attempts fall out of the window.
2202 * 2231 *
2203 * When the 4965 makes multiple tx attempts for a given frame, each attempt 2232 * When the agn device makes multiple tx attempts for a given frame, each
2204 * might be at a different rate, and have different modulation characteristics 2233 * attempt might be at a different rate, and have different modulation
2205 * (e.g. antenna, fat channel, short guard interval), as set up in the rate 2234 * characteristics (e.g. antenna, fat channel, short guard interval), as set
2206 * scaling table in the Link Quality command. The driver must determine 2235 * up in the rate scaling table in the Link Quality command. The driver must
2207 * which rate table entry was used for each tx attempt, to determine which 2236 * determine which rate table entry was used for each tx attempt, to determine
2208 * rate-specific history to update, and record only those attempts that 2237 * which rate-specific history to update, and record only those attempts that
2209 * match the modulation characteristics of the history set. 2238 * match the modulation characteristics of the history set.
2210 * 2239 *
2211 * When using block-ack (aggregation), all frames are transmitted at the same 2240 * When using block-ack (aggregation), all frames are transmitted at the same
@@ -2335,7 +2364,7 @@ struct iwl_link_quality_cmd {
2335 /* 2364 /*
2336 * Rate info; when using rate-scaling, Tx command's initial_rate_index 2365 * Rate info; when using rate-scaling, Tx command's initial_rate_index
2337 * specifies 1st Tx rate attempted, via index into this table. 2366 * specifies 1st Tx rate attempted, via index into this table.
2338 * 4965 works its way through table when retrying Tx. 2367 * agn devices works its way through table when retrying Tx.
2339 */ 2368 */
2340 struct { 2369 struct {
2341 __le32 rate_n_flags; /* RATE_MCS_*, IWL_RATE_* */ 2370 __le32 rate_n_flags; /* RATE_MCS_*, IWL_RATE_* */
@@ -2368,10 +2397,26 @@ struct iwl_link_quality_cmd {
2368#define BT_MAX_KILL_DEF (0x5) 2397#define BT_MAX_KILL_DEF (0x5)
2369#define BT_MAX_KILL_MAX (0xFF) 2398#define BT_MAX_KILL_MAX (0xFF)
2370 2399
2400#define BT_DURATION_LIMIT_DEF 625
2401#define BT_DURATION_LIMIT_MAX 1250
2402#define BT_DURATION_LIMIT_MIN 625
2403
2404#define BT_ON_THRESHOLD_DEF 4
2405#define BT_ON_THRESHOLD_MAX 1000
2406#define BT_ON_THRESHOLD_MIN 1
2407
2408#define BT_FRAG_THRESHOLD_DEF 0
2409#define BT_FRAG_THRESHOLD_MAX 0
2410#define BT_FRAG_THRESHOLD_MIN 0
2411
2412#define BT_AGG_THRESHOLD_DEF 0
2413#define BT_AGG_THRESHOLD_MAX 0
2414#define BT_AGG_THRESHOLD_MIN 0
2415
2371/* 2416/*
2372 * REPLY_BT_CONFIG = 0x9b (command, has simple generic response) 2417 * REPLY_BT_CONFIG = 0x9b (command, has simple generic response)
2373 * 2418 *
2374 * 3945 and 4965 support hardware handshake with Bluetooth device on 2419 * 3945 and agn devices support hardware handshake with Bluetooth device on
2375 * same platform. Bluetooth device alerts wireless device when it will Tx; 2420 * same platform. Bluetooth device alerts wireless device when it will Tx;
2376 * wireless device can delay or kill its own Tx to accommodate. 2421 * wireless device can delay or kill its own Tx to accommodate.
2377 */ 2422 */
@@ -2384,6 +2429,74 @@ struct iwl_bt_cmd {
2384 __le32 kill_cts_mask; 2429 __le32 kill_cts_mask;
2385} __packed; 2430} __packed;
2386 2431
2432#define IWLAGN_BT_FLAG_CHANNEL_INHIBITION BIT(0)
2433
2434#define IWLAGN_BT_FLAG_COEX_MODE_MASK (BIT(3)|BIT(4)|BIT(5))
2435#define IWLAGN_BT_FLAG_COEX_MODE_SHIFT 3
2436#define IWLAGN_BT_FLAG_COEX_MODE_DISABLED 0
2437#define IWLAGN_BT_FLAG_COEX_MODE_LEGACY_2W 1
2438#define IWLAGN_BT_FLAG_COEX_MODE_3W 2
2439#define IWLAGN_BT_FLAG_COEX_MODE_4W 3
2440
2441#define IWLAGN_BT_FLAG_UCODE_DEFAULT BIT(6)
2442#define IWLAGN_BT_FLAG_NOCOEX_NOTIF BIT(7)
2443
2444#define IWLAGN_BT_PRIO_BOOST_MAX 0xFF
2445#define IWLAGN_BT_PRIO_BOOST_MIN 0x00
2446#define IWLAGN_BT_PRIO_BOOST_DEFAULT 0xF0
2447
2448#define IWLAGN_BT_MAX_KILL_DEFAULT 5
2449
2450#define IWLAGN_BT3_T7_DEFAULT 1
2451
2452#define IWLAGN_BT_KILL_ACK_MASK_DEFAULT cpu_to_le32(0xffffffff)
2453#define IWLAGN_BT_KILL_CTS_MASK_DEFAULT cpu_to_le32(0xffffffff)
2454
2455#define IWLAGN_BT3_PRIO_SAMPLE_DEFAULT 2
2456
2457#define IWLAGN_BT3_T2_DEFAULT 0xc
2458
2459#define IWLAGN_BT_VALID_ENABLE_FLAGS cpu_to_le16(BIT(0))
2460#define IWLAGN_BT_VALID_BOOST cpu_to_le16(BIT(1))
2461#define IWLAGN_BT_VALID_MAX_KILL cpu_to_le16(BIT(2))
2462#define IWLAGN_BT_VALID_3W_TIMERS cpu_to_le16(BIT(3))
2463#define IWLAGN_BT_VALID_KILL_ACK_MASK cpu_to_le16(BIT(4))
2464#define IWLAGN_BT_VALID_KILL_CTS_MASK cpu_to_le16(BIT(5))
2465#define IWLAGN_BT_VALID_BT4_TIMES cpu_to_le16(BIT(6))
2466#define IWLAGN_BT_VALID_3W_LUT cpu_to_le16(BIT(7))
2467
2468#define IWLAGN_BT_ALL_VALID_MSK (IWLAGN_BT_VALID_ENABLE_FLAGS | \
2469 IWLAGN_BT_VALID_BOOST | \
2470 IWLAGN_BT_VALID_MAX_KILL | \
2471 IWLAGN_BT_VALID_3W_TIMERS | \
2472 IWLAGN_BT_VALID_KILL_ACK_MASK | \
2473 IWLAGN_BT_VALID_KILL_CTS_MASK | \
2474 IWLAGN_BT_VALID_BT4_TIMES | \
2475 IWLAGN_BT_VALID_3W_LUT)
2476
2477struct iwlagn_bt_cmd {
2478 u8 flags;
2479 u8 ledtime; /* unused */
2480 u8 max_kill;
2481 u8 bt3_timer_t7_value;
2482 __le32 kill_ack_mask;
2483 __le32 kill_cts_mask;
2484 u8 bt3_prio_sample_time;
2485 u8 bt3_timer_t2_value;
2486 __le16 bt4_reaction_time; /* unused */
2487 __le32 bt3_lookup_table[12];
2488 __le16 bt4_decision_time; /* unused */
2489 __le16 valid;
2490 u8 prio_boost;
2491 u8 reserved[3];
2492};
2493
2494#define IWLAGN_BT_SCO_ACTIVE cpu_to_le32(BIT(0))
2495
2496struct iwlagn_bt_sco_cmd {
2497 __le32 flags;
2498};
2499
2387/****************************************************************************** 2500/******************************************************************************
2388 * (6) 2501 * (6)
2389 * Spectrum Management (802.11h) Commands, Responses, Notifications: 2502 * Spectrum Management (802.11h) Commands, Responses, Notifications:
@@ -2572,7 +2685,7 @@ struct iwl_powertable_cmd {
2572 2685
2573/* 2686/*
2574 * PM_SLEEP_NOTIFICATION = 0x7A (notification only, not a command) 2687 * PM_SLEEP_NOTIFICATION = 0x7A (notification only, not a command)
2575 * 3945 and 4965 identical. 2688 * all devices identical.
2576 */ 2689 */
2577struct iwl_sleep_notification { 2690struct iwl_sleep_notification {
2578 u8 pm_sleep_mode; 2691 u8 pm_sleep_mode;
@@ -2583,7 +2696,7 @@ struct iwl_sleep_notification {
2583 __le32 bcon_timer; 2696 __le32 bcon_timer;
2584} __packed; 2697} __packed;
2585 2698
2586/* Sleep states. 3945 and 4965 identical. */ 2699/* Sleep states. all devices identical. */
2587enum { 2700enum {
2588 IWL_PM_NO_SLEEP = 0, 2701 IWL_PM_NO_SLEEP = 0,
2589 IWL_PM_SLP_MAC = 1, 2702 IWL_PM_SLP_MAC = 1,
@@ -2892,6 +3005,12 @@ struct iwl_scanstart_notification {
2892#define SCAN_OWNER_STATUS 0x1; 3005#define SCAN_OWNER_STATUS 0x1;
2893#define MEASURE_OWNER_STATUS 0x2; 3006#define MEASURE_OWNER_STATUS 0x2;
2894 3007
3008#define IWL_PROBE_STATUS_OK 0
3009#define IWL_PROBE_STATUS_TX_FAILED BIT(0)
3010/* error statuses combined with TX_FAILED */
3011#define IWL_PROBE_STATUS_FAIL_TTL BIT(1)
3012#define IWL_PROBE_STATUS_FAIL_BT BIT(2)
3013
2895#define NUMBER_OF_STATISTICS 1 /* first __le32 is good CRC */ 3014#define NUMBER_OF_STATISTICS 1 /* first __le32 is good CRC */
2896/* 3015/*
2897 * SCAN_RESULTS_NOTIFICATION = 0x83 (notification only, not a command) 3016 * SCAN_RESULTS_NOTIFICATION = 0x83 (notification only, not a command)
@@ -2899,7 +3018,8 @@ struct iwl_scanstart_notification {
2899struct iwl_scanresults_notification { 3018struct iwl_scanresults_notification {
2900 u8 channel; 3019 u8 channel;
2901 u8 band; 3020 u8 band;
2902 u8 reserved[2]; 3021 u8 probe_status;
3022 u8 num_probe_not_sent; /* not enough time to send */
2903 __le32 tsf_low; 3023 __le32 tsf_low;
2904 __le32 tsf_high; 3024 __le32 tsf_high;
2905 __le32 statistics[NUMBER_OF_STATISTICS]; 3025 __le32 statistics[NUMBER_OF_STATISTICS];
@@ -2911,7 +3031,7 @@ struct iwl_scanresults_notification {
2911struct iwl_scancomplete_notification { 3031struct iwl_scancomplete_notification {
2912 u8 scanned_channels; 3032 u8 scanned_channels;
2913 u8 status; 3033 u8 status;
2914 u8 reserved; 3034 u8 bt_status; /* BT On/Off status */
2915 u8 last_channel; 3035 u8 last_channel;
2916 __le32 tsf_low; 3036 __le32 tsf_low;
2917 __le32 tsf_high; 3037 __le32 tsf_high;
@@ -3270,7 +3390,7 @@ struct statistics_general_bt {
3270 3390
3271/* 3391/*
3272 * REPLY_STATISTICS_CMD = 0x9c, 3392 * REPLY_STATISTICS_CMD = 0x9c,
3273 * 3945 and 4965 identical. 3393 * all devices identical.
3274 * 3394 *
3275 * This command triggers an immediate response containing uCode statistics. 3395 * This command triggers an immediate response containing uCode statistics.
3276 * The response is in the same format as STATISTICS_NOTIFICATION 0x9d, below. 3396 * The response is in the same format as STATISTICS_NOTIFICATION 0x9d, below.
@@ -3608,7 +3728,7 @@ struct iwl_enhance_sensitivity_cmd {
3608/** 3728/**
3609 * REPLY_PHY_CALIBRATION_CMD = 0xb0 (command, has simple generic response) 3729 * REPLY_PHY_CALIBRATION_CMD = 0xb0 (command, has simple generic response)
3610 * 3730 *
3611 * This command sets the relative gains of 4965's 3 radio receiver chains. 3731 * This command sets the relative gains of agn device's 3 radio receiver chains.
3612 * 3732 *
3613 * After the first association, driver should accumulate signal and noise 3733 * After the first association, driver should accumulate signal and noise
3614 * statistics from the STATISTICS_NOTIFICATIONs that follow the first 20 3734 * statistics from the STATISTICS_NOTIFICATIONs that follow the first 20
@@ -3965,6 +4085,201 @@ struct iwl_coex_event_resp {
3965 4085
3966 4086
3967/****************************************************************************** 4087/******************************************************************************
4088 * Bluetooth Coexistence commands
4089 *
4090 *****************************************************************************/
4091
4092/*
4093 * BT Status notification
4094 * REPLY_BT_COEX_PROFILE_NOTIF = 0xce
4095 */
4096enum iwl_bt_coex_profile_traffic_load {
4097 IWL_BT_COEX_TRAFFIC_LOAD_NONE = 0,
4098 IWL_BT_COEX_TRAFFIC_LOAD_LOW = 1,
4099 IWL_BT_COEX_TRAFFIC_LOAD_HIGH = 2,
4100 IWL_BT_COEX_TRAFFIC_LOAD_CONTINUOUS = 3,
4101/*
4102 * There are no more even though below is a u8, the
4103 * indication from the BT device only has two bits.
4104 */
4105};
4106
4107#define BT_UART_MSG_FRAME1MSGTYPE_POS (0)
4108#define BT_UART_MSG_FRAME1MSGTYPE_MSK \
4109 (0x7 << BT_UART_MSG_FRAME1MSGTYPE_POS)
4110#define BT_UART_MSG_FRAME1SSN_POS (3)
4111#define BT_UART_MSG_FRAME1SSN_MSK \
4112 (0x3 << BT_UART_MSG_FRAME1SSN_POS)
4113#define BT_UART_MSG_FRAME1UPDATEREQ_POS (5)
4114#define BT_UART_MSG_FRAME1UPDATEREQ_MSK \
4115 (0x1 << BT_UART_MSG_FRAME1UPDATEREQ_POS)
4116#define BT_UART_MSG_FRAME1RESERVED_POS (6)
4117#define BT_UART_MSG_FRAME1RESERVED_MSK \
4118 (0x3 << BT_UART_MSG_FRAME1RESERVED_POS)
4119
4120#define BT_UART_MSG_FRAME2OPENCONNECTIONS_POS (0)
4121#define BT_UART_MSG_FRAME2OPENCONNECTIONS_MSK \
4122 (0x3 << BT_UART_MSG_FRAME2OPENCONNECTIONS_POS)
4123#define BT_UART_MSG_FRAME2TRAFFICLOAD_POS (2)
4124#define BT_UART_MSG_FRAME2TRAFFICLOAD_MSK \
4125 (0x3 << BT_UART_MSG_FRAME2TRAFFICLOAD_POS)
4126#define BT_UART_MSG_FRAME2CHLSEQN_POS (4)
4127#define BT_UART_MSG_FRAME2CHLSEQN_MSK \
4128 (0x1 << BT_UART_MSG_FRAME2CHLSEQN_POS)
4129#define BT_UART_MSG_FRAME2INBAND_POS (5)
4130#define BT_UART_MSG_FRAME2INBAND_MSK \
4131 (0x1 << BT_UART_MSG_FRAME2INBAND_POS)
4132#define BT_UART_MSG_FRAME2RESERVED_POS (6)
4133#define BT_UART_MSG_FRAME2RESERVED_MSK \
4134 (0x3 << BT_UART_MSG_FRAME2RESERVED_POS)
4135
4136#define BT_UART_MSG_FRAME3SCOESCO_POS (0)
4137#define BT_UART_MSG_FRAME3SCOESCO_MSK \
4138 (0x1 << BT_UART_MSG_FRAME3SCOESCO_POS)
4139#define BT_UART_MSG_FRAME3SNIFF_POS (1)
4140#define BT_UART_MSG_FRAME3SNIFF_MSK \
4141 (0x1 << BT_UART_MSG_FRAME3SNIFF_POS)
4142#define BT_UART_MSG_FRAME3A2DP_POS (2)
4143#define BT_UART_MSG_FRAME3A2DP_MSK \
4144 (0x1 << BT_UART_MSG_FRAME3A2DP_POS)
4145#define BT_UART_MSG_FRAME3ACL_POS (3)
4146#define BT_UART_MSG_FRAME3ACL_MSK \
4147 (0x1 << BT_UART_MSG_FRAME3ACL_POS)
4148#define BT_UART_MSG_FRAME3MASTER_POS (4)
4149#define BT_UART_MSG_FRAME3MASTER_MSK \
4150 (0x1 << BT_UART_MSG_FRAME3MASTER_POS)
4151#define BT_UART_MSG_FRAME3OBEX_POS (5)
4152#define BT_UART_MSG_FRAME3OBEX_MSK \
4153 (0x1 << BT_UART_MSG_FRAME3OBEX_POS)
4154#define BT_UART_MSG_FRAME3RESERVED_POS (6)
4155#define BT_UART_MSG_FRAME3RESERVED_MSK \
4156 (0x3 << BT_UART_MSG_FRAME3RESERVED_POS)
4157
4158#define BT_UART_MSG_FRAME4IDLEDURATION_POS (0)
4159#define BT_UART_MSG_FRAME4IDLEDURATION_MSK \
4160 (0x3F << BT_UART_MSG_FRAME4IDLEDURATION_POS)
4161#define BT_UART_MSG_FRAME4RESERVED_POS (6)
4162#define BT_UART_MSG_FRAME4RESERVED_MSK \
4163 (0x3 << BT_UART_MSG_FRAME4RESERVED_POS)
4164
4165#define BT_UART_MSG_FRAME5TXACTIVITY_POS (0)
4166#define BT_UART_MSG_FRAME5TXACTIVITY_MSK \
4167 (0x3 << BT_UART_MSG_FRAME5TXACTIVITY_POS)
4168#define BT_UART_MSG_FRAME5RXACTIVITY_POS (2)
4169#define BT_UART_MSG_FRAME5RXACTIVITY_MSK \
4170 (0x3 << BT_UART_MSG_FRAME5RXACTIVITY_POS)
4171#define BT_UART_MSG_FRAME5ESCORETRANSMIT_POS (4)
4172#define BT_UART_MSG_FRAME5ESCORETRANSMIT_MSK \
4173 (0x3 << BT_UART_MSG_FRAME5ESCORETRANSMIT_POS)
4174#define BT_UART_MSG_FRAME5RESERVED_POS (6)
4175#define BT_UART_MSG_FRAME5RESERVED_MSK \
4176 (0x3 << BT_UART_MSG_FRAME5RESERVED_POS)
4177
4178#define BT_UART_MSG_FRAME6SNIFFINTERVAL_POS (0)
4179#define BT_UART_MSG_FRAME6SNIFFINTERVAL_MSK \
4180 (0x1F << BT_UART_MSG_FRAME6SNIFFINTERVAL_POS)
4181#define BT_UART_MSG_FRAME6DISCOVERABLE_POS (5)
4182#define BT_UART_MSG_FRAME6DISCOVERABLE_MSK \
4183 (0x1 << BT_UART_MSG_FRAME6DISCOVERABLE_POS)
4184#define BT_UART_MSG_FRAME6RESERVED_POS (6)
4185#define BT_UART_MSG_FRAME6RESERVED_MSK \
4186 (0x3 << BT_UART_MSG_FRAME6RESERVED_POS)
4187
4188#define BT_UART_MSG_FRAME7SNIFFACTIVITY_POS (0)
4189#define BT_UART_MSG_FRAME7SNIFFACTIVITY_MSK \
4190 (0x7 << BT_UART_MSG_FRAME7SNIFFACTIVITY_POS)
4191#define BT_UART_MSG_FRAME7INQUIRYPAGESRMODE_POS (3)
4192#define BT_UART_MSG_FRAME7INQUIRYPAGESRMODE_MSK \
4193 (0x3 << BT_UART_MSG_FRAME7INQUIRYPAGESRMODE_POS)
4194#define BT_UART_MSG_FRAME7CONNECTABLE_POS (5)
4195#define BT_UART_MSG_FRAME7CONNECTABLE_MSK \
4196 (0x1 << BT_UART_MSG_FRAME7CONNECTABLE_POS)
4197#define BT_UART_MSG_FRAME7RESERVED_POS (6)
4198#define BT_UART_MSG_FRAME7RESERVED_MSK \
4199 (0x3 << BT_UART_MSG_FRAME7RESERVED_POS)
4200
4201
4202struct iwl_bt_uart_msg {
4203 u8 header;
4204 u8 frame1;
4205 u8 frame2;
4206 u8 frame3;
4207 u8 frame4;
4208 u8 frame5;
4209 u8 frame6;
4210 u8 frame7;
4211} __attribute__((packed));
4212
4213struct iwl_bt_coex_profile_notif {
4214 struct iwl_bt_uart_msg last_bt_uart_msg;
4215 u8 bt_status; /* 0 - off, 1 - on */
4216 u8 bt_traffic_load; /* 0 .. 3? */
4217 u8 bt_ci_compliance; /* 0 - not complied, 1 - complied */
4218 u8 reserved;
4219} __attribute__((packed));
4220
4221#define IWL_BT_COEX_PRIO_TBL_SHARED_ANTENNA_POS 0
4222#define IWL_BT_COEX_PRIO_TBL_SHARED_ANTENNA_MSK 0x1
4223#define IWL_BT_COEX_PRIO_TBL_PRIO_POS 1
4224#define IWL_BT_COEX_PRIO_TBL_PRIO_MASK 0x0e
4225#define IWL_BT_COEX_PRIO_TBL_RESERVED_POS 4
4226#define IWL_BT_COEX_PRIO_TBL_RESERVED_MASK 0xf0
4227#define IWL_BT_COEX_PRIO_TBL_PRIO_SHIFT 1
4228
4229/*
4230 * BT Coexistence Priority table
4231 * REPLY_BT_COEX_PRIO_TABLE = 0xcc
4232 */
4233enum bt_coex_prio_table_events {
4234 BT_COEX_PRIO_TBL_EVT_INIT_CALIB1 = 0,
4235 BT_COEX_PRIO_TBL_EVT_INIT_CALIB2 = 1,
4236 BT_COEX_PRIO_TBL_EVT_PERIODIC_CALIB_LOW1 = 2,
4237 BT_COEX_PRIO_TBL_EVT_PERIODIC_CALIB_LOW2 = 3, /* DC calib */
4238 BT_COEX_PRIO_TBL_EVT_PERIODIC_CALIB_HIGH1 = 4,
4239 BT_COEX_PRIO_TBL_EVT_PERIODIC_CALIB_HIGH2 = 5,
4240 BT_COEX_PRIO_TBL_EVT_DTIM = 6,
4241 BT_COEX_PRIO_TBL_EVT_SCAN52 = 7,
4242 BT_COEX_PRIO_TBL_EVT_SCAN24 = 8,
4243 BT_COEX_PRIO_TBL_EVT_RESERVED0 = 9,
4244 BT_COEX_PRIO_TBL_EVT_RESERVED1 = 10,
4245 BT_COEX_PRIO_TBL_EVT_RESERVED2 = 11,
4246 BT_COEX_PRIO_TBL_EVT_RESERVED3 = 12,
4247 BT_COEX_PRIO_TBL_EVT_RESERVED4 = 13,
4248 BT_COEX_PRIO_TBL_EVT_RESERVED5 = 14,
4249 BT_COEX_PRIO_TBL_EVT_RESERVED6 = 15,
4250 /* BT_COEX_PRIO_TBL_EVT_MAX should always be last */
4251 BT_COEX_PRIO_TBL_EVT_MAX,
4252};
4253
4254enum bt_coex_prio_table_priorities {
4255 BT_COEX_PRIO_TBL_DISABLED = 0,
4256 BT_COEX_PRIO_TBL_PRIO_LOW = 1,
4257 BT_COEX_PRIO_TBL_PRIO_HIGH = 2,
4258 BT_COEX_PRIO_TBL_PRIO_BYPASS = 3,
4259 BT_COEX_PRIO_TBL_PRIO_COEX_OFF = 4,
4260 BT_COEX_PRIO_TBL_PRIO_COEX_ON = 5,
4261 BT_COEX_PRIO_TBL_PRIO_RSRVD1 = 6,
4262 BT_COEX_PRIO_TBL_PRIO_RSRVD2 = 7,
4263 BT_COEX_PRIO_TBL_MAX,
4264};
4265
4266struct iwl_bt_coex_prio_table_cmd {
4267 u8 prio_tbl[BT_COEX_PRIO_TBL_EVT_MAX];
4268} __attribute__((packed));
4269
4270#define IWL_BT_COEX_ENV_CLOSE 0
4271#define IWL_BT_COEX_ENV_OPEN 1
4272/*
4273 * BT Protection Envelope
4274 * REPLY_BT_COEX_PROT_ENV = 0xcd
4275 */
4276struct iwl_bt_coex_prot_env_cmd {
4277 u8 action; /* 0 = closed, 1 = open */
4278 u8 type; /* 0 .. 15 */
4279 u8 reserved[2];
4280} __attribute__((packed));
4281
4282/******************************************************************************
3968 * (13) 4283 * (13)
3969 * Union of all expected notifications/responses: 4284 * Union of all expected notifications/responses:
3970 * 4285 *
@@ -4003,6 +4318,7 @@ struct iwl_rx_packet {
4003 struct iwl_missed_beacon_notif missed_beacon; 4318 struct iwl_missed_beacon_notif missed_beacon;
4004 struct iwl_coex_medium_notification coex_medium_notif; 4319 struct iwl_coex_medium_notification coex_medium_notif;
4005 struct iwl_coex_event_resp coex_event; 4320 struct iwl_coex_event_resp coex_event;
4321 struct iwl_bt_coex_profile_notif bt_coex_profile_notif;
4006 __le32 status; 4322 __le32 status;
4007 u8 raw[0]; 4323 u8 raw[0];
4008 } u; 4324 } u;
@@ -4010,4 +4326,94 @@ struct iwl_rx_packet {
4010 4326
4011int iwl_agn_check_rxon_cmd(struct iwl_priv *priv); 4327int iwl_agn_check_rxon_cmd(struct iwl_priv *priv);
4012 4328
4329/*
4330 * REPLY_WIPAN_PARAMS = 0xb2 (Commands and Notification)
4331 */
4332
4333/**
4334 * struct iwl_wipan_slot
4335 * @width: Time in TU
4336 * @type:
4337 * 0 - BSS
4338 * 1 - PAN
4339 */
4340struct iwl_wipan_slot {
4341 __le16 width;
4342 u8 type;
4343 u8 reserved;
4344} __packed;
4345
4346#define IWL_WIPAN_PARAMS_FLG_LEAVE_CHANNEL_CTS BIT(1) /* reserved */
4347#define IWL_WIPAN_PARAMS_FLG_LEAVE_CHANNEL_QUIET BIT(2) /* reserved */
4348#define IWL_WIPAN_PARAMS_FLG_SLOTTED_MODE BIT(3) /* reserved */
4349#define IWL_WIPAN_PARAMS_FLG_FILTER_BEACON_NOTIF BIT(4)
4350#define IWL_WIPAN_PARAMS_FLG_FULL_SLOTTED_MODE BIT(5)
4351
4352/**
4353 * struct iwl_wipan_params_cmd
4354 * @flags:
4355 * bit0: reserved
4356 * bit1: CP leave channel with CTS
4357 * bit2: CP leave channel qith Quiet
4358 * bit3: slotted mode
4359 * 1 - work in slotted mode
4360 * 0 - work in non slotted mode
4361 * bit4: filter beacon notification
4362 * bit5: full tx slotted mode. if this flag is set,
4363 * uCode will perform leaving channel methods in context switch
4364 * also when working in same channel mode
4365 * @num_slots: 1 - 10
4366 */
4367struct iwl_wipan_params_cmd {
4368 __le16 flags;
4369 u8 reserved;
4370 u8 num_slots;
4371 struct iwl_wipan_slot slots[10];
4372} __packed;
4373
4374/*
4375 * REPLY_WIPAN_P2P_CHANNEL_SWITCH = 0xb9
4376 *
4377 * TODO: Figure out what this is used for,
4378 * it can only switch between 2.4 GHz
4379 * channels!!
4380 */
4381
4382struct iwl_wipan_p2p_channel_switch_cmd {
4383 __le16 channel;
4384 __le16 reserved;
4385};
4386
4387/*
4388 * REPLY_WIPAN_NOA_NOTIFICATION = 0xbc
4389 *
4390 * This is used by the device to notify us of the
4391 * NoA schedule it determined so we can forward it
4392 * to userspace for inclusion in probe responses.
4393 *
4394 * In beacons, the NoA schedule is simply appended
4395 * to the frame we give the device.
4396 */
4397
4398struct iwl_wipan_noa_descriptor {
4399 u8 count;
4400 __le32 duration;
4401 __le32 interval;
4402 __le32 starttime;
4403} __packed;
4404
4405struct iwl_wipan_noa_attribute {
4406 u8 id;
4407 __le16 length;
4408 u8 index;
4409 u8 ct_window;
4410 struct iwl_wipan_noa_descriptor descr0, descr1;
4411 u8 reserved;
4412} __packed;
4413
4414struct iwl_wipan_noa_notification {
4415 u32 noa_active;
4416 struct iwl_wipan_noa_attribute noa_attribute;
4417} __packed;
4418
4013#endif /* __iwl_commands_h__ */ 4419#endif /* __iwl_commands_h__ */