ath10k: handle WMI debug print events
authorKalle Valo <kvalo@qca.qualcomm.com>
Fri, 3 Jan 2014 10:59:20 +0000 (12:59 +0200)
committerKalle Valo <kvalo@qca.qualcomm.com>
Fri, 10 Jan 2014 09:49:25 +0000 (11:49 +0200)
Firmware can send simple ascii strings as debug messages using
WMI_DEBUG_PRINT_EVENTID, print those with ATH10K_DBG_WMI log level.

Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/wmi.c

index 3ec6c9a84e8423771b27ad1b35a6b973e7944b58..f9925708f588e690a5e8c5b7d22aabcbf18cf2ad 100644 (file)
@@ -16,6 +16,7 @@
  */
 
 #include <linux/skbuff.h>
+#include <linux/ctype.h>
 
 #include "core.h"
 #include "htc.h"
@@ -1676,9 +1677,37 @@ static void ath10k_wmi_event_profile_match(struct ath10k *ar,
 }
 
 static void ath10k_wmi_event_debug_print(struct ath10k *ar,
-                                 struct sk_buff *skb)
+                                        struct sk_buff *skb)
 {
-       ath10k_dbg(ATH10K_DBG_WMI, "WMI_DEBUG_PRINT_EVENTID\n");
+       char buf[101], c;
+       int i;
+
+       for (i = 0; i < sizeof(buf) - 1; i++) {
+               if (i >= skb->len)
+                       break;
+
+               c = skb->data[i];
+
+               if (c == '\0')
+                       break;
+
+               if (isascii(c) && isprint(c))
+                       buf[i] = c;
+               else
+                       buf[i] = '.';
+       }
+
+       if (i == sizeof(buf) - 1)
+               ath10k_warn("wmi debug print truncated: %d\n", skb->len);
+
+       /* for some reason the debug prints end with \n, remove that */
+       if (skb->data[i - 1] == '\n')
+               i--;
+
+       /* the last byte is always reserved for the null character */
+       buf[i] = '\0';
+
+       ath10k_dbg(ATH10K_DBG_WMI, "wmi event debug print '%s'\n", buf);
 }
 
 static void ath10k_wmi_event_pdev_qvit(struct ath10k *ar, struct sk_buff *skb)