Author: adrian
Date: Fri Aug  2 21:28:36 2013
New Revision: 253898
URL: http://svnweb.freebsd.org/changeset/base/253898

Log:
  Add in some definitions required for later iwn(4) device support.
  
  This also clarifies a few existing fields.
  
  Tested:
  
  * Intel 5100
  
  Submitted by: Cedric GROSS <c...@gross.info>

Modified:
  head/sys/dev/iwn/if_iwnreg.h

Modified: head/sys/dev/iwn/if_iwnreg.h
==============================================================================
--- head/sys/dev/iwn/if_iwnreg.h        Fri Aug  2 21:23:28 2013        
(r253897)
+++ head/sys/dev/iwn/if_iwnreg.h        Fri Aug  2 21:28:36 2013        
(r253898)
@@ -18,6 +18,9 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
+#define        IWN_CT_KILL_THRESHOLD           114     /* in Celsius */
+#define        IWN_CT_KILL_EXIT_THRESHOLD      95      /* in Celsius */
+
 #define IWN_TX_RING_COUNT      256
 #define IWN_TX_RING_LOMARK     192
 #define IWN_TX_RING_HIMARK     224
@@ -38,6 +41,10 @@
 #define IWN_ICT_SIZE           4096
 #define IWN_ICT_COUNT          (IWN_ICT_SIZE / sizeof (uint32_t))
 
+/* For cards with PAN command, default is IWN_CMD_QUEUE_NUM */
+#define        IWN_CMD_QUEUE_NUM               4
+#define        IWN_PAN_CMD_QUEUE               9
+
 /* Maximum number of DMA segments for TX. */
 #define IWN_MAX_SCATTER        20
 
@@ -89,6 +96,7 @@
 #define IWN_MEM_WADDR          0x410
 #define IWN_MEM_WDATA          0x418
 #define IWN_MEM_RDATA          0x41c
+#define        IWN_TARG_MBX_C          0x430
 #define IWN_PRPH_WADDR         0x444
 #define IWN_PRPH_RADDR         0x448
 #define IWN_PRPH_WDATA         0x44c
@@ -213,17 +221,45 @@
 #define IWN_GP_DRIVER_RADIO_2X2_IPA    (2 << 0)
 #define IWN_GP_DRIVER_CALIB_VER6       (1 << 2)
 #define IWN_GP_DRIVER_6050_1X2         (1 << 3)
+#define        IWN_GP_DRIVER_REG_BIT_RADIO_IQ_INVERT   (1 << 7)
 
 /* Possible flags for register IWN_UCODE_GP1_CLR. */
 #define IWN_UCODE_GP1_RFKILL           (1 << 1)
 #define IWN_UCODE_GP1_CMD_BLOCKED      (1 << 2)
 #define IWN_UCODE_GP1_CTEMP_STOP_RF    (1 << 3)
+#define        IWN_UCODE_GP1_CFG_COMPLETE      (1 << 5)
 
 /* Possible flags/values for register IWN_LED. */
 #define IWN_LED_BSM_CTRL       (1 << 5)
 #define IWN_LED_OFF            0x00000038
 #define IWN_LED_ON             0x00000078
 
+#define        IWN_MAX_BLINK_TBL       10
+#define        IWN_LED_STATIC_ON       0
+#define        IWN_LED_STATIC_OFF      1
+#define        IWN_LED_SLOW_BLINK      2
+#define        IWN_LED_INT_BLINK       3
+#define        IWN_LED_UNIT            0x1388  /* 5 ms */
+
+static const struct {
+       uint16_t        tpt;    /* Mb/s */
+       uint8_t         on_time;
+       uint8_t         off_time;
+} blink_tbl[] =
+{
+       {300, 5, 5},
+       {200, 8, 8},
+       {100, 11, 11},
+       {70, 13, 13},
+       {50, 15, 15},
+       {20, 17, 17},
+       {10, 19, 19},
+       {5, 22, 22},
+       {1, 26, 26},
+       {0, 33, 33},
+       /* SOLID_ON */
+};
+
 /* Possible flags for register IWN_DRAM_INT_TBL. */
 #define IWN_DRAM_INT_TBL_WRAP_CHECK    (1 << 27)
 #define IWN_DRAM_INT_TBL_ENABLE                (1 << 31)
