2 * arch/arm/mach-ixp4xx/nslu2-pci.c
4 * NSLU2 board-level PCI initialization
6 * based on ixdp425-pci.c:
7 * Copyright (C) 2002 Intel Corporation.
8 * Copyright (C) 2003-2004 MontaVista Software, Inc.
10 * Maintainer: http://www.nslu2-linux.org/
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License version 2 as
14 * published by the Free Software Foundation.
18 #include <linux/pci.h>
19 #include <linux/init.h>
20 #include <linux/irq.h>
22 #include <asm/mach/pci.h>
23 #include <asm/mach-types.h>
25 void __init
nslu2_pci_preinit(void)
27 set_irq_type(IRQ_NSLU2_PCI_INTA
, IRQ_TYPE_LEVEL_LOW
);
28 set_irq_type(IRQ_NSLU2_PCI_INTB
, IRQ_TYPE_LEVEL_LOW
);
29 set_irq_type(IRQ_NSLU2_PCI_INTC
, IRQ_TYPE_LEVEL_LOW
);
34 static int __init
nslu2_map_irq(struct pci_dev
*dev
, u8 slot
, u8 pin
)
36 static int pci_irq_table
[NSLU2_PCI_IRQ_LINES
] = {
44 if (slot
>= 1 && slot
<= NSLU2_PCI_MAX_DEV
&&
45 pin
>= 1 && pin
<= NSLU2_PCI_IRQ_LINES
) {
46 irq
= pci_irq_table
[(slot
+ pin
- 2) % NSLU2_PCI_IRQ_LINES
];
52 struct hw_pci __initdata nslu2_pci
= {
54 .preinit
= nslu2_pci_preinit
,
55 .swizzle
= pci_std_swizzle
,
56 .setup
= ixp4xx_setup
,
57 .scan
= ixp4xx_scan_bus
,
58 .map_irq
= nslu2_map_irq
,
61 int __init
nslu2_pci_init(void) /* monkey see, monkey do */
63 if (machine_is_nslu2())
64 pci_common_init(&nslu2_pci
);
69 subsys_initcall(nslu2_pci_init
);