1 /* SPDX-License-Identifier: GPL-2.0 */
2 /******************************************************************************
3 *
4 * Copyright(c) 2013 - 2017 Realtek Corporation.
5 *
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of version 2 of the GNU General Public License as
8 * published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13 * more details.
14 *
15 *****************************************************************************/
16 #ifndef __RTW_ODM_H__
17 #define __RTW_ODM_H__
18
19 #include <drv_types.h>
20 #include "../hal/phydm/phydm_types.h"
21 /*
22 * This file provides utilities/wrappers for rtw driver to use ODM
23 */
24 typedef enum _HAL_PHYDM_OPS {
25 HAL_PHYDM_DIS_ALL_FUNC,
26 HAL_PHYDM_FUNC_SET,
27 HAL_PHYDM_FUNC_CLR,
28 HAL_PHYDM_ABILITY_BK,
29 HAL_PHYDM_ABILITY_RESTORE,
30 HAL_PHYDM_ABILITY_SET,
31 HAL_PHYDM_ABILITY_GET,
32 } HAL_PHYDM_OPS;
33
34
35 #define DYNAMIC_FUNC_DISABLE (0x0)
36 u32 rtw_phydm_ability_ops(_adapter *adapter, HAL_PHYDM_OPS ops, u32 ability);
37
38 #define rtw_phydm_func_disable_all(adapter) \
39 rtw_phydm_ability_ops(adapter, HAL_PHYDM_DIS_ALL_FUNC, 0)
40
41 #ifdef CONFIG_RTW_ACS
42 #define rtw_phydm_func_for_offchannel(adapter) \
43 do { \
44 rtw_phydm_ability_ops(adapter, HAL_PHYDM_DIS_ALL_FUNC, 0); \
45 if (rtw_odm_adaptivity_needed(adapter)) \
46 rtw_phydm_ability_ops(adapter, HAL_PHYDM_FUNC_SET, ODM_BB_ADAPTIVITY); \
47 if (IS_ACS_ENABLE(adapter))\
48 rtw_phydm_ability_ops(adapter, HAL_PHYDM_FUNC_SET, ODM_BB_ENV_MONITOR); \
49 } while (0)
50 #else
51 #define rtw_phydm_func_for_offchannel(adapter) \
52 do { \
53 rtw_phydm_ability_ops(adapter, HAL_PHYDM_DIS_ALL_FUNC, 0); \
54 if (rtw_odm_adaptivity_needed(adapter)) \
55 rtw_phydm_ability_ops(adapter, HAL_PHYDM_FUNC_SET, ODM_BB_ADAPTIVITY); \
56 } while (0)
57 #endif
58
59 #define rtw_phydm_func_clr(adapter, ability) \
60 rtw_phydm_ability_ops(adapter, HAL_PHYDM_FUNC_CLR, ability)
61
62 #define rtw_phydm_ability_backup(adapter) \
63 rtw_phydm_ability_ops(adapter, HAL_PHYDM_ABILITY_BK, 0)
64
65 #define rtw_phydm_ability_restore(adapter) \
66 rtw_phydm_ability_ops(adapter, HAL_PHYDM_ABILITY_RESTORE, 0)
67
68
rtw_phydm_ability_get(_adapter * adapter)69 static inline u32 rtw_phydm_ability_get(_adapter *adapter)
70 {
71 return rtw_phydm_ability_ops(adapter, HAL_PHYDM_ABILITY_GET, 0);
72 }
73
74
75 void rtw_odm_init_ic_type(_adapter *adapter);
76
77 void rtw_odm_adaptivity_config_msg(void *sel, _adapter *adapter);
78
79 bool rtw_odm_adaptivity_needed(_adapter *adapter);
80 void rtw_odm_adaptivity_parm_msg(void *sel, _adapter *adapter);
81 void rtw_odm_adaptivity_parm_set(_adapter *adapter, s8 th_l2h_ini, s8 th_edcca_hl_diff);
82 void rtw_odm_get_perpkt_rssi(void *sel, _adapter *adapter);
83 void rtw_odm_acquirespinlock(_adapter *adapter, enum rt_spinlock_type type);
84 void rtw_odm_releasespinlock(_adapter *adapter, enum rt_spinlock_type type);
85
86 struct dm_struct;
87 s16 rtw_odm_get_tx_power_mbm(struct dm_struct *dm, u8 rfpath, u8 rate, u8 bw, u8 cch);
88
89 #ifdef CONFIG_DFS_MASTER
90 void rtw_odm_radar_detect_reset(_adapter *adapter);
91 void rtw_odm_radar_detect_disable(_adapter *adapter);
92 void rtw_odm_radar_detect_enable(_adapter *adapter);
93 BOOLEAN rtw_odm_radar_detect(_adapter *adapter);
94 u8 rtw_odm_radar_detect_polling_int_ms(struct dvobj_priv *dvobj);
95 #endif /* CONFIG_DFS_MASTER */
96
97 void rtw_odm_parse_rx_phy_status_chinfo(union recv_frame *rframe, u8 *phys);
98
99 #if defined(CONFIG_RTL8822C) && defined(CONFIG_LPS_PG)
100 void odm_lps_pg_debug_8822c(void *dm_void);
101 #endif
102
103 #endif /* __RTW_ODM_H__ */
104