All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC 60g 0/5] Infrastructure for 60g (802.11ad)
@ 2012-06-28 11:16 Vladimir Kondratiev
  2012-06-28 11:16 ` [RFC 60g 1/5] wireless: add 802.11ad (60gHz band) Vladimir Kondratiev
                   ` (4 more replies)
  0 siblings, 5 replies; 14+ messages in thread
From: Vladimir Kondratiev @ 2012-06-28 11:16 UTC (permalink / raw)
  To: John W . Linville; +Cc: Vladimir Kondratiev, linux-wireless, Luis R . Rodriguez


These patches add minimal infrastructure for the 60gHz (802.11ad)
band WiFi drivers.

This change enables offload drivers for the 60GHz devices that implement
the 802.11 MAC functionality in the device itself.

In particular, a driver basing on this infrastructure will be published shortly.


Vladimir Kondratiev (5):
  wireless: add 802.11ad (60gHz band)
  wireless: rate check logic for 60g
  wireless: regulatory for 60g
  wireless: 60g protocol constants
  wireless: bitrate calculation for 60g

 include/linux/ieee80211.h |   89 ++++++++++++++++++++++++++++++++++++++++++++-
 include/linux/nl80211.h   |    2 +
 include/net/cfg80211.h    |    4 ++
 net/mac80211/tx.c         |    2 +
 net/wireless/core.c       |   10 ++++-
 net/wireless/reg.c        |    5 ++-
 net/wireless/util.c       |   84 ++++++++++++++++++++++++++++++++++++++----
 7 files changed, 184 insertions(+), 12 deletions(-)

-- 
1.7.9.5


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [RFC 60g 1/5] wireless: add 802.11ad (60gHz band)
  2012-06-28 11:16 [RFC 60g 0/5] Infrastructure for 60g (802.11ad) Vladimir Kondratiev
@ 2012-06-28 11:16 ` Vladimir Kondratiev
  2012-06-28 18:03   ` Johannes Berg
  2012-06-28 11:16 ` [RFC 60g 2/5] wireless: rate check logic for 60g Vladimir Kondratiev
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 14+ messages in thread
From: Vladimir Kondratiev @ 2012-06-28 11:16 UTC (permalink / raw)
  To: John W . Linville; +Cc: Vladimir Kondratiev, linux-wireless, Luis R . Rodriguez

Add enumerations for both cfg80211 and nl80211.
This expands wiphy.bands etc. arrays.

Extend channel <-> frequency translation to cover 60g band

Small fix for mac80211/tx.c required to fix compiler warning

Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
---
 include/linux/nl80211.h |    2 ++
 include/net/cfg80211.h  |    2 ++
 net/mac80211/tx.c       |    2 ++
 net/wireless/util.c     |   30 ++++++++++++++++++++++--------
 4 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h
index c0fc5d2..679831e 100644
--- a/include/linux/nl80211.h
+++ b/include/linux/nl80211.h
@@ -2539,10 +2539,12 @@ enum nl80211_tx_rate_attributes {
  * enum nl80211_band - Frequency band
  * @NL80211_BAND_2GHZ: 2.4 GHz ISM band
  * @NL80211_BAND_5GHZ: around 5 GHz band (4.9 - 5.7 GHz)
+ * @NL80211_BAND_60GHZ: around 60 GHz band (58.32 - 64.80 GHz)
  */
 enum nl80211_band {
 	NL80211_BAND_2GHZ,
 	NL80211_BAND_5GHZ,
+	NL80211_BAND_60GHZ,
 };
 
 /**
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 061c019..56e840d 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -70,11 +70,13 @@
  *
  * @IEEE80211_BAND_2GHZ: 2.4GHz ISM band
  * @IEEE80211_BAND_5GHZ: around 5GHz band (4.9-5.7)
+ * @IEEE80211_BAND_60GHZ: around 60 GHz band (58.32 - 64.80 GHz)
  * @IEEE80211_NUM_BANDS: number of defined bands
  */
 enum ieee80211_band {
 	IEEE80211_BAND_2GHZ = NL80211_BAND_2GHZ,
 	IEEE80211_BAND_5GHZ = NL80211_BAND_5GHZ,
+	IEEE80211_BAND_60GHZ = NL80211_BAND_60GHZ,
 
 	/* keep last */
 	IEEE80211_NUM_BANDS
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index ec8f5346..eebd33a 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -140,6 +140,8 @@ static __le16 ieee80211_duration(struct ieee80211_tx_data *tx,
 			if (r->flags & IEEE80211_RATE_MANDATORY_A)
 				mrate = r->bitrate;
 			break;
+		case IEEE80211_BAND_60GHZ:
+			/* TODO, for now fall through */
 		case IEEE80211_NUM_BANDS:
 			WARN_ON(1);
 			break;
diff --git a/net/wireless/util.c b/net/wireless/util.c
index 316cfd0..5c7195e 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -35,19 +35,29 @@ int ieee80211_channel_to_frequency(int chan, enum ieee80211_band band)
 {
 	/* see 802.11 17.3.8.3.2 and Annex J
 	 * there are overlapping channel numbers in 5GHz and 2GHz bands */
-	if (band == IEEE80211_BAND_5GHZ) {
-		if (chan >= 182 && chan <= 196)
-			return 4000 + chan * 5;
-		else
-			return 5000 + chan * 5;
-	} else { /* IEEE80211_BAND_2GHZ */
+	if (chan <= 0)
+		return 0; /* not supported */
+	switch (band) {
+	case IEEE80211_BAND_2GHZ:
 		if (chan == 14)
 			return 2484;
 		else if (chan < 14)
 			return 2407 + chan * 5;
+		break;
+	case IEEE80211_BAND_5GHZ:
+		if (chan >= 182 && chan <= 196)
+			return 4000 + chan * 5;
 		else
-			return 0; /* not supported */
+			return 5000 + chan * 5;
+		break;
+	case IEEE80211_BAND_60GHZ:
+		if (chan < 5)
+			return 56160 + chan * 2160;
+		break;
+	default:
+		;
 	}
+	return 0; /* not supported */
 }
 EXPORT_SYMBOL(ieee80211_channel_to_frequency);
 
@@ -60,8 +70,12 @@ int ieee80211_frequency_to_channel(int freq)
 		return (freq - 2407) / 5;
 	else if (freq >= 4910 && freq <= 4980)
 		return (freq - 4000) / 5;
-	else
+	else if (freq <= 6000) /* TODO: check band 5.2 upper limit */
 		return (freq - 5000) / 5;
+	else if (freq >= 58320 && freq <= 64800)
+		return (freq - 56160) / 2160;
+	else
+		return 0;
 }
 EXPORT_SYMBOL(ieee80211_frequency_to_channel);
 
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [RFC 60g 2/5] wireless: rate check logic for 60g
  2012-06-28 11:16 [RFC 60g 0/5] Infrastructure for 60g (802.11ad) Vladimir Kondratiev
  2012-06-28 11:16 ` [RFC 60g 1/5] wireless: add 802.11ad (60gHz band) Vladimir Kondratiev
