[v2,2/4] core/pci: Detach IOV from capability descriptor

Message ID 1497854809-26032-3-git-send-email-gwshan@linux.vnet.ibm.com
State New
Headers show

Commit Message

Gavin Shan June 19, 2017, 6:46 a.m.
The IOV struct is associated with the capability descriptor, but
it's never used. This detachs IOV struct from the capability
descriptor, binds IOV struct with PCI device instead.

Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
---
 core/pci-iov.c |  3 ++-
 core/pci.c     |  6 +++---
 include/pci.h  | 15 ++-------------
 3 files changed, 7 insertions(+), 17 deletions(-)

Patch

diff --git a/core/pci-iov.c b/core/pci-iov.c
index 9d75b37..627f300 100644
--- a/core/pci-iov.c
+++ b/core/pci-iov.c
@@ -252,6 +252,7 @@  void pci_init_iov_cap(struct phb *phb, struct pci_device *pd)
 	iov->pd = pd;
 	iov->pos = pos;
 	iov->enabled = false;
+	pd->iov = iov;
 	pci_iov_update_parameters(iov);
-	pci_set_cap(pd, PCIECAP_ID_SRIOV, pos, iov, true);
+	pci_set_cap(pd, PCIECAP_ID_SRIOV, pos, true);
 }
diff --git a/core/pci.c b/core/pci.c
index 7cd29fd..1aa906a 100644
--- a/core/pci.c
+++ b/core/pci.c
@@ -162,7 +162,7 @@  static void pci_init_pcie_cap(struct phb *phb, struct pci_device *pd)
 		return;
 	}
 
-	pci_set_cap(pd, PCI_CFG_CAP_ID_EXP, ecap, NULL, false);
+	pci_set_cap(pd, PCI_CFG_CAP_ID_EXP, ecap, false);
 
 	/*
 	 * XXX We observe a problem on some PLX switches where one
@@ -198,7 +198,7 @@  static void pci_init_aer_cap(struct phb *phb, struct pci_device *pd)
 
 	pos = pci_find_ecap(phb, pd->bdfn, PCIECAP_ID_AER, NULL);
 	if (pos > 0)
-		pci_set_cap(pd, PCIECAP_ID_AER, pos, NULL, true);
+		pci_set_cap(pd, PCIECAP_ID_AER, pos, true);
 }
 
 static void pci_init_pm_cap(struct phb *phb, struct pci_device *pd)
@@ -207,7 +207,7 @@  static void pci_init_pm_cap(struct phb *phb, struct pci_device *pd)
 
 	pos = pci_find_cap(phb, pd->bdfn, PCI_CFG_CAP_ID_PM);
 	if (pos > 0)
-		pci_set_cap(pd, PCI_CFG_CAP_ID_PM, pos, NULL, false);
+		pci_set_cap(pd, PCI_CFG_CAP_ID_PM, pos, false);
 }
 
 void pci_init_capabilities(struct phb *phb, struct pci_device *pd)
diff --git a/include/pci.h b/include/pci.h
index f216594..a26a0ea 100644
--- a/include/pci.h
+++ b/include/pci.h
@@ -79,7 +79,6 @@  struct pci_device {
 	uint64_t		cap_list;
 	struct {
 		uint32_t	pos;
-		void		*data;
 	} cap[64];
 	uint32_t		mps;		/* Max payload size capability */
 
@@ -87,6 +86,7 @@  struct pci_device {
 	uint32_t		pcrf_end;
 	struct list_head	pcrf;
 
+	struct pci_iov		*iov;
 	struct dt_node		*dn;
 	struct pci_slot		*slot;
 	struct pci_device	*parent;
@@ -95,17 +95,14 @@  struct pci_device {
 	struct list_node	link;
 };
 
-static inline void pci_set_cap(struct pci_device *pd, int id,
-			       int pos, void *data, bool ext)
+static inline void pci_set_cap(struct pci_device *pd, int id, int pos, bool ext)
 {
 	if (!ext) {
 		pd->cap_list |= (0x1ul << id);
 		pd->cap[id].pos = pos;
-		pd->cap[id].data = data;
 	} else {
 		pd->cap_list |= (0x1ul << (id + 32));
 		pd->cap[id + 32].pos = pos;
-		pd->cap[id + 32].data = data;
 	}
 }
 
@@ -127,14 +124,6 @@  static inline int pci_cap(struct pci_device *pd,
 		return pd->cap[id + 32].pos;
 }
 
-static inline void *pci_cap_data(struct pci_device *pd, int id, bool ext)
-{
-	if (!ext)
-		return pd->cap[id].data;
-	else
-		return pd->cap[id + 32].data;
-}
-
 /*
  * When generating the device-tree, we need to keep track of
  * the LSI mapping & swizzle it. This state structure is