drivers/staging/rtl8723bs/core/rtw_cmd.c
Source file repositories/reference/linux-study-clean/drivers/staging/rtl8723bs/core/rtw_cmd.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/staging/rtl8723bs/core/rtw_cmd.c- Extension
.c- Size
- 51920 bytes
- Lines
- 1932
- 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.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
drv_types.hhal_btcoex.hlinux/jiffies.hlinux/align.hlinux/delay.h
Detected Declarations
struct btinfofunction rtw_init_cmd_privfunction rtw_init_evt_privfunction _rtw_free_evt_privfunction _rtw_free_cmd_privfunction _rtw_enqueue_cmdfunction rtw_free_evt_privfunction rtw_free_cmd_privfunction rtw_cmd_filterfunction rtw_enqueue_cmdfunction rtw_free_cmd_objfunction rtw_stop_cmd_threadfunction rtw_cmd_threadfunction rtw_sitesurvey_cmdfunction rtw_getbbrfreg_cmdrsp_callbackfunction rtw_createbss_cmdfunction rtw_startbss_cmdfunction rtw_joinbss_cmdfunction rtw_setopmode_cmdfunction rtw_setstakey_cmdfunction rtw_clearstakey_cmdfunction rtw_addbareq_cmdfunction rtw_reset_securitypriv_cmdfunction rtw_free_assoc_resources_cmdfunction rtw_dynamic_chk_wk_cmdfunction collect_traffic_statisticsfunction traffic_status_watchdogfunction dynamic_chk_wk_hdlfunction lps_ctrl_wk_hdlfunction rtw_lps_ctrl_wk_cmdfunction rtw_dm_in_lps_hdlfunction rtw_dm_in_lps_wk_cmdfunction rtw_lps_change_dtim_hdlfunction rtw_dm_ra_mask_hdlfunction rtw_dm_ra_mask_wk_cmdfunction rtw_ps_cmdfunction rtw_chk_hi_queue_hdlfunction rtw_chk_hi_queue_cmdfunction rtw_btinfo_hdlfunction rtw_c2h_packet_wk_cmdfunction rtw_c2h_wk_cmdfunction c2h_wk_callbackfunction rtw_drvextra_cmd_hdlfunction rtw_survey_cmd_callbackfunction rtw_disassoc_cmd_callbackfunction rtw_joinbss_cmd_callbackfunction rtw_createbss_cmd_callbackfunction rtw_setstaKey_cmdrsp_callback
Annotated Snippet
struct btinfo {
u8 cid;
u8 len;
u8 bConnection:1;
u8 bSCOeSCO:1;
u8 bInQPage:1;
u8 bACLBusy:1;
u8 bSCOBusy:1;
u8 bHID:1;
u8 bA2DP:1;
u8 bFTP:1;
u8 retry_cnt:4;
u8 rsvd_34:1;
u8 rsvd_35:1;
u8 rsvd_36:1;
u8 rsvd_37:1;
u8 rssi;
u8 rsvd_50:1;
u8 rsvd_51:1;
u8 rsvd_52:1;
u8 rsvd_53:1;
u8 rsvd_54:1;
u8 rsvd_55:1;
u8 eSCO_SCO:1;
u8 Master_Slave:1;
u8 rsvd_6;
u8 rsvd_7;
};
static void rtw_btinfo_hdl(struct adapter *adapter, u8 *buf, u16 buf_len)
{
#define BTINFO_WIFI_FETCH 0x23
#define BTINFO_BT_AUTO_RPT 0x27
struct btinfo *info = (struct btinfo *)buf;
u8 cmd_idx;
u8 len;
cmd_idx = info->cid;
if (info->len > buf_len - 2) {
rtw_warn_on(1);
len = buf_len - 2;
} else {
len = info->len;
}
/* transform BT-FW btinfo to WiFI-FW C2H format and notify */
if (cmd_idx == BTINFO_WIFI_FETCH)
buf[1] = 0;
else if (cmd_idx == BTINFO_BT_AUTO_RPT)
buf[1] = 2;
hal_btcoex_BtInfoNotify(adapter, len + 1, &buf[1]);
}
u8 rtw_c2h_packet_wk_cmd(struct adapter *padapter, u8 *pbuf, u16 length)
{
struct cmd_obj *ph2c;
struct drvextra_cmd_parm *pdrvextra_cmd_parm;
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
u8 res = _SUCCESS;
ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
if (!ph2c) {
res = _FAIL;
goto exit;
}
pdrvextra_cmd_parm = kzalloc_obj(*pdrvextra_cmd_parm, GFP_ATOMIC);
if (!pdrvextra_cmd_parm) {
kfree(ph2c);
res = _FAIL;
goto exit;
}
pdrvextra_cmd_parm->ec_id = C2H_WK_CID;
pdrvextra_cmd_parm->type = 0;
pdrvextra_cmd_parm->size = length;
pdrvextra_cmd_parm->pbuf = pbuf;
init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
res = rtw_enqueue_cmd(pcmdpriv, ph2c);
exit:
return res;
Annotation
- Immediate include surface: `drv_types.h`, `hal_btcoex.h`, `linux/jiffies.h`, `linux/align.h`, `linux/delay.h`.
- Detected declarations: `struct btinfo`, `function rtw_init_cmd_priv`, `function rtw_init_evt_priv`, `function _rtw_free_evt_priv`, `function _rtw_free_cmd_priv`, `function _rtw_enqueue_cmd`, `function rtw_free_evt_priv`, `function rtw_free_cmd_priv`, `function rtw_cmd_filter`, `function rtw_enqueue_cmd`.
- Atlas domain: Driver Families / drivers/staging.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
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.