3 * BRIEF MODULE DESCRIPTION
4 * 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 board_int_line_fixup(struct pci_dev *dev)
45 unsigned int slot, func;
47 const int internal_func_irqs[7] = {
52 IT8172_BRIDGE_MASTER_IRQ,
58 printk("board_int_line_fixup bus %d\n", dev->bus->number);
60 if (dev->bus->number != 0)
63 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
66 pci_read_config_dword(dev, PCI_SUBSYSTEM_VENDOR_ID, &vendor);
69 slot = PCI_SLOT(dev->devfn);
70 func = PCI_FUNC(dev->devfn);
75 * Internal device 1 is actually 7 different internal
76 * devices on the IT8172G (a multi-function device).
79 dev->irq = internal_func_irqs[func];
84 dev->irq = IT8172_PCI_INTA_IRQ;
87 dev->irq = IT8172_PCI_INTB_IRQ;
90 dev->irq = IT8172_PCI_INTC_IRQ;
93 dev->irq = IT8172_PCI_INTD_IRQ;
104 dev->irq = IT8172_PCI_INTA_IRQ;
107 dev->irq = IT8172_PCI_INTB_IRQ;
110 dev->irq = IT8172_PCI_INTC_IRQ;
113 dev->irq = IT8172_PCI_INTD_IRQ;
124 dev->irq = IT8172_PCI_INTB_IRQ;
127 dev->irq = IT8172_PCI_INTC_IRQ;
130 dev->irq = IT8172_PCI_INTD_IRQ;
133 dev->irq = IT8172_PCI_INTA_IRQ;
144 dev->irq = IT8172_PCI_INTC_IRQ;
147 dev->irq = IT8172_PCI_INTD_IRQ;
150 dev->irq = IT8172_PCI_INTA_IRQ;
153 dev->irq = IT8172_PCI_INTB_IRQ;
164 dev->irq = IT8172_PCI_INTD_IRQ;
167 dev->irq = IT8172_PCI_INTA_IRQ;
170 dev->irq = IT8172_PCI_INTB_IRQ;
173 dev->irq = IT8172_PCI_INTC_IRQ;
186 printk("irq fixup: slot %d, vendor %x, int line %d, int number %d\n",
187 slot, vendor, pin, dev->irq);
189 pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq);
193 struct pci_fixup pcibios_fixups[] = {
194 { PCI_FIXUP_HEADER, PCI_ANY_ID, PCI_ANY_ID, board_int_line_fixup },