ar9170: interpret firmware debug commands
authorJohannes Berg <johannes@sipsolutions.net>
Fri, 5 Jun 2009 09:47:43 +0000 (11:47 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 10 Jun 2009 17:27:54 +0000 (13:27 -0400)
This adds new commands that the original firmware will not send
but we can use them to debug firmware.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ar9170/main.c

index b104d7efd676dc11ef158ee79c9c4c000d912e4c..de57aa92a284a4c12796e17755ea04b6d2737555 100644 (file)
@@ -442,6 +442,38 @@ void ar9170_handle_command_response(struct ar9170 *ar, void *buf, u32 len)
                /* retransmission issue / SIFS/EIFS collision ?! */
                break;
 
+       /* firmware debug */
+       case 0xca:
+               printk(KERN_DEBUG "ar9170 FW: %.*s\n", len - 4, (char *)buf + 4);
+               break;
+       case 0xcb:
+               len -= 4;
+
+               switch (len) {
+               case 1:
+                       printk(KERN_DEBUG "ar9170 FW: u8: %#.2x\n",
+                               *((char *)buf + 4));
+                       break;
+               case 2:
+                       printk(KERN_DEBUG "ar9170 FW: u8: %#.4x\n",
+                               le16_to_cpup((__le16 *)((char *)buf + 4)));
+                       break;
+               case 4:
+                       printk(KERN_DEBUG "ar9170 FW: u8: %#.8x\n",
+                               le32_to_cpup((__le32 *)((char *)buf + 4)));
+                       break;
+               case 8:
+                       printk(KERN_DEBUG "ar9170 FW: u8: %#.16lx\n",
+                               (unsigned long)le64_to_cpup(
+                                               (__le64 *)((char *)buf + 4)));
+                       break;
+               }
+               break;
+       case 0xcc:
+               print_hex_dump_bytes("ar9170 FW:", DUMP_PREFIX_NONE,
+                                    (char *)buf + 4, len - 4);
+               break;
+
        default:
                printk(KERN_INFO "received unhandled event %x\n", cmd->type);
                print_hex_dump_bytes("dump:", DUMP_PREFIX_NONE, buf, len);