iwlwifi: mvm: infrastructure for frame-release message
authorSara Sharon <sara.sharon@intel.com>
Tue, 1 Dec 2015 11:48:18 +0000 (13:48 +0200)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Sun, 20 Dec 2015 21:27:42 +0000 (23:27 +0200)
Incoming hardware will send frame release notifications to
the reorder buffer in order to update with the BA session
status and up to date NSSN.
This patch enables the API.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/fw-api-rx.h
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
drivers/net/wireless/intel/iwlwifi/mvm/ops.c
drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c

index 0a8d162047d97fbc2af735004cc644d2f4110be4..fb6d341d6f3dce33f26fe4e1abe73a531dc58d80 100644 (file)
@@ -316,6 +316,8 @@ enum iwl_rx_mpdu_sta_id_flags {
        IWL_RX_MPDU_SIF_FILTER_STATUS_MASK      = 0xc0,
 };
 
+#define IWL_RX_REORDER_DATA_INVALID_BAID 0x7f
+
 enum iwl_rx_mpdu_reorder_data {
        IWL_RX_MPDU_REORDER_NSSN_MASK           = 0x00000fff,
        IWL_RX_MPDU_REORDER_SN_MASK             = 0x00fff000,
index 0088106de95bbf86ddfdbe93575f691b2543f0bd..86409c5964cccddfa3a05af86cf616dca5fd7b1c 100644 (file)
@@ -1138,6 +1138,8 @@ void iwl_mvm_rx_rx_mpdu(struct iwl_mvm *mvm, struct napi_struct *napi,
 void iwl_mvm_rx_phy_cmd_mq(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb);
 void iwl_mvm_rx_mpdu_mq(struct iwl_mvm *mvm, struct napi_struct *napi,
                        struct iwl_rx_cmd_buffer *rxb, int queue);
+void iwl_mvm_rx_frame_release(struct iwl_mvm *mvm,
+                             struct iwl_rx_cmd_buffer *rxb, int queue);
 void iwl_mvm_rx_tx_cmd(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb);
 void iwl_mvm_rx_ba_notif(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb);
 void iwl_mvm_rx_ant_coupling_notif(struct iwl_mvm *mvm,
index 0885b77127f0c95bd6b4e9eb2d0ff910663e0f36..2debce3b839bbdeed666920d3a43b4255426c487 100644 (file)
@@ -822,6 +822,8 @@ static void iwl_mvm_rx(struct iwl_op_mode *op_mode,
 
        if (likely(pkt->hdr.cmd == REPLY_RX_MPDU_CMD))
                iwl_mvm_rx_rx_mpdu(mvm, napi, rxb);
+       else if (pkt->hdr.cmd == FRAME_RELEASE)
+               iwl_mvm_rx_frame_release(mvm, rxb, 0);
        else if (pkt->hdr.cmd == REPLY_RX_PHY_CMD)
                iwl_mvm_rx_rx_phy_cmd(mvm, rxb);
        else
@@ -1488,8 +1490,12 @@ static void iwl_mvm_rx_mq_rss(struct iwl_op_mode *op_mode,
                              unsigned int queue)
 {
        struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode);
+       struct iwl_rx_packet *pkt = rxb_addr(rxb);
 
-       iwl_mvm_rx_mpdu_mq(mvm, napi, rxb, queue);
+       if (unlikely(pkt->hdr.cmd == FRAME_RELEASE))
+               iwl_mvm_rx_frame_release(mvm, rxb, queue);
+       else
+               iwl_mvm_rx_mpdu_mq(mvm, napi, rxb, queue);
 }
 
 static const struct iwl_op_mode_ops iwl_mvm_ops_mq = {
index c67962e56a75ee67660be44857ab8b8b650040e9..e2a872deb6687b656839d183c714af70b8b2a488 100644 (file)
@@ -370,3 +370,9 @@ void iwl_mvm_rx_mpdu_mq(struct iwl_mvm *mvm, struct napi_struct *napi,
        iwl_mvm_pass_packet_to_mac80211(mvm, napi, skb, hdr, len, ampdu_status,
                                        crypt_len, rxb);
 }
+
+void iwl_mvm_rx_frame_release(struct iwl_mvm *mvm,
+                             struct iwl_rx_cmd_buffer *rxb, int queue)
+{
+       /* TODO */
+}