From cb8abf6b4264e7024d8932abb16365ee6507bb82 Mon Sep 17 00:00:00 2001 From: coypu Date: Fri, 16 Sep 2016 23:32:00 +0300 Subject: [PATCH 14/27] Make ar5212GetScaledPower report error ar5212FindValueInList may fail to initialize power, but we were ignoring this in the second case. switch to returning error with GetScaledPower to handle it, and make the sole user of GetScaledPower give back AH_FALSE in that scenario, too. --- sys/external/isc/atheros_hal/dist/ar5212/ar5111.c | 31 +++++++++++++---------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/sys/external/isc/atheros_hal/dist/ar5212/ar5111.c b/sys/external/isc/atheros_hal/dist/ar5212/ar5111.c index f9fd3f3..53cfc62 100644 --- a/sys/external/isc/atheros_hal/dist/ar5212/ar5111.c +++ b/sys/external/isc/atheros_hal/dist/ar5212/ar5111.c @@ -45,8 +45,8 @@ struct ar5111State { }; #define AR5111(ah) ((struct ar5111State *) AH5212(ah)->ah_rfHal) -static uint16_t ar5212GetScaledPower(uint16_t channel, uint16_t pcdacValue, - const PCDACS_EEPROM *pSrcStruct); +static HAL_BOOL ar5212GetScaledPower(uint16_t channel, uint16_t pcdacValue, + const PCDACS_EEPROM *pSrcStruct, uint16_t * scaledPower); static HAL_BOOL ar5212FindValueInList(uint16_t channel, uint16_t pcdacValue, const PCDACS_EEPROM *pSrcStruct, uint16_t *powerValue); static void ar5212GetLowerUpperPcdacs(uint16_t pcdac, uint16_t channel, @@ -451,8 +451,9 @@ ar5111SetPowerTable(struct ath_hal *ah, /* Fill out the power values for this channel */ for (j = 0; j < pcdacStruct.numPcdacValues; j++ ) - pScaledUpDbm[j] = ar5212GetScaledPower(freq, - pPcdacValues[j], pSrcStruct); + if (! ar5212GetScaledPower(freq, pPcdacValues[j], + pSrcStruct, &pScaledUpDbm[j])) + return AH_FALSE; /* Now scale the pcdac values to fit in the 64 entry power table */ minScaledPwr = pScaledUpDbm[0]; @@ -536,20 +537,19 @@ ar5111SetPowerTable(struct ath_hal *ah, /* * Get or interpolate the pcdac value from the calibrated data. */ -static uint16_t +static HAL_BOOL ar5212GetScaledPower(uint16_t channel, uint16_t pcdacValue, - const PCDACS_EEPROM *pSrcStruct) + const PCDACS_EEPROM *pSrcStruct, uint16_t * scaledPower) { - uint16_t powerValue; uint16_t lFreq, rFreq; /* left and right frequency values */ uint16_t llPcdac, ulPcdac; /* lower and upper left pcdac values */ uint16_t lrPcdac, urPcdac; /* lower and upper right pcdac values */ uint16_t lPwr, uPwr; /* lower and upper temp pwr values */ uint16_t lScaledPwr, rScaledPwr; /* left and right scaled power */ - if (ar5212FindValueInList(channel, pcdacValue, pSrcStruct, &powerValue)) { + if (ar5212FindValueInList(channel, pcdacValue, pSrcStruct, scaledPower)) { /* value was copied from srcStruct */ - return powerValue; + return AH_TRUE; } ar5212GetLowerUpperValues(channel, @@ -561,15 +561,18 @@ ar5212GetScaledPower(uint16_t channel, uint16_t pcdacValue, rFreq, pSrcStruct, &lrPcdac, &urPcdac); /* get the power index for the pcdac value */ - ar5212FindValueInList(lFreq, llPcdac, pSrcStruct, &lPwr); - ar5212FindValueInList(lFreq, ulPcdac, pSrcStruct, &uPwr); + if (! ar5212FindValueInList(lFreq, llPcdac, pSrcStruct, &lPwr) || + ! ar5212FindValueInList(lFreq, ulPcdac, pSrcStruct, &uPwr)) + return AH_FALSE; lScaledPwr = interpolate(pcdacValue, llPcdac, ulPcdac, lPwr, uPwr); - ar5212FindValueInList(rFreq, lrPcdac, pSrcStruct, &lPwr); - ar5212FindValueInList(rFreq, urPcdac, pSrcStruct, &uPwr); + if (! ar5212FindValueInList(rFreq, lrPcdac, pSrcStruct, &lPwr) || + ! ar5212FindValueInList(rFreq, urPcdac, pSrcStruct, &uPwr)) + return AH_FALSE; rScaledPwr = interpolate(pcdacValue, lrPcdac, urPcdac, lPwr, uPwr); - return interpolate(channel, lFreq, rFreq, lScaledPwr, rScaledPwr); + * scaledPower = interpolate(channel, lFreq, rFreq, lScaledPwr, rScaledPwr); + return AH_TRUE; } /* -- 2.9.3