xref: /dragonfly/sys/bus/pci/pci.c (revision 235099c3)
1 /*-
2  * Copyright (c) 1997, Stefan Esser <se@kfreebsd.org>
3  * Copyright (c) 2000, Michael Smith <msmith@kfreebsd.org>
4  * Copyright (c) 2000, BSDi
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice unmodified, this list of conditions, and the following
12  *    disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  * $FreeBSD: src/sys/dev/pci/pci.c,v 1.355.2.9.2.1 2009/04/15 03:14:26 kensmith Exp $
29  */
30 
31 #include "opt_bus.h"
32 #include "opt_compat_oldpci.h"
33 
34 #include <sys/param.h>
35 #include <sys/systm.h>
36 #include <sys/malloc.h>
37 #include <sys/module.h>
38 #include <sys/linker.h>
39 #include <sys/fcntl.h>
40 #include <sys/conf.h>
41 #include <sys/kernel.h>
42 #include <sys/queue.h>
43 #include <sys/sysctl.h>
44 #include <sys/endian.h>
45 
46 #include <vm/vm.h>
47 #include <vm/pmap.h>
48 #include <vm/vm_extern.h>
49 
50 #include <sys/bus.h>
51 #include <sys/rman.h>
52 #include <sys/device.h>
53 
54 #include <sys/pciio.h>
55 #include <bus/pci/pcireg.h>
56 #include <bus/pci/pcivar.h>
57 #include <bus/pci/pci_private.h>
58 
59 #include "pcib_if.h"
60 #include "pci_if.h"
61 
62 #ifdef __HAVE_ACPI
63 #include <contrib/dev/acpica/acpi.h>
64 #include "acpi_if.h"
65 #else
66 #define	ACPI_PWR_FOR_SLEEP(x, y, z)
67 #endif
68 
69 extern struct dev_ops pcic_ops;	/* XXX */
70 
71 typedef void	(*pci_read_cap_t)(device_t, int, int, pcicfgregs *);
72 
73 static uint32_t		pci_mapbase(unsigned mapreg);
74 static const char	*pci_maptype(unsigned mapreg);
75 static int		pci_mapsize(unsigned testval);
76 static int		pci_maprange(unsigned mapreg);
77 static void		pci_fixancient(pcicfgregs *cfg);
78 
79 static int		pci_porten(device_t pcib, int b, int s, int f);
80 static int		pci_memen(device_t pcib, int b, int s, int f);
81 static void		pci_assign_interrupt(device_t bus, device_t dev,
82 			    int force_route);
83 static int		pci_add_map(device_t pcib, device_t bus, device_t dev,
84 			    int b, int s, int f, int reg,
85 			    struct resource_list *rl, int force, int prefetch);
86 static int		pci_probe(device_t dev);
87 static int		pci_attach(device_t dev);
88 static void		pci_child_detached(device_t, device_t);
89 static void		pci_load_vendor_data(void);
90 static int		pci_describe_parse_line(char **ptr, int *vendor,
91 			    int *device, char **desc);
92 static char		*pci_describe_device(device_t dev);
93 static int		pci_modevent(module_t mod, int what, void *arg);
94 static void		pci_hdrtypedata(device_t pcib, int b, int s, int f,
95 			    pcicfgregs *cfg);
96 static void		pci_read_capabilities(device_t pcib, pcicfgregs *cfg);
97 static int		pci_read_vpd_reg(device_t pcib, pcicfgregs *cfg,
98 			    int reg, uint32_t *data);
99 #if 0
100 static int		pci_write_vpd_reg(device_t pcib, pcicfgregs *cfg,
101 			    int reg, uint32_t data);
102 #endif
103 static void		pci_read_vpd(device_t pcib, pcicfgregs *cfg);
104 static void		pci_disable_msi(device_t dev);
105 static void		pci_enable_msi(device_t dev, uint64_t address,
106 			    uint16_t data);
107 static void		pci_enable_msix(device_t dev, u_int index,
108 			    uint64_t address, uint32_t data);
109 static void		pci_mask_msix(device_t dev, u_int index);
110 static void		pci_unmask_msix(device_t dev, u_int index);
111 static int		pci_msi_blacklisted(void);
112 static void		pci_resume_msi(device_t dev);
113 static void		pci_resume_msix(device_t dev);
114 static int		pcie_slotimpl(const pcicfgregs *);
115 static void		pci_print_verbose_expr(const pcicfgregs *);
116 
117 static void		pci_read_cap_pmgt(device_t, int, int, pcicfgregs *);
118 static void		pci_read_cap_ht(device_t, int, int, pcicfgregs *);
119 static void		pci_read_cap_msi(device_t, int, int, pcicfgregs *);
120 static void		pci_read_cap_msix(device_t, int, int, pcicfgregs *);
121 static void		pci_read_cap_vpd(device_t, int, int, pcicfgregs *);
122 static void		pci_read_cap_subvendor(device_t, int, int,
123 			    pcicfgregs *);
124 static void		pci_read_cap_pcix(device_t, int, int, pcicfgregs *);
125 static void		pci_read_cap_express(device_t, int, int, pcicfgregs *);
126 
127 static device_method_t pci_methods[] = {
128 	/* Device interface */
129 	DEVMETHOD(device_probe,		pci_probe),
130 	DEVMETHOD(device_attach,	pci_attach),
131 	DEVMETHOD(device_detach,	bus_generic_detach),
132 	DEVMETHOD(device_shutdown,	bus_generic_shutdown),
133 	DEVMETHOD(device_suspend,	pci_suspend),
134 	DEVMETHOD(device_resume,	pci_resume),
135 
136 	/* Bus interface */
137 	DEVMETHOD(bus_print_child,	pci_print_child),
138 	DEVMETHOD(bus_probe_nomatch,	pci_probe_nomatch),
139 	DEVMETHOD(bus_read_ivar,	pci_read_ivar),
140 	DEVMETHOD(bus_write_ivar,	pci_write_ivar),
141 	DEVMETHOD(bus_driver_added,	pci_driver_added),
142 	DEVMETHOD(bus_child_detached,	pci_child_detached),
143 	DEVMETHOD(bus_setup_intr,	pci_setup_intr),
144 	DEVMETHOD(bus_teardown_intr,	pci_teardown_intr),
145 
146 	DEVMETHOD(bus_get_resource_list,pci_get_resource_list),
147 	DEVMETHOD(bus_set_resource,	bus_generic_rl_set_resource),
148 	DEVMETHOD(bus_get_resource,	bus_generic_rl_get_resource),
149 	DEVMETHOD(bus_delete_resource,	pci_delete_resource),
150 	DEVMETHOD(bus_alloc_resource,	pci_alloc_resource),
151 	DEVMETHOD(bus_release_resource,	bus_generic_rl_release_resource),
152 	DEVMETHOD(bus_activate_resource, bus_generic_activate_resource),
153 	DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
154 	DEVMETHOD(bus_child_pnpinfo_str, pci_child_pnpinfo_str_method),
155 	DEVMETHOD(bus_child_location_str, pci_child_location_str_method),
156 
157 	/* PCI interface */
158 	DEVMETHOD(pci_read_config,	pci_read_config_method),
159 	DEVMETHOD(pci_write_config,	pci_write_config_method),
160 	DEVMETHOD(pci_enable_busmaster,	pci_enable_busmaster_method),
161 	DEVMETHOD(pci_disable_busmaster, pci_disable_busmaster_method),
162 	DEVMETHOD(pci_enable_io,	pci_enable_io_method),
163 	DEVMETHOD(pci_disable_io,	pci_disable_io_method),
164 	DEVMETHOD(pci_get_vpd_ident,	pci_get_vpd_ident_method),
165 	DEVMETHOD(pci_get_vpd_readonly,	pci_get_vpd_readonly_method),
166 	DEVMETHOD(pci_get_powerstate,	pci_get_powerstate_method),
167 	DEVMETHOD(pci_set_powerstate,	pci_set_powerstate_method),
168 	DEVMETHOD(pci_assign_interrupt,	pci_assign_interrupt_method),
169 	DEVMETHOD(pci_find_extcap,	pci_find_extcap_method),
170 	DEVMETHOD(pci_alloc_msi,	pci_alloc_msi_method),
171 	DEVMETHOD(pci_alloc_msix,	pci_alloc_msix_method),
172 	DEVMETHOD(pci_remap_msix,	pci_remap_msix_method),
173 	DEVMETHOD(pci_release_msi,	pci_release_msi_method),
174 	DEVMETHOD(pci_msi_count,	pci_msi_count_method),
175 	DEVMETHOD(pci_msix_count,	pci_msix_count_method),
176 
177 	{ 0, 0 }
178 };
179 
180 DEFINE_CLASS_0(pci, pci_driver, pci_methods, 0);
181 
182 static devclass_t pci_devclass;
183 DRIVER_MODULE(pci, pcib, pci_driver, pci_devclass, pci_modevent, 0);
184 MODULE_VERSION(pci, 1);
185 
186 static char	*pci_vendordata;
187 static size_t	pci_vendordata_size;
188 
189 
190 static const struct pci_read_cap {
191 	int		cap;
192 	pci_read_cap_t	read_cap;
193 } pci_read_caps[] = {
194 	{ PCIY_PMG,		pci_read_cap_pmgt },
195 	{ PCIY_HT,		pci_read_cap_ht },
196 	{ PCIY_MSI,		pci_read_cap_msi },
197 	{ PCIY_MSIX,		pci_read_cap_msix },
198 	{ PCIY_VPD,		pci_read_cap_vpd },
199 	{ PCIY_SUBVENDOR,	pci_read_cap_subvendor },
200 	{ PCIY_PCIX,		pci_read_cap_pcix },
201 	{ PCIY_EXPRESS,		pci_read_cap_express },
202 	{ 0, NULL } /* required last entry */
203 };
204 
205 struct pci_quirk {
206 	uint32_t devid;	/* Vendor/device of the card */
207 	int	type;
208 #define	PCI_QUIRK_MAP_REG	1 /* PCI map register in weird place */
209 #define	PCI_QUIRK_DISABLE_MSI	2 /* MSI/MSI-X doesn't work */
210 	int	arg1;
211 	int	arg2;
212 };
213 
214 struct pci_quirk pci_quirks[] = {
215 	/* The Intel 82371AB and 82443MX has a map register at offset 0x90. */
216 	{ 0x71138086, PCI_QUIRK_MAP_REG,	0x90,	 0 },
217 	{ 0x719b8086, PCI_QUIRK_MAP_REG,	0x90,	 0 },
218 	/* As does the Serverworks OSB4 (the SMBus mapping register) */
219 	{ 0x02001166, PCI_QUIRK_MAP_REG,	0x90,	 0 },
220 
221 	/*
222 	 * MSI doesn't work with the ServerWorks CNB20-HE Host Bridge
223 	 * or the CMIC-SL (AKA ServerWorks GC_LE).
224 	 */
225 	{ 0x00141166, PCI_QUIRK_DISABLE_MSI,	0,	0 },
226 	{ 0x00171166, PCI_QUIRK_DISABLE_MSI,	0,	0 },
227 
228 	/*
229 	 * MSI doesn't work on earlier Intel chipsets including
230 	 * E7500, E7501, E7505, 845, 865, 875/E7210, and 855.
231 	 */
232 	{ 0x25408086, PCI_QUIRK_DISABLE_MSI,	0,	0 },
233 	{ 0x254c8086, PCI_QUIRK_DISABLE_MSI,	0,	0 },
234 	{ 0x25508086, PCI_QUIRK_DISABLE_MSI,	0,	0 },
235 	{ 0x25608086, PCI_QUIRK_DISABLE_MSI,	0,	0 },
236 	{ 0x25708086, PCI_QUIRK_DISABLE_MSI,	0,	0 },
237 	{ 0x25788086, PCI_QUIRK_DISABLE_MSI,	0,	0 },
238 	{ 0x35808086, PCI_QUIRK_DISABLE_MSI,	0,	0 },
239 
240 	/*
241 	 * MSI doesn't work with devices behind the AMD 8131 HT-PCIX
242 	 * bridge.
243 	 */
244 	{ 0x74501022, PCI_QUIRK_DISABLE_MSI,	0,	0 },
245 
246 	{ 0 }
247 };
248 
249 /* map register information */
250 #define	PCI_MAPMEM	0x01	/* memory map */
251 #define	PCI_MAPMEMP	0x02	/* prefetchable memory map */
252 #define	PCI_MAPPORT	0x04	/* port map */
253 
254 struct devlist pci_devq;
255 uint32_t pci_generation;
256 uint32_t pci_numdevs = 0;
257 static int pcie_chipset, pcix_chipset;
258 
259 /* sysctl vars */
260 SYSCTL_NODE(_hw, OID_AUTO, pci, CTLFLAG_RD, 0, "PCI bus tuning parameters");
261 
262 static int pci_enable_io_modes = 1;
263 TUNABLE_INT("hw.pci.enable_io_modes", &pci_enable_io_modes);
264 SYSCTL_INT(_hw_pci, OID_AUTO, enable_io_modes, CTLFLAG_RW,
265     &pci_enable_io_modes, 1,
266     "Enable I/O and memory bits in the config register.  Some BIOSes do not\n\
267 enable these bits correctly.  We'd like to do this all the time, but there\n\
268 are some peripherals that this causes problems with.");
269 
270 static int pci_do_power_nodriver = 0;
271 TUNABLE_INT("hw.pci.do_power_nodriver", &pci_do_power_nodriver);
272 SYSCTL_INT(_hw_pci, OID_AUTO, do_power_nodriver, CTLFLAG_RW,
273     &pci_do_power_nodriver, 0,
274   "Place a function into D3 state when no driver attaches to it.  0 means\n\
275 disable.  1 means conservatively place devices into D3 state.  2 means\n\
276 aggressively place devices into D3 state.  3 means put absolutely everything\n\
277 in D3 state.");
278 
279 static int pci_do_power_resume = 1;
280 TUNABLE_INT("hw.pci.do_power_resume", &pci_do_power_resume);
281 SYSCTL_INT(_hw_pci, OID_AUTO, do_power_resume, CTLFLAG_RW,
282     &pci_do_power_resume, 1,
283   "Transition from D3 -> D0 on resume.");
284 
285 static int pci_do_msi = 1;
286 TUNABLE_INT("hw.pci.enable_msi", &pci_do_msi);
287 SYSCTL_INT(_hw_pci, OID_AUTO, enable_msi, CTLFLAG_RW, &pci_do_msi, 1,
288     "Enable support for MSI interrupts");
289 
290 static int pci_do_msix = 1;
291 TUNABLE_INT("hw.pci.enable_msix", &pci_do_msix);
292 SYSCTL_INT(_hw_pci, OID_AUTO, enable_msix, CTLFLAG_RW, &pci_do_msix, 1,
293     "Enable support for MSI-X interrupts");
294 
295 static int pci_honor_msi_blacklist = 1;
296 TUNABLE_INT("hw.pci.honor_msi_blacklist", &pci_honor_msi_blacklist);
297 SYSCTL_INT(_hw_pci, OID_AUTO, honor_msi_blacklist, CTLFLAG_RD,
298     &pci_honor_msi_blacklist, 1, "Honor chipset blacklist for MSI");
299 
300 /* Find a device_t by bus/slot/function in domain 0 */
301 
302 device_t
303 pci_find_bsf(uint8_t bus, uint8_t slot, uint8_t func)
304 {
305 
306 	return (pci_find_dbsf(0, bus, slot, func));
307 }
308 
309 /* Find a device_t by domain/bus/slot/function */
310 
311 device_t
312 pci_find_dbsf(uint32_t domain, uint8_t bus, uint8_t slot, uint8_t func)
313 {
314 	struct pci_devinfo *dinfo;
315 
316 	STAILQ_FOREACH(dinfo, &pci_devq, pci_links) {
317 		if ((dinfo->cfg.domain == domain) &&
318 		    (dinfo->cfg.bus == bus) &&
319 		    (dinfo->cfg.slot == slot) &&
320 		    (dinfo->cfg.func == func)) {
321 			return (dinfo->cfg.dev);
322 		}
323 	}
324 
325 	return (NULL);
326 }
327 
328 /* Find a device_t by vendor/device ID */
329 
330 device_t
331 pci_find_device(uint16_t vendor, uint16_t device)
332 {
333 	struct pci_devinfo *dinfo;
334 
335 	STAILQ_FOREACH(dinfo, &pci_devq, pci_links) {
336 		if ((dinfo->cfg.vendor == vendor) &&
337 		    (dinfo->cfg.device == device)) {
338 			return (dinfo->cfg.dev);
339 		}
340 	}
341 
342 	return (NULL);
343 }
344 
345 /* return base address of memory or port map */
346 
347 static uint32_t
348 pci_mapbase(uint32_t mapreg)
349 {
350 
351 	if (PCI_BAR_MEM(mapreg))
352 		return (mapreg & PCIM_BAR_MEM_BASE);
353 	else
354 		return (mapreg & PCIM_BAR_IO_BASE);
355 }
356 
357 /* return map type of memory or port map */
358 
359 static const char *
360 pci_maptype(unsigned mapreg)
361 {
362 
363 	if (PCI_BAR_IO(mapreg))
364 		return ("I/O Port");
365 	if (mapreg & PCIM_BAR_MEM_PREFETCH)
366 		return ("Prefetchable Memory");
367 	return ("Memory");
368 }
369 
370 /* return log2 of map size decoded for memory or port map */
371 
372 static int
373 pci_mapsize(uint32_t testval)
374 {
375 	int ln2size;
376 
377 	testval = pci_mapbase(testval);
378 	ln2size = 0;
379 	if (testval != 0) {
380 		while ((testval & 1) == 0)
381 		{
382 			ln2size++;
383 			testval >>= 1;
384 		}
385 	}
386 	return (ln2size);
387 }
388 
389 /* return log2 of address range supported by map register */
390 
391 static int
392 pci_maprange(unsigned mapreg)
393 {
394 	int ln2range = 0;
395 
396 	if (PCI_BAR_IO(mapreg))
397 		ln2range = 32;
398 	else
399 		switch (mapreg & PCIM_BAR_MEM_TYPE) {
400 		case PCIM_BAR_MEM_32:
401 			ln2range = 32;
402 			break;
403 		case PCIM_BAR_MEM_1MB:
404 			ln2range = 20;
405 			break;
406 		case PCIM_BAR_MEM_64:
407 			ln2range = 64;
408 			break;
409 		}
410 	return (ln2range);
411 }
412 
413 /* adjust some values from PCI 1.0 devices to match 2.0 standards ... */
414 
415 static void
416 pci_fixancient(pcicfgregs *cfg)
417 {
418 	if (cfg->hdrtype != 0)
419 		return;
420 
421 	/* PCI to PCI bridges use header type 1 */
422 	if (cfg->baseclass == PCIC_BRIDGE && cfg->subclass == PCIS_BRIDGE_PCI)
423 		cfg->hdrtype = 1;
424 }
425 
426 /* extract header type specific config data */
427 
428 static void
429 pci_hdrtypedata(device_t pcib, int b, int s, int f, pcicfgregs *cfg)
430 {
431 #define	REG(n, w)	PCIB_READ_CONFIG(pcib, b, s, f, n, w)
432 	switch (cfg->hdrtype) {
433 	case 0:
434 		cfg->subvendor      = REG(PCIR_SUBVEND_0, 2);
435 		cfg->subdevice      = REG(PCIR_SUBDEV_0, 2);
436 		cfg->nummaps	    = PCI_MAXMAPS_0;
437 		break;
438 	case 1:
439 		cfg->nummaps	    = PCI_MAXMAPS_1;
440 #ifdef COMPAT_OLDPCI
441 		cfg->secondarybus   = REG(PCIR_SECBUS_1, 1);
442 #endif
443 		break;
444 	case 2:
445 		cfg->subvendor      = REG(PCIR_SUBVEND_2, 2);
446 		cfg->subdevice      = REG(PCIR_SUBDEV_2, 2);
447 		cfg->nummaps	    = PCI_MAXMAPS_2;
448 #ifdef COMPAT_OLDPCI
449 		cfg->secondarybus   = REG(PCIR_SECBUS_2, 1);
450 #endif
451 		break;
452 	}
453 #undef REG
454 }
455 
456 /* read configuration header into pcicfgregs structure */
457 struct pci_devinfo *
458 pci_read_device(device_t pcib, int d, int b, int s, int f, size_t size)
459 {
460 #define	REG(n, w)	PCIB_READ_CONFIG(pcib, b, s, f, n, w)
461 	pcicfgregs *cfg = NULL;
462 	struct pci_devinfo *devlist_entry;
463 	struct devlist *devlist_head;
464 
465 	devlist_head = &pci_devq;
466 
467 	devlist_entry = NULL;
468 
469 	if (REG(PCIR_DEVVENDOR, 4) != -1) {
470 		devlist_entry = kmalloc(size, M_DEVBUF, M_WAITOK | M_ZERO);
471 
472 		cfg = &devlist_entry->cfg;
473 
474 		cfg->domain		= d;
475 		cfg->bus		= b;
476 		cfg->slot		= s;
477 		cfg->func		= f;
478 		cfg->vendor		= REG(PCIR_VENDOR, 2);
479 		cfg->device		= REG(PCIR_DEVICE, 2);
480 		cfg->cmdreg		= REG(PCIR_COMMAND, 2);
481 		cfg->statreg		= REG(PCIR_STATUS, 2);
482 		cfg->baseclass		= REG(PCIR_CLASS, 1);
483 		cfg->subclass		= REG(PCIR_SUBCLASS, 1);
484 		cfg->progif		= REG(PCIR_PROGIF, 1);
485 		cfg->revid		= REG(PCIR_REVID, 1);
486 		cfg->hdrtype		= REG(PCIR_HDRTYPE, 1);
487 		cfg->cachelnsz		= REG(PCIR_CACHELNSZ, 1);
488 		cfg->lattimer		= REG(PCIR_LATTIMER, 1);
489 		cfg->intpin		= REG(PCIR_INTPIN, 1);
490 		cfg->intline		= REG(PCIR_INTLINE, 1);
491 
492 		cfg->mingnt		= REG(PCIR_MINGNT, 1);
493 		cfg->maxlat		= REG(PCIR_MAXLAT, 1);
494 
495 		cfg->mfdev		= (cfg->hdrtype & PCIM_MFDEV) != 0;
496 		cfg->hdrtype		&= ~PCIM_MFDEV;
497 
498 		pci_fixancient(cfg);
499 		pci_hdrtypedata(pcib, b, s, f, cfg);
500 
501 		pci_read_capabilities(pcib, cfg);
502 
503 		STAILQ_INSERT_TAIL(devlist_head, devlist_entry, pci_links);
504 
505 		devlist_entry->conf.pc_sel.pc_domain = cfg->domain;
506 		devlist_entry->conf.pc_sel.pc_bus = cfg->bus;
507 		devlist_entry->conf.pc_sel.pc_dev = cfg->slot;
508 		devlist_entry->conf.pc_sel.pc_func = cfg->func;
509 		devlist_entry->conf.pc_hdr = cfg->hdrtype;
510 
511 		devlist_entry->conf.pc_subvendor = cfg->subvendor;
512 		devlist_entry->conf.pc_subdevice = cfg->subdevice;
513 		devlist_entry->conf.pc_vendor = cfg->vendor;
514 		devlist_entry->conf.pc_device = cfg->device;
515 
516 		devlist_entry->conf.pc_class = cfg->baseclass;
517 		devlist_entry->conf.pc_subclass = cfg->subclass;
518 		devlist_entry->conf.pc_progif = cfg->progif;
519 		devlist_entry->conf.pc_revid = cfg->revid;
520 
521 		pci_numdevs++;
522 		pci_generation++;
523 	}
524 	return (devlist_entry);
525 #undef REG
526 }
527 
528 static int
529 pci_fixup_nextptr(int *nextptr0)
530 {
531 	int nextptr = *nextptr0;
532 
533 	/* "Next pointer" is only one byte */
534 	KASSERT(nextptr <= 0xff, ("Illegal next pointer %d\n", nextptr));
535 
536 	if (nextptr & 0x3) {
537 		/*
538 		 * PCI local bus spec 3.0:
539 		 *
540 		 * "... The bottom two bits of all pointers are reserved
541 		 *  and must be implemented as 00b although software must
542 		 *  mask them to allow for future uses of these bits ..."
543 		 */
544 		if (bootverbose) {
545 			kprintf("Illegal PCI extended capability "
546 				"offset, fixup 0x%02x -> 0x%02x\n",
547 				nextptr, nextptr & ~0x3);
548 		}
549 		nextptr &= ~0x3;
550 	}
551 	*nextptr0 = nextptr;
552 
553 	if (nextptr < 0x40) {
554 		if (nextptr != 0) {
555 			kprintf("Illegal PCI extended capability "
556 				"offset 0x%02x", nextptr);
557 		}
558 		return 0;
559 	}
560 	return 1;
561 }
562 
563 static void
564 pci_read_cap_pmgt(device_t pcib, int ptr, int nextptr, pcicfgregs *cfg)
565 {
566 #define REG(n, w)	\
567 	PCIB_READ_CONFIG(pcib, cfg->bus, cfg->slot, cfg->func, n, w)
568 
569 	struct pcicfg_pp *pp = &cfg->pp;
570 
571 	if (pp->pp_cap)
572 		return;
573 
574 	pp->pp_cap = REG(ptr + PCIR_POWER_CAP, 2);
575 	pp->pp_status = ptr + PCIR_POWER_STATUS;
576 	pp->pp_pmcsr = ptr + PCIR_POWER_PMCSR;
577 
578 	if ((nextptr - ptr) > PCIR_POWER_DATA) {
579 		/*
580 		 * XXX
581 		 * We should write to data_select and read back from
582 		 * data_scale to determine whether data register is
583 		 * implemented.
584 		 */
585 #ifdef foo
586 		pp->pp_data = ptr + PCIR_POWER_DATA;
587 #else
588 		pp->pp_data = 0;
589 #endif
590 	}
591 
592 #undef REG
593 }
594 
595 static void
596 pci_read_cap_ht(device_t pcib, int ptr, int nextptr, pcicfgregs *cfg)
597 {
598 #ifdef notyet
599 #if defined(__i386__) || defined(__amd64__)
600 
601 #define REG(n, w)	\
602 	PCIB_READ_CONFIG(pcib, cfg->bus, cfg->slot, cfg->func, n, w)
603 
604 	struct pcicfg_ht *ht = &cfg->ht;
605 	uint64_t addr;
606 	uint32_t val;
607 
608 	/* Determine HT-specific capability type. */
609 	val = REG(ptr + PCIR_HT_COMMAND, 2);
610 
611 	if ((val & PCIM_HTCMD_CAP_MASK) != PCIM_HTCAP_MSI_MAPPING)
612 		return;
613 
614 	if (!(val & PCIM_HTCMD_MSI_FIXED)) {
615 		/* Sanity check the mapping window. */
616 		addr = REG(ptr + PCIR_HTMSI_ADDRESS_HI, 4);
617 		addr <<= 32;
618 		addr |= REG(ptr + PCIR_HTMSI_ADDRESS_LO, 4);
619 		if (addr != MSI_INTEL_ADDR_BASE) {
620 			device_printf(pcib, "HT Bridge at pci%d:%d:%d:%d "
621 				"has non-default MSI window 0x%llx\n",
622 				cfg->domain, cfg->bus, cfg->slot, cfg->func,
623 				(long long)addr);
624 		}
625 	} else {
626 		addr = MSI_INTEL_ADDR_BASE;
627 	}
628 
629 	ht->ht_msimap = ptr;
630 	ht->ht_msictrl = val;
631 	ht->ht_msiaddr = addr;
632 
633 #undef REG
634 
635 #endif	/* __i386__ || __amd64__ */
636 #endif	/* notyet */
637 }
638 
639 static void
640 pci_read_cap_msi(device_t pcib, int ptr, int nextptr, pcicfgregs *cfg)
641 {
642 #define REG(n, w)	\
643 	PCIB_READ_CONFIG(pcib, cfg->bus, cfg->slot, cfg->func, n, w)
644 
645 	struct pcicfg_msi *msi = &cfg->msi;
646 
647 	msi->msi_location = ptr;
648 	msi->msi_ctrl = REG(ptr + PCIR_MSI_CTRL, 2);
649 	msi->msi_msgnum = 1 << ((msi->msi_ctrl & PCIM_MSICTRL_MMC_MASK) >> 1);
650 
651 #undef REG
652 }
653 
654 static void
655 pci_read_cap_msix(device_t pcib, int ptr, int nextptr, pcicfgregs *cfg)
656 {
657 #define REG(n, w)	\
658 	PCIB_READ_CONFIG(pcib, cfg->bus, cfg->slot, cfg->func, n, w)
659 
660 	struct pcicfg_msix *msix = &cfg->msix;
661 	uint32_t val;
662 
663 	msix->msix_location = ptr;
664 	msix->msix_ctrl = REG(ptr + PCIR_MSIX_CTRL, 2);
665 	msix->msix_msgnum = (msix->msix_ctrl & PCIM_MSIXCTRL_TABLE_SIZE) + 1;
666 
667 	val = REG(ptr + PCIR_MSIX_TABLE, 4);
668 	msix->msix_table_bar = PCIR_BAR(val & PCIM_MSIX_BIR_MASK);
669 	msix->msix_table_offset = val & ~PCIM_MSIX_BIR_MASK;
670 
671 	val = REG(ptr + PCIR_MSIX_PBA, 4);
672 	msix->msix_pba_bar = PCIR_BAR(val & PCIM_MSIX_BIR_MASK);
673 	msix->msix_pba_offset = val & ~PCIM_MSIX_BIR_MASK;
674 
675 #undef REG
676 }
677 
678 static void
679 pci_read_cap_vpd(device_t pcib, int ptr, int nextptr, pcicfgregs *cfg)
680 {
681 	cfg->vpd.vpd_reg = ptr;
682 }
683 
684 static void
685 pci_read_cap_subvendor(device_t pcib, int ptr, int nextptr, pcicfgregs *cfg)
686 {
687 #define REG(n, w)	\
688 	PCIB_READ_CONFIG(pcib, cfg->bus, cfg->slot, cfg->func, n, w)
689 
690 	/* Should always be true. */
691 	if ((cfg->hdrtype & PCIM_HDRTYPE) == 1) {
692 		uint32_t val;
693 
694 		val = REG(ptr + PCIR_SUBVENDCAP_ID, 4);
695 		cfg->subvendor = val & 0xffff;
696 		cfg->subdevice = val >> 16;
697 	}
698 
699 #undef REG
700 }
701 
702 static void
703 pci_read_cap_pcix(device_t pcib, int ptr, int nextptr, pcicfgregs *cfg)
704 {
705 	/*
706 	 * Assume we have a PCI-X chipset if we have
707 	 * at least one PCI-PCI bridge with a PCI-X
708 	 * capability.  Note that some systems with
709 	 * PCI-express or HT chipsets might match on
710 	 * this check as well.
711 	 */
712 	if ((cfg->hdrtype & PCIM_HDRTYPE) == 1)
713 		pcix_chipset = 1;
714 
715 	cfg->pcix.pcix_ptr = ptr;
716 }
717 
718 static int
719 pcie_slotimpl(const pcicfgregs *cfg)
720 {
721 	const struct pcicfg_expr *expr = &cfg->expr;
722 	uint16_t port_type;
723 
724 	/*
725 	 * Only version 1 can be parsed currently
726 	 */
727 	if ((expr->expr_cap & PCIEM_CAP_VER_MASK) != PCIEM_CAP_VER_1)
728 		return 0;
729 
730 	/*
731 	 * - Slot implemented bit is meaningful iff current port is
732 	 *   root port or down stream port.
733 	 * - Testing for root port or down stream port is meanningful
734 	 *   iff PCI configure has type 1 header.
735 	 */
736 
737 	if (cfg->hdrtype != 1)
738 		return 0;
739 
740 	port_type = expr->expr_cap & PCIEM_CAP_PORT_TYPE;
741 	if (port_type != PCIE_ROOT_PORT && port_type != PCIE_DOWN_STREAM_PORT)
742 		return 0;
743 
744 	if (!(expr->expr_cap & PCIEM_CAP_SLOT_IMPL))
745 		return 0;
746 
747 	return 1;
748 }
749 
750 static void
751 pci_read_cap_express(device_t pcib, int ptr, int nextptr, pcicfgregs *cfg)
752 {
753 #define REG(n, w)	\
754 	PCIB_READ_CONFIG(pcib, cfg->bus, cfg->slot, cfg->func, n, w)
755 
756 	struct pcicfg_expr *expr = &cfg->expr;
757 
758 	/*
759 	 * Assume we have a PCI-express chipset if we have
760 	 * at least one PCI-express device.
761 	 */
762 	pcie_chipset = 1;
763 
764 	expr->expr_ptr = ptr;
765 	expr->expr_cap = REG(ptr + PCIER_CAPABILITY, 2);
766 
767 	/*
768 	 * Only version 1 can be parsed currently
769 	 */
770 	if ((expr->expr_cap & PCIEM_CAP_VER_MASK) != PCIEM_CAP_VER_1)
771 		return;
772 
773 	/*
774 	 * Read slot capabilities.  Slot capabilities exists iff
775 	 * current port's slot is implemented
776 	 */
777 	if (pcie_slotimpl(cfg))
778 		expr->expr_slotcap = REG(ptr + PCIER_SLOTCAP, 4);
779 
780 #undef REG
781 }
782 
783 static void
784 pci_read_capabilities(device_t pcib, pcicfgregs *cfg)
785 {
786 #define	REG(n, w)	PCIB_READ_CONFIG(pcib, cfg->bus, cfg->slot, cfg->func, n, w)
787 #define	WREG(n, v, w)	PCIB_WRITE_CONFIG(pcib, cfg->bus, cfg->slot, cfg->func, n, v, w)
788 
789 	uint32_t val;
790 	int nextptr, ptrptr;
791 
792 	if ((REG(PCIR_STATUS, 2) & PCIM_STATUS_CAPPRESENT) == 0) {
793 		/* No capabilities */
794 		return;
795 	}
796 
797 	switch (cfg->hdrtype & PCIM_HDRTYPE) {
798 	case 0:
799 	case 1:
800 		ptrptr = PCIR_CAP_PTR;
801 		break;
802 	case 2:
803 		ptrptr = PCIR_CAP_PTR_2;	/* cardbus capabilities ptr */
804 		break;
805 	default:
806 		return;				/* no capabilities support */
807 	}
808 	nextptr = REG(ptrptr, 1);	/* sanity check? */
809 
810 	/*
811 	 * Read capability entries.
812 	 */
813 	while (pci_fixup_nextptr(&nextptr)) {
814 		const struct pci_read_cap *rc;
815 		int ptr = nextptr;
816 
817 		/* Find the next entry */
818 		nextptr = REG(ptr + PCICAP_NEXTPTR, 1);
819 
820 		/* Process this entry */
821 		val = REG(ptr + PCICAP_ID, 1);
822 		for (rc = pci_read_caps; rc->read_cap != NULL; ++rc) {
823 			if (rc->cap == val) {
824 				rc->read_cap(pcib, ptr, nextptr, cfg);
825 				break;
826 			}
827 		}
828 	}
829 /* REG and WREG use carry through to next functions */
830 }
831 
832 /*
833  * PCI Vital Product Data
834  */
835 
836 #define	PCI_VPD_TIMEOUT		1000000
837 
838 static int
839 pci_read_vpd_reg(device_t pcib, pcicfgregs *cfg, int reg, uint32_t *data)
840 {
841 	int count = PCI_VPD_TIMEOUT;
842 
843 	KASSERT((reg & 3) == 0, ("VPD register must by 4 byte aligned"));
844 
845 	WREG(cfg->vpd.vpd_reg + PCIR_VPD_ADDR, reg, 2);
846 
847 	while ((REG(cfg->vpd.vpd_reg + PCIR_VPD_ADDR, 2) & 0x8000) != 0x8000) {
848 		if (--count < 0)
849 			return (ENXIO);
850 		DELAY(1);	/* limit looping */
851 	}
852 	*data = (REG(cfg->vpd.vpd_reg + PCIR_VPD_DATA, 4));
853 
854 	return (0);
855 }
856 
857 #if 0
858 static int
859 pci_write_vpd_reg(device_t pcib, pcicfgregs *cfg, int reg, uint32_t data)
860 {
861 	int count = PCI_VPD_TIMEOUT;
862 
863 	KASSERT((reg & 3) == 0, ("VPD register must by 4 byte aligned"));
864 
865 	WREG(cfg->vpd.vpd_reg + PCIR_VPD_DATA, data, 4);
866 	WREG(cfg->vpd.vpd_reg + PCIR_VPD_ADDR, reg | 0x8000, 2);
867 	while ((REG(cfg->vpd.vpd_reg + PCIR_VPD_ADDR, 2) & 0x8000) == 0x8000) {
868 		if (--count < 0)
869 			return (ENXIO);
870 		DELAY(1);	/* limit looping */
871 	}
872 
873 	return (0);
874 }
875 #endif
876 
877 #undef PCI_VPD_TIMEOUT
878 
879 struct vpd_readstate {
880 	device_t	pcib;
881 	pcicfgregs	*cfg;
882 	uint32_t	val;
883 	int		bytesinval;
884 	int		off;
885 	uint8_t		cksum;
886 };
887 
888 static int
889 vpd_nextbyte(struct vpd_readstate *vrs, uint8_t *data)
890 {
891 	uint32_t reg;
892 	uint8_t byte;
893 
894 	if (vrs->bytesinval == 0) {
895 		if (pci_read_vpd_reg(vrs->pcib, vrs->cfg, vrs->off, &reg))
896 			return (ENXIO);
897 		vrs->val = le32toh(reg);
898 		vrs->off += 4;
899 		byte = vrs->val & 0xff;
900 		vrs->bytesinval = 3;
901 	} else {
902 		vrs->val = vrs->val >> 8;
903 		byte = vrs->val & 0xff;
904 		vrs->bytesinval--;
905 	}
906 
907 	vrs->cksum += byte;
908 	*data = byte;
909 	return (0);
910 }
911 
912 int
913 pcie_slot_implemented(device_t dev)
914 {
915 	struct pci_devinfo *dinfo = device_get_ivars(dev);
916 
917 	return pcie_slotimpl(&dinfo->cfg);
918 }
919 
920 void
921 pcie_set_max_readrq(device_t dev, uint16_t rqsize)
922 {
923 	uint8_t expr_ptr;
924 	uint16_t val;
925 
926 	rqsize &= PCIEM_DEVCTL_MAX_READRQ_MASK;
927 	if (rqsize > PCIEM_DEVCTL_MAX_READRQ_4096) {
928 		panic("%s: invalid max read request size 0x%02x\n",
929 		      device_get_nameunit(dev), rqsize);
930 	}
931 
932 	expr_ptr = pci_get_pciecap_ptr(dev);
933 	if (!expr_ptr)
934 		panic("%s: not PCIe device\n", device_get_nameunit(dev));
935 
936 	val = pci_read_config(dev, expr_ptr + PCIER_DEVCTRL, 2);
937 	if ((val & PCIEM_DEVCTL_MAX_READRQ_MASK) != rqsize) {
938 		if (bootverbose)
939 			device_printf(dev, "adjust device control 0x%04x", val);
940 
941 		val &= ~PCIEM_DEVCTL_MAX_READRQ_MASK;
942 		val |= rqsize;
943 		pci_write_config(dev, expr_ptr + PCIER_DEVCTRL, val, 2);
944 
945 		if (bootverbose)
946 			kprintf(" -> 0x%04x\n", val);
947 	}
948 }
949 
950 static void
951 pci_read_vpd(device_t pcib, pcicfgregs *cfg)
952 {
953 	struct vpd_readstate vrs;
954 	int state;
955 	int name;
956 	int remain;
957 	int i;
958 	int alloc, off;		/* alloc/off for RO/W arrays */
959 	int cksumvalid;
960 	int dflen;
961 	uint8_t byte;
962 	uint8_t byte2;
963 
964 	/* init vpd reader */
965 	vrs.bytesinval = 0;
966 	vrs.off = 0;
967 	vrs.pcib = pcib;
968 	vrs.cfg = cfg;
969 	vrs.cksum = 0;
970 
971 	state = 0;
972 	name = remain = i = 0;	/* shut up stupid gcc */
973 	alloc = off = 0;	/* shut up stupid gcc */
974 	dflen = 0;		/* shut up stupid gcc */
975 	cksumvalid = -1;
976 	while (state >= 0) {
977 		if (vpd_nextbyte(&vrs, &byte)) {
978 			state = -2;
979 			break;
980 		}
981 #if 0
982 		kprintf("vpd: val: %#x, off: %d, bytesinval: %d, byte: %#hhx, " \
983 		    "state: %d, remain: %d, name: %#x, i: %d\n", vrs.val,
984 		    vrs.off, vrs.bytesinval, byte, state, remain, name, i);
985 #endif
986 		switch (state) {
987 		case 0:		/* item name */
988 			if (byte & 0x80) {
989 				if (vpd_nextbyte(&vrs, &byte2)) {
990 					state = -2;
991 					break;
992 				}
993 				remain = byte2;
994 				if (vpd_nextbyte(&vrs, &byte2)) {
995 					state = -2;
996 					break;
997 				}
998 				remain |= byte2 << 8;
999 				if (remain > (0x7f*4 - vrs.off)) {
1000 					state = -1;
1001 					kprintf(
1002 			    "pci%d:%d:%d:%d: invalid VPD data, remain %#x\n",
1003 					    cfg->domain, cfg->bus, cfg->slot,
1004 					    cfg->func, remain);
1005 				}
1006 				name = byte & 0x7f;
1007 			} else {
1008 				remain = byte & 0x7;
1009 				name = (byte >> 3) & 0xf;
1010 			}
1011 			switch (name) {
1012 			case 0x2:	/* String */
1013 				cfg->vpd.vpd_ident = kmalloc(remain + 1,
1014 				    M_DEVBUF, M_WAITOK);
1015 				i = 0;
1016 				state = 1;
1017 				break;
1018 			case 0xf:	/* End */
1019 				state = -1;
1020 				break;
1021 			case 0x10:	/* VPD-R */
1022 				alloc = 8;
1023 				off = 0;
1024 				cfg->vpd.vpd_ros = kmalloc(alloc *
1025 				    sizeof(*cfg->vpd.vpd_ros), M_DEVBUF,
1026 				    M_WAITOK | M_ZERO);
1027 				state = 2;
1028 				break;
1029 			case 0x11:	/* VPD-W */
1030 				alloc = 8;
1031 				off = 0;
1032 				cfg->vpd.vpd_w = kmalloc(alloc *
1033 				    sizeof(*cfg->vpd.vpd_w), M_DEVBUF,
1034 				    M_WAITOK | M_ZERO);
1035 				state = 5;
1036 				break;
1037 			default:	/* Invalid data, abort */
1038 				state = -1;
1039 				break;
1040 			}
1041 			break;
1042 
1043 		case 1:	/* Identifier String */
1044 			cfg->vpd.vpd_ident[i++] = byte;
1045 			remain--;
1046 			if (remain == 0)  {
1047 				cfg->vpd.vpd_ident[i] = '\0';
1048 				state = 0;
1049 			}
1050 			break;
1051 
1052 		case 2:	/* VPD-R Keyword Header */
1053 			if (off == alloc) {
1054 				cfg->vpd.vpd_ros = krealloc(cfg->vpd.vpd_ros,
1055 				    (alloc *= 2) * sizeof(*cfg->vpd.vpd_ros),
1056 				    M_DEVBUF, M_WAITOK | M_ZERO);
1057 			}
1058 			cfg->vpd.vpd_ros[off].keyword[0] = byte;
1059 			if (vpd_nextbyte(&vrs, &byte2)) {
1060 				state = -2;
1061 				break;
1062 			}
1063 			cfg->vpd.vpd_ros[off].keyword[1] = byte2;
1064 			if (vpd_nextbyte(&vrs, &byte2)) {
1065 				state = -2;
1066 				break;
1067 			}
1068 			dflen = byte2;
1069 			if (dflen == 0 &&
1070 			    strncmp(cfg->vpd.vpd_ros[off].keyword, "RV",
1071 			    2) == 0) {
1072 				/*
1073 				 * if this happens, we can't trust the rest
1074 				 * of the VPD.
1075 				 */
1076 				kprintf(
1077 				    "pci%d:%d:%d:%d: bad keyword length: %d\n",
1078 				    cfg->domain, cfg->bus, cfg->slot,
1079 				    cfg->func, dflen);
1080 				cksumvalid = 0;
1081 				state = -1;
1082 				break;
1083 			} else if (dflen == 0) {
1084 				cfg->vpd.vpd_ros[off].value = kmalloc(1 *
1085 				    sizeof(*cfg->vpd.vpd_ros[off].value),
1086 				    M_DEVBUF, M_WAITOK);
1087 				cfg->vpd.vpd_ros[off].value[0] = '\x00';
1088 			} else
1089 				cfg->vpd.vpd_ros[off].value = kmalloc(
1090 				    (dflen + 1) *
1091 				    sizeof(*cfg->vpd.vpd_ros[off].value),
1092 				    M_DEVBUF, M_WAITOK);
1093 			remain -= 3;
1094 			i = 0;
1095 			/* keep in sync w/ state 3's transistions */
1096 			if (dflen == 0 && remain == 0)
1097 				state = 0;
1098 			else if (dflen == 0)
1099 				state = 2;
1100 			else
1101 				state = 3;
1102 			break;
1103 
1104 		case 3:	/* VPD-R Keyword Value */
1105 			cfg->vpd.vpd_ros[off].value[i++] = byte;
1106 			if (strncmp(cfg->vpd.vpd_ros[off].keyword,
1107 			    "RV", 2) == 0 && cksumvalid == -1) {
1108 				if (vrs.cksum == 0)
1109 					cksumvalid = 1;
1110 				else {
1111 					if (bootverbose)
1112 						kprintf(
1113 				"pci%d:%d:%d:%d: bad VPD cksum, remain %hhu\n",
1114 						    cfg->domain, cfg->bus,
1115 						    cfg->slot, cfg->func,
1116 						    vrs.cksum);
1117 					cksumvalid = 0;
1118 					state = -1;
1119 					break;
1120 				}
1121 			}
1122 			dflen--;
1123 			remain--;
1124 			/* keep in sync w/ state 2's transistions */
1125 			if (dflen == 0)
1126 				cfg->vpd.vpd_ros[off++].value[i++] = '\0';
1127 			if (dflen == 0 && remain == 0) {
1128 				cfg->vpd.vpd_rocnt = off;
1129 				cfg->vpd.vpd_ros = krealloc(cfg->vpd.vpd_ros,
1130 				    off * sizeof(*cfg->vpd.vpd_ros),
1131 				    M_DEVBUF, M_WAITOK | M_ZERO);
1132 				state = 0;
1133 			} else if (dflen == 0)
1134 				state = 2;
1135 			break;
1136 
1137 		case 4:
1138 			remain--;
1139 			if (remain == 0)
1140 				state = 0;
1141 			break;
1142 
1143 		case 5:	/* VPD-W Keyword Header */
1144 			if (off == alloc) {
1145 				cfg->vpd.vpd_w = krealloc(cfg->vpd.vpd_w,
1146 				    (alloc *= 2) * sizeof(*cfg->vpd.vpd_w),
1147 				    M_DEVBUF, M_WAITOK | M_ZERO);
1148 			}
1149 			cfg->vpd.vpd_w[off].keyword[0] = byte;
1150 			if (vpd_nextbyte(&vrs, &byte2)) {
1151 				state = -2;
1152 				break;
1153 			}
1154 			cfg->vpd.vpd_w[off].keyword[1] = byte2;
1155 			if (vpd_nextbyte(&vrs, &byte2)) {
1156 				state = -2;
1157 				break;
1158 			}
1159 			cfg->vpd.vpd_w[off].len = dflen = byte2;
1160 			cfg->vpd.vpd_w[off].start = vrs.off - vrs.bytesinval;
1161 			cfg->vpd.vpd_w[off].value = kmalloc((dflen + 1) *
1162 			    sizeof(*cfg->vpd.vpd_w[off].value),
1163 			    M_DEVBUF, M_WAITOK);
1164 			remain -= 3;
1165 			i = 0;
1166 			/* keep in sync w/ state 6's transistions */
1167 			if (dflen == 0 && remain == 0)
1168 				state = 0;
1169 			else if (dflen == 0)
1170 				state = 5;
1171 			else
1172 				state = 6;
1173 			break;
1174 
1175 		case 6:	/* VPD-W Keyword Value */
1176 			cfg->vpd.vpd_w[off].value[i++] = byte;
1177 			dflen--;
1178 			remain--;
1179 			/* keep in sync w/ state 5's transistions */
1180 			if (dflen == 0)
1181 				cfg->vpd.vpd_w[off++].value[i++] = '\0';
1182 			if (dflen == 0 && remain == 0) {
1183 				cfg->vpd.vpd_wcnt = off;
1184 				cfg->vpd.vpd_w = krealloc(cfg->vpd.vpd_w,
1185 				    off * sizeof(*cfg->vpd.vpd_w),
1186 				    M_DEVBUF, M_WAITOK | M_ZERO);
1187 				state = 0;
1188 			} else if (dflen == 0)
1189 				state = 5;
1190 			break;
1191 
1192 		default:
1193 			kprintf("pci%d:%d:%d:%d: invalid state: %d\n",
1194 			    cfg->domain, cfg->bus, cfg->slot, cfg->func,
1195 			    state);
1196 			state = -1;
1197 			break;
1198 		}
1199 	}
1200 
1201 	if (cksumvalid == 0 || state < -1) {
1202 		/* read-only data bad, clean up */
1203 		if (cfg->vpd.vpd_ros != NULL) {
1204 			for (off = 0; cfg->vpd.vpd_ros[off].value; off++)
1205 				kfree(cfg->vpd.vpd_ros[off].value, M_DEVBUF);
1206 			kfree(cfg->vpd.vpd_ros, M_DEVBUF);
1207 			cfg->vpd.vpd_ros = NULL;
1208 		}
1209 	}
1210 	if (state < -1) {
1211 		/* I/O error, clean up */
1212 		kprintf("pci%d:%d:%d:%d: failed to read VPD data.\n",
1213 		    cfg->domain, cfg->bus, cfg->slot, cfg->func);
1214 		if (cfg->vpd.vpd_ident != NULL) {
1215 			kfree(cfg->vpd.vpd_ident, M_DEVBUF);
1216 			cfg->vpd.vpd_ident = NULL;
1217 		}
1218 		if (cfg->vpd.vpd_w != NULL) {
1219 			for (off = 0; cfg->vpd.vpd_w[off].value; off++)
1220 				kfree(cfg->vpd.vpd_w[off].value, M_DEVBUF);
1221 			kfree(cfg->vpd.vpd_w, M_DEVBUF);
1222 			cfg->vpd.vpd_w = NULL;
1223 		}
1224 	}
1225 	cfg->vpd.vpd_cached = 1;
1226 #undef REG
1227 #undef WREG
1228 }
1229 
1230 int
1231 pci_get_vpd_ident_method(device_t dev, device_t child, const char **identptr)
1232 {
1233 	struct pci_devinfo *dinfo = device_get_ivars(child);
1234 	pcicfgregs *cfg = &dinfo->cfg;
1235 
1236 	if (!cfg->vpd.vpd_cached && cfg->vpd.vpd_reg != 0)
1237 		pci_read_vpd(device_get_parent(dev), cfg);
1238 
1239 	*identptr = cfg->vpd.vpd_ident;
1240 
1241 	if (*identptr == NULL)
1242 		return (ENXIO);
1243 
1244 	return (0);
1245 }
1246 
1247 int
1248 pci_get_vpd_readonly_method(device_t dev, device_t child, const char *kw,
1249 	const char **vptr)
1250 {
1251 	struct pci_devinfo *dinfo = device_get_ivars(child);
1252 	pcicfgregs *cfg = &dinfo->cfg;
1253 	int i;
1254 
1255 	if (!cfg->vpd.vpd_cached && cfg->vpd.vpd_reg != 0)
1256 		pci_read_vpd(device_get_parent(dev), cfg);
1257 
1258 	for (i = 0; i < cfg->vpd.vpd_rocnt; i++)
1259 		if (memcmp(kw, cfg->vpd.vpd_ros[i].keyword,
1260 		    sizeof(cfg->vpd.vpd_ros[i].keyword)) == 0) {
1261 			*vptr = cfg->vpd.vpd_ros[i].value;
1262 		}
1263 
1264 	if (i != cfg->vpd.vpd_rocnt)
1265 		return (0);
1266 
1267 	*vptr = NULL;
1268 	return (ENXIO);
1269 }
1270 
1271 /*
1272  * Return the offset in configuration space of the requested extended
1273  * capability entry or 0 if the specified capability was not found.
1274  */
1275 int
1276 pci_find_extcap_method(device_t dev, device_t child, int capability,
1277     int *capreg)
1278 {
1279 	struct pci_devinfo *dinfo = device_get_ivars(child);
1280 	pcicfgregs *cfg = &dinfo->cfg;
1281 	u_int32_t status;
1282 	u_int8_t ptr;
1283 
1284 	/*
1285 	 * Check the CAP_LIST bit of the PCI status register first.
1286 	 */
1287 	status = pci_read_config(child, PCIR_STATUS, 2);
1288 	if (!(status & PCIM_STATUS_CAPPRESENT))
1289 		return (ENXIO);
1290 
1291 	/*
1292 	 * Determine the start pointer of the capabilities list.
1293 	 */
1294 	switch (cfg->hdrtype & PCIM_HDRTYPE) {
1295 	case 0:
1296 	case 1:
1297 		ptr = PCIR_CAP_PTR;
1298 		break;
1299 	case 2:
1300 		ptr = PCIR_CAP_PTR_2;
1301 		break;
1302 	default:
1303 		/* XXX: panic? */
1304 		return (ENXIO);		/* no extended capabilities support */
1305 	}
1306 	ptr = pci_read_config(child, ptr, 1);
1307 
1308 	/*
1309 	 * Traverse the capabilities list.
1310 	 */
1311 	while (ptr != 0) {
1312 		if (pci_read_config(child, ptr + PCICAP_ID, 1) == capability) {
1313 			if (capreg != NULL)
1314 				*capreg = ptr;
1315 			return (0);
1316 		}
1317 		ptr = pci_read_config(child, ptr + PCICAP_NEXTPTR, 1);
1318 	}
1319 
1320 	return (ENOENT);
1321 }
1322 
1323 /*
1324  * Support for MSI-X message interrupts.
1325  */
1326 void
1327 pci_enable_msix(device_t dev, u_int index, uint64_t address, uint32_t data)
1328 {
1329 	struct pci_devinfo *dinfo = device_get_ivars(dev);
1330 	struct pcicfg_msix *msix = &dinfo->cfg.msix;
1331 	uint32_t offset;
1332 
1333 	KASSERT(msix->msix_table_len > index, ("bogus index"));
1334 	offset = msix->msix_table_offset + index * 16;
1335 	bus_write_4(msix->msix_table_res, offset, address & 0xffffffff);
1336 	bus_write_4(msix->msix_table_res, offset + 4, address >> 32);
1337 	bus_write_4(msix->msix_table_res, offset + 8, data);
1338 
1339 	/* Enable MSI -> HT mapping. */
1340 	pci_ht_map_msi(dev, address);
1341 }
1342 
1343 void
1344 pci_mask_msix(device_t dev, u_int index)
1345 {
1346 	struct pci_devinfo *dinfo = device_get_ivars(dev);
1347 	struct pcicfg_msix *msix = &dinfo->cfg.msix;
1348 	uint32_t offset, val;
1349 
1350 	KASSERT(msix->msix_msgnum > index, ("bogus index"));
1351 	offset = msix->msix_table_offset + index * 16 + 12;
1352 	val = bus_read_4(msix->msix_table_res, offset);
1353 	if (!(val & PCIM_MSIX_VCTRL_MASK)) {
1354 		val |= PCIM_MSIX_VCTRL_MASK;
1355 		bus_write_4(msix->msix_table_res, offset, val);
1356 	}
1357 }
1358 
1359 void
1360 pci_unmask_msix(device_t dev, u_int index)
1361 {
1362 	struct pci_devinfo *dinfo = device_get_ivars(dev);
1363 	struct pcicfg_msix *msix = &dinfo->cfg.msix;
1364 	uint32_t offset, val;
1365 
1366 	KASSERT(msix->msix_table_len > index, ("bogus index"));
1367 	offset = msix->msix_table_offset + index * 16 + 12;
1368 	val = bus_read_4(msix->msix_table_res, offset);
1369 	if (val & PCIM_MSIX_VCTRL_MASK) {
1370 		val &= ~PCIM_MSIX_VCTRL_MASK;
1371 		bus_write_4(msix->msix_table_res, offset, val);
1372 	}
1373 }
1374 
1375 int
1376 pci_pending_msix(device_t dev, u_int index)
1377 {
1378 	struct pci_devinfo *dinfo = device_get_ivars(dev);
1379 	struct pcicfg_msix *msix = &dinfo->cfg.msix;
1380 	uint32_t offset, bit;
1381 
1382 	KASSERT(msix->msix_table_len > index, ("bogus index"));
1383 	offset = msix->msix_pba_offset + (index / 32) * 4;
1384 	bit = 1 << index % 32;
1385 	return (bus_read_4(msix->msix_pba_res, offset) & bit);
1386 }
1387 
1388 /*
1389  * Restore MSI-X registers and table during resume.  If MSI-X is
1390  * enabled then walk the virtual table to restore the actual MSI-X
1391  * table.
1392  */
1393 static void
1394 pci_resume_msix(device_t dev)
1395 {
1396 	struct pci_devinfo *dinfo = device_get_ivars(dev);
1397 	struct pcicfg_msix *msix = &dinfo->cfg.msix;
1398 	struct msix_table_entry *mte;
1399 	struct msix_vector *mv;
1400 	int i;
1401 
1402 	if (msix->msix_alloc > 0) {
1403 		/* First, mask all vectors. */
1404 		for (i = 0; i < msix->msix_msgnum; i++)
1405 			pci_mask_msix(dev, i);
1406 
1407 		/* Second, program any messages with at least one handler. */
1408 		for (i = 0; i < msix->msix_table_len; i++) {
1409 			mte = &msix->msix_table[i];
1410 			if (mte->mte_vector == 0 || mte->mte_handlers == 0)
1411 				continue;
1412 			mv = &msix->msix_vectors[mte->mte_vector - 1];
1413 			pci_enable_msix(dev, i, mv->mv_address, mv->mv_data);
1414 			pci_unmask_msix(dev, i);
1415 		}
1416 	}
1417 	pci_write_config(dev, msix->msix_location + PCIR_MSIX_CTRL,
1418 	    msix->msix_ctrl, 2);
1419 }
1420 
1421 /*
1422  * Attempt to allocate *count MSI-X messages.  The actual number allocated is
1423  * returned in *count.  After this function returns, each message will be
1424  * available to the driver as SYS_RES_IRQ resources starting at rid 1.
1425  */
1426 int
1427 pci_alloc_msix_method(device_t dev, device_t child, int *count)
1428 {
1429 	struct pci_devinfo *dinfo = device_get_ivars(child);
1430 	pcicfgregs *cfg = &dinfo->cfg;
1431 	struct resource_list_entry *rle;
1432 	int actual, error, i, irq, max;
1433 
1434 	/* Don't let count == 0 get us into trouble. */
1435 	if (*count == 0)
1436 		return (EINVAL);
1437 
1438 	/* If rid 0 is allocated, then fail. */
1439 	rle = resource_list_find(&dinfo->resources, SYS_RES_IRQ, 0);
1440 	if (rle != NULL && rle->res != NULL)
1441 		return (ENXIO);
1442 
1443 	/* Already have allocated messages? */
1444 	if (cfg->msi.msi_alloc != 0 || cfg->msix.msix_alloc != 0)
1445 		return (ENXIO);
1446 
1447 	/* If MSI is blacklisted for this system, fail. */
1448 	if (pci_msi_blacklisted())
1449 		return (ENXIO);
1450 
1451 	/* MSI-X capability present? */
1452 	if (cfg->msix.msix_location == 0 || !pci_do_msix)
1453 		return (ENODEV);
1454 
1455 	/* Make sure the appropriate BARs are mapped. */
1456 	rle = resource_list_find(&dinfo->resources, SYS_RES_MEMORY,
1457 	    cfg->msix.msix_table_bar);
1458 	if (rle == NULL || rle->res == NULL ||
1459 	    !(rman_get_flags(rle->res) & RF_ACTIVE))
1460 		return (ENXIO);
1461 	cfg->msix.msix_table_res = rle->res;
1462 	if (cfg->msix.msix_pba_bar != cfg->msix.msix_table_bar) {
1463 		rle = resource_list_find(&dinfo->resources, SYS_RES_MEMORY,
1464 		    cfg->msix.msix_pba_bar);
1465 		if (rle == NULL || rle->res == NULL ||
1466 		    !(rman_get_flags(rle->res) & RF_ACTIVE))
1467 			return (ENXIO);
1468 	}
1469 	cfg->msix.msix_pba_res = rle->res;
1470 
1471 	if (bootverbose)
1472 		device_printf(child,
1473 		    "attempting to allocate %d MSI-X vectors (%d supported)\n",
1474 		    *count, cfg->msix.msix_msgnum);
1475 	max = min(*count, cfg->msix.msix_msgnum);
1476 	for (i = 0; i < max; i++) {
1477 		/* Allocate a message. */
1478 		error = PCIB_ALLOC_MSIX(device_get_parent(dev), child, &irq);
1479 		if (error)
1480 			break;
1481 		resource_list_add(&dinfo->resources, SYS_RES_IRQ, i + 1, irq,
1482 		    irq, 1);
1483 	}
1484 	actual = i;
1485 
1486 	if (bootverbose) {
1487 		rle = resource_list_find(&dinfo->resources, SYS_RES_IRQ, 1);
1488 		if (actual == 1)
1489 			device_printf(child, "using IRQ %lu for MSI-X\n",
1490 			    rle->start);
1491 		else {
1492 			int run;
1493 
1494 			/*
1495 			 * Be fancy and try to print contiguous runs of
1496 			 * IRQ values as ranges.  'irq' is the previous IRQ.
1497 			 * 'run' is true if we are in a range.
1498 			 */
1499 			device_printf(child, "using IRQs %lu", rle->start);
1500 			irq = rle->start;
1501 			run = 0;
1502 			for (i = 1; i < actual; i++) {
1503 				rle = resource_list_find(&dinfo->resources,
1504 				    SYS_RES_IRQ, i + 1);
1505 
1506 				/* Still in a run? */
1507 				if (rle->start == irq + 1) {
1508 					run = 1;
1509 					irq++;
1510 					continue;
1511 				}
1512 
1513 				/* Finish previous range. */
1514 				if (run) {
1515 					kprintf("-%d", irq);
1516 					run = 0;
1517 				}
1518 
1519 				/* Start new range. */
1520 				kprintf(",%lu", rle->start);
1521 				irq = rle->start;
1522 			}
1523 
1524 			/* Unfinished range? */
1525 			if (run)
1526 				kprintf("-%d", irq);
1527 			kprintf(" for MSI-X\n");
1528 		}
1529 	}
1530 
1531 	/* Mask all vectors. */
1532 	for (i = 0; i < cfg->msix.msix_msgnum; i++)
1533 		pci_mask_msix(child, i);
1534 
1535 	/* Allocate and initialize vector data and virtual table. */
1536 	cfg->msix.msix_vectors = kmalloc(sizeof(struct msix_vector) * actual,
1537 	    M_DEVBUF, M_WAITOK | M_ZERO);
1538 	cfg->msix.msix_table = kmalloc(sizeof(struct msix_table_entry) * actual,
1539 	    M_DEVBUF, M_WAITOK | M_ZERO);
1540 	for (i = 0; i < actual; i++) {
1541 		rle = resource_list_find(&dinfo->resources, SYS_RES_IRQ, i + 1);
1542 		cfg->msix.msix_vectors[i].mv_irq = rle->start;
1543 		cfg->msix.msix_table[i].mte_vector = i + 1;
1544 	}
1545 
1546 	/* Update control register to enable MSI-X. */
1547 	cfg->msix.msix_ctrl |= PCIM_MSIXCTRL_MSIX_ENABLE;
1548 	pci_write_config(child, cfg->msix.msix_location + PCIR_MSIX_CTRL,
1549 	    cfg->msix.msix_ctrl, 2);
1550 
1551 	/* Update counts of alloc'd messages. */
1552 	cfg->msix.msix_alloc = actual;
1553 	cfg->msix.msix_table_len = actual;
1554 	*count = actual;
1555 	return (0);
1556 }
1557 
1558 /*
1559  * By default, pci_alloc_msix() will assign the allocated IRQ
1560  * resources consecutively to the first N messages in the MSI-X table.
1561  * However, device drivers may want to use different layouts if they
1562  * either receive fewer messages than they asked for, or they wish to
1563  * populate the MSI-X table sparsely.  This method allows the driver
1564  * to specify what layout it wants.  It must be called after a
1565  * successful pci_alloc_msix() but before any of the associated
1566  * SYS_RES_IRQ resources are allocated via bus_alloc_resource().
1567  *
1568  * The 'vectors' array contains 'count' message vectors.  The array
1569  * maps directly to the MSI-X table in that index 0 in the array
1570  * specifies the vector for the first message in the MSI-X table, etc.
1571  * The vector value in each array index can either be 0 to indicate
1572  * that no vector should be assigned to a message slot, or it can be a
1573  * number from 1 to N (where N is the count returned from a
1574  * succcessful call to pci_alloc_msix()) to indicate which message
1575  * vector (IRQ) to be used for the corresponding message.
1576  *
1577  * On successful return, each message with a non-zero vector will have
1578  * an associated SYS_RES_IRQ whose rid is equal to the array index +
1579  * 1.  Additionally, if any of the IRQs allocated via the previous
1580  * call to pci_alloc_msix() are not used in the mapping, those IRQs
1581  * will be kfreed back to the system automatically.
1582  *
1583  * For example, suppose a driver has a MSI-X table with 6 messages and
1584  * asks for 6 messages, but pci_alloc_msix() only returns a count of
1585  * 3.  Call the three vectors allocated by pci_alloc_msix() A, B, and
1586  * C.  After the call to pci_alloc_msix(), the device will be setup to
1587  * have an MSI-X table of ABC--- (where - means no vector assigned).
1588  * If the driver ten passes a vector array of { 1, 0, 1, 2, 0, 2 },
1589  * then the MSI-X table will look like A-AB-B, and the 'C' vector will
1590  * be kfreed back to the system.  This device will also have valid
1591  * SYS_RES_IRQ rids of 1, 3, 4, and 6.
1592  *
1593  * In any case, the SYS_RES_IRQ rid X will always map to the message
1594  * at MSI-X table index X - 1 and will only be valid if a vector is
1595  * assigned to that table entry.
1596  */
1597 int
1598 pci_remap_msix_method(device_t dev, device_t child, int count,
1599     const u_int *vectors)
1600 {
1601 	struct pci_devinfo *dinfo = device_get_ivars(child);
1602 	struct pcicfg_msix *msix = &dinfo->cfg.msix;
1603 	struct resource_list_entry *rle;
1604 	int i, irq, j, *used;
1605 
1606 	/*
1607 	 * Have to have at least one message in the table but the
1608 	 * table can't be bigger than the actual MSI-X table in the
1609 	 * device.
1610 	 */
1611 	if (count == 0 || count > msix->msix_msgnum)
1612 		return (EINVAL);
1613 
1614 	/* Sanity check the vectors. */
1615 	for (i = 0; i < count; i++)
1616 		if (vectors[i] > msix->msix_alloc)
1617 			return (EINVAL);
1618 
1619 	/*
1620 	 * Make sure there aren't any holes in the vectors to be used.
1621 	 * It's a big pain to support it, and it doesn't really make
1622 	 * sense anyway.  Also, at least one vector must be used.
1623 	 */
1624 	used = kmalloc(sizeof(int) * msix->msix_alloc, M_DEVBUF, M_WAITOK |
1625 	    M_ZERO);
1626 	for (i = 0; i < count; i++)
1627 		if (vectors[i] != 0)
1628 			used[vectors[i] - 1] = 1;
1629 	for (i = 0; i < msix->msix_alloc - 1; i++)
1630 		if (used[i] == 0 && used[i + 1] == 1) {
1631 			kfree(used, M_DEVBUF);
1632 			return (EINVAL);
1633 		}
1634 	if (used[0] != 1) {
1635 		kfree(used, M_DEVBUF);
1636 		return (EINVAL);
1637 	}
1638 
1639 	/* Make sure none of the resources are allocated. */
1640 	for (i = 0; i < msix->msix_table_len; i++) {
1641 		if (msix->msix_table[i].mte_vector == 0)
1642 			continue;
1643 		if (msix->msix_table[i].mte_handlers > 0)
1644 			return (EBUSY);
1645 		rle = resource_list_find(&dinfo->resources, SYS_RES_IRQ, i + 1);
1646 		KASSERT(rle != NULL, ("missing resource"));
1647 		if (rle->res != NULL)
1648 			return (EBUSY);
1649 	}
1650 
1651 	/* Free the existing resource list entries. */
1652 	for (i = 0; i < msix->msix_table_len; i++) {
1653 		if (msix->msix_table[i].mte_vector == 0)
1654 			continue;
1655 		resource_list_delete(&dinfo->resources, SYS_RES_IRQ, i + 1);
1656 	}
1657 
1658 	/*
1659 	 * Build the new virtual table keeping track of which vectors are
1660 	 * used.
1661 	 */
1662 	kfree(msix->msix_table, M_DEVBUF);
1663 	msix->msix_table = kmalloc(sizeof(struct msix_table_entry) * count,
1664 	    M_DEVBUF, M_WAITOK | M_ZERO);
1665 	for (i = 0; i < count; i++)
1666 		msix->msix_table[i].mte_vector = vectors[i];
1667 	msix->msix_table_len = count;
1668 
1669 	/* Free any unused IRQs and resize the vectors array if necessary. */
1670 	j = msix->msix_alloc - 1;
1671 	if (used[j] == 0) {
1672 		struct msix_vector *vec;
1673 
1674 		while (used[j] == 0) {
1675 			PCIB_RELEASE_MSIX(device_get_parent(dev), child,
1676 			    msix->msix_vectors[j].mv_irq);
1677 			j--;
1678 		}
1679 		vec = kmalloc(sizeof(struct msix_vector) * (j + 1), M_DEVBUF,
1680 		    M_WAITOK);
1681 		bcopy(msix->msix_vectors, vec, sizeof(struct msix_vector) *
1682 		    (j + 1));
1683 		kfree(msix->msix_vectors, M_DEVBUF);
1684 		msix->msix_vectors = vec;
1685 		msix->msix_alloc = j + 1;
1686 	}
1687 	kfree(used, M_DEVBUF);
1688 
1689 	/* Map the IRQs onto the rids. */
1690 	for (i = 0; i < count; i++) {
1691 		if (vectors[i] == 0)
1692 			continue;
1693 		irq = msix->msix_vectors[vectors[i]].mv_irq;
1694 		resource_list_add(&dinfo->resources, SYS_RES_IRQ, i + 1, irq,
1695 		    irq, 1);
1696 	}
1697 
1698 	if (bootverbose) {
1699 		device_printf(child, "Remapped MSI-X IRQs as: ");
1700 		for (i = 0; i < count; i++) {
1701 			if (i != 0)
1702 				kprintf(", ");
1703 			if (vectors[i] == 0)
1704 				kprintf("---");
1705 			else
1706 				kprintf("%d",
1707 				    msix->msix_vectors[vectors[i]].mv_irq);
1708 		}
1709 		kprintf("\n");
1710 	}
1711 
1712 	return (0);
1713 }
1714 
1715 static int
1716 pci_release_msix(device_t dev, device_t child)
1717 {
1718 	struct pci_devinfo *dinfo = device_get_ivars(child);
1719 	struct pcicfg_msix *msix = &dinfo->cfg.msix;
1720 	struct resource_list_entry *rle;
1721 	int i;
1722 
1723 	/* Do we have any messages to release? */
1724 	if (msix->msix_alloc == 0)
1725 		return (ENODEV);
1726 
1727 	/* Make sure none of the resources are allocated. */
1728 	for (i = 0; i < msix->msix_table_len; i++) {
1729 		if (msix->msix_table[i].mte_vector == 0)
1730 			continue;
1731 		if (msix->msix_table[i].mte_handlers > 0)
1732 			return (EBUSY);
1733 		rle = resource_list_find(&dinfo->resources, SYS_RES_IRQ, i + 1);
1734 		KASSERT(rle != NULL, ("missing resource"));
1735 		if (rle->res != NULL)
1736 			return (EBUSY);
1737 	}
1738 
1739 	/* Update control register to disable MSI-X. */
1740 	msix->msix_ctrl &= ~PCIM_MSIXCTRL_MSIX_ENABLE;
1741 	pci_write_config(child, msix->msix_location + PCIR_MSIX_CTRL,
1742 	    msix->msix_ctrl, 2);
1743 
1744 	/* Free the resource list entries. */
1745 	for (i = 0; i < msix->msix_table_len; i++) {
1746 		if (msix->msix_table[i].mte_vector == 0)
1747 			continue;
1748 		resource_list_delete(&dinfo->resources, SYS_RES_IRQ, i + 1);
1749 	}
1750 	kfree(msix->msix_table, M_DEVBUF);
1751 	msix->msix_table_len = 0;
1752 
1753 	/* Release the IRQs. */
1754 	for (i = 0; i < msix->msix_alloc; i++)
1755 		PCIB_RELEASE_MSIX(device_get_parent(dev), child,
1756 		    msix->msix_vectors[i].mv_irq);
1757 	kfree(msix->msix_vectors, M_DEVBUF);
1758 	msix->msix_alloc = 0;
1759 	return (0);
1760 }
1761 
1762 /*
1763  * Return the max supported MSI-X messages this device supports.
1764  * Basically, assuming the MD code can alloc messages, this function
1765  * should return the maximum value that pci_alloc_msix() can return.
1766  * Thus, it is subject to the tunables, etc.
1767  */
1768 int
1769 pci_msix_count_method(device_t dev, device_t child)
1770 {
1771 	struct pci_devinfo *dinfo = device_get_ivars(child);
1772 	struct pcicfg_msix *msix = &dinfo->cfg.msix;
1773 
1774 	if (pci_do_msix && msix->msix_location != 0)
1775 		return (msix->msix_msgnum);
1776 	return (0);
1777 }
1778 
1779 /*
1780  * HyperTransport MSI mapping control
1781  */
1782 void
1783 pci_ht_map_msi(device_t dev, uint64_t addr)
1784 {
1785 	struct pci_devinfo *dinfo = device_get_ivars(dev);
1786 	struct pcicfg_ht *ht = &dinfo->cfg.ht;
1787 
1788 	if (!ht->ht_msimap)
1789 		return;
1790 
1791 	if (addr && !(ht->ht_msictrl & PCIM_HTCMD_MSI_ENABLE) &&
1792 	    ht->ht_msiaddr >> 20 == addr >> 20) {
1793 		/* Enable MSI -> HT mapping. */
1794 		ht->ht_msictrl |= PCIM_HTCMD_MSI_ENABLE;
1795 		pci_write_config(dev, ht->ht_msimap + PCIR_HT_COMMAND,
1796 		    ht->ht_msictrl, 2);
1797 	}
1798 
1799 	if (!addr && ht->ht_msictrl & PCIM_HTCMD_MSI_ENABLE) {
1800 		/* Disable MSI -> HT mapping. */
1801 		ht->ht_msictrl &= ~PCIM_HTCMD_MSI_ENABLE;
1802 		pci_write_config(dev, ht->ht_msimap + PCIR_HT_COMMAND,
1803 		    ht->ht_msictrl, 2);
1804 	}
1805 }
1806 
1807 /*
1808  * Support for MSI message signalled interrupts.
1809  */
1810 void
1811 pci_enable_msi(device_t dev, uint64_t address, uint16_t data)
1812 {
1813 	struct pci_devinfo *dinfo = device_get_ivars(dev);
1814 	struct pcicfg_msi *msi = &dinfo->cfg.msi;
1815 
1816 	/* Write data and address values. */
1817 	pci_write_config(dev, msi->msi_location + PCIR_MSI_ADDR,
1818 	    address & 0xffffffff, 4);
1819 	if (msi->msi_ctrl & PCIM_MSICTRL_64BIT) {
1820 		pci_write_config(dev, msi->msi_location + PCIR_MSI_ADDR_HIGH,
1821 		    address >> 32, 4);
1822 		pci_write_config(dev, msi->msi_location + PCIR_MSI_DATA_64BIT,
1823 		    data, 2);
1824 	} else
1825 		pci_write_config(dev, msi->msi_location + PCIR_MSI_DATA, data,
1826 		    2);
1827 
1828 	/* Enable MSI in the control register. */
1829 	msi->msi_ctrl |= PCIM_MSICTRL_MSI_ENABLE;
1830 	pci_write_config(dev, msi->msi_location + PCIR_MSI_CTRL, msi->msi_ctrl,
1831 	    2);
1832 
1833 	/* Enable MSI -> HT mapping. */
1834 	pci_ht_map_msi(dev, address);
1835 }
1836 
1837 void
1838 pci_disable_msi(device_t dev)
1839 {
1840 	struct pci_devinfo *dinfo = device_get_ivars(dev);
1841 	struct pcicfg_msi *msi = &dinfo->cfg.msi;
1842 
1843 	/* Disable MSI -> HT mapping. */
1844 	pci_ht_map_msi(dev, 0);
1845 
1846 	/* Disable MSI in the control register. */
1847 	msi->msi_ctrl &= ~PCIM_MSICTRL_MSI_ENABLE;
1848 	pci_write_config(dev, msi->msi_location + PCIR_MSI_CTRL, msi->msi_ctrl,
1849 	    2);
1850 }
1851 
1852 /*
1853  * Restore MSI registers during resume.  If MSI is enabled then
1854  * restore the data and address registers in addition to the control
1855  * register.
1856  */
1857 static void
1858 pci_resume_msi(device_t dev)
1859 {
1860 	struct pci_devinfo *dinfo = device_get_ivars(dev);
1861 	struct pcicfg_msi *msi = &dinfo->cfg.msi;
1862 	uint64_t address;
1863 	uint16_t data;
1864 
1865 	if (msi->msi_ctrl & PCIM_MSICTRL_MSI_ENABLE) {
1866 		address = msi->msi_addr;
1867 		data = msi->msi_data;
1868 		pci_write_config(dev, msi->msi_location + PCIR_MSI_ADDR,
1869 		    address & 0xffffffff, 4);
1870 		if (msi->msi_ctrl & PCIM_MSICTRL_64BIT) {
1871 			pci_write_config(dev, msi->msi_location +
1872 			    PCIR_MSI_ADDR_HIGH, address >> 32, 4);
1873 			pci_write_config(dev, msi->msi_location +
1874 			    PCIR_MSI_DATA_64BIT, data, 2);
1875 		} else
1876 			pci_write_config(dev, msi->msi_location + PCIR_MSI_DATA,
1877 			    data, 2);
1878 	}
1879 	pci_write_config(dev, msi->msi_location + PCIR_MSI_CTRL, msi->msi_ctrl,
1880 	    2);
1881 }
1882 
1883 int
1884 pci_remap_msi_irq(device_t dev, u_int irq)
1885 {
1886 	struct pci_devinfo *dinfo = device_get_ivars(dev);
1887 	pcicfgregs *cfg = &dinfo->cfg;
1888 	struct resource_list_entry *rle;
1889 	struct msix_table_entry *mte;
1890 	struct msix_vector *mv;
1891 	device_t bus;
1892 	uint64_t addr;
1893 	uint32_t data;
1894 	int error, i, j;
1895 
1896 	bus = device_get_parent(dev);
1897 
1898 	/*
1899 	 * Handle MSI first.  We try to find this IRQ among our list
1900 	 * of MSI IRQs.  If we find it, we request updated address and
1901 	 * data registers and apply the results.
1902 	 */
1903 	if (cfg->msi.msi_alloc > 0) {
1904 
1905 		/* If we don't have any active handlers, nothing to do. */
1906 		if (cfg->msi.msi_handlers == 0)
1907 			return (0);
1908 		for (i = 0; i < cfg->msi.msi_alloc; i++) {
1909 			rle = resource_list_find(&dinfo->resources, SYS_RES_IRQ,
1910 			    i + 1);
1911 			if (rle->start == irq) {
1912 				error = PCIB_MAP_MSI(device_get_parent(bus),
1913 				    dev, irq, &addr, &data);
1914 				if (error)
1915 					return (error);
1916 				pci_disable_msi(dev);
1917 				dinfo->cfg.msi.msi_addr = addr;
1918 				dinfo->cfg.msi.msi_data = data;
1919 				pci_enable_msi(dev, addr, data);
1920 				return (0);
1921 			}
1922 		}
1923 		return (ENOENT);
1924 	}
1925 
1926 	/*
1927 	 * For MSI-X, we check to see if we have this IRQ.  If we do,
1928 	 * we request the updated mapping info.  If that works, we go
1929 	 * through all the slots that use this IRQ and update them.
1930 	 */
1931 	if (cfg->msix.msix_alloc > 0) {
1932 		for (i = 0; i < cfg->msix.msix_alloc; i++) {
1933 			mv = &cfg->msix.msix_vectors[i];
1934 			if (mv->mv_irq == irq) {
1935 				error = PCIB_MAP_MSI(device_get_parent(bus),
1936 				    dev, irq, &addr, &data);
1937 				if (error)
1938 					return (error);
1939 				mv->mv_address = addr;
1940 				mv->mv_data = data;
1941 				for (j = 0; j < cfg->msix.msix_table_len; j++) {
1942 					mte = &cfg->msix.msix_table[j];
1943 					if (mte->mte_vector != i + 1)
1944 						continue;
1945 					if (mte->mte_handlers == 0)
1946 						continue;
1947 					pci_mask_msix(dev, j);
1948 					pci_enable_msix(dev, j, addr, data);
1949 					pci_unmask_msix(dev, j);
1950 				}
1951 			}
1952 		}
1953 		return (ENOENT);
1954 	}
1955 
1956 	return (ENOENT);
1957 }
1958 
1959 /*
1960  * Returns true if the specified device is blacklisted because MSI
1961  * doesn't work.
1962  */
1963 int
1964 pci_msi_device_blacklisted(device_t dev)
1965 {
1966 	struct pci_quirk *q;
1967 
1968 	if (!pci_honor_msi_blacklist)
1969 		return (0);
1970 
1971 	for (q = &pci_quirks[0]; q->devid; q++) {
1972 		if (q->devid == pci_get_devid(dev) &&
1973 		    q->type == PCI_QUIRK_DISABLE_MSI)
1974 			return (1);
1975 	}
1976 	return (0);
1977 }
1978 
1979 /*
1980  * Determine if MSI is blacklisted globally on this sytem.  Currently,
1981  * we just check for blacklisted chipsets as represented by the
1982  * host-PCI bridge at device 0:0:0.  In the future, it may become
1983  * necessary to check other system attributes, such as the kenv values
1984  * that give the motherboard manufacturer and model number.
1985  */
1986 static int
1987 pci_msi_blacklisted(void)
1988 {
1989 	device_t dev;
1990 
1991 	if (!pci_honor_msi_blacklist)
1992 		return (0);
1993 
1994 	/* Blacklist all non-PCI-express and non-PCI-X chipsets. */
1995 	if (!(pcie_chipset || pcix_chipset))
1996 		return (1);
1997 
1998 	dev = pci_find_bsf(0, 0, 0);
1999 	if (dev != NULL)
2000 		return (pci_msi_device_blacklisted(dev));
2001 	return (0);
2002 }
2003 
2004 /*
2005  * Attempt to allocate *count MSI messages.  The actual number allocated is
2006  * returned in *count.  After this function returns, each message will be
2007  * available to the driver as SYS_RES_IRQ resources starting at a rid 1.
2008  */
2009 int
2010 pci_alloc_msi_method(device_t dev, device_t child, int *count)
2011 {
2012 	struct pci_devinfo *dinfo = device_get_ivars(child);
2013 	pcicfgregs *cfg = &dinfo->cfg;
2014 	struct resource_list_entry *rle;
2015 	int actual, error, i, irqs[32];
2016 	uint16_t ctrl;
2017 
2018 	/* Don't let count == 0 get us into trouble. */
2019 	if (*count == 0)
2020 		return (EINVAL);
2021 
2022 	/* If rid 0 is allocated, then fail. */
2023 	rle = resource_list_find(&dinfo->resources, SYS_RES_IRQ, 0);
2024 	if (rle != NULL && rle->res != NULL)
2025 		return (ENXIO);
2026 
2027 	/* Already have allocated messages? */
2028 	if (cfg->msi.msi_alloc != 0 || cfg->msix.msix_alloc != 0)
2029 		return (ENXIO);
2030 
2031 	/* If MSI is blacklisted for this system, fail. */
2032 	if (pci_msi_blacklisted())
2033 		return (ENXIO);
2034 
2035 	/* MSI capability present? */
2036 	if (cfg->msi.msi_location == 0 || !pci_do_msi)
2037 		return (ENODEV);
2038 
2039 	if (bootverbose)
2040 		device_printf(child,
2041 		    "attempting to allocate %d MSI vectors (%d supported)\n",
2042 		    *count, cfg->msi.msi_msgnum);
2043 
2044 	/* Don't ask for more than the device supports. */
2045 	actual = min(*count, cfg->msi.msi_msgnum);
2046 
2047 	/* Don't ask for more than 32 messages. */
2048 	actual = min(actual, 32);
2049 
2050 	/* MSI requires power of 2 number of messages. */
2051 	if (!powerof2(actual))
2052 		return (EINVAL);
2053 
2054 	for (;;) {
2055 		/* Try to allocate N messages. */
2056 		error = PCIB_ALLOC_MSI(device_get_parent(dev), child, actual,
2057 		    cfg->msi.msi_msgnum, irqs);
2058 		if (error == 0)
2059 			break;
2060 		if (actual == 1)
2061 			return (error);
2062 
2063 		/* Try N / 2. */
2064 		actual >>= 1;
2065 	}
2066 
2067 	/*
2068 	 * We now have N actual messages mapped onto SYS_RES_IRQ
2069 	 * resources in the irqs[] array, so add new resources
2070 	 * starting at rid 1.
2071 	 */
2072 	for (i = 0; i < actual; i++)
2073 		resource_list_add(&dinfo->resources, SYS_RES_IRQ, i + 1,
2074 		    irqs[i], irqs[i], 1);
2075 
2076 	if (bootverbose) {
2077 		if (actual == 1)
2078 			device_printf(child, "using IRQ %d for MSI\n", irqs[0]);
2079 		else {
2080 			int run;
2081 
2082 			/*
2083 			 * Be fancy and try to print contiguous runs
2084 			 * of IRQ values as ranges.  'run' is true if
2085 			 * we are in a range.
2086 			 */
2087 			device_printf(child, "using IRQs %d", irqs[0]);
2088 			run = 0;
2089 			for (i = 1; i < actual; i++) {
2090 
2091 				/* Still in a run? */
2092 				if (irqs[i] == irqs[i - 1] + 1) {
2093 					run = 1;
2094 					continue;
2095 				}
2096 
2097 				/* Finish previous range. */
2098 				if (run) {
2099 					kprintf("-%d", irqs[i - 1]);
2100 					run = 0;
2101 				}
2102 
2103 				/* Start new range. */
2104 				kprintf(",%d", irqs[i]);
2105 			}
2106 
2107 			/* Unfinished range? */
2108 			if (run)
2109 				kprintf("-%d", irqs[actual - 1]);
2110 			kprintf(" for MSI\n");
2111 		}
2112 	}
2113 
2114 	/* Update control register with actual count. */
2115 	ctrl = cfg->msi.msi_ctrl;
2116 	ctrl &= ~PCIM_MSICTRL_MME_MASK;
2117 	ctrl |= (ffs(actual) - 1) << 4;
2118 	cfg->msi.msi_ctrl = ctrl;
2119 	pci_write_config(child, cfg->msi.msi_location + PCIR_MSI_CTRL, ctrl, 2);
2120 
2121 	/* Update counts of alloc'd messages. */
2122 	cfg->msi.msi_alloc = actual;
2123 	cfg->msi.msi_handlers = 0;
2124 	*count = actual;
2125 	return (0);
2126 }
2127 
2128 /* Release the MSI messages associated with this device. */
2129 int
2130 pci_release_msi_method(device_t dev, device_t child)
2131 {
2132 	struct pci_devinfo *dinfo = device_get_ivars(child);
2133 	struct pcicfg_msi *msi = &dinfo->cfg.msi;
2134 	struct resource_list_entry *rle;
2135 	int error, i, irqs[32];
2136 
2137 	/* Try MSI-X first. */
2138 	error = pci_release_msix(dev, child);
2139 	if (error != ENODEV)
2140 		return (error);
2141 
2142 	/* Do we have any messages to release? */
2143 	if (msi->msi_alloc == 0)
2144 		return (ENODEV);
2145 	KASSERT(msi->msi_alloc <= 32, ("more than 32 alloc'd messages"));
2146 
2147 	/* Make sure none of the resources are allocated. */
2148 	if (msi->msi_handlers > 0)
2149 		return (EBUSY);
2150 	for (i = 0; i < msi->msi_alloc; i++) {
2151 		rle = resource_list_find(&dinfo->resources, SYS_RES_IRQ, i + 1);
2152 		KASSERT(rle != NULL, ("missing MSI resource"));
2153 		if (rle->res != NULL)
2154 			return (EBUSY);
2155 		irqs[i] = rle->start;
2156 	}
2157 
2158 	/* Update control register with 0 count. */
2159 	KASSERT(!(msi->msi_ctrl & PCIM_MSICTRL_MSI_ENABLE),
2160 	    ("%s: MSI still enabled", __func__));
2161 	msi->msi_ctrl &= ~PCIM_MSICTRL_MME_MASK;
2162 	pci_write_config(child, msi->msi_location + PCIR_MSI_CTRL,
2163 	    msi->msi_ctrl, 2);
2164 
2165 	/* Release the messages. */
2166 	PCIB_RELEASE_MSI(device_get_parent(dev), child, msi->msi_alloc, irqs);
2167 	for (i = 0; i < msi->msi_alloc; i++)
2168 		resource_list_delete(&dinfo->resources, SYS_RES_IRQ, i + 1);
2169 
2170 	/* Update alloc count. */
2171 	msi->msi_alloc = 0;
2172 	msi->msi_addr = 0;
2173 	msi->msi_data = 0;
2174 	return (0);
2175 }
2176 
2177 /*
2178  * Return the max supported MSI messages this device supports.
2179  * Basically, assuming the MD code can alloc messages, this function
2180  * should return the maximum value that pci_alloc_msi() can return.
2181  * Thus, it is subject to the tunables, etc.
2182  */
2183 int
2184 pci_msi_count_method(device_t dev, device_t child)
2185 {
2186 	struct pci_devinfo *dinfo = device_get_ivars(child);
2187 	struct pcicfg_msi *msi = &dinfo->cfg.msi;
2188 
2189 	if (pci_do_msi && msi->msi_location != 0)
2190 		return (msi->msi_msgnum);
2191 	return (0);
2192 }
2193 
2194 /* kfree pcicfgregs structure and all depending data structures */
2195 
2196 int
2197 pci_freecfg(struct pci_devinfo *dinfo)
2198 {
2199 	struct devlist *devlist_head;
2200 	int i;
2201 
2202 	devlist_head = &pci_devq;
2203 
2204 	if (dinfo->cfg.vpd.vpd_reg) {
2205 		kfree(dinfo->cfg.vpd.vpd_ident, M_DEVBUF);
2206 		for (i = 0; i < dinfo->cfg.vpd.vpd_rocnt; i++)
2207 			kfree(dinfo->cfg.vpd.vpd_ros[i].value, M_DEVBUF);
2208 		kfree(dinfo->cfg.vpd.vpd_ros, M_DEVBUF);
2209 		for (i = 0; i < dinfo->cfg.vpd.vpd_wcnt; i++)
2210 			kfree(dinfo->cfg.vpd.vpd_w[i].value, M_DEVBUF);
2211 		kfree(dinfo->cfg.vpd.vpd_w, M_DEVBUF);
2212 	}
2213 	STAILQ_REMOVE(devlist_head, dinfo, pci_devinfo, pci_links);
2214 	kfree(dinfo, M_DEVBUF);
2215 
2216 	/* increment the generation count */
2217 	pci_generation++;
2218 
2219 	/* we're losing one device */
2220 	pci_numdevs--;
2221 	return (0);
2222 }
2223 
2224 /*
2225  * PCI power manangement
2226  */
2227 int
2228 pci_set_powerstate_method(device_t dev, device_t child, int state)
2229 {
2230 	struct pci_devinfo *dinfo = device_get_ivars(child);
2231 	pcicfgregs *cfg = &dinfo->cfg;
2232 	uint16_t status;
2233 	int result, oldstate, highest, delay;
2234 
2235 	if (cfg->pp.pp_cap == 0)
2236 		return (EOPNOTSUPP);
2237 
2238 	/*
2239 	 * Optimize a no state change request away.  While it would be OK to
2240 	 * write to the hardware in theory, some devices have shown odd
2241 	 * behavior when going from D3 -> D3.
2242 	 */
2243 	oldstate = pci_get_powerstate(child);
2244 	if (oldstate == state)
2245 		return (0);
2246 
2247 	/*
2248 	 * The PCI power management specification states that after a state
2249 	 * transition between PCI power states, system software must
2250 	 * guarantee a minimal delay before the function accesses the device.
2251 	 * Compute the worst case delay that we need to guarantee before we
2252 	 * access the device.  Many devices will be responsive much more
2253 	 * quickly than this delay, but there are some that don't respond
2254 	 * instantly to state changes.  Transitions to/from D3 state require
2255 	 * 10ms, while D2 requires 200us, and D0/1 require none.  The delay
2256 	 * is done below with DELAY rather than a sleeper function because
2257 	 * this function can be called from contexts where we cannot sleep.
2258 	 */
2259 	highest = (oldstate > state) ? oldstate : state;
2260 	if (highest == PCI_POWERSTATE_D3)
2261 	    delay = 10000;
2262 	else if (highest == PCI_POWERSTATE_D2)
2263 	    delay = 200;
2264 	else
2265 	    delay = 0;
2266 	status = PCI_READ_CONFIG(dev, child, cfg->pp.pp_status, 2)
2267 	    & ~PCIM_PSTAT_DMASK;
2268 	result = 0;
2269 	switch (state) {
2270 	case PCI_POWERSTATE_D0:
2271 		status |= PCIM_PSTAT_D0;
2272 		break;
2273 	case PCI_POWERSTATE_D1:
2274 		if ((cfg->pp.pp_cap & PCIM_PCAP_D1SUPP) == 0)
2275 			return (EOPNOTSUPP);
2276 		status |= PCIM_PSTAT_D1;
2277 		break;
2278 	case PCI_POWERSTATE_D2:
2279 		if ((cfg->pp.pp_cap & PCIM_PCAP_D2SUPP) == 0)
2280 			return (EOPNOTSUPP);
2281 		status |= PCIM_PSTAT_D2;
2282 		break;
2283 	case PCI_POWERSTATE_D3:
2284 		status |= PCIM_PSTAT_D3;
2285 		break;
2286 	default:
2287 		return (EINVAL);
2288 	}
2289 
2290 	if (bootverbose)
2291 		kprintf(
2292 		    "pci%d:%d:%d:%d: Transition from D%d to D%d\n",
2293 		    dinfo->cfg.domain, dinfo->cfg.bus, dinfo->cfg.slot,
2294 		    dinfo->cfg.func, oldstate, state);
2295 
2296 	PCI_WRITE_CONFIG(dev, child, cfg->pp.pp_status, status, 2);
2297 	if (delay)
2298 		DELAY(delay);
2299 	return (0);
2300 }
2301 
2302 int
2303 pci_get_powerstate_method(device_t dev, device_t child)
2304 {
2305 	struct pci_devinfo *dinfo = device_get_ivars(child);
2306 	pcicfgregs *cfg = &dinfo->cfg;
2307 	uint16_t status;
2308 	int result;
2309 
2310 	if (cfg->pp.pp_cap != 0) {
2311 		status = PCI_READ_CONFIG(dev, child, cfg->pp.pp_status, 2);
2312 		switch (status & PCIM_PSTAT_DMASK) {
2313 		case PCIM_PSTAT_D0:
2314 			result = PCI_POWERSTATE_D0;
2315 			break;
2316 		case PCIM_PSTAT_D1:
2317 			result = PCI_POWERSTATE_D1;
2318 			break;
2319 		case PCIM_PSTAT_D2:
2320 			result = PCI_POWERSTATE_D2;
2321 			break;
2322 		case PCIM_PSTAT_D3:
2323 			result = PCI_POWERSTATE_D3;
2324 			break;
2325 		default:
2326 			result = PCI_POWERSTATE_UNKNOWN;
2327 			break;
2328 		}
2329 	} else {
2330 		/* No support, device is always at D0 */
2331 		result = PCI_POWERSTATE_D0;
2332 	}
2333 	return (result);
2334 }
2335 
2336 /*
2337  * Some convenience functions for PCI device drivers.
2338  */
2339 
2340 static __inline void
2341 pci_set_command_bit(device_t dev, device_t child, uint16_t bit)
2342 {
2343 	uint16_t	command;
2344 
2345 	command = PCI_READ_CONFIG(dev, child, PCIR_COMMAND, 2);
2346 	command |= bit;
2347 	PCI_WRITE_CONFIG(dev, child, PCIR_COMMAND, command, 2);
2348 }
2349 
2350 static __inline void
2351 pci_clear_command_bit(device_t dev, device_t child, uint16_t bit)
2352 {
2353 	uint16_t	command;
2354 
2355 	command = PCI_READ_CONFIG(dev, child, PCIR_COMMAND, 2);
2356 	command &= ~bit;
2357 	PCI_WRITE_CONFIG(dev, child, PCIR_COMMAND, command, 2);
2358 }
2359 
2360 int
2361 pci_enable_busmaster_method(device_t dev, device_t child)
2362 {
2363 	pci_set_command_bit(dev, child, PCIM_CMD_BUSMASTEREN);
2364 	return (0);
2365 }
2366 
2367 int
2368 pci_disable_busmaster_method(device_t dev, device_t child)
2369 {
2370 	pci_clear_command_bit(dev, child, PCIM_CMD_BUSMASTEREN);
2371 	return (0);
2372 }
2373 
2374 int
2375 pci_enable_io_method(device_t dev, device_t child, int space)
2376 {
2377 	uint16_t command;
2378 	uint16_t bit;
2379 	char *error;
2380 
2381 	bit = 0;
2382 	error = NULL;
2383 
2384 	switch(space) {
2385 	case SYS_RES_IOPORT:
2386 		bit = PCIM_CMD_PORTEN;
2387 		error = "port";
2388 		break;
2389 	case SYS_RES_MEMORY:
2390 		bit = PCIM_CMD_MEMEN;
2391 		error = "memory";
2392 		break;
2393 	default:
2394 		return (EINVAL);
2395 	}
2396 	pci_set_command_bit(dev, child, bit);
2397 	/* Some devices seem to need a brief stall here, what do to? */
2398 	command = PCI_READ_CONFIG(dev, child, PCIR_COMMAND, 2);
2399 	if (command & bit)
2400 		return (0);
2401 	device_printf(child, "failed to enable %s mapping!\n", error);
2402 	return (ENXIO);
2403 }
2404 
2405 int
2406 pci_disable_io_method(device_t dev, device_t child, int space)
2407 {
2408 	uint16_t command;
2409 	uint16_t bit;
2410 	char *error;
2411 
2412 	bit = 0;
2413 	error = NULL;
2414 
2415 	switch(space) {
2416 	case SYS_RES_IOPORT:
2417 		bit = PCIM_CMD_PORTEN;
2418 		error = "port";
2419 		break;
2420 	case SYS_RES_MEMORY:
2421 		bit = PCIM_CMD_MEMEN;
2422 		error = "memory";
2423 		break;
2424 	default:
2425 		return (EINVAL);
2426 	}
2427 	pci_clear_command_bit(dev, child, bit);
2428 	command = PCI_READ_CONFIG(dev, child, PCIR_COMMAND, 2);
2429 	if (command & bit) {
2430 		device_printf(child, "failed to disable %s mapping!\n", error);
2431 		return (ENXIO);
2432 	}
2433 	return (0);
2434 }
2435 
2436 /*
2437  * New style pci driver.  Parent device is either a pci-host-bridge or a
2438  * pci-pci-bridge.  Both kinds are represented by instances of pcib.
2439  */
2440 
2441 void
2442 pci_print_verbose(struct pci_devinfo *dinfo)
2443 {
2444 
2445 	if (bootverbose) {
2446 		pcicfgregs *cfg = &dinfo->cfg;
2447 
2448 		kprintf("found->\tvendor=0x%04x, dev=0x%04x, revid=0x%02x\n",
2449 		    cfg->vendor, cfg->device, cfg->revid);
2450 		kprintf("\tdomain=%d, bus=%d, slot=%d, func=%d\n",
2451 		    cfg->domain, cfg->bus, cfg->slot, cfg->func);
2452 		kprintf("\tclass=%02x-%02x-%02x, hdrtype=0x%02x, mfdev=%d\n",
2453 		    cfg->baseclass, cfg->subclass, cfg->progif, cfg->hdrtype,
2454 		    cfg->mfdev);
2455 		kprintf("\tcmdreg=0x%04x, statreg=0x%04x, cachelnsz=%d (dwords)\n",
2456 		    cfg->cmdreg, cfg->statreg, cfg->cachelnsz);
2457 		kprintf("\tlattimer=0x%02x (%d ns), mingnt=0x%02x (%d ns), maxlat=0x%02x (%d ns)\n",
2458 		    cfg->lattimer, cfg->lattimer * 30, cfg->mingnt,
2459 		    cfg->mingnt * 250, cfg->maxlat, cfg->maxlat * 250);
2460 		if (cfg->intpin > 0)
2461 			kprintf("\tintpin=%c, irq=%d\n",
2462 			    cfg->intpin +'a' -1, cfg->intline);
2463 		if (cfg->pp.pp_cap) {
2464 			uint16_t status;
2465 
2466 			status = pci_read_config(cfg->dev, cfg->pp.pp_status, 2);
2467 			kprintf("\tpowerspec %d  supports D0%s%s D3  current D%d\n",
2468 			    cfg->pp.pp_cap & PCIM_PCAP_SPEC,
2469 			    cfg->pp.pp_cap & PCIM_PCAP_D1SUPP ? " D1" : "",
2470 			    cfg->pp.pp_cap & PCIM_PCAP_D2SUPP ? " D2" : "",
2471 			    status & PCIM_PSTAT_DMASK);
2472 		}
2473 		if (cfg->msi.msi_location) {
2474 			int ctrl;
2475 
2476 			ctrl = cfg->msi.msi_ctrl;
2477 			kprintf("\tMSI supports %d message%s%s%s\n",
2478 			    cfg->msi.msi_msgnum,
2479 			    (cfg->msi.msi_msgnum == 1) ? "" : "s",
2480 			    (ctrl & PCIM_MSICTRL_64BIT) ? ", 64 bit" : "",
2481 			    (ctrl & PCIM_MSICTRL_VECTOR) ? ", vector masks":"");
2482 		}
2483 		if (cfg->msix.msix_location) {
2484 			kprintf("\tMSI-X supports %d message%s ",
2485 			    cfg->msix.msix_msgnum,
2486 			    (cfg->msix.msix_msgnum == 1) ? "" : "s");
2487 			if (cfg->msix.msix_table_bar == cfg->msix.msix_pba_bar)
2488 				kprintf("in map 0x%x\n",
2489 				    cfg->msix.msix_table_bar);
2490 			else
2491 				kprintf("in maps 0x%x and 0x%x\n",
2492 				    cfg->msix.msix_table_bar,
2493 				    cfg->msix.msix_pba_bar);
2494 		}
2495 		pci_print_verbose_expr(cfg);
2496 	}
2497 }
2498 
2499 static void
2500 pci_print_verbose_expr(const pcicfgregs *cfg)
2501 {
2502 	const struct pcicfg_expr *expr = &cfg->expr;
2503 	const char *port_name;
2504 	uint16_t port_type;
2505 
2506 	if (!bootverbose)
2507 		return;
2508 
2509 	if (expr->expr_ptr == 0) /* No PCI Express capability */
2510 		return;
2511 
2512 	kprintf("\tPCI Express ver.%d cap=0x%04x",
2513 		expr->expr_cap & PCIEM_CAP_VER_MASK, expr->expr_cap);
2514 	if ((expr->expr_cap & PCIEM_CAP_VER_MASK) != PCIEM_CAP_VER_1)
2515 		goto back;
2516 
2517 	port_type = expr->expr_cap & PCIEM_CAP_PORT_TYPE;
2518 
2519 	switch (port_type) {
2520 	case PCIE_END_POINT:
2521 		port_name = "DEVICE";
2522 		break;
2523 	case PCIE_LEG_END_POINT:
2524 		port_name = "LEGDEV";
2525 		break;
2526 	case PCIE_ROOT_PORT:
2527 		port_name = "ROOT";
2528 		break;
2529 	case PCIE_UP_STREAM_PORT:
2530 		port_name = "UPSTREAM";
2531 		break;
2532 	case PCIE_DOWN_STREAM_PORT:
2533 		port_name = "DOWNSTRM";
2534 		break;
2535 	case PCIE_PCIE2PCI_BRIDGE:
2536 		port_name = "PCIE2PCI";
2537 		break;
2538 	case PCIE_PCI2PCIE_BRIDGE:
2539 		port_name = "PCI2PCIE";
2540 		break;
2541 	default:
2542 		port_name = NULL;
2543 		break;
2544 	}
2545 	if ((port_type == PCIE_ROOT_PORT ||
2546 	     port_type == PCIE_DOWN_STREAM_PORT) &&
2547 	    !(expr->expr_cap & PCIEM_CAP_SLOT_IMPL))
2548 		port_name = NULL;
2549 	if (port_name != NULL)
2550 		kprintf("[%s]", port_name);
2551 
2552 	if (pcie_slotimpl(cfg)) {
2553 		kprintf(", slotcap=0x%08x", expr->expr_slotcap);
2554 		if (expr->expr_slotcap & PCIEM_SLTCAP_HP_CAP)
2555 			kprintf("[HOTPLUG]");
2556 	}
2557 back:
2558 	kprintf("\n");
2559 }
2560 
2561 static int
2562 pci_porten(device_t pcib, int b, int s, int f)
2563 {
2564 	return (PCIB_READ_CONFIG(pcib, b, s, f, PCIR_COMMAND, 2)
2565 		& PCIM_CMD_PORTEN) != 0;
2566 }
2567 
2568 static int
2569 pci_memen(device_t pcib, int b, int s, int f)
2570 {
2571 	return (PCIB_READ_CONFIG(pcib, b, s, f, PCIR_COMMAND, 2)
2572 		& PCIM_CMD_MEMEN) != 0;
2573 }
2574 
2575 /*
2576  * Add a resource based on a pci map register. Return 1 if the map
2577  * register is a 32bit map register or 2 if it is a 64bit register.
2578  */
2579 static int
2580 pci_add_map(device_t pcib, device_t bus, device_t dev,
2581     int b, int s, int f, int reg, struct resource_list *rl, int force,
2582     int prefetch)
2583 {
2584 	uint32_t map;
2585 	pci_addr_t base;
2586 	pci_addr_t start, end, count;
2587 	uint8_t ln2size;
2588 	uint8_t ln2range;
2589 	uint32_t testval;
2590 	uint16_t cmd;
2591 	int type;
2592 	int barlen;
2593 	struct resource *res;
2594 
2595 	map = PCIB_READ_CONFIG(pcib, b, s, f, reg, 4);
2596 	PCIB_WRITE_CONFIG(pcib, b, s, f, reg, 0xffffffff, 4);
2597 	testval = PCIB_READ_CONFIG(pcib, b, s, f, reg, 4);
2598 	PCIB_WRITE_CONFIG(pcib, b, s, f, reg, map, 4);
2599 
2600 	if (PCI_BAR_MEM(map)) {
2601 		type = SYS_RES_MEMORY;
2602 		if (map & PCIM_BAR_MEM_PREFETCH)
2603 			prefetch = 1;
2604 	} else
2605 		type = SYS_RES_IOPORT;
2606 	ln2size = pci_mapsize(testval);
2607 	ln2range = pci_maprange(testval);
2608 	base = pci_mapbase(map);
2609 	barlen = ln2range == 64 ? 2 : 1;
2610 
2611 	/*
2612 	 * For I/O registers, if bottom bit is set, and the next bit up
2613 	 * isn't clear, we know we have a BAR that doesn't conform to the
2614 	 * spec, so ignore it.  Also, sanity check the size of the data
2615 	 * areas to the type of memory involved.  Memory must be at least
2616 	 * 16 bytes in size, while I/O ranges must be at least 4.
2617 	 */
2618 	if (PCI_BAR_IO(testval) && (testval & PCIM_BAR_IO_RESERVED) != 0)
2619 		return (barlen);
2620 	if ((type == SYS_RES_MEMORY && ln2size < 4) ||
2621 	    (type == SYS_RES_IOPORT && ln2size < 2))
2622 		return (barlen);
2623 
2624 	if (ln2range == 64)
2625 		/* Read the other half of a 64bit map register */
2626 		base |= (uint64_t) PCIB_READ_CONFIG(pcib, b, s, f, reg + 4, 4) << 32;
2627 	if (bootverbose) {
2628 		kprintf("\tmap[%02x]: type %s, range %2d, base %#jx, size %2d",
2629 		    reg, pci_maptype(map), ln2range, (uintmax_t)base, ln2size);
2630 		if (type == SYS_RES_IOPORT && !pci_porten(pcib, b, s, f))
2631 			kprintf(", port disabled\n");
2632 		else if (type == SYS_RES_MEMORY && !pci_memen(pcib, b, s, f))
2633 			kprintf(", memory disabled\n");
2634 		else
2635 			kprintf(", enabled\n");
2636 	}
2637 
2638 	/*
2639 	 * If base is 0, then we have problems.  It is best to ignore
2640 	 * such entries for the moment.  These will be allocated later if
2641 	 * the driver specifically requests them.  However, some
2642 	 * removable busses look better when all resources are allocated,
2643 	 * so allow '0' to be overriden.
2644 	 *
2645 	 * Similarly treat maps whose values is the same as the test value
2646 	 * read back.  These maps have had all f's written to them by the
2647 	 * BIOS in an attempt to disable the resources.
2648 	 */
2649 	if (!force && (base == 0 || map == testval))
2650 		return (barlen);
2651 	if ((u_long)base != base) {
2652 		device_printf(bus,
2653 		    "pci%d:%d:%d:%d bar %#x too many address bits",
2654 		    pci_get_domain(dev), b, s, f, reg);
2655 		return (barlen);
2656 	}
2657 
2658 	/*
2659 	 * This code theoretically does the right thing, but has
2660 	 * undesirable side effects in some cases where peripherals
2661 	 * respond oddly to having these bits enabled.  Let the user
2662 	 * be able to turn them off (since pci_enable_io_modes is 1 by
2663 	 * default).
2664 	 */
2665 	if (pci_enable_io_modes) {
2666 		/* Turn on resources that have been left off by a lazy BIOS */
2667 		if (type == SYS_RES_IOPORT && !pci_porten(pcib, b, s, f)) {
2668 			cmd = PCIB_READ_CONFIG(pcib, b, s, f, PCIR_COMMAND, 2);
2669 			cmd |= PCIM_CMD_PORTEN;
2670 			PCIB_WRITE_CONFIG(pcib, b, s, f, PCIR_COMMAND, cmd, 2);
2671 		}
2672 		if (type == SYS_RES_MEMORY && !pci_memen(pcib, b, s, f)) {
2673 			cmd = PCIB_READ_CONFIG(pcib, b, s, f, PCIR_COMMAND, 2);
2674 			cmd |= PCIM_CMD_MEMEN;
2675 			PCIB_WRITE_CONFIG(pcib, b, s, f, PCIR_COMMAND, cmd, 2);
2676 		}
2677 	} else {
2678 		if (type == SYS_RES_IOPORT && !pci_porten(pcib, b, s, f))
2679 			return (barlen);
2680 		if (type == SYS_RES_MEMORY && !pci_memen(pcib, b, s, f))
2681 			return (barlen);
2682 	}
2683 
2684 	count = 1 << ln2size;
2685 	if (base == 0 || base == pci_mapbase(testval)) {
2686 		start = 0;	/* Let the parent decide. */
2687 		end = ~0ULL;
2688 	} else {
2689 		start = base;
2690 		end = base + (1 << ln2size) - 1;
2691 	}
2692 	resource_list_add(rl, type, reg, start, end, count);
2693 
2694 	/*
2695 	 * Try to allocate the resource for this BAR from our parent
2696 	 * so that this resource range is already reserved.  The
2697 	 * driver for this device will later inherit this resource in
2698 	 * pci_alloc_resource().
2699 	 */
2700 	res = resource_list_alloc(rl, bus, dev, type, &reg, start, end, count,
2701 	    prefetch ? RF_PREFETCHABLE : 0);
2702 	if (res == NULL) {
2703 		/*
2704 		 * If the allocation fails, delete the resource list
2705 		 * entry to force pci_alloc_resource() to allocate
2706 		 * resources from the parent.
2707 		 */
2708 		resource_list_delete(rl, type, reg);
2709 #ifdef PCI_BAR_CLEAR
2710 		/* Clear the BAR */
2711 		start = 0;
2712 #else	/* !PCI_BAR_CLEAR */
2713 		/*
2714 		 * Don't clear BAR here.  Some BIOS lists HPET as a
2715 		 * PCI function, clearing the BAR causes HPET timer
2716 		 * stop ticking.
2717 		 */
2718 		if (bootverbose) {
2719 			kprintf("pci:%d:%d:%d: resource reservation failed "
2720 				"%#jx - %#jx\n", b, s, f,
2721 				(intmax_t)start, (intmax_t)end);
2722 		}
2723 		return (barlen);
2724 #endif	/* PCI_BAR_CLEAR */
2725 	} else {
2726 		start = rman_get_start(res);
2727 	}
2728 	pci_write_config(dev, reg, start, 4);
2729 	if (ln2range == 64)
2730 		pci_write_config(dev, reg + 4, start >> 32, 4);
2731 	return (barlen);
2732 }
2733 
2734 /*
2735  * For ATA devices we need to decide early what addressing mode to use.
2736  * Legacy demands that the primary and secondary ATA ports sits on the
2737  * same addresses that old ISA hardware did. This dictates that we use
2738  * those addresses and ignore the BAR's if we cannot set PCI native
2739  * addressing mode.
2740  */
2741 static void
2742 pci_ata_maps(device_t pcib, device_t bus, device_t dev, int b,
2743     int s, int f, struct resource_list *rl, int force, uint32_t prefetchmask)
2744 {
2745 	int rid, type, progif;
2746 #if 0
2747 	/* if this device supports PCI native addressing use it */
2748 	progif = pci_read_config(dev, PCIR_PROGIF, 1);
2749 	if ((progif & 0x8a) == 0x8a) {
2750 		if (pci_mapbase(pci_read_config(dev, PCIR_BAR(0), 4)) &&
2751 		    pci_mapbase(pci_read_config(dev, PCIR_BAR(2), 4))) {
2752 			kprintf("Trying ATA native PCI addressing mode\n");
2753 			pci_write_config(dev, PCIR_PROGIF, progif | 0x05, 1);
2754 		}
2755 	}
2756 #endif
2757 	progif = pci_read_config(dev, PCIR_PROGIF, 1);
2758 	type = SYS_RES_IOPORT;
2759 	if (progif & PCIP_STORAGE_IDE_MODEPRIM) {
2760 		pci_add_map(pcib, bus, dev, b, s, f, PCIR_BAR(0), rl, force,
2761 		    prefetchmask & (1 << 0));
2762 		pci_add_map(pcib, bus, dev, b, s, f, PCIR_BAR(1), rl, force,
2763 		    prefetchmask & (1 << 1));
2764 	} else {
2765 		rid = PCIR_BAR(0);
2766 		resource_list_add(rl, type, rid, 0x1f0, 0x1f7, 8);
2767 		resource_list_alloc(rl, bus, dev, type, &rid, 0x1f0, 0x1f7, 8,
2768 		    0);
2769 		rid = PCIR_BAR(1);
2770 		resource_list_add(rl, type, rid, 0x3f6, 0x3f6, 1);
2771 		resource_list_alloc(rl, bus, dev, type, &rid, 0x3f6, 0x3f6, 1,
2772 		    0);
2773 	}
2774 	if (progif & PCIP_STORAGE_IDE_MODESEC) {
2775 		pci_add_map(pcib, bus, dev, b, s, f, PCIR_BAR(2), rl, force,
2776 		    prefetchmask & (1 << 2));
2777 		pci_add_map(pcib, bus, dev, b, s, f, PCIR_BAR(3), rl, force,
2778 		    prefetchmask & (1 << 3));
2779 	} else {
2780 		rid = PCIR_BAR(2);
2781 		resource_list_add(rl, type, rid, 0x170, 0x177, 8);
2782 		resource_list_alloc(rl, bus, dev, type, &rid, 0x170, 0x177, 8,
2783 		    0);
2784 		rid = PCIR_BAR(3);
2785 		resource_list_add(rl, type, rid, 0x376, 0x376, 1);
2786 		resource_list_alloc(rl, bus, dev, type, &rid, 0x376, 0x376, 1,
2787 		    0);
2788 	}
2789 	pci_add_map(pcib, bus, dev, b, s, f, PCIR_BAR(4), rl, force,
2790 	    prefetchmask & (1 << 4));
2791 	pci_add_map(pcib, bus, dev, b, s, f, PCIR_BAR(5), rl, force,
2792 	    prefetchmask & (1 << 5));
2793 }
2794 
2795 static void
2796 pci_assign_interrupt(device_t bus, device_t dev, int force_route)
2797 {
2798 	struct pci_devinfo *dinfo = device_get_ivars(dev);
2799 	pcicfgregs *cfg = &dinfo->cfg;
2800 	char tunable_name[64];
2801 	int irq;
2802 
2803 	/* Has to have an intpin to have an interrupt. */
2804 	if (cfg->intpin == 0)
2805 		return;
2806 
2807 	/* Let the user override the IRQ with a tunable. */
2808 	irq = PCI_INVALID_IRQ;
2809 	ksnprintf(tunable_name, sizeof(tunable_name),
2810 	    "hw.pci%d.%d.%d.INT%c.irq",
2811 	    cfg->domain, cfg->bus, cfg->slot, cfg->intpin + 'A' - 1);
2812 	if (TUNABLE_INT_FETCH(tunable_name, &irq) && (irq >= 255 || irq <= 0))
2813 		irq = PCI_INVALID_IRQ;
2814 
2815 	/*
2816 	 * If we didn't get an IRQ via the tunable, then we either use the
2817 	 * IRQ value in the intline register or we ask the bus to route an
2818 	 * interrupt for us.  If force_route is true, then we only use the
2819 	 * value in the intline register if the bus was unable to assign an
2820 	 * IRQ.
2821 	 */
2822 	if (!PCI_INTERRUPT_VALID(irq)) {
2823 		if (!PCI_INTERRUPT_VALID(cfg->intline) || force_route)
2824 			irq = PCI_ASSIGN_INTERRUPT(bus, dev);
2825 		if (!PCI_INTERRUPT_VALID(irq))
2826 			irq = cfg->intline;
2827 	}
2828 
2829 	/* If after all that we don't have an IRQ, just bail. */
2830 	if (!PCI_INTERRUPT_VALID(irq))
2831 		return;
2832 
2833 	/* Update the config register if it changed. */
2834 	if (irq != cfg->intline) {
2835 		cfg->intline = irq;
2836 		pci_write_config(dev, PCIR_INTLINE, irq, 1);
2837 	}
2838 
2839 	/* Add this IRQ as rid 0 interrupt resource. */
2840 	resource_list_add(&dinfo->resources, SYS_RES_IRQ, 0, irq, irq, 1);
2841 }
2842 
2843 void
2844 pci_add_resources(device_t pcib, device_t bus, device_t dev, int force, uint32_t prefetchmask)
2845 {
2846 	struct pci_devinfo *dinfo = device_get_ivars(dev);
2847 	pcicfgregs *cfg = &dinfo->cfg;
2848 	struct resource_list *rl = &dinfo->resources;
2849 	struct pci_quirk *q;
2850 	int b, i, f, s;
2851 
2852 	b = cfg->bus;
2853 	s = cfg->slot;
2854 	f = cfg->func;
2855 
2856 	/* ATA devices needs special map treatment */
2857 	if ((pci_get_class(dev) == PCIC_STORAGE) &&
2858 	    (pci_get_subclass(dev) == PCIS_STORAGE_IDE) &&
2859 	    ((pci_get_progif(dev) & PCIP_STORAGE_IDE_MASTERDEV) ||
2860 	     (!pci_read_config(dev, PCIR_BAR(0), 4) &&
2861 	      !pci_read_config(dev, PCIR_BAR(2), 4))) )
2862 		pci_ata_maps(pcib, bus, dev, b, s, f, rl, force, prefetchmask);
2863 	else
2864 		for (i = 0; i < cfg->nummaps;)
2865 			i += pci_add_map(pcib, bus, dev, b, s, f, PCIR_BAR(i),
2866 			    rl, force, prefetchmask & (1 << i));
2867 
2868 	/*
2869 	 * Add additional, quirked resources.
2870 	 */
2871 	for (q = &pci_quirks[0]; q->devid; q++) {
2872 		if (q->devid == ((cfg->device << 16) | cfg->vendor)
2873 		    && q->type == PCI_QUIRK_MAP_REG)
2874 			pci_add_map(pcib, bus, dev, b, s, f, q->arg1, rl,
2875 			  force, 0);
2876 	}
2877 
2878 	if (cfg->intpin > 0 && PCI_INTERRUPT_VALID(cfg->intline)) {
2879 #if defined(__PCI_REROUTE_INTERRUPT) || defined(APIC_IO)
2880 		/*
2881 		 * Try to re-route interrupts. Sometimes the BIOS or
2882 		 * firmware may leave bogus values in these registers.
2883 		 * If the re-route fails, then just stick with what we
2884 		 * have.
2885 		 */
2886 		pci_assign_interrupt(bus, dev, 1);
2887 #else
2888 		pci_assign_interrupt(bus, dev, 0);
2889 #endif
2890 	}
2891 }
2892 
2893 void
2894 pci_add_children(device_t dev, int domain, int busno, size_t dinfo_size)
2895 {
2896 #define	REG(n, w)	PCIB_READ_CONFIG(pcib, busno, s, f, n, w)
2897 	device_t pcib = device_get_parent(dev);
2898 	struct pci_devinfo *dinfo;
2899 	int maxslots;
2900 	int s, f, pcifunchigh;
2901 	uint8_t hdrtype;
2902 
2903 	KASSERT(dinfo_size >= sizeof(struct pci_devinfo),
2904 	    ("dinfo_size too small"));
2905 	maxslots = PCIB_MAXSLOTS(pcib);
2906 	for (s = 0; s <= maxslots; s++) {
2907 		pcifunchigh = 0;
2908 		f = 0;
2909 		DELAY(1);
2910 		hdrtype = REG(PCIR_HDRTYPE, 1);
2911 		if ((hdrtype & PCIM_HDRTYPE) > PCI_MAXHDRTYPE)
2912 			continue;
2913 		if (hdrtype & PCIM_MFDEV)
2914 			pcifunchigh = PCI_FUNCMAX;
2915 		for (f = 0; f <= pcifunchigh; f++) {
2916 			dinfo = pci_read_device(pcib, domain, busno, s, f,
2917 			    dinfo_size);
2918 			if (dinfo != NULL) {
2919 				pci_add_child(dev, dinfo);
2920 			}
2921 		}
2922 	}
2923 #undef REG
2924 }
2925 
2926 void
2927 pci_add_child(device_t bus, struct pci_devinfo *dinfo)
2928 {
2929 	device_t pcib;
2930 
2931 	pcib = device_get_parent(bus);
2932 	dinfo->cfg.dev = device_add_child(bus, NULL, -1);
2933 	device_set_ivars(dinfo->cfg.dev, dinfo);
2934 	resource_list_init(&dinfo->resources);
2935 	pci_cfg_save(dinfo->cfg.dev, dinfo, 0);
2936 	pci_cfg_restore(dinfo->cfg.dev, dinfo);
2937 	pci_print_verbose(dinfo);
2938 	pci_add_resources(pcib, bus, dinfo->cfg.dev, 0, 0);
2939 }
2940 
2941 static int
2942 pci_probe(device_t dev)
2943 {
2944 	device_set_desc(dev, "PCI bus");
2945 
2946 	/* Allow other subclasses to override this driver. */
2947 	return (-1000);
2948 }
2949 
2950 static int
2951 pci_attach(device_t dev)
2952 {
2953 	int busno, domain;
2954 
2955 	/*
2956 	 * Since there can be multiple independantly numbered PCI
2957 	 * busses on systems with multiple PCI domains, we can't use
2958 	 * the unit number to decide which bus we are probing. We ask
2959 	 * the parent pcib what our domain and bus numbers are.
2960 	 */
2961 	domain = pcib_get_domain(dev);
2962 	busno = pcib_get_bus(dev);
2963 	if (bootverbose)
2964 		device_printf(dev, "domain=%d, physical bus=%d\n",
2965 		    domain, busno);
2966 
2967 	pci_add_children(dev, domain, busno, sizeof(struct pci_devinfo));
2968 
2969 	return (bus_generic_attach(dev));
2970 }
2971 
2972 int
2973 pci_suspend(device_t dev)
2974 {
2975 	int dstate, error, i, numdevs;
2976 	device_t acpi_dev, child, *devlist;
2977 	struct pci_devinfo *dinfo;
2978 
2979 	/*
2980 	 * Save the PCI configuration space for each child and set the
2981 	 * device in the appropriate power state for this sleep state.
2982 	 */
2983 	acpi_dev = NULL;
2984 	if (pci_do_power_resume)
2985 		acpi_dev = devclass_get_device(devclass_find("acpi"), 0);
2986 	device_get_children(dev, &devlist, &numdevs);
2987 	for (i = 0; i < numdevs; i++) {
2988 		child = devlist[i];
2989 		dinfo = (struct pci_devinfo *) device_get_ivars(child);
2990 		pci_cfg_save(child, dinfo, 0);
2991 	}
2992 
2993 	/* Suspend devices before potentially powering them down. */
2994 	error = bus_generic_suspend(dev);
2995 	if (error) {
2996 		kfree(devlist, M_TEMP);
2997 		return (error);
2998 	}
2999 
3000 	/*
3001 	 * Always set the device to D3.  If ACPI suggests a different
3002 	 * power state, use it instead.  If ACPI is not present, the
3003 	 * firmware is responsible for managing device power.  Skip
3004 	 * children who aren't attached since they are powered down
3005 	 * separately.  Only manage type 0 devices for now.
3006 	 */
3007 	for (i = 0; acpi_dev && i < numdevs; i++) {
3008 		child = devlist[i];
3009 		dinfo = (struct pci_devinfo *) device_get_ivars(child);
3010 		if (device_is_attached(child) && dinfo->cfg.hdrtype == 0) {
3011 			dstate = PCI_POWERSTATE_D3;
3012 			ACPI_PWR_FOR_SLEEP(acpi_dev, child, &dstate);
3013 			pci_set_powerstate(child, dstate);
3014 		}
3015 	}
3016 	kfree(devlist, M_TEMP);
3017 	return (0);
3018 }
3019 
3020 int
3021 pci_resume(device_t dev)
3022 {
3023 	int i, numdevs;
3024 	device_t acpi_dev, child, *devlist;
3025 	struct pci_devinfo *dinfo;
3026 
3027 	/*
3028 	 * Set each child to D0 and restore its PCI configuration space.
3029 	 */
3030 	acpi_dev = NULL;
3031 	if (pci_do_power_resume)
3032 		acpi_dev = devclass_get_device(devclass_find("acpi"), 0);
3033 	device_get_children(dev, &devlist, &numdevs);
3034 	for (i = 0; i < numdevs; i++) {
3035 		/*
3036 		 * Notify ACPI we're going to D0 but ignore the result.  If
3037 		 * ACPI is not present, the firmware is responsible for
3038 		 * managing device power.  Only manage type 0 devices for now.
3039 		 */
3040 		child = devlist[i];
3041 		dinfo = (struct pci_devinfo *) device_get_ivars(child);
3042 		if (acpi_dev && device_is_attached(child) &&
3043 		    dinfo->cfg.hdrtype == 0) {
3044 			ACPI_PWR_FOR_SLEEP(acpi_dev, child, NULL);
3045 			pci_set_powerstate(child, PCI_POWERSTATE_D0);
3046 		}
3047 
3048 		/* Now the device is powered up, restore its config space. */
3049 		pci_cfg_restore(child, dinfo);
3050 	}
3051 	kfree(devlist, M_TEMP);
3052 	return (bus_generic_resume(dev));
3053 }
3054 
3055 static void
3056 pci_load_vendor_data(void)
3057 {
3058 	caddr_t vendordata, info;
3059 
3060 	if ((vendordata = preload_search_by_type("pci_vendor_data")) != NULL) {
3061 		info = preload_search_info(vendordata, MODINFO_ADDR);
3062 		pci_vendordata = *(char **)info;
3063 		info = preload_search_info(vendordata, MODINFO_SIZE);
3064 		pci_vendordata_size = *(size_t *)info;
3065 		/* terminate the database */
3066 		pci_vendordata[pci_vendordata_size] = '\n';
3067 	}
3068 }
3069 
3070 void
3071 pci_driver_added(device_t dev, driver_t *driver)
3072 {
3073 	int numdevs;
3074 	device_t *devlist;
3075 	device_t child;
3076 	struct pci_devinfo *dinfo;
3077 	int i;
3078 
3079 	if (bootverbose)
3080 		device_printf(dev, "driver added\n");
3081 	DEVICE_IDENTIFY(driver, dev);
3082 	device_get_children(dev, &devlist, &numdevs);
3083 	for (i = 0; i < numdevs; i++) {
3084 		child = devlist[i];
3085 		if (device_get_state(child) != DS_NOTPRESENT)
3086 			continue;
3087 		dinfo = device_get_ivars(child);
3088 		pci_print_verbose(dinfo);
3089 		if (bootverbose)
3090 			kprintf("pci%d:%d:%d:%d: reprobing on driver added\n",
3091 			    dinfo->cfg.domain, dinfo->cfg.bus, dinfo->cfg.slot,
3092 			    dinfo->cfg.func);
3093 		pci_cfg_restore(child, dinfo);
3094 		if (device_probe_and_attach(child) != 0)
3095 			pci_cfg_save(child, dinfo, 1);
3096 	}
3097 	kfree(devlist, M_TEMP);
3098 }
3099 
3100 static void
3101 pci_child_detached(device_t parent __unused, device_t child)
3102 {
3103 	/* Turn child's power off */
3104 	pci_cfg_save(child, device_get_ivars(child), 1);
3105 }
3106 
3107 int
3108 pci_setup_intr(device_t dev, device_t child, struct resource *irq, int flags,
3109     driver_intr_t *intr, void *arg, void **cookiep, lwkt_serialize_t serializer)
3110 {
3111 #ifdef MSI
3112 	struct pci_devinfo *dinfo;
3113 	struct msix_table_entry *mte;
3114 	struct msix_vector *mv;
3115 	uint64_t addr;
3116 	uint32_t data;
3117 	int rid;
3118 #endif
3119 	int error;
3120 	void *cookie;
3121 	error = bus_generic_setup_intr(dev, child, irq, flags, intr,
3122 	    arg, &cookie, serializer);
3123 	if (error)
3124 		return (error);
3125 
3126 	/* If this is not a direct child, just bail out. */
3127 	if (device_get_parent(child) != dev) {
3128 		*cookiep = cookie;
3129 		return(0);
3130 	}
3131 
3132 	pci_clear_command_bit(dev, child, PCIM_CMD_INTxDIS);
3133 #ifdef MSI
3134 	rid = rman_get_rid(irq);
3135 	if (rid == 0) {
3136 		/* Make sure that INTx is enabled */
3137 		pci_clear_command_bit(dev, child, PCIM_CMD_INTxDIS);
3138 	} else {
3139 		/*
3140 		 * Check to see if the interrupt is MSI or MSI-X.
3141 		 * Ask our parent to map the MSI and give
3142 		 * us the address and data register values.
3143 		 * If we fail for some reason, teardown the
3144 		 * interrupt handler.
3145 		 */
3146 		dinfo = device_get_ivars(child);
3147 		if (dinfo->cfg.msi.msi_alloc > 0) {
3148 			if (dinfo->cfg.msi.msi_addr == 0) {
3149 				KASSERT(dinfo->cfg.msi.msi_handlers == 0,
3150 			    ("MSI has handlers, but vectors not mapped"));
3151 				error = PCIB_MAP_MSI(device_get_parent(dev),
3152 				    child, rman_get_start(irq), &addr, &data);
3153 				if (error)
3154 					goto bad;
3155 				dinfo->cfg.msi.msi_addr = addr;
3156 				dinfo->cfg.msi.msi_data = data;
3157 				pci_enable_msi(child, addr, data);
3158 			}
3159 			dinfo->cfg.msi.msi_handlers++;
3160 		} else {
3161 			KASSERT(dinfo->cfg.msix.msix_alloc > 0,
3162 			    ("No MSI or MSI-X interrupts allocated"));
3163 			KASSERT(rid <= dinfo->cfg.msix.msix_table_len,
3164 			    ("MSI-X index too high"));
3165 			mte = &dinfo->cfg.msix.msix_table[rid - 1];
3166 			KASSERT(mte->mte_vector != 0, ("no message vector"));
3167 			mv = &dinfo->cfg.msix.msix_vectors[mte->mte_vector - 1];
3168 			KASSERT(mv->mv_irq == rman_get_start(irq),
3169 			    ("IRQ mismatch"));
3170 			if (mv->mv_address == 0) {
3171 				KASSERT(mte->mte_handlers == 0,
3172 		    ("MSI-X table entry has handlers, but vector not mapped"));
3173 				error = PCIB_MAP_MSI(device_get_parent(dev),
3174 				    child, rman_get_start(irq), &addr, &data);
3175 				if (error)
3176 					goto bad;
3177 				mv->mv_address = addr;
3178 				mv->mv_data = data;
3179 			}
3180 			if (mte->mte_handlers == 0) {
3181 				pci_enable_msix(child, rid - 1, mv->mv_address,
3182 				    mv->mv_data);
3183 				pci_unmask_msix(child, rid - 1);
3184 			}
3185 			mte->mte_handlers++;
3186 		}
3187 
3188 		/* Make sure that INTx is disabled if we are using MSI/MSIX */
3189 		pci_set_command_bit(dev, child, PCIM_CMD_INTxDIS);
3190 	bad:
3191 		if (error) {
3192 			(void)bus_generic_teardown_intr(dev, child, irq,
3193 			    cookie);
3194 			return (error);
3195 		}
3196 	}
3197 #endif
3198 	*cookiep = cookie;
3199 	return (0);
3200 }
3201 
3202 int
3203 pci_teardown_intr(device_t dev, device_t child, struct resource *irq,
3204     void *cookie)
3205 {
3206 #ifdef MSI
3207 	struct msix_table_entry *mte;
3208 	struct resource_list_entry *rle;
3209 	struct pci_devinfo *dinfo;
3210 	int rid;
3211 #endif
3212 	int error;
3213 
3214 	if (irq == NULL || !(rman_get_flags(irq) & RF_ACTIVE))
3215 		return (EINVAL);
3216 
3217 	/* If this isn't a direct child, just bail out */
3218 	if (device_get_parent(child) != dev)
3219 		return(bus_generic_teardown_intr(dev, child, irq, cookie));
3220 
3221 	pci_set_command_bit(dev, child, PCIM_CMD_INTxDIS);
3222 #ifdef MSI
3223 	rid = rman_get_rid(irq);
3224 	if (rid == 0) {
3225 		/* Mask INTx */
3226 		pci_set_command_bit(dev, child, PCIM_CMD_INTxDIS);
3227 	} else {
3228 		/*
3229 		 * Check to see if the interrupt is MSI or MSI-X.  If so,
3230 		 * decrement the appropriate handlers count and mask the
3231 		 * MSI-X message, or disable MSI messages if the count
3232 		 * drops to 0.
3233 		 */
3234 		dinfo = device_get_ivars(child);
3235 		rle = resource_list_find(&dinfo->resources, SYS_RES_IRQ, rid);
3236 		if (rle->res != irq)
3237 			return (EINVAL);
3238 		if (dinfo->cfg.msi.msi_alloc > 0) {
3239 			KASSERT(rid <= dinfo->cfg.msi.msi_alloc,
3240 			    ("MSI-X index too high"));
3241 			if (dinfo->cfg.msi.msi_handlers == 0)
3242 				return (EINVAL);
3243 			dinfo->cfg.msi.msi_handlers--;
3244 			if (dinfo->cfg.msi.msi_handlers == 0)
3245 				pci_disable_msi(child);
3246 		} else {
3247 			KASSERT(dinfo->cfg.msix.msix_alloc > 0,
3248 			    ("No MSI or MSI-X interrupts allocated"));
3249 			KASSERT(rid <= dinfo->cfg.msix.msix_table_len,
3250 			    ("MSI-X index too high"));
3251 			mte = &dinfo->cfg.msix.msix_table[rid - 1];
3252 			if (mte->mte_handlers == 0)
3253 				return (EINVAL);
3254 			mte->mte_handlers--;
3255 			if (mte->mte_handlers == 0)
3256 				pci_mask_msix(child, rid - 1);
3257 		}
3258 	}
3259 	error = bus_generic_teardown_intr(dev, child, irq, cookie);
3260 	if (rid > 0)
3261 		KASSERT(error == 0,
3262 		    ("%s: generic teardown failed for MSI/MSI-X", __func__));
3263 #endif
3264 	error = bus_generic_teardown_intr(dev, child, irq, cookie);
3265 	return (error);
3266 }
3267 
3268 int
3269 pci_print_child(device_t dev, device_t child)
3270 {
3271 	struct pci_devinfo *dinfo;
3272 	struct resource_list *rl;
3273 	int retval = 0;
3274 
3275 	dinfo = device_get_ivars(child);
3276 	rl = &dinfo->resources;
3277 
3278 	retval += bus_print_child_header(dev, child);
3279 
3280 	retval += resource_list_print_type(rl, "port", SYS_RES_IOPORT, "%#lx");
3281 	retval += resource_list_print_type(rl, "mem", SYS_RES_MEMORY, "%#lx");
3282 	retval += resource_list_print_type(rl, "irq", SYS_RES_IRQ, "%ld");
3283 	if (device_get_flags(dev))
3284 		retval += kprintf(" flags %#x", device_get_flags(dev));
3285 
3286 	retval += kprintf(" at device %d.%d", pci_get_slot(child),
3287 	    pci_get_function(child));
3288 
3289 	retval += bus_print_child_footer(dev, child);
3290 
3291 	return (retval);
3292 }
3293 
3294 static struct
3295 {
3296 	int	class;
3297 	int	subclass;
3298 	char	*desc;
3299 } pci_nomatch_tab[] = {
3300 	{PCIC_OLD,		-1,			"old"},
3301 	{PCIC_OLD,		PCIS_OLD_NONVGA,	"non-VGA display device"},
3302 	{PCIC_OLD,		PCIS_OLD_VGA,		"VGA-compatible display device"},
3303 	{PCIC_STORAGE,		-1,			"mass storage"},
3304 	{PCIC_STORAGE,		PCIS_STORAGE_SCSI,	"SCSI"},
3305 	{PCIC_STORAGE,		PCIS_STORAGE_IDE,	"ATA"},
3306 	{PCIC_STORAGE,		PCIS_STORAGE_FLOPPY,	"floppy disk"},
3307 	{PCIC_STORAGE,		PCIS_STORAGE_IPI,	"IPI"},
3308 	{PCIC_STORAGE,		PCIS_STORAGE_RAID,	"RAID"},
3309 	{PCIC_STORAGE,		PCIS_STORAGE_ATA_ADMA,	"ATA (ADMA)"},
3310 	{PCIC_STORAGE,		PCIS_STORAGE_SATA,	"SATA"},
3311 	{PCIC_STORAGE,		PCIS_STORAGE_SAS,	"SAS"},
3312 	{PCIC_NETWORK,		-1,			"network"},
3313 	{PCIC_NETWORK,		PCIS_NETWORK_ETHERNET,	"ethernet"},
3314 	{PCIC_NETWORK,		PCIS_NETWORK_TOKENRING,	"token ring"},
3315 	{PCIC_NETWORK,		PCIS_NETWORK_FDDI,	"fddi"},
3316 	{PCIC_NETWORK,		PCIS_NETWORK_ATM,	"ATM"},
3317 	{PCIC_NETWORK,		PCIS_NETWORK_ISDN,	"ISDN"},
3318 	{PCIC_DISPLAY,		-1,			"display"},
3319 	{PCIC_DISPLAY,		PCIS_DISPLAY_VGA,	"VGA"},
3320 	{PCIC_DISPLAY,		PCIS_DISPLAY_XGA,	"XGA"},
3321 	{PCIC_DISPLAY,		PCIS_DISPLAY_3D,	"3D"},
3322 	{PCIC_MULTIMEDIA,	-1,			"multimedia"},
3323 	{PCIC_MULTIMEDIA,	PCIS_MULTIMEDIA_VIDEO,	"video"},
3324 	{PCIC_MULTIMEDIA,	PCIS_MULTIMEDIA_AUDIO,	"audio"},
3325 	{PCIC_MULTIMEDIA,	PCIS_MULTIMEDIA_TELE,	"telephony"},
3326 	{PCIC_MULTIMEDIA,	PCIS_MULTIMEDIA_HDA,	"HDA"},
3327 	{PCIC_MEMORY,		-1,			"memory"},
3328 	{PCIC_MEMORY,		PCIS_MEMORY_RAM,	"RAM"},
3329 	{PCIC_MEMORY,		PCIS_MEMORY_FLASH,	"flash"},
3330 	{PCIC_BRIDGE,		-1,			"bridge"},
3331 	{PCIC_BRIDGE,		PCIS_BRIDGE_HOST,	"HOST-PCI"},
3332 	{PCIC_BRIDGE,		PCIS_BRIDGE_ISA,	"PCI-ISA"},
3333 	{PCIC_BRIDGE,		PCIS_BRIDGE_EISA,	"PCI-EISA"},
3334 	{PCIC_BRIDGE,		PCIS_BRIDGE_MCA,	"PCI-MCA"},
3335 	{PCIC_BRIDGE,		PCIS_BRIDGE_PCI,	"PCI-PCI"},
3336 	{PCIC_BRIDGE,		PCIS_BRIDGE_PCMCIA,	"PCI-PCMCIA"},
3337 	{PCIC_BRIDGE,		PCIS_BRIDGE_NUBUS,	"PCI-NuBus"},
3338 	{PCIC_BRIDGE,		PCIS_BRIDGE_CARDBUS,	"PCI-CardBus"},
3339 	{PCIC_BRIDGE,		PCIS_BRIDGE_RACEWAY,	"PCI-RACEway"},
3340 	{PCIC_SIMPLECOMM,	-1,			"simple comms"},
3341 	{PCIC_SIMPLECOMM,	PCIS_SIMPLECOMM_UART,	"UART"},	/* could detect 16550 */
3342 	{PCIC_SIMPLECOMM,	PCIS_SIMPLECOMM_PAR,	"parallel port"},
3343 	{PCIC_SIMPLECOMM,	PCIS_SIMPLECOMM_MULSER,	"multiport serial"},
3344 	{PCIC_SIMPLECOMM,	PCIS_SIMPLECOMM_MODEM,	"generic modem"},
3345 	{PCIC_BASEPERIPH,	-1,			"base peripheral"},
3346 	{PCIC_BASEPERIPH,	PCIS_BASEPERIPH_PIC,	"interrupt controller"},
3347 	{PCIC_BASEPERIPH,	PCIS_BASEPERIPH_DMA,	"DMA controller"},
3348 	{PCIC_BASEPERIPH,	PCIS_BASEPERIPH_TIMER,	"timer"},
3349 	{PCIC_BASEPERIPH,	PCIS_BASEPERIPH_RTC,	"realtime clock"},
3350 	{PCIC_BASEPERIPH,	PCIS_BASEPERIPH_PCIHOT,	"PCI hot-plug controller"},
3351 	{PCIC_BASEPERIPH,	PCIS_BASEPERIPH_SDHC,	"SD host controller"},
3352 	{PCIC_INPUTDEV,		-1,			"input device"},
3353 	{PCIC_INPUTDEV,		PCIS_INPUTDEV_KEYBOARD,	"keyboard"},
3354 	{PCIC_INPUTDEV,		PCIS_INPUTDEV_DIGITIZER,"digitizer"},
3355 	{PCIC_INPUTDEV,		PCIS_INPUTDEV_MOUSE,	"mouse"},
3356 	{PCIC_INPUTDEV,		PCIS_INPUTDEV_SCANNER,	"scanner"},
3357 	{PCIC_INPUTDEV,		PCIS_INPUTDEV_GAMEPORT,	"gameport"},
3358 	{PCIC_DOCKING,		-1,			"docking station"},
3359 	{PCIC_PROCESSOR,	-1,			"processor"},
3360 	{PCIC_SERIALBUS,	-1,			"serial bus"},
3361 	{PCIC_SERIALBUS,	PCIS_SERIALBUS_FW,	"FireWire"},
3362 	{PCIC_SERIALBUS,	PCIS_SERIALBUS_ACCESS,	"AccessBus"},
3363 	{PCIC_SERIALBUS,	PCIS_SERIALBUS_SSA,	"SSA"},
3364 	{PCIC_SERIALBUS,	PCIS_SERIALBUS_USB,	"USB"},
3365 	{PCIC_SERIALBUS,	PCIS_SERIALBUS_FC,	"Fibre Channel"},
3366 	{PCIC_SERIALBUS,	PCIS_SERIALBUS_SMBUS,	"SMBus"},
3367 	{PCIC_WIRELESS,		-1,			"wireless controller"},
3368 	{PCIC_WIRELESS,		PCIS_WIRELESS_IRDA,	"iRDA"},
3369 	{PCIC_WIRELESS,		PCIS_WIRELESS_IR,	"IR"},
3370 	{PCIC_WIRELESS,		PCIS_WIRELESS_RF,	"RF"},
3371 	{PCIC_INTELLIIO,	-1,			"intelligent I/O controller"},
3372 	{PCIC_INTELLIIO,	PCIS_INTELLIIO_I2O,	"I2O"},
3373 	{PCIC_SATCOM,		-1,			"satellite communication"},
3374 	{PCIC_SATCOM,		PCIS_SATCOM_TV,		"sat TV"},
3375 	{PCIC_SATCOM,		PCIS_SATCOM_AUDIO,	"sat audio"},
3376 	{PCIC_SATCOM,		PCIS_SATCOM_VOICE,	"sat voice"},
3377 	{PCIC_SATCOM,		PCIS_SATCOM_DATA,	"sat data"},
3378 	{PCIC_CRYPTO,		-1,			"encrypt/decrypt"},
3379 	{PCIC_CRYPTO,		PCIS_CRYPTO_NETCOMP,	"network/computer crypto"},
3380 	{PCIC_CRYPTO,		PCIS_CRYPTO_ENTERTAIN,	"entertainment crypto"},
3381 	{PCIC_DASP,		-1,			"dasp"},
3382 	{PCIC_DASP,		PCIS_DASP_DPIO,		"DPIO module"},
3383 	{0, 0,		NULL}
3384 };
3385 
3386 void
3387 pci_probe_nomatch(device_t dev, device_t child)
3388 {
3389 	int	i;
3390 	char	*cp, *scp, *device;
3391 
3392 	/*
3393 	 * Look for a listing for this device in a loaded device database.
3394 	 */
3395 	if ((device = pci_describe_device(child)) != NULL) {
3396 		device_printf(dev, "<%s>", device);
3397 		kfree(device, M_DEVBUF);
3398 	} else {
3399 		/*
3400 		 * Scan the class/subclass descriptions for a general
3401 		 * description.
3402 		 */
3403 		cp = "unknown";
3404 		scp = NULL;
3405 		for (i = 0; pci_nomatch_tab[i].desc != NULL; i++) {
3406 			if (pci_nomatch_tab[i].class == pci_get_class(child)) {
3407 				if (pci_nomatch_tab[i].subclass == -1) {
3408 					cp = pci_nomatch_tab[i].desc;
3409 				} else if (pci_nomatch_tab[i].subclass ==
3410 				    pci_get_subclass(child)) {
3411 					scp = pci_nomatch_tab[i].desc;
3412 				}
3413 			}
3414 		}
3415 		device_printf(dev, "<%s%s%s>",
3416 		    cp ? cp : "",
3417 		    ((cp != NULL) && (scp != NULL)) ? ", " : "",
3418 		    scp ? scp : "");
3419 	}
3420 	kprintf(" (vendor 0x%04x, dev 0x%04x) at device %d.%d",
3421 		pci_get_vendor(child), pci_get_device(child),
3422 		pci_get_slot(child), pci_get_function(child));
3423 	if (pci_get_intpin(child) > 0) {
3424 		int irq;
3425 
3426 		irq = pci_get_irq(child);
3427 		if (PCI_INTERRUPT_VALID(irq))
3428 			kprintf(" irq %d", irq);
3429 	}
3430 	kprintf("\n");
3431 
3432 	pci_cfg_save(child, (struct pci_devinfo *)device_get_ivars(child), 1);
3433 }
3434 
3435 /*
3436  * Parse the PCI device database, if loaded, and return a pointer to a
3437  * description of the device.
3438  *
3439  * The database is flat text formatted as follows:
3440  *
3441  * Any line not in a valid format is ignored.
3442  * Lines are terminated with newline '\n' characters.
3443  *
3444  * A VENDOR line consists of the 4 digit (hex) vendor code, a TAB, then
3445  * the vendor name.
3446  *
3447  * A DEVICE line is entered immediately below the corresponding VENDOR ID.
3448  * - devices cannot be listed without a corresponding VENDOR line.
3449  * A DEVICE line consists of a TAB, the 4 digit (hex) device code,
3450  * another TAB, then the device name.
3451  */
3452 
3453 /*
3454  * Assuming (ptr) points to the beginning of a line in the database,
3455  * return the vendor or device and description of the next entry.
3456  * The value of (vendor) or (device) inappropriate for the entry type
3457  * is set to -1.  Returns nonzero at the end of the database.
3458  *
3459  * Note that this is slightly unrobust in the face of corrupt data;
3460  * we attempt to safeguard against this by spamming the end of the
3461  * database with a newline when we initialise.
3462  */
3463 static int
3464 pci_describe_parse_line(char **ptr, int *vendor, int *device, char **desc)
3465 {
3466 	char	*cp = *ptr;
3467 	int	left;
3468 
3469 	*device = -1;
3470 	*vendor = -1;
3471 	**desc = '\0';
3472 	for (;;) {
3473 		left = pci_vendordata_size - (cp - pci_vendordata);
3474 		if (left <= 0) {
3475 			*ptr = cp;
3476 			return(1);
3477 		}
3478 
3479 		/* vendor entry? */
3480 		if (*cp != '\t' &&
3481 		    ksscanf(cp, "%x\t%80[^\n]", vendor, *desc) == 2)
3482 			break;
3483 		/* device entry? */
3484 		if (*cp == '\t' &&
3485 		    ksscanf(cp, "%x\t%80[^\n]", device, *desc) == 2)
3486 			break;
3487 
3488 		/* skip to next line */
3489 		while (*cp != '\n' && left > 0) {
3490 			cp++;
3491 			left--;
3492 		}
3493 		if (*cp == '\n') {
3494 			cp++;
3495 			left--;
3496 		}
3497 	}
3498 	/* skip to next line */
3499 	while (*cp != '\n' && left > 0) {
3500 		cp++;
3501 		left--;
3502 	}
3503 	if (*cp == '\n' && left > 0)
3504 		cp++;
3505 	*ptr = cp;
3506 	return(0);
3507 }
3508 
3509 static char *
3510 pci_describe_device(device_t dev)
3511 {
3512 	int	vendor, device;
3513 	char	*desc, *vp, *dp, *line;
3514 
3515 	desc = vp = dp = NULL;
3516 
3517 	/*
3518 	 * If we have no vendor data, we can't do anything.
3519 	 */
3520 	if (pci_vendordata == NULL)
3521 		goto out;
3522 
3523 	/*
3524 	 * Scan the vendor data looking for this device
3525 	 */
3526 	line = pci_vendordata;
3527 	if ((vp = kmalloc(80, M_DEVBUF, M_NOWAIT)) == NULL)
3528 		goto out;
3529 	for (;;) {
3530 		if (pci_describe_parse_line(&line, &vendor, &device, &vp))
3531 			goto out;
3532 		if (vendor == pci_get_vendor(dev))
3533 			break;
3534 	}
3535 	if ((dp = kmalloc(80, M_DEVBUF, M_NOWAIT)) == NULL)
3536 		goto out;
3537 	for (;;) {
3538 		if (pci_describe_parse_line(&line, &vendor, &device, &dp)) {
3539 			*dp = 0;
3540 			break;
3541 		}
3542 		if (vendor != -1) {
3543 			*dp = 0;
3544 			break;
3545 		}
3546 		if (device == pci_get_device(dev))
3547 			break;
3548 	}
3549 	if (dp[0] == '\0')
3550 		ksnprintf(dp, 80, "0x%x", pci_get_device(dev));
3551 	if ((desc = kmalloc(strlen(vp) + strlen(dp) + 3, M_DEVBUF, M_NOWAIT)) !=
3552 	    NULL)
3553 		ksprintf(desc, "%s, %s", vp, dp);
3554  out:
3555 	if (vp != NULL)
3556 		kfree(vp, M_DEVBUF);
3557 	if (dp != NULL)
3558 		kfree(dp, M_DEVBUF);
3559 	return(desc);
3560 }
3561 
3562 int
3563 pci_read_ivar(device_t dev, device_t child, int which, uintptr_t *result)
3564 {
3565 	struct pci_devinfo *dinfo;
3566 	pcicfgregs *cfg;
3567 
3568 	dinfo = device_get_ivars(child);
3569 	cfg = &dinfo->cfg;
3570 
3571 	switch (which) {
3572 	case PCI_IVAR_ETHADDR:
3573 		/*
3574 		 * The generic accessor doesn't deal with failure, so
3575 		 * we set the return value, then return an error.
3576 		 */
3577 		*((uint8_t **) result) = NULL;
3578 		return (EINVAL);
3579 	case PCI_IVAR_SUBVENDOR:
3580 		*result = cfg->subvendor;
3581 		break;
3582 	case PCI_IVAR_SUBDEVICE:
3583 		*result = cfg->subdevice;
3584 		break;
3585 	case PCI_IVAR_VENDOR:
3586 		*result = cfg->vendor;
3587 		break;
3588 	case PCI_IVAR_DEVICE:
3589 		*result = cfg->device;
3590 		break;
3591 	case PCI_IVAR_DEVID:
3592 		*result = (cfg->device << 16) | cfg->vendor;
3593 		break;
3594 	case PCI_IVAR_CLASS:
3595 		*result = cfg->baseclass;
3596 		break;
3597 	case PCI_IVAR_SUBCLASS:
3598 		*result = cfg->subclass;
3599 		break;
3600 	case PCI_IVAR_PROGIF:
3601 		*result = cfg->progif;
3602 		break;
3603 	case PCI_IVAR_REVID:
3604 		*result = cfg->revid;
3605 		break;
3606 	case PCI_IVAR_INTPIN:
3607 		*result = cfg->intpin;
3608 		break;
3609 	case PCI_IVAR_IRQ:
3610 		*result = cfg->intline;
3611 		break;
3612 	case PCI_IVAR_DOMAIN:
3613 		*result = cfg->domain;
3614 		break;
3615 	case PCI_IVAR_BUS:
3616 		*result = cfg->bus;
3617 		break;
3618 	case PCI_IVAR_SLOT:
3619 		*result = cfg->slot;
3620 		break;
3621 	case PCI_IVAR_FUNCTION:
3622 		*result = cfg->func;
3623 		break;
3624 	case PCI_IVAR_CMDREG:
3625 		*result = cfg->cmdreg;
3626 		break;
3627 	case PCI_IVAR_CACHELNSZ:
3628 		*result = cfg->cachelnsz;
3629 		break;
3630 	case PCI_IVAR_MINGNT:
3631 		*result = cfg->mingnt;
3632 		break;
3633 	case PCI_IVAR_MAXLAT:
3634 		*result = cfg->maxlat;
3635 		break;
3636 	case PCI_IVAR_LATTIMER:
3637 		*result = cfg->lattimer;
3638 		break;
3639 	case PCI_IVAR_PCIXCAP_PTR:
3640 		*result = cfg->pcix.pcix_ptr;
3641 		break;
3642 	case PCI_IVAR_PCIECAP_PTR:
3643 		*result = cfg->expr.expr_ptr;
3644 		break;
3645 	case PCI_IVAR_VPDCAP_PTR:
3646 		*result = cfg->vpd.vpd_reg;
3647 		break;
3648 	default:
3649 		return (ENOENT);
3650 	}
3651 	return (0);
3652 }
3653 
3654 int
3655 pci_write_ivar(device_t dev, device_t child, int which, uintptr_t value)
3656 {
3657 	struct pci_devinfo *dinfo;
3658 
3659 	dinfo = device_get_ivars(child);
3660 
3661 	switch (which) {
3662 	case PCI_IVAR_INTPIN:
3663 		dinfo->cfg.intpin = value;
3664 		return (0);
3665 	case PCI_IVAR_ETHADDR:
3666 	case PCI_IVAR_SUBVENDOR:
3667 	case PCI_IVAR_SUBDEVICE:
3668 	case PCI_IVAR_VENDOR:
3669 	case PCI_IVAR_DEVICE:
3670 	case PCI_IVAR_DEVID:
3671 	case PCI_IVAR_CLASS:
3672 	case PCI_IVAR_SUBCLASS:
3673 	case PCI_IVAR_PROGIF:
3674 	case PCI_IVAR_REVID:
3675 	case PCI_IVAR_IRQ:
3676 	case PCI_IVAR_DOMAIN:
3677 	case PCI_IVAR_BUS:
3678 	case PCI_IVAR_SLOT:
3679 	case PCI_IVAR_FUNCTION:
3680 		return (EINVAL);	/* disallow for now */
3681 
3682 	default:
3683 		return (ENOENT);
3684 	}
3685 }
3686 #ifdef notyet
3687 #include "opt_ddb.h"
3688 #ifdef DDB
3689 #include <ddb/ddb.h>
3690 #include <sys/cons.h>
3691 
3692 /*
3693  * List resources based on pci map registers, used for within ddb
3694  */
3695 
3696 DB_SHOW_COMMAND(pciregs, db_pci_dump)
3697 {
3698 	struct pci_devinfo *dinfo;
3699 	struct devlist *devlist_head;
3700 	struct pci_conf *p;
3701 	const char *name;
3702 	int i, error, none_count;
3703 
3704 	none_count = 0;
3705 	/* get the head of the device queue */
3706 	devlist_head = &pci_devq;
3707 
3708 	/*
3709 	 * Go through the list of devices and print out devices
3710 	 */
3711 	for (error = 0, i = 0,
3712 	     dinfo = STAILQ_FIRST(devlist_head);
3713 	     (dinfo != NULL) && (error == 0) && (i < pci_numdevs) && !db_pager_quit;
3714 	     dinfo = STAILQ_NEXT(dinfo, pci_links), i++) {
3715 
3716 		/* Populate pd_name and pd_unit */
3717 		name = NULL;
3718 		if (dinfo->cfg.dev)
3719 			name = device_get_name(dinfo->cfg.dev);
3720 
3721 		p = &dinfo->conf;
3722 		db_kprintf("%s%d@pci%d:%d:%d:%d:\tclass=0x%06x card=0x%08x "
3723 			"chip=0x%08x rev=0x%02x hdr=0x%02x\n",
3724 			(name && *name) ? name : "none",
3725 			(name && *name) ? (int)device_get_unit(dinfo->cfg.dev) :
3726 			none_count++,
3727 			p->pc_sel.pc_domain, p->pc_sel.pc_bus, p->pc_sel.pc_dev,
3728 			p->pc_sel.pc_func, (p->pc_class << 16) |
3729 			(p->pc_subclass << 8) | p->pc_progif,
3730 			(p->pc_subdevice << 16) | p->pc_subvendor,
3731 			(p->pc_device << 16) | p->pc_vendor,
3732 			p->pc_revid, p->pc_hdr);
3733 	}
3734 }
3735 #endif /* DDB */
3736 #endif
3737 
3738 static struct resource *
3739 pci_alloc_map(device_t dev, device_t child, int type, int *rid,
3740     u_long start, u_long end, u_long count, u_int flags)
3741 {
3742 	struct pci_devinfo *dinfo = device_get_ivars(child);
3743 	struct resource_list *rl = &dinfo->resources;
3744 	struct resource_list_entry *rle;
3745 	struct resource *res;
3746 	pci_addr_t map, testval;
3747 	int mapsize;
3748 
3749 	/*
3750 	 * Weed out the bogons, and figure out how large the BAR/map
3751 	 * is.  Bars that read back 0 here are bogus and unimplemented.
3752 	 * Note: atapci in legacy mode are special and handled elsewhere
3753 	 * in the code.  If you have a atapci device in legacy mode and
3754 	 * it fails here, that other code is broken.
3755 	 */
3756 	res = NULL;
3757 	map = pci_read_config(child, *rid, 4);
3758 	pci_write_config(child, *rid, 0xffffffff, 4);
3759 	testval = pci_read_config(child, *rid, 4);
3760 	if (pci_maprange(testval) == 64)
3761 		map |= (pci_addr_t)pci_read_config(child, *rid + 4, 4) << 32;
3762 	if (pci_mapbase(testval) == 0)
3763 		goto out;
3764 
3765 	/*
3766 	 * Restore the original value of the BAR.  We may have reprogrammed
3767 	 * the BAR of the low-level console device and when booting verbose,
3768 	 * we need the console device addressable.
3769 	 */
3770 	pci_write_config(child, *rid, map, 4);
3771 
3772 	if (PCI_BAR_MEM(testval)) {
3773 		if (type != SYS_RES_MEMORY) {
3774 			if (bootverbose)
3775 				device_printf(dev,
3776 				    "child %s requested type %d for rid %#x,"
3777 				    " but the BAR says it is an memio\n",
3778 				    device_get_nameunit(child), type, *rid);
3779 			goto out;
3780 		}
3781 	} else {
3782 		if (type != SYS_RES_IOPORT) {
3783 			if (bootverbose)
3784 				device_printf(dev,
3785 				    "child %s requested type %d for rid %#x,"
3786 				    " but the BAR says it is an ioport\n",
3787 				    device_get_nameunit(child), type, *rid);
3788 			goto out;
3789 		}
3790 	}
3791 	/*
3792 	 * For real BARs, we need to override the size that
3793 	 * the driver requests, because that's what the BAR
3794 	 * actually uses and we would otherwise have a
3795 	 * situation where we might allocate the excess to
3796 	 * another driver, which won't work.
3797 	 */
3798 	mapsize = pci_mapsize(testval);
3799 	count = 1UL << mapsize;
3800 	if (RF_ALIGNMENT(flags) < mapsize)
3801 		flags = (flags & ~RF_ALIGNMENT_MASK) | RF_ALIGNMENT_LOG2(mapsize);
3802 	if (PCI_BAR_MEM(testval) && (testval & PCIM_BAR_MEM_PREFETCH))
3803 		flags |= RF_PREFETCHABLE;
3804 
3805 	/*
3806 	 * Allocate enough resource, and then write back the
3807 	 * appropriate bar for that resource.
3808 	 */
3809 	res = BUS_ALLOC_RESOURCE(device_get_parent(dev), child, type, rid,
3810 	    start, end, count, flags);
3811 	if (res == NULL) {
3812 		device_printf(child,
3813 		    "%#lx bytes of rid %#x res %d failed (%#lx, %#lx).\n",
3814 		    count, *rid, type, start, end);
3815 		goto out;
3816 	}
3817 	resource_list_add(rl, type, *rid, start, end, count);
3818 	rle = resource_list_find(rl, type, *rid);
3819 	if (rle == NULL)
3820 		panic("pci_alloc_map: unexpectedly can't find resource.");
3821 	rle->res = res;
3822 	rle->start = rman_get_start(res);
3823 	rle->end = rman_get_end(res);
3824 	rle->count = count;
3825 	if (bootverbose)
3826 		device_printf(child,
3827 		    "Lazy allocation of %#lx bytes rid %#x type %d at %#lx\n",
3828 		    count, *rid, type, rman_get_start(res));
3829 	map = rman_get_start(res);
3830 out:;
3831 	pci_write_config(child, *rid, map, 4);
3832 	if (pci_maprange(testval) == 64)
3833 		pci_write_config(child, *rid + 4, map >> 32, 4);
3834 	return (res);
3835 }
3836 
3837 
3838 struct resource *
3839 pci_alloc_resource(device_t dev, device_t child, int type, int *rid,
3840 		   u_long start, u_long end, u_long count, u_int flags)
3841 {
3842 	struct pci_devinfo *dinfo = device_get_ivars(child);
3843 	struct resource_list *rl = &dinfo->resources;
3844 	struct resource_list_entry *rle;
3845 	pcicfgregs *cfg = &dinfo->cfg;
3846 
3847 	/*
3848 	 * Perform lazy resource allocation
3849 	 */
3850 	if (device_get_parent(child) == dev) {
3851 		switch (type) {
3852 		case SYS_RES_IRQ:
3853 			/*
3854 			 * Can't alloc legacy interrupt once MSI messages
3855 			 * have been allocated.
3856 			 */
3857 #ifdef MSI
3858 			if (*rid == 0 && (cfg->msi.msi_alloc > 0 ||
3859 			    cfg->msix.msix_alloc > 0))
3860 				return (NULL);
3861 #endif
3862 			/*
3863 			 * If the child device doesn't have an
3864 			 * interrupt routed and is deserving of an
3865 			 * interrupt, try to assign it one.
3866 			 */
3867 			if (*rid == 0 && !PCI_INTERRUPT_VALID(cfg->intline) &&
3868 			    (cfg->intpin != 0))
3869 				pci_assign_interrupt(dev, child, 0);
3870 			break;
3871 		case SYS_RES_IOPORT:
3872 		case SYS_RES_MEMORY:
3873 			if (*rid < PCIR_BAR(cfg->nummaps)) {
3874 				/*
3875 				 * Enable the I/O mode.  We should
3876 				 * also be assigning resources too
3877 				 * when none are present.  The
3878 				 * resource_list_alloc kind of sorta does
3879 				 * this...
3880 				 */
3881 				if (PCI_ENABLE_IO(dev, child, type))
3882 					return (NULL);
3883 			}
3884 			rle = resource_list_find(rl, type, *rid);
3885 			if (rle == NULL)
3886 				return (pci_alloc_map(dev, child, type, rid,
3887 				    start, end, count, flags));
3888 			break;
3889 		}
3890 		/*
3891 		 * If we've already allocated the resource, then
3892 		 * return it now.  But first we may need to activate
3893 		 * it, since we don't allocate the resource as active
3894 		 * above.  Normally this would be done down in the
3895 		 * nexus, but since we short-circuit that path we have
3896 		 * to do its job here.  Not sure if we should kfree the
3897 		 * resource if it fails to activate.
3898 		 */
3899 		rle = resource_list_find(rl, type, *rid);
3900 		if (rle != NULL && rle->res != NULL) {
3901 			if (bootverbose)
3902 				device_printf(child,
3903 			    "Reserved %#lx bytes for rid %#x type %d at %#lx\n",
3904 				    rman_get_size(rle->res), *rid, type,
3905 				    rman_get_start(rle->res));
3906 			if ((flags & RF_ACTIVE) &&
3907 			    bus_generic_activate_resource(dev, child, type,
3908 			    *rid, rle->res) != 0)
3909 				return (NULL);
3910 			return (rle->res);
3911 		}
3912 	}
3913 	return (resource_list_alloc(rl, dev, child, type, rid,
3914 	    start, end, count, flags));
3915 }
3916 
3917 void
3918 pci_delete_resource(device_t dev, device_t child, int type, int rid)
3919 {
3920 	struct pci_devinfo *dinfo;
3921 	struct resource_list *rl;
3922 	struct resource_list_entry *rle;
3923 
3924 	if (device_get_parent(child) != dev)
3925 		return;
3926 
3927 	dinfo = device_get_ivars(child);
3928 	rl = &dinfo->resources;
3929 	rle = resource_list_find(rl, type, rid);
3930 	if (rle) {
3931 		if (rle->res) {
3932 			if (rman_get_device(rle->res) != dev ||
3933 			    rman_get_flags(rle->res) & RF_ACTIVE) {
3934 				device_printf(dev, "delete_resource: "
3935 				    "Resource still owned by child, oops. "
3936 				    "(type=%d, rid=%d, addr=%lx)\n",
3937 				    rle->type, rle->rid,
3938 				    rman_get_start(rle->res));
3939 				return;
3940 			}
3941 			bus_release_resource(dev, type, rid, rle->res);
3942 		}
3943 		resource_list_delete(rl, type, rid);
3944 	}
3945 	/*
3946 	 * Why do we turn off the PCI configuration BAR when we delete a
3947 	 * resource? -- imp
3948 	 */
3949 	pci_write_config(child, rid, 0, 4);
3950 	BUS_DELETE_RESOURCE(device_get_parent(dev), child, type, rid);
3951 }
3952 
3953 struct resource_list *
3954 pci_get_resource_list (device_t dev, device_t child)
3955 {
3956 	struct pci_devinfo *dinfo = device_get_ivars(child);
3957 
3958 	if (dinfo == NULL)
3959 		return (NULL);
3960 
3961 	return (&dinfo->resources);
3962 }
3963 
3964 uint32_t
3965 pci_read_config_method(device_t dev, device_t child, int reg, int width)
3966 {
3967 	struct pci_devinfo *dinfo = device_get_ivars(child);
3968 	pcicfgregs *cfg = &dinfo->cfg;
3969 
3970 	return (PCIB_READ_CONFIG(device_get_parent(dev),
3971 	    cfg->bus, cfg->slot, cfg->func, reg, width));
3972 }
3973 
3974 void
3975 pci_write_config_method(device_t dev, device_t child, int reg,
3976     uint32_t val, int width)
3977 {
3978 	struct pci_devinfo *dinfo = device_get_ivars(child);
3979 	pcicfgregs *cfg = &dinfo->cfg;
3980 
3981 	PCIB_WRITE_CONFIG(device_get_parent(dev),
3982 	    cfg->bus, cfg->slot, cfg->func, reg, val, width);
3983 }
3984 
3985 int
3986 pci_child_location_str_method(device_t dev, device_t child, char *buf,
3987     size_t buflen)
3988 {
3989 
3990 	ksnprintf(buf, buflen, "slot=%d function=%d", pci_get_slot(child),
3991 	    pci_get_function(child));
3992 	return (0);
3993 }
3994 
3995 int
3996 pci_child_pnpinfo_str_method(device_t dev, device_t child, char *buf,
3997     size_t buflen)
3998 {
3999 	struct pci_devinfo *dinfo;
4000 	pcicfgregs *cfg;
4001 
4002 	dinfo = device_get_ivars(child);
4003 	cfg = &dinfo->cfg;
4004 	ksnprintf(buf, buflen, "vendor=0x%04x device=0x%04x subvendor=0x%04x "
4005 	    "subdevice=0x%04x class=0x%02x%02x%02x", cfg->vendor, cfg->device,
4006 	    cfg->subvendor, cfg->subdevice, cfg->baseclass, cfg->subclass,
4007 	    cfg->progif);
4008 	return (0);
4009 }
4010 
4011 int
4012 pci_assign_interrupt_method(device_t dev, device_t child)
4013 {
4014 	struct pci_devinfo *dinfo = device_get_ivars(child);
4015 	pcicfgregs *cfg = &dinfo->cfg;
4016 
4017 	return (PCIB_ROUTE_INTERRUPT(device_get_parent(dev), child,
4018 	    cfg->intpin));
4019 }
4020 
4021 static int
4022 pci_modevent(module_t mod, int what, void *arg)
4023 {
4024 	static struct cdev *pci_cdev;
4025 
4026 	switch (what) {
4027 	case MOD_LOAD:
4028 		STAILQ_INIT(&pci_devq);
4029 		pci_generation = 0;
4030 		pci_cdev = make_dev(&pcic_ops, 0, UID_ROOT, GID_WHEEL, 0644,
4031 				    "pci");
4032 		pci_load_vendor_data();
4033 		break;
4034 
4035 	case MOD_UNLOAD:
4036 		destroy_dev(pci_cdev);
4037 		break;
4038 	}
4039 
4040 	return (0);
4041 }
4042 
4043 void
4044 pci_cfg_restore(device_t dev, struct pci_devinfo *dinfo)
4045 {
4046 	int i;
4047 
4048 	/*
4049 	 * Only do header type 0 devices.  Type 1 devices are bridges,
4050 	 * which we know need special treatment.  Type 2 devices are
4051 	 * cardbus bridges which also require special treatment.
4052 	 * Other types are unknown, and we err on the side of safety
4053 	 * by ignoring them.
4054 	 */
4055 	if (dinfo->cfg.hdrtype != 0)
4056 		return;
4057 
4058 	/*
4059 	 * Restore the device to full power mode.  We must do this
4060 	 * before we restore the registers because moving from D3 to
4061 	 * D0 will cause the chip's BARs and some other registers to
4062 	 * be reset to some unknown power on reset values.  Cut down
4063 	 * the noise on boot by doing nothing if we are already in
4064 	 * state D0.
4065 	 */
4066 	if (pci_get_powerstate(dev) != PCI_POWERSTATE_D0) {
4067 		pci_set_powerstate(dev, PCI_POWERSTATE_D0);
4068 	}
4069 	for (i = 0; i < dinfo->cfg.nummaps; i++)
4070 		pci_write_config(dev, PCIR_BAR(i), dinfo->cfg.bar[i], 4);
4071 	pci_write_config(dev, PCIR_BIOS, dinfo->cfg.bios, 4);
4072 	pci_write_config(dev, PCIR_COMMAND, dinfo->cfg.cmdreg, 2);
4073 	pci_write_config(dev, PCIR_INTLINE, dinfo->cfg.intline, 1);
4074 	pci_write_config(dev, PCIR_INTPIN, dinfo->cfg.intpin, 1);
4075 	pci_write_config(dev, PCIR_MINGNT, dinfo->cfg.mingnt, 1);
4076 	pci_write_config(dev, PCIR_MAXLAT, dinfo->cfg.maxlat, 1);
4077 	pci_write_config(dev, PCIR_CACHELNSZ, dinfo->cfg.cachelnsz, 1);
4078 	pci_write_config(dev, PCIR_LATTIMER, dinfo->cfg.lattimer, 1);
4079 	pci_write_config(dev, PCIR_PROGIF, dinfo->cfg.progif, 1);
4080 	pci_write_config(dev, PCIR_REVID, dinfo->cfg.revid, 1);
4081 
4082 	/* Restore MSI and MSI-X configurations if they are present. */
4083 	if (dinfo->cfg.msi.msi_location != 0)
4084 		pci_resume_msi(dev);
4085 	if (dinfo->cfg.msix.msix_location != 0)
4086 		pci_resume_msix(dev);
4087 }
4088 
4089 void
4090 pci_cfg_save(device_t dev, struct pci_devinfo *dinfo, int setstate)
4091 {
4092 	int i;
4093 	uint32_t cls;
4094 	int ps;
4095 
4096 	/*
4097 	 * Only do header type 0 devices.  Type 1 devices are bridges, which
4098 	 * we know need special treatment.  Type 2 devices are cardbus bridges
4099 	 * which also require special treatment.  Other types are unknown, and
4100 	 * we err on the side of safety by ignoring them.  Powering down
4101 	 * bridges should not be undertaken lightly.
4102 	 */
4103 	if (dinfo->cfg.hdrtype != 0)
4104 		return;
4105 	for (i = 0; i < dinfo->cfg.nummaps; i++)
4106 		dinfo->cfg.bar[i] = pci_read_config(dev, PCIR_BAR(i), 4);
4107 	dinfo->cfg.bios = pci_read_config(dev, PCIR_BIOS, 4);
4108 
4109 	/*
4110 	 * Some drivers apparently write to these registers w/o updating our
4111 	 * cached copy.  No harm happens if we update the copy, so do so here
4112 	 * so we can restore them.  The COMMAND register is modified by the
4113 	 * bus w/o updating the cache.  This should represent the normally
4114 	 * writable portion of the 'defined' part of type 0 headers.  In
4115 	 * theory we also need to save/restore the PCI capability structures
4116 	 * we know about, but apart from power we don't know any that are
4117 	 * writable.
4118 	 */
4119 	dinfo->cfg.subvendor = pci_read_config(dev, PCIR_SUBVEND_0, 2);
4120 	dinfo->cfg.subdevice = pci_read_config(dev, PCIR_SUBDEV_0, 2);
4121 	dinfo->cfg.vendor = pci_read_config(dev, PCIR_VENDOR, 2);
4122 	dinfo->cfg.device = pci_read_config(dev, PCIR_DEVICE, 2);
4123 	dinfo->cfg.cmdreg = pci_read_config(dev, PCIR_COMMAND, 2);
4124 	dinfo->cfg.intline = pci_read_config(dev, PCIR_INTLINE, 1);
4125 	dinfo->cfg.intpin = pci_read_config(dev, PCIR_INTPIN, 1);
4126 	dinfo->cfg.mingnt = pci_read_config(dev, PCIR_MINGNT, 1);
4127 	dinfo->cfg.maxlat = pci_read_config(dev, PCIR_MAXLAT, 1);
4128 	dinfo->cfg.cachelnsz = pci_read_config(dev, PCIR_CACHELNSZ, 1);
4129 	dinfo->cfg.lattimer = pci_read_config(dev, PCIR_LATTIMER, 1);
4130 	dinfo->cfg.baseclass = pci_read_config(dev, PCIR_CLASS, 1);
4131 	dinfo->cfg.subclass = pci_read_config(dev, PCIR_SUBCLASS, 1);
4132 	dinfo->cfg.progif = pci_read_config(dev, PCIR_PROGIF, 1);
4133 	dinfo->cfg.revid = pci_read_config(dev, PCIR_REVID, 1);
4134 
4135 	/*
4136 	 * don't set the state for display devices, base peripherals and
4137 	 * memory devices since bad things happen when they are powered down.
4138 	 * We should (a) have drivers that can easily detach and (b) use
4139 	 * generic drivers for these devices so that some device actually
4140 	 * attaches.  We need to make sure that when we implement (a) we don't
4141 	 * power the device down on a reattach.
4142 	 */
4143 	cls = pci_get_class(dev);
4144 	if (!setstate)
4145 		return;
4146 	switch (pci_do_power_nodriver)
4147 	{
4148 		case 0:		/* NO powerdown at all */
4149 			return;
4150 		case 1:		/* Conservative about what to power down */
4151 			if (cls == PCIC_STORAGE)
4152 				return;
4153 			/*FALLTHROUGH*/
4154 		case 2:		/* Agressive about what to power down */
4155 			if (cls == PCIC_DISPLAY || cls == PCIC_MEMORY ||
4156 			    cls == PCIC_BASEPERIPH)
4157 				return;
4158 			/*FALLTHROUGH*/
4159 		case 3:		/* Power down everything */
4160 			break;
4161 	}
4162 	/*
4163 	 * PCI spec says we can only go into D3 state from D0 state.
4164 	 * Transition from D[12] into D0 before going to D3 state.
4165 	 */
4166 	ps = pci_get_powerstate(dev);
4167 	if (ps != PCI_POWERSTATE_D0 && ps != PCI_POWERSTATE_D3)
4168 		pci_set_powerstate(dev, PCI_POWERSTATE_D0);
4169 	if (pci_get_powerstate(dev) != PCI_POWERSTATE_D3)
4170 		pci_set_powerstate(dev, PCI_POWERSTATE_D3);
4171 }
4172 
4173 #ifdef COMPAT_OLDPCI
4174 
4175 /*
4176  * Locate the parent of a PCI device by scanning the PCI devlist
4177  * and return the entry for the parent.
4178  * For devices on PCI Bus 0 (the host bus), this is the PCI Host.
4179  * For devices on secondary PCI busses, this is that bus' PCI-PCI Bridge.
4180  */
4181 pcicfgregs *
4182 pci_devlist_get_parent(pcicfgregs *cfg)
4183 {
4184 	struct devlist *devlist_head;
4185 	struct pci_devinfo *dinfo;
4186 	pcicfgregs *bridge_cfg;
4187 	int i;
4188 
4189 	dinfo = STAILQ_FIRST(devlist_head = &pci_devq);
4190 
4191 	/* If the device is on PCI bus 0, look for the host */
4192 	if (cfg->bus == 0) {
4193 		for (i = 0; (dinfo != NULL) && (i < pci_numdevs);
4194 		dinfo = STAILQ_NEXT(dinfo, pci_links), i++) {
4195 			bridge_cfg = &dinfo->cfg;
4196 			if (bridge_cfg->baseclass == PCIC_BRIDGE
4197 				&& bridge_cfg->subclass == PCIS_BRIDGE_HOST
4198 		    		&& bridge_cfg->bus == cfg->bus) {
4199 				return bridge_cfg;
4200 			}
4201 		}
4202 	}
4203 
4204 	/* If the device is not on PCI bus 0, look for the PCI-PCI bridge */
4205 	if (cfg->bus > 0) {
4206 		for (i = 0; (dinfo != NULL) && (i < pci_numdevs);
4207 		dinfo = STAILQ_NEXT(dinfo, pci_links), i++) {
4208 			bridge_cfg = &dinfo->cfg;
4209 			if (bridge_cfg->baseclass == PCIC_BRIDGE
4210 				&& bridge_cfg->subclass == PCIS_BRIDGE_PCI
4211 				&& bridge_cfg->secondarybus == cfg->bus) {
4212 				return bridge_cfg;
4213 			}
4214 		}
4215 	}
4216 
4217 	return NULL;
4218 }
4219 
4220 #endif	/* COMPAT_OLDPCI */
4221