aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorDavid S. Miller <davem@sunset.davemloft.net>2007-05-08 02:06:27 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-05-08 19:41:24 -0400
commit34768bc8329194b14e42ee408a84edfa40059046 (patch)
tree3fff53138966f3a58e796a71c19a3b75de86fbf7 /include
parent5a4a3e592d0d66653297049373caa7ac5b4febe0 (diff)
[SPARC64] PCI: Use root list of pbm's instead of pci_controller_info's
The idea is to move more and more things into the pbm, with the eventual goal of eliminating the pci_controller_info entirely as there really isn't any need for it. This stage of the transformations requires some reworking of the PCI error interrupt handling. It might be tricky to get rid of the pci_controller_info parenting for a few reasons: 1) When we get an uncorrectable or correctable error we want to interrogate the IOMMU and streaming cache of both PBMs for error status. These errors come from the UPA front-end which is shared between the two PBM PCI bus segments. Historically speaking this is why I choose the datastructure hierarchy of pci_controller_info-->pci_pbm_info 2) The probing does a portid/devhandle match to look for the 'other' pbm, but this is entirely an artifact and can be eliminated trivially. What we could do to solve #1 is to have a "buddy" pointer from one pbm to another. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/asm-sparc64/pbm.h8
1 files changed, 3 insertions, 5 deletions
diff --git a/include/asm-sparc64/pbm.h b/include/asm-sparc64/pbm.h
index c8868babc4fe..cc0e2677773f 100644
--- a/include/asm-sparc64/pbm.h
+++ b/include/asm-sparc64/pbm.h
@@ -39,6 +39,8 @@ extern void pci_iommu_table_init(struct iommu *iommu, int tsbsize, u32 dma_offse
39struct pci_controller_info; 39struct pci_controller_info;
40 40
41struct pci_pbm_info { 41struct pci_pbm_info {
42 struct pci_pbm_info *next;
43
42 /* PCI controller we sit under. */ 44 /* PCI controller we sit under. */
43 struct pci_controller_info *parent; 45 struct pci_controller_info *parent;
44 46
@@ -113,12 +115,10 @@ struct pci_pbm_info {
113 unsigned int pci_first_busno; 115 unsigned int pci_first_busno;
114 unsigned int pci_last_busno; 116 unsigned int pci_last_busno;
115 struct pci_bus *pci_bus; 117 struct pci_bus *pci_bus;
118 void (*scan_bus)(struct pci_pbm_info *);
116}; 119};
117 120
118struct pci_controller_info { 121struct pci_controller_info {
119 /* List of all PCI controllers. */
120 struct pci_controller_info *next;
121
122 /* Each controller gets a unique index, used mostly for 122 /* Each controller gets a unique index, used mostly for
123 * error logging purposes. 123 * error logging purposes.
124 */ 124 */
@@ -129,8 +129,6 @@ struct pci_controller_info {
129 struct pci_pbm_info pbm_B; 129 struct pci_pbm_info pbm_B;
130 130
131 /* Operations which are controller specific. */ 131 /* Operations which are controller specific. */
132 void (*scan_bus)(struct pci_controller_info *);
133
134#ifdef CONFIG_PCI_MSI 132#ifdef CONFIG_PCI_MSI
135 int (*setup_msi_irq)(unsigned int *virt_irq_p, struct pci_dev *pdev, 133 int (*setup_msi_irq)(unsigned int *virt_irq_p, struct pci_dev *pdev,
136 struct msi_desc *entry); 134 struct msi_desc *entry);