drivers/staging/rtl8723bs/core/rtw_xmit.c
Source file repositories/reference/linux-study-clean/drivers/staging/rtl8723bs/core/rtw_xmit.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/staging/rtl8723bs/core/rtw_xmit.c- Extension
.c- Size
- 64520 bytes
- Lines
- 2599
- 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.hlinux/delay.hlinux/if_ether.h
Detected Declarations
function _init_txservqfunction _rtw_init_sta_xmit_privfunction _rtw_init_xmit_privfunction _rtw_free_xmit_privfunction query_ra_short_GIfunction update_attrib_vcs_infofunction update_attrib_phy_infofunction update_attrib_sec_infofunction qos_acmfunction set_qosfunction update_attribfunction xmitframe_addmicfunction xmitframe_swencryptfunction rtw_make_wlanhdrfunction rtw_txframes_pendingfunction rtw_calculate_wlan_pkt_size_by_attribuefunction rtw_xmitframe_coalescefunction rtw_mgmt_xmitframe_coalescefunction Identifierfunction rtw_update_protectionfunction rtw_count_tx_statsfunction rtw_free_xmitbuf_extfunction rtw_free_xmitbuffunction rtw_init_xmitframefunction rtw_free_xmitframefunction rtw_free_xmitframe_queuefunction rtw_xmitframe_enqueuefunction rtw_xmit_classifierfunction rtw_alloc_hwxmitsfunction rtw_free_hwxmitsfunction rtw_init_hwxmitsfunction rtw_get_ff_hwaddrfunction do_queue_selectfunction transmitfunction xmitframe_hiq_filterfunction xmitframe_enqueue_for_sleeping_stafunction dequeue_xmitframes_to_sleeping_queuefunction stop_sta_xmitfunction wakeup_sta_to_xmitfunction list_for_each_safefunction xmit_delivery_enabled_framesfunction enqueue_pending_xmitbuffunction enqueue_pending_xmitbuf_to_headfunction check_pending_xmitbuffunction rtw_xmit_threadfunction rtw_sctx_initfunction rtw_sctx_waitfunction rtw_sctx_done_err
Annotated Snippet
if (res == _FAIL) {
fsleep(10 * USEC_PER_MSEC);
res = rtw_os_xmit_resource_alloc(padapter, pxmitbuf, (MAX_XMITBUF_SZ + XMITBUF_ALIGN_SZ), true);
if (res == _FAIL)
goto exit;
}
pxmitbuf->phead = pxmitbuf->pbuf;
pxmitbuf->pend = pxmitbuf->pbuf + MAX_XMITBUF_SZ;
pxmitbuf->len = 0;
pxmitbuf->pdata = pxmitbuf->ptail = pxmitbuf->phead;
pxmitbuf->flags = XMIT_VO_QUEUE;
list_add_tail(&pxmitbuf->list,
&pxmitpriv->free_xmitbuf_queue.queue);
#ifdef DBG_XMIT_BUF
pxmitbuf->no = i;
#endif
pxmitbuf++;
}
pxmitpriv->free_xmitbuf_cnt = NR_XMITBUFF;
/* init xframe_ext queue, the same count as extbuf */
INIT_LIST_HEAD(&pxmitpriv->free_xframe_ext_queue.queue);
spin_lock_init(&pxmitpriv->free_xframe_ext_queue.lock);
pxmitpriv->xframe_ext_alloc_addr = vzalloc(NR_XMIT_EXTBUFF * sizeof(struct xmit_frame) + 4);
if (!pxmitpriv->xframe_ext_alloc_addr) {
pxmitpriv->xframe_ext = NULL;
res = _FAIL;
goto exit;
}
pxmitpriv->xframe_ext = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pxmitpriv->xframe_ext_alloc_addr), 4);
pxframe = (struct xmit_frame *)pxmitpriv->xframe_ext;
for (i = 0; i < NR_XMIT_EXTBUFF; i++) {
INIT_LIST_HEAD(&pxframe->list);
pxframe->padapter = padapter;
pxframe->frame_tag = NULL_FRAMETAG;
pxframe->pkt = NULL;
pxframe->buf_addr = NULL;
pxframe->pxmitbuf = NULL;
pxframe->ext_tag = 1;
list_add_tail(&pxframe->list,
&pxmitpriv->free_xframe_ext_queue.queue);
pxframe++;
}
pxmitpriv->free_xframe_ext_cnt = NR_XMIT_EXTBUFF;
/* Init xmit extension buff */
INIT_LIST_HEAD(&pxmitpriv->free_xmit_extbuf_queue.queue);
spin_lock_init(&pxmitpriv->free_xmit_extbuf_queue.lock);
pxmitpriv->pallocated_xmit_extbuf = vzalloc(NR_XMIT_EXTBUFF * sizeof(struct xmit_buf) + 4);
if (!pxmitpriv->pallocated_xmit_extbuf) {
res = _FAIL;
goto exit;
}
pxmitpriv->pxmit_extbuf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pxmitpriv->pallocated_xmit_extbuf), 4);
pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmit_extbuf;
for (i = 0; i < NR_XMIT_EXTBUFF; i++) {
INIT_LIST_HEAD(&pxmitbuf->list);
pxmitbuf->priv_data = NULL;
pxmitbuf->padapter = padapter;
pxmitbuf->buf_tag = XMITBUF_MGNT;
res = rtw_os_xmit_resource_alloc(padapter, pxmitbuf, MAX_XMIT_EXTBUF_SZ + XMITBUF_ALIGN_SZ, true);
if (res == _FAIL) {
res = _FAIL;
goto exit;
}
pxmitbuf->phead = pxmitbuf->pbuf;
pxmitbuf->pend = pxmitbuf->pbuf + MAX_XMIT_EXTBUF_SZ;
pxmitbuf->len = 0;
Annotation
- Immediate include surface: `drv_types.h`, `linux/delay.h`, `linux/if_ether.h`.
- Detected declarations: `function _init_txservq`, `function _rtw_init_sta_xmit_priv`, `function _rtw_init_xmit_priv`, `function _rtw_free_xmit_priv`, `function query_ra_short_GI`, `function update_attrib_vcs_info`, `function update_attrib_phy_info`, `function update_attrib_sec_info`, `function qos_acm`, `function set_qos`.
- 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.