예제 #1
0
파일: main.c 프로젝트: eugen0329/lspci
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;
}
예제 #2
0
파일: pci_dev.c 프로젝트: maveric94/loader
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;
}