ath10k: implement diag event
[deliverable/linux.git] / drivers / net / wireless / ath / ath10k / wmi-tlv.c
index 56cd51d0ac937f3405af49df61b116e52d6baf66..a6c634a585ddb3f0682c9fdbefb3b5c3a82ec386 100644 (file)
@@ -268,6 +268,34 @@ static int ath10k_wmi_tlv_event_diag_data(struct ath10k *ar,
        return 0;
 }
 
+static int ath10k_wmi_tlv_event_diag(struct ath10k *ar,
+                                    struct sk_buff *skb)
+{
+       const void **tb;
+       const void *data;
+       int ret, len;
+
+       tb = ath10k_wmi_tlv_parse_alloc(ar, skb->data, skb->len, GFP_ATOMIC);
+       if (IS_ERR(tb)) {
+               ret = PTR_ERR(tb);
+               ath10k_warn(ar, "failed to parse tlv: %d\n", ret);
+               return ret;
+       }
+
+       data = tb[WMI_TLV_TAG_ARRAY_BYTE];
+       if (!data) {
+               kfree(tb);
+               return -EPROTO;
+       }
+       len = ath10k_wmi_tlv_len(data);
+
+       ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi tlv diag event len %d\n", len);
+       trace_ath10k_wmi_diag(ar, data, len);
+
+       kfree(tb);
+       return 0;
+}
+
 /***********/
 /* TLV ops */
 /***********/
@@ -386,6 +414,9 @@ static void ath10k_wmi_tlv_op_rx(struct ath10k *ar, struct sk_buff *skb)
        case WMI_TLV_DIAG_DATA_CONTAINER_EVENTID:
                ath10k_wmi_tlv_event_diag_data(ar, skb);
                break;
+       case WMI_TLV_DIAG_EVENTID:
+               ath10k_wmi_tlv_event_diag(ar, skb);
+               break;
        default:
                ath10k_warn(ar, "Unknown eventid: %d\n", id);
                break;
This page took 0.033815 seconds and 5 git commands to generate.