xref: /linux/drivers/net/wireless/realtek/rtw89/sar.h (revision e0c0ab04f6785abaa71b9b8dc252cb1a2072c225)
1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2 /* Copyright(c) 2019-2020  Realtek Corporation
3  */
4 
5 #ifndef __RTW89_SAR_H__
6 #define __RTW89_SAR_H__
7 
8 #include "core.h"
9 
10 #define RTW89_SAR_TXPWR_MAC_MAX 63
11 #define RTW89_SAR_TXPWR_MAC_MIN -64
12 
13 struct rtw89_sar_parm {
14 	u32 center_freq;
15 	enum rtw89_ntx ntx;
16 
17 	bool force_path;
18 	enum rtw89_rf_path path;
19 };
20 
21 struct rtw89_sar_handler {
22 	const char *descr_sar_source;
23 	u8 txpwr_factor_sar;
24 	int (*query_sar_config)(struct rtw89_dev *rtwdev,
25 				const struct rtw89_sar_parm *sar_parm, s32 *cfg);
26 };
27 
28 extern const struct cfg80211_sar_capa rtw89_sar_capa;
29 
30 s8 rtw89_query_sar(struct rtw89_dev *rtwdev, const struct rtw89_sar_parm *sar_parm);
31 int rtw89_print_sar(struct rtw89_dev *rtwdev, char *buf, size_t bufsz,
32 		    const struct rtw89_sar_parm *sar_parm);
33 int rtw89_print_tas(struct rtw89_dev *rtwdev, char *buf, size_t bufsz);
34 int rtw89_ops_set_sar_specs(struct ieee80211_hw *hw,
35 			    const struct cfg80211_sar_specs *sar);
36 void rtw89_tas_reset(struct rtw89_dev *rtwdev, bool force);
37 void rtw89_tas_scan(struct rtw89_dev *rtwdev, bool start);
38 void rtw89_tas_chanctx_cb(struct rtw89_dev *rtwdev,
39 			  enum rtw89_chanctx_state state);
40 void rtw89_sar_init(struct rtw89_dev *rtwdev);
41 void rtw89_sar_track(struct rtw89_dev *rtwdev);
42 
43 #endif
44