⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eeprom.c

📁 Atheros wifi driver source code
💻 C
📖 第 1 页 / 共 2 页
字号:
                fprintf(fd ,"               |              |              |              |\n");            fprintf(fd ,"               ");        for (i = 0; i < 3; i++) {            fprintf(fd ,"| pcdac min %02d ", pDataPerChannel[i].pcdacMin);        }        fprintf(fd ,"|\n");        fprintf(fd ,"               ");        for (i = 0; i < 3; i++) {            fprintf(fd ,"| pcdac max %02d ", pDataPerChannel[i].pcdacMax);        }        fprintf(fd ,"|\n");        fprintf(fd ,"               |==============|==============|==============|\n");    }}static voidprintExpnPower5112(FILE *fd, const HAL_EEPROM *ee, const EEPROM_POWER_EXPN_5112 *pExpnPower, u_int mode){    u_int16_t        i, j=0, kk;    u_int16_t        singleXpd = 0xDEAD;    const char       *modeString[3] = {"11a", "11b", "11g"};    const char	     *rule;    if (pExpnPower->xpdMask != 0x9) {        for (j = 0; j < NUM_XPD_PER_CHANNEL; j++) {            if (pExpnPower->xpdMask == (1 << j)) {                singleXpd = j;                break;            }        }    }     if (pExpnPower->xpdMask == 0x9) {        fprintf(fd ,"======================5112 Power Calibration Information========================\n");        fprintf(fd ,"| XPD_Gain_mask = 0x%02x              | Number of channels for mode %s: %2d      |\n",            pExpnPower->xpdMask, modeString[mode], pExpnPower->numChannels);        rule = "|======|========|========|========|========|========|========|========|========|";    } else {        fprintf(fd ,"=========5112 Power Calibration Information==========\n");	fprintf(fd ,"| XPD_Gain_mask     0x%02x | Number of channels    %2d |\n",            pExpnPower->xpdMask, pExpnPower->numChannels);	fprintf(fd ,"| XPD_GAIN            %2d |                          |\n", j);	rule = "|======|========|========|========|========|========|";    }    /* print the frequency values */    fprintf(fd ,"%s\n", rule);    fprintf(fd ,"| freq |  pwr1  |  pwr2  |  pwr3  |  pwr4  |");    if (pExpnPower->xpdMask == 0x9) {        fprintf(fd ," pwr1_x3| pwr2_x3| pwr3_x3| maxPow |\n");        fprintf(fd ,"|      | [pcd]  | [pcd]  | [pcd]  | [pcd]  | [pcd]  | [pcd]  | [pcd]  |        |\n");    } else {        fprintf(fd ," maxPow |\n");        fprintf(fd ,"|      | [pcd]  | [pcd]  | [pcd]  | [pcd]  |        |\n");    }    for (i = 0; i < pExpnPower->numChannels; i++) {        fprintf(fd ,"%s\n", rule);        fprintf(fd ,"| %4d |", pExpnPower->pChannels[i]);        if (pExpnPower->xpdMask != 0x9) {            j = singleXpd;        } else {            j = 0;        }        for (kk=0; kk < pExpnPower->pDataPerChannel[i].pDataPerXPD[j].numPcdacs; kk++) {            fprintf(fd ," %2d.%02d  |", (pExpnPower->pDataPerChannel[i].pDataPerXPD[j].pwr_t4[kk] / 4),                (pExpnPower->pDataPerChannel[i].pDataPerXPD[j].pwr_t4[kk] % 4) * 25);        }        if (pExpnPower->xpdMask == 0x9) {            for (kk=0; kk < pExpnPower->pDataPerChannel[i].pDataPerXPD[3].numPcdacs; kk++) {                fprintf(fd ," %2d.%02d  |", pExpnPower->pDataPerChannel[i].pDataPerXPD[3].pwr_t4[kk] / 4,                    (pExpnPower->pDataPerChannel[i].pDataPerXPD[3].pwr_t4[kk] % 4) * 25);            }        }        fprintf(fd ," %2d.%02d  |\n", pExpnPower->pDataPerChannel[i].maxPower_t4 / 4,            (pExpnPower->pDataPerChannel[i].maxPower_t4 % 4) * 25);        fprintf(fd ,"|      |");                for (kk=0; kk<pExpnPower->pDataPerChannel[i].pDataPerXPD[j].numPcdacs; kk++) {            fprintf(fd ,"  [%2d]  |", pExpnPower->pDataPerChannel[i].pDataPerXPD[j].pcdac[kk]);        }        if (pExpnPower->xpdMask == 0x9) {            for (kk=0; kk<pExpnPower->pDataPerChannel[i].pDataPerXPD[3].numPcdacs; kk++) {                fprintf(fd ,"  [%2d]  |", pExpnPower->pDataPerChannel[i].pDataPerXPD[3].pcdac[kk]);            }        }        fprintf(fd ,"        |\n");         }    fprintf(fd ,"%s\n", rule);}static voidprintTargetPowerInfo(FILE *fd, const HAL_EEPROM *ee, u_int mode){    u_int16_t i, k;    const TRGT_POWER_INFO  *pPowerInfo;    fprintf(fd ,"\n");    if (mode == headerInfo11A) {        pPowerInfo = ee->ee_trgtPwr_11a;        fprintf(fd ,"============================Target Power Info===============================\n");            for (k = 0; k < 8; k+=4) {            fprintf(fd ,"|     rate     ");            for (i = k; i < k + 4; i++) {                fprintf(fd ,"|     %04d     ", pPowerInfo[i].testChannel);            }            fprintf(fd ,"|\n");                        fprintf(fd ,"|==============|==============|==============|==============|==============|\n");            fprintf(fd ,"|     6-24     ");            for (i = k; i < k + 4; i++) {                fprintf(fd ,"|     %2d.%d     ", pPowerInfo[i].twicePwr6_24 / 2,                    (pPowerInfo[i].twicePwr6_24 % 2) * 5);            }            fprintf(fd ,"|\n");            fprintf(fd ,"|      36      ");            for (i = k; i < k + 4; i++) {                fprintf(fd ,"|     %2d.%d     ", pPowerInfo[i].twicePwr36 / 2,                    (pPowerInfo[i].twicePwr36 % 2) * 5);            }            fprintf(fd ,"|\n");            fprintf(fd ,"|      48      ");            for (i = k; i < k + 4; i++) {                fprintf(fd ,"|     %2d.%d     ", pPowerInfo[i].twicePwr48 / 2,                    (pPowerInfo[i].twicePwr48 % 2) * 5);            }            fprintf(fd ,"|\n");            fprintf(fd ,"|      54      ");            for (i = k; i < k + 4; i++) {                fprintf(fd ,"|     %2d.%d     ", pPowerInfo[i].twicePwr54 / 2,                    (pPowerInfo[i].twicePwr54 % 2) * 5);            }            fprintf(fd ,"|\n");            fprintf(fd ,"|==============|==============|==============|==============|==============|\n");        }    } else {        if (mode == headerInfo11B) {            pPowerInfo = ee->ee_trgtPwr_11b;        } else {            pPowerInfo = ee->ee_trgtPwr_11g;        }        fprintf(fd ,"=============Target Power Info================\n");        fprintf(fd ,"|     rate     ");        for (i = 0; i < 2; i++) {            fprintf(fd ,"|     %04d     ",                pPowerInfo[i].testChannel);        }        fprintf(fd ,"|\n");                fprintf(fd ,"|==============|==============|==============|\n");        if (mode == headerInfo11B) {            fprintf(fd ,"|      1       ");        } else {            fprintf(fd ,"|     6-24     ");        }        for (i = 0; i < 2; i++) {            fprintf(fd ,"|     %2d.%d     ", pPowerInfo[i].twicePwr6_24 / 2,                (pPowerInfo[i].twicePwr6_24 % 2) * 5);        }        fprintf(fd ,"|\n");        if (mode == headerInfo11B) {            fprintf(fd ,"|      2       ");        } else {            fprintf(fd ,"|      36      ");        }        for (i = 0; i < 2; i++) {            fprintf(fd ,"|     %2d.%d     ", pPowerInfo[i].twicePwr36 / 2,                (pPowerInfo[i].twicePwr36 % 2) * 5);        }        fprintf(fd ,"|\n");        if (mode == headerInfo11B) {            fprintf(fd ,"|      5.5     ");        } else {            fprintf(fd ,"|      48      ");        }        for (i = 0; i < 2; i++) {            fprintf(fd ,"|     %2d.%d     ", pPowerInfo[i].twicePwr48 / 2,                (pPowerInfo[i].twicePwr48 % 2) * 5);        }        fprintf(fd ,"|\n");        if (mode == headerInfo11B) {            fprintf(fd ,"|      11      ");        } else {            fprintf(fd ,"|      54      ");        }        for (i = 0; i < 2; i++) {            fprintf(fd ,"|     %2d.%d     ", pPowerInfo[i].twicePwr54 / 2,                (pPowerInfo[i].twicePwr54 % 2) * 5);        }        fprintf(fd ,"|\n");        fprintf(fd ,"|==============|==============|==============|\n");    }}static voidprintRDEdges(FILE *fd, const HAL_EEPROM *ee,	    const RD_EDGES_POWER *pRdEdgePwrInfo, const u_int16_t *pTestGroups,            u_int mode, const u_int16_t maxNumCtl){    u_int16_t version = ee->ee_version;    u_int16_t    i=0, j;    u_int16_t    ctlMode = 0;    const static char *ctlType[4] = {        "11a base mode ] ",        "11b mode ]      ",        "11g mode ]      ",        "11a TURBO mode ]"    };    fprintf(fd ,"\n");    fprintf(fd ,"=======================Test Group Band Edge Power========================\n");    while ((pTestGroups[i] != 0) && (i < maxNumCtl)) {        switch(pTestGroups[i] & 0x3) {        case 0:         case 3:            ctlMode = headerInfo11A;            break;        case 1:             ctlMode = headerInfo11B;            break;        case 2:             ctlMode = headerInfo11G;            break;        }        if (mode != ctlMode) {            i++;            pRdEdgePwrInfo += NUM_EDGES;            continue;        }        fprintf(fd ,"|                                                                       |\n");        fprintf(fd ,"| CTL: 0x%02x   [ 0x%x %s", pTestGroups[i] & 0xff, pTestGroups[i], ctlType[pTestGroups[i] & 0x3]);                fprintf(fd ,"                                   |\n");        fprintf(fd ,"|=======|=======|=======|=======|=======|=======|=======|=======|=======|\n");        fprintf(fd ,"| edge  ");        for (j = 0; j < NUM_EDGES; j++) {            if (pRdEdgePwrInfo[j].rdEdge == 0) {                fprintf(fd ,"|  --   ");            } else {                fprintf(fd ,"| %04d  ", pRdEdgePwrInfo[j].rdEdge);            }        }        fprintf(fd ,"|\n");        fprintf(fd ,"|=======|=======|=======|=======|=======|=======|=======|=======|=======|\n");        fprintf(fd ,"| power ");        for (j = 0; j < NUM_EDGES; j++) {            if (pRdEdgePwrInfo[j].rdEdge == 0) {                fprintf(fd ,"|  --   ");            } else {                fprintf(fd ,"| %2d.%d  ", pRdEdgePwrInfo[j].twice_rdEdgePower / 2,                    (pRdEdgePwrInfo[j].twice_rdEdgePower % 2) * 5);            }        }        fprintf(fd ,"|\n");        if (version >= AR_EEPROM_VER3_3) {            fprintf(fd ,"|=======|=======|=======|=======|=======|=======|=======|=======|=======|\n");            fprintf(fd ,"| flag  ");            for (j = 0; j < NUM_EDGES; j++) {                if (pRdEdgePwrInfo[j].rdEdge == 0) {                    fprintf(fd ,"|  --   ");                } else {                    fprintf(fd ,"|   %1d   ", pRdEdgePwrInfo[j].flag);                }            }            fprintf(fd ,"|\n");        }        fprintf(fd ,"=========================================================================\n");        i++;        pRdEdgePwrInfo += NUM_EDGES;    }}static voidprintChannelInfo2413(FILE *fd, const HAL_EEPROM *ee, const RAW_DATA_STRUCT_2413 *pRaw){    u_int16_t            i, j, k = 0;    const char *rule = "|========|======|========|========|========|========|========|";    fprintf(fd ,"\n");    fprintf(fd ,"=========2413 Power Calibration Information===================\n");    fprintf(fd ,"| XPD_Gain_mask     0x%02x | Number of channels    %2d |        |\n",            pRaw->xpd_mask, pRaw->numChannels);    /* print the frequency values */    fprintf(fd ,"%s\n", rule);    fprintf(fd ,"|  freq  | pd   |  pwr1  |  pwr2  |  pwr3  |  pwr4  |  pwr5  |");    fprintf(fd ,"\n");    fprintf(fd ,"| maxpow | gain | [Vpd]  | [Vpd]  | [Vpd]  | [Vpd]  | [Vpd]  |\n");    for (i = 0; i < pRaw->numChannels; i++) {        fprintf(fd ,"%s\n", rule);        fprintf(fd ,"|  %4d  |", pRaw->pChannels[i]);        for (j=0; j < pRaw->pDataPerChannel[i].numPdGains; j++) {	    if (j == 1)		fprintf(fd ,"| %2d.%02d  |", pRaw->pDataPerChannel[i].maxPower_t4 / 4,		    (pRaw->pDataPerChannel[i].maxPower_t4 % 4) * 25);	    else if (j > 0)		fprintf(fd ,"|         |");	    fprintf(fd, " %4d |", pRaw->pDataPerChannel[i].pDataPerPDGain[j].pd_gain);	    for (k=0; k < pRaw->pDataPerChannel[i].pDataPerPDGain[j].numVpd; k++)		    fprintf(fd ," %2d.%02d  |", (pRaw->pDataPerChannel[i].pDataPerPDGain[j].pwr_t4[k] / 4),			(pRaw->pDataPerChannel[i].pDataPerPDGain[j].pwr_t4[k] % 4) * 25);	    for (; k<NUM_POINTS_LAST_PDGAIN; k++)		    fprintf(fd ,"        |");	    fprintf(fd, "\n");            fprintf(fd ,"|        |      |");	    for (k=0; k < pRaw->pDataPerChannel[i].pDataPerPDGain[j].numVpd; k++)		    fprintf(fd ," [%3d]  |", pRaw->pDataPerChannel[i].pDataPerPDGain[j].Vpd[k]);	    for (; k<NUM_POINTS_LAST_PDGAIN; k++)		    fprintf(fd ,"        |");	    fprintf(fd, "\n");        }    }    fprintf(fd ,"%s\n", rule);}static voidprintEepromStruct(FILE *fd, HAL_EEPROM *ee, u_int mode){    switch(mode) {    case headerInfo11A:	if (!ee->ee_Amode)	    return;        break;    case headerInfo11G:	if (!ee->ee_Gmode)	    return;        break;    case headerInfo11B:	if (!ee->ee_Bmode)	    return;        break;    }    printHeaderInfo(fd, ee, mode);    if (ee->ee_version >= AR_EEPROM_VER5_0) {        printChannelInfo2413(fd, ee, &ee->ee_rawDataset2413[mode]);    } else if (ee->ee_version >= AR_EEPROM_VER4_0) {	EEPROM_POWER_EXPN_5112 *exp;	exp = &ee->ee_modePowerArray5112[mode];	atd.ad_id = HAL_DIAG_EEPROM_EXP_11A+mode;	atd.ad_out_size = roundup(sizeof(u_int16_t) * exp->numChannels,				sizeof(u_int32_t)) +		      sizeof(EXPN_DATA_PER_CHANNEL_5112) * exp->numChannels;	atd.ad_out_data = (caddr_t) malloc(atd.ad_out_size);	if (ioctl(s, SIOCGATHDIAG, &atd) < 0)		err(1, atd.ad_name);	exp->pChannels = (void *) atd.ad_out_data;	exp->pDataPerChannel = (void *)((char *)atd.ad_out_data +		roundup(sizeof(u_int16_t) * exp->numChannels, sizeof(u_int32_t)));        printExpnPower5112(fd, ee, exp, mode);	free(atd.ad_out_data);    } else {        printChannelInfo(fd, ee, mode);    }    printTargetPowerInfo(fd, ee, mode);    printRDEdges(fd, ee, ee->ee_rdEdgesPower, ee->ee_ctl, mode, ee->ee_numCtls);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -