[PATCH] powerpc: remove iSeries_Global_Device_List
authorStephen Rothwell <sfr@canb.auug.org.au>
Fri, 19 May 2006 06:48:47 +0000 (16:48 +1000)
committerPaul Mackerras <paulus@samba.org>
Wed, 24 May 2006 06:08:56 +0000 (16:08 +1000)
We can now scan the list of device nodes instead.  This also allows us
to remove the Device_list member of struct pci_dn.

Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/platforms/iseries/iommu.c
arch/powerpc/platforms/iseries/pci.c
include/asm-powerpc/pci-bridge.h

index 3ac2206..75a5a1e 100644 (file)
 #include <asm/tce.h>
 #include <asm/machdep.h>
 #include <asm/abs_addr.h>
+#include <asm/prom.h>
 #include <asm/pci-bridge.h>
 #include <asm/iseries/hv_call_xm.h>
 #include <asm/iseries/iommu.h>
 
-extern struct list_head iSeries_Global_Device_List;
-
-
 static void tce_build_iSeries(struct iommu_table *tbl, long index, long npages,
                unsigned long uaddr, enum dma_data_direction direction)
 {
@@ -140,10 +138,15 @@ void iommu_table_getparms_iSeries(unsigned long busno,
  */
 static struct iommu_table *iommu_table_find(struct iommu_table * tbl)
 {
-       struct pci_dn *pdn;
+       struct device_node *node;
+
+       for (node = NULL; (node = of_find_all_nodes(node)); ) {
+               struct pci_dn *pdn = PCI_DN(node);
+               struct iommu_table *it;
 
-       list_for_each_entry(pdn, &iSeries_Global_Device_List, Device_List) {
-               struct iommu_table *it = pdn->iommu_table;
+               if (pdn == NULL)
+                       continue;
+               it = pdn->iommu_table;
                if ((it != NULL) &&
                    (it->it_type == TCE_PCI) &&
                    (it->it_offset == tbl->it_offset) &&
index 9d571e7..5bc08d4 100644 (file)
@@ -50,8 +50,6 @@
  */
 static struct device_node *find_Device_Node(int bus, int devfn);
 
-LIST_HEAD(iSeries_Global_Device_List);
-
 static int Pci_Retry_Max = 3;  /* Only retry 3 times  */
 static int Pci_Error_Flag = 1; /* Set Retry Error on. */
 
@@ -245,8 +243,6 @@ void iSeries_pcibios_init(void)
                        pdn->bussubno = *busp;
                        pdn->Irq = irq;
                        pdn->LogicalSlot = *lsn;
-                       list_add_tail(&pdn->Device_List,
-                                       &iSeries_Global_Device_List);
                }
        }
 }
@@ -338,11 +334,13 @@ EXPORT_SYMBOL(iSeries_memcpy_fromio);
  */
 static struct device_node *find_Device_Node(int bus, int devfn)
 {
-       struct pci_dn *pdn;
+       struct device_node *node;
+
+       for (node = NULL; (node = of_find_all_nodes(node)); ) {
+               struct pci_dn *pdn = PCI_DN(node);
 
-       list_for_each_entry(pdn, &iSeries_Global_Device_List, Device_List) {
-               if ((bus == pdn->busno) && (devfn == pdn->devfn))
-                       return pdn->node;
+               if (pdn && (bus == pdn->busno) && (devfn == pdn->devfn))
+                       return node;
        }
        return NULL;
 }
index 38de92d..59794b4 100644 (file)
@@ -79,7 +79,6 @@ struct pci_dn {
        struct  pci_dev *pcidev;        /* back-pointer to the pci device */
        struct  device_node *node;      /* back-pointer to the device_node */
 #ifdef CONFIG_PPC_ISERIES
-       struct  list_head Device_List;
        int     Irq;                    /* Assigned IRQ */
        int     Flags;                  /* Possible flags(disable/bist)*/
        u8      LogicalSlot;            /* Hv Slot Index for Tces */