Re: [BK PATCH] PCI ops cleanups for 2.5.32-bk

From: Greg KH (greg@kroah.com)
Date: Fri Aug 30 2002 - 17:25:29 EST


On Fri, Aug 30, 2002 at 03:07:21PM -0700, Greg KH wrote:
> Hi,
>
> Here are the pci_ops cleanups that were discussed on lkml last week. It
> removes a lot of code from the arch specific implementation of
> pci_*_config* functions, and removes lots of code from the pci_hotplug
> core (yes, the pci_hotplug code is still broken, I'm working on that
> next...)
>
> These patches includes fixups for almost all of the different
> architecture specific code. I have a number of patches that I will send
> to some of the arch maintainers directly, that are not included in this
> bk tree.

Here's the arm fixup. I didn't try to change the iop310-pci.c file, as
it looked trickier than I wanted to attempt (it is using dev->sysdata,
which isn't available anymore.)

thanks,

greg k-h

diff -Nru a/arch/arm/kernel/plx90x0.c b/arch/arm/kernel/plx90x0.c
--- a/arch/arm/kernel/plx90x0.c Fri Aug 30 13:59:41 2002
+++ b/arch/arm/kernel/plx90x0.c Fri Aug 30 13:59:41 2002
@@ -34,9 +34,9 @@
 #define PLX_SET_CONFIG \
         { unsigned long flags; \
         local_irq_save(flags); \
- __raw_writel((1<<31 | (dev->bus->number << 16) \
- | (dev->devfn << 8) | (where & ~3) \
- | ((dev->bus->number == 0)?0:1)), PLX_BASE + 0xac); \
+ __raw_writel((1<<31 | (bus->number << 16) \
+ | (devfn << 8) | (where & ~3) \
+ | ((bus->number == 0)?0:1)), PLX_BASE + 0xac); \
 
 #define PLX_CONFIG_WRITE(size) \
         PLX_SET_CONFIG \
@@ -58,47 +58,47 @@
 
 /* Configuration space access routines */
 
-static int
-plx90x0_read_config_byte (struct pci_dev *dev,
- int where, u8 *value)
-{
- PLX_CONFIG_READ(b)
-}
-
-static int
-plx90x0_read_config_word (struct pci_dev *dev,
- int where, u16 *value)
-{
- PLX_CONFIG_READ(w)
-}
-
-static int
-plx90x0_read_config_dword (struct pci_dev *dev,
- int where, u32 *value)
-{
- PLX_CONFIG_READ(l)
-}
-
 static int
-plx90x0_write_config_byte (struct pci_dev *dev,
- int where, u8 value)
+plx90x0_read_config (struct pci_bus *bus, unsigned int devfn, int where,
+ int where, int size, u32 *value)
 {
- PLX_CONFIG_WRITE(b)
+ switch (size) {
+ case 1:
+ PLX_CONFIG_READ(b)
+ break;
+ case 2:
+ PLX_CONFIG_READ(w)
+ break;
+ case 4:
+ PLX_CONFIG_READ(l)
+ break;
+ }
+ return PCIBIOS_SUCCESSFUL;
 }
 
 static int
-plx90x0_write_config_word (struct pci_dev *dev,
- int where, u16 value)
+plx90x0_write_config (struct pci_bus *bus, unsigned int devfn, int where,
+ int where, int size, u32 value)
 {
- PLX_CONFIG_WRITE(w)
+ switch (size) {
+ case 1:
+ PLX_CONFIG_WRITE(b)
+ break;
+ case 2:
+ PLX_CONFIG_WRITE(w)
+ break;
+ case 4:
+ PLX_CONFIG_WRITE(l)
+ break;
+ }
+ return PCIBIOS_SUCCESSFUL;
 }
 
-static int
-plx90x0_write_config_dword (struct pci_dev *dev,
- int where, u32 value)
+static struct pci_ops plx90x0_ops =
 {
- PLX_CONFIG_WRITE(l)
-}
+ .read = plx90x0_read_config,
+ .write = plx90x0_write_config,
+};
 
 static void
 plx_syserr_handler(int irq, void *handle, struct pt_regs *regs)
@@ -107,17 +107,6 @@
                readw(PLX_BASE + 6), regs->ARM_pc);
         __raw_writew(0xf000, PLX_BASE + 6);
 }
