Index: branches/Kabyl/i386/libsaio/pci.c =================================================================== --- branches/Kabyl/i386/libsaio/pci.c (revision 581) +++ branches/Kabyl/i386/libsaio/pci.c (revision 582) @@ -84,10 +84,11 @@ } new = (pci_dt_t*)malloc(sizeof(pci_dt_t)); bzero(new, sizeof(pci_dt_t)); - new->dev.addr = pci_addr; - new->vendor_id = id & 0xffff; - new->device_id = (id >> 16) & 0xffff; - new->class_id = pci_config_read16(pci_addr, PCI_CLASS_DEVICE); + new->dev.addr = pci_addr; + new->vendor_id = id & 0xffff; + new->device_id = (id >> 16) & 0xffff; + new->subsys_id.subsys_id = pci_config_read32(pci_addr, PCI_SUBSYSTEM_VENDOR_ID); + new->class_id = pci_config_read16(pci_addr, PCI_CLASS_DEVICE); new->parent = start; header_type = pci_config_read8(pci_addr, PCI_HEADER_TYPE); @@ -177,9 +178,10 @@ current = pci_dt; while (current) { - printf("%02x:%02x.%x [%04x] [%04x:%04x] :: %s\n", + printf("%02x:%02x.%x [%04x] [%04x:%04x] (subsys [%04x:%04x]):: %s\n", current->dev.bits.bus, current->dev.bits.dev, current->dev.bits.func, current->class_id, current->vendor_id, current->device_id, + current->subsys_id.subsys.vendor_id, current->subsys_id.subsys.device_id, get_pci_dev_path(current)); dump_pci_dt(current->children); current = current->next; Index: branches/Kabyl/i386/libsaio/pci.h =================================================================== --- branches/Kabyl/i386/libsaio/pci.h (revision 581) +++ branches/Kabyl/i386/libsaio/pci.h (revision 582) @@ -23,15 +23,24 @@ } pci_dev_t; typedef struct pci_dt_t { - pci_dev_t dev; + pci_dev_t dev; - uint16_t vendor_id; - uint16_t device_id; - uint16_t class_id; + uint16_t vendor_id; + uint16_t device_id; - struct pci_dt_t *parent; - struct pci_dt_t *children; - struct pci_dt_t *next; + union { + struct { + uint16_t vendor_id; + uint16_t device_id; + } subsys; + uint32_t subsys_id; + } subsys_id; + + uint16_t class_id; + + struct pci_dt_t *parent; + struct pci_dt_t *children; + struct pci_dt_t *next; } pci_dt_t; #define PCIADDR(bus, dev, func) (1 << 31) | (bus << 16) | (dev << 11) | (func << 8) @@ -42,12 +51,12 @@ extern uint8_t pci_config_read8(uint32_t, uint8_t); extern uint16_t pci_config_read16(uint32_t, uint8_t); extern uint32_t pci_config_read32(uint32_t, uint8_t); -extern void pci_config_write8(uint32_t, uint8_t, uint8_t); -extern void pci_config_write16(uint32_t, uint8_t, uint16_t); -extern void pci_config_write32(uint32_t, uint8_t, uint32_t); -extern char *get_pci_dev_path(pci_dt_t *); -extern void build_pci_dt(void); -extern void dump_pci_dt(pci_dt_t *); +extern void pci_config_write8(uint32_t, uint8_t, uint8_t); +extern void pci_config_write16(uint32_t, uint8_t, uint16_t); +extern void pci_config_write32(uint32_t, uint8_t, uint32_t); +extern char *get_pci_dev_path(pci_dt_t *); +extern void build_pci_dt(void); +extern void dump_pci_dt(pci_dt_t *); //----------------------------------------------------------------------------- // added by iNDi