Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
frv
mb93090-mb00
pci-irq.c
Go to the documentation of this file.
1
/* pci-irq.c: PCI IRQ routing on the FRV motherboard
2
*
3
* Copyright (C) 2003 Red Hat, Inc. All Rights Reserved.
4
* Written by David Howells (
[email protected]
)
5
* derived from: arch/i386/kernel/pci-irq.c: (c) 1999--2000 Martin Mares <
[email protected]
>
6
*/
7
8
#include <linux/types.h>
9
#include <linux/kernel.h>
10
#include <linux/pci.h>
11
#include <
linux/init.h
>
12
#include <
linux/interrupt.h
>
13
#include <
linux/irq.h
>
14
15
#include <asm/io.h>
16
#include <asm/smp.h>
17
18
#include "
pci-frv.h
"
19
20
/*
21
* DEVICE DEVNO INT#A INT#B INT#C INT#D
22
* ======= ======= ======= ======= ======= =======
23
* MB86943 0 fpga.10 - - -
24
* RTL8029 16 fpga.12 - - -
25
* SLOT 1 19 fpga.6 fpga.5 fpga.4 fpga.3
26
* SLOT 2 18 fpga.5 fpga.4 fpga.3 fpga.6
27
* SLOT 3 17 fpga.4 fpga.3 fpga.6 fpga.5
28
*
29
*/
30
31
static
const
uint8_t
__initconst
pci_bus0_irq_routing[32][4] = {
32
[0 ] = {
IRQ_FPGA_MB86943_PCI_INTA
},
33
[16] = {
IRQ_FPGA_RTL8029_INTA
},
34
[17] = {
IRQ_FPGA_PCI_INTC
,
IRQ_FPGA_PCI_INTD
,
IRQ_FPGA_PCI_INTA
,
IRQ_FPGA_PCI_INTB
},
35
[18] = {
IRQ_FPGA_PCI_INTB
,
IRQ_FPGA_PCI_INTC
,
IRQ_FPGA_PCI_INTD
,
IRQ_FPGA_PCI_INTA
},
36
[19] = {
IRQ_FPGA_PCI_INTA
,
IRQ_FPGA_PCI_INTB
,
IRQ_FPGA_PCI_INTC
,
IRQ_FPGA_PCI_INTD
},
37
};
38
39
void
__init
pcibios_irq_init
(
void
)
40
{
41
}
42
43
void
__init
pcibios_fixup_irqs
(
void
)
44
{
45
struct
pci_dev
*
dev
=
NULL
;
46
uint8_t
line
,
pin
;
47
48
for_each_pci_dev
(dev) {
49
pci_read_config_byte(dev,
PCI_INTERRUPT_PIN
, &pin);
50
if
(pin) {
51
dev->
irq
= pci_bus0_irq_routing[
PCI_SLOT
(dev->
devfn
)][pin - 1];
52
pci_write_config_byte(dev,
PCI_INTERRUPT_LINE
, dev->
irq
);
53
}
54
pci_read_config_byte(dev,
PCI_INTERRUPT_LINE
, &line);
55
}
56
}
57
58
void
__init
pcibios_penalize_isa_irq
(
int
irq
)
59
{
60
}
61
62
void
pcibios_enable_irq
(
struct
pci_dev
*
dev
)
63
{
64
pci_write_config_byte(dev,
PCI_INTERRUPT_LINE
, dev->
irq
);
65
}
Generated on Thu Jan 10 2013 13:05:48 for Linux Kernel by
1.8.2