亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? meep6000.c

?? Atheros AP Test with Agilent N4010A source code
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*
 * Copyright (c) 2002-2005 Atheros Communications, Inc.
 * All rights reserved.
 *
 */

#ident  "ACI $Id: //depot/sw/branches/ART_V53_dragon/sw/src/dk/mdk/devlib/ar6000/mEep6000.c#5 $, $Header: //depot/sw/branches/ART_V53_dragon/sw/src/dk/mdk/devlib/ar6000/mEep6000.c#5 $"

#ifdef VXWORKS
#include "vxworks.h"
#endif

#ifdef __ATH_DJGPPDOS__
#define __int64 long long
typedef unsigned long DWORD;
#define Sleep   delay
#endif  // #ifdef __ATH_DJGPPDOS__


#include <errno.h>
#include <stdio.h>
#include <string.h>
#ifndef VXWORKS
#include <malloc.h>
#include <assert.h>
#endif
#include "wlantype.h"

#include "mCfg6000.h"
#include "mEep6000.h"

#include "ar6000reg.h"
#include "mConfig.h"

//#include "ar5211reg.h"

#include "mEepStruct6000.h"

MANLIB_API A_UINT8 dummyEepromWriteArea[512];

static A_UINT16
fbin2freq(A_UINT8 fbin, A_BOOL is2GHz);

static A_INT16
interpolate(A_UINT16 target, A_UINT16 srcLeft, A_UINT16 srcRight,
            A_INT16 targetLeft, A_INT16 targetRight);

static A_BOOL
getLowerUpperIndex(A_UINT8 target, A_UINT8 *pList, A_UINT16 listSize,
                   A_UINT16 *indexL, A_UINT16 *indexR);

/* Configuring the Transmit Power Per Rate Baseband Table */
static void
ar6000SetPowerPerRateTable(A_UINT32 devNum, A_UINT32 freq, A_UINT16 *ratesArray,
                           A_UINT16 cfgCtl, A_UINT16 AntennaReduction, A_UINT16 powerLimit);

static A_UINT16
ar6000GetMaxEdgePower(A_UINT32 freq, CAL_CTL_EDGES *pRdEdgesPower, A_BOOL is2GHz);

static void
ar6000GetTargetPowers(A_UINT32 freq, CAL_TARGET_POWER *powInfo,
                      A_UINT16 numChannels, CAL_TARGET_POWER *pNewPower, A_BOOL is2GHz);

/* Interpolating to get the txPower calibration data based on EEPROM values */
static void
ar6000SetPowerCalTable(A_UINT32 devNum, A_UINT32 freq, A_INT16 *pTxPowerIndexOffset);

static void
ar6000GetGainBoundariesAndPdadcs(A_UINT32 devNum, A_UINT32 freq, CAL_DATA_PER_FREQ * pRawDataSet, 
                                 A_UINT8 * bChans,  A_UINT16 availPiers,
                                 A_UINT16 tPdGainOverlap, A_INT16 *pMinCalPower, A_UINT16 * pPdGainBoundaries,
                                 A_UINT8 * pPDADCValues, A_UINT16 * xpdGainValues, A_UINT16 numXpdGains);

static A_BOOL
ar6000FillVpdTable(A_UINT8 pMin, A_UINT8 pMax, A_UINT8 *pwrList,
                   A_UINT8 *vpdList, A_UINT16 numIntercepts, A_UINT8 *pRetVpdList);

static void readEepromOldStyle (
 A_UINT32 devNum
);

static void readEepromLocs (
 A_UINT32 devNum
);

/**************************************************************
 * ar6000EepromAttach
 *
 * Attach either the provided data stream or EEPROM to the EEPROM data structure
 */
