* [PATCH 0/3] ath11k: Add Mesh mode support
@ 2019-04-17 9:29 Rajkumar Manoharan
2019-04-17 9:29 ` [PATCH 1/3] ath11k: enable mesh mode Rajkumar Manoharan
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Rajkumar Manoharan @ 2019-04-17 9:29 UTC (permalink / raw)
To: ath11k; +Cc: Rajkumar Manoharan
Hi,
Posting initial patches to bring Mesh support to ath11k. There are known
issues which is also captured in first patch.
Known issues:
- Depends on firmware fix to allow other BSS frames
- Failed to complete path negotiation in secured mode
- Target assert while shutting down interface in secured mode
-Rajkumar
Rajkumar Manoharan (3):
ath11k: enable mesh mode
ath11k: allow 4 address transmission for mesh packet
ath11k: remove addition check for PMF
drivers/net/wireless/ath/ath11k/dp_tx.c | 3 +++
drivers/net/wireless/ath/ath11k/mac.c | 19 ++++++++++++++++++-
drivers/net/wireless/ath/ath11k/wmi.c | 21 ++++++++++-----------
drivers/net/wireless/ath/ath11k/wmi.h | 11 +++++++----
4 files changed, 38 insertions(+), 16 deletions(-)
--
1.9.1
_______________________________________________
ath11k mailing list
ath11k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath11k
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH 1/3] ath11k: enable mesh mode 2019-04-17 9:29 [PATCH 0/3] ath11k: Add Mesh mode support Rajkumar Manoharan @ 2019-04-17 9:29 ` Rajkumar Manoharan 2019-04-17 9:56 ` John Crispin 2019-04-17 9:29 ` [PATCH 2/3] ath11k: allow 4 address transmission for mesh packet Rajkumar Manoharan 2019-04-17 9:29 ` [PATCH 3/3] ath11k: remove unnecessary check for PMF Rajkumar Manoharan 2 siblings, 1 reply; 8+ messages in thread From: Rajkumar Manoharan @ 2019-04-17 9:29 UTC (permalink / raw) To: ath11k; +Cc: Rajkumar Manoharan Allow Meshpoint configuration from ath11k and advertise MP support to mac80211. Firmware supports mesh type from WLAN.HK.2.1.0.1-00113-QCAHKSWPL_SILICONZ-1 onwards. As of now, only open auth mesh networking is working. Known issues: - Depends on firmware fix to allow other BSS frames - Failed to complete path negotiation in secured mode - Target assert while shutting down interface in secured mode Signed-off-by: Rajkumar Manoharan <rmanohar@codeaurora.org> --- drivers/net/wireless/ath/ath11k/mac.c | 10 +++++++++- drivers/net/wireless/ath/ath11k/wmi.h | 11 +++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c index 12a2c4421264..b384395bb08c 100644 --- a/drivers/net/wireless/ath/ath11k/mac.c +++ b/drivers/net/wireless/ath/ath11k/mac.c @@ -2579,6 +2579,7 @@ static int ath11k_sta_state(struct ieee80211_hw *hw, } else if (old_state == IEEE80211_STA_AUTH && new_state == IEEE80211_STA_ASSOC && (vif->type == NL80211_IFTYPE_AP || + vif->type == NL80211_IFTYPE_MESH_POINT || vif->type == NL80211_IFTYPE_ADHOC)) { ret = ath11k_station_assoc(ar, vif, sta, false); if (ret) @@ -2591,6 +2592,7 @@ static int ath11k_sta_state(struct ieee80211_hw *hw, } else if (old_state == IEEE80211_STA_ASSOC && new_state == IEEE80211_STA_AUTH && (vif->type == NL80211_IFTYPE_AP || + vif->type == NL80211_IFTYPE_MESH_POINT || vif->type == NL80211_IFTYPE_ADHOC)) { ret = ath11k_station_disassoc(ar, vif, sta); if (ret) @@ -3436,6 +3438,8 @@ static int ath11k_add_interface(struct ieee80211_hw *hw, case NL80211_IFTYPE_STATION: arvif->vdev_type = WMI_VDEV_TYPE_STA; break; + case NL80211_IFTYPE_MESH_POINT: + arvif->vdev_subtype = WMI_VDEV_SUBTYPE_MESH_11S; case NL80211_IFTYPE_AP: arvif->vdev_type = WMI_VDEV_TYPE_AP; break; @@ -4702,6 +4706,9 @@ static int ath11k_get_survey(struct ieee80211_hw *hw, int idx, { .max = 16, .types = BIT(NL80211_IFTYPE_AP) +#ifdef CONFIG_MAC80211_MESH + | BIT(NL80211_IFTYPE_MESH_POINT) +#endif }, }; @@ -4820,7 +4827,8 @@ static int ath11k_mac_register(struct ath11k *ar) ar->hw->wiphy->available_antennas_tx = cap->tx_chain_mask; ar->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | - BIT(NL80211_IFTYPE_AP); + BIT(NL80211_IFTYPE_AP) | + BIT(NL80211_IFTYPE_MESH_POINT); ieee80211_hw_set(ar->hw, SIGNAL_DBM); ieee80211_hw_set(ar->hw, SUPPORTS_PS); diff --git a/drivers/net/wireless/ath/ath11k/wmi.h b/drivers/net/wireless/ath/ath11k/wmi.h index 8102e80506fa..5d20f57fbacc 100644 --- a/drivers/net/wireless/ath/ath11k/wmi.h +++ b/drivers/net/wireless/ath/ath11k/wmi.h @@ -4720,10 +4720,13 @@ enum wmi_vdev_type { }; enum wmi_vdev_subtype { - WMI_VDEV_SUBTYPE_NONE = 0, - WMI_VDEV_SUBTYPE_P2P_DEVICE = 1, - WMI_VDEV_SUBTYPE_P2P_CLIENT = 2, - WMI_VDEV_SUBTYPE_P2P_GO = 3, + WMI_VDEV_SUBTYPE_NONE, + WMI_VDEV_SUBTYPE_P2P_DEVICE, + WMI_VDEV_SUBTYPE_P2P_CLIENT, + WMI_VDEV_SUBTYPE_P2P_GO, + WMI_VDEV_SUBTYPE_PROXY_STA, + WMI_VDEV_SUBTYPE_MESH_NON_11S, + WMI_VDEV_SUBTYPE_MESH_11S, }; enum wmi_sta_powersave_param { -- 1.9.1 _______________________________________________ ath11k mailing list ath11k@lists.infradead.org http://lists.infradead.org/mailman/listinfo/ath11k ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] ath11k: enable mesh mode 2019-04-17 9:29 ` [PATCH 1/3] ath11k: enable mesh mode Rajkumar Manoharan @ 2019-04-17 9:56 ` John Crispin 2019-04-17 21:01 ` Rajkumar Manoharan 0 siblings, 1 reply; 8+ messages in thread From: John Crispin @ 2019-04-17 9:56 UTC (permalink / raw) To: Rajkumar Manoharan, ath11k On 17/04/2019 11:29, Rajkumar Manoharan wrote: > Allow Meshpoint configuration from ath11k and advertise MP > support to mac80211. Firmware supports mesh type from > WLAN.HK.2.1.0.1-00113-QCAHKSWPL_SILICONZ-1 onwards. As of now, > only open auth mesh networking is working. > > Known issues: > - Depends on firmware fix to allow other BSS frames > - Failed to complete path negotiation in secured mode > - Target assert while shutting down interface in secured mode > > Signed-off-by: Rajkumar Manoharan <rmanohar@codeaurora.org> > --- > drivers/net/wireless/ath/ath11k/mac.c | 10 +++++++++- > drivers/net/wireless/ath/ath11k/wmi.h | 11 +++++++---- > 2 files changed, 16 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c > index 12a2c4421264..b384395bb08c 100644 > --- a/drivers/net/wireless/ath/ath11k/mac.c > +++ b/drivers/net/wireless/ath/ath11k/mac.c > @@ -2579,6 +2579,7 @@ static int ath11k_sta_state(struct ieee80211_hw *hw, > } else if (old_state == IEEE80211_STA_AUTH && > new_state == IEEE80211_STA_ASSOC && > (vif->type == NL80211_IFTYPE_AP || > + vif->type == NL80211_IFTYPE_MESH_POINT || > vif->type == NL80211_IFTYPE_ADHOC)) { > ret = ath11k_station_assoc(ar, vif, sta, false); > if (ret) > @@ -2591,6 +2592,7 @@ static int ath11k_sta_state(struct ieee80211_hw *hw, > } else if (old_state == IEEE80211_STA_ASSOC && > new_state == IEEE80211_STA_AUTH && > (vif->type == NL80211_IFTYPE_AP || > + vif->type == NL80211_IFTYPE_MESH_POINT || > vif->type == NL80211_IFTYPE_ADHOC)) { > ret = ath11k_station_disassoc(ar, vif, sta); > if (ret) > @@ -3436,6 +3438,8 @@ static int ath11k_add_interface(struct ieee80211_hw *hw, > case NL80211_IFTYPE_STATION: > arvif->vdev_type = WMI_VDEV_TYPE_STA; > break; > + case NL80211_IFTYPE_MESH_POINT: > + arvif->vdev_subtype = WMI_VDEV_SUBTYPE_MESH_11S; there should be a comment here that the drop is intentional John > case NL80211_IFTYPE_AP: > arvif->vdev_type = WMI_VDEV_TYPE_AP; > break; > @@ -4702,6 +4706,9 @@ static int ath11k_get_survey(struct ieee80211_hw *hw, int idx, > { > .max = 16, > .types = BIT(NL80211_IFTYPE_AP) > +#ifdef CONFIG_MAC80211_MESH > + | BIT(NL80211_IFTYPE_MESH_POINT) > +#endif > }, > }; > > @@ -4820,7 +4827,8 @@ static int ath11k_mac_register(struct ath11k *ar) > ar->hw->wiphy->available_antennas_tx = cap->tx_chain_mask; > > ar->hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | > - BIT(NL80211_IFTYPE_AP); > + BIT(NL80211_IFTYPE_AP) | > + BIT(NL80211_IFTYPE_MESH_POINT); > > ieee80211_hw_set(ar->hw, SIGNAL_DBM); > ieee80211_hw_set(ar->hw, SUPPORTS_PS); > diff --git a/drivers/net/wireless/ath/ath11k/wmi.h b/drivers/net/wireless/ath/ath11k/wmi.h > index 8102e80506fa..5d20f57fbacc 100644 > --- a/drivers/net/wireless/ath/ath11k/wmi.h > +++ b/drivers/net/wireless/ath/ath11k/wmi.h > @@ -4720,10 +4720,13 @@ enum wmi_vdev_type { > }; > > enum wmi_vdev_subtype { > - WMI_VDEV_SUBTYPE_NONE = 0, > - WMI_VDEV_SUBTYPE_P2P_DEVICE = 1, > - WMI_VDEV_SUBTYPE_P2P_CLIENT = 2, > - WMI_VDEV_SUBTYPE_P2P_GO = 3, > + WMI_VDEV_SUBTYPE_NONE, > + WMI_VDEV_SUBTYPE_P2P_DEVICE, > + WMI_VDEV_SUBTYPE_P2P_CLIENT, > + WMI_VDEV_SUBTYPE_P2P_GO, > + WMI_VDEV_SUBTYPE_PROXY_STA, > + WMI_VDEV_SUBTYPE_MESH_NON_11S, > + WMI_VDEV_SUBTYPE_MESH_11S, > }; > > enum wmi_sta_powersave_param { _______________________________________________ ath11k mailing list ath11k@lists.infradead.org http://lists.infradead.org/mailman/listinfo/ath11k ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] ath11k: enable mesh mode 2019-04-17 9:56 ` John Crispin @ 2019-04-17 21:01 ` Rajkumar Manoharan 0 siblings, 0 replies; 8+ messages in thread From: Rajkumar Manoharan @ 2019-04-17 21:01 UTC (permalink / raw) To: John Crispin; +Cc: ath11k On 2019-04-17 02:56, John Crispin wrote: > On 17/04/2019 11:29, Rajkumar Manoharan wrote: > >> @@ -3436,6 +3438,8 @@ static int ath11k_add_interface(struct >> ieee80211_hw *hw, >> case NL80211_IFTYPE_STATION: >> arvif->vdev_type = WMI_VDEV_TYPE_STA; >> break; >> + case NL80211_IFTYPE_MESH_POINT: >> + arvif->vdev_subtype = WMI_VDEV_SUBTYPE_MESH_11S; > > there should be a comment here that the drop is intentional > Hmm.. Agree to have fall through comment. -Rajkumar _______________________________________________ ath11k mailing list ath11k@lists.infradead.org http://lists.infradead.org/mailman/listinfo/ath11k ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/3] ath11k: allow 4 address transmission for mesh packet 2019-04-17 9:29 [PATCH 0/3] ath11k: Add Mesh mode support Rajkumar Manoharan 2019-04-17 9:29 ` [PATCH 1/3] ath11k: enable mesh mode Rajkumar Manoharan @ 2019-04-17 9:29 ` Rajkumar Manoharan 2019-04-17 9:57 ` John Crispin 2019-04-17 9:29 ` [PATCH 3/3] ath11k: remove unnecessary check for PMF Rajkumar Manoharan 2 siblings, 1 reply; 8+ messages in thread From: Rajkumar Manoharan @ 2019-04-17 9:29 UTC (permalink / raw) To: ath11k; +Cc: Pradeep Kumar Chitrapu, Rajkumar Manoharan Inform the target to use 4 adressses in 802.11 header for mesh data by marking the peer is capable of operating in 4 address format. Also ensure to inform TCL ring that mesh header is pesent in payload. This will be useful for enabling HW checksumming form mesh packets. Co-developed-by: Pradeep Kumar Chitrapu <pradeepc@codeaurora.org> Signed-off-by: Pradeep Kumar Chitrapu <pradeepc@codeaurora.org> Signed-off-by: Rajkumar Manoharan <rmanohar@codeaurora.org> --- drivers/net/wireless/ath/ath11k/dp_tx.c | 3 +++ drivers/net/wireless/ath/ath11k/mac.c | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/drivers/net/wireless/ath/ath11k/dp_tx.c b/drivers/net/wireless/ath/ath11k/dp_tx.c index 5324c5f514f8..b2807a88df9c 100644 --- a/drivers/net/wireless/ath/ath11k/dp_tx.c +++ b/drivers/net/wireless/ath/ath11k/dp_tx.c @@ -131,7 +131,10 @@ int ath11k_dp_tx(struct ath11k *ar, struct ath11k_vif *arvif, FIELD_PREP(HAL_TCL_DATA_CMD_INFO1_TCP6_CKSUM_EN, 1); } + if (ieee80211_vif_is_mesh(arvif->vif)) + ti.flags1 |= FIELD_PREP(HAL_TCL_DATA_CMD_INFO2_MESH_ENABLE, 1); ti.flags1 |= FIELD_PREP(HAL_TCL_DATA_CMD_INFO2_TID_OVERWRITE, 1); + ti.tid = ath11k_dp_get_tid(skb); switch (ti.encap_type) { diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c index b384395bb08c..aea99d9d8d1f 100644 --- a/drivers/net/wireless/ath/ath11k/mac.c +++ b/drivers/net/wireless/ath/ath11k/mac.c @@ -2550,6 +2550,17 @@ static int ath11k_sta_state(struct ieee80211_hw *hw, goto exit; } + if (ieee80211_vif_is_mesh(vif)) { + ret = ath11k_wmi_set_peer_param(ar, sta->addr, + arvif->vdev_id, + WMI_PEER_USE_4ADDR, 1); + if (ret) { + ath11k_warn(ar->ab, "failed to STA %pM 4addr capability: %d\n", + sta->addr, ret); + goto exit; + } + } + ret = ath11k_dp_peer_setup(ar, arvif->vdev_id, sta->addr); if (ret) { ath11k_warn(ar->ab, "failed to setup dp for peer %pM on vdev %i (%d)\n", -- 1.9.1 _______________________________________________ ath11k mailing list ath11k@lists.infradead.org http://lists.infradead.org/mailman/listinfo/ath11k ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/3] ath11k: allow 4 address transmission for mesh packet 2019-04-17 9:29 ` [PATCH 2/3] ath11k: allow 4 address transmission for mesh packet Rajkumar Manoharan @ 2019-04-17 9:57 ` John Crispin 2019-04-17 21:08 ` Rajkumar Manoharan 0 siblings, 1 reply; 8+ messages in thread From: John Crispin @ 2019-04-17 9:57 UTC (permalink / raw) To: Rajkumar Manoharan, ath11k; +Cc: Pradeep Kumar Chitrapu On 17/04/2019 11:29, Rajkumar Manoharan wrote: > diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c > index b384395bb08c..aea99d9d8d1f 100644 > --- a/drivers/net/wireless/ath/ath11k/mac.c > +++ b/drivers/net/wireless/ath/ath11k/mac.c > @@ -2550,6 +2550,17 @@ static int ath11k_sta_state(struct ieee80211_hw *hw, > goto exit; > } > > + if (ieee80211_vif_is_mesh(vif)) { > + ret = ath11k_wmi_set_peer_param(ar, sta->addr, > + arvif->vdev_id, > + WMI_PEER_USE_4ADDR, 1); > + if (ret) { > + ath11k_warn(ar->ab, "failed to STA %pM 4addr capability: %d\n", > + sta->addr, ret); Hi, looks like the indentation is bad here John _______________________________________________ ath11k mailing list ath11k@lists.infradead.org http://lists.infradead.org/mailman/listinfo/ath11k ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/3] ath11k: allow 4 address transmission for mesh packet 2019-04-17 9:57 ` John Crispin @ 2019-04-17 21:08 ` Rajkumar Manoharan 0 siblings, 0 replies; 8+ messages in thread From: Rajkumar Manoharan @ 2019-04-17 21:08 UTC (permalink / raw) To: John Crispin; +Cc: Pradeep Kumar Chitrapu, ath11k On 2019-04-17 02:57, John Crispin wrote: > On 17/04/2019 11:29, Rajkumar Manoharan wrote: >> diff --git a/drivers/net/wireless/ath/ath11k/mac.c >> b/drivers/net/wireless/ath/ath11k/mac.c >> index b384395bb08c..aea99d9d8d1f 100644 >> --- a/drivers/net/wireless/ath/ath11k/mac.c >> +++ b/drivers/net/wireless/ath/ath11k/mac.c >> @@ -2550,6 +2550,17 @@ static int ath11k_sta_state(struct ieee80211_hw >> *hw, >> goto exit; >> } >> + if (ieee80211_vif_is_mesh(vif)) { >> + ret = ath11k_wmi_set_peer_param(ar, sta->addr, >> + arvif->vdev_id, >> + WMI_PEER_USE_4ADDR, 1); >> + if (ret) { >> + ath11k_warn(ar->ab, "failed to STA %pM 4addr capability: %d\n", >> + sta->addr, ret); > > Hi, > > looks like the indentation is bad here > John, I don't see the indentation issue from patch and no warning in checkpatch. -Rajkumar _______________________________________________ ath11k mailing list ath11k@lists.infradead.org http://lists.infradead.org/mailman/listinfo/ath11k ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/3] ath11k: remove unnecessary check for PMF 2019-04-17 9:29 [PATCH 0/3] ath11k: Add Mesh mode support Rajkumar Manoharan 2019-04-17 9:29 ` [PATCH 1/3] ath11k: enable mesh mode Rajkumar Manoharan 2019-04-17 9:29 ` [PATCH 2/3] ath11k: allow 4 address transmission for mesh packet Rajkumar Manoharan @ 2019-04-17 9:29 ` Rajkumar Manoharan 2 siblings, 0 replies; 8+ messages in thread From: Rajkumar Manoharan @ 2019-04-17 9:29 UTC (permalink / raw) To: ath11k; +Cc: Rajkumar Manoharan Firmware delivers mesh group action frame as encrypted payload. To allow software decryption for these group action frames, rx status should not be marked as RX_FLAG_DECRYPTED and protected bit in frame control should not be cleared. Existing robust management check is enough to handle RX_FLAG_DECRYPTED. Hence removing unnecessary protected frame validation. Signed-off-by: Rajkumar Manoharan <rmanohar@codeaurora.org> --- drivers/net/wireless/ath/ath11k/wmi.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/wmi.c b/drivers/net/wireless/ath/ath11k/wmi.c index cdacbaea188c..5712ac030419 100644 --- a/drivers/net/wireless/ath/ath11k/wmi.c +++ b/drivers/net/wireless/ath/ath11k/wmi.c @@ -5196,18 +5196,17 @@ void ath11k_mgmt_rx_event(struct ath11k_base *ab, struct sk_buff *skb) */ status->flag |= RX_FLAG_SKIP_MONITOR; - if (ieee80211_has_protected(hdr->frame_control)) { - /* In case of PMF, FW delivers decrypted frames - * with Protected Bit set. Don't clear that. - */ - if (!ieee80211_is_robust_mgmt_frame(skb)) { - status->flag |= RX_FLAG_DECRYPTED; + /* In case of PMF, FW delivers decrypted frames with Protected Bit set. + * Don't clear that. FW also delivers broadcast management frames + * (ex: group privacy action frames in mesh) as encrypted payload. + */ + if (!ieee80211_is_robust_mgmt_frame(skb)) { + status->flag |= RX_FLAG_DECRYPTED; - status->flag |= RX_FLAG_IV_STRIPPED | - RX_FLAG_MMIC_STRIPPED; - hdr->frame_control = __cpu_to_le16(fc & - ~IEEE80211_FCTL_PROTECTED); - } + status->flag |= RX_FLAG_IV_STRIPPED | + RX_FLAG_MMIC_STRIPPED; + hdr->frame_control = __cpu_to_le16(fc & + ~IEEE80211_FCTL_PROTECTED); } /* TODO: Pending handle beacon implementation -- 1.9.1 _______________________________________________ ath11k mailing list ath11k@lists.infradead.org http://lists.infradead.org/mailman/listinfo/ath11k ^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2019-04-17 21:08 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-04-17 9:29 [PATCH 0/3] ath11k: Add Mesh mode support Rajkumar Manoharan 2019-04-17 9:29 ` [PATCH 1/3] ath11k: enable mesh mode Rajkumar Manoharan 2019-04-17 9:56 ` John Crispin 2019-04-17 21:01 ` Rajkumar Manoharan 2019-04-17 9:29 ` [PATCH 2/3] ath11k: allow 4 address transmission for mesh packet Rajkumar Manoharan 2019-04-17 9:57 ` John Crispin 2019-04-17 21:08 ` Rajkumar Manoharan 2019-04-17 9:29 ` [PATCH 3/3] ath11k: remove unnecessary check for PMF Rajkumar Manoharan
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox