Browse Source

qcacmn: Refactor qdf platform op start/stop

The original implementation intended to back the qdf_psoc_op_start/stop
callbacks has evolved somewhat since the qdf_psoc_op interface was
added. Refactor this interface to better reflect the evolved
implementation.

Change-Id: Ia18949fc75bdc52313bc81976f79d3a76e9760ec
CRs-Fixed: 2418426
Dustin Brown 6 years ago
parent
commit
02d3f5423e
2 changed files with 39 additions and 38 deletions
  1. 22 19
      qdf/inc/qdf_platform.h
  2. 17 19
      qdf/src/qdf_platform.c

+ 22 - 19
qdf/inc/qdf_platform.h

@@ -157,39 +157,42 @@ void qdf_register_recovering_state_query_callback(
 bool qdf_is_recovering(void);
 
 /**
- * qdf_psoc_start_callback() - callback for starting the psoc operation
- *
- * Return: true if driver psoc operation can be started else false
+ * struct qdf_op_sync - opaque operation synchronization context handle
  */
-typedef QDF_STATUS (*qdf_psoc_start_callback)(void);
+struct qdf_op_sync;
 
-/**
- * qdf_psoc_stop_callback - callback for stopping the psoc operation
- *
- * Return: None
- */
-typedef void (*qdf_psoc_stop_callback)(void);
+typedef int (*qdf_op_protect_cb)(void **out_sync, const char *func);
+typedef void (*qdf_op_unprotect_cb)(void *sync, const char *func);
 
 /**
- * qdf_psoc_op_start() - start DSC psoc operation
+ * qdf_op_protect() - attempt to protect a driver operation
+ * @out_sync: output parameter for the synchronization context, populated on
+ *	success
  *
- * Return: Success for starting psoc operation or failure
+ * Return: Errno
  */
-QDF_STATUS qdf_psoc_op_start(void);
+#define qdf_op_protect(out_sync) __qdf_op_protect(out_sync, __func__)
+
+qdf_must_check int
+__qdf_op_protect(struct qdf_op_sync **out_sync, const char *func);
 
 /**
- * qdf_psoc_op_stop() - stop DSC psoc operation
- * @context: Context information
+ * qdf_op_unprotect() - release driver operation protection
+ * @sync: synchronization context returned from qdf_op_protect()
  *
  * Return: None
  */
-void qdf_psoc_op_stop(void);
+#define qdf_op_unprotect(sync) __qdf_op_unprotect(sync, __func__)
+
+void __qdf_op_unprotect(struct qdf_op_sync *sync, const char *func);
 
 /**
- * qdf_register_dsc_psoc_callbacks() - register dsc psoc start/stop callbacks
+ * qdf_op_callbacks_register() - register driver operation protection callbacks
  *
  * Return: None
  */
-void qdf_register_dsc_psoc_callbacks(qdf_psoc_start_callback protect,
-				     qdf_psoc_stop_callback unprotect);
+void qdf_op_callbacks_register(qdf_op_protect_cb on_protect,
+			       qdf_op_unprotect_cb on_unprotect);
+
 #endif /*_QDF_PLATFORM_H*/
+

+ 17 - 19
qdf/src/qdf_platform.c

@@ -30,9 +30,6 @@ static qdf_ssr_callback                     ssr_unprotect_cb;
 static qdf_is_module_state_transitioning_cb module_state_transitioning_cb;
 static qdf_is_fw_down_callback		    is_fw_down_cb;
 static qdf_is_recovering_callback           is_recovering_cb;
-static qdf_psoc_start_callback           psoc_op_start;
-static qdf_psoc_stop_callback            psoc_op_stop;
-
 
 void qdf_register_fw_down_callback(qdf_is_fw_down_callback is_fw_down)
 {
@@ -128,29 +125,30 @@ bool qdf_is_recovering(void)
 
 qdf_export_symbol(qdf_is_recovering);
 
-void qdf_register_dsc_psoc_callbacks(qdf_psoc_start_callback psoc_start,
-				     qdf_psoc_stop_callback psoc_stop)
+static qdf_op_protect_cb __on_op_protect;
+static qdf_op_unprotect_cb __on_op_unprotect;
+
+void qdf_op_callbacks_register(qdf_op_protect_cb on_protect,
+			       qdf_op_unprotect_cb on_unprotect)
 {
-	psoc_op_start = psoc_start;
-	psoc_op_stop  = psoc_stop;
+	__on_op_protect = on_protect;
+	__on_op_unprotect = on_unprotect;
 }
+qdf_export_symbol(qdf_op_callbacks_register);
 
-qdf_export_symbol(qdf_register_dsc_psoc_callbacks);
-
-QDF_STATUS qdf_psoc_op_start(void)
+int __qdf_op_protect(struct qdf_op_sync **out_sync, const char *func)
 {
-	if (psoc_op_start)
-		return psoc_op_start();
+	if (!__on_op_protect)
+		return 0;
 
-	return QDF_STATUS_E_INVAL;
+	return __on_op_protect((void **)out_sync, func);
 }
+qdf_export_symbol(__qdf_op_protect);
 
-qdf_export_symbol(qdf_psoc_op_start);
-
-void qdf_psoc_op_stop(void)
+void __qdf_op_unprotect(struct qdf_op_sync *sync, const char *func)
 {
-	if (psoc_op_stop)
-		psoc_op_stop();
+	if (__on_op_unprotect)
+		__on_op_unprotect(sync, func);
 }
+qdf_export_symbol(__qdf_op_unprotect);
 
-qdf_export_symbol(qdf_psoc_op_stop);