1#ifndef __ASM_IA64_IOSAPIC_H
2#define __ASM_IA64_IOSAPIC_H
3
4#define	IOSAPIC_DEFAULT_ADDR	0xFEC00000
5
6#define	IOSAPIC_REG_SELECT	0x0
7#define	IOSAPIC_WINDOW		0x10
8#define	IOSAPIC_EOI		0x40
9
10#define	IOSAPIC_VERSION	0x1
11
12/*
13 * Redirection table entry
14 */
15#define	IOSAPIC_RTE_LOW(i)	(0x10+i*2)
16#define	IOSAPIC_RTE_HIGH(i)	(0x11+i*2)
17
18#define	IOSAPIC_DEST_SHIFT		16
19
20/*
21 * Delivery mode
22 */
23#define	IOSAPIC_DELIVERY_SHIFT		8
24#define	IOSAPIC_FIXED			0x0
25#define	IOSAPIC_LOWEST_PRIORITY	0x1
26#define	IOSAPIC_PMI			0x2
27#define	IOSAPIC_NMI			0x4
28#define	IOSAPIC_INIT			0x5
29#define	IOSAPIC_EXTINT			0x7
30
31/*
32 * Interrupt polarity
33 */
34#define	IOSAPIC_POLARITY_SHIFT		13
35#define	IOSAPIC_POL_HIGH		0
36#define	IOSAPIC_POL_LOW		1
37
38/*
39 * Trigger mode
40 */
41#define	IOSAPIC_TRIGGER_SHIFT		15
42#define	IOSAPIC_EDGE			0
43#define	IOSAPIC_LEVEL			1
44
45/*
46 * Mask bit
47 */
48#define	IOSAPIC_MASK_SHIFT		16
49#define	IOSAPIC_UNMASK			0
50#define	IOSAPIC_MSAK			1
51
52#ifndef __ASSEMBLY__
53
54extern void __devinit iosapic_init (unsigned long address,
55				    unsigned int gsi_base,
56				    int pcat_compat);
57extern int gsi_to_vector (unsigned int gsi);
58extern int iosapic_register_intr (unsigned int gsi, unsigned long polarity,
59				  unsigned long edge_triggered,
60				  u32 gsi_base, char *iosapic_address);
61extern void iosapic_override_isa_irq (unsigned int isa_irq, unsigned int gsi,
62				      unsigned long polarity,
63				      unsigned long edge_triggered);
64extern int iosapic_register_platform_intr (u32 int_type,
65					   unsigned int gsi,
66					   int pmi_vector,
67					   u16 eid, u16 id,
68					   unsigned long polarity,
69					   unsigned long edge_triggered,
70					   unsigned int gsi_base,
71					   char *iosapic_address);
72extern unsigned int iosapic_version (char *addr);
73
74extern void iosapic_pci_fixup (int);
75
76# endif /* !__ASSEMBLY__ */
77#endif /* __ASM_IA64_IOSAPIC_H */
78