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