[ath10k] Add WMI 10.2.4 event framework

Enable reception of WMI v10.2.4 events (used on atheros 988x devices). Most
events are not yet supported.

NET-1033

Test: build, run, prints error messages for unrecognized messages.
Change-Id: Idf884c86f07e5fa728cf96797ebc61871ccdafde
diff --git a/drivers/wlan/third_party/atheros/ath10k/wmi.c b/drivers/wlan/third_party/atheros/ath10k/wmi.c
index 98af079..6d7f6bf 100644
--- a/drivers/wlan/third_party/atheros/ath10k/wmi.c
+++ b/drivers/wlan/third_party/atheros/ath10k/wmi.c
@@ -5260,22 +5260,22 @@
 out:
     dev_kfree_skb(skb);
 }
+#endif // NEEDS PORTING
 
-static void ath10k_wmi_10_2_op_rx(struct ath10k* ar, struct sk_buff* skb) {
+static void ath10k_wmi_10_2_op_rx(struct ath10k* ar, struct ath10k_msg_buf* msg_buf) {
     struct wmi_cmd_hdr* cmd_hdr;
     enum wmi_10_2_event_id id;
     bool consumed;
 
-    cmd_hdr = (struct wmi_cmd_hdr*)skb->data;
-    id = MS(cmd_hdr->cmd_id, WMI_CMD_HDR_CMD_ID);
-
-    if (skb_pull(skb, sizeof(struct wmi_cmd_hdr)) == NULL) {
+    if (ath10k_msg_buf_get_payload_offset(ATH10K_MSG_TYPE_WMI) > msg_buf->used) {
         goto out;
     }
 
-    trace_ath10k_wmi_event(ar, id, skb->data, skb->len);
+    msg_buf->type = ATH10K_MSG_TYPE_WMI;
+    cmd_hdr = ath10k_msg_buf_get_header(msg_buf, ATH10K_MSG_TYPE_WMI);
+    id = MS(cmd_hdr->cmd_id, WMI_CMD_HDR_CMD_ID);
 
-    consumed = ath10k_tm_event_wmi(ar, id, skb);
+    consumed = ath10k_tm_event_wmi(ar, id, msg_buf);
 
     /* Ready event must be handled normally also in UTF mode so that we
      * know the UTF firmware has booted, others we are just bypass WMI
@@ -5289,104 +5289,132 @@
 
     switch (id) {
     case WMI_10_2_MGMT_RX_EVENTID:
-        ath10k_wmi_event_mgmt_rx(ar, skb);
+        ath10k_wmi_event_mgmt_rx(ar, msg_buf);
         /* mgmt_rx() owns the skb now! */
         return;
     case WMI_10_2_SCAN_EVENTID:
-        ath10k_wmi_event_scan(ar, skb);
-        ath10k_wmi_queue_set_coverage_class_work(ar);
+        ath10k_err("WMI_10_2_SCAN_EVENTID unimplemented\n");
+        // ath10k_wmi_event_scan(ar, skb);
+        // ath10k_wmi_queue_set_coverage_class_work(ar);
         break;
     case WMI_10_2_CHAN_INFO_EVENTID:
-        ath10k_wmi_event_chan_info(ar, skb);
+        ath10k_err("WMI_10_2_CHAN_INFO_EVENTID unimplemented\n");
+        // ath10k_wmi_event_chan_info(ar, skb);
         break;
     case WMI_10_2_ECHO_EVENTID:
-        ath10k_wmi_event_echo(ar, skb);
+        ath10k_wmi_event_echo(ar, msg_buf);
         break;
     case WMI_10_2_DEBUG_MESG_EVENTID:
-        ath10k_wmi_event_debug_mesg(ar, skb);
-        ath10k_wmi_queue_set_coverage_class_work(ar);
+        ath10k_err("WMI_10_2_DEBUG_MESG_EVENTID unimplemented\n");
+        // ath10k_wmi_event_debug_mesg(ar, skb);
+        // ath10k_wmi_queue_set_coverage_class_work(ar);
         break;
     case WMI_10_2_UPDATE_STATS_EVENTID:
-        ath10k_wmi_event_update_stats(ar, skb);
+        ath10k_err("WMI_10_2_UPDATE_STATS_EVENTID unimplemented\n");
+        // ath10k_wmi_event_update_stats(ar, skb);
         break;
     case WMI_10_2_VDEV_START_RESP_EVENTID:
-        ath10k_wmi_event_vdev_start_resp(ar, skb);
-        ath10k_wmi_queue_set_coverage_class_work(ar);
+        ath10k_err("WMI_10_2_VDEV_START_RESP_EVENTID unimplemented\n");
+        // ath10k_wmi_event_vdev_start_resp(ar, skb);
+        // ath10k_wmi_queue_set_coverage_class_work(ar);
         break;
     case WMI_10_2_VDEV_STOPPED_EVENTID:
-        ath10k_wmi_event_vdev_stopped(ar, skb);
-        ath10k_wmi_queue_set_coverage_class_work(ar);
+        ath10k_err("WMI_10_2_VDEV_STOPPED_EVENTID unimplemented\n");
+        // ath10k_wmi_event_vdev_stopped(ar, skb);
+        // ath10k_wmi_queue_set_coverage_class_work(ar);
         break;
     case WMI_10_2_PEER_STA_KICKOUT_EVENTID:
-        ath10k_wmi_event_peer_sta_kickout(ar, skb);
+        ath10k_err("WMI_10_2_PEER_STA_KICKOUT_EVENTID unimplemented\n");
+        // ath10k_wmi_event_peer_sta_kickout(ar, skb);
         break;
     case WMI_10_2_HOST_SWBA_EVENTID:
-        ath10k_wmi_event_host_swba(ar, skb);
+        ath10k_err("WMI_10_2_HOST_SWBA_EVENTID unimplemented\n");
+        // ath10k_wmi_event_host_swba(ar, skb);
         break;
     case WMI_10_2_TBTTOFFSET_UPDATE_EVENTID:
-        ath10k_wmi_event_tbttoffset_update(ar, skb);
+        ath10k_err("WMI_10_2_TBTTOFFSET_UPDATE_EVENTID unimplemented\n");
+        // ath10k_wmi_event_tbttoffset_update(ar, skb);
         break;
     case WMI_10_2_PHYERR_EVENTID:
-        ath10k_wmi_event_phyerr(ar, skb);
+        ath10k_err("WMI_10_2_PHYERR_EVENTID unimplemented\n");
+        // ath10k_wmi_event_phyerr(ar, skb);
         break;
     case WMI_10_2_ROAM_EVENTID:
-        ath10k_wmi_event_roam(ar, skb);
-        ath10k_wmi_queue_set_coverage_class_work(ar);
+        ath10k_err("WMI_10_2_ROAM_EVENTID unimplemented\n");
+        // ath10k_wmi_event_roam(ar, skb);
+        // ath10k_wmi_queue_set_coverage_class_work(ar);
         break;
     case WMI_10_2_PROFILE_MATCH:
-        ath10k_wmi_event_profile_match(ar, skb);
+        ath10k_err("WMI_10_2_PROFILE_MATCH unimplemented\n");
+        // ath10k_wmi_event_profile_match(ar, skb);
         break;
     case WMI_10_2_DEBUG_PRINT_EVENTID:
-        ath10k_wmi_event_debug_print(ar, skb);
-        ath10k_wmi_queue_set_coverage_class_work(ar);
+        ath10k_err("WMI_10_2_DEBUG_PRINT_EVENTID unimplemented\n");
+        // ath10k_wmi_event_debug_print(ar, skb);
+        // ath10k_wmi_queue_set_coverage_class_work(ar);
         break;
     case WMI_10_2_PDEV_QVIT_EVENTID:
-        ath10k_wmi_event_pdev_qvit(ar, skb);
+        ath10k_err("WMI_10_2_PDEV_QVIT_EVENTID unimplemented\n");
+        // ath10k_wmi_event_pdev_qvit(ar, skb);
         break;
     case WMI_10_2_WLAN_PROFILE_DATA_EVENTID:
-        ath10k_wmi_event_wlan_profile_data(ar, skb);
+        ath10k_err("WMI_10_2_WLAN_PROFILE_DATA_EVENTID unimplemented\n");
+        // ath10k_wmi_event_wlan_profile_data(ar, skb);
         break;
     case WMI_10_2_RTT_MEASUREMENT_REPORT_EVENTID:
-        ath10k_wmi_event_rtt_measurement_report(ar, skb);
+        ath10k_err("WMI_10_2_RTT_MEASUREMENT_REPORT_EVENTID unimplemented\n");
+        // ath10k_wmi_event_rtt_measurement_report(ar, skb);
         break;
     case WMI_10_2_TSF_MEASUREMENT_REPORT_EVENTID:
-        ath10k_wmi_event_tsf_measurement_report(ar, skb);
+        ath10k_err("WMI_10_2_TSF_MEASUREMENT_REPORT_EVENTID unimplemented\n");
+        // ath10k_wmi_event_tsf_measurement_report(ar, skb);
         break;
     case WMI_10_2_RTT_ERROR_REPORT_EVENTID:
-        ath10k_wmi_event_rtt_error_report(ar, skb);
+        ath10k_err("WMI_10_2_RTT_ERROR_REPORT_EVENTID unimplemented\n");
+        // ath10k_wmi_event_rtt_error_report(ar, skb);
         break;
     case WMI_10_2_WOW_WAKEUP_HOST_EVENTID:
-        ath10k_wmi_event_wow_wakeup_host(ar, skb);
+        ath10k_err("WMI_10_2_WOW_WAKEUP_HOST_EVENTID unimplemented\n");
+        // ath10k_wmi_event_wow_wakeup_host(ar, skb);
         break;
     case WMI_10_2_DCS_INTERFERENCE_EVENTID:
-        ath10k_wmi_event_dcs_interference(ar, skb);
+        ath10k_err("WMI_10_2_DCS_INTERFERENCE_EVENTID unimplemented\n");
+        // ath10k_wmi_event_dcs_interference(ar, skb);
         break;
     case WMI_10_2_PDEV_TPC_CONFIG_EVENTID:
-        ath10k_wmi_event_pdev_tpc_config(ar, skb);
+        ath10k_err("WMI_10_2_PDEV_TPC_CONFIG_EVENTID unimplemented\n");
+        // ath10k_wmi_event_pdev_tpc_config(ar, skb);
         break;
     case WMI_10_2_INST_RSSI_STATS_EVENTID:
-        ath10k_wmi_event_inst_rssi_stats(ar, skb);
+        ath10k_err("WMI_10_2_INST_RSSI_STATS_EVENTID unimplemented\n");
+        // ath10k_wmi_event_inst_rssi_stats(ar, skb);
         break;
     case WMI_10_2_VDEV_STANDBY_REQ_EVENTID:
-        ath10k_wmi_event_vdev_standby_req(ar, skb);
-        ath10k_wmi_queue_set_coverage_class_work(ar);
+        ath10k_err("WMI_10_2_VDEV_STANDBY_REQ_EVENTID unimplemented\n");
+        // ath10k_wmi_event_vdev_standby_req(ar, skb);
+        // ath10k_wmi_queue_set_coverage_class_work(ar);
         break;
     case WMI_10_2_VDEV_RESUME_REQ_EVENTID:
-        ath10k_wmi_event_vdev_resume_req(ar, skb);
-        ath10k_wmi_queue_set_coverage_class_work(ar);
+        ath10k_err("WMI_10_2_VDEV_RESUME_REQ_EVENTID unimplemented\n");
+        // ath10k_wmi_event_vdev_resume_req(ar, skb);
+        // ath10k_wmi_queue_set_coverage_class_work(ar);
         break;
     case WMI_10_2_SERVICE_READY_EVENTID:
-        ath10k_wmi_event_service_ready(ar, skb);
+        ath10k_err("WMI_10_2_SERVICE_READY_EVENTID unimplemented\n");
+        // ath10k_wmi_event_service_ready(ar, skb);
         return;
     case WMI_10_2_READY_EVENTID:
-        ath10k_wmi_event_ready(ar, skb);
-        ath10k_wmi_queue_set_coverage_class_work(ar);
+        ath10k_err("WMI_10_2_READY_EVENTID unimplemented\n");
+        // ath10k_wmi_event_ready(ar, skb);
+        // ath10k_wmi_queue_set_coverage_class_work(ar);
         break;
     case WMI_10_2_PDEV_TEMPERATURE_EVENTID:
-        ath10k_wmi_event_temperature(ar, skb);
+        ath10k_err("WMI_10_2_PDEV_TEMPERATURE_EVENTID unimplemented\n");
+        // ath10k_wmi_event_temperature(ar, skb);
         break;
     case WMI_10_2_PDEV_BSS_CHAN_INFO_EVENTID:
-        ath10k_wmi_event_pdev_bss_chan_info(ar, skb);
+        ath10k_err("WMI_10_2_PDEV_BSS_CHAN_INFO_EVENTID unimplemented\n");
+        // ath10k_wmi_event_pdev_bss_chan_info(ar, skb);
         break;
     case WMI_10_2_RTT_KEEPALIVE_EVENTID:
     case WMI_10_2_GPIO_INPUT_EVENTID:
@@ -5404,9 +5432,10 @@
     }
 
 out:
-    dev_kfree_skb(skb);
+    ath10k_msg_buf_free(msg_buf);
 }
 
+#if 0 // NEEDS PORTING
 static void ath10k_wmi_10_4_op_rx(struct ath10k* ar, struct sk_buff* skb) {
     struct wmi_cmd_hdr* cmd_hdr;
     enum wmi_10_4_event_id id;
@@ -8149,8 +8178,8 @@
 };
 
 static const struct wmi_ops wmi_10_2_4_ops = {
-#if 0 // NEEDS PORTING
     .rx = ath10k_wmi_10_2_op_rx,
+#if 0 // NEEDS PORTING
     .pull_fw_stats = ath10k_wmi_10_2_4_op_pull_fw_stats,
     .gen_init = ath10k_wmi_10_2_op_gen_init,
     .gen_peer_assoc = ath10k_wmi_10_2_op_gen_peer_assoc,
@@ -8213,8 +8242,7 @@
     .gen_delba_send = ath10k_wmi_op_gen_delba_send,
     .gen_pdev_get_tpc_config = ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config,
     .fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
-    .gen_pdev_enable_adaptive_cca =
-    ath10k_wmi_op_gen_pdev_enable_adaptive_cca,
+    .gen_pdev_enable_adaptive_cca = ath10k_wmi_op_gen_pdev_enable_adaptive_cca,
     .get_vdev_subtype = ath10k_wmi_10_2_4_op_get_vdev_subtype,
 #endif // NEEDS PORTING
     /* .gen_bcn_tmpl not implemented */