fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / arch / arm / mach-footbridge / dc21285.c
index e79884e..1463330 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/slab.h>
 #include <linux/init.h>
 #include <linux/ioport.h>
+#include <linux/irq.h>
 
 #include <asm/io.h>
 #include <asm/irq.h>
@@ -35,7 +36,6 @@
 
 extern int setup_arm_irq(int, struct irqaction *);
 extern void pcibios_report_status(u_int status_mask, int warn);
-extern void register_isa_ports(unsigned int, unsigned int, unsigned int);
 
 static unsigned long
 dc21285_base_address(struct pci_bus *bus, unsigned int devfn)
@@ -70,16 +70,16 @@ dc21285_read_config(struct pci_bus *bus, unsigned int devfn, int where,
        if (addr)
                switch (size) {
                case 1:
-                       asm("ldr%?b     %0, [%1, %2]"
-                               : "=r" (v) : "r" (addr), "r" (where));
+                       asm("ldrb       %0, [%1, %2]"
+                               : "=r" (v) : "r" (addr), "r" (where) : "cc");
                        break;
                case 2:
-                       asm("ldr%?h     %0, [%1, %2]"
-                               : "=r" (v) : "r" (addr), "r" (where));
+                       asm("ldrh       %0, [%1, %2]"
+                               : "=r" (v) : "r" (addr), "r" (where) : "cc");
                        break;
                case 4:
-                       asm("ldr%?      %0, [%1, %2]"
-                               : "=r" (v) : "r" (addr), "r" (where));
+                       asm("ldr        %0, [%1, %2]"
+                               : "=r" (v) : "r" (addr), "r" (where) : "cc");
                        break;
                }
 
@@ -104,16 +104,19 @@ dc21285_write_config(struct pci_bus *bus, unsigned int devfn, int where,
        if (addr)
                switch (size) {
                case 1:
-                       asm("str%?b     %0, [%1, %2]"
-                               : : "r" (value), "r" (addr), "r" (where));
+                       asm("strb       %0, [%1, %2]"
+                               : : "r" (value), "r" (addr), "r" (where)
+                               : "cc");
                        break;
                case 2:
-                       asm("str%?h     %0, [%1, %2]"
-                               : : "r" (value), "r" (addr), "r" (where));
+                       asm("strh       %0, [%1, %2]"
+                               : : "r" (value), "r" (addr), "r" (where)
+                               : "cc");
                        break;
                case 4:
-                       asm("str%?      %0, [%1, %2]"
-                               : : "r" (value), "r" (addr), "r" (where));
+                       asm("str        %0, [%1, %2]"
+                               : : "r" (value), "r" (addr), "r" (where)
+                               : "cc");
                        break;
                }
 
@@ -152,7 +155,7 @@ static void dc21285_enable_error(unsigned long __data)
 /*
  * Warn on PCI errors.
  */
-static irqreturn_t dc21285_abort_irq(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t dc21285_abort_irq(int irq, void *dev_id)
 {
        unsigned int cmd;
        unsigned int status;
@@ -163,7 +166,7 @@ static irqreturn_t dc21285_abort_irq(int irq, void *dev_id, struct pt_regs *regs
 
        if (status & PCI_STATUS_REC_MASTER_ABORT) {
                printk(KERN_DEBUG "PCI: master abort, pc=0x%08lx\n",
-                       instruction_pointer(regs));
+                       instruction_pointer(get_irq_regs()));
                cmd |= PCI_STATUS_REC_MASTER_ABORT << 16;
        }
 
@@ -182,7 +185,7 @@ static irqreturn_t dc21285_abort_irq(int irq, void *dev_id, struct pt_regs *regs
        return IRQ_HANDLED;
 }
 
-static irqreturn_t dc21285_serr_irq(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t dc21285_serr_irq(int irq, void *dev_id)
 {
        struct timer_list *timer = dev_id;
        unsigned int cntl;
@@ -204,7 +207,7 @@ static irqreturn_t dc21285_serr_irq(int irq, void *dev_id, struct pt_regs *regs)
        return IRQ_HANDLED;
 }
 
-static irqreturn_t dc21285_discard_irq(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t dc21285_discard_irq(int irq, void *dev_id)
 {
        printk(KERN_DEBUG "PCI: discard timer expired\n");
        *CSR_SA110_CNTL &= 0xffffde07;
@@ -212,7 +215,7 @@ static irqreturn_t dc21285_discard_irq(int irq, void *dev_id, struct pt_regs *re
        return IRQ_HANDLED;
 }
 
-static irqreturn_t dc21285_dparity_irq(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t dc21285_dparity_irq(int irq, void *dev_id)
 {
        unsigned int cmd;
 
@@ -226,7 +229,7 @@ static irqreturn_t dc21285_dparity_irq(int irq, void *dev_id, struct pt_regs *re
        return IRQ_HANDLED;
 }
 
-static irqreturn_t dc21285_parity_irq(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t dc21285_parity_irq(int irq, void *dev_id)
 {
        struct timer_list *timer = dev_id;
        unsigned int cmd;
@@ -255,14 +258,12 @@ int __init dc21285_setup(int nr, struct pci_sys_data *sys)
        if (nr || !footbridge_cfn_mode())
                return 0;
 
-       res = kmalloc(sizeof(struct resource) * 2, GFP_KERNEL);
+       res = kzalloc(sizeof(struct resource) * 2, GFP_KERNEL);
        if (!res) {
                printk("out of memory for root bus resources");
                return 0;
        }
 
-       memset(res, 0, sizeof(struct resource) * 2);
-
        res[0].flags = IORESOURCE_MEM;
        res[0].name  = "Footbridge non-prefetch";
        res[1].flags = IORESOURCE_MEM | IORESOURCE_PREFETCH;
@@ -334,15 +335,15 @@ void __init dc21285_preinit(void)
        /*
         * We don't care if these fail.
         */
-       request_irq(IRQ_PCI_SERR, dc21285_serr_irq, SA_INTERRUPT,
+       request_irq(IRQ_PCI_SERR, dc21285_serr_irq, IRQF_DISABLED,
                    "PCI system error", &serr_timer);
-       request_irq(IRQ_PCI_PERR, dc21285_parity_irq, SA_INTERRUPT,
+       request_irq(IRQ_PCI_PERR, dc21285_parity_irq, IRQF_DISABLED,
                    "PCI parity error", &perr_timer);
-       request_irq(IRQ_PCI_ABORT, dc21285_abort_irq, SA_INTERRUPT,
+       request_irq(IRQ_PCI_ABORT, dc21285_abort_irq, IRQF_DISABLED,
                    "PCI abort", NULL);
-       request_irq(IRQ_DISCARD_TIMER, dc21285_discard_irq, SA_INTERRUPT,
+       request_irq(IRQ_DISCARD_TIMER, dc21285_discard_irq, IRQF_DISABLED,
                    "Discard timer", NULL);
-       request_irq(IRQ_PCI_DPERR, dc21285_dparity_irq, SA_INTERRUPT,
+       request_irq(IRQ_PCI_DPERR, dc21285_dparity_irq, IRQF_DISABLED,
                    "PCI data parity", NULL);
 
        if (cfn_mode) {