diff options
Diffstat (limited to 'drivers/staging/otus/80211core')
-rw-r--r-- | drivers/staging/otus/80211core/amsdu.c | 145 | ||||
-rw-r--r-- | drivers/staging/otus/80211core/cmmsta.c | 5 | ||||
-rw-r--r-- | drivers/staging/otus/80211core/coid.c | 8 | ||||
-rw-r--r-- | drivers/staging/otus/80211core/cwm.c | 6 |
4 files changed, 80 insertions, 84 deletions
diff --git a/drivers/staging/otus/80211core/amsdu.c b/drivers/staging/otus/80211core/amsdu.c index c9123d5..0321288 100644 --- a/drivers/staging/otus/80211core/amsdu.c +++ b/drivers/staging/otus/80211core/amsdu.c @@ -34,53 +34,53 @@ /* Stephen Chen Atheros Communications, INC. 2007.2 */ /* */ /************************************************************************/ -zbuf_t* zfGetAmsduSubFrame(zdev_t* dev, zbuf_t* buf, u16_t* offset) +zbuf_t *zfGetAmsduSubFrame(zdev_t *dev, zbuf_t *buf, u16_t *offset) { - u16_t subframeLen; - u16_t amsduLen = zfwBufGetSize(dev, buf); - zbuf_t* newBuf; - - ZM_PERFORMANCE_RX_AMSDU(dev, buf, amsduLen); - - /* Verify A-MSDU length */ - if (amsduLen < (*offset + 14)) - { - return NULL; - } - - /* Locate A-MSDU subframe by offset and verify subframe length */ - subframeLen = (zmw_buf_readb(dev, buf, *offset + 12) << 8) + - zmw_buf_readb(dev, buf, *offset + 13); - if (subframeLen == 0) - { - return NULL; - } - - /* Verify A-MSDU subframe length */ - if ((*offset+14+subframeLen) <= amsduLen) - { - /* Allocate a new buffer */ - if ((newBuf = zfwBufAllocate(dev, 24+2+subframeLen)) != NULL) - { -#ifdef ZM_ENABLE_NATIVE_WIFI - /* Copy and convert subframe to wlan frame format */ - /* SHALL NOT INCLUDE QOS and AMSDU header. Ray 20070807 For Vista */ - zfRxBufferCopy(dev, newBuf, buf, 0, 0, 24); - zfRxBufferCopy(dev, newBuf, buf, 24, *offset+14, subframeLen); - zfwBufSetSize(dev, newBuf, 24+subframeLen); -#else - /* Copy subframe to new buffer */ - zfRxBufferCopy(dev, newBuf, buf, 0, *offset, 14+subframeLen); - zfwBufSetSize(dev, newBuf, 14+subframeLen); -#endif - /* Update offset */ - *offset += (((14+subframeLen)+3) & 0xfffc); - - /* Return buffer pointer */ - return newBuf; - } - } - return NULL; + u16_t subframeLen; + u16_t amsduLen = zfwBufGetSize(dev, buf); + zbuf_t *newBuf; + + ZM_PERFORMANCE_RX_AMSDU(dev, buf, amsduLen); + + /* Verify A-MSDU length */ + if (amsduLen < (*offset + 14)) + return NULL; + + /* Locate A-MSDU subframe by offset and verify subframe length */ + subframeLen = (zmw_buf_readb(dev, buf, *offset + 12) << 8) + + zmw_buf_readb(dev, buf, *offset + 13); + + if (subframeLen == 0) + return NULL; + + /* Verify A-MSDU subframe length */ + if ((*offset+14+subframeLen) <= amsduLen) { + /* Allocate a new buffer */ + newBuf = zfwBufAllocate(dev, 24+2+subframeLen); + if (newBuf != NULL) { + #ifdef ZM_ENABLE_NATIVE_WIFI + /* Copy and convert subframe to wlan frame format + * SHALL NOT INCLUDE QOS and AMSDU header. + * Ray 20070807 For Vista + */ + zfRxBufferCopy(dev, newBuf, buf, 0, 0, 24); + zfRxBufferCopy(dev, newBuf, buf, 24, *offset+14, + subframeLen); + zfwBufSetSize(dev, newBuf, 24+subframeLen); + #else + /* Copy subframe to new buffer */ + zfRxBufferCopy(dev, newBuf, buf, 0, *offset, + 14+subframeLen); + zfwBufSetSize(dev, newBuf, 14+subframeLen); + #endif + /* Update offset */ + *offset += (((14+subframeLen)+3) & 0xfffc); + + /* Return buffer pointer */ + return newBuf; + } + } + return NULL; } @@ -101,34 +101,29 @@ zbuf_t* zfGetAmsduSubFrame(zdev_t* dev, zbuf_t* buf, u16_t* offset) /* Stephen Chen Atheros Communications, INC. 2007.2 */ /* */ /************************************************************************/ -void zfDeAmsdu(zdev_t* dev, zbuf_t* buf, u16_t vap, u8_t encryMode) +void zfDeAmsdu(zdev_t *dev, zbuf_t *buf, u16_t vap, u8_t encryMode) { - u16_t offset = ZM_SIZE_OF_WLAN_DATA_HEADER+ZM_SIZE_OF_QOS_CTRL; - zbuf_t* subframeBuf; - zmw_get_wlan_dev(dev); - - ZM_BUFFER_TRACE(dev, buf) - - if (encryMode == ZM_AES || encryMode == ZM_TKIP) - { - offset += (ZM_SIZE_OF_IV + ZM_SIZE_OF_EXT_IV); - } - else if (encryMode == ZM_WEP64 || encryMode == ZM_WEP128) - { - offset += ZM_SIZE_OF_IV; - } - - /* Repeatly calling zfGetAmsduSubFrame() until NULL returned */ - while ((subframeBuf = zfGetAmsduSubFrame(dev, buf, &offset)) != NULL) - { - wd->commTally.NotifyNDISRxFrmCnt++; - if (wd->zfcbRecvEth != NULL) - { - wd->zfcbRecvEth(dev, subframeBuf, (u8_t)vap); - ZM_PERFORMANCE_RX_MSDU(dev, wd->tick); - } - } - zfwBufFree(dev, buf, 0); - - return; + u16_t offset = ZM_SIZE_OF_WLAN_DATA_HEADER+ZM_SIZE_OF_QOS_CTRL; + zbuf_t *subframeBuf; + zmw_get_wlan_dev(dev); + + ZM_BUFFER_TRACE(dev, buf) + + if (encryMode == ZM_AES || encryMode == ZM_TKIP) + offset += (ZM_SIZE_OF_IV + ZM_SIZE_OF_EXT_IV); + else if (encryMode == ZM_WEP64 || encryMode == ZM_WEP128) + offset += ZM_SIZE_OF_IV; + + + /* Repeatly calling zfGetAmsduSubFrame() until NULL returned */ + while ((subframeBuf = zfGetAmsduSubFrame(dev, buf, &offset)) != NULL) { + wd->commTally.NotifyNDISRxFrmCnt++; + if (wd->zfcbRecvEth != NULL) { + wd->zfcbRecvEth(dev, subframeBuf, (u8_t)vap); + ZM_PERFORMANCE_RX_MSDU(dev, wd->tick); + } + } + zfwBufFree(dev, buf, 0); + + return; } diff --git a/drivers/staging/otus/80211core/cmmsta.c b/drivers/staging/otus/80211core/cmmsta.c index c75ba11..b28a4e2 100644 --- a/drivers/staging/otus/80211core/cmmsta.c +++ b/drivers/staging/otus/80211core/cmmsta.c @@ -724,6 +724,9 @@ void zfStaUpdateWmeParameter(zdev_t* dev, zbuf_t* buf) /* process 802.11h Dynamic Frequency Selection */ void zfStaUpdateDot11HDFS(zdev_t* dev, zbuf_t* buf) { + //u8_t length, channel, is5G; + u16_t offset; + zmw_get_wlan_dev(dev); /* @@ -736,8 +739,6 @@ void zfStaUpdateDot11HDFS(zdev_t* dev, zbuf_t* buf) |Value | 37 | 3 | 0 or 1 |unsigned integer |unsigned integer | +------+----------+------+-------------------+------------------+--------------------+ */ - //u8_t length, channel, is5G; - u16_t offset; /* get EID(Channel Switch Announcement) */ if ( (offset = zfFindElement(dev, buf, ZM_WLAN_EID_CHANNEL_SWITCH_ANNOUNCE)) == 0xffff ) diff --git a/drivers/staging/otus/80211core/coid.c b/drivers/staging/otus/80211core/coid.c index 6007f31..88f8d349 100644 --- a/drivers/staging/otus/80211core/coid.c +++ b/drivers/staging/otus/80211core/coid.c @@ -214,10 +214,10 @@ u32_t zfiWlanQuerySupportMode(zdev_t* dev) u32_t zfiWlanQueryTransmitPower(zdev_t* dev) { - zmw_get_wlan_dev(dev); - u32_t ret = 0; + zmw_get_wlan_dev(dev); + if (zfStaIsConnected(dev)) { ret = wd->sta.connPowerInHalfDbm; } else { @@ -1432,12 +1432,12 @@ u32_t zfiWlanQueryCurrentFrequency(zdev_t* dev, u8_t qmode) u32_t zfiWlanQueryFrequencyAttribute(zdev_t* dev, u32_t freq) { - zmw_get_wlan_dev(dev); - u8_t i; u16_t frequency = (u16_t) (freq/1000); u32_t ret = 0; + zmw_get_wlan_dev(dev); + for (i = 0; i < wd->regulationTable.allowChannelCnt; i++) { if ( wd->regulationTable.allowChannel[i].channel == frequency ) diff --git a/drivers/staging/otus/80211core/cwm.c b/drivers/staging/otus/80211core/cwm.c index 80f1141..1bd0b1f 100644 --- a/drivers/staging/otus/80211core/cwm.c +++ b/drivers/staging/otus/80211core/cwm.c @@ -75,9 +75,9 @@ void zfCoreCwmBusy(zdev_t* dev, u16_t busy) if((wd->wlanMode == ZM_MODE_INFRASTRUCTURE || wd->wlanMode == ZM_MODE_PSEUDO || wd->wlanMode == ZM_MODE_IBSS)) { - if (wd->sta.ie.HtCap.HtCapInfo && HTCAP_SupChannelWidthSet != 0 && - wd->sta.ie.HtInfo.ChannelInfo && ExtHtCap_RecomTxWidthSet != 0 && - (wd->sta.ie.HtInfo.ChannelInfo && ExtHtCap_ExtChannelOffsetAbove) == 1) { + if ((wd->sta.ie.HtCap.HtCapInfo & HTCAP_SupChannelWidthSet) && + (wd->sta.ie.HtInfo.ChannelInfo & ExtHtCap_RecomTxWidthSet) && + (wd->sta.ie.HtInfo.ChannelInfo & ExtHtCap_ExtChannelOffsetAbove)) { wd->cwm.cw_width = CWM_WIDTH40; } |