diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2010-10-28 09:44:56 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-10-28 09:44:56 -0700 |
commit | e4c5bf8e3dca827a1b3a6fac494eae8c74b7e1e7 (patch) | |
tree | ea51b391f7d74ca695dcb9f5e46eb02688a92ed9 /drivers/staging/otus/hal/hprw.c | |
parent | 81280572ca6f54009edfa4deee563e8678784218 (diff) | |
parent | a4ac0d847af9dd34d5953a5e264400326144b6b2 (diff) | |
download | op-kernel-dev-e4c5bf8e3dca827a1b3a6fac494eae8c74b7e1e7.zip op-kernel-dev-e4c5bf8e3dca827a1b3a6fac494eae8c74b7e1e7.tar.gz |
Merge 'staging-next' to Linus's tree
This merges the staging-next tree to Linus's tree and resolves
some conflicts that were present due to changes in other trees that were
affected by files here.
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/otus/hal/hprw.c')
-rw-r--r-- | drivers/staging/otus/hal/hprw.c | 1568 |
1 files changed, 0 insertions, 1568 deletions
diff --git a/drivers/staging/otus/hal/hprw.c b/drivers/staging/otus/hal/hprw.c deleted file mode 100644 index 4dbd5fb..0000000 --- a/drivers/staging/otus/hal/hprw.c +++ /dev/null @@ -1,1568 +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. - */ -#include "../80211core/cprecomp.h" -#include "hpani.h" -#include "hpusb.h" -#include "hpreg.h" -#include "../80211core/ratectrl.h" - -extern void zfIdlCmd(zdev_t* dev, u32_t* cmd, u16_t cmdLen); - -extern void zfCoreCwmBusy(zdev_t* dev, u16_t busy); -u16_t zfDelayWriteInternalReg(zdev_t* dev, u32_t addr, u32_t val); -u16_t zfFlushDelayWrite(zdev_t* dev); - -//#define zm_hp_priv(x) struct zsHpPriv* hpPriv=zgWlanDev.hpPrivate; - -void zfInitCmdQueue(zdev_t* dev) -{ - struct zsHpPriv* hpPriv; - - zmw_get_wlan_dev(dev); - hpPriv = (struct zsHpPriv*)(wd->hpPrivate); - - zmw_declare_for_critical_section(); - - zmw_enter_critical_section(dev); -#ifdef ZM_XP_USB_MULTCMD - hpPriv->cmdTail = hpPriv->cmdHead = hpPriv->cmdSend = 0; -#else - hpPriv->cmdTail = hpPriv->cmdHead = 0; -#endif - hpPriv->cmdPending = 0; - hpPriv->cmd.delayWcmdCount = 0; - zmw_leave_critical_section(dev); -} - -u16_t zfPutCmd(zdev_t* dev, u32_t* cmd, u16_t cmdLen, u16_t src, u8_t* buf) -{ - u16_t i; - struct zsHpPriv* hpPriv; - - zmw_get_wlan_dev(dev); - hpPriv=wd->hpPrivate; - - /* Make sure command length < ZM_MAX_CMD_SIZE */ - zm_assert(cmdLen <= ZM_MAX_CMD_SIZE); - /* Make sure command queue not full */ - //zm_assert(((hpPriv->cmdTail+1) & (ZM_CMD_QUEUE_SIZE-1)) != hpPriv->cmdHead); - if (((hpPriv->cmdTail+1) & (ZM_CMD_QUEUE_SIZE-1)) == hpPriv->cmdHead ) { - zm_debug_msg0("CMD queue full!!"); - return 0; - } - - hpPriv->cmdQ[hpPriv->cmdTail].cmdLen = cmdLen; - hpPriv->cmdQ[hpPriv->cmdTail].src = src; - hpPriv->cmdQ[hpPriv->cmdTail].buf = buf; - for (i=0; i<(cmdLen>>2); i++) - { - hpPriv->cmdQ[hpPriv->cmdTail].cmd[i] = cmd[i]; - } - - hpPriv->cmdTail = (hpPriv->cmdTail+1) & (ZM_CMD_QUEUE_SIZE-1); - - return 0; -} - -u16_t zfGetCmd(zdev_t* dev, u32_t* cmd, u16_t* cmdLen, u16_t* src, u8_t** buf) -{ - u16_t i; - struct zsHpPriv* hpPriv; - - zmw_get_wlan_dev(dev); - hpPriv=wd->hpPrivate; - - if (hpPriv->cmdTail == hpPriv->cmdHead) - { - return 3; - } - - *cmdLen = hpPriv->cmdQ[hpPriv->cmdHead].cmdLen; - *src = hpPriv->cmdQ[hpPriv->cmdHead].src; - *buf = hpPriv->cmdQ[hpPriv->cmdHead].buf; - for (i=0; i<((*cmdLen)>>2); i++) - { - cmd[i] = hpPriv->cmdQ[hpPriv->cmdHead].cmd[i]; - } - - hpPriv->cmdHead = (hpPriv->cmdHead+1) & (ZM_CMD_QUEUE_SIZE-1); - - return 0; -} - -#ifdef ZM_XP_USB_MULTCMD -void zfSendCmdEx(zdev_t* dev) -{ - u32_t ncmd[ZM_MAX_CMD_SIZE/4]; - u16_t ncmdLen = 0; - u16_t cmdFlag = 0; - u16_t i; - struct zsHpPriv* hpPriv; - - zmw_get_wlan_dev(dev); - hpPriv=wd->hpPrivate; - - zmw_declare_for_critical_section(); - - zmw_enter_critical_section(dev); - - if (hpPriv->cmdPending == 0) - { - if (hpPriv->cmdTail != hpPriv->cmdSend) - { - cmdFlag = 1; - /* Get queueing command */ - ncmdLen= hpPriv->cmdQ[hpPriv->cmdSend].cmdLen; - for (i=0; i<(ncmdLen>>2); i++) - { - ncmd[i] = hpPriv->cmdQ[hpPriv->cmdSend].cmd[i]; - } - hpPriv->cmdSend = (hpPriv->cmdSend+1) & (ZM_CMD_QUEUE_SIZE-1); - - hpPriv->cmdPending = 1; - } - } - - zmw_leave_critical_section(dev); - - if ((cmdFlag == 1)) - { - zfIdlCmd(dev, ncmd, ncmdLen); - } -} - -void zfiSendCmdComp(zdev_t* dev) -{ - struct zsHpPriv* hpPriv; - - zmw_get_wlan_dev(dev); - hpPriv=wd->hpPrivate; - - zmw_declare_for_critical_section(); - - zmw_enter_critical_section(dev); - hpPriv->cmdPending = 0; - zmw_leave_critical_section(dev); - - zfSendCmdEx(dev); -} -#endif - -u16_t zfIssueCmd(zdev_t* dev, u32_t* cmd, u16_t cmdLen, u16_t src, u8_t* buf) -{ - u16_t cmdFlag = 0; - u16_t ret; - struct zsHpPriv* hpPriv; - - zmw_get_wlan_dev(dev); - hpPriv=wd->hpPrivate; - - zmw_declare_for_critical_section(); - - zm_msg2_mm(ZM_LV_1, "cmdLen=", cmdLen); - - zmw_enter_critical_section(dev); - -#ifdef ZM_XP_USB_MULTCMD - ret = zfPutCmd(dev, cmd, cmdLen, src, buf); - zmw_leave_critical_section(dev); - - if (ret != 0) - { - return 1; - } - - zfSendCmdEx(dev); -#else - if (hpPriv->cmdPending == 0) - { - hpPriv->cmdPending = 1; - cmdFlag = 1; - } - ret = zfPutCmd(dev, cmd, cmdLen, src, buf); - - zmw_leave_critical_section(dev); - - if (ret != 0) - { - return 1; - } - - if (cmdFlag == 1) - { - zfIdlCmd(dev, cmd, cmdLen); - } -#endif - return 0; -} - -void zfIdlRsp(zdev_t* dev, u32_t* rsp, u16_t rspLen) -{ - u32_t cmd[ZM_MAX_CMD_SIZE/4]; - u16_t cmdLen; - u16_t src; - u8_t* buf; - u32_t ncmd[ZM_MAX_CMD_SIZE/4]; - u16_t ncmdLen = 0; - u16_t ret; - u16_t cmdFlag = 0; - u16_t i; - s32_t nf; - s32_t noisefloor[4]; - struct zsHpPriv* hpPriv; - - zmw_get_wlan_dev(dev); - hpPriv=wd->hpPrivate; - - - zmw_declare_for_critical_section(); - - zmw_enter_critical_section(dev); - - ret = zfGetCmd(dev, cmd, &cmdLen, &src, &buf); - #if 0 - zm_assert(ret == 0); - #else - if (ret != 0) - { - zm_debug_msg0("Error IdlRsp because none cmd!!\n"); - #ifndef ZM_XP_USB_MULTCMD - zmw_leave_critical_section(dev); - return; - #endif - } - #endif -#ifdef ZM_XP_USB_MULTCMD - zmw_leave_critical_section(dev); -#else - if (hpPriv->cmdTail != hpPriv->cmdHead) - { - cmdFlag = 1; - /* Get queueing command */ - ncmdLen= hpPriv->cmdQ[hpPriv->cmdHead].cmdLen; - for (i=0; i<(ncmdLen>>2); i++) - { - ncmd[i] = hpPriv->cmdQ[hpPriv->cmdHead].cmd[i]; - } - } - else - { - hpPriv->cmdPending = 0; - } - - zmw_leave_critical_section(dev); - - if (cmdFlag == 1) - { - zfIdlCmd(dev, ncmd, ncmdLen); - } -#endif - if (src == ZM_OID_READ) - { - ZM_PERFORMANCE_REG(dev, 0x11772c, rsp[1]); - zfwDbgReadRegDone(dev, cmd[1], rsp[1]); - } - else if (src == ZM_OID_FLASH_CHKSUM) - { - zfwDbgGetFlashChkSumDone(dev, rsp+1); - } - else if (src == ZM_OID_FLASH_READ) - { - u32_t datalen; - - datalen = (rsp[0] & 255); - - zfwDbgReadFlashDone(dev, cmd[1], rsp+1, datalen); - } - else if (src == ZM_OID_FLASH_PROGRAM) - { - /* Non do */ - } - else if (src == ZM_OID_WRITE) - { - zfwDbgWriteRegDone(dev, cmd[1], cmd[2]); - } - else if (src == ZM_OID_TALLY) - { - zfCollectHWTally(dev, rsp, 0); - } - else if (src == ZM_OID_TALLY_APD) - { - zfCollectHWTally(dev, rsp, 1); - zfwDbgReadTallyDone(dev); -#ifdef ZM_ENABLE_BA_RATECTRL - zfRateCtrlAggrSta(dev); -#endif - } - else if (src == ZM_OID_DKTX_STATUS) - { - zm_debug_msg0("src = zm_OID_DKTX_STATUS"); - zfwDbgQueryHwTxBusyDone(dev, rsp[1]); - } - else if (src == ZM_CMD_SET_FREQUENCY) - { - -//#ifdef ZM_OTUS_ENABLE_RETRY_FREQ_CHANGE -#if 0 - zm_debug_msg1("Retry Set Frequency = ", rsp[1]); - - #if 1 - // Read the Noise Floor value ! - nf = ((rsp[2]>>19) & 0x1ff); - if ((nf & 0x100) != 0x0) - { - noisefloor[0] = 0 - ((nf ^ 0x1ff) + 1); - } - else - { - noisefloor[0] = nf; - } - - zm_debug_msg1("Noise Floor[1] = ", noisefloor[0]); - - nf = ((rsp[3]>>19) & 0x1ff); - if ((nf & 0x100) != 0x0) - { - noisefloor[1] = 0 - ((nf ^ 0x1ff) + 1); - } - else - { - noisefloor[1] = nf; - } - - zm_debug_msg1("Noise Floor[2] = ", noisefloor[1]); - zm_debug_msg1("Is Site Survey = ", hpPriv->isSiteSurvey); - #endif - - if ( (rsp[1] && hpPriv->freqRetryCounter == 0) || - (((noisefloor[0]>-60)||(noisefloor[1]>-60)) && hpPriv->freqRetryCounter==0) || - ((abs(noisefloor[0]-noisefloor[1])>=9) && hpPriv->freqRetryCounter==0) ) - { - zm_debug_msg0("Retry to issue the frequency change command"); - - if ( hpPriv->recordFreqRetryCounter == 1 ) - { - zm_debug_msg0("Cold Reset"); - - zfHpSetFrequencyEx(dev, hpPriv->latestFrequency, - hpPriv->latestBw40, - hpPriv->latestExtOffset, - 2); - - if ( hpPriv->isSiteSurvey != 2 ) - { - hpPriv->freqRetryCounter++; - } - hpPriv->recordFreqRetryCounter = 0; - } - else - { - zfHpSetFrequencyEx(dev, hpPriv->latestFrequency, - hpPriv->latestBw40, - hpPriv->latestExtOffset, - 0); - } - hpPriv->recordFreqRetryCounter++; - } - else -#endif - -/* ret: Bit0: AGC calibration 0=>finish 1=>unfinish */ -/* Bit1: Noise calibration 0=>finish 1=>unfinish */ -/* Bit2: Noise calibration finish, but NF value unexcepted => 1 */ - if ( (rsp[1] & 0x1) || (rsp[1] & 0x4) ) - { - zm_debug_msg1("Set Frequency fail : ret = ", rsp[1]); - - /* 1. AGC Calibration fail */ - /* 2. Noise Calibration finish but error NoiseFloor value */ - /* and not in sitesurvey, try more twice */ - if ( hpPriv->isSiteSurvey == 2 ) - { - if ( hpPriv->recordFreqRetryCounter < 2 ) - { - /* cold reset */ - zfHpSetFrequencyEx(dev, hpPriv->latestFrequency, - hpPriv->latestBw40, - hpPriv->latestExtOffset, - 2); - hpPriv->recordFreqRetryCounter++; - zm_debug_msg1("Retry to issue the frequency change command(cold reset) counter = ", hpPriv->recordFreqRetryCounter); - } - else - { - /* Fail : we would not accept this result! */ - zm_debug_msg0("\n\n\n\n Fail twice cold reset \n\n\n\n"); - hpPriv->coldResetNeedFreq = 0; - hpPriv->recordFreqRetryCounter = 0; - zfCoreSetFrequencyComplete(dev); - } - } - else - { - /* in sitesurvey, coldreset in next channel */ - hpPriv->coldResetNeedFreq = 1; - hpPriv->recordFreqRetryCounter = 0; - zfCoreSetFrequencyComplete(dev); - } - } - else if (rsp[1] & 0x2) - { - zm_debug_msg1("Set Frequency fail 2 : ret = ", rsp[1]); - - /* Noise Calibration un-finish */ - /* and not in sitesurvey, try more once */ - if ( hpPriv->isSiteSurvey == 2 ) - { - if ( hpPriv->recordFreqRetryCounter < 1 ) - { - /* cold reset */ - zfHpSetFrequencyEx(dev, hpPriv->latestFrequency, - hpPriv->latestBw40, - hpPriv->latestExtOffset, - 2); - hpPriv->recordFreqRetryCounter++; - zm_debug_msg1("2 Retry to issue the frequency change command(cold reset) counter = ", hpPriv->recordFreqRetryCounter); - } - else - { - /* Fail : we would not accept this result! */ - zm_debug_msg0("\n\n\n\n 2 Fail twice cold reset \n\n\n\n"); - hpPriv->coldResetNeedFreq = 0; - hpPriv->recordFreqRetryCounter = 0; - zfCoreSetFrequencyComplete(dev); - } - } - else - { - /* in sitesurvey, skip this frequency */ - hpPriv->coldResetNeedFreq = 0; - hpPriv->recordFreqRetryCounter = 0; - zfCoreSetFrequencyComplete(dev); - } - } - //else if (rsp[1] & 0x4) - //{ - // zm_debug_msg1("Set Frequency fail 3 : ret = ", rsp[1]); - // hpPriv->coldResetNeedFreq = 0; - // hpPriv->recordFreqRetryCounter = 0; - // zfCoreSetFrequencyComplete(dev); - //} - else - { - //hpPriv->freqRetryCounter = 0; - zm_debug_msg2(" return complete, ret = ", rsp[1]); - - /* set bb_heavy_clip_enable */ - if (hpPriv->enableBBHeavyClip && hpPriv->hwBBHeavyClip && - hpPriv->doBBHeavyClip) - { - u32_t setValue = 0x200; - - setValue |= hpPriv->setValueHeavyClip; - - //zm_dbg(("Do heavy clip setValue = %d\n", setValue)); - - zfDelayWriteInternalReg(dev, 0x99e0+0x1bc000, setValue); - zfFlushDelayWrite(dev); - } - - hpPriv->coldResetNeedFreq = 0; - hpPriv->recordFreqRetryCounter = 0; - zfCoreSetFrequencyComplete(dev); - } - - #if 1 - // Read the Noise Floor value ! - nf = ((rsp[2]>>19) & 0x1ff); - if ((nf & 0x100) != 0x0) - { - noisefloor[0] = 0 - ((nf ^ 0x1ff) + 1); - } - else - { - noisefloor[0] = nf; - } - - //zm_debug_msg1("Noise Floor[1] = ", noisefloor[0]); - - nf = ((rsp[3]>>19) & 0x1ff); - if ((nf & 0x100) != 0x0) - { - noisefloor[1] = 0 - ((nf ^ 0x1ff) + 1); - } - else - { - noisefloor[1] = nf; - } - - //zm_debug_msg1("Noise Floor[2] = ", noisefloor[1]); - - nf = ((rsp[5]>>23) & 0x1ff); - if ((nf & 0x100) != 0x0) - { - noisefloor[2] = 0 - ((nf ^ 0x1ff) + 1); - } - else - { - noisefloor[2] = nf; - } - - //zm_debug_msg1("Noise Floor ext[1] = ", noisefloor[2]); - - nf = ((rsp[6]>>23) & 0x1ff); - if ((nf & 0x100) != 0x0) - { - noisefloor[3] = 0 - ((nf ^ 0x1ff) + 1); - } - else - { - noisefloor[3] = nf; - } - - //zm_debug_msg1("Noise Floor ext[2] = ", noisefloor[3]); - - //zm_debug_msg1("Is Site Survey = ", hpPriv->isSiteSurvey); - #endif - } - else if (src == ZM_CMD_SET_KEY) - { - zfCoreSetKeyComplete(dev); - } - else if (src == ZM_CWM_READ) - { - zm_msg2_mm(ZM_LV_0, "CWM rsp[1]=", rsp[1]); - zm_msg2_mm(ZM_LV_0, "CWM rsp[2]=", rsp[2]); - zfCoreCwmBusy(dev, zfCwmIsExtChanBusy(rsp[1], rsp[2])); - } - else if (src == ZM_MAC_READ) - { - /* rsp[1] = ZM_SEEPROM_MAC_ADDRESS_OFFSET; */ - /* rsp[2] = ZM_SEEPROM_MAC_ADDRESS_OFFSET+4; */ - /* rsp[3] = ZM_SEEPROM_REGDOMAIN_OFFSET; */ - /* rsp[4] = ZM_SEEPROM_VERISON_OFFSET; */ - /* rsp[5] = ZM_SEEPROM_HARDWARE_TYPE_OFFSET; */ - /* rsp[6] = ZM_SEEPROM_HW_HEAVY_CLIP; */ - - u8_t addr[6], CCS, WWR; - u16_t CountryDomainCode; - - /* BB heavy clip */ - //hpPriv->eepromHeavyClipFlag = (u8_t)((rsp[6]>>24) & 0xff); // force enable 8107 - //zm_msg2_mm(ZM_LV_0, "eepromHeavyClipFlag", hpPriv->eepromHeavyClipFlag); - #if 0 - if (hpPriv->hwBBHeavyClip) - { - zm_msg0_mm(ZM_LV_0, "enable BB Heavy Clip"); - } - else - { - zm_msg0_mm(ZM_LV_0, "Not enable BB Heavy Clip"); - } - #endif - zm_msg2_mm(ZM_LV_0, "MAC rsp[1]=", rsp[1]); - zm_msg2_mm(ZM_LV_0, "MAC rsp[2]=", rsp[2]); - - addr[0] = (u8_t)(rsp[1] & 0xff); - addr[1] = (u8_t)((rsp[1]>>8) & 0xff); - addr[2] = (u8_t)((rsp[1]>>16) & 0xff); - addr[3] = (u8_t)((rsp[1]>>24) & 0xff); - addr[4] = (u8_t)(rsp[2] & 0xff); - addr[5] = (u8_t)((rsp[2]>>8) & 0xff); -/*#ifdef ZM_FB50 - addr[0] = (u8_t)(0 & 0xff); - addr[1] = (u8_t)(3 & 0xff); - addr[2] = (u8_t)(127 & 0xff); - addr[3] = (u8_t)(0 & 0xff); - addr[4] = (u8_t)(9 & 0xff); - addr[5] = (u8_t)(11 & 0xff); -#endif*/ - - zfDelayWriteInternalReg(dev, ZM_MAC_REG_MAC_ADDR_L, - ((((u32_t)addr[3])<<24) | (((u32_t)addr[2])<<16) | (((u32_t)addr[1])<<8) | addr[0])); - zfDelayWriteInternalReg(dev, ZM_MAC_REG_MAC_ADDR_H, - ((((u32_t)addr[5])<<8) | addr[4])); - zfFlushDelayWrite(dev); - - wd->ledStruct.ledMode[0] = (u16_t)(rsp[5]&0xffff); - wd->ledStruct.ledMode[1] = (u16_t)(rsp[5]>>16); - zm_msg2_mm(ZM_LV_0, "ledMode[0]=", wd->ledStruct.ledMode[0]); - zm_msg2_mm(ZM_LV_0, "ledMode[1]=", wd->ledStruct.ledMode[1]); - - /* Regulatory Related Setting */ - zm_msg2_mm(ZM_LV_0, "RegDomain rsp=", rsp[3]); - zm_msg2_mm(ZM_LV_0, "OpFlags+EepMisc=", rsp[4]); - hpPriv->OpFlags = (u8_t)((rsp[4]>>16) & 0xff); - if ((rsp[2] >> 24) == 0x1) //Tx mask == 0x1 - { - zm_msg0_mm(ZM_LV_0, "OTUS 1x2"); - hpPriv->halCapability |= ZM_HP_CAP_11N_ONE_TX_STREAM; - } - else - { - zm_msg0_mm(ZM_LV_0, "OTUS 2x2"); - } - if (hpPriv->OpFlags & 0x1) - { - hpPriv->halCapability |= ZM_HP_CAP_5G; - } - if (hpPriv->OpFlags & 0x2) - { - hpPriv->halCapability |= ZM_HP_CAP_2G; - } - - - CCS = (u8_t)((rsp[3] & 0x8000) >> 15); - WWR = (u8_t)((rsp[3] & 0x4000) >> 14); - CountryDomainCode = (u16_t)(rsp[3] & 0x3FFF); - - if (rsp[3] != 0xffffffff) - { - if (CCS) - { - //zm_debug_msg0("CWY - Get Regulation Table from Country Code"); - zfHpGetRegulationTablefromCountry(dev, CountryDomainCode); - } - else - { - //zm_debug_msg0("CWY - Get Regulation Table from Reg Domain"); - zfHpGetRegulationTablefromRegionCode(dev, CountryDomainCode); - } - if (WWR) - { - //zm_debug_msg0("CWY - Enable 802.11d"); - /* below line shall be unmarked after A band is ready */ - //zfiWlanSetDot11DMode(dev, 1); - } - } - else - { - zfHpGetRegulationTablefromRegionCode(dev, NO_ENUMRD); - } - - zfCoreMacAddressNotify(dev, addr); - - } - else if (src == ZM_EEPROM_READ) - { -#if 0 - u8_t addr[6], CCS, WWR; - u16_t CountryDomainCode; -#endif - for (i=0; i<ZM_HAL_MAX_EEPROM_PRQ; i++) - { - if (hpPriv->eepromImageIndex < 1024) - { - hpPriv->eepromImage[hpPriv->eepromImageIndex++] = rsp[i+1]; - } - } - - if (hpPriv->eepromImageIndex == (ZM_HAL_MAX_EEPROM_REQ*ZM_HAL_MAX_EEPROM_PRQ)) - { - #if 0 - for (i=0; i<1024; i++) - { - zm_msg2_mm(ZM_LV_0, "index=", i); - zm_msg2_mm(ZM_LV_0, "eepromImage=", hpPriv->eepromImage[i]); - } - #endif - zm_msg2_mm(ZM_LV_0, "MAC [1]=", hpPriv->eepromImage[0x20c/4]); - zm_msg2_mm(ZM_LV_0, "MAC [2]=", hpPriv->eepromImage[0x210/4]); -#if 0 - addr[0] = (u8_t)(hpPriv->eepromImage[0x20c/4] & 0xff); - addr[1] = (u8_t)((hpPriv->eepromImage[0x20c/4]>>8) & 0xff); - addr[2] = (u8_t)((hpPriv->eepromImage[0x20c/4]>>16) & 0xff); - addr[3] = (u8_t)((hpPriv->eepromImage[0x20c/4]>>24) & 0xff); - addr[4] = (u8_t)(hpPriv->eepromImage[0x210/4] & 0xff); - addr[5] = (u8_t)((hpPriv->eepromImage[0x210/4]>>8) & 0xff); - - zfCoreMacAddressNotify(dev, addr); - - zfDelayWriteInternalReg(dev, ZM_MAC_REG_MAC_ADDR_L, - ((((u32_t)addr[3])<<24) | (((u32_t)addr[2])<<16) | (((u32_t)addr[1])<<8) | addr[0])); - zfDelayWriteInternalReg(dev, ZM_MAC_REG_MAC_ADDR_H, - ((((u32_t)addr[5])<<8) | addr[4])); - zfFlushDelayWrite(dev); - - /* Regulatory Related Setting */ - zm_msg2_mm(ZM_LV_0, "RegDomain =", hpPriv->eepromImage[0x208/4]); - CCS = (u8_t)((hpPriv->eepromImage[0x208/4] & 0x8000) >> 15); - WWR = (u8_t)((hpPriv->eepromImage[0x208/4] & 0x4000) >> 14); - /* below line shall be unmarked after A band is ready */ - //CountryDomainCode = (u16_t)(hpPriv->eepromImage[0x208/4] & 0x3FFF); - CountryDomainCode = 8; - if (CCS) - { - //zm_debug_msg0("CWY - Get Regulation Table from Country Code"); - zfHpGetRegulationTablefromCountry(dev, CountryDomainCode); - } - else - { - //zm_debug_msg0("CWY - Get Regulation Table from Reg Domain"); - zfHpGetRegulationTablefromRegionCode(dev, CountryDomainCode); - } - if (WWR) - { - //zm_debug_msg0("CWY - Enable 802.11d"); - /* below line shall be unmarked after A band is ready */ - //zfiWlanSetDot11DMode(dev, 1); - } -#endif - zfCoreHalInitComplete(dev); - } - else - { - hpPriv->eepromImageRdReq++; - zfHpLoadEEPROMFromFW(dev); - } - } - else if (src == ZM_EEPROM_WRITE) - { - zfwDbgWriteEepromDone(dev, cmd[1], cmd[2]); - } - else if (src == ZM_ANI_READ) - { - u32_t cycleTime, ctlClear; - - zm_msg2_mm(ZM_LV_0, "ANI rsp[1]=", rsp[1]); - zm_msg2_mm(ZM_LV_0, "ANI rsp[2]=", rsp[2]); - zm_msg2_mm(ZM_LV_0, "ANI rsp[3]=", rsp[3]); - zm_msg2_mm(ZM_LV_0, "ANI rsp[4]=", rsp[4]); - - hpPriv->ctlBusy += rsp[1]; - hpPriv->extBusy += rsp[2]; - - cycleTime = 100000; //100 miniseconds - - if (cycleTime > rsp[1]) - { - ctlClear = (cycleTime - rsp[1]) / 100; - } - else - { - ctlClear = 0; - } - if (wd->aniEnable) - zfHpAniArPoll(dev, ctlClear, rsp[3], rsp[4]); - } - else if (src == ZM_CMD_ECHO) - { - if ( ((struct zsHpPriv*)wd->hpPrivate)->halReInit ) - { - zfCoreHalInitComplete(dev); - ((struct zsHpPriv*)wd->hpPrivate)->halReInit = 0; - } - else - { - zfHpLoadEEPROMFromFW(dev); - } - } - else if (src == ZM_OID_FW_DL_INIT) - { - zfwDbgDownloadFwInitDone(dev); - } - return; -} - - -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfWriteRegInternalReg */ -/* Write on chip internal register immediately. */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* addr : register address */ -/* val : value */ -/* */ -/* OUTPUTS */ -/* 0 : success */ -/* other : fail */ -/* */ -/* AUTHOR */ -/* Stephen Chen ZyDAS Technology Corporation 2005.11 */ -/* */ -/************************************************************************/ -u32_t zfWriteRegInternalReg(zdev_t* dev, u32_t addr, u32_t val) -{ - u32_t cmd[3]; - u16_t ret; - - cmd[0] = 0x00000108; - cmd[1] = addr; - cmd[2] = val; - - ret = zfIssueCmd(dev, cmd, 12, ZM_OID_INTERNAL_WRITE, NULL); - return ret; -} - - -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfDelayWriteInternalReg */ -/* Write on chip internal register, write operation may be */ -/* postponed to form a multiple write command. */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* addr : register address */ -/* val : value */ -/* */ -/* OUTPUTS */ -/* 0 : command been postponed */ -/* 1 : commands been executed */ -/* */ -/* AUTHOR */ -/* Stephen Chen ZyDAS Technology Corporation 2005.11 */ -/* */ -/************************************************************************/ -u16_t zfDelayWriteInternalReg(zdev_t* dev, u32_t addr, u32_t val) -{ - u32_t cmd[(ZM_MAX_CMD_SIZE/4)]; - u16_t i; - u16_t ret; - struct zsHpPriv* hpPriv; - - zmw_get_wlan_dev(dev); - hpPriv=wd->hpPrivate; - - zmw_declare_for_critical_section(); - - /* enter critical section */ - zmw_enter_critical_section(dev); - - /* Store command to global buffer */ - hpPriv->cmd.delayWcmdAddr[hpPriv->cmd.delayWcmdCount] = addr; - hpPriv->cmd.delayWcmdVal[hpPriv->cmd.delayWcmdCount++] = val; - - /* If pending command reach size limit */ - if ((hpPriv->cmd.delayWcmdCount) >= ((ZM_MAX_CMD_SIZE - 4) >> 3)) - { - cmd[0] = 0x00000100 + (hpPriv->cmd.delayWcmdCount<<3); - - /* copy command to cmd buffer */ - for (i=0; i<hpPriv->cmd.delayWcmdCount; i++) - { - cmd[1+(i<<1)] = hpPriv->cmd.delayWcmdAddr[i]; - cmd[2+(i<<1)] = hpPriv->cmd.delayWcmdVal[i]; - } - /* reset pending command */ - hpPriv->cmd.delayWcmdCount = 0; - - /* leave critical section */ - zmw_leave_critical_section(dev); - - /* issue write command */ - ret = zfIssueCmd(dev, cmd, 4+(i<<3), ZM_OID_INTERNAL_WRITE, NULL); - - return 1; - } - else - { - /* leave critical section */ - zmw_leave_critical_section(dev); - - return 0; - } -} - - -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfFlushDelayWrite */ -/* Flush pending write command. */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* */ -/* OUTPUTS */ -/* 0 : no pending command */ -/* 1 : commands been executed */ -/* */ -/* AUTHOR */ -/* Stephen Chen ZyDAS Technology Corporation 2005.11 */ -/* */ -/************************************************************************/ -u16_t zfFlushDelayWrite(zdev_t* dev) -{ - u32_t cmd[(ZM_MAX_CMD_SIZE/4)]; - u16_t i; - u16_t ret; - struct zsHpPriv* hpPriv; - - zmw_get_wlan_dev(dev); - hpPriv=wd->hpPrivate; - - zmw_declare_for_critical_section(); - - /* enter critical section */ - zmw_enter_critical_section(dev); - - /* If there is pending command */ - if (hpPriv->cmd.delayWcmdCount > 0) - { - cmd[0] = 0x00000100 + (hpPriv->cmd.delayWcmdCount<<3); - - /* copy command to cmd buffer */ - for (i=0; i<hpPriv->cmd.delayWcmdCount; i++) - { - cmd[1+(i<<1)] = hpPriv->cmd.delayWcmdAddr[i]; - cmd[2+(i<<1)] = hpPriv->cmd.delayWcmdVal[i]; - } - /* reset pending command */ - hpPriv->cmd.delayWcmdCount = 0; - - /* leave critical section */ - zmw_leave_critical_section(dev); - - /* issue write command */ - ret = zfIssueCmd(dev, cmd, 4+(i<<3), ZM_OID_INTERNAL_WRITE, NULL); - - return 1; - } - else - { - /* leave critical section */ - zmw_leave_critical_section(dev); - - return 0; - } -} - - -u32_t zfiDbgDelayWriteReg(zdev_t* dev, u32_t addr, u32_t val) -{ - zfDelayWriteInternalReg(dev, addr, val); - return 0; -} - -u32_t zfiDbgFlushDelayWrite(zdev_t* dev) -{ - zfFlushDelayWrite(dev); - return 0; -} - -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfiDbgWriteReg */ -/* Write register. */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* addr : register address */ -/* val : value */ -/* */ -/* OUTPUTS */ -/* 0 : success */ -/* other : fail */ -/* */ -/* AUTHOR */ -/* Stephen Chen ZyDAS Technology Corporation 2005.10 */ -/* */ -/************************************************************************/ -u32_t zfiDbgWriteReg(zdev_t* dev, u32_t addr, u32_t val) -{ - u32_t cmd[3]; - u16_t ret; - - cmd[0] = 0x00000108; - cmd[1] = addr; - cmd[2] = val; - - ret = zfIssueCmd(dev, cmd, 12, ZM_OID_WRITE, 0); - return ret; -} -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfiDbgWriteFlash */ -/* Write flash. */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* addr : register address */ -/* val : value */ -/* */ -/* OUTPUTS */ -/* 0 : success */ -/* other : fail */ -/* */ -/* AUTHOR */ -/* Yjsung ZyDAS Technology Corporation 2007.02 */ -/* */ -/************************************************************************/ -u32_t zfiDbgWriteFlash(zdev_t* dev, u32_t addr, u32_t val) -{ - u32_t cmd[3]; - u16_t ret; - - //cmd[0] = 0x0000B008; - /* len[0] : type[0xB0] : seq[?] */ - cmd[0] = 8 | (ZM_CMD_WFLASH << 8); - cmd[1] = addr; - cmd[2] = val; - - ret = zfIssueCmd(dev, cmd, 12, ZM_OID_WRITE, 0); - return ret; -} - -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfiDbgWriteEeprom */ -/* Write EEPROM. */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* addr : register address */ -/* val : value */ -/* */ -/* OUTPUTS */ -/* 0 : success */ -/* other : fail */ -/* */ -/* AUTHOR */ -/* Paul ZyDAS Technology Corporation 2007.06 */ -/* */ -/************************************************************************/ -u32_t zfiDbgWriteEeprom(zdev_t* dev, u32_t addr, u32_t val) -{ - u32_t cmd[3]; - u16_t ret; - - //cmd[0] = 0x0000B008; - /* len[0] : type[0xB0] : seq[?] */ - cmd[0] = 8 | (ZM_CMD_WREEPROM << 8); - cmd[1] = addr; - cmd[2] = val; - - ret = zfIssueCmd(dev, cmd, 12, ZM_EEPROM_WRITE, 0); - return ret; -} - -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfiDbgBlockWriteEeprom */ -/* Block Write Eeprom. */ -/* */ -/* p.s: now,it will write 16 bytes register data per block (N=4) */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* addr : register address */ -/* buf : input data buffer pointer */ -/* */ -/* OUTPUTS */ -/* 0 : success */ -/* other : fail */ -/* */ -/* AUTHOR */ -/* Paul ZyDAS Technology Corporation 2007.06 */ -/* */ -/************************************************************************/ -//#define N buflen/4 -//#define SIZE (2*N+1) - -u32_t zfiDbgBlockWriteEeprom(zdev_t* dev, u32_t addr, u32_t* buf) -{ - u32_t cmd[9]; //2N+1 - u16_t ret,i; - - //cmd[0] = 0x0000B008; - /* len[0] : type[0xB0] : seq[?] */ - - //cmd[0] = (8*N) | (ZM_CMD_WFLASH << 8); - cmd[0] = 32 | (ZM_CMD_WREEPROM << 8); //8N - - for (i=0; i<4; i++) // i<N - { - cmd[(2*i)+1] = addr+(4*i); - cmd[(2*i)+2] = *(buf+i); - } - - ret = zfIssueCmd(dev, cmd, 36, ZM_EEPROM_WRITE, 0); //8N+4 - - // added for EEPROMUpdate, wait a moment for prevent cmd queue full! - //zfwSleep(dev, 1); - - return ret; -} - - -/* write EEPROM with wrlen : wrlen must be 4*n */ -/* command format : cmd_info(4) + addr(4) + eeprom(wrlen) */ -u32_t zfiDbgBlockWriteEeprom_v2(zdev_t* dev, u32_t addr, u32_t* buf, u32_t wrlen) -{ - u32_t cmd[16]; - u16_t ret,i; - - /* len[0] : type[0xB0] : seq[?] */ - /* len = addr(4) + eeprom_block(wrlen) */ - cmd[0] = (wrlen+4) | (ZM_CMD_MEM_WREEPROM << 8); - cmd[1] = addr; - - for (i=0; i<(wrlen/4); i++) // i<wrlen/4 - { - cmd[2+i] = *(buf+i); - } - /* cmd_info(4) + addr(4) + eeprom(wrlen) */ - ret = zfIssueCmd(dev, cmd, (u16_t)(wrlen+8), ZM_EEPROM_WRITE, 0); - - return ret; -} - -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfDbgOpenEeprom */ -/* Open EEPROM. */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* */ -/* OUTPUTS */ -/* */ -/* AUTHOR */ -/* Paul ZyDAS Technology Corporation 2007.06 */ -/* */ -/************************************************************************/ -void zfDbgOpenEeprom(zdev_t* dev) -{ - // unlock EEPROM - zfDelayWriteInternalReg(dev, 0x1D1400, 0x12345678); - zfDelayWriteInternalReg(dev, 0x1D1404, 0x55aa00ff); - zfDelayWriteInternalReg(dev, 0x1D1408, 0x13579ace); - zfDelayWriteInternalReg(dev, 0x1D1414, 0x0); - zfFlushDelayWrite(dev); -} - -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfDbgCloseEeprom */ -/* Close EEPROM. */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* */ -/* OUTPUTS */ -/* */ -/* AUTHOR */ -/* Paul ZyDAS Technology Corporation 2007.05 */ -/* */ -/************************************************************************/ -void zfDbgCloseEeprom(zdev_t* dev) -{ - // lock EEPROM - zfDelayWriteInternalReg(dev, 0x1D1400, 0x87654321); - //zfDelayWriteInternalReg(dev, 0x1D1404, 0xffffffff); - //zfDelayWriteInternalReg(dev, 0x1D1408, 0xffffffff); - //zfDelayWriteInternalReg(dev, 0x1D1414, 0x100); - zfFlushDelayWrite(dev); -} -#if 0 -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfiSeriallyWriteEeprom */ -/* Write EEPROM Serially. */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* addr : start address of writing EEPROM */ -/* buf : input data buffer */ -/* buflen : size of input data buffer */ -/* (length of data write into EEPROM) */ -/* */ -/* OUTPUTS */ -/* */ -/* */ -/* */ -/* AUTHOR */ -/* Paul ZyDAS Technology Corporation 2007.06 */ -/* */ -/************************************************************************/ -u32_t zfiSeriallyWriteEeprom(zdev_t* dev, u32_t addr, u32_t* buf, u32_t buflen) -{ - u32_t count; - u16_t i,ret,blocksize; - u8_t temp[2]; - - // per 4 bytes = 1 count - count = buflen/4; - - // Open EEPROM - zfDbgOpenEeprom(dev); - - // Write EEPROM - for (i=0; i<count; i++) - { - if (zfwWriteEeprom(dev, (addr+(4*i)), *(buf+i), 0) != 0) - { - // Update failed, Close EEPROM - zm_debug_msg0("zfwWriteEeprom failed \n"); - zfDbgCloseEeprom(dev); - return 1; - } - } - - // Close EEPROM - zfDbgCloseEeprom(dev); - return 0; -} -#endif -#if 0 -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfiSeriallyBlockWriteEeprom */ -/* Block Write EEPROM Serially. */ -/* (BlockWrite: per 16bytes write EEPROM once) */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* addr : register address */ -/* buf : input data buffer */ -/* buflen : access data size of buf */ -/* */ -/* OUTPUTS */ -/* 0 : success */ -/* other : fail */ -/* */ -/* AUTHOR */ -/* Paul ZyDAS Technology Corporation 2007.05 */ -/* */ -/************************************************************************/ -u32_t zfiSeriallyBlockWriteEeprom(zdev_t* dev, u32_t addr, u32_t* buf, u32_t buflen) -{ - u32_t count; - u16_t i,ret,blocksize; - u8_t temp[2]; - - // per 4 bytes = 1 count - count = buflen/4; - - // Open EEPROM - zfDbgOpenEeprom(dev); - - // Write EEPROM - // EEPROM Write start address from: 0x1000!? - // per 16bytes(N=4) block write EEPROM once - for (i=0; i<(count/4); i++) // count/N - { - //zfiDbgBlockWriteEeprom(dev, (addr+(4*N*i)), buf+(N*i)); - //zfiDbgBlockWriteEeprom(dev, (addr+(16*i)), buf+(4*i)); - if (zfwBlockWriteEeprom(dev, (addr+(16*i)), buf+(4*i), 0) != 0) - { - zm_debug_msg0("zfiDbgBlockWriteEeprom failed \n"); - // Close EEPROM - zfDbgCloseEeprom(dev); - return 1; - } - } - - // Close EEPROM - zfDbgCloseEeprom(dev); - return 0; -} -#endif -#if 0 -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfiDbgDumpEeprom */ -/* Dump EEPROM. */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* addr : start address of dumping EEPROM */ -/* datalen : length of access EEPROM data */ -/* buf : point of buffer, the buffer saved dump data */ -/* */ -/* OUTPUTS */ -/* 0 : success */ -/* other : fail */ -/* */ -/* AUTHOR */ -/* Paul ZyDAS Technology Corporation 2007.06 */ -/* */ -/************************************************************************/ -u32_t zfiDbgDumpEeprom(zdev_t* dev, u32_t addr, u32_t datalen, u32_t* buf) -{ - u32_t count; - u16_t i,ret; - - count = datalen/4; - - // over EEPROM length - if(datalen > 0x2000) - { - return 1; - } - - for(i=0; i<count; i++) - { - buf[i] = zfwReadEeprom(dev, addr+(4*i)); - } - - return 0; -} -#endif -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfiDbgReadReg */ -/* Read register. */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* addr : register address */ -/* */ -/* OUTPUTS */ -/* 0 : success */ -/* other : fail */ -/* */ -/* AUTHOR */ -/* Stephen Chen ZyDAS Technology Corporation 2005.10 */ -/* */ -/************************************************************************/ -u32_t zfiDbgReadReg(zdev_t* dev, u32_t addr) -{ - u32_t cmd[2]; - u16_t ret; - - cmd[0] = 0x00000004; - cmd[1] = addr; - - ret = zfIssueCmd(dev, cmd, 8, ZM_OID_READ, 0); - return ret; -} - - -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfiDbgReadTally */ -/* Read register. */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* */ -/* OUTPUTS */ -/* 0 : success */ -/* other : fail */ -/* */ -/* AUTHOR */ -/* Stephen Chen ZyDAS Technology Corporation 2005.10 */ -/* */ -/************************************************************************/ -u32_t zfiDbgReadTally(zdev_t* dev) -{ - u32_t cmd[1]; - u16_t ret; - zmw_get_wlan_dev(dev); - - if ( ((struct zsHpPriv*)wd->hpPrivate)->halReInit ) - { - return 1; - } - - /* len[0] : type[0x81] : seq[?] */ - cmd[0] = 0 | (ZM_CMD_TALLY << 8); - ret = zfIssueCmd(dev, cmd, 4, ZM_OID_TALLY, 0); - - /* len[0] : type[0x82] : seq[?] */ - cmd[0] = 0 | (ZM_CMD_TALLY_APD << 8); - ret = zfIssueCmd(dev, cmd, 4, ZM_OID_TALLY_APD, 0); - - return ret; -} - - -u32_t zfiDbgSetIFSynthesizer(zdev_t* dev, u32_t value) -{ - u32_t cmd[2]; - u16_t ret; - - /* len[4] : type[0x32] : seq[?] */ - cmd[0] = 0x4 | (ZM_OID_SYNTH << 8); - cmd[1] = value; - - ret = zfIssueCmd(dev, cmd, 8, ZM_OID_SYNTH, 0); - return ret; -} - -u32_t zfiDbgQueryHwTxBusy(zdev_t* dev) -{ - u32_t cmd[1]; - u16_t ret; - - /* len[4] : type[0xC0] : seq[?] */ - cmd[0] = 0 | (ZM_CMD_DKTX_STATUS << 8); - - ret = zfIssueCmd(dev, cmd, 4, ZM_OID_DKTX_STATUS, 0); - return ret; -} - -//Paul++ -#if 0 -u16_t zfHpBlockEraseFlash(zdev_t *dev, u32_t addr) -{ - u32_t cmd[(ZM_MAX_CMD_SIZE/4)]; - u16_t ret; - - cmd[0] = 0x00000004 | (ZM_CMD_FLASH_ERASE << 8); - cmd[1] = addr; - - ret = zfIssueCmd(dev, cmd, 8, ZM_OID_INTERNAL_WRITE, NULL); - return ret; -} -#endif - -#if 0 -u16_t zfiDbgProgramFlash(zdev_t *dev, u32_t offset, u32_t len, u32_t *data) -{ - u32_t cmd[(ZM_MAX_CMD_SIZE/4)]; - u16_t ret; - u16_t i; - - - cmd[0] = (ZM_CMD_FLASH_PROG << 8) | ((len+8) & 0xff); - cmd[1] = offset; - cmd[2] = len; - - for (i = 0; i < (len >> 2); i++) - { - cmd[3+i] = data[i]; - } - - ret = zfIssueCmd(dev, cmd, 12, ZM_OID_FLASH_PROGRAM, NULL); - - return ret; -} -#endif - -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfiDbgChipEraseFlash */ -/* Chip Erase Flash. */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* */ -/* OUTPUTS */ -/* 0 : success */ -/* other : fail */ -/* */ -/* AUTHOR */ -/* Paul Atheros Technology Corporation 2007.09 */ -/* */ -/************************************************************************/ -u16_t zfiDbgChipEraseFlash(zdev_t *dev) -{ - u32_t cmd[(ZM_MAX_CMD_SIZE/4)]; - u16_t ret; - - cmd[0] = 0x00000000 | (ZM_CMD_FLASH_ERASE << 8); - - ret = zfIssueCmd(dev, cmd, 4, ZM_OID_INTERNAL_WRITE, NULL); - return ret; -} -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfiDbgGetFlashCheckSum */ -/* Get FlashCheckSum. */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* addr : Start address of getchksum */ -/* len : total lenth of calculate getchksum */ -/* */ -/* OUTPUTS */ -/* 0 : success */ -/* other : fail */ -/* */ -/* AUTHOR */ -/* Paul Atheros Technology Corporation 2007.08 */ -/* */ -/************************************************************************/ -u32_t zfiDbgGetFlashCheckSum(zdev_t *dev, u32_t addr, u32_t len) -{ - u32_t cmd[(ZM_MAX_CMD_SIZE/4)]; - u32_t ret; - - cmd[0] = 0x00000008 | (ZM_CMD_FLASH_CHKSUM << 8); - cmd[1] = addr; - cmd[2] = len; - - ret = zfIssueCmd(dev, cmd, 12, ZM_OID_FLASH_CHKSUM, NULL); - - return ret; -} - -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfiDbgReadFlash */ -/* Read Flash. */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* addr : Start address of read flash */ -/* len : total lenth of read flash data */ -/* */ -/* OUTPUTS */ -/* 0 : success */ -/* other : fail */ -/* */ -/* AUTHOR */ -/* Paul Atheros Technology Corporation 2007.09 */ -/* */ -/************************************************************************/ -u32_t zfiDbgReadFlash(zdev_t *dev, u32_t addr, u32_t len) -{ - u32_t cmd[(ZM_MAX_CMD_SIZE/4)]; - u32_t ret; - - cmd[0] = len | (ZM_CMD_FLASH_READ << 8); - cmd[1] = addr; - - ret = zfIssueCmd(dev, cmd, 8, ZM_OID_FLASH_READ, NULL); - return ret; -} - -/************************************************************************/ -/* */ -/* FUNCTION DESCRIPTION zfiDownloadFwSet */ -/* Before Download FW, */ -/* Command FW to Software reset and close watch dog control. */ -/* */ -/* */ -/* INPUTS */ -/* dev : device pointer */ -/* */ -/* OUTPUTS */ -/* 0 : success */ -/* other : fail */ -/* */ -/* AUTHOR */ -/* Paul Atheros Technology Corporation 2007.09 */ -/* */ -/************************************************************************/ -u32_t zfiDownloadFwSet(zdev_t *dev) -{ -//softwarereset -//close watch dog - u32_t cmd[(ZM_MAX_CMD_SIZE/4)]; - u32_t ret; - - cmd[0] = 0x00000008 | (ZM_CMD_FW_DL_INIT << 8); - - ret = zfIssueCmd(dev, cmd, 12, ZM_OID_FW_DL_INIT, NULL); - - return ret; -} -//Paul-- |