diff options
author | James Morris <james.l.morris@oracle.com> | 2014-06-24 18:46:07 +1000 |
---|---|---|
committer | James Morris <james.l.morris@oracle.com> | 2014-06-24 18:46:07 +1000 |
commit | f01387d2693813eb5271a3448e6a082322c7d75d (patch) | |
tree | b591ca73c85276bae53d7db57ff1565be45a29da /drivers/staging/vt6656 | |
parent | Merge branch 'next' of git://git.infradead.org/users/pcmoore/selinux into next (diff) | |
parent | Linux 3.15 (diff) | |
download | linux-dev-f01387d2693813eb5271a3448e6a082322c7d75d.tar.xz linux-dev-f01387d2693813eb5271a3448e6a082322c7d75d.zip |
Merge commit 'v3.15' into next
Diffstat (limited to 'drivers/staging/vt6656')
-rw-r--r-- | drivers/staging/vt6656/80211hdr.h | 2 | ||||
-rw-r--r-- | drivers/staging/vt6656/aes_ccmp.c | 6 | ||||
-rw-r--r-- | drivers/staging/vt6656/card.h | 7 | ||||
-rw-r--r-- | drivers/staging/vt6656/device.h | 85 | ||||
-rw-r--r-- | drivers/staging/vt6656/dpc.c | 92 | ||||
-rw-r--r-- | drivers/staging/vt6656/int.c | 150 | ||||
-rw-r--r-- | drivers/staging/vt6656/int.h | 45 | ||||
-rw-r--r-- | drivers/staging/vt6656/iwctl.c | 10 | ||||
-rw-r--r-- | drivers/staging/vt6656/mac.c | 16 | ||||
-rw-r--r-- | drivers/staging/vt6656/mac.h | 2 | ||||
-rw-r--r-- | drivers/staging/vt6656/main_usb.c | 350 | ||||
-rw-r--r-- | drivers/staging/vt6656/power.c | 50 | ||||
-rw-r--r-- | drivers/staging/vt6656/rxtx.c | 185 | ||||
-rw-r--r-- | drivers/staging/vt6656/rxtx.h | 92 | ||||
-rw-r--r-- | drivers/staging/vt6656/usbpipe.c | 451 | ||||
-rw-r--r-- | drivers/staging/vt6656/wcmd.c | 77 | ||||
-rw-r--r-- | drivers/staging/vt6656/wcmd.h | 4 | ||||
-rw-r--r-- | drivers/staging/vt6656/wmgr.c | 8 |
18 files changed, 754 insertions, 878 deletions
diff --git a/drivers/staging/vt6656/80211hdr.h b/drivers/staging/vt6656/80211hdr.h index 000304ffad6c..1e778ba7c634 100644 --- a/drivers/staging/vt6656/80211hdr.h +++ b/drivers/staging/vt6656/80211hdr.h @@ -151,7 +151,7 @@ #ifdef __BIG_ENDIAN /* GET & SET Frame Control bit */ -#define WLAN_GET_FC_PRVER(n) ((((u16)(n) >> 8) & (BIT0 | BIT1)) +#define WLAN_GET_FC_PRVER(n) (((u16)(n) >> 8) & (BIT0 | BIT1)) #define WLAN_GET_FC_FTYPE(n) ((((u16)(n) >> 8) & (BIT2 | BIT3)) >> 2) #define WLAN_GET_FC_FSTYPE(n) ((((u16)(n) >> 8) \ & (BIT4|BIT5|BIT6|BIT7)) >> 4) diff --git a/drivers/staging/vt6656/aes_ccmp.c b/drivers/staging/vt6656/aes_ccmp.c index 61b9f7bdb858..e2bfa8d266cd 100644 --- a/drivers/staging/vt6656/aes_ccmp.c +++ b/drivers/staging/vt6656/aes_ccmp.c @@ -269,9 +269,9 @@ bool AESbGenCCMP(u8 *pbyRxKey, u8 *pbyFrame, u16 wFrameSize) /* MIC_HDR1 */ MIC_HDR1[0] = (u8)(wHLen >> 8); MIC_HDR1[1] = (u8)(wHLen & 0xff); - byTmp = (u8)(pMACHeader->frame_control & 0xff); + byTmp = (u8)(le16_to_cpu(pMACHeader->frame_control) >> 8); MIC_HDR1[2] = byTmp & 0x8f; - byTmp = (u8)(pMACHeader->frame_control >> 8); + byTmp = (u8)(le16_to_cpu(pMACHeader->frame_control) & 0xff); byTmp &= 0x87; MIC_HDR1[3] = byTmp | 0x40; memcpy(&(MIC_HDR1[4]), pMACHeader->addr1, ETH_ALEN); @@ -279,7 +279,7 @@ bool AESbGenCCMP(u8 *pbyRxKey, u8 *pbyFrame, u16 wFrameSize) /* MIC_HDR2 */ memcpy(&(MIC_HDR2[0]), pMACHeader->addr3, ETH_ALEN); - byTmp = (u8)(pMACHeader->seq_ctrl & 0xff); + byTmp = (u8)(le16_to_cpu(pMACHeader->seq_ctrl) >> 8); MIC_HDR2[6] = byTmp & 0x0f; MIC_HDR2[7] = 0; diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index c3017a74fa0f..f843e50875f9 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -39,13 +39,6 @@ typedef enum _CARD_PHY_TYPE { PHY_TYPE_11A } CARD_PHY_TYPE, *PCARD_PHY_TYPE; -typedef enum _CARD_OP_MODE { - OP_MODE_INFRASTRUCTURE = 0, - OP_MODE_ADHOC, - OP_MODE_AP, - OP_MODE_UNKNOWN -} CARD_OP_MODE, *PCARD_OP_MODE; - #define CB_MAX_CHANNEL_24G 14 #define CB_MAX_CHANNEL_5G 42 /* add channel9(5045MHz), 41==>42 */ #define CB_MAX_CHANNEL (CB_MAX_CHANNEL_24G+CB_MAX_CHANNEL_5G) diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 1f422574c3d8..e2abe3ddd244 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -158,10 +158,10 @@ typedef enum __device_msg_level { /* * Enum of context types for SendPacket */ -typedef enum _CONTEXT_TYPE { - CONTEXT_DATA_PACKET = 1, - CONTEXT_MGMT_PACKET -} CONTEXT_TYPE; +enum { + CONTEXT_DATA_PACKET = 1, + CONTEXT_MGMT_PACKET +}; /* RCB (Receive Control Block) */ struct vnt_rcb { @@ -180,9 +180,7 @@ struct vnt_usb_send_context { struct sk_buff *pPacket; struct urb *pUrb; unsigned int uBufLen; - CONTEXT_TYPE Type; - struct ethhdr sEthHeader; - void *Next; + u8 type; bool bBoolInUse; unsigned char Data[MAX_TOTAL_SIZE_WITH_ALL_HEADERS]; }; @@ -206,29 +204,10 @@ typedef struct _DEFAULT_CONFIG { /* * Structure to keep track of USB interrupt packets */ -typedef struct { - unsigned int uDataLen; - u8 * pDataBuf; - /* struct urb *pUrb; */ - bool bInUse; -} INT_BUFFER, *PINT_BUFFER; - -/* 0:11A 1:11B 2:11G */ -typedef enum _VIA_BB_TYPE -{ - BB_TYPE_11A = 0, - BB_TYPE_11B, - BB_TYPE_11G -} VIA_BB_TYPE, *PVIA_BB_TYPE; - -/* 0:11a, 1:11b, 2:11gb (only CCK in BasicRate), 3:11ga(OFDM in BasicRate) */ -typedef enum _VIA_PKT_TYPE -{ - PK_TYPE_11A = 0, - PK_TYPE_11B, - PK_TYPE_11GB, - PK_TYPE_11GA -} VIA_PKT_TYPE, *PVIA_PKT_TYPE; +struct vnt_interrupt_buffer { + u8 *data_buf; + bool in_use; +}; /*++ NDIS related */ @@ -297,16 +276,6 @@ typedef struct tagSPMKIDCandidateEvent { PMKID_CANDIDATE CandidateList[MAX_PMKIDLIST]; } SPMKIDCandidateEvent, *PSPMKIDCandidateEvent; -/*++ 802.11h related */ -#define MAX_QUIET_COUNT 8 - -typedef struct tagSQuietControl { - bool bEnable; - u32 dwStartTime; - u8 byPeriod; - u16 wDuration; -} SQuietControl, *PSQuietControl; - /* The receive duplicate detection cache entry */ typedef struct tagSCacheEntry{ u16 wFmSequence; @@ -386,8 +355,6 @@ struct vnt_private { OPTIONS sOpts; - struct tasklet_struct CmdWorkItem; - struct tasklet_struct EventWorkItem; struct work_struct read_work_item; struct work_struct rx_mng_work_item; @@ -437,29 +404,11 @@ struct vnt_private { struct vnt_tx_pkt_info pkt_info[16]; /* Variables to track resources for the Interrupt In Pipe */ - INT_BUFFER intBuf; - int fKillEventPollingThread; - int bEventAvailable; + struct vnt_interrupt_buffer int_buf; /* default config from file by user setting */ DEFAULT_CONFIG config_file; - /* Statistic for USB */ - unsigned long ulBulkInPosted; - unsigned long ulBulkInError; - unsigned long ulBulkInContCRCError; - unsigned long ulBulkInBytesRead; - - unsigned long ulBulkOutPosted; - unsigned long ulBulkOutError; - unsigned long ulBulkOutContCRCError; - unsigned long ulBulkOutBytesWrite; - - unsigned long ulIntInPosted; - unsigned long ulIntInError; - unsigned long ulIntInContCRCError; - unsigned long ulIntInBytesRead; - /* Version control */ u16 wFirmwareVersion; u8 byLocalID; @@ -480,11 +429,6 @@ struct vnt_private { int bExistSWNetAddr; /* Maintain statistical debug info. */ - unsigned long packetsReceived; - unsigned long packetsReceivedDropped; - unsigned long packetsReceivedOverflow; - unsigned long packetsSent; - unsigned long packetsSentDropped; unsigned long SendContextsInUse; unsigned long RcvBuffersInUse; @@ -549,8 +493,8 @@ struct vnt_private { u8 byCWMaxMin; /* Rate */ - VIA_BB_TYPE byBBType; /* 0: 11A, 1:11B, 2:11G */ - VIA_PKT_TYPE byPacketType; /* 0:11a 1:11b 2:11gb 3:11ga */ + u8 byBBType; /* 0: 11A, 1:11B, 2:11G */ + u8 byPacketType; /* 0:11a 1:11b 2:11gb 3:11ga */ u16 wBasicRate; u8 byACKRate; u8 byTopOFDMBasicRate; @@ -588,7 +532,9 @@ struct vnt_private { u16 wFragmentationThreshold; u8 byShortRetryLimit; u8 byLongRetryLimit; - CARD_OP_MODE eOPMode; + + enum nl80211_iftype op_mode; + int bBSSIDFilter; u16 wMaxTransmitMSDULifetime; u8 abyBSSID[ETH_ALEN]; @@ -807,5 +753,6 @@ struct vnt_private { (fMP_DISCONNECTED | fMP_RESET_IN_PROGRESS | fMP_HALT_IN_PROGRESS | fMP_INIT_IN_PROGRESS | fMP_SURPRISE_REMOVED)) == 0) int device_alloc_frag_buf(struct vnt_private *, PSDeFragControlBlock pDeF); +void vnt_configure_filter(struct vnt_private *); #endif diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index eca04c0c1d97..4ccaa7e29a1c 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -627,7 +627,7 @@ int RXbBulkInProcessData(struct vnt_private *pDevice, struct vnt_rcb *pRCB, // Now it only supports 802.11g Infrastructure Mode, and support rate must up to 54 Mbps if (pDevice->bDiversityEnable && (FrameSize>50) && - (pDevice->eOPMode == OP_MODE_INFRASTRUCTURE) && + pDevice->op_mode == NL80211_IFTYPE_STATION && (pDevice->bLinkPass == true)) { BBvAntennaDiversity(pDevice, s_byGetRateIdx(*pbyRxRate), 0); } @@ -1227,14 +1227,13 @@ static int s_bAPModeRxData(struct vnt_private *pDevice, struct sk_buff *skb, if (is_multicast_ether_addr((u8 *)(skb->data+cbHeaderOffset))) { if (pMgmt->sNodeDBTable[0].bPSEnable) { - skbcpy = dev_alloc_skb((int)pDevice->rx_buf_sz); + skbcpy = netdev_alloc_skb(pDevice->dev, pDevice->rx_buf_sz); // if any node in PS mode, buffer packet until DTIM. if (skbcpy == NULL) { DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "relay multicast no skb available \n"); } else { - skbcpy->dev = pDevice->dev; skbcpy->len = FrameSize; memcpy(skbcpy->data, skb->data+cbHeaderOffset, FrameSize); skb_queue_tail(&(pMgmt->sNodeDBTable[0].sTxPSQueue), skbcpy); @@ -1295,63 +1294,66 @@ static int s_bAPModeRxData(struct vnt_private *pDevice, struct sk_buff *skb, void RXvWorkItem(struct work_struct *work) { - struct vnt_private *pDevice = + struct vnt_private *priv = container_of(work, struct vnt_private, read_work_item); - int ntStatus; - struct vnt_rcb *pRCB = NULL; + int status; + struct vnt_rcb *rcb = NULL; - if (pDevice->Flags & fMP_DISCONNECTED) + if (priv->Flags & fMP_DISCONNECTED) return; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->Rx Polling Thread\n"); - spin_lock_irq(&pDevice->lock); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->Rx Polling Thread\n"); - while ((pDevice->Flags & fMP_POST_READS) && - MP_IS_READY(pDevice) && - (pDevice->NumRecvFreeList != 0) ) { - pRCB = pDevice->FirstRecvFreeList; - pDevice->NumRecvFreeList--; - DequeueRCB(pDevice->FirstRecvFreeList, pDevice->LastRecvFreeList); - ntStatus = PIPEnsBulkInUsbRead(pDevice, pRCB); - } - pDevice->bIsRxWorkItemQueued = false; - spin_unlock_irq(&pDevice->lock); + spin_lock_irq(&priv->lock); + + while ((priv->Flags & fMP_POST_READS) && MP_IS_READY(priv) && + (priv->NumRecvFreeList != 0)) { + rcb = priv->FirstRecvFreeList; + + priv->NumRecvFreeList--; + + DequeueRCB(priv->FirstRecvFreeList, priv->LastRecvFreeList); + + status = PIPEnsBulkInUsbRead(priv, rcb); + } + priv->bIsRxWorkItemQueued = false; + + spin_unlock_irq(&priv->lock); } -void RXvFreeRCB(struct vnt_rcb *pRCB, int bReAllocSkb) +void RXvFreeRCB(struct vnt_rcb *rcb, int re_alloc_skb) { - struct vnt_private *pDevice = pRCB->pDevice; + struct vnt_private *priv = rcb->pDevice; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->RXvFreeRCB\n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->RXvFreeRCB\n"); - if (bReAllocSkb == false) { - kfree_skb(pRCB->skb); - bReAllocSkb = true; + if (re_alloc_skb == false) { + kfree_skb(rcb->skb); + re_alloc_skb = true; } - if (bReAllocSkb == true) { - pRCB->skb = dev_alloc_skb((int)pDevice->rx_buf_sz); - // todo error handling - if (pRCB->skb == NULL) { - DBG_PRT(MSG_LEVEL_ERR,KERN_ERR" Failed to re-alloc rx skb\n"); - }else { - pRCB->skb->dev = pDevice->dev; - } - } - // - // Insert the RCB back in the Recv free list - // - EnqueueRCB(pDevice->FirstRecvFreeList, pDevice->LastRecvFreeList, pRCB); - pDevice->NumRecvFreeList++; + if (re_alloc_skb == true) { + rcb->skb = netdev_alloc_skb(priv->dev, priv->rx_buf_sz); + /* TODO error handling */ + if (!rcb->skb) { + DBG_PRT(MSG_LEVEL_ERR, KERN_ERR + " Failed to re-alloc rx skb\n"); + } + } - if ((pDevice->Flags & fMP_POST_READS) && MP_IS_READY(pDevice) && - (pDevice->bIsRxWorkItemQueued == false) ) { + /* Insert the RCB back in the Recv free list */ + EnqueueRCB(priv->FirstRecvFreeList, priv->LastRecvFreeList, rcb); + priv->NumRecvFreeList++; - pDevice->bIsRxWorkItemQueued = true; - schedule_work(&pDevice->read_work_item); - } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"<----RXFreeRCB %d %d\n",pDevice->NumRecvFreeList, pDevice->NumRecvMngList); + if ((priv->Flags & fMP_POST_READS) && MP_IS_READY(priv) && + (priv->bIsRxWorkItemQueued == false)) { + priv->bIsRxWorkItemQueued = true; + schedule_work(&priv->read_work_item); + } + + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"<----RXFreeRCB %d %d\n", + priv->NumRecvFreeList, priv->NumRecvMngList); } void RXvMngWorkItem(struct work_struct *work) diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index e0e93869a681..cca56b2f243d 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -70,119 +70,117 @@ void INTvWorkItem(struct vnt_private *pDevice) DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->Interrupt Polling Thread\n"); spin_lock_irq(&pDevice->lock); - if (pDevice->fKillEventPollingThread != true) - ntStatus = PIPEnsInterruptRead(pDevice); + + ntStatus = PIPEnsInterruptRead(pDevice); + spin_unlock_irq(&pDevice->lock); } -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) { - if (pINTData->byTSR0 & (TSR_TMO | TSR_RETRYTMO)) - pDevice->wstats.discard.retries++; + 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 - pStats->tx_packets++; + stats->tx_packets++; - BSSvUpdateNodeTxCounter(pDevice, - pINTData->byTSR0, - pINTData->byPkt0); - /*DBG_PRN_GRP01(("TSR0 %02x\n", pINTData->byTSR0));*/ + BSSvUpdateNodeTxCounter(priv, + int_data->tsr0, + int_data->pkt0); } - if (pINTData->byTSR1 & TSR_VALID) { - if (pINTData->byTSR1 & (TSR_TMO | TSR_RETRYTMO)) - pDevice->wstats.discard.retries++; + + if (int_data->tsr1 & TSR_VALID) { + if (int_data->tsr1 & (TSR_TMO | TSR_RETRYTMO)) + priv->wstats.discard.retries++; else - pStats->tx_packets++; + stats->tx_packets++; - BSSvUpdateNodeTxCounter(pDevice, - pINTData->byTSR1, - pINTData->byPkt1); - /*DBG_PRN_GRP01(("TSR1 %02x\n", pINTData->byTSR1));*/ + BSSvUpdateNodeTxCounter(priv, + int_data->tsr1, + int_data->pkt1); } - if (pINTData->byTSR2 & TSR_VALID) { - if (pINTData->byTSR2 & (TSR_TMO | TSR_RETRYTMO)) - pDevice->wstats.discard.retries++; + + if (int_data->tsr2 & TSR_VALID) { + if (int_data->tsr2 & (TSR_TMO | TSR_RETRYTMO)) + priv->wstats.discard.retries++; else - pStats->tx_packets++; + stats->tx_packets++; - BSSvUpdateNodeTxCounter(pDevice, - pINTData->byTSR2, - pINTData->byPkt2); - /*DBG_PRN_GRP01(("TSR2 %02x\n", pINTData->byTSR2));*/ + BSSvUpdateNodeTxCounter(priv, + int_data->tsr2, + int_data->pkt2); } - if (pINTData->byTSR3 & TSR_VALID) { - if (pINTData->byTSR3 & (TSR_TMO | TSR_RETRYTMO)) - pDevice->wstats.discard.retries++; + + if (int_data->tsr3 & TSR_VALID) { + if (int_data->tsr3 & (TSR_TMO | TSR_RETRYTMO)) + priv->wstats.discard.retries++; else - pStats->tx_packets++; + stats->tx_packets++; - BSSvUpdateNodeTxCounter(pDevice, - pINTData->byTSR3, - pINTData->byPkt3); - /*DBG_PRN_GRP01(("TSR3 %02x\n", pINTData->byTSR3));*/ + 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)); */ + 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_errors = pDevice->wstats.discard.retries; - pStats->tx_dropped = pDevice->wstats.discard.retries; + priv->int_buf.in_use = false; + + stats->tx_errors = priv->wstats.discard.retries; + stats->tx_dropped = priv->wstats.discard.retries; } diff --git a/drivers/staging/vt6656/int.h b/drivers/staging/vt6656/int.h index 8e6e217ba4ff..08db868e1d07 100644 --- a/drivers/staging/vt6656/int.h +++ b/drivers/staging/vt6656/int.h @@ -32,29 +32,28 @@ #include "device.h" -typedef struct tagSINTData { - u8 byTSR0; - u8 byPkt0; - u16 wTime0; - u8 byTSR1; - u8 byPkt1; - u16 wTime1; - u8 byTSR2; - u8 byPkt2; - u16 wTime2; - u8 byTSR3; - u8 byPkt3; - u16 wTime3; - u64 qwTSF; - u8 byISR0; - u8 byISR1; - u8 byRTSSuccess; - u8 byRTSFail; - u8 byACKFail; - u8 byFCSErr; - u8 abySW[2]; -} __attribute__ ((__packed__)) -SINTData, *PSINTData; +struct vnt_interrupt_data { + u8 tsr0; + u8 pkt0; + u16 time0; + u8 tsr1; + u8 pkt1; + u16 time1; + u8 tsr2; + u8 pkt2; + u16 time2; + u8 tsr3; + u8 pkt3; + u16 time3; + __le64 tsf; + u8 isr0; + u8 isr1; + u8 rts_success; + u8 rts_fail; + u8 ack_fail; + u8 fcs_err; + u8 sw[2]; +} __packed; void INTvWorkItem(struct vnt_private *); void INTnsProcessData(struct vnt_private *); diff --git a/drivers/staging/vt6656/iwctl.c b/drivers/staging/vt6656/iwctl.c index 3a68dfa23d84..cf4c06a42880 100644 --- a/drivers/staging/vt6656/iwctl.c +++ b/drivers/staging/vt6656/iwctl.c @@ -41,6 +41,7 @@ #include "wpactl.h" #include "control.h" #include "rndis.h" +#include "baseband.h" static const long frequency_list[] = { 2412, 2417, 2422, 2427, 2432, 2437, 2442, 2447, 2452, 2457, 2462, 2467, 2472, 2484, @@ -57,7 +58,7 @@ struct iw_statistics *iwctl_get_wireless_stats(struct net_device *dev) struct vnt_private *pDevice = netdev_priv(dev); long ldBm; - pDevice->wstats.status = pDevice->eOPMode; + pDevice->wstats.status = pDevice->op_mode; RFvRSSITodBm(pDevice, (u8)(pDevice->uCurrRSSI), &ldBm); pDevice->wstats.qual.level = ldBm; pDevice->wstats.qual.noise = 0; @@ -724,10 +725,10 @@ int iwctl_giwaplist(struct net_device *dev, struct iw_request_info *info, if (!wrq->pointer) return -EINVAL; - sock = kzalloc(sizeof(struct sockaddr) * IW_MAX_AP, GFP_KERNEL); + sock = kcalloc(IW_MAX_AP, sizeof(struct sockaddr), GFP_KERNEL); if (sock == NULL) return -ENOMEM; - qual = kzalloc(sizeof(struct iw_quality) * IW_MAX_AP, GFP_KERNEL); + qual = kcalloc(IW_MAX_AP, sizeof(struct iw_quality), GFP_KERNEL); if (qual == NULL) { kfree(sock); return -ENOMEM; @@ -1394,7 +1395,8 @@ int iwctl_giwpower(struct net_device *dev, struct iw_request_info *info, if (pMgmt == NULL) return -EFAULT; - if ((wrq->disabled = (mode == WMAC_POWER_CAM))) + wrq->disabled = (mode == WMAC_POWER_CAM); + if (wrq->disabled) return 0; if ((wrq->flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) { diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index 54414ed27191..3ce19ddbc569 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -47,25 +47,19 @@ static int msglevel =MSG_LEVEL_INFO; * * Parameters: * In: - * uByteidx - Index of Mask - * byData - Mask Value to write + * mc_filter (mac filter) * Out: * none * * Return Value: none * */ -void MACvWriteMultiAddr(struct vnt_private *pDevice, u32 uByteIdx, u8 byData) +void MACvWriteMultiAddr(struct vnt_private *pDevice, u64 mc_filter) { - u8 byData1; + __le64 le_mc = cpu_to_le64(mc_filter); - byData1 = byData; - CONTROLnsRequestOut(pDevice, - MESSAGE_TYPE_WRITE, - (u16) (MAC_REG_MAR0 + uByteIdx), - MESSAGE_REQUEST_MACREG, - 1, - &byData1); + CONTROLnsRequestOut(pDevice, MESSAGE_TYPE_WRITE, MAC_REG_MAR0, + MESSAGE_REQUEST_MACREG, sizeof(le_mc), (u8 *)&le_mc); } /* diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index 0db1be5b01c8..4053e431ef99 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -403,7 +403,7 @@ #define MAC_REVISION_A0 0x00 #define MAC_REVISION_A1 0x01 -void MACvWriteMultiAddr(struct vnt_private *, u32, u8); +void MACvWriteMultiAddr(struct vnt_private *, u64); void MACbShutdown(struct vnt_private *); void MACvSetBBType(struct vnt_private *, u8); void MACvDisableKeyEntry(struct vnt_private *, u32); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 58edcae74efc..3c9323069e01 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -256,7 +256,7 @@ device_set_options(struct vnt_private *pDevice) { pDevice->byShortPreamble = PREAMBLE_TYPE_DEF; pDevice->ePSMode = PS_MODE_DEF; pDevice->b11hEnable = X80211h_MODE_DEF; - pDevice->eOPMode = OP_MODE_DEF; + pDevice->op_mode = NL80211_IFTYPE_UNSPECIFIED; pDevice->uConnectionRate = DATA_RATE_DEF; if (pDevice->uConnectionRate < RATE_AUTO) pDevice->bFixRate = true; pDevice->byBBType = BBP_TYPE_DEF; @@ -409,7 +409,7 @@ static int device_init_registers(struct vnt_private *pDevice) if (pDevice->abyCCKPwrTbl[ii] == 0) pDevice->abyCCKPwrTbl[ii] = pDevice->byCCKPwr; - pDevice->abyOFDMPwrTbl[ii] = + pDevice->abyOFDMPwrTbl[ii] = pDevice->abyEEPROM[ii + EEP_OFS_OFDM_PWR_TBL]; if (pDevice->abyOFDMPwrTbl[ii] == 0) pDevice->abyOFDMPwrTbl[ii] = pDevice->byOFDMPwrG; @@ -749,44 +749,47 @@ err_nomem: return rc; } -static void device_free_tx_bufs(struct vnt_private *pDevice) +static void device_free_tx_bufs(struct vnt_private *priv) { - struct vnt_usb_send_context *pTxContext; - int ii; + struct vnt_usb_send_context *tx_context; + int ii; - for (ii = 0; ii < pDevice->cbTD; ii++) { + for (ii = 0; ii < priv->cbTD; ii++) { + tx_context = priv->apTD[ii]; + /* deallocate URBs */ + if (tx_context->pUrb) { + usb_kill_urb(tx_context->pUrb); + usb_free_urb(tx_context->pUrb); + } - pTxContext = pDevice->apTD[ii]; - /* deallocate URBs */ - if (pTxContext->pUrb) { - usb_kill_urb(pTxContext->pUrb); - usb_free_urb(pTxContext->pUrb); - } - kfree(pTxContext); - } - return; + kfree(tx_context); + } + + return; } -static void device_free_rx_bufs(struct vnt_private *pDevice) +static void device_free_rx_bufs(struct vnt_private *priv) { - struct vnt_rcb *pRCB; + struct vnt_rcb *rcb; int ii; - for (ii = 0; ii < pDevice->cbRD; ii++) { + for (ii = 0; ii < priv->cbRD; ii++) { + rcb = priv->apRCB[ii]; - pRCB = pDevice->apRCB[ii]; - /* deallocate URBs */ - if (pRCB->pUrb) { - usb_kill_urb(pRCB->pUrb); - usb_free_urb(pRCB->pUrb); - } - /* deallocate skb */ - if (pRCB->skb) - dev_kfree_skb(pRCB->skb); - } - kfree(pDevice->pRCBMem); + /* deallocate URBs */ + if (rcb->pUrb) { + usb_kill_urb(rcb->pUrb); + usb_free_urb(rcb->pUrb); + } - return; + /* deallocate skb */ + if (rcb->skb) + dev_kfree_skb(rcb->skb); + } + + kfree(priv->pRCBMem); + + return; } static void usb_device_reset(struct vnt_private *pDevice) @@ -798,95 +801,109 @@ static void usb_device_reset(struct vnt_private *pDevice) return ; } -static void device_free_int_bufs(struct vnt_private *pDevice) +static void device_free_int_bufs(struct vnt_private *priv) { - kfree(pDevice->intBuf.pDataBuf); - return; + kfree(priv->int_buf.data_buf); + + return; } -static bool device_alloc_bufs(struct vnt_private *pDevice) +static bool device_alloc_bufs(struct vnt_private *priv) { - struct vnt_usb_send_context *pTxContext; - struct vnt_rcb *pRCB; + struct vnt_usb_send_context *tx_context; + struct vnt_rcb *rcb; int ii; - for (ii = 0; ii < pDevice->cbTD; ii++) { + for (ii = 0; ii < priv->cbTD; ii++) { + tx_context = kmalloc(sizeof(struct vnt_usb_send_context), + GFP_KERNEL); + if (tx_context == NULL) { + DBG_PRT(MSG_LEVEL_ERR, KERN_ERR + "%s : allocate tx usb context failed\n", + priv->dev->name); + goto free_tx; + } - pTxContext = kmalloc(sizeof(struct vnt_usb_send_context), GFP_KERNEL); - if (pTxContext == NULL) { - DBG_PRT(MSG_LEVEL_ERR,KERN_ERR "%s : allocate tx usb context failed\n", pDevice->dev->name); - goto free_tx; - } - pDevice->apTD[ii] = pTxContext; - pTxContext->pDevice = (void *) pDevice; - /* allocate URBs */ - pTxContext->pUrb = usb_alloc_urb(0, GFP_ATOMIC); - if (pTxContext->pUrb == NULL) { - DBG_PRT(MSG_LEVEL_ERR,KERN_ERR "alloc tx urb failed\n"); - goto free_tx; - } - pTxContext->bBoolInUse = false; - } + priv->apTD[ii] = tx_context; + tx_context->pDevice = priv; + + /* allocate URBs */ + tx_context->pUrb = usb_alloc_urb(0, GFP_ATOMIC); + if (tx_context->pUrb == NULL) { + DBG_PRT(MSG_LEVEL_ERR, + KERN_ERR "alloc tx urb failed\n"); + goto free_tx; + } + + tx_context->bBoolInUse = false; + } - /* allocate RCB mem */ - pDevice->pRCBMem = kzalloc((sizeof(struct vnt_rcb) * pDevice->cbRD), + /* allocate RCB mem */ + priv->pRCBMem = kzalloc((sizeof(struct vnt_rcb) * priv->cbRD), GFP_KERNEL); - if (pDevice->pRCBMem == NULL) { - DBG_PRT(MSG_LEVEL_ERR,KERN_ERR "%s : alloc rx usb context failed\n", pDevice->dev->name); - goto free_tx; - } + if (priv->pRCBMem == NULL) { + DBG_PRT(MSG_LEVEL_ERR, KERN_ERR + "%s : alloc rx usb context failed\n", + priv->dev->name); + goto free_tx; + } - pDevice->FirstRecvFreeList = NULL; - pDevice->LastRecvFreeList = NULL; - pDevice->FirstRecvMngList = NULL; - pDevice->LastRecvMngList = NULL; - pDevice->NumRecvFreeList = 0; + priv->FirstRecvFreeList = NULL; + priv->LastRecvFreeList = NULL; + priv->FirstRecvMngList = NULL; + priv->LastRecvMngList = NULL; + priv->NumRecvFreeList = 0; - pRCB = (struct vnt_rcb *)pDevice->pRCBMem; + rcb = (struct vnt_rcb *)priv->pRCBMem; - for (ii = 0; ii < pDevice->cbRD; ii++) { + for (ii = 0; ii < priv->cbRD; ii++) { + priv->apRCB[ii] = rcb; + rcb->pDevice = priv; - pDevice->apRCB[ii] = pRCB; - pRCB->pDevice = (void *) pDevice; - /* allocate URBs */ - pRCB->pUrb = usb_alloc_urb(0, GFP_ATOMIC); + /* allocate URBs */ + rcb->pUrb = usb_alloc_urb(0, GFP_ATOMIC); + if (rcb->pUrb == NULL) { + DBG_PRT(MSG_LEVEL_ERR, KERN_ERR + " Failed to alloc rx urb\n"); + goto free_rx_tx; + } - if (pRCB->pUrb == NULL) { - DBG_PRT(MSG_LEVEL_ERR,KERN_ERR" Failed to alloc rx urb\n"); - goto free_rx_tx; - } - pRCB->skb = dev_alloc_skb((int)pDevice->rx_buf_sz); - if (pRCB->skb == NULL) { - DBG_PRT(MSG_LEVEL_ERR,KERN_ERR" Failed to alloc rx skb\n"); - goto free_rx_tx; - } - pRCB->skb->dev = pDevice->dev; - pRCB->bBoolInUse = false; - EnqueueRCB(pDevice->FirstRecvFreeList, pDevice->LastRecvFreeList, pRCB); - pDevice->NumRecvFreeList++; - pRCB++; - } + rcb->skb = netdev_alloc_skb(priv->dev, priv->rx_buf_sz); + if (rcb->skb == NULL) { + DBG_PRT(MSG_LEVEL_ERR, KERN_ERR + " Failed to alloc rx skb\n"); + goto free_rx_tx; + } + + rcb->bBoolInUse = false; + + EnqueueRCB(priv->FirstRecvFreeList, + priv->LastRecvFreeList, rcb); - pDevice->pInterruptURB = usb_alloc_urb(0, GFP_ATOMIC); - if (pDevice->pInterruptURB == NULL) { - DBG_PRT(MSG_LEVEL_ERR,KERN_ERR"Failed to alloc int urb\n"); - goto free_rx_tx; + priv->NumRecvFreeList++; + rcb++; } - pDevice->intBuf.pDataBuf = kmalloc(MAX_INTERRUPT_SIZE, GFP_KERNEL); - if (pDevice->intBuf.pDataBuf == NULL) { - DBG_PRT(MSG_LEVEL_ERR,KERN_ERR"Failed to alloc int buf\n"); - usb_free_urb(pDevice->pInterruptURB); - goto free_rx_tx; + priv->pInterruptURB = usb_alloc_urb(0, GFP_ATOMIC); + if (priv->pInterruptURB == NULL) { + DBG_PRT(MSG_LEVEL_ERR, KERN_ERR"Failed to alloc int urb\n"); + goto free_rx_tx; } - return true; + priv->int_buf.data_buf = kmalloc(MAX_INTERRUPT_SIZE, GFP_KERNEL); + if (priv->int_buf.data_buf == NULL) { + DBG_PRT(MSG_LEVEL_ERR, KERN_ERR"Failed to alloc int buf\n"); + usb_free_urb(priv->pInterruptURB); + goto free_rx_tx; + } + + return true; free_rx_tx: - device_free_rx_bufs(pDevice); + device_free_rx_bufs(priv); free_tx: - device_free_tx_bufs(pDevice); + device_free_tx_bufs(priv); return false; } @@ -931,13 +948,11 @@ static void device_free_frag_bufs(struct vnt_private *pDevice) int device_alloc_frag_buf(struct vnt_private *pDevice, PSDeFragControlBlock pDeF) { + pDeF->skb = netdev_alloc_skb(pDevice->dev, pDevice->rx_buf_sz); + if (!pDeF->skb) + return false; - pDeF->skb = dev_alloc_skb((int)pDevice->rx_buf_sz); - if (pDeF->skb == NULL) - return false; - pDeF->skb->dev = pDevice->dev; - - return true; + return true; } static int device_open(struct net_device *dev) @@ -974,8 +989,6 @@ static int device_open(struct net_device *dev) goto free_all; } - device_set_multi(pDevice->dev); - /* init for key management */ KeyvInitTable(pDevice,&pDevice->sKey); memcpy(pDevice->vnt_mgmt.abyMACAddr, @@ -992,16 +1005,12 @@ static int device_open(struct net_device *dev) vMgrObjectInit(pDevice); - tasklet_init(&pDevice->EventWorkItem, (void *)INTvWorkItem, (unsigned long)pDevice); - schedule_delayed_work(&pDevice->second_callback_work, HZ); - pDevice->int_interval = 100; /* max 100 microframes */ + pDevice->int_interval = 1; /* bInterval is set to 1 */ pDevice->eEncryptionStatus = Ndis802_11EncryptionDisabled; pDevice->bIsRxWorkItemQueued = true; - pDevice->fKillEventPollingThread = false; - pDevice->bEventAvailable = false; pDevice->bWPADEVUp = false; pDevice->bwextstep0 = false; @@ -1084,7 +1093,6 @@ static int device_close(struct net_device *dev) MP_SET_FLAG(pDevice, fMP_DISCONNECTED); MP_CLEAR_FLAG(pDevice, fMP_POST_WRITES); MP_CLEAR_FLAG(pDevice, fMP_POST_READS); - pDevice->fKillEventPollingThread = true; cancel_delayed_work_sync(&pDevice->run_command_work); cancel_delayed_work_sync(&pDevice->second_callback_work); @@ -1098,8 +1106,6 @@ static int device_close(struct net_device *dev) cancel_work_sync(&pDevice->rx_mng_work_item); cancel_work_sync(&pDevice->read_work_item); - tasklet_kill(&pDevice->EventWorkItem); - pDevice->bRoaming = false; pDevice->bIsRoaming = false; pDevice->bEnableRoaming = false; @@ -1350,69 +1356,73 @@ static int Read_config_file(struct vnt_private *pDevice) static void device_set_multi(struct net_device *dev) { - struct vnt_private *pDevice = netdev_priv(dev); - struct vnt_manager *pMgmt = &pDevice->vnt_mgmt; + struct vnt_private *priv = netdev_priv(dev); + unsigned long flags; + + if (priv->flags & DEVICE_FLAGS_OPENED) { + spin_lock_irqsave(&priv->lock, flags); + + bScheduleCommand(priv, WLAN_CMD_CONFIGURE_FILTER, NULL); + + spin_unlock_irqrestore(&priv->lock, flags); + } +} + +void vnt_configure_filter(struct vnt_private *priv) +{ + struct net_device *dev = priv->dev; + struct vnt_manager *mgmt = &priv->vnt_mgmt; struct netdev_hw_addr *ha; - u32 mc_filter[2]; - int ii; - u8 pbyData[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - u8 byTmpMode = 0; + u64 mc_filter = 0; + u8 tmp = 0; int rc; - spin_lock_irq(&pDevice->lock); - rc = CONTROLnsRequestIn(pDevice, - MESSAGE_TYPE_READ, - MAC_REG_RCR, - MESSAGE_REQUEST_MACREG, - 1, - &byTmpMode - ); - if (rc == 0) pDevice->byRxMode = byTmpMode; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pDevice->byRxMode in= %x\n", pDevice->byRxMode); - - if (dev->flags & IFF_PROMISC) { /* set promiscuous mode */ - DBG_PRT(MSG_LEVEL_ERR,KERN_NOTICE "%s: Promiscuous mode enabled.\n", dev->name); - /* unconditionally log net taps */ - pDevice->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST|RCR_UNICAST); - } - else if ((netdev_mc_count(dev) > pDevice->multicast_limit) || - (dev->flags & IFF_ALLMULTI)) { - CONTROLnsRequestOut(pDevice, - MESSAGE_TYPE_WRITE, - MAC_REG_MAR0, - MESSAGE_REQUEST_MACREG, - 8, - pbyData - ); - pDevice->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST); - } - else { - memset(mc_filter, 0, sizeof(mc_filter)); - netdev_for_each_mc_addr(ha, dev) { - int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26; - mc_filter[bit_nr >> 5] |= cpu_to_le32(1 << (bit_nr & 31)); - } - for (ii = 0; ii < 4; ii++) { - MACvWriteMultiAddr(pDevice, ii, *((u8 *)&mc_filter[0] + ii)); - MACvWriteMultiAddr(pDevice, ii+ 4, *((u8 *)&mc_filter[1] + ii)); - } - pDevice->byRxMode &= ~(RCR_UNICAST); - pDevice->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST); - } + rc = CONTROLnsRequestIn(priv, MESSAGE_TYPE_READ, + MAC_REG_RCR, MESSAGE_REQUEST_MACREG, 1, &tmp); + if (rc == 0) + priv->byRxMode = tmp; + + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "priv->byRxMode in= %x\n", + priv->byRxMode); + + if (dev->flags & IFF_PROMISC) { /* set promiscuous mode */ + DBG_PRT(MSG_LEVEL_ERR, KERN_NOTICE + "%s: Promiscuous mode enabled.\n", dev->name); + /* unconditionally log net taps */ + priv->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST|RCR_UNICAST); + } else if ((netdev_mc_count(dev) > priv->multicast_limit) || + (dev->flags & IFF_ALLMULTI)) { + mc_filter = ~0x0; + MACvWriteMultiAddr(priv, mc_filter); + + priv->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST); + } else { + netdev_for_each_mc_addr(ha, dev) { + int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26; - if (pMgmt->eConfigMode == WMAC_CONFIG_AP) { - /* - * If AP mode, don't enable RCR_UNICAST since HW only compares - * addr1 with local MAC - */ - pDevice->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST); - pDevice->byRxMode &= ~(RCR_UNICAST); - } - ControlvWriteByte(pDevice, MESSAGE_REQUEST_MACREG, MAC_REG_RCR, pDevice->byRxMode); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pDevice->byRxMode out= %x\n", pDevice->byRxMode); - spin_unlock_irq(&pDevice->lock); + mc_filter |= 1ULL << (bit_nr & 0x3f); + } + + MACvWriteMultiAddr(priv, mc_filter); + + priv->byRxMode &= ~(RCR_UNICAST); + priv->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST); + } + + if (mgmt->eConfigMode == WMAC_CONFIG_AP) { + /* + * If AP mode, don't enable RCR_UNICAST since HW only compares + * addr1 with local MAC + */ + priv->byRxMode |= (RCR_MULTICAST|RCR_BROADCAST); + priv->byRxMode &= ~(RCR_UNICAST); + } + + ControlvWriteByte(priv, MESSAGE_REQUEST_MACREG, + MAC_REG_RCR, priv->byRxMode); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + "priv->byRxMode out= %x\n", priv->byRxMode); } static struct net_device_stats *device_get_stats(struct net_device *dev) diff --git a/drivers/staging/vt6656/power.c b/drivers/staging/vt6656/power.c index e7d5487d1041..43da58927cd2 100644 --- a/drivers/staging/vt6656/power.c +++ b/drivers/staging/vt6656/power.c @@ -67,22 +67,23 @@ void PSvEnablePowerSaving(struct vnt_private *pDevice, u16 wListenInterval) /* set period of power up before TBTT */ MACvWriteWord(pDevice, MAC_REG_PWBT, C_PWBT); - if (pDevice->eOPMode != OP_MODE_ADHOC) { + if (pDevice->op_mode != NL80211_IFTYPE_ADHOC) { /* set AID */ MACvWriteWord(pDevice, MAC_REG_AIDATIM, wAID); - } else { - /* set ATIM Window */ - /* MACvWriteATIMW(pDevice->PortOffset, pMgmt->wCurrATIMWindow); */ } - /* Warren:06-18-2004,the sequence must follow PSEN->AUTOSLEEP->GO2DOZE */ + /* Warren:06-18-2004,the sequence must follow + * PSEN->AUTOSLEEP->GO2DOZE + */ /* enable power saving hw function */ MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_PSEN); /* Set AutoSleep */ MACvRegBitsOn(pDevice, MAC_REG_PSCFG, PSCFG_AUTOSLEEP); - /* Warren:MUST turn on this once before turn on AUTOSLEEP ,or the AUTOSLEEP doesn't work */ + /* Warren:MUST turn on this once before turn on AUTOSLEEP ,or the + * AUTOSLEEP doesn't work + */ MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_GO2DOZE); if (wListenInterval >= 2) { @@ -105,8 +106,10 @@ void PSvEnablePowerSaving(struct vnt_private *pDevice, u16 wListenInterval) pDevice->bEnablePSMode = true; - /* We don't send null pkt in ad hoc mode since beacon will handle this. */ - if (pDevice->eOPMode == OP_MODE_INFRASTRUCTURE) + /* We don't send null pkt in ad hoc mode + * since beacon will handle this. + */ + if (pDevice->op_mode == NL80211_IFTYPE_STATION) PSbSendNullPacket(pDevice); pDevice->bPWBitOn = true; @@ -137,7 +140,7 @@ void PSvDisablePowerSaving(struct vnt_private *pDevice) MACvRegBitsOn(pDevice, MAC_REG_PSCTL, PSCTL_ALBCN); pDevice->bEnablePSMode = false; - if (pDevice->eOPMode == OP_MODE_INFRASTRUCTURE) + if (pDevice->op_mode == NL80211_IFTYPE_STATION) PSbSendNullPacket(pDevice); pDevice->bPWBitOn = false; @@ -226,15 +229,19 @@ void PSvSendPSPOLL(struct vnt_private *pDevice) WLAN_SET_FC_PWRMGT(0) )); - pTxPacket->p80211Header->sA2.wDurationID = pMgmt->wCurrAID | BIT14 | BIT15; - memcpy(pTxPacket->p80211Header->sA2.abyAddr1, pMgmt->abyCurrBSSID, WLAN_ADDR_LEN); - memcpy(pTxPacket->p80211Header->sA2.abyAddr2, pMgmt->abyMACAddr, WLAN_ADDR_LEN); + pTxPacket->p80211Header->sA2.wDurationID = + pMgmt->wCurrAID | BIT14 | BIT15; + memcpy(pTxPacket->p80211Header->sA2.abyAddr1, pMgmt->abyCurrBSSID, + WLAN_ADDR_LEN); + memcpy(pTxPacket->p80211Header->sA2.abyAddr2, pMgmt->abyMACAddr, + WLAN_ADDR_LEN); pTxPacket->cbMPDULen = WLAN_HDR_ADDR2_LEN; pTxPacket->cbPayloadLen = 0; /* log failure if sending failed */ if (csMgmt_xmit(pDevice, pTxPacket) != CMD_STATUS_PENDING) - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Send PS-Poll packet failed..\n"); + DBG_PRT(MSG_LEVEL_DEBUG, + KERN_INFO "Send PS-Poll packet failed..\n"); } /* @@ -276,16 +283,21 @@ int PSbSendNullPacket(struct vnt_private *pDevice) pTxPacket->p80211Header->sA3.wFrameCtl = cpu_to_le16(flags); if (pMgmt->eCurrMode != WMAC_MODE_IBSS_STA) - pTxPacket->p80211Header->sA3.wFrameCtl |= cpu_to_le16((u16)WLAN_SET_FC_TODS(1)); - - memcpy(pTxPacket->p80211Header->sA3.abyAddr1, pMgmt->abyCurrBSSID, WLAN_ADDR_LEN); - memcpy(pTxPacket->p80211Header->sA3.abyAddr2, pMgmt->abyMACAddr, WLAN_ADDR_LEN); - memcpy(pTxPacket->p80211Header->sA3.abyAddr3, pMgmt->abyCurrBSSID, WLAN_BSSID_LEN); + pTxPacket->p80211Header->sA3.wFrameCtl |= + cpu_to_le16((u16)WLAN_SET_FC_TODS(1)); + + memcpy(pTxPacket->p80211Header->sA3.abyAddr1, pMgmt->abyCurrBSSID, + WLAN_ADDR_LEN); + memcpy(pTxPacket->p80211Header->sA3.abyAddr2, pMgmt->abyMACAddr, + WLAN_ADDR_LEN); + memcpy(pTxPacket->p80211Header->sA3.abyAddr3, pMgmt->abyCurrBSSID, + WLAN_BSSID_LEN); pTxPacket->cbMPDULen = WLAN_HDR_ADDR3_LEN; pTxPacket->cbPayloadLen = 0; /* log error if sending failed */ if (csMgmt_xmit(pDevice, pTxPacket) != CMD_STATUS_PENDING) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Send Null Packet failed !\n"); + DBG_PRT(MSG_LEVEL_DEBUG, + KERN_INFO "Send Null Packet failed !\n"); return false; } return true; diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 51fff896fcb5..3840323858fc 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -118,7 +118,7 @@ static void s_vSWencryption(struct vnt_private *pDevice, static unsigned int s_uGetTxRsvTime(struct vnt_private *pDevice, u8 byPktType, u32 cbFrameLength, u16 wRate, int bNeedAck); -static u16 s_uGetRTSCTSRsvTime(struct vnt_private *priv, +static __le16 s_uGetRTSCTSRsvTime(struct vnt_private *priv, u8 rsv_type, u8 pkt_type, u32 frame_lenght, u16 current_rate); static u16 s_vFillCTSHead(struct vnt_private *pDevice, u32 uDMAIdx, @@ -129,10 +129,10 @@ static u16 s_vFillRTSHead(struct vnt_private *pDevice, u8 byPktType, union vnt_tx_data_head *head, u32 cbFrameLength, int bNeedAck, struct ethhdr *psEthHeader, u16 wCurrentRate, u8 byFBOption); -static u16 s_uGetDataDuration(struct vnt_private *pDevice, +static __le16 s_uGetDataDuration(struct vnt_private *pDevice, u8 byPktType, int bNeedAck); -static u16 s_uGetRTSCTSDuration(struct vnt_private *pDevice, +static __le16 s_uGetRTSCTSDuration(struct vnt_private *pDevice, u8 byDurType, u32 cbFrameLength, u8 byPktType, u16 wRate, int bNeedAck, u8 byFBOption); @@ -327,7 +327,7 @@ static void s_vSWencryption(struct vnt_private *pDevice, } } -static u16 vnt_time_stamp_off(struct vnt_private *priv, u16 rate) +static __le16 vnt_time_stamp_off(struct vnt_private *priv, u16 rate) { return cpu_to_le16(wTimeStampOff[priv->byPreambleType % 2] [rate % MAX_RATE]); @@ -359,7 +359,7 @@ static u32 s_uGetTxRsvTime(struct vnt_private *priv, u8 pkt_type, return data_time; } -static u16 vnt_rxtx_rsvtime_le16(struct vnt_private *priv, u8 pkt_type, +static __le16 vnt_rxtx_rsvtime_le16(struct vnt_private *priv, u8 pkt_type, u32 frame_length, u16 rate, int need_ack) { return cpu_to_le16((u16)s_uGetTxRsvTime(priv, pkt_type, @@ -367,7 +367,7 @@ static u16 vnt_rxtx_rsvtime_le16(struct vnt_private *priv, u8 pkt_type, } //byFreqType: 0=>5GHZ 1=>2.4GHZ -static u16 s_uGetRTSCTSRsvTime(struct vnt_private *priv, +static __le16 s_uGetRTSCTSRsvTime(struct vnt_private *priv, u8 rsv_type, u8 pkt_type, u32 frame_lenght, u16 current_rate) { u32 rrv_time, rts_time, cts_time, ack_time, data_time; @@ -402,7 +402,7 @@ static u16 s_uGetRTSCTSRsvTime(struct vnt_private *priv, rrv_time = cts_time + ack_time + data_time + 2 * priv->uSIFS; - return rrv_time; + return cpu_to_le16((u16)rrv_time); } rrv_time = rts_time + cts_time + ack_time + data_time + 3 * priv->uSIFS; @@ -411,7 +411,7 @@ static u16 s_uGetRTSCTSRsvTime(struct vnt_private *priv, } //byFreqType 0: 5GHz, 1:2.4Ghz -static u16 s_uGetDataDuration(struct vnt_private *pDevice, +static __le16 s_uGetDataDuration(struct vnt_private *pDevice, u8 byPktType, int bNeedAck) { u32 uAckTime = 0; @@ -430,7 +430,7 @@ static u16 s_uGetDataDuration(struct vnt_private *pDevice, } //byFreqType: 0=>5GHZ 1=>2.4GHZ -static u16 s_uGetRTSCTSDuration(struct vnt_private *pDevice, u8 byDurType, +static __le16 s_uGetRTSCTSDuration(struct vnt_private *pDevice, u8 byDurType, u32 cbFrameLength, u8 byPktType, u16 wRate, int bNeedAck, u8 byFBOption) { @@ -481,14 +481,14 @@ static u16 vnt_rxtx_datahead_g(struct vnt_private *priv, u8 pkt_type, u16 rate, PK_TYPE_11B, &buf->b); /* Get Duration and TimeStamp */ - buf->wDuration_a = s_uGetDataDuration(priv, pkt_type, need_ack); - buf->wDuration_b = s_uGetDataDuration(priv, PK_TYPE_11B, need_ack); + buf->duration_a = s_uGetDataDuration(priv, pkt_type, need_ack); + buf->duration_b = s_uGetDataDuration(priv, PK_TYPE_11B, need_ack); - buf->wTimeStampOff_a = vnt_time_stamp_off(priv, rate); - buf->wTimeStampOff_b = vnt_time_stamp_off(priv, + buf->time_stamp_off_a = vnt_time_stamp_off(priv, rate); + buf->time_stamp_off_b = vnt_time_stamp_off(priv, priv->byTopCCKBasicRate); - return buf->wDuration_a; + return le16_to_cpu(buf->duration_a); } static u16 vnt_rxtx_datahead_g_fb(struct vnt_private *priv, u8 pkt_type, @@ -502,17 +502,17 @@ static u16 vnt_rxtx_datahead_g_fb(struct vnt_private *priv, u8 pkt_type, PK_TYPE_11B, &buf->b); /* Get Duration and TimeStamp */ - buf->wDuration_a = s_uGetDataDuration(priv, pkt_type, need_ack); - buf->wDuration_b = s_uGetDataDuration(priv, PK_TYPE_11B, need_ack); + buf->duration_a = s_uGetDataDuration(priv, pkt_type, need_ack); + buf->duration_b = s_uGetDataDuration(priv, PK_TYPE_11B, need_ack); - buf->wDuration_a_f0 = s_uGetDataDuration(priv, pkt_type, need_ack); - buf->wDuration_a_f1 = s_uGetDataDuration(priv, pkt_type, need_ack); + buf->duration_a_f0 = s_uGetDataDuration(priv, pkt_type, need_ack); + buf->duration_a_f1 = s_uGetDataDuration(priv, pkt_type, need_ack); - buf->wTimeStampOff_a = vnt_time_stamp_off(priv, rate); - buf->wTimeStampOff_b = vnt_time_stamp_off(priv, + buf->time_stamp_off_a = vnt_time_stamp_off(priv, rate); + buf->time_stamp_off_b = vnt_time_stamp_off(priv, priv->byTopCCKBasicRate); - return buf->wDuration_a; + return le16_to_cpu(buf->duration_a); } static u16 vnt_rxtx_datahead_a_fb(struct vnt_private *priv, u8 pkt_type, @@ -522,14 +522,14 @@ static u16 vnt_rxtx_datahead_a_fb(struct vnt_private *priv, u8 pkt_type, /* Get SignalField,ServiceField,Length */ BBvCalculateParameter(priv, frame_len, rate, pkt_type, &buf->a); /* Get Duration and TimeStampOff */ - buf->wDuration = s_uGetDataDuration(priv, pkt_type, need_ack); + buf->duration = s_uGetDataDuration(priv, pkt_type, need_ack); - buf->wDuration_f0 = s_uGetDataDuration(priv, pkt_type, need_ack); - buf->wDuration_f1 = s_uGetDataDuration(priv, pkt_type, need_ack); + buf->duration_f0 = s_uGetDataDuration(priv, pkt_type, need_ack); + buf->duration_f1 = s_uGetDataDuration(priv, pkt_type, need_ack); - buf->wTimeStampOff = vnt_time_stamp_off(priv, rate); + buf->time_stamp_off = vnt_time_stamp_off(priv, rate); - return buf->wDuration; + return le16_to_cpu(buf->duration); } static u16 vnt_rxtx_datahead_ab(struct vnt_private *priv, u8 pkt_type, @@ -539,26 +539,27 @@ static u16 vnt_rxtx_datahead_ab(struct vnt_private *priv, u8 pkt_type, /* Get SignalField,ServiceField,Length */ BBvCalculateParameter(priv, frame_len, rate, pkt_type, &buf->ab); /* Get Duration and TimeStampOff */ - buf->wDuration = s_uGetDataDuration(priv, pkt_type, need_ack); + buf->duration = s_uGetDataDuration(priv, pkt_type, need_ack); - buf->wTimeStampOff = vnt_time_stamp_off(priv, rate); + buf->time_stamp_off = vnt_time_stamp_off(priv, rate); - return buf->wDuration; + return le16_to_cpu(buf->duration); } static int vnt_fill_ieee80211_rts(struct vnt_private *priv, struct ieee80211_rts *rts, struct ethhdr *eth_hdr, - u16 duration) + __le16 duration) { rts->duration = duration; rts->frame_control = TYPE_CTL_RTS; - if (priv->eOPMode == OP_MODE_ADHOC || priv->eOPMode == OP_MODE_AP) + if (priv->op_mode == NL80211_IFTYPE_ADHOC || + priv->op_mode == NL80211_IFTYPE_AP) memcpy(rts->ra, eth_hdr->h_dest, ETH_ALEN); else memcpy(rts->ra, priv->abyBSSID, ETH_ALEN); - if (priv->eOPMode == OP_MODE_AP) + if (priv->op_mode == NL80211_IFTYPE_AP) memcpy(rts->ta, priv->abyBSSID, ETH_ALEN); else memcpy(rts->ta, eth_hdr->h_source, ETH_ALEN); @@ -578,14 +579,14 @@ static u16 vnt_rxtx_rts_g_head(struct vnt_private *priv, BBvCalculateParameter(priv, rts_frame_len, priv->byTopOFDMBasicRate, pkt_type, &buf->a); - buf->wDuration_bb = s_uGetRTSCTSDuration(priv, RTSDUR_BB, frame_len, + buf->duration_bb = s_uGetRTSCTSDuration(priv, RTSDUR_BB, frame_len, PK_TYPE_11B, priv->byTopCCKBasicRate, need_ack, fb_option); - buf->wDuration_aa = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, + buf->duration_aa = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, pkt_type, current_rate, need_ack, fb_option); - buf->wDuration_ba = s_uGetRTSCTSDuration(priv, RTSDUR_BA, frame_len, + buf->duration_ba = s_uGetRTSCTSDuration(priv, RTSDUR_BA, frame_len, pkt_type, current_rate, need_ack, fb_option); - vnt_fill_ieee80211_rts(priv, &buf->data, eth_hdr, buf->wDuration_aa); + vnt_fill_ieee80211_rts(priv, &buf->data, eth_hdr, buf->duration_aa); return vnt_rxtx_datahead_g(priv, pkt_type, current_rate, &buf->data_head, frame_len, need_ack); @@ -604,24 +605,24 @@ static u16 vnt_rxtx_rts_g_fb_head(struct vnt_private *priv, priv->byTopOFDMBasicRate, pkt_type, &buf->a); - buf->wDuration_bb = s_uGetRTSCTSDuration(priv, RTSDUR_BB, frame_len, + buf->duration_bb = s_uGetRTSCTSDuration(priv, RTSDUR_BB, frame_len, PK_TYPE_11B, priv->byTopCCKBasicRate, need_ack, fb_option); - buf->wDuration_aa = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, + buf->duration_aa = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, pkt_type, current_rate, need_ack, fb_option); - buf->wDuration_ba = s_uGetRTSCTSDuration(priv, RTSDUR_BA, frame_len, + buf->duration_ba = s_uGetRTSCTSDuration(priv, RTSDUR_BA, frame_len, pkt_type, current_rate, need_ack, fb_option); - buf->wRTSDuration_ba_f0 = s_uGetRTSCTSDuration(priv, RTSDUR_BA_F0, + buf->rts_duration_ba_f0 = s_uGetRTSCTSDuration(priv, RTSDUR_BA_F0, frame_len, pkt_type, priv->tx_rate_fb0, need_ack, fb_option); - buf->wRTSDuration_aa_f0 = s_uGetRTSCTSDuration(priv, RTSDUR_AA_F0, + buf->rts_duration_aa_f0 = s_uGetRTSCTSDuration(priv, RTSDUR_AA_F0, frame_len, pkt_type, priv->tx_rate_fb0, need_ack, fb_option); - buf->wRTSDuration_ba_f1 = s_uGetRTSCTSDuration(priv, RTSDUR_BA_F1, + buf->rts_duration_ba_f1 = s_uGetRTSCTSDuration(priv, RTSDUR_BA_F1, frame_len, pkt_type, priv->tx_rate_fb1, need_ack, fb_option); - buf->wRTSDuration_aa_f1 = s_uGetRTSCTSDuration(priv, RTSDUR_AA_F1, + buf->rts_duration_aa_f1 = s_uGetRTSCTSDuration(priv, RTSDUR_AA_F1, frame_len, pkt_type, priv->tx_rate_fb1, need_ack, fb_option); - vnt_fill_ieee80211_rts(priv, &buf->data, eth_hdr, buf->wDuration_aa); + vnt_fill_ieee80211_rts(priv, &buf->data, eth_hdr, buf->duration_aa); return vnt_rxtx_datahead_g_fb(priv, pkt_type, current_rate, &buf->data_head, frame_len, need_ack); @@ -637,10 +638,10 @@ static u16 vnt_rxtx_rts_ab_head(struct vnt_private *priv, BBvCalculateParameter(priv, rts_frame_len, priv->byTopOFDMBasicRate, pkt_type, &buf->ab); - buf->wDuration = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, + buf->duration = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, pkt_type, current_rate, need_ack, fb_option); - vnt_fill_ieee80211_rts(priv, &buf->data, eth_hdr, buf->wDuration); + vnt_fill_ieee80211_rts(priv, &buf->data, eth_hdr, buf->duration); return vnt_rxtx_datahead_ab(priv, pkt_type, current_rate, &buf->data_head, frame_len, need_ack); @@ -656,16 +657,16 @@ static u16 vnt_rxtx_rts_a_fb_head(struct vnt_private *priv, BBvCalculateParameter(priv, rts_frame_len, priv->byTopOFDMBasicRate, pkt_type, &buf->a); - buf->wDuration = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, + buf->duration = s_uGetRTSCTSDuration(priv, RTSDUR_AA, frame_len, pkt_type, current_rate, need_ack, fb_option); - buf->wRTSDuration_f0 = s_uGetRTSCTSDuration(priv, RTSDUR_AA_F0, + buf->rts_duration_f0 = s_uGetRTSCTSDuration(priv, RTSDUR_AA_F0, frame_len, pkt_type, priv->tx_rate_fb0, need_ack, fb_option); - buf->wRTSDuration_f1 = s_uGetRTSCTSDuration(priv, RTSDUR_AA_F1, + buf->rts_duration_f1 = s_uGetRTSCTSDuration(priv, RTSDUR_AA_F1, frame_len, pkt_type, priv->tx_rate_fb1, need_ack, fb_option); - vnt_fill_ieee80211_rts(priv, &buf->data, eth_hdr, buf->wDuration); + vnt_fill_ieee80211_rts(priv, &buf->data, eth_hdr, buf->duration); return vnt_rxtx_datahead_a_fb(priv, pkt_type, current_rate, &buf->data_head, frame_len, need_ack); @@ -727,19 +728,19 @@ static u16 s_vFillCTSHead(struct vnt_private *pDevice, u32 uDMAIdx, /* Get SignalField,ServiceField,Length */ BBvCalculateParameter(pDevice, uCTSFrameLen, pDevice->byTopCCKBasicRate, PK_TYPE_11B, &pBuf->b); - pBuf->wDuration_ba = s_uGetRTSCTSDuration(pDevice, CTSDUR_BA, + pBuf->duration_ba = s_uGetRTSCTSDuration(pDevice, CTSDUR_BA, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption); /* Get CTSDuration_ba_f0 */ - pBuf->wCTSDuration_ba_f0 = s_uGetRTSCTSDuration(pDevice, + pBuf->cts_duration_ba_f0 = s_uGetRTSCTSDuration(pDevice, CTSDUR_BA_F0, cbFrameLength, byPktType, pDevice->tx_rate_fb0, bNeedAck, byFBOption); /* Get CTSDuration_ba_f1 */ - pBuf->wCTSDuration_ba_f1 = s_uGetRTSCTSDuration(pDevice, + pBuf->cts_duration_ba_f1 = s_uGetRTSCTSDuration(pDevice, CTSDUR_BA_F1, cbFrameLength, byPktType, pDevice->tx_rate_fb1, bNeedAck, byFBOption); /* Get CTS Frame body */ - pBuf->data.duration = pBuf->wDuration_ba; + pBuf->data.duration = pBuf->duration_ba; pBuf->data.frame_control = TYPE_CTL_CTS; memcpy(pBuf->data.ra, pDevice->abyCurrentNetAddr, ETH_ALEN); @@ -751,11 +752,11 @@ static u16 s_vFillCTSHead(struct vnt_private *pDevice, u32 uDMAIdx, BBvCalculateParameter(pDevice, uCTSFrameLen, pDevice->byTopCCKBasicRate, PK_TYPE_11B, &pBuf->b); /* Get CTSDuration_ba */ - pBuf->wDuration_ba = s_uGetRTSCTSDuration(pDevice, + pBuf->duration_ba = s_uGetRTSCTSDuration(pDevice, CTSDUR_BA, cbFrameLength, byPktType, wCurrentRate, bNeedAck, byFBOption); /*Get CTS Frame body*/ - pBuf->data.duration = pBuf->wDuration_ba; + pBuf->data.duration = pBuf->duration_ba; pBuf->data.frame_control = TYPE_CTL_CTS; memcpy(pBuf->data.ra, pDevice->abyCurrentNetAddr, ETH_ALEN); @@ -815,16 +816,16 @@ static u16 s_vGenerateTxParameter(struct vnt_private *pDevice, struct vnt_rrv_time_rts *pBuf = &tx_buffer->tx_head.tx_rts.rts; - pBuf->wRTSTxRrvTime_aa = s_uGetRTSCTSRsvTime(pDevice, 2, + pBuf->rts_rrv_time_aa = s_uGetRTSCTSRsvTime(pDevice, 2, byPktType, cbFrameSize, wCurrentRate); - pBuf->wRTSTxRrvTime_ba = s_uGetRTSCTSRsvTime(pDevice, 1, + pBuf->rts_rrv_time_ba = s_uGetRTSCTSRsvTime(pDevice, 1, byPktType, cbFrameSize, wCurrentRate); - pBuf->wRTSTxRrvTime_bb = s_uGetRTSCTSRsvTime(pDevice, 0, + pBuf->rts_rrv_time_bb = s_uGetRTSCTSRsvTime(pDevice, 0, byPktType, cbFrameSize, wCurrentRate); - pBuf->wTxRrvTime_a = vnt_rxtx_rsvtime_le16(pDevice, + pBuf->rrv_time_a = vnt_rxtx_rsvtime_le16(pDevice, byPktType, cbFrameSize, wCurrentRate, bNeedACK); - pBuf->wTxRrvTime_b = vnt_rxtx_rsvtime_le16(pDevice, + pBuf->rrv_time_b = vnt_rxtx_rsvtime_le16(pDevice, PK_TYPE_11B, cbFrameSize, pDevice->byTopCCKBasicRate, bNeedACK); @@ -845,13 +846,13 @@ static u16 s_vGenerateTxParameter(struct vnt_private *pDevice, struct vnt_rrv_time_cts *pBuf = &tx_buffer-> tx_head.tx_cts.cts; - pBuf->wTxRrvTime_a = vnt_rxtx_rsvtime_le16(pDevice, + pBuf->rrv_time_a = vnt_rxtx_rsvtime_le16(pDevice, byPktType, cbFrameSize, wCurrentRate, bNeedACK); - pBuf->wTxRrvTime_b = vnt_rxtx_rsvtime_le16(pDevice, + pBuf->rrv_time_b = vnt_rxtx_rsvtime_le16(pDevice, PK_TYPE_11B, cbFrameSize, pDevice->byTopCCKBasicRate, bNeedACK); - pBuf->wCTSTxRrvTime_ba = s_uGetRTSCTSRsvTime(pDevice, 3, + pBuf->cts_rrv_time_ba = s_uGetRTSCTSRsvTime(pDevice, 3, byPktType, cbFrameSize, wCurrentRate); if (need_mic) { @@ -879,10 +880,10 @@ static u16 s_vGenerateTxParameter(struct vnt_private *pDevice, struct vnt_rrv_time_ab *pBuf = &tx_buffer-> tx_head.tx_ab.ab; - pBuf->wRTSTxRrvTime = s_uGetRTSCTSRsvTime(pDevice, 2, + pBuf->rts_rrv_time = s_uGetRTSCTSRsvTime(pDevice, 2, byPktType, cbFrameSize, wCurrentRate); - pBuf->wTxRrvTime = vnt_rxtx_rsvtime_le16(pDevice, + pBuf->rrv_time = vnt_rxtx_rsvtime_le16(pDevice, byPktType, cbFrameSize, wCurrentRate, bNeedACK); /* Fill RTS */ @@ -893,7 +894,7 @@ static u16 s_vGenerateTxParameter(struct vnt_private *pDevice, struct vnt_rrv_time_ab *pBuf = &tx_buffer-> tx_head.tx_ab.ab; - pBuf->wTxRrvTime = vnt_rxtx_rsvtime_le16(pDevice, + pBuf->rrv_time = vnt_rxtx_rsvtime_le16(pDevice, PK_TYPE_11A, cbFrameSize, wCurrentRate, bNeedACK); @@ -913,10 +914,10 @@ static u16 s_vGenerateTxParameter(struct vnt_private *pDevice, struct vnt_rrv_time_ab *pBuf = &tx_buffer-> tx_head.tx_ab.ab; - pBuf->wRTSTxRrvTime = s_uGetRTSCTSRsvTime(pDevice, 0, + pBuf->rts_rrv_time = s_uGetRTSCTSRsvTime(pDevice, 0, byPktType, cbFrameSize, wCurrentRate); - pBuf->wTxRrvTime = vnt_rxtx_rsvtime_le16(pDevice, + pBuf->rrv_time = vnt_rxtx_rsvtime_le16(pDevice, PK_TYPE_11B, cbFrameSize, wCurrentRate, bNeedACK); @@ -928,7 +929,7 @@ static u16 s_vGenerateTxParameter(struct vnt_private *pDevice, struct vnt_rrv_time_ab *pBuf = &tx_buffer-> tx_head.tx_ab.ab; - pBuf->wTxRrvTime = vnt_rxtx_rsvtime_le16(pDevice, + pBuf->rrv_time = vnt_rxtx_rsvtime_le16(pDevice, PK_TYPE_11B, cbFrameSize, wCurrentRate, bNeedACK); @@ -991,8 +992,8 @@ static int s_bPacketToWirelessUsb(struct vnt_private *pDevice, u8 byPktType, //Set packet type pTxBufHead->wFIFOCtl |= (u16)(byPktType<<8); - if ((pDevice->eOPMode == OP_MODE_ADHOC) || - (pDevice->eOPMode == OP_MODE_AP)) { + if (pDevice->op_mode == NL80211_IFTYPE_ADHOC || + pDevice->op_mode == NL80211_IFTYPE_AP) { if (is_multicast_ether_addr(psEthHeader->h_dest)) { bNeedACK = false; pTxBufHead->wFIFOCtl = @@ -1292,7 +1293,7 @@ static void s_vGenerateMACHeader(struct vnt_private *pDevice, pMACHeader->frame_control = TYPE_802_11_DATA; - if (pDevice->eOPMode == OP_MODE_AP) { + if (pDevice->op_mode == NL80211_IFTYPE_AP) { memcpy(&(pMACHeader->addr1[0]), &(psEthHeader->h_dest[0]), ETH_ALEN); @@ -1302,7 +1303,7 @@ static void s_vGenerateMACHeader(struct vnt_private *pDevice, ETH_ALEN); pMACHeader->frame_control |= FC_FROMDS; } else { - if (pDevice->eOPMode == OP_MODE_ADHOC) { + if (pDevice->op_mode == NL80211_IFTYPE_ADHOC) { memcpy(&(pMACHeader->addr1[0]), &(psEthHeader->h_dest[0]), ETH_ALEN); @@ -1541,8 +1542,8 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice, pbyIVHead = (u8 *)(pbyTxBufferAddr + cbHeaderSize + cbMacHdLen + uPadding); pbyPayloadHead = (u8 *)(pbyTxBufferAddr + cbHeaderSize + cbMacHdLen + uPadding + cbIVlen); do { - if ((pDevice->eOPMode == OP_MODE_INFRASTRUCTURE) && - (pDevice->bLinkPass == true)) { + if (pDevice->op_mode == NL80211_IFTYPE_STATION && + pDevice->bLinkPass == true) { pbyBSSID = pDevice->abyBSSID; // get pairwise key if (KeybGetTransmitKey(&(pDevice->sKey), pbyBSSID, PAIRWISE_KEY, &pTransmitKey) == false) { @@ -1560,7 +1561,7 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice, pbyBSSID = pDevice->abyBroadcastAddr; if(KeybGetTransmitKey(&(pDevice->sKey), pbyBSSID, GROUP_KEY, &pTransmitKey) == false) { pTransmitKey = NULL; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KEY is NULL. OP Mode[%d]\n", pDevice->eOPMode); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"KEY is NULL. OP Mode[%d]\n", pDevice->op_mode); } else { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Get GTK.\n"); } @@ -1592,14 +1593,14 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice, if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) { struct vnt_tx_datahead_g *data_head = &pTX_Buffer->tx_head. tx_cts.tx.head.cts_g.data_head; - data_head->wDuration_a = + data_head->duration_a = cpu_to_le16(pPacket->p80211Header->sA2.wDurationID); - data_head->wDuration_b = + data_head->duration_b = cpu_to_le16(pPacket->p80211Header->sA2.wDurationID); } else { struct vnt_tx_datahead_ab *data_head = &pTX_Buffer->tx_head. tx_ab.tx.head.data_head_ab; - data_head->wDuration = + data_head->duration = cpu_to_le16(pPacket->p80211Header->sA2.wDurationID); } } @@ -1609,7 +1610,7 @@ CMD_STATUS csMgmt_xmit(struct vnt_private *pDevice, pTX_Buffer->byType = 0x00; pContext->pPacket = NULL; - pContext->Type = CONTEXT_MGMT_PACKET; + pContext->type = CONTEXT_MGMT_PACKET; pContext->uBufLen = (u16)cbReqCount + 4; //USB header if (WLAN_GET_FC_TODS(pMACHeader->frame_control) == 0) { @@ -1701,7 +1702,7 @@ CMD_STATUS csBeacon_xmit(struct vnt_private *pDevice, pTX_Buffer->byType = 0x01; pContext->pPacket = NULL; - pContext->Type = CONTEXT_MGMT_PACKET; + pContext->type = CONTEXT_MGMT_PACKET; pContext->uBufLen = (u16)cbReqCount + 4; //USB header PIPEnsSendBulkOut(pDevice,pContext); @@ -2032,14 +2033,14 @@ void vDMA0_tx_80211(struct vnt_private *pDevice, struct sk_buff *skb) if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) { struct vnt_tx_datahead_g *data_head = &pTX_Buffer->tx_head. tx_cts.tx.head.cts_g.data_head; - data_head->wDuration_a = + data_head->duration_a = cpu_to_le16(p80211Header->sA2.wDurationID); - data_head->wDuration_b = + data_head->duration_b = cpu_to_le16(p80211Header->sA2.wDurationID); } else { struct vnt_tx_datahead_ab *data_head = &pTX_Buffer->tx_head. tx_ab.tx.head.data_head_ab; - data_head->wDuration = + data_head->duration = cpu_to_le16(p80211Header->sA2.wDurationID); } } @@ -2049,7 +2050,7 @@ void vDMA0_tx_80211(struct vnt_private *pDevice, struct sk_buff *skb) pTX_Buffer->byType = 0x00; pContext->pPacket = skb; - pContext->Type = CONTEXT_MGMT_PACKET; + pContext->type = CONTEXT_MGMT_PACKET; pContext->uBufLen = (u16)cbReqCount + 4; //USB header if (WLAN_GET_FC_TODS(pMACHeader->frame_control) == 0) { @@ -2305,7 +2306,7 @@ int nsDMA_tx_packet(struct vnt_private *pDevice, } } else { - if (pDevice->eOPMode == OP_MODE_ADHOC) { + if (pDevice->op_mode == NL80211_IFTYPE_ADHOC) { // Adhoc Tx rate decided from node DB if (is_multicast_ether_addr(pDevice->sTxEthHeader.h_dest)) { // Multicast use highest data rate @@ -2336,7 +2337,7 @@ int nsDMA_tx_packet(struct vnt_private *pDevice, } } } - if (pDevice->eOPMode == OP_MODE_INFRASTRUCTURE) { + if (pDevice->op_mode == NL80211_IFTYPE_STATION) { // Infra STA rate decided from AP Node, index = 0 pDevice->wCurrentRate = pMgmt->sNodeDBTable[0].wTxDataRate; } @@ -2439,11 +2440,11 @@ int nsDMA_tx_packet(struct vnt_private *pDevice, pTX_Buffer->wTxByteCount = (u16)BytesToWrite; pContext->pPacket = skb; - pContext->Type = CONTEXT_DATA_PACKET; + pContext->type = CONTEXT_DATA_PACKET; pContext->uBufLen = (u16)BytesToWrite + 4 ; //USB header s_vSaveTxPktInfo(pDevice, (u8)(pTX_Buffer->byPKTNO & 0x0F), - &pContext->sEthHeader.h_dest[0], + &pDevice->sTxEthHeader.h_dest[0], (u16)(BytesToWrite-uHeaderLen), pTX_Buffer->fifo_head.wFIFOCtl); @@ -2593,11 +2594,11 @@ int bRelayPacketSend(struct vnt_private *pDevice, u8 *pbySkbData, u32 uDataLen, pTX_Buffer->wTxByteCount = (u16)BytesToWrite; pContext->pPacket = NULL; - pContext->Type = CONTEXT_DATA_PACKET; + pContext->type = CONTEXT_DATA_PACKET; pContext->uBufLen = (u16)BytesToWrite + 4 ; //USB header s_vSaveTxPktInfo(pDevice, (u8)(pTX_Buffer->byPKTNO & 0x0F), - &pContext->sEthHeader.h_dest[0], + &pDevice->sTxEthHeader.h_dest[0], (u16)(BytesToWrite - uHeaderLen), pTX_Buffer->fifo_head.wFIFOCtl); diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index b3ee6d01aa88..6d6539d29d04 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -53,68 +53,68 @@ struct vnt_mic_hdr { /* RsvTime buffer header */ struct vnt_rrv_time_rts { - u16 wRTSTxRrvTime_ba; - u16 wRTSTxRrvTime_aa; - u16 wRTSTxRrvTime_bb; + __le16 rts_rrv_time_ba; + __le16 rts_rrv_time_aa; + __le16 rts_rrv_time_bb; u16 wReserved; - u16 wTxRrvTime_b; - u16 wTxRrvTime_a; + __le16 rrv_time_b; + __le16 rrv_time_a; } __packed; struct vnt_rrv_time_cts { - u16 wCTSTxRrvTime_ba; + __le16 cts_rrv_time_ba; u16 wReserved; - u16 wTxRrvTime_b; - u16 wTxRrvTime_a; + __le16 rrv_time_b; + __le16 rrv_time_a; } __packed; struct vnt_rrv_time_ab { - u16 wRTSTxRrvTime; - u16 wTxRrvTime; + __le16 rts_rrv_time; + __le16 rrv_time; } __packed; /* TX data header */ struct vnt_tx_datahead_g { struct vnt_phy_field b; struct vnt_phy_field a; - u16 wDuration_b; - u16 wDuration_a; - u16 wTimeStampOff_b; - u16 wTimeStampOff_a; + __le16 duration_b; + __le16 duration_a; + __le16 time_stamp_off_b; + __le16 time_stamp_off_a; } __packed; struct vnt_tx_datahead_g_fb { struct vnt_phy_field b; struct vnt_phy_field a; - u16 wDuration_b; - u16 wDuration_a; - u16 wDuration_a_f0; - u16 wDuration_a_f1; - u16 wTimeStampOff_b; - u16 wTimeStampOff_a; + __le16 duration_b; + __le16 duration_a; + __le16 duration_a_f0; + __le16 duration_a_f1; + __le16 time_stamp_off_b; + __le16 time_stamp_off_a; } __packed; struct vnt_tx_datahead_ab { struct vnt_phy_field ab; - u16 wDuration; - u16 wTimeStampOff; + __le16 duration; + __le16 time_stamp_off; } __packed; struct vnt_tx_datahead_a_fb { struct vnt_phy_field a; - u16 wDuration; - u16 wTimeStampOff; - u16 wDuration_f0; - u16 wDuration_f1; + __le16 duration; + __le16 time_stamp_off; + __le16 duration_f0; + __le16 duration_f1; } __packed; /* RTS buffer header */ struct vnt_rts_g { struct vnt_phy_field b; struct vnt_phy_field a; - u16 wDuration_ba; - u16 wDuration_aa; - u16 wDuration_bb; + __le16 duration_ba; + __le16 duration_aa; + __le16 duration_bb; u16 wReserved; struct ieee80211_rts data; struct vnt_tx_datahead_g data_head; @@ -123,21 +123,21 @@ struct vnt_rts_g { struct vnt_rts_g_fb { struct vnt_phy_field b; struct vnt_phy_field a; - u16 wDuration_ba; - u16 wDuration_aa; - u16 wDuration_bb; + __le16 duration_ba; + __le16 duration_aa; + __le16 duration_bb; u16 wReserved; - u16 wRTSDuration_ba_f0; - u16 wRTSDuration_aa_f0; - u16 wRTSDuration_ba_f1; - u16 wRTSDuration_aa_f1; + __le16 rts_duration_ba_f0; + __le16 rts_duration_aa_f0; + __le16 rts_duration_ba_f1; + __le16 rts_duration_aa_f1; struct ieee80211_rts data; struct vnt_tx_datahead_g_fb data_head; } __packed; struct vnt_rts_ab { struct vnt_phy_field ab; - u16 wDuration; + __le16 duration; u16 wReserved; struct ieee80211_rts data; struct vnt_tx_datahead_ab data_head; @@ -145,10 +145,10 @@ struct vnt_rts_ab { struct vnt_rts_a_fb { struct vnt_phy_field a; - u16 wDuration; + __le16 duration; u16 wReserved; - u16 wRTSDuration_f0; - u16 wRTSDuration_f1; + __le16 rts_duration_f0; + __le16 rts_duration_f1; struct ieee80211_rts data; struct vnt_tx_datahead_a_fb data_head; } __packed; @@ -156,7 +156,7 @@ struct vnt_rts_a_fb { /* CTS buffer header */ struct vnt_cts { struct vnt_phy_field b; - u16 wDuration_ba; + __le16 duration_ba; u16 wReserved; struct ieee80211_cts data; u16 reserved2; @@ -165,10 +165,10 @@ struct vnt_cts { struct vnt_cts_fb { struct vnt_phy_field b; - u16 wDuration_ba; + __le16 duration_ba; u16 wReserved; - u16 wCTSDuration_ba_f0; - u16 wCTSDuration_ba_f1; + __le16 cts_duration_ba_f0; + __le16 cts_duration_ba_f1; struct ieee80211_cts data; u16 reserved2; struct vnt_tx_datahead_g_fb data_head; @@ -234,8 +234,8 @@ struct vnt_tx_short_buf_head { u16 fifo_ctl; u16 time_stamp; struct vnt_phy_field ab; - u16 duration; - u16 time_stamp_off; + __le16 duration; + __le16 time_stamp_off; } __packed; struct vnt_beacon_buffer { diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index 01cf09999b6d..c5838d99f89f 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -105,6 +105,8 @@ int PIPEnsControlOutAsyn(struct vnt_private *pDevice, u8 byRequest, int PIPEnsControlOut(struct vnt_private *pDevice, u8 byRequest, u16 wValue, u16 wIndex, u16 wLength, u8 *pbyBuffer) + __releases(&pDevice->lock) + __acquires(&pDevice->lock) { int ntStatus = 0; int ii; @@ -167,6 +169,8 @@ int PIPEnsControlOut(struct vnt_private *pDevice, u8 byRequest, u16 wValue, int PIPEnsControlIn(struct vnt_private *pDevice, u8 byRequest, u16 wValue, u16 wIndex, u16 wLength, u8 *pbyBuffer) + __releases(&pDevice->lock) + __acquires(&pDevice->lock) { int ntStatus = 0; int ii; @@ -295,40 +299,38 @@ static void s_nsControlInUsbIoCompleteRead(struct urb *urb) * */ -int PIPEnsInterruptRead(struct vnt_private *pDevice) +int PIPEnsInterruptRead(struct vnt_private *priv) { - int ntStatus = STATUS_FAILURE; + int status = STATUS_FAILURE; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsStartInterruptUsbRead()\n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + "---->s_nsStartInterruptUsbRead()\n"); - if(pDevice->intBuf.bInUse == true){ - return (STATUS_FAILURE); - } - pDevice->intBuf.bInUse = true; -// pDevice->bEventAvailable = false; - pDevice->ulIntInPosted++; - - // - // Now that we have created the urb, we will send a - // request to the USB device object. - // - pDevice->pInterruptURB->interval = pDevice->int_interval; - -usb_fill_bulk_urb(pDevice->pInterruptURB, - pDevice->usb, - usb_rcvbulkpipe(pDevice->usb, 1), - (void *) pDevice->intBuf.pDataBuf, + if (priv->int_buf.in_use == true) + return STATUS_FAILURE; + + priv->int_buf.in_use = true; + + usb_fill_int_urb(priv->pInterruptURB, + priv->usb, + usb_rcvintpipe(priv->usb, 1), + priv->int_buf.data_buf, MAX_INTERRUPT_SIZE, s_nsInterruptUsbIoCompleteRead, - pDevice); + priv, + priv->int_interval); - ntStatus = usb_submit_urb(pDevice->pInterruptURB, GFP_ATOMIC); - if (ntStatus != 0) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Submit int URB failed %d\n", ntStatus); - } + status = usb_submit_urb(priv->pInterruptURB, GFP_ATOMIC); + if (status) { + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + "Submit int URB failed %d\n", status); + priv->int_buf.in_use = false; + } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"<----s_nsStartInterruptUsbRead Return(%x)\n",ntStatus); - return ntStatus; + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + "<----s_nsStartInterruptUsbRead Return(%x)\n", status); + + return status; } /* @@ -348,67 +350,48 @@ usb_fill_bulk_urb(pDevice->pInterruptURB, static void s_nsInterruptUsbIoCompleteRead(struct urb *urb) { - struct vnt_private *pDevice = (struct vnt_private *)urb->context; - int ntStatus; + struct vnt_private *priv = urb->context; + int status; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsInterruptUsbIoCompleteRead\n"); - // - // The context given to IoSetCompletionRoutine is the receive buffer object - // - - // - // We have a number of cases: - // 1) The USB read timed out and we received no data. - // 2) The USB read timed out and we received some data. - // 3) The USB read was successful and fully filled our irp buffer. - // 4) The irp was cancelled. - // 5) Some other failure from the USB device object. - // - ntStatus = urb->status; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"s_nsInterruptUsbIoCompleteRead Status %d\n", ntStatus); - - // if we were not successful, we need to free the int buffer for future use right here - // otherwise interrupt data handler will free int buffer after it handle it. - if (( ntStatus != STATUS_SUCCESS )) { - pDevice->ulBulkInError++; - pDevice->intBuf.bInUse = false; - -// if (ntStatus == USBD_STATUS_CRC) { -// pDevice->ulIntInContCRCError++; -// } - -// if (ntStatus == STATUS_NOT_CONNECTED ) -// { - pDevice->fKillEventPollingThread = true; -// } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"IntUSBIoCompleteControl STATUS = %d\n", ntStatus ); - } else { - pDevice->ulIntInBytesRead += (unsigned long) urb->actual_length; - pDevice->ulIntInContCRCError = 0; - pDevice->bEventAvailable = true; - INTnsProcessData(pDevice); - } + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + "---->s_nsInterruptUsbIoCompleteRead\n"); + + switch (urb->status) { + case 0: + case -ETIMEDOUT: + break; + case -ECONNRESET: + case -ENOENT: + case -ESHUTDOWN: + priv->int_buf.in_use = false; + return; + default: + break; + } - if (pDevice->fKillEventPollingThread != true) { - usb_fill_bulk_urb(pDevice->pInterruptURB, - pDevice->usb, - usb_rcvbulkpipe(pDevice->usb, 1), - (void *) pDevice->intBuf.pDataBuf, - MAX_INTERRUPT_SIZE, - s_nsInterruptUsbIoCompleteRead, - pDevice); + status = urb->status; - ntStatus = usb_submit_urb(pDevice->pInterruptURB, GFP_ATOMIC); - if (ntStatus != 0) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Submit int URB failed %d\n", ntStatus); - } - } - // - // We return STATUS_MORE_PROCESSING_REQUIRED so that the completion - // routine (IofCompleteRequest) will stop working on the irp. - // - return ; + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + "s_nsInterruptUsbIoCompleteRead Status %d\n", status); + + if (status != STATUS_SUCCESS) { + priv->int_buf.in_use = false; + + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + "IntUSBIoCompleteControl STATUS = %d\n", status); + } else { + INTnsProcessData(priv); + } + + status = usb_submit_urb(priv->pInterruptURB, GFP_ATOMIC); + if (status) { + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + "Submit int URB failed %d\n", status); + } else { + priv->int_buf.in_use = true; + } + + return; } /* @@ -425,45 +408,41 @@ static void s_nsInterruptUsbIoCompleteRead(struct urb *urb) * */ -int PIPEnsBulkInUsbRead(struct vnt_private *pDevice, struct vnt_rcb *pRCB) +int PIPEnsBulkInUsbRead(struct vnt_private *priv, struct vnt_rcb *rcb) { - int ntStatus = 0; - struct urb *pUrb; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsStartBulkInUsbRead\n"); + int status = 0; + struct urb *urb; - if (pDevice->Flags & fMP_DISCONNECTED) - return STATUS_FAILURE; + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsStartBulkInUsbRead\n"); - pDevice->ulBulkInPosted++; + if (priv->Flags & fMP_DISCONNECTED) + return STATUS_FAILURE; - pUrb = pRCB->pUrb; - // - // Now that we have created the urb, we will send a - // request to the USB device object. - // - if (pRCB->skb == NULL) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pRCB->skb is null \n"); - return ntStatus; - } + urb = rcb->pUrb; + if (rcb->skb == NULL) { + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"rcb->skb is null\n"); + return status; + } - usb_fill_bulk_urb(pUrb, - pDevice->usb, - usb_rcvbulkpipe(pDevice->usb, 2), - (void *) (pRCB->skb->data), + usb_fill_bulk_urb(urb, + priv->usb, + usb_rcvbulkpipe(priv->usb, 2), + (void *) (rcb->skb->data), MAX_TOTAL_SIZE_WITH_ALL_HEADERS, s_nsBulkInUsbIoCompleteRead, - pRCB); + rcb); - ntStatus = usb_submit_urb(pUrb, GFP_ATOMIC); - if (ntStatus != 0) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Submit Rx URB failed %d\n", ntStatus); + status = usb_submit_urb(urb, GFP_ATOMIC); + if (status != 0) { + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + "Submit Rx URB failed %d\n", status); return STATUS_FAILURE ; } - pRCB->Ref = 1; - pRCB->bBoolInUse= true; - return ntStatus; + rcb->Ref = 1; + rcb->bBoolInUse = true; + + return status; } /* @@ -483,51 +462,47 @@ int PIPEnsBulkInUsbRead(struct vnt_private *pDevice, struct vnt_rcb *pRCB) static void s_nsBulkInUsbIoCompleteRead(struct urb *urb) { - struct vnt_rcb *pRCB = (struct vnt_rcb *)urb->context; - struct vnt_private *pDevice = pRCB->pDevice; - unsigned long bytesRead; - int bIndicateReceive = false; - int bReAllocSkb = false; - int status; + struct vnt_rcb *rcb = urb->context; + struct vnt_private *priv = rcb->pDevice; + int re_alloc_skb = false; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsBulkInUsbIoCompleteRead\n"); - status = urb->status; - bytesRead = urb->actual_length; - - if (status) { - pDevice->ulBulkInError++; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"BULK In failed %d\n", status); -//todo...xxxxxx -// if (status == USBD_STATUS_CRC) { -// pDevice->ulBulkInContCRCError++; -// } -// if (status == STATUS_DEVICE_NOT_CONNECTED ) -// { -// MP_SET_FLAG(pDevice, fMP_DISCONNECTED); -// } - } else { - if (bytesRead) - bIndicateReceive = true; - pDevice->ulBulkInContCRCError = 0; - pDevice->ulBulkInBytesRead += bytesRead; - } + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsBulkInUsbIoCompleteRead\n"); - if (bIndicateReceive) { - spin_lock(&pDevice->lock); - if (RXbBulkInProcessData(pDevice, pRCB, bytesRead) == true) - bReAllocSkb = true; - spin_unlock(&pDevice->lock); - } - pRCB->Ref--; - if (pRCB->Ref == 0) - { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"RxvFreeNormal %d \n",pDevice->NumRecvFreeList); - spin_lock(&pDevice->lock); - RXvFreeRCB(pRCB, bReAllocSkb); - spin_unlock(&pDevice->lock); - } + switch (urb->status) { + case 0: + break; + case -ECONNRESET: + case -ENOENT: + case -ESHUTDOWN: + return; + case -ETIMEDOUT: + default: + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + "BULK In failed %d\n", urb->status); + break; + } + + if (urb->actual_length) { + spin_lock(&priv->lock); + + if (RXbBulkInProcessData(priv, rcb, urb->actual_length) == true) + re_alloc_skb = true; + + spin_unlock(&priv->lock); + } + + rcb->Ref--; + if (rcb->Ref == 0) { + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"RxvFreeNormal %d\n", + priv->NumRecvFreeList); + spin_lock(&priv->lock); + + RXvFreeRCB(rcb, re_alloc_skb); - return; + spin_unlock(&priv->lock); + } + + return; } /* @@ -544,53 +519,40 @@ static void s_nsBulkInUsbIoCompleteRead(struct urb *urb) * */ -int PIPEnsSendBulkOut(struct vnt_private *pDevice, - struct vnt_usb_send_context *pContext) +int PIPEnsSendBulkOut(struct vnt_private *priv, + struct vnt_usb_send_context *context) { int status; - struct urb *pUrb; + struct urb *urb; - pDevice->bPWBitOn = false; + priv->bPWBitOn = false; -/* - if (pDevice->pPendingBulkOutContext != NULL) { - pDevice->NumContextsQueued++; - EnqueueContext(pDevice->FirstTxContextQueue, pDevice->LastTxContextQueue, pContext); - status = STATUS_PENDING; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Send pending!\n"); - return status; - } -*/ - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"s_nsSendBulkOut\n"); - - if (MP_IS_READY(pDevice) && (pDevice->Flags & fMP_POST_WRITES)) { - - pUrb = pContext->pUrb; - pDevice->ulBulkOutPosted++; -// pDevice->pPendingBulkOutContext = pContext; - usb_fill_bulk_urb( - pUrb, - pDevice->usb, - usb_sndbulkpipe(pDevice->usb, 3), - (void *) &(pContext->Data[0]), - pContext->uBufLen, - s_nsBulkOutIoCompleteWrite, - pContext); - - status = usb_submit_urb(pUrb, GFP_ATOMIC); - if (status != 0) - { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Submit Tx URB failed %d\n", status); - pContext->bBoolInUse = false; - return STATUS_FAILURE; - } - return STATUS_PENDING; - } - else { - pContext->bBoolInUse = false; - return STATUS_RESOURCES; - } + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"s_nsSendBulkOut\n"); + + if (!(MP_IS_READY(priv) && priv->Flags & fMP_POST_WRITES)) { + context->bBoolInUse = false; + return STATUS_RESOURCES; + } + + urb = context->pUrb; + + usb_fill_bulk_urb(urb, + priv->usb, + usb_sndbulkpipe(priv->usb, 3), + context->Data, + context->uBufLen, + s_nsBulkOutIoCompleteWrite, + context); + + status = usb_submit_urb(urb, GFP_ATOMIC); + if (status != 0) { + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + "Submit Tx URB failed %d\n", status); + context->bBoolInUse = false; + return STATUS_FAILURE; + } + + return STATUS_PENDING; } /* @@ -623,68 +585,49 @@ int PIPEnsSendBulkOut(struct vnt_private *pDevice, static void s_nsBulkOutIoCompleteWrite(struct urb *urb) { - struct vnt_private *pDevice; - int status; - CONTEXT_TYPE ContextType; - unsigned long ulBufLen; - struct vnt_usb_send_context *pContext; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsBulkOutIoCompleteWrite\n"); - // - // The context given to IoSetCompletionRoutine is an USB_CONTEXT struct - // - pContext = (struct vnt_usb_send_context *)urb->context; - - pDevice = pContext->pDevice; - ContextType = pContext->Type; - ulBufLen = pContext->uBufLen; - - if (!netif_device_present(pDevice->dev)) - return; + struct vnt_usb_send_context *context = urb->context; + struct vnt_private *priv = context->pDevice; + u8 context_type = context->type; - // - // Perform various IRP, URB, and buffer 'sanity checks' - // + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsBulkOutIoCompleteWrite\n"); - status = urb->status; - - if(status == STATUS_SUCCESS) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Write %d bytes\n",(int)ulBufLen); - pDevice->ulBulkOutBytesWrite += ulBufLen; - pDevice->ulBulkOutContCRCError = 0; - } else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"BULK Out failed %d\n", status); - pDevice->ulBulkOutError++; - } + switch (urb->status) { + case 0: + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + "Write %d bytes\n", context->uBufLen); + break; + case -ECONNRESET: + case -ENOENT: + case -ESHUTDOWN: + context->bBoolInUse = false; + return; + case -ETIMEDOUT: + default: + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + "BULK Out failed %d\n", urb->status); + break; + } -// pDevice->ulCheckForHangCount = 0; -// pDevice->pPendingBulkOutContext = NULL; + if (!netif_device_present(priv->dev)) + return; - if ( CONTEXT_DATA_PACKET == ContextType ) { - // Indicate to the protocol the status of the sent packet and return - // ownership of the packet. - if (pContext->pPacket != NULL) { - dev_kfree_skb_irq(pContext->pPacket); - pContext->pPacket = NULL; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"tx %d bytes\n",(int)ulBufLen); - } + if (CONTEXT_DATA_PACKET == context_type) { + if (context->pPacket != NULL) { + dev_kfree_skb_irq(context->pPacket); + context->pPacket = NULL; + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO + "tx %d bytes\n", context->uBufLen); + } - pDevice->dev->trans_start = jiffies; + priv->dev->trans_start = jiffies; + } - if (status == STATUS_SUCCESS) { - pDevice->packetsSent++; - } - else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Send USB error! [%08xh]\n", status); - pDevice->packetsSentDropped++; - } + if (priv->bLinkPass == true) { + if (netif_queue_stopped(priv->dev)) + netif_wake_queue(priv->dev); + } - } - if (pDevice->bLinkPass == true) { - if (netif_queue_stopped(pDevice->dev)) - netif_wake_queue(pDevice->dev); - } - pContext->bBoolInUse = false; + context->bBoolInUse = false; - return; + return; } diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 6b9522914634..3cf3f24247a3 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -293,17 +293,11 @@ void vRunCommand(struct work_struct *work) case WLAN_CMD_SCAN_START: pDevice->byReAssocCount = 0; - if (pDevice->bRadioOff == true) { - s_bCommandComplete(pDevice); - spin_unlock_irq(&pDevice->lock); - return; - } + if (pDevice->bRadioOff == true) + break; - if (pMgmt->eCurrMode == WMAC_MODE_ESS_AP) { - s_bCommandComplete(pDevice); - spin_unlock_irq(&pDevice->lock); - return; - } + if (pMgmt->eCurrMode == WMAC_MODE_ESS_AP) + break; pItemSSID = (PWLAN_IE_SSID)pMgmt->abyScanSSID; @@ -311,16 +305,12 @@ void vRunCommand(struct work_struct *work) pMgmt->uScanChannel = pDevice->byMinChannel; if (pMgmt->uScanChannel > pDevice->byMaxChannel) { pDevice->eCommandState = WLAN_CMD_SCAN_END; - s_bCommandComplete(pDevice); - spin_unlock_irq(&pDevice->lock); - return; + break; } else { if (!ChannelValid(pDevice->byZoneType, pMgmt->uScanChannel)) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Invalid channel pMgmt->uScanChannel = %d\n", pMgmt->uScanChannel); pMgmt->uScanChannel++; - s_bCommandComplete(pDevice); - spin_unlock_irq(&pDevice->lock); - return; + break; } if (pMgmt->uScanChannel == pDevice->byMinChannel) { // pMgmt->eScanType = WMAC_SCAN_ACTIVE; //mike mark @@ -420,16 +410,13 @@ void vRunCommand(struct work_struct *work) memset(&wrqu, 0, sizeof(wrqu)); wireless_send_event(pDevice->dev, SIOCGIWSCAN, &wrqu, NULL); - s_bCommandComplete(pDevice); break; case WLAN_CMD_DISASSOCIATE_START: pDevice->byReAssocCount = 0; if ((pMgmt->eCurrMode == WMAC_MODE_ESS_STA) && (pMgmt->eCurrState != WMAC_STATE_ASSOC)) { - s_bCommandComplete(pDevice); - spin_unlock_irq(&pDevice->lock); - return; + break; } else { pDevice->bwextstep0 = false; pDevice->bwextstep1 = false; @@ -458,17 +445,14 @@ void vRunCommand(struct work_struct *work) netif_stop_queue(pDevice->dev); if (pDevice->bNeedRadioOFF == true) CARDbRadioPowerOff(pDevice); - s_bCommandComplete(pDevice); + break; case WLAN_CMD_SSID_START: pDevice->byReAssocCount = 0; - if (pDevice->bRadioOff == true) { - s_bCommandComplete(pDevice); - spin_unlock_irq(&pDevice->lock); - return; - } + if (pDevice->bRadioOff == true) + break; memcpy(pMgmt->abyAdHocSSID, pMgmt->abyDesireSSID, ((PWLAN_IE_SSID)pMgmt->abyDesireSSID)->len + WLAN_IEHDR_LEN); @@ -489,11 +473,9 @@ void vRunCommand(struct work_struct *work) if ((pMgmt->eCurrState == WMAC_STATE_ASSOC) || ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) && (pMgmt->eCurrState == WMAC_STATE_JOINTED))) { if (pItemSSID->len == pItemSSIDCurr->len) { - if (memcmp(pItemSSID->abySSID, pItemSSIDCurr->abySSID, pItemSSID->len) == 0) { - s_bCommandComplete(pDevice); - spin_unlock_irq(&pDevice->lock); - return; - } + if (!memcmp(pItemSSID->abySSID, + pItemSSIDCurr->abySSID, pItemSSID->len)) + break; } netif_stop_queue(pDevice->dev); pDevice->bLinkPass = false; @@ -582,7 +564,6 @@ void vRunCommand(struct work_struct *work) } } } - s_bCommandComplete(pDevice); break; case WLAN_AUTHENTICATE_WAIT: @@ -612,7 +593,6 @@ void vRunCommand(struct work_struct *work) } pDevice->byLinkWaitCount = 0; - s_bCommandComplete(pDevice); break; case WLAN_ASSOCIATE_WAIT: @@ -647,7 +627,6 @@ void vRunCommand(struct work_struct *work) return; } - s_bCommandComplete(pDevice); break; case WLAN_CMD_AP_MODE_START: @@ -683,7 +662,6 @@ void vRunCommand(struct work_struct *work) ControlvMaskByte(pDevice, MESSAGE_REQUEST_MACREG, MAC_REG_PAPEDELAY, LEDSTS_STS, LEDSTS_INTER); schedule_delayed_work(&pDevice->second_callback_work, HZ); } - s_bCommandComplete(pDevice); break; case WLAN_CMD_TX_PSPACKET_START: @@ -738,8 +716,6 @@ void vRunCommand(struct work_struct *work) pMgmt->sNodeDBTable[ii].bRxPSPoll = false; } } - - s_bCommandComplete(pDevice); break; case WLAN_CMD_RADIO_START: @@ -760,11 +736,8 @@ void vRunCommand(struct work_struct *work) 1, &byTmp); - if (ntStatus != STATUS_SUCCESS) { - s_bCommandComplete(pDevice); - spin_unlock_irq(&pDevice->lock); - return; - } + if (ntStatus != STATUS_SUCCESS) + break; if ((byTmp & GPIO3_DATA) == 0) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" WLAN_CMD_RADIO_START_OFF........................\n"); // Old commands are useless. @@ -833,7 +806,6 @@ void vRunCommand(struct work_struct *work) } } - s_bCommandComplete(pDevice); break; case WLAN_CMD_CHANGE_BBSENSITIVITY_START: @@ -843,24 +815,20 @@ void vRunCommand(struct work_struct *work) BBvSetVGAGainOffset(pDevice, pDevice->byBBVGACurrent); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Change sensitivity pDevice->byBBVGACurrent = %x\n", pDevice->byBBVGACurrent); pDevice->bStopDataPkt = false; - s_bCommandComplete(pDevice); break; case WLAN_CMD_TBTT_WAKEUP_START: PSbIsNextTBTTWakeUp(pDevice); - s_bCommandComplete(pDevice); break; case WLAN_CMD_BECON_SEND_START: bMgrPrepareBeaconToSend(pDevice, pMgmt); - s_bCommandComplete(pDevice); break; case WLAN_CMD_SETPOWER_START: RFbSetPower(pDevice, pDevice->wCurrentRate, pMgmt->uCurrChannel); - s_bCommandComplete(pDevice); break; case WLAN_CMD_CHANGE_ANTENNA_START: @@ -878,12 +846,10 @@ void vRunCommand(struct work_struct *work) else BBvSetAntennaMode(pDevice, ANT_RXA); } - s_bCommandComplete(pDevice); break; case WLAN_CMD_REMOVE_ALLKEY_START: KeybRemoveAllKey(pDevice, &(pDevice->sKey), pDevice->abyBSSID); - s_bCommandComplete(pDevice); break; case WLAN_CMD_MAC_DISPOWERSAVING_START: @@ -898,7 +864,6 @@ void vRunCommand(struct work_struct *work) NULL ); } - s_bCommandComplete(pDevice); break; case WLAN_CMD_11H_CHSW_START: @@ -906,14 +871,17 @@ void vRunCommand(struct work_struct *work) pDevice->bChannelSwitch = false; pMgmt->uCurrChannel = pDevice->byNewChannel; pDevice->bStopDataPkt = false; - s_bCommandComplete(pDevice); break; + case WLAN_CMD_CONFIGURE_FILTER_START: + vnt_configure_filter(pDevice); + break; default: - s_bCommandComplete(pDevice); break; } //switch + s_bCommandComplete(pDevice); + spin_unlock_irq(&pDevice->lock); return; } @@ -1009,6 +977,11 @@ static int s_bCommandComplete(struct vnt_private *pDevice) pDevice->eCommandState = WLAN_CMD_11H_CHSW_START; break; + case WLAN_CMD_CONFIGURE_FILTER: + pDevice->eCommandState = + WLAN_CMD_CONFIGURE_FILTER_START; + break; + default: break; } diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index caf2684ce915..736572101bad 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -51,7 +51,8 @@ typedef enum tagCMD_CODE { WLAN_CMD_REMOVE_ALLKEY, WLAN_CMD_MAC_DISPOWERSAVING, WLAN_CMD_11H_CHSW, - WLAN_CMD_RUN_AP + WLAN_CMD_RUN_AP, + WLAN_CMD_CONFIGURE_FILTER } CMD_CODE, *PCMD_CODE; #define CMD_Q_SIZE 32 @@ -96,6 +97,7 @@ typedef enum tagCMD_STATE { WLAN_CMD_REMOVE_ALLKEY_START, WLAN_CMD_MAC_DISPOWERSAVING_START, WLAN_CMD_11H_CHSW_START, + WLAN_CMD_CONFIGURE_FILTER_START, WLAN_CMD_IDLE } CMD_STATE, *PCMD_STATE; diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index d74b0e7cb171..0d69719a7426 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -2164,12 +2164,12 @@ void vMgrCreateOwnIBSS(struct vnt_private *pDevice, PCMD_STATUS pStatus) pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_ESS(1); pMgmt->byDTIMPeriod = DEFAULT_DTIM_PERIOD; pMgmt->byDTIMCount = pMgmt->byDTIMPeriod - 1; - pDevice->eOPMode = OP_MODE_AP; + pDevice->op_mode = NL80211_IFTYPE_AP; } if (pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) { pMgmt->wCurrCapInfo |= WLAN_SET_CAP_INFO_IBSS(1); - pDevice->eOPMode = OP_MODE_ADHOC; + pDevice->op_mode = NL80211_IFTYPE_ADHOC; } if (pDevice->bEncryptionEnable) { @@ -2359,7 +2359,7 @@ void vMgrJoinBSSBegin(struct vnt_private *pDevice, PCMD_STATUS pStatus) pMgmt->eCurrState = WMAC_STATE_JOINTED; // Adopt BSS state in Adapter Device Object - pDevice->eOPMode = OP_MODE_INFRASTRUCTURE; + pDevice->op_mode = NL80211_IFTYPE_STATION; memcpy(pDevice->abyBSSID, pCurr->abyBSSID, WLAN_BSSID_LEN); // Add current BSS to Candidate list @@ -2500,7 +2500,7 @@ void vMgrJoinBSSBegin(struct vnt_private *pDevice, PCMD_STATUS pStatus) pMgmt->eCurrMode = WMAC_MODE_IBSS_STA; pMgmt->eCurrState = WMAC_STATE_STARTED; // Adopt BSS state in Adapter Device Object - pDevice->eOPMode = OP_MODE_ADHOC; + pDevice->op_mode = NL80211_IFTYPE_ADHOC; pDevice->bLinkPass = true; ControlvMaskByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_PAPEDELAY,LEDSTS_STS,LEDSTS_INTER); memcpy(pDevice->abyBSSID, pCurr->abyBSSID, WLAN_BSSID_LEN); |