2 * Atheros AR71xx PCI setup code
4 * Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org>
5 * Copyright (C) 2008 Imre Kaloz <kaloz@openwrt.org>
7 * Parts of this file are based on Atheros' 2.6.15 BSP
9 * This program is free software; you can redistribute it and/or modify it
10 * under the terms of the GNU General Public License version 2 as published
11 * by the Free Software Foundation.
14 #include <linux/kernel.h>
16 #include <asm/traps.h>
18 #include <asm/mach-ar71xx/ar71xx.h>
19 #include <asm/mach-ar71xx/pci.h>
21 unsigned ar71xx_pci_nr_irqs __initdata
;
22 struct ar71xx_pci_irq
*ar71xx_pci_irq_map __initdata
;
24 int (*ar71xx_pci_plat_dev_init
)(struct pci_dev
*dev
);
26 static int ar71xx_be_handler(struct pt_regs
*regs
, int is_fixup
)
30 err
= ar71xx_pci_be_handler(is_fixup
);
32 return (is_fixup
&& !err
) ? MIPS_BE_FIXUP
: MIPS_BE_FATAL
;
35 int pcibios_plat_dev_init(struct pci_dev
*dev
)
37 if (ar71xx_pci_plat_dev_init
)
38 return ar71xx_pci_plat_dev_init(dev
);
43 int __init
pcibios_map_irq(const struct pci_dev
*dev
, uint8_t slot
, uint8_t pin
)
48 case AR71XX_SOC_AR7130
:
49 case AR71XX_SOC_AR7141
:
50 case AR71XX_SOC_AR7161
:
51 ret
= ar71xx_pcibios_map_irq(dev
, slot
, pin
);
54 case AR71XX_SOC_AR7240
:
55 case AR71XX_SOC_AR7241
:
56 case AR71XX_SOC_AR7242
:
57 case AR71XX_SOC_AR9342
:
58 case AR71XX_SOC_AR9344
:
59 ret
= ar724x_pcibios_map_irq(dev
, slot
, pin
);
69 int __init
ar71xx_pci_init(unsigned nr_irqs
, struct ar71xx_pci_irq
*map
)
74 case AR71XX_SOC_AR7130
:
75 case AR71XX_SOC_AR7141
:
76 case AR71XX_SOC_AR7161
:
77 board_be_handler
= ar71xx_be_handler
;
78 ret
= ar71xx_pcibios_init();
81 case AR71XX_SOC_AR7240
:
82 case AR71XX_SOC_AR7241
:
83 case AR71XX_SOC_AR7242
:
84 case AR71XX_SOC_AR9342
:
85 case AR71XX_SOC_AR9344
:
86 ret
= ar724x_pcibios_init();
93 ar71xx_pci_nr_irqs
= nr_irqs
;
94 ar71xx_pci_irq_map
= map
;