-
-static struct pci_ops
-plx90x0_ops =
-{
- plx90x0_read_config_byte,
- plx90x0_read_config_word,
- plx90x0_read_config_dword,
- plx90x0_write_config_byte,
- plx90x0_write_config_word,
- plx90x0_write_config_dword,
-};
 
 /*
  * Initialise the PCI system.
diff -Nru a/arch/arm/kernel/via82c505.c b/arch/arm/kernel/via82c505.c
--- a/arch/arm/kernel/via82c505.c Fri Aug 30 13:59:41 2002
+++ b/arch/arm/kernel/via82c505.c Fri Aug 30 13:59:41 2002
@@ -15,63 +15,49 @@
 
 #define MAX_SLOTS 7
 
-#define CONFIG_CMD(dev, where) (0x80000000 | (dev->bus->number << 16) | (dev->devfn << 8) | (where & ~3))
+#define CONFIG_CMD(bus, devfn, where) (0x80000000 | (bus->number << 16) | (devfn << 8) | (where & ~3))
 
 static int
-via82c505_read_config_byte(struct pci_dev *dev, int where, u8 *value)
+via82c505_read_config(struct pci_bus *bus, unsigned int devfn, int where,
+ int size, u32 *value)
 {
         outl(CONFIG_CMD(dev,where),0xCF8);
- *value=inb(0xCFC + (where&3));
+ switch (size) {
+ case 1:
+ *value=inb(0xCFC + (where&3));
+ break;
+ case 2:
+ *value=inw(0xCFC + (where&2));
+ break;
+ case 4:
+ *value=inl(0xCFC);
+ break;
+ }
         return PCIBIOS_SUCCESSFUL;
 }
 
 static int
-via82c505_read_config_word(struct pci_dev *dev, int where, u16 *value)
-{
- outl(CONFIG_CMD(dev,where),0xCF8);
- *value=inw(0xCFC + (where&2));
- return PCIBIOS_SUCCESSFUL;
-}
-
-static int
-via82c505_read_config_dword(struct pci_dev *dev, int where, u32 *value)
-{
- outl(CONFIG_CMD(dev,where),0xCF8);
- *value=inl(0xCFC);
- return PCIBIOS_SUCCESSFUL;
-}
-
-static int
-via82c505_write_config_byte(struct pci_dev *dev, int where, u8 value)
-{
- outl(CONFIG_CMD(dev,where),0xCF8);
- outb(value, 0xCFC + (where&3));
- return PCIBIOS_SUCCESSFUL;
-}
-
-static int
-via82c505_write_config_word(struct pci_dev *dev, int where, u16 value)
-{
- outl(CONFIG_CMD(dev,where),0xCF8);
- outw(value, 0xCFC + (where&2));
- return PCIBIOS_SUCCESSFUL;
-}
-
-static int
-via82c505_write_config_dword(struct pci_dev *dev, int where, u32 value)
-{
- outl(CONFIG_CMD(dev,where),0xCF8);
- outl(value, 0xCFC);
+via82c505_write_config(struct pci_bus *bus, unsigned int devfn, int where
+ int size, u32 value)
+{
+ outl(CONFIG_CMD(bus,devfn,where),0xCF8);
+ switch (size) {
+ case 1:
+ outb(value, 0xCFC + (where&3));
+ break;
+ case 2:
+ outw(value, 0xCFC + (where&2));
+ break;
+ case 4:
+ outl(value, 0xCFC);
+ break;
+ }
         return PCIBIOS_SUCCESSFUL;
 }
 
 static struct pci_ops via82c505_ops = {
- via82c505_read_config_byte,
- via82c505_read_config_word,
- via82c505_read_config_dword,
- via82c505_write_config_byte,
- via82c505_write_config_word,
- via82c505_write_config_dword,
+ .read = via82c505_read_config,
+ .write = via82c505_write_config,
 };
 
 void __init via82c505_preinit(void *sysdata)
diff -Nru a/arch/arm/mach-footbridge/dc21285.c b/arch/arm/mach-footbridge/dc21285.c
--- a/arch/arm/mach-footbridge/dc21285.c Fri Aug 30 13:59:41 2002
+++ b/arch/arm/mach-footbridge/dc21285.c Fri Aug 30 13:59:41 2002
@@ -36,12 +36,11 @@
 extern void register_isa_ports(unsigned int, unsigned int, unsigned int);
 
 static unsigned long
-dc21285_base_address(struct pci_dev *dev)
+dc21285_base_address(struct pci_bus *bus, unsigned int devfn)
 {
         unsigned long addr = 0;
- unsigned int devfn = dev->devfn;
 
- if (dev->bus->number == 0) {
+ if (bus->number == 0) {
                 if (PCI_SLOT(devfn) == 0)
                         /*
                          * For devfn 0, point at the 21285
@@ -54,54 +53,33 @@
                                 addr = PCICFG0_BASE | 0xc00000 | (devfn << 8);
                 }
         } else
- addr = PCICFG1_BASE | (dev->bus->number << 16) | (devfn << 8);
+ addr = PCICFG1_BASE | (bus->number << 16) | (devfn << 8);
 
         return addr;
 }
 
 static int
-dc21285_read_config_byte(struct pci_dev *dev, int where, u8 *value)
+dc21285_read_config(struct pci_bus *bus, unsigned int devfn, int where,
+ int size, u32 *value)
 {
- unsigned long addr = dc21285_base_address(dev);
- u8 v;
-
- if (addr)
- asm("ldr%?b %0, [%1, %2]"
- : "=r" (v) : "r" (addr), "r" (where));
- else
- v = 0xff;
-
- *value = v;
-
- return PCIBIOS_SUCCESSFUL;
-}
-
-static int
-dc21285_read_config_word(struct pci_dev *dev, int where, u16 *value)
-{
- unsigned long addr = dc21285_base_address(dev);
- u16 v;
-
- if (addr)
- asm("ldr%?h %0, [%1, %2]"
- : "=r" (v) : "r" (addr), "r" (where));
- else
- v = 0xffff;
-
- *value = v;
-
- return PCIBIOS_SUCCESSFUL;
-}
-
-static int
-dc21285_read_config_dword(struct pci_dev *dev, int where, u32 *value)
-{
- unsigned long addr = dc21285_base_address(dev);
+ unsigned long addr = dc21285_base_address(bus, devfn);
         u32 v;
 
         if (addr)
- asm("ldr%? %0, [%1, %2]"
- : "=r" (v) : "r" (addr), "r" (where));
+ switch (size) {
+ case 1:
+ asm("ldr%?b %0, [%1, %2]"
+ : "=r" (v) : "r" (addr), "r" (where));
+ break;
+ case 2:
+ asm("ldr%?h %0, [%1, %2]"
+ : "=r" (v) : "r" (addr), "r" (where));
+ break;
+ case 4:
+ asm("ldr%? %0, [%1, %2]"
+ : "=r" (v) : "r" (addr), "r" (where));
+ break;
+ }
         else
                 v = 0xffffffff;
 
@@ -111,48 +89,33 @@
 }
 
 static int
-dc21285_write_config_byte(struct pci_dev *dev, int where, u8 value)
-{
- unsigned long addr = dc21285_base_address(dev);
-
- if (addr)
- asm("str%?b %0, [%1, %2]"
- : : "r" (value), "r" (addr), "r" (where));
-
- return PCIBIOS_SUCCESSFUL;
-}
-
-static int
-dc21285_write_config_word(struct pci_dev *dev, int where, u16 value)
-{
- unsigned long addr = dc21285_base_address(dev);
-
- if (addr)
- asm("str%?h %0, [%1, %2]"
- : : "r" (value), "r" (addr), "r" (where));
-
- return PCIBIOS_SUCCESSFUL;
-}
-
-static int
-dc21285_write_config_dword(struct pci_dev *dev, int where, u32 value)
+dc21285_write_config(struct pci_bus *bus, unsigned int devfn, int where,
+ int size, u32 value)
 {
- unsigned long addr = dc21285_base_address(dev);
+ unsigned long addr = dc21285_base_address(bus, devfn);
 
         if (addr)
- asm("str%? %0, [%1, %2]"
- : : "r" (value), "r" (addr), "r" (where));
+ switch (size) {
+ case 1:
+ asm("str%?b %0, [%1, %2]"
+ : : "r" (value), "r" (addr), "r" (where));
+ break;
+ case 2:
+ asm("str%?h %0, [%1, %2]"
+ : : "r" (value), "r" (addr), "r" (where));
+ break;
+ case 4:
+ asm("str%? %0, [%1, %2]"
+ : : "r" (value), "r" (addr), "r" (where));
+ break;
+ }
 
         return PCIBIOS_SUCCESSFUL;
 }
 
 static struct pci_ops dc21285_ops = {
- dc21285_read_config_byte,
- dc21285_read_config_word,
- dc21285_read_config_dword,
- dc21285_write_config_byte,
- dc21285_write_config_word,
- dc21285_write_config_dword,
+ .read = dc21285_read_config,
+ .write = dc21285_write_config,
 };
 
 static struct timer_list serr_timer;
diff -Nru a/arch/arm/mach-integrator/pci_v3.c b/arch/arm/mach-integrator/pci_v3.c
--- a/arch/arm/mach-integrator/pci_v3.c Fri Aug 30 13:59:41 2002
+++ b/arch/arm/mach-integrator/pci_v3.c Fri Aug 30 13:59:41 2002
@@ -181,11 +181,12 @@
 #undef V3_LB_BASE_PREFETCH
 #define V3_LB_BASE_PREFETCH 0
 
-static unsigned long v3_open_config_window(struct pci_dev *dev, int offset)
+static unsigned long v3_open_config_window(struct pci_bus *bus,
+ unsigned int devfn, int offset)
 {
         unsigned int address, mapaddress, busnr;
 
- busnr = dev->bus->number;
+ busnr = bus->number;
 
         /*
          * Trap out illegal values
@@ -194,11 +195,11 @@
                 BUG();
         if (busnr > 255)
                 BUG();
- if (dev->devfn > 255)
+ if (devfn > 255)
                 BUG();
 
         if (busnr == 0) {
- int slot = PCI_SLOT(dev->devfn);
+ int slot = PCI_SLOT(devfn);
 
                 /*
                  * local bus segment so need a type 0 config cycle
@@ -210,7 +211,7 @@
                  * 3:1 = config cycle (101)
                  * 0 = PCI A1 & A0 are 0 (0)
                  */
