xref: /freebsd/sys/dev/pci/pci.c (revision 87569f75a91f298c52a71823c04d41cf53c88889)
1 /*-
2  * Copyright (c) 1997, Stefan Esser <se@freebsd.org>
3  * Copyright (c) 2000, Michael Smith <msmith@freebsd.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 
29 #include <sys/cdefs.h>
30 __FBSDID("$FreeBSD$");
31 
32 #include "opt_bus.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/types.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 <machine/bus.h>
52 #include <sys/rman.h>
53 #include <machine/resource.h>
54 
55 #include <sys/pciio.h>
56 #include <dev/pci/pcireg.h>
57 #include <dev/pci/pcivar.h>
58 #include <dev/pci/pci_private.h>
59 
60 #include "pcib_if.h"
61 #include "pci_if.h"
62 
63 #ifdef __HAVE_ACPI
64 #include <contrib/dev/acpica/acpi.h>
65 #include "acpi_if.h"
66 #else
67 #define ACPI_PWR_FOR_SLEEP(x, y, z)
68 #endif
69 
70 static uint32_t		pci_mapbase(unsigned mapreg);
71 static int		pci_maptype(unsigned mapreg);
72 static int		pci_mapsize(unsigned testval);
73 static int		pci_maprange(unsigned mapreg);
74 static void		pci_fixancient(pcicfgregs *cfg);
75 
76 static int		pci_porten(device_t pcib, int b, int s, int f);
77 static int		pci_memen(device_t pcib, int b, int s, int f);
78 static void		pci_assign_interrupt(device_t bus, device_t dev,
79 			    int force_route);
80 static int		pci_add_map(device_t pcib, device_t bus, device_t dev,
81 			    int b, int s, int f, int reg,
82 			    struct resource_list *rl, int force, int prefetch);
83 static int		pci_probe(device_t dev);
84 static int		pci_attach(device_t dev);
85 static void		pci_load_vendor_data(void);
86 static int		pci_describe_parse_line(char **ptr, int *vendor,
87 			    int *device, char **desc);
88 static char		*pci_describe_device(device_t dev);
89 static int		pci_modevent(module_t mod, int what, void *arg);
90 static void		pci_hdrtypedata(device_t pcib, int b, int s, int f,
91 			    pcicfgregs *cfg);
92 static void		pci_read_extcap(device_t pcib, pcicfgregs *cfg);
93 
94 static device_method_t pci_methods[] = {
95 	/* Device interface */
96 	DEVMETHOD(device_probe,		pci_probe),
97 	DEVMETHOD(device_attach,	pci_attach),
98 	DEVMETHOD(device_detach,	bus_generic_detach),
99 	DEVMETHOD(device_shutdown,	bus_generic_shutdown),
100 	DEVMETHOD(device_suspend,	pci_suspend),
101 	DEVMETHOD(device_resume,	pci_resume),
102 
103 	/* Bus interface */
104 	DEVMETHOD(bus_print_child,	pci_print_child),
105 	DEVMETHOD(bus_probe_nomatch,	pci_probe_nomatch),
106 	DEVMETHOD(bus_read_ivar,	pci_read_ivar),
107 	DEVMETHOD(bus_write_ivar,	pci_write_ivar),
108 	DEVMETHOD(bus_driver_added,	pci_driver_added),
109 	DEVMETHOD(bus_setup_intr,	bus_generic_setup_intr),
110 	DEVMETHOD(bus_teardown_intr,	bus_generic_teardown_intr),
111 
112 	DEVMETHOD(bus_get_resource_list,pci_get_resource_list),
113 	DEVMETHOD(bus_set_resource,	bus_generic_rl_set_resource),
114 	DEVMETHOD(bus_get_resource,	bus_generic_rl_get_resource),
115 	DEVMETHOD(bus_delete_resource,	pci_delete_resource),
116 	DEVMETHOD(bus_alloc_resource,	pci_alloc_resource),
117 	DEVMETHOD(bus_release_resource,	bus_generic_rl_release_resource),
118 	DEVMETHOD(bus_activate_resource, bus_generic_activate_resource),
119 	DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
120 	DEVMETHOD(bus_child_pnpinfo_str, pci_child_pnpinfo_str_method),
121 	DEVMETHOD(bus_child_location_str, pci_child_location_str_method),
122 
123 	/* PCI interface */
124 	DEVMETHOD(pci_read_config,	pci_read_config_method),
125 	DEVMETHOD(pci_write_config,	pci_write_config_method),
126 	DEVMETHOD(pci_enable_busmaster,	pci_enable_busmaster_method),
127 	DEVMETHOD(pci_disable_busmaster, pci_disable_busmaster_method),
128 	DEVMETHOD(pci_enable_io,	pci_enable_io_method),
129 	DEVMETHOD(pci_disable_io,	pci_disable_io_method),
130 	DEVMETHOD(pci_get_powerstate,	pci_get_powerstate_method),
131 	DEVMETHOD(pci_set_powerstate,	pci_set_powerstate_method),
132 	DEVMETHOD(pci_assign_interrupt,	pci_assign_interrupt_method),
133 	DEVMETHOD(pci_find_extcap,	pci_find_extcap_method),
134 
135 	{ 0, 0 }
136 };
137 
138 DEFINE_CLASS_0(pci, pci_driver, pci_methods, 0);
139 
140 static devclass_t pci_devclass;
141 DRIVER_MODULE(pci, pcib, pci_driver, pci_devclass, pci_modevent, 0);
142 MODULE_VERSION(pci, 1);
143 
144 static char	*pci_vendordata;
145 static size_t	pci_vendordata_size;
146 
147 
148 struct pci_quirk {
149 	uint32_t devid;	/* Vendor/device of the card */
150 	int	type;
151 #define PCI_QUIRK_MAP_REG	1 /* PCI map register in weird place */
152 	int	arg1;
153 	int	arg2;
154 };
155 
156 struct pci_quirk pci_quirks[] = {
157 	/* The Intel 82371AB and 82443MX has a map register at offset 0x90. */
158 	{ 0x71138086, PCI_QUIRK_MAP_REG,	0x90,	 0 },
159 	{ 0x719b8086, PCI_QUIRK_MAP_REG,	0x90,	 0 },
160 	/* As does the Serverworks OSB4 (the SMBus mapping register) */
161 	{ 0x02001166, PCI_QUIRK_MAP_REG,	0x90,	 0 },
162 
163 	{ 0 }
164 };
165 
166 /* map register information */
167 #define PCI_MAPMEM	0x01	/* memory map */
168 #define PCI_MAPMEMP	0x02	/* prefetchable memory map */
169 #define PCI_MAPPORT	0x04	/* port map */
170 
171 struct devlist pci_devq;
172 uint32_t pci_generation;
173 uint32_t pci_numdevs = 0;
174 
175 /* sysctl vars */
176 SYSCTL_NODE(_hw, OID_AUTO, pci, CTLFLAG_RD, 0, "PCI bus tuning parameters");
177 
178 static int pci_enable_io_modes = 1;
179 TUNABLE_INT("hw.pci.enable_io_modes", &pci_enable_io_modes);
180 SYSCTL_INT(_hw_pci, OID_AUTO, enable_io_modes, CTLFLAG_RW,
181     &pci_enable_io_modes, 1,
182     "Enable I/O and memory bits in the config register.  Some BIOSes do not\n\
183 enable these bits correctly.  We'd like to do this all the time, but there\n\
184 are some peripherals that this causes problems with.");
185 
186 static int pci_do_power_nodriver = 0;
187 TUNABLE_INT("hw.pci.do_power_nodriver", &pci_do_power_nodriver);
188 SYSCTL_INT(_hw_pci, OID_AUTO, do_power_nodriver, CTLFLAG_RW,
189     &pci_do_power_nodriver, 0,
190   "Place a function into D3 state when no driver attaches to it.  0 means\n\
191 disable.  1 means conservatively place devices into D3 state.  2 means\n\
192 agressively place devices into D3 state.  3 means put absolutely everything\n\
193 in D3 state.");
194 
195 static int pci_do_power_resume = 1;
196 TUNABLE_INT("hw.pci.do_power_resume", &pci_do_power_resume);
197 SYSCTL_INT(_hw_pci, OID_AUTO, do_power_resume, CTLFLAG_RW,
198     &pci_do_power_resume, 1,
199   "Transition from D3 -> D0 on resume.");
200 
201 /* Find a device_t by bus/slot/function */
202 
203 device_t
204 pci_find_bsf(uint8_t bus, uint8_t slot, uint8_t func)
205 {
206 	struct pci_devinfo *dinfo;
207 
208 	STAILQ_FOREACH(dinfo, &pci_devq, pci_links) {
209 		if ((dinfo->cfg.bus == bus) &&
210 		    (dinfo->cfg.slot == slot) &&
211 		    (dinfo->cfg.func == func)) {
212 			return (dinfo->cfg.dev);
213 		}
214 	}
215 
216 	return (NULL);
217 }
218 
219 /* Find a device_t by vendor/device ID */
220 
221 device_t
222 pci_find_device(uint16_t vendor, uint16_t device)
223 {
224 	struct pci_devinfo *dinfo;
225 
226 	STAILQ_FOREACH(dinfo, &pci_devq, pci_links) {
227 		if ((dinfo->cfg.vendor == vendor) &&
228 		    (dinfo->cfg.device == device)) {
229 			return (dinfo->cfg.dev);
230 		}
231 	}
232 
233 	return (NULL);
234 }
235 
236 /* return base address of memory or port map */
237 
238 static uint32_t
239 pci_mapbase(unsigned mapreg)
240 {
241 	int mask = 0x03;
242 	if ((mapreg & 0x01) == 0)
243 		mask = 0x0f;
244 	return (mapreg & ~mask);
245 }
246 
247 /* return map type of memory or port map */
248 
249 static int
250 pci_maptype(unsigned mapreg)
251 {
252 	static uint8_t maptype[0x10] = {
253 		PCI_MAPMEM,		PCI_MAPPORT,
254 		PCI_MAPMEM,		0,
255 		PCI_MAPMEM,		PCI_MAPPORT,
256 		0,			0,
257 		PCI_MAPMEM|PCI_MAPMEMP,	PCI_MAPPORT,
258 		PCI_MAPMEM|PCI_MAPMEMP, 0,
259 		PCI_MAPMEM|PCI_MAPMEMP,	PCI_MAPPORT,
260 		0,			0,
261 	};
262 
263 	return maptype[mapreg & 0x0f];
264 }
265 
266 /* return log2 of map size decoded for memory or port map */
267 
268 static int
269 pci_mapsize(unsigned testval)
270 {
271 	int ln2size;
272 
273 	testval = pci_mapbase(testval);
274 	ln2size = 0;
275 	if (testval != 0) {
276 		while ((testval & 1) == 0)
277 		{
278 			ln2size++;
279 			testval >>= 1;
280 		}
281 	}
282 	return (ln2size);
283 }
284 
285 /* return log2 of address range supported by map register */
286 
287 static int
288 pci_maprange(unsigned mapreg)
289 {
290 	int ln2range = 0;
291 	switch (mapreg & 0x07) {
292 	case 0x00:
293 	case 0x01:
294 	case 0x05:
295 		ln2range = 32;
296 		break;
297 	case 0x02:
298 		ln2range = 20;
299 		break;
300 	case 0x04:
301 		ln2range = 64;
302 		break;
303 	}
304 	return (ln2range);
305 }
306 
307 /* adjust some values from PCI 1.0 devices to match 2.0 standards ... */
308 
309 static void
310 pci_fixancient(pcicfgregs *cfg)
311 {
312 	if (cfg->hdrtype != 0)
313 		return;
314 
315 	/* PCI to PCI bridges use header type 1 */
316 	if (cfg->baseclass == PCIC_BRIDGE && cfg->subclass == PCIS_BRIDGE_PCI)
317 		cfg->hdrtype = 1;
318 }
319 
320 /* extract header type specific config data */
321 
322 static void
323 pci_hdrtypedata(device_t pcib, int b, int s, int f, pcicfgregs *cfg)
324 {
325 #define REG(n, w)	PCIB_READ_CONFIG(pcib, b, s, f, n, w)
326 	switch (cfg->hdrtype) {
327 	case 0:
328 		cfg->subvendor      = REG(PCIR_SUBVEND_0, 2);
329 		cfg->subdevice      = REG(PCIR_SUBDEV_0, 2);
330 		cfg->nummaps	    = PCI_MAXMAPS_0;
331 		break;
332 	case 1:
333 		cfg->subvendor      = REG(PCIR_SUBVEND_1, 2);
334 		cfg->subdevice      = REG(PCIR_SUBDEV_1, 2);
335 		cfg->nummaps	    = PCI_MAXMAPS_1;
336 		break;
337 	case 2:
338 		cfg->subvendor      = REG(PCIR_SUBVEND_2, 2);
339 		cfg->subdevice      = REG(PCIR_SUBDEV_2, 2);
340 		cfg->nummaps	    = PCI_MAXMAPS_2;
341 		break;
342 	}
343 #undef REG
344 }
345 
346 /* read configuration header into pcicfgregs structure */
347 
348 struct pci_devinfo *
349 pci_read_device(device_t pcib, int b, int s, int f, size_t size)
350 {
351 #define REG(n, w)	PCIB_READ_CONFIG(pcib, b, s, f, n, w)
352 	pcicfgregs *cfg = NULL;
353 	struct pci_devinfo *devlist_entry;
354 	struct devlist *devlist_head;
355 
356 	devlist_head = &pci_devq;
357 
358 	devlist_entry = NULL;
359 
360 	if (REG(PCIR_DEVVENDOR, 4) != -1) {
361 		devlist_entry = malloc(size, M_DEVBUF, M_WAITOK | M_ZERO);
362 		if (devlist_entry == NULL)
363 			return (NULL);
364 
365 		cfg = &devlist_entry->cfg;
366 
367 		cfg->bus		= b;
368 		cfg->slot		= s;
369 		cfg->func		= f;
370 		cfg->vendor		= REG(PCIR_VENDOR, 2);
371 		cfg->device		= REG(PCIR_DEVICE, 2);
372 		cfg->cmdreg		= REG(PCIR_COMMAND, 2);
373 		cfg->statreg		= REG(PCIR_STATUS, 2);
374 		cfg->baseclass		= REG(PCIR_CLASS, 1);
375 		cfg->subclass		= REG(PCIR_SUBCLASS, 1);
376 		cfg->progif		= REG(PCIR_PROGIF, 1);
377 		cfg->revid		= REG(PCIR_REVID, 1);
378 		cfg->hdrtype		= REG(PCIR_HDRTYPE, 1);
379 		cfg->cachelnsz		= REG(PCIR_CACHELNSZ, 1);
380 		cfg->lattimer		= REG(PCIR_LATTIMER, 1);
381 		cfg->intpin		= REG(PCIR_INTPIN, 1);
382 		cfg->intline		= REG(PCIR_INTLINE, 1);
383 
384 		cfg->mingnt		= REG(PCIR_MINGNT, 1);
385 		cfg->maxlat		= REG(PCIR_MAXLAT, 1);
386 
387 		cfg->mfdev		= (cfg->hdrtype & PCIM_MFDEV) != 0;
388 		cfg->hdrtype		&= ~PCIM_MFDEV;
389 
390 		pci_fixancient(cfg);
391 		pci_hdrtypedata(pcib, b, s, f, cfg);
392 
393 		if (REG(PCIR_STATUS, 2) & PCIM_STATUS_CAPPRESENT)
394 			pci_read_extcap(pcib, cfg);
395 
396 		STAILQ_INSERT_TAIL(devlist_head, devlist_entry, pci_links);
397 
398 		devlist_entry->conf.pc_sel.pc_bus = cfg->bus;
399 		devlist_entry->conf.pc_sel.pc_dev = cfg->slot;
400 		devlist_entry->conf.pc_sel.pc_func = cfg->func;
401 		devlist_entry->conf.pc_hdr = cfg->hdrtype;
402 
403 		devlist_entry->conf.pc_subvendor = cfg->subvendor;
404 		devlist_entry->conf.pc_subdevice = cfg->subdevice;
405 		devlist_entry->conf.pc_vendor = cfg->vendor;
406 		devlist_entry->conf.pc_device = cfg->device;
407 
408 		devlist_entry->conf.pc_class = cfg->baseclass;
409 		devlist_entry->conf.pc_subclass = cfg->subclass;
410 		devlist_entry->conf.pc_progif = cfg->progif;
411 		devlist_entry->conf.pc_revid = cfg->revid;
412 
413 		pci_numdevs++;
414 		pci_generation++;
415 	}
416 	return (devlist_entry);
417 #undef REG
418 }
419 
420 static void
421 pci_read_extcap(device_t pcib, pcicfgregs *cfg)
422 {
423 #define REG(n, w)	PCIB_READ_CONFIG(pcib, cfg->bus, cfg->slot, cfg->func, n, w)
424 	int	ptr, nextptr, ptrptr;
425 
426 	switch (cfg->hdrtype & PCIM_HDRTYPE) {
427 	case 0:
428 		ptrptr = PCIR_CAP_PTR;
429 		break;
430 	case 2:
431 		ptrptr = PCIR_CAP_PTR_2;
432 		break;
433 	default:
434 		return;		/* no extended capabilities support */
435 	}
436 	nextptr = REG(ptrptr, 1);	/* sanity check? */
437 
438 	/*
439 	 * Read capability entries.
440 	 */
441 	while (nextptr != 0) {
442 		/* Sanity check */
443 		if (nextptr > 255) {
444 			printf("illegal PCI extended capability offset %d\n",
445 			    nextptr);
446 			return;
447 		}
448 		/* Find the next entry */
449 		ptr = nextptr;
450 		nextptr = REG(ptr + PCICAP_NEXTPTR, 1);
451 
452 		/* Process this entry */
453 		switch (REG(ptr + PCICAP_ID, 1)) {
454 		case PCIY_PMG:		/* PCI power management */
455 			if (cfg->pp.pp_cap == 0) {
456 				cfg->pp.pp_cap = REG(ptr + PCIR_POWER_CAP, 2);
457 				cfg->pp.pp_status = ptr + PCIR_POWER_STATUS;
458 				cfg->pp.pp_pmcsr = ptr + PCIR_POWER_PMCSR;
459 				if ((nextptr - ptr) > PCIR_POWER_DATA)
460 					cfg->pp.pp_data = ptr + PCIR_POWER_DATA;
461 			}
462 			break;
463 		case PCIY_MSI:		/* PCI MSI */
464 			cfg->msi.msi_ctrl = REG(ptr + PCIR_MSI_CTRL, 2);
465 			if (cfg->msi.msi_ctrl & PCIM_MSICTRL_64BIT)
466 				cfg->msi.msi_data = PCIR_MSI_DATA_64BIT;
467 			else
468 				cfg->msi.msi_data = PCIR_MSI_DATA;
469 			cfg->msi.msi_msgnum = 1 << ((cfg->msi.msi_ctrl &
470 						     PCIM_MSICTRL_MMC_MASK)>>1);
471 		default:
472 			break;
473 		}
474 	}
475 #undef REG
476 }
477 
478 /*
479  * Return the offset in configuration space of the requested extended
480  * capability entry or 0 if the specified capability was not found.
481  */
482 int
483 pci_find_extcap_method(device_t dev, device_t child, int capability,
484     int *capreg)
485 {
486 	struct pci_devinfo *dinfo = device_get_ivars(child);
487 	pcicfgregs *cfg = &dinfo->cfg;
488 	u_int32_t status;
489 	u_int8_t ptr;
490 
491 	/*
492 	 * Check the CAP_LIST bit of the PCI status register first.
493 	 */
494 	status = pci_read_config(child, PCIR_STATUS, 2);
495 	if (!(status & PCIM_STATUS_CAPPRESENT))
496 		return (ENXIO);
497 
498 	/*
499 	 * Determine the start pointer of the capabilities list.
500 	 */
501 	switch (cfg->hdrtype & PCIM_HDRTYPE) {
502 	case 0:
503 		ptr = PCIR_CAP_PTR;
504 		break;
505 	case 2:
506 		ptr = PCIR_CAP_PTR_2;
507 		break;
508 	default:
509 		/* XXX: panic? */
510 		return (ENXIO);		/* no extended capabilities support */
511 	}
512 	ptr = pci_read_config(child, ptr, 1);
513 
514 	/*
515 	 * Traverse the capabilities list.
516 	 */
517 	while (ptr != 0) {
518 		if (pci_read_config(child, ptr + PCICAP_ID, 1) == capability) {
519 			if (capreg != NULL)
520 				*capreg = ptr;
521 			return (0);
522 		}
523 		ptr = pci_read_config(child, ptr + PCICAP_NEXTPTR, 1);
524 	}
525 
526 	return (ENOENT);
527 }
528 
529 /* free pcicfgregs structure and all depending data structures */
530 
531 int
532 pci_freecfg(struct pci_devinfo *dinfo)
533 {
534 	struct devlist *devlist_head;
535 
536 	devlist_head = &pci_devq;
537 
538 	STAILQ_REMOVE(devlist_head, dinfo, pci_devinfo, pci_links);
539 	free(dinfo, M_DEVBUF);
540 
541 	/* increment the generation count */
542 	pci_generation++;
543 
544 	/* we're losing one device */
545 	pci_numdevs--;
546 	return (0);
547 }
548 
549 /*
550  * PCI power manangement
551  */
552 int
553 pci_set_powerstate_method(device_t dev, device_t child, int state)
554 {
555 	struct pci_devinfo *dinfo = device_get_ivars(child);
556 	pcicfgregs *cfg = &dinfo->cfg;
557 	uint16_t status;
558 	int result, oldstate, highest, delay;
559 
560 	if (cfg->pp.pp_cap == 0)
561 		return (EOPNOTSUPP);
562 
563 	/*
564 	 * Optimize a no state change request away.  While it would be OK to
565 	 * write to the hardware in theory, some devices have shown odd
566 	 * behavior when going from D3 -> D3.
567 	 */
568 	oldstate = pci_get_powerstate(child);
569 	if (oldstate == state)
570 		return (0);
571 
572 	/*
573 	 * The PCI power management specification states that after a state
574 	 * transition between PCI power states, system software must
575 	 * guarantee a minimal delay before the function accesses the device.
576 	 * Compute the worst case delay that we need to guarantee before we
577 	 * access the device.  Many devices will be responsive much more
578 	 * quickly than this delay, but there are some that don't respond
579 	 * instantly to state changes.  Transitions to/from D3 state require
580 	 * 10ms, while D2 requires 200us, and D0/1 require none.  The delay
581 	 * is done below with DELAY rather than a sleeper function because
582 	 * this function can be called from contexts where we cannot sleep.
583 	 */
584 	highest = (oldstate > state) ? oldstate : state;
585 	if (highest == PCI_POWERSTATE_D3)
586 	    delay = 10000;
587 	else if (highest == PCI_POWERSTATE_D2)
588 	    delay = 200;
589 	else
590 	    delay = 0;
591 	status = PCI_READ_CONFIG(dev, child, cfg->pp.pp_status, 2)
592 	    & ~PCIM_PSTAT_DMASK;
593 	result = 0;
594 	switch (state) {
595 	case PCI_POWERSTATE_D0:
596 		status |= PCIM_PSTAT_D0;
597 		break;
598 	case PCI_POWERSTATE_D1:
599 		if ((cfg->pp.pp_cap & PCIM_PCAP_D1SUPP) == 0)
600 			return (EOPNOTSUPP);
601 		status |= PCIM_PSTAT_D1;
602 		break;
603 	case PCI_POWERSTATE_D2:
604 		if ((cfg->pp.pp_cap & PCIM_PCAP_D2SUPP) == 0)
605 			return (EOPNOTSUPP);
606 		status |= PCIM_PSTAT_D2;
607 		break;
608 	case PCI_POWERSTATE_D3:
609 		status |= PCIM_PSTAT_D3;
610 		break;
611 	default:
612 		return (EINVAL);
613 	}
614 
615 	if (bootverbose)
616 		printf(
617 		    "pci%d:%d:%d: Transition from D%d to D%d\n",
618 		    dinfo->cfg.bus, dinfo->cfg.slot, dinfo->cfg.func,
619 		    oldstate, state);
620 
621 	PCI_WRITE_CONFIG(dev, child, cfg->pp.pp_status, status, 2);
622 	if (delay)
623 		DELAY(delay);
624 	return (0);
625 }
626 
627 int
628 pci_get_powerstate_method(device_t dev, device_t child)
629 {
630 	struct pci_devinfo *dinfo = device_get_ivars(child);
631 	pcicfgregs *cfg = &dinfo->cfg;
632 	uint16_t status;
633 	int result;
634 
635 	if (cfg->pp.pp_cap != 0) {
636 		status = PCI_READ_CONFIG(dev, child, cfg->pp.pp_status, 2);
637 		switch (status & PCIM_PSTAT_DMASK) {
638 		case PCIM_PSTAT_D0:
639 			result = PCI_POWERSTATE_D0;
640 			break;
641 		case PCIM_PSTAT_D1:
642 			result = PCI_POWERSTATE_D1;
643 			break;
644 		case PCIM_PSTAT_D2:
645 			result = PCI_POWERSTATE_D2;
646 			break;
647 		case PCIM_PSTAT_D3:
648 			result = PCI_POWERSTATE_D3;
649 			break;
650 		default:
651 			result = PCI_POWERSTATE_UNKNOWN;
652 			break;
653 		}
654 	} else {
655 		/* No support, device is always at D0 */
656 		result = PCI_POWERSTATE_D0;
657 	}
658 	return (result);
659 }
660 
661 /*
662  * Some convenience functions for PCI device drivers.
663  */
664 
665 static __inline void
666 pci_set_command_bit(device_t dev, device_t child, uint16_t bit)
667 {
668 	uint16_t	command;
669 
670 	command = PCI_READ_CONFIG(dev, child, PCIR_COMMAND, 2);
671 	command |= bit;
672 	PCI_WRITE_CONFIG(dev, child, PCIR_COMMAND, command, 2);
673 }
674 
675 static __inline void
676 pci_clear_command_bit(device_t dev, device_t child, uint16_t bit)
677 {
678 	uint16_t	command;
679 
680 	command = PCI_READ_CONFIG(dev, child, PCIR_COMMAND, 2);
681 	command &= ~bit;
682 	PCI_WRITE_CONFIG(dev, child, PCIR_COMMAND, command, 2);
683 }
684 
685 int
686 pci_enable_busmaster_method(device_t dev, device_t child)
687 {
688 	pci_set_command_bit(dev, child, PCIM_CMD_BUSMASTEREN);
689 	return (0);
690 }
691 
692 int
693 pci_disable_busmaster_method(device_t dev, device_t child)
694 {
695 	pci_clear_command_bit(dev, child, PCIM_CMD_BUSMASTEREN);
696 	return (0);
697 }
698 
699 int
700 pci_enable_io_method(device_t dev, device_t child, int space)
701 {
702 	uint16_t command;
703 	uint16_t bit;
704 	char *error;
705 
706 	bit = 0;
707 	error = NULL;
708 
709 	switch(space) {
710 	case SYS_RES_IOPORT:
711 		bit = PCIM_CMD_PORTEN;
712 		error = "port";
713 		break;
714 	case SYS_RES_MEMORY:
715 		bit = PCIM_CMD_MEMEN;
716 		error = "memory";
717 		break;
718 	default:
719 		return (EINVAL);
720 	}
721 	pci_set_command_bit(dev, child, bit);
722 	/* Some devices seem to need a brief stall here, what do to? */
723 	command = PCI_READ_CONFIG(dev, child, PCIR_COMMAND, 2);
724 	if (command & bit)
725 		return (0);
726 	device_printf(child, "failed to enable %s mapping!\n", error);
727 	return (ENXIO);
728 }
729 
730 int
731 pci_disable_io_method(device_t dev, device_t child, int space)
732 {
733 	uint16_t command;
734 	uint16_t bit;
735 	char *error;
736 
737 	bit = 0;
738 	error = NULL;
739 
740 	switch(space) {
741 	case SYS_RES_IOPORT:
742 		bit = PCIM_CMD_PORTEN;
743 		error = "port";
744 		break;
745 	case SYS_RES_MEMORY:
746 		bit = PCIM_CMD_MEMEN;
747 		error = "memory";
748 		break;
749 	default:
750 		return (EINVAL);
751 	}
752 	pci_clear_command_bit(dev, child, bit);
753 	command = PCI_READ_CONFIG(dev, child, PCIR_COMMAND, 2);
754 	if (command & bit) {
755 		device_printf(child, "failed to disable %s mapping!\n", error);
756 		return (ENXIO);
757 	}
758 	return (0);
759 }
760 
761 /*
762  * New style pci driver.  Parent device is either a pci-host-bridge or a
763  * pci-pci-bridge.  Both kinds are represented by instances of pcib.
764  */
765 
766 void
767 pci_print_verbose(struct pci_devinfo *dinfo)
768 {
769 	if (bootverbose) {
770 		pcicfgregs *cfg = &dinfo->cfg;
771 
772 		printf("found->\tvendor=0x%04x, dev=0x%04x, revid=0x%02x\n",
773 		    cfg->vendor, cfg->device, cfg->revid);
774 		printf("\tbus=%d, slot=%d, func=%d\n",
775 		    cfg->bus, cfg->slot, cfg->func);
776 		printf("\tclass=%02x-%02x-%02x, hdrtype=0x%02x, mfdev=%d\n",
777 		    cfg->baseclass, cfg->subclass, cfg->progif, cfg->hdrtype,
778 		    cfg->mfdev);
779 		printf("\tcmdreg=0x%04x, statreg=0x%04x, cachelnsz=%d (dwords)\n",
780 		    cfg->cmdreg, cfg->statreg, cfg->cachelnsz);
781 		printf("\tlattimer=0x%02x (%d ns), mingnt=0x%02x (%d ns), maxlat=0x%02x (%d ns)\n",
782 		    cfg->lattimer, cfg->lattimer * 30, cfg->mingnt,
783 		    cfg->mingnt * 250, cfg->maxlat, cfg->maxlat * 250);
784 		if (cfg->intpin > 0)
785 			printf("\tintpin=%c, irq=%d\n",
786 			    cfg->intpin +'a' -1, cfg->intline);
787 		if (cfg->pp.pp_cap) {
788 			uint16_t status;
789 
790 			status = pci_read_config(cfg->dev, cfg->pp.pp_status, 2);
791 			printf("\tpowerspec %d  supports D0%s%s D3  current D%d\n",
792 			    cfg->pp.pp_cap & PCIM_PCAP_SPEC,
793 			    cfg->pp.pp_cap & PCIM_PCAP_D1SUPP ? " D1" : "",
794 			    cfg->pp.pp_cap & PCIM_PCAP_D2SUPP ? " D2" : "",
795 			    status & PCIM_PSTAT_DMASK);
796 		}
797 		if (cfg->msi.msi_data) {
798 			int ctrl;
799 
800 			ctrl =  cfg->msi.msi_ctrl;
801 			printf("\tMSI supports %d message%s%s%s\n",
802 			    cfg->msi.msi_msgnum,
803 			    (cfg->msi.msi_msgnum == 1) ? "" : "s",
804 			    (ctrl & PCIM_MSICTRL_64BIT) ? ", 64 bit" : "",
805 			    (ctrl & PCIM_MSICTRL_VECTOR) ? ", vector masks":"");
806 		}
807 	}
808 }
809 
810 static int
811 pci_porten(device_t pcib, int b, int s, int f)
812 {
813 	return (PCIB_READ_CONFIG(pcib, b, s, f, PCIR_COMMAND, 2)
814 		& PCIM_CMD_PORTEN) != 0;
815 }
816 
817 static int
818 pci_memen(device_t pcib, int b, int s, int f)
819 {
820 	return (PCIB_READ_CONFIG(pcib, b, s, f, PCIR_COMMAND, 2)
821 		& PCIM_CMD_MEMEN) != 0;
822 }
823 
824 /*
825  * Add a resource based on a pci map register. Return 1 if the map
826  * register is a 32bit map register or 2 if it is a 64bit register.
827  */
828 static int
829 pci_add_map(device_t pcib, device_t bus, device_t dev,
830     int b, int s, int f, int reg, struct resource_list *rl, int force,
831     int prefetch)
832 {
833 	uint32_t map;
834 	uint64_t base;
835 	uint64_t start, end, count;
836 	uint8_t ln2size;
837 	uint8_t ln2range;
838 	uint32_t testval;
839 	uint16_t cmd;
840 	int type;
841 	int barlen;
842 	struct resource *res;
843 
844 	map = PCIB_READ_CONFIG(pcib, b, s, f, reg, 4);
845 	PCIB_WRITE_CONFIG(pcib, b, s, f, reg, 0xffffffff, 4);
846 	testval = PCIB_READ_CONFIG(pcib, b, s, f, reg, 4);
847 	PCIB_WRITE_CONFIG(pcib, b, s, f, reg, map, 4);
848 
849 	if (pci_maptype(map) & PCI_MAPMEM)
850 		type = SYS_RES_MEMORY;
851 	else
852 		type = SYS_RES_IOPORT;
853 	ln2size = pci_mapsize(testval);
854 	ln2range = pci_maprange(testval);
855 	base = pci_mapbase(map);
856 	barlen = ln2range == 64 ? 2 : 1;
857 
858 	/*
859 	 * For I/O registers, if bottom bit is set, and the next bit up
860 	 * isn't clear, we know we have a BAR that doesn't conform to the
861 	 * spec, so ignore it.  Also, sanity check the size of the data
862 	 * areas to the type of memory involved.  Memory must be at least
863 	 * 32 bytes in size, while I/O ranges must be at least 4.
864 	 */
865 	if ((testval & 0x1) == 0x1 &&
866 	    (testval & 0x2) != 0)
867 		return (barlen);
868 	if ((type == SYS_RES_MEMORY && ln2size < 5) ||
869 	    (type == SYS_RES_IOPORT && ln2size < 2))
870 		return (barlen);
871 
872 	if (ln2range == 64)
873 		/* Read the other half of a 64bit map register */
874 		base |= (uint64_t) PCIB_READ_CONFIG(pcib, b, s, f, reg + 4, 4) << 32;
875 
876 	if (bootverbose) {
877 		printf("\tmap[%02x]: type %x, range %2d, base %08x, size %2d",
878 		    reg, pci_maptype(map), ln2range,
879 		    (unsigned int) base, ln2size);
880 		if (type == SYS_RES_IOPORT && !pci_porten(pcib, b, s, f))
881 			printf(", port disabled\n");
882 		else if (type == SYS_RES_MEMORY && !pci_memen(pcib, b, s, f))
883 			printf(", memory disabled\n");
884 		else
885 			printf(", enabled\n");
886 	}
887 
888 	/*
889 	 * If base is 0, then we have problems.  It is best to ignore
890 	 * such entries for the moment.  These will be allocated later if
891 	 * the driver specifically requests them.  However, some
892 	 * removable busses look better when all resources are allocated,
893 	 * so allow '0' to be overriden.
894 	 *
895 	 * Similarly treat maps whose values is the same as the test value
896 	 * read back.  These maps have had all f's written to them by the
897 	 * BIOS in an attempt to disable the resources.
898 	 */
899 	if (!force && (base == 0 || map == testval))
900 		return (barlen);
901 
902 	/*
903 	 * This code theoretically does the right thing, but has
904 	 * undesirable side effects in some cases where peripherals
905 	 * respond oddly to having these bits enabled.  Let the user
906 	 * be able to turn them off (since pci_enable_io_modes is 1 by
907 	 * default).
908 	 */
909 	if (pci_enable_io_modes) {
910 		/* Turn on resources that have been left off by a lazy BIOS */
911 		if (type == SYS_RES_IOPORT && !pci_porten(pcib, b, s, f)) {
912 			cmd = PCIB_READ_CONFIG(pcib, b, s, f, PCIR_COMMAND, 2);
913 			cmd |= PCIM_CMD_PORTEN;
914 			PCIB_WRITE_CONFIG(pcib, b, s, f, PCIR_COMMAND, cmd, 2);
915 		}
916 		if (type == SYS_RES_MEMORY && !pci_memen(pcib, b, s, f)) {
917 			cmd = PCIB_READ_CONFIG(pcib, b, s, f, PCIR_COMMAND, 2);
918 			cmd |= PCIM_CMD_MEMEN;
919 			PCIB_WRITE_CONFIG(pcib, b, s, f, PCIR_COMMAND, cmd, 2);
920 		}
921 	} else {
922 		if (type == SYS_RES_IOPORT && !pci_porten(pcib, b, s, f))
923 			return (barlen);
924 		if (type == SYS_RES_MEMORY && !pci_memen(pcib, b, s, f))
925 			return (barlen);
926 	}
927 
928 	count = 1 << ln2size;
929 	if (base == 0 || base == pci_mapbase(testval)) {
930 		start = 0;	/* Let the parent deside */
931 		end = ~0ULL;
932 	} else {
933 		start = base;
934 		end = base + (1 << ln2size) - 1;
935 	}
936 	resource_list_add(rl, type, reg, start, end, count);
937 
938 	/*
939 	 * Not quite sure what to do on failure of allocating the resource
940 	 * since I can postulate several right answers.
941 	 */
942 	res = resource_list_alloc(rl, bus, dev, type, &reg, start, end, count,
943 	    prefetch ? RF_PREFETCHABLE : 0);
944 	if (res != NULL)
945 		pci_write_config(dev, reg, rman_get_start(res), 4);
946 	return (barlen);
947 }
948 
949 /*
950  * For ATA devices we need to decide early what addressing mode to use.
951  * Legacy demands that the primary and secondary ATA ports sits on the
952  * same addresses that old ISA hardware did. This dictates that we use
953  * those addresses and ignore the BAR's if we cannot set PCI native
954  * addressing mode.
955  */
956 static void
957 pci_ata_maps(device_t pcib, device_t bus, device_t dev, int b,
958     int s, int f, struct resource_list *rl, int force, uint32_t prefetchmask)
959 {
960 	int rid, type, progif;
961 #if 0
962 	/* if this device supports PCI native addressing use it */
963 	progif = pci_read_config(dev, PCIR_PROGIF, 1);
964 	if ((progif & 0x8a) == 0x8a) {
965 		if (pci_mapbase(pci_read_config(dev, PCIR_BAR(0), 4)) &&
966 		    pci_mapbase(pci_read_config(dev, PCIR_BAR(2), 4))) {
967 			printf("Trying ATA native PCI addressing mode\n");
968 			pci_write_config(dev, PCIR_PROGIF, progif | 0x05, 1);
969 		}
970 	}
971 #endif
972 	progif = pci_read_config(dev, PCIR_PROGIF, 1);
973 	type = SYS_RES_IOPORT;
974 	if (progif & PCIP_STORAGE_IDE_MODEPRIM) {
975 		pci_add_map(pcib, bus, dev, b, s, f, PCIR_BAR(0), rl, force,
976 		    prefetchmask & (1 << 0));
977 		pci_add_map(pcib, bus, dev, b, s, f, PCIR_BAR(1), rl, force,
978 		    prefetchmask & (1 << 1));
979 	} else {
980 		rid = PCIR_BAR(0);
981 		resource_list_add(rl, type, rid, 0x1f0, 0x1f7, 8);
982 		resource_list_alloc(rl, bus, dev, type, &rid, 0x1f0, 0x1f7, 8,
983 		    0);
984 		rid = PCIR_BAR(1);
985 		resource_list_add(rl, type, rid, 0x3f6, 0x3f6, 1);
986 		resource_list_alloc(rl, bus, dev, type, &rid, 0x3f6, 0x3f6, 1,
987 		    0);
988 	}
989 	if (progif & PCIP_STORAGE_IDE_MODESEC) {
990 		pci_add_map(pcib, bus, dev, b, s, f, PCIR_BAR(2), rl, force,
991 		    prefetchmask & (1 << 2));
992 		pci_add_map(pcib, bus, dev, b, s, f, PCIR_BAR(3), rl, force,
993 		    prefetchmask & (1 << 3));
994 	} else {
995 		rid = PCIR_BAR(2);
996 		resource_list_add(rl, type, rid, 0x170, 0x177, 8);
997 		resource_list_alloc(rl, bus, dev, type, &rid, 0x170, 0x177, 8,
998 		    0);
999 		rid = PCIR_BAR(3);
1000 		resource_list_add(rl, type, rid, 0x376, 0x376, 1);
1001 		resource_list_alloc(rl, bus, dev, type, &rid, 0x376, 0x376, 1,
1002 		    0);
1003 	}
1004 	pci_add_map(pcib, bus, dev, b, s, f, PCIR_BAR(4), rl, force,
1005 	    prefetchmask & (1 << 4));
1006 	pci_add_map(pcib, bus, dev, b, s, f, PCIR_BAR(5), rl, force,
1007 	    prefetchmask & (1 << 5));
1008 }
1009 
1010 static void
1011 pci_assign_interrupt(device_t bus, device_t dev, int force_route)
1012 {
1013 	struct pci_devinfo *dinfo = device_get_ivars(dev);
1014 	pcicfgregs *cfg = &dinfo->cfg;
1015 	char tunable_name[64];
1016 	int irq;
1017 
1018 	/* Has to have an intpin to have an interrupt. */
1019 	if (cfg->intpin == 0)
1020 		return;
1021 
1022 	/* Let the user override the IRQ with a tunable. */
1023 	irq = PCI_INVALID_IRQ;
1024 	snprintf(tunable_name, sizeof(tunable_name), "hw.pci%d.%d.INT%c.irq",
1025 	    cfg->bus, cfg->slot, cfg->intpin + 'A' - 1);
1026 	if (TUNABLE_INT_FETCH(tunable_name, &irq) && (irq >= 255 || irq <= 0))
1027 		irq = PCI_INVALID_IRQ;
1028 
1029 	/*
1030 	 * If we didn't get an IRQ via the tunable, then we either use the
1031 	 * IRQ value in the intline register or we ask the bus to route an
1032 	 * interrupt for us.  If force_route is true, then we only use the
1033 	 * value in the intline register if the bus was unable to assign an
1034 	 * IRQ.
1035 	 */
1036 	if (!PCI_INTERRUPT_VALID(irq)) {
1037 		if (!PCI_INTERRUPT_VALID(cfg->intline) || force_route)
1038 			irq = PCI_ASSIGN_INTERRUPT(bus, dev);
1039 		if (!PCI_INTERRUPT_VALID(irq))
1040 			irq = cfg->intline;
1041 	}
1042 
1043 	/* If after all that we don't have an IRQ, just bail. */
1044 	if (!PCI_INTERRUPT_VALID(irq))
1045 		return;
1046 
1047 	/* Update the config register if it changed. */
1048 	if (irq != cfg->intline) {
1049 		cfg->intline = irq;
1050 		pci_write_config(dev, PCIR_INTLINE, irq, 1);
1051 	}
1052 
1053 	/* Add this IRQ as rid 0 interrupt resource. */
1054 	resource_list_add(&dinfo->resources, SYS_RES_IRQ, 0, irq, irq, 1);
1055 }
1056 
1057 void
1058 pci_add_resources(device_t bus, device_t dev, int force, uint32_t prefetchmask)
1059 {
1060 	device_t pcib;
1061 	struct pci_devinfo *dinfo = device_get_ivars(dev);
1062 	pcicfgregs *cfg = &dinfo->cfg;
1063 	struct resource_list *rl = &dinfo->resources;
1064 	struct pci_quirk *q;
1065 	int b, i, f, s;
1066 
1067 	pcib = device_get_parent(bus);
1068 
1069 	b = cfg->bus;
1070 	s = cfg->slot;
1071 	f = cfg->func;
1072 
1073 	/* ATA devices needs special map treatment */
1074 	if ((pci_get_class(dev) == PCIC_STORAGE) &&
1075 	    (pci_get_subclass(dev) == PCIS_STORAGE_IDE) &&
1076 	    (pci_get_progif(dev) & PCIP_STORAGE_IDE_MASTERDEV))
1077 		pci_ata_maps(pcib, bus, dev, b, s, f, rl, force, prefetchmask);
1078 	else
1079 		for (i = 0; i < cfg->nummaps;)
1080 			i += pci_add_map(pcib, bus, dev, b, s, f, PCIR_BAR(i),
1081 			    rl, force, prefetchmask & (1 << i));
1082 
1083 	/*
1084 	 * Add additional, quirked resources.
1085 	 */
1086 	for (q = &pci_quirks[0]; q->devid; q++) {
1087 		if (q->devid == ((cfg->device << 16) | cfg->vendor)
1088 		    && q->type == PCI_QUIRK_MAP_REG)
1089 			pci_add_map(pcib, bus, dev, b, s, f, q->arg1, rl,
1090 			  force, 0);
1091 	}
1092 
1093 	if (cfg->intpin > 0 && PCI_INTERRUPT_VALID(cfg->intline)) {
1094 #ifdef __PCI_REROUTE_INTERRUPT
1095 		/*
1096 		 * Try to re-route interrupts. Sometimes the BIOS or
1097 		 * firmware may leave bogus values in these registers.
1098 		 * If the re-route fails, then just stick with what we
1099 		 * have.
1100 		 */
1101 		pci_assign_interrupt(bus, dev, 1);
1102 #else
1103 		pci_assign_interrupt(bus, dev, 0);
1104 #endif
1105 	}
1106 }
1107 
1108 void
1109 pci_add_children(device_t dev, int busno, size_t dinfo_size)
1110 {
1111 #define REG(n, w)	PCIB_READ_CONFIG(pcib, busno, s, f, n, w)
1112 	device_t pcib = device_get_parent(dev);
1113 	struct pci_devinfo *dinfo;
1114 	int maxslots;
1115 	int s, f, pcifunchigh;
1116 	uint8_t hdrtype;
1117 
1118 	KASSERT(dinfo_size >= sizeof(struct pci_devinfo),
1119 	    ("dinfo_size too small"));
1120 	maxslots = PCIB_MAXSLOTS(pcib);
1121 	for (s = 0; s <= maxslots; s++) {
1122 		pcifunchigh = 0;
1123 		f = 0;
1124 		DELAY(1);
1125 		hdrtype = REG(PCIR_HDRTYPE, 1);
1126 		if ((hdrtype & PCIM_HDRTYPE) > PCI_MAXHDRTYPE)
1127 			continue;
1128 		if (hdrtype & PCIM_MFDEV)
1129 			pcifunchigh = PCI_FUNCMAX;
1130 		for (f = 0; f <= pcifunchigh; f++) {
1131 			dinfo = pci_read_device(pcib, busno, s, f, dinfo_size);
1132 			if (dinfo != NULL) {
1133 				pci_add_child(dev, dinfo);
1134 			}
1135 		}
1136 	}
1137 #undef REG
1138 }
1139 
1140 void
1141 pci_add_child(device_t bus, struct pci_devinfo *dinfo)
1142 {
1143 	dinfo->cfg.dev = device_add_child(bus, NULL, -1);
1144 	device_set_ivars(dinfo->cfg.dev, dinfo);
1145 	resource_list_init(&dinfo->resources);
1146 	pci_cfg_save(dinfo->cfg.dev, dinfo, 0);
1147 	pci_cfg_restore(dinfo->cfg.dev, dinfo);
1148 	pci_print_verbose(dinfo);
1149 	pci_add_resources(bus, dinfo->cfg.dev, 0, 0);
1150 }
1151 
1152 static int
1153 pci_probe(device_t dev)
1154 {
1155 
1156 	device_set_desc(dev, "PCI bus");
1157 
1158 	/* Allow other subclasses to override this driver. */
1159 	return (-1000);
1160 }
1161 
1162 static int
1163 pci_attach(device_t dev)
1164 {
1165 	int busno;
1166 
1167 	/*
1168 	 * Since there can be multiple independantly numbered PCI
1169 	 * busses on some large alpha systems, we can't use the unit
1170 	 * number to decide what bus we are probing. We ask the parent
1171 	 * pcib what our bus number is.
1172 	 */
1173 	busno = pcib_get_bus(dev);
1174 	if (bootverbose)
1175 		device_printf(dev, "physical bus=%d\n", busno);
1176 
1177 	pci_add_children(dev, busno, sizeof(struct pci_devinfo));
1178 
1179 	return (bus_generic_attach(dev));
1180 }
1181 
1182 int
1183 pci_suspend(device_t dev)
1184 {
1185 	int dstate, error, i, numdevs;
1186 	device_t acpi_dev, child, *devlist;
1187 	struct pci_devinfo *dinfo;
1188 
1189 	/*
1190 	 * Save the PCI configuration space for each child and set the
1191 	 * device in the appropriate power state for this sleep state.
1192 	 */
1193 	acpi_dev = NULL;
1194 	if (pci_do_power_resume)
1195 		acpi_dev = devclass_get_device(devclass_find("acpi"), 0);
1196 	device_get_children(dev, &devlist, &numdevs);
1197 	for (i = 0; i < numdevs; i++) {
1198 		child = devlist[i];
1199 		dinfo = (struct pci_devinfo *) device_get_ivars(child);
1200 		pci_cfg_save(child, dinfo, 0);
1201 	}
1202 
1203 	/* Suspend devices before potentially powering them down. */
1204 	error = bus_generic_suspend(dev);
1205 	if (error) {
1206 		free(devlist, M_TEMP);
1207 		return (error);
1208 	}
1209 
1210 	/*
1211 	 * Always set the device to D3.  If ACPI suggests a different
1212 	 * power state, use it instead.  If ACPI is not present, the
1213 	 * firmware is responsible for managing device power.  Skip
1214 	 * children who aren't attached since they are powered down
1215 	 * separately.  Only manage type 0 devices for now.
1216 	 */
1217 	for (i = 0; acpi_dev && i < numdevs; i++) {
1218 		child = devlist[i];
1219 		dinfo = (struct pci_devinfo *) device_get_ivars(child);
1220 		if (device_is_attached(child) && dinfo->cfg.hdrtype == 0) {
1221 			dstate = PCI_POWERSTATE_D3;
1222 			ACPI_PWR_FOR_SLEEP(acpi_dev, child, &dstate);
1223 			pci_set_powerstate(child, dstate);
1224 		}
1225 	}
1226 	free(devlist, M_TEMP);
1227 	return (0);
1228 }
1229 
1230 int
1231 pci_resume(device_t dev)
1232 {
1233 	int i, numdevs;
1234 	device_t acpi_dev, child, *devlist;
1235 	struct pci_devinfo *dinfo;
1236 
1237 	/*
1238 	 * Set each child to D0 and restore its PCI configuration space.
1239 	 */
1240 	acpi_dev = NULL;
1241 	if (pci_do_power_resume)
1242 		acpi_dev = devclass_get_device(devclass_find("acpi"), 0);
1243 	device_get_children(dev, &devlist, &numdevs);
1244 	for (i = 0; i < numdevs; i++) {
1245 		/*
1246 		 * Notify ACPI we're going to D0 but ignore the result.  If
1247 		 * ACPI is not present, the firmware is responsible for
1248 		 * managing device power.  Only manage type 0 devices for now.
1249 		 */
1250 		child = devlist[i];
1251 		dinfo = (struct pci_devinfo *) device_get_ivars(child);
1252 		if (acpi_dev && device_is_attached(child) &&
1253 		    dinfo->cfg.hdrtype == 0) {
1254 			ACPI_PWR_FOR_SLEEP(acpi_dev, child, NULL);
1255 			pci_set_powerstate(child, PCI_POWERSTATE_D0);
1256 		}
1257 
1258 		/* Now the device is powered up, restore its config space. */
1259 		pci_cfg_restore(child, dinfo);
1260 	}
1261 	free(devlist, M_TEMP);
1262 	return (bus_generic_resume(dev));
1263 }
1264 
1265 static void
1266 pci_load_vendor_data(void)
1267 {
1268 	caddr_t vendordata, info;
1269 
1270 	if ((vendordata = preload_search_by_type("pci_vendor_data")) != NULL) {
1271 		info = preload_search_info(vendordata, MODINFO_ADDR);
1272 		pci_vendordata = *(char **)info;
1273 		info = preload_search_info(vendordata, MODINFO_SIZE);
1274 		pci_vendordata_size = *(size_t *)info;
1275 		/* terminate the database */
1276 		pci_vendordata[pci_vendordata_size] = '\n';
1277 	}
1278 }
1279 
1280 void
1281 pci_driver_added(device_t dev, driver_t *driver)
1282 {
1283 	int numdevs;
1284 	device_t *devlist;
1285 	device_t child;
1286 	struct pci_devinfo *dinfo;
1287 	int i;
1288 
1289 	if (bootverbose)
1290 		device_printf(dev, "driver added\n");
1291 	DEVICE_IDENTIFY(driver, dev);
1292 	device_get_children(dev, &devlist, &numdevs);
1293 	for (i = 0; i < numdevs; i++) {
1294 		child = devlist[i];
1295 		if (device_get_state(child) != DS_NOTPRESENT)
1296 			continue;
1297 		dinfo = device_get_ivars(child);
1298 		pci_print_verbose(dinfo);
1299 		if (bootverbose)
1300 			printf("pci%d:%d:%d: reprobing on driver added\n",
1301 			    dinfo->cfg.bus, dinfo->cfg.slot, dinfo->cfg.func);
1302 		pci_cfg_restore(child, dinfo);
1303 		if (device_probe_and_attach(child) != 0)
1304 			pci_cfg_save(child, dinfo, 1);
1305 	}
1306 	free(devlist, M_TEMP);
1307 }
1308 
1309 int
1310 pci_print_child(device_t dev, device_t child)
1311 {
1312 	struct pci_devinfo *dinfo;
1313 	struct resource_list *rl;
1314 	int retval = 0;
1315 
1316 	dinfo = device_get_ivars(child);
1317 	rl = &dinfo->resources;
1318 
1319 	retval += bus_print_child_header(dev, child);
1320 
1321 	retval += resource_list_print_type(rl, "port", SYS_RES_IOPORT, "%#lx");
1322 	retval += resource_list_print_type(rl, "mem", SYS_RES_MEMORY, "%#lx");
1323 	retval += resource_list_print_type(rl, "irq", SYS_RES_IRQ, "%ld");
1324 	if (device_get_flags(dev))
1325 		retval += printf(" flags %#x", device_get_flags(dev));
1326 
1327 	retval += printf(" at device %d.%d", pci_get_slot(child),
1328 	    pci_get_function(child));
1329 
1330 	retval += bus_print_child_footer(dev, child);
1331 
1332 	return (retval);
1333 }
1334 
1335 static struct
1336 {
1337 	int	class;
1338 	int	subclass;
1339 	char	*desc;
1340 } pci_nomatch_tab[] = {
1341 	{PCIC_OLD,		-1,			"old"},
1342 	{PCIC_OLD,		PCIS_OLD_NONVGA,	"non-VGA display device"},
1343 	{PCIC_OLD,		PCIS_OLD_VGA,		"VGA-compatible display device"},
1344 	{PCIC_STORAGE,		-1,			"mass storage"},
1345 	{PCIC_STORAGE,		PCIS_STORAGE_SCSI,	"SCSI"},
1346 	{PCIC_STORAGE,		PCIS_STORAGE_IDE,	"ATA"},
1347 	{PCIC_STORAGE,		PCIS_STORAGE_FLOPPY,	"floppy disk"},
1348 	{PCIC_STORAGE,		PCIS_STORAGE_IPI,	"IPI"},
1349 	{PCIC_STORAGE,		PCIS_STORAGE_RAID,	"RAID"},
1350 	{PCIC_NETWORK,		-1,			"network"},
1351 	{PCIC_NETWORK,		PCIS_NETWORK_ETHERNET,	"ethernet"},
1352 	{PCIC_NETWORK,		PCIS_NETWORK_TOKENRING,	"token ring"},
1353 	{PCIC_NETWORK,		PCIS_NETWORK_FDDI,	"fddi"},
1354 	{PCIC_NETWORK,		PCIS_NETWORK_ATM,	"ATM"},
1355 	{PCIC_NETWORK,		PCIS_NETWORK_ISDN,	"ISDN"},
1356 	{PCIC_DISPLAY,		-1,			"display"},
1357 	{PCIC_DISPLAY,		PCIS_DISPLAY_VGA,	"VGA"},
1358 	{PCIC_DISPLAY,		PCIS_DISPLAY_XGA,	"XGA"},
1359 	{PCIC_DISPLAY,		PCIS_DISPLAY_3D,	"3D"},
1360 	{PCIC_MULTIMEDIA,	-1,			"multimedia"},
1361 	{PCIC_MULTIMEDIA,	PCIS_MULTIMEDIA_VIDEO,	"video"},
1362 	{PCIC_MULTIMEDIA,	PCIS_MULTIMEDIA_AUDIO,	"audio"},
1363 	{PCIC_MULTIMEDIA,	PCIS_MULTIMEDIA_TELE,	"telephony"},
1364 	{PCIC_MEMORY,		-1,			"memory"},
1365 	{PCIC_MEMORY,		PCIS_MEMORY_RAM,	"RAM"},
1366 	{PCIC_MEMORY,		PCIS_MEMORY_FLASH,	"flash"},
1367 	{PCIC_BRIDGE,		-1,			"bridge"},
1368 	{PCIC_BRIDGE,		PCIS_BRIDGE_HOST,	"HOST-PCI"},
1369 	{PCIC_BRIDGE,		PCIS_BRIDGE_ISA,	"PCI-ISA"},
1370 	{PCIC_BRIDGE,		PCIS_BRIDGE_EISA,	"PCI-EISA"},
1371 	{PCIC_BRIDGE,		PCIS_BRIDGE_MCA,	"PCI-MCA"},
1372 	{PCIC_BRIDGE,		PCIS_BRIDGE_PCI,	"PCI-PCI"},
1373 	{PCIC_BRIDGE,		PCIS_BRIDGE_PCMCIA,	"PCI-PCMCIA"},
1374 	{PCIC_BRIDGE,		PCIS_BRIDGE_NUBUS,	"PCI-NuBus"},
1375 	{PCIC_BRIDGE,		PCIS_BRIDGE_CARDBUS,	"PCI-CardBus"},
1376 	{PCIC_BRIDGE,		PCIS_BRIDGE_RACEWAY,	"PCI-RACEway"},
1377 	{PCIC_SIMPLECOMM,	-1,			"simple comms"},
1378 	{PCIC_SIMPLECOMM,	PCIS_SIMPLECOMM_UART,	"UART"},	/* could detect 16550 */
1379 	{PCIC_SIMPLECOMM,	PCIS_SIMPLECOMM_PAR,	"parallel port"},
1380 	{PCIC_SIMPLECOMM,	PCIS_SIMPLECOMM_MULSER,	"multiport serial"},
1381 	{PCIC_SIMPLECOMM,	PCIS_SIMPLECOMM_MODEM,	"generic modem"},
1382 	{PCIC_BASEPERIPH,	-1,			"base peripheral"},
1383 	{PCIC_BASEPERIPH,	PCIS_BASEPERIPH_PIC,	"interrupt controller"},
1384 	{PCIC_BASEPERIPH,	PCIS_BASEPERIPH_DMA,	"DMA controller"},
1385 	{PCIC_BASEPERIPH,	PCIS_BASEPERIPH_TIMER,	"timer"},
1386 	{PCIC_BASEPERIPH,	PCIS_BASEPERIPH_RTC,	"realtime clock"},
1387 	{PCIC_BASEPERIPH,	PCIS_BASEPERIPH_PCIHOT,	"PCI hot-plug controller"},
1388 	{PCIC_INPUTDEV,		-1,			"input device"},
1389 	{PCIC_INPUTDEV,		PCIS_INPUTDEV_KEYBOARD,	"keyboard"},
1390 	{PCIC_INPUTDEV,		PCIS_INPUTDEV_DIGITIZER,"digitizer"},
1391 	{PCIC_INPUTDEV,		PCIS_INPUTDEV_MOUSE,	"mouse"},
1392 	{PCIC_INPUTDEV,		PCIS_INPUTDEV_SCANNER,	"scanner"},
1393 	{PCIC_INPUTDEV,		PCIS_INPUTDEV_GAMEPORT,	"gameport"},
1394 	{PCIC_DOCKING,		-1,			"docking station"},
1395 	{PCIC_PROCESSOR,	-1,			"processor"},
1396 	{PCIC_SERIALBUS,	-1,			"serial bus"},
1397 	{PCIC_SERIALBUS,	PCIS_SERIALBUS_FW,	"FireWire"},
1398 	{PCIC_SERIALBUS,	PCIS_SERIALBUS_ACCESS,	"AccessBus"},
1399 	{PCIC_SERIALBUS,	PCIS_SERIALBUS_SSA,	"SSA"},
1400 	{PCIC_SERIALBUS,	PCIS_SERIALBUS_USB,	"USB"},
1401 	{PCIC_SERIALBUS,	PCIS_SERIALBUS_FC,	"Fibre Channel"},
1402 	{PCIC_SERIALBUS,	PCIS_SERIALBUS_SMBUS,	"SMBus"},
1403 	{PCIC_WIRELESS,		-1,			"wireless controller"},
1404 	{PCIC_WIRELESS,		PCIS_WIRELESS_IRDA,	"iRDA"},
1405 	{PCIC_WIRELESS,		PCIS_WIRELESS_IR,	"IR"},
1406 	{PCIC_WIRELESS,		PCIS_WIRELESS_RF,	"RF"},
1407 	{PCIC_INTELLIIO,	-1,			"intelligent I/O controller"},
1408 	{PCIC_INTELLIIO,	PCIS_INTELLIIO_I2O,	"I2O"},
1409 	{PCIC_SATCOM,		-1,			"satellite communication"},
1410 	{PCIC_SATCOM,		PCIS_SATCOM_TV,		"sat TV"},
1411 	{PCIC_SATCOM,		PCIS_SATCOM_AUDIO,	"sat audio"},
1412 	{PCIC_SATCOM,		PCIS_SATCOM_VOICE,	"sat voice"},
1413 	{PCIC_SATCOM,		PCIS_SATCOM_DATA,	"sat data"},
1414 	{PCIC_CRYPTO,		-1,			"encrypt/decrypt"},
1415 	{PCIC_CRYPTO,		PCIS_CRYPTO_NETCOMP,	"network/computer crypto"},
1416 	{PCIC_CRYPTO,		PCIS_CRYPTO_NETCOMP,	"entertainment crypto"},
1417 	{PCIC_DASP,		-1,			"dasp"},
1418 	{PCIC_DASP,		PCIS_DASP_DPIO,		"DPIO module"},
1419 	{0, 0,		NULL}
1420 };
1421 
1422 void
1423 pci_probe_nomatch(device_t dev, device_t child)
1424 {
1425 	int	i;
1426 	char	*cp, *scp, *device;
1427 
1428 	/*
1429 	 * Look for a listing for this device in a loaded device database.
1430 	 */
1431 	if ((device = pci_describe_device(child)) != NULL) {
1432 		device_printf(dev, "<%s>", device);
1433 		free(device, M_DEVBUF);
1434 	} else {
1435 		/*
1436 		 * Scan the class/subclass descriptions for a general
1437 		 * description.
1438 		 */
1439 		cp = "unknown";
1440 		scp = NULL;
1441 		for (i = 0; pci_nomatch_tab[i].desc != NULL; i++) {
1442 			if (pci_nomatch_tab[i].class == pci_get_class(child)) {
1443 				if (pci_nomatch_tab[i].subclass == -1) {
1444 					cp = pci_nomatch_tab[i].desc;
1445 				} else if (pci_nomatch_tab[i].subclass ==
1446 				    pci_get_subclass(child)) {
1447 					scp = pci_nomatch_tab[i].desc;
1448 				}
1449 			}
1450 		}
1451 		device_printf(dev, "<%s%s%s>",
1452 		    cp ? cp : "",
1453 		    ((cp != NULL) && (scp != NULL)) ? ", " : "",
1454 		    scp ? scp : "");
1455 	}
1456 	printf(" at device %d.%d (no driver attached)\n",
1457 	    pci_get_slot(child), pci_get_function(child));
1458 	if (pci_do_power_nodriver)
1459 		pci_cfg_save(child,
1460 		    (struct pci_devinfo *) device_get_ivars(child), 1);
1461 	return;
1462 }
1463 
1464 /*
1465  * Parse the PCI device database, if loaded, and return a pointer to a
1466  * description of the device.
1467  *
1468  * The database is flat text formatted as follows:
1469  *
1470  * Any line not in a valid format is ignored.
1471  * Lines are terminated with newline '\n' characters.
1472  *
1473  * A VENDOR line consists of the 4 digit (hex) vendor code, a TAB, then
1474  * the vendor name.
1475  *
1476  * A DEVICE line is entered immediately below the corresponding VENDOR ID.
1477  * - devices cannot be listed without a corresponding VENDOR line.
1478  * A DEVICE line consists of a TAB, the 4 digit (hex) device code,
1479  * another TAB, then the device name.
1480  */
1481 
1482 /*
1483  * Assuming (ptr) points to the beginning of a line in the database,
1484  * return the vendor or device and description of the next entry.
1485  * The value of (vendor) or (device) inappropriate for the entry type
1486  * is set to -1.  Returns nonzero at the end of the database.
1487  *
1488  * Note that this is slightly unrobust in the face of corrupt data;
1489  * we attempt to safeguard against this by spamming the end of the
1490  * database with a newline when we initialise.
1491  */
1492 static int
1493 pci_describe_parse_line(char **ptr, int *vendor, int *device, char **desc)
1494 {
1495 	char	*cp = *ptr;
1496 	int	left;
1497 
1498 	*device = -1;
1499 	*vendor = -1;
1500 	**desc = '\0';
1501 	for (;;) {
1502 		left = pci_vendordata_size - (cp - pci_vendordata);
1503 		if (left <= 0) {
1504 			*ptr = cp;
1505 			return(1);
1506 		}
1507 
1508 		/* vendor entry? */
1509 		if (*cp != '\t' &&
1510 		    sscanf(cp, "%x\t%80[^\n]", vendor, *desc) == 2)
1511 			break;
1512 		/* device entry? */
1513 		if (*cp == '\t' &&
1514 		    sscanf(cp, "%x\t%80[^\n]", device, *desc) == 2)
1515 			break;
1516 
1517 		/* skip to next line */
1518 		while (*cp != '\n' && left > 0) {
1519 			cp++;
1520 			left--;
1521 		}
1522 		if (*cp == '\n') {
1523 			cp++;
1524 			left--;
1525 		}
1526 	}
1527 	/* skip to next line */
1528 	while (*cp != '\n' && left > 0) {
1529 		cp++;
1530 		left--;
1531 	}
1532 	if (*cp == '\n' && left > 0)
1533 		cp++;
1534 	*ptr = cp;
1535 	return(0);
1536 }
1537 
1538 static char *
1539 pci_describe_device(device_t dev)
1540 {
1541 	int	vendor, device;
1542 	char	*desc, *vp, *dp, *line;
1543 
1544 	desc = vp = dp = NULL;
1545 
1546 	/*
1547 	 * If we have no vendor data, we can't do anything.
1548 	 */
1549 	if (pci_vendordata == NULL)
1550 		goto out;
1551 
1552 	/*
1553 	 * Scan the vendor data looking for this device
1554 	 */
1555 	line = pci_vendordata;
1556 	if ((vp = malloc(80, M_DEVBUF, M_NOWAIT)) == NULL)
1557 		goto out;
1558 	for (;;) {
1559 		if (pci_describe_parse_line(&line, &vendor, &device, &vp))
1560 			goto out;
1561 		if (vendor == pci_get_vendor(dev))
1562 			break;
1563 	}
1564 	if ((dp = malloc(80, M_DEVBUF, M_NOWAIT)) == NULL)
1565 		goto out;
1566 	for (;;) {
1567 		if (pci_describe_parse_line(&line, &vendor, &device, &dp)) {
1568 			*dp = 0;
1569 			break;
1570 		}
1571 		if (vendor != -1) {
1572 			*dp = 0;
1573 			break;
1574 		}
1575 		if (device == pci_get_device(dev))
1576 			break;
1577 	}
1578 	if (dp[0] == '\0')
1579 		snprintf(dp, 80, "0x%x", pci_get_device(dev));
1580 	if ((desc = malloc(strlen(vp) + strlen(dp) + 3, M_DEVBUF, M_NOWAIT)) !=
1581 	    NULL)
1582 		sprintf(desc, "%s, %s", vp, dp);
1583  out:
1584 	if (vp != NULL)
1585 		free(vp, M_DEVBUF);
1586 	if (dp != NULL)
1587 		free(dp, M_DEVBUF);
1588 	return(desc);
1589 }
1590 
1591 int
1592 pci_read_ivar(device_t dev, device_t child, int which, uintptr_t *result)
1593 {
1594 	struct pci_devinfo *dinfo;
1595 	pcicfgregs *cfg;
1596 
1597 	dinfo = device_get_ivars(child);
1598 	cfg = &dinfo->cfg;
1599 
1600 	switch (which) {
1601 	case PCI_IVAR_ETHADDR:
1602 		/*
1603 		 * The generic accessor doesn't deal with failure, so
1604 		 * we set the return value, then return an error.
1605 		 */
1606 		*((uint8_t **) result) = NULL;
1607 		return (EINVAL);
1608 	case PCI_IVAR_SUBVENDOR:
1609 		*result = cfg->subvendor;
1610 		break;
1611 	case PCI_IVAR_SUBDEVICE:
1612 		*result = cfg->subdevice;
1613 		break;
1614 	case PCI_IVAR_VENDOR:
1615 		*result = cfg->vendor;
1616 		break;
1617 	case PCI_IVAR_DEVICE:
1618 		*result = cfg->device;
1619 		break;
1620 	case PCI_IVAR_DEVID:
1621 		*result = (cfg->device << 16) | cfg->vendor;
1622 		break;
1623 	case PCI_IVAR_CLASS:
1624 		*result = cfg->baseclass;
1625 		break;
1626 	case PCI_IVAR_SUBCLASS:
1627 		*result = cfg->subclass;
1628 		break;
1629 	case PCI_IVAR_PROGIF:
1630 		*result = cfg->progif;
1631 		break;
1632 	case PCI_IVAR_REVID:
1633 		*result = cfg->revid;
1634 		break;
1635 	case PCI_IVAR_INTPIN:
1636 		*result = cfg->intpin;
1637 		break;
1638 	case PCI_IVAR_IRQ:
1639 		*result = cfg->intline;
1640 		break;
1641 	case PCI_IVAR_BUS:
1642 		*result = cfg->bus;
1643 		break;
1644 	case PCI_IVAR_SLOT:
1645 		*result = cfg->slot;
1646 		break;
1647 	case PCI_IVAR_FUNCTION:
1648 		*result = cfg->func;
1649 		break;
1650 	case PCI_IVAR_CMDREG:
1651 		*result = cfg->cmdreg;
1652 		break;
1653 	case PCI_IVAR_CACHELNSZ:
1654 		*result = cfg->cachelnsz;
1655 		break;
1656 	case PCI_IVAR_MINGNT:
1657 		*result = cfg->mingnt;
1658 		break;
1659 	case PCI_IVAR_MAXLAT:
1660 		*result = cfg->maxlat;
1661 		break;
1662 	case PCI_IVAR_LATTIMER:
1663 		*result = cfg->lattimer;
1664 		break;
1665 	default:
1666 		return (ENOENT);
1667 	}
1668 	return (0);
1669 }
1670 
1671 int
1672 pci_write_ivar(device_t dev, device_t child, int which, uintptr_t value)
1673 {
1674 	struct pci_devinfo *dinfo;
1675 
1676 	dinfo = device_get_ivars(child);
1677 
1678 	switch (which) {
1679 	case PCI_IVAR_INTPIN:
1680 		dinfo->cfg.intpin = value;
1681 		return (0);
1682 	case PCI_IVAR_ETHADDR:
1683 	case PCI_IVAR_SUBVENDOR:
1684 	case PCI_IVAR_SUBDEVICE:
1685 	case PCI_IVAR_VENDOR:
1686 	case PCI_IVAR_DEVICE:
1687 	case PCI_IVAR_DEVID:
1688 	case PCI_IVAR_CLASS:
1689 	case PCI_IVAR_SUBCLASS:
1690 	case PCI_IVAR_PROGIF:
1691 	case PCI_IVAR_REVID:
1692 	case PCI_IVAR_IRQ:
1693 	case PCI_IVAR_BUS:
1694 	case PCI_IVAR_SLOT:
1695 	case PCI_IVAR_FUNCTION:
1696 		return (EINVAL);	/* disallow for now */
1697 
1698 	default:
1699 		return (ENOENT);
1700 	}
1701 }
1702 
1703 
1704 #include "opt_ddb.h"
1705 #ifdef DDB
1706 #include <ddb/ddb.h>
1707 #include <sys/cons.h>
1708 
1709 /*
1710  * List resources based on pci map registers, used for within ddb
1711  */
1712 
1713 DB_SHOW_COMMAND(pciregs, db_pci_dump)
1714 {
1715 	struct pci_devinfo *dinfo;
1716 	struct devlist *devlist_head;
1717 	struct pci_conf *p;
1718 	const char *name;
1719 	int i, error, none_count, quit;
1720 
1721 	none_count = 0;
1722 	/* get the head of the device queue */
1723 	devlist_head = &pci_devq;
1724 
1725 	/*
1726 	 * Go through the list of devices and print out devices
1727 	 */
1728 	db_setup_paging(db_simple_pager, &quit, db_lines_per_page);
1729 	for (error = 0, i = 0, quit = 0,
1730 	     dinfo = STAILQ_FIRST(devlist_head);
1731 	     (dinfo != NULL) && (error == 0) && (i < pci_numdevs) && !quit;
1732 	     dinfo = STAILQ_NEXT(dinfo, pci_links), i++) {
1733 
1734 		/* Populate pd_name and pd_unit */
1735 		name = NULL;
1736 		if (dinfo->cfg.dev)
1737 			name = device_get_name(dinfo->cfg.dev);
1738 
1739 		p = &dinfo->conf;
1740 		db_printf("%s%d@pci%d:%d:%d:\tclass=0x%06x card=0x%08x "
1741 			"chip=0x%08x rev=0x%02x hdr=0x%02x\n",
1742 			(name && *name) ? name : "none",
1743 			(name && *name) ? (int)device_get_unit(dinfo->cfg.dev) :
1744 			none_count++,
1745 			p->pc_sel.pc_bus, p->pc_sel.pc_dev,
1746 			p->pc_sel.pc_func, (p->pc_class << 16) |
1747 			(p->pc_subclass << 8) | p->pc_progif,
1748 			(p->pc_subdevice << 16) | p->pc_subvendor,
1749 			(p->pc_device << 16) | p->pc_vendor,
1750 			p->pc_revid, p->pc_hdr);
1751 	}
1752 }
1753 #endif /* DDB */
1754 
1755 static struct resource *
1756 pci_alloc_map(device_t dev, device_t child, int type, int *rid,
1757     u_long start, u_long end, u_long count, u_int flags)
1758 {
1759 	struct pci_devinfo *dinfo = device_get_ivars(child);
1760 	struct resource_list *rl = &dinfo->resources;
1761 	struct resource_list_entry *rle;
1762 	struct resource *res;
1763 	uint32_t map, testval;
1764 	int mapsize;
1765 
1766 	/*
1767 	 * Weed out the bogons, and figure out how large the BAR/map
1768 	 * is.  Bars that read back 0 here are bogus and unimplemented.
1769 	 * Note: atapci in legacy mode are special and handled elsewhere
1770 	 * in the code.  If you have a atapci device in legacy mode and
1771 	 * it fails here, that other code is broken.
1772 	 */
1773 	res = NULL;
1774 	map = pci_read_config(child, *rid, 4);
1775 	pci_write_config(child, *rid, 0xffffffff, 4);
1776 	testval = pci_read_config(child, *rid, 4);
1777 	if (pci_mapbase(testval) == 0)
1778 		goto out;
1779 	if (pci_maptype(testval) & PCI_MAPMEM) {
1780 		if (type != SYS_RES_MEMORY) {
1781 			if (bootverbose)
1782 				device_printf(dev,
1783 				    "child %s requested type %d for rid %#x,"
1784 				    " but the BAR says it is an memio\n",
1785 				    device_get_nameunit(child), type, *rid);
1786 			goto out;
1787 		}
1788 	} else {
1789 		if (type != SYS_RES_IOPORT) {
1790 			if (bootverbose)
1791 				device_printf(dev,
1792 				    "child %s requested type %d for rid %#x,"
1793 				    " but the BAR says it is an ioport\n",
1794 				    device_get_nameunit(child), type, *rid);
1795 			goto out;
1796 		}
1797 	}
1798 	/*
1799 	 * For real BARs, we need to override the size that
1800 	 * the driver requests, because that's what the BAR
1801 	 * actually uses and we would otherwise have a
1802 	 * situation where we might allocate the excess to
1803 	 * another driver, which won't work.
1804 	 */
1805 	mapsize = pci_mapsize(testval);
1806 	count = 1 << mapsize;
1807 	if (RF_ALIGNMENT(flags) < mapsize)
1808 		flags = (flags & ~RF_ALIGNMENT_MASK) | RF_ALIGNMENT_LOG2(mapsize);
1809 
1810 	/*
1811 	 * Allocate enough resource, and then write back the
1812 	 * appropriate bar for that resource.
1813 	 */
1814 	res = BUS_ALLOC_RESOURCE(device_get_parent(dev), child, type, rid,
1815 	    start, end, count, flags);
1816 	if (res == NULL) {
1817 		device_printf(child,
1818 		    "%#lx bytes of rid %#x res %d failed (%#lx, %#lx).\n",
1819 		    count, *rid, type, start, end);
1820 		goto out;
1821 	}
1822 	resource_list_add(rl, type, *rid, start, end, count);
1823 	rle = resource_list_find(rl, type, *rid);
1824 	if (rle == NULL)
1825 		panic("pci_alloc_map: unexpectedly can't find resource.");
1826 	rle->res = res;
1827 	rle->start = rman_get_start(res);
1828 	rle->end = rman_get_end(res);
1829 	rle->count = count;
1830 	if (bootverbose)
1831 		device_printf(child,
1832 		    "Lazy allocation of %#lx bytes rid %#x type %d at %#lx\n",
1833 		    count, *rid, type, rman_get_start(res));
1834 	map = rman_get_start(res);
1835 out:;
1836 	pci_write_config(child, *rid, map, 4);
1837 	return (res);
1838 }
1839 
1840 
1841 struct resource *
1842 pci_alloc_resource(device_t dev, device_t child, int type, int *rid,
1843 		   u_long start, u_long end, u_long count, u_int flags)
1844 {
1845 	struct pci_devinfo *dinfo = device_get_ivars(child);
1846 	struct resource_list *rl = &dinfo->resources;
1847 	struct resource_list_entry *rle;
1848 	pcicfgregs *cfg = &dinfo->cfg;
1849 
1850 	/*
1851 	 * Perform lazy resource allocation
1852 	 */
1853 	if (device_get_parent(child) == dev) {
1854 		switch (type) {
1855 		case SYS_RES_IRQ:
1856 			/*
1857 			 * If the child device doesn't have an
1858 			 * interrupt routed and is deserving of an
1859 			 * interrupt, try to assign it one.
1860 			 */
1861 			if (!PCI_INTERRUPT_VALID(cfg->intline) &&
1862 			    (cfg->intpin != 0))
1863 				pci_assign_interrupt(dev, child, 0);
1864 			break;
1865 		case SYS_RES_IOPORT:
1866 		case SYS_RES_MEMORY:
1867 			if (*rid < PCIR_BAR(cfg->nummaps)) {
1868 				/*
1869 				 * Enable the I/O mode.  We should
1870 				 * also be assigning resources too
1871 				 * when none are present.  The
1872 				 * resource_list_alloc kind of sorta does
1873 				 * this...
1874 				 */
1875 				if (PCI_ENABLE_IO(dev, child, type))
1876 					return (NULL);
1877 			}
1878 			rle = resource_list_find(rl, type, *rid);
1879 			if (rle == NULL)
1880 				return (pci_alloc_map(dev, child, type, rid,
1881 				    start, end, count, flags));
1882 			break;
1883 		}
1884 		/*
1885 		 * If we've already allocated the resource, then
1886 		 * return it now.  But first we may need to activate
1887 		 * it, since we don't allocate the resource as active
1888 		 * above.  Normally this would be done down in the
1889 		 * nexus, but since we short-circuit that path we have
1890 		 * to do its job here.  Not sure if we should free the
1891 		 * resource if it fails to activate.
1892 		 */
1893 		rle = resource_list_find(rl, type, *rid);
1894 		if (rle != NULL && rle->res != NULL) {
1895 			if (bootverbose)
1896 				device_printf(child,
1897 			    "Reserved %#lx bytes for rid %#x type %d at %#lx\n",
1898 				    rman_get_size(rle->res), *rid, type,
1899 				    rman_get_start(rle->res));
1900 			if ((flags & RF_ACTIVE) &&
1901 			    bus_generic_activate_resource(dev, child, type,
1902 			    *rid, rle->res) != 0)
1903 				return NULL;
1904 			return (rle->res);
1905 		}
1906 	}
1907 	return (resource_list_alloc(rl, dev, child, type, rid,
1908 	    start, end, count, flags));
1909 }
1910 
1911 void
1912 pci_delete_resource(device_t dev, device_t child, int type, int rid)
1913 {
1914 	struct pci_devinfo *dinfo;
1915 	struct resource_list *rl;
1916 	struct resource_list_entry *rle;
1917 
1918 	if (device_get_parent(child) != dev)
1919 		return;
1920 
1921 	dinfo = device_get_ivars(child);
1922 	rl = &dinfo->resources;
1923 	rle = resource_list_find(rl, type, rid);
1924 	if (rle) {
1925 		if (rle->res) {
1926 			if (rman_get_device(rle->res) != dev ||
1927 			    rman_get_flags(rle->res) & RF_ACTIVE) {
1928 				device_printf(dev, "delete_resource: "
1929 				    "Resource still owned by child, oops. "
1930 				    "(type=%d, rid=%d, addr=%lx)\n",
1931 				    rle->type, rle->rid,
1932 				    rman_get_start(rle->res));
1933 				return;
1934 			}
1935 			bus_release_resource(dev, type, rid, rle->res);
1936 		}
1937 		resource_list_delete(rl, type, rid);
1938 	}
1939 	/*
1940 	 * Why do we turn off the PCI configuration BAR when we delete a
1941 	 * resource? -- imp
1942 	 */
1943 	pci_write_config(child, rid, 0, 4);
1944 	BUS_DELETE_RESOURCE(device_get_parent(dev), child, type, rid);
1945 }
1946 
1947 struct resource_list *
1948 pci_get_resource_list (device_t dev, device_t child)
1949 {
1950 	struct pci_devinfo *dinfo = device_get_ivars(child);
1951 
1952 	return (&dinfo->resources);
1953 }
1954 
1955 uint32_t
1956 pci_read_config_method(device_t dev, device_t child, int reg, int width)
1957 {
1958 	struct pci_devinfo *dinfo = device_get_ivars(child);
1959 	pcicfgregs *cfg = &dinfo->cfg;
1960 
1961 	return (PCIB_READ_CONFIG(device_get_parent(dev),
1962 	    cfg->bus, cfg->slot, cfg->func, reg, width));
1963 }
1964 
1965 void
1966 pci_write_config_method(device_t dev, device_t child, int reg,
1967     uint32_t val, int width)
1968 {
1969 	struct pci_devinfo *dinfo = device_get_ivars(child);
1970 	pcicfgregs *cfg = &dinfo->cfg;
1971 
1972 	PCIB_WRITE_CONFIG(device_get_parent(dev),
1973 	    cfg->bus, cfg->slot, cfg->func, reg, val, width);
1974 }
1975 
1976 int
1977 pci_child_location_str_method(device_t dev, device_t child, char *buf,
1978     size_t buflen)
1979 {
1980 
1981 	snprintf(buf, buflen, "slot=%d function=%d", pci_get_slot(child),
1982 	    pci_get_function(child));
1983 	return (0);
1984 }
1985 
1986 int
1987 pci_child_pnpinfo_str_method(device_t dev, device_t child, char *buf,
1988     size_t buflen)
1989 {
1990 	struct pci_devinfo *dinfo;
1991 	pcicfgregs *cfg;
1992 
1993 	dinfo = device_get_ivars(child);
1994 	cfg = &dinfo->cfg;
1995 	snprintf(buf, buflen, "vendor=0x%04x device=0x%04x subvendor=0x%04x "
1996 	    "subdevice=0x%04x class=0x%02x%02x%02x", cfg->vendor, cfg->device,
1997 	    cfg->subvendor, cfg->subdevice, cfg->baseclass, cfg->subclass,
1998 	    cfg->progif);
1999 	return (0);
2000 }
2001 
2002 int
2003 pci_assign_interrupt_method(device_t dev, device_t child)
2004 {
2005 	struct pci_devinfo *dinfo = device_get_ivars(child);
2006 	pcicfgregs *cfg = &dinfo->cfg;
2007 
2008 	return (PCIB_ROUTE_INTERRUPT(device_get_parent(dev), child,
2009 	    cfg->intpin));
2010 }
2011 
2012 static int
2013 pci_modevent(module_t mod, int what, void *arg)
2014 {
2015 	static struct cdev *pci_cdev;
2016 
2017 	switch (what) {
2018 	case MOD_LOAD:
2019 		STAILQ_INIT(&pci_devq);
2020 		pci_generation = 0;
2021 		pci_cdev = make_dev(&pcicdev, 0, UID_ROOT, GID_WHEEL, 0644,
2022 		    "pci");
2023 		pci_load_vendor_data();
2024 		break;
2025 
2026 	case MOD_UNLOAD:
2027 		destroy_dev(pci_cdev);
2028 		break;
2029 	}
2030 
2031 	return (0);
2032 }
2033 
2034 void
2035 pci_cfg_restore(device_t dev, struct pci_devinfo *dinfo)
2036 {
2037 	int i;
2038 
2039 	/*
2040 	 * Only do header type 0 devices.  Type 1 devices are bridges,
2041 	 * which we know need special treatment.  Type 2 devices are
2042 	 * cardbus bridges which also require special treatment.
2043 	 * Other types are unknown, and we err on the side of safety
2044 	 * by ignoring them.
2045 	 */
2046 	if (dinfo->cfg.hdrtype != 0)
2047 		return;
2048 
2049 	/*
2050 	 * Restore the device to full power mode.  We must do this
2051 	 * before we restore the registers because moving from D3 to
2052 	 * D0 will cause the chip's BARs and some other registers to
2053 	 * be reset to some unknown power on reset values.  Cut down
2054 	 * the noise on boot by doing nothing if we are already in
2055 	 * state D0.
2056 	 */
2057 	if (pci_get_powerstate(dev) != PCI_POWERSTATE_D0) {
2058 		pci_set_powerstate(dev, PCI_POWERSTATE_D0);
2059 	}
2060 	for (i = 0; i < dinfo->cfg.nummaps; i++)
2061 		pci_write_config(dev, PCIR_BAR(i), dinfo->cfg.bar[i], 4);
2062 	pci_write_config(dev, PCIR_BIOS, dinfo->cfg.bios, 4);
2063 	pci_write_config(dev, PCIR_COMMAND, dinfo->cfg.cmdreg, 2);
2064 	pci_write_config(dev, PCIR_INTLINE, dinfo->cfg.intline, 1);
2065 	pci_write_config(dev, PCIR_INTPIN, dinfo->cfg.intpin, 1);
2066 	pci_write_config(dev, PCIR_MINGNT, dinfo->cfg.mingnt, 1);
2067 	pci_write_config(dev, PCIR_MAXLAT, dinfo->cfg.maxlat, 1);
2068 	pci_write_config(dev, PCIR_CACHELNSZ, dinfo->cfg.cachelnsz, 1);
2069 	pci_write_config(dev, PCIR_LATTIMER, dinfo->cfg.lattimer, 1);
2070 	pci_write_config(dev, PCIR_PROGIF, dinfo->cfg.progif, 1);
2071 	pci_write_config(dev, PCIR_REVID, dinfo->cfg.revid, 1);
2072 }
2073 
2074 void
2075 pci_cfg_save(device_t dev, struct pci_devinfo *dinfo, int setstate)
2076 {
2077 	int i;
2078 	uint32_t cls;
2079 	int ps;
2080 
2081 	/*
2082 	 * Only do header type 0 devices.  Type 1 devices are bridges, which
2083 	 * we know need special treatment.  Type 2 devices are cardbus bridges
2084 	 * which also require special treatment.  Other types are unknown, and
2085 	 * we err on the side of safety by ignoring them.  Powering down
2086 	 * bridges should not be undertaken lightly.
2087 	 */
2088 	if (dinfo->cfg.hdrtype != 0)
2089 		return;
2090 	for (i = 0; i < dinfo->cfg.nummaps; i++)
2091 		dinfo->cfg.bar[i] = pci_read_config(dev, PCIR_BAR(i), 4);
2092 	dinfo->cfg.bios = pci_read_config(dev, PCIR_BIOS, 4);
2093 
2094 	/*
2095 	 * Some drivers apparently write to these registers w/o updating our
2096 	 * cached copy.  No harm happens if we update the copy, so do so here
2097 	 * so we can restore them.  The COMMAND register is modified by the
2098 	 * bus w/o updating the cache.  This should represent the normally
2099 	 * writable portion of the 'defined' part of type 0 headers.  In
2100 	 * theory we also need to save/restore the PCI capability structures
2101 	 * we know about, but apart from power we don't know any that are
2102 	 * writable.
2103 	 */
2104 	dinfo->cfg.subvendor = pci_read_config(dev, PCIR_SUBVEND_0, 2);
2105 	dinfo->cfg.subdevice = pci_read_config(dev, PCIR_SUBDEV_0, 2);
2106 	dinfo->cfg.vendor = pci_read_config(dev, PCIR_VENDOR, 2);
2107 	dinfo->cfg.device = pci_read_config(dev, PCIR_DEVICE, 2);
2108 	dinfo->cfg.cmdreg = pci_read_config(dev, PCIR_COMMAND, 2);
2109 	dinfo->cfg.intline = pci_read_config(dev, PCIR_INTLINE, 1);
2110 	dinfo->cfg.intpin = pci_read_config(dev, PCIR_INTPIN, 1);
2111 	dinfo->cfg.mingnt = pci_read_config(dev, PCIR_MINGNT, 1);
2112 	dinfo->cfg.maxlat = pci_read_config(dev, PCIR_MAXLAT, 1);
2113 	dinfo->cfg.cachelnsz = pci_read_config(dev, PCIR_CACHELNSZ, 1);
2114 	dinfo->cfg.lattimer = pci_read_config(dev, PCIR_LATTIMER, 1);
2115 	dinfo->cfg.baseclass = pci_read_config(dev, PCIR_CLASS, 1);
2116 	dinfo->cfg.subclass = pci_read_config(dev, PCIR_SUBCLASS, 1);
2117 	dinfo->cfg.progif = pci_read_config(dev, PCIR_PROGIF, 1);
2118 	dinfo->cfg.revid = pci_read_config(dev, PCIR_REVID, 1);
2119 
2120 	/*
2121 	 * don't set the state for display devices, base peripherals and
2122 	 * memory devices since bad things happen when they are powered down.
2123 	 * We should (a) have drivers that can easily detach and (b) use
2124 	 * generic drivers for these devices so that some device actually
2125 	 * attaches.  We need to make sure that when we implement (a) we don't
2126 	 * power the device down on a reattach.
2127 	 */
2128 	cls = pci_get_class(dev);
2129 	if (!setstate)
2130 		return;
2131 	switch (pci_do_power_nodriver)
2132 	{
2133 		case 0:		/* NO powerdown at all */
2134 			return;
2135 		case 1:		/* Conservative about what to power down */
2136 			if (cls == PCIC_STORAGE)
2137 				return;
2138 			/*FALLTHROUGH*/
2139 		case 2:		/* Agressive about what to power down */
2140 			if (cls == PCIC_DISPLAY || cls == PCIC_MEMORY ||
2141 			    cls == PCIC_BASEPERIPH)
2142 				return;
2143 			/*FALLTHROUGH*/
2144 		case 3:		/* Power down everything */
2145 			break;
2146 	}
2147 	/*
2148 	 * PCI spec says we can only go into D3 state from D0 state.
2149 	 * Transition from D[12] into D0 before going to D3 state.
2150 	 */
2151 	ps = pci_get_powerstate(dev);
2152 	if (ps != PCI_POWERSTATE_D0 && ps != PCI_POWERSTATE_D3)
2153 		pci_set_powerstate(dev, PCI_POWERSTATE_D0);
2154 	if (pci_get_powerstate(dev) != PCI_POWERSTATE_D3)
2155 		pci_set_powerstate(dev, PCI_POWERSTATE_D3);
2156 }
2157