diff --git a/core/hdd/src/wlan_hdd_driver_ops.c b/core/hdd/src/wlan_hdd_driver_ops.c index 4b80d6933d72..c5fc181def9b 100644 --- a/core/hdd/src/wlan_hdd_driver_ops.c +++ b/core/hdd/src/wlan_hdd_driver_ops.c @@ -54,6 +54,7 @@ #include "qwlan_version.h" #include "bmi.h" #include "cdp_txrx_bus.h" +#include "pld_common.h" #ifdef MODULE #define WLAN_MODULE_NAME module_name(THIS_MODULE) @@ -61,25 +62,7 @@ #define WLAN_MODULE_NAME "wlan" #endif -#ifdef HIF_PCI -#ifdef CONFIG_CNSS -#define WLAN_HDD_REGISTER_DRIVER(wlan_drv_ops) \ - cnss_wlan_register_driver(wlan_drv_ops) -#define WLAN_HDD_UNREGISTER_DRIVER(wlan_drv_ops) \ - cnss_wlan_unregister_driver(wlan_drv_ops) -#else -#define WLAN_HDD_REGISTER_DRIVER(wlan_drv_ops) \ - pci_register_driver(wlan_drv_ops) -#define WLAN_HDD_UNREGISTER_DRIVER(wlan_drv_ops) \ - pci_unregister_driver(wlan_drv_ops) -#endif /* CONFIG_CNSS */ -#else -#define WLAN_HDD_REGISTER_DRIVER(wlan_drv_ops) \ - icnss_register_driver(wlan_drv_ops) -#define WLAN_HDD_UNREGISTER_DRIVER(wlan_drv_ops) \ - icnss_unregister_driver(wlan_drv_ops) -#endif /* HIF_PCI */ -#define DISABLE_KRAIT_IDLE_PS_VAL 1 +#define DISABLE_KRAIT_IDLE_PS_VAL 1 /* * In BMI Phase we are only sending small chunk (256 bytes) of the FW image at @@ -209,6 +192,26 @@ static void hdd_deinit_cds_hif_context(void) return; } +/** + * to_bus_type() - Map PLD bus type to low level bus type + * @bus_type: PLD bus type + * + * Map PLD bus type to low level bus type. + * + * Return: low level bus type. + */ +static enum qdf_bus_type to_bus_type(enum pld_bus_type bus_type) +{ + switch (bus_type) { + case PLD_BUS_TYPE_PCIE: + return QDF_BUS_TYPE_PCI; + case PLD_BUS_TYPE_SNOC: + return QDF_BUS_TYPE_SNOC; + default: + return QDF_BUS_TYPE_NONE; + } +} + /** * hdd_hif_open() - HIF open helper * @dev: wlan device structure @@ -790,268 +793,181 @@ static int wlan_hdd_runtime_resume(void) } #endif -#ifdef HIF_PCI /** - * wlan_hdd_pci_probe() - probe callback for pci platform driver - * @pdev: bus dev + * wlan_hdd_pld_probe() - probe function registered to PLD + * @dev: device + * @pld_bus_type: PLD bus type + * @bdev: bus device structure + * @id: bus identifier for shared busses * - * Return: void + * Return: 0 on success */ -static int wlan_hdd_pci_probe(struct pci_dev *pdev, - const struct pci_device_id *id) +static int wlan_hdd_pld_probe(struct device *dev, + enum pld_bus_type pld_bus_type, + void *bdev, void *id) { - return wlan_hdd_probe(&pdev->dev, pdev, (void *)id, - QDF_BUS_TYPE_PCI, false); + enum qdf_bus_type bus_type; + + bus_type = to_bus_type(pld_bus_type); + if (bus_type == QDF_BUS_TYPE_NONE) { + hdd_err("Invalid bus type %d->%d", + pld_bus_type, bus_type); + return -EINVAL; + } + + return wlan_hdd_probe(dev, bdev, id, bus_type, false); } /** - * wlan_hdd_pci_remove() - wlan_hdd_pci_remove + * wlan_hdd_pld_remove() - remove function registered to PLD + * @dev: device + * @pld_bus_type: PLD bus type * * Return: void */ -void wlan_hdd_pci_remove(struct pci_dev *pdev) +static void wlan_hdd_pld_remove(struct device *dev, + enum pld_bus_type bus_type) { wlan_hdd_remove(); } /** - * wlan_hdd_pci_reinit() - wlan_hdd_pci_reinit - * @pdev: bus dev - * @id: bus id - * - * Return: int - */ -int wlan_hdd_pci_reinit(struct pci_dev *pdev, - const struct pci_device_id *id) -{ - return wlan_hdd_probe(&pdev->dev, pdev, (void *)id, - QDF_BUS_TYPE_PCI, true); -} - -/** - * wlan_hdd_pci_shutdown() - wlan_hdd_pci_shutdown - * @pdev: pdev + * wlan_hdd_pld_shutdown() - shutdown function registered to PLD + * @dev: device + * @pld_bus_type: PLD bus type * * Return: void */ -void wlan_hdd_pci_shutdown(struct pci_dev *pdev) +static void wlan_hdd_pld_shutdown(struct device *dev, + enum pld_bus_type bus_type) { wlan_hdd_shutdown(); } /** - * wlan_hdd_pci_crash_shutdown() - wlan_hdd_pci_crash_shutdown - * @pdev: pdev + * wlan_hdd_pld_reinit() - reinit function registered to PLD + * @dev: device + * @pld_bus_type: PLD bus type + * @bdev: bus device structure + * @id: bus identifier for shared busses + * + * Return: 0 on success + */ +static int wlan_hdd_pld_reinit(struct device *dev, + enum pld_bus_type pld_bus_type, + void *bdev, void *id) +{ + enum qdf_bus_type bus_type; + + bus_type = to_bus_type(pld_bus_type); + if (bus_type == QDF_BUS_TYPE_NONE) { + hdd_err("Invalid bus type %d->%d", + pld_bus_type, bus_type); + return -EINVAL; + } + + return wlan_hdd_probe(dev, bdev, id, bus_type, true); +} + +/** + * wlan_hdd_pld_crash_shutdown() - crash_shutdown function registered to PLD + * @dev: device + * @pld_bus_type: PLD bus type * * Return: void */ -void wlan_hdd_pci_crash_shutdown(struct pci_dev *pdev) +static void wlan_hdd_pld_crash_shutdown(struct device *dev, + enum pld_bus_type bus_type) { wlan_hdd_crash_shutdown(); } /** - * wlan_hdd_pci_notify_handler() - wlan_hdd_pci_notify_handler - * @pdev: pdev - * @state: state + * wlan_hdd_pld_suspend() - suspend function registered to PLD + * @dev: device + * @pld_bus_type: PLD bus type + * @state: PM state * - * Return: void + * Return: 0 on success */ -void wlan_hdd_pci_notify_handler(struct pci_dev *pdev, int state) -{ - wlan_hdd_notify_handler(state); -} +static int wlan_hdd_pld_suspend(struct device *dev, + enum pld_bus_type bus_type, + pm_message_t state) -/** - * wlan_hdd_pci_suspend() - wlan_hdd_pci_suspend - * @pdev: pdev - * @state: state - * - * Return: void - */ -static int wlan_hdd_pci_suspend(struct pci_dev *pdev, pm_message_t state) { return wlan_hdd_bus_suspend(state); } /** - * wlan_hdd_pci_resume() - wlan_hdd_pci_resume - * @pdev: pdev + * wlan_hdd_pld_resume() - resume function registered to PLD + * @dev: device + * @pld_bus_type: PLD bus type * - * Return: void + * Return: 0 on success */ -static int wlan_hdd_pci_resume(struct pci_dev *pdev) +static int wlan_hdd_pld_resume(struct device *dev, + enum pld_bus_type bus_type) { return wlan_hdd_bus_resume(); } +/** + * wlan_hdd_pld_notify_handler() - notify_handler function registered to PLD + * @dev: device + * @pld_bus_type: PLD bus type + * @state: Modem power state + * + * Return: void + */ +static void wlan_hdd_pld_notify_handler(struct device *dev, + enum pld_bus_type bus_type, + int state) +{ + wlan_hdd_notify_handler(state); +} + #ifdef FEATURE_RUNTIME_PM /** - * wlan_hdd_pci_runtime_suspend() - wlan_hdd_pci_suspend - * @pdev: pdev - * @state: state + * wlan_hdd_pld_runtime_suspend() - runtime suspend function registered to PLD + * @dev: device + * @pld_bus_type: PLD bus type * - * Return: success or errno + * Return: 0 on success */ -static int wlan_hdd_pci_runtime_suspend(struct pci_dev *pdev) +static int wlan_hdd_pld_runtime_suspend(struct device *dev, + enum pld_bus_type bus_type) { return wlan_hdd_runtime_suspend(); } /** - * wlan_hdd_pci_runtime_resume() - runtime resume callback to register with pci - * @pdev: pci device id + * wlan_hdd_pld_runtime_resume() - runtime resume function registered to PLD + * @dev: device + * @pld_bus_type: PLD bus type * - * Return: success or errno + * Return: 0 on success */ -static int wlan_hdd_pci_runtime_resume(struct pci_dev *pdev) +static int wlan_hdd_pld_runtime_resume(struct device *dev, + enum pld_bus_type bus_type) { return wlan_hdd_runtime_resume(); } #endif -#else -/** - * wlan_hdd_snoc_probe() - wlan_hdd_snoc_probe - * @dev: dev - * - * Return: int - */ -static int wlan_hdd_snoc_probe(struct device *dev) -{ - return wlan_hdd_probe(dev, NULL, NULL, QDF_BUS_TYPE_SNOC, false); -} - -/** - * wlan_hdd_snoc_remove() - wlan_hdd_snoc_remove - * @dev: dev - * - * Return: void - */ -void wlan_hdd_snoc_remove(struct device *dev) -{ - wlan_hdd_remove(); -} - -/** - * wlan_hdd_snoc_shutdown() - wlan_hdd_snoc_shutdown - * @dev: dev - * - * Return: void - */ -void wlan_hdd_snoc_shutdown(struct device *dev) -{ - wlan_hdd_shutdown(); -} - -/** - * wlan_hdd_snoc_reinit() - wlan_hdd_snoc_reinit - * @dev: dev - * - * Return: int - */ -int wlan_hdd_snoc_reinit(struct device *dev) -{ - return wlan_hdd_probe(dev, NULL, NULL, QDF_BUS_TYPE_SNOC, true); -} - -/** - * wlan_hdd_snoc_crash_shutdown() - wlan_hdd_snoc_crash_shutdown - * @dev: dev - * - * Return: void - */ -void wlan_hdd_snoc_crash_shutdown(void *pdev) -{ - wlan_hdd_crash_shutdown(); -} - -/** - * wlan_hdd_snoc_suspend() - wlan_hdd_snoc_suspend - * @dev: dev - * @state: state - * - * Return: int - */ -static int wlan_hdd_snoc_suspend(struct device *dev, pm_message_t state) -{ - return wlan_hdd_bus_suspend(state); -} - -/** - * wlan_hdd_snoc_resume() - wlan_hdd_snoc_resume - * @dev: dev - * - * Return: int - */ -static int wlan_hdd_snoc_resume(struct device *dev) -{ - return wlan_hdd_bus_resume(); -} -#endif /* HIF_PCI */ - -#ifdef HIF_PCI -static struct pci_device_id wlan_hdd_pci_id_table[] = { - { 0x168c, 0x003c, PCI_ANY_ID, PCI_ANY_ID }, - { 0x168c, 0x003e, PCI_ANY_ID, PCI_ANY_ID }, - { 0x168c, 0x0041, PCI_ANY_ID, PCI_ANY_ID }, - { 0x168c, 0xabcd, PCI_ANY_ID, PCI_ANY_ID }, - { 0x168c, 0x7021, PCI_ANY_ID, PCI_ANY_ID }, - { 0 } -}; - -#ifdef CONFIG_CNSS - +struct pld_driver_ops wlan_drv_ops = { + .probe = wlan_hdd_pld_probe, + .remove = wlan_hdd_pld_remove, + .shutdown = wlan_hdd_pld_shutdown, + .reinit = wlan_hdd_pld_reinit, + .crash_shutdown = wlan_hdd_pld_crash_shutdown, + .suspend = wlan_hdd_pld_suspend, + .resume = wlan_hdd_pld_resume, + .modem_status = wlan_hdd_pld_notify_handler, #ifdef FEATURE_RUNTIME_PM -struct cnss_wlan_runtime_ops runtime_pm_ops = { - .runtime_suspend = wlan_hdd_pci_runtime_suspend, - .runtime_resume = wlan_hdd_pci_runtime_resume, -}; -#endif - -struct cnss_wlan_driver wlan_drv_ops = { - .name = "wlan_hdd_pci", - .id_table = wlan_hdd_pci_id_table, - .probe = wlan_hdd_pci_probe, - .remove = wlan_hdd_pci_remove, - .reinit = wlan_hdd_pci_reinit, - .shutdown = wlan_hdd_pci_shutdown, - .crash_shutdown = wlan_hdd_pci_crash_shutdown, - .modem_status = wlan_hdd_pci_notify_handler, -#ifdef ATH_BUS_PM - .suspend = wlan_hdd_pci_suspend, - .resume = wlan_hdd_pci_resume, -#endif /* ATH_BUS_PM */ -#ifdef FEATURE_RUNTIME_PM - .runtime_ops = &runtime_pm_ops, + .runtime_suspend = wlan_hdd_pld_runtime_suspend, + .runtime_resume = wlan_hdd_pld_runtime_resume, #endif }; -#else -MODULE_DEVICE_TABLE(pci, wlan_hdd_pci_id_table); -struct pci_driver wlan_drv_ops = { - .name = "wlan_hdd_pci", - .id_table = wlan_hdd_pci_id_table, - .probe = wlan_hdd_pci_probe, - .remove = wlan_hdd_pci_remove, -#ifdef ATH_BUS_PM - .suspend = wlan_hdd_pci_suspend, - .resume = wlan_hdd_pci_resume, -#endif /* ATH_BUS_PM */ - -}; -#endif /* CONFIG_CNSS */ -#else -struct icnss_driver_ops wlan_drv_ops = { - .name = "wlan_hdd_drv", - .probe = wlan_hdd_snoc_probe, - .remove = wlan_hdd_snoc_remove, - .shutdown = wlan_hdd_snoc_shutdown, - .reinit = wlan_hdd_snoc_reinit, - .crash_shutdown = wlan_hdd_snoc_crash_shutdown, - .suspend = wlan_hdd_snoc_suspend, - .resume = wlan_hdd_snoc_resume, -}; -#endif /** * wlan_hdd_register_driver() - wlan_hdd_register_driver @@ -1060,7 +976,7 @@ struct icnss_driver_ops wlan_drv_ops = { */ int wlan_hdd_register_driver(void) { - return WLAN_HDD_REGISTER_DRIVER(&wlan_drv_ops); + return pld_register_driver(&wlan_drv_ops); } /** @@ -1070,5 +986,5 @@ int wlan_hdd_register_driver(void) */ void wlan_hdd_unregister_driver(void) { - WLAN_HDD_UNREGISTER_DRIVER(&wlan_drv_ops); + pld_unregister_driver(); } diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 0cfba34472be..c4f7f9f8488f 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -91,6 +91,7 @@ #include "cds_regdomain.h" #include "cdp_txrx_flow_ctrl_v2.h" #endif /* FEATURE_WLAN_CH_AVOID */ +#include "pld_common.h" #include "wlan_hdd_ocb.h" #include "wlan_hdd_nan.h" #include "wlan_hdd_debugfs.h" @@ -7287,6 +7288,8 @@ static int __hdd_module_init(void) pr_info("%s: Loading driver v%s\n", WLAN_MODULE_NAME, QWLAN_VERSIONSTR TIMER_MANAGER_STR MEMORY_DEBUG_STR); + pld_init(); + qdf_wake_lock_create(&wlan_wake_lock, "wlan"); hdd_set_conparam((uint32_t) con_mode); @@ -7302,6 +7305,7 @@ static int __hdd_module_init(void) return 0; out: qdf_wake_lock_destroy(&wlan_wake_lock); + pld_deinit(); return ret; } @@ -7319,6 +7323,8 @@ static void __hdd_module_exit(void) qdf_wake_lock_destroy(&wlan_wake_lock); + pld_deinit(); + return; }