- address = PCI_FUNC(dev->devfn) << 8;
+ address = PCI_FUNC(devfn) << 8;
                 mapaddress = V3_LB_MAP_TYPE_CONFIG;
 
                 if (slot > 12)
@@ -237,7 +238,7 @@
                  * 0 = PCI A1 & A0 from host bus (1)
                  */
                 mapaddress = V3_LB_MAP_TYPE_CONFIG | V3_LB_MAP_AD_LOW_EN;
- address = (busnr << 16) | (dev->devfn << 8);
+ address = (busnr << 16) | (devfn << 8);
         }
 
         /*
@@ -276,52 +277,29 @@
                         V3_LB_BASE_ADR_SIZE_256MB | V3_LB_BASE_ENABLE);
 }
 
-static int v3_read_config_byte(struct pci_dev *dev, int where, u8 *val)
-{
- unsigned long addr;
- unsigned long flags;
- u8 v;
-
- spin_lock_irqsave(&v3_lock, flags);
- addr = v3_open_config_window(dev, where);
-
- v = __raw_readb(addr);
-
- v3_close_config_window();
- spin_unlock_irqrestore(&v3_lock, flags);
-
- *val = v;
- return PCIBIOS_SUCCESSFUL;
-}
-
-static int v3_read_config_word(struct pci_dev *dev, int where, u16 *val)
-{
- unsigned long addr;
- unsigned long flags;
- u16 v;
-
- spin_lock_irqsave(&v3_lock, flags);
- addr = v3_open_config_window(dev, where);
-
- v = __raw_readw(addr);
-
- v3_close_config_window();
- spin_unlock_irqrestore(&v3_lock, flags);
-
- *val = v;
- return PCIBIOS_SUCCESSFUL;
-}
-
-static int v3_read_config_dword(struct pci_dev *dev, int where, u32 *val)
+static int v3_read_config(struct pci_bus *bus, unsigned int devfn, int where,
+ int size, u32 *val)
 {
         unsigned long addr;
         unsigned long flags;
         u32 v;
 
         spin_lock_irqsave(&v3_lock, flags);
- addr = v3_open_config_window(dev, where);
+ addr = v3_open_config_window(bus, devfn, where);
 
- v = __raw_readl(addr);
+ switch (size) {
+ case 1:
+ v = __raw_readb(addr);
+ break;
+
+ case 2:
+ v = __raw_readw(addr);
+ break;
+
+ case 4:
+ v = __raw_readl(addr);
+ break;
+ }
 
         v3_close_config_window();
         spin_unlock_irqrestore(&v3_lock, flags);
@@ -330,50 +308,31 @@
         return PCIBIOS_SUCCESSFUL;
 }
 
-static int v3_write_config_byte(struct pci_dev *dev, int where, u8 val)
-{
- unsigned long addr;
- unsigned long flags;
-
- spin_lock_irqsave(&v3_lock, flags);
- addr = v3_open_config_window(dev, where);
-
- __raw_writeb(val, addr);
- __raw_readb(addr);
-
- v3_close_config_window();
- spin_unlock_irqrestore(&v3_lock, flags);
-
- return PCIBIOS_SUCCESSFUL;
-}
-
-static int v3_write_config_word(struct pci_dev *dev, int where, u16 val)
+static int v3_write_config(struct pci_bus *bus, unsigned int devfn, int where,
+ int size, u32 val)
 {
         unsigned long addr;
         unsigned long flags;
 
         spin_lock_irqsave(&v3_lock, flags);
- addr = v3_open_config_window(dev, where);
+ addr = v3_open_config_window(bus, devfn, where);
 
- __raw_writew(val, addr);
- __raw_readw(addr);
+ switch (size) {
+ case 1:
+ __raw_writeb((u8)val, addr);
+ __raw_readb(addr);
+ break;
 
- v3_close_config_window();
- spin_unlock_irqrestore(&v3_lock, flags);
+ case 2:
+ __raw_writew((u16)val, addr);
+ __raw_readw(addr);
+ break;
 
- return PCIBIOS_SUCCESSFUL;
-}
-
-static int v3_write_config_dword(struct pci_dev *dev, int where, u32 val)
-{
- unsigned long addr;
- unsigned long flags;
-
- spin_lock_irqsave(&v3_lock, flags);
- addr = v3_open_config_window(dev, where);
-
- __raw_writel(val, addr);
- __raw_readl(addr);
+ case 4:
+ __raw_writel(val, addr);
+ __raw_readl(addr);
+ break;
+ }
 
         v3_close_config_window();
         spin_unlock_irqrestore(&v3_lock, flags);
@@ -382,12 +341,8 @@
 }
 
 static struct pci_ops pci_v3_ops = {
- .read_byte = v3_read_config_byte,
- .read_word = v3_read_config_word,
- .read_dword = v3_read_config_dword,
- .write_byte = v3_write_config_byte,
- .write_word = v3_write_config_word,
- .write_dword = v3_write_config_dword,
+ .read = v3_read_config,
+ .write = v3_write_config,
 };
 
 static struct resource non_mem = {
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Aug 31 2002 - 22:00:31 EST