summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--usb-print-caps.c24
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);