diff options
author | Luis R. Rodriguez <lrodriguez@atheros.com> | 2010-10-01 16:16:34 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-10-01 18:11:56 -0700 |
commit | cff55f50b882b197a52c4cf0108a43c615d1fdba (patch) | |
tree | 549924b67a6353a33935185cb2cf5634715a90fd /drivers/staging/otus/80211core/ccmd.c | |
parent | 0656bb352080982f960bfff2b78602a5071c909f (diff) |
staging: remove the Atheros otus vendor driver
Atheros originally had posted a vendor driver to support
the Atheros AR9170 devices, the driver was called otus [1].
The otus driver was staging quality but it, along with
other chipset documentation helped the community do a rewrite
for a proper driver. Johannes Berg did the ar9170 [2] work and
Christian Lamparter then followed up with some final touches
for inclusion upstream.
The original goal behind ar9170 was to match all functionality,
performance, stability and quality against Otus. In the end this
proved quite challenging even with GPLv2 firmware.
Christian then decided to work on a replacement driver with
new enhancements to the GPLv2 firmware. It took 1 year, 5 months,
9 days since this merge of ar9170usb upstream to release carl9170
with upstream inclusion intentions but its now there.
We remove the Otus driver now as the carl9170 driver actually
ends up not only replacing but superseding the staging Otus driver!
http://wireless.kernel.org/en/users/Drivers/otus
http://wireless.kernel.org/en/users/Drivers/ar9170
http://wireless.kernel.org/en/users/Drivers/carl9170
Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/otus/80211core/ccmd.c')
-rw-r--r-- | drivers/staging/otus/80211core/ccmd.c | 1766 |
1 files changed, 0 insertions, 1766 deletions
diff --git a/drivers/staging/otus/80211core/ccmd.c b/drivers/staging/otus/80211core/ccmd.c deleted file mode 100644 index ab300df02014..000000000000 --- a/drivers/staging/otus/80211core/ccmd.c +++ /dev/null @@ -1,1766 +0,0 @@ -/* - * Copyright (c) 2007-2008 Atheros Communications Inc. - * - * Permission to use, copy, modify, and/or distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -/* */ -/* Module Name : cmd.c */ -/* */ -/* Abstract */ -/* This module contains command interface functions. */ -/* */ -/* NOTES */ -/* None */ -/* */ -/************************************************************************/ -#include "cprecomp.h" -#include "../hal/hpreg.h" - - -u16_t zfWlanReset(zdev_t *dev); -u32_t zfUpdateRxRate(zdev_t *dev); - - -extern void zfiUsbRecv(zdev_t *dev, zbuf_t *buf); -extern void zfiUsbRegIn(zdev_t *dev, u32_t *rsp, u16_t rspLen); -extern void zfiUsbOutComplete(zdev_t *dev, zbuf_t *buf, u8_t status, u8_t *hdr); -extern void zfiUsbRegOutComplete(zdev_t *dev); -extern u16_t zfHpReinit(zdev_t *dev, u32_t frequency); - -/* Get size (byte) of driver core global data structure. */ -/* This size will be used by driver wrapper to allocate */ -/* a memory space for driver core to store global variables */ -u16_t zfiGlobalDataSize(zdev_t *dev) -{ - u32_t ret; - ret = (sizeof(struct zsWlanDev)); - zm_assert((ret>>16) == 0); - return (u16_t)ret; -} - - -/* Initialize WLAN hardware and software, resource will be allocated */ -/* for WLAN operation, must be called first before other function. */ -extern u16_t zfiWlanOpen(zdev_t *dev, struct zsCbFuncTbl *cbFuncTbl) -{ - /* u16_t ret; - u32_t i; - u8_t* ch; - u8_t bPassive; - */ - u32_t devSize; - struct zfCbUsbFuncTbl cbUsbFuncTbl; - zmw_get_wlan_dev(dev); - - zm_debug_msg0("start"); - - devSize = sizeof(struct zsWlanDev); - /* Zeroize zsWlanDev struct */ - zfZeroMemory((u8_t *)wd, (u16_t)devSize); - -#ifdef ZM_ENABLE_AGGREGATION - zfAggInit(dev); -#endif - - zfCwmInit(dev); - - wd->commTally.RateCtrlTxMPDU = 0; - wd->commTally.RateCtrlBAFail = 0; - wd->preambleTypeInUsed = ZM_PREAMBLE_TYPE_SHORT; - - if (cbFuncTbl == NULL) { - /* zfcbRecvEth() is mandatory */ - zm_assert(0); - } else { - if (cbFuncTbl->zfcbRecvEth == NULL) { - /* zfcbRecvEth() is mandatory */ - zm_assert(0); - } - wd->zfcbAuthNotify = cbFuncTbl->zfcbAuthNotify; - wd->zfcbAuthNotify = cbFuncTbl->zfcbAuthNotify; - wd->zfcbAsocNotify = cbFuncTbl->zfcbAsocNotify; - wd->zfcbDisAsocNotify = cbFuncTbl->zfcbDisAsocNotify; - wd->zfcbApConnectNotify = cbFuncTbl->zfcbApConnectNotify; - wd->zfcbConnectNotify = cbFuncTbl->zfcbConnectNotify; - wd->zfcbScanNotify = cbFuncTbl->zfcbScanNotify; - wd->zfcbMicFailureNotify = cbFuncTbl->zfcbMicFailureNotify; - wd->zfcbApMicFailureNotify = cbFuncTbl->zfcbApMicFailureNotify; - wd->zfcbIbssPartnerNotify = cbFuncTbl->zfcbIbssPartnerNotify; - wd->zfcbMacAddressNotify = cbFuncTbl->zfcbMacAddressNotify; - wd->zfcbSendCompleteIndication = - cbFuncTbl->zfcbSendCompleteIndication; - wd->zfcbRecvEth = cbFuncTbl->zfcbRecvEth; - wd->zfcbRestoreBufData = cbFuncTbl->zfcbRestoreBufData; - wd->zfcbRecv80211 = cbFuncTbl->zfcbRecv80211; -#ifdef ZM_ENABLE_CENC - wd->zfcbCencAsocNotify = cbFuncTbl->zfcbCencAsocNotify; -#endif /* ZM_ENABLE_CENC */ - wd->zfcbClassifyTxPacket = cbFuncTbl->zfcbClassifyTxPacket; - wd->zfcbHwWatchDogNotify = cbFuncTbl->zfcbHwWatchDogNotify; - } - - /* add by honda 0330 */ - cbUsbFuncTbl.zfcbUsbRecv = zfiUsbRecv; - cbUsbFuncTbl.zfcbUsbRegIn = zfiUsbRegIn; - cbUsbFuncTbl.zfcbUsbOutComplete = zfiUsbOutComplete; - cbUsbFuncTbl.zfcbUsbRegOutComplete = zfiUsbRegOutComplete; - zfwUsbRegisterCallBack(dev, &cbUsbFuncTbl); - /* Init OWN MAC address */ - wd->macAddr[0] = 0x8000; - wd->macAddr[1] = 0x0000; - wd->macAddr[2] = 0x0000; - - wd->regulationTable.regionCode = 0xffff; - - zfHpInit(dev, wd->frequency); - - /* init region code */ - /* wd->regulationTable.regionCode = NULL1_WORLD; //Only 2.4g RegCode */ - /* zfHpGetRegulationTablefromRegionCode(dev, NULL1_WORLD); */ - /* zfiWlanSetDot11DMode(dev , 1); //Enable 802.11d */ - /* Get the first channel */ - /* wd->frequency = zfChGetFirstChannel(dev, &bPassive); */ -#ifdef ZM_AP_DEBUG - /* wd->frequency = 2437; */ -#endif - - /* STA mode */ - wd->sta.mTxRate = 0x0; - wd->sta.uTxRate = 0x3; - wd->sta.mmTxRate = 0x0; - wd->sta.adapterState = ZM_STA_STATE_DISCONNECT; - wd->sta.capability[0] = 0x01; - wd->sta.capability[1] = 0x00; - - wd->sta.preambleTypeHT = 0; - wd->sta.htCtrlBandwidth = 0; - wd->sta.htCtrlSTBC = 0; - wd->sta.htCtrlSG = 0; - wd->sta.defaultTA = 0; - /*wd->sta.activescanTickPerChannel = - *ZM_TIME_ACTIVE_SCAN/ZM_MS_PER_TICK; - */ - { - u8_t Dur = ZM_TIME_ACTIVE_SCAN; - zfwGetActiveScanDur(dev, &Dur); - wd->sta.activescanTickPerChannel = Dur / ZM_MS_PER_TICK; - - } - wd->sta.passiveScanTickPerChannel = ZM_TIME_PASSIVE_SCAN/ZM_MS_PER_TICK; - wd->sta.bAutoReconnect = TRUE; - wd->sta.dropUnencryptedPkts = FALSE; - - /* set default to bypass all multicast packet for linux, - * window XP would set 0 by wrapper initialization - */ - wd->sta.bAllMulticast = 1; - - /* Initial the RIFS Status / RIFS-like frame count / RIFS count */ - wd->sta.rifsState = ZM_RIFS_STATE_DETECTING; - wd->sta.rifsLikeFrameCnt = 0; - wd->sta.rifsCount = 0; - - wd->sta.osRxFilter = 0; - wd->sta.bSafeMode = 0; - - /* Common */ - zfResetSupportRate(dev, ZM_DEFAULT_SUPPORT_RATE_DISCONNECT); - wd->beaconInterval = 100; - wd->rtsThreshold = 2346; - wd->fragThreshold = 32767; - wd->wlanMode = ZM_MODE_INFRASTRUCTURE; - wd->txMCS = 0xff; /* AUTO */ - wd->dtim = 1; - /* wd->txMT = 1; *//*OFDM */ - wd->tick = 1; - wd->maxTxPower2 = 0xff; - wd->maxTxPower5 = 0xff; - wd->supportMode = 0xffffffff; - wd->ws.adhocMode = ZM_ADHOCBAND_G; - wd->ws.autoSetFrequency = 0xff; - - /* AP mode */ - /* wd->bgMode = wd->ws.bgMode; */ - wd->ap.ssidLen[0] = 6; - wd->ap.ssid[0][0] = 'Z'; - wd->ap.ssid[0][1] = 'D'; - wd->ap.ssid[0][2] = '1'; - wd->ap.ssid[0][3] = '2'; - wd->ap.ssid[0][4] = '2'; - wd->ap.ssid[0][5] = '1'; - - /* Init the country iso name as NA */ - wd->ws.countryIsoName[0] = 0; - wd->ws.countryIsoName[1] = 0; - wd->ws.countryIsoName[2] = '\0'; - - /* init fragmentation is disabled */ - /* zfiWlanSetFragThreshold(dev, 0); */ - - /* airopeek : swSniffer 1=>on 0=>off */ - wd->swSniffer = 0; - wd->XLinkMode = 0; - - /* jhlee HT 0 */ -#if 1 - /* AP Mode*/ - /* Init HT Capability Info */ - wd->ap.HTCap.Data.ElementID = ZM_WLAN_EID_HT_CAPABILITY; - wd->ap.HTCap.Data.Length = 26; - /*wd->ap.HTCap.Data.SupChannelWidthSet = 0; - wd->ap.HTCap.Data.MIMOPowerSave = 3; - wd->ap.HTCap.Data.ShortGIfor40MHz = 0; - wd->ap.HTCap.Data.ShortGIfor20MHz = 0; - wd->ap.HTCap.Data.DSSSandCCKin40MHz = 0; - */ - wd->ap.HTCap.Data.AMPDUParam |= HTCAP_MaxRxAMPDU3; - wd->ap.HTCap.Data.MCSSet[0] = 0xFF; /* MCS 0 ~ 7 */ - wd->ap.HTCap.Data.MCSSet[1] = 0xFF; /* MCS 8 ~ 15 */ - - /* Init Extended HT Capability Info */ - wd->ap.ExtHTCap.Data.ElementID = ZM_WLAN_EID_EXTENDED_HT_CAPABILITY; - wd->ap.ExtHTCap.Data.Length = 22; - wd->ap.ExtHTCap.Data.ControlChannel = 6; - /* wd->ap.ExtHTCap.Data.ExtChannelOffset = 3; */ - wd->ap.ExtHTCap.Data.ChannelInfo |= ExtHtCap_RecomTxWidthSet; - /* wd->ap.ExtHTCap.Data.RIFSMode = 1; */ - wd->ap.ExtHTCap.Data.OperatingInfo |= 1; - - /* STA Mode*/ - /* Init HT Capability Info */ - wd->sta.HTCap.Data.ElementID = ZM_WLAN_EID_HT_CAPABILITY; - wd->sta.HTCap.Data.Length = 26; - - /* Test with 5G-AP : 7603 */ - /* wd->sta.HTCap.Data.SupChannelWidthSet = 1; */ - wd->sta.HTCap.Data.HtCapInfo |= HTCAP_SMEnabled; - wd->sta.HTCap.Data.HtCapInfo |= HTCAP_SupChannelWidthSet; - wd->sta.HTCap.Data.HtCapInfo |= HTCAP_ShortGIfor40MHz; - wd->sta.HTCap.Data.HtCapInfo |= HTCAP_DSSSandCCKin40MHz; -#ifndef ZM_DISABLE_AMSDU8K_SUPPORT - wd->sta.HTCap.Data.HtCapInfo |= HTCAP_MaxAMSDULength; -#endif - /*wd->sta.HTCap.Data.MIMOPowerSave = 0; - wd->sta.HTCap.Data.ShortGIfor40MHz = 0; - wd->sta.HTCap.Data.ShortGIfor20MHz = 0; - wd->sta.HTCap.Data.DSSSandCCKin40MHz = 0; - */ - wd->sta.HTCap.Data.AMPDUParam |= HTCAP_MaxRxAMPDU3; - wd->sta.HTCap.Data.MCSSet[0] = 0xFF; /* MCS 0 ~ 7 */ - wd->sta.HTCap.Data.MCSSet[1] = 0xFF; /* MCS 8 ~ 15 */ - wd->sta.HTCap.Data.PCO |= HTCAP_TransmissionTime3; - /* wd->sta.HTCap.Data.TransmissionTime = 0; */ - /* Init Extended HT Capability Info */ - wd->sta.ExtHTCap.Data.ElementID = ZM_WLAN_EID_EXTENDED_HT_CAPABILITY; - wd->sta.ExtHTCap.Data.Length = 22; - wd->sta.ExtHTCap.Data.ControlChannel = 6; - - /* wd->sta.ExtHTCap.Data.ExtChannelOffset |= 3; */ - wd->sta.ExtHTCap.Data.ChannelInfo |= ExtHtCap_ExtChannelOffsetBelow; - - /* wd->sta.ExtHTCap.Data.RecomTxWidthSet = 1; */ - /* wd->sta.ExtHTCap.Data.RIFSMode = 1; */ - wd->sta.ExtHTCap.Data.OperatingInfo |= 1; -#endif - -#if 0 - /* WME test code */ - wd->ap.qosMode[0] = 1; -#endif - - wd->ledStruct.ledMode[0] = 0x2221; - wd->ledStruct.ledMode[1] = 0x2221; - - zfTimerInit(dev); - - ZM_PERFORMANCE_INIT(dev); - - zfBssInfoCreate(dev); - zfScanMgrInit(dev); - zfPowerSavingMgrInit(dev); - -#if 0 - /* Test code */ - { - u32_t key[4] = {0xffffffff, 0xff, 0, 0}; - u16_t addr[3] = {0x8000, 0x01ab, 0x0000}; - /*zfSetKey(dev, 0, 0, ZM_WEP64, addr, key); - zfSetKey(dev, 0, 0, ZM_AES, addr, key); - zfSetKey(dev, 64, 0, 1, wd->macAddr, key); - */ - } -#endif - - /* WME settings */ - wd->ws.staWmeEnabled = 1; /* Enable WME by default */ -#define ZM_UAPSD_Q_SIZE 32 /* 2^N */ - wd->ap.uapsdQ = zfQueueCreate(dev, ZM_UAPSD_Q_SIZE); - zm_assert(wd->ap.uapsdQ != NULL); - wd->sta.uapsdQ = zfQueueCreate(dev, ZM_UAPSD_Q_SIZE); - zm_assert(wd->sta.uapsdQ != NULL); - - /* zfHpInit(dev, wd->frequency); */ - - /* MAC address */ - /* zfHpSetMacAddress(dev, wd->macAddr, 0); */ - zfHpGetMacAddress(dev); - - zfCoreSetFrequency(dev, wd->frequency); - -#if ZM_PCI_LOOP_BACK == 1 - zfwWriteReg(dev, ZM_REG_PCI_CONTROL, 6); -#endif /* #if ZM_PCI_LOOP_BACK == 1 */ - - /* zfiWlanSetDot11DMode(dev , 1); // Enable 802.11d */ - /* zfiWlanSetDot11HDFSMode(dev , 1); // Enable 802.11h DFS */ - wd->sta.DFSEnable = 1; - wd->sta.capability[1] |= ZM_BIT_0; - - /* zfiWlanSetFrequency(dev, 5260000, TRUE); */ - /* zfiWlanSetAniMode(dev , 1); // Enable ANI */ - - /* Trgger Rx DMA */ - zfHpStartRecv(dev); - - zm_debug_msg0("end"); - - return 0; -} - -/* WLAN hardware will be shutdown and all resource will be release */ -u16_t zfiWlanClose(zdev_t *dev) -{ - zmw_get_wlan_dev(dev); - - zm_msg0_init(ZM_LV_0, "enter"); - - wd->state = ZM_WLAN_STATE_CLOSEDED; - - /* zfiWlanDisable(dev, 1); */ - zfWlanReset(dev); - - zfHpStopRecv(dev); - - /* Disable MAC */ - /* Disable PHY */ - /* Disable RF */ - - zfHpRelease(dev); - - zfQueueDestroy(dev, wd->ap.uapsdQ); - zfQueueDestroy(dev, wd->sta.uapsdQ); - - zfBssInfoDestroy(dev); - -#ifdef ZM_ENABLE_AGGREGATION - /* add by honda */ - zfAggRxFreeBuf(dev, 1); /* 1 for release structure memory */ - /* end of add by honda */ -#endif - - zm_msg0_init(ZM_LV_0, "exit"); - - return 0; -} - -void zfGetWrapperSetting(zdev_t *dev) -{ - u8_t bPassive; - u16_t vapId = 0; - - zmw_get_wlan_dev(dev); - - zmw_declare_for_critical_section(); -#if 0 - if ((wd->ws.countryIsoName[0] != 0) - || (wd->ws.countryIsoName[1] != 0) - || (wd->ws.countryIsoName[2] != '\0')) { - zfHpGetRegulationTablefromRegionCode(dev, - zfHpGetRegionCodeFromIsoName(dev, wd->ws.countryIsoName)); - } -#endif - zmw_enter_critical_section(dev); - - wd->wlanMode = wd->ws.wlanMode; - - /* set channel */ - if (wd->ws.frequency) { - wd->frequency = wd->ws.frequency; - wd->ws.frequency = 0; - } else { - wd->frequency = zfChGetFirstChannel(dev, &bPassive); - - if (wd->wlanMode == ZM_MODE_IBSS) { - if (wd->ws.adhocMode == ZM_ADHOCBAND_A) - wd->frequency = ZM_CH_A_36; - else - wd->frequency = ZM_CH_G_6; - } - } -#ifdef ZM_AP_DEBUG - /* honda add for debug, 2437 channel 6, 2452 channel 9 */ - wd->frequency = 2437; - /* end of add by honda */ -#endif - - /* set preamble type */ - switch (wd->ws.preambleType) { - case ZM_PREAMBLE_TYPE_AUTO: - case ZM_PREAMBLE_TYPE_SHORT: - case ZM_PREAMBLE_TYPE_LONG: - wd->preambleType = wd->ws.preambleType; - break; - default: - wd->preambleType = ZM_PREAMBLE_TYPE_SHORT; - break; - } - wd->ws.preambleType = 0; - - if (wd->wlanMode == ZM_MODE_AP) { - vapId = zfwGetVapId(dev); - - if (vapId == 0xffff) { - wd->ap.authAlgo[0] = wd->ws.authMode; - wd->ap.encryMode[0] = wd->ws.encryMode; - } else { - wd->ap.authAlgo[vapId + 1] = wd->ws.authMode; - wd->ap.encryMode[vapId + 1] = wd->ws.encryMode; - } - wd->ws.authMode = 0; - wd->ws.encryMode = ZM_NO_WEP; - - /* Get beaconInterval from WrapperSetting */ - if ((wd->ws.beaconInterval >= 20) && - (wd->ws.beaconInterval <= 1000)) - wd->beaconInterval = wd->ws.beaconInterval; - else - wd->beaconInterval = 100; /* 100ms */ - - if (wd->ws.dtim > 0) - wd->dtim = wd->ws.dtim; - else - wd->dtim = 1; - - - wd->ap.qosMode = wd->ws.apWmeEnabled & 0x1; - wd->ap.uapsdEnabled = (wd->ws.apWmeEnabled & 0x2) >> 1; - } else { - wd->sta.authMode = wd->ws.authMode; - wd->sta.currentAuthMode = wd->ws.authMode; - wd->sta.wepStatus = wd->ws.wepStatus; - - if (wd->ws.beaconInterval) - wd->beaconInterval = wd->ws.beaconInterval; - else - wd->beaconInterval = 0x64; - - if (wd->wlanMode == ZM_MODE_IBSS) { - /* 1. Set default channel 6 (2437MHz) */ - /* wd->frequency = 2437; */ - - /* 2. Otus support 802.11g Mode */ - if ((wd->ws.adhocMode == ZM_ADHOCBAND_G) || - (wd->ws.adhocMode == ZM_ADHOCBAND_BG) || - (wd->ws.adhocMode == ZM_ADHOCBAND_ABG)) - wd->wfc.bIbssGMode = 1; - else - wd->wfc.bIbssGMode = 0; - - /* 3. set short preamble */ - /* wd->sta.preambleType = ZM_PREAMBLE_TYPE_SHORT; */ - } - - /* set ATIM window */ - if (wd->ws.atimWindow) - wd->sta.atimWindow = wd->ws.atimWindow; - else { - /* wd->sta.atimWindow = 0x0a; */ - wd->sta.atimWindow = 0; - } - - /* wd->sta.connectingHiddenAP = 1; - wd->ws.connectingHiddenAP; - */ - wd->sta.dropUnencryptedPkts = wd->ws.dropUnencryptedPkts; - wd->sta.ibssJoinOnly = wd->ws.ibssJoinOnly; - - if (wd->ws.bDesiredBssid) { - zfMemoryCopy(wd->sta.desiredBssid, - wd->ws.desiredBssid, 6); - wd->sta.bDesiredBssid = TRUE; - wd->ws.bDesiredBssid = FALSE; - } else - wd->sta.bDesiredBssid = FALSE; - - /* check ssid */ - if (wd->ws.ssidLen != 0) { - if ((!zfMemoryIsEqual(wd->ws.ssid, wd->sta.ssid, - wd->sta.ssidLen)) || - (wd->ws.ssidLen != wd->sta.ssidLen) || - (wd->sta.authMode == ZM_AUTH_MODE_WPA) || - (wd->sta.authMode == ZM_AUTH_MODE_WPAPSK) || - (wd->ws.staWmeQosInfo != 0)) { - /* if u-APSD test(set QosInfo), clear - connectByReasso to do association - (not reassociation) - */ - wd->sta.connectByReasso = FALSE; - wd->sta.failCntOfReasso = 0; - wd->sta.pmkidInfo.bssidCount = 0; - - wd->sta.ssidLen = wd->ws.ssidLen; - zfMemoryCopy(wd->sta.ssid, wd->ws.ssid, - wd->sta.ssidLen); - - if (wd->sta.ssidLen < 32) - wd->sta.ssid[wd->sta.ssidLen] = 0; - } - } else { - /* ANY BSS */ - wd->sta.ssid[0] = 0; - wd->sta.ssidLen = 0; - } - - wd->sta.wmeEnabled = wd->ws.staWmeEnabled; - wd->sta.wmeQosInfo = wd->ws.staWmeQosInfo; - - } - - zmw_leave_critical_section(dev); -} - -u16_t zfWlanEnable(zdev_t *dev) -{ - u8_t bssid[6] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0}; - u16_t i; - - zmw_get_wlan_dev(dev); - - zmw_declare_for_critical_section(); - - if (wd->wlanMode == ZM_MODE_UNKNOWN) { - zm_debug_msg0("Unknown Mode...Skip..."); - return 0; - } - - if (wd->wlanMode == ZM_MODE_AP) { - u16_t vapId; - - vapId = zfwGetVapId(dev); - - if (vapId == 0xffff) { - /* AP mode */ - zfApInitStaTbl(dev); - - /* AP default parameters */ - wd->bRate = 0xf; - wd->gRate = 0xff; - wd->bRateBasic = 0xf; - wd->gRateBasic = 0x0; - /* wd->beaconInterval = 100; */ - wd->ap.apBitmap = 1; - wd->ap.beaconCounter = 0; - /* wd->ap.vapNumber = 1; //mark by ygwei for Vap */ - - wd->ap.hideSsid[0] = 0; - wd->ap.staAgingTimeSec = 10*60; - wd->ap.staProbingTimeSec = 60; - - for (i = 0; i < ZM_MAX_AP_SUPPORT; i++) - wd->ap.bcmcHead[i] = wd->ap.bcmcTail[i] = 0; - - /* wd->ap.uniHead = wd->ap.uniTail = 0; */ - - /* load AP parameters */ - wd->bRateBasic = wd->ws.bRateBasic; - wd->gRateBasic = wd->ws.gRateBasic; - wd->bgMode = wd->ws.bgMode; - if ((wd->ws.ssidLen <= 32) && (wd->ws.ssidLen != 0)) { - wd->ap.ssidLen[0] = wd->ws.ssidLen; - for (i = 0; i < wd->ws.ssidLen; i++) - wd->ap.ssid[0][i] = wd->ws.ssid[i]; - wd->ws.ssidLen = 0; /* Reset Wrapper Variable */ - } - - if (wd->ap.encryMode[0] == 0) - wd->ap.capab[0] = 0x001; - else - wd->ap.capab[0] = 0x011; - /* set Short Slot Time bit if not 11b */ - if (wd->ap.wlanType[0] != ZM_WLAN_TYPE_PURE_B) - wd->ap.capab[0] |= 0x400; - - /* wd->ap.vapNumber = 1; //mark by ygwei for Vap Test */ - } else { -#if 0 - /* VAP Test Code */ - wd->ap.apBitmap = 0x3; - wd->ap.capab[1] = 0x401; - wd->ap.ssidLen[1] = 4; - wd->ap.ssid[1][0] = 'v'; - wd->ap.ssid[1][1] = 'a'; - wd->ap.ssid[1][2] = 'p'; - wd->ap.ssid[1][3] = '1'; - wd->ap.authAlgo[1] = wd->ws.authMode; - wd->ap.encryMode[1] = wd->ws.encryMode; - wd->ap.vapNumber = 2; -#else - /* VAP Test Code */ - wd->ap.apBitmap = 0x1 | (0x01 << (vapId+1)); - - if ((wd->ws.ssidLen <= 32) && (wd->ws.ssidLen != 0)) { - wd->ap.ssidLen[vapId+1] = wd->ws.ssidLen; - for (i = 0; i < wd->ws.ssidLen; i++) - wd->ap.ssid[vapId+1][i] = - wd->ws.ssid[i]; - wd->ws.ssidLen = 0; /* Reset Wrapper Variable */ - } - - if (wd->ap.encryMode[vapId+1] == 0) - wd->ap.capab[vapId+1] = 0x401; - else - wd->ap.capab[vapId+1] = 0x411; - - wd->ap.authAlgo[vapId+1] = wd->ws.authMode; - wd->ap.encryMode[vapId+1] = wd->ws.encryMode; - - /* Need to be modified when VAP is used */ - /* wd->ap.vapNumber = 2; */ -#endif - } - - wd->ap.vapNumber++; - - zfCoreSetFrequency(dev, wd->frequency); - - zfInitMacApMode(dev); - - /* Disable protection mode */ - zfApSetProtectionMode(dev, 0); - - zfApSendBeacon(dev); - } else { /*if (wd->wlanMode == ZM_MODE_AP) */ - - zfScanMgrScanStop(dev, ZM_SCAN_MGR_SCAN_INTERNAL); - zfScanMgrScanStop(dev, ZM_SCAN_MGR_SCAN_EXTERNAL); - - zmw_enter_critical_section(dev); - wd->sta.oppositeCount = 0; /* reset opposite count */ - /* wd->sta.bAutoReconnect = wd->sta.bAutoReconnectEnabled; */ - /* wd->sta.scanWithSSID = 0; */ - zfStaInitOppositeInfo(dev); - zmw_leave_critical_section(dev); - - zfStaResetStatus(dev, 0); - - if ((wd->sta.cmDisallowSsidLength != 0) && - (wd->sta.ssidLen == wd->sta.cmDisallowSsidLength) && - (zfMemoryIsEqual(wd->sta.ssid, wd->sta.cmDisallowSsid, - wd->sta.ssidLen)) && - (wd->sta.wepStatus == ZM_ENCRYPTION_TKIP)) {/*countermeasures*/ - zm_debug_msg0("countermeasures disallow association"); - } else { - switch (wd->wlanMode) { - case ZM_MODE_IBSS: - /* some registers may be set here */ - if (wd->sta.authMode == ZM_AUTH_MODE_WPA2PSK) - zfHpSetApStaMode(dev, - ZM_HAL_80211_MODE_IBSS_WPA2PSK); - else - zfHpSetApStaMode(dev, - ZM_HAL_80211_MODE_IBSS_GENERAL); - - zm_msg0_mm(ZM_LV_0, "ZM_MODE_IBSS"); - zfIbssConnectNetwork(dev); - break; - - case ZM_MODE_INFRASTRUCTURE: - /* some registers may be set here */ - zfHpSetApStaMode(dev, ZM_HAL_80211_MODE_STA); - - zfInfraConnectNetwork(dev); - break; - - case ZM_MODE_PSEUDO: - /* some registers may be set here */ - zfHpSetApStaMode(dev, ZM_HAL_80211_MODE_STA); - - zfUpdateBssid(dev, bssid); - zfCoreSetFrequency(dev, wd->frequency); - break; - - default: - break; - } - } - - } - - - /* if ((wd->wlanMode != ZM_MODE_INFRASTRUCTURE) && - (wd->wlanMode != ZM_MODE_AP)) - */ - if (wd->wlanMode == ZM_MODE_PSEUDO) { - /* Reset Wlan status */ - zfWlanReset(dev); - - if (wd->zfcbConnectNotify != NULL) - wd->zfcbConnectNotify(dev, ZM_STATUS_MEDIA_CONNECT, - wd->sta.bssid); - zfChangeAdapterState(dev, ZM_STA_STATE_CONNECTED); - } - - - if (wd->wlanMode == ZM_MODE_AP) { - if (wd->zfcbConnectNotify != NULL) - wd->zfcbConnectNotify(dev, ZM_STATUS_MEDIA_CONNECT, - wd->sta.bssid); - /* zfChangeAdapterState(dev, ZM_STA_STATE_CONNECTED); */ - } - - /* Assign default Tx Rate */ - if (wd->sta.EnableHT) { - u32_t oneTxStreamCap; - oneTxStreamCap = (zfHpCapability(dev) & - ZM_HP_CAP_11N_ONE_TX_STREAM); - if (oneTxStreamCap) - wd->CurrentTxRateKbps = 135000; - else - wd->CurrentTxRateKbps = 270000; - wd->CurrentRxRateKbps = 270000; - } else { - wd->CurrentTxRateKbps = 54000; - wd->CurrentRxRateKbps = 54000; - } - - wd->state = ZM_WLAN_STATE_ENABLED; - - return 0; -} - -/* Enable/disable Wlan operation */ -u16_t zfiWlanEnable(zdev_t *dev) -{ - u16_t ret; - - zmw_get_wlan_dev(dev); - - zm_msg0_mm(ZM_LV_1, "Enable Wlan"); - - zfGetWrapperSetting(dev); - - zfZeroMemory((u8_t *) &wd->trafTally, sizeof(struct zsTrafTally)); - - /* Reset cmMicFailureCount to 0 for new association request */ - if (wd->sta.cmMicFailureCount == 1) { - zfTimerCancel(dev, ZM_EVENT_CM_TIMER); - wd->sta.cmMicFailureCount = 0; - } - - zfFlushVtxq(dev); - if ((wd->queueFlushed & 0x10) != 0) - zfHpUsbReset(dev); - - ret = zfWlanEnable(dev); - - return ret; -} -/* Add a flag named ResetKeyCache to show if KeyCache should be cleared. - for hostapd in AP mode, if driver receives iwconfig ioctl - after setting group key, it shouldn't clear KeyCache. -*/ -u16_t zfiWlanDisable(zdev_t *dev, u8_t ResetKeyCache) -{ - u16_t i; - u8_t isConnected; - - zmw_get_wlan_dev(dev); - -#ifdef ZM_ENABLE_IBSS_WPA2PSK - zmw_declare_for_critical_section(); -#endif - wd->state = ZM_WLAN_STATE_DISABLED; - - zm_msg0_mm(ZM_LV_1, "Disable Wlan"); - - if (wd->wlanMode != ZM_MODE_AP) { - isConnected = zfStaIsConnected(dev); - - if ((wd->wlanMode == ZM_MODE_INFRASTRUCTURE) && - (wd->sta.currentAuthMode != ZM_AUTH_MODE_WPA2)) { - /* send deauthentication frame */ - if (isConnected) { - /* zfiWlanDeauth(dev, NULL, 0); */ - zfSendMmFrame(dev, ZM_WLAN_FRAME_TYPE_DEAUTH, - wd->sta.bssid, 3, 0, 0); - /* zmw_debug_msg0("send a Deauth frame!"); */ - } - } - - /* Remove all the connected peer stations */ - if (wd->wlanMode == ZM_MODE_IBSS) { - wd->sta.ibssBssIsCreator = 0; - zfTimerCancel(dev, ZM_EVENT_IBSS_MONITOR); - zfStaIbssMonitoring(dev, 1); - } - -#ifdef ZM_ENABLE_IBSS_WPA2PSK - zmw_enter_critical_section(dev); - wd->sta.ibssWpa2Psk = 0; - zmw_leave_critical_section(dev); -#endif - - wd->sta.wpaState = ZM_STA_WPA_STATE_INIT; - - /* reset connect timeout counter */ - wd->sta.connectTimeoutCount = 0; - - /* reset connectState to None */ - wd->sta.connectState = ZM_STA_CONN_STATE_NONE; - - /* reset leap enable variable */ - wd->sta.leapEnabled = 0; - - /* Disable the RIFS Status/RIFS-like frame count/RIFS count */ - if (wd->sta.rifsState == ZM_RIFS_STATE_DETECTED) - zfHpDisableRifs(dev); - wd->sta.rifsState = ZM_RIFS_STATE_DETECTING; - wd->sta.rifsLikeFrameCnt = 0; - wd->sta.rifsCount = 0; - - wd->sta.osRxFilter = 0; - wd->sta.bSafeMode = 0; - - zfChangeAdapterState(dev, ZM_STA_STATE_DISCONNECT); - if (ResetKeyCache) - zfHpResetKeyCache(dev); - - if (isConnected) { - if (wd->zfcbConnectNotify != NULL) - wd->zfcbConnectNotify(dev, - ZM_STATUS_MEDIA_CONNECTION_DISABLED, - wd->sta.bssid); - } else { - if (wd->zfcbConnectNotify != NULL) - wd->zfcbConnectNotify(dev, - ZM_STATUS_MEDIA_DISABLED, wd->sta.bssid); - } - } else { /* if (wd->wlanMode == ZM_MODE_AP) */ - for (i = 0; i < ZM_MAX_STA_SUPPORT; i++) { - /* send deauthentication frame */ - if (wd->ap.staTable[i].valid == 1) { - /* Reason : Sending station is leaving */ - zfSendMmFrame(dev, ZM_WLAN_FRAME_TYPE_DEAUTH, - wd->ap.staTable[i].addr, 3, 0, 0); - } - } - - if (ResetKeyCache) - zfHpResetKeyCache(dev); - - wd->ap.vapNumber--; - } - - /* stop beacon */ - zfHpDisableBeacon(dev); - - /* Flush VTxQ and MmQ */ - zfFlushVtxq(dev); - /* Flush AP PS queues */ - zfApFlushBufferedPsFrame(dev); - /* Free buffer in defragment list*/ - zfAgingDefragList(dev, 1); - -#ifdef ZM_ENABLE_AGGREGATION - /* add by honda */ - zfAggRxFreeBuf(dev, 0); /* 1 for release structure memory */ - /* end of add by honda */ -#endif - - /* Clear the information for the peer stations - of IBSS or AP of Station mode - */ - zfZeroMemory((u8_t *)wd->sta.oppositeInfo, - sizeof(struct zsOppositeInfo) * ZM_MAX_OPPOSITE_COUNT); - - /* Turn off Software WEP/TKIP */ - if (wd->sta.SWEncryptEnable != 0) { - zm_debug_msg0("Disable software encryption"); - zfStaDisableSWEncryption(dev); - } - - /* Improve WEP/TKIP performance with HT AP, - detail information please look bug#32495 */ - /* zfHpSetTTSIFSTime(dev, 0x8); */ - - return 0; -} - -u16_t zfiWlanSuspend(zdev_t *dev) -{ - zmw_get_wlan_dev(dev); - zmw_declare_for_critical_section(); - - /* Change the HAL state to init so that any packet - can't be transmitted between resume & HAL reinit. - This would cause the chip hang issue in OTUS. - */ - zmw_enter_critical_section(dev); - wd->halState = ZM_HAL_STATE_INIT; - zmw_leave_critical_section(dev); - - return 0; -} - -u16_t zfiWlanResume(zdev_t *dev, u8_t doReconn) -{ - u16_t ret; - zmw_get_wlan_dev(dev); - zmw_declare_for_critical_section(); - - /* Redownload firmware, Reinit MAC,PHY,RF */ - zfHpReinit(dev, wd->frequency); - - /* Set channel according to AP's configuration */ - zfCoreSetFrequencyExV2(dev, wd->frequency, wd->BandWidth40, - wd->ExtOffset, NULL, 1); - - zfHpSetMacAddress(dev, wd->macAddr, 0); - - /* Start Rx */ - zfHpStartRecv(dev); - - zfFlushVtxq(dev); - - if (wd->wlanMode != ZM_MODE_INFRASTRUCTURE && - wd->wlanMode != ZM_MODE_IBSS) - return 1; - - zm_msg0_mm(ZM_LV_1, "Resume Wlan"); - if ((zfStaIsConnected(dev)) || (zfStaIsConnecting(dev))) { - if (doReconn == 1) { - zm_msg0_mm(ZM_LV_1, "Re-connect..."); - zmw_enter_critical_section(dev); - wd->sta.connectByReasso = FALSE; - zmw_leave_critical_section(dev); - - zfWlanEnable(dev); - } else if (doReconn == 0) - zfHpSetRollCallTable(dev); - } - - ret = 0; - - return ret; -} - -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfiWlanFlushAllQueuedBuffers */ -/* Flush Virtual TxQ, MmQ, PS frames and defragment list */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* */ -/* OUTPUTS */ -/* None */ -/* */ -/* AUTHOR */ -/* Stephen Chen Atheros Communications, INC. 2007.1 */ -/* */ -/************************************************************************/ -void zfiWlanFlushAllQueuedBuffers(zdev_t *dev) -{ - /* Flush VTxQ and MmQ */ - zfFlushVtxq(dev); - /* Flush AP PS queues */ - zfApFlushBufferedPsFrame(dev); - /* Free buffer in defragment list*/ - zfAgingDefragList(dev, 1); -} - -/* Do WLAN site survey */ -u16_t zfiWlanScan(zdev_t *dev) -{ - u16_t ret = 1; - zmw_get_wlan_dev(dev); - - zm_debug_msg0(""); - - zmw_declare_for_critical_section(); - - zmw_enter_critical_section(dev); - - if (wd->wlanMode == ZM_MODE_AP) { - wd->heartBeatNotification |= ZM_BSSID_LIST_SCAN; - wd->sta.scanFrequency = 0; - /* wd->sta.pUpdateBssList->bssCount = 0; */ - ret = 0; - } else { -#if 0 - if (!zfStaBlockWlanScan(dev)) { - zm_debug_msg0("scan request"); - /*zfTimerSchedule(dev, ZM_EVENT_SCAN, ZM_TICK_ZERO);*/ - ret = 0; - goto start_scan; - } -#else - goto start_scan; -#endif - } - - zmw_leave_critical_section(dev); - - return ret; - -start_scan: - zmw_leave_critical_section(dev); - - if (wd->ledStruct.LEDCtrlFlagFromReg & ZM_LED_CTRL_FLAG_ALPHA) { - /* flag for Alpha */ - wd->ledStruct.LEDCtrlFlag |= ZM_LED_CTRL_FLAG_ALPHA; - } - - ret = zfScanMgrScanStart(dev, ZM_SCAN_MGR_SCAN_EXTERNAL); - - zm_debug_msg1("ret = ", ret); - - return ret; -} - - -/* rate */ -/* 0 : AUTO */ -/* 1 : CCK 1M */ -/* 2 : CCK 2M */ -/* 3 : CCK 5.5M */ -/* 4 : CCK 11M */ -/* 5 : OFDM 6M */ -/* 6 : OFDM 9M */ -/* 7 : OFDM 12M */ -/* 8 : OFDM 18M */ -/* 9 : OFDM 24M */ -/* 10 : OFDM 36M */ -/* 11 : OFDM 48M */ -/* 12 : OFDM 54M */ -/* 13 : MCS 0 */ -/* 28 : MCS 15 */ -u16_t zcRateToMCS[] = - {0xff, 0, 1, 2, 3, 0xb, 0xf, 0xa, 0xe, 0x9, 0xd, 0x8, 0xc}; -u16_t zcRateToMT[] = {0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1}; - -u16_t zfiWlanSetTxRate(zdev_t *dev, u16_t rate) -{ - /* jhlee HT 0 */ - zmw_get_wlan_dev(dev); - - if (rate <= 12) { - wd->txMCS = zcRateToMCS[rate]; - wd->txMT = zcRateToMT[rate]; - return ZM_SUCCESS; - } else if ((rate <= 28) || (rate == 13 + 32)) { - wd->txMCS = rate - 12 - 1; - wd->txMT = 2; - return ZM_SUCCESS; - } - - return ZM_ERR_INVALID_TX_RATE; -} - -const u32_t zcRateIdToKbps40M[] = -{ - 1000, 2000, 5500, 11000, /* 1M, 2M, 5M, 11M , 0 1 2 3 */ - 6000, 9000, 12000, 18000, /* 6M 9M 12M 18M , 4 5 6 7 */ - 24000, 36000, 48000, 54000, /* 24M 36M 48M 54M , 8 9 10 11 */ - 13500, 27000, 40500, 54000, /* MCS0 MCS1 MCS2 MCS3 , 12 13 14 15 */ - 81000, 108000, 121500, 135000, /* MCS4 MCS5 MCS6 MCS7 , 16 17 18 19 */ - 27000, 54000, 81000, 108000, /* MCS8 MCS9 MCS10 MCS11 , 20 21 22 23 */ - 162000, 216000, 243000, 270000, /*MCS12 MCS13 MCS14 MCS15, 24 25 26 27*/ - 270000, 300000, 150000 /* MCS14SG, MCS15SG, MCS7SG , 28 29 30 */ -}; - -const u32_t zcRateIdToKbps20M[] = -{ - 1000, 2000, 5500, 11000, /* 1M, 2M, 5M, 11M , 0 1 2 3 */ - 6000, 9000, 12000, 18000, /* 6M 9M 12M 18M , 4 5 6 7 */ - 24000, 36000, 48000, 54000, /* 24M 36M 48M 54M , 8 9 10 11 */ - 6500, 13000, 19500, 26000, /* MCS0 MCS1 MCS2 MCS3 , 12 13 14 15 */ - 39000, 52000, 58500, 65000, /* MCS4 MCS5 MCS6 MCS7 , 16 17 18 19 */ - 13000, 26000, 39000, 52000, /* MCS8 MCS9 MCS10 MCS11 , 20 21 22 23 */ - 78000, 104000, 117000, 130000, /* MCS12 MCS13 MCS14 MCS15, 24 25 26 27*/ - 130000, 144400, 72200 /* MCS14SG, MCS15SG, MSG7SG , 28 29 30 */ -}; - -u32_t zfiWlanQueryTxRate(zdev_t *dev) -{ - u8_t rateId = 0xff; - zmw_get_wlan_dev(dev); - zmw_declare_for_critical_section(); - - /* If Tx rate had not been trained, return maximum Tx rate instead */ - if ((wd->wlanMode == ZM_MODE_INFRASTRUCTURE) && - (zfStaIsConnected(dev))) { - zmw_enter_critical_section(dev); - /* Not in fixed rate mode */ - if (wd->txMCS == 0xff) { - if ((wd->sta.oppositeInfo[0].rcCell.flag & - ZM_RC_TRAINED_BIT) == 0) - rateId = wd->sta.oppositeInfo[0].rcCell. \ - operationRateSet[wd->sta.oppositeInfo[0]. \ - rcCell.operationRateCount-1]; - else - rateId = wd->sta.oppositeInfo[0].rcCell. \ - operationRateSet[wd->sta.oppositeInfo[0]. \ - rcCell.currentRateIndex]; - } - zmw_leave_critical_section(dev); - } - - if (rateId != 0xff) { - if (wd->sta.htCtrlBandwidth) - return zcRateIdToKbps40M[rateId]; - else - return zcRateIdToKbps20M[rateId]; - } else - return wd->CurrentTxRateKbps; -} - -void zfWlanUpdateRxRate(zdev_t *dev, struct zsAdditionInfo *addInfo) -{ - u32_t rxRateKbps; - zmw_get_wlan_dev(dev); - /* zm_msg1_mm(ZM_LV_0, "addInfo->Tail.Data.RxMacStatus =", - * addInfo->Tail.Data.RxMacStatus & 0x03); - */ - - /* b5~b4: MPDU indication. */ - /* 00: Single MPDU. */ - /* 10: First MPDU of A-MPDU. */ - /* 11: Middle MPDU of A-MPDU. */ - /* 01: Last MPDU of A-MPDU. */ - /* Only First MPDU and Single MPDU have PLCP header */ - /* First MPDU : (mpduInd & 0x30) == 0x00 */ - /* Single MPDU : (mpduInd & 0x30) == 0x20 */ - if ((addInfo->Tail.Data.RxMacStatus & 0x10) == 0) { - /* Modulation type */ - wd->modulationType = addInfo->Tail.Data.RxMacStatus & 0x03; - switch (wd->modulationType) { - /* CCK mode */ - case 0x0: - wd->rateField = addInfo->PlcpHeader[0] & 0xff; - wd->rxInfo = 0; - break; - /* Legacy-OFDM mode */ - case 0x1: - wd->rateField = addInfo->PlcpHeader[0] & 0x0f; - wd->rxInfo = 0; - break; - /* HT-OFDM mode */ - case 0x2: - wd->rateField = addInfo->PlcpHeader[3]; - wd->rxInfo = addInfo->PlcpHeader[6]; - break; - default: - break; - } - - rxRateKbps = zfUpdateRxRate(dev); - if (wd->CurrentRxRateUpdated == 1) { - if (rxRateKbps > wd->CurrentRxRateKbps) - wd->CurrentRxRateKbps = rxRateKbps; - } else { - wd->CurrentRxRateKbps = rxRateKbps; - wd->CurrentRxRateUpdated = 1; - } - } -} - -#if 0 -u16_t zcIndextoRateBG[16] = {1000, 2000, 5500, 11000, 0, 0, 0, 0, 48000, - 24000, 12000, 6000, 54000, 36000, 18000, 9000}; -u32_t zcIndextoRateN20L[16] = {6500, 13000, 19500, 26000, 39000, 52000, 58500, - 65000, 13000, 26000, 39000, 52000, 78000, 104000, - 117000, 130000}; -u32_t zcIndextoRateN20S[16] = {7200, 14400, 21700, 28900, 43300, 57800, 65000, - 72200, 14400, 28900, 43300, 57800, 86700, 115600, - 130000, 144400}; -u32_t zcIndextoRateN40L[16] = {13500, 27000, 40500, 54000, 81000, 108000, - 121500, 135000, 27000, 54000, 81000, 108000, - 162000, 216000, 243000, 270000}; -u32_t zcIndextoRateN40S[16] = {15000, 30000, 45000, 60000, 90000, 120000, - 135000, 150000, 30000, 60000, 90000, 120000, - 180000, 240000, 270000, 300000}; -#endif - -extern u16_t zcIndextoRateBG[16]; -extern u32_t zcIndextoRateN20L[16]; -extern u32_t zcIndextoRateN20S[16]; -extern u32_t zcIndextoRateN40L[16]; -extern u32_t zcIndextoRateN40S[16]; - -u32_t zfiWlanQueryRxRate(zdev_t *dev) -{ - zmw_get_wlan_dev(dev); - - wd->CurrentRxRateUpdated = 0; - return wd->CurrentRxRateKbps; -} - -u32_t zfUpdateRxRate(zdev_t *dev) -{ - u8_t mcs, bandwidth; - u32_t rxRateKbps = 130000; - zmw_get_wlan_dev(dev); - - switch (wd->modulationType) { - /* CCK mode */ - case 0x0: - switch (wd->rateField) { - case 0x0a: - rxRateKbps = 1000; - break; - case 0x14: - rxRateKbps = 2000; - - case 0x37: - rxRateKbps = 5500; - break; - case 0x6e: - rxRateKbps = 11000; - break; - default: - break; - } - break; - /* Legacy-OFDM mode */ - case 0x1: - if (wd->rateField <= 15) - rxRateKbps = zcIndextoRateBG[wd->rateField]; - break; - /* HT-OFDM mode */ - case 0x2: - mcs = wd->rateField & 0x7F; - bandwidth = wd->rateField & 0x80; - if (mcs <= 15) { - if (bandwidth != 0) { - if ((wd->rxInfo & 0x80) != 0) { - /* Short GI 40 MHz MIMO Rate */ - rxRateKbps = zcIndextoRateN40S[mcs]; - } else { - /* Long GI 40 MHz MIMO Rate */ - rxRateKbps = zcIndextoRateN40L[mcs]; - } - } else { - if ((wd->rxInfo & 0x80) != 0) { - /* Short GI 20 MHz MIMO Rate */ - rxRateKbps = zcIndextoRateN20S[mcs]; - } else { - /* Long GI 20 MHz MIMO Rate */ - rxRateKbps = zcIndextoRateN20L[mcs]; - } - } - } - break; - default: - break; - } - /* zm_msg1_mm(ZM_LV_0, "wd->CurrentRxRateKbps=", - wd->CurrentRxRateKbps); - */ - - /* ToDo: use bandwith field to define 40MB */ - return rxRateKbps; -} - -/* Get WLAN stastics */ -u16_t zfiWlanGetStatistics(zdev_t *dev) -{ - /* Return link statistics */ - return 0; -} - -u16_t zfiWlanReset(zdev_t *dev) -{ - zmw_get_wlan_dev(dev); - - wd->state = ZM_WLAN_STATE_DISABLED; - - return zfWlanReset(dev); -} - -/* Reset WLAN */ -u16_t zfWlanReset(zdev_t *dev) -{ - u8_t isConnected; - zmw_get_wlan_dev(dev); - - zmw_declare_for_critical_section(); - - zm_debug_msg0("zfWlanReset"); - - isConnected = zfStaIsConnected(dev); - - /* if ( wd->wlanMode != ZM_MODE_AP ) */ - { - if ((wd->wlanMode == ZM_MODE_INFRASTRUCTURE) && - (wd->sta.currentAuthMode != ZM_AUTH_MODE_WPA2)) { - /* send deauthentication frame */ - if (isConnected) { - /* zfiWlanDeauth(dev, NULL, 0); */ - zfSendMmFrame(dev, ZM_WLAN_FRAME_TYPE_DEAUTH, - wd->sta.bssid, 3, 0, 0); - /* zmw_debug_msg0("send a Deauth frame!"); */ - } - } - } - - zfChangeAdapterState(dev, ZM_STA_STATE_DISCONNECT); - zfHpResetKeyCache(dev); - - if (isConnected) { - /* zfiWlanDisable(dev); */ - if (wd->zfcbConnectNotify != NULL) - wd->zfcbConnectNotify(dev, - ZM_STATUS_MEDIA_CONNECTION_RESET, wd->sta.bssid); - } else { - if (wd->zfcbConnectNotify != NULL) - wd->zfcbConnectNotify(dev, ZM_STATUS_MEDIA_RESET, - wd->sta.bssid); - } - - /* stop beacon */ - zfHpDisableBeacon(dev); - - /* Free buffer in defragment list*/ - zfAgingDefragList(dev, 1); - - /* Flush VTxQ and MmQ */ - zfFlushVtxq(dev); - -#ifdef ZM_ENABLE_AGGREGATION - /* add by honda */ - zfAggRxFreeBuf(dev, 0); /* 1 for release structure memory */ - /* end of add by honda */ -#endif - - zfStaRefreshBlockList(dev, 1); - - zmw_enter_critical_section(dev); - - zfTimerCancel(dev, ZM_EVENT_IBSS_MONITOR); - zfTimerCancel(dev, ZM_EVENT_CM_BLOCK_TIMER); - zfTimerCancel(dev, ZM_EVENT_CM_DISCONNECT); - - wd->sta.connectState = ZM_STA_CONN_STATE_NONE; - wd->sta.connectByReasso = FALSE; - wd->sta.cmDisallowSsidLength = 0; - wd->sta.bAutoReconnect = 0; - wd->sta.InternalScanReq = 0; - wd->sta.encryMode = ZM_NO_WEP; - wd->sta.wepStatus = ZM_ENCRYPTION_WEP_DISABLED; - wd->sta.wpaState = ZM_STA_WPA_STATE_INIT; - wd->sta.cmMicFailureCount = 0; - wd->sta.ibssBssIsCreator = 0; -#ifdef ZM_ENABLE_IBSS_WPA2PSK - wd->sta.ibssWpa2Psk = 0; -#endif - /* reset connect timeout counter */ - wd->sta.connectTimeoutCount = 0; - - /* reset leap enable variable */ - wd->sta.leapEnabled = 0; - - /* Reset the RIFS Status / RIFS-like frame count / RIFS count */ - if (wd->sta.rifsState == ZM_RIFS_STATE_DETECTED) - zfHpDisableRifs(dev); - wd->sta.rifsState = ZM_RIFS_STATE_DETECTING; - wd->sta.rifsLikeFrameCnt = 0; - wd->sta.rifsCount = 0; - - wd->sta.osRxFilter = 0; - wd->sta.bSafeMode = 0; - - /* Clear the information for the peer - stations of IBSS or AP of Station mode - */ - zfZeroMemory((u8_t *)wd->sta.oppositeInfo, - sizeof(struct zsOppositeInfo) * ZM_MAX_OPPOSITE_COUNT); - - zmw_leave_critical_section(dev); - - zfScanMgrScanStop(dev, ZM_SCAN_MGR_SCAN_INTERNAL); - zfScanMgrScanStop(dev, ZM_SCAN_MGR_SCAN_EXTERNAL); - - /* Turn off Software WEP/TKIP */ - if (wd->sta.SWEncryptEnable != 0) { - zm_debug_msg0("Disable software encryption"); - zfStaDisableSWEncryption(dev); - } - - /* Improve WEP/TKIP performance with HT AP, - detail information please look bug#32495 - */ - /* zfHpSetTTSIFSTime(dev, 0x8); */ - - /* Keep Pseudo mode */ - if (wd->wlanMode != ZM_MODE_PSEUDO) - wd->wlanMode = ZM_MODE_INFRASTRUCTURE; - - return 0; -} - -/* Deauthenticate a STA */ -u16_t zfiWlanDeauth(zdev_t *dev, u16_t *macAddr, u16_t reason) -{ - zmw_get_wlan_dev(dev); - - if (wd->wlanMode == ZM_MODE_AP) { - /* u16_t id; */ - - /* - * we will reset all key in zfHpResetKeyCache() when call - * zfiWlanDisable(), if we want to reset PairwiseKey for each - * sta, need to use a nullAddr to let keyindex not match. - * otherwise hardware will still find PairwiseKey when AP change - * encryption mode from WPA to WEP - */ - - /* - id = zfApFindSta(dev, macAddr); - if (id != 0xffff) - { - u32_t key[8]; - u16_t nullAddr[3] = { 0x0, 0x0, 0x0 }; - - if (wd->ap.staTable[i].encryMode != ZM_NO_WEP) - { - zfHpSetApPairwiseKey(dev, nullAddr, - ZM_NO_WEP, &key[0], &key[4], i+1); - } - //zfHpSetApPairwiseKey(dev, (u16_t *)macAddr, - // ZM_NO_WEP, &key[0], &key[4], id+1); - wd->ap.staTable[id].encryMode = ZM_NO_WEP; - wd->ap.staTable[id].keyIdx = 0xff; - } - */ - - zfSendMmFrame(dev, ZM_WLAN_FRAME_TYPE_DEAUTH, macAddr, - reason, 0, 0); - } else - zfSendMmFrame(dev, ZM_WLAN_FRAME_TYPE_DEAUTH, - wd->sta.bssid, 3, 0, 0); - - /* Issue DEAUTH command to FW */ - return 0; -} - - -/* XP packet filter feature : */ -/* 1=>enable: All multicast address packets, not just the ones */ -/* enumerated in the multicast address list. */ -/* 0=>disable */ -void zfiWlanSetAllMulticast(zdev_t *dev, u32_t setting) -{ - zmw_get_wlan_dev(dev); - zm_msg1_mm(ZM_LV_0, "sta.bAllMulticast = ", setting); - wd->sta.bAllMulticast = (u8_t)setting; -} - - -/* HT configure API */ -void zfiWlanSetHTCtrl(zdev_t *dev, u32_t *setting, u32_t forceTxTPC) -{ - zmw_get_wlan_dev(dev); - - wd->preambleType = (u8_t)setting[0]; - wd->sta.preambleTypeHT = (u8_t)setting[1]; - wd->sta.htCtrlBandwidth = (u8_t)setting[2]; - wd->sta.htCtrlSTBC = (u8_t)setting[3]; - wd->sta.htCtrlSG = (u8_t)setting[4]; - wd->sta.defaultTA = (u8_t)setting[5]; - wd->enableAggregation = (u8_t)setting[6]; - wd->enableWDS = (u8_t)setting[7]; - - wd->forceTxTPC = forceTxTPC; -} - -/* FB50 in OS XP, RD private test code */ -void zfiWlanQueryHTCtrl(zdev_t *dev, u32_t *setting, u32_t *forceTxTPC) -{ - zmw_get_wlan_dev(dev); - - setting[0] = wd->preambleType; - setting[1] = wd->sta.preambleTypeHT; - setting[2] = wd->sta.htCtrlBandwidth; - setting[3] = wd->sta.htCtrlSTBC; - setting[4] = wd->sta.htCtrlSG; - setting[5] = wd->sta.defaultTA; - setting[6] = wd->enableAggregation; - setting[7] = wd->enableWDS; - - *forceTxTPC = wd->forceTxTPC; -} - -void zfiWlanDbg(zdev_t *dev, u8_t setting) -{ - zmw_get_wlan_dev(dev); - - wd->enableHALDbgInfo = setting; -} - -/* FB50 in OS XP, RD private test code */ -void zfiWlanSetRxPacketDump(zdev_t *dev, u32_t setting) -{ - zmw_get_wlan_dev(dev); - if (setting) - wd->rxPacketDump = 1; /* enable */ - else - wd->rxPacketDump = 0; /* disable */ -} - - -/* FB50 in OS XP, RD private test code */ -/* Tally */ -void zfiWlanResetTally(zdev_t *dev) -{ - zmw_get_wlan_dev(dev); - - zmw_declare_for_critical_section(); - - zmw_enter_critical_section(dev); - - wd->commTally.txUnicastFrm = 0; /* txUnicastFrames */ - wd->commTally.txMulticastFrm = 0; /* txMulticastFrames */ - wd->commTally.txUnicastOctets = 0; /* txUniOctets byte size */ - wd->commTally.txMulticastOctets = 0; /* txMultiOctets byte size */ - wd->commTally.txFrmUpperNDIS = 0; - wd->commTally.txFrmDrvMgt = 0; - wd->commTally.RetryFailCnt = 0; - wd->commTally.Hw_TotalTxFrm = 0; /* Hardware total Tx Frame */ - wd->commTally.Hw_RetryCnt = 0; /* txMultipleRetriesFrames */ - wd->commTally.Hw_UnderrunCnt = 0; - wd->commTally.DriverRxFrmCnt = 0; - wd->commTally.rxUnicastFrm = 0; /* rxUnicastFrames */ - wd->commTally.rxMulticastFrm = 0; /* rxMulticastFrames */ - wd->commTally.NotifyNDISRxFrmCnt = 0; - wd->commTally.rxUnicastOctets = 0; /* rxUniOctets byte size */ - wd->commTally.rxMulticastOctets = 0; /* rxMultiOctets byte size */ - wd->commTally.DriverDiscardedFrm = 0; /* Discard by ValidateFrame */ - wd->commTally.LessThanDataMinLen = 0; - wd->commTally.GreaterThanMaxLen = 0; - wd->commTally.DriverDiscardedFrmCauseByMulticastList = 0; - wd->commTally.DriverDiscardedFrmCauseByFrmCtrl = 0; - wd->commTally.rxNeedFrgFrm = 0; /* need more frg frm */ - wd->commTally.DriverRxMgtFrmCnt = 0; - wd->commTally.rxBroadcastFrm = 0;/* Receive broadcast frame count */ - wd->commTally.rxBroadcastOctets = 0;/*Receive broadcast framebyte size*/ - wd->commTally.Hw_TotalRxFrm = 0; - wd->commTally.Hw_CRC16Cnt = 0; /* rxPLCPCRCErrCnt */ - wd->commTally.Hw_CRC32Cnt = 0; /* rxCRC32ErrCnt */ - wd->commTally.Hw_DecrypErr_UNI = 0; - wd->commTally.Hw_DecrypErr_Mul = 0; - wd->commTally.Hw_RxFIFOOverrun = 0; - wd->commTally.Hw_RxTimeOut = 0; - wd->commTally.LossAP = 0; - - wd->commTally.Tx_MPDU = 0; - wd->commTally.BA_Fail = 0; - wd->commTally.Hw_Tx_AMPDU = 0; - wd->commTally.Hw_Tx_MPDU = 0; - - wd->commTally.txQosDropCount[0] = 0; - wd->commTally.txQosDropCount[1] = 0; - wd->commTally.txQosDropCount[2] = 0; - wd->commTally.txQosDropCount[3] = 0; - wd->commTally.txQosDropCount[4] = 0; - - wd->commTally.Hw_RxMPDU = 0; - wd->commTally.Hw_RxDropMPDU = 0; - wd->commTally.Hw_RxDelMPDU = 0; - - wd->commTally.Hw_RxPhyMiscError = 0; - wd->commTally.Hw_RxPhyXRError = 0; - wd->commTally.Hw_RxPhyOFDMError = 0; - wd->commTally.Hw_RxPhyCCKError = 0; - wd->commTally.Hw_RxPhyHTError = 0; - wd->commTally.Hw_RxPhyTotalCount = 0; - -#if (defined(GCCK) && defined(OFDM)) - wd->commTally.rx11bDataFrame = 0; - wd->commTally.rxOFDMDataFrame = 0; -#endif - - zmw_leave_critical_section(dev); -} - -/* FB50 in OS XP, RD private test code */ -void zfiWlanQueryTally(zdev_t *dev, struct zsCommTally *tally) -{ - zmw_get_wlan_dev(dev); - - zmw_declare_for_critical_section(); - - zmw_enter_critical_section(dev); - zfMemoryCopy((u8_t *)tally, (u8_t *)&wd->commTally, - sizeof(struct zsCommTally)); - zmw_leave_critical_section(dev); -} - -void zfiWlanQueryTrafTally(zdev_t *dev, struct zsTrafTally *tally) -{ - zmw_get_wlan_dev(dev); - - zmw_declare_for_critical_section(); - - zmw_enter_critical_section(dev); - zfMemoryCopy((u8_t *)tally, (u8_t *)&wd->trafTally, - sizeof(struct zsTrafTally)); - zmw_leave_critical_section(dev); -} - -void zfiWlanQueryMonHalRxInfo(zdev_t *dev, struct zsMonHalRxInfo *monHalRxInfo) -{ - zfHpQueryMonHalRxInfo(dev, (u8_t *)monHalRxInfo); -} - -/* parse the modeMDKEnable to DrvCore */ -void zfiDKEnable(zdev_t *dev, u32_t enable) -{ - zmw_get_wlan_dev(dev); - - wd->modeMDKEnable = enable; - zm_debug_msg1("modeMDKEnable = ", wd->modeMDKEnable); -} - -/* airoPeek */ -u32_t zfiWlanQueryPacketTypePromiscuous(zdev_t *dev) -{ - zmw_get_wlan_dev(dev); - - return wd->swSniffer; -} - -/* airoPeek */ -void zfiWlanSetPacketTypePromiscuous(zdev_t *dev, u32_t setValue) -{ - zmw_get_wlan_dev(dev); - - wd->swSniffer = setValue; - zm_msg1_mm(ZM_LV_0, "wd->swSniffer ", wd->swSniffer); - if (setValue) { - /* write register for sniffer mode */ - zfHpSetSnifferMode(dev, 1); - zm_msg0_mm(ZM_LV_1, "enable sniffer mode"); - } else { - zfHpSetSnifferMode(dev, 0); - zm_msg0_mm(ZM_LV_0, "disalbe sniffer mode"); - } -} - -void zfiWlanSetXLinkMode(zdev_t *dev, u32_t setValue) -{ - zmw_get_wlan_dev(dev); - - wd->XLinkMode = setValue; - if (setValue) { - /* write register for sniffer mode */ - zfHpSetSnifferMode(dev, 1); - } else - zfHpSetSnifferMode(dev, 0); -} - -extern void zfStaChannelManagement(zdev_t *dev, u8_t scan); - -void zfiSetChannelManagement(zdev_t *dev, u32_t setting) -{ - zmw_get_wlan_dev(dev); - - switch (setting) { - case 1: - wd->sta.EnableHT = 1; - wd->BandWidth40 = 1; - wd->ExtOffset = 1; - break; - case 3: - wd->sta.EnableHT = 1; - wd->BandWidth40 = 1; - wd->ExtOffset = 3; - break; - case 0: - wd->sta.EnableHT = 1; - wd->BandWidth40 = 0; - wd->ExtOffset = 0; - break; - default: - wd->BandWidth40 = 0; - wd->ExtOffset = 0; - break; - } - - zfCoreSetFrequencyEx(dev, wd->frequency, wd->BandWidth40, - wd->ExtOffset, NULL); -} - -void zfiSetRifs(zdev_t *dev, u16_t setting) -{ - zmw_get_wlan_dev(dev); - - wd->sta.ie.HtInfo.ChannelInfo |= ExtHtCap_RIFSMode; - wd->sta.EnableHT = 1; - - switch (setting) { - case 0: - wd->sta.HT2040 = 0; - /* zfHpSetRifs(dev, 1, 0, - * (wd->sta.currentFrequency < 3000)? 1:0); - */ - break; - case 1: - wd->sta.HT2040 = 1; - /* zfHpSetRifs(dev, 1, 1, - * (wd->sta.currentFrequency < 3000)? 1:0); - */ - break; - default: - wd->sta.HT2040 = 0; - /* zfHpSetRifs(dev, 1, 0, - * (wd->sta.currentFrequency < 3000)? 1:0); - */ - break; - } -} - -void zfiCheckRifs(zdev_t *dev) -{ - zmw_get_wlan_dev(dev); - - if (wd->sta.ie.HtInfo.ChannelInfo & ExtHtCap_RIFSMode) - ; - /* zfHpSetRifs(dev, wd->sta.EnableHT, wd->sta.HT2040, - * (wd->sta.currentFrequency < 3000)? 1:0); - */ -} - -void zfiSetReorder(zdev_t *dev, u16_t value) -{ - zmw_get_wlan_dev(dev); - - wd->reorder = value; -} - -void zfiSetSeqDebug(zdev_t *dev, u16_t value) -{ - zmw_get_wlan_dev(dev); - - wd->seq_debug = value; -} |