📄 pci.c
字号:
case PCI_CLASS_STORAGE_IPI: return "IPI bus controller"; case PCI_CLASS_STORAGE_RAID: return "RAID bus controller"; case PCI_CLASS_STORAGE_OTHER: return "Unknown mass storage controller"; case PCI_CLASS_NETWORK_ETHERNET: return "Ethernet controller"; case PCI_CLASS_NETWORK_TOKEN_RING: return "Token ring network controller"; case PCI_CLASS_NETWORK_FDDI: return "FDDI network controller"; case PCI_CLASS_NETWORK_ATM: return "ATM network controller"; case PCI_CLASS_NETWORK_OTHER: return "Network controller"; case PCI_CLASS_DISPLAY_VGA: return "VGA compatible controller"; case PCI_CLASS_DISPLAY_XGA: return "XGA compatible controller"; case PCI_CLASS_DISPLAY_OTHER: return "Display controller"; case PCI_CLASS_MULTIMEDIA_VIDEO: return "Multimedia video controller"; case PCI_CLASS_MULTIMEDIA_AUDIO: return "Multimedia audio controller"; case PCI_CLASS_MULTIMEDIA_OTHER: return "Multimedia controller"; case PCI_CLASS_MEMORY_RAM: return "RAM memory"; case PCI_CLASS_MEMORY_FLASH: return "FLASH memory"; case PCI_CLASS_MEMORY_OTHER: return "Memory"; case PCI_CLASS_BRIDGE_HOST: return "Host bridge"; case PCI_CLASS_BRIDGE_ISA: return "ISA bridge"; case PCI_CLASS_BRIDGE_EISA: return "EISA bridge"; case PCI_CLASS_BRIDGE_MC: return "MicroChannel bridge"; case PCI_CLASS_BRIDGE_PCI: return "PCI bridge"; case PCI_CLASS_BRIDGE_PCMCIA: return "PCMCIA bridge"; case PCI_CLASS_BRIDGE_NUBUS: return "NuBus bridge"; case PCI_CLASS_BRIDGE_CARDBUS: return "CardBus bridge"; case PCI_CLASS_BRIDGE_OTHER: return "Bridge"; case PCI_CLASS_COMMUNICATION_SERIAL: return "Serial controller"; case PCI_CLASS_COMMUNICATION_PARALLEL: return "Parallel controller"; case PCI_CLASS_COMMUNICATION_OTHER: return "Communication controller"; case PCI_CLASS_SYSTEM_PIC: return "PIC"; case PCI_CLASS_SYSTEM_DMA: return "DMA controller"; case PCI_CLASS_SYSTEM_TIMER: return "Timer"; case PCI_CLASS_SYSTEM_RTC: return "RTC"; case PCI_CLASS_SYSTEM_OTHER: return "System peripheral"; case PCI_CLASS_INPUT_KEYBOARD: return "Keyboard controller"; case PCI_CLASS_INPUT_PEN: return "Digitizer Pen"; case PCI_CLASS_INPUT_MOUSE: return "Mouse controller"; case PCI_CLASS_INPUT_OTHER: return "Input device controller"; case PCI_CLASS_DOCKING_GENERIC: return "Generic Docking Station"; case PCI_CLASS_DOCKING_OTHER: return "Docking Station"; case PCI_CLASS_PROCESSOR_386: return "386"; case PCI_CLASS_PROCESSOR_486: return "486"; case PCI_CLASS_PROCESSOR_PENTIUM: return "Pentium"; case PCI_CLASS_PROCESSOR_ALPHA: return "Alpha"; case PCI_CLASS_PROCESSOR_POWERPC: return "Power PC"; case PCI_CLASS_PROCESSOR_CO: return "Co-processor"; case PCI_CLASS_SERIAL_FIREWIRE: return "FireWire (IEEE 1394)"; case PCI_CLASS_SERIAL_ACCESS: return "ACCESS Bus"; case PCI_CLASS_SERIAL_SSA: return "SSA"; case PCI_CLASS_SERIAL_USB: return "USB Controller"; case PCI_CLASS_SERIAL_FIBER: return "Fiber Channel"; default: return "Unknown class"; }}const char *pci_strvendor(unsigned int vendor){ switch (vendor) { case PCI_VENDOR_ID_COMPAQ: return "Compaq"; case PCI_VENDOR_ID_NCR: return "NCR"; case PCI_VENDOR_ID_ATI: return "ATI"; case PCI_VENDOR_ID_VLSI: return "VLSI"; case PCI_VENDOR_ID_ADL: return "Advance Logic"; case PCI_VENDOR_ID_NS: return "NS"; case PCI_VENDOR_ID_TSENG: return "Tseng'Lab"; case PCI_VENDOR_ID_WEITEK: return "Weitek"; case PCI_VENDOR_ID_DEC: return "DEC"; case PCI_VENDOR_ID_CIRRUS: return "Cirrus Logic"; case PCI_VENDOR_ID_IBM: return "IBM"; case PCI_VENDOR_ID_WD: return "Western Digital"; case PCI_VENDOR_ID_AMD: return "AMD"; case PCI_VENDOR_ID_TRIDENT: return "Trident"; case PCI_VENDOR_ID_AI: return "Acer Incorporated"; case PCI_VENDOR_ID_MATROX: return "Matrox"; case PCI_VENDOR_ID_CT: return "Chips & Technologies"; case PCI_VENDOR_ID_MIRO: return "Miro"; case PCI_VENDOR_ID_NEC: return "NEC"; case PCI_VENDOR_ID_FD: return "Future Domain"; case PCI_VENDOR_ID_SI: return "Silicon Integrated Systems"; case PCI_VENDOR_ID_HP: return "Hewlett Packard"; case PCI_VENDOR_ID_PCTECH: return "PCTECH"; case PCI_VENDOR_ID_DPT: return "DPT"; case PCI_VENDOR_ID_OPTI: return "OPTi"; case PCI_VENDOR_ID_SGS: return "SGS Thomson"; case PCI_VENDOR_ID_BUSLOGIC: return "BusLogic"; case PCI_VENDOR_ID_TI: return "Texas Instruments"; case PCI_VENDOR_ID_OAK: return "OAK"; case PCI_VENDOR_ID_WINBOND2: return "Winbond"; case PCI_VENDOR_ID_MOTOROLA: return "Motorola"; case PCI_VENDOR_ID_PROMISE: return "Promise Technology"; case PCI_VENDOR_ID_APPLE: return "Apple"; case PCI_VENDOR_ID_N9: return "Number Nine"; case PCI_VENDOR_ID_UMC: return "UMC"; case PCI_VENDOR_ID_X: return "X TECHNOLOGY"; case PCI_VENDOR_ID_NEXGEN: return "Nexgen"; case PCI_VENDOR_ID_QLOGIC: return "Q Logic"; case PCI_VENDOR_ID_LEADTEK: return "Leadtek Research"; case PCI_VENDOR_ID_CONTAQ: return "Contaq"; case PCI_VENDOR_ID_FOREX: return "Forex"; case PCI_VENDOR_ID_OLICOM: return "Olicom"; case PCI_VENDOR_ID_CMD: return "CMD"; case PCI_VENDOR_ID_VISION: return "Vision"; case PCI_VENDOR_ID_BROOKTREE: return "Brooktree"; case PCI_VENDOR_ID_SIERRA: return "Sierra"; case PCI_VENDOR_ID_ACC: return "ACC MICROELECTRONICS"; case PCI_VENDOR_ID_WINBOND: return "Winbond"; case PCI_VENDOR_ID_DATABOOK: return "Databook"; case PCI_VENDOR_ID_3COM: return "3Com"; case PCI_VENDOR_ID_SMC: return "SMC"; case PCI_VENDOR_ID_AL: return "Acer Labs"; case PCI_VENDOR_ID_MITSUBISHI: return "Mitsubishi"; case PCI_VENDOR_ID_NEOMAGIC: return "Neomagic"; case PCI_VENDOR_ID_ASP: return "Advanced System Products"; case PCI_VENDOR_ID_CERN: return "CERN"; case PCI_VENDOR_ID_IMS: return "IMS"; case PCI_VENDOR_ID_TEKRAM2: return "Tekram"; case PCI_VENDOR_ID_TUNDRA: return "Tundra"; case PCI_VENDOR_ID_AMCC: return "AMCC"; case PCI_VENDOR_ID_INTERG: return "Intergraphics"; case PCI_VENDOR_ID_REALTEK: return "Realtek"; case PCI_VENDOR_ID_TRUEVISION: return "Truevision"; case PCI_VENDOR_ID_INIT: return "Initio Corp"; case PCI_VENDOR_ID_VIA: return "VIA Technologies"; case PCI_VENDOR_ID_VORTEX: return "VORTEX"; case PCI_VENDOR_ID_EF: return "Efficient Networks"; case PCI_VENDOR_ID_FORE: return "Fore Systems"; case PCI_VENDOR_ID_IMAGINGTECH: return "Imaging Technology"; case PCI_VENDOR_ID_PHILIPS: return "Philips"; case PCI_VENDOR_ID_PLX: return "PLX"; case PCI_VENDOR_ID_ALLIANCE: return "Alliance"; case PCI_VENDOR_ID_VMIC: return "VMIC"; case PCI_VENDOR_ID_DIGI: return "Digi Intl."; case PCI_VENDOR_ID_MUTECH: return "Mutech"; case PCI_VENDOR_ID_RENDITION: return "Rendition"; case PCI_VENDOR_ID_TOSHIBA: return "Toshiba"; case PCI_VENDOR_ID_RICOH: return "Ricoh"; case PCI_VENDOR_ID_ZEITNET: return "ZeitNet"; case PCI_VENDOR_ID_OMEGA: return "Omega Micro"; case PCI_VENDOR_ID_NP: return "Network Peripherals"; case PCI_VENDOR_ID_SPECIALIX: return "Specialix"; case PCI_VENDOR_ID_IKON: return "Ikon"; case PCI_VENDOR_ID_ZORAN: return "Zoran"; case PCI_VENDOR_ID_COMPEX: return "Compex"; case PCI_VENDOR_ID_RP: return "Comtrol"; case PCI_VENDOR_ID_CYCLADES: return "Cyclades"; case PCI_VENDOR_ID_3DFX: return "3Dfx"; case PCI_VENDOR_ID_SIGMADES: return "Sigma Designs"; case PCI_VENDOR_ID_OPTIBASE: return "Optibase"; case PCI_VENDOR_ID_NVIDIA_SGS: return "NVidia/SGS Thomson"; case PCI_VENDOR_ID_ENSONIQ: return "Ensoniq"; case PCI_VENDOR_ID_SYMPHONY: return "Symphony"; case PCI_VENDOR_ID_TEKRAM: return "Tekram"; case PCI_VENDOR_ID_3DLABS: return "3Dlabs"; case PCI_VENDOR_ID_AVANCE: return "Avance"; case PCI_VENDOR_ID_NETVIN: return "NetVin"; case PCI_VENDOR_ID_S3: return "S3 Inc."; case PCI_VENDOR_ID_INTEL: return "Intel"; case PCI_VENDOR_ID_KTI: return "KTI"; case PCI_VENDOR_ID_ADAPTEC: return "Adaptec"; case PCI_VENDOR_ID_ADAPTEC2: return "Adaptec"; case PCI_VENDOR_ID_ATRONICS: return "Atronics"; case PCI_VENDOR_ID_ARK: return "ARK Logic"; case PCI_VENDOR_ID_ASIX: return "ASIX"; case PCI_VENDOR_ID_LITEON: return "Lite-on"; default: return "Unknown vendor"; }}const char *pci_strdev(unsigned int vendor, unsigned int device){ struct pci_dev_info *info; info = pci_lookup_dev(vendor, device); return info ? info->name : "Unknown device";}/* * Turn on/off PCI bridge optimization. This should allow benchmarking. */static void burst_bridge(unsigned char bus, unsigned char devfn, unsigned char pos, int turn_on){#ifdef CONFIG_PCI_OPTIMIZE struct bridge_mapping_type *bmap; unsigned char val; int i; pos *= NUM_OPTIMIZATIONS; printk("PCI bridge optimization.\n"); for (i = 0; i < NUM_OPTIMIZATIONS; i++) { printk(" %s: ", bridge_optimization[i].type); bmap = &bridge_mapping[pos + i]; if (!bmap->addr) { printk("Not supported."); } else { pcibios_read_config_byte(bus, devfn, bmap->addr, &val); if ((val & bmap->mask) == bmap->value) { printk("%s.", bridge_optimization[i].on); if (!turn_on) { pcibios_write_config_byte(bus, devfn, bmap->addr, (val | bmap->mask) - bmap->value); printk("Changed! Now %s.", bridge_optimization[i].off); } } else { printk("%s.", bridge_optimization[i].off); if (turn_on) { pcibios_write_config_byte(bus, devfn, bmap->addr, (val & (0xff - bmap->mask)) + bmap->value); printk("Changed! Now %s.", bridge_optimization[i].on); } } } printk("\n"); }#endif /* CONFIG_PCI_OPTIMIZE */}/* * Convert some of the configuration space registers of the device at * address (bus,devfn) into a string (possibly several lines each). * The configuration string is stored starting at buf[len]. If the * string would exceed the size of the buffer (SIZE), 0 is returned. */static int sprint_dev_config(struct pci_dev *dev, char *buf, int size){ unsigned long base; unsigned int l, class_rev, bus, devfn, last_reg; unsigned short vendor, device, status; unsigned char bist, latency, min_gnt, max_lat, hdr_type; int reg, len = 0; const char *str; bus = dev->bus->number; devfn = dev->devfn; pcibios_read_config_byte (bus, devfn, PCI_HEADER_TYPE, &hdr_type); pcibios_read_config_dword(bus, devfn, PCI_CLASS_REVISION, &class_rev); pcibios_read_config_word (bus, devfn, PCI_VENDOR_ID, &vendor); pcibios_read_config_word (bus, devfn, PCI_DEVICE_ID, &device); pcibios_read_config_word (bus, devfn, PCI_STATUS, &status); pcibios_read_config_byte (bus, devfn, PCI_BIST, &bist); pcibios_read_config_byte (bus, devfn, PCI_LATENCY_TIMER, &latency); pcibios_read_config_byte (bus, devfn, PCI_MIN_GNT, &min_gnt); pcibios_read_config_byte (bus, devfn, PCI_MAX_LAT, &max_lat); if (len + 80 > size) { return -1; } len += sprintf(buf + len, " Bus %2d, device %3d, function %2d:\n", bus, PCI_SLOT(devfn), PCI_FUNC(devfn)); if (len + 80 > size) { return -1; } len += sprintf(buf + len, " %s: %s %s (rev %d).\n ", pci_strclass(class_rev >> 8), pci_strvendor(vendor), pci_strdev(vendor, device), class_rev & 0xff); if (!pci_lookup_dev(vendor, device)) { len += sprintf(buf + len, "Vendor id=%x. Device id=%x.\n ", vendor, device); } str = 0; /* to keep gcc shut... */ switch (status & PCI_STATUS_DEVSEL_MASK) { case PCI_STATUS_DEVSEL_FAST: str = "Fast devsel. "; break; case PCI_STATUS_DEVSEL_MEDIUM: str = "Medium devsel. "; break; case PCI_STATUS_DEVSEL_SLOW: str = "Slow devsel. "; break; } if (len + strlen(str) > size) { return -1; } len += sprintf(buf + len, str); if (status & PCI_STATUS_FAST_BACK) {# define fast_b2b_capable "Fast back-to-back capable. " if (len + strlen(fast_b2b_capable) > size) { return -1; } len += sprintf(buf + len, fast_b2b_capable);# undef fast_b2b_capable } if (bist & PCI_BIST_CAPABLE) {# define BIST_capable "BIST capable. " if (len + strlen(BIST_capable) > size) { return -1; } len += sprintf(buf + len, BIST_capable);# undef BIST_capable } if (dev->irq) { if (len + 40 > size) { return -1; } len += sprintf(buf + len, "IRQ %d. ", dev->irq); } if (dev->master) { if (len + 80 > size) { return -1; } len += sprintf(buf + len, "Master Capable. "); if (latency) len += sprintf(buf + len, "Latency=%d. ", latency); else len += sprintf(buf + len, "No bursts. "); if (min_gnt) len += sprintf(buf + len, "Min Gnt=%d.", min_gnt); if (max_lat)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -