4 #include <acess/sys.h>
\r
12 #include "pcilist.h"
\r
14 // === CONSTANTS ===
\r
19 {0x10EC, "Realtek"},
\r
20 {0x1106, "VIA Technologies, Inc."},
\r
23 #define VENDOR_COUNT (sizeof(csaVENDORS)/sizeof(csaVENDORS[0]))
\r
25 // === PROTOTYPES ===
\r
26 char *GetVendorName(uint16_t ID);
\r
27 char *GetDeviceName(uint16_t ven, uint16_t dev);
\r
30 int main(int argc, char *argv[], char *envp[])
\r
33 char tmpPath[256+13] = "/Devices/pci/";
\r
34 char *fileName = tmpPath + sizeof("/Devices/pci");
\r
35 uint16_t vendor, device;
\r
40 printf("PCI Bus Dump\n");
\r
41 // --- Open PCI Directory
\r
42 dp = open("/Devices/pci", /*OPEN_FLAG_READ|*/OPENFLAG_EXEC);
\r
45 fprintf(stderr, "Non-Standard configuration or not running on Acess.\n");
\r
46 fprintf(stderr, "Quitting - Reason: Unable to open PCI driver.\n");
\r
50 // --- List Contents
\r
51 // Uses `fp` as a temp variable
\r
52 while( (fp = readdir(dp, fileName)) )
\r
55 if(fp == -3) printf("Invalid Permissions to traverse directory\n");
\r
59 printf("Bus %c%c, Index %c%c, Fcn %c: ", fileName[0],fileName[1],
\r
60 fileName[3],fileName[4], fileName[6]);
\r
63 fp = open(tmpPath, OPENFLAG_READ);
\r
64 if(fp == -1) continue;
\r
66 read(fp, 2, &vendor); read(fp, 2, &device);
\r
67 printf(" Vendor 0x%04x, Device 0x%04x\n", vendor, device);
\r
68 printf(" %s - %s\n", GetVendorName(vendor), GetDeviceName(vendor, device));
\r
70 // Reuse vendor and device
\r
71 seek(fp, 0x8, SEEK_SET);
\r
72 read(fp, 2, &vendor); read(fp, 2, &device);
\r
73 printf(" Revision 0x%04x, Class 0x%04x ()\n", vendor, device);
\r
77 seek(fp, 0x10, SEEK_SET);
\r
78 printf("Base Address Registers (BARs):\n");
\r
79 read(fp, 4, &tmp32); printf(" 0x%08x", tmp32);
\r
80 read(fp, 4, &tmp32); printf(" 0x%08x", tmp32);
\r
81 read(fp, 4, &tmp32); printf(" 0x%08x", tmp32);
\r
82 read(fp, 4, &tmp32); printf(" 0x%08x", tmp32);
\r
83 read(fp, 4, &tmp32); printf(" 0x%08x", tmp32);
\r
84 read(fp, 4, &tmp32); printf(" 0x%08x", tmp32);
\r
96 char *GetVendorName(uint16_t id)
\r
100 for( i = 0; i < VENDOR_COUNT; i++)
\r
102 if( csaVENDORS[i].ID == id )
\r
103 return csaVENDORS[i].Name;
\r
106 for( i = 0; i < PCI_VENTABLE_LEN; i++ )
\r
108 if( PciVenTable[i].VenId == id )
\r
109 return PciVenTable[i].VenFull;
\r
115 char *GetDeviceName(uint16_t ven, uint16_t dev)
\r
118 for( i = 0; i < PCI_DEVTABLE_LEN; i++ )
\r
120 if( PciDevTable[i].VenId == ven && PciDevTable[i].DevId == dev )
\r
121 return PciDevTable[i].ChipDesc;
\r