xref: /openbmc/linux/drivers/net/wireless/broadcom/b43/ppr.h (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1  /* SPDX-License-Identifier: GPL-2.0 */
2  #ifndef LINUX_B43_PPR_H_
3  #define LINUX_B43_PPR_H_
4  
5  #include <linux/types.h>
6  
7  #define B43_PPR_CCK_RATES_NUM		4
8  #define B43_PPR_OFDM_RATES_NUM		8
9  #define B43_PPR_MCS_RATES_NUM		8
10  
11  #define B43_PPR_RATES_NUM	(B43_PPR_CCK_RATES_NUM +	\
12  				 B43_PPR_OFDM_RATES_NUM * 2 +	\
13  				 B43_PPR_MCS_RATES_NUM * 4)
14  
15  struct b43_ppr_rates {
16  	u8 cck[B43_PPR_CCK_RATES_NUM];
17  	u8 ofdm[B43_PPR_OFDM_RATES_NUM];
18  	u8 ofdm_20_cdd[B43_PPR_OFDM_RATES_NUM];
19  	u8 mcs_20[B43_PPR_MCS_RATES_NUM]; /* SISO */
20  	u8 mcs_20_cdd[B43_PPR_MCS_RATES_NUM];
21  	u8 mcs_20_stbc[B43_PPR_MCS_RATES_NUM];
22  	u8 mcs_20_sdm[B43_PPR_MCS_RATES_NUM];
23  };
24  
25  struct b43_ppr {
26  	/* All powers are in qdbm (Q5.2) */
27  	union {
28  		u8 __all_rates[B43_PPR_RATES_NUM];
29  		struct b43_ppr_rates rates;
30  	};
31  };
32  
33  struct b43_wldev;
34  enum b43_band;
35  
36  void b43_ppr_clear(struct b43_wldev *dev, struct b43_ppr *ppr);
37  
38  void b43_ppr_add(struct b43_wldev *dev, struct b43_ppr *ppr, int diff);
39  void b43_ppr_apply_max(struct b43_wldev *dev, struct b43_ppr *ppr, u8 max);
40  void b43_ppr_apply_min(struct b43_wldev *dev, struct b43_ppr *ppr, u8 min);
41  u8 b43_ppr_get_max(struct b43_wldev *dev, struct b43_ppr *ppr);
42  
43  bool b43_ppr_load_max_from_sprom(struct b43_wldev *dev, struct b43_ppr *ppr,
44  				 enum b43_band band);
45  
46  #endif /* LINUX_B43_PPR_H_ */
47