|
@@ -31,6 +31,51 @@
|
|
|
#define WLAN_STA_WME BIT(9)
|
|
|
#define WLAN_STA_WDS BIT(27)
|
|
|
|
|
|
+#define STA_TID_NUM 16
|
|
|
+#define ADDBA_RESP_INTERVAL HZ
|
|
|
+
|
|
|
+#define HT_AGG_STATE_INITIATOR_SHIFT (4)
|
|
|
+
|
|
|
+#define HT_AGG_STATE_REQ_STOP_BA_MSK BIT(3)
|
|
|
+
|
|
|
+#define HT_AGG_STATE_IDLE (0x0)
|
|
|
+#define HT_AGG_STATE_OPERATIONAL (0x7)
|
|
|
+
|
|
|
+/**
|
|
|
+ * struct tid_ampdu_rx - TID aggregation information (Rx).
|
|
|
+ *
|
|
|
+ * @state: TID's state in session state machine.
|
|
|
+ * @dialog_token: dialog token for aggregation session
|
|
|
+ * @ssn: Starting Sequence Number expected to be aggregated.
|
|
|
+ * @buf_size: buffer size for incoming A-MPDUs
|
|
|
+ * @timeout: reset timer value.
|
|
|
+ * @head_seq_num: head sequence number in reordering buffer.
|
|
|
+ * @stored_mpdu_num: number of MPDUs in reordering buffer
|
|
|
+ * @reorder_buf: buffer to reorder incoming aggregated MPDUs
|
|
|
+ * @session_timer: check if peer keeps Tx-ing on the TID (by timeout value)
|
|
|
+ */
|
|
|
+struct tid_ampdu_rx {
|
|
|
+ u8 state;
|
|
|
+ u8 dialog_token;
|
|
|
+ u16 ssn;
|
|
|
+ u16 buf_size;
|
|
|
+ u16 timeout;
|
|
|
+ u16 head_seq_num;
|
|
|
+ u16 stored_mpdu_num;
|
|
|
+ struct sk_buff **reorder_buf;
|
|
|
+ struct timer_list session_timer;
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * struct sta_ampdu_mlme - STA aggregation information.
|
|
|
+ *
|
|
|
+ * @tid_agg_info_rx: aggregation info for Rx per TID
|
|
|
+ * @ampdu_rx: for locking sections in aggregation Rx flow
|
|
|
+ */
|
|
|
+struct sta_ampdu_mlme {
|
|
|
+ struct tid_ampdu_rx tid_rx[STA_TID_NUM];
|
|
|
+ spinlock_t ampdu_rx;
|
|
|
+};
|
|
|
|
|
|
struct sta_info {
|
|
|
struct kref kref;
|
|
@@ -101,6 +146,8 @@ struct sta_info {
|
|
|
|
|
|
struct ieee80211_ht_info ht_info; /* 802.11n HT capabilities
|
|
|
of this STA */
|
|
|
+ struct sta_ampdu_mlme ampdu_mlme;
|
|
|
+ u8 timer_to_tid[STA_TID_NUM]; /* convert timer id to tid */
|
|
|
|
|
|
#ifdef CONFIG_MAC80211_DEBUGFS
|
|
|
struct sta_info_debugfsdentries {
|