diff options
| author | Sarada Prasanna Garnayak <sgarna@codeaurora.org> | 2017-10-20 16:42:59 +0530 |
|---|---|---|
| committer | snandini <snandini@codeaurora.org> | 2017-11-04 20:50:32 -0700 |
| commit | 68078f2208561b499031e73dcf8645b585a86321 (patch) | |
| tree | 9fa4af749f1015e2bcfdca2c18c033cad79387e9 | |
| parent | b68a562caa1de69b3d11c0a56b82d532af7dab45 (diff) | |
qcacld-3.0: add device pointer in pld snoc API
Add device pointer in all pld snoc API to support
for numerous WLAN module.
CRs-Fixed: 2127364
Change-Id: Id6c3d559ebc67d40536a60ab78d468fb5f0fbf03
| -rw-r--r-- | core/pld/src/pld_common.c | 23 | ||||
| -rw-r--r-- | core/pld/src/pld_snoc.c | 75 | ||||
| -rw-r--r-- | core/pld/src/pld_snoc.h | 152 |
3 files changed, 203 insertions, 47 deletions
diff --git a/core/pld/src/pld_common.c b/core/pld/src/pld_common.c index ff6ece3eff6a..dd7e41c79117 100644 --- a/core/pld/src/pld_common.c +++ b/core/pld/src/pld_common.c @@ -344,7 +344,7 @@ int pld_wlan_enable(struct device *dev, struct pld_wlan_enable_cfg *config, ret = pld_pcie_wlan_enable(config, mode, host_version); break; case PLD_BUS_TYPE_SNOC: - ret = pld_snoc_wlan_enable(config, mode, host_version); + ret = pld_snoc_wlan_enable(dev, config, mode, host_version); break; case PLD_BUS_TYPE_SDIO: break; @@ -375,7 +375,7 @@ int pld_wlan_disable(struct device *dev, enum pld_driver_mode mode) ret = pld_pcie_wlan_disable(mode); break; case PLD_BUS_TYPE_SNOC: - ret = pld_snoc_wlan_disable(mode); + ret = pld_snoc_wlan_disable(dev, mode); break; case PLD_BUS_TYPE_SDIO: break; @@ -406,7 +406,7 @@ int pld_set_fw_log_mode(struct device *dev, u8 fw_log_mode) ret = pld_pcie_set_fw_log_mode(fw_log_mode); break; case PLD_BUS_TYPE_SNOC: - ret = pld_snoc_set_fw_log_mode(fw_log_mode); + ret = pld_snoc_set_fw_log_mode(dev, fw_log_mode); break; case PLD_BUS_TYPE_SDIO: break; @@ -964,7 +964,8 @@ int pld_ce_request_irq(struct device *dev, unsigned int ce_id, switch (pld_get_bus_type(dev)) { case PLD_BUS_TYPE_SNOC: - ret = pld_snoc_ce_request_irq(ce_id, handler, flags, name, ctx); + ret = pld_snoc_ce_request_irq(dev, ce_id, + handler, flags, name, ctx); break; case PLD_BUS_TYPE_PCIE: break; @@ -991,7 +992,7 @@ int pld_ce_free_irq(struct device *dev, unsigned int ce_id, void *ctx) switch (pld_get_bus_type(dev)) { case PLD_BUS_TYPE_SNOC: - ret = pld_snoc_ce_free_irq(ce_id, ctx); + ret = pld_snoc_ce_free_irq(dev, ce_id, ctx); break; case PLD_BUS_TYPE_PCIE: break; @@ -1014,7 +1015,7 @@ void pld_enable_irq(struct device *dev, unsigned int ce_id) { switch (pld_get_bus_type(dev)) { case PLD_BUS_TYPE_SNOC: - pld_snoc_enable_irq(ce_id); + pld_snoc_enable_irq(dev, ce_id); break; case PLD_BUS_TYPE_PCIE: break; @@ -1037,7 +1038,7 @@ void pld_disable_irq(struct device *dev, unsigned int ce_id) { switch (pld_get_bus_type(dev)) { case PLD_BUS_TYPE_SNOC: - pld_snoc_disable_irq(ce_id); + pld_snoc_disable_irq(dev, ce_id); break; case PLD_BUS_TYPE_PCIE: break; @@ -1065,7 +1066,7 @@ int pld_get_soc_info(struct device *dev, struct pld_soc_info *info) switch (pld_get_bus_type(dev)) { case PLD_BUS_TYPE_SNOC: - ret = pld_snoc_get_soc_info(info); + ret = pld_snoc_get_soc_info(dev, info); break; case PLD_BUS_TYPE_PCIE: break; @@ -1092,7 +1093,7 @@ int pld_get_ce_id(struct device *dev, int irq) switch (pld_get_bus_type(dev)) { case PLD_BUS_TYPE_SNOC: - ret = pld_snoc_get_ce_id(irq); + ret = pld_snoc_get_ce_id(dev, irq); break; case PLD_BUS_TYPE_PCIE: ret = pld_pcie_get_ce_id(irq); @@ -1118,7 +1119,7 @@ int pld_get_irq(struct device *dev, int ce_id) switch (pld_get_bus_type(dev)) { case PLD_BUS_TYPE_SNOC: - ret = pld_snoc_get_irq(ce_id); + ret = pld_snoc_get_irq(dev, ce_id); break; case PLD_BUS_TYPE_PCIE: default: @@ -1397,7 +1398,7 @@ int pld_is_qmi_disable(struct device *dev) switch (type) { case PLD_BUS_TYPE_SNOC: - ret = pld_snoc_is_qmi_disable(); + ret = pld_snoc_is_qmi_disable(dev); break; case PLD_BUS_TYPE_PCIE: case PLD_BUS_TYPE_SDIO: diff --git a/core/pld/src/pld_snoc.c b/core/pld/src/pld_snoc.c index 2ae6ce0f0f4e..9e252f957eaa 100644 --- a/core/pld/src/pld_snoc.c +++ b/core/pld/src/pld_snoc.c @@ -311,6 +311,7 @@ void pld_snoc_unregister_driver(void) /** * pld_snoc_wlan_enable() - Enable WLAN + * @dev: device * @config: WLAN configuration data * @mode: WLAN mode * @host_version: host software version @@ -321,7 +322,43 @@ void pld_snoc_unregister_driver(void) * Return: 0 for success * Non zero failure code for errors */ -int pld_snoc_wlan_enable(struct pld_wlan_enable_cfg *config, + +#ifdef ICNSS_API_WITH_DEV +int pld_snoc_wlan_enable(struct device *dev, struct pld_wlan_enable_cfg *config, + enum pld_driver_mode mode, const char *host_version) +{ + struct icnss_wlan_enable_cfg cfg; + enum icnss_driver_mode icnss_mode; + + if (!dev) + return -ENODEV; + + cfg.num_ce_tgt_cfg = config->num_ce_tgt_cfg; + cfg.ce_tgt_cfg = (struct ce_tgt_pipe_cfg *) + config->ce_tgt_cfg; + cfg.num_ce_svc_pipe_cfg = config->num_ce_svc_pipe_cfg; + cfg.ce_svc_cfg = (struct ce_svc_pipe_cfg *) + config->ce_svc_cfg; + cfg.num_shadow_reg_cfg = config->num_shadow_reg_cfg; + cfg.shadow_reg_cfg = (struct icnss_shadow_reg_cfg *) + config->shadow_reg_cfg; + + switch (mode) { + case PLD_FTM: + icnss_mode = ICNSS_FTM; + break; + case PLD_EPPING: + icnss_mode = ICNSS_EPPING; + break; + default: + icnss_mode = ICNSS_MISSION; + break; + } + + return icnss_wlan_enable(dev, &cfg, icnss_mode, host_version); +} +#else +int pld_snoc_wlan_enable(struct device *dev, struct pld_wlan_enable_cfg *config, enum pld_driver_mode mode, const char *host_version) { struct icnss_wlan_enable_cfg cfg; @@ -348,11 +385,14 @@ int pld_snoc_wlan_enable(struct pld_wlan_enable_cfg *config, icnss_mode = ICNSS_MISSION; break; } + return icnss_wlan_enable(&cfg, icnss_mode, host_version); } +#endif /** * pld_snoc_wlan_disable() - Disable WLAN + * @dev: device * @mode: WLAN mode * * This function disables WLAN FW. It passes WLAN mode to FW. @@ -360,13 +400,24 @@ int pld_snoc_wlan_enable(struct pld_wlan_enable_cfg *config, * Return: 0 for success * Non zero failure code for errors */ -int pld_snoc_wlan_disable(enum pld_driver_mode mode) +#ifdef ICNSS_API_WITH_DEV +int pld_snoc_wlan_disable(struct device *dev, enum pld_driver_mode mode) +{ + if (!dev) + return -ENODEV; + + return icnss_wlan_disable(dev, ICNSS_OFF); +} +#else +int pld_snoc_wlan_disable(struct device *dev, enum pld_driver_mode mode) { return icnss_wlan_disable(ICNSS_OFF); } +#endif /** * pld_snoc_get_soc_info() - Get SOC information + * @dev: device * @info: buffer to SOC information * * Return SOC info to the buffer. @@ -374,7 +425,24 @@ int pld_snoc_wlan_disable(enum pld_driver_mode mode) * Return: 0 for success * Non zero failure code for errors */ -int pld_snoc_get_soc_info(struct pld_soc_info *info) +#ifdef ICNSS_API_WITH_DEV +int pld_snoc_get_soc_info(struct device *dev, struct pld_soc_info *info) +{ + int ret = 0; + struct icnss_soc_info icnss_info; + + if (info == NULL || !dev) + return -ENODEV; + + ret = icnss_get_soc_info(dev, &icnss_info); + if (0 != ret) + return ret; + + memcpy(info, &icnss_info, sizeof(*info)); + return 0; +} +#else +int pld_snoc_get_soc_info(struct device *dev, struct pld_soc_info *info) { int ret = 0; struct icnss_soc_info icnss_info; @@ -390,3 +458,4 @@ int pld_snoc_get_soc_info(struct pld_soc_info *info) return 0; } #endif +#endif diff --git a/core/pld/src/pld_snoc.h b/core/pld/src/pld_snoc.h index e96a8a67d6a4..0c733e2446d2 100644 --- a/core/pld/src/pld_snoc.h +++ b/core/pld/src/pld_snoc.h @@ -42,36 +42,41 @@ static inline int pld_snoc_register_driver(void) static inline void pld_snoc_unregister_driver(void) { } -static inline int pld_snoc_wlan_enable(struct pld_wlan_enable_cfg *config, - enum pld_driver_mode mode, const char *host_version) +static inline int pld_snoc_wlan_enable(struct device *dev, + struct pld_wlan_enable_cfg *config, + enum pld_driver_mode mode, const char *host_version) { return 0; } -static inline int pld_snoc_wlan_disable(enum pld_driver_mode mode) +static inline int pld_snoc_wlan_disable(struct device *dev, + enum pld_driver_mode mode) { return 0; } -static inline int pld_snoc_ce_request_irq(unsigned int ce_id, - irqreturn_t (*handler)(int, void *), - unsigned long flags, const char *name, void *ctx) +static inline int pld_snoc_ce_request_irq(struct device *dev, + unsigned int ce_id, + irqreturn_t (*handler)(int, void *), + unsigned long flags, + const char *name, void *ctx) { return 0; } -static inline int pld_snoc_ce_free_irq(unsigned int ce_id, void *ctx) +static inline int pld_snoc_ce_free_irq(struct device *dev, + unsigned int ce_id, void *ctx) { return 0; } -static inline void pld_snoc_enable_irq(unsigned int ce_id) +static inline void pld_snoc_enable_irq(struct device *dev, unsigned int ce_id) { } -static inline void pld_snoc_disable_irq(unsigned int ce_id) +static inline void pld_snoc_disable_irq(struct device *dev, unsigned int ce_id) { } -static inline int pld_snoc_get_soc_info(struct pld_soc_info *info) +static inline int pld_snoc_get_soc_info(struct device *dev, struct pld_soc_info *info) { return 0; } -static inline int pld_snoc_get_ce_id(int irq) +static inline int pld_snoc_get_ce_id(struct device *dev, int irq) { return 0; } @@ -83,7 +88,7 @@ static inline int pld_snoc_power_off(struct device *dev) { return 0; } -static inline int pld_snoc_get_irq(int ce_id) +static inline int pld_snoc_get_irq(struct device *dev, int ce_id) { return 0; } @@ -113,7 +118,7 @@ unsigned int pld_snoc_socinfo_get_serial_number(struct device *dev) { return 0; } -static inline int pld_snoc_is_qmi_disable(void) +static inline int pld_snoc_is_qmi_disable(struct device *dev) { return 0; } @@ -121,40 +126,105 @@ static inline int pld_snoc_force_assert_target(struct device *dev) { return 0; } -static inline int pld_snoc_set_fw_log_mode(u8 fw_log_mode) +static inline int pld_snoc_set_fw_log_mode(struct device *dev, u8 fw_log_mode) { return 0; } #else int pld_snoc_register_driver(void); void pld_snoc_unregister_driver(void); -int pld_snoc_wlan_enable(struct pld_wlan_enable_cfg *config, +int pld_snoc_wlan_enable(struct device *dev, + struct pld_wlan_enable_cfg *config, enum pld_driver_mode mode, const char *host_version); -int pld_snoc_wlan_disable(enum pld_driver_mode mode); -int pld_snoc_get_soc_info(struct pld_soc_info *info); -static inline int pld_snoc_ce_request_irq(unsigned int ce_id, +int pld_snoc_wlan_disable(struct device *dev, enum pld_driver_mode mode); +int pld_snoc_get_soc_info(struct device *dev, struct pld_soc_info *info); + +#ifdef ICNSS_API_WITH_DEV +static inline int pld_snoc_ce_request_irq(struct device *dev, + unsigned int ce_id, irqreturn_t (*handler)(int, void *), unsigned long flags, const char *name, void *ctx) { - return icnss_ce_request_irq(ce_id, handler, flags, name, ctx); + if (!dev) + return -ENODEV; + + return icnss_ce_request_irq(dev, ce_id, handler, flags, name, ctx); } -static inline int pld_snoc_ce_free_irq(unsigned int ce_id, void *ctx) + +static inline int pld_snoc_ce_free_irq(struct device *dev, + unsigned int ce_id, void *ctx) { - return icnss_ce_free_irq(ce_id, ctx); + if (!dev) + return -ENODEV; + + return icnss_ce_free_irq(dev, ce_id, ctx); +} + +static inline void pld_snoc_enable_irq(struct device *dev, unsigned int ce_id) +{ + if (dev) + icnss_enable_irq(dev, ce_id); +} + +static inline void pld_snoc_disable_irq(struct device *dev, unsigned int ce_id) +{ + if (dev) + icnss_disable_irq(dev, ce_id); +} + +static inline int pld_snoc_get_ce_id(struct device *dev, int irq) +{ + if (!dev) + return -ENODEV; + + return icnss_get_ce_id(dev, irq); +} + +static inline int pld_snoc_get_irq(struct device *dev, int ce_id) +{ + if (!dev) + return -ENODEV; + + return icnss_get_irq(dev, ce_id); +} +#else +static inline int pld_snoc_ce_request_irq(struct device *dev, + unsigned int ce_id, + irqreturn_t (*handler)(int, void *), + unsigned long flags, + const char *name, void *ctx) +{ + return icnss_ce_request_irq(ce_id, handler, flags, name, ctx); } -static inline void pld_snoc_enable_irq(unsigned int ce_id) + +static inline void pld_snoc_enable_irq(struct device *dev, unsigned int ce_id) { icnss_enable_irq(ce_id); } -static inline void pld_snoc_disable_irq(unsigned int ce_id) + +static inline void pld_snoc_disable_irq(struct device *dev, unsigned int ce_id) { icnss_disable_irq(ce_id); } -static inline int pld_snoc_get_ce_id(int irq) + +static inline int pld_snoc_ce_free_irq(struct device *dev, + unsigned int ce_id, void *ctx) +{ + return icnss_ce_free_irq(ce_id, ctx); +} + +static inline int pld_snoc_get_ce_id(struct device *dev, int irq) { return icnss_get_ce_id(irq); } + +static inline int pld_snoc_get_irq(struct device *dev, int ce_id) +{ + return icnss_get_irq(ce_id); +} +#endif + static inline int pld_snoc_power_on(struct device *dev) { return icnss_power_on(dev); @@ -163,10 +233,6 @@ static inline int pld_snoc_power_off(struct device *dev) { return icnss_power_off(dev); } -static inline int pld_snoc_get_irq(int ce_id) -{ - return icnss_get_irq(ce_id); -} static inline int pld_snoc_athdiag_read(struct device *dev, uint32_t offset, uint32_t memtype, uint32_t datalen, uint8_t *output) @@ -193,18 +259,38 @@ unsigned int pld_snoc_socinfo_get_serial_number(struct device *dev) { return icnss_socinfo_get_serial_number(dev); } -static inline int pld_snoc_is_qmi_disable(void) + +#ifdef ICNSS_API_WITH_DEV +static inline int pld_snoc_is_qmi_disable(struct device *dev) { - return icnss_is_qmi_disable(); + if (!dev) + return -ENODEV; + + return icnss_is_qmi_disable(dev); } -static inline int pld_snoc_force_assert_target(struct device *dev) + +static inline int pld_snoc_set_fw_log_mode(struct device *dev, u8 fw_log_mode) { - return icnss_trigger_recovery(dev); + if (!dev) + return -ENODEV; + + return icnss_set_fw_log_mode(dev, fw_log_mode); +} +#else +static inline int pld_snoc_is_qmi_disable(struct device *dev) +{ + return icnss_is_qmi_disable(); } -static inline int pld_snoc_set_fw_log_mode(u8 fw_log_mode) +static inline int pld_snoc_set_fw_log_mode(struct device *dev, u8 fw_log_mode) { return icnss_set_fw_log_mode(fw_log_mode); } #endif + +static inline int pld_snoc_force_assert_target(struct device *dev) +{ + return icnss_trigger_recovery(dev); +} +#endif #endif |
