1 /*
2  * arch/arm/mach-ixp2000/include/mach/irqs.h
3  *
4  * Original Author: Naeem Afzal <naeem.m.afzal@intel.com>
5  * Maintainer: Deepak Saxena <dsaxena@plexity.net>
6  *
7  * Copyright (C) 2002 Intel Corp.
8  * Copyright (C) 2003-2004 MontaVista Software, Inc.
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License version 2 as
12  * published by the Free Software Foundation.
13  */
14 
15 #ifndef _IRQS_H
16 #define _IRQS_H
17 
18 /*
19  * Do NOT add #ifdef MACHINE_FOO in here.
20  * Simpy add your machine IRQs here and increase NR_IRQS if needed to
21  * hold your machine's IRQ table.
22  */
23 
24 /*
25  * Some interrupt numbers go unused b/c the IRQ mask/ummask/status
26  * register has those bit reserved. We just mark those interrupts
27  * as invalid and this allows us to do mask/unmask with a single
28  * shift operation instead of having to map the IRQ number to
29  * a HW IRQ number.
30  */
31 #define	IRQ_IXP2000_SOFT_INT		0 /* soft interrupt */
32 #define	IRQ_IXP2000_ERRSUM		1 /* OR of all bits in ErrorStatus reg*/
33 #define	IRQ_IXP2000_UART		2
34 #define	IRQ_IXP2000_GPIO		3
35 #define	IRQ_IXP2000_TIMER1     		4
36 #define	IRQ_IXP2000_TIMER2     		5
37 #define	IRQ_IXP2000_TIMER3     		6
38 #define	IRQ_IXP2000_TIMER4     		7
39 #define	IRQ_IXP2000_PMU        		8
40 #define	IRQ_IXP2000_SPF        		9  /* Slow port framer IRQ */
41 #define	IRQ_IXP2000_DMA1      		10
42 #define	IRQ_IXP2000_DMA2      		11
43 #define	IRQ_IXP2000_DMA3      		12
44 #define	IRQ_IXP2000_PCI_DOORBELL	13
45 #define	IRQ_IXP2000_ME_ATTN       	14
46 #define	IRQ_IXP2000_PCI   		15 /* PCI INTA or INTB */
47 #define	IRQ_IXP2000_THDA0   		16 /* thread 0-31A */
48 #define	IRQ_IXP2000_THDA1  		17 /* thread 32-63A, IXP2800 only */
49 #define	IRQ_IXP2000_THDA2		18 /* thread 64-95A */
50 #define	IRQ_IXP2000_THDA3 		19 /* thread 96-127A, IXP2800 only */
51 #define	IRQ_IXP2000_THDB0		24 /* thread 0-31B */
52 #define	IRQ_IXP2000_THDB1		25 /* thread 32-63B, IXP2800 only */
53 #define	IRQ_IXP2000_THDB2		26 /* thread 64-95B */
54 #define	IRQ_IXP2000_THDB3		27 /* thread 96-127B, IXP2800 only */
55 
56 /* define generic GPIOs */
57 #define IRQ_IXP2000_GPIO0		32
58 #define IRQ_IXP2000_GPIO1		33
59 #define IRQ_IXP2000_GPIO2		34
60 #define IRQ_IXP2000_GPIO3		35
61 #define IRQ_IXP2000_GPIO4		36
62 #define IRQ_IXP2000_GPIO5		37
63 #define IRQ_IXP2000_GPIO6		38
64 #define IRQ_IXP2000_GPIO7		39
65 
66 /* split off the 2 PCI sources */
67 #define IRQ_IXP2000_PCIA		40
68 #define IRQ_IXP2000_PCIB		41
69 
70 /* Int sources from IRQ_ERROR_STATUS */
71 #define IRQ_IXP2000_DRAM0_MIN_ERR	42
72 #define IRQ_IXP2000_DRAM0_MAJ_ERR	43
73 #define IRQ_IXP2000_DRAM1_MIN_ERR	44
74 #define IRQ_IXP2000_DRAM1_MAJ_ERR	45
75 #define IRQ_IXP2000_DRAM2_MIN_ERR	46
76 #define IRQ_IXP2000_DRAM2_MAJ_ERR	47
77 /* 48-57 reserved */
78 #define IRQ_IXP2000_SRAM0_ERR		58
79 #define IRQ_IXP2000_SRAM1_ERR		59
80 #define IRQ_IXP2000_SRAM2_ERR		60
81 #define IRQ_IXP2000_SRAM3_ERR		61
82 /* 62-65 reserved */
83 #define IRQ_IXP2000_MEDIA_ERR		66
84 #define IRQ_IXP2000_PCI_ERR			67
85 #define IRQ_IXP2000_SP_INT			68
86 
87 #define NR_IXP2000_IRQS				69
88 
89 #define	IXP2000_BOARD_IRQ(x)		(NR_IXP2000_IRQS + (x))
90 
91 #define	IXP2000_BOARD_IRQ_MASK(irq)	(1 << (irq - NR_IXP2000_IRQS))
92 
93 #define IXP2000_ERR_IRQ_MASK(irq) ( 1 << (irq - IRQ_IXP2000_DRAM0_MIN_ERR))
94 #define IXP2000_VALID_ERR_IRQ_MASK (\
95 		IXP2000_ERR_IRQ_MASK(IRQ_IXP2000_DRAM0_MIN_ERR) | \
96 		IXP2000_ERR_IRQ_MASK(IRQ_IXP2000_DRAM0_MAJ_ERR) | \
97 		IXP2000_ERR_IRQ_MASK(IRQ_IXP2000_DRAM1_MIN_ERR) | \
98 		IXP2000_ERR_IRQ_MASK(IRQ_IXP2000_DRAM1_MAJ_ERR) | \
99 		IXP2000_ERR_IRQ_MASK(IRQ_IXP2000_DRAM2_MIN_ERR) | \
100 		IXP2000_ERR_IRQ_MASK(IRQ_IXP2000_DRAM2_MAJ_ERR) | \
101 		IXP2000_ERR_IRQ_MASK(IRQ_IXP2000_SRAM0_ERR) | \
102 		IXP2000_ERR_IRQ_MASK(IRQ_IXP2000_SRAM1_ERR) | \
103 		IXP2000_ERR_IRQ_MASK(IRQ_IXP2000_SRAM2_ERR) | \
104 		IXP2000_ERR_IRQ_MASK(IRQ_IXP2000_SRAM3_ERR) | \
105 		IXP2000_ERR_IRQ_MASK(IRQ_IXP2000_MEDIA_ERR) | \
106 		IXP2000_ERR_IRQ_MASK(IRQ_IXP2000_PCI_ERR) | \
107 		IXP2000_ERR_IRQ_MASK(IRQ_IXP2000_SP_INT)	)
108 
109 /*
110  * This allows for all the on-chip sources plus up to 32 CPLD based
111  * IRQs. Should be more than enough.
112  */
113 #define	IXP2000_BOARD_IRQS		32
114 #define NR_IRQS				(NR_IXP2000_IRQS + IXP2000_BOARD_IRQS)
115 
116 
117 /*
118  * IXDP2400 specific IRQs
119  */
120 #define	IRQ_IXDP2400_INGRESS_NPU	IXP2000_BOARD_IRQ(0)
121 #define	IRQ_IXDP2400_ENET		IXP2000_BOARD_IRQ(1)
122 #define	IRQ_IXDP2400_MEDIA_PCI		IXP2000_BOARD_IRQ(2)
123 #define	IRQ_IXDP2400_MEDIA_SP		IXP2000_BOARD_IRQ(3)
124 #define	IRQ_IXDP2400_SF_PCI		IXP2000_BOARD_IRQ(4)
125 #define	IRQ_IXDP2400_SF_SP		IXP2000_BOARD_IRQ(5)
126 #define	IRQ_IXDP2400_PMC		IXP2000_BOARD_IRQ(6)
127 #define	IRQ_IXDP2400_TVM		IXP2000_BOARD_IRQ(7)
128 
129 #define	NR_IXDP2400_IRQS		((IRQ_IXDP2400_TVM)+1)
130 #define	IXDP2400_NR_IRQS		NR_IXDP2400_IRQS - NR_IXP2000_IRQS
131 
132 /* IXDP2800 specific IRQs */
133 #define IRQ_IXDP2800_EGRESS_ENET	IXP2000_BOARD_IRQ(0)
134 #define IRQ_IXDP2800_INGRESS_NPU	IXP2000_BOARD_IRQ(1)
135 #define IRQ_IXDP2800_PMC		IXP2000_BOARD_IRQ(2)
136 #define IRQ_IXDP2800_FABRIC_PCI		IXP2000_BOARD_IRQ(3)
137 #define IRQ_IXDP2800_FABRIC		IXP2000_BOARD_IRQ(4)
138 #define IRQ_IXDP2800_MEDIA		IXP2000_BOARD_IRQ(5)
139 
140 #define	NR_IXDP2800_IRQS		((IRQ_IXDP2800_MEDIA)+1)
141 #define	IXDP2800_NR_IRQS		NR_IXDP2800_IRQS - NR_IXP2000_IRQS
142 
143 /*
144  * IRQs on both IXDP2x01 boards
145  */
146 #define IRQ_IXDP2X01_SPCI_DB_0		IXP2000_BOARD_IRQ(2)
147 #define IRQ_IXDP2X01_SPCI_DB_1		IXP2000_BOARD_IRQ(3)
148 #define IRQ_IXDP2X01_SPCI_PMC_INTA	IXP2000_BOARD_IRQ(4)
149 #define IRQ_IXDP2X01_SPCI_PMC_INTB	IXP2000_BOARD_IRQ(5)
150 #define IRQ_IXDP2X01_SPCI_PMC_INTC	IXP2000_BOARD_IRQ(6)
151 #define IRQ_IXDP2X01_SPCI_PMC_INTD	IXP2000_BOARD_IRQ(7)
152 #define IRQ_IXDP2X01_SPCI_FIC_INT	IXP2000_BOARD_IRQ(8)
153 #define IRQ_IXDP2X01_IPMI_FROM		IXP2000_BOARD_IRQ(16)
154 #define IRQ_IXDP2X01_125US		IXP2000_BOARD_IRQ(17)
155 #define IRQ_IXDP2X01_DB_0_ADD		IXP2000_BOARD_IRQ(18)
156 #define IRQ_IXDP2X01_DB_1_ADD		IXP2000_BOARD_IRQ(19)
157 #define IRQ_IXDP2X01_UART1		IXP2000_BOARD_IRQ(21)
158 #define IRQ_IXDP2X01_UART2		IXP2000_BOARD_IRQ(22)
159 #define IRQ_IXDP2X01_FIC_ADD_INT	IXP2000_BOARD_IRQ(24)
160 #define IRQ_IXDP2X01_CS8900		IXP2000_BOARD_IRQ(25)
161 #define IRQ_IXDP2X01_BBSRAM		IXP2000_BOARD_IRQ(26)
162 
163 #define IXDP2X01_VALID_IRQ_MASK ( \
164 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_SPCI_DB_0) | \
165 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_SPCI_DB_1) | \
166 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_SPCI_PMC_INTA) | \
167 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_SPCI_PMC_INTB) | \
168 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_SPCI_PMC_INTC) | \
169 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_SPCI_PMC_INTD) | \
170 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_SPCI_FIC_INT) | \
171 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_IPMI_FROM) | \
172 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_125US) | \
173 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_DB_0_ADD) | \
174 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_DB_1_ADD) | \
175 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_UART1) | \
176 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_UART2) | \
177 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_FIC_ADD_INT) | \
178 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_CS8900) | \
179 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2X01_BBSRAM) )
180 
181 /*
182  * IXDP2401 specific IRQs
183  */
184 #define IRQ_IXDP2401_INTA_82546		IXP2000_BOARD_IRQ(0)
185 #define IRQ_IXDP2401_INTB_82546		IXP2000_BOARD_IRQ(1)
186 
187 #define	IXDP2401_VALID_IRQ_MASK ( \
188 		IXDP2X01_VALID_IRQ_MASK | \
189 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2401_INTA_82546) |\
190 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2401_INTB_82546))
191 
192 /*
193  * IXDP2801-specific IRQs
194  */
195 #define IRQ_IXDP2801_RIV		IXP2000_BOARD_IRQ(0)
196 #define IRQ_IXDP2801_CNFG_MEDIA		IXP2000_BOARD_IRQ(27)
197 #define IRQ_IXDP2801_CLOCK_REF		IXP2000_BOARD_IRQ(28)
198 
199 #define	IXDP2801_VALID_IRQ_MASK ( \
200 		IXDP2X01_VALID_IRQ_MASK | \
201 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2801_RIV) |\
202 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2801_CNFG_MEDIA) |\
203 		IXP2000_BOARD_IRQ_MASK(IRQ_IXDP2801_CLOCK_REF))
204 
205 #define	NR_IXDP2X01_IRQS		((IRQ_IXDP2801_CLOCK_REF) + 1)
206 
207 #endif /*_IRQS_H*/
208