[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