[PATCH 1/3] ath9k: Support channels in licensed bands

Zefir Kurtisi zefir.kurtisi at neratec.com
Fri Mar 17 06:40:50 PDT 2017


On 03/16/2017 04:13 PM, Simon Wunderlich wrote:
> From: Ben Greear <greearb at candelatech.com>
> 
> Many chips support channels in licensed bands. Add support for those,
> along with a corresponding kernel config option to disable them by
> default. Note that these channels are not selectable even if the
> option has been compiled unless the user modifies the regulatory
> database to explicitly enable the corresponding channels.
> 
> NOTE:  These channels must not be used in most regulatory
> domains unless you have a license from the FCC or similar!
> 
> Signed-off-by: Ben Greear <greearb at candelatech.com>
> [Hide this support behind a Kconfig option]
> Signed-off-by: Julian Calaby <julian.calaby at gmail.com>
> [only use the 20 mhz channels, add 5 ghz, change to 4.9ghz to licensed bands]
> Signed-off-by: Simon Wunderlich <sw at simonwunderlich.de>
> Signed-off-by: Mathias Kretschmer <mathias.kretschmer at fit.fraunhofer.de>
> ---
>  drivers/net/wireless/ath/ath9k/Kconfig       | 20 ++++++++++++++++
>  drivers/net/wireless/ath/ath9k/ath9k.h       |  2 +-
>  drivers/net/wireless/ath/ath9k/common-init.c | 35 +++++++++++++++++++++-------
>  drivers/net/wireless/ath/ath9k/hw.h          |  4 ++--
>  4 files changed, 50 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath9k/Kconfig b/drivers/net/wireless/ath/ath9k/Kconfig
> index 783a38f1a626..23b8abf4449a 100644
> --- a/drivers/net/wireless/ath/ath9k/Kconfig
> +++ b/drivers/net/wireless/ath/ath9k/Kconfig
> @@ -116,6 +116,26 @@ config ATH9K_DFS_CERTIFIED
>  	  developed. At this point enabling this option won't do anything
>  	  except increase code size.
>  
> +config ATH9K_LICENSED_CHAN
> +	bool "Support channels in licensed bands"
> +	depends on ATH9K && CFG80211_CERTIFICATION_ONUS
> +	default n
> +	---help---
> +	  This option enables support for licensed channels on such as
> +          4.9 GHz (public safety).
> +
> +	  These are PUBLIC SAFETY CHANNELS and MUST NOT BE USED in most
> +	  regulatory domains UNLESS YOU HAVE A FULL LICENSE for their use from
> +	  your local radio regulator, e.g. the FCC or equivalent. Using these
> +	  channels without proper authorisation may result in serious legal
> +	  consequences.
> +
> +	  You will also have to build a regulatory database with these channels
> +	  enabled to actually use them.
> +
> +	  If you are a distro kernel builder or have any doubt whatsoever about
> +	  your legal ability to use these channels, say N.
> +
>  config ATH9K_DYNACK
>  	bool "Atheros ath9k ACK timeout estimation algorithm (EXPERIMENTAL)"
>  	depends on ATH9K
> diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h
> index cf076719c27e..d215c3f968d4 100644
> --- a/drivers/net/wireless/ath/ath9k/ath9k.h
> +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
> @@ -996,7 +996,7 @@ struct ath_softc {
>  	struct device *dev;
>  
>  	struct survey_info *cur_survey;
> -	struct survey_info survey[ATH9K_NUM_CHANNELS];
> +	struct survey_info survey[ATH9K_MAX_NUM_CHANNELS];
>  
>  	spinlock_t intr_lock;
>  	struct tasklet_struct intr_tq;
> diff --git a/drivers/net/wireless/ath/ath9k/common-init.c b/drivers/net/wireless/ath/ath9k/common-init.c
> index 8b4f7fdabf58..0d632c22bc16 100644
> --- a/drivers/net/wireless/ath/ath9k/common-init.c
> +++ b/drivers/net/wireless/ath/ath9k/common-init.c
> @@ -86,6 +86,22 @@ static const struct ieee80211_channel ath9k_5ghz_chantable[] = {
>  	CHAN5G(5785, 35), /* Channel 157 */
>  	CHAN5G(5805, 36), /* Channel 161 */
>  	CHAN5G(5825, 37), /* Channel 165 */
> +
> +#ifdef CONFIG_ATH9K_LICENSED_CHAN
> +	/* 4.9Ghz channels, public safety channels, license is required in US
> +	 * and most other regulatory domains!
> +	 */
> +	/* 802.11j 4.9 GHz (20 MHz) */
> +	CHAN5G(4920, 38), /* channel 184 */
> +	CHAN5G(4940, 39), /* channel 188 */
> +	CHAN5G(4960, 40), /* channel 192 */
> +	CHAN5G(4980, 41), /* channel 196 */
> +	/* 802.11j 5.030 - 5.080 GHz (20 MHz) */
> +	CHAN5G(5040, 42), /* channel 8 */
> +	CHAN5G(5060, 43), /* channel 12 */
> +	CHAN5G(5080, 44), /* channel 16 */
> +#endif
> +#define ATH9K_NUM_LICENSED_CHANNELS 7
>  };
>  
>  /* Atheros hardware rate code addition for short premble */
> @@ -126,10 +142,14 @@ int ath9k_cmn_init_channels_rates(struct ath_common *common)
>  {
>  	struct ath_hw *ah = (struct ath_hw *)common->ah;
>  	void *channels;
> +	int num_5ghz_chan = ARRAY_SIZE(ath9k_5ghz_chantable);
> +
> +	if (!IS_ENABLED(CONFIG_ATH9K_LICENSED_CHAN))
> +		num_5ghz_chan -= ATH9K_NUM_LICENSED_CHANNELS;
These two lines seem wrong to me, since the extra channels are only added to the
list if CONFIG_ATH9K_LICENSED_CHAN is defined. If it is not, this cuts off the
last 7 regular channels, no?

Cheers,
Zefir




More information about the ath10k mailing list