A_BOOL
ar6000EepromAttach(A_UINT32 devNum)
{
    LIB_DEV_INFO *pLibDev = gLibInfo.pLibDevArray[devNum];
    A_UINT16 sum = 0;
    A_UINT16 *pHalf;
    A_UINT32 i;

    //readEepromOldStyle(devNum);    
    readEepromLocs(devNum);    
    pLibDev->ar6kEep = (AR6K_EEPROM *)dummyEepromWriteArea;

    pHalf = (A_UINT16 *)pLibDev->ar6kEep;

    for (i = 0; i < sizeof(AR6K_EEPROM)/2; i++) {
        sum ^= *pHalf++;
    }

    /* Check CRC - Attach should fail on a bad checksum */
    if (sum != 0xffff) {
        //mError(devNum, EIO, "%s: bad EEPROM checksum 0x%x\n", __func__, sum);
		mError(devNum, EIO, "bad EEPROM checksum 0x%x\n", sum);
        return FALSE;
    }

    /* Setup some values checked by common code */
    pLibDev->eepData.version = pLibDev->ar6kEep->baseEepHeader.version;
    pLibDev->eepData.protect = 0;
    pLibDev->eepData.turboDisabled = TRUE;
    pLibDev->eepData.currentRD = pLibDev->ar6kEep->baseEepHeader.regDmn;
    /* Do we need to fill in the tpcMap? */

    return TRUE;
}

static A_UINT32 newEepromArea[512];

void readEepromOldStyle (
 A_UINT32 devNum
)
{
    A_UINT32 jj;
    A_UINT16 *tempPtr = (A_UINT16 *)dummyEepromWriteArea;

    eepromReadBlock(devNum, 0, 256, newEepromArea);
        
    for(jj=0; jj < 256; jj++) {
        *(tempPtr+jj) = *(newEepromArea + jj);  
    }
}

void readEepromLocs (
 A_UINT32 devNum
)
{
    LIB_DEV_INFO *pLibDev = gLibInfo.pLibDevArray[devNum];
    A_UINT32 jj;
    A_UINT8 *tempPtr = (A_UINT8 *)dummyEepromWriteArea;

    //eepromReadBlock(devNum, 0, 256, newEepromArea);
    if (pLibDev->devMap.remoteLib && (pLibDev->devMap.r_eepromReadLocs != NULL)) {
	   pLibDev->devMap.r_eepromReadLocs(devNum, 0, 256, tempPtr);
	}
        
/*
    for(jj=0; jj < 256; jj++) {
        *(tempPtr+jj) = *(newEepromArea + jj);  
    }
*/
}

/**************************************************************
 * ar6000EepromSetBoardValues
 *
 * Read EEPROM header info and program the device for correct operation
 * given the channel value.
 */
void
ar6000EepromSetBoardValues(A_UINT32 devNum, A_UINT32 freq)
{
    LIB_DEV_INFO  *pLibDev = gLibInfo.pLibDevArray[devNum];
    int is2GHz = ((pLibDev->mode == MODE_11G) || (pLibDev->mode == MODE_11B));
    MODAL_EEP_HEADER *pModal;
    A_UINT16 antWrites[11];

    assert(((pLibDev->eepData.version >> 12) & 0xF) == AR6000_EEP_VER);
    pModal = &(pLibDev->ar6kEep->modalHeader[is2GHz]);

    /* Set the antenna register(s) correctly for the chip revision */
    antWrites[0] = pModal->antCtrl0;
    antWrites[1] = pModal->antCtrl[0] & 0x3F;
    antWrites[2] = (pModal->antCtrl[0] >> 6) & 0x3F;
    antWrites[3] = (pModal->antCtrl[0] >> 12) & 0x3F;
    antWrites[4] = (pModal->antCtrl[0] >> 18) & 0x3F;
    antWrites[5] = (pModal->antCtrl[0] >> 24) & 0x3F;
    antWrites[6] = pModal->antCtrl[1] & 0x3F;
    antWrites[7] = (pModal->antCtrl[1] >> 6) & 0x3F;
    antWrites[8] = (pModal->antCtrl[1] >> 12) & 0x3F;
    antWrites[9] = (pModal->antCtrl[1] >> 18) & 0x3F;
    antWrites[10] = (pModal->antCtrl[1] >> 24) & 0x3F;
    forceAntennaTbl5211(devNum, antWrites);

    writeField(devNum, "bb_switch_settling", pModal->switchSettling);
    writeField(devNum, "bb_adc_desired_size", pModal->adcDesiredSize);
    writeField(devNum, "bb_pga_desired_size", pModal->pgaDesiredSize);
    writeField(devNum, "bb_txrxatten", pModal->txRxAtten);
    writeField(devNum, "bb_rxtx_margin_2ghz", pModal->rxTxMargin);

    writeField(devNum, "bb_tx_end_to_xpaa_off", pModal->txEndToXpaOff);
    writeField(devNum, "bb_tx_end_to_xpab_off", pModal->txEndToXpaOff);
    writeField(devNum, "bb_tx_frame_to_xpaa_on", pModal->txFrameToXpaOn);
    writeField(devNum, "bb_tx_frame_to_xpab_on", pModal->txFrameToXpaOn);

    writeField(devNum, "bb_tx_end_to_xlna_on",pModal->txEndToXlnaOn);
    writeField(devNum, "bb_thresh62", pModal->thresh62);

    /* write previous IQ results */
    writeField(devNum, "bb_iqcorr_q_i_coff", pModal->iqCalI);
    writeField(devNum, "bb_iqcorr_q_q_coff", pModal->iqCalQ);
    // writeField(devNum, "bb_do_iqcal", 1);

    pLibDev->eepromHeaderApplied[pLibDev->mode] = TRUE;
    return;
}