@ 2012-06-28 11:16 ` Vladimir Kondratiev
  2012-06-28 18:04   ` Johannes Berg
  2012-06-28 11:16 ` [RFC 60g 3/5] wireless: regulatory " Vladimir Kondratiev
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 14+ messages in thread
From: Vladimir Kondratiev @ 2012-06-28 11:16 UTC (permalink / raw)
  To: John W . Linville; +Cc: Vladimir Kondratiev, linux-wireless, Luis R . Rodriguez

On the 60g band, there is no 'basic rates'. Only MCS used.
Instead of mandatory basic rates, standard requires support for
mandatory MCS 1..4

Modify logic to comply with 60g requirements

Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
---
 net/wireless/core.c |   10 ++++++++--
 net/wireless/util.c |    5 +++++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/net/wireless/core.c b/net/wireless/core.c
index 907f62c..bef6dbe 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -458,8 +458,14 @@ int wiphy_register(struct wiphy *wiphy)
 			continue;
 
 		sband->band = band;
-
-		if (WARN_ON(!sband->n_channels || !sband->n_bitrates))
+		if (WARN_ON(!sband->n_channels))
+			return -EINVAL;
+		/*
+		 * on 60gHz band, there are no legacy rates, so
+		 * n_bitrates is 0
+		 */
+		if (WARN_ON((band != IEEE80211_BAND_60GHZ) &&
+		    !sband->n_bitrates))
 			return -EINVAL;
 
 		/*
diff --git a/net/wireless/util.c b/net/wireless/util.c
index 5c7195e..98b2a8d 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -151,6 +151,11 @@ static void set_mandatory_flags_band(struct ieee80211_supported_band *sband,
 		}
 		WARN_ON(want != 0 && want != 3 && want != 6);
 		break;
+	case IEEE80211_BAND_60GHZ:
+		/* check for mandatory HT MCS 1..4 */
+		WARN_ON(!sband->ht_cap.ht_supported);
+		WARN_ON((sband->ht_cap.mcs.rx_mask[0] & 0x1e) != 0x1e);
+		break;
 	case IEEE80211_NUM_BANDS:
 		WARN_ON(1);
 		break;
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [RFC 60g 3/5] wireless: regulatory for 60g
  2012-06-28 11:16 [RFC 60g 0/5] Infrastructure for 60g (802.11ad) Vladimir Kondratiev
  2012-06-28 11:16 ` [RFC 60g 1/5] wireless: add 802.11ad (60gHz band) Vladimir Kondratiev
  2012-06-28 11:16 ` [RFC 60g 2/5] wireless: rate check logic for 60g Vladimir Kondratiev
@ 2012-06-28 11:16 ` Vladimir Kondratiev
  2012-06-28 11:16 ` [RFC 60g 4/5] wireless: 60g protocol constants Vladimir Kondratiev
  2012-06-28 11:17 ` [RFC 60g 5/5] wireless: bitrate calculation for 60g Vladimir Kondratiev
  4 siblings, 0 replies; 14+ messages in thread
