diff options
-rw-r--r-- | usb-print-caps.c | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/usb-print-caps.c b/usb-print-caps.c index 94bfc1f..08ff718 100644 --- a/usb-print-caps.c +++ b/usb-print-caps.c @@ -14,11 +14,11 @@ #define BASEPATH "/sys/bus/pci/devices" -void *mapbar(char *dev, int bar) +void *mapbar(char *dev, int bar, uint32_t offset) { char filename[128]; struct stat st; - void *map; + uint8_t *map; int fd; snprintf(filename, sizeof(filename), @@ -37,7 +37,7 @@ void *mapbar(char *dev, int bar) } close(fd); - return map; + return map + offset; } uint32_t readsys(char *dev, char *file) @@ -73,12 +73,12 @@ static const char *xhci_capname[] = { [ 192 ... 255 ] = "Vendor Defined", }; -void xhcidump(char *dev) +void xhcidump(char *dev, uint32_t offset) { uint32_t *map, val; int i, n, ext = 0, off, cid; - map = mapbar(dev, 0); + map = mapbar(dev, 0, offset); if (!map) return; @@ -162,12 +162,12 @@ void xhcidump(char *dev) /* ------------------------------------------------------------- */ -void ehcidump(char *dev) +void ehcidump(char *dev, uint32_t offset) { uint32_t *map, val; int i, n; - map = mapbar(dev, 0); + map = mapbar(dev, 0, offset); if (!map) return; @@ -216,7 +216,7 @@ void ahcidump(char *dev) uint32_t *map, val; int ports,i; - map = mapbar(dev, 5); + map = mapbar(dev, 5, 0); if (!map) return; @@ -279,16 +279,12 @@ int main(int argc, char *argv[]) case 0x0c0320: printf("ehci @ %s %04x:%04x\n", entry->d_name, vendor, device); printf(" bar0 @ 0x%lx\n", addr0); - if (addr0 & 0xfff) { - printf(" Oops, not page aligned, skipping\n"); - } else { - ehcidump(entry->d_name); - } + ehcidump(entry->d_name, addr0 & 0xfff); break; case 0x0c0330: printf("xhci @ %s %04x:%04x\n", entry->d_name, vendor, device); printf(" bar0 @ 0x%lx\n", addr0); - xhcidump(entry->d_name); + xhcidump(entry->d_name, addr0 & 0xfff); break; case 0x010601: printf("ahci @ %s %04x:%04x\n", entry->d_name, vendor, device); |