diff --git a/dp/inc/cdp_txrx_bus.h b/dp/inc/cdp_txrx_bus.h index d20e7ce7a18a..5ff5ddef3a29 100644 --- a/dp/inc/cdp_txrx_bus.h +++ b/dp/inc/cdp_txrx_bus.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2017 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -34,12 +34,14 @@ /** * cdp_bus_suspend() - suspend bus * @soc - data path soc handle + * @ppdev: data path pdev handle * * suspend bus * * return QDF_STATUS_SUCCESS suspend is not implemented or suspend done */ -static inline QDF_STATUS cdp_bus_suspend(ol_txrx_soc_handle soc) +static inline QDF_STATUS cdp_bus_suspend(ol_txrx_soc_handle soc, + struct cdp_pdev *ppdev) { if (!soc || !soc->ops || !soc->ops->bus_ops) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL, @@ -48,19 +50,21 @@ static inline QDF_STATUS cdp_bus_suspend(ol_txrx_soc_handle soc) } if (soc->ops->bus_ops->bus_suspend) - return soc->ops->bus_ops->bus_suspend(); + return soc->ops->bus_ops->bus_suspend(ppdev); return QDF_STATUS_E_NOSUPPORT; } /** * cdp_bus_resume() - resume bus * @soc - data path soc handle + * @ppdev: data path pdev handle * * resume bus * * return QDF_STATUS_SUCCESS resume is not implemented or suspend done */ -static inline QDF_STATUS cdp_bus_resume(ol_txrx_soc_handle soc) +static inline QDF_STATUS cdp_bus_resume(ol_txrx_soc_handle soc, + struct cdp_pdev *ppdev) { if (!soc || !soc->ops || !soc->ops->bus_ops) { QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL, @@ -69,7 +73,7 @@ static inline QDF_STATUS cdp_bus_resume(ol_txrx_soc_handle soc) } if (soc->ops->bus_ops->bus_resume) - return soc->ops->bus_ops->bus_resume(); + return soc->ops->bus_ops->bus_resume(ppdev); return QDF_STATUS_E_NOSUPPORT; } diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index 1f142b4ed6dc..2d7ef00cb9c5 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -790,8 +790,8 @@ struct cdp_ipa_ops { * @bus_resume: */ struct cdp_bus_ops { - QDF_STATUS (*bus_suspend)(void); - QDF_STATUS (*bus_resume)(void); + QDF_STATUS (*bus_suspend)(struct cdp_pdev *opaque_pdev); + QDF_STATUS (*bus_resume)(struct cdp_pdev *opaque_pdev); }; /** diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index a8d5e3091a75..c83ddbda875a 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -3833,9 +3833,45 @@ static struct cdp_pflow_ops dp_ops_pflow = { }; #endif /* CONFIG_WIN */ +#ifdef DP_INTR_POLL_BASED +static QDF_STATUS dp_bus_suspend(struct cdp_pdev *opaque_pdev) +{ + struct dp_pdev *pdev = (struct dp_pdev *)opaque_pdev; + struct dp_soc *soc = pdev->soc; + + qdf_timer_stop(&soc->int_timer); + + return QDF_STATUS_SUCCESS; +} + +static QDF_STATUS dp_bus_resume(struct cdp_pdev *opaque_pdev) +{ + struct dp_pdev *pdev = (struct dp_pdev *)opaque_pdev; + struct dp_soc *soc = pdev->soc; + + qdf_timer_mod(&soc->int_timer, DP_INTR_POLL_TIMER_MS); + + return QDF_STATUS_SUCCESS; +} +#else +static QDF_STATUS dp_bus_suspend(struct cdp_pdev *opaque_pdev) +{ + return QDF_STATUS_SUCCESS; +} + +static QDF_STATUS dp_bus_resume(struct cdp_pdev *opaque_pdev) +{ + return QDF_STATUS_SUCCESS; +} +#endif /* DP_INTR_POLL_BASED */ + #ifndef CONFIG_WIN static struct cdp_misc_ops dp_ops_misc = { .get_opmode = dp_get_opmode, +#ifdef FEATURE_RUNTIME_PM + .runtime_suspend = dp_bus_suspend, + .runtime_resume = dp_bus_resume, +#endif }; static struct cdp_flowctl_ops dp_ops_flowctl = { @@ -3850,34 +3886,9 @@ static struct cdp_ipa_ops dp_ops_ipa = { /* WIFI 3.0 DP NOT IMPLEMENTED YET */ }; -/** - * dp_dummy_bus_suspend() - dummy bus suspend op - * - * FIXME - This is a placeholder for the actual logic! - * - * Return: QDF_STATUS_SUCCESS - */ -inline QDF_STATUS dp_dummy_bus_suspend(void) -{ - return QDF_STATUS_SUCCESS; -} - -/** - * dp_dummy_bus_resume() - dummy bus resume - * - * FIXME - This is a placeholder for the actual logic! - * - * Return: QDF_STATUS_SUCCESS - */ -inline QDF_STATUS dp_dummy_bus_resume(void) -{ - return QDF_STATUS_SUCCESS; -} - static struct cdp_bus_ops dp_ops_bus = { - /* WIFI 3.0 DP NOT IMPLEMENTED YET */ - .bus_suspend = dp_dummy_bus_suspend, - .bus_resume = dp_dummy_bus_resume + .bus_suspend = dp_bus_suspend, + .bus_resume = dp_bus_resume }; static struct cdp_ocb_ops dp_ops_ocb = {