/**************************************************************
 * ar6000EepromSetTransmitPower
 *
 * Set the transmit power in the baseband for the given
 * operating channel and mode.
 */
void
ar6000EepromSetTransmitPower(A_UINT32 devNum, A_UINT32 freq, A_UINT16 *pRates)
{
#define POW_SM(_r, _s)     (((_r) & 0x3f) << (_s))
#define N(a)            (sizeof (a) / sizeof (a[0]))
    LIB_DEV_INFO  *pLibDev = gLibInfo.pLibDevArray[devNum];
    A_UINT16 ratesArray[NUM_RATES];
    A_UINT16 powerLimit = AR6000_MAX_RATE_POWER;
    A_INT16  txPowerIndexOffset = 0;
    A_UINT16 cfgCtl;
    A_UINT16 twiceAntennaReduction = (cfgCtl = 0x10) ? 6 : 0;
    int i;

    memset(ratesArray, 0, sizeof(ratesArray));

    if (pRates) {
        memcpy(ratesArray, pRates, sizeof(A_UINT16) * NUM_RATES);
    }

    if(pLibDev->eePromLoad) {
        assert(((pLibDev->eepData.version >> 12) & 0xF) == AR6000_EEP_VER);
        cfgCtl = pLibDev->ar6kEep->baseEepHeader.regDmn & 0xFF;
        switch (pLibDev->mode) {
        case MODE_11A:
            cfgCtl |= CTL_11A;
            break;
        case MODE_11G:
        case MODE_11O:
            cfgCtl |= CTL_11G;
            break;
        case MODE_11B:
            cfgCtl |= CTL_11B;
            break;
        default:
            assert(0);
        } 

        if (!pRates) {
            ar6000SetPowerPerRateTable(devNum, freq, ratesArray, cfgCtl, twiceAntennaReduction, powerLimit);
        }
        ar6000SetPowerCalTable(devNum, freq, &txPowerIndexOffset);
    }

    /*
     * txPowerIndexOffset is set by the SetPowerTable() call -
     *  adjust the rate table (0 offset if rates EEPROM not loaded)
     */
    for (i = 0; i < N(ratesArray); i++) {
        ratesArray[i] += txPowerIndexOffset;
        if (ratesArray[i] > AR6000_MAX_RATE_POWER)
            ratesArray[i] = AR6000_MAX_RATE_POWER;
    }
    pLibDev->pwrIndexOffset = txPowerIndexOffset;

    /* Write the OFDM power per rate set */
    REGW(devNum, 0x9934,
        POW_SM(ratesArray[3], 24)
          | POW_SM(ratesArray[2], 16)
          | POW_SM(ratesArray[1],  8)
          | POW_SM(ratesArray[0],  0)
    );
    REGW(devNum, 0x9938,
        POW_SM(ratesArray[7], 24)
          | POW_SM(ratesArray[6], 16)
          | POW_SM(ratesArray[5],  8)
          | POW_SM(ratesArray[4],  0)
    );

    /* Write the CCK power per rate set */
    REGW(devNum, 0xa234,
        POW_SM(ratesArray[10], 24)
          | POW_SM(ratesArray[9],  16)
          | POW_SM(ratesArray[15],  8) /* XR target power */
          | POW_SM(ratesArray[8],   0)
    );
    REGW(devNum, 0xa238,
        POW_SM(ratesArray[14], 24)
          | POW_SM(ratesArray[13], 16)
          | POW_SM(ratesArray[12],  8)
          | POW_SM(ratesArray[11],  0)
    );

    /*
     * Set max power to 31.5 dBm and, optionally,
     * enable TPC in tx descriptors.
     */
    REGW(devNum, 0x993c, AR6000_MAX_RATE_POWER);

    return;
#undef N
#undef POW_SM
}

