ath_ee_v14_print.c revision 219420
1251881Speter 2251881Speter/* 3251881Speter * Copyright (c) 2010-2011 Adrian Chadd, Xenion Pty Ltd. 4251881Speter * 5251881Speter * Redistribution and use in source and binary forms, with or without 6251881Speter * modification, are permitted provided that the following conditions 7251881Speter * are met: 8251881Speter * 1. Redistributions of source code must retain the above copyright 9251881Speter * notice, this list of conditions and the following disclaimer. 10251881Speter * 2. Redistributions in binary form must reproduce the above copyright 11251881Speter * notice, this list of conditions and the following disclaimer in the 12251881Speter * documentation and/or other materials provided with the distribution. 13251881Speter * 14251881Speter * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15251881Speter * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16251881Speter * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17251881Speter * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18251881Speter * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19251881Speter * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20251881Speter * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21251881Speter * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22251881Speter * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23251881Speter * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24251881Speter * SUCH DAMAGE. 25251881Speter * 26251881Speter * $FreeBSD: head/tools/tools/ath/ath_ee_v14_print/ath_ee_v14_print.c 219420 2011-03-09 04:48:06Z adrian $ 27251881Speter */ 28251881Speter 29251881Speter#include <stdio.h> 30251881Speter#include <stdlib.h> 31251881Speter#include <unistd.h> 32251881Speter#include <string.h> 33251881Speter#include <sys/types.h> 34251881Speter#include <err.h> 35251881Speter 36251881Spetertypedef enum { 37251881Speter AH_FALSE = 0, /* NB: lots of code assumes false is zero */ 38251881Speter AH_TRUE = 1, 39251881Speter} HAL_BOOL; 40251881Speter 41251881Spetertypedef enum { 42251881Speter HAL_OK = 0, /* No error */ 43251881Speter} HAL_STATUS; 44251881Speter 45251881Speterstruct ath_hal; 46251881Speter 47251881Speter#include "ah_eeprom_v14.h" 48251881Speter 49251881Spetervoid 50251881Speterload_eeprom_dump(const char *file, uint16_t *buf) 51251881Speter{ 52251881Speter unsigned int r[8]; 53251881Speter FILE *fp; 54251881Speter char b[1024]; 55251881Speter int i; 56251881Speter 57251881Speter fp = fopen(file, "r"); 58251881Speter if (!fp) 59251881Speter err(1, "fopen"); 60251881Speter 61251881Speter while (!feof(fp)) { 62251881Speter if (fgets(b, 1024, fp) == NULL) 63251881Speter break; 64251881Speter if (feof(fp)) 65251881Speter break; 66251881Speter if (strlen(b) > 0) 67251881Speter b[strlen(b)-1] = '\0'; 68251881Speter if (strlen(b) == 0) 69251881Speter break; 70251881Speter sscanf(b, "%x: %x %x %x %x %x %x %x %x\n", 71251881Speter &i, &r[0], &r[1], &r[2], &r[3], &r[4], 72251881Speter &r[5], &r[6], &r[7]); 73251881Speter buf[i++] = r[0]; 74251881Speter buf[i++] = r[1]; 75251881Speter buf[i++] = r[2]; 76251881Speter buf[i++] = r[3]; 77251881Speter buf[i++] = r[4]; 78251881Speter buf[i++] = r[5]; 79251881Speter buf[i++] = r[6]; 80251881Speter buf[i++] = r[7]; 81251881Speter } 82251881Speter fclose(fp); 83251881Speter} 84251881Speter 85251881Speterstatic void 86251881Spetereeprom_v14_base_print(uint16_t *buf) 87251881Speter{ 88251881Speter HAL_EEPROM_v14 *eep = (HAL_EEPROM_v14 *) buf; 89251881Speter BASE_EEP_HEADER *eh = &eep->ee_base.baseEepHeader; 90251881Speter int i; 91251881Speter 92251881Speter printf("| Version: 0x%.4x | Length: 0x%.4x | Checksum: 0x%.4x ", 93251881Speter eh->version, eh->length, eh->checksum); 94251881Speter printf("| CapFlags: 0x%.2x | eepMisc: 0x%.2x | RegDomain: 0x%.4x 0x%.4x | \n", 95251881Speter eh->opCapFlags, eh->eepMisc, eh->regDmn[0], eh->regDmn[1]); 96251881Speter printf("| MAC: %.2x:%.2x:%.2x:%.2x:%.2x:%.2x ", 97251881Speter eh->macAddr[0], eh->macAddr[1], eh->macAddr[2], 98251881Speter eh->macAddr[3], eh->macAddr[4], eh->macAddr[5]); 99251881Speter printf("| RxMask: 0x%.2x | TxMask: 0x%.2x | RfSilent: 0x%.4x | btOptions: 0x%.4x |\n", 100251881Speter eh->rxMask, eh->txMask, eh->rfSilent, eh->blueToothOptions); 101251881Speter printf("| DeviceCap: 0x%.4x | binBuildNumber: %.8x | deviceType: 0x%.2x |\n", 102251881Speter eh->deviceCap, eh->binBuildNumber, eh->deviceType); 103251881Speter 104251881Speter printf("| pwdclkind: 0x%.2x | fastClk5g: 0x%.2x | divChain: 0x%.2x | rxGainType: 0x%.2x |\n", 105251881Speter (int) eh->pwdclkind, (int) eh->fastClk5g, (int) eh->divChain, 106251881Speter (int) eh->rxGainType); 107251881Speter 108251881Speter printf("| dacHiPwrMode_5G: 0x%.2x | openLoopPwrCntl: 0x%.2x | dacLpMode: 0x%.2x ", 109251881Speter (int) eh->dacHiPwrMode_5G, (int) eh->openLoopPwrCntl, (int) eh->dacLpMode); 110251881Speter printf("| txGainType: 0x%.2x | rcChainMask: 0x%.2x |\n", 111251881Speter (int) eh->txGainType, (int) eh->rcChainMask); 112251881Speter 113251881Speter printf("| desiredScaleCCK: 0x%.2x | pwr_table_offset: 0x%.2x | frac_n_5g: %.2x\n", 114251881Speter (int) eh->desiredScaleCCK, (int) eh->pwr_table_offset, (int) eh->frac_n_5g); 115251881Speter 116251881Speter /* because it's convienent */ 117251881Speter printf("| antennaGainMax[0]: 0x%.2x antennaGainMax[1]: 0x%.2x |\n", 118251881Speter eep->ee_antennaGainMax[0], eep->ee_antennaGainMax[1]); 119251881Speter 120251881Speter printf(" | futureBase:"); 121251881Speter for (i = 0; i < sizeof(eh->futureBase) / sizeof(uint8_t); i++) 122251881Speter printf(" %.2x", (int) eh->futureBase[i]); 123251881Speter printf("\n"); 124251881Speter} 125251881Speter 126251881Speterstatic void 127251881Spetereeprom_v14_custdata_print(uint16_t *buf) 128251881Speter{ 129251881Speter HAL_EEPROM_v14 *eep = (HAL_EEPROM_v14 *) buf; 130251881Speter uint8_t *custdata = (uint8_t *) &eep->ee_base.custData; 131251881Speter int i; 132251881Speter 133251881Speter printf("\n| Custdata: |\n"); 134251881Speter for (i = 0; i < 64; i++) { 135251881Speter printf("%s0x%.2x %s", 136251881Speter i % 16 == 0 ? "| " : "", 137251881Speter custdata[i], 138251881Speter i % 16 == 15 ? "|\n" : ""); 139251881Speter } 140251881Speter} 141251881Speter 142251881Speterstatic void 143262253Spetereeprom_v14_modal_print(uint16_t *buf, int m) 144251881Speter{ 145251881Speter HAL_EEPROM_v14 *eep = (HAL_EEPROM_v14 *) buf; 146251881Speter MODAL_EEP_HEADER *mh = &eep->ee_base.modalHeader[m]; 147251881Speter int i; 148251881Speter 149251881Speter printf("| antCtrlCommon: 0x%.4x |\n", mh->antCtrlCommon); 150251881Speter printf("| switchSettling: 0x%.2x |\n", mh->switchSettling); 151251881Speter printf("| adcDesiredSize: %d |\n| pgaDesiredSize: %.2f dBm |\n", 152251881Speter mh->adcDesiredSize, (float) mh->pgaDesiredSize / 2.0); 153251881Speter 154251881Speter printf("| antCtrlChain: 0:0x%.4x 1:0x%.4x 2:0x%.4x |\n", 155251881Speter mh->antCtrlChain[0], mh->antCtrlChain[1], mh->antCtrlChain[2]); 156251881Speter printf("| antennaGainCh: 0:0x%.2x 1:0x%.2x 2:0x%.2x |\n", 157251881Speter mh->antennaGainCh[0], mh->antennaGainCh[1], mh->antennaGainCh[2]); 158251881Speter printf("| txRxAttenCh: 0:0x%.2x 1:0x%.2x 2:0x%.2x |\n", 159251881Speter mh->txRxAttenCh[0], mh->txRxAttenCh[1], mh->txRxAttenCh[2]); 160251881Speter printf("| rxTxMarginCh: 0:0x%.2x 1:0x%.2x 2:0x%.2x |\n", 161251881Speter mh->rxTxMarginCh[0], mh->rxTxMarginCh[1], mh->rxTxMarginCh[2]); 162251881Speter printf("| noiseFloorThresCh: 0:0x%.2x 1:0x%.2x 2:0x%.2x |\n", 163251881Speter mh->noiseFloorThreshCh[0], mh->noiseFloorThreshCh[1], mh->noiseFloorThreshCh[2]); 164251881Speter printf("| xlnaGainCh: 0:0x%.2x 1:0x%.2x 2:0x%.2x |\n", 165251881Speter mh->xlnaGainCh[0], mh->xlnaGainCh[1], mh->xlnaGainCh[2]); 166251881Speter printf("| iqCalICh: 0:0x%.2x 1:0x%.2x 2:0x%.2x |\n| iqCalQCh: 0:0x%.2x 1:0x%.2x 2:0x%.2x |\n", 167251881Speter mh->iqCalICh[0], mh->iqCalICh[1], mh->iqCalICh[2], 168251881Speter mh->iqCalQCh[0], mh->iqCalQCh[1], mh->iqCalQCh[2]); 169251881Speter printf("| bswAtten: 0:0x%.2x 1:0x%.2x 2:0x%.2x |\n", 170251881Speter mh->bswAtten[0], mh->bswAtten[1], mh->bswAtten[2]); 171251881Speter printf("| bswMargin: 0:0x%.2x 1:0x%.2x 2:0x%.2x |\n", 172251881Speter mh->bswMargin[0], mh->bswMargin[1], mh->bswMargin[2]); 173251881Speter printf("| xatten2Db: 0:0x%.2x 1:0x%.2x 2:0x%.2x |\n", 174251881Speter mh->xatten2Db[0], mh->xatten2Db[1], mh->xatten2Db[2]); 175251881Speter printf("| xatten2Margin: 0:0x%.2x 1:0x%.2x 2:0x%.2x |\n", 176251881Speter mh->xatten2Margin[0], mh->xatten2Margin[1], mh->xatten2Margin[2]); 177251881Speter 178251881Speter printf("| txEndToXpaOff: 0x%.2x | txEndToRxOn: 0x%.2x | txFrameToXpaOn: 0x%.2x |\n", 179251881Speter mh->txEndToXpaOff, mh->txEndToRxOn, mh->txFrameToXpaOn); 180251881Speter 181251881Speter printf("| thres62: 0x%.2x\n", mh->thresh62); 182251881Speter 183251881Speter printf("| xpdGain: 0x%.2x | xpd: 0x%.2x |\n", mh->xpdGain, mh->xpd); 184251881Speter printf("| xpaBiasLvlFreq: 0:0x%.4x 1:0x%.4x 2:0x%.4x |\n", 185251881Speter mh->xpaBiasLvlFreq[0], mh->xpaBiasLvlFreq[1], mh->xpaBiasLvlFreq[2]); 186251881Speter 187251881Speter printf("| pdGainOverlap: 0x%.2x | ob: 0x%.2x | db: 0x%.2x | xpaBiasLvl: 0x%.2x |\n", 188251881Speter mh->pdGainOverlap, mh->ob, mh->db, mh->xpaBiasLvl); 189251881Speter 190251881Speter printf("| pwrDecreaseFor2Chain: 0x%.2x | pwrDecreaseFor3Chain: 0x%.2x | txFrameToDataStart: 0x%.2x | txFrameToPaOn: 0x%.2x |\n", 191251881Speter mh->pwrDecreaseFor2Chain, mh->pwrDecreaseFor3Chain, mh->txFrameToDataStart, 192251881Speter mh->txFrameToPaOn); 193251881Speter 194251881Speter printf("| ht40PowerIncForPdadc: 0x%.2x |\n", mh->ht40PowerIncForPdadc); 195251881Speter 196251881Speter printf("| swSettleHt40: 0x%.2x |\n", mh->swSettleHt40); 197251881Speter 198251881Speter printf("| ob_ch1: 0x%.2x | db_ch1: 0x%.2x |\n", mh->ob_ch1, mh->db_ch1); 199251881Speter 200251881Speter printf("| flagBits: 0x%.2x | miscBits: 0x%.2x |\n", mh->flagBits, mh->miscBits); 201251881Speter 202251881Speter 203251881Speter printf("| futureModal: 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x |\n", 204251881Speter mh->futureModal[0], 205251881Speter mh->futureModal[1], 206251881Speter mh->futureModal[2], 207251881Speter mh->futureModal[3], 208251881Speter mh->futureModal[4], 209251881Speter mh->futureModal[5]); 210251881Speter 211251881Speter /* and now, spur channels */ 212251881Speter for (i = 0; i < AR5416_EEPROM_MODAL_SPURS; i++) { 213251881Speter printf("| Spur %d: spurChan: 0x%.4x spurRangeLow: 0x%.2x spurRangeHigh: 0x%.2x |\n", 214251881Speter i, mh->spurChans[i].spurChan, 215251881Speter (int) mh->spurChans[i].spurRangeLow, 216251881Speter (int) mh->spurChans[i].spurRangeHigh); 217251881Speter } 218251881Speter} 219251881Speter 220251881Speterstatic void 221251881Spetereeprom_v14_print_caldata_perfreq_op_loop(CAL_DATA_PER_FREQ_OP_LOOP *f) 222251881Speter{ 223251881Speter int i, j; 224251881Speter for (i = 0; i < 2; i++) { 225251881Speter printf(" Gain: %d:\n", i); 226251881Speter for (j = 0; j < 5; j++) { 227251881Speter printf(" %d: pwrPdg: %d, vpdPdg: %d, pcdac: %d, empty: %d\n", 228251881Speter j, f->pwrPdg[i][j], f->vpdPdg[i][j], f->pcdac[i][j], f->empty[i][j]); 229251881Speter } 230251881Speter printf("\n"); 231251881Speter } 232251881Speter} 233251881Speter 234251881Speterstatic void 235251881Spetereeprom_v14_print_caldata_perfreq(CAL_DATA_PER_FREQ *f) 236251881Speter{ 237251881Speter int i, j; 238251881Speter 239251881Speter for (i = 0; i < AR5416_NUM_PD_GAINS; i++) { 240251881Speter printf(" Gain %d: pwr dBm/vpd: ", i); 241251881Speter for (j = 0; j < AR5416_PD_GAIN_ICEPTS; j++) { 242251881Speter /* These are stored in 0.25dBm increments */ 243251881Speter printf("%d:(%.2f/%d) ", j, (float) f->pwrPdg[i][j] / 4.00, 244251881Speter f->vpdPdg[i][j]); 245251881Speter } 246251881Speter printf("\n"); 247251881Speter } 248251881Speter} 249251881Speter 250251881Speterstatic void 251251881Spetereeprom_v14_calfreqpiers_print(uint16_t *buf) 252251881Speter{ 253251881Speter HAL_EEPROM_v14 *eep = (HAL_EEPROM_v14 *) buf; 254251881Speter int i, n; 255251881Speter 256251881Speter /* 2ghz cal piers */ 257251881Speter printf("calFreqPier2G: "); 258251881Speter for (i = 0; i < AR5416_NUM_2G_CAL_PIERS; i++) { 259251881Speter printf(" 0x%.2x ", eep->ee_base.calFreqPier2G[i]); 260251881Speter } 261251881Speter printf("|\n"); 262251881Speter 263251881Speter for (i = 0; i < AR5416_NUM_2G_CAL_PIERS; i++) { 264251881Speter if (eep->ee_base.calFreqPier2G[i] == 0xff) 265251881Speter continue; 266251881Speter printf("2Ghz Cal Pier %d\n", i); 267251881Speter for (n = 0; n < AR5416_MAX_CHAINS; n++) { 268251881Speter printf(" Chain %d:\n", n); 269251881Speter if (eep->ee_base.baseEepHeader.openLoopPwrCntl) 270251881Speter eeprom_v14_print_caldata_perfreq_op_loop((void *) (&eep->ee_base.calPierData2G[n][i])); 271251881Speter else 272251881Speter eeprom_v14_print_caldata_perfreq(&eep->ee_base.calPierData2G[n][i]); 273251881Speter } 274251881Speter } 275251881Speter 276251881Speter printf("\n"); 277251881Speter 278251881Speter /* 5ghz cal piers */ 279251881Speter printf("calFreqPier5G: "); 280251881Speter for (i = 0; i < AR5416_NUM_5G_CAL_PIERS; i++) { 281251881Speter printf(" 0x%.2x ", eep->ee_base.calFreqPier5G[i]); 282251881Speter } 283251881Speter printf("|\n"); 284251881Speter for (i = 0; i < AR5416_NUM_5G_CAL_PIERS; i++) { 285251881Speter if (eep->ee_base.calFreqPier5G[i] == 0xff) 286251881Speter continue; 287251881Speter printf("5Ghz Cal Pier %d\n", i); 288251881Speter for (n = 0; n < AR5416_MAX_CHAINS; n++) { 289251881Speter printf(" Chain %d:\n", n); 290251881Speter if (eep->ee_base.baseEepHeader.openLoopPwrCntl) 291251881Speter eeprom_v14_print_caldata_perfreq_op_loop((void *) (&eep->ee_base.calPierData2G[n][i])); 292251881Speter else 293251881Speter eeprom_v14_print_caldata_perfreq(&eep->ee_base.calPierData2G[n][i]); 294251881Speter } 295251881Speter } 296251881Speter} 297251881Speter 298251881Speterstatic void 299251881Spetereeprom_v14_target_legacy_print(CAL_TARGET_POWER_LEG *l) 300251881Speter{ 301251881Speter int i; 302251881Speter if (l->bChannel == 0xff) 303251881Speter return; 304251881Speter printf(" bChannel: %d;", l->bChannel); 305251881Speter for (i = 0; i < 4; i++) { 306251881Speter printf(" %.2f", (float) l->tPow2x[i] / 2.0); 307251881Speter } 308251881Speter printf(" (dBm)\n"); 309251881Speter} 310251881Speter 311251881Speterstatic void 312251881Spetereeprom_v14_target_ht_print(CAL_TARGET_POWER_HT *l) 313251881Speter{ 314251881Speter int i; 315251881Speter if (l->bChannel == 0xff) 316251881Speter return; 317251881Speter printf(" bChannel: %d;", l->bChannel); 318251881Speter for (i = 0; i < 8; i++) { 319251881Speter printf(" %.2f", (float) l->tPow2x[i] / 2.0); 320251881Speter } 321251881Speter printf(" (dBm)\n"); 322251881Speter} 323251881Speter 324251881Speterstatic void 325251881Spetereeprom_v14_print_targets(uint16_t *buf) 326251881Speter{ 327251881Speter HAL_EEPROM_v14 *eep = (HAL_EEPROM_v14 *) buf; 328251881Speter int i; 329251881Speter 330251881Speter /* 2ghz rates */ 331251881Speter printf("2Ghz CCK:\n"); 332251881Speter for (i = 0; i < AR5416_NUM_2G_CCK_TARGET_POWERS; i++) { 333251881Speter eeprom_v14_target_legacy_print(&eep->ee_base.calTargetPowerCck[i]); 334251881Speter } 335251881Speter printf("2Ghz 11g:\n"); 336251881Speter for (i = 0; i < AR5416_NUM_2G_20_TARGET_POWERS; i++) { 337251881Speter eeprom_v14_target_legacy_print(&eep->ee_base.calTargetPower2G[i]); 338251881Speter } 339251881Speter printf("2Ghz HT20:\n"); 340251881Speter for (i = 0; i < AR5416_NUM_2G_20_TARGET_POWERS; i++) { 341251881Speter eeprom_v14_target_ht_print(&eep->ee_base.calTargetPower2GHT20[i]); 342251881Speter } 343251881Speter printf("2Ghz HT40:\n"); 344251881Speter for (i = 0; i < AR5416_NUM_2G_40_TARGET_POWERS; i++) { 345251881Speter eeprom_v14_target_ht_print(&eep->ee_base.calTargetPower2GHT40[i]); 346251881Speter } 347251881Speter 348251881Speter /* 5ghz rates */ 349251881Speter printf("5Ghz 11a:\n"); 350251881Speter for (i = 0; i < AR5416_NUM_5G_20_TARGET_POWERS; i++) { 351251881Speter eeprom_v14_target_legacy_print(&eep->ee_base.calTargetPower5G[i]); 352251881Speter } 353251881Speter printf("5Ghz HT20:\n"); 354251881Speter for (i = 0; i < AR5416_NUM_5G_20_TARGET_POWERS; i++) { 355251881Speter eeprom_v14_target_ht_print(&eep->ee_base.calTargetPower5GHT20[i]); 356251881Speter } 357251881Speter printf("5Ghz HT40:\n"); 358251881Speter for (i = 0; i < AR5416_NUM_5G_40_TARGET_POWERS; i++) { 359251881Speter eeprom_v14_target_ht_print(&eep->ee_base.calTargetPower5GHT40[i]); 360251881Speter } 361251881Speter 362251881Speter} 363251881Speter 364251881Speterstatic void 365251881Spetereeprom_v14_ctl_edge_print(CAL_CTL_DATA *ctl) 366251881Speter{ 367251881Speter int i, j; 368251881Speter uint8_t pow, flag; 369251881Speter 370251881Speter for (i = 0; i < AR5416_MAX_CHAINS; i++) { 371251881Speter printf(" chain %d: ", i); 372251881Speter for (j = 0; j < AR5416_NUM_BAND_EDGES; j++) { 373251881Speter pow = ctl->ctlEdges[i][j].tPowerFlag & 0x3f; 374251881Speter flag = (ctl->ctlEdges[i][j].tPowerFlag & 0xc0) >> 6; 375251881Speter printf(" %d:pow=%d,flag=%.2x", j, pow, flag); 376251881Speter } 377251881Speter printf("\n"); 378251881Speter } 379251881Speter} 380251881Speter 381251881Speterstatic void 382251881Spetereeprom_v14_ctl_print(uint16_t *buf) 383251881Speter{ 384251881Speter HAL_EEPROM_v14 *eep = (HAL_EEPROM_v14 *) buf; 385251881Speter int i; 386251881Speter 387251881Speter for (i = 0; i < AR5416_NUM_CTLS; i++) { 388251881Speter if (eep->ee_base.ctlIndex[i] == 0) 389251881Speter continue; 390251881Speter printf("| ctlIndex: offset %d, value %d\n", i, eep->ee_base.ctlIndex[i]); 391251881Speter eeprom_v14_ctl_edge_print(&eep->ee_base.ctlData[i]); 392251881Speter } 393251881Speter} 394251881Speter 395251881Speterstatic void 396251881Spetereeprom_v14_print_edges(uint16_t *buf) 397251881Speter{ 398251881Speter HAL_EEPROM_v14 *eep = (HAL_EEPROM_v14 *) buf; 399251881Speter int i; 400251881Speter 401251881Speter printf("| eeNumCtls: %d\n", eep->ee_numCtls); 402251881Speter for (i = 0; i < NUM_EDGES*eep->ee_numCtls; i++) { 403251881Speter /* XXX is flag 8 or 32 bits? */ 404251881Speter printf("| edge %2d/%2d: rdEdge: %5d EdgePower: %.2f dBm Flag: 0x%.8x\n", 405251881Speter i / NUM_EDGES, i % NUM_EDGES, 406251881Speter eep->ee_rdEdgesPower[i].rdEdge, 407251881Speter (float) eep->ee_rdEdgesPower[i].twice_rdEdgePower / 2.0, 408251881Speter eep->ee_rdEdgesPower[i].flag); 409251881Speter 410251881Speter if (i % NUM_EDGES == (NUM_EDGES -1)) 411251881Speter printf("|\n"); 412251881Speter } 413251881Speter#if 0 414251881Spetertypedef struct { 415251881Speter uint16_t rdEdge; 416251881Speter uint16_t twice_rdEdgePower; 417251881Speter HAL_BOOL flag; 418251881Speter } RD_EDGES_POWER; 419251881Speter 420251881Speter#endif 421251881Speter} 422251881Speter 423251881Spetervoid 424251881Speterusage(char *argv[]) 425251881Speter{ 426251881Speter printf("Usage: %s <eeprom dump file>\n", argv[0]); 427251881Speter printf("\n"); 428251881Speter printf(" The eeprom dump file is a text hexdump of an EEPROM.\n"); 429251881Speter printf(" The lines must be formatted as follows:\n"); 430251881Speter printf(" 0xAAAA: 0xDD 0xDD 0xDD 0xDD 0xDD 0xDD 0xDD 0xDD\n"); 431251881Speter printf(" where each line must have exactly eight data bytes.\n"); 432251881Speter exit(127); 433251881Speter} 434251881Speter 435251881Speterint 436251881Spetermain(int argc, char *argv[]) 437251881Speter{ 438251881Speter uint16_t *eep = NULL; 439251881Speter eep = calloc(4096, sizeof(int16_t)); 440251881Speter 441251881Speter if (argc < 2) 442251881Speter usage(argv); 443251881Speter 444251881Speter load_eeprom_dump(argv[1], eep); 445251881Speter 446251881Speter eeprom_v14_base_print(eep); 447251881Speter eeprom_v14_custdata_print(eep); 448251881Speter 449251881Speter /* 2.4ghz */ 450251881Speter printf("\n2.4ghz:\n"); 451251881Speter eeprom_v14_modal_print(eep, 1); 452251881Speter /* 5ghz */ 453251881Speter printf("\n5ghz:\n"); 454251881Speter eeprom_v14_modal_print(eep, 0); 455251881Speter printf("\n"); 456251881Speter 457251881Speter eeprom_v14_calfreqpiers_print(eep); 458251881Speter printf("\n"); 459251881Speter 460251881Speter eeprom_v14_print_targets(eep); 461251881Speter printf("\n"); 462251881Speter 463251881Speter eeprom_v14_ctl_print(eep); 464251881Speter printf("\n"); 465251881Speter 466251881Speter eeprom_v14_print_edges(eep); 467251881Speter printf("\n"); 468251881Speter 469251881Speter free(eep); 470251881Speter exit(0); 471251881Speter} 472251881Speter