xref: /freebsd/sys/dev/bhnd/nvram/nvram_map (revision 09a53ad8f1318c5daae6cfb19d97f4f6459f0013)
1#-
2# Copyright (c) 2015-2016 Landon Fuller <landon@landonf.org>
3# Copyright (C) 2008-2015, Broadcom Corporation.
4# All Rights Reserved.
5#
6# The contents of this file (variable names, descriptions, and offsets) were
7# extracted or derived from Broadcom's ISC-licensed sources.
8#
9# Permission to use, copy, modify, and/or distribute this software for any
10# purpose with or without fee is hereby granted, provided that the above
11# copyright notice and this permission notice appear in all copies.
12#
13# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
14# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
15# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
16# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
17# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
18# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
19# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20#
21# $FreeBSD$
22
23#
24# NVRAM variable definitions and revision-specific SPROM offsets.
25#
26# Processed by nvram_map_gen.awk to produce bhnd_nvram_map.h
27#
28# NOTE: file was originally generated automatically by using libclang
29# to analyze and extract format information and descriptions from Broadcom's
30# available ISC-licensed CIS and SROM code and associated headers.
31#
32
33# Board Info
34#
35
36u16 boardvendor	{}			# PCI vendor ID (SoC NVRAM-only)
37u16 subvid	{ srom >= 2	0x6 }	# PCI subvendor ID
38u16 devid	{ srom >= 8	0x60 }	# PCI device ID
39
40u32 boardflags {
41	srom 1		u16 0x72
42	srom 2		u16 0x72 | u16 0x38 (<<16)
43	srom 3		u16 0x72 | u16 0x7A (<<16)
44	srom 4		0x44
45	srom 5-7	0x4A
46	srom >= 8	0x84
47}
48u32 boardflags2 {
49	srom 4		0x48
50	srom 5-7	0x4E
51	srom >= 8	0x88
52}
53u32 boardflags3 {
54	srom >= 11	0x8C
55}
56
57# Board serial number, independent of mac addr
58u16 boardnum {
59	srom 1-2	0x4C
60	srom 3		0x4E
61	srom 4		0x50
62	srom 5-7	0x56
63	srom 8-10	0x90
64	srom >= 11	0x94
65}
66
67# Board revision
68u16 boardrev {
69	srom 1-3	u8 0x5D
70	srom 4-7	0x42
71	srom >= 8	0x82
72}
73
74# Board type
75u16 boardtype {
76	srom >= 2	0x4
77}
78
79# SROM revision
80u8 sromrev {
81	srom 1-3	0x74
82	srom 4-9	0x1B6
83	srom 10		0x1CA
84	srom 11		0x1D2
85}
86
87
88# PMU Info
89#
90
91# PMU min resource mask (embedded-only).
92u32 rmin {
93	sfmt	decimal
94}
95
96# PMU min resource max (embedded-only).
97u32 rmax {
98	sfmt	decimal
99}
100
101
102# Antennas available
103u8 aa2g {
104	srom 1-3	0x5C (&0x30, >>4)
105	srom 4-7	0x5D
106	srom 8-10	0x9D
107	srom >= 11	0xA1
108}
109u8 aa5g {
110	srom 1-3	0x5C (&0xC0, >>6)
111	srom 4-7	0x5C
112	srom 8-10	0x9C
113	srom >= 11	0xA0
114}
115
116# ACPHY PA trimming parameters: 40
117u16[12] pa5gbw40a0 {
118	srom >= 11	0x110
119}
120
121# ACPHY PA trimming parameters: 80
122u16[12] pa5gbw80a0 {
123	srom >= 11	0x138
124}
125
126# ACPHY PA trimming parameters: 40/80
127u16[12] pa5gbw4080a0 {
128	srom >= 11	0x138
129}
130u16[12] pa5gbw4080a1 {
131	srom >= 11	u16 0xB6, u16 0xBC, u16 0xCE, u16 0xD4, u16[8] 0x128
132}
133
134# ACPHY PA trimming parameters: CCK
135u16[3] pa2gccka0 {
136	srom >= 11	0x102
137}
138
139# ACPHY Power-per-rate 2gpo
140u16 dot11agofdmhrbw202gpo {
141	srom >= 11	0x15C
142}
143u16 ofdmlrbw202gpo {
144	srom >= 11	0x15E
145}
146
147# ACPHY Power-per-rate 5gpo
148u32 mcsbw805glpo {
149	srom >= 11	0x168
150}
151u32 mcsbw805gmpo {
152	srom >= 11	0x178
153}
154u32 mcsbw805ghpo {
155	srom >= 11	0x188
156}
157u16 mcslr5glpo {
158	srom >= 11	0x190 (&0xFFF)
159}
160u16 mcslr5gmpo {
161	srom >= 11	0x192
162}
163u16 mcslr5ghpo {
164	srom >= 11	0x194
165}
166
167# ACPHY Power-per-rate sbpo
168u16 sb20in40hrpo {
169	srom >= 11	0x196
170}
171u16 sb20in80and160hr5glpo {
172	srom >= 11	0x198
173}
174u16 sb40and80hr5glpo {
175	srom >= 11	0x19A
176}
177u16 sb20in80and160hr5gmpo {
178	srom >= 11	0x19C
179}
180u16 sb40and80hr5gmpo {
181	srom >= 11	0x19E
182}
183u16 sb20in80and160hr5ghpo {
184	srom >= 11	0x1A0
185}
186u16 sb40and80hr5ghpo {
187	srom >= 11	0x1A2
188}
189u16 sb20in40lrpo {
190	srom >= 11	0x1A4
191}
192u16 sb20in80and160lr5glpo {
193	srom >= 11	0x1A6
194}
195u16 sb40and80lr5glpo {
196	srom >= 11	0x1A8
197}
198u16 sb20in80and160lr5gmpo {
199	srom >= 11	0x1AA
200}
201u16 sb40and80lr5gmpo {
202	srom >= 11	0x1AC
203}
204u16 sb20in80and160lr5ghpo {
205	srom >= 11	0x1AE
206}
207u16 sb40and80lr5ghpo {
208	srom >= 11	0x1B0
209}
210u16 dot11agduphrpo {
211	srom >= 11	0x1B2
212}
213u16 dot11agduplrpo {
214	srom >= 11	0x1B4
215}
216
217# Antenna gain
218u8 ag0 {
219	srom 1-3	0x75
220	srom 4-7	0x5F
221	srom 8-10	0x9F
222}
223u8 ag1 {
224	srom 1-3	0x74
225	srom 4-7	0x5E
226	srom 8-10	0x9E
227}
228u8 ag2 {
229	srom 4-7	0x61
230	srom 8-10	0xA1
231}
232u8 ag3 {
233	srom 4-7	0x60
234	srom 8-10	0xA0
235}
236
237u8 agbg0 {
238	srom >= 11	0xA2
239}
240u8 agbg1 {
241	srom >= 11	0xA3
242}
243u8 agbg2 {
244	srom >= 11	0xA4
245}
246u8 aga0 {
247	srom >= 11	0xA5
248}
249u8 aga1 {
250	srom >= 11	0xA6
251}
252u8 aga2 {
253	srom >= 11	0xA7
254}
255
256# Default country code (sromrev == 1)
257u8 cc {
258	srom 1		0x5C (&0xF)
259}
260
261# 2 bytes each
262# CCK Power offsets for 20 MHz rates (11, 5.5, 2, 1Mbps)
263# cckbw202gpo cckbw20ul2gpo
264#
265u16 cckbw202gpo {
266	srom 9-10	0x140
267	srom >= 11	0x150
268}
269u16 cckbw20ul2gpo {
270	srom 9-10	0x142
271	srom >= 11	0x152
272}
273
274# Country code (2 bytes ascii + 1 byte cctl)
275# in rev 2
276#
277char[2] ccode {
278	sfmt	ccode
279	srom 0-3	0x76
280	srom 4		0x52
281	srom 5-7	0x44
282	srom 8-10	0x92
283	srom >= 11	0x96
284}
285
286# 2 byte; txchain, rxchain
287u8 txchain {
288	all1	ignore
289	srom 4-7	0x7B (&0xF)
290	srom 8-10	0xA3 (&0xF)
291	srom >= 11	0xA9 (&0xF)
292}
293u8 rxchain {
294	all1	ignore
295	srom 4-7	0x7B (&0xF0, >>4)
296	srom 8-10	0xA3 (&0xF0, >>4)
297	srom >= 11	0xA9 (&0xF0, >>4)
298}
299u16 antswitch {
300	all1	ignore
301	srom 4-7	u8 0x7A
302	srom 8-10	u8 0xA2
303	srom >= 11	u8 0xA8
304}
305
306u8 elna2g {
307	srom 8-10	0xBB
308}
309
310u8 elna5g {
311	srom 8-10	0xBA
312}
313
314# 11n front-end specification
315u8 antswctl2g {
316	srom 8-10	0xAE (&0xF8, >>3)
317}
318u8 triso2g {
319	srom 8-10	0xAE (&0x7)
320}
321u8 pdetrange2g {
322	srom 8-10	0xAF (&0xF8, >>3)
323}
324u8 extpagain2g {
325	srom 8-10	0xAF (&0x6, >>1)
326}
327u8 tssipos2g {
328	srom 8-10	0xAF (&0x1)
329}
330u8 antswctl5g {
331	srom 8-10	0xB0 (&0xF8, >>3)
332}
333u8 triso5g {
334	srom 8-10	0xB0 (&0x7)
335}
336u8 pdetrange5g {
337	srom 8-10	0xB1 (&0xF8, >>3)
338}
339u8 extpagain5g {
340	srom 8-10	0xB1 (&0x6, >>1)
341}
342u8 tssipos5g {
343	srom 8-10	0xB1 (&0x1)
344}
345
346# FEM config
347u8 femctrl {
348	sfmt	decimal
349	srom >= 11	0xAA (&0xF8, >>3)
350}
351u8 papdcap2g {
352	sfmt	decimal
353	srom >= 11	0xAA (&0x4, >>2)
354}
355u8 tworangetssi2g {
356	sfmt	decimal
357	srom >= 11	0xAA (&0x2, >>1)
358}
359u8 pdgain2g {
360	sfmt	decimal
361	srom >= 11	u16 0xAA (&0x1F0, >>4)
362}
363u8 epagain2g {
364	sfmt	decimal
365	srom >= 11	0xAB (&0xE, >>1)
366}
367u8 tssiposslope2g {
368	sfmt	decimal
369	srom >= 11	0xAB (&0x1)
370}
371u8 gainctrlsph {
372	sfmt	decimal
373	srom >= 11	0xAC (&0xF8, >>3)
374}
375u8 papdcap5g {
376	sfmt	decimal
377	srom >= 11	0xAC (&0x4, >>2)
378}
379u8 tworangetssi5g {
380	sfmt	decimal
381	srom >= 11	0xAC (&0x2, >>1)
382}
383u8 pdgain5g {
384	sfmt	decimal
385	srom >= 11	u16 0xAC (&0x1F0, >>4)
386}
387u8 epagain5g {
388	sfmt	decimal
389	srom >= 11	0xAD (&0xE, >>1)
390}
391u8 tssiposslope5g {
392	sfmt	decimal
393	srom >= 11	0xAD (&0x1)
394}
395
396# LED duty cycle
397u8[2] leddc {
398	sfmt	led_dc
399	all1	ignore
400	srom 3		0x7C
401	srom 4		0x5A
402	srom 5-7	0x5A
403	srom 8-10	0x9A
404	srom >= 11	0x9E
405}
406
407# LED set
408u8 ledbh0 {
409	all1	ignore
410	srom 1-3	0x65
411	srom 4		0x57
412	srom 5-7	0x77
413	srom 8-10	0x97
414	srom >= 11	0x9B
415}
416u8 ledbh1 {
417	all1	ignore
418	srom 1-3	0x64
419	srom 4		0x56
420	srom 5-7	0x76
421	srom 8-10	0x96
422	srom >= 11	0x9A
423}
424u8 ledbh2 {
425	all1	ignore
426	srom 1-3	0x67
427	srom 4		0x59
428	srom 5-7	0x79
429	srom 8-10	0x99
430	srom >= 11	0x9D
431}
432u8 ledbh3 {
433	all1	ignore
434	srom 1-3	0x66
435	srom 4		0x58
436	srom 5-7	0x78
437	srom 8-10	0x98
438	srom >= 11	0x9C
439}
440
441# 2 bytes total
442# Additional power offset for Legacy Dup40 transmissions.
443# Applied in addition to legofdmbw20ulXpo, X=2g, 5gl, 5gm, or 5gh.
444# LSB nibble: 2G band, MSB nibble: 5G band high subband.
445# leg40dup5ghpo, leg40dup5gmpo, leg40dup5glpo, leg40dup2gpo
446#
447u16 legofdm40duppo {
448	srom 9-10	0x196
449}
450
451# 4 bytes each
452# OFDM power offsets for 20 MHz Legacy rates
453# (54, 48, 36, 24, 18, 12, 9, 6 Mbps)
454# legofdmbw202gpo  legofdmbw20ul2gpo
455#
456u32 legofdmbw202gpo {
457	srom 9-10	0x144
458}
459u32 legofdmbw20ul2gpo {
460	srom 9-10	0x148
461}
462
463# 4 bytes each
464# 5G band: OFDM power offsets for 20 MHz Legacy rates
465# (54, 48, 36, 24, 18, 12, 9, 6 Mbps)
466# low subband : legofdmbw205glpo  legofdmbw20ul2glpo
467# mid subband :legofdmbw205gmpo  legofdmbw20ul2gmpo
468# high subband :legofdmbw205ghpo  legofdmbw20ul2ghpo
469#
470u32 legofdmbw205glpo {
471	srom 9-10	0x14C
472}
473u32 legofdmbw20ul5glpo {
474	srom 9-10	0x150
475}
476u32 legofdmbw205gmpo {
477	srom 9-10	0x154
478}
479u32 legofdmbw20ul5gmpo {
480	srom 9-10	0x158
481}
482u32 legofdmbw205ghpo {
483	srom 9-10	0x15C
484}
485u32 legofdmbw20ul5ghpo {
486	srom 9-10	0x160
487}
488
489# mac addr override for the standard CIS LAN_NID
490u8[6] macaddr {
491	sfmt	macaddr
492	srom 3		u8 0x4B, u8 0x4A, u8 0x4D, u8 0x4C, u8 0x4F, u8 0x4E
493	srom 4		u8 0x4D, u8 0x4C, u8 0x4F, u8 0x4E, u8 0x51, u8 0x50
494	srom 5-7	u8 0x53, u8 0x52, u8 0x55, u8 0x54, u8 0x57, u8 0x56
495	srom 8-10	u8 0x8D, u8 0x8C, u8 0x8F, u8 0x8E, u8 0x91, u8 0x90
496	srom >= 11	u8 0x91, u8 0x90, u8 0x93, u8 0x92, u8 0x95, u8 0x94
497}
498
499# 4 bytes each
500# mcs 0-7  power-offset. LSB nibble: m0, MSB nibble: m7
501# mcsbw202gpo  mcsbw20ul2gpo mcsbw402gpo
502#
503u32 mcsbw202gpo {
504	srom 9-10	0x164
505	srom >= 11	0x154
506}
507u32 mcsbw20ul2gpo {
508	srom 9-10	0x168
509}
510u32 mcsbw402gpo {
511	srom 9-10	0x16C
512	srom >= 11	0x158
513}
514
515# 4 bytes each
516# 5G high subband mcs 0-7 power-offset.
517# LSB nibble: m0, MSB nibble: m7
518# mcsbw205ghpo  mcsbw20ul5ghpo mcsbw405ghpo
519#
520u32 mcsbw205ghpo {
521	srom 9-10	0x188
522	srom >= 11	0x180
523}
524u32 mcsbw20ul5ghpo {
525	srom 9-10	0x18C
526}
527u32 mcsbw405ghpo {
528	srom 9-10	0x190
529	srom >= 11	0x184
530}
531
532# 4 bytes each
533# 5G low subband mcs 0-7 power-offset.
534# LSB nibble: m0, MSB nibble: m7
535# mcsbw205glpo  mcsbw20ul5glpo mcsbw405glpo
536#
537u32 mcsbw205glpo {
538	srom 9-10	0x170
539	srom >= 11	0x160
540}
541u32 mcsbw20ul5glpo {
542	srom 9-10	0x174
543}
544u32 mcsbw405glpo {
545	srom 9-10	0x178
546	srom >= 11	0x164
547}
548
549# 4 bytes each
550# 5G mid subband mcs 0-7 power-offset.
551# LSB nibble: m0, MSB nibble: m7
552# mcsbw205gmpo  mcsbw20ul5gmpo mcsbw405gmpo
553#
554u32 mcsbw205gmpo {
555	srom 9-10	0x17C
556	srom >= 11	0x170
557}
558u32 mcsbw20ul5gmpo {
559	srom 9-10	0x180
560}
561u32 mcsbw405gmpo {
562	srom 9-10	0x184
563	srom >= 11	0x174
564}
565
566# 2 bytes total
567# mcs-32 power offset for each band/subband.
568# LSB nibble: 2G band, MSB nibble:
569# mcs322ghpo, mcs325gmpo, mcs325glpo, mcs322gpo
570#
571u16 mcs32po {
572	srom 9-10	0x194
573}
574
575u8 measpower {
576	srom 8-10	0xB4 (&0xFE, >>1)
577	srom >= 11	0xB0 (&0xFE, >>1)
578}
579u8 measpower1 {
580	srom 8-10	0xBF (&0x7F)
581	srom >= 11	0xBB (&0x7F)
582}
583u8 measpower2 {
584	srom 8-10	u16 0xBE (&0x3F80, >>7)
585	srom >= 11	u16 0xBA (&0x3F80, >>7)
586}
587u16 rawtempsense {
588	srom 8-10	0xB4 (&0x1FF)
589	srom >= 11	0xB0 (&0x1FF)
590}
591
592u8 noiselvl2ga0 {
593	sfmt	decimal
594	srom 8-10	0x1AB (&0x1F)
595	srom >= 11	0x1BD (&0x1F)
596}
597u8 noiselvl2ga1 {
598	sfmt	decimal
599	srom 8-10	u16 0x1AA (&0x3E0, >>5)
600	srom >= 11	u16 0x1BC (&0x3E0, >>5)
601}
602u8 noiselvl2ga2 {
603	sfmt	decimal
604	srom 8-10	0x1AA (&0x7C, >>2)
605	srom >= 11	0x1BC (&0x7C, >>2)
606}
607u8[4] noiselvl5ga0 {
608	sfmt	decimal
609	srom >= 11	u8 0x1BF (&0x1F), u8 0x1C1 (&0x1F), u8 0x1C3 (&0x1F), u8 0x1C5 (&0x1F)
610}
611u8[4] noiselvl5ga1 {
612	sfmt	decimal
613	srom >= 11	u16[4] 0x1BE (&0x3E0, >>5)
614}
615u8[4] noiselvl5ga2 {
616	sfmt	decimal
617	srom >= 11	u8 0x1BE (&0x7C, >>2), u8 0x1C0 (&0x7C, >>2), u8 0x1C2 (&0x7C, >>2), u8 0x1C4 (&0x7C, >>2)
618}
619
620# paparambwver
621u8 paparambwver {
622	sfmt	decimal
623	srom >= 11	0x190 (&0xF0, >>4)
624}
625
626# PA parameters: 8 (sromrev == 1)
627# or 9 (sromrev > 1) bytes
628#
629u16 pa0b0 {
630	sfmt	decimal
631	srom 1-3	0x5E
632	srom 8-10	0xC2
633}
634u16 pa0b1 {
635	sfmt	decimal
636	srom 1-3	0x60
637	srom 8-10	0xC4
638}
639u16 pa0b2 {
640	sfmt	decimal
641	srom 1-3	0x62
642	srom 8-10	0xC6
643}
644u8 pa0itssit {
645	sfmt	decimal
646	srom 1-3	0x71
647	srom 8-10	0xC0
648}
649u8 pa0maxpwr {
650	sfmt	decimal
651	srom 1-3	0x69
652	srom 8-10	0xC1
653}
654u8 opo {
655	srom 2-3	0x79
656	srom 8-10	0x143
657}
658
659# 5G PA params
660u16 pa1b0 {
661	sfmt	decimal
662	srom 1-3	0x6A
663	srom 8-10	0xCC
664}
665u16 pa1b1 {
666	sfmt	decimal
667	srom 1-3	0x6C
668	srom 8-10	0xCE
669}
670u16 pa1b2 {
671	sfmt	decimal
672	srom 1-3	0x6E
673	srom 8-10	0xD0
674}
675u16 pa1lob0 {
676	sfmt	decimal
677	srom 2-3	0x3C
678	srom 8-10	0xD2
679}
680u16 pa1lob1 {
681	sfmt	decimal
682	srom 2-3	0x3E
683	srom 8-10	0xD4
684}
685u16 pa1lob2 {
686	sfmt	decimal
687	srom 2-3	0x40
688	srom 8-10	0xD6
689}
690u16 pa1hib0 {
691	sfmt	decimal
692	srom 2-3	0x42
693	srom 8-10	0xD8
694}
695u16 pa1hib1 {
696	sfmt	decimal
697	srom 2-3	0x44
698	srom 8-10	0xDA
699}
700u16 pa1hib2 {
701	sfmt	decimal
702	srom 2-3	0x46
703	srom 8-10	0xDC
704}
705u8 pa1itssit {
706	sfmt	decimal
707	srom 1-3	0x70
708	srom 8-10	0xC8
709}
710u8 pa1maxpwr {
711	sfmt	decimal
712	srom 1-3	0x68
713	srom 8-10	0xC9
714}
715u8 pa1lomaxpwr {
716	sfmt	decimal
717	srom 2-3	0x3A
718	srom 8-10	0xCA
719}
720u8 pa1himaxpwr {
721	sfmt	decimal
722	srom 2-3	0x3B
723	srom 8-10	0xCB
724}
725
726u16 pdoffset40ma0 {
727	srom >= 11	0xCA
728}
729u16 pdoffset40ma1 {
730	srom >= 11	0xCC
731}
732u16 pdoffset40ma2 {
733	srom >= 11	0xCE
734}
735u16 pdoffset80ma0 {
736	srom >= 11	0xD0
737}
738u16 pdoffset80ma1 {
739	srom >= 11	0xD2
740}
741u16 pdoffset80ma2 {
742	srom >= 11	0xD4
743}
744
745u8 pdoffset2g40ma0 {
746	srom >= 11	0xC9 (&0xF)
747}
748u8 pdoffset2g40ma1 {
749	srom >= 11	0xC9 (&0xF0, >>4)
750}
751u8 pdoffset2g40ma2 {
752	srom >= 11	0xC8 (&0xF)
753}
754u8 pdoffset2g40mvalid {
755	srom >= 11	0xC8 (&0x80, >>7)
756}
757
758# 40Mhz channel 2g/5g power offset
759u16 bw40po {
760	srom 4-7	0x18E
761	srom 8	0x196
762}
763
764# 40Mhz channel dup 2g/5g power offset
765u16 bwduppo {
766	srom 4-7	0x190
767	srom 8	0x198
768}
769
770# cck2g/ofdm2g/ofdm5g power offset
771u16 cck2gpo {
772	srom 4-7	0x138
773	srom 8		0x140
774}
775u32 ofdm2gpo {
776	srom 4-7	0x13A
777	srom 8		0x142
778}
779u32 ofdm5gpo {
780	srom 4-7	0x13E
781	srom 8		0x146
782}
783u32 ofdm5glpo {
784	srom 4-7	0x142
785	srom 8		0x14A
786}
787u32 ofdm5ghpo {
788	srom 4-7	0x146
789	srom 8		0x14E
790}
791
792# cdd2g/5g power offset
793u16 cddpo {
794	srom 4-7	0x18A
795	srom 8		0x192
796}
797
798# mcs2g power offset
799u16 mcs2gpo0 {
800	srom 4-7	0x14A
801	srom 8		0x152
802}
803u16 mcs2gpo1 {
804	srom 4-7	0x14C
805	srom 8		0x154
806}
807u16 mcs2gpo2 {
808	srom 4-7	0x14E
809	srom 8		0x156
810}
811u16 mcs2gpo3 {
812	srom 4-7	0x150
813	srom 8		0x158
814}
815u16 mcs2gpo4 {
816	srom 4-7	0x152
817	srom 8		0x15A
818}
819u16 mcs2gpo5 {
820	srom 4-7	0x154
821	srom 8		0x15C
822}
823u16 mcs2gpo6 {
824	srom 4-7	0x156
825	srom 8		0x15E
826}
827u16 mcs2gpo7 {
828	srom 4-7	0x158
829	srom 8		0x160
830}
831
832# mcs5g low-high band power offset
833u16 mcs5glpo0 {
834	srom 4-7	0x16A
835	srom 8		0x172
836}
837u16 mcs5glpo1 {
838	srom 4-7	0x16C
839	srom 8		0x174
840}
841u16 mcs5glpo2 {
842	srom 4-7	0x16E
843	srom 8		0x176
844}
845u16 mcs5glpo3 {
846	srom 4-7	0x170
847	srom 8		0x178
848}
849u16 mcs5glpo4 {
850	srom 4-7	0x172
851	srom 8		0x17A
852}
853u16 mcs5glpo5 {
854	srom 4-7	0x174
855	srom 8		0x17C
856}
857u16 mcs5glpo6 {
858	srom 4-7	0x176
859	srom 8		0x17E
860}
861u16 mcs5glpo7 {
862	srom 4-7	0x178
863	srom 8		0x180
864}
865u16 mcs5ghpo0 {
866	srom 4-7	0x17A
867	srom 8		0x182
868}
869u16 mcs5ghpo1 {
870	srom 4-7	0x17C
871	srom 8		0x184
872}
873u16 mcs5ghpo2 {
874	srom 4-7	0x17E
875	srom 8		0x186
876}
877u16 mcs5ghpo3 {
878	srom 4-7	0x180
879	srom 8		0x188
880}
881u16 mcs5ghpo4 {
882	srom 4-7	0x182
883	srom 8		0x18A
884}
885u16 mcs5ghpo5 {
886	srom 4-7	0x184
887	srom 8		0x18C
888}
889u16 mcs5ghpo6 {
890	srom 4-7	0x186
891	srom 8		0x18E
892}
893u16 mcs5ghpo7 {
894	srom 4-7	0x188
895	srom 8		0x190
896}
897
898# mcs5g mid band power offset
899u16 mcs5gpo0 {
900	srom 4-7	0x15A
901	srom 8		0x162
902}
903u16 mcs5gpo1 {
904	srom 4-7	0x15C
905	srom 8		0x164
906}
907u16 mcs5gpo2 {
908	srom 4-7	0x15E
909	srom 8		0x166
910}
911u16 mcs5gpo3 {
912	srom 4-7	0x160
913	srom 8		0x168
914}
915u16 mcs5gpo4 {
916	srom 4-7	0x162
917	srom 8		0x16A
918}
919u16 mcs5gpo5 {
920	srom 4-7	0x164
921	srom 8		0x16C
922}
923u16 mcs5gpo6 {
924	srom 4-7	0x166
925	srom 8		0x16E
926}
927u16 mcs5gpo7 {
928	srom 4-7	0x168
929	srom 8		0x170
930}
931
932# stbc2g/5g power offset
933u16 stbcpo {
934	srom 4-7	0x18C
935	srom 8		0x194
936}
937
938u8 regrev {
939	srom 3		0x78
940	srom 4		0x55
941	srom 5-7	0x47
942	srom 8-10	0x95
943	srom >= 11	0x99
944}
945
946# 4328 2G RSSI mid pt sel & board switch arch,
947# 2 bytes, rev 3.
948#
949u8 rssismf2g {
950	srom 3		0x51 (&0xF)
951	srom 8-10	0xA5 (&0xF)
952}
953u8 rssismc2g {
954	srom 3		0x51 (&0xF0, >>4)
955	srom 8-10	0xA5 (&0xF0, >>4)
956}
957u8 rssisav2g {
958	srom 3		0x50 (&0x7)
959	srom 8-10	0xA4 (&0x7)
960}
961u8 bxa2g {
962	srom 3		0x50 (&0x18, >>3)
963	srom 8-10	0xA4 (&0x18, >>3)
964}
965
966# 4328 5G RSSI mid pt sel & board switch arch,
967# 2 bytes, rev 3.
968#
969u8 rssismf5g {
970	srom 3		0x53 (&0xF)
971	srom 8-10	0xA7 (&0xF)
972}
973u8 rssismc5g {
974	srom 3		0x53 (&0xF0, >>4)
975	srom 8-10	0xA7 (&0xF0, >>4)
976}
977u8 rssisav5g {
978	srom 3		0x52 (&0x7)
979	srom 8-10	0xA6 (&0x7)
980}
981u8 bxa5g {
982	srom 3		0x52 (&0x18, >>3)
983	srom 8-10	0xA6 (&0x18, >>3)
984}
985
986u8 rxgainerr2ga0 {
987	srom 8-10	0x19B (&0x3F)
988	srom >= 11	0x1C7 (&0x3F)
989}
990u8 rxgainerr2ga1 {
991	srom 8-10	u16 0x19A (&0x7C0, >>6)
992	srom >= 11	u16 0x1C6 (&0x7C0, >>6)
993}
994u8 rxgainerr2ga2 {
995	srom 8-10	0x19A (&0xF8, >>3)
996	srom >= 11	0x1C6 (&0xF8, >>3)
997}
998u8[4] rxgainerr5ga0 {
999	srom >= 11	u8 0x1C9 (&0x3F), u8 0x1CB (&0x3F), u8 0x1CD (&0x3F), u8 0x1CF (&0x3F)
1000}
1001u8[4] rxgainerr5ga1 {
1002	srom >= 11	u16[4] 0x1C8 (&0x7C0, >>6)
1003}
1004u8[4] rxgainerr5ga2 {
1005	srom >= 11	u8 0x1C8 (&0xF8, >>3), u8 0x1CA (&0xF8, >>3), u8 0x1CC (&0xF8, >>3), u8 0x1CE (&0xF8, >>3)
1006}
1007u8 rxgainerr5gha0 {
1008	srom 8-10	0x1A1 (&0x3F)
1009}
1010u8 rxgainerr5gha1 {
1011	srom 8-10	u16 0x1A0 (&0x7C0, >>6)
1012}
1013u8 rxgainerr5gha2 {
1014	srom 8-10	0x1A0 (&0xF8, >>3)
1015}
1016u8 rxgainerr5gla0 {
1017	srom 8-10	0x19D (&0x3F)
1018}
1019u8 rxgainerr5gla1 {
1020	srom 8-10	u16 0x19C (&0x7C0, >>6)
1021}
1022u8 rxgainerr5gla2 {
1023	srom 8-10	0x19C (&0xF8, >>3)
1024}
1025u8 rxgainerr5gma0 {
1026	srom 8-10	0x19F (&0x3F)
1027}
1028u8 rxgainerr5gma1 {
1029	srom 8-10	u16 0x19E (&0x7C0, >>6)
1030}
1031u8 rxgainerr5gma2 {
1032	srom 8-10	0x19E (&0xF8, >>3)
1033}
1034u8 rxgainerr5gua0 {
1035	srom 8-10	0x1A3 (&0x3F)
1036}
1037u8 rxgainerr5gua1 {
1038	srom 8-10	u16 0x1A2 (&0x7C0, >>6)
1039}
1040u8 rxgainerr5gua2 {
1041	srom 8-10	0x1A2 (&0xF8, >>3)
1042}
1043
1044# 4328 2G RX power offset
1045i8 rxpo2g {
1046	sfmt	decimal
1047	srom 3		0x5B
1048	srom 8-10	0xAD
1049}
1050
1051# 4328 5G RX power offset
1052i8 rxpo5g {
1053	sfmt	decimal
1054	srom 3		0x5A
1055	srom 8-10	0xAC
1056}
1057
1058u16 subband5gver {
1059	srom 8-10	u8 0x1A5 (&0x7)
1060	srom >= 11	0xD6
1061}
1062
1063# 2 bytes
1064# byte1 tempthresh
1065# byte2 period(msb 4 bits) | hysterisis(lsb 4 bits)
1066#
1067u8 tempthresh {
1068	srom 8-10	0xB2
1069	srom >= 11	0xAE
1070}
1071u8 temps_period {
1072	sfmt	decimal
1073	srom 8-10	0xBC (&0xF)
1074	srom >= 11	0xB8 (&0xF)
1075}
1076u8 temps_hysteresis {
1077	sfmt	decimal
1078	srom 8-10	0xBC (&0xF0, >>4)
1079	srom >= 11	0xB8 (&0xF0, >>4)
1080}
1081u8 tempoffset {
1082	sfmt	decimal
1083	srom 8-10	0xB3
1084	srom >= 11	0xAF
1085}
1086u8 tempsense_slope {
1087	srom 8-10	0xB7
1088	srom >= 11	0xB3
1089}
1090u8 tempcorrx {
1091	srom 8-10	0xB6 (&0xFC, >>2)
1092	srom >= 11	0xB2 (&0xFC, >>2)
1093}
1094u8 tempsense_option {
1095	srom 8-10	0xB6 (&0x3)
1096	srom >= 11	0xB2 (&0x3)
1097}
1098u8 phycal_tempdelta {
1099	sfmt	decimal
1100	srom 8-10	0xBD
1101	srom >= 11	0xB9
1102}
1103
1104# 4328 2G TR isolation, 1 byte
1105u8 tri2g {
1106	srom 3		0x55
1107	srom 8-10	0xA9
1108}
1109
1110# 4328 5G TR isolation, 3 bytes
1111u8 tri5gl {
1112	srom 3		0x57
1113	srom 8-10	0xAB
1114}
1115u8 tri5g {
1116	srom 3		0x54
1117	srom 8-10	0xA8
1118}
1119u8 tri5gh {
1120	srom 3		0x56
1121	srom 8-10	0xAA
1122}
1123
1124# phy txbf rpcalvars
1125u16 rpcal2g {
1126	srom >= 11	0x16C
1127}
1128u16 rpcal5gb0 {
1129	srom >= 11	0x16E
1130}
1131u16 rpcal5gb1 {
1132	srom >= 11	0x17C
1133}
1134u16 rpcal5gb2 {
1135	srom >= 11	0x17E
1136}
1137u16 rpcal5gb3 {
1138	srom >= 11	0x18C
1139}
1140
1141# Crystal frequency in kilohertz
1142u32 xtalfreq {
1143	sfmt	decimal
1144	srom >= 11	u16 0xB4
1145}
1146
1147# N-PHY tx power workaround
1148u8 txpid2ga0 {
1149	srom 4-7	0x63
1150}
1151u8 txpid2ga1 {
1152	srom 4-7	0x62
1153}
1154u8 txpid2ga2 {
1155	srom 4-7	0x65
1156}
1157u8 txpid2ga3 {
1158	srom 4-7	0x64
1159}
1160u8 txpid5ga0 {
1161	srom 4-7	0x67
1162}
1163u8 txpid5ga1 {
1164	srom 4-7	0x66
1165}
1166u8 txpid5ga2 {
1167	srom 4-7	0x69
1168}
1169u8 txpid5ga3 {
1170	srom 4-7	0x68
1171}
1172u8 txpid5gha0 {
1173	srom 4-7	0x6F
1174}
1175u8 txpid5gha1 {
1176	srom 4-7	0x6E
1177}
1178u8 txpid5gha2 {
1179	srom 4-7	0x71
1180}
1181u8 txpid5gha3 {
1182	srom 4-7	0x70
1183}
1184u8 txpid5gla0 {
1185	srom 4-7	0x6B
1186}
1187u8 txpid5gla1 {
1188	srom 4-7	0x6A
1189}
1190u8 txpid5gla2 {
1191	srom 4-7	0x6D
1192}
1193u8 txpid5gla3 {
1194	srom 4-7	0x6C
1195}
1196
1197u16 cckPwrOffset {
1198	srom 10	0x1B4
1199}
1200u8[6] et1macaddr {
1201	sfmt	macaddr
1202	srom 0-2	u8 0x55, u8 0x54, u8 0x57, u8 0x56, u8 0x59, u8 0x58
1203}
1204u8 eu_edthresh2g {
1205	srom 8		0x1A9
1206	srom 9		0x199
1207	srom 10		0x199
1208	srom 11		0x1D1
1209}
1210u8 eu_edthresh5g {
1211	srom 8		0x1A8
1212	srom 9		0x198
1213	srom 10		0x198
1214	srom 11		0x1D0
1215}
1216u8 freqoffset_corr {
1217	srom 8-10	0xB9 (&0xF)
1218}
1219u8 hw_iqcal_en {
1220	srom 8-10	0xB9 (&0x20, >>5)
1221}
1222u8[6] il0macaddr {
1223	sfmt	macaddr
1224	srom 0-2	u8 0x49, u8 0x48, u8 0x51, u8 0x50, u8 0x53, u8 0x52
1225}
1226u8 iqcal_swp_dis {
1227	srom 8-10	0xB9 (&0x10, >>4)
1228}
1229
1230u8 noisecaloffset {
1231	srom 8-9	0x1B5
1232}
1233u8 noisecaloffset5g {
1234	srom 8-9	0x1B4
1235}
1236u8 noiselvl5gha0 {
1237	srom 8-10	0x1B1 (&0x1F)
1238}
1239u8 noiselvl5gha1 {
1240	srom 8-10	u16 0x1B0 (&0x3E0, >>5)
1241}
1242u8 noiselvl5gha2 {
1243	srom 8-10	0x1B0 (&0x7C, >>2)
1244}
1245u8 noiselvl5gla0 {
1246	srom 8-10	0x1AD (&0x1F)
1247}
1248u8 noiselvl5gla1 {
1249	srom 8-10	u16 0x1AC (&0x3E0, >>5)
1250}
1251u8 noiselvl5gla2 {
1252	srom 8-10	0x1AC (&0x7C, >>2)
1253}
1254u8 noiselvl5gma0 {
1255	srom 8-10	0x1AF (&0x1F)
1256}
1257u8 noiselvl5gma1 {
1258	srom 8-10	u16 0x1AE (&0x3E0, >>5)
1259}
1260u8 noiselvl5gma2 {
1261	srom 8-10	0x1AE (&0x7C, >>2)
1262}
1263u8 noiselvl5gua0 {
1264	srom 8-10	0x1B3 (&0x1F)
1265}
1266u8 noiselvl5gua1 {
1267	srom 8-10	u16 0x1B2 (&0x3E0, >>5)
1268}
1269u8 noiselvl5gua2 {
1270	srom 8-10	0x1B2 (&0x7C, >>2)
1271}
1272
1273u8 pcieingress_war {
1274	srom 8-10	0x1A7 (&0xF)
1275}
1276
1277u8 pdoffsetcckma0 {
1278	srom >= 11	0x18F (&0xF)
1279}
1280u8 pdoffsetcckma1 {
1281	srom >= 11	0x18F (&0xF0, >>4)
1282}
1283u8 pdoffsetcckma2 {
1284	srom >= 11	0x18E (&0xF)
1285}
1286
1287u8 sar2g {
1288	srom 9-10	0x1A9
1289	srom >= 11	0x1BB
1290}
1291u8 sar5g {
1292	srom 9-10	0x1A8
1293	srom >= 11	0x1BA
1294}
1295
1296u32[5] swctrlmap_2g {
1297	srom 10	u32[4] 0x1B8, u16 0x1C8
1298}
1299
1300u16 tssifloor2g {
1301	srom >= 11	0xBE (&0x3FF)
1302}
1303u16[4] tssifloor5g {
1304	srom >= 11	0xC0 (&0x3FF)
1305}
1306
1307u8 txidxcap2g {
1308	srom >= 11	u16 0x1A8 (&0xFF0, >>4)
1309}
1310u8 txidxcap5g {
1311	srom >= 11	u16 0x1AC (&0xFF0, >>4)
1312}
1313
1314#
1315# Any variables defined within a `struct` block will be interpreted relative to
1316# the provided array of SPROM base addresses; this is used to define
1317# a common layout defined at the given base addresses.
1318#
1319# To produce SPROM variable names matching those used in the Broadcom HND
1320# ASCII 'key=value\0' NVRAM, the index number of the variable's
1321# struct instance will be appended (e.g., given a variable of noiselvl5ga, the
1322# generated variable instances will be named noiselvl5ga0, noiselvl5ga1,
1323# noiselvl5ga2, noiselvl5ga3 ...)
1324#
1325
1326# PHY chain[0-4] parameters
1327struct phy_chains[] {
1328	srom 4-7	[0x080, 0x0AE, 0x0DC, 0x10A]
1329	srom 8-10	[0x0C0, 0x0E0, 0x100, 0x120]
1330	srom >= 11	[0x0D8, 0x100, 0x128]
1331
1332	# AC-PHY PA parameters
1333	u8[4] maxp5ga {
1334		srom 4-7	u8 0xB
1335		srom 8-10	u8 0x9
1336		srom >= 11	u8 0xD, u8 0xC, u8 0xF, u8 0xE
1337	}
1338	u16[3] pa2ga {
1339		srom >= 11	0x2
1340	}
1341	u8 maxp2ga {
1342		srom 4-7	0x1
1343		srom 8-10	0x1
1344		srom >= 11	0x1
1345	}
1346	u16[12] pa5ga {
1347		srom >= 11	0x10
1348	}
1349
1350	# AC-PHY rxgains
1351	u8 rxgains5ghtrelnabypa {
1352		srom >= 11	0x8 (&0x80, >>7)
1353	}
1354	u8 rxgains5ghelnagaina {
1355		srom >= 11	0x8 (&0x7)
1356	}
1357	u8 rxgains5gelnagaina {
1358		srom >= 11	0xA (&0x7)
1359	}
1360	u8 rxgains5gmtrelnabypa {
1361		srom >= 11	0x9 (&0x80, >>7)
1362	}
1363	u8 rxgains2gtrelnabypa {
1364		srom >= 11	0xB (&0x80, >>7)
1365	}
1366	u8 rxgains5gmtrisoa {
1367		srom >= 11	0x9 (&0x78, >>3)
1368	}
1369	u8 rxgains5gmelnagaina {
1370		srom >= 11	0x9 (&0x7)
1371	}
1372	u8 rxgains2gelnagaina {
1373		srom >= 11	0xB (&0x7)
1374	}
1375	u8 rxgains5gtrisoa {
1376		srom >= 11	0xA (&0x78, >>3)
1377	}
1378	u8 rxgains5gtrelnabypa {
1379		srom >= 11	0xA (&0x80, >>7)
1380	}
1381	u8 rxgains2gtrisoa {
1382		srom >= 11	0xB (&0x78, >>3)
1383	}
1384	u8 rxgains5ghtrisoa {
1385		srom >= 11	0x8 (&0x78, >>3)
1386	}
1387
1388	# 11n PA parameters
1389	u16 pa5gw2a {
1390		srom 4-7	0x12
1391		srom 8-10	0x10
1392	}
1393	u16 pa5ghw1a {
1394		srom 4-7	0x20
1395		srom 8-10	0x1A
1396	}
1397	u16 pa5glw3a {
1398		srom 4-7	0x1C
1399	}
1400	u16 pa5glw1a {
1401		srom 4-7	0x18
1402		srom 8-10	0x14
1403	}
1404	u16 pa5gw1a {
1405		srom 4-7	0x10
1406		srom 8-10	0xE
1407	}
1408	u16 pa5glw0a {
1409		srom 4-7	0x16
1410		srom 8-10	0x12
1411	}
1412	u16 pa5gw3a {
1413		srom 4-7	0x14
1414	}
1415	u16 pa5glw2a {
1416		srom 4-7	0x1A
1417		srom 8-10	0x16
1418	}
1419	u16 pa5ghw3a {
1420		srom 4-7	0x24
1421	}
1422	u16 pa5gw0a {
1423		srom 4-7	0xE
1424		srom 8-10	0xC
1425	}
1426	u8 maxp5gha {
1427		srom 4-7	0xD
1428		srom 8-10	0xB
1429	}
1430	u16 pa5ghw2a {
1431		srom 4-7	0x22
1432		srom 8-10	0x1C
1433	}
1434	u16 pa5ghw0a {
1435		srom 4-7	0x1E
1436		srom 8-10	0x18
1437	}
1438	u16 pa2gw3a {
1439		srom 4-7	0x8
1440	}
1441	u16 pa2gw2a {
1442		srom 4-7	0x6
1443		srom 8-10	0x6
1444	}
1445	u16 pa2gw1a {
1446		srom 4-7	0x4
1447		srom 8-10	0x4
1448	}
1449	u16 pa2gw0a {
1450		srom 4-7	0x2
1451		srom 8-10	0x2
1452	}
1453	u8 maxp5gla {
1454		srom 4-7	0xC
1455		srom 8-10	0xA
1456	}
1457	u8 itt5ga {
1458		srom 4-7	0xA
1459		srom 8-10	0x8
1460	}
1461	u8 itt2ga {
1462		srom 4-7	0x0
1463		srom 8-10	0x0
1464	}
1465}
1466