Bläddra i källkod

qcacld-3.0: add device pointer in pld snoc API

Add device pointer in all pld snoc API to support
for numerous WLAN module.

Change-Id: Id6c3d559ebc67d40536a60ab78d468fb5f0fbf03
Sarada Prasanna Garnayak 7 år sedan
förälder
incheckning
f04667af34
3 ändrade filer med 201 tillägg och 44 borttagningar
  1. 12 11
      core/pld/src/pld_common.c
  2. 72 3
      core/pld/src/pld_snoc.c
  3. 117 30
      core/pld/src/pld_snoc.h

+ 12 - 11
core/pld/src/pld_common.c

@@ -347,7 +347,7 @@ int pld_wlan_enable(struct device *dev, struct pld_wlan_enable_cfg *config,
 		ret = pld_pcie_wlan_enable(dev, 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;
@@ -378,7 +378,7 @@ int pld_wlan_disable(struct device *dev, enum pld_driver_mode mode)
 		ret = pld_pcie_wlan_disable(dev, 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;
@@ -409,7 +409,7 @@ int pld_set_fw_log_mode(struct device *dev, u8 fw_log_mode)
 		ret = pld_pcie_set_fw_log_mode(dev, 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;
@@ -971,7 +971,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;
@@ -998,7 +999,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;
@@ -1021,7 +1022,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;
@@ -1044,7 +1045,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;
@@ -1072,7 +1073,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:
 		ret = pld_pcie_get_soc_info(dev, info);
@@ -1100,7 +1101,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);
@@ -1126,7 +1127,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:
@@ -1512,7 +1513,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:

+ 72 - 3
core/pld/src/pld_snoc.c

@@ -312,6 +312,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
@@ -322,7 +323,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;
@@ -349,11 +386,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.
@@ -361,13 +401,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.
@@ -375,7 +426,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;
@@ -391,3 +459,4 @@ int pld_snoc_get_soc_info(struct pld_soc_info *info)
 	return 0;
 }
 #endif
+#endif

+ 117 - 30
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,11 +118,11 @@ 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;
 }
-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;
 }
@@ -128,33 +133,98 @@ static inline int pld_snoc_force_assert_target(struct device *dev)
 #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,14 +259,35 @@ 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)
+{
+	if (!dev)
+		return -ENODEV;
+
+	return icnss_is_qmi_disable(dev);
+}
+
+static inline int pld_snoc_set_fw_log_mode(struct device *dev, u8 fw_log_mode)
+{
+	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);