diff --git a/qdf/inc/qdf_platform.h b/qdf/inc/qdf_platform.h index 9225e55e5d19..c50ba37c7382 100644 --- a/qdf/inc/qdf_platform.h +++ b/qdf/inc/qdf_platform.h @@ -147,5 +147,32 @@ void __qdf_op_unprotect(struct qdf_op_sync *sync, const char *func); void qdf_op_callbacks_register(qdf_op_protect_cb on_protect, qdf_op_unprotect_cb on_unprotect); +/** + * qdf_is_drv_connected_callback() - callback to query if drv is connected + * + * Return: true if drv is connected else false + */ +typedef bool (*qdf_is_drv_connected_callback)(void); + +/** + * qdf_is_drv_connected() - API to check if drv is connected or not + * + * DRV is dynamic request voting using which fw can do page fault and + * bring in page back without apps wake up + * + * Return: true: if drv is connected + * false: if drv is not connected + */ +bool qdf_is_drv_connected(void); + +/** + * qdf_register_drv_connected_callback() - API to register drv connected cb + * @is_drv_connected: callback to query if drv is connected or not + * + * Return: none + */ +void qdf_register_drv_connected_callback(qdf_is_drv_connected_callback + is_drv_connected); + #endif /*_QDF_PLATFORM_H*/ diff --git a/qdf/src/qdf_platform.c b/qdf/src/qdf_platform.c index 89f1c9f6c0a5..fce06fc0f488 100644 --- a/qdf/src/qdf_platform.c +++ b/qdf/src/qdf_platform.c @@ -27,6 +27,7 @@ static qdf_self_recovery_callback self_recovery_cb; static qdf_is_fw_down_callback is_fw_down_cb; static qdf_is_recovering_callback is_recovering_cb; +static qdf_is_drv_connected_callback is_drv_connected_cb; void qdf_register_fw_down_callback(qdf_is_fw_down_callback is_fw_down) { @@ -108,3 +109,20 @@ void __qdf_op_unprotect(struct qdf_op_sync *sync, const char *func) } qdf_export_symbol(__qdf_op_unprotect); +void qdf_register_drv_connected_callback(qdf_is_drv_connected_callback + is_drv_connected) +{ + is_drv_connected_cb = is_drv_connected; +} +qdf_export_symbol(qdf_register_drv_connected_callback); + +bool qdf_is_drv_connected(void) +{ + if (!is_drv_connected_cb) { + qdf_err("drv connected callback is not registered"); + return false; + } + + return is_drv_connected_cb(); +} +qdf_export_symbol(qdf_is_drv_connected);