diff options
-rw-r--r-- | usb-print-caps.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/usb-print-caps.c b/usb-print-caps.c index fac3b99..94bfc1f 100644 --- a/usb-print-caps.c +++ b/usb-print-caps.c @@ -211,6 +211,47 @@ void ehcidump(char *dev) /* ------------------------------------------------------------- */ +void ahcidump(char *dev) +{ + uint32_t *map, val; + int ports,i; + + map = mapbar(dev, 5); + if (!map) + return; + + printf(" ahci caps\n"); + + val = map[0]; + ports = (val >> 0) & 0x1f; + printf(" 0x%04x: 0x%08x", 0, val); + printf(" - maxports: %d\n", + ports); + + val = map[3]; + printf(" 0x%04x: 0x%08x", 3*4, val); + printf(" - port map:"); + for (i = 0; i < ports+1; i++) { + if (val & (1 << i)) { + printf(" %d", i); + } else { + printf(" -"); + } + } + printf("\n"); + + val = map[4]; + printf(" 0x%04x: 0x%08x", 4*4, val); + printf(" - ahci ver: %x.%x%x\n", + (val >> 16) & 0xffff, + (val >> 8) & 0xff, + (val >> 0) & 0xff); + + return; +} + +/* ------------------------------------------------------------- */ + int main(int argc, char *argv[]) { unsigned long addr0; @@ -249,6 +290,12 @@ int main(int argc, char *argv[]) printf(" bar0 @ 0x%lx\n", addr0); xhcidump(entry->d_name); break; + case 0x010601: + printf("ahci @ %s %04x:%04x\n", entry->d_name, vendor, device); + if (1) { + ahcidump(entry->d_name); + } + break; } } return 0; |