diff options
Diffstat (limited to 'drivers/staging/vt6656/int.c')
| -rw-r--r-- | drivers/staging/vt6656/int.c | 189 |
1 files changed, 87 insertions, 102 deletions
diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index a2b4ba6d4f0..f2a5225b50f 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -33,7 +33,6 @@ */ #include "int.h" -#include "mib.h" #include "tmacro.h" #include "mac.h" #include "power.h" @@ -66,137 +65,123 @@ static int msglevel = MSG_LEVEL_INFO; /* MSG_LEVEL_DEBUG */ -*/ void INTvWorkItem(struct vnt_private *pDevice) { + unsigned long flags; int ntStatus; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->Interrupt Polling Thread\n"); - spin_lock_irq(&pDevice->lock); - if (pDevice->fKillEventPollingThread != true) - ntStatus = PIPEnsInterruptRead(pDevice); - spin_unlock_irq(&pDevice->lock); + spin_lock_irqsave(&pDevice->lock, flags); + + ntStatus = PIPEnsInterruptRead(pDevice); + + spin_unlock_irqrestore(&pDevice->lock, flags); } -void INTnsProcessData(struct vnt_private *pDevice) +void INTnsProcessData(struct vnt_private *priv) { - PSINTData pINTData; - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; - struct net_device_stats *pStats = &pDevice->stats; + struct vnt_interrupt_data *int_data; + struct vnt_manager *mgmt = &priv->vnt_mgmt; + struct net_device_stats *stats = &priv->stats; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsInterruptProcessData\n"); - pINTData = (PSINTData) pDevice->intBuf.pDataBuf; - if (pINTData->byTSR0 & TSR_VALID) { - STAvUpdateTDStatCounter(&(pDevice->scStatistic), - (u8)(pINTData->byPkt0 & 0x0F), - (u8)(pINTData->byPkt0>>4), - pINTData->byTSR0); - BSSvUpdateNodeTxCounter(pDevice, - &(pDevice->scStatistic), - pINTData->byTSR0, - pINTData->byPkt0); - /*DBG_PRN_GRP01(("TSR0 %02x\n", pINTData->byTSR0));*/ + int_data = (struct vnt_interrupt_data *)priv->int_buf.data_buf; + + if (int_data->tsr0 & TSR_VALID) { + if (int_data->tsr0 & (TSR_TMO | TSR_RETRYTMO)) + priv->wstats.discard.retries++; + else + stats->tx_packets++; + + BSSvUpdateNodeTxCounter(priv, + int_data->tsr0, + int_data->pkt0); } - if (pINTData->byTSR1 & TSR_VALID) { - STAvUpdateTDStatCounter(&(pDevice->scStatistic), - (u8)(pINTData->byPkt1 & 0x0F), - (u8)(pINTData->byPkt1>>4), - pINTData->byTSR1); - BSSvUpdateNodeTxCounter(pDevice, - &(pDevice->scStatistic), - pINTData->byTSR1, - pINTData->byPkt1); - /*DBG_PRN_GRP01(("TSR1 %02x\n", pINTData->byTSR1));*/ + + if (int_data->tsr1 & TSR_VALID) { + if (int_data->tsr1 & (TSR_TMO | TSR_RETRYTMO)) + priv->wstats.discard.retries++; + else + stats->tx_packets++; + + + BSSvUpdateNodeTxCounter(priv, + int_data->tsr1, + int_data->pkt1); } - if (pINTData->byTSR2 & TSR_VALID) { - STAvUpdateTDStatCounter(&(pDevice->scStatistic), - (u8)(pINTData->byPkt2 & 0x0F), - (u8)(pINTData->byPkt2>>4), - pINTData->byTSR2); - BSSvUpdateNodeTxCounter(pDevice, - &(pDevice->scStatistic), - pINTData->byTSR2, - pINTData->byPkt2); - /*DBG_PRN_GRP01(("TSR2 %02x\n", pINTData->byTSR2));*/ + + if (int_data->tsr2 & TSR_VALID) { + if (int_data->tsr2 & (TSR_TMO | TSR_RETRYTMO)) + priv->wstats.discard.retries++; + else + stats->tx_packets++; + + BSSvUpdateNodeTxCounter(priv, + int_data->tsr2, + int_data->pkt2); } - if (pINTData->byTSR3 & TSR_VALID) { - STAvUpdateTDStatCounter(&(pDevice->scStatistic), - (u8)(pINTData->byPkt3 & 0x0F), - (u8)(pINTData->byPkt3>>4), - pINTData->byTSR3); - BSSvUpdateNodeTxCounter(pDevice, - &(pDevice->scStatistic), - pINTData->byTSR3, - pINTData->byPkt3); - /*DBG_PRN_GRP01(("TSR3 %02x\n", pINTData->byTSR3));*/ + + if (int_data->tsr3 & TSR_VALID) { + if (int_data->tsr3 & (TSR_TMO | TSR_RETRYTMO)) + priv->wstats.discard.retries++; + else + stats->tx_packets++; + + BSSvUpdateNodeTxCounter(priv, + int_data->tsr3, + int_data->pkt3); } - if (pINTData->byISR0 != 0) { - if (pINTData->byISR0 & ISR_BNTX) { - if (pDevice->eOPMode == OP_MODE_AP) { - if (pMgmt->byDTIMCount > 0) { - pMgmt->byDTIMCount--; - pMgmt->sNodeDBTable[0].bRxPSPoll = + + if (int_data->isr0 != 0) { + if (int_data->isr0 & ISR_BNTX) { + if (priv->op_mode == NL80211_IFTYPE_AP) { + if (mgmt->byDTIMCount > 0) { + mgmt->byDTIMCount--; + mgmt->sNodeDBTable[0].bRxPSPoll = false; - } else if (pMgmt->byDTIMCount == 0) { + } else if (mgmt->byDTIMCount == 0) { /* check if multicast tx buffering */ - pMgmt->byDTIMCount = - pMgmt->byDTIMPeriod-1; - pMgmt->sNodeDBTable[0].bRxPSPoll = true; - if (pMgmt->sNodeDBTable[0].bPSEnable) - bScheduleCommand((void *) pDevice, + mgmt->byDTIMCount = + mgmt->byDTIMPeriod-1; + mgmt->sNodeDBTable[0].bRxPSPoll = true; + if (mgmt->sNodeDBTable[0].bPSEnable) + bScheduleCommand((void *) priv, WLAN_CMD_RX_PSPOLL, NULL); } - bScheduleCommand((void *) pDevice, + bScheduleCommand((void *) priv, WLAN_CMD_BECON_SEND, NULL); - } /* if (pDevice->eOPMode == OP_MODE_AP) */ - pDevice->bBeaconSent = true; + } + priv->bBeaconSent = true; } else { - pDevice->bBeaconSent = false; + priv->bBeaconSent = false; } - if (pINTData->byISR0 & ISR_TBTT) { - if (pDevice->bEnablePSMode) - bScheduleCommand((void *) pDevice, + + if (int_data->isr0 & ISR_TBTT) { + if (priv->bEnablePSMode) + bScheduleCommand((void *) priv, WLAN_CMD_TBTT_WAKEUP, NULL); - if (pDevice->bChannelSwitch) { - pDevice->byChannelSwitchCount--; - if (pDevice->byChannelSwitchCount == 0) - bScheduleCommand((void *) pDevice, + if (priv->bChannelSwitch) { + priv->byChannelSwitchCount--; + if (priv->byChannelSwitchCount == 0) + bScheduleCommand((void *) priv, WLAN_CMD_11H_CHSW, NULL); } } - pDevice->qwCurrTSF = cpu_to_le64(pINTData->qwTSF); - /*DBG_PRN_GRP01(("ISR0 = %02x , - LoTsf = %08x, - HiTsf = %08x\n", - pINTData->byISR0, - pINTData->dwLoTSF, - pINTData->dwHiTSF)); */ - - STAvUpdate802_11Counter(&pDevice->s802_11Counter, - &pDevice->scStatistic, - pINTData->byRTSSuccess, - pINTData->byRTSFail, - pINTData->byACKFail, - pINTData->byFCSErr); - STAvUpdateIsrStatCounter(&pDevice->scStatistic, - pINTData->byISR0, - pINTData->byISR1); + priv->qwCurrTSF = le64_to_cpu(int_data->tsf); } - if (pINTData->byISR1 != 0) - if (pINTData->byISR1 & ISR_GPIO3) - bScheduleCommand((void *) pDevice, + + if (int_data->isr1 != 0) + if (int_data->isr1 & ISR_GPIO3) + bScheduleCommand((void *) priv, WLAN_CMD_RADIO, NULL); - pDevice->intBuf.uDataLen = 0; - pDevice->intBuf.bInUse = false; - - pStats->tx_packets = pDevice->scStatistic.ullTsrOK; - pStats->tx_bytes = pDevice->scStatistic.ullTxDirectedBytes + - pDevice->scStatistic.ullTxMulticastBytes + - pDevice->scStatistic.ullTxBroadcastBytes; - pStats->tx_errors = pDevice->scStatistic.dwTsrErr; - pStats->tx_dropped = pDevice->scStatistic.dwTsrErr; + + priv->int_buf.in_use = false; + + stats->tx_errors = priv->wstats.discard.retries; + stats->tx_dropped = priv->wstats.discard.retries; } |
