]> pd.if.org Git - zos/blobdiff - pci/func.c
scanning pci bus
[zos] / pci / func.c
diff --git a/pci/func.c b/pci/func.c
new file mode 100644 (file)
index 0000000..5f24610
--- /dev/null
@@ -0,0 +1,131 @@
+#include <stdint.h>
+
+char *pci_func_desc(uint8_t class, uint8_t sub, uint8_t prog) {
+       uint32_t funcno, special;
+
+       funcno = class << 16 | sub << 8 | prog;
+       special = class << 16 | sub << 8;
+
+       switch (special) {
+               case 0x010000: return "IDE Controller"; break;
+               case 0x020500: return "PICMG 2.14 Multi Computing"; break;
+               case 0x060700: return "RACEway Bridge"; break;
+               default: break;
+       }
+       switch (funcno) {
+               case 0x000000: return "Any device except for VGA-Compatible devices"; break;
+               case 0x000100: return "VGA-Compatible Device"; break;
+               case 0x010000: return "SCSI Bus Controller"; break;
+               case 0x010200: return "Floppy Disk Controller"; break;
+               case 0x010300: return "IPI Bus Controller"; break;
+               case 0x010400: return "RAID Controller"; break;
+               case 0x010520: return "ATA Controller (Single DMA)"; break;
+               case 0x010530: return "ATA Controller (Chained DMA)"; break;
+               case 0x010600: return "Serial ATA (Vendor Specific Interface)"; break;
+               case 0x010601: return "Serial ATA (AHCI 1.0)"; break;
+               case 0x010700: return "Serial Attached SCSI (SAS)"; break;
+               case 0x018000: return "Other Mass Storage Controller"; break;
+               case 0x020000: return "Ethernet Controller"; break;
+               case 0x020100: return "Token Ring Controller"; break;
+               case 0x020200: return "FDDI Controller"; break;
+               case 0x020300: return "ATM Controller"; break;
+               case 0x020400: return "ISDN Controller"; break;
+               case 0x020500: return "WorldFip Controller"; break;
+               case 0x028000: return "Other Network Controller"; break;
+               case 0x030000: return "VGA-Compatible Controller"; break;
+               case 0x030001: return "8512-Compatible Controller"; break;
+               case 0x030100: return "XGA Controller"; break;
+               case 0x030200: return "3D Controller (Not VGA-Compatible)"; break;
+               case 0x038000: return "Other Display Controller"; break;
+               case 0x040000: return "Video Device"; break;
+               case 0x040100: return "Audio Device"; break;
+               case 0x040200: return "Computer Telephony Device"; break;
+               case 0x048000: return "Other Multimedia Device"; break;
+               case 0x050000: return "RAM Controller"; break;
+               case 0x050100: return "Flash Controller"; break;
+               case 0x058000: return "Other Memory Controller"; break;
+               case 0x060000: return "Host Bridge"; break;
+               case 0x060100: return "ISA Bridge"; break;
+               case 0x060200: return "EISA Bridge"; break;
+               case 0x060300: return "MCA Bridge"; break;
+               case 0x060400: return "PCI-to-PCI Bridge"; break;
+               case 0x060401: return "PCI-to-PCI Bridge (Subtractive Decode)"; break;
+               case 0x060500: return "PCMCIA Bridge"; break;
+               case 0x060600: return "NuBus Bridge"; break;
+               case 0x060700: return "CardBus Bridge"; break;
+               case 0x060940: return "PCI-to-PCI Bridge (Semi-Transparent, Primary)"; break;
+               case 0x060980: return "PCI-to-PCI Bridge (Semi-Transparent, Secondary)"; break;
+               case 0x068000: return "Other Bridge Device"; break;
+               case 0x070000: return "Generic XT-Compatible Serial Controller"; break;
+               case 0x070001: return "16450-Compatible Serial Controller"; break;
+               case 0x070002: return "16550-Compatible Serial Controller"; break;
+               case 0x070003: return "16650-Compatible Serial Controller"; break;
+               case 0x070004: return "16750-Compatible Serial Controller"; break;
+               case 0x070005: return "16850-Compatible Serial Controller"; break;
+               case 0x070006: return "16950-Compatible Serial Controller"; break;
+               case 0x070100: return "Parallel Port"; break;
+               case 0x070101: return "Bi-Directional Parallel Port"; break;
+               case 0x070102: return "ECP 1.X Compliant Parallel Port"; break;
+               case 0x070103: return "IEEE 1284 Controller"; break;
+               case 0x070200: return "Multiport Serial Controller"; break;
+               case 0x070300: return "Generic Modem"; break;
+               case 0x070301: return "Hayes Compatible Modem (16450-Compatible Interface)"; break;
+               case 0x070302: return "Hayes Compatible Modem (16550-Compatible Interface)"; break;
+               case 0x070303: return "Hayes Compatible Modem (16650-Compatible Interface)"; break;
+               case 0x070304: return "Hayes Compatible Modem (16750-Compatible Interface)"; break;
+               case 0x070400: return "IEEE 488.1/2 (GPIB) Controller"; break;
+               case 0x070500: return "Smart Card"; break;
+               case 0x078000: return "Other Communications Device"; break;
+               case 0x080000: return "Generic 8259 PIC"; break;
+               case 0x080001: return "ISA PIC"; break;
+               case 0x080002: return "EISA PIC"; break;
+               case 0x080010: return "I/O APIC Interrupt Controller"; break;
+               case 0x080020: return "I/O(x) APIC Interrupt Controller"; break;
+               case 0x080100: return "Generic 8237 DMA Controller"; break;
+               case 0x080101: return "ISA DMA Controller"; break;
+               case 0x080102: return "EISA DMA Controller"; break;
+               case 0x080200: return "Generic 8254 System Timer"; break;
+               case 0x080201: return "ISA System Timer"; break;
+               case 0x080202: return "EISA System Timer"; break;
+               case 0x080300: return "Generic RTC Controller"; break;
+               case 0x080301: return "ISA RTC Controller"; break;
+               case 0x080400: return "Generic PCI Hot-Plug Controller"; break;
+               case 0x088000: return "Other System Peripheral"; break;
+               case 0x090000: return "Keyboard Controller"; break;
+               case 0x090100: return "Consumer IR Controller"; break;
+               case 0x090200: return "Audio Controller"; break;
+               case 0x090300: return "Voice Controller"; break;
+               case 0x090310: return "USB (Open Host Controller Spec"; break;
+               case 0x090320: return "USB2 Host Controller (Intel Enhanced Host Controller Interface)"; break;
+               case 0x090380: return "USB"; break;
+               case 0x090400: return "Data Controller"; break;
+               case 0x090410: return "Gameport Contrlller (Legacy)"; break;
+               case 0x090500: return "SMBus"; break;
+               case 0x090600: return "InfiniBand"; break;
+               case 0x090700: return "IPMI SMIC Interface"; break;
+               case 0x090701: return "IPMI Kybd Controller Style Interface"; break;
+               case 0x090702: return "IPMI Block Transfer Interface"; break;
+               case 0x090800: return "SERCOS Interface Standard (IEC 61491)"; break;
+               case 0x090900: return "CANbus"; break;
+               case 0x091000: return "RF Controller"; break;
+               case 0x091100: return "Bluetooth Controller"; break;
+               case 0x091200: return "Broadband Controller"; break;
+               case 0x092000: return "Ethernet Controller (802.11a)"; break;
+               case 0x092100: return "Ethernet Controller (802.11b)"; break;
+               case 0x093000: return "MIPS Processor"; break;
+               case 0x094000: return "Co-Processor"; break;
+               case 0x094010: return "IEEE 1394 Controller (1394 OpenHCI Spec)"; break;
+               case 0x098000: return "Message FIFO"; break;
+               case 0x100000: return "Network and Computing Encrpytion/Decryption"; break;
+               case 0x101000: return "Entertainment Encryption/Decryption"; break;
+               case 0x108000: return "Other Encryption/Decryption"; break;
+               case 0x110000: return "DPIO Modules"; break;
+               case 0x110100: return "Performance Counters"; break;
+               case 0x111000: return "Communications Syncrhonization Plus Time and Frequency Test/Measurment"; break;
+               case 0x112000: return "Management Card"; break;
+               case 0x118000: return "Other Data Acquisition/Signal Processing Controller"; break;
+               default: break;
+       }
+
+       return "unknown";
+}