1300016Sadrian/*
2300016Sadrian
3300016Sadrian  Broadcom B43 wireless driver
4300016Sadrian  IEEE 802.11n PHY data tables
5300016Sadrian
6300016Sadrian  Copyright (c) 2008 Michael Buesch <m@bues.ch>
7300016Sadrian  Copyright (c) 2010 Rafa�� Mi��ecki <zajec5@gmail.com>
8300016Sadrian
9300016Sadrian  This program is free software; you can redistribute it and/or modify
10300016Sadrian  it under the terms of the GNU General Public License as published by
11300016Sadrian  the Free Software Foundation; either version 2 of the License, or
12300016Sadrian  (at your option) any later version.
13300016Sadrian
14300016Sadrian  This program is distributed in the hope that it will be useful,
15300016Sadrian  but WITHOUT ANY WARRANTY; without even the implied warranty of
16300016Sadrian  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17300016Sadrian  GNU General Public License for more details.
18300016Sadrian
19300016Sadrian  You should have received a copy of the GNU General Public License
20300016Sadrian  along with this program; see the file COPYING.  If not, write to
21300016Sadrian  the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
22300016Sadrian  Boston, MA 02110-1301, USA.
23300016Sadrian
24300016Sadrian*/
25300016Sadrian
26300016Sadrian/*
27300016Sadrian * $FreeBSD$
28300016Sadrian */
29300016Sadrian
30300016Sadrian#ifndef	__IF_BWN_PHY_PPR_H__
31300016Sadrian#define	__IF_BWN_PHY_PPR_H__
32300016Sadrian
33300016Sadrian#define	BWN_PPR_CCK_RATES_NUM		4
34300016Sadrian#define	BWN_PPR_OFDM_RATES_NUM		8
35300016Sadrian#define	BWN_PPR_MCS_RATES_NUM		8
36300016Sadrian
37300016Sadrian#define	BWN_PPR_RATES_NUM	(BWN_PPR_CCK_RATES_NUM +	\
38300016Sadrian				 BWN_PPR_OFDM_RATES_NUM * 2 +	\
39300016Sadrian				 BWN_PPR_MCS_RATES_NUM * 4)
40300016Sadrian
41300016Sadrianstruct bwn_ppr_rates {
42300016Sadrian	uint8_t cck[BWN_PPR_CCK_RATES_NUM];
43300016Sadrian	uint8_t ofdm[BWN_PPR_OFDM_RATES_NUM];
44300016Sadrian	uint8_t ofdm_20_cdd[BWN_PPR_OFDM_RATES_NUM];
45300016Sadrian	uint8_t mcs_20[BWN_PPR_MCS_RATES_NUM]; /* single stream rates */
46300016Sadrian	uint8_t mcs_20_cdd[BWN_PPR_MCS_RATES_NUM];
47300016Sadrian	uint8_t mcs_20_stbc[BWN_PPR_MCS_RATES_NUM];
48300016Sadrian	uint8_t mcs_20_sdm[BWN_PPR_MCS_RATES_NUM];
49300016Sadrian};
50300016Sadrian
51300016Sadrianstruct bwn_ppr {
52300016Sadrian	/* All powers are in 1/4 dBm (Q5.2) */
53300016Sadrian	union {
54300016Sadrian		uint8_t __all_rates[BWN_PPR_RATES_NUM];
55300016Sadrian		struct bwn_ppr_rates rates;
56300016Sadrian	};
57300016Sadrian};
58300016Sadrian
59300016Sadrianextern	void bwn_ppr_clear(struct bwn_mac *mac, struct bwn_ppr *ppr);
60300016Sadrianextern	void bwn_ppr_add(struct bwn_mac *mac, struct bwn_ppr *ppr, int diff);
61300016Sadrianextern	void bwn_ppr_apply_max(struct bwn_mac *mac, struct bwn_ppr *ppr,
62300016Sadrian	    uint8_t max);
63300016Sadrianextern	void bwn_ppr_apply_min(struct bwn_mac *mac, struct bwn_ppr *ppr,
64300016Sadrian	    uint8_t min);
65300016Sadrianextern	uint8_t bwn_ppr_get_max(struct bwn_mac *mac, struct bwn_ppr *ppr);
66300016Sadrianextern	bool bwn_ppr_load_max_from_sprom(struct bwn_mac *mac,
67300016Sadrian	    struct bwn_ppr *ppr, bwn_phy_band_t band);
68300016Sadrian
69300016Sadrian#endif
70