@@ -370,14 +406,26 @@ struct iwn_rx_status {
 } __packed;
 
 struct iwn_rx_desc {
+       /*
+        * 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
+        */
        uint32_t        len;
        uint8_t         type;
 #define IWN_UC_READY                     1
 #define IWN_ADD_NODE_DONE               24
 #define IWN_TX_DONE                     28
+#define        IWN_REPLY_LED_CMD               72
 #define IWN5000_CALIBRATION_RESULT     102
 #define IWN5000_CALIBRATION_DONE       103
 #define IWN_START_SCAN                 130
+#define        IWN_NOTIF_SCAN_RESULT           131
 #define IWN_STOP_SCAN                  132
 #define IWN_RX_STATISTICS              156
 #define IWN_BEACON_STATISTICS          157
@@ -388,11 +436,23 @@ struct iwn_rx_desc {
 #define IWN_RX_DONE                    195
 #define IWN_RX_COMPRESSED_BA           197
 
-       uint8_t         flags;
-       uint8_t         idx;
+       uint8_t         flags;  /* 0:5 reserved, 6 abort, 7 internal */
+       uint8_t         idx;    /* position within TX queue */
        uint8_t         qid;
+       /* 0:4 TX queue id - 5:6 reserved - 7 unsolicited RX
+        * or uCode-originated notification
+        */
 } __packed;
 
+#define        IWN_RX_DESC_QID_MSK             0x1F
+#define        IWN_UNSOLICITED_RX_NOTIF        0x80
+
+/* CARD_STATE_NOTIFICATION */
+#define        IWN_STATE_CHANGE_HW_CARD_DISABLED               0x01
+#define        IWN_STATE_CHANGE_SW_CARD_DISABLED               0x02
+#define        IWN_STATE_CHANGE_CT_CARD_DISABLED               0x04
+#define        IWN_STATE_CHANGE_RXON_CARD_DISABLED             0x10
+
 /* Possible RX status flags. */
 #define IWN_RX_NO_CRC_ERR      (1 <<  0)
 #define IWN_RX_NO_OVFL_ERR     (1 <<  1)
@@ -416,6 +476,7 @@ struct iwn_tx_cmd {
 #define IWN_CMD_LINK_QUALITY            78
 #define IWN_CMD_SET_LED                         72
 #define IWN5000_CMD_WIMAX_COEX          90
+#define        IWN_TEMP_NOTIFICATION           98
 #define IWN5000_CMD_CALIB_CONFIG       101
 #define IWN5000_CMD_CALIB_RESULT       102
 #define IWN5000_CMD_CALIB_COMPLETE     103
@@ -432,6 +493,17 @@ struct iwn_tx_cmd {
 #define IWN_CMD_PHY_CALIB              176
 #define IWN_CMD_BT_COEX_PRIOTABLE      204
 #define IWN_CMD_BT_COEX_PROT           205
+#define        IWN_CMD_BT_COEX_NOTIF           206
+/* PAN commands */
+#define        IWN_CMD_WIPAN_PARAMS                    0xb2
+#define        IWN_CMD_WIPAN_RXON                      0xb3
+#define        IWN_CMD_WIPAN_RXON_TIMING               0xb4
+#define        IWN_CMD_WIPAN_RXON_ASSOC                0xb6
+#define        IWN_CMD_WIPAN_QOS_PARAM                 0xb7
+#define        IWN_CMD_WIPAN_WEPKEY                    0xb8
+#define        IWN_CMD_WIPAN_P2P_CHANNEL_SWITCH        0xb9
+#define        IWN_CMD_WIPAN_NOA_NOTIFICATION          0xbc
+#define        IWN_CMD_WIPAN_DEACTIVATION_COMPLETE     0xbd
 
        uint8_t flags;
        uint8_t idx;
@@ -439,6 +511,27 @@ struct iwn_tx_cmd {
        uint8_t data[136];
 } __packed;
 
+/*
+ * Structure for IWN_CMD_GET_STATISTICS = (0x9c) 156
+ * all devices identical.
+ *
+ * This command triggers an immediate response containing uCode statistics.
+ * The response is in the same format as IWN_BEACON_STATISTICS (0x9d) 157.
+ *
+ * If the CLEAR_STATS configuration flag is set, uCode will clear its
+ * internal copy of the statistics (counters) after issuing the response.
+ * This flag does not affect IWN_BEACON_STATISTICS after beacons (see below).
+ *
+ * If the DISABLE_NOTIF configuration flag is set, uCode will not issue
+ * IWN_BEACON_STATISTICS after received beacons.  This flag
+ * does not affect the response to the IWN_CMD_GET_STATISTICS 0x9c itself.
+ */
+struct iwn_statistics_cmd {
+       uint32_t        configuration_flags;
+#define        IWN_STATS_CONF_CLEAR_STATS              htole32(0x1)
+#define        IWN_STATS_CONF_DISABLE_NOTIF    htole32(0x2)
+} __packed;
+
 /* Antenna flags, used in various commands. */
 #define IWN_ANT_A      (1 << 0)
 #define IWN_ANT_B      (1 << 1)
@@ -446,6 +539,7 @@ struct iwn_tx_cmd {
 /* Shortcuts. */
 #define IWN_ANT_AB     (IWN_ANT_A | IWN_ANT_B)
 #define IWN_ANT_BC     (IWN_ANT_B | IWN_ANT_C)
+#define        IWN_ANT_AC      (IWN_ANT_A | IWN_ANT_C)
 #define IWN_ANT_ABC    (IWN_ANT_A | IWN_ANT_B | IWN_ANT_C)
 
 /* Structure for command IWN_CMD_RXON. */
@@ -461,6 +555,8 @@ struct iwn_rxon {
 #define IWN_MODE_STA           3
 #define IWN_MODE_IBSS          4
 #define IWN_MODE_MONITOR       6
+#define        IWN_MODE_2STA           8
+#define        IWN_MODE_P2P            9
 
        uint8_t         air;
        uint16_t        rxchain;
@@ -544,7 +640,8 @@ struct iwn_cmd_timing {
        uint16_t        atim;
        uint32_t        binitval;
        uint16_t        lintval;
-       uint16_t        reserved;
+       uint8_t         dtim_period;
+       uint8_t         delta_cp_bss_tbtts;
 } __packed;
 
 /* Structure for command IWN_CMD_ADD_NODE. */
@@ -558,6 +655,9 @@ struct iwn_node_info {
        uint16_t        reserved2;
        uint8_t         id;
 #define IWN_ID_BSS              0
+#define        IWN_STA_ID              1
+
+#define        IWN_PAN_ID_BCAST                14
 #define IWN5000_ID_BROADCAST   15
 #define IWN4965_ID_BROADCAST   31
 
@@ -759,6 +859,11 @@ struct iwn_pmgt_cmd {
 #define IWN_PS_SLEEP_OVER_DTIM (1 << 2)
 #define IWN_PS_PCI_PMGT                (1 << 3)
 #define IWN_PS_FAST_PD         (1 << 4)
+#define        IWN_PS_BEACON_FILTERING (1 << 5)
+#define        IWN_PS_SHADOW_REG       (1 << 6)
+#define        IWN_PS_CT_KILL          (1 << 7)
+#define        IWN_PS_BT_SCD           (1 << 8)
+#define        IWN_PS_ADVANCED_PM      (1 << 9)
 
        uint8_t         keepalive;
        uint8_t         debug;
@@ -796,6 +901,7 @@ struct iwn_scan_hdr {
 
 struct iwn_scan_chan {
        uint32_t        flags;
+#define        IWN_CHAN_PASSIVE        (0 << 0)
 #define IWN_CHAN_ACTIVE                (1 << 0)
 #define IWN_CHAN_NPBREQS(x)    (((1 << (x)) - 1) << 1)
 
@@ -806,9 +912,25 @@ struct iwn_scan_chan {
        uint16_t        passive;        /* msecs */
 } __packed;
 
+#define        IWN_SCAN_CRC_TH_DISABLED        0
+#define        IWN_SCAN_CRC_TH_DEFAULT         htole16(1)
+#define        IWN_SCAN_CRC_TH_NEVER           htole16(0xffff)
+
 /* Maximum size of a scan command. */
 #define IWN_SCAN_MAXSZ (MCLBYTES - 4)
 
+#define        IWN_ACTIVE_DWELL_TIME_24        (30)    /* all times in msec */
+#define        IWN_ACTIVE_DWELL_TIME_52        (20)
+#define        IWN_ACTIVE_DWELL_FACTOR_24      (3)
+#define        IWN_ACTIVE_DWELL_FACTOR_52      (2)
+
+#define        IWN_PASSIVE_DWELL_TIME_24       (20)    /* all times in msec */
+#define        IWN_PASSIVE_DWELL_TIME_52       (10)
+#define        IWN_PASSIVE_DWELL_BASE          (100)
+#define        IWN_CHANNEL_TUNE_TIME           (5)
+
+#define        IWN_SCAN_CHAN_TIMEOUT           2
+
 /* Structure for command IWN_CMD_TXPOWER (4965AGN only.) */
 #define IWN_RIDX_MAX   32
 struct iwn4965_cmd_txpower {
@@ -855,6 +977,16 @@ struct iwn_bluetooth {
 
 struct iwn6000_btcoex_config {
        uint8_t         flags;
+#define        IWN_BT_FLAG_COEX6000_CHAN_INHIBITION    1
+#define        IWN_BT_FLAG_COEX6000_MODE_MASK          ((1 << 3) | (1 << 4) | 
(1 << 5 ))
+#define        IWN_BT_FLAG_COEX6000_MODE_SHIFT                 3
+#define        IWN_BT_FLAG_COEX6000_MODE_DISABLED              0
+#define        IWN_BT_FLAG_COEX6000_MODE_LEGACY_2W             1
+#define        IWN_BT_FLAG_COEX6000_MODE_3W                    2
+#define        IWN_BT_FLAG_COEX6000_MODE_4W                    3
+
+#define        IWN_BT_FLAG_UCODE_DEFAULT               (1 << 6)
+#define        IWN_BT_FLAG_SYNC_2_BT_DISABLE   (1 << 7)
        uint8_t         lead_time;
        uint8_t         max_kill;
        uint8_t         bt3_t7_timer;
@@ -871,6 +1003,28 @@ struct iwn6000_btcoex_config {
        uint16_t        rx_prio_boost;
 } __packed;
 
+/* Structure for enhanced command IWN_CMD_BLUETOOTH for 2000 Series. */
+struct iwn2000_btcoex_config {
+       uint8_t         flags;  /* Cf Flags in iwn6000_btcoex_config */
+       uint8_t         lead_time;
+       uint8_t         max_kill;
+       uint8_t         bt3_t7_timer;
+       uint32_t        kill_ack;
+       uint32_t        kill_cts;
+       uint8_t         sample_time;
+       uint8_t         bt3_t2_timer;
+       uint16_t        bt4_reaction;
+       uint32_t        lookup_table[12];
+       uint16_t        bt4_decision;
+       uint16_t        valid;
+
+       uint32_t        prio_boost;     /* size change prior to 
iwn6000_btcoex_config */
+       uint8_t         reserved;       /* added prior to iwn6000_btcoex_config 
*/
+
+       uint8_t         tx_prio_boost;
+       uint16_t        rx_prio_boost;
+} __packed;
+
 struct iwn_btcoex_priotable {
        uint8_t         calib_init1;
        uint8_t         calib_init2;
@@ -989,6 +1143,17 @@ struct iwn5000_phy_calib_temp_offset {
        uint16_t        reserved;
 } __packed;
 
+struct iwn5000_phy_calib_temp_offsetv2 {
+       uint8_t         code;
+       uint8_t         group;
+       uint8_t         ngroups;
+       uint8_t         isvalid;
+       int16_t         offset_high;
+       int16_t         offset_low;
+       int16_t         burnt_voltage_ref;
+       int16_t         reserved;
+} __packed;
+
 struct iwn_phy_calib_gain {
        uint8_t code;
        uint8_t group;
@@ -1056,6 +1221,10 @@ struct iwn_ucode_info {
 } __packed;
 
 /* Structures for IWN_TX_DONE notification. */
+#define        IWN_TX_STATUS_MSK               0xff
+#define        TX_STATUS_SUCCESS               0x01
+#define        TX_STATUS_DIRECT_DONE           0x02
+
 #define IWN_TX_SUCCESS                 0x00
 #define IWN_TX_FAIL                    0x80    /* all failures have 0x80 set */
 #define IWN_TX_FAIL_SHORT_LIMIT                0x82    /* too many RTS retries 
*/
@@ -1077,7 +1246,7 @@ struct iwn4965_tx_stat {
 } __packed;
 
 struct iwn5000_tx_stat {
-       uint8_t         nframes;
+       uint8_t         nframes;        /* 1 no aggregation, >1 aggregation */
        uint8_t         btkillcnt;
        uint8_t         rtsfailcnt;
        uint8_t         ackfailcnt;
@@ -1089,7 +1258,7 @@ struct iwn5000_tx_stat {
        uint16_t        seq;
        uint16_t        len;
        uint8_t         tlc;
-       uint8_t         ratid;
+       uint8_t         ratid;  /* tid (0:3), sta_id (4:7) */
        uint8_t         fc[2];
        uint16_t        status;
        uint16_t        sequence;
@@ -1137,6 +1306,42 @@ struct iwn_rx_stat {
        uint16_t        chan;
        uint8_t         phybuf[32];
        uint32_t        rate;
+/*
+ * rate bit fields
+ *
+ * High-throughput (HT) rate format for bits 7:0 (bit 8 must be "1"):
+ *  2-0:  0)   6 Mbps
+ *        1)  12 Mbps
+ *        2)  18 Mbps
+ *        3)  24 Mbps
+ *        4)  36 Mbps
+ *        5)  48 Mbps
+ *        6)  54 Mbps
+ *        7)  60 Mbps
+ *
+ *  4-3:  0)  Single stream (SISO)
+ *        1)  Dual stream (MIMO)
+ *        2)  Triple stream (MIMO)
+ *
+ *    5:  Value of 0x20 in bits 7:0 indicates 6 Mbps HT40 duplicate data
+ *
+ * Legacy OFDM rate format for bits 7:0 (bit 8 must be "0", bit 9 "0"):
+ *  3-0:  0xD)   6 Mbps
+ *        0xF)   9 Mbps
+ *        0x5)  12 Mbps
+ *        0x7)  18 Mbps
+ *        0x9)  24 Mbps
+ *        0xB)  36 Mbps
+ *        0x1)  48 Mbps
+ *        0x3)  54 Mbps
+ *
+ * Legacy CCK rate format for bits 7:0 (bit 8 must be "0", bit 9 "1"):
+ *  6-0:   10)  1 Mbps
+ *         20)  2 Mbps
+ *         55)  5.5 Mbps
+ *        110)  11 Mbps
+ *
+ */
        uint16_t        len;
        uint16_t        reserve3;
 } __packed;
@@ -1359,8 +1564,18 @@ struct iwn_fw_tlv {
 #define IWN_FW_TLV_INIT_DATA           4
 #define IWN_FW_TLV_BOOT_TEXT           5
 #define IWN_FW_TLV_PBREQ_MAXLEN                6
+#define        IWN_FW_TLV_PAN                          7
+#define        IWN_FW_TLV_RUNT_EVTLOG_PTR      8
+#define        IWN_FW_TLV_RUNT_EVTLOG_SIZE     9
+#define        IWN_FW_TLV_RUNT_ERRLOG_PTR      10
+#define        IWN_FW_TLV_INIT_EVTLOG_PTR      11
+#define        IWN_FW_TLV_INIT_EVTLOG_SIZE     12
+#define        IWN_FW_TLV_INIT_ERRLOG_PTR      13
 #define IWN_FW_TLV_ENH_SENS            14
 #define IWN_FW_TLV_PHY_CALIB           15
+#define        IWN_FW_TLV_WOWLAN_INST          16
+#define        IWN_FW_TLV_WOWLAN_DATA          17
+#define        IWN_FW_TLV_FLAGS                        18
 
        uint16_t        alt;
        uint32_t        len;
@@ -1394,6 +1609,7 @@ struct iwn_fw_tlv {
 #define IWN4965_EEPROM_VOLTAGE 0x0e9
 #define IWN4965_EEPROM_BANDS   0x0ea
 /* Indirect offsets. */
+#define        IWN5000_EEPROM_NO_HT40  0x000
 #define IWN5000_EEPROM_DOMAIN  0x001
 #define IWN5000_EEPROM_BAND1   0x004
 #define IWN5000_EEPROM_BAND2   0x013
@@ -1505,6 +1721,16 @@ static const uint32_t iwn6000_regulatory
        IWN5000_EEPROM_BAND7
 };
 
+static const uint32_t iwn1000_regulatory_bands[IWN_NBANDS] = {
+       IWN5000_EEPROM_BAND1,
+       IWN5000_EEPROM_BAND2,
+       IWN5000_EEPROM_BAND3,
+       IWN5000_EEPROM_BAND4,
+       IWN5000_EEPROM_BAND5,
+       IWN5000_EEPROM_BAND6,
+       IWN5000_EEPROM_NO_HT40,
+};
+
 #define IWN_CHAN_BANDS_COUNT    7
 #define IWN_MAX_CHAN_PER_BAND  14
 static const struct iwn_chan_band {
@@ -1524,6 +1750,13 @@ static const struct iwn_chan_band {
        { 11, { 36, 44, 52, 60, 100, 108, 116, 124, 132, 149, 157 } }
 };
 
+static const uint8_t iwn_bss_ac_to_queue[] = {
+       2, 3, 1, 0,
+};
+
+static const uint8_t iwn_pan_ac_to_queue[] = {
+       5, 4, 6, 7,
+};
 #define IWN1000_OTP_NBLOCKS    3 
 #define IWN6000_OTP_NBLOCKS    4 
 #define IWN6050_OTP_NBLOCKS    7
@@ -1533,6 +1766,14 @@ static const struct iwn_chan_band {
 #define IWN_RIDX_OFDM6 4
 
 #define IWN4965_MAX_PWR_INDEX  107
+#define        IWN_POWERSAVE_LVL_NONE                  0
+#define        IWN_POWERSAVE_LVL_VOIP_COMPATIBLE       1
+#define        IWN_POWERSAVE_LVL_MAX                   5
+
+#define        IWN_POWERSAVE_LVL_DEFAULT       IWN_POWERSAVE_LVL_NONE
+
+/* DTIM value to pass in for IWN_POWERSAVE_LVL_VOIP_COMPATIBLE */
+#define        IWN_POWERSAVE_DTIM_VOIP_COMPATIBLE      2
 
 /*
  * RF Tx gain values from highest to lowest power (values obtained from
@@ -1715,6 +1956,19 @@ static const struct iwn_sensitivity_limi
        100
 };
 
+/* Get value from linux kernel 3.2.+ in 
Drivers/net/wireless/iwlwifi/iwl-2000.c*/
+static const struct iwn_sensitivity_limits iwn2030_sensitivity_limits = {
+       105,110,
+       128,232,
+       80,145,
+       128,232,
+       125,175,
+       160,310,
+       97,
+       97,
+       110
+};
+
 /* Map TID to TX scheduler's FIFO. */
 static const uint8_t iwn_tid2fifo[] = {
        1, 0, 0, 1, 2, 2, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 3
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to