From: Vladimir Kondratiev @ 2012-06-28 11:16 UTC (permalink / raw)
  To: John W . Linville; +Cc: Vladimir Kondratiev, linux-wireless, Luis R . Rodriguez

Add regulatory rule for the 60g band

Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
---
 net/wireless/reg.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index baf5704..b2b3222 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -129,7 +129,7 @@ static DECLARE_DELAYED_WORK(reg_timeout, reg_timeout_work);
 
 /* We keep a static world regulatory domain in case of the absence of CRDA */
 static const struct ieee80211_regdomain world_regdom = {
-	.n_reg_rules = 5,
+	.n_reg_rules = 6,
 	.alpha2 =  "00",
 	.reg_rules = {
 		/* IEEE 802.11b/g, channels 1..11 */
@@ -156,6 +156,9 @@ static const struct ieee80211_regdomain world_regdom = {
 		REG_RULE(5745-10, 5825+10, 40, 6, 20,
 			NL80211_RRF_PASSIVE_SCAN |
 			NL80211_RRF_NO_IBSS),
+
+		/* IEEE 802.11ad (60gHz), channels 1..3 */
+		REG_RULE(56160+2160*1-1080, 56160+2160*3+1080, 2160, 0, 0, 0),
 	}
 };
 
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [RFC 60g 4/5] wireless: 60g protocol constants
  2012-06-28 11:16 [RFC 60g 0/5] Infrastructure for 60g (802.11ad) Vladimir Kondratiev
                   ` (2 preceding siblings ...)
  2012-06-28 11:16 ` [RFC 60g 3/5] wireless: regulatory " Vladimir Kondratiev
@ 2012-06-28 11:16 ` Vladimir Kondratiev
  2012-06-28 18:06   ` Johannes Berg
  2012-06-28 11:17 ` [RFC 60g 5/5] wireless: bitrate calculation for 60g Vladimir Kondratiev
  4 siblings, 1 reply; 14+ messages in thread
From: Vladimir Kondratiev @ 2012-06-28 11:16 UTC (permalink / raw)
  To: John W . Linville; +Cc: Vladimir Kondratiev, linux-wireless, Luis R . Rodriguez

Provide various constants as defined by the 802.11ad:
frame types, IE's, capability bits, action categories

Introduce GCMP cipher, mandatory by 802.11ad

Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
---
 include/linux/ieee80211.h |   89 ++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 88 insertions(+), 1 deletion(-)

diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
index 318fc1f..ae80378 100644
--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -47,6 +47,7 @@
 #define IEEE80211_FCTL_MOREDATA		0x2000
 #define IEEE80211_FCTL_PROTECTED	0x4000
 #define IEEE80211_FCTL_ORDER		0x8000
+#define IEEE80211_FCTL_CTL_EXT		0x0f00
 
 #define IEEE80211_SCTL_FRAG		0x000F
 #define IEEE80211_SCTL_SEQ		0xFFF0
@@ -54,6 +55,7 @@
 #define IEEE80211_FTYPE_MGMT		0x0000
 #define IEEE80211_FTYPE_CTL		0x0004
 #define IEEE80211_FTYPE_DATA		0x0008
+#define IEEE80211_FTYPE_EXT		0x000c
 
 /* management */
 #define IEEE80211_STYPE_ASSOC_REQ	0x0000
@@ -70,6 +72,7 @@
 #define IEEE80211_STYPE_ACTION		0x00D0
 
 /* control */
+#define IEEE80211_STYPE_CTL_EXT		0x0060
 #define IEEE80211_STYPE_BACK_REQ	0x0080
 #define IEEE80211_STYPE_BACK		0x0090
 #define IEEE80211_STYPE_PSPOLL		0x00A0
@@ -97,6 +100,18 @@
 #define IEEE80211_STYPE_QOS_CFPOLL		0x00E0
 #define IEEE80211_STYPE_QOS_CFACKPOLL		0x00F0
 
+/* extension, added by 802.11ad */
+#define IEEE80211_STYPE_DMG_BEACON		0x0000
+
+/* control extension - for IEEE80211_FTYPE_CTL | IEEE80211_STYPE_CTL_EXT */
+#define IEEE80211_CTL_EXT_POLL		0x2000
+#define IEEE80211_CTL_EXT_SPR		0x3000
+#define IEEE80211_CTL_EXT_GRANT	0x4000
+#define IEEE80211_CTL_EXT_DMG_CTS	0x5000
+#define IEEE80211_CTL_EXT_DMG_DTS	0x6000
+#define IEEE80211_CTL_EXT_SSW		0x8000
+#define IEEE80211_CTL_EXT_SSW_FBACK	0x9000
+#define IEEE80211_CTL_EXT_SSW_ACK	0xa000
 
 /* miscellaneous IEEE 802.11 constants */
 #define IEEE80211_MAX_FRAG_THRESHOLD	2352
@@ -1124,6 +1139,21 @@ struct ieee80211_ht_operation {
 #define WLAN_CAPABILITY_QOS		(1<<9)
 #define WLAN_CAPABILITY_SHORT_SLOT_TIME	(1<<10)
 #define WLAN_CAPABILITY_DSSS_OFDM	(1<<13)
+
+/* DMG (60gHz) 802.11ad */
+/* type - bits 0..1 */
+#define WLAN_CAPABILITY_DMG_TYPE_IBSS		(1<<0) /* Tx by: STA */
+#define WLAN_CAPABILITY_DMG_TYPE_PBSS		(2<<0) /* Tx by: PCP */
+#define WLAN_CAPABILITY_DMG_TYPE_AP		(3<<0) /* Tx by: AP */
+
+#define WLAN_CAPABILITY_DMG_CBAP_ONLY		(1<<2)
+#define WLAN_CAPABILITY_DMG_CBAP_SOURCE	(1<<3)
+#define WLAN_CAPABILITY_DMG_PRIVACY		(1<<4)
+#define WLAN_CAPABILITY_DMG_ECPAC		(1<<5)
+
+#define WLAN_CAPABILITY_DMG_SPECTRUM_MGMT	(1<<8)
+#define WLAN_CAPABILITY_DMG_RADIO_MEASURE	(1<<12)
+
 /* measurement */
 #define IEEE80211_SPCT_MSR_RPRT_MODE_LATE	(1<<0)
 #define IEEE80211_SPCT_MSR_RPRT_MODE_INCAPABLE	(1<<1)
@@ -1133,7 +1163,6 @@ struct ieee80211_ht_operation {
 #define IEEE80211_SPCT_MSR_RPRT_TYPE_CCA	1
 #define IEEE80211_SPCT_MSR_RPRT_TYPE_RPI	2
 
-
 /* 802.11g ERP information element */
 #define WLAN_ERP_NON_ERP_PRESENT (1<<0)
 #define WLAN_ERP_USE_PROTECTION (1<<1)
@@ -1145,6 +1174,16 @@ enum {
 	WLAN_ERP_PREAMBLE_LONG = 1,
 };
 
+/* Band ID, 802.11ad #8.4.1.45 */
+enum {
+	IEEE80211_BANDID_TV_WS = 0, /* TV white spaces */
+	IEEE80211_BANDID_SUB1  = 1, /* Sub-1 GHz (excluding TV white spaces) */
+	IEEE80211_BANDID_2G    = 2, /* 2.4 GHz */
+	IEEE80211_BANDID_3G    = 3, /* 3.6 GHz */
+	IEEE80211_BANDID_5G    = 4, /* 4.9 and 5 GHz */
+	IEEE80211_BANDID_60G   = 5, /* 60 GHz */
+};
+
 /* Status codes */
 enum ieee80211_statuscode {
 	WLAN_STATUS_SUCCESS = 0,
@@ -1196,6 +1235,17 @@ enum ieee80211_statuscode {
 	WLAN_STATUS_ANTI_CLOG_REQUIRED = 76,
 	WLAN_STATUS_FCG_NOT_SUPP = 78,
 	WLAN_STATUS_STA_NO_TBTT = 78,
+	/* 802.11ad */
+	WLAN_STATUS_REJECTED_WITH_SUGGESTED_CHANGES		= 39,
+	WLAN_STATUS_REJECTED_FOR_DELAY_PERIOD			= 47,
+	WLAN_STATUS_REJECT_WITH_SCHEDULE			= 83,
+	WLAN_STATUS_PENDING_ADMITTING_FST_SESSION		= 86,
+	WLAN_STATUS_PERFORMING_FST_NOW				= 87,
+	WLAN_STATUS_PENDING_GAP_IN_BA_WINDOW			= 88,
+	WLAN_STATUS_REJECT_U_PID_SETTING			= 89,
+	WLAN_STATUS_REJECT_DSE_BAND				= 96,
+	WLAN_STATUS_DENIED_WITH_SUGGESTED_BAND_AND_CHANNEL	= 99,
+	WLAN_STATUS_DENIED_DUE_TO_SPECTRUM_MANAGEMENT		= 103,
 };
 
 
@@ -1352,6 +1402,39 @@ enum ieee80211_eid {
 	WLAN_EID_DSE_REGISTERED_LOCATION = 58,
 	WLAN_EID_SUPPORTED_REGULATORY_CLASSES = 59,
 	WLAN_EID_EXT_CHANSWITCH_ANN = 60,
+	/* 802.11ad */
+	WLAN_EID_NON_TX_BSSID_CAP		=  83,
+	WLAN_EID_WAKEUP_SCHEDULE		= 143,
+	WLAN_EID_EXT_SCHEDULE			= 144,
+	WLAN_EID_STA_AVAILABILITY		= 145,
+	WLAN_EID_DMG_TSPEC			= 146,
+	WLAN_EID_DMG_AT				= 147,
+	WLAN_EID_DMG_CAP			= 148,
+	WLAN_EID_DMG_OPERATION			= 151,
+	WLAN_EID_DMG_BSS_PARAM_CHANGE		= 152,
+	WLAN_EID_DMG_BEAM_REFINEMENT		= 153,
+	WLAN_EID_CHANNEL_MEASURE_FEEDBACK	= 154,
+	WLAN_EID_AWAKE_WINDOW			= 157,
+	WLAN_EID_MULTI_BAND			= 158,
+	WLAN_EID_ADDBA_EXT			= 159,
+	WLAN_EID_NEXT_PCP_LIST			= 160,
+	WLAN_EID_PCP_HANDOVER			= 161,
+	WLAN_EID_DMG_LINK_MARGIN		= 162,
+	WLAN_EID_SWITCHING_STREAM		= 163,
+	WLAN_EID_SESSION_TRANSITION		= 164,
+	WLAN_EID_DYN_TONE_PAIRING_REPORT	= 165,
+	WLAN_EID_CLUSTER_REPORT			= 166,
+	WLAN_EID_RELAY_CAP			= 167,
+	WLAN_EID_RELAY_XFER_PARAM_SET		= 168,
+	WLAN_EID_BEAM_LINK_MAINT		= 169,
+	WLAN_EID_MULTIPLE_MAC_ADDR		= 170,
+	WLAN_EID_U_PID				= 171,
+	WLAN_EID_DMG_LINK_ADAPT_ACK		= 172,
+	WLAN_EID_QUIET_PERIOD_REQ		= 175,
+	WLAN_EID_QUIET_PERIOD_RESP		= 177,
+	WLAN_EID_EPAC_POLICY			= 182,
+	WLAN_EID_CLISTER_TIME_OFF		= 183,
+	WLAN_EID_ANTENNA_SECTOR_ID_PATTERN	= 190,
 };
 
 /* Action category code */
@@ -1368,7 +1451,10 @@ enum ieee80211_category {
 	WLAN_CATEGORY_MESH_ACTION = 13,
 	WLAN_CATEGORY_MULTIHOP_ACTION = 14,
 	WLAN_CATEGORY_SELF_PROTECTED = 15,
+	WLAN_CATEGORY_DMG = 16,
 	WLAN_CATEGORY_WMM = 17,
+	WLAN_CATEGORY_FST = 18,
+	WLAN_CATEGORY_UNPROT_DMG = 20,
 	WLAN_CATEGORY_VENDOR_SPECIFIC_PROTECTED = 126,
 	WLAN_CATEGORY_VENDOR_SPECIFIC = 127,
 };
@@ -1616,6 +1702,7 @@ enum ieee80211_sa_query_action {
 #define WLAN_CIPHER_SUITE_CCMP		0x000FAC04
 #define WLAN_CIPHER_SUITE_WEP104	0x000FAC05
 #define WLAN_CIPHER_SUITE_AES_CMAC	0x000FAC06
+#define WLAN_CIPHER_SUITE_GCMP		0x000FAC08
 
 #define WLAN_CIPHER_SUITE_SMS4		0x00147201
 
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [RFC 60g 5/5] wireless: bitrate calculation for 60g
  2012-06-28 11:16 [RFC 60g 0/5] Infrastructure for 60g (802.11ad) Vladimir Kondratiev
                   ` (3 preceding siblings ...)
  2012-06-28 11:16 ` [RFC 60g 4/5] wireless: 60g protocol constants Vladimir Kondratiev
@ 2012-06-28 11:17 ` Vladimir Kondratiev
  2012-06-28 18:07   ` Johannes Berg
  4 siblings, 1 reply; 14+ messages in thread
From: Vladimir Kondratiev @ 2012-06-28 11:17 UTC (permalink / raw)
  To: John W . Linville; +Cc: Vladimir Kondratiev, linux-wireless, Luis R . Rodriguez

60g band uses different from .11n MCS scheme, so bitrate should be calculated
differently

Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
---
 include/net/cfg80211.h |    2 ++
 net/wireless/util.c    |   49 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 51 insertions(+)

diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 56e840d..f760520 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -563,11 +563,13 @@ enum station_info_flags {
  * @RATE_INFO_FLAGS_MCS: @tx_bitrate_mcs filled
  * @RATE_INFO_FLAGS_40_MHZ_WIDTH: 40 Mhz width transmission
  * @RATE_INFO_FLAGS_SHORT_GI: 400ns guard interval
+ * @RATE_INFO_FLAGS_60G: 60gHz MCS
  */
 enum rate_info_flags {
 	RATE_INFO_FLAGS_MCS		= 1<<0,
 	RATE_INFO_FLAGS_40_MHZ_WIDTH	= 1<<1,
 	RATE_INFO_FLAGS_SHORT_GI	= 1<<2,
+	RATE_INFO_FLAGS_60G		= 1<<3,
 };
 
 /**
diff --git a/net/wireless/util.c b/net/wireless/util.c
index 98b2a8d..77319a6 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -890,12 +890,61 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev,
 	return err;
 }
 
+static u16 cfg80211_calculate_bitrate_60g(struct rate_info *rate)
+{
+	static const u16 __mcs2bitrate[] = {
+		/* control PHY */
+		[0] =   275,
+		/* SC PHY */
+		[1] =  3850,
+		[2] =  7700,
+		[3] =  9625,
+		[4] = 11550,
+		[5] = 12512, /* 1251.25 mbps */
+		[6] = 15400,
+		[7] = 19250,
+		[8] = 23100,
+		[9] = 25025,
+		[10] = 30800,
+		[11] = 38500,
+		[12] = 46200,
+		/* OFDM PHY */
+		[13] =  6930,
+		[14] =  8662, /* 866.25 mbps */
+		[15] = 13860,
+		[16] = 17325,
+		[17] = 20790,
+		[18] = 27720,
+		[19] = 34650,
+		[20] = 41580,
+		[21] = 45045,
+		[22] = 51975,
+		[23] = 62370,
+		[24] = 67568, /* 6756.75 mbps */
+		/* LP-SC PHY */
+		[25] =  6260,
+		[26] =  8340,
+		[27] = 11120,
+		[28] = 12510,
+		[29] = 16680,
+		[30] = 22240,
+		[31] = 25030,
+	};
+
+	if (WARN_ON_ONCE(rate->mcs >= ARRAY_SIZE(__mcs2bitrate)))
+		return 0;
+
+	return __mcs2bitrate[rate->mcs];
+}
+
 u16 cfg80211_calculate_bitrate(struct rate_info *rate)
 {
 	int modulation, streams, bitrate;
 
 	if (!(rate->flags & RATE_INFO_FLAGS_MCS))
 		return rate->legacy;
+	if (rate->flags & RATE_INFO_FLAGS_60G)
+		return cfg80211_calculate_bitrate_60g(rate);
 
 	/* the formula below does only work for MCS values smaller than 32 */
 	if (WARN_ON_ONCE(rate->mcs >= 32))
-- 
1.7.9.5


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [RFC 60g 1/5] wireless: add 802.11ad (60gHz band)
  2012-06-28 11:16 ` [RFC 60g 1/5] wireless: add 802.11ad (60gHz band) Vladimir Kondratiev
@ 2012-06-28 18:03   ` Johannes Berg
  0 siblings, 0 replies; 14+ messages in thread
From: Johannes Berg @ 2012-06-28 18:03 UTC (permalink / raw)
  To: Vladimir Kondratiev; +Cc: John W . Linville, linux-wireless, Luis R . Rodriguez

On Thu, 2012-06-28 at 14:16 +0300, Vladimir Kondratiev wrote:

> @@ -60,8 +70,12 @@ int ieee80211_frequency_to_channel(int freq)
>  		return (freq - 2407) / 5;
>  	else if (freq >= 4910 && freq <= 4980)
>  		return (freq - 4000) / 5;
> -	else
> +	else if (freq <= 6000) /* TODO: check band 5.2 upper limit */

Looks fine, but whose TODO is this? :-)

johannes


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [RFC 60g 2/5] wireless: rate check logic for 60g
  2012-06-28 11:16 ` [RFC 60g 2/5] wireless: rate check logic for 60g Vladimir Kondratiev
@ 2012-06-28 18:04   ` Johannes Berg
  2012-07-01 12:05     ` Vladimir Kondratiev
  0 siblings, 1 reply; 14+ messages in thread
From: Johannes Berg @ 2012-06-28 18:04 UTC (permalink / raw)
  To: Vladimir Kondratiev; +Cc: John W . Linville, linux-wireless, Luis R . Rodriguez

On Thu, 2012-06-28 at 14:16 +0300, Vladimir Kondratiev wrote:

> +		/*
> +		 * on 60gHz band, there are no legacy rates, so
> +		 * n_bitrates is 0
> +		 */
> +		if (WARN_ON((band != IEEE80211_BAND_60GHZ) &&
> +		    !sband->n_bitrates))
>  			return -EINVAL;

Please fix indentation.

johannes


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [RFC 60g 4/5] wireless: 60g protocol constants
  2012-06-28 11:16 ` [RFC 60g 4/5] wireless: 60g protocol constants Vladimir Kondratiev
@ 2012-06-28 18:06   ` Johannes Berg
  0 siblings, 0 replies; 14+ messages in thread
From: Johannes Berg @ 2012-06-28 18:06 UTC (permalink / raw)
  To: Vladimir Kondratiev; +Cc: John W . Linville, linux-wireless, Luis R . Rodriguez

On Thu, 2012-06-28 at 14:16 +0300, Vladimir Kondratiev wrote:

> @@ -1133,7 +1163,6 @@ struct ieee80211_ht_operation {
>  #define IEEE80211_SPCT_MSR_RPRT_TYPE_CCA	1
>  #define IEEE80211_SPCT_MSR_RPRT_TYPE_RPI	2
>  
> -
>  /* 802.11g ERP information element */
>  #define WLAN_ERP_NON_ERP_PRESENT (1<<0)
>  #define WLAN_ERP_USE_PROTECTION (1<<1)

spurious change?

> @@ -1196,6 +1235,17 @@ enum ieee80211_statuscode {
>  	WLAN_STATUS_ANTI_CLOG_REQUIRED = 76,
>  	WLAN_STATUS_FCG_NOT_SUPP = 78,
>  	WLAN_STATUS_STA_NO_TBTT = 78,
> +	/* 802.11ad */
> +	WLAN_STATUS_REJECTED_WITH_SUGGESTED_CHANGES		= 39,
> +	WLAN_STATUS_REJECTED_FOR_DELAY_PERIOD			= 47,

I think you should match the surrounding style ...

> @@ -1352,6 +1402,39 @@ enum ieee80211_eid {
>  	WLAN_EID_DSE_REGISTERED_LOCATION = 58,
>  	WLAN_EID_SUPPORTED_REGULATORY_CLASSES = 59,
>  	WLAN_EID_EXT_CHANSWITCH_ANN = 60,
> +	/* 802.11ad */
> +	WLAN_EID_NON_TX_BSSID_CAP		=  83,

ditto

johannes


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [RFC 60g 5/5] wireless: bitrate calculation for 60g
  2012-06-28 11:17 ` [RFC 60g 5/5] wireless: bitrate calculation for 60g Vladimir Kondratiev
@ 2012-06-28 18:07   ` Johannes Berg
       [not found]     ` <1703117.VxUDt2UvbQ@lx-vladimir>
  0 siblings, 1 reply; 14+ messages in thread
From: Johannes Berg @ 2012-06-28 18:07 UTC (permalink / raw)
  To: Vladimir Kondratiev; +Cc: John W . Linville, linux-wireless, Luis R . Rodriguez

On Thu, 2012-06-28 at 14:17 +0300, Vladimir Kondratiev wrote:

> +static u16 cfg80211_calculate_bitrate_60g(struct rate_info *rate)

You didn't test this function :-)

johannes


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [RFC 60g 2/5] wireless: rate check logic for 60g
  2012-06-28 18:04   ` Johannes Berg
@ 2012-07-01 12:05     ` Vladimir Kondratiev
  0 siblings, 0 replies; 14+ messages in thread
From: Vladimir Kondratiev @ 2012-07-01 12:05 UTC (permalink / raw)
  To: Johannes Berg
  Cc: Vladimir Kondratiev, John W . Linville, linux-wireless,
	Luis R . Rodriguez

On Thursday, June 28, 2012 08:04:24 PM Johannes Berg wrote:
> On Thu, 2012-06-28 at 14:16 +0300, Vladimir Kondratiev wrote:
> > +		/*
> > +		 * on 60gHz band, there are no legacy rates, so
> > +		 * n_bitrates is 0
> > +		 */
> > +		if (WARN_ON((band != IEEE80211_BAND_60GHZ) &&
> > +		    !sband->n_bitrates))
> > 
> >  			return -EINVAL;
> 
> Please fix indentation.
> 
> johannes

I am confused a bit. What is "proper" identation for this case
(wrapped expression)?
Immediately following code use same identation (4 spaces).

		if (cfg80211_disable_40mhz_24ghz &&
		    band == IEEE80211_BAND_2GHZ &&
		    sband->ht_cap.ht_supported) {
			sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
			sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SGI_40;
		}

Should I ident line containing (see above):
!sband->n_bitrates))
with:
 - 4 spaces as next code fragment,
 - one tab (same level as 'return')
 - 2 tabs (one level more then 'return')
 - other (what?)



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [RFC 60g 5/5] wireless: bitrate calculation for 60g
       [not found]       ` <2090114.iKoJhGKOAs@lx-vladimir>
@ 2012-07-02 19:28         ` Luis R. Rodriguez
  2012-07-02 20:11           ` Johannes Berg
  0 siblings, 1 reply; 14+ messages in thread
From: Luis R. Rodriguez @ 2012-07-02 19:28 UTC (permalink / raw)
  To: Vladimir Kondratiev
  Cc: Johannes Berg, Vladimir Kondratiev, John W . Linville, linux-wireless

On Sun, Jul 01, 2012 at 01:35:06PM +0300, Vladimir Kondratiev wrote:
>    I am looking how to handle it the best way. For quick solution, I tend to
>    just say I won't support this MCS.

Lets instead try to address shortcomings of the interface.

> Expanding bitrate to u32 would break all userspace tools.

Unless userspace is told that a new high value is used. We could
for example attach a flag to tell userspace that a different
bitrate type should be used. We can also just get new userspace
to start embracing the new data type, and old userspace would
simply not support that bit rate.

  Luis

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [RFC 60g 5/5] wireless: bitrate calculation for 60g
  2012-07-02 19:28         ` Luis R. Rodriguez
@ 2012-07-02 20:11           ` Johannes Berg
  2012-07-02 20:13             ` Luis R. Rodriguez
  0 siblings, 1 reply; 14+ messages in thread
From: Johannes Berg @ 2012-07-02 20:11 UTC (permalink / raw)
  To: Luis R. Rodriguez
  Cc: Vladimir Kondratiev, Vladimir Kondratiev, John W . Linville,
	linux-wireless

On Mon, 2012-07-02 at 12:28 -0700, Luis R. Rodriguez wrote:

> > Expanding bitrate to u32 would break all userspace tools.
> 
> Unless userspace is told that a new high value is used. We could
> for example attach a flag to tell userspace that a different
> bitrate type should be used. We can also just get new userspace
> to start embracing the new data type, and old userspace would
> simply not support that bit rate.

The solution Vladimir proposed addresses all of that :-)

johannes


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [RFC 60g 5/5] wireless: bitrate calculation for 60g
  2012-07-02 20:11           ` Johannes Berg
@ 2012-07-02 20:13             ` Luis R. Rodriguez
  0 siblings, 0 replies; 14+ messages in thread
From: Luis R. Rodriguez @ 2012-07-02 20:13 UTC (permalink / raw)
  To: Johannes Berg
  Cc: Vladimir Kondratiev, Vladimir Kondratiev, John W . Linville,
	linux-wireless

On Mon, Jul 02, 2012 at 10:11:38PM +0200, Johannes Berg wrote:
> On Mon, 2012-07-02 at 12:28 -0700, Luis R. Rodriguez wrote:
> 
> > > Expanding bitrate to u32 would break all userspace tools.
> > 
> > Unless userspace is told that a new high value is used. We could
> > for example attach a flag to tell userspace that a different
> > bitrate type should be used. We can also just get new userspace
> > to start embracing the new data type, and old userspace would
> > simply not support that bit rate.
> 
> The solution Vladimir proposed addresses all of that :-)

To the hip hop.. hippity hop !
 
 Luis

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2012-07-02 20:13 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-06-28 11:16 [RFC 60g 0/5] Infrastructure for 60g (802.11ad) Vladimir Kondratiev
2012-06-28 11:16 ` [RFC 60g 1/5] wireless: add 802.11ad (60gHz band) Vladimir Kondratiev
2012-06-28 18:03   ` Johannes Berg
2012-06-28 11:16 ` [RFC 60g 2/5] wireless: rate check logic for 60g Vladimir Kondratiev
2012-06-28 18:04   ` Johannes Berg
2012-07-01 12:05     ` Vladimir Kondratiev
2012-06-28 11:16 ` [RFC 60g 3/5] wireless: regulatory " Vladimir Kondratiev
2012-06-28 11:16 ` [RFC 60g 4/5] wireless: 60g protocol constants Vladimir Kondratiev
2012-06-28 18:06   ` Johannes Berg
2012-06-28 11:17 ` [RFC 60g 5/5] wireless: bitrate calculation for 60g Vladimir Kondratiev
2012-06-28 18:07   ` Johannes Berg
     [not found]     ` <1703117.VxUDt2UvbQ@lx-vladimir>
     [not found]       ` <2090114.iKoJhGKOAs@lx-vladimir>
2012-07-02 19:28         ` Luis R. Rodriguez
2012-07-02 20:11           ` Johannes Berg
2012-07-02 20:13             ` Luis R. Rodriguez

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.