msm: pil: Pass pil_device to ops

This makes it easier to have one function used for multiple
devices (e.g. Q6v4 on 8960).

Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
diff --git a/arch/arm/mach-msm/peripheral-loader.c b/arch/arm/mach-msm/peripheral-loader.c
index 1969efc..c8f0798 100644
--- a/arch/arm/mach-msm/peripheral-loader.c
+++ b/arch/arm/mach-msm/peripheral-loader.c
@@ -129,7 +129,7 @@
 		paddr += size;
 	}
 
-	ret = pil->ops->verify_blob(phdr->p_paddr, phdr->p_memsz);
+	ret = pil->ops->verify_blob(pil, phdr->p_paddr, phdr->p_memsz);
 	if (ret)
 		dev_err(&pil->pdev.dev, "Blob %u failed verification\n", num);
 
@@ -185,7 +185,7 @@
 		goto release_fw;
 	}
 
-	ret = pil->ops->init_image(fw->data, fw->size);
+	ret = pil->ops->init_image(pil, fw->data, fw->size);
 	if (ret) {
 		dev_err(&pil->pdev.dev, "Invalid firmware metadata\n");
 		goto release_fw;
@@ -204,7 +204,7 @@
 		}
 	}
 
-	ret = pil->ops->auth_and_reset();
+	ret = pil->ops->auth_and_reset(pil);
 	if (ret) {
 		dev_err(&pil->pdev.dev, "Failed to bring out of reset\n");
 		goto release_fw;
@@ -284,7 +284,7 @@
 	if (pil->count)
 		pil->count--;
 	if (pil->count == 0)
-		pil->ops->shutdown();
+		pil->ops->shutdown(pil);
 unlock:
 	mutex_unlock(&pil->lock);
 
@@ -304,7 +304,7 @@
 
 	mutex_lock(&pil->lock);
 	if (!WARN(!pil->count, "%s: Reference count mismatch\n", __func__))
-		pil->ops->shutdown();
+		pil->ops->shutdown(pil);
 	mutex_unlock(&pil->lock);
 }
 EXPORT_SYMBOL(pil_force_shutdown);
@@ -410,7 +410,7 @@
 
 	mutex_lock(&pil_list_lock);
 	list_for_each_entry(pil, &pil_list, list)
-		pil->ops->shutdown();
+		pil->ops->shutdown(pil);
 	mutex_unlock(&pil_list_lock);
 
 	return 0;
