1 /****************************************************************************** 2 * 3 * Copyright(c) 2019 - 2021 Realtek Corporation. 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of version 2 of the GNU General Public License as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 * more details. 13 * 14 *****************************************************************************/ 15 #ifndef _RTW_PHL_H_ 16 #define _RTW_PHL_H_ 17 18 typedef struct rtw_phl_com_t HAL_DATA_TYPE; /*, *PHAL_DATA_TYPE;*/ 19 20 #define GET_PHL_INFO(_dvobj) (_dvobj->phl) 21 #define GET_PHL_COM(_dvobj) (_dvobj->phl_com) 22 #define GET_HAL_SPEC(_dvobj) (&(GET_PHL_COM(_dvobj)->hal_spec)) 23 24 25 #define GET_PHY_CAP(_dvobj, _band) (&(GET_PHL_COM(_dvobj))->phy_cap[_band]) 26 /* Using the macro when band info not ready. */ 27 #define GET_PHY_TX_NSS_BY_BAND(_adapter, _band) ((GET_PHY_CAP(_adapter->dvobj, _band))->txss) 28 #define GET_PHY_RX_NSS_BY_BAND(_adapter, _band) ((GET_PHY_CAP(_adapter->dvobj, _band))->rxss) 29 30 #define GET_HAL_RFPATH_NUM(_dvobj) ((GET_PHL_COM(_dvobj))->rf_path_num) 31 /* refer to (hal_data->version_id.RFType / registrypriv->rf_path / 8814a from efuse or registrypriv)*/ 32 #define GET_HAL_RFPATH(_dvobj) ((GET_PHL_COM(_dvobj))->rf_type) 33 34 #define GET_WIFI_ROLE_CURRENT_CH(_adapter) (_adapter->phl_role->chandef.ch) 35 #define WIFI_ROLE_IS_ON_24G(_adapter) (_adapter->phl_role->chandef.band == BAND_ON_24G) 36 #define WIFI_ROLE_IS_ON_5G(_adapter) (_adapter->phl_role->chandef.band == BAND_ON_5G) 37 #define WIFI_ROLE_IS_ON_6G(_adapter) (_adapter->phl_role->chandef.band == BAND_ON_6G) 38 39 #define RTW_LITEXMITBUF_NR 256 40 #define RTW_XMITURB_NR 256 41 #define RTW_LITERECVBUF_NR 8 42 #define RTW_RECVURB_NR 8 43 #define RTW_INTINBUF_NR 1 44 #define RTW_INTINURB_NR 1 45 46 s8 rtw_phl_rssi_to_dbm(u8 rssi); 47 48 void rtw_hw_dump_hal_spec(void *sel, struct dvobj_priv *dvobj); 49 void rtw_dump_phl_sta_info(void *sel, struct sta_info *sta); 50 51 bool rtw_hw_chk_band_cap(struct dvobj_priv *dvobj, u8 cap); 52 bool rtw_hw_chk_bw_cap(struct dvobj_priv *dvobj, u8 cap); 53 bool rtw_hw_chk_proto_cap(struct dvobj_priv *dvobj, u8 cap); 54 bool rtw_hw_chk_wl_func(struct dvobj_priv *dvobj, u8 func); 55 bool rtw_hw_is_band_support(struct dvobj_priv *dvobj, u8 band); 56 bool rtw_hw_is_bw_support(struct dvobj_priv *dvobj, u8 bw); 57 bool rtw_hw_is_wireless_mode_support(struct dvobj_priv *dvobj, u8 mode); 58 u8 rtw_hw_get_wireless_mode(struct dvobj_priv *dvobj); 59 u8 rtw_hw_get_band_type(struct dvobj_priv *dvobj); 60 u8 rtw_hw_get_mac_addr(struct dvobj_priv *dvobj, u8 *hw_mac_addr); 61 62 bool rtw_hw_is_mimo_support(_adapter *adapter); 63 u8 rtw_hw_largest_bw(struct dvobj_priv *dvobj, u8 in_bw); 64 u8 rtw_hw_init(struct dvobj_priv *dvobj); 65 void rtw_hw_deinit(struct dvobj_priv *dvobj); 66 67 68 u8 rtw_hw_start(struct dvobj_priv *dvobj); 69 void rtw_hw_stop(struct dvobj_priv *dvobj); 70 bool rtw_hw_get_init_completed(struct dvobj_priv *dvobj); 71 bool rtw_hw_is_init_completed(struct dvobj_priv *dvobj); 72 void rtw_hw_cap_init(struct dvobj_priv *dvobj); 73 void rtw_dump_rfe_type(struct dvobj_priv *d); 74 75 u8 rtw_hw_iface_init(_adapter *adapter); 76 u8 rtw_hw_iface_type_change(_adapter *adapter, u8 iface_type); 77 void rtw_hw_iface_deinit(_adapter *adapter); 78 79 /* security */ 80 u8 rtw_sec_algo_drv2phl(enum security_type drv_algo); 81 u8 rtw_sec_algo_phl2drv(enum rtw_enc_algo phl_algo); 82 int rtw_hw_add_key(struct _ADAPTER *a, struct sta_info *sta, 83 u8 keyid, enum security_type keyalgo, u8 keytype, u8 *key, 84 u8 spp, enum phl_cmd_type cmd_type, u32 cmd_timeout); 85 int rtw_hw_del_key(struct _ADAPTER *a, struct sta_info *sta, 86 u8 keyid, u8 keytype, enum phl_cmd_type cmd_type, u32 cmd_timeout); 87 int rtw_hw_del_all_key(struct _ADAPTER *a, struct sta_info *sta, 88 enum phl_cmd_type cmd_type, u32 cmd_timeout); 89 90 /* settting */ 91 int rtw_hw_set_ch_bw(struct _ADAPTER *a, 92 u8 ch, enum channel_width bw, u8 offset, u8 do_rfk); 93 int rtw_hw_set_edca(struct _ADAPTER *a, u8 ac, u32 param); 94 95 /* connect */ 96 #ifdef RTW_WKARD_UPDATE_PHL_ROLE_CAP 97 void rtw_update_phl_cap_by_rgstry(struct _ADAPTER *a); 98 #endif 99 void rtw_update_phl_sta_cap(struct _ADAPTER *a, struct sta_info *sta, 100 struct protocol_cap_t *cap); 101 int rtw_hw_prepare_connect(struct _ADAPTER *a, struct sta_info *sta, u8 *target_addr); 102 int rtw_hw_start_bss_network(struct _ADAPTER *a); 103 int rtw_hw_connect_abort(struct _ADAPTER *a, struct sta_info *sta); 104 int rtw_hw_connected(struct _ADAPTER *a, struct sta_info *sta); 105 int rtw_hw_connected_apmode(struct _ADAPTER *a, struct sta_info *sta); 106 int rtw_hw_disconnect(struct _ADAPTER *a, struct sta_info *sta); 107 108 void rtw_hw_update_chan_def(_adapter *adapter); 109 110 #ifdef RTW_DETECT_HANG 111 void rtw_is_hang_check(struct _ADAPTER *a); 112 #endif 113 int rtw_get_sta_tx_stat(_adapter *adapter, struct sta_info *sta); 114 115 #ifdef CONFIG_RTW_ACS 116 u16 rtw_acs_get_channel_by_idx(struct _ADAPTER *a, u8 idx); 117 u8 rtw_acs_get_clm_ratio_by_idx(struct _ADAPTER *a, u8 idx); 118 s8 rtw_noise_query_by_idx(struct _ADAPTER *a, u8 idx); 119 #endif /* CONFIG_RTW_ACS */ 120 121 void rtw_dump_env_rpt(struct _ADAPTER *a, void *sel); 122 123 #ifdef CONFIG_WOWLAN 124 u8 rtw_hw_wow(struct _ADAPTER *a, u8 wow_en); 125 #endif 126 127 #ifdef CONFIG_MCC_MODE 128 u8 rtw_hw_mcc_chk_inprogress(struct _ADAPTER *a); 129 #endif 130 131 void rtw_update_phl_edcca_mode(struct _ADAPTER *a); 132 133 void rtw_dump_phl_tx_power_ext_info(void *sel, _adapter *adapter); 134 135 void rtw_update_phl_txpwr_level(_adapter *adapter); 136 137 u8 get_phy_tx_nss(_adapter *adapter); 138 u8 get_phy_rx_nss(_adapter *adapter); 139 140 #endif /* _RTW_HW_H_ */ 141