s32 rtw_monitor_xmit_entry
\include\autoconf.h#define CONFIG_RTW_ACS_DBG
include\drv_conf.h#ifdef CONFIG_WIFI_MONITOR#define CONFIG_MONITOR_MODE_XMIT
#endif
s32 rtl8821cs_mgnt_xmit(PADAPTER adapter, struct xmit_frame *pmgntframe)
{s32 ret = _SUCCESS;struct dvobj_priv *pdvobjpriv;struct xmit_priv *pxmitpriv;struct pkt_attrib *pattrib;struct xmit_buf *pxmitbuf;
#ifdef CONFIG_XMIT_THREAD_MODE struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
#endifu32 txdesc_size;u32 page_size;u8 *pframe;pdvobjpriv = adapter_to_dvobj(adapter);pxmitpriv = &adapter->xmitpriv;pattrib = &pmgntframe->attrib;pxmitbuf = pmgntframe->pxmitbuf;rtw_halmac_get_tx_desc_size(pdvobjpriv, &txdesc_size);rtw_hal_get_def_var(adapter, HAL_DEF_TX_PAGE_SIZE, &page_size);rtl8821c_update_txdesc(pmgntframe, pmgntframe->buf_addr);pxmitbuf->len = txdesc_size + pattrib->last_txcmdsz;pxmitbuf->pg_num = PageNum(pxmitbuf->len, page_size);pxmitbuf->ptail = pmgntframe->buf_addr + pxmitbuf->len;pframe = pmgntframe->buf_addr + txdesc_size;rtw_count_tx_stats(adapter, pmgntframe, pattrib->last_txcmdsz);rtw_free_xmitframe(pxmitpriv, pmgntframe);pxmitbuf->priv_data = NULL;#ifdef CONFIG_XMIT_THREAD_MODEif (check_fwstate(pmlmepriv, WIFI_MONITOR_STATE) == _TRUE) {enqueue_pending_xmitbuf(pxmitpriv, pxmitbuf);} else {if ((pattrib->subtype == WIFI_BEACON) || (get_frame_sub_type(pframe) == WIFI_BEACON)) {/* dump beacon directly */ret = rtw_write_port(adapter, 0, pxmitbuf->len, (u8 *)pxmitbuf);if (ret != _SUCCESS)rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_WRITE_PORT_ERR);rtw_free_xmitbuf(pxmitpriv, pxmitbuf);} else {enqueue_pending_xmitbuf(pxmitpriv, pxmitbuf);}}
#elseif ((pattrib->subtype == WIFI_BEACON) || (get_frame_sub_type(pframe) == WIFI_BEACON)) {/* dump beacon directly */ret = rtw_write_port(adapter, 0, pxmitbuf->len, (u8 *)pxmitbuf);if (ret != _SUCCESS)rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_WRITE_PORT_ERR);rtw_free_xmitbuf(pxmitpriv, pxmitbuf);} elseenqueue_pending_xmitbuf(pxmitpriv, pxmitbuf);
#endifreturn ret;
}