diff --git a/arch/arm/mach-msm/peripheral-loader.h b/arch/arm/mach-msm/peripheral-loader.h
index e0dc3a6..7357432 100644
--- a/arch/arm/mach-msm/peripheral-loader.h
+++ b/arch/arm/mach-msm/peripheral-loader.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
+/* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -16,13 +16,6 @@
 #include <linux/mutex.h>
 #include <linux/platform_device.h>
 
-struct pil_reset_ops {
-	int (*init_image)(const u8 *metadata, size_t size);
-	int (*verify_blob)(u32 phy_addr, size_t size);
-	int (*auth_and_reset)(void);
-	int (*shutdown)(void);
-};
-
 struct pil_device {
 	const char *name;
 	const char *depends_on;
@@ -33,6 +26,14 @@
 	struct pil_reset_ops *ops;
 };
 
+struct pil_reset_ops {
+	int (*init_image)(struct pil_device *pil, const u8 *metadata,
+			  size_t size);
+	int (*verify_blob)(struct pil_device *pil, u32 phy_addr, size_t size);
+	int (*auth_and_reset)(struct pil_device *pil);
+	int (*shutdown)(struct pil_device *pil);
+};
+
 extern int msm_pil_add_device(struct pil_device *pil);
 
 #endif
diff --git a/arch/arm/mach-msm/peripheral-reset-8960.c b/arch/arm/mach-msm/peripheral-reset-8960.c
index d251cc2..ef73244 100644
--- a/arch/arm/mach-msm/peripheral-reset-8960.c
+++ b/arch/arm/mach-msm/peripheral-reset-8960.c
@@ -227,43 +227,49 @@
 	return resp.image_valid;
 }
 
-static int init_image_lpass_q6_trusted(const u8 *metadata, size_t size)
+static int init_image_lpass_q6_trusted(struct pil_device *pil,
+				       const u8 *metadata, size_t size)
 {
 	return init_image_trusted(PAS_Q6, metadata, size);
 }
 
-static int init_image_modem_fw_q6_trusted(const u8 *metadata, size_t size)
+static int init_image_modem_fw_q6_trusted(struct pil_device *pil,
+					  const u8 *metadata, size_t size)
 {
 	return init_image_trusted(PAS_MODEM_FW, metadata, size);
 }
 
-static int init_image_modem_sw_q6_trusted(const u8 *metadata, size_t size)
+static int init_image_modem_sw_q6_trusted(struct pil_device *pil,
+					  const u8 *metadata, size_t size)
 {
 	return init_image_trusted(PAS_MODEM_SW, metadata, size);
 }
 
-static int init_image_lpass_q6_untrusted(const u8 *metadata, size_t size)
+static int init_image_lpass_q6_untrusted(struct pil_device *pil,
+					 const u8 *metadata, size_t size)
 {
 	const struct elf32_hdr *ehdr = (struct elf32_hdr *)metadata;
 	q6_lpass.start_addr = ehdr->e_entry;
 	return 0;
 }
 
-static int init_image_modem_fw_q6_untrusted(const u8 *metadata, size_t size)
+static int init_image_modem_fw_q6_untrusted(struct pil_device *pil,
+					    const u8 *metadata, size_t size)
 {
 	const struct elf32_hdr *ehdr = (struct elf32_hdr *)metadata;
 	q6_modem_fw.start_addr = ehdr->e_entry;
 	return 0;
 }
 
-static int init_image_modem_sw_q6_untrusted(const u8 *metadata, size_t size)
+static int init_image_modem_sw_q6_untrusted(struct pil_device *pil,
+					    const u8 *metadata, size_t size)
 {
 	const struct elf32_hdr *ehdr = (struct elf32_hdr *)metadata;
 	q6_modem_sw.start_addr = ehdr->e_entry;
 	return 0;
 }
 
-static int verify_blob(u32 phy_addr, size_t size)
+static int verify_blob(struct pil_device *pil, u32 phy_addr, size_t size)
 {
 	return 0;
 }
@@ -314,17 +320,17 @@
 	return auth_and_reset_trusted(id);
 }
 
-static int reset_lpass_q6_trusted(void)
+static int reset_lpass_q6_trusted(struct pil_device *pil)
 {
 	return reset_q6_trusted(PAS_Q6, &q6_lpass);
 }
 
-static int reset_modem_fw_q6_trusted(void)
+static int reset_modem_fw_q6_trusted(struct pil_device *pil)
 {
 	return reset_q6_trusted(PAS_MODEM_FW, &q6_modem_fw);
 }
 
-static int reset_modem_sw_q6_trusted(void)
+static int reset_modem_sw_q6_trusted(struct pil_device *pil)
 {
 	return reset_q6_trusted(PAS_MODEM_SW, &q6_modem_sw);
 }
@@ -433,17 +439,17 @@
 	return 0;
 }
 
-static int reset_lpass_q6_untrusted(void)
+static int reset_lpass_q6_untrusted(struct pil_device *pil)
 {
 	return reset_q6_untrusted(&q6_lpass);
 }
 
-static int reset_modem_fw_q6_untrusted(void)
+static int reset_modem_fw_q6_untrusted(struct pil_device *pil)
 {
 	return reset_q6_untrusted(&q6_modem_fw);
 }
 
-static int reset_modem_sw_q6_untrusted(void)
+static int reset_modem_sw_q6_untrusted(struct pil_device *pil)
 {
 	return reset_q6_untrusted(&q6_modem_sw);
 }
@@ -479,17 +485,17 @@
 	return ret;
 }
 
-static int shutdown_lpass_q6_trusted(void)
+static int shutdown_lpass_q6_trusted(struct pil_device *pil)
 {
 	return shutdown_q6_trusted(PAS_Q6, &q6_lpass);
 }
 
-static int shutdown_modem_fw_q6_trusted(void)
+static int shutdown_modem_fw_q6_trusted(struct pil_device *pil)
 {
 	return shutdown_q6_trusted(PAS_MODEM_FW, &q6_modem_fw);
 }
 
-static int shutdown_modem_sw_q6_trusted(void)
+static int shutdown_modem_sw_q6_trusted(struct pil_device *pil)
 {
 	return shutdown_q6_trusted(PAS_MODEM_SW, &q6_modem_sw);
 }
@@ -522,29 +528,30 @@
 	return 0;
 }
 
-static int shutdown_lpass_q6_untrusted(void)
+static int shutdown_lpass_q6_untrusted(struct pil_device *pil)
 {
 	return shutdown_q6_untrusted(&q6_lpass);
 }
 
-static int shutdown_modem_fw_q6_untrusted(void)
+static int shutdown_modem_fw_q6_untrusted(struct pil_device *pil)
 {
 	return shutdown_q6_untrusted(&q6_modem_fw);
 }
 
-static int shutdown_modem_sw_q6_untrusted(void)
+static int shutdown_modem_sw_q6_untrusted(struct pil_device *pil)
 {
 	return shutdown_q6_untrusted(&q6_modem_sw);
 }
 
-static int init_image_riva_untrusted(const u8 *metadata, size_t size)
+static int init_image_riva_untrusted(struct pil_device *pil, const u8 *metadata,
+				     size_t size)
 {
 	const struct elf32_hdr *ehdr = (struct elf32_hdr *)metadata;
 	riva_start = ehdr->e_entry;
 	return 0;
 }
 
-static int reset_riva_untrusted(void)
+static int reset_riva_untrusted(struct pil_device *pil)
 {
 	u32 reg;
 	bool xo;
@@ -635,7 +642,7 @@
 	return 0;
 }
 
-static int shutdown_riva_untrusted(void)
+static int shutdown_riva_untrusted(struct pil_device *pil)
 {
 	u32 reg;
 	/* Put riva into reset */
