#include <linux/ip.h>
#include <linux/udp.h>
#include "cam.h"
#include "chan.h"
#include "coex.h"
#include "core.h"
#include "efuse.h"
#include "fw.h"
#include "mac.h"
#include "phy.h"
#include "ps.h"
#include "reg.h"
#include "sar.h"
#include "ser.h"
#include "txrx.h"
#include "util.h"
#include "wow.h"
static bool rtw89_disable_ps_mode;
module_param_named(disable_ps_mode, rtw89_disable_ps_mode, bool, 0644);
MODULE_PARM_DESC(…) …;
#define RTW89_DEF_CHAN(_freq, _hw_val, _flags, _band) …
#define RTW89_DEF_CHAN_2G(_freq, _hw_val) …
#define RTW89_DEF_CHAN_5G(_freq, _hw_val) …
#define RTW89_DEF_CHAN_5G_NO_HT40MINUS(_freq, _hw_val) …
#define RTW89_DEF_CHAN_6G(_freq, _hw_val) …
static struct ieee80211_channel rtw89_channels_2ghz[] = …;
static struct ieee80211_channel rtw89_channels_5ghz[] = …;
static_assert(…);
static struct ieee80211_channel rtw89_channels_6ghz[] = …;
static struct ieee80211_rate rtw89_bitrates[] = …;
static const struct ieee80211_iface_limit rtw89_iface_limits[] = …;
static const struct ieee80211_iface_limit rtw89_iface_limits_mcc[] = …;
static const struct ieee80211_iface_combination rtw89_iface_combs[] = …;
bool rtw89_ra_report_to_bitrate(struct rtw89_dev *rtwdev, u8 rpt_rate, u16 *bitrate)
{ … }
static const struct ieee80211_supported_band rtw89_sband_2ghz = …;
static const struct ieee80211_supported_band rtw89_sband_5ghz = …;
static const struct ieee80211_supported_band rtw89_sband_6ghz = …;
static void rtw89_traffic_stats_accu(struct rtw89_dev *rtwdev,
struct rtw89_traffic_stats *stats,
struct sk_buff *skb, bool tx)
{ … }
void rtw89_get_default_chandef(struct cfg80211_chan_def *chandef)
{ … }
void rtw89_get_channel_params(const struct cfg80211_chan_def *chandef,
struct rtw89_chan *chan)
{ … }
void rtw89_core_set_chip_txpwr(struct rtw89_dev *rtwdev)
{ … }
int rtw89_set_channel(struct rtw89_dev *rtwdev)
{ … }
void rtw89_get_channel(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,
struct rtw89_chan *chan)
{ … }
static enum rtw89_core_tx_type
rtw89_core_get_tx_type(struct rtw89_dev *rtwdev,
struct sk_buff *skb)
{ … }
static void
rtw89_core_tx_update_ampdu_info(struct rtw89_dev *rtwdev,
struct rtw89_core_tx_request *tx_req,
enum btc_pkt_type pkt_type)
{ … }
static void
rtw89_core_tx_update_sec_key(struct rtw89_dev *rtwdev,
struct rtw89_core_tx_request *tx_req)
{ … }
static u16 rtw89_core_get_mgmt_rate(struct rtw89_dev *rtwdev,
struct rtw89_core_tx_request *tx_req,
const struct rtw89_chan *chan)
{ … }
static u8 rtw89_core_tx_get_mac_id(struct rtw89_dev *rtwdev,
struct rtw89_core_tx_request *tx_req)
{ … }
static void rtw89_core_tx_update_llc_hdr(struct rtw89_dev *rtwdev,
struct rtw89_tx_desc_info *desc_info,
struct sk_buff *skb)
{ … }
static void
rtw89_core_tx_update_mgmt_info(struct rtw89_dev *rtwdev,
struct rtw89_core_tx_request *tx_req)
{ … }
static void
rtw89_core_tx_update_h2c_info(struct rtw89_dev *rtwdev,
struct rtw89_core_tx_request *tx_req)
{ … }
static void rtw89_core_get_no_ul_ofdma_htc(struct rtw89_dev *rtwdev, __le32 *htc,
const struct rtw89_chan *chan)
{ … }
static bool
__rtw89_core_tx_check_he_qos_htc(struct rtw89_dev *rtwdev,
struct rtw89_core_tx_request *tx_req,
enum btc_pkt_type pkt_type)
{ … }
static void
__rtw89_core_tx_adjust_he_qos_htc(struct rtw89_dev *rtwdev,
struct rtw89_core_tx_request *tx_req)
{ … }
static void
rtw89_core_tx_update_he_qos_htc(struct rtw89_dev *rtwdev,
struct rtw89_core_tx_request *tx_req,
enum btc_pkt_type pkt_type)
{ … }
static u16 rtw89_core_get_data_rate(struct rtw89_dev *rtwdev,
struct rtw89_core_tx_request *tx_req)
{ … }
static void
rtw89_core_tx_update_data_info(struct rtw89_dev *rtwdev,
struct rtw89_core_tx_request *tx_req)
{ … }
static enum btc_pkt_type
rtw89_core_tx_btc_spec_pkt_notify(struct rtw89_dev *rtwdev,
struct rtw89_core_tx_request *tx_req)
{ … }
static void
rtw89_core_tx_wake(struct rtw89_dev *rtwdev,
struct rtw89_core_tx_request *tx_req)
{ … }
static void
rtw89_core_tx_update_desc_info(struct rtw89_dev *rtwdev,
struct rtw89_core_tx_request *tx_req)
{ … }
void rtw89_core_tx_kick_off(struct rtw89_dev *rtwdev, u8 qsel)
{ … }
int rtw89_core_tx_kick_off_and_wait(struct rtw89_dev *rtwdev, struct sk_buff *skb,
int qsel, unsigned int timeout)
{ … }
int rtw89_h2c_tx(struct rtw89_dev *rtwdev,
struct sk_buff *skb, bool fwdl)
{ … }
int rtw89_core_tx_write(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
struct ieee80211_sta *sta, struct sk_buff *skb, int *qsel)
{ … }
static __le32 rtw89_build_txwd_body0(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_body0_v1(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_body1_v1(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_body2(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_body3(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_body4(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_body5(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_body7_v1(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_info0(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_info0_v1(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_info1(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_info2(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_info2_v1(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_info4(struct rtw89_tx_desc_info *desc_info)
{ … }
void rtw89_core_fill_txdesc(struct rtw89_dev *rtwdev,
struct rtw89_tx_desc_info *desc_info,
void *txdesc)
{ … }
EXPORT_SYMBOL(…);
void rtw89_core_fill_txdesc_v1(struct rtw89_dev *rtwdev,
struct rtw89_tx_desc_info *desc_info,
void *txdesc)
{ … }
EXPORT_SYMBOL(…);
static __le32 rtw89_build_txwd_body0_v2(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_body1_v2(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_body2_v2(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_body3_v2(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_body4_v2(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_body5_v2(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_body7_v2(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_info0_v2(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_info1_v2(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_info2_v2(struct rtw89_tx_desc_info *desc_info)
{ … }
static __le32 rtw89_build_txwd_info4_v2(struct rtw89_tx_desc_info *desc_info)
{ … }
void rtw89_core_fill_txdesc_v2(struct rtw89_dev *rtwdev,
struct rtw89_tx_desc_info *desc_info,
void *txdesc)
{ … }
EXPORT_SYMBOL(…);
static __le32 rtw89_build_txwd_fwcmd0_v1(struct rtw89_tx_desc_info *desc_info)
{ … }
void rtw89_core_fill_txdesc_fwcmd_v1(struct rtw89_dev *rtwdev,
struct rtw89_tx_desc_info *desc_info,
void *txdesc)
{ … }
EXPORT_SYMBOL(…);
static __le32 rtw89_build_txwd_fwcmd0_v2(struct rtw89_tx_desc_info *desc_info)
{ … }
void rtw89_core_fill_txdesc_fwcmd_v2(struct rtw89_dev *rtwdev,
struct rtw89_tx_desc_info *desc_info,
void *txdesc)
{ … }
EXPORT_SYMBOL(…);
static int rtw89_core_rx_process_mac_ppdu(struct rtw89_dev *rtwdev,
struct sk_buff *skb,
struct rtw89_rx_phy_ppdu *phy_ppdu)
{ … }
static u8 rtw89_get_data_rate_nss(struct rtw89_dev *rtwdev, u16 data_rate)
{ … }
static void rtw89_core_rx_process_phy_ppdu_iter(void *data,
struct ieee80211_sta *sta)
{ … }
#define VAR_LEN …
#define VAR_LEN_UNIT …
static u16 rtw89_core_get_phy_status_ie_len(struct rtw89_dev *rtwdev,
const struct rtw89_phy_sts_iehdr *iehdr)
{ … }
static void rtw89_core_parse_phy_status_ie01_v2(struct rtw89_dev *rtwdev,
const struct rtw89_phy_sts_iehdr *iehdr,
struct rtw89_rx_phy_ppdu *phy_ppdu)
{ … }
static void rtw89_core_parse_phy_status_ie01(struct rtw89_dev *rtwdev,
const struct rtw89_phy_sts_iehdr *iehdr,
struct rtw89_rx_phy_ppdu *phy_ppdu)
{ … }
static void rtw89_core_parse_phy_status_ie00(struct rtw89_dev *rtwdev,
const struct rtw89_phy_sts_iehdr *iehdr,
struct rtw89_rx_phy_ppdu *phy_ppdu)
{ … }
static void rtw89_core_parse_phy_status_ie00_v2(struct rtw89_dev *rtwdev,
const struct rtw89_phy_sts_iehdr *iehdr,
struct rtw89_rx_phy_ppdu *phy_ppdu)
{ … }
static int rtw89_core_process_phy_status_ie(struct rtw89_dev *rtwdev,
const struct rtw89_phy_sts_iehdr *iehdr,
struct rtw89_rx_phy_ppdu *phy_ppdu)
{ … }
static void rtw89_core_update_phy_ppdu_hdr_v2(struct rtw89_rx_phy_ppdu *phy_ppdu)
{ … }
static void rtw89_core_update_phy_ppdu(struct rtw89_rx_phy_ppdu *phy_ppdu)
{ … }
static int rtw89_core_rx_process_phy_ppdu(struct rtw89_dev *rtwdev,
struct rtw89_rx_phy_ppdu *phy_ppdu)
{ … }
static int rtw89_core_rx_parse_phy_sts(struct rtw89_dev *rtwdev,
struct rtw89_rx_phy_ppdu *phy_ppdu)
{ … }
static void rtw89_core_rx_process_phy_sts(struct rtw89_dev *rtwdev,
struct rtw89_rx_phy_ppdu *phy_ppdu)
{ … }
static u8 rtw89_rxdesc_to_nl_he_eht_gi(struct rtw89_dev *rtwdev,
u8 desc_info_gi,
bool rx_status, bool eht)
{ … }
static
bool rtw89_check_rx_statu_gi_match(struct ieee80211_rx_status *status, u8 gi_ltf,
bool eht)
{ … }
static bool rtw89_core_rx_ppdu_match(struct rtw89_dev *rtwdev,
struct rtw89_rx_desc_info *desc_info,
struct ieee80211_rx_status *status)
{ … }
struct rtw89_vif_rx_stats_iter_data { … };
static void rtw89_stats_trigger_frame(struct rtw89_dev *rtwdev,
struct ieee80211_vif *vif,
struct sk_buff *skb)
{ … }
static void rtw89_cancel_6ghz_probe_work(struct work_struct *work)
{ … }
static void rtw89_core_cancel_6ghz_probe_tx(struct rtw89_dev *rtwdev,
struct sk_buff *skb)
{ … }
static void rtw89_vif_sync_bcn_tsf(struct rtw89_vif *rtwvif,
struct ieee80211_hdr *hdr, size_t len)
{ … }
static void rtw89_vif_rx_stats_iter(void *data, u8 *mac,
struct ieee80211_vif *vif)
{ … }
static void rtw89_core_rx_stats(struct rtw89_dev *rtwdev,
struct rtw89_rx_phy_ppdu *phy_ppdu,
struct rtw89_rx_desc_info *desc_info,
struct sk_buff *skb)
{ … }
static void rtw89_correct_cck_chan(struct rtw89_dev *rtwdev,
struct ieee80211_rx_status *status)
{ … }
static void rtw89_core_hw_to_sband_rate(struct ieee80211_rx_status *rx_status)
{ … }
static
void rtw89_core_update_rx_status_by_ppdu(struct rtw89_dev *rtwdev,
struct ieee80211_rx_status *rx_status,
struct rtw89_rx_phy_ppdu *phy_ppdu)
{ … }
static const u8 rx_status_bw_to_radiotap_eht_usig[] = …;
static void rtw89_core_update_radiotap_eht(struct rtw89_dev *rtwdev,
struct sk_buff *skb,
struct ieee80211_rx_status *rx_status)
{ … }
static void rtw89_core_update_radiotap(struct rtw89_dev *rtwdev,
struct sk_buff *skb,
struct ieee80211_rx_status *rx_status)
{ … }
static void rtw89_core_rx_to_mac80211(struct rtw89_dev *rtwdev,
struct rtw89_rx_phy_ppdu *phy_ppdu,
struct rtw89_rx_desc_info *desc_info,
struct sk_buff *skb_ppdu,
struct ieee80211_rx_status *rx_status)
{ … }
static void rtw89_core_rx_pending_skb(struct rtw89_dev *rtwdev,
struct rtw89_rx_phy_ppdu *phy_ppdu,
struct rtw89_rx_desc_info *desc_info,
struct sk_buff *skb)
{ … }
static void rtw89_core_rx_process_ppdu_sts(struct rtw89_dev *rtwdev,
struct rtw89_rx_desc_info *desc_info,
struct sk_buff *skb)
{ … }
static void rtw89_core_rx_process_report(struct rtw89_dev *rtwdev,
struct rtw89_rx_desc_info *desc_info,
struct sk_buff *skb)
{ … }
void rtw89_core_query_rxdesc(struct rtw89_dev *rtwdev,
struct rtw89_rx_desc_info *desc_info,
u8 *data, u32 data_offset)
{ … }
EXPORT_SYMBOL(…);
void rtw89_core_query_rxdesc_v2(struct rtw89_dev *rtwdev,
struct rtw89_rx_desc_info *desc_info,
u8 *data, u32 data_offset)
{ … }
EXPORT_SYMBOL(…);
struct rtw89_core_iter_rx_status { … };
static
void rtw89_core_stats_sta_rx_status_iter(void *data, struct ieee80211_sta *sta)
{ … }
static void rtw89_core_stats_sta_rx_status(struct rtw89_dev *rtwdev,
struct rtw89_rx_desc_info *desc_info,
struct ieee80211_rx_status *rx_status)
{ … }
static void rtw89_core_update_rx_status(struct rtw89_dev *rtwdev,
struct rtw89_rx_desc_info *desc_info,
struct ieee80211_rx_status *rx_status)
{ … }
static enum rtw89_ps_mode rtw89_update_ps_mode(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_core_flush_ppdu_rx_queue(struct rtw89_dev *rtwdev,
struct rtw89_rx_desc_info *desc_info)
{ … }
void rtw89_core_rx(struct rtw89_dev *rtwdev,
struct rtw89_rx_desc_info *desc_info,
struct sk_buff *skb)
{ … }
EXPORT_SYMBOL(…);
void rtw89_core_napi_start(struct rtw89_dev *rtwdev)
{ … }
EXPORT_SYMBOL(…);
void rtw89_core_napi_stop(struct rtw89_dev *rtwdev)
{ … }
EXPORT_SYMBOL(…);
int rtw89_core_napi_init(struct rtw89_dev *rtwdev)
{ … }
EXPORT_SYMBOL(…);
void rtw89_core_napi_deinit(struct rtw89_dev *rtwdev)
{ … }
EXPORT_SYMBOL(…);
static void rtw89_core_ba_work(struct work_struct *work)
{ … }
static void rtw89_core_free_sta_pending_ba(struct rtw89_dev *rtwdev,
struct ieee80211_sta *sta)
{ … }
static void rtw89_core_free_sta_pending_forbid_ba(struct rtw89_dev *rtwdev,
struct ieee80211_sta *sta)
{ … }
static void rtw89_core_free_sta_pending_roc_tx(struct rtw89_dev *rtwdev,
struct ieee80211_sta *sta)
{ … }
static void rtw89_core_stop_tx_ba_session(struct rtw89_dev *rtwdev,
struct rtw89_txq *rtwtxq)
{ … }
static void rtw89_core_txq_check_agg(struct rtw89_dev *rtwdev,
struct rtw89_txq *rtwtxq,
struct sk_buff *skb)
{ … }
static void rtw89_core_txq_push(struct rtw89_dev *rtwdev,
struct rtw89_txq *rtwtxq,
unsigned long frame_cnt,
unsigned long byte_cnt)
{ … }
static u32 rtw89_check_and_reclaim_tx_resource(struct rtw89_dev *rtwdev, u8 tid)
{ … }
static bool rtw89_core_txq_agg_wait(struct rtw89_dev *rtwdev,
struct ieee80211_txq *txq,
unsigned long *frame_cnt,
bool *sched_txq, bool *reinvoke)
{ … }
static void rtw89_core_txq_schedule(struct rtw89_dev *rtwdev, u8 ac, bool *reinvoke)
{ … }
static void rtw89_ips_work(struct work_struct *work)
{ … }
static void rtw89_core_txq_work(struct work_struct *w)
{ … }
static void rtw89_core_txq_reinvoke_work(struct work_struct *w)
{ … }
static void rtw89_forbid_ba_work(struct work_struct *w)
{ … }
static void rtw89_core_sta_pending_tx_iter(void *data,
struct ieee80211_sta *sta)
{ … }
static void rtw89_core_handle_sta_pending_tx(struct rtw89_dev *rtwdev,
struct rtw89_vif *rtwvif)
{ … }
static int rtw89_core_send_nullfunc(struct rtw89_dev *rtwdev,
struct rtw89_vif *rtwvif, bool qos, bool ps)
{ … }
void rtw89_roc_start(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
{ … }
void rtw89_roc_end(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
{ … }
void rtw89_roc_work(struct work_struct *work)
{ … }
static enum rtw89_tfc_lv rtw89_get_traffic_level(struct rtw89_dev *rtwdev,
u32 throughput, u64 cnt)
{ … }
static bool rtw89_traffic_stats_calc(struct rtw89_dev *rtwdev,
struct rtw89_traffic_stats *stats)
{ … }
static bool rtw89_traffic_stats_track(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_vif_enter_lps(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
{ … }
static void rtw89_enter_lps_track(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_core_rfk_track(struct rtw89_dev *rtwdev)
{ … }
void rtw89_core_update_p2p_ps(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif)
{ … }
void rtw89_traffic_stats_init(struct rtw89_dev *rtwdev,
struct rtw89_traffic_stats *stats)
{ … }
static void rtw89_track_work(struct work_struct *work)
{ … }
u8 rtw89_core_acquire_bit_map(unsigned long *addr, unsigned long size)
{ … }
void rtw89_core_release_bit_map(unsigned long *addr, u8 bit)
{ … }
void rtw89_core_release_all_bits_map(unsigned long *addr, unsigned int nbits)
{ … }
int rtw89_core_acquire_sta_ba_entry(struct rtw89_dev *rtwdev,
struct rtw89_sta *rtwsta, u8 tid, u8 *cam_idx)
{ … }
int rtw89_core_release_sta_ba_entry(struct rtw89_dev *rtwdev,
struct rtw89_sta *rtwsta, u8 tid, u8 *cam_idx)
{ … }
#define RTW89_TYPE_MAPPING(_type) …
void rtw89_vif_type_mapping(struct ieee80211_vif *vif, bool assoc)
{ … }
int rtw89_core_sta_add(struct rtw89_dev *rtwdev,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta)
{ … }
int rtw89_core_sta_disassoc(struct rtw89_dev *rtwdev,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta)
{ … }
int rtw89_core_sta_disconnect(struct rtw89_dev *rtwdev,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta)
{ … }
int rtw89_core_sta_assoc(struct rtw89_dev *rtwdev,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta)
{ … }
int rtw89_core_sta_remove(struct rtw89_dev *rtwdev,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta)
{ … }
static void _rtw89_core_set_tid_config(struct rtw89_dev *rtwdev,
struct ieee80211_sta *sta,
struct cfg80211_tid_cfg *tid_conf)
{ … }
void rtw89_core_set_tid_config(struct rtw89_dev *rtwdev,
struct ieee80211_sta *sta,
struct cfg80211_tid_config *tid_config)
{ … }
static void rtw89_init_ht_cap(struct rtw89_dev *rtwdev,
struct ieee80211_sta_ht_cap *ht_cap)
{ … }
static void rtw89_init_vht_cap(struct rtw89_dev *rtwdev,
struct ieee80211_sta_vht_cap *vht_cap)
{ … }
static void rtw89_init_he_cap(struct rtw89_dev *rtwdev,
enum nl80211_band band,
enum nl80211_iftype iftype,
struct ieee80211_sband_iftype_data *iftype_data)
{ … }
static void rtw89_init_eht_cap(struct rtw89_dev *rtwdev,
enum nl80211_band band,
enum nl80211_iftype iftype,
struct ieee80211_sband_iftype_data *iftype_data)
{ … }
#define RTW89_SBAND_IFTYPES_NR …
static void rtw89_init_he_eht_cap(struct rtw89_dev *rtwdev,
enum nl80211_band band,
struct ieee80211_supported_band *sband)
{ … }
static int rtw89_core_set_supported_band(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_core_clr_supported_band(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_core_ppdu_sts_init(struct rtw89_dev *rtwdev)
{ … }
void rtw89_core_update_beacon_work(struct work_struct *work)
{ … }
int rtw89_wait_for_cond(struct rtw89_wait_info *wait, unsigned int cond)
{ … }
void rtw89_complete_cond(struct rtw89_wait_info *wait, unsigned int cond,
const struct rtw89_completion_data *data)
{ … }
void rtw89_core_ntfy_btc_event(struct rtw89_dev *rtwdev, enum rtw89_btc_hmsg event)
{ … }
void rtw89_check_quirks(struct rtw89_dev *rtwdev, const struct dmi_system_id *quirks)
{ … }
EXPORT_SYMBOL(…);
int rtw89_core_start(struct rtw89_dev *rtwdev)
{ … }
void rtw89_core_stop(struct rtw89_dev *rtwdev)
{ … }
u8 rtw89_acquire_mac_id(struct rtw89_dev *rtwdev)
{ … }
void rtw89_release_mac_id(struct rtw89_dev *rtwdev, u8 mac_id)
{ … }
int rtw89_core_init(struct rtw89_dev *rtwdev)
{ … }
EXPORT_SYMBOL(…);
void rtw89_core_deinit(struct rtw89_dev *rtwdev)
{ … }
EXPORT_SYMBOL(…);
void rtw89_core_scan_start(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,
const u8 *mac_addr, bool hw_scan)
{ … }
void rtw89_core_scan_complete(struct rtw89_dev *rtwdev,
struct ieee80211_vif *vif, bool hw_scan)
{ … }
static void rtw89_read_chip_ver(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_core_setup_phycap(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_core_setup_rfe_parms(struct rtw89_dev *rtwdev)
{ … }
static int rtw89_chip_efuse_info_setup(struct rtw89_dev *rtwdev)
{ … }
static int rtw89_chip_board_info_setup(struct rtw89_dev *rtwdev)
{ … }
static bool rtw89_chip_has_rfkill(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_core_rfkill_init(struct rtw89_dev *rtwdev)
{ … }
static bool rtw89_core_rfkill_get(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_rfkill_polling_init(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_rfkill_polling_deinit(struct rtw89_dev *rtwdev)
{ … }
void rtw89_core_rfkill_poll(struct rtw89_dev *rtwdev, bool force)
{ … }
int rtw89_chip_info_setup(struct rtw89_dev *rtwdev)
{ … }
EXPORT_SYMBOL(…);
static int rtw89_core_register_hw(struct rtw89_dev *rtwdev)
{ … }
static void rtw89_core_unregister_hw(struct rtw89_dev *rtwdev)
{ … }
int rtw89_core_register(struct rtw89_dev *rtwdev)
{ … }
EXPORT_SYMBOL(…);
void rtw89_core_unregister(struct rtw89_dev *rtwdev)
{ … }
EXPORT_SYMBOL(…);
struct rtw89_dev *rtw89_alloc_ieee80211_hw(struct device *device,
u32 bus_data_size,
const struct rtw89_chip_info *chip)
{ … }
EXPORT_SYMBOL(…);
void rtw89_free_ieee80211_hw(struct rtw89_dev *rtwdev)
{ … }
EXPORT_SYMBOL(…);
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;