bhndb_pci_hwdata.c revision 296077
1/*-
2 * Copyright (c) 2015 Landon Fuller <landon@landonf.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer,
10 *    without modification.
11 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
12 *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
13 *    redistribution must be conditioned upon including a substantially
14 *    similar Disclaimer requirement for further binary redistribution.
15 *
16 * NO WARRANTY
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
20 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21 * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
22 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
27 * THE POSSIBILITY OF SUCH DAMAGES.
28 */
29
30#include <sys/cdefs.h>
31__FBSDID("$FreeBSD: head/sys/dev/bhnd/bhndb/bhndb_pci_hwdata.c 296077 2016-02-26 03:34:08Z adrian $");
32
33/*
34 * Resource specifications and register maps for Broadcom PCI/PCIe cores
35 * configured as PCI-BHND bridges.
36 */
37
38#include <sys/param.h>
39#include <sys/bus.h>
40
41#include <machine/bus.h>
42#include <sys/rman.h>
43#include <machine/resource.h>
44
45#include <dev/pci/pcireg.h>
46#include <dev/pci/pcivar.h>
47
48#include "bhndbvar.h"
49#include "bhndb_pcireg.h"
50
51static const struct bhndb_hwcfg bhndb_pci_hwcfg_v0;
52static const struct bhndb_hwcfg bhndb_pci_hwcfg_v1_pci;
53static const struct bhndb_hwcfg bhndb_pci_hwcfg_v1_pcie;
54static const struct bhndb_hwcfg bhndb_pci_hwcfg_v2;
55static const struct bhndb_hwcfg bhndb_pci_hwcfg_v3;
56
57/**
58 * Define a bhndb_hw match entry.
59 *
60 * @param _name The entry name.
61 * @param _vers The configuration version associated with this entry.
62 */
63#define	BHNDB_HW_MATCH(_name, _vers, ...) {				\
64	.name		= _name,					\
65	.hw_reqs	= _BHNDB_HW_REQ_ARRAY(__VA_ARGS__),		\
66	.num_hw_reqs	= (sizeof(_BHNDB_HW_REQ_ARRAY(__VA_ARGS__)) /	\
67	    sizeof(_BHNDB_HW_REQ_ARRAY(__VA_ARGS__)[0])),		\
68	.cfg		= &bhndb_pci_hwcfg_ ## _vers			\
69}
70
71#define	_BHNDB_HW_REQ_ARRAY(...) (struct bhnd_core_match[]) { __VA_ARGS__ }
72
73/**
74 * Generic PCI-SIBA bridge configuration usable with all known siba(4)-based
75 * PCI devices; this configuration is adequate for enumerating a bridged
76 * siba(4) bus to determine the full hardware configuration.
77 *
78 * @par Compatibility
79 * - Compatible with PCI_V0, PCI_V1, PCI_V2, and PCI_V3 devices.
80 * - Compatible with siba(4) bus enumeration.
81 * - Compatible with bcma(4) bus enumeration if the ChipCommon core is mapped
82 *   at the default enumeration address (0x18000000).
83 */
84const struct bhndb_hwcfg bhndb_pci_siba_generic_hwcfg = {
85	.resource_specs = (const struct resource_spec[]) {
86		{ SYS_RES_MEMORY,	PCIR_BAR(0),	RF_ACTIVE },
87		{ -1,			0,		0 }
88	},
89
90	.register_windows = (const struct bhndb_regwin[]) {
91		/* bar0+0x0000: configurable backplane window */
92		{
93			.win_type	= BHNDB_REGWIN_T_DYN,
94			.win_offset	= BHNDB_PCI_V1_BAR0_WIN0_OFFSET,
95			.win_size	= BHNDB_PCI_V1_BAR0_WIN0_SIZE,
96			.dyn.cfg_offset = BHNDB_PCI_V1_BAR0_WIN0_CONTROL,
97			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
98		},
99		BHNDB_REGWIN_TABLE_END
100	},
101};
102
103
104/**
105 * Generic PCI-BCMA bridge configuration usable with all known bcma(4)-based
106 * PCI devices; this configuration is adequate for enumerating a bridged
107 * bcma(4) bus to determine the full hardware configuration.
108 *
109 * @par Compatibility
110 * - Compatible with PCI_V1, PCI_V2, and PCI_V3 devices.
111 * - Compatible with both siba(4) and bcma(4) bus enumeration.
112 */
113const struct bhndb_hwcfg bhndb_pci_bcma_generic_hwcfg = {
114	.resource_specs		= (const struct resource_spec[]) {
115		{ SYS_RES_MEMORY,	PCIR_BAR(0),	RF_ACTIVE },
116		{ -1,			0,		0 }
117	},
118
119	.register_windows	= (const struct bhndb_regwin[]) {
120		/* bar0+0x0000: configurable backplane window */
121		{
122			.win_type	= BHNDB_REGWIN_T_DYN,
123			.win_offset	= BHNDB_PCI_V1_BAR0_WIN0_OFFSET,
124			.win_size	= BHNDB_PCI_V1_BAR0_WIN0_SIZE,
125			.dyn.cfg_offset = BHNDB_PCI_V1_BAR0_WIN0_CONTROL,
126			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
127		},
128
129		/* bar0+0x3000: chipc core registers */
130		{
131			.win_type	= BHNDB_REGWIN_T_CORE,
132			.win_offset	= BHNDB_PCI_V1_BAR0_CCREGS_OFFSET,
133			.win_size	= BHNDB_PCI_V1_BAR0_CCREGS_SIZE,
134			.core = {
135				.class	= BHND_DEVCLASS_CC,
136				.unit	= 0,
137				.port	= 0,
138				.region	= 0,
139				.port_type = BHND_PORT_DEVICE
140			},
141			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
142		},
143
144		BHNDB_REGWIN_TABLE_END
145	},
146};
147
148/**
149 * Hardware configuration tables for Broadcom HND PCI NICs.
150 */
151const struct bhndb_hw bhndb_pci_generic_hw_table[] = {
152	/* PCI/V0 WLAN */
153	BHNDB_HW_MATCH("PCI/v0 WLAN", v0,
154		/* PCI Core */
155		{
156			.vendor	= BHND_MFGID_BCM,
157			.device	= BHND_COREID_PCI,
158			.hwrev	= {
159				.start	= 0,
160				.end	= BHNDB_PCI_V0_MAX_PCI_HWREV
161			},
162			.class	= BHND_DEVCLASS_PCI,
163			.unit	= 0
164		},
165
166		/* 802.11 Core */
167		{
168			.vendor	= BHND_MFGID_BCM,
169			.device	= BHND_COREID_INVALID,
170			.hwrev	= {
171				.start	= 0,
172				.end	= BHND_HWREV_INVALID
173			},
174			.class	= BHND_DEVCLASS_WLAN,
175			.unit	= 0
176		}
177	),
178
179	/* PCI/V1 WLAN */
180	BHNDB_HW_MATCH("PCI/v1 WLAN", v1_pci,
181		/* PCI Core */
182		{
183			.vendor	= BHND_MFGID_BCM,
184			.device	= BHND_COREID_PCI,
185			.hwrev	= {
186				.start	= BHNDB_PCI_V1_MIN_PCI_HWREV,
187				.end	= BHND_HWREV_INVALID
188			},
189			.class	= BHND_DEVCLASS_PCI,
190			.unit	= 0
191		},
192
193		/* 802.11 Core */
194		{
195			.vendor	= BHND_MFGID_BCM,
196			.device	= BHND_COREID_INVALID,
197			.hwrev	= {
198				.start	= 0,
199				.end	= BHND_HWREV_INVALID
200			},
201			.class	= BHND_DEVCLASS_WLAN,
202			.unit	= 0
203		}
204	),
205
206	/* PCIE/V1 WLAN */
207	BHNDB_HW_MATCH("PCIe/v1 WLAN", v1_pcie,
208		/* PCIe Core */
209		{
210			.vendor	= BHND_MFGID_BCM,
211			.device	= BHND_COREID_PCIE,
212			.hwrev	= {
213				.start	= 0,
214				.end	= BHND_HWREV_INVALID
215			},
216			.class	= BHND_DEVCLASS_PCIE,
217			.unit	= 0
218		},
219
220		/* ChipCommon (revision <= 31) */
221		{
222			.vendor	= BHND_MFGID_BCM,
223			.device	= BHND_COREID_CC,
224			.hwrev	= {
225				.start	= 0,
226				.end	= BHNDB_PCI_V1_MAX_CHIPC_HWREV
227			},
228			.class	= BHND_DEVCLASS_CC,
229			.unit	= 0
230		},
231
232		/* 802.11 Core */
233		{
234			.vendor	= BHND_MFGID_BCM,
235			.device	= BHND_COREID_INVALID,
236			.hwrev	= {
237				.start	= 0,
238				.end	= BHND_HWREV_INVALID
239			},
240			.class	= BHND_DEVCLASS_WLAN,
241			.unit	= 0
242		}
243	),
244
245	/* PCIE/V2 WLAN */
246	BHNDB_HW_MATCH("PCIe/v2 WLAN", v2,
247		/* PCIe Core */
248		{
249			.vendor	= BHND_MFGID_BCM,
250			.device	= BHND_COREID_PCIE,
251			.hwrev	= { 0, BHND_HWREV_INVALID },
252			.class	= BHND_DEVCLASS_PCIE,
253			.unit	= 0
254		},
255
256		/* ChipCommon (revision >= 32) */
257		{
258			.vendor	= BHND_MFGID_BCM,
259			.device	= BHND_COREID_CC,
260			.hwrev	= {
261				.start	= BHNDB_PCI_V2_MIN_CHIPC_HWREV,
262				.end	= BHND_HWREV_INVALID
263			},
264			.class	= BHND_DEVCLASS_CC,
265			.unit	= 0
266		},
267
268		/* 802.11 Core */
269		{
270			.vendor	= BHND_MFGID_BCM,
271			.device	= BHND_COREID_INVALID,
272			.hwrev	= {
273				.start	= 0,
274				.end	= BHND_HWREV_INVALID
275			},
276			.class	= BHND_DEVCLASS_WLAN,
277			.unit	= 0
278		}
279	),
280
281
282	/* PCIE/V3 WLAN */
283	BHNDB_HW_MATCH("PCIe-Gen2/v3 WLAN", v3,
284		/* PCIe Gen2 Core */
285		{
286			.vendor	= BHND_MFGID_BCM,
287			.device	= BHND_COREID_PCIE2,
288			.hwrev	= {
289				.start	= 0,
290				.end	= BHND_HWREV_INVALID
291			},
292			.class	= BHND_DEVCLASS_PCIE,
293			.unit	= 0
294		},
295
296		/* 802.11 Core */
297		{
298			.vendor	= BHND_MFGID_BCM,
299			.device	= BHND_COREID_INVALID,
300			.hwrev	= {
301				.start	= 0,
302				.end	= BHND_HWREV_INVALID
303			},
304			.class	= BHND_DEVCLASS_WLAN,
305			.unit	= 0
306		}
307	),
308
309	{ NULL, NULL, 0, NULL }
310};
311
312/**
313 * PCI_V0 hardware configuration.
314 *
315 * Applies to:
316 * - PCI (cid=0x804, revision <= 12)
317 */
318static const struct bhndb_hwcfg bhndb_pci_hwcfg_v0 = {
319	.resource_specs		= (const struct resource_spec[]) {
320		{ SYS_RES_MEMORY,	PCIR_BAR(0),	RF_ACTIVE },
321		{ -1,			0,		0 }
322	},
323
324	.register_windows	= (const struct bhndb_regwin[]) {
325		/* bar0+0x0000: configurable backplane window */
326		{
327			.win_type	= BHNDB_REGWIN_T_DYN,
328			.win_offset	= BHNDB_PCI_V0_BAR0_WIN0_OFFSET,
329			.win_size	= BHNDB_PCI_V0_BAR0_WIN0_SIZE,
330			.dyn.cfg_offset = BHNDB_PCI_V0_BAR0_WIN0_CONTROL,
331			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
332		},
333
334		/* bar0+0x1000: sprom shadow */
335		{
336			.win_type	= BHNDB_REGWIN_T_SPROM,
337			.win_offset	= BHNDB_PCI_V0_BAR0_SPROM_OFFSET,
338			.win_size	= BHNDB_PCI_V0_BAR0_SPROM_SIZE,
339			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
340		},
341
342		/* bar0+0x1800: pci core registers */
343		{
344			.win_type	= BHNDB_REGWIN_T_CORE,
345			.win_offset	= BHNDB_PCI_V0_BAR0_PCIREG_OFFSET,
346			.win_size	= BHNDB_PCI_V0_BAR0_PCIREG_SIZE,
347			.core = {
348				.class	= BHND_DEVCLASS_PCI,
349				.unit	= 0,
350				.port	= 0,
351				.region	= 0,
352				.port_type = BHND_PORT_DEVICE
353			},
354			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
355		},
356		BHNDB_REGWIN_TABLE_END
357	},
358};
359
360/**
361 * PCI_V1 (PCI-only) hardware configuration (PCI version)
362 *
363 * Applies to:
364 * - PCI (cid=0x804, revision >= 13)
365 */
366static const struct bhndb_hwcfg bhndb_pci_hwcfg_v1_pci = {
367	.resource_specs		= (const struct resource_spec[]) {
368		{ SYS_RES_MEMORY,	PCIR_BAR(0),	RF_ACTIVE },
369		{ -1,			0,		0 }
370	},
371
372	.register_windows	= (const struct bhndb_regwin[]) {
373		/* bar0+0x0000: configurable backplane window */
374		{
375			.win_type	= BHNDB_REGWIN_T_DYN,
376			.win_offset	= BHNDB_PCI_V1_BAR0_WIN0_OFFSET,
377			.win_size	= BHNDB_PCI_V1_BAR0_WIN0_SIZE,
378			.dyn.cfg_offset = BHNDB_PCI_V1_BAR0_WIN0_CONTROL,
379			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
380		},
381
382		/* bar0+0x1000: sprom shadow */
383		{
384			.win_type	= BHNDB_REGWIN_T_SPROM,
385			.win_offset	= BHNDB_PCI_V1_BAR0_SPROM_OFFSET,
386			.win_size	= BHNDB_PCI_V1_BAR0_SPROM_SIZE,
387			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
388		},
389
390		/* bar0+0x2000: pci core registers */
391		{
392			.win_type	= BHNDB_REGWIN_T_CORE,
393			.win_offset	= BHNDB_PCI_V1_BAR0_PCIREG_OFFSET,
394			.win_size	= BHNDB_PCI_V1_BAR0_PCIREG_SIZE,
395			.core = {
396				.class	= BHND_DEVCLASS_PCI,
397				.unit	= 0,
398				.port	= 0,
399				.region	= 0,
400				.port_type = BHND_PORT_DEVICE
401			},
402			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
403		},
404
405		/* bar0+0x3000: chipc core registers */
406		{
407			.win_type	= BHNDB_REGWIN_T_CORE,
408			.win_offset	= BHNDB_PCI_V1_BAR0_CCREGS_OFFSET,
409			.win_size	= BHNDB_PCI_V1_BAR0_CCREGS_SIZE,
410			.core = {
411				.class	= BHND_DEVCLASS_CC,
412				.unit	= 0,
413				.port	= 0,
414				.region	= 0,
415				.port_type = BHND_PORT_DEVICE
416			},
417			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
418		},
419
420		BHNDB_REGWIN_TABLE_END
421	},
422};
423
424/**
425 * PCI_V1 hardware configuration (PCIE version).
426 *
427 * Applies to:
428 * - PCIE (cid=0x820) with ChipCommon (revision <= 31)
429 */
430static const struct bhndb_hwcfg bhndb_pci_hwcfg_v1_pcie = {
431	.resource_specs		= (const struct resource_spec[]) {
432		{ SYS_RES_MEMORY,	PCIR_BAR(0),	RF_ACTIVE },
433		{ -1,			0,		0 }
434	},
435
436	.register_windows	= (const struct bhndb_regwin[]) {
437		/* bar0+0x0000: configurable backplane window */
438		{
439			.win_type	= BHNDB_REGWIN_T_DYN,
440			.win_offset	= BHNDB_PCI_V1_BAR0_WIN0_OFFSET,
441			.win_size	= BHNDB_PCI_V1_BAR0_WIN0_SIZE,
442			.dyn.cfg_offset = BHNDB_PCI_V1_BAR0_WIN0_CONTROL,
443			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
444		},
445
446		/* bar0+0x1000: sprom shadow */
447		{
448			.win_type	= BHNDB_REGWIN_T_SPROM,
449			.win_offset	= BHNDB_PCI_V1_BAR0_SPROM_OFFSET,
450			.win_size	= BHNDB_PCI_V1_BAR0_SPROM_SIZE,
451			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
452		},
453
454		/* bar0+0x2000: pci core registers */
455		{
456			.win_type	= BHNDB_REGWIN_T_CORE,
457			.win_offset	= BHNDB_PCI_V1_BAR0_PCIREG_OFFSET,
458			.win_size	= BHNDB_PCI_V1_BAR0_PCIREG_SIZE,
459			.core = {
460				.class	= BHND_DEVCLASS_PCIE,
461				.unit	= 0,
462				.port	= 0,
463				.region	= 0,
464				.port_type = BHND_PORT_DEVICE
465			},
466			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
467		},
468
469		/* bar0+0x3000: chipc core registers */
470		{
471			.win_type	= BHNDB_REGWIN_T_CORE,
472			.win_offset	= BHNDB_PCI_V1_BAR0_CCREGS_OFFSET,
473			.win_size	= BHNDB_PCI_V1_BAR0_CCREGS_SIZE,
474			.core = {
475				.class	= BHND_DEVCLASS_CC,
476				.unit	= 0,
477				.port	= 0,
478				.region	= 0,
479				.port_type = BHND_PORT_DEVICE
480			},
481			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
482		},
483
484		BHNDB_REGWIN_TABLE_END
485	},
486};
487
488/**
489 * PCI_V2 hardware configuration.
490 *
491 * Applies to:
492 * - PCIE (cid=0x820) with ChipCommon (revision >= 32)
493 */
494static const struct bhndb_hwcfg bhndb_pci_hwcfg_v2 = {
495	.resource_specs		= (const struct resource_spec[]) {
496		{ SYS_RES_MEMORY,	PCIR_BAR(0),	RF_ACTIVE },
497		{ -1,			0,		0 }
498	},
499
500	.register_windows	= (const struct bhndb_regwin[]) {
501		/* bar0+0x0000: configurable backplane window */
502		{
503			.win_type	= BHNDB_REGWIN_T_DYN,
504			.win_offset	= BHNDB_PCI_V2_BAR0_WIN0_OFFSET,
505			.win_size	= BHNDB_PCI_V2_BAR0_WIN0_SIZE,
506			.dyn.cfg_offset = BHNDB_PCI_V2_BAR0_WIN0_CONTROL,
507			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
508		},
509
510		/* bar0+0x1000: configurable backplane window */
511		{
512			.win_type	= BHNDB_REGWIN_T_DYN,
513			.win_offset	= BHNDB_PCI_V2_BAR0_WIN1_OFFSET,
514			.win_size	= BHNDB_PCI_V2_BAR0_WIN1_SIZE,
515			.dyn.cfg_offset = BHNDB_PCI_V2_BAR0_WIN1_CONTROL,
516			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
517		},
518
519		/* bar0+0x2000: pcie core registers */
520		{
521			.win_type	= BHNDB_REGWIN_T_CORE,
522			.win_offset	= BHNDB_PCI_V2_BAR0_PCIREG_OFFSET,
523			.win_size	= BHNDB_PCI_V2_BAR0_PCIREG_SIZE,
524			.core = {
525				.class	= BHND_DEVCLASS_PCIE,
526				.unit	= 0,
527				.port	= 0,
528				.region	= 0,
529				.port_type = BHND_PORT_DEVICE
530			},
531			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
532		},
533
534		/* bar0+0x3000: chipc core registers */
535		{
536			.win_type	= BHNDB_REGWIN_T_CORE,
537			.win_offset	= BHNDB_PCI_V2_BAR0_CCREGS_OFFSET,
538			.win_size	= BHNDB_PCI_V2_BAR0_CCREGS_SIZE,
539			.core = {
540				.class	= BHND_DEVCLASS_CC,
541				.unit	= 0,
542				.port	= 0,
543				.region	= 0,
544				.port_type = BHND_PORT_DEVICE
545			},
546			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
547		},
548
549		BHNDB_REGWIN_TABLE_END
550	},
551};
552
553/**
554 * PCI_V3 hardware configuration.
555 *
556 * Applies to:
557 * - PCIE2 (cid=0x83c)
558 */
559static const struct bhndb_hwcfg bhndb_pci_hwcfg_v3 = {
560	.resource_specs		= (const struct resource_spec[]) {
561		{ SYS_RES_MEMORY,	PCIR_BAR(0),	RF_ACTIVE },
562		{ -1,			0,		0 }
563	},
564
565	.register_windows	= (const struct bhndb_regwin[]) {
566		/* bar0+0x0000: configurable backplane window */
567		{
568			.win_type	= BHNDB_REGWIN_T_DYN,
569			.win_offset	= BHNDB_PCI_V3_BAR0_WIN0_OFFSET,
570			.win_size	= BHNDB_PCI_V3_BAR0_WIN0_SIZE,
571			.dyn.cfg_offset = BHNDB_PCI_V3_BAR0_WIN0_CONTROL,
572			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
573		},
574
575		/* bar0+0x1000: configurable backplane window */
576		{
577			.win_type	= BHNDB_REGWIN_T_DYN,
578			.win_offset	= BHNDB_PCI_V3_BAR0_WIN1_OFFSET,
579			.win_size	= BHNDB_PCI_V3_BAR0_WIN1_SIZE,
580			.dyn.cfg_offset = BHNDB_PCI_V3_BAR0_WIN1_CONTROL,
581			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
582		},
583
584		/* bar0+0x2000: pcie core registers */
585		{
586			.win_type	= BHNDB_REGWIN_T_CORE,
587			.win_offset	= BHNDB_PCI_V3_BAR0_PCIREG_OFFSET,
588			.win_size	= BHNDB_PCI_V3_BAR0_PCIREG_SIZE,
589			.core = {
590				.class	= BHND_DEVCLASS_PCIE,
591				.unit	= 0,
592				.port	= 0,
593				.region	= 0,
594				.port_type = BHND_PORT_DEVICE
595			},
596			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
597		},
598
599		/* bar0+0x3000: chipc core registers */
600		{
601			.win_type	= BHNDB_REGWIN_T_CORE,
602			.win_offset	= BHNDB_PCI_V3_BAR0_CCREGS_OFFSET,
603			.win_size	= BHNDB_PCI_V3_BAR0_CCREGS_SIZE,
604			.core = {
605				.class	= BHND_DEVCLASS_CC,
606				.unit	= 0,
607				.port	= 0,
608				.region	= 0,
609				.port_type = BHND_PORT_DEVICE
610			},
611			.res		= { SYS_RES_MEMORY, PCIR_BAR(0) }
612		},
613
614		BHNDB_REGWIN_TABLE_END
615	},
616};
617