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