summaryrefslogtreecommitdiffstats
path: root/usb-print-caps.c
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2012-11-02 15:41:38 +0100
committerGerd Hoffmann <kraxel@redhat.com>2012-11-02 15:41:38 +0100
commit0e4f6f24f0c786e43565fd767e4d1dc77a0484c1 (patch)
treef6ab5343b4135838562608d619bd04cf5f7a54ed /usb-print-caps.c
parent6a48ac4ef78d865faa2011f26874ddd1da5071ac (diff)
downloadusb-tools-0e4f6f24f0c786e43565fd767e4d1dc77a0484c1.tar.gz
add ahci dump
Diffstat (limited to 'usb-print-caps.c')
-rw-r--r--usb-print-caps.c47
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;