summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSarada Prasanna Garnayak <sgarna@codeaurora.org>2017-10-20 16:42:59 +0530
committersnandini <snandini@codeaurora.org>2017-11-04 20:50:32 -0700
commit68078f2208561b499031e73dcf8645b585a86321 (patch)
tree9fa4af749f1015e2bcfdca2c18c033cad79387e9
parentb68a562caa1de69b3d11c0a56b82d532af7dab45 (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.c23
-rw-r--r--core/pld/src/pld_snoc.c75
-rw-r--r--core/pld/src/pld_snoc.h152
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