bcmwifi_channels.h revision ac2bc7e7aaad957f235992ff74d5f9af34dc5f88
1ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt/* 2ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Misc utility routines for WL and Apps 3ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * This header file housing the define and function prototype use by 4ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * both the wl driver, tools & Apps. 5ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 6ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Copyright (C) 1999-2012, Broadcom Corporation 7ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 8ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * Permission to use, copy, modify, and/or distribute this software for any 9ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * purpose with or without fee is hereby granted, provided that the above 10ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * copyright notice and this permission notice appear in all copies. 11ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 12ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 13ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 14ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 15ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 16ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 17ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 18ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 19ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * 20ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt * $Id: bcmwifi_channels.h 309193 2012-01-19 00:03:57Z $ 21ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt */ 22ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 23ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifndef _bcmwifi_channels_h_ 24ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define _bcmwifi_channels_h_ 25ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 26ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 27ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 28ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidttypedef uint16 chanspec_t; 29ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 30ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 31ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CH_UPPER_SB 0x01 32ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CH_LOWER_SB 0x02 33ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CH_EWA_VALID 0x04 34ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CH_80MHZ_APART 16 35ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CH_40MHZ_APART 8 36ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CH_20MHZ_APART 4 37ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CH_10MHZ_APART 2 38ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CH_5MHZ_APART 1 39ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CH_MAX_2G_CHANNEL 14 40ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define MAXCHANNEL 224 41ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_CTLOVLP(sp1, sp2, sep) ABS(wf_chspec_ctlchan(sp1) - wf_chspec_ctlchan(sp2)) < (sep) 42ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 43ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 44ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#undef D11AC_IOTYPES 45ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define D11AC_IOTYPES 46ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 47ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifndef D11AC_IOTYPES 48ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 49ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CHAN_MASK 0x00ff 50ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CHAN_SHIFT 0 51ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 52ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_MASK 0x0300 53ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_SHIFT 8 54ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_LOWER 0x0100 55ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_UPPER 0x0200 56ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_NONE 0x0300 57ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 58ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BW_MASK 0x0C00 59ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BW_SHIFT 10 60ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BW_10 0x0400 61ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BW_20 0x0800 62ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BW_40 0x0C00 63ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 64ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BAND_MASK 0xf000 65ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BAND_SHIFT 12 66ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BAND_5G 0x1000 67ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BAND_2G 0x2000 68ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define INVCHANSPEC 255 69ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 70ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 71ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define LOWER_20_SB(channel) (((channel) > CH_10MHZ_APART) ? ((channel) - CH_10MHZ_APART) : 0) 72ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define UPPER_20_SB(channel) (((channel) < (MAXCHANNEL - CH_10MHZ_APART)) ? \ 73ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt ((channel) + CH_10MHZ_APART) : 0) 74ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_WLCBANDUNIT(chspec) (CHSPEC_IS5G(chspec) ? BAND_5G_INDEX : BAND_2G_INDEX) 75ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CH20MHZ_CHSPEC(channel) (chanspec_t)((chanspec_t)(channel) | WL_CHANSPEC_BW_20 | \ 76ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt WL_CHANSPEC_CTL_SB_NONE | (((channel) <= CH_MAX_2G_CHANNEL) ? \ 77ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt WL_CHANSPEC_BAND_2G : WL_CHANSPEC_BAND_5G)) 78ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define NEXT_20MHZ_CHAN(channel) (((channel) < (MAXCHANNEL - CH_20MHZ_APART)) ? \ 79ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt ((channel) + CH_20MHZ_APART) : 0) 80ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CH40MHZ_CHSPEC(channel, ctlsb) (chanspec_t) \ 81ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt ((channel) | (ctlsb) | WL_CHANSPEC_BW_40 | \ 82ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt ((channel) <= CH_MAX_2G_CHANNEL ? WL_CHANSPEC_BAND_2G : \ 83ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt WL_CHANSPEC_BAND_5G)) 84ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_CHANNEL(chspec) ((uint8)((chspec) & WL_CHANSPEC_CHAN_MASK)) 85ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_BAND(chspec) ((chspec) & WL_CHANSPEC_BAND_MASK) 86ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 87ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 88ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_CTL_SB(chspec) ((chspec) & WL_CHANSPEC_CTL_SB_MASK) 89ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_BW(chspec) ((chspec) & WL_CHANSPEC_BW_MASK) 90ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 91ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifdef WL11N_20MHZONLY 92ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 93ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS10(chspec) 0 94ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS20(chspec) 1 95ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifndef CHSPEC_IS40 96ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS40(chspec) 0 97ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#endif 98ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 99ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#else 100ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 101ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS10(chspec) (((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_10) 102ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS20(chspec) (((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_20) 103ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifndef CHSPEC_IS40 104ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS40(chspec) (((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_40) 105ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#endif 106ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 107ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#endif 108ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 109ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS5G(chspec) (((chspec) & WL_CHANSPEC_BAND_MASK) == WL_CHANSPEC_BAND_5G) 110ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS2G(chspec) (((chspec) & WL_CHANSPEC_BAND_MASK) == WL_CHANSPEC_BAND_2G) 111ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_SB_NONE(chspec) (((chspec) & WL_CHANSPEC_CTL_SB_MASK) == WL_CHANSPEC_CTL_SB_NONE) 112ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_SB_UPPER(chspec) (((chspec) & WL_CHANSPEC_CTL_SB_MASK) == WL_CHANSPEC_CTL_SB_UPPER) 113ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_SB_LOWER(chspec) (((chspec) & WL_CHANSPEC_CTL_SB_MASK) == WL_CHANSPEC_CTL_SB_LOWER) 114ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_CTL_CHAN(chspec) ((CHSPEC_SB_LOWER(chspec)) ? \ 115ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt (LOWER_20_SB(((chspec) & WL_CHANSPEC_CHAN_MASK))) : \ 116ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt (UPPER_20_SB(((chspec) & WL_CHANSPEC_CHAN_MASK)))) 117ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC2WLC_BAND(chspec) (CHSPEC_IS5G(chspec) ? WLC_BAND_5G : WLC_BAND_2G) 118ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 119ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHANSPEC_STR_LEN 8 120ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 121ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#else 122ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 123ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CHAN_MASK 0x00ff 124ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CHAN_SHIFT 0 125ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CHAN1_MASK 0x000f 126ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CHAN1_SHIFT 0 127ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CHAN2_MASK 0x00f0 128ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CHAN2_SHIFT 4 129ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 130ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_MASK 0x0700 131ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_SHIFT 8 132ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_LLL 0x0000 133ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_LLU 0x0100 134ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_LUL 0x0200 135ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_LUU 0x0300 136ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_ULL 0x0400 137ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_ULU 0x0500 138ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_UUL 0x0600 139ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_UUU 0x0700 140ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_LL WL_CHANSPEC_CTL_SB_LLL 141ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_LU WL_CHANSPEC_CTL_SB_LLU 142ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_UL WL_CHANSPEC_CTL_SB_LUL 143ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_UU WL_CHANSPEC_CTL_SB_LUU 144ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_L WL_CHANSPEC_CTL_SB_LLL 145ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_U WL_CHANSPEC_CTL_SB_LLU 146ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_LOWER WL_CHANSPEC_CTL_SB_LLL 147ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_CTL_SB_UPPER WL_CHANSPEC_CTL_SB_LLU 148ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 149ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BW_MASK 0x3800 150ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BW_SHIFT 11 151ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BW_5 0x0000 152ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BW_10 0x0800 153ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BW_20 0x1000 154ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BW_40 0x1800 155ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BW_80 0x2000 156ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BW_160 0x2800 157ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BW_8080 0x3000 158ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 159ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BAND_MASK 0xc000 160ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BAND_SHIFT 14 161ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BAND_2G 0x0000 162ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BAND_3G 0x4000 163ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BAND_4G 0x8000 164ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_CHANSPEC_BAND_5G 0xc000 165ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define INVCHANSPEC 255 166ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 167ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 168ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define LOWER_20_SB(channel) (((channel) > CH_10MHZ_APART) ? \ 169ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt ((channel) - CH_10MHZ_APART) : 0) 170ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define UPPER_20_SB(channel) (((channel) < (MAXCHANNEL - CH_10MHZ_APART)) ? \ 171ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt ((channel) + CH_10MHZ_APART) : 0) 172ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define LOWER_40_SB(channel) ((channel) - CH_20MHZ_APART) 173ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define UPPER_40_SB(channel) ((channel) + CH_20MHZ_APART) 174ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_WLCBANDUNIT(chspec) (CHSPEC_IS5G(chspec) ? BAND_5G_INDEX : BAND_2G_INDEX) 175ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CH20MHZ_CHSPEC(channel) (chanspec_t)((chanspec_t)(channel) | WL_CHANSPEC_BW_20 | \ 176ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt (((channel) <= CH_MAX_2G_CHANNEL) ? \ 177ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt WL_CHANSPEC_BAND_2G : WL_CHANSPEC_BAND_5G)) 178ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define NEXT_20MHZ_CHAN(channel) (((channel) < (MAXCHANNEL - CH_20MHZ_APART)) ? \ 179ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt ((channel) + CH_20MHZ_APART) : 0) 180ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CH40MHZ_CHSPEC(channel, ctlsb) (chanspec_t) \ 181ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt ((channel) | (ctlsb) | WL_CHANSPEC_BW_40 | \ 182ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt ((channel) <= CH_MAX_2G_CHANNEL ? WL_CHANSPEC_BAND_2G : \ 183ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt WL_CHANSPEC_BAND_5G)) 184ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CH80MHZ_CHSPEC(channel, ctlsb) (chanspec_t) \ 185ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt ((channel) | (ctlsb) | \ 186ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt WL_CHANSPEC_BW_80 | WL_CHANSPEC_BAND_5G) 187ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CH160MHZ_CHSPEC(channel, ctlsb) (chanspec_t) \ 188ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt ((channel) | (ctlsb) | \ 189ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt WL_CHANSPEC_BW_160 | WL_CHANSPEC_BAND_5G) 190ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 191ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 192ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_CHANNEL(chspec) ((uint8)((chspec) & WL_CHANSPEC_CHAN_MASK)) 193ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_CHAN1(chspec) ((chspec) & WL_CHANSPEC_CHAN1_MASK) 194ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_CHAN2(chspec) ((chspec) & WL_CHANSPEC_CHAN2_MASK) 195ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_BAND(chspec) ((chspec) & WL_CHANSPEC_BAND_MASK) 196ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_CTL_SB(chspec) ((chspec) & WL_CHANSPEC_CTL_SB_MASK) 197ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_BW(chspec) ((chspec) & WL_CHANSPEC_BW_MASK) 198ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 199ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifdef WL11N_20MHZONLY 200ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 201ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS10(chspec) 0 202ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS20(chspec) 1 203ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifndef CHSPEC_IS40 204ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS40(chspec) 0 205ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#endif 206ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifndef CHSPEC_IS80 207ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS80(chspec) 0 208ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#endif 209ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifndef CHSPEC_IS160 210ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS160(chspec) 0 211ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#endif 212ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifndef CHSPEC_IS8080 213ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS8080(chspec) 0 214ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#endif 215ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 216ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#else 217ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 218ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS10(chspec) (((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_10) 219ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS20(chspec) (((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_20) 220ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifndef CHSPEC_IS40 221ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS40(chspec) (((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_40) 222ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#endif 223ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifndef CHSPEC_IS80 224ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS80(chspec) (((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_80) 225ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#endif 226ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifndef CHSPEC_IS160 227ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS160(chspec) (((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_160) 228ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#endif 229ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#ifndef CHSPEC_IS8080 230ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS8080(chspec) (((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_8080) 231ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#endif 232ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 233ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#endif 234ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 235ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS5G(chspec) (((chspec) & WL_CHANSPEC_BAND_MASK) == WL_CHANSPEC_BAND_5G) 236ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_IS2G(chspec) (((chspec) & WL_CHANSPEC_BAND_MASK) == WL_CHANSPEC_BAND_2G) 237ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_SB_UPPER(chspec) \ 238ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt ((((chspec) & WL_CHANSPEC_CTL_SB_MASK) == WL_CHANSPEC_CTL_SB_UPPER) && \ 239ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt (((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_40)) 240ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC_SB_LOWER(chspec) \ 241ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt ((((chspec) & WL_CHANSPEC_CTL_SB_MASK) == WL_CHANSPEC_CTL_SB_LOWER) && \ 242ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt (((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_40)) 243ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHSPEC2WLC_BAND(chspec) (CHSPEC_IS5G(chspec) ? WLC_BAND_5G : WLC_BAND_2G) 244ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 245ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 246ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define CHANSPEC_STR_LEN 20 247ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 248ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 249ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 250ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_LCHANSPEC_CHAN_MASK 0x00ff 251ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_LCHANSPEC_CHAN_SHIFT 0 252ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 253ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_LCHANSPEC_CTL_SB_MASK 0x0300 254ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_LCHANSPEC_CTL_SB_SHIFT 8 255ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_LCHANSPEC_CTL_SB_LOWER 0x0100 256ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_LCHANSPEC_CTL_SB_UPPER 0x0200 257ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_LCHANSPEC_CTL_SB_NONE 0x0300 258ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 259ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_LCHANSPEC_BW_MASK 0x0C00 260ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_LCHANSPEC_BW_SHIFT 10 261ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_LCHANSPEC_BW_10 0x0400 262ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_LCHANSPEC_BW_20 0x0800 263ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_LCHANSPEC_BW_40 0x0C00 264ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 265ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_LCHANSPEC_BAND_MASK 0xf000 266ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_LCHANSPEC_BAND_SHIFT 12 267ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_LCHANSPEC_BAND_5G 0x1000 268ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WL_LCHANSPEC_BAND_2G 0x2000 269ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 270ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define LCHSPEC_CHANNEL(chspec) ((uint8)((chspec) & WL_LCHANSPEC_CHAN_MASK)) 271ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define LCHSPEC_BAND(chspec) ((chspec) & WL_LCHANSPEC_BAND_MASK) 272ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define LCHSPEC_CTL_SB(chspec) ((chspec) & WL_LCHANSPEC_CTL_SB_MASK) 273ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define LCHSPEC_BW(chspec) ((chspec) & WL_LCHANSPEC_BW_MASK) 274ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define LCHSPEC_IS10(chspec) (((chspec) & WL_LCHANSPEC_BW_MASK) == WL_LCHANSPEC_BW_10) 275ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define LCHSPEC_IS20(chspec) (((chspec) & WL_LCHANSPEC_BW_MASK) == WL_LCHANSPEC_BW_20) 276ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define LCHSPEC_IS40(chspec) (((chspec) & WL_LCHANSPEC_BW_MASK) == WL_LCHANSPEC_BW_40) 277ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define LCHSPEC_IS5G(chspec) (((chspec) & WL_LCHANSPEC_BAND_MASK) == WL_LCHANSPEC_BAND_5G) 278ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define LCHSPEC_IS2G(chspec) (((chspec) & WL_LCHANSPEC_BAND_MASK) == WL_LCHANSPEC_BAND_2G) 279ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 280ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define LCHSPEC_CREATE(chan, band, bw, sb) ((uint16)((chan) | (sb) | (bw) | (band))) 281ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 282ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#endif 283ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 284ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 285ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 286ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 287ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WF_CHAN_FACTOR_2_4_G 4814 288ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 289ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 290ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WF_CHAN_FACTOR_5_G 10000 291ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 292ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 293ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WF_CHAN_FACTOR_4_G 8000 294ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 295ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 296ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WLC_MAXRATE 108 297ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WLC_RATE_1M 2 298ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WLC_RATE_2M 4 299ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WLC_RATE_5M5 11 300ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WLC_RATE_11M 22 301ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WLC_RATE_6M 12 302ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WLC_RATE_9M 18 303ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WLC_RATE_12M 24 304ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WLC_RATE_18M 36 305ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WLC_RATE_24M 48 306ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WLC_RATE_36M 72 307ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WLC_RATE_48M 96 308ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WLC_RATE_54M 108 309ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 310ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#define WLC_2G_25MHZ_OFFSET 5 311ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 312ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 313ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtextern char * wf_chspec_ntoa(chanspec_t chspec, char *buf); 314ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 315ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 316ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtextern chanspec_t wf_chspec_aton(const char *a); 317ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 318ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 319ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtextern bool wf_chspec_malformed(chanspec_t chanspec); 320ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 321ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 322ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtextern bool wf_chspec_valid(chanspec_t chanspec); 323ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 324ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 325ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtextern uint8 wf_chspec_ctlchan(chanspec_t chspec); 326ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 327ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 328ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtextern chanspec_t wf_chspec_ctlchspec(chanspec_t chspec); 329ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 330ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 331ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtextern chanspec_t wf_chspec_primary40_chspec(chanspec_t chspec); 332ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 333ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 334ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtextern int wf_mhz2channel(uint freq, uint start_factor); 335ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 336ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 337ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidtextern int wf_channel2mhz(uint channel, uint start_factor); 338ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt 339ac2bc7e7aaad957f235992ff74d5f9af34dc5f88Dmitry Shmidt#endif 340