diff options
author | mb <mb@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2008-02-20 17:56:24 +0000 |
---|---|---|
committer | mb <mb@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2008-02-20 17:56:24 +0000 |
commit | 371bb6f94416223be7b002fe7215ebeeba752af1 (patch) | |
tree | 9eddcbe2901556ef791a84b5b329d0bf02e322da /target/linux/brcm47xx/files/arch/mips/bcm947xx | |
parent | bfc26bdfda1f8d4216871d473e9a4fefb0bcef50 (diff) |
bcm47xx: Add driver for the SSB Gigabit Ethernet core.
It doesn't work, yet, but let's commit what we have.
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@10509 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/brcm47xx/files/arch/mips/bcm947xx')
-rw-r--r-- | target/linux/brcm47xx/files/arch/mips/bcm947xx/irq.c | 23 | ||||
-rw-r--r-- | target/linux/brcm47xx/files/arch/mips/bcm947xx/setup.c | 14 |
2 files changed, 37 insertions, 0 deletions
diff --git a/target/linux/brcm47xx/files/arch/mips/bcm947xx/irq.c b/target/linux/brcm47xx/files/arch/mips/bcm947xx/irq.c index 56d4c84b7..c6b85a959 100644 --- a/target/linux/brcm47xx/files/arch/mips/bcm947xx/irq.c +++ b/target/linux/brcm47xx/files/arch/mips/bcm947xx/irq.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2004 Florian Schirmer (jolt@tuxbox.org) + * Copyright (C) 2008 Michael Buesch <mb@bu3sch.de> * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -29,12 +30,18 @@ #include <linux/module.h> #include <linux/smp.h> #include <linux/types.h> +#include <linux/pci.h> +#include <linux/ssb/ssb.h> #include <asm/cpu.h> #include <asm/io.h> #include <asm/irq.h> #include <asm/irq_cpu.h> + +extern struct ssb_bus ssb; + + void plat_irq_dispatch(void) { u32 cause; @@ -61,3 +68,19 @@ void __init arch_init_irq(void) { mips_cpu_irq_init(); } + +int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) +{ + int res; + + res = ssb_pcibios_map_irq(dev, slot, pin); + if (res < 0) { + printk(KERN_ALERT "PCI: Failed to map IRQ of device %s\n", + pci_name((struct pci_dev *)dev)); + return 0; + } + /* IRQ-0 and IRQ-1 are software interrupts. */ + WARN_ON((res == 0) || (res == 1)); + + return res; +} diff --git a/target/linux/brcm47xx/files/arch/mips/bcm947xx/setup.c b/target/linux/brcm47xx/files/arch/mips/bcm947xx/setup.c index 85ff1cf81..5856d8fc6 100644 --- a/target/linux/brcm47xx/files/arch/mips/bcm947xx/setup.c +++ b/target/linux/brcm47xx/files/arch/mips/bcm947xx/setup.c @@ -47,6 +47,20 @@ extern void bcm47xx_time_init(void); struct ssb_bus ssb; + +int pcibios_plat_dev_init(struct pci_dev *dev) +{ + int err; + + err = ssb_pcibios_plat_dev_init(dev); + if (err) { + printk(KERN_ALERT "PCI: Failed to init device %s\n", + pci_name(dev)); + } + + return err; +} + static void bcm47xx_machine_restart(char *command) { printk(KERN_ALERT "Please stand by while rebooting the system...\n"); |