* [PATCH v7 0/5] Add TDLS feature for ath10k
[not found] <TDLS for ath10k patch v7>
@ 2017-10-24 8:51 ` yintang
2017-10-24 8:52 ` yintang
1 sibling, 0 replies; 18+ messages in thread
From: yintang @ 2017-10-24 8:51 UTC (permalink / raw)
To: ath10k; +Cc: linux-wireless
From: Yingying Tang <yintang@qti.qualcomm.com>
This patchset is for Rome PCIE chip, it will not affect other hardware
Yingying Tang (5):
mac80211: Enable TDLS peer buffer STA feature
ath10k: Enable TDLS peer buffer STA feature
ath10k: Enable TDLS peer inactivity detection
ath10k: Avoid to set WEP key for TDLS peer
ath10k: Fix TDLS peer TX data failure issue on encryped AP
drivers/net/wireless/ath/ath10k/mac.c | 9 ++++-
drivers/net/wireless/ath/ath10k/wmi-tlv.c | 55 +++++++++++++++++++++++++++++
drivers/net/wireless/ath/ath10k/wmi-tlv.h | 9 +++++
drivers/net/wireless/ath/ath10k/wmi.h | 1 +
include/net/mac80211.h | 4 +++
net/mac80211/debugfs.c | 1 +
net/mac80211/tdls.c | 5 ++-
7 files changed, 82 insertions(+), 2 deletions(-)
--
1.7.9.5
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v7 0/5] Add TDLS feature for ath10k
@ 2017-10-24 8:51 ` yintang
0 siblings, 0 replies; 18+ messages in thread
From: yintang @ 2017-10-24 8:51 UTC (permalink / raw)
To: ath10k; +Cc: linux-wireless
From: Yingying Tang <yintang@qti.qualcomm.com>
This patchset is for Rome PCIE chip, it will not affect other hardware
Yingying Tang (5):
mac80211: Enable TDLS peer buffer STA feature
ath10k: Enable TDLS peer buffer STA feature
ath10k: Enable TDLS peer inactivity detection
ath10k: Avoid to set WEP key for TDLS peer
ath10k: Fix TDLS peer TX data failure issue on encryped AP
drivers/net/wireless/ath/ath10k/mac.c | 9 ++++-
drivers/net/wireless/ath/ath10k/wmi-tlv.c | 55 +++++++++++++++++++++++++++++
drivers/net/wireless/ath/ath10k/wmi-tlv.h | 9 +++++
drivers/net/wireless/ath/ath10k/wmi.h | 1 +
include/net/mac80211.h | 4 +++
net/mac80211/debugfs.c | 1 +
net/mac80211/tdls.c | 5 ++-
7 files changed, 82 insertions(+), 2 deletions(-)
--
1.7.9.5
_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH v7 1/5] mac80211: Enable TDLS peer buffer STA feature
2017-10-24 8:51 ` yintang
@ 2017-10-24 8:51 ` yintang
-1 siblings, 0 replies; 18+ messages in thread
From: yintang @ 2017-10-24 8:51 UTC (permalink / raw)
To: ath10k; +Cc: linux-wireless
From: Yingying Tang <yintang@qti.qualcomm.com>
Enable TDLS peer buffer STA feature.
Set extended capability bit to enable buffer STA when driver
support it.
Signed-off-by: Yingying Tang <yintang@qti.qualcomm.com>
---
include/net/mac80211.h | 4 ++++
net/mac80211/debugfs.c | 1 +
net/mac80211/tdls.c | 5 ++++-
3 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index f8149ca..5928123 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -2067,6 +2067,9 @@ struct ieee80211_txq {
* The stack will not do fragmentation.
* The callback for @set_frag_threshold should be set as well.
*
+ * @IEEE80211_HW_SUPPORTS_TDLS_BUFFER_STA: Hardware support buffer STA when
+ * TDLS is established.
+ *
* @NUM_IEEE80211_HW_FLAGS: number of hardware flags, used for sizing arrays
*/
enum ieee80211_hw_flags {
@@ -2109,6 +2112,7 @@ enum ieee80211_hw_flags {
IEEE80211_HW_TX_FRAG_LIST,
IEEE80211_HW_REPORTS_LOW_ACK,
IEEE80211_HW_SUPPORTS_TX_FRAG,
+ IEEE80211_HW_SUPPORTS_TDLS_BUFFER_STA,
/* keep last, obviously */
NUM_IEEE80211_HW_FLAGS
diff --git a/net/mac80211/debugfs.c b/net/mac80211/debugfs.c
index 5fae001..1f466d1 100644
--- a/net/mac80211/debugfs.c
+++ b/net/mac80211/debugfs.c
@@ -211,6 +211,7 @@ static ssize_t reset_write(struct file *file, const char __user *user_buf,
FLAG(TX_FRAG_LIST),
FLAG(REPORTS_LOW_ACK),
FLAG(SUPPORTS_TX_FRAG),
+ FLAG(SUPPORTS_TDLS_BUFFER_STA),
#undef FLAG
};
diff --git a/net/mac80211/tdls.c b/net/mac80211/tdls.c
index 91093d4..8231466 100644
--- a/net/mac80211/tdls.c
+++ b/net/mac80211/tdls.c
@@ -47,6 +47,8 @@ static void ieee80211_tdls_add_ext_capab(struct ieee80211_sub_if_data *sdata,
NL80211_FEATURE_TDLS_CHANNEL_SWITCH;
bool wider_band = ieee80211_hw_check(&local->hw, TDLS_WIDER_BW) &&
!ifmgd->tdls_wider_bw_prohibited;
+ bool buffer_sta = ieee80211_hw_check(&local->hw,
+ SUPPORTS_TDLS_BUFFER_STA);
struct ieee80211_supported_band *sband = ieee80211_get_sband(sdata);
bool vht = sband && sband->vht_cap.vht_supported;
u8 *pos = skb_put(skb, 10);
@@ -56,7 +58,8 @@ static void ieee80211_tdls_add_ext_capab(struct ieee80211_sub_if_data *sdata,
*pos++ = 0x0;
*pos++ = 0x0;
*pos++ = 0x0;
- *pos++ = chan_switch ? WLAN_EXT_CAPA4_TDLS_CHAN_SWITCH : 0;
+ *pos++ = (chan_switch ? WLAN_EXT_CAPA4_TDLS_CHAN_SWITCH : 0) |
+ (buffer_sta ? WLAN_EXT_CAPA4_TDLS_BUFFER_STA : 0);
*pos++ = WLAN_EXT_CAPA5_TDLS_ENABLED;
*pos++ = 0;
*pos++ = 0;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v7 1/5] mac80211: Enable TDLS peer buffer STA feature
@ 2017-10-24 8:51 ` yintang
0 siblings, 0 replies; 18+ messages in thread
From: yintang @ 2017-10-24 8:51 UTC (permalink / raw)
To: ath10k; +Cc: linux-wireless
From: Yingying Tang <yintang@qti.qualcomm.com>
Enable TDLS peer buffer STA feature.
Set extended capability bit to enable buffer STA when driver
support it.
Signed-off-by: Yingying Tang <yintang@qti.qualcomm.com>
---
include/net/mac80211.h | 4 ++++
net/mac80211/debugfs.c | 1 +
net/mac80211/tdls.c | 5 ++++-
3 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index f8149ca..5928123 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -2067,6 +2067,9 @@ struct ieee80211_txq {
* The stack will not do fragmentation.
* The callback for @set_frag_threshold should be set as well.
*
+ * @IEEE80211_HW_SUPPORTS_TDLS_BUFFER_STA: Hardware support buffer STA when
+ * TDLS is established.
+ *
* @NUM_IEEE80211_HW_FLAGS: number of hardware flags, used for sizing arrays
*/
enum ieee80211_hw_flags {
@@ -2109,6 +2112,7 @@ enum ieee80211_hw_flags {
IEEE80211_HW_TX_FRAG_LIST,
IEEE80211_HW_REPORTS_LOW_ACK,
IEEE80211_HW_SUPPORTS_TX_FRAG,
+ IEEE80211_HW_SUPPORTS_TDLS_BUFFER_STA,
/* keep last, obviously */
NUM_IEEE80211_HW_FLAGS
diff --git a/net/mac80211/debugfs.c b/net/mac80211/debugfs.c
index 5fae001..1f466d1 100644
--- a/net/mac80211/debugfs.c
+++ b/net/mac80211/debugfs.c
@@ -211,6 +211,7 @@ static ssize_t reset_write(struct file *file, const char __user *user_buf,
FLAG(TX_FRAG_LIST),
FLAG(REPORTS_LOW_ACK),
FLAG(SUPPORTS_TX_FRAG),
+ FLAG(SUPPORTS_TDLS_BUFFER_STA),
#undef FLAG
};
diff --git a/net/mac80211/tdls.c b/net/mac80211/tdls.c
index 91093d4..8231466 100644
--- a/net/mac80211/tdls.c
+++ b/net/mac80211/tdls.c
@@ -47,6 +47,8 @@ static void ieee80211_tdls_add_ext_capab(struct ieee80211_sub_if_data *sdata,
NL80211_FEATURE_TDLS_CHANNEL_SWITCH;
bool wider_band = ieee80211_hw_check(&local->hw, TDLS_WIDER_BW) &&
!ifmgd->tdls_wider_bw_prohibited;
+ bool buffer_sta = ieee80211_hw_check(&local->hw,
+ SUPPORTS_TDLS_BUFFER_STA);
struct ieee80211_supported_band *sband = ieee80211_get_sband(sdata);
bool vht = sband && sband->vht_cap.vht_supported;
u8 *pos = skb_put(skb, 10);
@@ -56,7 +58,8 @@ static void ieee80211_tdls_add_ext_capab(struct ieee80211_sub_if_data *sdata,
*pos++ = 0x0;
*pos++ = 0x0;
*pos++ = 0x0;
- *pos++ = chan_switch ? WLAN_EXT_CAPA4_TDLS_CHAN_SWITCH : 0;
+ *pos++ = (chan_switch ? WLAN_EXT_CAPA4_TDLS_CHAN_SWITCH : 0) |
+ (buffer_sta ? WLAN_EXT_CAPA4_TDLS_BUFFER_STA : 0);
*pos++ = WLAN_EXT_CAPA5_TDLS_ENABLED;
*pos++ = 0;
*pos++ = 0;
--
1.7.9.5
_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v7 2/5] ath10k: Enable TDLS peer buffer STA feature
2017-10-24 8:51 ` yintang
@ 2017-10-24 8:51 ` yintang
-1 siblings, 0 replies; 18+ messages in thread
From: yintang @ 2017-10-24 8:51 UTC (permalink / raw)
To: ath10k; +Cc: linux-wireless
From: Yingying Tang <yintang@qti.qualcomm.com>
Enable TDLS peer buffer STA feature.
QCA6174 firmware(version: WLAN.RM.4.4) support TDLS peer buffer STA,
it reports this capability through wmi service map in wmi service ready
event. Set related parameter in TDLS WMI command to enable this feature.
Signed-off-by: Yingying Tang <yintang@qti.qualcomm.com>
---
drivers/net/wireless/ath/ath10k/mac.c | 3 +++
drivers/net/wireless/ath/ath10k/wmi-tlv.c | 3 +++
2 files changed, 6 insertions(+)
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index 5683f1a..1672043 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -8204,6 +8204,9 @@ int ath10k_mac_register(struct ath10k *ar)
ieee80211_hw_set(ar->hw, TDLS_WIDER_BW);
}
+ if (test_bit(WMI_SERVICE_TDLS_UAPSD_BUFFER_STA, ar->wmi.svc_map))
+ ieee80211_hw_set(ar->hw, SUPPORTS_TDLS_BUFFER_STA);
+
ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
ar->hw->wiphy->max_remain_on_channel_duration = 5000;
diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.c b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
index 7616c1c..f60b46e 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
@@ -2747,6 +2747,9 @@ static void *ath10k_wmi_tlv_put_wmm(void *ptr,
*/
u32 options = 0;
+ if (test_bit(WMI_SERVICE_TDLS_UAPSD_BUFFER_STA, ar->wmi.svc_map))
+ options |= WMI_TLV_TDLS_BUFFER_STA_EN;
+
len = sizeof(*tlv) + sizeof(*cmd);
skb = ath10k_wmi_alloc_skb(ar, len);
if (!skb)
--
1.7.9.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v7 2/5] ath10k: Enable TDLS peer buffer STA feature
@ 2017-10-24 8:51 ` yintang
0 siblings, 0 replies; 18+ messages in thread
From: yintang @ 2017-10-24 8:51 UTC (permalink / raw)
To: ath10k; +Cc: linux-wireless
From: Yingying Tang <yintang@qti.qualcomm.com>
Enable TDLS peer buffer STA feature.
QCA6174 firmware(version: WLAN.RM.4.4) support TDLS peer buffer STA,
it reports this capability through wmi service map in wmi service ready
event. Set related parameter in TDLS WMI command to enable this feature.
Signed-off-by: Yingying Tang <yintang@qti.qualcomm.com>
---
drivers/net/wireless/ath/ath10k/mac.c | 3 +++
drivers/net/wireless/ath/ath10k/wmi-tlv.c | 3 +++
2 files changed, 6 insertions(+)
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index 5683f1a..1672043 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -8204,6 +8204,9 @@ int ath10k_mac_register(struct ath10k *ar)
ieee80211_hw_set(ar->hw, TDLS_WIDER_BW);
}
+ if (test_bit(WMI_SERVICE_TDLS_UAPSD_BUFFER_STA, ar->wmi.svc_map))
+ ieee80211_hw_set(ar->hw, SUPPORTS_TDLS_BUFFER_STA);
+
ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH;
ar->hw->wiphy->max_remain_on_channel_duration = 5000;
diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.c b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
index 7616c1c..f60b46e 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
@@ -2747,6 +2747,9 @@ static void *ath10k_wmi_tlv_put_wmm(void *ptr,
*/
u32 options = 0;
+ if (test_bit(WMI_SERVICE_TDLS_UAPSD_BUFFER_STA, ar->wmi.svc_map))
+ options |= WMI_TLV_TDLS_BUFFER_STA_EN;
+
len = sizeof(*tlv) + sizeof(*cmd);
skb = ath10k_wmi_alloc_skb(ar, len);
if (!skb)
--
1.7.9.5
_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v7 3/5] ath10k: Enable TDLS peer inactivity detection
2017-10-24 8:51 ` yintang
@ 2017-10-24 8:51 ` yintang
-1 siblings, 0 replies; 18+ messages in thread
From: yintang @ 2017-10-24 8:51 UTC (permalink / raw)
To: ath10k; +Cc: linux-wireless
From: Yingying Tang <yintang@qti.qualcomm.com>
Enable TDLS peer inactivity detetion feature.
QCA6174 firmware(version: WLAN.RM.4.4) support TDLS link inactivity detecting.
Set related parameters in TDLS WMI command to enable this feature.
Signed-off-by: Yingying Tang <yintang@qti.qualcomm.com>
---
drivers/net/wireless/ath/ath10k/wmi-tlv.c | 52 +++++++++++++++++++++++++++++
drivers/net/wireless/ath/ath10k/wmi-tlv.h | 9 +++++
drivers/net/wireless/ath/ath10k/wmi.h | 1 +
3 files changed, 62 insertions(+)
diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.c b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
index f60b46e..63bb2c4 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
@@ -412,6 +412,49 @@ static int ath10k_wmi_tlv_event_tx_pause(struct ath10k *ar,
return 0;
}
+void ath10k_wmi_event_tdls_peer(struct ath10k *ar, struct sk_buff *skb)
+{
+ struct ieee80211_sta *station;
+ const struct wmi_tlv_tdls_peer_event *ev;
+ const void **tb;
+ struct ath10k_vif *arvif;
+
+ tb = ath10k_wmi_tlv_parse_alloc(ar, skb->data, skb->len, GFP_ATOMIC);
+ if (IS_ERR(tb)) {
+ ath10k_warn(ar, "tdls peer failed to parse tlv");
+ return;
+ }
+ ev = tb[WMI_TLV_TAG_STRUCT_TDLS_PEER_EVENT];
+ if (!ev) {
+ kfree(tb);
+ ath10k_warn(ar, "tdls peer NULL event");
+ return;
+ }
+
+ switch (ev->peer_reason) {
+ case WMI_TDLS_TEARDOWN_REASON_TX:
+ case WMI_TDLS_TEARDOWN_REASON_RSSI:
+ case WMI_TDLS_TEARDOWN_REASON_PTR_TIMEOUT:
+ station = ieee80211_find_sta_by_ifaddr(ar->hw,
+ ev->peer_macaddr.addr,
+ NULL);
+ if (!station) {
+ ath10k_warn(ar, "did not find station from tdls peer event");
+ kfree(tb);
+ return;
+ }
+ arvif = ath10k_get_arvif(ar, ev->vdev_id);
+ ieee80211_tdls_oper_request(
+ arvif->vif, station->addr,
+ NL80211_TDLS_TEARDOWN,
+ WLAN_REASON_TDLS_TEARDOWN_UNREACHABLE,
+ GFP_ATOMIC
+ );
+ break;
+ }
+ kfree(tb);
+}
+
/***********/
/* TLV ops */
/***********/
@@ -552,6 +595,9 @@ static void ath10k_wmi_tlv_op_rx(struct ath10k *ar, struct sk_buff *skb)
case WMI_TLV_TX_PAUSE_EVENTID:
ath10k_wmi_tlv_event_tx_pause(ar, skb);
break;
+ case WMI_TLV_TDLS_PEER_EVENTID:
+ ath10k_wmi_event_tdls_peer(ar, skb);
+ break;
default:
ath10k_warn(ar, "Unknown eventid: %d\n", id);
break;
@@ -2750,6 +2796,12 @@ static void *ath10k_wmi_tlv_put_wmm(void *ptr,
if (test_bit(WMI_SERVICE_TDLS_UAPSD_BUFFER_STA, ar->wmi.svc_map))
options |= WMI_TLV_TDLS_BUFFER_STA_EN;
+ /* WMI_TDLS_ENABLE_ACTIVE_EXTERNAL_CONTROL means firm will handle TDLS
+ * link inactivity detecting logic.
+ */
+ if (state == WMI_TDLS_ENABLE_ACTIVE)
+ state = WMI_TDLS_ENABLE_ACTIVE_EXTERNAL_CONTROL;
+
len = sizeof(*tlv) + sizeof(*cmd);
skb = ath10k_wmi_alloc_skb(ar, len);
if (!skb)
diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.h b/drivers/net/wireless/ath/ath10k/wmi-tlv.h
index 22cf011..8fdb381 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.h
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.h
@@ -1641,6 +1641,15 @@ struct wmi_tlv_tx_pause_ev {
__le32 tid_map;
} __packed;
+struct wmi_tlv_tdls_peer_event {
+ struct wmi_mac_addr peer_macaddr;
+ __le32 peer_status;
+ __le32 peer_reason;
+ __le32 vdev_id;
+} __packed;
+
+
+
void ath10k_wmi_tlv_attach(struct ath10k *ar);
#endif
diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h
index 7a3606d..74a6c78 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.h
+++ b/drivers/net/wireless/ath/ath10k/wmi.h
@@ -6720,6 +6720,7 @@ enum wmi_tdls_state {
WMI_TDLS_DISABLE,
WMI_TDLS_ENABLE_PASSIVE,
WMI_TDLS_ENABLE_ACTIVE,
+ WMI_TDLS_ENABLE_ACTIVE_EXTERNAL_CONTROL,
};
enum wmi_tdls_peer_state {
--
1.7.9.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v7 3/5] ath10k: Enable TDLS peer inactivity detection
@ 2017-10-24 8:51 ` yintang
0 siblings, 0 replies; 18+ messages in thread
From: yintang @ 2017-10-24 8:51 UTC (permalink / raw)
To: ath10k; +Cc: linux-wireless
From: Yingying Tang <yintang@qti.qualcomm.com>
Enable TDLS peer inactivity detetion feature.
QCA6174 firmware(version: WLAN.RM.4.4) support TDLS link inactivity detecting.
Set related parameters in TDLS WMI command to enable this feature.
Signed-off-by: Yingying Tang <yintang@qti.qualcomm.com>
---
drivers/net/wireless/ath/ath10k/wmi-tlv.c | 52 +++++++++++++++++++++++++++++
drivers/net/wireless/ath/ath10k/wmi-tlv.h | 9 +++++
drivers/net/wireless/ath/ath10k/wmi.h | 1 +
3 files changed, 62 insertions(+)
diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.c b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
index f60b46e..63bb2c4 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
@@ -412,6 +412,49 @@ static int ath10k_wmi_tlv_event_tx_pause(struct ath10k *ar,
return 0;
}
+void ath10k_wmi_event_tdls_peer(struct ath10k *ar, struct sk_buff *skb)
+{
+ struct ieee80211_sta *station;
+ const struct wmi_tlv_tdls_peer_event *ev;
+ const void **tb;
+ struct ath10k_vif *arvif;
+
+ tb = ath10k_wmi_tlv_parse_alloc(ar, skb->data, skb->len, GFP_ATOMIC);
+ if (IS_ERR(tb)) {
+ ath10k_warn(ar, "tdls peer failed to parse tlv");
+ return;
+ }
+ ev = tb[WMI_TLV_TAG_STRUCT_TDLS_PEER_EVENT];
+ if (!ev) {
+ kfree(tb);
+ ath10k_warn(ar, "tdls peer NULL event");
+ return;
+ }
+
+ switch (ev->peer_reason) {
+ case WMI_TDLS_TEARDOWN_REASON_TX:
+ case WMI_TDLS_TEARDOWN_REASON_RSSI:
+ case WMI_TDLS_TEARDOWN_REASON_PTR_TIMEOUT:
+ station = ieee80211_find_sta_by_ifaddr(ar->hw,
+ ev->peer_macaddr.addr,
+ NULL);
+ if (!station) {
+ ath10k_warn(ar, "did not find station from tdls peer event");
+ kfree(tb);
+ return;
+ }
+ arvif = ath10k_get_arvif(ar, ev->vdev_id);
+ ieee80211_tdls_oper_request(
+ arvif->vif, station->addr,
+ NL80211_TDLS_TEARDOWN,
+ WLAN_REASON_TDLS_TEARDOWN_UNREACHABLE,
+ GFP_ATOMIC
+ );
+ break;
+ }
+ kfree(tb);
+}
+
/***********/
/* TLV ops */
/***********/
@@ -552,6 +595,9 @@ static void ath10k_wmi_tlv_op_rx(struct ath10k *ar, struct sk_buff *skb)
case WMI_TLV_TX_PAUSE_EVENTID:
ath10k_wmi_tlv_event_tx_pause(ar, skb);
break;
+ case WMI_TLV_TDLS_PEER_EVENTID:
+ ath10k_wmi_event_tdls_peer(ar, skb);
+ break;
default:
ath10k_warn(ar, "Unknown eventid: %d\n", id);
break;
@@ -2750,6 +2796,12 @@ static void *ath10k_wmi_tlv_put_wmm(void *ptr,
if (test_bit(WMI_SERVICE_TDLS_UAPSD_BUFFER_STA, ar->wmi.svc_map))
options |= WMI_TLV_TDLS_BUFFER_STA_EN;
+ /* WMI_TDLS_ENABLE_ACTIVE_EXTERNAL_CONTROL means firm will handle TDLS
+ * link inactivity detecting logic.
+ */
+ if (state == WMI_TDLS_ENABLE_ACTIVE)
+ state = WMI_TDLS_ENABLE_ACTIVE_EXTERNAL_CONTROL;
+
len = sizeof(*tlv) + sizeof(*cmd);
skb = ath10k_wmi_alloc_skb(ar, len);
if (!skb)
diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.h b/drivers/net/wireless/ath/ath10k/wmi-tlv.h
index 22cf011..8fdb381 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.h
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.h
@@ -1641,6 +1641,15 @@ struct wmi_tlv_tx_pause_ev {
__le32 tid_map;
} __packed;
+struct wmi_tlv_tdls_peer_event {
+ struct wmi_mac_addr peer_macaddr;
+ __le32 peer_status;
+ __le32 peer_reason;
+ __le32 vdev_id;
+} __packed;
+
+
+
void ath10k_wmi_tlv_attach(struct ath10k *ar);
#endif
diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h
index 7a3606d..74a6c78 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.h
+++ b/drivers/net/wireless/ath/ath10k/wmi.h
@@ -6720,6 +6720,7 @@ enum wmi_tdls_state {
WMI_TDLS_DISABLE,
WMI_TDLS_ENABLE_PASSIVE,
WMI_TDLS_ENABLE_ACTIVE,
+ WMI_TDLS_ENABLE_ACTIVE_EXTERNAL_CONTROL,
};
enum wmi_tdls_peer_state {
--
1.7.9.5
_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v7 4/5] ath10k: Avoid to set WEP key for TDLS peer
2017-10-24 8:51 ` yintang
@ 2017-10-24 8:51 ` yintang
-1 siblings, 0 replies; 18+ messages in thread
From: yintang @ 2017-10-24 8:51 UTC (permalink / raw)
To: ath10k; +Cc: linux-wireless
From: Yingying Tang <yintang@qti.qualcomm.com>
TDLS peer do not need WEP key. Setting WEP key will lead
to TDLS setup failure. Add fix to avoid setting WEP key
for TDLS peer.
Signed-off-by: Yingying Tang <yintang@qti.qualcomm.com>
---
drivers/net/wireless/ath/ath10k/mac.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index 1672043..a984a72 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -2966,7 +2966,7 @@ static int ath10k_station_assoc(struct ath10k *ar,
}
/* Plumb cached keys only for static WEP */
- if (arvif->def_wep_key_idx != -1) {
+ if ((arvif->def_wep_key_idx != -1) && (!sta->tdls)) {
ret = ath10k_install_peer_wep_keys(arvif, sta->addr);
if (ret) {
ath10k_warn(ar, "failed to install peer wep keys for vdev %i: %d\n",
--
1.7.9.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v7 4/5] ath10k: Avoid to set WEP key for TDLS peer
@ 2017-10-24 8:51 ` yintang
0 siblings, 0 replies; 18+ messages in thread
From: yintang @ 2017-10-24 8:51 UTC (permalink / raw)
To: ath10k; +Cc: linux-wireless
From: Yingying Tang <yintang@qti.qualcomm.com>
TDLS peer do not need WEP key. Setting WEP key will lead
to TDLS setup failure. Add fix to avoid setting WEP key
for TDLS peer.
Signed-off-by: Yingying Tang <yintang@qti.qualcomm.com>
---
drivers/net/wireless/ath/ath10k/mac.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index 1672043..a984a72 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -2966,7 +2966,7 @@ static int ath10k_station_assoc(struct ath10k *ar,
}
/* Plumb cached keys only for static WEP */
- if (arvif->def_wep_key_idx != -1) {
+ if ((arvif->def_wep_key_idx != -1) && (!sta->tdls)) {
ret = ath10k_install_peer_wep_keys(arvif, sta->addr);
if (ret) {
ath10k_warn(ar, "failed to install peer wep keys for vdev %i: %d\n",
--
1.7.9.5
_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v7 5/5] ath10k: Fix TDLS peer TX data failure issue on encryped AP
[not found] <TDLS for ath10k patch v7>
@ 2017-10-24 8:52 ` yintang
2017-10-24 8:52 ` yintang
1 sibling, 0 replies; 18+ messages in thread
From: yintang @ 2017-10-24 8:52 UTC (permalink / raw)
To: ath10k; +Cc: linux-wireless
From: Yingying Tang <yintang@qti.qualcomm.com>
For WPA encryption, QCA6174 firmware(version: WLAN.RM.4.4) will unblock
data when M4 was sent successfully. For other encryption which didn't need
4-way handshake firmware will unblock the data when peer authorized. Since
TDLS is 3-way handshake host need send authorize cmd to firmware to unblock
data.
Signed-off-by: Yingying Tang <yintang@qti.qualcomm.com>
---
drivers/net/wireless/ath/ath10k/mac.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index a984a72..fe14d3c 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -5841,6 +5841,10 @@ static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
ath10k_warn(ar, "Peer %pM disappeared!\n", peer_addr);
spin_unlock_bh(&ar->data_lock);
+ if (sta && sta->tdls)
+ ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
+ WMI_PEER_AUTHORIZE, 1);
+
exit:
mutex_unlock(&ar->conf_mutex);
return ret;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH v7 5/5] ath10k: Fix TDLS peer TX data failure issue on encryped AP
@ 2017-10-24 8:52 ` yintang
0 siblings, 0 replies; 18+ messages in thread
From: yintang @ 2017-10-24 8:52 UTC (permalink / raw)
To: ath10k; +Cc: linux-wireless
From: Yingying Tang <yintang@qti.qualcomm.com>
For WPA encryption, QCA6174 firmware(version: WLAN.RM.4.4) will unblock
data when M4 was sent successfully. For other encryption which didn't need
4-way handshake firmware will unblock the data when peer authorized. Since
TDLS is 3-way handshake host need send authorize cmd to firmware to unblock
data.
Signed-off-by: Yingying Tang <yintang@qti.qualcomm.com>
---
drivers/net/wireless/ath/ath10k/mac.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index a984a72..fe14d3c 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -5841,6 +5841,10 @@ static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
ath10k_warn(ar, "Peer %pM disappeared!\n", peer_addr);
spin_unlock_bh(&ar->data_lock);
+ if (sta && sta->tdls)
+ ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr,
+ WMI_PEER_AUTHORIZE, 1);
+
exit:
mutex_unlock(&ar->conf_mutex);
return ret;
--
1.7.9.5
_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [v7,2/5] ath10k: Enable TDLS peer buffer STA feature
2017-10-24 8:51 ` yintang
@ 2017-10-27 9:25 ` Kalle Valo
-1 siblings, 0 replies; 18+ messages in thread
From: Kalle Valo @ 2017-10-27 9:25 UTC (permalink / raw)
To: yintang; +Cc: ath10k, linux-wireless
yintang@qti.qualcomm.com wrote:
> From: Yingying Tang <yintang@qti.qualcomm.com>
>
> Enable TDLS peer buffer STA feature.
> QCA6174 firmware(version: WLAN.RM.4.4) support TDLS peer buffer STA,
> it reports this capability through wmi service map in wmi service ready
> event. Set related parameter in TDLS WMI command to enable this feature.
>
> Signed-off-by: Yingying Tang <yintang@qti.qualcomm.com>
Depends on:
a9cd27b34d66 mac80211: enable TDLS peer buffer STA feature
Currently in mac80211-next.
4 patches set to Awaiting Upstream.
10023753 [v7,2/5] ath10k: Enable TDLS peer buffer STA feature
10023743 [v7,3/5] ath10k: Enable TDLS peer inactivity detection
10023725 [v7,4/5] ath10k: Avoid to set WEP key for TDLS peer
10023737 [v7,5/5] ath10k: Fix TDLS peer TX data failure issue on encryped AP
--
https://patchwork.kernel.org/patch/10023753/
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [v7,2/5] ath10k: Enable TDLS peer buffer STA feature
@ 2017-10-27 9:25 ` Kalle Valo
0 siblings, 0 replies; 18+ messages in thread
From: Kalle Valo @ 2017-10-27 9:25 UTC (permalink / raw)
To: yintang; +Cc: linux-wireless, ath10k
yintang@qti.qualcomm.com wrote:
> From: Yingying Tang <yintang@qti.qualcomm.com>
>
> Enable TDLS peer buffer STA feature.
> QCA6174 firmware(version: WLAN.RM.4.4) support TDLS peer buffer STA,
> it reports this capability through wmi service map in wmi service ready
> event. Set related parameter in TDLS WMI command to enable this feature.
>
> Signed-off-by: Yingying Tang <yintang@qti.qualcomm.com>
Depends on:
a9cd27b34d66 mac80211: enable TDLS peer buffer STA feature
Currently in mac80211-next.
4 patches set to Awaiting Upstream.
10023753 [v7,2/5] ath10k: Enable TDLS peer buffer STA feature
10023743 [v7,3/5] ath10k: Enable TDLS peer inactivity detection
10023725 [v7,4/5] ath10k: Avoid to set WEP key for TDLS peer
10023737 [v7,5/5] ath10k: Fix TDLS peer TX data failure issue on encryped AP
--
https://patchwork.kernel.org/patch/10023753/
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [v7,3/5] ath10k: Enable TDLS peer inactivity detection
2017-10-24 8:51 ` yintang
(?)
@ 2018-03-28 15:41 ` Kalle Valo
-1 siblings, 0 replies; 18+ messages in thread
From: Kalle Valo @ 2018-03-28 15:41 UTC (permalink / raw)
To: yintang; +Cc: ath10k, linux-wireless
yintang@qti.qualcomm.com wrote:
> Enable TDLS peer inactivity detetion feature.
> QCA6174 firmware(version: WLAN.RM.4.4) support TDLS link inactivity detecting.
> Set related parameters in TDLS WMI command to enable this feature.
>
> Signed-off-by: Yingying Tang <yintang@qti.qualcomm.com>
> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This patch added new ath10k-check warnings:
drivers/net/wireless/ath/ath10k/wmi-tlv.c:460:48: warning: incorrect type in argument 2 (different base types)
drivers/net/wireless/ath/ath10k/wmi-tlv.c:460:48: expected unsigned int [unsigned] [usertype] vdev_id
drivers/net/wireless/ath/ath10k/wmi-tlv.c:460:48: got restricted __le32 const [usertype] vdev_id
drivers/net/wireless/ath/ath10k/wmi-tlv.c:448:19: warning: restricted __le32 degrades to integer
drivers/net/wireless/ath/ath10k/wmi-tlv.c:448:19: warning: restricted __le32 degrades to integer
drivers/net/wireless/ath/ath10k/wmi-tlv.c:429:6: warning: symbol 'ath10k_wmi_event_tdls_peer' was not declared. Should it be static?
drivers/net/wireless/ath/ath10k/wmi-tlv.h:1767: Please don't use multiple blank lines
I fixed those in the pending branch.
--
https://patchwork.kernel.org/patch/10023743/
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [v7,3/5] ath10k: Enable TDLS peer inactivity detection
2017-10-24 8:51 ` yintang
(?)
(?)
@ 2018-03-28 15:41 ` Kalle Valo
-1 siblings, 0 replies; 18+ messages in thread
From: Kalle Valo @ 2018-03-28 15:41 UTC (permalink / raw)
To: yintang; +Cc: linux-wireless, ath10k
yintang@qti.qualcomm.com wrote:
> Enable TDLS peer inactivity detetion feature.
> QCA6174 firmware(version: WLAN.RM.4.4) support TDLS link inactivity detecting.
> Set related parameters in TDLS WMI command to enable this feature.
>
> Signed-off-by: Yingying Tang <yintang@qti.qualcomm.com>
> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This patch added new ath10k-check warnings:
drivers/net/wireless/ath/ath10k/wmi-tlv.c:460:48: warning: incorrect type in argument 2 (different base types)
drivers/net/wireless/ath/ath10k/wmi-tlv.c:460:48: expected unsigned int [unsigned] [usertype] vdev_id
drivers/net/wireless/ath/ath10k/wmi-tlv.c:460:48: got restricted __le32 const [usertype] vdev_id
drivers/net/wireless/ath/ath10k/wmi-tlv.c:448:19: warning: restricted __le32 degrades to integer
drivers/net/wireless/ath/ath10k/wmi-tlv.c:448:19: warning: restricted __le32 degrades to integer
drivers/net/wireless/ath/ath10k/wmi-tlv.c:429:6: warning: symbol 'ath10k_wmi_event_tdls_peer' was not declared. Should it be static?
drivers/net/wireless/ath/ath10k/wmi-tlv.h:1767: Please don't use multiple blank lines
I fixed those in the pending branch.
--
https://patchwork.kernel.org/patch/10023743/
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [v7,2/5] ath10k: Enable TDLS peer buffer STA feature
2017-10-24 8:51 ` yintang
` (2 preceding siblings ...)
(?)
@ 2018-03-29 9:00 ` Kalle Valo
-1 siblings, 0 replies; 18+ messages in thread
From: Kalle Valo @ 2018-03-29 9:00 UTC (permalink / raw)
To: yintang; +Cc: ath10k, linux-wireless
yintang@qti.qualcomm.com wrote:
> Enable TDLS peer buffer STA feature.
> QCA6174 firmware(version: WLAN.RM.4.4) support TDLS peer buffer STA,
> it reports this capability through wmi service map in wmi service ready
> event. Set related parameter in TDLS WMI command to enable this feature.
>
> Signed-off-by: Yingying Tang <yintang@qti.qualcomm.com>
> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
4 patches applied to ath-next branch of ath.git, thanks.
802ca335496e ath10k: enable TDLS peer buffer STA feature
4c9f8d114660 ath10k: enable TDLS peer inactivity detection
c3816c9ee12c ath10k: avoid to set WEP key for TDLS peer
9cdd00575029 ath10k: fix TDLS peer TX data failure issue on encryped AP
--
https://patchwork.kernel.org/patch/10023753/
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [v7,2/5] ath10k: Enable TDLS peer buffer STA feature
2017-10-24 8:51 ` yintang
(?)
(?)
@ 2018-03-29 9:00 ` Kalle Valo
-1 siblings, 0 replies; 18+ messages in thread
From: Kalle Valo @ 2018-03-29 9:00 UTC (permalink / raw)
To: yintang; +Cc: linux-wireless, ath10k
yintang@qti.qualcomm.com wrote:
> Enable TDLS peer buffer STA feature.
> QCA6174 firmware(version: WLAN.RM.4.4) support TDLS peer buffer STA,
> it reports this capability through wmi service map in wmi service ready
> event. Set related parameter in TDLS WMI command to enable this feature.
>
> Signed-off-by: Yingying Tang <yintang@qti.qualcomm.com>
> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
4 patches applied to ath-next branch of ath.git, thanks.
802ca335496e ath10k: enable TDLS peer buffer STA feature
4c9f8d114660 ath10k: enable TDLS peer inactivity detection
c3816c9ee12c ath10k: avoid to set WEP key for TDLS peer
9cdd00575029 ath10k: fix TDLS peer TX data failure issue on encryped AP
--
https://patchwork.kernel.org/patch/10023753/
https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2018-03-29 9:01 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <TDLS for ath10k patch v7>
2017-10-24 8:51 ` [PATCH v7 0/5] Add TDLS feature for ath10k yintang
2017-10-24 8:51 ` yintang
2017-10-24 8:51 ` [PATCH v7 1/5] mac80211: Enable TDLS peer buffer STA feature yintang
2017-10-24 8:51 ` yintang
2017-10-24 8:51 ` [PATCH v7 2/5] ath10k: " yintang
2017-10-24 8:51 ` yintang
2017-10-27 9:25 ` [v7,2/5] " Kalle Valo
2017-10-27 9:25 ` Kalle Valo
2018-03-29 9:00 ` Kalle Valo
2018-03-29 9:00 ` Kalle Valo
2017-10-24 8:51 ` [PATCH v7 3/5] ath10k: Enable TDLS peer inactivity detection yintang
2017-10-24 8:51 ` yintang
2018-03-28 15:41 ` [v7,3/5] " Kalle Valo
2018-03-28 15:41 ` Kalle Valo
2017-10-24 8:51 ` [PATCH v7 4/5] ath10k: Avoid to set WEP key for TDLS peer yintang
2017-10-24 8:51 ` yintang
2017-10-24 8:52 ` [PATCH v7 5/5] ath10k: Fix TDLS peer TX data failure issue on encryped AP yintang
2017-10-24 8:52 ` yintang
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.