3 * BRIEF MODULE DESCRIPTION
4 * Globespan IVR board-specific pci fixups.
6 * Copyright 2000 MontaVista Software Inc.
7 * Author: MontaVista Software, Inc.
8 * ppopov@mvista.com or source@mvista.com
10 * This program is free software; you can redistribute it and/or modify it
11 * under the terms of the GNU General Public License as published by the
12 * Free Software Foundation; either version 2 of the License, or (at your
13 * option) any later version.
15 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
16 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
17 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
18 * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
21 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
22 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 * You should have received a copy of the GNU General Public License along
27 * with this program; if not, write to the Free Software Foundation, Inc.,
28 * 675 Mass Ave, Cambridge, MA 02139, USA.
30 #include <linux/config.h>
34 #include <linux/types.h>
35 #include <linux/pci.h>
36 #include <linux/kernel.h>
37 #include <linux/init.h>
39 #include <asm/it8172/it8172.h>
40 #include <asm/it8172/it8172_pci.h>
41 #include <asm/it8172/it8172_int.h>
43 void __init pcibios_fixup_resources(struct pci_dev *dev)
47 void __init pcibios_fixup(void)
51 void __init pcibios_fixup_irqs(void)
53 unsigned int slot, func;
56 const int internal_func_irqs[7] = {
61 IT8172_BRIDGE_MASTER_IRQ,
66 pci_for_each_dev(dev) {
67 if (dev->bus->number != 0)
70 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
71 slot = PCI_SLOT(dev->devfn);
72 func = PCI_FUNC(dev->devfn);
77 * Internal device 1 is actually 7 different
78 * internal devices on the IT8172G (multi-function
82 dev->irq = internal_func_irqs[func];
84 case 0x11: // Realtek RTL-8139
86 case 0: /* pin A, hardware bug */
88 dev->irq = IT8172_PCI_INTC_IRQ;
91 dev->irq = IT8172_PCI_INTD_IRQ;
94 dev->irq = IT8172_PCI_INTA_IRQ;
97 dev->irq = IT8172_PCI_INTB_IRQ;
105 case 0x12: // ivr slot
107 case 0: /* pin A, hardware bug */
109 dev->irq = IT8172_PCI_INTB_IRQ;
112 dev->irq = IT8172_PCI_INTB_IRQ;
115 dev->irq = IT8172_PCI_INTC_IRQ;
118 dev->irq = IT8172_PCI_INTD_IRQ;
126 case 0x13: // expansion slot
128 case 0: /* pin A, hardware bug */
130 dev->irq = IT8172_PCI_INTA_IRQ;
133 dev->irq = IT8172_PCI_INTB_IRQ;
136 dev->irq = IT8172_PCI_INTC_IRQ;
139 dev->irq = IT8172_PCI_INTD_IRQ;
151 printk("irq fixup: slot %d, int line %d, int number %d\n",
152 slot, pin, dev->irq);
154 pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq);