Explorar o código

qcacld-3.0: Change NDP WOW event handling to confirm with existing code

Currently in wma_wow_wakeup_host_event, NDP WOW handler code is doing manual
pointer arthematics followed conversion to event tlv. This is duplicate effort
as necessary wmi event struct is already available. Remove this and directly
use wmi event struct.

Change-Id: I90da473d773781d007f4932d6ffbec389d5a2766
CRs-Fixed: 1058503
Naveen Rawat %!s(int64=8) %!d(string=hai) anos
pai
achega
17dccbee18
Modificáronse 3 ficheiros con 28 adicións e 51 borrados
  1. 5 10
      core/wma/src/wma_features.c
  2. 15 39
      core/wma/src/wma_nan_datapath.c
  3. 8 2
      core/wma/src/wma_nan_datapath.h

+ 5 - 10
core/wma/src/wma_features.c

@@ -2616,6 +2616,9 @@ static int wow_get_wmi_eventid(int32_t reason, uint32_t tag)
 	case WOW_REASON_NAN_EVENT:
 		event_id = WMI_NAN_EVENTID;
 		break;
+	case WOW_REASON_NAN_DATA:
+		event_id = wma_ndp_get_eventid_from_tlvtag(tag);
+		break;
 	default:
 		WMA_LOGD(FL("Unexpected WOW reason : %s(%d)"),
 			 wma_wow_wake_reason_str(reason), reason);
@@ -3333,16 +3336,8 @@ int wma_wow_wakeup_host_event(void *handle, uint8_t *event,
 	case WOW_REASON_NAN_DATA:
 		WMA_LOGD(FL("Host woken up for NAN data path event from FW"));
 		if (param_buf->wow_packet_buffer) {
-			wow_buf_pkt_len =
-				*(uint32_t *)param_buf->wow_packet_buffer;
-			WMA_LOGD(FL("wow_packet_buffer dump"));
-			qdf_trace_hex_dump(QDF_MODULE_ID_WMA,
-				QDF_TRACE_LEVEL_DEBUG,
-				param_buf->wow_packet_buffer,
-				wow_buf_pkt_len);
-			wma_ndp_wow_event_callback(handle,
-				(param_buf->wow_packet_buffer + 4),
-				wow_buf_pkt_len);
+			wma_ndp_wow_event_callback(handle, wmi_cmd_struct_ptr,
+						   wow_buf_pkt_len, event_id);
 		} else {
 			WMA_LOGE(FL("wow_packet_buffer is empty"));
 		}

+ 15 - 39
core/wma/src/wma_nan_datapath.c

@@ -825,7 +825,7 @@ void wma_ndp_add_wow_wakeup_event(tp_wma_handle wma_handle,
  * Return: 0 if TLV tag is invalid
  *           else return corresponding WMI event id
  */
-static int wma_ndp_get_eventid_from_tlvtag(uint32_t tag)
+uint32_t wma_ndp_get_eventid_from_tlvtag(uint32_t tag)
 {
 	uint32_t event_id;
 
@@ -869,6 +869,7 @@ static int wma_ndp_get_eventid_from_tlvtag(uint32_t tag)
  * @handle: WMA handle
  * @event: event buffer
  * @len: length of @event buffer
+ * @event_id: event id for ndp wow event
  *
  * The wow event WOW_REASON_NAN_DATA is followed by the payload of the event
  * which generated the wow event.
@@ -879,66 +880,41 @@ static int wma_ndp_get_eventid_from_tlvtag(uint32_t tag)
  *
  * Return: none
  */
-void wma_ndp_wow_event_callback(void *handle, void *event,
-						  uint32_t len)
+void wma_ndp_wow_event_callback(void *handle, void *event, uint32_t len,
+				uint32_t event_id)
 {
-	uint32_t id;
-	int tlv_ok_status = 0;
-	void *wmi_cmd_struct_ptr = NULL;
-	uint32_t tag = WMITLV_GET_TLVTAG(WMITLV_GET_HDR(event));
-
-	/* Reverse map fixed params tag to EVENT_ID */
-	id = wma_ndp_get_eventid_from_tlvtag(tag);
-	if (!id) {
-		WMA_LOGE(FL("Invalid  Tag: %d"), tag);
-		return;
-	}
-
-	tlv_ok_status = wmitlv_check_and_pad_event_tlvs(handle, event, len,
-							id,
-							&wmi_cmd_struct_ptr);
-	if (tlv_ok_status != 0) {
-		WMA_LOGE(FL("Invalid Tag: %d could not check and pad tlvs"),
-			 tag);
-		return;
-	}
-
-	switch (id) {
+	WMA_LOGD(FL("ndp_wow_event dump"));
+	qdf_trace_hex_dump(QDF_MODULE_ID_WMA, QDF_TRACE_LEVEL_DEBUG,
+			   event, len);
+	switch (event_id) {
 	case WMI_NDP_INITIATOR_RSP_EVENTID:
-		wma_ndp_initiator_rsp_event_handler(handle,
-						wmi_cmd_struct_ptr, len);
+		wma_ndp_initiator_rsp_event_handler(handle, event, len);
 		break;
 
 	case WMI_NDP_RESPONDER_RSP_EVENTID:
-		wma_ndp_responder_rsp_event_handler(handle,
-						wmi_cmd_struct_ptr, len);
+		wma_ndp_responder_rsp_event_handler(handle, event, len);
 		break;
 
 	case WMI_NDP_END_RSP_EVENTID:
-		wma_ndp_end_response_event_handler(handle,
-						wmi_cmd_struct_ptr, len);
+		wma_ndp_end_response_event_handler(handle, event, len);
 		break;
 
 	case WMI_NDP_INDICATION_EVENTID:
-		wma_ndp_indication_event_handler(handle,
-						wmi_cmd_struct_ptr, len);
+		wma_ndp_indication_event_handler(handle, event, len);
 		break;
 
 	case WMI_NDP_CONFIRM_EVENTID:
-		wma_ndp_confirm_event_handler(handle,
-						wmi_cmd_struct_ptr, len);
+		wma_ndp_confirm_event_handler(handle, event, len);
 		break;
 
 	case WMI_NDP_END_INDICATION_EVENTID:
-		wma_ndp_end_indication_event_handler(handle,
-						wmi_cmd_struct_ptr, len);
+		wma_ndp_end_indication_event_handler(handle, event, len);
 		break;
 
 	default:
-		WMA_LOGE(FL("Unknown tag: %d"), tag);
+		WMA_LOGE(FL("Unknown event: %d"), event_id);
 		break;
 	}
-	wmitlv_free_allocated_event_tlvs(id, &wmi_cmd_struct_ptr);
 }
 
 /**

+ 8 - 2
core/wma/src/wma_nan_datapath.h

@@ -55,13 +55,15 @@ void wma_ndp_register_all_event_handlers(tp_wma_handle wma_handle);
 void wma_ndp_unregister_all_event_handlers(tp_wma_handle wma_handle);
 void wma_ndp_add_wow_wakeup_event(tp_wma_handle wma_handle,
 						uint8_t vdev_id);
-void wma_ndp_wow_event_callback(void *handle, void *event, uint32_t len);
+void wma_ndp_wow_event_callback(void *handle, void *event,
+				uint32_t len, uint32_t event_id);
 void wma_add_bss_ndi_mode(tp_wma_handle wma, tpAddBssParams add_bss);
 void wma_add_sta_ndi_mode(tp_wma_handle wma, tpAddStaParams add_sta);
 QDF_STATUS wma_handle_ndp_initiator_req(tp_wma_handle wma_handle, void *req);
 QDF_STATUS wma_handle_ndp_end_req(tp_wma_handle wma_handle, void *req);
 void wma_delete_sta_req_ndi_mode(tp_wma_handle wma,
 					tpDeleteStaParams del_sta);
+uint32_t wma_ndp_get_eventid_from_tlvtag(uint32_t tag);
 #else
 #define WMA_IS_VDEV_IN_NDI_MODE(intf, vdev_id) (false)
 static inline void wma_update_hdd_cfg_ndp(tp_wma_handle wma_handle,
@@ -85,7 +87,7 @@ static inline void wma_ndp_unregister_all_event_handlers(
 static inline void wma_ndp_add_wow_wakeup_event(tp_wma_handle wma_handle,
 						uint8_t vdev_id) {}
 static inline void wma_ndp_wow_event_callback(void *handle, void *event,
-						uint32_t len) {}
+					uint32_t len, uint32_t event_id) {}
 static inline void wma_add_sta_ndi_mode(tp_wma_handle wma,
 					tpAddStaParams add_sta) {}
 static inline QDF_STATUS wma_handle_ndp_initiator_req(tp_wma_handle wma_handle,
@@ -109,5 +111,9 @@ static inline void wma_delete_sta_req_ndi_mode(tp_wma_handle wma,
 {
 }
 
+static inline uint32_t wma_ndp_get_eventid_from_tlvtag(uint32_t tag)
+{
+	return 0;
+}
 #endif /* WLAN_FEATURE_NAN_DATAPATH */
 #endif /* __WMA_NAN_DATAPATH_H */