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