📄 oldproc.c
字号:
default: return "Unknown class"; }}static 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 "Avance 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_N9: return "Number Nine"; case PCI_VENDOR_ID_UMC: return "UMC"; case PCI_VENDOR_ID_X: return "X TECHNOLOGY"; case PCI_VENDOR_ID_PICOP: return "PicoPower"; case PCI_VENDOR_ID_APPLE: return "Apple"; case PCI_VENDOR_ID_NEXGEN: return "Nexgen"; case PCI_VENDOR_ID_QLOGIC: return "Q Logic"; case PCI_VENDOR_ID_CYRIX: return "Cyrix"; 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_SUN: return "Sun Microsystems"; 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_PLX: return "PLX"; case PCI_VENDOR_ID_MADGE: return "Madge Networks"; 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_SURECOM: return "Surecom"; case PCI_VENDOR_ID_NEOMAGIC: return "Neomagic"; case PCI_VENDOR_ID_ASP: return "Advanced System Products"; case PCI_VENDOR_ID_MACRONIX: return "Macronix"; case PCI_VENDOR_ID_CERN: return "CERN"; case PCI_VENDOR_ID_NVIDIA: return "NVidia"; 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_TTI: return "Triones Technologies, Inc."; case PCI_VENDOR_ID_VIA: return "VIA Technologies"; case PCI_VENDOR_ID_SMC2: return "SMC"; 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_CYCLONE: return "Cyclone"; 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_ARTOP: return "Artop Electronics"; case PCI_VENDOR_ID_ZEITNET: return "ZeitNet"; case PCI_VENDOR_ID_OMEGA: return "Omega Micro"; case PCI_VENDOR_ID_LITEON: return "LiteOn"; case PCI_VENDOR_ID_NP: return "Network Peripherals"; case PCI_VENDOR_ID_ATT: return "Lucent (ex-AT&T) Microelectronics"; case PCI_VENDOR_ID_SPECIALIX: return "Specialix"; case PCI_VENDOR_ID_AURAVISION: return "Auravision"; case PCI_VENDOR_ID_IKON: return "Ikon"; case PCI_VENDOR_ID_ZORAN: return "Zoran"; case PCI_VENDOR_ID_KINETIC: return "Kinetic"; 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_ESSENTIAL: return "Essential Communications"; case PCI_VENDOR_ID_O2: return "O2 Micro"; case PCI_VENDOR_ID_3DFX: return "3Dfx"; case PCI_VENDOR_ID_SIGMADES: return "Sigma Designs"; case PCI_VENDOR_ID_CCUBE: return "C-Cube"; case PCI_VENDOR_ID_DIPIX: return "Dipix"; case PCI_VENDOR_ID_STALLION: return "Stallion Technologies"; case PCI_VENDOR_ID_OPTIBASE: return "Optibase"; case PCI_VENDOR_ID_SATSAGEM: return "SatSagem"; case PCI_VENDOR_ID_HUGHES: return "Hughes"; case PCI_VENDOR_ID_ENSONIQ: return "Ensoniq"; case PCI_VENDOR_ID_ALTEON: return "Alteon"; case PCI_VENDOR_ID_PICTUREL: return "Picture Elements"; case PCI_VENDOR_ID_NVIDIA_SGS: return "NVidia/SGS Thomson"; case PCI_VENDOR_ID_CBOARDS: return "ComputerBoards"; 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_DCI: return "Decision Computer Int."; 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_TIGERJET: return "TigerJet"; case PCI_VENDOR_ID_ARK: return "ARK Logic"; default: return "Unknown vendor"; }}static 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";}/* * 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 class_rev, bus, devfn; unsigned short vendor, device, status; unsigned char bist, latency, min_gnt, max_lat; int reg, len = 0; const char *str; bus = dev->bus->number; devfn = dev->devfn; 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) len += sprintf(buf + len, "Max Lat=%d.", max_lat); } for (reg = 0; reg < 6; reg++) { if (len + 40 > size) { return -1; } base = dev->base_address[reg]; if (!base) continue; if (base & PCI_BASE_ADDRESS_SPACE_IO) { len += sprintf(buf + len, "\n I/O at 0x%lx [0x%lx].", base & PCI_BASE_ADDRESS_IO_MASK, dev->base_address[reg]); } else { const char *pref, *type = "unknown"; if (base & PCI_BASE_ADDRESS_MEM_PREFETCH) { pref = "P"; } else { pref = "Non-p"; } switch (base & PCI_BASE_ADDRESS_MEM_TYPE_MASK) { case PCI_BASE_ADDRESS_MEM_TYPE_32: type = "32 bit"; break; case PCI_BASE_ADDRESS_MEM_TYPE_1M: type = "20 bit"; break; case PCI_BASE_ADDRESS_MEM_TYPE_64: type = "64 bit"; break; } len += sprintf(buf + len, "\n %srefetchable %s memory at " "0x%lx [0x%lx].", pref, type, base & PCI_BASE_ADDRESS_MEM_MASK, dev->base_address[reg]); } } len += sprintf(buf + len, "\n"); return len;}/* * Return list of PCI devices as a character string for /proc/pci. * BUF is a buffer that is PAGE_SIZE bytes long. */int get_pci_list(char *buf){ int nprinted, len, size; struct pci_dev *dev; static int complained = 0;# define MSG "\nwarning: page-size limit reached!\n" if (!complained) { complained++; printk(KERN_INFO "%s uses obsolete /proc/pci interface\n", current->comm); } /* reserve same for truncation warning message: */ size = PAGE_SIZE - (strlen(MSG) + 1); len = sprintf(buf, "PCI devices found:\n"); for (dev = pci_devices; dev; dev = dev->next) { nprinted = sprint_dev_config(dev, buf + len, size - len); if (nprinted < 0) { return len + sprintf(buf + len, MSG); } len += nprinted; } return len;}static struct proc_dir_entry proc_old_pci = { PROC_PCI, 3, "pci", S_IFREG | S_IRUGO, 1, 0, 0, 0, &proc_array_inode_operations};__initfunc(void proc_old_pci_init(void)){ proc_register(&proc_root, &proc_old_pci);}#endif /* CONFIG_PROC_FS */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -