drivers/net/wireless/realtek/rtlwifi/btcoexist/rtl_btc.c

Source file repositories/reference/linux-study-clean/drivers/net/wireless/realtek/rtlwifi/btcoexist/rtl_btc.c

File Facts

System
Linux kernel
Corpus path
drivers/net/wireless/realtek/rtlwifi/btcoexist/rtl_btc.c
Extension
.c
Size
12621 bytes
Lines
522
Domain
Driver Families
Bucket
drivers/net
Inferred role
Driver Families: exported/initcall integration point
Status
integration implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

if (cur_edca_val != edca_bt_hs_uplink) {
			edca_hs = edca_bt_hs_uplink;
			bt_change_edca = true;
		}
	} else {
		if (cur_edca_val != edca_bt_hs_downlink) {
			edca_hs = edca_bt_hs_downlink;
			bt_change_edca = true;
		}
	}

	if (bt_change_edca)
		rtl_write_dword(rtlpriv, edca_addr, edca_hs);

	return true;
}

bool rtl_btc_is_bt_disabled(struct rtl_priv *rtlpriv)
{
	struct btc_coexist *btcoexist = rtl_btc_coexist(rtlpriv);

	if (!btcoexist)
		return true;

	/* It seems 'bt_disabled' is never be initialized or set. */
	if (btcoexist->bt_info.bt_disabled)
		return true;
	else
		return false;
}

void rtl_btc_special_packet_notify(struct rtl_priv *rtlpriv, u8 pkt_type)
{
	struct btc_coexist *btcoexist = rtl_btc_coexist(rtlpriv);

	if (!btcoexist)
		return;

	return exhalbtc_special_packet_notify(btcoexist, pkt_type);
}

void rtl_btc_switch_band_notify(struct rtl_priv *rtlpriv, u8 band_type,
				bool scanning)
{
	struct btc_coexist *btcoexist = rtl_btc_coexist(rtlpriv);
	u8 type = BTC_NOT_SWITCH;

	if (!btcoexist)
		return;

	switch (band_type) {
	case BAND_ON_2_4G:
		if (scanning)
			type = BTC_SWITCH_TO_24G;
		else
			type = BTC_SWITCH_TO_24G_NOFORSCAN;
		break;

	case BAND_ON_5G:
		type = BTC_SWITCH_TO_5G;
		break;
	}

	if (type != BTC_NOT_SWITCH)
		exhalbtc_switch_band_notify(btcoexist, type);
}

void rtl_btc_switch_band_notify_wifionly(struct rtl_priv *rtlpriv, u8 band_type,
					 bool scanning)
{
	struct wifi_only_cfg *wifionly_cfg = rtl_btc_wifi_only(rtlpriv);
	u8 is_5g = (band_type == BAND_ON_5G);

	if (!wifionly_cfg)
		return;

	exhalbtc_switch_band_notify_wifi_only(wifionly_cfg, is_5g);
}

struct rtl_btc_ops *rtl_btc_get_ops_pointer(void)
{
	return &rtl_btc_operation;
}
EXPORT_SYMBOL(rtl_btc_get_ops_pointer);


enum rt_media_status mgnt_link_status_query(struct ieee80211_hw *hw)
{
	struct rtl_priv *rtlpriv = rtl_priv(hw);
	struct rtl_mac *mac = rtl_mac(rtl_priv(hw));

Annotation

Implementation Notes