diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-commands.h')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-commands.h | 297 |
1 files changed, 280 insertions, 17 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-commands.h b/drivers/net/wireless/iwlwifi/iwl-commands.h index 4afaf773aeac..e91507531923 100644 --- a/drivers/net/wireless/iwlwifi/iwl-commands.h +++ b/drivers/net/wireless/iwlwifi/iwl-commands.h | |||
@@ -109,11 +109,12 @@ enum { | |||
109 | REPLY_TX_LINK_QUALITY_CMD = 0x4e, /* 4965 only */ | 109 | REPLY_TX_LINK_QUALITY_CMD = 0x4e, /* 4965 only */ |
110 | 110 | ||
111 | /* WiMAX coexistence */ | 111 | /* WiMAX coexistence */ |
112 | COEX_PRIORITY_TABLE_CMD = 0x5a, /*5000 only */ | 112 | COEX_PRIORITY_TABLE_CMD = 0x5a, /* for 5000 series and up */ |
113 | COEX_MEDIUM_NOTIFICATION = 0x5b, | 113 | COEX_MEDIUM_NOTIFICATION = 0x5b, |
114 | COEX_EVENT_CMD = 0x5c, | 114 | COEX_EVENT_CMD = 0x5c, |
115 | 115 | ||
116 | /* Calibration */ | 116 | /* Calibration */ |
117 | TEMPERATURE_NOTIFICATION = 0x62, | ||
117 | CALIBRATION_CFG_CMD = 0x65, | 118 | CALIBRATION_CFG_CMD = 0x65, |
118 | CALIBRATION_RES_NOTIFICATION = 0x66, | 119 | CALIBRATION_RES_NOTIFICATION = 0x66, |
119 | CALIBRATION_COMPLETE_NOTIFICATION = 0x67, | 120 | CALIBRATION_COMPLETE_NOTIFICATION = 0x67, |
@@ -148,7 +149,7 @@ enum { | |||
148 | QUIET_NOTIFICATION = 0x96, /* not used */ | 149 | QUIET_NOTIFICATION = 0x96, /* not used */ |
149 | REPLY_TX_PWR_TABLE_CMD = 0x97, | 150 | REPLY_TX_PWR_TABLE_CMD = 0x97, |
150 | REPLY_TX_POWER_DBM_CMD_V1 = 0x98, /* old version of API */ | 151 | REPLY_TX_POWER_DBM_CMD_V1 = 0x98, /* old version of API */ |
151 | TX_ANT_CONFIGURATION_CMD = 0x98, /* not used */ | 152 | TX_ANT_CONFIGURATION_CMD = 0x98, |
152 | MEASURE_ABORT_NOTIFICATION = 0x99, /* not used */ | 153 | MEASURE_ABORT_NOTIFICATION = 0x99, /* not used */ |
153 | 154 | ||
154 | /* Bluetooth device coexistence config command */ | 155 | /* Bluetooth device coexistence config command */ |
@@ -353,6 +354,9 @@ struct iwl3945_power_per_rate { | |||
353 | #define POWER_TABLE_NUM_HT_OFDM_ENTRIES 32 | 354 | #define POWER_TABLE_NUM_HT_OFDM_ENTRIES 32 |
354 | #define POWER_TABLE_CCK_ENTRY 32 | 355 | #define POWER_TABLE_CCK_ENTRY 32 |
355 | 356 | ||
357 | #define IWL_PWR_NUM_HT_OFDM_ENTRIES 24 | ||
358 | #define IWL_PWR_CCK_ENTRIES 2 | ||
359 | |||
356 | /** | 360 | /** |
357 | * union iwl4965_tx_power_dual_stream | 361 | * union iwl4965_tx_power_dual_stream |
358 | * | 362 | * |
@@ -411,6 +415,16 @@ struct iwl5000_tx_power_dbm_cmd { | |||
411 | u8 reserved; | 415 | u8 reserved; |
412 | } __attribute__ ((packed)); | 416 | } __attribute__ ((packed)); |
413 | 417 | ||
418 | /** | ||
419 | * Command TX_ANT_CONFIGURATION_CMD = 0x98 | ||
420 | * This command is used to configure valid Tx antenna. | ||
421 | * By default uCode concludes the valid antenna according to the radio flavor. | ||
422 | * This command enables the driver to override/modify this conclusion. | ||
423 | */ | ||
424 | struct iwl_tx_ant_config_cmd { | ||
425 | __le32 valid; | ||
426 | } __attribute__ ((packed)); | ||
427 | |||
414 | /****************************************************************************** | 428 | /****************************************************************************** |
415 | * (0a) | 429 | * (0a) |
416 | * Alive and Error Commands & Responses: | 430 | * Alive and Error Commands & Responses: |
@@ -793,7 +807,7 @@ struct iwl3945_channel_switch_cmd { | |||
793 | struct iwl3945_power_per_rate power[IWL_MAX_RATES]; | 807 | struct iwl3945_power_per_rate power[IWL_MAX_RATES]; |
794 | } __attribute__ ((packed)); | 808 | } __attribute__ ((packed)); |
795 | 809 | ||
796 | struct iwl_channel_switch_cmd { | 810 | struct iwl4965_channel_switch_cmd { |
797 | u8 band; | 811 | u8 band; |
798 | u8 expect_beacon; | 812 | u8 expect_beacon; |
799 | __le16 channel; | 813 | __le16 channel; |
@@ -803,6 +817,48 @@ struct iwl_channel_switch_cmd { | |||
803 | struct iwl4965_tx_power_db tx_power; | 817 | struct iwl4965_tx_power_db tx_power; |
804 | } __attribute__ ((packed)); | 818 | } __attribute__ ((packed)); |
805 | 819 | ||
820 | /** | ||
821 | * struct iwl5000_channel_switch_cmd | ||
822 | * @band: 0- 5.2GHz, 1- 2.4GHz | ||
823 | * @expect_beacon: 0- resume transmits after channel switch | ||
824 | * 1- wait for beacon to resume transmits | ||
825 | * @channel: new channel number | ||
826 | * @rxon_flags: Rx on flags | ||
827 | * @rxon_filter_flags: filtering parameters | ||
828 | * @switch_time: switch time in extended beacon format | ||
829 | * @reserved: reserved bytes | ||
830 | */ | ||
831 | struct iwl5000_channel_switch_cmd { | ||
832 | u8 band; | ||
833 | u8 expect_beacon; | ||
834 | __le16 channel; | ||
835 | __le32 rxon_flags; | ||
836 | __le32 rxon_filter_flags; | ||
837 | __le32 switch_time; | ||
838 | __le32 reserved[2][IWL_PWR_NUM_HT_OFDM_ENTRIES + IWL_PWR_CCK_ENTRIES]; | ||
839 | } __attribute__ ((packed)); | ||
840 | |||
841 | /** | ||
842 | * struct iwl6000_channel_switch_cmd | ||
843 | * @band: 0- 5.2GHz, 1- 2.4GHz | ||
844 | * @expect_beacon: 0- resume transmits after channel switch | ||
845 | * 1- wait for beacon to resume transmits | ||
846 | * @channel: new channel number | ||
847 | * @rxon_flags: Rx on flags | ||
848 | * @rxon_filter_flags: filtering parameters | ||
849 | * @switch_time: switch time in extended beacon format | ||
850 | * @reserved: reserved bytes | ||
851 | */ | ||
852 | struct iwl6000_channel_switch_cmd { | ||
853 | u8 band; | ||
854 | u8 expect_beacon; | ||
855 | __le16 channel; | ||
856 | __le32 rxon_flags; | ||
857 | __le32 rxon_filter_flags; | ||
858 | __le32 switch_time; | ||
859 | __le32 reserved[3][IWL_PWR_NUM_HT_OFDM_ENTRIES + IWL_PWR_CCK_ENTRIES]; | ||
860 | } __attribute__ ((packed)); | ||
861 | |||
806 | /* | 862 | /* |
807 | * CHANNEL_SWITCH_NOTIFICATION = 0x73 (notification only, not a command) | 863 | * CHANNEL_SWITCH_NOTIFICATION = 0x73 (notification only, not a command) |
808 | */ | 864 | */ |
@@ -921,6 +977,7 @@ struct iwl_qosparam_cmd { | |||
921 | #define STA_MODIFY_TX_RATE_MSK 0x04 | 977 | #define STA_MODIFY_TX_RATE_MSK 0x04 |
922 | #define STA_MODIFY_ADDBA_TID_MSK 0x08 | 978 | #define STA_MODIFY_ADDBA_TID_MSK 0x08 |
923 | #define STA_MODIFY_DELBA_TID_MSK 0x10 | 979 | #define STA_MODIFY_DELBA_TID_MSK 0x10 |
980 | #define STA_MODIFY_SLEEP_TX_COUNT_MSK 0x20 | ||
924 | 981 | ||
925 | /* Receiver address (actually, Rx station's index into station table), | 982 | /* Receiver address (actually, Rx station's index into station table), |
926 | * combined with Traffic ID (QOS priority), in format used by Tx Scheduler */ | 983 | * combined with Traffic ID (QOS priority), in format used by Tx Scheduler */ |
@@ -1051,7 +1108,14 @@ struct iwl4965_addsta_cmd { | |||
1051 | * Set modify_mask bit STA_MODIFY_ADDBA_TID_MSK to use this field. */ | 1108 | * Set modify_mask bit STA_MODIFY_ADDBA_TID_MSK to use this field. */ |
1052 | __le16 add_immediate_ba_ssn; | 1109 | __le16 add_immediate_ba_ssn; |
1053 | 1110 | ||
1054 | __le32 reserved2; | 1111 | /* |
1112 | * Number of packets OK to transmit to station even though | ||
1113 | * it is asleep -- used to synchronise PS-poll and u-APSD | ||
1114 | * responses while ucode keeps track of STA sleep state. | ||
1115 | */ | ||
1116 | __le16 sleep_tx_count; | ||
1117 | |||
1118 | __le16 reserved2; | ||
1055 | } __attribute__ ((packed)); | 1119 | } __attribute__ ((packed)); |
1056 | 1120 | ||
1057 | /* 5000 */ | 1121 | /* 5000 */ |
@@ -1082,7 +1146,14 @@ struct iwl_addsta_cmd { | |||
1082 | * Set modify_mask bit STA_MODIFY_ADDBA_TID_MSK to use this field. */ | 1146 | * Set modify_mask bit STA_MODIFY_ADDBA_TID_MSK to use this field. */ |
1083 | __le16 add_immediate_ba_ssn; | 1147 | __le16 add_immediate_ba_ssn; |
1084 | 1148 | ||
1085 | __le32 reserved2; | 1149 | /* |
1150 | * Number of packets OK to transmit to station even though | ||
1151 | * it is asleep -- used to synchronise PS-poll and u-APSD | ||
1152 | * responses while ucode keeps track of STA sleep state. | ||
1153 | */ | ||
1154 | __le16 sleep_tx_count; | ||
1155 | |||
1156 | __le16 reserved2; | ||
1086 | } __attribute__ ((packed)); | 1157 | } __attribute__ ((packed)); |
1087 | 1158 | ||
1088 | 1159 | ||
@@ -1634,6 +1705,21 @@ enum { | |||
1634 | TX_ABORT_REQUIRED_MSK = 0x80000000, /* bits 31:31 */ | 1705 | TX_ABORT_REQUIRED_MSK = 0x80000000, /* bits 31:31 */ |
1635 | }; | 1706 | }; |
1636 | 1707 | ||
1708 | static inline u32 iwl_tx_status_to_mac80211(u32 status) | ||
1709 | { | ||
1710 | status &= TX_STATUS_MSK; | ||
1711 | |||
1712 | switch (status) { | ||
1713 | case TX_STATUS_SUCCESS: | ||
1714 | case TX_STATUS_DIRECT_DONE: | ||
1715 | return IEEE80211_TX_STAT_ACK; | ||
1716 | case TX_STATUS_FAIL_DEST_PS: | ||
1717 | return IEEE80211_TX_STAT_TX_FILTERED; | ||
1718 | default: | ||
1719 | return 0; | ||
1720 | } | ||
1721 | } | ||
1722 | |||
1637 | static inline bool iwl_is_tx_success(u32 status) | 1723 | static inline bool iwl_is_tx_success(u32 status) |
1638 | { | 1724 | { |
1639 | status &= TX_STATUS_MSK; | 1725 | status &= TX_STATUS_MSK; |
@@ -2162,6 +2248,19 @@ struct iwl_link_quality_cmd { | |||
2162 | __le32 reserved2; | 2248 | __le32 reserved2; |
2163 | } __attribute__ ((packed)); | 2249 | } __attribute__ ((packed)); |
2164 | 2250 | ||
2251 | #define BT_COEX_DISABLE (0x0) | ||
2252 | #define BT_COEX_MODE_2W (0x1) | ||
2253 | #define BT_COEX_MODE_3W (0x2) | ||
2254 | #define BT_COEX_MODE_4W (0x3) | ||
2255 | |||
2256 | #define BT_LEAD_TIME_MIN (0x0) | ||
2257 | #define BT_LEAD_TIME_DEF (0x1E) | ||
2258 | #define BT_LEAD_TIME_MAX (0xFF) | ||
2259 | |||
2260 | #define BT_MAX_KILL_MIN (0x1) | ||
2261 | #define BT_MAX_KILL_DEF (0x5) | ||
2262 | #define BT_MAX_KILL_MAX (0xFF) | ||
2263 | |||
2165 | /* | 2264 | /* |
2166 | * REPLY_BT_CONFIG = 0x9b (command, has simple generic response) | 2265 | * REPLY_BT_CONFIG = 0x9b (command, has simple generic response) |
2167 | * | 2266 | * |
@@ -2497,9 +2596,10 @@ struct iwl_scan_channel { | |||
2497 | /** | 2596 | /** |
2498 | * struct iwl_ssid_ie - directed scan network information element | 2597 | * struct iwl_ssid_ie - directed scan network information element |
2499 | * | 2598 | * |
2500 | * Up to 4 of these may appear in REPLY_SCAN_CMD, selected by "type" field | 2599 | * Up to 20 of these may appear in REPLY_SCAN_CMD (Note: Only 4 are in |
2501 | * in struct iwl_scan_channel; each channel may select different ssids from | 2600 | * 3945 SCAN api), selected by "type" bit field in struct iwl_scan_channel; |
2502 | * among the 4 entries. SSID IEs get transmitted in reverse order of entry. | 2601 | * each channel may select different ssids from among the 20 (4) entries. |
2602 | * SSID IEs get transmitted in reverse order of entry. | ||
2503 | */ | 2603 | */ |
2504 | struct iwl_ssid_ie { | 2604 | struct iwl_ssid_ie { |
2505 | u8 id; | 2605 | u8 id; |
@@ -3001,6 +3101,10 @@ struct statistics_general { | |||
3001 | __le32 reserved3; | 3101 | __le32 reserved3; |
3002 | } __attribute__ ((packed)); | 3102 | } __attribute__ ((packed)); |
3003 | 3103 | ||
3104 | #define UCODE_STATISTICS_CLEAR_MSK (0x1 << 0) | ||
3105 | #define UCODE_STATISTICS_FREQUENCY_MSK (0x1 << 1) | ||
3106 | #define UCODE_STATISTICS_NARROW_BAND_MSK (0x1 << 2) | ||
3107 | |||
3004 | /* | 3108 | /* |
3005 | * REPLY_STATISTICS_CMD = 0x9c, | 3109 | * REPLY_STATISTICS_CMD = 0x9c, |
3006 | * 3945 and 4965 identical. | 3110 | * 3945 and 4965 identical. |
@@ -3237,12 +3341,6 @@ struct iwl_missed_beacon_notif { | |||
3237 | * Lower values mean higher energy; this means making sure that the value | 3341 | * Lower values mean higher energy; this means making sure that the value |
3238 | * in HD_MIN_ENERGY_CCK_DET_INDEX is at or *above* "Max cck energy". | 3342 | * in HD_MIN_ENERGY_CCK_DET_INDEX is at or *above* "Max cck energy". |
3239 | * | 3343 | * |
3240 | * Driver should set the following entries to fixed values: | ||
3241 | * | ||
3242 | * HD_MIN_ENERGY_OFDM_DET_INDEX 100 | ||
3243 | * HD_BARKER_CORR_TH_ADD_MIN_INDEX 190 | ||
3244 | * HD_BARKER_CORR_TH_ADD_MIN_MRC_INDEX 390 | ||
3245 | * HD_OFDM_ENERGY_TH_IN_INDEX 62 | ||
3246 | */ | 3344 | */ |
3247 | 3345 | ||
3248 | /* | 3346 | /* |
@@ -3440,30 +3538,134 @@ struct iwl_led_cmd { | |||
3440 | } __attribute__ ((packed)); | 3538 | } __attribute__ ((packed)); |
3441 | 3539 | ||
3442 | /* | 3540 | /* |
3443 | * Coexistence WIFI/WIMAX Command | 3541 | * station priority table entries |
3444 | * COEX_PRIORITY_TABLE_CMD = 0x5a | 3542 | * also used as potential "events" value for both |
3445 | * | 3543 | * COEX_MEDIUM_NOTIFICATION and COEX_EVENT_CMD |
3544 | */ | ||
3545 | |||
3546 | /* | ||
3547 | * COEX events entry flag masks | ||
3548 | * RP - Requested Priority | ||
3549 | * WP - Win Medium Priority: priority assigned when the contention has been won | ||
3550 | */ | ||
3551 | #define COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG (0x1) | ||
3552 | #define COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG (0x2) | ||
3553 | #define COEX_EVT_FLAG_DELAY_MEDIUM_FREE_NTFY_FLG (0x4) | ||
3554 | |||
3555 | #define COEX_CU_UNASSOC_IDLE_RP 4 | ||
3556 | #define COEX_CU_UNASSOC_MANUAL_SCAN_RP 4 | ||
3557 | #define COEX_CU_UNASSOC_AUTO_SCAN_RP 4 | ||
3558 | #define COEX_CU_CALIBRATION_RP 4 | ||
3559 | #define COEX_CU_PERIODIC_CALIBRATION_RP 4 | ||
3560 | #define COEX_CU_CONNECTION_ESTAB_RP 4 | ||
3561 | #define COEX_CU_ASSOCIATED_IDLE_RP 4 | ||
3562 | #define COEX_CU_ASSOC_MANUAL_SCAN_RP 4 | ||
3563 | #define COEX_CU_ASSOC_AUTO_SCAN_RP 4 | ||
3564 | #define COEX_CU_ASSOC_ACTIVE_LEVEL_RP 4 | ||
3565 | #define COEX_CU_RF_ON_RP 6 | ||
3566 | #define COEX_CU_RF_OFF_RP 4 | ||
3567 | #define COEX_CU_STAND_ALONE_DEBUG_RP 6 | ||
3568 | #define COEX_CU_IPAN_ASSOC_LEVEL_RP 4 | ||
3569 | #define COEX_CU_RSRVD1_RP 4 | ||
3570 | #define COEX_CU_RSRVD2_RP 4 | ||
3571 | |||
3572 | #define COEX_CU_UNASSOC_IDLE_WP 3 | ||
3573 | #define COEX_CU_UNASSOC_MANUAL_SCAN_WP 3 | ||
3574 | #define COEX_CU_UNASSOC_AUTO_SCAN_WP 3 | ||
3575 | #define COEX_CU_CALIBRATION_WP 3 | ||
3576 | #define COEX_CU_PERIODIC_CALIBRATION_WP 3 | ||
3577 | #define COEX_CU_CONNECTION_ESTAB_WP 3 | ||
3578 | #define COEX_CU_ASSOCIATED_IDLE_WP 3 | ||
3579 | #define COEX_CU_ASSOC_MANUAL_SCAN_WP 3 | ||
3580 | #define COEX_CU_ASSOC_AUTO_SCAN_WP 3 | ||
3581 | #define COEX_CU_ASSOC_ACTIVE_LEVEL_WP 3 | ||
3582 | #define COEX_CU_RF_ON_WP 3 | ||
3583 | #define COEX_CU_RF_OFF_WP 3 | ||
3584 | #define COEX_CU_STAND_ALONE_DEBUG_WP 6 | ||
3585 | #define COEX_CU_IPAN_ASSOC_LEVEL_WP 3 | ||
3586 | #define COEX_CU_RSRVD1_WP 3 | ||
3587 | #define COEX_CU_RSRVD2_WP 3 | ||
3588 | |||
3589 | #define COEX_UNASSOC_IDLE_FLAGS 0 | ||
3590 | #define COEX_UNASSOC_MANUAL_SCAN_FLAGS \ | ||
3591 | (COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG | \ | ||
3592 | COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG) | ||
3593 | #define COEX_UNASSOC_AUTO_SCAN_FLAGS \ | ||
3594 | (COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG | \ | ||
3595 | COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG) | ||
3596 | #define COEX_CALIBRATION_FLAGS \ | ||
3597 | (COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG | \ | ||
3598 | COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG) | ||
3599 | #define COEX_PERIODIC_CALIBRATION_FLAGS 0 | ||
3600 | /* | ||
3601 | * COEX_CONNECTION_ESTAB: | ||
3602 | * we need DELAY_MEDIUM_FREE_NTFY to let WiMAX disconnect from network. | ||
3603 | */ | ||
3604 | #define COEX_CONNECTION_ESTAB_FLAGS \ | ||
3605 | (COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG | \ | ||
3606 | COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG | \ | ||
3607 | COEX_EVT_FLAG_DELAY_MEDIUM_FREE_NTFY_FLG) | ||
3608 | #define COEX_ASSOCIATED_IDLE_FLAGS 0 | ||
3609 | #define COEX_ASSOC_MANUAL_SCAN_FLAGS \ | ||
3610 | (COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG | \ | ||
3611 | COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG) | ||
3612 | #define COEX_ASSOC_AUTO_SCAN_FLAGS \ | ||
3613 | (COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG | \ | ||
3614 | COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG) | ||
3615 | #define COEX_ASSOC_ACTIVE_LEVEL_FLAGS 0 | ||
3616 | #define COEX_RF_ON_FLAGS 0 | ||
3617 | #define COEX_RF_OFF_FLAGS 0 | ||
3618 | #define COEX_STAND_ALONE_DEBUG_FLAGS \ | ||
3619 | (COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG | \ | ||
3620 | COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG) | ||
3621 | #define COEX_IPAN_ASSOC_LEVEL_FLAGS \ | ||
3622 | (COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG | \ | ||
3623 | COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG | \ | ||
3624 | COEX_EVT_FLAG_DELAY_MEDIUM_FREE_NTFY_FLG) | ||
3625 | #define COEX_RSRVD1_FLAGS 0 | ||
3626 | #define COEX_RSRVD2_FLAGS 0 | ||
3627 | /* | ||
3628 | * COEX_CU_RF_ON is the event wrapping all radio ownership. | ||
3629 | * We need DELAY_MEDIUM_FREE_NTFY to let WiMAX disconnect from network. | ||
3446 | */ | 3630 | */ |
3631 | #define COEX_CU_RF_ON_FLAGS \ | ||
3632 | (COEX_EVT_FLAG_MEDIUM_FREE_NTFY_FLG | \ | ||
3633 | COEX_EVT_FLAG_MEDIUM_ACTV_NTFY_FLG | \ | ||
3634 | COEX_EVT_FLAG_DELAY_MEDIUM_FREE_NTFY_FLG) | ||
3635 | |||
3636 | |||
3447 | enum { | 3637 | enum { |
3638 | /* un-association part */ | ||
3448 | COEX_UNASSOC_IDLE = 0, | 3639 | COEX_UNASSOC_IDLE = 0, |
3449 | COEX_UNASSOC_MANUAL_SCAN = 1, | 3640 | COEX_UNASSOC_MANUAL_SCAN = 1, |
3450 | COEX_UNASSOC_AUTO_SCAN = 2, | 3641 | COEX_UNASSOC_AUTO_SCAN = 2, |
3642 | /* calibration */ | ||
3451 | COEX_CALIBRATION = 3, | 3643 | COEX_CALIBRATION = 3, |
3452 | COEX_PERIODIC_CALIBRATION = 4, | 3644 | COEX_PERIODIC_CALIBRATION = 4, |
3645 | /* connection */ | ||
3453 | COEX_CONNECTION_ESTAB = 5, | 3646 | COEX_CONNECTION_ESTAB = 5, |
3647 | /* association part */ | ||
3454 | COEX_ASSOCIATED_IDLE = 6, | 3648 | COEX_ASSOCIATED_IDLE = 6, |
3455 | COEX_ASSOC_MANUAL_SCAN = 7, | 3649 | COEX_ASSOC_MANUAL_SCAN = 7, |
3456 | COEX_ASSOC_AUTO_SCAN = 8, | 3650 | COEX_ASSOC_AUTO_SCAN = 8, |
3457 | COEX_ASSOC_ACTIVE_LEVEL = 9, | 3651 | COEX_ASSOC_ACTIVE_LEVEL = 9, |
3652 | /* RF ON/OFF */ | ||
3458 | COEX_RF_ON = 10, | 3653 | COEX_RF_ON = 10, |
3459 | COEX_RF_OFF = 11, | 3654 | COEX_RF_OFF = 11, |
3460 | COEX_STAND_ALONE_DEBUG = 12, | 3655 | COEX_STAND_ALONE_DEBUG = 12, |
3656 | /* IPAN */ | ||
3461 | COEX_IPAN_ASSOC_LEVEL = 13, | 3657 | COEX_IPAN_ASSOC_LEVEL = 13, |
3658 | /* reserved */ | ||
3462 | COEX_RSRVD1 = 14, | 3659 | COEX_RSRVD1 = 14, |
3463 | COEX_RSRVD2 = 15, | 3660 | COEX_RSRVD2 = 15, |
3464 | COEX_NUM_OF_EVENTS = 16 | 3661 | COEX_NUM_OF_EVENTS = 16 |
3465 | }; | 3662 | }; |
3466 | 3663 | ||
3664 | /* | ||
3665 | * Coexistence WIFI/WIMAX Command | ||
3666 | * COEX_PRIORITY_TABLE_CMD = 0x5a | ||
3667 | * | ||
3668 | */ | ||
3467 | struct iwl_wimax_coex_event_entry { | 3669 | struct iwl_wimax_coex_event_entry { |
3468 | u8 request_prio; | 3670 | u8 request_prio; |
3469 | u8 win_medium_prio; | 3671 | u8 win_medium_prio; |
@@ -3488,6 +3690,55 @@ struct iwl_wimax_coex_cmd { | |||
3488 | struct iwl_wimax_coex_event_entry sta_prio[COEX_NUM_OF_EVENTS]; | 3690 | struct iwl_wimax_coex_event_entry sta_prio[COEX_NUM_OF_EVENTS]; |
3489 | } __attribute__ ((packed)); | 3691 | } __attribute__ ((packed)); |
3490 | 3692 | ||
3693 | /* | ||
3694 | * Coexistence MEDIUM NOTIFICATION | ||
3695 | * COEX_MEDIUM_NOTIFICATION = 0x5b | ||
3696 | * | ||
3697 | * notification from uCode to host to indicate medium changes | ||
3698 | * | ||
3699 | */ | ||
3700 | /* | ||
3701 | * status field | ||
3702 | * bit 0 - 2: medium status | ||
3703 | * bit 3: medium change indication | ||
3704 | * bit 4 - 31: reserved | ||
3705 | */ | ||
3706 | /* status option values, (0 - 2 bits) */ | ||
3707 | #define COEX_MEDIUM_BUSY (0x0) /* radio belongs to WiMAX */ | ||
3708 | #define COEX_MEDIUM_ACTIVE (0x1) /* radio belongs to WiFi */ | ||
3709 | #define COEX_MEDIUM_PRE_RELEASE (0x2) /* received radio release */ | ||
3710 | #define COEX_MEDIUM_MSK (0x7) | ||
3711 | |||
3712 | /* send notification status (1 bit) */ | ||
3713 | #define COEX_MEDIUM_CHANGED (0x8) | ||
3714 | #define COEX_MEDIUM_CHANGED_MSK (0x8) | ||
3715 | #define COEX_MEDIUM_SHIFT (3) | ||
3716 | |||
3717 | struct iwl_coex_medium_notification { | ||
3718 | __le32 status; | ||
3719 | __le32 events; | ||
3720 | } __attribute__ ((packed)); | ||
3721 | |||
3722 | /* | ||
3723 | * Coexistence EVENT Command | ||
3724 | * COEX_EVENT_CMD = 0x5c | ||
3725 | * | ||
3726 | * send from host to uCode for coex event request. | ||
3727 | */ | ||
3728 | /* flags options */ | ||
3729 | #define COEX_EVENT_REQUEST_MSK (0x1) | ||
3730 | |||
3731 | struct iwl_coex_event_cmd { | ||
3732 | u8 flags; | ||
3733 | u8 event; | ||
3734 | __le16 reserved; | ||
3735 | } __attribute__ ((packed)); | ||
3736 | |||
3737 | struct iwl_coex_event_resp { | ||
3738 | __le32 status; | ||
3739 | } __attribute__ ((packed)); | ||
3740 | |||
3741 | |||
3491 | /****************************************************************************** | 3742 | /****************************************************************************** |
3492 | * (13) | 3743 | * (13) |
3493 | * Union of all expected notifications/responses: | 3744 | * Union of all expected notifications/responses: |
@@ -3495,6 +3746,16 @@ struct iwl_wimax_coex_cmd { | |||
3495 | *****************************************************************************/ | 3746 | *****************************************************************************/ |
3496 | 3747 | ||
3497 | struct iwl_rx_packet { | 3748 | struct iwl_rx_packet { |
3749 | /* | ||
3750 | * The first 4 bytes of the RX frame header contain both the RX frame | ||
3751 | * size and some flags. | ||
3752 | * Bit fields: | ||
3753 | * 31: flag flush RB request | ||
3754 | * 30: flag ignore TC (terminal counter) request | ||
3755 | * 29: flag fast IRQ request | ||
3756 | * 28-14: Reserved | ||
3757 | * 13-00: RX frame size | ||
3758 | */ | ||
3498 | __le32 len_n_flags; | 3759 | __le32 len_n_flags; |
3499 | struct iwl_cmd_header hdr; | 3760 | struct iwl_cmd_header hdr; |
3500 | union { | 3761 | union { |
@@ -3514,6 +3775,8 @@ struct iwl_rx_packet { | |||
3514 | struct iwl_notif_statistics stats; | 3775 | struct iwl_notif_statistics stats; |
3515 | struct iwl_compressed_ba_resp compressed_ba; | 3776 | struct iwl_compressed_ba_resp compressed_ba; |
3516 | struct iwl_missed_beacon_notif missed_beacon; | 3777 | struct iwl_missed_beacon_notif missed_beacon; |
3778 | struct iwl_coex_medium_notification coex_medium_notif; | ||
3779 | struct iwl_coex_event_resp coex_event; | ||
3517 | __le32 status; | 3780 | __le32 status; |
3518 | u8 raw[0]; | 3781 | u8 raw[0]; |
3519 | } u; | 3782 | } u; |