freebsd-nq/sys/dev/bhnd/nvram/nvram_map
Adrian Chadd d567592b68 [bhnd] Centralize fetching of board information
Centralizes fetching of board information (vendor, type, revision, etc),
and adds support for matching quirks against board identification info.

* Adds a BHND_BUS_READ_BOARD_INFO(), allowing bhnd bus/bus parent(s) to
  handle implementation-specific fetching of board info.
* Integrates board type constants from the latest Broadcom ISC-licensed
  bcmdevs.h included in dd-wrt's Broadcom driver source drops.
* Adds support for matching on chip/board quirks to bhnd_device_quirks()/
  bhnd_chip_quirks().
* Use the new board/chip quirk matching to match Apple devices that failed
  to set BFL2_PCIEWAR_OVR in SROM.

Submitted by:	Landon Fuller <landonf@landonf.org>
Differential Revision:	https://reviews.freebsd.org/D6361
2016-05-17 00:23:46 +00:00

1451 lines
22 KiB
Plaintext

#-
# Copyright (c) 2015-2016 Landon Fuller <landon@landonf.org>
# Copyright (C) 2008-2015, Broadcom Corporation.
# All Rights Reserved.
#
# The contents of this file (variable names, descriptions, and offsets) were
# extracted or derived from Broadcom's ISC-licensed sources.
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
# $FreeBSD$
#
# NVRAM variable definitions and revision-specific SPROM offsets.
#
# Processed by nvram_map_gen.awk to produce bhnd_nvram_map.h
#
# NOTE: file was originally generated automatically by using libclang
# to analyze and extract format information and descriptions from Broadcom's
# available ISC-licensed CIS and SROM code and associated headers.
#
# Board Info
#
u16 boardvendor {} # PCI vendor ID (SoC NVRAM-only)
u16 subvid { srom >= 2 0x6 } # PCI subvendor ID
u16 devid { srom >= 8 0x60 } # PCI device ID
u32 boardflags {
srom 1 u16 0x72
srom 2 u16 0x72 | u16 0x38 (<<16)
srom 3 u16 0x72 | u16 0x7A (<<16)
srom 4 0x44
srom 5-7 0x4A
srom >= 8 0x84
}
u32 boardflags2 {
srom 4 0x48
srom 5-7 0x4E
srom >= 8 0x88
}
u32 boardflags3 {
srom >= 11 0x8C
}
# Board serial number, independent of mac addr
u16 boardnum {
srom 1-2 0x4C
srom 3 0x4E
srom 4 0x50
srom 5-7 0x56
srom 8-10 0x90
srom >= 11 0x94
}
# Board revision
u16 boardrev {
srom 1-3 u8 0x5D
srom 4-7 0x42
srom >= 8 0x82
}
# Board type
u16 boardtype {
srom >= 2 0x4
}
# SROM revision
u8 sromrev {
srom 1-3 0x74
srom 4-9 0x1B6
srom 10 0x1CA
srom 11 0x1D2
}
# Antennas available
u8 aa2g {
srom 1-3 0x5C (&0x30, >>4)
srom 4-7 0x5D
srom 8-10 0x9D
srom >= 11 0xA1
}
u8 aa5g {
srom 1-3 0x5C (&0xC0, >>6)
srom 4-7 0x5C
srom 8-10 0x9C
srom >= 11 0xA0
}
# ACPHY PA trimming parameters: 40
u16[12] pa5gbw40a0 {
srom >= 11 0x110
}
# ACPHY PA trimming parameters: 80
u16[12] pa5gbw80a0 {
srom >= 11 0x138
}
# ACPHY PA trimming parameters: 40/80
u16[12] pa5gbw4080a0 {
srom >= 11 0x138
}
u16[12] pa5gbw4080a1 {
srom >= 11 u16 0xB6, u16 0xBC, u16 0xCE, u16 0xD4, u16[8] 0x128
}
# ACPHY PA trimming parameters: CCK
u16[3] pa2gccka0 {
srom >= 11 0x102
}
# ACPHY Power-per-rate 2gpo
u16 dot11agofdmhrbw202gpo {
srom >= 11 0x15C
}
u16 ofdmlrbw202gpo {
srom >= 11 0x15E
}
# ACPHY Power-per-rate 5gpo
u32 mcsbw805glpo {
srom >= 11 0x168
}
u32 mcsbw805gmpo {
srom >= 11 0x178
}
u32 mcsbw805ghpo {
srom >= 11 0x188
}
u16 mcslr5glpo {
srom >= 11 0x190 (&0xFFF)
}
u16 mcslr5gmpo {
srom >= 11 0x192
}
u16 mcslr5ghpo {
srom >= 11 0x194
}
# ACPHY Power-per-rate sbpo
u16 sb20in40hrpo {
srom >= 11 0x196
}
u16 sb20in80and160hr5glpo {
srom >= 11 0x198
}
u16 sb40and80hr5glpo {
srom >= 11 0x19A
}
u16 sb20in80and160hr5gmpo {
srom >= 11 0x19C
}
u16 sb40and80hr5gmpo {
srom >= 11 0x19E
}
u16 sb20in80and160hr5ghpo {
srom >= 11 0x1A0
}
u16 sb40and80hr5ghpo {
srom >= 11 0x1A2
}
u16 sb20in40lrpo {
srom >= 11 0x1A4
}
u16 sb20in80and160lr5glpo {
srom >= 11 0x1A6
}
u16 sb40and80lr5glpo {
srom >= 11 0x1A8
}
u16 sb20in80and160lr5gmpo {
srom >= 11 0x1AA
}
u16 sb40and80lr5gmpo {
srom >= 11 0x1AC
}
u16 sb20in80and160lr5ghpo {
srom >= 11 0x1AE
}
u16 sb40and80lr5ghpo {
srom >= 11 0x1B0
}
u16 dot11agduphrpo {
srom >= 11 0x1B2
}
u16 dot11agduplrpo {
srom >= 11 0x1B4
}
# Antenna gain
u8 ag0 {
srom 1-3 0x75
srom 4-7 0x5F
srom 8-10 0x9F
}
u8 ag1 {
srom 1-3 0x74
srom 4-7 0x5E
srom 8-10 0x9E
}
u8 ag2 {
srom 4-7 0x61
srom 8-10 0xA1
}
u8 ag3 {
srom 4-7 0x60
srom 8-10 0xA0
}
u8 agbg0 {
srom >= 11 0xA2
}
u8 agbg1 {
srom >= 11 0xA3
}
u8 agbg2 {
srom >= 11 0xA4
}
u8 aga0 {
srom >= 11 0xA5
}
u8 aga1 {
srom >= 11 0xA6
}
u8 aga2 {
srom >= 11 0xA7
}
# Default country code (sromrev == 1)
u8 cc {
srom 1 0x5C (&0xF)
}
# 2 bytes each
# CCK Power offsets for 20 MHz rates (11, 5.5, 2, 1Mbps)
# cckbw202gpo cckbw20ul2gpo
#
u16 cckbw202gpo {
srom 9-10 0x140
srom >= 11 0x150
}
u16 cckbw20ul2gpo {
srom 9-10 0x142
srom >= 11 0x152
}
# Country code (2 bytes ascii + 1 byte cctl)
# in rev 2
#
char[2] ccode {
sfmt ccode
srom 0-3 0x76
srom 4 0x52
srom 5-7 0x44
srom 8-10 0x92
srom >= 11 0x96
}
# 2 byte; txchain, rxchain
u8 txchain {
all1 ignore
srom 4-7 0x7B (&0xF)
srom 8-10 0xA3 (&0xF)
srom >= 11 0xA9 (&0xF)
}
u8 rxchain {
all1 ignore
srom 4-7 0x7B (&0xF0, >>4)
srom 8-10 0xA3 (&0xF0, >>4)
srom >= 11 0xA9 (&0xF0, >>4)
}
u16 antswitch {
all1 ignore
srom 4-7 u8 0x7A
srom 8-10 u8 0xA2
srom >= 11 u8 0xA8
}
u8 elna2g {
srom 8-10 0xBB
}
u8 elna5g {
srom 8-10 0xBA
}
# 11n front-end specification
u8 antswctl2g {
srom 8-10 0xAE (&0xF8, >>3)
}
u8 triso2g {
srom 8-10 0xAE (&0x7)
}
u8 pdetrange2g {
srom 8-10 0xAF (&0xF8, >>3)
}
u8 extpagain2g {
srom 8-10 0xAF (&0x6, >>1)
}
u8 tssipos2g {
srom 8-10 0xAF (&0x1)
}
u8 antswctl5g {
srom 8-10 0xB0 (&0xF8, >>3)
}
u8 triso5g {
srom 8-10 0xB0 (&0x7)
}
u8 pdetrange5g {
srom 8-10 0xB1 (&0xF8, >>3)
}
u8 extpagain5g {
srom 8-10 0xB1 (&0x6, >>1)
}
u8 tssipos5g {
srom 8-10 0xB1 (&0x1)
}
# FEM config
u8 femctrl {
sfmt decimal
srom >= 11 0xAA (&0xF8, >>3)
}
u8 papdcap2g {
sfmt decimal
srom >= 11 0xAA (&0x4, >>2)
}
u8 tworangetssi2g {
sfmt decimal
srom >= 11 0xAA (&0x2, >>1)
}
u8 pdgain2g {
sfmt decimal
srom >= 11 u16 0xAA (&0x1F0, >>4)
}
u8 epagain2g {
sfmt decimal
srom >= 11 0xAB (&0xE, >>1)
}
u8 tssiposslope2g {
sfmt decimal
srom >= 11 0xAB (&0x1)
}
u8 gainctrlsph {
sfmt decimal
srom >= 11 0xAC (&0xF8, >>3)
}
u8 papdcap5g {
sfmt decimal
srom >= 11 0xAC (&0x4, >>2)
}
u8 tworangetssi5g {
sfmt decimal
srom >= 11 0xAC (&0x2, >>1)
}
u8 pdgain5g {
sfmt decimal
srom >= 11 u16 0xAC (&0x1F0, >>4)
}
u8 epagain5g {
sfmt decimal
srom >= 11 0xAD (&0xE, >>1)
}
u8 tssiposslope5g {
sfmt decimal
srom >= 11 0xAD (&0x1)
}
# LED duty cycle
u8[2] leddc {
sfmt led_dc
all1 ignore
srom 3 0x7C
srom 4 0x5A
srom 5-7 0x5A
srom 8-10 0x9A
srom >= 11 0x9E
}
# LED set
u8 ledbh0 {
all1 ignore
srom 1-3 0x65
srom 4 0x57
srom 5-7 0x77
srom 8-10 0x97
srom >= 11 0x9B
}
u8 ledbh1 {
all1 ignore
srom 1-3 0x64
srom 4 0x56
srom 5-7 0x76
srom 8-10 0x96
srom >= 11 0x9A
}
u8 ledbh2 {
all1 ignore
srom 1-3 0x67
srom 4 0x59
srom 5-7 0x79
srom 8-10 0x99
srom >= 11 0x9D
}
u8 ledbh3 {
all1 ignore
srom 1-3 0x66
srom 4 0x58
srom 5-7 0x78
srom 8-10 0x98
srom >= 11 0x9C
}
# 2 bytes total
# Additional power offset for Legacy Dup40 transmissions.
# Applied in addition to legofdmbw20ulXpo, X=2g, 5gl, 5gm, or 5gh.
# LSB nibble: 2G band, MSB nibble: 5G band high subband.
# leg40dup5ghpo, leg40dup5gmpo, leg40dup5glpo, leg40dup2gpo
#
u16 legofdm40duppo {
srom 9-10 0x196
}
# 4 bytes each
# OFDM power offsets for 20 MHz Legacy rates
# (54, 48, 36, 24, 18, 12, 9, 6 Mbps)
# legofdmbw202gpo legofdmbw20ul2gpo
#
u32 legofdmbw202gpo {
srom 9-10 0x144
}
u32 legofdmbw20ul2gpo {
srom 9-10 0x148
}
# 4 bytes each
# 5G band: OFDM power offsets for 20 MHz Legacy rates
# (54, 48, 36, 24, 18, 12, 9, 6 Mbps)
# low subband : legofdmbw205glpo legofdmbw20ul2glpo
# mid subband :legofdmbw205gmpo legofdmbw20ul2gmpo
# high subband :legofdmbw205ghpo legofdmbw20ul2ghpo
#
u32 legofdmbw205glpo {
srom 9-10 0x14C
}
u32 legofdmbw20ul5glpo {
srom 9-10 0x150
}
u32 legofdmbw205gmpo {
srom 9-10 0x154
}
u32 legofdmbw20ul5gmpo {
srom 9-10 0x158
}
u32 legofdmbw205ghpo {
srom 9-10 0x15C
}
u32 legofdmbw20ul5ghpo {
srom 9-10 0x160
}
# mac addr override for the standard CIS LAN_NID
u8[6] macaddr {
sfmt macaddr
srom 3 u8 0x4B, u8 0x4A, u8 0x4D, u8 0x4C, u8 0x4F, u8 0x4E
srom 4 u8 0x4D, u8 0x4C, u8 0x4F, u8 0x4E, u8 0x51, u8 0x50
srom 5-7 u8 0x53, u8 0x52, u8 0x55, u8 0x54, u8 0x57, u8 0x56
srom 8-10 u8 0x8D, u8 0x8C, u8 0x8F, u8 0x8E, u8 0x91, u8 0x90
srom >= 11 u8 0x91, u8 0x90, u8 0x93, u8 0x92, u8 0x95, u8 0x94
}
# 4 bytes each
# mcs 0-7 power-offset. LSB nibble: m0, MSB nibble: m7
# mcsbw202gpo mcsbw20ul2gpo mcsbw402gpo
#
u32 mcsbw202gpo {
srom 9-10 0x164
srom >= 11 0x154
}
u32 mcsbw20ul2gpo {
srom 9-10 0x168
}
u32 mcsbw402gpo {
srom 9-10 0x16C
srom >= 11 0x158
}
# 4 bytes each
# 5G high subband mcs 0-7 power-offset.
# LSB nibble: m0, MSB nibble: m7
# mcsbw205ghpo mcsbw20ul5ghpo mcsbw405ghpo
#
u32 mcsbw205ghpo {
srom 9-10 0x188
srom >= 11 0x180
}
u32 mcsbw20ul5ghpo {
srom 9-10 0x18C
}
u32 mcsbw405ghpo {
srom 9-10 0x190
srom >= 11 0x184
}
# 4 bytes each
# 5G low subband mcs 0-7 power-offset.
# LSB nibble: m0, MSB nibble: m7
# mcsbw205glpo mcsbw20ul5glpo mcsbw405glpo
#
u32 mcsbw205glpo {
srom 9-10 0x170
srom >= 11 0x160
}
u32 mcsbw20ul5glpo {
srom 9-10 0x174
}
u32 mcsbw405glpo {
srom 9-10 0x178
srom >= 11 0x164
}
# 4 bytes each
# 5G mid subband mcs 0-7 power-offset.
# LSB nibble: m0, MSB nibble: m7
# mcsbw205gmpo mcsbw20ul5gmpo mcsbw405gmpo
#
u32 mcsbw205gmpo {
srom 9-10 0x17C
srom >= 11 0x170
}
u32 mcsbw20ul5gmpo {
srom 9-10 0x180
}
u32 mcsbw405gmpo {
srom 9-10 0x184
srom >= 11 0x174
}
# 2 bytes total
# mcs-32 power offset for each band/subband.
# LSB nibble: 2G band, MSB nibble:
# mcs322ghpo, mcs325gmpo, mcs325glpo, mcs322gpo
#
u16 mcs32po {
srom 9-10 0x194
}
u8 measpower {
srom 8-10 0xB4 (&0xFE, >>1)
srom >= 11 0xB0 (&0xFE, >>1)
}
u8 measpower1 {
srom 8-10 0xBF (&0x7F)
srom >= 11 0xBB (&0x7F)
}
u8 measpower2 {
srom 8-10 u16 0xBE (&0x3F80, >>7)
srom >= 11 u16 0xBA (&0x3F80, >>7)
}
u16 rawtempsense {
srom 8-10 0xB4 (&0x1FF)
srom >= 11 0xB0 (&0x1FF)
}
u8 noiselvl2ga0 {
sfmt decimal
srom 8-10 0x1AB (&0x1F)
srom >= 11 0x1BD (&0x1F)
}
u8 noiselvl2ga1 {
sfmt decimal
srom 8-10 u16 0x1AA (&0x3E0, >>5)
srom >= 11 u16 0x1BC (&0x3E0, >>5)
}
u8 noiselvl2ga2 {
sfmt decimal
srom 8-10 0x1AA (&0x7C, >>2)
srom >= 11 0x1BC (&0x7C, >>2)
}
u8[4] noiselvl5ga0 {
sfmt decimal
srom >= 11 u8 0x1BF (&0x1F), u8 0x1C1 (&0x1F), u8 0x1C3 (&0x1F), u8 0x1C5 (&0x1F)
}
u8[4] noiselvl5ga1 {
sfmt decimal
srom >= 11 u16[4] 0x1BE (&0x3E0, >>5)
}
u8[4] noiselvl5ga2 {
sfmt decimal
srom >= 11 u8 0x1BE (&0x7C, >>2), u8 0x1C0 (&0x7C, >>2), u8 0x1C2 (&0x7C, >>2), u8 0x1C4 (&0x7C, >>2)
}
# paparambwver
u8 paparambwver {
sfmt decimal
srom >= 11 0x190 (&0xF0, >>4)
}
# PA parameters: 8 (sromrev == 1)
# or 9 (sromrev > 1) bytes
#
u16 pa0b0 {
sfmt decimal
srom 1-3 0x5E
srom 8-10 0xC2
}
u16 pa0b1 {
sfmt decimal
srom 1-3 0x60
srom 8-10 0xC4
}
u16 pa0b2 {
sfmt decimal
srom 1-3 0x62
srom 8-10 0xC6
}
u8 pa0itssit {
sfmt decimal
srom 1-3 0x71
srom 8-10 0xC0
}
u8 pa0maxpwr {
sfmt decimal
srom 1-3 0x69
srom 8-10 0xC1
}
u8 opo {
srom 2-3 0x79
srom 8-10 0x143
}
# 5G PA params
u16 pa1b0 {
sfmt decimal
srom 1-3 0x6A
srom 8-10 0xCC
}
u16 pa1b1 {
sfmt decimal
srom 1-3 0x6C
srom 8-10 0xCE
}
u16 pa1b2 {
sfmt decimal
srom 1-3 0x6E
srom 8-10 0xD0
}
u16 pa1lob0 {
sfmt decimal
srom 2-3 0x3C
srom 8-10 0xD2
}
u16 pa1lob1 {
sfmt decimal
srom 2-3 0x3E
srom 8-10 0xD4
}
u16 pa1lob2 {
sfmt decimal
srom 2-3 0x40
srom 8-10 0xD6
}
u16 pa1hib0 {
sfmt decimal
srom 2-3 0x42
srom 8-10 0xD8
}
u16 pa1hib1 {
sfmt decimal
srom 2-3 0x44
srom 8-10 0xDA
}
u16 pa1hib2 {
sfmt decimal
srom 2-3 0x46
srom 8-10 0xDC
}
u8 pa1itssit {
sfmt decimal
srom 1-3 0x70
srom 8-10 0xC8
}
u8 pa1maxpwr {
sfmt decimal
srom 1-3 0x68
srom 8-10 0xC9
}
u8 pa1lomaxpwr {
sfmt decimal
srom 2-3 0x3A
srom 8-10 0xCA
}
u8 pa1himaxpwr {
sfmt decimal
srom 2-3 0x3B
srom 8-10 0xCB
}
u16 pdoffset40ma0 {
srom >= 11 0xCA
}
u16 pdoffset40ma1 {
srom >= 11 0xCC
}
u16 pdoffset40ma2 {
srom >= 11 0xCE
}
u16 pdoffset80ma0 {
srom >= 11 0xD0
}
u16 pdoffset80ma1 {
srom >= 11 0xD2
}
u16 pdoffset80ma2 {
srom >= 11 0xD4
}
u8 pdoffset2g40ma0 {
srom >= 11 0xC9 (&0xF)
}
u8 pdoffset2g40ma1 {
srom >= 11 0xC9 (&0xF0, >>4)
}
u8 pdoffset2g40ma2 {
srom >= 11 0xC8 (&0xF)
}
u8 pdoffset2g40mvalid {
srom >= 11 0xC8 (&0x80, >>7)
}
# 40Mhz channel 2g/5g power offset
u16 bw40po {
srom 4-7 0x18E
srom 8 0x196
}
# 40Mhz channel dup 2g/5g power offset
u16 bwduppo {
srom 4-7 0x190
srom 8 0x198
}
# cck2g/ofdm2g/ofdm5g power offset
u16 cck2gpo {
srom 4-7 0x138
srom 8 0x140
}
u32 ofdm2gpo {
srom 4-7 0x13A
srom 8 0x142
}
u32 ofdm5gpo {
srom 4-7 0x13E
srom 8 0x146
}
u32 ofdm5glpo {
srom 4-7 0x142
srom 8 0x14A
}
u32 ofdm5ghpo {
srom 4-7 0x146
srom 8 0x14E
}
# cdd2g/5g power offset
u16 cddpo {
srom 4-7 0x18A
srom 8 0x192
}
# mcs2g power offset
u16 mcs2gpo0 {
srom 4-7 0x14A
srom 8 0x152
}
u16 mcs2gpo1 {
srom 4-7 0x14C
srom 8 0x154
}
u16 mcs2gpo2 {
srom 4-7 0x14E
srom 8 0x156
}
u16 mcs2gpo3 {
srom 4-7 0x150
srom 8 0x158
}
u16 mcs2gpo4 {
srom 4-7 0x152
srom 8 0x15A
}
u16 mcs2gpo5 {
srom 4-7 0x154
srom 8 0x15C
}
u16 mcs2gpo6 {
srom 4-7 0x156
srom 8 0x15E
}
u16 mcs2gpo7 {
srom 4-7 0x158
srom 8 0x160
}
# mcs5g low-high band power offset
u16 mcs5glpo0 {
srom 4-7 0x16A
srom 8 0x172
}
u16 mcs5glpo1 {
srom 4-7 0x16C
srom 8 0x174
}
u16 mcs5glpo2 {
srom 4-7 0x16E
srom 8 0x176
}
u16 mcs5glpo3 {
srom 4-7 0x170
srom 8 0x178
}
u16 mcs5glpo4 {
srom 4-7 0x172
srom 8 0x17A
}
u16 mcs5glpo5 {
srom 4-7 0x174
srom 8 0x17C
}
u16 mcs5glpo6 {
srom 4-7 0x176
srom 8 0x17E
}
u16 mcs5glpo7 {
srom 4-7 0x178
srom 8 0x180
}
u16 mcs5ghpo0 {
srom 4-7 0x17A
srom 8 0x182
}
u16 mcs5ghpo1 {
srom 4-7 0x17C
srom 8 0x184
}
u16 mcs5ghpo2 {
srom 4-7 0x17E
srom 8 0x186
}
u16 mcs5ghpo3 {
srom 4-7 0x180
srom 8 0x188
}
u16 mcs5ghpo4 {
srom 4-7 0x182
srom 8 0x18A
}
u16 mcs5ghpo5 {
srom 4-7 0x184
srom 8 0x18C
}
u16 mcs5ghpo6 {
srom 4-7 0x186
srom 8 0x18E
}
u16 mcs5ghpo7 {
srom 4-7 0x188
srom 8 0x190
}
# mcs5g mid band power offset
u16 mcs5gpo0 {
srom 4-7 0x15A
srom 8 0x162
}
u16 mcs5gpo1 {
srom 4-7 0x15C
srom 8 0x164
}
u16 mcs5gpo2 {
srom 4-7 0x15E
srom 8 0x166
}
u16 mcs5gpo3 {
srom 4-7 0x160
srom 8 0x168
}
u16 mcs5gpo4 {
srom 4-7 0x162
srom 8 0x16A
}
u16 mcs5gpo5 {
srom 4-7 0x164
srom 8 0x16C
}
u16 mcs5gpo6 {
srom 4-7 0x166
srom 8 0x16E
}
u16 mcs5gpo7 {
srom 4-7 0x168
srom 8 0x170
}
# stbc2g/5g power offset
u16 stbcpo {
srom 4-7 0x18C
srom 8 0x194
}
u8 regrev {
srom 3 0x78
srom 4 0x55
srom 5-7 0x47
srom 8-10 0x95
srom >= 11 0x99
}
# 4328 2G RSSI mid pt sel & board switch arch,
# 2 bytes, rev 3.
#
u8 rssismf2g {
srom 3 0x51 (&0xF)
srom 8-10 0xA5 (&0xF)
}
u8 rssismc2g {
srom 3 0x51 (&0xF0, >>4)
srom 8-10 0xA5 (&0xF0, >>4)
}
u8 rssisav2g {
srom 3 0x50 (&0x7)
srom 8-10 0xA4 (&0x7)
}
u8 bxa2g {
srom 3 0x50 (&0x18, >>3)
srom 8-10 0xA4 (&0x18, >>3)
}
# 4328 5G RSSI mid pt sel & board switch arch,
# 2 bytes, rev 3.
#
u8 rssismf5g {
srom 3 0x53 (&0xF)
srom 8-10 0xA7 (&0xF)
}
u8 rssismc5g {
srom 3 0x53 (&0xF0, >>4)
srom 8-10 0xA7 (&0xF0, >>4)
}
u8 rssisav5g {
srom 3 0x52 (&0x7)
srom 8-10 0xA6 (&0x7)
}
u8 bxa5g {
srom 3 0x52 (&0x18, >>3)
srom 8-10 0xA6 (&0x18, >>3)
}
u8 rxgainerr2ga0 {
srom 8-10 0x19B (&0x3F)
srom >= 11 0x1C7 (&0x3F)
}
u8 rxgainerr2ga1 {
srom 8-10 u16 0x19A (&0x7C0, >>6)
srom >= 11 u16 0x1C6 (&0x7C0, >>6)
}
u8 rxgainerr2ga2 {
srom 8-10 0x19A (&0xF8, >>3)
srom >= 11 0x1C6 (&0xF8, >>3)
}
u8[4] rxgainerr5ga0 {
srom >= 11 u8 0x1C9 (&0x3F), u8 0x1CB (&0x3F), u8 0x1CD (&0x3F), u8 0x1CF (&0x3F)
}
u8[4] rxgainerr5ga1 {
srom >= 11 u16[4] 0x1C8 (&0x7C0, >>6)
}
u8[4] rxgainerr5ga2 {
srom >= 11 u8 0x1C8 (&0xF8, >>3), u8 0x1CA (&0xF8, >>3), u8 0x1CC (&0xF8, >>3), u8 0x1CE (&0xF8, >>3)
}
u8 rxgainerr5gha0 {
srom 8-10 0x1A1 (&0x3F)
}
u8 rxgainerr5gha1 {
srom 8-10 u16 0x1A0 (&0x7C0, >>6)
}
u8 rxgainerr5gha2 {
srom 8-10 0x1A0 (&0xF8, >>3)
}
u8 rxgainerr5gla0 {
srom 8-10 0x19D (&0x3F)
}
u8 rxgainerr5gla1 {
srom 8-10 u16 0x19C (&0x7C0, >>6)
}
u8 rxgainerr5gla2 {
srom 8-10 0x19C (&0xF8, >>3)
}
u8 rxgainerr5gma0 {
srom 8-10 0x19F (&0x3F)
}
u8 rxgainerr5gma1 {
srom 8-10 u16 0x19E (&0x7C0, >>6)
}
u8 rxgainerr5gma2 {
srom 8-10 0x19E (&0xF8, >>3)
}
u8 rxgainerr5gua0 {
srom 8-10 0x1A3 (&0x3F)
}
u8 rxgainerr5gua1 {
srom 8-10 u16 0x1A2 (&0x7C0, >>6)
}
u8 rxgainerr5gua2 {
srom 8-10 0x1A2 (&0xF8, >>3)
}
# 4328 2G RX power offset
i8 rxpo2g {
sfmt decimal
srom 3 0x5B
srom 8-10 0xAD
}
# 4328 5G RX power offset
i8 rxpo5g {
sfmt decimal
srom 3 0x5A
srom 8-10 0xAC
}
u16 subband5gver {
srom 8-10 u8 0x1A5 (&0x7)
srom >= 11 0xD6
}
# 2 bytes
# byte1 tempthresh
# byte2 period(msb 4 bits) | hysterisis(lsb 4 bits)
#
u8 tempthresh {
srom 8-10 0xB2
srom >= 11 0xAE
}
u8 temps_period {
sfmt decimal
srom 8-10 0xBC (&0xF)
srom >= 11 0xB8 (&0xF)
}
u8 temps_hysteresis {
sfmt decimal
srom 8-10 0xBC (&0xF0, >>4)
srom >= 11 0xB8 (&0xF0, >>4)
}
u8 tempoffset {
sfmt decimal
srom 8-10 0xB3
srom >= 11 0xAF
}
u8 tempsense_slope {
srom 8-10 0xB7
srom >= 11 0xB3
}
u8 tempcorrx {
srom 8-10 0xB6 (&0xFC, >>2)
srom >= 11 0xB2 (&0xFC, >>2)
}
u8 tempsense_option {
srom 8-10 0xB6 (&0x3)
srom >= 11 0xB2 (&0x3)
}
u8 phycal_tempdelta {
sfmt decimal
srom 8-10 0xBD
srom >= 11 0xB9
}
# 4328 2G TR isolation, 1 byte
u8 tri2g {
srom 3 0x55
srom 8-10 0xA9
}
# 4328 5G TR isolation, 3 bytes
u8 tri5gl {
srom 3 0x57
srom 8-10 0xAB
}
u8 tri5g {
srom 3 0x54
srom 8-10 0xA8
}
u8 tri5gh {
srom 3 0x56
srom 8-10 0xAA
}
# phy txbf rpcalvars
u16 rpcal2g {
srom >= 11 0x16C
}
u16 rpcal5gb0 {
srom >= 11 0x16E
}
u16 rpcal5gb1 {
srom >= 11 0x17C
}
u16 rpcal5gb2 {
srom >= 11 0x17E
}
u16 rpcal5gb3 {
srom >= 11 0x18C
}
# Crystal frequency in kilohertz
u32 xtalfreq {
sfmt decimal
srom >= 11 u16 0xB4
}
# N-PHY tx power workaround
u8 txpid2ga0 {
srom 4-7 0x63
}
u8 txpid2ga1 {
srom 4-7 0x62
}
u8 txpid2ga2 {
srom 4-7 0x65
}
u8 txpid2ga3 {
srom 4-7 0x64
}
u8 txpid5ga0 {
srom 4-7 0x67
}
u8 txpid5ga1 {
srom 4-7 0x66
}
u8 txpid5ga2 {
srom 4-7 0x69
}
u8 txpid5ga3 {
srom 4-7 0x68
}
u8 txpid5gha0 {
srom 4-7 0x6F
}
u8 txpid5gha1 {
srom 4-7 0x6E
}
u8 txpid5gha2 {
srom 4-7 0x71
}
u8 txpid5gha3 {
srom 4-7 0x70
}
u8 txpid5gla0 {
srom 4-7 0x6B
}
u8 txpid5gla1 {
srom 4-7 0x6A
}
u8 txpid5gla2 {
srom 4-7 0x6D
}
u8 txpid5gla3 {
srom 4-7 0x6C
}
u16 cckPwrOffset {
srom 10 0x1B4
}
u8[6] et1macaddr {
sfmt macaddr
srom 0-2 u8 0x55, u8 0x54, u8 0x57, u8 0x56, u8 0x59, u8 0x58
}
u8 eu_edthresh2g {
srom 8 0x1A9
srom 9 0x199
srom 10 0x199
srom 11 0x1D1
}
u8 eu_edthresh5g {
srom 8 0x1A8
srom 9 0x198
srom 10 0x198
srom 11 0x1D0
}
u8 freqoffset_corr {
srom 8-10 0xB9 (&0xF)
}
u8 hw_iqcal_en {
srom 8-10 0xB9 (&0x20, >>5)
}
u8[6] il0macaddr {
sfmt macaddr
srom 0-2 u8 0x49, u8 0x48, u8 0x51, u8 0x50, u8 0x53, u8 0x52
}
u8 iqcal_swp_dis {
srom 8-10 0xB9 (&0x10, >>4)
}
u8 noisecaloffset {
srom 8-9 0x1B5
}
u8 noisecaloffset5g {
srom 8-9 0x1B4
}
u8 noiselvl5gha0 {
srom 8-10 0x1B1 (&0x1F)
}
u8 noiselvl5gha1 {
srom 8-10 u16 0x1B0 (&0x3E0, >>5)
}
u8 noiselvl5gha2 {
srom 8-10 0x1B0 (&0x7C, >>2)
}
u8 noiselvl5gla0 {
srom 8-10 0x1AD (&0x1F)
}
u8 noiselvl5gla1 {
srom 8-10 u16 0x1AC (&0x3E0, >>5)
}
u8 noiselvl5gla2 {
srom 8-10 0x1AC (&0x7C, >>2)
}
u8 noiselvl5gma0 {
srom 8-10 0x1AF (&0x1F)
}
u8 noiselvl5gma1 {
srom 8-10 u16 0x1AE (&0x3E0, >>5)
}
u8 noiselvl5gma2 {
srom 8-10 0x1AE (&0x7C, >>2)
}
u8 noiselvl5gua0 {
srom 8-10 0x1B3 (&0x1F)
}
u8 noiselvl5gua1 {
srom 8-10 u16 0x1B2 (&0x3E0, >>5)
}
u8 noiselvl5gua2 {
srom 8-10 0x1B2 (&0x7C, >>2)
}
u8 pcieingress_war {
srom 8-10 0x1A7 (&0xF)
}
u8 pdoffsetcckma0 {
srom >= 11 0x18F (&0xF)
}
u8 pdoffsetcckma1 {
srom >= 11 0x18F (&0xF0, >>4)
}
u8 pdoffsetcckma2 {
srom >= 11 0x18E (&0xF)
}
u8 sar2g {
srom 9-10 0x1A9
srom >= 11 0x1BB
}
u8 sar5g {
srom 9-10 0x1A8
srom >= 11 0x1BA
}
u32[5] swctrlmap_2g {
srom 10 u32[4] 0x1B8, u16 0x1C8
}
u16 tssifloor2g {
srom >= 11 0xBE (&0x3FF)
}
u16[4] tssifloor5g {
srom >= 11 0xC0 (&0x3FF)
}
u8 txidxcap2g {
srom >= 11 u16 0x1A8 (&0xFF0, >>4)
}
u8 txidxcap5g {
srom >= 11 u16 0x1AC (&0xFF0, >>4)
}
#
# Any variables defined within a `struct` block will be interpreted relative to
# the provided array of SPROM base addresses; this is used to define
# a common layout defined at the given base addresses.
#
# To produce SPROM variable names matching those used in the Broadcom HND
# ASCII 'key=value\0' NVRAM, the index number of the variable's
# struct instance will be appended (e.g., given a variable of noiselvl5ga, the
# generated variable instances will be named noiselvl5ga0, noiselvl5ga1,
# noiselvl5ga2, noiselvl5ga3 ...)
#
# PHY chain[0-4] parameters
struct phy_chains[] {
srom 4-7 [0x080, 0x0AE, 0x0DC, 0x10A]
srom 8-10 [0x0C0, 0x0E0, 0x100, 0x120]
srom >= 11 [0x0D8, 0x100, 0x128]
# AC-PHY PA parameters
u8[4] maxp5ga {
srom 4-7 u8 0xB
srom 8-10 u8 0x9
srom >= 11 u8 0xD, u8 0xC, u8 0xF, u8 0xE
}
u16[3] pa2ga {
srom >= 11 0x2
}
u8 maxp2ga {
srom 4-7 0x1
srom 8-10 0x1
srom >= 11 0x1
}
u16[12] pa5ga {
srom >= 11 0x10
}
# AC-PHY rxgains
u8 rxgains5ghtrelnabypa {
srom >= 11 0x8 (&0x80, >>7)
}
u8 rxgains5ghelnagaina {
srom >= 11 0x8 (&0x7)
}
u8 rxgains5gelnagaina {
srom >= 11 0xA (&0x7)
}
u8 rxgains5gmtrelnabypa {
srom >= 11 0x9 (&0x80, >>7)
}
u8 rxgains2gtrelnabypa {
srom >= 11 0xB (&0x80, >>7)
}
u8 rxgains5gmtrisoa {
srom >= 11 0x9 (&0x78, >>3)
}
u8 rxgains5gmelnagaina {
srom >= 11 0x9 (&0x7)
}
u8 rxgains2gelnagaina {
srom >= 11 0xB (&0x7)
}
u8 rxgains5gtrisoa {
srom >= 11 0xA (&0x78, >>3)
}
u8 rxgains5gtrelnabypa {
srom >= 11 0xA (&0x80, >>7)
}
u8 rxgains2gtrisoa {
srom >= 11 0xB (&0x78, >>3)
}
u8 rxgains5ghtrisoa {
srom >= 11 0x8 (&0x78, >>3)
}
# 11n PA parameters
u16 pa5gw2a {
srom 4-7 0x12
srom 8-10 0x10
}
u16 pa5ghw1a {
srom 4-7 0x20
srom 8-10 0x1A
}
u16 pa5glw3a {
srom 4-7 0x1C
}
u16 pa5glw1a {
srom 4-7 0x18
srom 8-10 0x14
}
u16 pa5gw1a {
srom 4-7 0x10
srom 8-10 0xE
}
u16 pa5glw0a {
srom 4-7 0x16
srom 8-10 0x12
}
u16 pa5gw3a {
srom 4-7 0x14
}
u16 pa5glw2a {
srom 4-7 0x1A
srom 8-10 0x16
}
u16 pa5ghw3a {
srom 4-7 0x24
}
u16 pa5gw0a {
srom 4-7 0xE
srom 8-10 0xC
}
u8 maxp5gha {
srom 4-7 0xD
srom 8-10 0xB
}
u16 pa5ghw2a {
srom 4-7 0x22
srom 8-10 0x1C
}
u16 pa5ghw0a {
srom 4-7 0x1E
srom 8-10 0x18
}
u16 pa2gw3a {
srom 4-7 0x8
}
u16 pa2gw2a {
srom 4-7 0x6
srom 8-10 0x6
}
u16 pa2gw1a {
srom 4-7 0x4
srom 8-10 0x4
}
u16 pa2gw0a {
srom 4-7 0x2
srom 8-10 0x2
}
u8 maxp5gla {
srom 4-7 0xC
srom 8-10 0xA
}
u8 itt5ga {
srom 4-7 0xA
srom 8-10 0x8
}
u8 itt2ga {
srom 4-7 0x0
srom 8-10 0x0
}
}