/* * Description *Transmit xmitframe from queue * * Return *_SUCCESS ok *_FAIL something error */ static s32 rtl8723bs_xmit_handler(struct adapter *padapter) { struct xmit_priv *pxmitpriv; s32 ret; pxmitpriv = &padapter->xmitpriv; if (down_interruptible(&pxmitpriv->SdioXmitSema)) { DBG_871X_LEVEL(_drv_emerg_, "%s: down sema fail!\n", __func__); return _FAIL; } next: if ( (padapter->bDriverStopped == true) || (padapter->bSurpriseRemoved == true) ) { RT_TRACE( _module_hal_xmit_c_, _drv_notice_, ( "%s: bDriverStopped(%d) bSurpriseRemoved(%d)\n", __func__, padapter->bDriverStopped, padapter->bSurpriseRemoved ) ); return _FAIL; } spin_lock_bh(&pxmitpriv->lock); ret = rtw_txframes_pending(padapter); spin_unlock_bh(&pxmitpriv->lock); if (ret == 0) { return _SUCCESS; } /* dequeue frame and write to hardware */ ret = xmit_xmitframes(padapter, pxmitpriv); if (ret == -2) { /* here sleep 1ms will cause big TP loss of TX */ /* from 50+ to 40+ */ if (padapter->registrypriv.wifi_spec) msleep(1); else yield(); goto next; } spin_lock_bh(&pxmitpriv->lock); ret = rtw_txframes_pending(padapter); spin_unlock_bh(&pxmitpriv->lock); if (ret == 1) { goto next; } return _SUCCESS; }
void rtw_os_xmit_schedule(_adapter *padapter) { #ifdef CONFIG_SDIO_HCI if(!padapter) return; if (rtw_txframes_pending(padapter)) _rtw_up_sema(&padapter->xmitpriv.xmit_sema); #else _irqL irqL; struct xmit_priv *pxmitpriv; if(!padapter) return; pxmitpriv = &padapter->xmitpriv; _enter_critical_bh(&pxmitpriv->lock, &irqL); if(rtw_txframes_pending(padapter)) { tasklet_hi_schedule(&pxmitpriv->xmit_tasklet); } _exit_critical_bh(&pxmitpriv->lock, &irqL); #endif }
/* * Description * Transmit xmitframe from queue * * Return * _SUCCESS ok * _FAIL something error */ s32 rtl8723bs_xmit_handler(PADAPTER padapter) { struct xmit_priv *pxmitpriv; s32 ret; _irqL irql; pxmitpriv = &padapter->xmitpriv; wait: ret = _rtw_down_sema(&pxmitpriv->SdioXmitSema); if (_FAIL == ret) { DBG_871X_LEVEL(_drv_emerg_, "%s: down sema fail!\n", __FUNCTION__); return _FAIL; } next: if ((padapter->bDriverStopped == _TRUE) || (padapter->bSurpriseRemoved == _TRUE)) { RT_TRACE(_module_hal_xmit_c_, _drv_notice_, ("%s: bDriverStopped(%d) bSurpriseRemoved(%d)\n", __FUNCTION__, padapter->bDriverStopped, padapter->bSurpriseRemoved)); return _FAIL; } _enter_critical_bh(&pxmitpriv->lock, &irql); ret = rtw_txframes_pending(padapter); _exit_critical_bh(&pxmitpriv->lock, &irql); if (ret == 0) { if(!padapter->registrypriv.wifi_spec) rtw_yield_os(); return _SUCCESS; } // dequeue frame and write to hardware ret = xmit_xmitframes(padapter, pxmitpriv); if (ret == -2) { //here sleep 1ms will cause big TP loss of TX //from 50+ to 40+ if(padapter->registrypriv.wifi_spec) rtw_msleep_os(1); else rtw_yield_os(); goto next; } _enter_critical_bh(&pxmitpriv->lock, &irql); ret = rtw_txframes_pending(padapter); _exit_critical_bh(&pxmitpriv->lock, &irql); if (ret == 1) { //rtw_msleep_os(1); goto next; } return _SUCCESS; }
/* * Description * Transmit xmitframe from queue * * Return * _SUCCESS ok * _FAIL something error */ s32 rtl8723as_xmit_handler(PADAPTER padapter) { struct xmit_priv *pxmitpriv; PHAL_DATA_TYPE phal; s32 ret; _irqL irql; pxmitpriv = &padapter->xmitpriv; phal = GET_HAL_DATA(padapter); wait: ret = _rtw_down_sema(&phal->SdioXmitSema); if (_FAIL == ret) { RT_TRACE(_module_hal_xmit_c_, _drv_emerg_, ("%s: down sema fail!\n", __FUNCTION__)); return _FAIL; } next: if ((padapter->bDriverStopped == _TRUE) || (padapter->bSurpriseRemoved == _TRUE)) { RT_TRACE(_module_hal_xmit_c_, _drv_notice_, ("%s: bDriverStopped(%d) bSurpriseRemoved(%d)\n", __FUNCTION__, padapter->bDriverStopped, padapter->bSurpriseRemoved)); return _FAIL; } _enter_critical_bh(&pxmitpriv->lock, &irql); ret = rtw_txframes_pending(padapter); _exit_critical_bh(&pxmitpriv->lock, &irql); if (ret == 0) { return _SUCCESS; } // dequeue frame and write to hardware ret = xmit_xmitframes(padapter, pxmitpriv); if (ret == -2) { rtw_msleep_os(1); goto next; } _enter_critical_bh(&pxmitpriv->lock, &irql); ret = rtw_txframes_pending(padapter); _exit_critical_bh(&pxmitpriv->lock, &irql); if (ret == 1) { rtw_msleep_os(1); goto next; } return _SUCCESS; }
static u8 _rtw_mi_xmit_tasklet_schedule(_adapter *padapter, void *data) { if (rtw_txframes_pending(padapter)) { /* try to deal with the pending packets */ tasklet_hi_schedule(&(padapter->xmitpriv.xmit_tasklet)); } return _TRUE; }
void rtw_os_xmit_schedule(_adapter *padapter) { _irqL irqL; struct xmit_priv *pxmitpriv = &padapter->xmitpriv; _enter_critical_bh(&pxmitpriv->lock, &irqL); if(rtw_txframes_pending(padapter)) { tasklet_hi_schedule(&pxmitpriv->xmit_tasklet); } _exit_critical_bh(&pxmitpriv->lock, &irqL); }
void rtw_os_xmit_schedule(struct adapter *padapter) { struct xmit_priv *pxmitpriv; if (!padapter) return; pxmitpriv = &padapter->xmitpriv; spin_lock_bh(&pxmitpriv->lock); if (rtw_txframes_pending(padapter)) tasklet_hi_schedule(&pxmitpriv->xmit_tasklet); spin_unlock_bh(&pxmitpriv->lock); }
void rtw_os_xmit_schedule(struct adapter *padapter) { unsigned long irql; struct xmit_priv *pxmitpriv; if (!padapter) return; pxmitpriv = &padapter->xmitpriv; _enter_critical_bh(&pxmitpriv->lock, &irql); if (rtw_txframes_pending(padapter)) tasklet_hi_schedule(&pxmitpriv->xmit_tasklet); _exit_critical_bh(&pxmitpriv->lock, &irql); }
void rtw_os_xmit_schedule(_adapter *padapter) { _adapter *pri_adapter = padapter; _irqL irqL; struct xmit_priv *pxmitpriv; if(!padapter) return; pxmitpriv = &padapter->xmitpriv; SPIN_LOCK_BH(pxmitpriv->lock, &irqL); if(rtw_txframes_pending(padapter)) { tasklet_hi_schedule(&pxmitpriv->xmit_tasklet); } SPIN_UNLOCK_BH(pxmitpriv->lock, &irqL); }
void rtw_os_xmit_schedule(_adapter *padapter) { _adapter *pri_adapter = padapter; #if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) if(!padapter) return; #ifdef CONFIG_CONCURRENT_MODE if(padapter->adapter_type > PRIMARY_ADAPTER) pri_adapter = padapter->pbuddy_adapter; #endif if (_rtw_queue_empty(&padapter->xmitpriv.pending_xmitbuf_queue) == _FALSE) _rtw_up_sema(&pri_adapter->xmitpriv.xmit_sema); #else _irqL irqL; struct xmit_priv *pxmitpriv; if(!padapter) return; pxmitpriv = &padapter->xmitpriv; _enter_critical_bh(&pxmitpriv->lock, &irqL); if(rtw_txframes_pending(padapter)) { tasklet_hi_schedule(&pxmitpriv->xmit_tasklet); } _exit_critical_bh(&pxmitpriv->lock, &irqL); #endif }
void rtw_os_xmit_schedule(_adapter *padapter) { #if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI) _adapter *pri_adapter = GET_PRIMARY_ADAPTER(padapter); if (!padapter) return; if (_rtw_queue_empty(&padapter->xmitpriv.pending_xmitbuf_queue) == _FALSE) _rtw_up_sema(&pri_adapter->xmitpriv.xmit_sema); #else _irqL irqL; struct xmit_priv *pxmitpriv; if (!padapter) return; pxmitpriv = &padapter->xmitpriv; _enter_critical_bh(&pxmitpriv->lock, &irqL); if (rtw_txframes_pending(padapter)) tasklet_hi_schedule(&pxmitpriv->xmit_tasklet); _exit_critical_bh(&pxmitpriv->lock, &irqL); #if defined(CONFIG_PCI_HCI) && defined(CONFIG_XMIT_THREAD_MODE) if (_rtw_queue_empty(&padapter->xmitpriv.pending_xmitbuf_queue) == _FALSE) _rtw_up_sema(&padapter->xmitpriv.xmit_sema); #endif #endif }