/**************************************************************

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
www国产精品av| 亚洲大片精品永久免费| 亚洲欧美电影院| 日韩国产在线一| 成人av综合在线| 欧美va日韩va| 亚洲v精品v日韩v欧美v专区| 国产91精品入口| 日韩精品中文字幕一区| 亚洲最新视频在线播放| 国产精品亚洲一区二区三区妖精| 欧美性猛交一区二区三区精品| 久久精品夜色噜噜亚洲a∨| 日韩精品视频网| 日本道色综合久久| 国产精品第四页| 国产盗摄精品一区二区三区在线| 日韩欧美一区在线| 亚洲成a人v欧美综合天堂下载| 成人免费va视频| 国产欧美一区二区三区网站| 美腿丝袜亚洲一区| 欧美一区二区精品在线| 亚洲123区在线观看| 欧日韩精品视频| 亚洲精品乱码久久久久久久久| eeuss鲁片一区二区三区在线观看| 国产性天天综合网| 国产综合色在线视频区| 精品国产免费久久| 韩国成人精品a∨在线观看| 精品美女一区二区| 韩国成人福利片在线播放| 久久嫩草精品久久久精品| 国产一区三区三区| 国产午夜精品一区二区三区四区| 国产一区二区三区四区五区美女| 国产亚洲欧美色| 成人免费观看视频| 一区二区三区四区不卡在线| 欧美在线免费播放| 青青草原综合久久大伊人精品优势| 777奇米四色成人影色区| 美国三级日本三级久久99| 精品福利二区三区| 国产69精品久久99不卡| 国产精品盗摄一区二区三区| 在线视频中文字幕一区二区| 日韩黄色一级片| 欧美精品一区二区三| 不卡一卡二卡三乱码免费网站| 亚洲欧洲日韩女同| 欧美图区在线视频| 精品在线你懂的| 自拍偷拍亚洲激情| 欧美精品一卡两卡| 国产不卡免费视频| 亚洲香肠在线观看| 亚洲精品一线二线三线无人区| 懂色av一区二区在线播放| 亚洲精品国产视频| 日韩视频123| 成人h精品动漫一区二区三区| 亚洲国产欧美在线| 欧美经典一区二区| 欧美性受极品xxxx喷水| 极品尤物av久久免费看| 亚洲日本一区二区三区| 日韩免费高清av| 色婷婷激情久久| 久久国内精品自在自线400部| 国产精品久久久久精k8| 欧美一区二区精品在线| 97se亚洲国产综合自在线观| 免费精品视频在线| 亚洲视频免费看| 欧美第一区第二区| 一本久久a久久精品亚洲| 国产一区欧美二区| 日韩专区欧美专区| 亚洲欧美激情在线| 国产日产欧美一区二区视频| 欧美日本一区二区| 91在线观看成人| 国产福利91精品一区| 日韩av午夜在线观看| 一区二区三区高清| 国产区在线观看成人精品| 日韩免费福利电影在线观看| 欧美日韩一卡二卡三卡| 91影院在线观看| 国产精品1区二区.| 韩国成人福利片在线播放| 三级一区在线视频先锋| 一区2区3区在线看| 亚洲色图一区二区三区| 国产午夜精品美女毛片视频| 日韩三级.com| 日韩一区二区影院| 91精品久久久久久蜜臀| 欧美性受xxxx黑人xyx| 91久久精品一区二区三区| 91麻豆.com| 99久精品国产| 色哟哟欧美精品| 91丝袜呻吟高潮美腿白嫩在线观看| 国产成人自拍在线| 成人影视亚洲图片在线| 国产激情视频一区二区在线观看| 捆绑变态av一区二区三区| 日本va欧美va精品发布| 免费成人你懂的| 毛片av中文字幕一区二区| 日本欧美在线观看| 香蕉久久一区二区不卡无毒影院| 亚洲综合成人网| 香蕉影视欧美成人| 美国毛片一区二区三区| 久久狠狠亚洲综合| 国产二区国产一区在线观看 | 精品国产sm最大网站免费看| 91麻豆精品国产无毒不卡在线观看 | 一区二区三区在线观看国产| 精品国产成人在线影院| 日韩欧美中文字幕公布| 91啪九色porn原创视频在线观看| 中文字幕一区二区在线播放| 91精品国产综合久久久久| 欧美顶级少妇做爰| 国产电影精品久久禁18| 亚洲综合一区在线| 免费在线看一区| 久久精品国产成人一区二区三区 | 成人禁用看黄a在线| 国产成人精品三级| 不卡视频一二三| 99精品国产99久久久久久白柏| 色综合天天综合网天天看片| 欧美少妇性性性| 日韩女优毛片在线| 日韩一区有码在线| 石原莉奈在线亚洲二区| 国产激情一区二区三区| 色综合天天做天天爱| 91精品国产入口| 亚洲免费大片在线观看| 日本va欧美va精品| 成人免费看片app下载| 欧美在线999| 2020国产精品| 亚洲一区二区三区爽爽爽爽爽| 老司机免费视频一区二区三区| www.激情成人| 精品国产一区久久| 亚洲猫色日本管| 国产一区在线观看视频| 欧美三级视频在线| 国产三级一区二区| 日日摸夜夜添夜夜添精品视频 | 欧美日本一道本在线视频| 精品国产一区二区三区久久久蜜月| 国产精品久久久久久久久久免费看| 天天综合网 天天综合色| 国产成人综合网站| 日韩女优av电影| 亚洲国产精品影院| 99视频精品全部免费在线| 日韩精品一区二区三区视频播放| 亚洲精品视频在线观看网站| 久久99九九99精品| 欧美日韩情趣电影| 亚洲视频每日更新| 国产一区二区三区av电影| 欧美日韩国产三级| 一区二区三区四区激情| 99久久精品费精品国产一区二区| 日韩精品一区二区三区swag | 中文字幕在线免费不卡| 老司机免费视频一区二区| 欧美性感一类影片在线播放| 亚洲欧美在线aaa| 狠狠色丁香九九婷婷综合五月| 欧美日韩国产天堂| 亚洲成av人片www| 欧美制服丝袜第一页| 亚洲精品日产精品乱码不卡| 成人av先锋影音| 亚洲欧洲在线观看av| 国产成人免费视频| 久久久久久影视| 国产麻豆日韩欧美久久| 欧美不卡一区二区| 狠狠色综合色综合网络| 欧美mv和日韩mv的网站| 麻豆一区二区在线| 欧美一区二区三区系列电影| 亚洲第一久久影院| 欧美日韩不卡在线| 婷婷综合另类小说色区| 4438x亚洲最大成人网|