@@ -645,22 +652,24 @@
 	return 0;
 }
 
-static int init_image_riva_trusted(const u8 *metadata, size_t size)
+static int init_image_riva_trusted(struct pil_device *pil, const u8 *metadata,
+				   size_t size)
 {
 	return init_image_trusted(PAS_RIVA, metadata, size);
 }
 
-static int reset_riva_trusted(void)
+static int reset_riva_trusted(struct pil_device *pil)
 {
 	return auth_and_reset_trusted(PAS_RIVA);
 }
 
-static int shutdown_riva_trusted(void)
+static int shutdown_riva_trusted(struct pil_device *pil)
 {
 	return shutdown_trusted(PAS_RIVA);
 }
 
-static int init_image_dsps_untrusted(const u8 *metadata, size_t size)
+static int init_image_dsps_untrusted(struct pil_device *pil, const u8 *metadata,
+				     size_t size)
 {
 	/* Bring memory and bus interface out of reset */
 	writel_relaxed(0x2, PPSS_RESET);
@@ -668,7 +677,7 @@
 	return 0;
 }
 
-static int reset_dsps_untrusted(void)
+static int reset_dsps_untrusted(struct pil_device *pil)
 {
 	writel_relaxed(0x10, PPSS_PROC_CLK_CTL);
 	/* Bring DSPS out of reset */
@@ -676,24 +685,25 @@
 	return 0;
 }
 
-static int shutdown_dsps_untrusted(void)
+static int shutdown_dsps_untrusted(struct pil_device *pil)
 {
 	writel_relaxed(0x2, PPSS_RESET);
 	writel_relaxed(0x0, PPSS_PROC_CLK_CTL);
 	return 0;
 }
 
-static int init_image_dsps_trusted(const u8 *metadata, size_t size)
+static int init_image_dsps_trusted(struct pil_device *pil, const u8 *metadata,
+				   size_t size)
 {
 	return init_image_trusted(PAS_DSPS, metadata, size);
 }
 
-static int reset_dsps_trusted(void)
+static int reset_dsps_trusted(struct pil_device *pil)
 {
 	return auth_and_reset_trusted(PAS_DSPS);
 }
 
-static int shutdown_dsps_trusted(void)
+static int shutdown_dsps_trusted(struct pil_device *pil)
 {
 	return shutdown_trusted(PAS_DSPS);
 }
diff --git a/arch/arm/mach-msm/peripheral-reset.c b/arch/arm/mach-msm/peripheral-reset.c
index 58097b2..7089772 100644
--- a/arch/arm/mach-msm/peripheral-reset.c
+++ b/arch/arm/mach-msm/peripheral-reset.c
@@ -126,36 +126,42 @@
 	return resp.image_valid;
 }
 
-static int init_image_modem_trusted(const u8 *metadata, size_t size)
+static int init_image_modem_trusted(struct pil_device *pil, const u8 *metadata,
+				    size_t size)
 {
 	return init_image_trusted(PAS_MODEM, metadata, size);
 }
 
-static int init_image_modem_untrusted(const u8 *metadata, size_t size)
+static int init_image_modem_untrusted(struct pil_device *pil,
+				      const u8 *metadata, size_t size)
 {
 	struct elf32_hdr *ehdr = (struct elf32_hdr *)metadata;
 	modem_start = ehdr->e_entry;
 	return 0;
 }
 
-static int init_image_q6_trusted(const u8 *metadata, size_t size)
+static int init_image_q6_trusted(struct pil_device *pil,
+				 const u8 *metadata, size_t size)
 {
 	return init_image_trusted(PAS_Q6, metadata, size);
 }
 
