diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2012-11-02 15:41:38 +0100 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2012-11-02 15:41:38 +0100 |
commit | 0e4f6f24f0c786e43565fd767e4d1dc77a0484c1 (patch) | |
tree | f6ab5343b4135838562608d619bd04cf5f7a54ed | |
parent | 6a48ac4ef78d865faa2011f26874ddd1da5071ac (diff) | |
download | usb-tools-0e4f6f24f0c786e43565fd767e4d1dc77a0484c1.tar.gz |
add ahci dump
-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; |