int main(int argc, char *argv[]) { const char * venName; U8 dev, rev, fu, maxDevsCount = PCI_MAX_DEV_COUNT, maxFuCount = PCI_MAX_FU_COUNT; U16 bus, svenId, venId, devId, maxBusCount = PCI_MAX_BUS_COUNT; U32 regdat; classId_t cl; devInfo_t devinf; classInfo_t clInf; if(increasePrivelegies(ALL_IO) == RVAL_ERR) exit(EXIT_FAILURE); puts("bus,dev,f|vendor| dev | class bsi|rev|svenId| descriptions ..."); puts("---------+------+-----+----------+---+------+-----------------"); for(bus = 0; bus < maxBusCount; bus++) { for (dev = 0; dev < maxDevsCount; dev++) { for(fu = 0; fu < maxFuCount; fu++) { if((regdat = getRegData(bus, dev, fu, 0x0)) == NULL_DEV) continue; venId = GET_VENDOR_ID(regdat); devId = GET_DEV_ID(regdat); regdat = getRegData(bus, dev, fu, 0x8); rev = GET_REVISION_ID(regdat); cl.base = GET_CLASS_BASE(regdat) ; cl.sub = GET_CLASS_SUB(regdat); cl.interf = GET_CLASS_INTERFACE(regdat); regdat = getRegData(bus, dev, fu, 0x2C); svenId = GET_SUBSYS_VENDOR_ID(regdat); findVenName(venId, &venName); findDevInfo(devId, venId, &devinf); findClassInfo(&cl, &clInf); printf("%3x,%2x,%x | %04x | %04x| %02x,%02x,%02x | %2x| %4x | ", bus,dev,fu, venId, devId, cl.base,cl.sub,cl.interf, rev, svenId); printf("%s: %s %s %s %s %s", venName, devinf.name, devinf.desc, clInf.base, clInf.sub, clInf.interf); puts(""); } } } return EXIT_SUCCESS; }
u32 showDeviceInfo() { u32 configAddress = calculateAddress(bus, device, function, 0x00); u32 RegData = getRegData(configAddress); if (RegData == -1) { return 1; } u32 DeviceID = RegData >> 16; u32 VendorID = RegData - (DeviceID << 16); configAddress = calculateAddress(bus, device, function, 0x08); RegData = getRegData(configAddress); u32 ClassID = RegData >> 8; u32 RevisionID = RegData - (ClassID << 8); u32 BaseClassCode = ClassID >> 16; u32 Progu32erface = ClassID - (BaseClassCode << 16); u32 SubClassCode = Progu32erface >> 8; Progu32erface = Progu32erface - (SubClassCode << 8); configAddress = calculateAddress(bus, device, function, 0x2C); RegData = getRegData(configAddress); u32 SubsysID = RegData >> 16; u32 SubsysVendID = RegData - (SubsysID << 16); printf("Bus: %x, device: %x, function: %x\n", bus, device, function); printf("Device ID: %x, Vendor ID: %x, Class ID: %x-%x-%x\n", DeviceID, VendorID, BaseClassCode, SubClassCode, Progu32erface); printf("Revision ID: %x, Subsystem ID: %x, Subsystem Vendor ID: %x\n", RevisionID, SubsysID, SubsysVendID); decodeNames(DeviceID, VendorID, BaseClassCode, SubClassCode, Progu32erface); printf("-------------------------------------------------------------------------------\n"); return 0; }