-static int init_image_q6_untrusted(const u8 *metadata, size_t size)
+static int init_image_q6_untrusted(struct pil_device *pil, const u8 *metadata,
+				   size_t size)
 {
 	struct elf32_hdr *ehdr = (struct elf32_hdr *)metadata;
 	q6_start = ehdr->e_entry;
 	return 0;
 }
 
-static int init_image_dsps_trusted(const u8 *metadata, size_t size)
+static int init_image_dsps_trusted(struct pil_device *pil, const u8 *metadata,
+				   size_t size)
 {
 	return init_image_trusted(PAS_DSPS, metadata, size);
 }
 
-static int init_image_dsps_untrusted(const u8 *metadata, size_t size)
+static int init_image_dsps_untrusted(struct pil_device *pil, const u8 *metadata,
+				     size_t size)
 {
 	struct elf32_hdr *ehdr = (struct elf32_hdr *)metadata;
 	dsps_start = ehdr->e_entry;
@@ -165,7 +171,7 @@
 	return 0;
 }
 
-static int verify_blob(u32 phy_addr, size_t size)
+static int verify_blob(struct pil_device *pil, u32 phy_addr, size_t size)
 {
 	return 0;
 }
@@ -209,7 +215,7 @@
 		remove_modem_proxy_votes(0);
 }
 
-static int reset_modem_untrusted(void)
+static int reset_modem_untrusted(struct pil_device *pil)
 {
 	u32 reg;
 
@@ -288,7 +294,7 @@
 	return 0;
 }
 
-static int reset_modem_trusted(void)
+static int reset_modem_trusted(struct pil_device *pil)
 {
 	int ret;
 
@@ -316,7 +322,7 @@
 	return resp.success;
 }
 
-static int shutdown_modem_untrusted(void)
+static int shutdown_modem_untrusted(struct pil_device *pil)
 {
 	u32 reg;
 
@@ -357,7 +363,7 @@
 	return 0;
 }
 
-static int shutdown_modem_trusted(void)
+static int shutdown_modem_trusted(struct pil_device *pil)
 {
 	int ret;
 
@@ -425,7 +431,7 @@
 		remove_q6_proxy_votes(0);
 }
 
-static int reset_q6_untrusted(void)
+static int reset_q6_untrusted(struct pil_device *pil)
 {
 	u32 reg;
 
@@ -471,14 +477,14 @@
 	return 0;
 }
 
-static int reset_q6_trusted(void)
+static int reset_q6_trusted(struct pil_device *pil)
 {
 	make_q6_proxy_votes();
 
 	return auth_and_reset_trusted(PAS_Q6);
 }
 
-static int shutdown_q6_untrusted(void)
+static int shutdown_q6_untrusted(struct pil_device *pil)
 {
 	u32 reg;
 
@@ -505,7 +511,7 @@
 	return 0;
 }
 
-static int shutdown_q6_trusted(void)
+static int shutdown_q6_trusted(struct pil_device *pil)
 {
 	int ret;
 
@@ -518,7 +524,7 @@
 	return 0;
 }
 
-static int reset_dsps_untrusted(void)
+static int reset_dsps_untrusted(struct pil_device *pil)
 {
 	__raw_writel(0x10, PPSS_PROC_CLK_CTL);
 	while (__raw_readl(CLK_HALT_DFAB_STATE) & BIT(18))
@@ -529,34 +535,35 @@
 	return 0;
 }
 
-static int reset_dsps_trusted(void)
+static int reset_dsps_trusted(struct pil_device *pil)
 {
 	return auth_and_reset_trusted(PAS_DSPS);
 }
 
-static int shutdown_dsps_trusted(void)
+static int shutdown_dsps_trusted(struct pil_device *pil)
 {
 	return shutdown_trusted(PAS_DSPS);
 }
 
-static int shutdown_dsps_untrusted(void)
+static int shutdown_dsps_untrusted(struct pil_device *pil)
 {
 	__raw_writel(0x2, PPSS_RESET);
 	__raw_writel(0x0, PPSS_PROC_CLK_CTL);
 	return 0;
 }
 
-static int init_image_playready(const u8 *metadata, size_t size)
+static int init_image_playready(struct pil_device *pil, const u8 *metadata,
+		size_t size)
 {
 	return init_image_trusted(PAS_PLAYREADY, metadata, size);
 }
 
-static int reset_playready(void)
+static int reset_playready(struct pil_device *pil)
 {
 	return auth_and_reset_trusted(PAS_PLAYREADY);
 }
 
-static int shutdown_playready(void)
+static int shutdown_playready(struct pil_device *pil)
 {
 	return shutdown_trusted(PAS_PLAYREADY);
 }