diff options
| author | Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com> | 2012-07-02 09:32:32 +0300 | 
|---|---|---|
| committer | Johannes Berg <johannes.berg@intel.com> | 2012-07-02 15:11:10 +0200 | 
| commit | 3a0c52a6d82cc41da965284412608c74aece34e4 (patch) | |
| tree | 4238ce4e3ed8ca7fde647491f48de7d3633a53e3 /net/wireless/util.c | |
| parent | d9b3b28b93812715dcee8e4eed8cb8d0707a45f8 (diff) | |
| download | olio-linux-3.10-3a0c52a6d82cc41da965284412608c74aece34e4.tar.xz olio-linux-3.10-3a0c52a6d82cc41da965284412608c74aece34e4.zip  | |
cfg80211: add 802.11ad (60gHz band) support
Add enumerations for both cfg80211 and nl80211.
This expands wiphy.bands etc. arrays.
Extend channel <-> frequency translation to cover 60g band
and modify the rate check logic since there are no legacy
mandatory rates (only MCS is used.)
Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/wireless/util.c')
| -rw-r--r-- | net/wireless/util.c | 35 | 
1 files changed, 27 insertions, 8 deletions
diff --git a/net/wireless/util.c b/net/wireless/util.c index a9260ac85cf..0228c64e73d 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 <= 45000) /* DMG band lower limit */  		return (freq - 5000) / 5; +	else if (freq >= 58320 && freq <= 64800) +		return (freq - 56160) / 2160; +	else +		return 0;  }  EXPORT_SYMBOL(ieee80211_frequency_to_channel); @@ -137,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;  |