drivers/staging/rtl8723bs/hal/hal_btcoex.c
Source file repositories/reference/linux-study-clean/drivers/staging/rtl8723bs/hal/hal_btcoex.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/staging/rtl8723bs/hal/hal_btcoex.c- Extension
.c- Size
- 31771 bytes
- Lines
- 1334
- Domain
- Driver Families
- Bucket
- drivers/staging
- Inferred role
- Driver Families: implementation source
- Status
- source 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.
- 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
hal_data.hhal_btcoex.hMp_Precomp.h
Detected Declarations
function halbtcoutsrc_IsBtCoexistAvailablefunction halbtcoutsrc_LeaveLpsfunction halbtcoutsrc_EnterLpsfunction halbtcoutsrc_NormalLpsfunction halbtcoutsrc_LeaveLowPowerfunction halbtcoutsrc_NormalLowPowerfunction halbtcoutsrc_DisableLowPowerfunction halbtcoutsrc_AggregationCheckfunction halbtcoutsrc_IsWifiBusyfunction _halbtcoutsrc_GetWifiLinkStatusfunction halbtcoutsrc_GetWifiLinkStatusfunction halbtcoutsrc_GetBtPatchVerfunction halbtcoutsrc_GetWifiRssifunction halbtcoutsrc_GetWifiScanAPNumfunction halbtcoutsrc_Getfunction halbtcoutsrc_Setfunction halbtcoutsrc_Read1Bytefunction halbtcoutsrc_Read2Bytefunction halbtcoutsrc_Read4Bytefunction halbtcoutsrc_Write1Bytefunction halbtcoutsrc_BitMaskWrite1Bytefunction halbtcoutsrc_Write2Bytefunction halbtcoutsrc_Write4Bytefunction halbtcoutsrc_WriteLocalReg1Bytefunction halbtcoutsrc_SetBbRegfunction halbtcoutsrc_GetBbRegfunction halbtcoutsrc_SetRfRegfunction halbtcoutsrc_GetRfRegfunction halbtcoutsrc_SetBtRegfunction halbtcoutsrc_GetBtRegfunction halbtcoutsrc_FillH2cCmdfunction EXhalbtcoutsrc_BindBtCoexWithAdapterfunction hal_btcoex_Initializefunction EXhalbtcoutsrc_PowerOnSettingfunction EXhalbtcoutsrc_InitHwConfigfunction EXhalbtcoutsrc_InitCoexDmfunction EXhalbtcoutsrc_IpsNotifyfunction EXhalbtcoutsrc_LpsNotifyfunction EXhalbtcoutsrc_ScanNotifyfunction EXhalbtcoutsrc_ConnectNotifyfunction EXhalbtcoutsrc_MediaStatusNotifyfunction EXhalbtcoutsrc_SpecialPacketNotifyfunction EXhalbtcoutsrc_BtInfoNotifyfunction EXhalbtcoutsrc_HaltNotifyfunction EXhalbtcoutsrc_PnpNotifyfunction EXhalbtcoutsrc_Periodicalfunction EXhalbtcoutsrc_SetAntNumfunction EXhalbtcoutsrc_SetSingleAntPath
Annotated Snippet
if (pBtCoexist->btInfo.bBtCtrlAggBufSize) {
if (pBtCoexist->btInfo.preAggBufSize !=
pBtCoexist->btInfo.aggBufSize){
bNeedToAct = true;
}
pBtCoexist->btInfo.preAggBufSize = pBtCoexist->btInfo.aggBufSize;
}
if (bNeedToAct) {
rtw_btcoex_RejectApAggregatedPacket(padapter, true);
rtw_btcoex_RejectApAggregatedPacket(padapter, false);
}
}
}
static u8 halbtcoutsrc_IsWifiBusy(struct adapter *padapter)
{
struct mlme_priv *pmlmepriv;
pmlmepriv = &padapter->mlmepriv;
if (check_fwstate(pmlmepriv, WIFI_ASOC_STATE) == true) {
if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == true)
return true;
if (pmlmepriv->link_detect_info.busy_traffic)
return true;
}
return false;
}
static u32 _halbtcoutsrc_GetWifiLinkStatus(struct adapter *padapter)
{
struct mlme_priv *pmlmepriv;
u8 bp2p;
u32 portConnectedStatus;
pmlmepriv = &padapter->mlmepriv;
bp2p = false;
portConnectedStatus = 0;
if (check_fwstate(pmlmepriv, WIFI_ASOC_STATE) == true) {
if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == true) {
if (bp2p)
portConnectedStatus |= WIFI_P2P_GO_CONNECTED;
else
portConnectedStatus |= WIFI_AP_CONNECTED;
} else {
if (bp2p)
portConnectedStatus |= WIFI_P2P_GC_CONNECTED;
else
portConnectedStatus |= WIFI_STA_CONNECTED;
}
}
return portConnectedStatus;
}
static u32 halbtcoutsrc_GetWifiLinkStatus(struct btc_coexist *pBtCoexist)
{
/* */
/* return value: */
/* [31:16]=> connected port number */
/* [15:0]=> port connected bit define */
/* */
struct adapter *padapter;
u32 retVal;
u32 portConnectedStatus, numOfConnectedPort;
padapter = pBtCoexist->Adapter;
portConnectedStatus = 0;
numOfConnectedPort = 0;
retVal = _halbtcoutsrc_GetWifiLinkStatus(padapter);
if (retVal) {
portConnectedStatus |= retVal;
numOfConnectedPort++;
}
retVal = (numOfConnectedPort << 16) | portConnectedStatus;
return retVal;
}
static u32 halbtcoutsrc_GetBtPatchVer(struct btc_coexist *pBtCoexist)
{
Annotation
- Immediate include surface: `hal_data.h`, `hal_btcoex.h`, `Mp_Precomp.h`.
- Detected declarations: `function halbtcoutsrc_IsBtCoexistAvailable`, `function halbtcoutsrc_LeaveLps`, `function halbtcoutsrc_EnterLps`, `function halbtcoutsrc_NormalLps`, `function halbtcoutsrc_LeaveLowPower`, `function halbtcoutsrc_NormalLowPower`, `function halbtcoutsrc_DisableLowPower`, `function halbtcoutsrc_AggregationCheck`, `function halbtcoutsrc_IsWifiBusy`, `function _halbtcoutsrc_GetWifiLinkStatus`.
- Atlas domain: Driver Families / drivers/staging.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.