From: Sebastian Gottschall <s.gottschall@dd-wrt.com>
To: ath10k@lists.infradead.org
Subject: Re: QCA9984 VHT160 support
Date: Tue, 17 May 2016 14:35:26 +0200 [thread overview]
Message-ID: <6d9fb31a-e5f7-3c26-3238-977fd5d72f4a@dd-wrt.com> (raw)
In-Reply-To: <acfe08a2-31f6-e9e4-2785-9cad15d457b0@dd-wrt.com>
[-- Attachment #1: Type: text/plain, Size: 459 bytes --]
this is a updated patchset which adds further corrections.
80p80 support is detected by sta flags right now.
--
Mit freundlichen Grüssen / Regards
Sebastian Gottschall / CTO
NewMedia-NET GmbH - DD-WRT
Firmensitz: Berliner Ring 101, 64625 Bensheim
Registergericht: Amtsgericht Darmstadt, HRB 25473
Geschäftsführer: Peter Steinhäuser, Christian Scheele
http://www.dd-wrt.com
email: s.gottschall@dd-wrt.com
Tel.: +496251-582650 / Fax: +496251-5826565
[-- Attachment #2: vht160_2.patch --]
[-- Type: text/plain, Size: 6953 bytes --]
Index: drivers/net/wireless/ath/ath10k/mac.c
===================================================================
--- drivers/net/wireless/ath/ath10k/mac.c (revision 2910)
+++ drivers/net/wireless/ath/ath10k/mac.c (working copy)
@@ -539,10 +539,14 @@
case NL80211_CHAN_WIDTH_80:
phymode = MODE_11AC_VHT80;
break;
+ case NL80211_CHAN_WIDTH_160:
+ phymode = MODE_11AC_VHT160;
+ break;
+ case NL80211_CHAN_WIDTH_80P80:
+ phymode = MODE_11AC_VHT80_80;
+ break;
case NL80211_CHAN_WIDTH_5:
case NL80211_CHAN_WIDTH_10:
- case NL80211_CHAN_WIDTH_80P80:
- case NL80211_CHAN_WIDTH_160:
phymode = MODE_UNKNOWN;
break;
}
@@ -2398,6 +2402,9 @@
if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
arg->peer_flags |= ar->wmi.peer_flags->bw80;
+ if (sta->bandwidth == IEEE80211_STA_RX_BW_160)
+ arg->peer_flags |= ar->wmi.peer_flags->bw160;
+
arg->peer_vht_rates.rx_max_rate =
__le16_to_cpu(vht_cap->vht_mcs.rx_highest);
arg->peer_vht_rates.rx_mcs_set =
@@ -2499,7 +2506,12 @@
!ath10k_peer_assoc_h_vht_masked(vht_mcs_mask)) {
if (sta->bandwidth == IEEE80211_STA_RX_BW_80)
phymode = MODE_11AC_VHT80;
- else if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
+ else if (sta->bandwidth == IEEE80211_STA_RX_BW_160) {
+ if (sta->vht_cap.cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ)
+ phymode = MODE_11AC_VHT80_80;
+ else
+ phymode = MODE_11AC_VHT160;
+ } else if (sta->bandwidth == IEEE80211_STA_RX_BW_40)
phymode = MODE_11AC_VHT40;
else if (sta->bandwidth == IEEE80211_STA_RX_BW_20)
phymode = MODE_11AC_VHT20;
@@ -4185,6 +4197,10 @@
vht_cap.cap |= val;
}
+ if (ar->vht_cap_info & IEEE80211_VHT_CAP_SHORT_GI_160) {
+ vht_cap.cap |= IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ;
+ vht_cap.cap |= IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ;
+ }
mcs_map = 0;
for (i = 0; i < 8; i++) {
@@ -6798,6 +6814,9 @@
bw = WMI_PEER_CHWIDTH_80MHZ;
break;
case IEEE80211_STA_RX_BW_160:
+ bw = WMI_PEER_CHWIDTH_160MHZ;
+ break;
+ default:
ath10k_warn(ar, "Invalid bandwidth %d in rc update for %pM\n",
sta->bandwidth, sta->addr);
bw = WMI_PEER_CHWIDTH_20MHZ;
Index: drivers/net/wireless/ath/ath10k/htt_rx.c
===================================================================
--- drivers/net/wireless/ath/ath10k/htt_rx.c (revision 2910)
+++ drivers/net/wireless/ath/ath10k/htt_rx.c (working copy)
@@ -707,6 +707,10 @@
/* 80MHZ */
case 2:
status->vht_flag |= RX_VHT_FLAG_80MHZ;
+ break;
+ case 3:
+ status->vht_flag |= RX_VHT_FLAG_160MHZ;
+ break;
}
status->flag |= RX_FLAG_VHT;
@@ -931,7 +935,7 @@
*status = *rx_status;
ath10k_dbg(ar, ATH10K_DBG_DATA,
- "rx skb %p len %u peer %pM %s %s sn %u %s%s%s%s%s %srate_idx %u vht_nss %u freq %u band %u flag 0x%llx fcs-err %i mic-err %i amsdu-more %i\n",
+ "rx skb %p len %u peer %pM %s %s sn %u %s%s%s%s%s%s%s %srate_idx %u vht_nss %u freq %u band %u flag 0x%llx fcs-err %i mic-err %i amsdu-more %i\n",
skb,
skb->len,
ieee80211_get_SA(hdr),
@@ -944,6 +948,7 @@
status->flag & RX_FLAG_VHT ? "vht" : "",
status->flag & RX_FLAG_40MHZ ? "40" : "",
status->vht_flag & RX_VHT_FLAG_80MHZ ? "80" : "",
+ status->vht_flag & RX_VHT_FLAG_160MHZ ? "160" : "",
status->flag & RX_FLAG_SHORT_GI ? "sgi " : "",
status->rate_idx,
status->vht_nss,
@@ -2193,6 +2198,8 @@
case MODE_11AC_VHT20:
case MODE_11AC_VHT40:
case MODE_11AC_VHT80:
+ case MODE_11AC_VHT160:
+ case MODE_11AC_VHT80_80:
band = NL80211_BAND_5GHZ;
break;
case MODE_11G:
Index: drivers/net/wireless/ath/ath10k/wmi-tlv.c
===================================================================
--- drivers/net/wireless/ath/ath10k/wmi-tlv.c (revision 2910)
+++ drivers/net/wireless/ath/ath10k/wmi-tlv.c (working copy)
@@ -3503,6 +3503,7 @@
.vht = WMI_TLV_PEER_VHT,
.bw80 = WMI_TLV_PEER_80MHZ,
.pmf = WMI_TLV_PEER_PMF,
+ .bw160 = WMI_TLV_PEER_160MHZ,
};
/************/
Index: drivers/net/wireless/ath/ath10k/wmi-tlv.h
===================================================================
--- drivers/net/wireless/ath/ath10k/wmi-tlv.h (revision 2910)
+++ drivers/net/wireless/ath/ath10k/wmi-tlv.h (working copy)
@@ -543,6 +543,7 @@
WMI_TLV_PEER_VHT = 0x02000000,
WMI_TLV_PEER_80MHZ = 0x04000000,
WMI_TLV_PEER_PMF = 0x08000000,
+ WMI_TLV_PEER_160MHZ = 0x20000000,
};
enum wmi_tlv_tag {
Index: drivers/net/wireless/ath/ath10k/wmi.c
===================================================================
--- drivers/net/wireless/ath/ath10k/wmi.c (revision 2910)
+++ drivers/net/wireless/ath/ath10k/wmi.c (working copy)
@@ -1569,6 +1569,7 @@
.bw80 = WMI_PEER_80MHZ,
.vht_2g = WMI_PEER_VHT_2G,
.pmf = WMI_PEER_PMF,
+ .bw160 = WMI_PEER_160MHZ,
};
static const struct wmi_peer_flags_map wmi_10x_peer_flags_map = {
@@ -1586,6 +1587,7 @@
.spatial_mux = WMI_10X_PEER_SPATIAL_MUX,
.vht = WMI_10X_PEER_VHT,
.bw80 = WMI_10X_PEER_80MHZ,
+ .bw160 = WMI_10X_PEER_160MHZ,
};
static const struct wmi_peer_flags_map wmi_10_2_peer_flags_map = {
@@ -1605,6 +1607,7 @@
.bw80 = WMI_10_2_PEER_80MHZ,
.vht_2g = WMI_10_2_PEER_VHT_2G,
.pmf = WMI_10_2_PEER_PMF,
+ .bw160 = WMI_10_2_PEER_160MHZ,
};
void ath10k_wmi_put_wmi_channel(struct wmi_channel *ch,
Index: drivers/net/wireless/ath/ath10k/wmi.h
===================================================================
--- drivers/net/wireless/ath/ath10k/wmi.h (revision 2910)
+++ drivers/net/wireless/ath/ath10k/wmi.h (working copy)
@@ -1723,8 +1723,10 @@
MODE_11AC_VHT20_2G = 11,
MODE_11AC_VHT40_2G = 12,
MODE_11AC_VHT80_2G = 13,
- MODE_UNKNOWN = 14,
- MODE_MAX = 14
+ MODE_11AC_VHT80_80 = 14,
+ MODE_11AC_VHT160 = 15,
+ MODE_UNKNOWN = 16,
+ MODE_MAX = 16
};
static inline const char *ath10k_wmi_phymode_str(enum wmi_phy_mode mode)
@@ -1752,6 +1754,10 @@
return "11ac-vht40";
case MODE_11AC_VHT80:
return "11ac-vht80";
+ case MODE_11AC_VHT160:
+ return "11ac-vht160";
+ case MODE_11AC_VHT80_80:
+ return "11ac-vht80+80";
case MODE_11AC_VHT20_2G:
return "11ac-vht20-2g";
case MODE_11AC_VHT40_2G:
@@ -5748,6 +5754,7 @@
WMI_PEER_CHWIDTH_20MHZ = 0,
WMI_PEER_CHWIDTH_40MHZ = 1,
WMI_PEER_CHWIDTH_80MHZ = 2,
+ WMI_PEER_CHWIDTH_160MHZ = 3,
};
enum wmi_peer_param {
@@ -5838,6 +5845,7 @@
u32 bw80;
u32 vht_2g;
u32 pmf;
+ u32 bw160;
};
enum wmi_peer_flags {
@@ -5857,6 +5865,7 @@
WMI_PEER_80MHZ = 0x04000000,
WMI_PEER_VHT_2G = 0x08000000,
WMI_PEER_PMF = 0x10000000,
+ WMI_PEER_160MHZ = 0x20000000
};
enum wmi_10x_peer_flags {
@@ -5874,6 +5883,7 @@
WMI_10X_PEER_SPATIAL_MUX = 0x00200000,
WMI_10X_PEER_VHT = 0x02000000,
WMI_10X_PEER_80MHZ = 0x04000000,
+ WMI_10X_PEER_160MHZ = 0x20000000
};
enum wmi_10_2_peer_flags {
@@ -5893,6 +5903,7 @@
WMI_10_2_PEER_80MHZ = 0x04000000,
WMI_10_2_PEER_VHT_2G = 0x08000000,
WMI_10_2_PEER_PMF = 0x10000000,
+ WMI_10_2_PEER_160MHZ = 0x20000000
};
/*
[-- Attachment #3: Type: text/plain, Size: 146 bytes --]
_______________________________________________
ath10k mailing list
ath10k@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/ath10k
next prev parent reply other threads:[~2016-05-17 12:35 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-10 6:11 Setting per-frame tx rate for frames injected in raw tx mode Raj Joshi
2016-05-10 16:28 ` Ben Greear
2016-05-11 6:41 ` Raj Joshi
2016-05-11 16:13 ` Ben Greear
2016-05-15 2:40 ` Raj Joshi
2016-05-15 15:17 ` Ben Greear
2016-05-15 17:15 ` Ben Greear
2016-05-17 7:14 ` Raj Joshi
2016-05-17 7:36 ` Michal Kazior
2016-05-17 7:43 ` Valo, Kalle
2016-05-17 11:43 ` QCA9984 VHT160 support Sebastian Gottschall
2016-05-17 12:00 ` Michal Kazior
[not found] ` <4e407b2c-29f9-3c74-ea94-4206632441c3@dd-wrt.com>
2016-05-17 12:18 ` Michal Kazior
2016-05-17 12:22 ` Sebastian Gottschall
2016-05-17 12:35 ` Sebastian Gottschall [this message]
2016-05-17 13:20 ` Valo, Kalle
2016-09-14 10:37 ` Valo, Kalle
2016-09-14 14:38 ` Sebastian Gottschall
2016-09-14 14:44 ` Valo, Kalle
2016-09-16 7:51 ` [PATCH] " Sebastian Gottschall
2016-09-17 6:21 ` unusual event Sebastian Gottschall
2016-10-10 16:04 ` [PATCH] QCA9984 VHT160 support Valo, Kalle
2016-10-10 16:06 ` Valo, Kalle
2016-10-11 1:30 ` Sebastian Gottschall
2016-10-14 10:06 ` Valo, Kalle
2016-10-14 10:14 ` Valo, Kalle
2016-10-18 8:20 ` Sebastian Gottschall
2016-10-18 9:16 ` Sebastian Gottschall
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6d9fb31a-e5f7-3c26-3238-977fd5d72f4a@dd-wrt.com \
--to=s.gottschall@dd-wrt.com \
--cc=ath10k@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox