Browse Source

qcacmn: Move communication with firmware to vdev_ready in PMO

Objmgr vdev_create event does not guarantee vdev creation in firmware.
Move any PMO logic that would normally go in the vdev_create event, but
needs to communicate with firmware, to a new vdev_ready event handler.

Change-Id: Ifbc2aed26a511733b31c816b9e6c4359d39910e6
CRs-Fixed: 2020696
Dustin Brown 8 years ago
parent
commit
f37bed7d2e

+ 13 - 1
power_management_offloads/dispatcher/inc/wlan_pmo_obj_mgmt_api.h

@@ -65,7 +65,7 @@ QDF_STATUS pmo_psoc_object_created_notification(
  *
  * Return QDF_STATUS status in case of success else return error
  */
-QDF_STATUS  pmo_psoc_object_destroyed_notification(
+QDF_STATUS pmo_psoc_object_destroyed_notification(
 		struct wlan_objmgr_psoc *psoc, void *arg);
 
 /**
@@ -80,6 +80,18 @@ QDF_STATUS  pmo_psoc_object_destroyed_notification(
 QDF_STATUS pmo_vdev_object_created_notification(
 		struct wlan_objmgr_vdev *vdev, void *arg);
 
+/**
+ * pmo_vdev_ready() - handles vdev ready in firmware event
+ * @vdev: vdev which is ready in firmware
+ *
+ * Objmgr vdev_create event does not guarantee vdev creation in firmware.
+ * Any logic that would normally go in the vdev_create event, but needs to
+ * communicate with firmware, needs to go here instead.
+ *
+ * Return QDF_STATUS
+ */
+QDF_STATUS pmo_vdev_ready(struct wlan_objmgr_vdev *vdev);
+
 /**
  * pmo_vdev_object_destroyed_notification(): pmo vdev delete handler
  * @vdev: vdev which is going to delete by objmgr

+ 1 - 0
power_management_offloads/dispatcher/inc/wlan_pmo_ucfg_api.h

@@ -28,6 +28,7 @@
 #include "wlan_pmo_mc_addr_filtering_public_struct.h"
 #include "wlan_pmo_wow_public_struct.h"
 #include "wlan_pmo_common_public_struct.h"
+#include "wlan_pmo_obj_mgmt_api.h"
 
 /**
  * pmo_ucfg_is_ap_mode_supports_arp_ns() - Check ap mode support arp&ns offload

+ 16 - 1
power_management_offloads/dispatcher/src/wlan_pmo_obj_mgmt_api.c

@@ -270,14 +270,29 @@ QDF_STATUS pmo_vdev_object_created_notification(
 	vdev_ctx->pmo_psoc_ctx = psoc_ctx;
 	qdf_atomic_init(&vdev_ctx->gtk_err_enable);
 
+out:
+	PMO_EXIT();
+
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS pmo_vdev_ready(struct wlan_objmgr_vdev *vdev)
+{
+	PMO_ENTER();
+
 	/* Register static configuration with firmware */
 	pmo_register_wow_wakeup_events(vdev);
 	pmo_register_action_frame_patterns(vdev);
+
 	/* Register default wow patterns with firmware */
 	pmo_register_wow_default_patterns(vdev);
-out:
+
 	PMO_EXIT();
 
+	/*
+	 * The above APIs should return a status but don't.
+	 * Just return success for now.
+	 */
 	return QDF_STATUS_SUCCESS;
 }