wl1271: Add config structure for TX path parameters
[linux-2.6.git] / drivers / net / wireless / wl12xx / wl1271_conf.h
index 1d6a44bec1cb725972cc8cf4e65a986e2a94a350..3c5ce3100e6e28b88b57c0b8963f9e8ef55bab99 100644 (file)
@@ -171,8 +171,280 @@ struct conf_sg_settings {
        s8 rate_adaptation_snr;
 };
 
+enum conf_rx_queue_type {
+       CONF_RX_QUEUE_TYPE_LOW_PRIORITY,  /* All except the high priority */
+       CONF_RX_QUEUE_TYPE_HIGH_PRIORITY, /* Management and voice packets */
+};
+
+struct conf_rx_settings {
+       /*
+        * The maximum amount of time, in TU, before the
+        * firmware discards the MSDU.
+        *
+        * Range: 0 - 0xFFFFFFFF
+        */
+       u32 rx_msdu_life_time;
+
+       /*
+        * Packet detection threshold in the PHY.
+        *
+        * FIXME: details unknown.
+        */
+       u32 packet_detection_threshold;
+
+       /*
+        * The longest time the STA will wait to receive traffic from the AP
+        * after a PS-poll has been transmitted.
+        *
+        * Range: 0 - 200000
+        */
+       u16 ps_poll_timeout;
+       /*
+        * The longest time the STA will wait to receive traffic from the AP
+        * after a frame has been sent from an UPSD enabled queue.
+        *
+        * Range: 0 - 200000
+        */
+       u16 upsd_timeout;
+
+       /*
+        * The number of octets in an MPDU, below which an RTS/CTS
+        * handshake is not performed.
+        *
+        * Range: 0 - 4096
+        */
+       u16 rts_threshold;
+
+       /*
+        * The RX Clear Channel Assessment threshold in the PHY
+        * (the energy threshold).
+        *
+        * Range: ENABLE_ENERGY_D  == 0x140A
+        *        DISABLE_ENERGY_D == 0xFFEF
+        */
+       u16 rx_cca_threshold;
+
+       /*
+        * Occupied Rx mem-blocks number which requires interrupting the host
+        * (0 = no buffering, 0xffff = disabled).
+        *
+        * Range: u16
+        */
+       u16 irq_blk_threshold;
+
+       /*
+        * Rx packets number which requires interrupting the host
+        * (0 = no buffering).
+        *
+        * Range: u16
+        */
+       u16 irq_pkt_threshold;
+
+       /*
+        * Max time in msec the FW may delay RX-Complete interrupt.
+        *
+        * Range: 1 - 100
+        */
+       u16 irq_timeout;
+
+       /*
+        * The RX queue type.
+        *
+        * Range: RX_QUEUE_TYPE_RX_LOW_PRIORITY, RX_QUEUE_TYPE_RX_HIGH_PRIORITY,
+        */
+       u8 queue_type;
+};
+
+#define CONF_TX_MAX_RATE_CLASSES       8
+
+#define CONF_TX_RATE_MASK_UNSPECIFIED  0
+#define CONF_TX_RATE_MASK_ALL          0x1eff
+#define CONF_TX_RATE_RETRY_LIMIT       10
+
+struct conf_tx_rate_class {
+
+       /*
+        * The rates enabled for this rate class.
+        *
+        * Range: CONF_HW_BIT_RATE_* bit mask
+        */
+       u32 enabled_rates;
+
+       /*
+        * The dot11 short retry limit used for TX retries.
+        *
+        * Range: u8
+        */
+       u8 short_retry_limit;
+
+       /*
+        * The dot11 long retry limit used for TX retries.
+        *
+        * Range: u8
+        */
+       u8 long_retry_limit;
+
+       /*
+        * Flags controlling the attributes of TX transmission.
+        *
+        * Range: bit 0: Truncate - when set, FW attempts to send a frame stop
+        *               when the total valid per-rate attempts have
+        *               been exhausted; otherwise transmissions
+        *               will continue at the lowest available rate
+        *               until the appropriate one of the
+        *               short_retry_limit, long_retry_limit,
+        *               dot11_max_transmit_msdu_life_time, or
+        *               max_tx_life_time, is exhausted.
+        *            1: Preamble Override - indicates if the preamble type
+        *               should be used in TX.
+        *            2: Preamble Type - the type of the preamble to be used by
+        *               the policy (0 - long preamble, 1 - short preamble.
+        */
+       u8 aflags;
+};
+
+#define CONF_TX_MAX_AC_COUNT 4
+
+/* Slot number setting to start transmission at PIFS interval */
+#define CONF_TX_AIFS_PIFS 1
+/* Slot number setting to start transmission at DIFS interval normal
+ * DCF access */
+#define CONF_TX_AIFS_DIFS 2
+
+
+enum conf_tx_ac {
+       CONF_TX_AC_BE = 0,         /* best effort / legacy */
+       CONF_TX_AC_BK = 1,         /* background */
+       CONF_TX_AC_VI = 2,         /* video */
+       CONF_TX_AC_VO = 3,         /* voice */
+       CONF_TX_AC_CTS2SELF = 4,   /* fictious AC, follows AC_VO */
+       CONF_TX_AC_ANY_TID = 0x1f
+};
+
+struct conf_tx_ac_category {
+       /*
+        * The AC class identifier.
+        *
+        * Range: enum conf_tx_ac
+        */
+       u8 ac;
+
+       /*
+        * The contention window minimum size (in slots) for the access
+        * class.
+        *
+        * Range: u8
+        */
+       u8 cw_min;
+
+       /*
+        * The contention window maximum size (in slots) for the access
+        * class.
+        *
+        * Range: u8
+        */
+       u16 cw_max;
+
+       /*
+        * The AIF value (in slots) for the access class.
+        *
+        * Range: u8
+        */
+       u8 aifsn;
+
+       /*
+        * The TX Op Limit (in microseconds) for the access class.
+        *
+        * Range: u16
+        */
+       u16 tx_op_limit;
+};
+
+#define CONF_TX_MAX_TID_COUNT 7
+
+enum {
+       CONF_CHANNEL_TYPE_DCF = 0,   /* DC/LEGACY*/
+       CONF_CHANNEL_TYPE_EDCF = 1,  /* EDCA*/
+       CONF_CHANNEL_TYPE_HCCA = 2,  /* HCCA*/
+};
+
+enum {
+       CONF_PS_SCHEME_LEGACY = 0,
+       CONF_PS_SCHEME_UPSD_TRIGGER = 1,
+       CONF_PS_SCHEME_LEGACY_PSPOLL = 2,
+       CONF_PS_SCHEME_SAPSD = 3,
+};
+
+enum {
+       CONF_ACK_POLICY_LEGACY = 0,
+       CONF_ACK_POLICY_NO_ACK = 1,
+       CONF_ACK_POLICY_BLOCK = 2,
+};
+
+
+struct conf_tx_tid {
+       u8 queue_id;
+       u8 channel_type;
+       u8 tsid;
+       u8 ps_scheme;
+       u8 ack_policy;
+       u32 apsd_conf[2];
+};
+
+struct conf_tx_settings {
+       /*
+        * The TX ED value for TELEC Enable/Disable.
+        *
+        * Range: 0, 1
+        */
+       u8 tx_energy_detection;
+
+       /*
+        * Configuration for rate classes for TX (currently only one
+        * rate class supported.)
+        */
+       struct conf_tx_rate_class rc_conf;
+
+       /*
+        * Configuration for access categories for TX rate control.
+        */
+       u8 ac_conf_count;
+       struct conf_tx_ac_category ac_conf[CONF_TX_MAX_AC_COUNT];
+
+       /*
+        * Configuration for TID parameters.
+        */
+       u8 tid_conf_count;
+       struct conf_tx_tid tid_conf[CONF_TX_MAX_TID_COUNT];
+
+       /*
+        * The TX fragmentation threshold.
+        *
+        * Range: u16
+        */
+       u16 frag_threshold;
+
+       /*
+        * Max time in msec the FW may delay frame TX-Complete interrupt.
+        *
+        * Range: u16
+        */
+       u16 tx_compl_timeout;
+
+       /*
+        * Completed TX packet count which requires to issue the TX-Complete
+        * interrupt.
+        *
+        * Range: u16
+        */
+       u16 tx_compl_threshold;
+
+};
+
 struct conf_drv_settings {
        struct conf_sg_settings sg;
+       struct conf_rx_settings rx;
+       struct conf_tx_settings tx;
 };
 
 #endif