Path: blob/main/sys/contrib/dev/broadcom/brcm80211/include/brcmu_d11.h
178665 views
// SPDX-License-Identifier: ISC1/*2* Copyright (c) 2010 Broadcom Corporation3*/45#ifndef _BRCMU_D11_H_6#define _BRCMU_D11_H_78/* d11 io type */9#define BRCMU_D11N_IOTYPE 110#define BRCMU_D11AC_IOTYPE 21112/* A chanspec (channel specification) holds the channel number, band,13* bandwidth and control sideband14*/1516/* chanspec binary format */1718#define BRCMU_CHSPEC_INVALID 25519/* bit 0~7 channel number20* for 80+80 channels: bit 0~3 low channel id, bit 4~7 high channel id21*/22#define BRCMU_CHSPEC_CH_MASK 0x00ff23#define BRCMU_CHSPEC_CH_SHIFT 024#define BRCMU_CHSPEC_CHL_MASK 0x000f25#define BRCMU_CHSPEC_CHL_SHIFT 026#define BRCMU_CHSPEC_CHH_MASK 0x00f027#define BRCMU_CHSPEC_CHH_SHIFT 42829/* bit 8~16 for dot 11n IO types30* bit 8~9 sideband31* bit 10~11 bandwidth32* bit 12~13 spectral band33* bit 14~15 not used34*/35#define BRCMU_CHSPEC_D11N_SB_MASK 0x030036#define BRCMU_CHSPEC_D11N_SB_SHIFT 837#define BRCMU_CHSPEC_D11N_SB_L 0x0100 /* control lower */38#define BRCMU_CHSPEC_D11N_SB_U 0x0200 /* control upper */39#define BRCMU_CHSPEC_D11N_SB_N 0x0300 /* none */40#define BRCMU_CHSPEC_D11N_BW_MASK 0x0c0041#define BRCMU_CHSPEC_D11N_BW_SHIFT 1042#define BRCMU_CHSPEC_D11N_BW_10 0x040043#define BRCMU_CHSPEC_D11N_BW_20 0x080044#define BRCMU_CHSPEC_D11N_BW_40 0x0c0045#define BRCMU_CHSPEC_D11N_BND_MASK 0x300046#define BRCMU_CHSPEC_D11N_BND_SHIFT 1247#define BRCMU_CHSPEC_D11N_BND_5G 0x100048#define BRCMU_CHSPEC_D11N_BND_2G 0x20004950/* bit 8~16 for dot 11ac IO types51* bit 8~10 sideband52* bit 11~13 bandwidth53* bit 14~15 spectral band54*/55#define BRCMU_CHSPEC_D11AC_SB_MASK 0x070056#define BRCMU_CHSPEC_D11AC_SB_SHIFT 857#define BRCMU_CHSPEC_D11AC_SB_LLL 0x000058#define BRCMU_CHSPEC_D11AC_SB_LLU 0x010059#define BRCMU_CHSPEC_D11AC_SB_LUL 0x020060#define BRCMU_CHSPEC_D11AC_SB_LUU 0x030061#define BRCMU_CHSPEC_D11AC_SB_ULL 0x040062#define BRCMU_CHSPEC_D11AC_SB_ULU 0x050063#define BRCMU_CHSPEC_D11AC_SB_UUL 0x060064#define BRCMU_CHSPEC_D11AC_SB_UUU 0x070065#define BRCMU_CHSPEC_D11AC_SB_LL BRCMU_CHSPEC_D11AC_SB_LLL66#define BRCMU_CHSPEC_D11AC_SB_LU BRCMU_CHSPEC_D11AC_SB_LLU67#define BRCMU_CHSPEC_D11AC_SB_UL BRCMU_CHSPEC_D11AC_SB_LUL68#define BRCMU_CHSPEC_D11AC_SB_UU BRCMU_CHSPEC_D11AC_SB_LUU69#define BRCMU_CHSPEC_D11AC_SB_L BRCMU_CHSPEC_D11AC_SB_LLL70#define BRCMU_CHSPEC_D11AC_SB_U BRCMU_CHSPEC_D11AC_SB_LLU71#define BRCMU_CHSPEC_D11AC_BW_MASK 0x380072#define BRCMU_CHSPEC_D11AC_BW_SHIFT 1173#define BRCMU_CHSPEC_D11AC_BW_5 0x000074#define BRCMU_CHSPEC_D11AC_BW_10 0x080075#define BRCMU_CHSPEC_D11AC_BW_20 0x100076#define BRCMU_CHSPEC_D11AC_BW_40 0x180077#define BRCMU_CHSPEC_D11AC_BW_80 0x200078#define BRCMU_CHSPEC_D11AC_BW_160 0x280079#define BRCMU_CHSPEC_D11AC_BW_8080 0x300080#define BRCMU_CHSPEC_D11AC_BND_MASK 0xc00081#define BRCMU_CHSPEC_D11AC_BND_SHIFT 1482#define BRCMU_CHSPEC_D11AC_BND_2G 0x000083#define BRCMU_CHSPEC_D11AC_BND_3G 0x400084#define BRCMU_CHSPEC_D11AC_BND_4G 0x800085#define BRCMU_CHSPEC_D11AC_BND_5G 0xc0008687#define BRCMU_CHAN_BAND_2G 088#define BRCMU_CHAN_BAND_5G 18990enum brcmu_chan_bw {91BRCMU_CHAN_BW_20,92BRCMU_CHAN_BW_40,93BRCMU_CHAN_BW_80,94BRCMU_CHAN_BW_80P80,95BRCMU_CHAN_BW_160,96};9798enum brcmu_chan_sb {99BRCMU_CHAN_SB_NONE = -1,100BRCMU_CHAN_SB_LLL,101BRCMU_CHAN_SB_LLU,102BRCMU_CHAN_SB_LUL,103BRCMU_CHAN_SB_LUU,104BRCMU_CHAN_SB_ULL,105BRCMU_CHAN_SB_ULU,106BRCMU_CHAN_SB_UUL,107BRCMU_CHAN_SB_UUU,108BRCMU_CHAN_SB_L = BRCMU_CHAN_SB_LLL,109BRCMU_CHAN_SB_U = BRCMU_CHAN_SB_LLU,110BRCMU_CHAN_SB_LL = BRCMU_CHAN_SB_LLL,111BRCMU_CHAN_SB_LU = BRCMU_CHAN_SB_LLU,112BRCMU_CHAN_SB_UL = BRCMU_CHAN_SB_LUL,113BRCMU_CHAN_SB_UU = BRCMU_CHAN_SB_LUU,114};115116/**117* struct brcmu_chan - stores channel formats118*119* This structure can be used with functions translating chanspec into generic120* channel info and the other way.121*122* @chspec: firmware specific format123* @chnum: center channel number124* @control_ch_num: control channel number125* @band: frequency band126* @bw: channel width127* @sb: control sideband (location of control channel against the center one)128*/129struct brcmu_chan {130u16 chspec;131u8 chnum;132u8 control_ch_num;133u8 band;134enum brcmu_chan_bw bw;135enum brcmu_chan_sb sb;136};137138/**139* struct brcmu_d11inf - provides functions translating channel format140*141* @io_type: determines version of channel format used by firmware142* @encchspec: encodes channel info into a chanspec, requires center channel143* number, ignores control one144* @decchspec: decodes chanspec into generic info145*/146struct brcmu_d11inf {147u8 io_type;148149void (*encchspec)(struct brcmu_chan *ch);150void (*decchspec)(struct brcmu_chan *ch);151};152153void brcmu_d11_attach(struct brcmu_d11inf *d11inf);154155#endif /* _BRCMU_CHANNELS_H_ */156157158