ath11k: Add support for RX decapsulation offload
PATCH 1/1 ath11k: Add support for RX decapsulation offload
From: Sriram R <[email protected]>
Add support for rx decapsulation offload by advertising the support to mac80211 during registration. Also ensure the frames have the RX_FLAG_8023 flag set in decap offload frames before passing to mac80211.
Since the packets delivered to the driver are in 802.3 format, these can be sent to the network core with minimal processing in mac80211. This helps in releasing some CPU cycles in the host processor and thereby improving the performance.
Two exceptions are made before passing decap frames, one is for EAPOL packets since mac80211 8023 fast rx for the sta is set only after authorization, other case is for multicast packets to validate PN in mac80211. In both the cases the decap frames are converted to 80211 frame and sent to mac80211.
Ethernet decap can be enabled by using a modparam as shown below:
insmod ath11k frame_mode=2
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-00844-QCAHKSWPL_SILICONZ-1 v2
--- drivers/net/wireless/ath/ath11k/core.h | 4 + drivers/net/wireless/ath/ath11k/dp_rx.c | 194 +++++++++++++-------- drivers/net/wireless/ath/ath11k/hal_desc.h | 2 + drivers/net/wireless/ath/ath11k/hw.c | 43 +++++ drivers/net/wireless/ath/ath11k/hw.h | 2 + drivers/net/wireless/ath/ath11k/mac.c | 25 ++- 6 files changed, 198 insertions(+), 72 deletions(-)
drivers/net/wireless/ath/ath11k/core.h +4 -0
@@ -93,6 +93,8 @@ struct ath11k_skb_rxcb {bool is_first_msdu;bool is_last_msdu;bool is_continuation; +bool is_mcbc; +bool is_eapol;struct hal_rx_desc *rx_desc;u8 err_rel_src;u8 err_code;
@@ -100,6 +102,8 @@ struct ath11k_skb_rxcb {u8 unmapped;u8 is_frag;u8 tid; +u16 peer_id; +u16 seq_no; };enum ath11k_hw_rev {
drivers/net/wireless/ath/ath11k/dp_rx.c +124 -70
344 lines not on this page · raw message
drivers/net/wireless/ath/ath11k/hal_desc.h +2 -0
@@ -496,6 +496,8 @@ struct hal_tlv_hdr {#define RX_MPDU_DESC_INFO0_DA_IDX_TIMEOUT BIT(29)#define RX_MPDU_DESC_INFO0_RAW_MPDU BIT(30) +#define RX_MPDU_DESC_META_DATA_PEER_ID GENMASK(15, 0) +struct rx_mpdu_desc {u32 info0;/* %RX_MPDU_DESC_INFO */ u32 meta_data;
drivers/net/wireless/ath/ath11k/hw.c +43 -0
91 lines not on this page · raw message
drivers/net/wireless/ath/ath11k/hw.h +2 -0
@@ -210,6 +210,8 @@ struct ath11k_hw_ops {u8 *(*rx_desc_get_msdu_payload)(struct hal_rx_desc *desc);void (*reo_setup)(struct ath11k_base *ab);u16 (*mpdu_info_get_peerid)(u8 *tlv_data); +bool (*rx_desc_mac_addr2_valid)(struct hal_rx_desc *desc); +u8 * (*rx_desc_mpdu_start_addr2)(struct hal_rx_desc *desc); };extern const struct ath11k_hw_ops ipq8074_ops;
drivers/net/wireless/ath/ath11k/mac.c +23 -2
@@ -5313,7 +5313,8 @@ static void ath11k_mac_op_update_vif_offload(struct ieee80211_hw *hw,if (ath11k_frame_mode !=ATH11K_HW_TXRX_ETHERNET || (vif->type !=NL80211_IFTYPE_STATION && vif->type !=NL80211_IFTYPE_AP )) - vif->offload_flags &= ~IEEE80211_OFFLOAD_ENCAP_ENABLED ; + vif->offload_flags &= ~(IEEE80211_OFFLOAD_ENCAP_ENABLED | +IEEE80211_OFFLOAD_DECAP_ENABLED );if (vif->offload_flags &IEEE80211_OFFLOAD_ENCAP_ENABLED ) param_value =ATH11K_HW_TXRX_ETHERNET ;
@@ -5329,6 +5330,22 @@ static void ath11k_mac_op_update_vif_offload(struct ieee80211_hw *hw, arvif->vdev_id, ret); vif->offload_flags &= ~IEEE80211_OFFLOAD_ENCAP_ENABLED ; } + + param_id =WMI_VDEV_PARAM_RX_DECAP_TYPE ; +if (vif->offload_flags &IEEE80211_OFFLOAD_DECAP_ENABLED ) + param_value =ATH11K_HW_TXRX_ETHERNET ; +else if (test_bit (ATH11K_FLAG_RAW_MODE , &ab->dev_flags)) + param_value =ATH11K_HW_TXRX_RAW ; +else + param_value =ATH11K_HW_TXRX_NATIVE_WIFI ; + + ret =ath11k_wmi_vdev_set_param_cmd (ar, arvif->vdev_id, + param_id, param_value); +if (ret) { +ath11k_warn (ab,"failed to set vdev %d rx decap mode: %d\n" , + arvif->vdev_id, ret); + vif->offload_flags &= ~IEEE80211_OFFLOAD_DECAP_ENABLED ; + } } static int ath11k_mac_op_add_interface(struct ieee80211_hw *hw,
@@ -7448,7 +7465,11 @@ static int __ath11k_mac_register(struct ath11k *ar)ieee80211_hw_set (ar->hw,QUEUE_CONTROL );ieee80211_hw_set (ar->hw,SUPPORTS_TX_FRAG );ieee80211_hw_set (ar->hw,REPORTS_LOW_ACK ); -ieee80211_hw_set (ar->hw,SUPPORTS_TX_ENCAP_OFFLOAD ); + +if (ath11k_frame_mode ==ATH11K_HW_TXRX_ETHERNET ) { +ieee80211_hw_set (ar->hw,SUPPORTS_TX_ENCAP_OFFLOAD ); +ieee80211_hw_set (ar->hw,SUPPORTS_RX_DECAP_OFFLOAD ); + }if (cap->nss_ratio_enabled)ieee80211_hw_set (ar->hw,SUPPORTS_VHT_EXT_NSS_BW );
Signature · 7 lines
2.25.1 -- ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Quoted 20 lines · Jouni Malinen
Add support for rx decapsulation offload by advertising the support to mac80211 during registration. Also ensure the frames have the
RX_FLAG_8023flag set in decap offload frames before passing to mac80211.Since the packets delivered to the driver are in 802.3 format, these can be sent to the network core with minimal processing in mac80211. This helps in releasing some CPU cycles in the host processor and thereby improving the performance.
Two exceptions are made before passing decap frames, one is for EAPOL packets since mac80211 8023 fast rx for the sta is set only after authorization, other case is for multicast packets to validate PN in mac80211. In both the cases the decap frames are converted to 80211 frame and sent to mac80211.
Ethernet decap can be enabled by using
frame_modemodparam:insmod ath11k frame_mode=2
Quoted 7 lines
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-00844-QCAHKSWPL_SILICONZ-1 v2
Co-developed-by Manikanta Pubbisetty <[email protected]>Signed-off-by Manikanta Pubbisetty <[email protected]>Signed-off-by Sriram R <[email protected]>Signed-off-by Jouni Malinen <[email protected]>Signed-off-by Kalle Valo <[email protected]>
Patch applied to ath-next branch of ath.git, thanks.
2167fa606c0f ath11k: Add support for RX decapsulation offload
Signature · 3 lines
https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
Quoted 20 lines · Jouni Malinen
Add support for rx decapsulation offload by advertising the support to mac80211 during registration. Also ensure the frames have the
RX_FLAG_8023flag set in decap offload frames before passing to mac80211.Since the packets delivered to the driver are in 802.3 format, these can be sent to the network core with minimal processing in mac80211. This helps in releasing some CPU cycles in the host processor and thereby improving the performance.
Two exceptions are made before passing decap frames, one is for EAPOL packets since mac80211 8023 fast rx for the sta is set only after authorization, other case is for multicast packets to validate PN in mac80211. In both the cases the decap frames are converted to 80211 frame and sent to mac80211.
Ethernet decap can be enabled by using
frame_modemodparam:insmod ath11k frame_mode=2
Quoted 7 lines
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-00844-QCAHKSWPL_SILICONZ-1 v2
Co-developed-by Manikanta Pubbisetty <[email protected]>Signed-off-by Manikanta Pubbisetty <[email protected]>Signed-off-by Sriram R <[email protected]>Signed-off-by Jouni Malinen <[email protected]>Signed-off-by Kalle Valo <[email protected]>
Patch applied to ath-next branch of ath.git, thanks.
2167fa606c0f ath11k: Add support for RX decapsulation offload
Signature · 9 lines
https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches -- ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k