1*7e5677deSArend van Spriel // SPDX-License-Identifier: ISC 205491d2cSKalle Valo /* 305491d2cSKalle Valo * Copyright (c) 2010 Broadcom Corporation 405491d2cSKalle Valo */ 505491d2cSKalle Valo 605491d2cSKalle Valo #ifndef _BRCMU_D11_H_ 705491d2cSKalle Valo #define _BRCMU_D11_H_ 805491d2cSKalle Valo 905491d2cSKalle Valo /* d11 io type */ 1005491d2cSKalle Valo #define BRCMU_D11N_IOTYPE 1 1105491d2cSKalle Valo #define BRCMU_D11AC_IOTYPE 2 1205491d2cSKalle Valo 1305491d2cSKalle Valo /* A chanspec (channel specification) holds the channel number, band, 1405491d2cSKalle Valo * bandwidth and control sideband 1505491d2cSKalle Valo */ 1605491d2cSKalle Valo 1705491d2cSKalle Valo /* chanspec binary format */ 1805491d2cSKalle Valo 1905491d2cSKalle Valo #define BRCMU_CHSPEC_INVALID 255 2005491d2cSKalle Valo /* bit 0~7 channel number 2105491d2cSKalle Valo * for 80+80 channels: bit 0~3 low channel id, bit 4~7 high channel id 2205491d2cSKalle Valo */ 2305491d2cSKalle Valo #define BRCMU_CHSPEC_CH_MASK 0x00ff 2405491d2cSKalle Valo #define BRCMU_CHSPEC_CH_SHIFT 0 2505491d2cSKalle Valo #define BRCMU_CHSPEC_CHL_MASK 0x000f 2605491d2cSKalle Valo #define BRCMU_CHSPEC_CHL_SHIFT 0 2705491d2cSKalle Valo #define BRCMU_CHSPEC_CHH_MASK 0x00f0 2805491d2cSKalle Valo #define BRCMU_CHSPEC_CHH_SHIFT 4 2905491d2cSKalle Valo 3005491d2cSKalle Valo /* bit 8~16 for dot 11n IO types 3105491d2cSKalle Valo * bit 8~9 sideband 3205491d2cSKalle Valo * bit 10~11 bandwidth 3305491d2cSKalle Valo * bit 12~13 spectral band 3405491d2cSKalle Valo * bit 14~15 not used 3505491d2cSKalle Valo */ 3605491d2cSKalle Valo #define BRCMU_CHSPEC_D11N_SB_MASK 0x0300 3705491d2cSKalle Valo #define BRCMU_CHSPEC_D11N_SB_SHIFT 8 3805491d2cSKalle Valo #define BRCMU_CHSPEC_D11N_SB_L 0x0100 /* control lower */ 3905491d2cSKalle Valo #define BRCMU_CHSPEC_D11N_SB_U 0x0200 /* control upper */ 4005491d2cSKalle Valo #define BRCMU_CHSPEC_D11N_SB_N 0x0300 /* none */ 4105491d2cSKalle Valo #define BRCMU_CHSPEC_D11N_BW_MASK 0x0c00 4205491d2cSKalle Valo #define BRCMU_CHSPEC_D11N_BW_SHIFT 10 4305491d2cSKalle Valo #define BRCMU_CHSPEC_D11N_BW_10 0x0400 4405491d2cSKalle Valo #define BRCMU_CHSPEC_D11N_BW_20 0x0800 4505491d2cSKalle Valo #define BRCMU_CHSPEC_D11N_BW_40 0x0c00 4605491d2cSKalle Valo #define BRCMU_CHSPEC_D11N_BND_MASK 0x3000 4705491d2cSKalle Valo #define BRCMU_CHSPEC_D11N_BND_SHIFT 12 4805491d2cSKalle Valo #define BRCMU_CHSPEC_D11N_BND_5G 0x1000 4905491d2cSKalle Valo #define BRCMU_CHSPEC_D11N_BND_2G 0x2000 5005491d2cSKalle Valo 5105491d2cSKalle Valo /* bit 8~16 for dot 11ac IO types 5205491d2cSKalle Valo * bit 8~10 sideband 5305491d2cSKalle Valo * bit 11~13 bandwidth 5405491d2cSKalle Valo * bit 14~15 spectral band 5505491d2cSKalle Valo */ 5605491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_SB_MASK 0x0700 5705491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_SB_SHIFT 8 5805491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_SB_LLL 0x0000 5905491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_SB_LLU 0x0100 6005491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_SB_LUL 0x0200 6105491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_SB_LUU 0x0300 6205491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_SB_ULL 0x0400 6305491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_SB_ULU 0x0500 6405491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_SB_UUL 0x0600 6505491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_SB_UUU 0x0700 6605491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_SB_LL BRCMU_CHSPEC_D11AC_SB_LLL 6705491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_SB_LU BRCMU_CHSPEC_D11AC_SB_LLU 6805491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_SB_UL BRCMU_CHSPEC_D11AC_SB_LUL 6905491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_SB_UU BRCMU_CHSPEC_D11AC_SB_LUU 7005491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_SB_L BRCMU_CHSPEC_D11AC_SB_LLL 7105491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_SB_U BRCMU_CHSPEC_D11AC_SB_LLU 7205491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_BW_MASK 0x3800 7305491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_BW_SHIFT 11 7405491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_BW_5 0x0000 7505491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_BW_10 0x0800 7605491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_BW_20 0x1000 7705491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_BW_40 0x1800 7805491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_BW_80 0x2000 7905491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_BW_160 0x2800 8005491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_BW_8080 0x3000 8105491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_BND_MASK 0xc000 8205491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_BND_SHIFT 14 8305491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_BND_2G 0x0000 8405491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_BND_3G 0x4000 8505491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_BND_4G 0x8000 8605491d2cSKalle Valo #define BRCMU_CHSPEC_D11AC_BND_5G 0xc000 8705491d2cSKalle Valo 8805491d2cSKalle Valo #define BRCMU_CHAN_BAND_2G 0 8905491d2cSKalle Valo #define BRCMU_CHAN_BAND_5G 1 9005491d2cSKalle Valo 9105491d2cSKalle Valo enum brcmu_chan_bw { 9205491d2cSKalle Valo BRCMU_CHAN_BW_20, 9305491d2cSKalle Valo BRCMU_CHAN_BW_40, 9405491d2cSKalle Valo BRCMU_CHAN_BW_80, 9505491d2cSKalle Valo BRCMU_CHAN_BW_80P80, 9605491d2cSKalle Valo BRCMU_CHAN_BW_160, 9705491d2cSKalle Valo }; 9805491d2cSKalle Valo 9905491d2cSKalle Valo enum brcmu_chan_sb { 10005491d2cSKalle Valo BRCMU_CHAN_SB_NONE = -1, 10105491d2cSKalle Valo BRCMU_CHAN_SB_LLL, 10205491d2cSKalle Valo BRCMU_CHAN_SB_LLU, 10305491d2cSKalle Valo BRCMU_CHAN_SB_LUL, 10405491d2cSKalle Valo BRCMU_CHAN_SB_LUU, 10505491d2cSKalle Valo BRCMU_CHAN_SB_ULL, 10605491d2cSKalle Valo BRCMU_CHAN_SB_ULU, 10705491d2cSKalle Valo BRCMU_CHAN_SB_UUL, 10805491d2cSKalle Valo BRCMU_CHAN_SB_UUU, 10905491d2cSKalle Valo BRCMU_CHAN_SB_L = BRCMU_CHAN_SB_LLL, 11005491d2cSKalle Valo BRCMU_CHAN_SB_U = BRCMU_CHAN_SB_LLU, 11105491d2cSKalle Valo BRCMU_CHAN_SB_LL = BRCMU_CHAN_SB_LLL, 11205491d2cSKalle Valo BRCMU_CHAN_SB_LU = BRCMU_CHAN_SB_LLU, 11305491d2cSKalle Valo BRCMU_CHAN_SB_UL = BRCMU_CHAN_SB_LUL, 11405491d2cSKalle Valo BRCMU_CHAN_SB_UU = BRCMU_CHAN_SB_LUU, 11505491d2cSKalle Valo }; 11605491d2cSKalle Valo 1174712d88aSRafał Miłecki /** 1184712d88aSRafał Miłecki * struct brcmu_chan - stores channel formats 1194712d88aSRafał Miłecki * 1204712d88aSRafał Miłecki * This structure can be used with functions translating chanspec into generic 1214712d88aSRafał Miłecki * channel info and the other way. 1224712d88aSRafał Miłecki * 1234712d88aSRafał Miłecki * @chspec: firmware specific format 1244712d88aSRafał Miłecki * @chnum: center channel number 1254712d88aSRafał Miłecki * @control_ch_num: control channel number 1264712d88aSRafał Miłecki * @band: frequency band 1274712d88aSRafał Miłecki * @bw: channel width 1284712d88aSRafał Miłecki * @sb: control sideband (location of control channel against the center one) 1294712d88aSRafał Miłecki */ 13005491d2cSKalle Valo struct brcmu_chan { 13105491d2cSKalle Valo u16 chspec; 13205491d2cSKalle Valo u8 chnum; 1334712d88aSRafał Miłecki u8 control_ch_num; 13405491d2cSKalle Valo u8 band; 13505491d2cSKalle Valo enum brcmu_chan_bw bw; 13605491d2cSKalle Valo enum brcmu_chan_sb sb; 13705491d2cSKalle Valo }; 13805491d2cSKalle Valo 1394712d88aSRafał Miłecki /** 1404712d88aSRafał Miłecki * struct brcmu_d11inf - provides functions translating channel format 1414712d88aSRafał Miłecki * 1424712d88aSRafał Miłecki * @io_type: determines version of channel format used by firmware 1434712d88aSRafał Miłecki * @encchspec: encodes channel info into a chanspec, requires center channel 1444712d88aSRafał Miłecki * number, ignores control one 1454712d88aSRafał Miłecki * @decchspec: decodes chanspec into generic info 1464712d88aSRafał Miłecki */ 14705491d2cSKalle Valo struct brcmu_d11inf { 14805491d2cSKalle Valo u8 io_type; 14905491d2cSKalle Valo 15005491d2cSKalle Valo void (*encchspec)(struct brcmu_chan *ch); 15105491d2cSKalle Valo void (*decchspec)(struct brcmu_chan *ch); 15205491d2cSKalle Valo }; 15305491d2cSKalle Valo 15405491d2cSKalle Valo void brcmu_d11_attach(struct brcmu_d11inf *d11inf); 15505491d2cSKalle Valo 15605491d2cSKalle Valo #endif /* _BRCMU_CHANNELS_H_ */ 157