/*
 *  Copyright (C) 2004 Florian Schirmer <jolt@tuxbox.org>
 *  Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org>
 *  Copyright (C) 2006 Michael Buesch <m@bues.ch>
 *  Copyright (C) 2010 Waldemar Brodkorb <wbx@openadk.org>
 *  Copyright (C) 2010-2012 Hauke Mehrtens <hauke@hauke-m.de>
 *
 *  This program is free software; you can redistribute  it and/or modify it
 *  under  the terms of  the GNU General  Public License as published by the
 *  Free Software Foundation;  either version 2 of the  License, or (at your
 *  option) any later version.
 *
 *  THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR IMPLIED
 *  WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
 *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
 *  NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT, INDIRECT,
 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 *  NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
 *  USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 *  ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *  You should have received a copy of the  GNU General Public License along
 *  with this program; if not, write  to the Free Software Foundation, Inc.,
 *  675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include <bcm47xx.h>
#include <nvram.h>

static void create_key(const char *prefix, const char *postfix,
		       const char *name, char *buf, int len)
{
	if (prefix && postfix)
		snprintf(buf, len, "%s%s%s", prefix, name, postfix);
	else if (prefix)
		snprintf(buf, len, "%s%s", prefix, name);
	else if (postfix)
		snprintf(buf, len, "%s%s", name, postfix);
	else
		snprintf(buf, len, "%s", name);
}

#define NVRAM_READ_VAL(type)						\
static void nvram_read_ ## type (const char *prefix,			\
				 const char *postfix, const char *name,	\
				 type *val, type allset)		\
{									\
	char buf[100];							\
	char key[40];							\
	int err;							\
	type var;							\
									\
	create_key(prefix, postfix, name, key, sizeof(key));		\
									\
	err = nvram_getenv(key, buf, sizeof(buf));			\
	if (err < 0)							\
		return;							\
	err = kstrto ## type (buf, 0, &var);				\
	if (err) {							\
		pr_warn("can not parse nvram name %s with value %s"	\
			" got %i", key, buf, err);			\
		return;							\
	}								\
	if (allset && var == allset)					\
		return;							\
	*val = var;							\
}

NVRAM_READ_VAL(u8)
NVRAM_READ_VAL(s8)
NVRAM_READ_VAL(u16)
NVRAM_READ_VAL(u32)

#undef NVRAM_READ_VAL

static void nvram_read_u32_2(const char *prefix, const char *name,
			     u16 *val_lo, u16 *val_hi)
{
	char buf[100];
	char key[40];
	int err;
	u32 val;

	create_key(prefix, NULL, name, key, sizeof(key));

	err = nvram_getenv(key, buf, sizeof(buf));
	if (err < 0)
		return;
	err = kstrtou32(buf, 0, &val);
	if (err) {
		pr_warn("can not parse nvram name %s with value %s got %i",
			key, buf, err);
		return;
	}
	*val_lo = (val & 0x0000FFFFU);
	*val_hi = (val & 0xFFFF0000U) >> 16;
}

static void nvram_read_leddc(const char *prefix, const char *name,
			     u8 *leddc_on_time, u8 *leddc_off_time)
{
	char buf[100];
	char key[40];
	int err;
	u32 val;

	create_key(prefix, NULL, name, key, sizeof(key));

	err = nvram_getenv(key, buf, sizeof(buf));
	if (err < 0)
		return;
	err = kstrtou32(buf, 0, &val);
	if (err) {
		pr_warn("can not parse nvram name %s with value %s got %i",
			key, buf, err);
		return;
	}

	if (val == 0xffff || val == 0xffffffff)
		return;

	*leddc_on_time = val & 0xff;
	*leddc_off_time = (val >> 16) & 0xff;
}

static void nvram_read_macaddr(const char *prefix, const char *name,
			       u8 (*val)[6])
{
	char buf[100];
	char key[40];
	int err;

	create_key(prefix, NULL, name, key, sizeof(key));

	err = nvram_getenv(key, buf, sizeof(buf));
	if (err < 0)
		return;
	nvram_parse_macaddr(buf, *val);
}

static void nvram_read_alpha2(const char *prefix, const char *name,
			     char (*val)[2])
{
	char buf[10];
	char key[40];
	int err;

	create_key(prefix, NULL, name, key, sizeof(key));

	err = nvram_getenv(key, buf, sizeof(buf));
	if (err < 0)
		return;
	if (buf[0] == '0')
		return;
	if (strlen(buf) > 2) {
		pr_warn("alpha2 is too long %s", buf);
		return;
	}
	memcpy(val, buf, sizeof(val));
}

static void bcm47xx_fill_sprom_r1234589(struct ssb_sprom *sprom,
					const char *prefix)
{
	nvram_read_u16(prefix, NULL, "boardrev", &sprom->board_rev, 0);
	nvram_read_u16(prefix, NULL, "boardnum", &sprom->board_num, 0);
	nvram_read_u8(prefix, NULL, "ledbh0", &sprom->gpio0, 0xff);
	nvram_read_u8(prefix, NULL, "ledbh1", &sprom->gpio1, 0xff);
	nvram_read_u8(prefix, NULL, "ledbh2", &sprom->gpio2, 0xff);
	nvram_read_u8(prefix, NULL, "ledbh3", &sprom->gpio3, 0xff);
	nvram_read_u8(prefix, NULL, "aa2g", &sprom->ant_available_bg, 0);
	nvram_read_u8(prefix, NULL, "aa5g", &sprom->ant_available_a, 0);
	nvram_read_s8(prefix, NULL, "ag0", &sprom->antenna_gain.a0, 0);
	nvram_read_s8(prefix, NULL, "ag1", &sprom->antenna_gain.a1, 0);
	nvram_read_alpha2(prefix, "ccode", &sprom->alpha2);
}

static void bcm47xx_fill_sprom_r12389(struct ssb_sprom *sprom,
				      const char *prefix)
{
	nvram_read_u16(prefix, NULL, "pa0b0", &sprom->pa0b0, 0);
	nvram_read_u16(prefix, NULL, "pa0b1", &sprom->pa0b1, 0);
	nvram_read_u16(prefix, NULL, "pa0b2", &sprom->pa0b2, 0);
	nvram_read_u8(prefix, NULL, "pa0itssit", &sprom->itssi_bg, 0);
	nvram_read_u8(prefix, NULL, "pa0maxpwr", &sprom->maxpwr_bg, 0);
	nvram_read_u16(prefix, NULL, "pa1b0", &sprom->pa1b0, 0);
	nvram_read_u16(prefix, NULL, "pa1b1", &sprom->pa1b1, 0);
	nvram_read_u16(prefix, NULL, "pa1b2", &sprom->pa1b2, 0);
	nvram_read_u8(prefix, NULL, "pa1itssit", &sprom->itssi_a, 0);
	nvram_read_u8(prefix, NULL, "pa1maxpwr", &sprom->maxpwr_a, 0);
}

static void bcm47xx_fill_sprom_r1(struct ssb_sprom *sprom, const char *prefix)
{
	nvram_read_u16(prefix, NULL, "boardflags", &sprom->boardflags_lo, 0);
	nvram_read_u8(prefix, NULL, "cc", &sprom->country_code, 0);
}

static void bcm47xx_fill_sprom_r2389(struct ssb_sprom *sprom,
				     const char *prefix)
{
	nvram_read_u8(prefix, NULL, "opo", &sprom->opo, 0);
	nvram_read_u16(prefix, NULL, "pa1lob0", &sprom->pa1lob0, 0);
	nvram_read_u16(prefix, NULL, "pa1lob1", &sprom->pa1lob1, 0);
	nvram_read_u16(prefix, NULL, "pa1lob2", &sprom->pa1lob2, 0);
	nvram_read_u16(prefix, NULL, "pa1hib0", &sprom->pa1hib0, 0);
	nvram_read_u16(prefix, NULL, "pa1hib1", &sprom->pa1hib1, 0);
	nvram_read_u16(prefix, NULL, "pa1hib2", &sprom->pa1hib2, 0);
	nvram_read_u8(prefix, NULL, "pa1lomaxpwr", &sprom->maxpwr_al, 0);
	nvram_read_u8(prefix, NULL, "pa1himaxpwr", &sprom->maxpwr_ah, 0);
}

static void bcm47xx_fill_sprom_r2(struct ssb_sprom *sprom, const char *prefix)
{
	nvram_read_u32_2(prefix, "boardflags", &sprom->boardflags_lo,
			 &sprom->boardflags_hi);
	nvram_read_u16(prefix, NULL, "boardtype", &sprom->board_type, 0);
}

static void bcm47xx_fill_sprom_r389(struct ssb_sprom *sprom, const char *prefix)
{
	nvram_read_u8(prefix, NULL, "bxa2g", &sprom->bxa2g, 0);
	nvram_read_u8(prefix, NULL, "rssisav2g", &sprom->rssisav2g, 0);
	nvram_read_u8(prefix, NULL, "rssismc2g", &sprom->rssismc2g, 0);
	nvram_read_u8(prefix, NULL, "rssismf2g", &sprom->rssismf2g, 0);
	nvram_read_u8(prefix, NULL, "bxa5g", &sprom->bxa5g, 0);
	nvram_read_u8(prefix, NULL, "rssisav5g", &sprom->rssisav5g, 0);
	nvram_read_u8(prefix, NULL, "rssismc5g", &sprom->rssismc5g, 0);
	nvram_read_u8(prefix, NULL, "rssismf5g", &sprom->rssismf5g, 0);
	nvram_read_u8(prefix, NULL, "tri2g", &sprom->tri2g, 0);
	nvram_read_u8(prefix, NULL, "tri5g", &sprom->tri5g, 0);
	nvram_read_u8(prefix, NULL, "tri5gl", &sprom->tri5gl, 0);
	nvram_read_u8(prefix, NULL, "tri5gh", &sprom->tri5gh, 0);
	nvram_read_s8(prefix, NULL, "rxpo2g", &sprom->rxpo2g, 0);
	nvram_read_s8(prefix, NULL, "rxpo5g", &sprom->rxpo5g, 0);
}

static void bcm47xx_fill_sprom_r3(struct ssb_sprom *sprom, const char *prefix)
{
	nvram_read_u32_2(prefix, "boardflags", &sprom->boardflags_lo,
			 &sprom->boardflags_hi);
	nvram_read_u16(prefix, NULL, "boardtype", &sprom->board_type, 0);
	nvram_read_u8(prefix, NULL, "regrev", &sprom->regrev, 0);
	nvram_read_leddc(prefix, "leddc", &sprom->leddc_on_time,
			 &sprom->leddc_off_time);
}

static void bcm47xx_fill_sprom_r4589(struct ssb_sprom *sprom,
				     const char *prefix)
{
	nvram_read_u32_2(prefix, "boardflags", &sprom->boardflags_lo,
			 &sprom->boardflags_hi);
	nvram_read_u32_2(prefix, "boardflags2", &sprom->boardflags2_lo,
			 &sprom->boardflags2_hi);
	nvram_read_u16(prefix, NULL, "boardtype", &sprom->board_type, 0);
	nvram_read_u8(prefix, NULL, "regrev", &sprom->regrev, 0);
	nvram_read_s8(prefix, NULL, "ag2", &sprom->antenna_gain.a2, 0);
	nvram_read_s8(prefix, NULL, "ag3", &sprom->antenna_gain.a3, 0);
	nvram_read_u8(prefix, NULL, "txchain", &sprom->txchain, 0xf);
	nvram_read_u8(prefix, NULL, "rxchain", &sprom->rxchain, 0xf);
	nvram_read_u8(prefix, NULL, "antswitch", &sprom->antswitch, 0xff);
	nvram_read_leddc(prefix, "leddc", &sprom->leddc_on_time,
			 &sprom->leddc_off_time);
}

static void bcm47xx_fill_sprom_r458(struct ssb_sprom *sprom, const char *prefix)
{
	nvram_read_u16(prefix, NULL, "cck2gpo", &sprom->cck2gpo, 0);
	nvram_read_u32(prefix, NULL, "ofdm2gpo", &sprom->ofdm2gpo, 0);
	nvram_read_u32(prefix, NULL, "ofdm5gpo", &sprom->ofdm5gpo, 0);
	nvram_read_u32(prefix, NULL, "ofdm5glpo", &sprom->ofdm5glpo, 0);
	nvram_read_u32(prefix, NULL, "ofdm5ghpo", &sprom->ofdm5ghpo, 0);
	nvram_read_u16(prefix, NULL, "cddpo", &sprom->cddpo, 0);
	nvram_read_u16(prefix, NULL, "stbcpo", &sprom->stbcpo, 0);
	nvram_read_u16(prefix, NULL, "bw40po", &sprom->bw40po, 0);
	nvram_read_u16(prefix, NULL, "bwduppo", &sprom->bwduppo, 0);
	nvram_read_u16(prefix, NULL, "mcs2gpo0", &sprom->mcs2gpo[0], 0);
	nvram_read_u16(prefix, NULL, "mcs2gpo1", &sprom->mcs2gpo[1], 0);
	nvram_read_u16(prefix, NULL, "mcs2gpo2", &sprom->mcs2gpo[2], 0);
	nvram_read_u16(prefix, NULL, "mcs2gpo3", &sprom->mcs2gpo[3], 0);
	nvram_read_u16(prefix, NULL, "mcs2gpo4", &sprom->mcs2gpo[4], 0);
	nvram_read_u16(prefix, NULL, "mcs2gpo5", &sprom->mcs2gpo[5], 0);
	nvram_read_u16(prefix, NULL, "mcs2gpo6", &sprom->mcs2gpo[6], 0);
	nvram_read_u16(prefix, NULL, "mcs2gpo7", &sprom->mcs2gpo[7], 0);
	nvram_read_u16(prefix, NULL, "mcs5gpo0", &sprom->mcs5gpo[0], 0);
	nvram_read_u16(prefix, NULL, "mcs5gpo1", &sprom->mcs5gpo[1], 0);
	nvram_read_u16(prefix, NULL, "mcs5gpo2", &sprom->mcs5gpo[2], 0);
	nvram_read_u16(prefix, NULL, "mcs5gpo3", &sprom->mcs5gpo[3], 0);
	nvram_read_u16(prefix, NULL, "mcs5gpo4", &sprom->mcs5gpo[4], 0);
	nvram_read_u16(prefix, NULL, "mcs5gpo5", &sprom->mcs5gpo[5], 0);
	nvram_read_u16(prefix, NULL, "mcs5gpo6", &sprom->mcs5gpo[6], 0);
	nvram_read_u16(prefix, NULL, "mcs5gpo7", &sprom->mcs5gpo[7], 0);
	nvram_read_u16(prefix, NULL, "mcs5glpo0", &sprom->mcs5glpo[0], 0);
	nvram_read_u16(prefix, NULL, "mcs5glpo1", &sprom->mcs5glpo[1], 0);
	nvram_read_u16(prefix, NULL, "mcs5glpo2", &sprom->mcs5glpo[2], 0);
	nvram_read_u16(prefix, NULL, "mcs5glpo3", &sprom->mcs5glpo[3], 0);
	nvram_read_u16(prefix, NULL, "mcs5glpo4", &sprom->mcs5glpo[4], 0);
	nvram_read_u16(prefix, NULL, "mcs5glpo5", &sprom->mcs5glpo[5], 0);
	nvram_read_u16(prefix, NULL, "mcs5glpo6", &sprom->mcs5glpo[6], 0);
	nvram_read_u16(prefix, NULL, "mcs5glpo7", &sprom->mcs5glpo[7], 0);
	nvram_read_u16(prefix, NULL, "mcs5ghpo0", &sprom->mcs5ghpo[0], 0);
	nvram_read_u16(prefix, NULL, "mcs5ghpo1", &sprom->mcs5ghpo[1], 0);
	nvram_read_u16(prefix, NULL, "mcs5ghpo2", &sprom->mcs5ghpo[2], 0);
	nvram_read_u16(prefix, NULL, "mcs5ghpo3", &sprom->mcs5ghpo[3], 0);
	nvram_read_u16(prefix, NULL, "mcs5ghpo4", &sprom->mcs5ghpo[4], 0);
	nvram_read_u16(prefix, NULL, "mcs5ghpo5", &sprom->mcs5ghpo[5], 0);
	nvram_read_u16(prefix, NULL, "mcs5ghpo6", &sprom->mcs5ghpo[6], 0);
	nvram_read_u16(prefix, NULL, "mcs5ghpo7", &sprom->mcs5ghpo[7], 0);
}

static void bcm47xx_fill_sprom_r45(struct ssb_sprom *sprom, const char *prefix)
{
	nvram_read_u8(prefix, NULL, "txpid2ga0", &sprom->txpid2g[0], 0);
	nvram_read_u8(prefix, NULL, "txpid2ga1", &sprom->txpid2g[1], 0);
	nvram_read_u8(prefix, NULL, "txpid2ga2", &sprom->txpid2g[2], 0);
	nvram_read_u8(prefix, NULL, "txpid2ga3", &sprom->txpid2g[3], 0);
	nvram_read_u8(prefix, NULL, "txpid5ga0", &sprom->txpid5g[0], 0);
	nvram_read_u8(prefix, NULL, "txpid5ga1", &sprom->txpid5g[1], 0);
	nvram_read_u8(prefix, NULL, "txpid5ga2", &sprom->txpid5g[2], 0);
	nvram_read_u8(prefix, NULL, "txpid5ga3", &sprom->txpid5g[3], 0);
	nvram_read_u8(prefix, NULL, "txpid5gla0", &sprom->txpid5gl[0], 0);
	nvram_read_u8(prefix, NULL, "txpid5gla1", &sprom->txpid5gl[1], 0);
	nvram_read_u8(prefix, NULL, "txpid5gla2", &sprom->txpid5gl[2], 0);
	nvram_read_u8(prefix, NULL, "txpid5gla3", &sprom->txpid5gl[3], 0);
	nvram_read_u8(prefix, NULL, "txpid5gha0", &sprom->txpid5gh[0], 0);
	nvram_read_u8(prefix, NULL, "txpid5gha1", &sprom->txpid5gh[1], 0);
	nvram_read_u8(prefix, NULL, "txpid5gha2", &sprom->txpid5gh[2], 0);
	nvram_read_u8(prefix, NULL, "txpid5gha3", &sprom->txpid5gh[3], 0);
}

static void bcm47xx_fill_sprom_r89(struct ssb_sprom *sprom, const char *prefix)
{
	nvram_read_u8(prefix, NULL, "tssipos2g", &sprom->fem.ghz2.tssipos, 0);
	nvram_read_u8(prefix, NULL, "extpagain2g",
		      &sprom->fem.ghz2.extpa_gain, 0);
	nvram_read_u8(prefix, NULL, "pdetrange2g",
		      &sprom->fem.ghz2.pdet_range, 0);
	nvram_read_u8(prefix, NULL, "triso2g", &sprom->fem.ghz2.tr_iso, 0);
	nvram_read_u8(prefix, NULL, "antswctl2g", &sprom->fem.ghz2.antswlut, 0);
	nvram_read_u8(prefix, NULL, "tssipos5g", &sprom->fem.ghz5.tssipos, 0);
	nvram_read_u8(prefix, NULL, "extpagain5g",
		      &sprom->fem.ghz5.extpa_gain, 0);
	nvram_read_u8(prefix, NULL, "pdetrange5g",
		      &sprom->fem.ghz5.pdet_range, 0);
	nvram_read_u8(prefix, NULL, "triso5g", &sprom->fem.ghz5.tr_iso, 0);
	nvram_read_u8(prefix, NULL, "antswctl5g", &sprom->fem.ghz5.antswlut, 0);
	nvram_read_u8(prefix, NULL, "tempthresh", &sprom->tempthresh, 0);
	nvram_read_u8(prefix, NULL, "tempoffset", &sprom->tempoffset, 0);
	nvram_read_u16(prefix, NULL, "rawtempsense", &sprom->rawtempsense, 0);
	nvram_read_u8(prefix, NULL, "measpower", &sprom->measpower, 0);
	nvram_read_u8(prefix, NULL, "tempsense_slope",
		      &sprom->tempsense_slope, 0);
	nvram_read_u8(prefix, NULL, "tempcorrx", &sprom->tempcorrx, 0);
	nvram_read_u8(prefix, NULL, "tempsense_option",
		      &sprom->tempsense_option, 0);
	nvram_read_u8(prefix, NULL, "freqoffset_corr",
		      &sprom->freqoffset_corr, 0);
	nvram_read_u8(prefix, NULL, "iqcal_swp_dis", &sprom->iqcal_swp_dis, 0);
	nvram_read_u8(prefix, NULL, "hw_iqcal_en", &sprom->hw_iqcal_en, 0);
	nvram_read_u8(prefix, NULL, "elna2g", &sprom->elna2g, 0);
	nvram_read_u8(prefix, NULL, "elna5g", &sprom->elna5g, 0);
	nvram_read_u8(prefix, NULL, "phycal_tempdelta",
		      &sprom->phycal_tempdelta, 0);
	nvram_read_u8(prefix, NULL, "temps_period", &sprom->temps_period, 0);
	nvram_read_u8(prefix, NULL, "temps_hysteresis",
		      &sprom->temps_hysteresis, 0);
	nvram_read_u8(prefix, NULL, "measpower1", &sprom->measpower1, 0);
	nvram_read_u8(prefix, NULL, "measpower2", &sprom->measpower2, 0);
	nvram_read_u8(prefix, NULL, "rxgainerr2ga0",
		      &sprom->rxgainerr2ga[0], 0);
	nvram_read_u8(prefix, NULL, "rxgainerr2ga1",
		      &sprom->rxgainerr2ga[1], 0);
	nvram_read_u8(prefix, NULL, "rxgainerr2ga2",
		      &sprom->rxgainerr2ga[2], 0);
	nvram_read_u8(prefix, NULL, "rxgainerr5gla0",
		      &sprom->rxgainerr5gla[0], 0);
	nvram_read_u8(prefix, NULL, "rxgainerr5gla1",
		      &sprom->rxgainerr5gla[1], 0);
	nvram_read_u8(prefix, NULL, "rxgainerr5gla2",
		      &sprom->rxgainerr5gla[2], 0);
	nvram_read_u8(prefix, NULL, "rxgainerr5gma0",
		      &sprom->rxgainerr5gma[0], 0);
	nvram_read_u8(prefix, NULL, "rxgainerr5gma1",
		      &sprom->rxgainerr5gma[1], 0);
	nvram_read_u8(prefix, NULL, "rxgainerr5gma2",
		      &sprom->rxgainerr5gma[2], 0);
	nvram_read_u8(prefix, NULL, "rxgainerr5gha0",
		      &sprom->rxgainerr5gha[0], 0);
	nvram_read_u8(prefix, NULL, "rxgainerr5gha1",
		      &sprom->rxgainerr5gha[1], 0);
	nvram_read_u8(prefix, NULL, "rxgainerr5gha2",
		      &sprom->rxgainerr5gha[2], 0);
	nvram_read_u8(prefix, NULL, "rxgainerr5gua0",
		      &sprom->rxgainerr5gua[0], 0);
	nvram_read_u8(prefix, NULL, "rxgainerr5gua1",
		      &sprom->rxgainerr5gua[1], 0);
	nvram_read_u8(prefix, NULL, "rxgainerr5gua2",
		      &sprom->rxgainerr5gua[2], 0);
	nvram_read_u8(prefix, NULL, "noiselvl2ga0", &sprom->noiselvl2ga[0], 0);
	nvram_read_u8(prefix, NULL, "noiselvl2ga1", &sprom->noiselvl2ga[1], 0);
	nvram_read_u8(prefix, NULL, "noiselvl2ga2", &sprom->noiselvl2ga[2], 0);
	nvram_read_u8(prefix, NULL, "noiselvl5gla0",
		      &sprom->noiselvl5gla[0], 0);
	nvram_read_u8(prefix, NULL, "noiselvl5gla1",
		      &sprom->noiselvl5gla[1], 0);
	nvram_read_u8(prefix, NULL, "noiselvl5gla2",
		      &sprom->noiselvl5gla[2], 0);
	nvram_read_u8(prefix, NULL, "noiselvl5gma0",
		      &sprom->noiselvl5gma[0], 0);
	nvram_read_u8(prefix, NULL, "noiselvl5gma1",
		      &sprom->noiselvl5gma[1], 0);
	nvram_read_u8(prefix, NULL, "noiselvl5gma2",
		      &sprom->noiselvl5gma[2], 0);
	nvram_read_u8(prefix, NULL, "noiselvl5gha0",
		      &sprom->noiselvl5gha[0], 0);
	nvram_read_u8(prefix, NULL, "noiselvl5gha1",
		      &sprom->noiselvl5gha[1], 0);
	nvram_read_u8(prefix, NULL, "noiselvl5gha2",
		      &sprom->noiselvl5gha[2], 0);
	nvram_read_u8(prefix, NULL, "noiselvl5gua0",
		      &sprom->noiselvl5gua[0], 0);
	nvram_read_u8(prefix, NULL, "noiselvl5gua1",
		      &sprom->noiselvl5gua[1], 0);
	nvram_read_u8(prefix, NULL, "noiselvl5gua2",
		      &sprom->noiselvl5gua[2], 0);
	nvram_read_u8(prefix, NULL, "pcieingress_war",
		      &sprom->pcieingress_war, 0);
}

static void bcm47xx_fill_sprom_r9(struct ssb_sprom *sprom, const char *prefix)
{
	nvram_read_u16(prefix, NULL, "cckbw202gpo", &sprom->cckbw202gpo, 0);
	nvram_read_u16(prefix, NULL, "cckbw20ul2gpo", &sprom->cckbw20ul2gpo, 0);
	nvram_read_u32(prefix, NULL, "legofdmbw202gpo",
		       &sprom->legofdmbw202gpo, 0);
	nvram_read_u32(prefix, NULL, "legofdmbw20ul2gpo",
		       &sprom->legofdmbw20ul2gpo, 0);
	nvram_read_u32(prefix, NULL, "legofdmbw205glpo",
		       &sprom->legofdmbw205glpo, 0);
	nvram_read_u32(prefix, NULL, "legofdmbw20ul5glpo",
		       &sprom->legofdmbw20ul5glpo, 0);
	nvram_read_u32(prefix, NULL, "legofdmbw205gmpo",
		       &sprom->legofdmbw205gmpo, 0);
	nvram_read_u32(prefix, NULL, "legofdmbw20ul5gmpo",
		       &sprom->legofdmbw20ul5gmpo, 0);
	nvram_read_u32(prefix, NULL, "legofdmbw205ghpo",
		       &sprom->legofdmbw205ghpo, 0);
	nvram_read_u32(prefix, NULL, "legofdmbw20ul5ghpo",
		       &sprom->legofdmbw20ul5ghpo, 0);
	nvram_read_u32(prefix, NULL, "mcsbw202gpo", &sprom->mcsbw202gpo, 0);
	nvram_read_u32(prefix, NULL, "mcsbw20ul2gpo", &sprom->mcsbw20ul2gpo, 0);
	nvram_read_u32(prefix, NULL, "mcsbw402gpo", &sprom->mcsbw402gpo, 0);
	nvram_read_u32(prefix, NULL, "mcsbw205glpo", &sprom->mcsbw205glpo, 0);
	nvram_read_u32(prefix, NULL, "mcsbw20ul5glpo",
		       &sprom->mcsbw20ul5glpo, 0);
	nvram_read_u32(prefix, NULL, "mcsbw405glpo", &sprom->mcsbw405glpo, 0);
	nvram_read_u32(prefix, NULL, "mcsbw205gmpo", &sprom->mcsbw205gmpo, 0);
	nvram_read_u32(prefix, NULL, "mcsbw20ul5gmpo",
		       &sprom->mcsbw20ul5gmpo, 0);
	nvram_read_u32(prefix, NULL, "mcsbw405gmpo", &sprom->mcsbw405gmpo, 0);
	nvram_read_u32(prefix, NULL, "mcsbw205ghpo", &sprom->mcsbw205ghpo, 0);
	nvram_read_u32(prefix, NULL, "mcsbw20ul5ghpo",
		       &sprom->mcsbw20ul5ghpo, 0);
	nvram_read_u32(prefix, NULL, "mcsbw405ghpo", &sprom->mcsbw405ghpo, 0);
	nvram_read_u16(prefix, NULL, "mcs32po", &sprom->mcs32po, 0);
	nvram_read_u16(prefix, NULL, "legofdm40duppo",
		       &sprom->legofdm40duppo, 0);
	nvram_read_u8(prefix, NULL, "sar2g", &sprom->sar2g, 0);
	nvram_read_u8(prefix, NULL, "sar5g", &sprom->sar5g, 0);
}

static void bcm47xx_fill_sprom_path_r4589(struct ssb_sprom *sprom,
					  const char *prefix)
{
	char postfix[2];
	int i;

	for (i = 0; i < ARRAY_SIZE(sprom->core_pwr_info); i++) {
		struct ssb_sprom_core_pwr_info *pwr_info = &sprom->core_pwr_info[i];
		snprintf(postfix, sizeof(postfix), "%i", i);
		nvram_read_u8(prefix, postfix, "maxp2ga",
			      &pwr_info->maxpwr_2g, 0);
		nvram_read_u8(prefix, postfix, "itt2ga",
			      &pwr_info->itssi_2g, 0);
		nvram_read_u8(prefix, postfix, "itt5ga",
			      &pwr_info->itssi_5g, 0);
		nvram_read_u16(prefix, postfix, "pa2gw0a",
			       &pwr_info->pa_2g[0], 0);
		nvram_read_u16(prefix, postfix, "pa2gw1a",
			       &pwr_info->pa_2g[1], 0);
		nvram_read_u16(prefix, postfix, "pa2gw2a",
			       &pwr_info->pa_2g[2], 0);
		nvram_read_u8(prefix, postfix, "maxp5ga",
			      &pwr_info->maxpwr_5g, 0);
		nvram_read_u8(prefix, postfix, "maxp5gha",
			      &pwr_info->maxpwr_5gh, 0);
		nvram_read_u8(prefix, postfix, "maxp5gla",
			      &pwr_info->maxpwr_5gl, 0);
		nvram_read_u16(prefix, postfix, "pa5gw0a",
			       &pwr_info->pa_5g[0], 0);
		nvram_read_u16(prefix, postfix, "pa5gw1a",
			       &pwr_info->pa_5g[1], 0);
		nvram_read_u16(prefix, postfix, "pa5gw2a",
			       &pwr_info->pa_5g[2], 0);
		nvram_read_u16(prefix, postfix, "pa5glw0a",
			       &pwr_info->pa_5gl[0], 0);
		nvram_read_u16(prefix, postfix, "pa5glw1a",
			       &pwr_info->pa_5gl[1], 0);
		nvram_read_u16(prefix, postfix, "pa5glw2a",
			       &pwr_info->pa_5gl[2], 0);
		nvram_read_u16(prefix, postfix, "pa5ghw0a",
			       &pwr_info->pa_5gh[0], 0);
		nvram_read_u16(prefix, postfix, "pa5ghw1a",
			       &pwr_info->pa_5gh[1], 0);
		nvram_read_u16(prefix, postfix, "pa5ghw2a",
			       &pwr_info->pa_5gh[2], 0);
	}
}

static void bcm47xx_fill_sprom_path_r45(struct ssb_sprom *sprom,
					const char *prefix)
{
	char postfix[2];
	int i;

	for (i = 0; i < ARRAY_SIZE(sprom->core_pwr_info); i++) {
		struct ssb_sprom_core_pwr_info *pwr_info = &sprom->core_pwr_info[i];
		snprintf(postfix, sizeof(postfix), "%i", i);
		nvram_read_u16(prefix, postfix, "pa2gw3a",
			       &pwr_info->pa_2g[3], 0);
		nvram_read_u16(prefix, postfix, "pa5gw3a",
			       &pwr_info->pa_5g[3], 0);
		nvram_read_u16(prefix, postfix, "pa5glw3a",
			       &pwr_info->pa_5gl[3], 0);
		nvram_read_u16(prefix, postfix, "pa5ghw3a",
			       &pwr_info->pa_5gh[3], 0);
	}
}

void bcm47xx_fill_sprom_ethernet(struct ssb_sprom *sprom, const char *prefix)
{
	nvram_read_macaddr(prefix, "et0macaddr", &sprom->et0mac);
	nvram_read_u8(prefix, NULL, "et0mdcport", &sprom->et0mdcport, 0);
	nvram_read_u8(prefix, NULL, "et0phyaddr", &sprom->et0phyaddr, 0);

	nvram_read_macaddr(prefix, "et1macaddr", &sprom->et1mac);
	nvram_read_u8(prefix, NULL, "et1mdcport", &sprom->et1mdcport, 0);
	nvram_read_u8(prefix, NULL, "et1phyaddr", &sprom->et1phyaddr, 0);

	nvram_read_macaddr(prefix, "macaddr", &sprom->il0mac);
	nvram_read_macaddr(prefix, "il0macaddr", &sprom->il0mac);
}

void bcm47xx_fill_sprom(struct ssb_sprom *sprom, const char *prefix)
{
	memset(sprom, 0, sizeof(struct ssb_sprom));

	bcm47xx_fill_sprom_ethernet(sprom, prefix);

	nvram_read_u8(prefix, NULL, "sromrev", &sprom->revision, 0);

	switch (sprom->revision) {
	case 1:
		bcm47xx_fill_sprom_r1234589(sprom, prefix);
		bcm47xx_fill_sprom_r12389(sprom, prefix);
		bcm47xx_fill_sprom_r1(sprom, prefix);
		break;
	case 2:
		bcm47xx_fill_sprom_r1234589(sprom, prefix);
		bcm47xx_fill_sprom_r12389(sprom, prefix);
		bcm47xx_fill_sprom_r2389(sprom, prefix);
		bcm47xx_fill_sprom_r2(sprom, prefix);
		break;
	case 3:
		bcm47xx_fill_sprom_r1234589(sprom, prefix);
		bcm47xx_fill_sprom_r12389(sprom, prefix);
		bcm47xx_fill_sprom_r2389(sprom, prefix);
		bcm47xx_fill_sprom_r389(sprom, prefix);
		bcm47xx_fill_sprom_r3(sprom, prefix);
		break;
	case 4:
	case 5:
		bcm47xx_fill_sprom_r1234589(sprom, prefix);
		bcm47xx_fill_sprom_r4589(sprom, prefix);
		bcm47xx_fill_sprom_r458(sprom, prefix);
		bcm47xx_fill_sprom_r45(sprom, prefix);
		bcm47xx_fill_sprom_path_r4589(sprom, prefix);
		bcm47xx_fill_sprom_path_r45(sprom, prefix);
		break;
	case 8:
		bcm47xx_fill_sprom_r1234589(sprom, prefix);
		bcm47xx_fill_sprom_r12389(sprom, prefix);
		bcm47xx_fill_sprom_r2389(sprom, prefix);
		bcm47xx_fill_sprom_r389(sprom, prefix);
		bcm47xx_fill_sprom_r4589(sprom, prefix);
		bcm47xx_fill_sprom_r458(sprom, prefix);
		bcm47xx_fill_sprom_r89(sprom, prefix);
		bcm47xx_fill_sprom_path_r4589(sprom, prefix);
		break;
	case 9:
		bcm47xx_fill_sprom_r1234589(sprom, prefix);
		bcm47xx_fill_sprom_r12389(sprom, prefix);
		bcm47xx_fill_sprom_r2389(sprom, prefix);
		bcm47xx_fill_sprom_r389(sprom, prefix);
		bcm47xx_fill_sprom_r4589(sprom, prefix);
		bcm47xx_fill_sprom_r89(sprom, prefix);
		bcm47xx_fill_sprom_r9(sprom, prefix);
		bcm47xx_fill_sprom_path_r4589(sprom, prefix);
		break;
	default:
		pr_warn("Unsupported SPROM revision %d detected. Will extract"
			" v1\n", sprom->revision);
		sprom->revision = 1;
		bcm47xx_fill_sprom_r1234589(sprom, prefix);
		bcm47xx_fill_sprom_r12389(sprom, prefix);
		bcm47xx_fill_sprom_r1(sprom, prefix);
	}
}
