summaryrefslogtreecommitdiff
path: root/src/mainboard/amd/solo/irq_tables.c
blob: ad397b6ecd79be33f0c4bfd303f91d9c67a5e8fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <arch/pirq_routing.h>
#include <device/pci.h>

#define IRQ_ROUTER_BUS		1
#define IRQ_ROUTER_DEVFN	PCI_DEVFN(5,0)
#define IRQ_ROUTER_VENDOR	0x1022
#define IRQ_ROUTER_DEVICE	0x7468
#define IRQS_EXCLUSIVE		0x0c20
#define IRQS_AVAILABLE		0xdeb8


#define IRQ_SLOT(slot, bus, dev, fn, linka, linkb, linkc, linkd) \
	{ bus, (dev<<3)|fn, {{ linka, IRQS_AVAILABLE}, { linkb, IRQS_AVAILABLE}, \
	{linkc, IRQS_AVAILABLE}, {linkd, IRQS_AVAILABLE}}, slot, 0}

/*  Each IRQ_SLOT entry consists of:
 *  bus, devfn, {link, bitmap}, {link, bitmap}, {link, bitmap}, {link, bitmap}, slot, rfu  
 */

const struct irq_routing_table intel_irq_routing_table = {
	PIRQ_SIGNATURE,		/* u32 signature */
	PIRQ_VERSION,		/* u16 version   */
	32+16*IRQ_SLOT_COUNT,	/* there can be total IRQ_SLOT_COUNT 
				 * devices on the bus */
	IRQ_ROUTER_BUS,		/* Where the interrupt router lies (bus) */
	IRQ_ROUTER_DEVFN,	/* Where the interrupt router lies (dev) */
	IRQS_EXCLUSIVE,		/* IRQs devoted exclusively to PCI usage */
	IRQ_ROUTER_VENDOR,	/* Vendor */
	IRQ_ROUTER_DEVICE,	/* Device */
	0x00,			/* Crap (miniport) */
	{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },	/* u8 rfu[11] */
	0x00,			/*  u8 checksum , mod 256 checksum must give
				 *  zero, will be corrected later 
				 */
	{

	/* slot(0=onboard), devfn, irqlinks (line id, 0=not routed) */

	/* PCI SLOT 1-4 */
	IRQ_SLOT (1, 3,4,0, 1,2,3,4 ),
	IRQ_SLOT (2, 3,5,0, 2,3,4,1 ),
	IRQ_SLOT (3, 3,6,0, 3,4,1,2 ),
	IRQ_SLOT (4, 3,7,0, 4,1,2,3 ),
	
	/* Builtin Devices */
	IRQ_SLOT (0, 3,0,0, 4,4,4,4 ), /* USB */
	IRQ_SLOT (0, 1,5,1, 1,2,3,4 ), /* IDE */
	IRQ_SLOT (0, 1,2,0, 1,2,3,4 ), /* AGP Bridge */

	/* Let Linux know about bus 1 */
	IRQ_SLOT (0, 1,5,0, 0,0,0,0 ),

	}
};