1 /****************************************************************************
\r
2 * © 2013 Microchip Technology Inc. and its subsidiaries.
\r
3 * You may use this software and any derivatives exclusively with
\r
4 * Microchip products.
\r
5 * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS".
\r
6 * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,
\r
7 * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,
\r
8 * AND FITNESS FOR A PARTICULAR PURPOSE, OR ITS INTERACTION WITH MICROCHIP
\r
9 * PRODUCTS, COMBINATION WITH ANY OTHER PRODUCTS, OR USE IN ANY APPLICATION.
\r
10 * IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
\r
11 * INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
\r
12 * WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS
\r
13 * BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE.
\r
14 * TO THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
\r
15 * CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF
\r
16 * FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
\r
17 * MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE
\r
21 /** @defgroup interrupt interrupt
\r
24 /** @file interrupt.h
\r
25 \brief This is the header file for interrupt.c
\r
26 This program is designed to allow the other C programs to be able to use this component
\r
28 There are entry points for all C wrapper API implementation
\r
30 <b>Platform:</b> This is ARC-based component
\r
32 <b>Toolset:</b> Metaware IDE(8.5.1)
\r
33 <b>Reference:</b> smsc_reusable_fw_requirement.doc */
\r
35 /*******************************************************************************
\r
36 * SMSC version control information (Perforce):
\r
38 * FILE: $File: //depot_pcs/FWEng/Release/projects/CEC1302_CLIB/release2/Source/hw_blks/kernel/skern/source/interrupt/interrupt.h $
\r
39 * REVISION: $Revision: #1 $
\r
40 * DATETIME: $DateTime: 2015/12/23 15:37:58 $
\r
41 * AUTHOR: $Author: akrishnan $
\r
43 * Revision history (latest first):
\r
45 ***********************************************************************************
\r
48 #ifndef _INTERRUPT_H_
\r
49 #define _INTERRUPT_H_
\r
52 /* public function prototypes */
\r
53 void interrupt_block_init(void);
\r
54 void null_handler(void);
\r
55 __irq void SysTick_Handler(void);
\r
57 /* macro for interrupt control */
\r
58 /* 16-bit timers interrupt control */
\r
59 #define sbit_TIMER0 ( 1UL << 0UL )
\r
60 #define sbit_TIMER1 ( 1UL << 1UL )
\r
61 #define sbit_TIMER2 ( 1UL << 2UL )
\r
62 #define sbit_TIMER3 ( 1UL << 3Ul )
\r
64 #define disable_timer0_irq() mCLR_BIT(sbit_TIMER0, MMCR_EC_GIRQ23_ENABLE_SET)
\r
65 #define enable_timer0_irq() mSET_BIT(sbit_TIMER0, MMCR_EC_GIRQ23_ENABLE_SET)
\r
66 #define clear_timer0_source() mCLR_SRC_BIT(sbit_TIMER0, MMCR_EC_GIRQ23_SOURCE)
\r
67 #define get_timer0_source() mGET_BIT(sbit_TIMER0, MMCR_EC_GIRQ23_SOURCE)
\r
69 #define disable_timer1_irq() mCLR_BIT(sbit_TIMER1, MMCR_EC_GIRQ23_ENABLE_SET)
\r
70 #define enable_timer1_irq() mSET_BIT(sbit_TIMER1, MMCR_EC_GIRQ23_ENABLE_SET)
\r
71 #define clear_timer1_source() mCLR_SRC_BIT(sbit_TIMER1, MMCR_EC_GIRQ23_SOURCE)
\r
72 #define get_timer1_source() mGET_BIT(sbit_TIMER1, MMCR_EC_GIRQ23_SOURCE)
\r
74 #define disable_timer2_irq() mCLR_BIT(sbit_TIMER2, MMCR_EC_GIRQ23_ENABLE_SET)
\r
75 #define enable_timer2_irq() mSET_BIT(sbit_TIMER2, MMCR_EC_GIRQ23_ENABLE_SET)
\r
76 #define clear_timer2_source() mCLR_SRC_BIT(sbit_TIMER2, MMCR_EC_GIRQ23_SOURCE)
\r
77 #define get_timer2_source() mGET_BIT(sbit_TIMER2, MMCR_EC_GIRQ23_SOURCE)
\r
79 #define disable_timer3_irq() mCLR_BIT(sbit_TIMER3, MMCR_EC_GIRQ23_ENABLE_SET)
\r
80 #define enable_timer3_irq() mSET_BIT(sbit_TIMER3, MMCR_EC_GIRQ23_ENABLE_SET)
\r
81 #define clear_timer3_source() mCLR_SRC_BIT(sbit_TIMER3, MMCR_EC_GIRQ23_SOURCE)
\r
82 #define get_timer3_source() mGET_BIT(sbit_TIMER3, MMCR_EC_GIRQ23_SOURCE)
\r
85 /* hibernation timers interrupt control */
\r
86 #define sbit_HTIMER0 ( 1UL << 20 )
\r
87 #define sbit_HTIMER1 b_bit14
\r
89 #define disable_htimer0_irq() mCLR_BIT(sbit_HTIMER0, MMCR_EC_GIRQ17_ENABLE_SET)
\r
90 #define enable_htimer0_irq() mSET_BIT(sbit_HTIMER0, MMCR_EC_GIRQ17_ENABLE_SET)
\r
91 #define clear_htimer0_source() mCLR_SRC_BIT(sbit_HTIMER0, MMCR_EC_GIRQ17_SOURCE)
\r
92 #define get_htimer0_source() mGET_BIT(sbit_HTIMER0, MMCR_EC_GIRQ17_SOURCE)
\r
94 #define disable_htimer1_irq() mCLR_BIT(sbit_HTIMER1, MMCR_EC_GIRQ23_ENABLE_SET)
\r
95 #define enable_htimer1_irq() mSET_BIT(sbit_HTIMER1, MMCR_EC_GIRQ23_ENABLE_SET)
\r
96 #define clear_htimer1_source() mCLR_SRC_BIT(sbit_HTIMER1, MMCR_EC_GIRQ23_SOURCE)
\r
97 #define get_htimer1_source() mGET_BIT(sbit_HTIMER1, MMCR_EC_GIRQ23_SOURCE)
\r
99 /* RTC interrupt control */
\r
100 #define b_bit18 (1 << 18)
\r
101 #define b_bit19 (1 << 19)
\r
102 #define sbit_RTC_INT b_bit18
\r
103 #define disable_rtc_irq() mCLR_BIT(sbit_RTC_INT, MMCR_EC_GIRQ17_ENABLE_SET)
\r
104 #define enable_rtc_irq() mSET_BIT(sbit_RTC_INT, MMCR_EC_GIRQ17_ENABLE_SET)
\r
105 #define clear_rtc_irq_source() mCLR_SRC_BIT(sbit_RTC_INT, MMCR_EC_GIRQ17_ENABLE_SET)
\r
106 #define get_rtc_irq_source() mGET_BIT(sbit_RTC_INT, MMCR_EC_GIRQ17_ENABLE_SET)
\r
107 /* RTC alarm interrupt control */
\r
108 #define sbit_RTC_ALM_INT b_bit19
\r
109 #define disable_rtc_alm_irq() mCLR_BIT(sbit_RTC_ALM_INT, MMCR_EC_GIRQ17_ENABLE_SET)
\r
110 #define enable_rtc_alm_irq() mSET_BIT(sbit_RTC_ALM_INT, MMCR_EC_GIRQ17_ENABLE_SET)
\r
111 #define clear_rtc_irq_alm_source() mCLR_SRC_BIT(sbit_RTC_ALM_INT, MMCR_EC_GIRQ17_ENABLE_SET)
\r
112 #define get_rtc_irq_alm_source() mGET_BIT(sbit_RTC_ALM_INT, MMCR_EC_GIRQ17_ENABLE_SET)
\r
114 /* week timer interrupt control */
\r
115 #define sbit_WKTIMER b_bit7
\r
117 #define disable_wktimer_irq() mCLR_BIT(sbit_WKTIMER, MMCR_EC_GIRQ23_ENABLE_SET)
\r
118 #define enable_wktimer_irq() mSET_BIT(sbit_WKTIMER, MMCR_EC_GIRQ23_ENABLE_SET)
\r
119 #define clear_wktimer_source() mCLR_SRC_BIT(sbit_WKTIMER, MMCR_EC_GIRQ23_SOURCE)
\r
120 #define get_wktimer_source() mGET_BIT(sbit_WKTIMER, MMCR_EC_GIRQ23_SOURCE)
\r
123 /* scan matrix interrupt control */
\r
124 #define sbit_SCANNER b_bit16
\r
125 #define disable_scanner_irq() mCLR_BIT(sbit_SCANNER, MMCR_EC_GIRQ18_ENABLE_SET)
\r
126 #define enable_scanner_irq() mSET_BIT(sbit_SCANNER, MMCR_EC_GIRQ18_ENABLE_SET)
\r
127 #define clear_scanner_source() mCLR_SRC_BIT(sbit_SCANNER, MMCR_EC_GIRQ18_SOURCE)
\r
128 #define get_scanner_source() mGET_BIT(sbit_SCANNER, MMCR_EC_GIRQ18_SOURCE)
\r
131 /* PS2 interrupt control */
\r
132 /* PS2 activity interrupt */
\r
133 #define sbit_PS2_ACT_0 b_bit13
\r
134 #define sbit_PS2_ACT_1 b_bit14
\r
135 #define sbit_PS2_ACT_2 b_bit15
\r
136 /* PS2 wakeup interrupt: detect start bit */
\r
137 #define sbit_PS2_WK_0A b_bit17
\r
138 #define sbit_PS2_WK_1B b_bit20
\r
139 #define sbit_PS2_WK_2 b_bit21
\r
141 /* PS2 activity interrupt control */
\r
142 #define disable_ps2_act_0_irq() mCLR_BIT(sbit_PS2_ACT_0, MMCR_EC_GIRQ19_ENABLE_SET)
\r
143 #define enable_ps2_act_0_irq() mSET_BIT(sbit_PS2_ACT_0, MMCR_EC_GIRQ19_ENABLE_SET)
\r
144 #define clear_ps2_act_0_source() mCLR_SRC_BIT(sbit_PS2_ACT_0, MMCR_EC_GIRQ19_SOURCE)
\r
145 #define get_ps2_act_0_source() mGET_BIT(sbit_PS2_ACT_0, MMCR_EC_GIRQ19_SOURCE)
\r
147 #define disable_ps2_act_1_irq() mCLR_BIT(sbit_PS2_ACT_1, MMCR_EC_GIRQ19_ENABLE_SET)
\r
148 #define enable_ps2_act_1_irq() mSET_BIT(sbit_PS2_ACT_1, MMCR_EC_GIRQ19_ENABLE_SET)
\r
149 #define clear_ps2_act_1_source() mCLR_SRC_BIT(sbit_PS2_ACT_1, MMCR_EC_GIRQ19_SOURCE)
\r
150 #define get_ps2_act_1_source() mGET_BIT(sbit_PS2_ACT_1, MMCR_EC_GIRQ19_SOURCE)
\r
152 #define disable_ps2_act_2_irq() mCLR_BIT(sbit_PS2_ACT_2, MMCR_EC_GIRQ19_ENABLE_SET)
\r
153 #define enable_ps2_act_2_irq() mSET_BIT(sbit_PS2_ACT_2, MMCR_EC_GIRQ19_ENABLE_SET)
\r
154 #define clear_ps2_act_2_source() mCLR_SRC_BIT(sbit_PS2_ACT_2, MMCR_EC_GIRQ19_SOURCE)
\r
155 #define get_ps2_act_2_source() mGET_BIT(sbit_PS2_ACT_2, MMCR_EC_GIRQ19_SOURCE)
\r
157 /* PS2 wakeup interrupt control */
\r
158 #define disable_ps2_wk_0_irq() mCLR_BIT(sbit_PS2_WK_0A, MMCR_EC_GIRQ19_ENABLE_SET)
\r
159 #define enable_ps2_wk_0_irq() mSET_BIT(sbit_PS2_WK_0A, MMCR_EC_GIRQ19_ENABLE_SET)
\r
160 #define clear_ps2_wk_0_source() mCLR_SRC_BIT(sbit_PS2_WK_0A, MMCR_EC_GIRQ19_SOURCE)
\r
161 #define get_ps2_wk_0_source() mGET_BIT(sbit_PS2_WK_0A, MMCR_EC_GIRQ19_SOURCE)
\r
163 #define disable_ps2_wk_1_irq() mCLR_BIT(sbit_PS2_WK_1B, MMCR_EC_GIRQ19_ENABLE_SET)
\r
164 #define enable_ps2_wk_1_irq() mSET_BIT(sbit_PS2_WK_1B, MMCR_EC_GIRQ19_ENABLE_SET)
\r
165 #define clear_ps2_wk_1_source() mCLR_SRC_BIT(sbit_PS2_WK_1B, MMCR_EC_GIRQ19_SOURCE)
\r
166 #define get_ps2_wk_1_source() mGET_BIT(sbit_PS2_WK_1B, MMCR_EC_GIRQ19_SOURCE)
\r
168 #define disable_ps2_wk_2_irq() mCLR_BIT(sbit_PS2_WK_2, MMCR_EC_GIRQ19_ENABLE_SET)
\r
169 #define enable_ps2_wk_2_irq() mSET_BIT(sbit_PS2_WK_2, MMCR_EC_GIRQ19_ENABLE_SET)
\r
170 #define clear_ps2_wk_2_source() mCLR_SRC_BIT(sbit_PS2_WK_2, MMCR_EC_GIRQ19_SOURCE)
\r
171 #define get_ps2_wk_2_source() mGET_BIT(sbit_PS2_WK_2, MMCR_EC_GIRQ19_SOURCE)
\r
174 /* ICT interrupt control */
\r
175 /* capture 0~5 interrupt */
\r
176 #define sbit_ICT_CAPTURE0 b_bit17
\r
177 #define sbit_ICT_CAPTURE1 b_bit18
\r
178 #define sbit_ICT_CAPTURE2 b_bit19
\r
179 #define sbit_ICT_CAPTURE3 b_bit20
\r
180 #define sbit_ICT_CAPTURE4 b_bit21
\r
181 #define sbit_ICT_CAPTURE5 b_bit22
\r
183 /* capture 0 interrupt control */
\r
184 #define disable_capture0_irq() mCLR_BIT(sbit_ICT_CAPTURE0, MMCR_EC_GIRQ23_ENABLE_SET)
\r
185 #define enable_capture0_irq() mSET_BIT(sbit_ICT_CAPTURE0, MMCR_EC_GIRQ23_ENABLE_SET)
\r
186 #define clear_capture0_source() mCLR_SRC_BIT(sbit_ICT_CAPTURE0, MMCR_EC_GIRQ23_SOURCE)
\r
187 #define get_capture0_source() mGET_BIT(sbit_ICT_CAPTURE0, MMCR_EC_GIRQ23_SOURCE)
\r
190 /* SMBus interrupt control */
\r
193 /* GPIO interrupt control */
\r
196 /* BC link interrupt control */
\r
197 /* bclink A~D interrupt */
\r
198 #define sbit_BCLINK_A_BUSY b_bit0
\r
199 #define sbit_BCLINK_A_ERR b_bit1
\r
200 #define sbit_BCLINK_A_INT b_bit2
\r
201 #define sbit_BCLINK_B_BUSY b_bit3
\r
202 #define sbit_BCLINK_B_ERR b_bit4
\r
203 #define sbit_BCLINK_B_INT b_bit5
\r
204 #define sbit_BCLINK_C_BUSY b_bit6
\r
205 #define sbit_BCLINK_C_ERR b_bit7
\r
206 #define sbit_BCLINK_C_INT b_bit8
\r
207 #define sbit_BCLINK_D_BUSY b_bit9
\r
208 #define sbit_BCLINK_D_ERR b_bit10
\r
209 #define sbit_BCLINK_D_INT b_bit11
\r
211 /* bclink B interrupt control */
\r
212 #define disable_bclink_b_busy_irq() mCLR_BIT(sbit_BCLINK_B_BUSY, MMCR_EC_GIRQ18_ENABLE_SET)
\r
213 #define enable_bclink_b_busy_irq() mSET_BIT(sbit_BCLINK_B_BUSY, MMCR_EC_GIRQ18_ENABLE_SET)
\r
214 #define clear_bclink_b_busy_source() mCLR_SRC_BIT(sbit_BCLINK_B_BUSY, MMCR_EC_GIRQ18_SOURCE)
\r
215 #define get_bclink_b_busy_source() mGET_BIT(sbit_BCLINK_B_BUSY, MMCR_EC_GIRQ18_SOURCE)
\r
217 #define disable_bclink_b_err_irq() mCLR_BIT(sbit_BCLINK_B_ERR, MMCR_EC_GIRQ18_ENABLE_SET)
\r
218 #define enable_bclink_b_err_irq() mSET_BIT(sbit_BCLINK_B_ERR, MMCR_EC_GIRQ18_ENABLE_SET)
\r
219 #define clear_bclink_b_err_source() mCLR_SRC_BIT(sbit_BCLINK_B_ERR, MMCR_EC_GIRQ18_SOURCE)
\r
220 #define get_bclink_b_err_source() mGET_BIT(sbit_BCLINK_B_ERR, MMCR_EC_GIRQ18_SOURCE)
\r
222 #define disable_bclink_b_int_irq() mCLR_BIT(sbit_BCLINK_B_INT, MMCR_EC_GIRQ18_ENABLE_SET)
\r
223 #define enable_bclink_b_int_irq() mSET_BIT(sbit_BCLINK_B_INT, MMCR_EC_GIRQ18_ENABLE_SET)
\r
224 #define clear_bclink_b_int_source() mCLR_SRC_BIT(sbit_BCLINK_B_INT, MMCR_EC_GIRQ18_SOURCE)
\r
225 #define get_bclink_b_int_source() mGET_BIT(sbit_BCLINK_B_INT, MMCR_EC_GIRQ18_SOURCE)
\r
227 /* UART interrupt control */
\r
228 #define sbit_UART_INT b_bit0
\r
230 #define disable_uart_irq() mCLR_BIT(sbit_UART_INT, MMCR_EC_GIRQ15_ENABLE_SET)
\r
231 #define enable_uart_irq() mSET_BIT(sbit_UART_INT, MMCR_EC_GIRQ15_ENABLE_SET)
\r
232 #define clear_uart_irq_source() mCLR_SRC_BIT(sbit_UART_INT, MMCR_EC_GIRQ15_SOURCE)
\r
233 #define get_uart_irq_source() mGET_BIT(sbit_UART_INT, MMCR_EC_GIRQ15_SOURCE)
\r
235 // GIRQ IDs for EC Interrupt Aggregator
\r
257 //Bitmask of GIRQ in ECIA Block Registers
\r
258 #define MEC_GIRQ08_BITMASK (1UL << (MEC_GIRQ08_ID + 8))
\r
259 #define MEC_GIRQ09_BITMASK (1UL << (MEC_GIRQ09_ID + 8))
\r
260 #define MEC_GIRQ10_BITMASK (1UL << (MEC_GIRQ10_ID + 8))
\r
261 #define MEC_GIRQ11_BITMASK (1UL << (MEC_GIRQ11_ID + 8))
\r
262 #define MEC_GIRQ12_BITMASK (1UL << (MEC_GIRQ12_ID + 8))
\r
263 #define MEC_GIRQ13_BITMASK (1UL << (MEC_GIRQ13_ID + 8))
\r
264 #define MEC_GIRQ14_BITMASK (1UL << (MEC_GIRQ14_ID + 8))
\r
265 #define MEC_GIRQ15_BITMASK (1UL << (MEC_GIRQ15_ID + 8))
\r
266 #define MEC_GIRQ16_BITMASK (1UL << (MEC_GIRQ16_ID + 8))
\r
267 #define MEC_GIRQ17_BITMASK (1UL << (MEC_GIRQ17_ID + 8))
\r
268 #define MEC_GIRQ18_BITMASK (1UL << (MEC_GIRQ18_ID + 8))
\r
269 #define MEC_GIRQ19_BITMASK (1UL << (MEC_GIRQ19_ID + 8))
\r
270 #define MEC_GIRQ20_BITMASK (1UL << (MEC_GIRQ20_ID + 8))
\r
271 #define MEC_GIRQ21_BITMASK (1UL << (MEC_GIRQ21_ID + 8))
\r
272 #define MEC_GIRQ22_BITMASK (1UL << (MEC_GIRQ22_ID + 8))
\r
273 #define MEC_GIRQ23_BITMASK (1UL << (MEC_GIRQ23_ID + 8))
\r
275 #define INTERRUPT_MODE_ALL_AGGREGATED (0u)
\r
276 #define INTERRUPT_MODE_DIRECT (1u)
\r
278 // Bit map of GIRQs whose sources can be directly connected to the NVIC
\r
279 // GIRQs 12 - 18, 23
\r
280 #define ECIA_GIRQ_DIRECT_BITMAP (0x0087F000ul)
\r
283 * n = b[7:0] = zero-based direct mapped NVIC ID
\r
284 * m = b[15:8] = zero-based aggregated NVIC ID
\r
285 * a = b[23:16] = block Aggregator register block ID
\r
286 * b = b[31:24] = block bit position in Aggregator registers
\r
288 #define IROUTE(b,a,m,n) (((uint32_t)(n)&0xFFul) + \
\r
289 (((uint32_t)(m)&0xFFul)<<8u) + \
\r
290 ((((uint32_t)(a)-8ul)&0x0F)<<16u) + \
\r
291 (((uint32_t)(b)&0x1Ful)<<24))
\r
293 #define ECIA_NVIC_ID_BITPOS (0u)
\r
294 #define ECIA_IA_NVIC_ID_BITPOS (8u)
\r
295 #define ECIA_GIRQ_ID_BITPOS (16u)
\r
296 #define ECIA_GIRQ_BIT_BITPOS (24u)
\r
301 #define GPIO_0140_IROUTE IROUTE(0,8,57,57)
\r
302 #define GPIO_0141_IROUTE IROUTE(1,8,57,57)
\r
303 #define GPIO_0142_IROUTE IROUTE(2,8,57,57)
\r
304 #define GPIO_0143_IROUTE IROUTE(3,8,57,57)
\r
305 #define GPIO_0144_IROUTE IROUTE(4,8,57,57)
\r
306 #define GPIO_0145_IROUTE IROUTE(5,8,57,57)
\r
307 #define GPIO_0147_IROUTE IROUTE(7,8,57,57)
\r
309 #define GPIO_0150_IROUTE IROUTE(8,8,57,57)
\r
310 #define GPIO_0151_IROUTE IROUTE(9,8,57,57)
\r
311 #define GPIO_0152_IROUTE IROUTE(10,8,57,57)
\r
312 #define GPIO_0153_IROUTE IROUTE(11,8,57,57)
\r
313 #define GPIO_0154_IROUTE IROUTE(12,8,57,57)
\r
314 #define GPIO_0155_IROUTE IROUTE(13,8,57,57)
\r
315 #define GPIO_0156_IROUTE IROUTE(14,8,57,57)
\r
316 #define GPIO_0157_IROUTE IROUTE(15,8,57,57)
\r
318 #define GPIO_0160_IROUTE IROUTE(16,8,57,57)
\r
319 #define GPIO_0161_IROUTE IROUTE(17,8,57,57)
\r
320 #define GPIO_0162_IROUTE IROUTE(18,8,57,57)
\r
321 #define GPIO_0163_IROUTE IROUTE(19,8,57,57)
\r
322 #define GPIO_0164_IROUTE IROUTE(20,8,57,57)
\r
323 #define GPIO_0165_IROUTE IROUTE(21,8,57,57)
\r
324 #define GPIO_0166_IROUTE IROUTE(22,8,57,57)
\r
325 #define GPIO_0167_IROUTE IROUTE(23,8,57,57)
\r
330 #define GPIO_0100_IROUTE IROUTE(0,9,58,58)
\r
331 #define GPIO_0101_IROUTE IROUTE(1,9,58,58)
\r
332 #define GPIO_0102_IROUTE IROUTE(2,9,58,58)
\r
333 #define GPIO_0103_IROUTE IROUTE(3,9,58,58)
\r
334 #define GPIO_0104_IROUTE IROUTE(4,9,58,58)
\r
335 #define GPIO_0105_IROUTE IROUTE(5,9,58,58)
\r
336 #define GPIO_0105_IROUTE IROUTE(5,9,58,58)
\r
337 #define GPIO_0107_IROUTE IROUTE(7,9,58,58)
\r
339 #define GPIO_0110_IROUTE IROUTE(8,9,58,58)
\r
340 #define GPIO_0111_IROUTE IROUTE(9,9,58,58)
\r
341 #define GPIO_0112_IROUTE IROUTE(10,9,58,58)
\r
342 #define GPIO_0113_IROUTE IROUTE(11,9,58,58)
\r
343 #define GPIO_0114_IROUTE IROUTE(12,9,58,58)
\r
344 #define GPIO_0115_IROUTE IROUTE(13,9,58,58)
\r
345 #define GPIO_0116_IROUTE IROUTE(14,9,58,58)
\r
346 #define GPIO_0117_IROUTE IROUTE(15,9,58,58)
\r
348 #define GPIO_0120_IROUTE IROUTE(16,9,58,58)
\r
349 #define GPIO_0121_IROUTE IROUTE(17,9,58,58)
\r
350 #define GPIO_0122_IROUTE IROUTE(18,9,58,58)
\r
351 #define GPIO_0124_IROUTE IROUTE(20,9,58,58)
\r
352 #define GPIO_0125_IROUTE IROUTE(21,9,58,58)
\r
353 #define GPIO_0126_IROUTE IROUTE(22,9,58,58)
\r
354 #define GPIO_0127_IROUTE IROUTE(23,9,58,58)
\r
356 #define GPIO_0130_IROUTE IROUTE(24,9,58,58)
\r
357 #define GPIO_0131_IROUTE IROUTE(25,9,58,58)
\r
358 #define GPIO_0132_IROUTE IROUTE(26,9,58,58)
\r
359 #define GPIO_0133_IROUTE IROUTE(27,9,58,58)
\r
360 #define GPIO_0134_IROUTE IROUTE(28,9,58,58)
\r
361 #define GPIO_0135_IROUTE IROUTE(29,9,58,58)
\r
362 #define GPIO_0136_IROUTE IROUTE(30,9,58,58)
\r
367 #define GPIO_0040_IROUTE IROUTE(0,10,59,59)
\r
368 #define GPIO_0041_IROUTE IROUTE(1,10,59,59)
\r
369 #define GPIO_0042_IROUTE IROUTE(2,10,59,59)
\r
370 #define GPIO_0043_IROUTE IROUTE(3,10,59,59)
\r
371 #define GPIO_0044_IROUTE IROUTE(4,10,59,59)
\r
372 #define GPIO_0045_IROUTE IROUTE(5,10,59,59)
\r
373 #define GPIO_0045_IROUTE IROUTE(5,10,59,59)
\r
374 #define GPIO_0047_IROUTE IROUTE(7,10,59,59)
\r
376 #define GPIO_0050_IROUTE IROUTE(8,10,59,59)
\r
377 #define GPIO_0051_IROUTE IROUTE(9,10,59,59)
\r
378 #define GPIO_0052_IROUTE IROUTE(10,10,59,59)
\r
379 #define GPIO_0053_IROUTE IROUTE(11,10,59,59)
\r
380 #define GPIO_0054_IROUTE IROUTE(12,10,59,59)
\r
381 #define GPIO_0055_IROUTE IROUTE(13,10,59,59)
\r
382 #define GPIO_0056_IROUTE IROUTE(14,10,59,59)
\r
383 #define GPIO_0057_IROUTE IROUTE(15,10,59,59)
\r
385 #define GPIO_0060_IROUTE IROUTE(16,10,59,59)
\r
386 #define GPIO_0061_IROUTE IROUTE(17,10,59,59)
\r
387 #define GPIO_0062_IROUTE IROUTE(18,10,59,59)
\r
388 #define GPIO_0063_IROUTE IROUTE(19,10,59,59)
\r
389 #define GPIO_0064_IROUTE IROUTE(20,10,59,59)
\r
390 #define GPIO_0065_IROUTE IROUTE(21,10,59,59)
\r
391 #define GPIO_0066_IROUTE IROUTE(22,10,59,59)
\r
392 #define GPIO_0067_IROUTE IROUTE(23,10,59,59)
\r
394 #define GPIO_0070_IROUTE IROUTE(24,10,59,59)
\r
395 #define GPIO_0071_IROUTE IROUTE(25,10,59,59)
\r
396 #define GPIO_0072_IROUTE IROUTE(26,10,59,59)
\r
397 #define GPIO_0073_IROUTE IROUTE(27,10,59,59)
\r
398 #define GPIO_0074_IROUTE IROUTE(28,10,59,59)
\r
399 #define GPIO_0075_IROUTE IROUTE(29,10,59,59)
\r
400 #define GPIO_0076_IROUTE IROUTE(30,10,59,59)
\r
405 #define GPIO_0000_IROUTE IROUTE(0,11,60,60)
\r
406 #define GPIO_0001_IROUTE IROUTE(1,11,60,60)
\r
407 #define GPIO_0002_IROUTE IROUTE(2,11,60,60)
\r
408 #define GPIO_0003_IROUTE IROUTE(3,11,60,60)
\r
409 #define GPIO_0004_IROUTE IROUTE(4,11,60,60)
\r
410 #define GPIO_0005_IROUTE IROUTE(5,11,60,60)
\r
411 #define GPIO_0006_IROUTE IROUTE(6,11,60,60)
\r
412 #define GPIO_0007_IROUTE IROUTE(7,11,60,60)
\r
414 #define GPIO_0010_IROUTE IROUTE(8,11,60,60)
\r
415 #define GPIO_0011_IROUTE IROUTE(9,11,60,60)
\r
416 #define GPIO_0012_IROUTE IROUTE(10,11,60,60)
\r
417 #define GPIO_0013_IROUTE IROUTE(11,11,60,60)
\r
418 #define GPIO_0014_IROUTE IROUTE(12,11,60,60)
\r
419 #define GPIO_0015_IROUTE IROUTE(13,11,60,60)
\r
420 #define GPIO_0016_IROUTE IROUTE(14,11,60,60)
\r
421 #define GPIO_0017_IROUTE IROUTE(15,11,60,60)
\r
423 #define GPIO_0020_IROUTE IROUTE(16,11,60,60)
\r
424 #define GPIO_0021_IROUTE IROUTE(17,11,60,60)
\r
425 #define GPIO_0022_IROUTE IROUTE(18,11,60,60)
\r
426 #define GPIO_0023_IROUTE IROUTE(19,11,60,60)
\r
427 #define GPIO_0024_IROUTE IROUTE(20,11,60,60)
\r
428 #define GPIO_0025_IROUTE IROUTE(21,11,60,60)
\r
429 #define GPIO_0026_IROUTE IROUTE(22,11,60,60)
\r
430 #define GPIO_0027_IROUTE IROUTE(23,11,60,60)
\r
432 #define GPIO_0030_IROUTE IROUTE(24,11,60,60)
\r
433 #define GPIO_0031_IROUTE IROUTE(25,11,60,60)
\r
434 #define GPIO_0032_IROUTE IROUTE(26,11,60,60)
\r
435 #define GPIO_0033_IROUTE IROUTE(27,11,60,60)
\r
436 #define GPIO_0034_IROUTE IROUTE(28,11,60,60)
\r
437 #define GPIO_0035_IROUTE IROUTE(29,11,60,60)
\r
438 #define GPIO_0036_IROUTE IROUTE(30,11,60,60)
\r
443 #define SMB0_IROUTE IROUTE(0,12,61,0)
\r
444 #define SMB1_IROUTE IROUTE(1,12,61,1)
\r
445 #define SMB2_IROUTE IROUTE(2,12,61,2)
\r
446 #define SMB3_IROUTE IROUTE(3,12,61,3)
\r
447 // SMB wakes have no direct connection to NVIC, always aggregated
\r
448 #define SMB0_WAKE_IROUTE IROUTE(4,12,61,61)
\r
449 #define SMB1_WAKE_IROUTE IROUTE(5,12,61,61)
\r
450 #define SMB2_WAKE_IROUTE IROUTE(6,12,61,61)
\r
451 #define SMB3_WAKE_IROUTE IROUTE(7,12,61,61)
\r
452 #define SMB4_WAKE_IROUTE IROUTE(8,12,61,61)
\r
457 #define DMA0_IROUTE IROUTE(16,13,62,4)
\r
458 #define DMA1_IROUTE IROUTE(17,13,62,5)
\r
459 #define DMA2_IROUTE IROUTE(18,13,62,6)
\r
460 #define DMA3_IROUTE IROUTE(19,13,62,7)
\r
461 #define DMA4_IROUTE IROUTE(20,13,62,8)
\r
462 #define DMA5_IROUTE IROUTE(21,13,62,9)
\r
463 #define DMA6_IROUTE IROUTE(22,13,62,10)
\r
464 #define DMA7_IROUTE IROUTE(23,13,62,11)
\r
465 #define DMA8_IROUTE IROUTE(24,13,62,81)
\r
466 #define DMA9_IROUTE IROUTE(25,13,62,82)
\r
467 #define DMA10_IROUTE IROUTE(26,13,62,83)
\r
468 #define DMA11_IROUTE IROUTE(27,13,62,84)
\r
473 #define LPC_BERR_IROUTE IROUTE(2,14,63,12)
\r
478 #define UART0_IROUTE IROUTE(0,15,64,13)
\r
479 #define EMI0_IROUTE IROUTE(2,15,64,14)
\r
480 #define ACPI_EC0_IBF_IROUTE IROUTE(6,15,64,15)
\r
481 #define ACPI_EC0_OBF_IROUTE IROUTE(7,15,64,16)
\r
482 #define ACPI_EC1_IBF_IROUTE IROUTE(8,15,64,17)
\r
483 #define ACPI_EC1_OBF_IROUTE IROUTE(9,15,64,18)
\r
484 #define ACPI_PM1_CTL_IROUTE IROUTE(10,15,64,19)
\r
485 #define ACPI_PM1_EN_IROUTE IROUTE(11,15,64,20)
\r
486 #define ACPI_PM1_STS_IROUTE IROUTE(12,15,64,21)
\r
487 #define EM8042_OBF_IROUTE IROUTE(13,15,64,22)
\r
488 #define EM8042_IBF_IROUTE IROUTE(14,15,64,23)
\r
489 #define MBOX_IROUTE IROUTE(15,15,64,24)
\r
490 #define MBOX_DATA_IROUTE IROUTE(16,15,64,40)
\r
495 #define PECI_IROUTE IROUTE(3,16,65,25)
\r
500 #define TACH0_IROUTE IROUTE(0,17,66,26)
\r
501 #define TACH1_IROUTE IROUTE(1,17,66,27)
\r
502 #define PS2_0_WAKE_IROUTE IROUTE(2,17,66,66)
\r
503 #define PS2_1_WAKE_IROUTE IROUTE(3,17,66,66)
\r
504 #define PS2_2_WAKE_IROUTE IROUTE(4,17,66,66)
\r
505 #define PS2_3_WAKE_IROUTE IROUTE(5,17,66,66)
\r
506 #define BC_WAKE_IROUTE IROUTE(6,17,66,66)
\r
507 #define ADC_SNGL_IROUTE IROUTE(10,17,66,28)
\r
508 #define ADC_RPT_IROUTE IROUTE(11,17,66,29)
\r
509 #define ADC2PWM1_IROUTE IROUTE(12,17,66,30)
\r
510 #define ADC2PWM2_IROUTE IROUTE(13,17,66,31)
\r
511 #define PS2_0_IROUTE IROUTE(14,17,66,32)
\r
512 #define PS2_1_IROUTE IROUTE(15,17,66,33)
\r
513 #define PS2_2_IROUTE IROUTE(16,17,66,34)
\r
514 #define PS2_3_IROUTE IROUTE(17,17,66,35)
\r
515 #define RTC_IROUTE IROUTE(18,17,66,91)
\r
516 #define RTC_ALARM_IROUTE IROUTE(19,17,66,92)
\r
517 #define HTIMER_IROUTE IROUTE(20,17,66,38)
\r
518 #define KSC_IROUTE IROUTE(21,17,66,39)
\r
519 #define KSC_WAKE_IROUTE IROUTE(22,17,66,66)
\r
520 #define RPM_STALL_IROUTE IROUTE(23,17,66,41)
\r
521 #define RPM_SPIN_IROUTE IROUTE(24,17,66,42)
\r
522 #define PFR_IROUTE IROUTE(25,17,66,43)
\r
523 #define LED0_IROUTE IROUTE(26,17,66,44)
\r
524 #define LED1_IROUTE IROUTE(27,17,66,45)
\r
525 #define LED2_IROUTE IROUTE(28,17,66,46)
\r
526 #define BCM_ERR_IROUTE IROUTE(29,17,66,47)
\r
527 #define BCM_BUSY_IROUTE IROUTE(30,17,66,48)
\r
532 #define SPI0_TX_IROUTE IROUTE(0,18,67,36)
\r
533 #define SPI0_RX_IROUTE IROUTE(1,18,67,37)
\r
534 #define SPI1_TX_IROUTE IROUTE(2,18,67,55)
\r
535 #define SPI1_RX_IROUTE IROUTE(3,18,67,56)
\r
536 #define LED3_IROUTE IROUTE(4,18,67,85)
\r
537 #define PKE_ERR_IROUTE IROUTE(5,18,67,86)
\r
538 #define PKE_END_IROUTE IROUTE(6,18,67,87)
\r
539 #define NDRNG_IROUTE IROUTE(7,18,67,88)
\r
540 #define AES_IROUTE IROUTE(8,18,67,89)
\r
541 #define HASH_IROUTE IROUTE(9,18,67,90)
\r
544 // GIRQ19, Aggregated only
\r
546 #define LRESET_IROUTE IROUTE(0,19,68,68)
\r
547 #define VCC_PWRGD_IROUTE IROUTE(1,19,68,68)
\r
550 // GIRQ20, Aggregated only
\r
552 #define GPIO_0200_IROUTE IROUTE(0,20,69,69)
\r
553 #define GPIO_0201_IROUTE IROUTE(1,20,69,69)
\r
554 #define GPIO_0202_IROUTE IROUTE(2,20,69,69)
\r
555 #define GPIO_0203_IROUTE IROUTE(3,20,69,69)
\r
556 #define GPIO_0204_IROUTE IROUTE(4,20,69,69)
\r
557 #define GPIO_0206_IROUTE IROUTE(6,20,69,69)
\r
559 #define GPIO_0210_IROUTE IROUTE(8,20,69,69)
\r
560 #define GPIO_0211_IROUTE IROUTE(9,20,69,69)
\r
561 #define GPIO_0212_IROUTE IROUTE(10,20,69,69)
\r
562 #define GPIO_0213_IROUTE IROUTE(11,20,69,69)
\r
577 #define BTMR0_IROUTE IROUTE(0,23,72,49)
\r
578 #define BTMR1_IROUTE IROUTE(1,23,72,50)
\r
579 #define BTMR2_IROUTE IROUTE(2,23,72,51)
\r
580 #define BTMR3_IROUTE IROUTE(3,23,72,52)
\r
581 #define BTMR4_IROUTE IROUTE(4,23,72,53)
\r
582 #define BTMR5_IROUTE IROUTE(5,23,72,54)
\r
584 // GIRQ08 Bit Positions
\r
585 #define GIRQ08_GPIO_0140_BITPOS (0)
\r
586 #define GIRQ08_GPIO_0141_BITPOS (1)
\r
587 #define GIRQ08_GPIO_0142_BITPOS (2)
\r
588 #define GIRQ08_GPIO_0143_BITPOS (3)
\r
589 #define GIRQ08_GPIO_0144_BITPOS (4)
\r
590 #define GIRQ08_GPIO_0145_BITPOS (5)
\r
591 //#define GIRQ08_GPIO_0146_BITPOS (6) RESERVED
\r
592 #define GIRQ08_GPIO_0147_BITPOS (7)
\r
594 #define GIRQ08_GPIO_0150_BITPOS (8)
\r
595 #define GIRQ08_GPIO_0151_BITPOS (9)
\r
596 #define GIRQ08_GPIO_0152_BITPOS (10)
\r
597 #define GIRQ08_GPIO_0153_BITPOS (11)
\r
598 #define GIRQ08_GPIO_0154_BITPOS (12)
\r
599 #define GIRQ08_GPIO_0155_BITPOS (13)
\r
600 #define GIRQ08_GPIO_0156_BITPOS (14)
\r
601 #define GIRQ08_GPIO_0157_BITPOS (15)
\r
603 #define GIRQ08_GPIO_0160_BITPOS (16)
\r
604 #define GIRQ08_GPIO_0161_BITPOS (17)
\r
605 #define GIRQ08_GPIO_0162_BITPOS (18)
\r
606 #define GIRQ08_GPIO_0163_BITPOS (19)
\r
607 #define GIRQ08_GPIO_0164_BITPOS (20)
\r
608 #define GIRQ08_GPIO_0165_BITPOS (21)
\r
609 #define GIRQ08_GPIO_0166_BITPOS (22)
\r
610 #define GIRQ08_GPIO_0167_BITPOS (23)
\r
612 #define GIRQ08_MASK (0x00FFFFBFul)
\r
613 #define GIRQ08_WAKE_CAPABLE_MASK (0x00FFFFBFul)
\r
616 // GIRQ09 Bit Positions
\r
617 #define GIRQ09_GPIO_0100_BITPOS (0)
\r
618 #define GIRQ09_GPIO_0101_BITPOS (1)
\r
619 #define GIRQ09_GPIO_0102_BITPOS (2)
\r
620 #define GIRQ09_GPIO_0103_BITPOS (3)
\r
621 #define GIRQ09_GPIO_0104_BITPOS (4)
\r
622 #define GIRQ09_GPIO_0105_BITPOS (5)
\r
623 #define GIRQ09_GPIO_0106_BITPOS (6)
\r
624 #define GIRQ09_GPIO_0107_BITPOS (7)
\r
626 #define GIRQ09_GPIO_0110_BITPOS (8)
\r
627 #define GIRQ09_GPIO_0111_BITPOS (9)
\r
628 #define GIRQ09_GPIO_0112_BITPOS (10)
\r
629 #define GIRQ09_GPIO_0113_BITPOS (11)
\r
630 #define GIRQ09_GPIO_0114_BITPOS (12)
\r
631 #define GIRQ09_GPIO_0115_BITPOS (13)
\r
632 #define GIRQ09_GPIO_0116_BITPOS (14)
\r
633 #define GIRQ09_GPIO_0117_BITPOS (15)
\r
635 #define GIRQ09_GPIO_0120_BITPOS (16)
\r
636 #define GIRQ09_GPIO_0121_BITPOS (17)
\r
637 #define GIRQ09_GPIO_0122_BITPOS (18)
\r
638 //#define GIRQ09_GPIO_0123_BITPOS (19) RESERVED
\r
639 #define GIRQ09_GPIO_0124_BITPOS (20)
\r
640 #define GIRQ09_GPIO_0125_BITPOS (21)
\r
641 #define GIRQ09_GPIO_0126_BITPOS (22)
\r
642 #define GIRQ09_GPIO_0127_BITPOS (23)
\r
644 #define GIRQ09_GPIO_0130_BITPOS (24)
\r
645 #define GIRQ09_GPIO_0131_BITPOS (25)
\r
646 #define GIRQ09_GPIO_0132_BITPOS (26)
\r
647 #define GIRQ09_GPIO_0133_BITPOS (27)
\r
648 #define GIRQ09_GPIO_0134_BITPOS (28)
\r
649 #define GIRQ09_GPIO_0135_BITPOS (29)
\r
650 #define GIRQ09_GPIO_0136_BITPOS (30)
\r
651 //#define GIRQ09_GPIO_0137_BITPOS (31) RESERVED
\r
653 #define GIRQ09_MASK (0x7FF7FFFFul)
\r
654 #define GIRQ09_WAKE_CAPABLE_MASK (0x7FF7FFFFul)
\r
657 // GIRQ10 Bit Positions
\r
658 #define GIRQ10_GPIO_0040_BITPOS (0)
\r
659 #define GIRQ10_GPIO_0041_BITPOS (1)
\r
660 #define GIRQ10_GPIO_0042_BITPOS (2)
\r
661 #define GIRQ10_GPIO_0043_BITPOS (3)
\r
662 #define GIRQ10_GPIO_0044_BITPOS (4)
\r
663 #define GIRQ10_GPIO_0045_BITPOS (5)
\r
664 #define GIRQ10_GPIO_0046_BITPOS (6)
\r
665 #define GIRQ10_GPIO_0047_BITPOS (7)
\r
667 #define GIRQ10_GPIO_0050_BITPOS (8)
\r
668 #define GIRQ10_GPIO_0051_BITPOS (9)
\r
669 #define GIRQ10_GPIO_0052_BITPOS (10)
\r
670 #define GIRQ10_GPIO_0053_BITPOS (11)
\r
671 #define GIRQ10_GPIO_0054_BITPOS (12)
\r
672 #define GIRQ10_GPIO_0055_BITPOS (13)
\r
673 #define GIRQ10_GPIO_0056_BITPOS (14)
\r
674 #define GIRQ10_GPIO_0057_BITPOS (15)
\r
676 #define GIRQ10_GPIO_0060_BITPOS (16)
\r
677 #define GIRQ10_GPIO_0061_BITPOS (17)
\r
678 #define GIRQ10_GPIO_0062_BITPOS (18)
\r
679 #define GIRQ10_GPIO_0063_BITPOS (19)
\r
680 #define GIRQ10_GPIO_0064_BITPOS (20)
\r
681 #define GIRQ10_GPIO_0065_BITPOS (21)
\r
682 #define GIRQ10_GPIO_0066_BITPOS (22)
\r
683 #define GIRQ10_GPIO_0067_BITPOS (23)
\r
685 #define GIRQ10_GPIO_0070_BITPOS (24)
\r
686 #define GIRQ10_GPIO_0071_BITPOS (25)
\r
687 #define GIRQ10_GPIO_0072_BITPOS (26)
\r
688 #define GIRQ10_GPIO_0073_BITPOS (27)
\r
689 #define GIRQ10_GPIO_0074_BITPOS (28)
\r
690 #define GIRQ10_GPIO_0075_BITPOS (29)
\r
691 #define GIRQ10_GPIO_0076_BITPOS (30)
\r
692 //#define GIRQ10_GPIO_0077_BITPOS (31) RESERVED
\r
694 #define GIRQ10_MASK (0x7FFFFFFFul)
\r
695 #define GIRQ10_WAKE_CAPABLE_MASK (0x7FFFFFFFul)
\r
698 // GIRQ11 Bit Positions
\r
699 #define GIRQ11_GPIO_0000_BITPOS (0)
\r
700 #define GIRQ11_GPIO_0001_BITPOS (1)
\r
701 #define GIRQ11_GPIO_0002_BITPOS (2)
\r
702 #define GIRQ11_GPIO_0003_BITPOS (3)
\r
703 #define GIRQ11_GPIO_0004_BITPOS (4)
\r
704 #define GIRQ11_GPIO_0005_BITPOS (5)
\r
705 #define GIRQ11_GPIO_0006_BITPOS (6)
\r
706 #define GIRQ11_GPIO_0007_BITPOS (7)
\r
708 #define GIRQ11_GPIO_0010_BITPOS (8)
\r
709 #define GIRQ11_GPIO_0011_BITPOS (9)
\r
710 #define GIRQ11_GPIO_0012_BITPOS (10)
\r
711 #define GIRQ11_GPIO_0013_BITPOS (11)
\r
712 #define GIRQ11_GPIO_0014_BITPOS (12)
\r
713 #define GIRQ11_GPIO_0015_BITPOS (13)
\r
714 #define GIRQ11_GPIO_0016_BITPOS (14)
\r
715 #define GIRQ11_GPIO_0017_BITPOS (15)
\r
717 #define GIRQ11_GPIO_0020_BITPOS (16)
\r
718 #define GIRQ11_GPIO_0021_BITPOS (17)
\r
719 #define GIRQ11_GPIO_0022_BITPOS (18)
\r
720 #define GIRQ11_GPIO_0023_BITPOS (19)
\r
721 #define GIRQ11_GPIO_0024_BITPOS (20)
\r
722 #define GIRQ11_GPIO_0025_BITPOS (21)
\r
723 #define GIRQ11_GPIO_0026_BITPOS (22)
\r
724 #define GIRQ11_GPIO_0027_BITPOS (23)
\r
726 #define GIRQ11_GPIO_0030_BITPOS (24)
\r
727 #define GIRQ11_GPIO_0031_BITPOS (25)
\r
728 #define GIRQ11_GPIO_0032_BITPOS (26)
\r
729 #define GIRQ11_GPIO_0033_BITPOS (27)
\r
730 #define GIRQ11_GPIO_0034_BITPOS (28)
\r
731 #define GIRQ11_GPIO_0035_BITPOS (29)
\r
732 #define GIRQ11_GPIO_0036_BITPOS (30)
\r
733 //#define GIRQ11_GPIO_0037_BITPOS (31) RESERVED
\r
735 #define GIRQ11_MASK (0x7FFFFFFFul)
\r
736 #define GIRQ11_WAKE_CAPABLE_MASK (0x7FFFFFFFul)
\r
739 // GIRQ12 Bit Positions
\r
740 #define GIRQ12_SMBUS0_BITPOS (0)
\r
741 #define GIRQ12_SMBUS1_BITPOS (1)
\r
742 #define GIRQ12_SMBUS2_BITPOS (2)
\r
743 #define GIRQ12_SMBUS3_BITPOS (3)
\r
744 #define GIRQ12_SMBUS0_WAKE_BITPOS (4)
\r
745 #define GIRQ12_SMBUS1_WAKE_BITPOS (5)
\r
746 #define GIRQ12_SMBUS2_WAKE_BITPOS (6)
\r
747 #define GIRQ12_SMBUS3_WAKE_BITPOS (7)
\r
748 #define GIRQ12_SMBUS4_WAKE_BITPOS (8)
\r
749 // RESERVED bits[31:9]
\r
750 #define GIRQ12_MASK (0x01FFul)
\r
751 #define GIRQ12_WAKE_CAPABLE_MASK (0x01F0ul)
\r
754 // GIRQ13 Bit Positions
\r
755 #define GIRQ13_DMA0_BITPOS (16)
\r
756 #define GIRQ13_DMA1_BITPOS (17)
\r
757 #define GIRQ13_DMA2_BITPOS (18)
\r
758 #define GIRQ13_DMA3_BITPOS (19)
\r
759 #define GIRQ13_DMA4_BITPOS (20)
\r
760 #define GIRQ13_DMA5_BITPOS (21)
\r
761 #define GIRQ13_DMA6_BITPOS (22)
\r
762 #define GIRQ13_DMA7_BITPOS (23)
\r
763 #define GIRQ13_DMA8_BITPOS (24)
\r
764 #define GIRQ13_DMA9_BITPOS (25)
\r
765 #define GIRQ13_DMA10_BITPOS (26)
\r
766 #define GIRQ13_DMA11_BITPOS (27)
\r
768 #define GIRQ13_MASK (0x0FFF0000ul)
\r
769 #define GIRQ13_WAKE_CAPABLE_MASK (0x00000000ul)
\r
772 // GIRQ14 Bit Positions
\r
773 #define GIRQ14_LPC_BITPOS (2)
\r
775 #define GIRQ14_MASK (0x04ul)
\r
776 #define GIRQ14_WAKE_CAPABLE_MASK (0x00ul)
\r
779 // GIRQ15 Bit Positions
\r
780 #define GIRQ15_UART0_BITPOS (0)
\r
781 #define GIRQ15_IMAP_BITPOS (2)
\r
782 #define GIRQ15_KBD_K_BITPOS (3)
\r
783 #define GIRQ15_KBD_M_BITPOS (4)
\r
784 #define GIRQ15_ACPI0_IBF_BITPOS (6)
\r
785 #define GIRQ15_ACPI0_OBF_BITPOS (7)
\r
786 #define GIRQ15_ACPI1_IBF_BITPOS (8)
\r
787 #define GIRQ15_ACPI1_OBF_BITPOS (9)
\r
788 #define GIRQ15_ACPI_PM1CTL_BITPOS (10)
\r
789 #define GIRQ15_ACPI_PM1EN_BITPOS (11)
\r
790 #define GIRQ15_ACPI_PM1STS_BITPOS (12)
\r
791 #define GIRQ15_MF8042_OBF_BITPOS (13)
\r
792 #define GIRQ15_MF8042_IBF_BITPOS (14)
\r
793 #define GIRQ15_MAILBOX_BITPOS (15)
\r
794 #define GIRQ15_MAILBOX_DATA_BITPOS (16)
\r
796 #define GIRQ15_MASK (0x01FFDDul)
\r
797 #define GIRQ15_WAKE_CAPABLE_MASK (0x000000ul)
\r
800 // GIRQ16 Bit Positions
\r
801 #define GIRQ16_PECI_BITPOS (3)
\r
803 #define GIRQ16_MASK (0x08ul)
\r
804 #define GIRQ16_WAKE_CAPABLE_MASK (0x00ul)
\r
807 // GIRQ17 Bit Positions
\r
808 #define GIRQ17_TACH0_BITPOS (0)
\r
809 #define GIRQ17_TACH1_BITPOS (1)
\r
810 #define GIRQ17_PS2_0_WAKE_BITPOS (2)
\r
811 #define GIRQ17_PS2_1_WAKE_BITPOS (3)
\r
812 #define GIRQ17_PS2_2_WAKE_BITPOS (4)
\r
813 #define GIRQ17_PS2_3_WAKE_BITPOS (5)
\r
814 #define GIRQ17_BC_WAKE_BITPOS (6)
\r
816 #define GIRQ17_ADC_INT0_BITPOS (10)
\r
817 #define GIRQ17_ADC_INT1_BITPOS (11)
\r
818 #define GIRQ17_V2P_INT0_BITPOS (12)
\r
819 #define GIRQ17_V2P_INT1_BITPOS (13)
\r
820 #define GIRQ17_PS2_0_BITPOS (14)
\r
821 #define GIRQ17_PS2_1_BITPOS (15)
\r
822 #define GIRQ17_PS2_2_BITPOS (16)
\r
823 #define GIRQ17_PS2_3_BITPOS (17)
\r
824 // RESERVED b[19:18]
\r
825 #define GIRQ17_HIBTMR_BITPOS (20)
\r
826 #define GIRQ17_KEY_INT_BITPOS (21)
\r
827 #define GIRQ17_KEY_INT_WAKE_BITPOS (22)
\r
828 #define GIRQ17_RPM_STALL_BITPOS (23)
\r
829 #define GIRQ17_RPM_SPIN_BITPOS (24)
\r
830 #define GIRQ17_VBAT_BITPOS (25)
\r
831 #define GIRQ17_LED0_BITPOS (26)
\r
832 #define GIRQ17_LED1_BITPOS (27)
\r
833 #define GIRQ17_LED2_BITPOS (28)
\r
834 #define GIRQ17_MBC_ERR_BITPOS (29)
\r
835 #define GIRQ17_MBC_BUSY_BITPOS (30)
\r
837 #define GIRQ17_MASK (0x7FF3FC7Ful)
\r
838 #define GIRQ17_WAKE_CAPABLE_MASK (0x0230007Cul)
\r
841 // GIRQ18 Bit Positions
\r
842 #define GIRQ18_SPI0_TX_BITPOS (0)
\r
843 #define GIRQ18_SPI0_RX_BITPOS (1)
\r
844 #define GIRQ18_SPI1_TX_BITPOS (2)
\r
845 #define GIRQ18_SPI1_RX_BITPOS (3)
\r
846 #define GIRQ18_LED3_BITPOS (4) // NVIC 85
\r
847 #define GIRQ18_PKE_ERR_BITPOS (5) // NVIC 86
\r
848 #define GIRQ18_PKE_END_BITPOS (6) // NVIC 87
\r
849 #define GIRQ18_TRNG_BITPOS (7) // NVIC 88
\r
850 #define GIRQ18_AES_BITPOS (8) // NVIC 89
\r
851 #define GIRQ18_HASH_BITPOS (9) // NVIC 90
\r
853 #define GIRQ18_MASK (0x0FFul)
\r
854 #define GIRQ18_WAKE_CAPABLE_MASK (0x000ul)
\r
857 // GIRQ19 Bit Positions
\r
858 #define GIRQ19_LRESET_BITPOS (0)
\r
859 #define GIRQ19_VCC_PWRGD_BITPOS (1)
\r
861 #define GIRQ19_MASK (0x03ul)
\r
862 #define GIRQ19_WAKE_CAPABLE_MASK (0x03ul)
\r
865 // GIRQ20 Bit Positions
\r
866 #define GIRQ20_GPIO_0200_BITPOS (0)
\r
867 #define GIRQ20_GPIO_0201_BITPOS (1)
\r
868 #define GIRQ20_GPIO_0202_BITPOS (2)
\r
869 #define GIRQ20_GPIO_0203_BITPOS (3)
\r
870 #define GIRQ20_GPIO_0204_BITPOS (4)
\r
871 //#define GIRQ20_GPIO_0205_BITPOS (5)
\r
872 #define GIRQ20_GPIO_0206_BITPOS (6)
\r
873 //#define GIRQ20_GPIO_0207_BITPOS (7)
\r
875 #define GIRQ20_GPIO_0210_BITPOS (8)
\r
876 #define GIRQ20_GPIO_0211_BITPOS (9)
\r
877 #define GIRQ20_GPIO_0212_BITPOS (10)
\r
878 #define GIRQ20_GPIO_0213_BITPOS (11)
\r
880 #define GIRQ20_MASK (0x0F5Ful)
\r
881 #define GIRQ20_WAKE_CAPABLE_MASK (0x0F5Ful)
\r
884 // GIRQ21 Bit Positions
\r
885 #define GIRQ21_MASK (0x00ul)
\r
886 #define GIRQ21_WAKE_CAPABLE_MASK (0x00ul)
\r
888 // GIRQ22 Bit Positions
\r
889 #define GIRQ22_MASK (0x00ul)
\r
890 #define GIRQ22_WAKE_CAPABLE_MASK (0x00ul)
\r
892 // GIRQ23 Bit Positions
\r
893 #define GIRQ23_TMR0_BITPOS (0)
\r
894 #define GIRQ23_TMR1_BITPOS (1)
\r
895 #define GIRQ23_TMR2_BITPOS (2)
\r
896 #define GIRQ23_TMR3_BITPOS (3)
\r
897 #define GIRQ23_TMR4_BITPOS (4)
\r
898 #define GIRQ23_TMR5_BITPOS (5)
\r
900 #define GIRQ23_MASK (0x03Ful)
\r
901 #define GIRQ23_WAKE_CAPABLE_MASK (0x000ul)
\r
904 /* ------------------------------------------------------------------------------- */
\r
905 /* NVIC,ECIA Routing Policy for Direct Mode */
\r
906 /* ------------------------------------------------------------------------------- */
\r
907 /* In Direct Mode, some interrupts could be configured to be used as aggregated.
\r
909 * 1. Always set ECS Interrupt Direct enable bit.
\r
910 * 2. If GIRQn aggregated set Block Enable bit.
\r
911 * 3. If GIRQn direct then clear Block Enable bit and enable individual NVIC inputs.
\r
912 * Switching issues:
\r
913 * Aggregate enable/disable requires set/clear single GIRQn bit in GIRQ Block En/Clr registers.
\r
914 * Also requires set/clear of individual NVIC Enables.
\r
916 * Note: interrupt_is_girq_direct() internal function uses this policy to detect
\r
917 * if any interrupt is configured as direct or aggregated
\r
920 /** Initialize EC Interrupt Aggregator
\r
921 * @param mode 1 - Direct Map mode, 0 - Fully Aggregated Mode
\r
922 * @param girq_bitmask - BitMask of GIRQ to be configured as aggregated
\r
923 * This parameter is only applicable in direct mode.
\r
924 * @note All GPIO's and wake capable sources are always
\r
925 * aggregated! GPIO's interrupts will still work in direct mode.
\r
926 * Block wakes are not be routed to the processor in direct
\r
928 * Note2: This function disables and enables global interrupt
\r
930 void interrupt_init(uint8_t mode, uint32_t girq_bitmask);
\r
932 /** Set interrupt routing mode to aggregated or direct.
\r
933 * @param mode 1 = Direct (except GPIO & wake), 0 = All Aggregated
\r
934 * @note In direct mode, one could enable certain GIRQs as aggregated using
\r
935 * p_interrupt_ecia_block_enable_set function
\r
937 void interrupt_mode_set(uint8_t mode);
\r
939 /** Clears all individual interrupts Enables and Source in ECIA,
\r
940 * and Clears all NVIC external enables and pending bits
\r
942 void interrupt_reset(void);
\r
944 /** Enables interrupt for a device
\r
945 * @param dev_iroute - source IROUTING information
\r
946 * @note This function disables and enables global interrupt
\r
948 void interrupt_device_enable(uint32_t dev_iroute);
\r
950 /** Disables interrupt for a device
\r
951 * @param dev_iroute - source IROUTING information
\r
952 * @note This function disables and enables global interrupt
\r
954 void interrupt_device_disable(uint32_t dev_iroute);
\r
956 /* ------------------------------------------------------------------------------- */
\r
957 /* ECIA APIs using device IROUTE() as input */
\r
958 /* ------------------------------------------------------------------------------- */
\r
960 /** Clear Source in the ECIA for the device
\r
961 * @param devi - device IROUTING value
\r
963 void interrupt_device_ecia_source_clear(const uint32_t dev_iroute);
\r
965 /** Get the Source bit in the ECIA for the device
\r
966 * @param devi - device IROUTING value
\r
967 * @return 0 if source bit not set; else non-zero value
\r
969 uint32_t interrupt_device_ecia_source_get(const uint32_t dev_iroute);
\r
971 /** Get the Result bit in the ECIA for the device
\r
972 * @param devi - device IROUTING value
\r
973 * @return 0 if result bit not set; else non-zero value
\r
975 uint32_t interrupt_device_ecia_result_get(const uint32_t dev_iroute);
\r
977 /* ------------------------------------------------------------------------------- */
\r
978 /* NVIC APIs using device IROUTE() as input */
\r
979 /* ------------------------------------------------------------------------------- */
\r
980 /* Note that if the device interrupt is aggregated, then these APIs would affect the
\r
981 * NVIC corresponding to the aggregated GIRQ
\r
984 /** Enable/Disable the NVIC (in the NVIC controller) for the device
\r
985 * @param dev_iroute : source IROUTING information (encoded in a uint32_t)
\r
986 * @param en_flag : 1 = Enable the NVIC IRQ, 0 = Disable the NVIC IRQ
\r
987 * @note Recommended to use interrupt_device_enable, interrupt_device_disable
\r
988 * to enable/disable interrupts for the device, since those APIs configure ECIA as well
\r
990 void interrupt_device_nvic_enable(uint32_t dev_iroute, uint8_t en_flag);
\r
992 /** Set NVIC priority for specified peripheral interrupt source
\r
993 * @param dev_iroute - source IROUTING information (encoded in a uint32_t)
\r
994 * @param nvic_pri - NVIC Priority
\r
995 * @note 1. If ECIA is in aggregated mode, the priority affects all interrupt
\r
996 * sources in the GIRQ.
\r
997 * 2. This function disables and enables global interrupt
\r
999 void interrupt_device_nvic_priority_set(const uint32_t dev_iroute, const uint8_t nvic_pri);
\r
1001 /** Return NVIC priority for interrupt source
\r
1002 * @param dev_iroute - source IROUTING information
\r
1003 * @return uint32_t NVIC priority
\r
1005 uint32_t interrupt_device_nvic_priority_get(const uint32_t dev_iroute);
\r
1007 /** Return NVIC pending for interrupt source
\r
1008 * @param dev_iroute - source IROUTING information
\r
1009 * @return uint8_t 0(not pending), 1 (pending in NVIC)
\r
1012 uint8_t interrupt_device_nvic_pending_get(const uint32_t dev_iroute);
\r
1014 /** Set NVIC pending for interrupt source
\r
1015 * @param dev_iroute - source IROUTING information
\r
1017 void interrupt_device_nvic_pending_set(const uint32_t dev_iroute);
\r
1019 /** Clears NVIC pending for interrupt source
\r
1020 * @param dev_iroute - source IROUTING information
\r
1021 * @return uint8_t 0(not pending), 1 (pending in NVIC) - before clear
\r
1022 * @note This function disables and enables global interrupt
\r
1024 uint8_t interrupt_device_nvic_pending_clear(const uint32_t dev_iroute);
\r
1026 /* ------------------------------------------------------------------------------- */
\r
1027 /* Peripheral Functions - Operations on GIRQ Block Enable Set, Enable Clear *
\r
1028 * and Status Register */
\r
1029 /* ------------------------------------------------------------------------------- */
\r
1031 /** Enable specified GIRQ in ECIA block
\r
1032 * @param girq_id - enum MEC_GIRQ_IDS
\r
1034 void p_interrupt_ecia_block_enable_set(uint8_t girq_id);
\r
1036 /** Enable GIRQs in ECIA Block
\r
1037 * @param girq_bitmask - Bitmask of GIRQs to be enabled in ECIA Block
\r
1039 void p_interrupt_ecia_block_enable_bitmask_set(uint32_t girq_bitmask);
\r
1041 /** Check if specified GIRQ block enabled or not
\r
1042 * @param girq_id - enum MEC_GIRQ_IDS
\r
1043 * @return retVal - 1 if the particular GIRQ block enabled, else 0
\r
1045 uint8_t p_interrupt_ecia_block_enable_get(uint8_t girq_id);
\r
1047 /** Set all GIRQ block enables */
\r
1048 void p_interrupt_ecia_block_enable_all_set(void);
\r
1050 /** Clear specified GIRQ in ECIA Block
\r
1051 * @param girq_id - enum MEC_GIRQ_IDS
\r
1053 void p_interrupt_ecia_block_enable_clr(uint8_t girq_id);
\r
1055 /** Clear GIRQs in ECIA Block
\r
1056 * @param girq_bitmask - Bitmask of GIRQs to be cleared in ECIA Block
\r
1058 void p_interrupt_ecia_block_enable_bitmask_clr(uint32_t girq_bitmask);
\r
1060 /** p_interrupt_ecia_block_enable_all_clr - Clears all GIRQ block enables */
\r
1061 void p_interrupt_ecia_block_enable_all_clr(void);
\r
1063 /** Get status of GIRQ in ECIA Block
\r
1064 * @param girq_id - enum MEC_GIRQ_IDS
\r
1065 * @return 0 if status bit not set; else non-zero value
\r
1067 uint32_t p_interrupt_ecia_block_irq_status_get(uint8_t girq_id);
\r
1069 /** Reads the Block IRQ Vector Register
\r
1070 * @return 32-bit value
\r
1072 uint32_t p_interrupt_ecia_block_irq_all_status_get(void);
\r
1074 /* ---------------------------------------------------------------------------- */
\r
1075 /* Peripheral Functions - Operations on GIRQx Source, Enable, Result *
\r
1076 * and Enable Registers */
\r
1077 /* ---------------------------------------------------------------------------- */
\r
1079 /** Clear specified interrupt source bit in GIRQx
\r
1080 * @param girq_id - enum MEC_GIRQ_IDS
\r
1081 * @param bitnum -[0, 31]
\r
1083 void p_interrupt_ecia_girq_source_clr(int16_t girq_id, uint8_t bitnum);
\r
1085 /** Read the specified interrupt source bit in GIRQx
\r
1086 * @param girq_id - enum MEC_GIRQ_IDS
\r
1087 * @param bitnum -[0, 31]
\r
1088 * @return 0 if source bit not set; else non-zero value
\r
1090 uint32_t p_interrupt_ecia_girq_source_get(int16_t girq_id, uint8_t bitnum);
\r
1092 /** Enable the specified interrupt in GIRQx
\r
1093 * girq_id - enum MEC_GIRQ_IDS
\r
1094 * bitnum = [0, 31]
\r
1096 void p_interrupt_ecia_girq_enable_set(uint16_t girq_id, uint8_t bitnum);
\r
1098 /** Disable the specified interrupt in GIRQx
\r
1099 * girq_id - enum MEC_GIRQ_IDS
\r
1100 * bitnum = [0, 31]
\r
1102 void p_interrupt_ecia_girq_enable_clr(uint16_t girq_id, uint8_t bitnum);
\r
1104 /** Read the status of the specified interrupt in GIRQx
\r
1105 * girq_id - enum MEC_GIRQ_IDS
\r
1106 * bitnum = [0, 31]
\r
1107 * @return 0 if enable bit not set; else non-zero value
\r
1109 uint32_t p_interrupt_ecia_girq_enable_get(uint16_t girq_id, uint8_t bitnum);
\r
1111 /** Read the result bit of the interrupt in GIRQx
\r
1112 * @param girq_id - enum MEC_GIRQ_IDS
\r
1113 * @param bitnum -[0, 31]
\r
1114 * @return 0 if enable bit not set; else non-zero value
\r
1116 uint32_t p_interrupt_ecia_girq_result_get(int16_t girq_id, uint8_t bitnum);
\r
1118 /* ------------------------------------------------------------------------------- */
\r
1119 /* Peripheral Function - Operations on all GIRQs */
\r
1120 /* ------------------------------------------------------------------------------- */
\r
1122 /** Clear all aggregator GIRQn status registers */
\r
1123 void p_interrupt_ecia_girqs_source_reset(void);
\r
1125 /** Clear all aggregator GIRQn enables */
\r
1126 void p_interrupt_ecia_girqs_enable_reset(void);
\r
1128 /* ------------------------------------------------------------------------------- */
\r
1129 /* Peripheral Function - Function to set interrupt control */
\r
1130 /* ------------------------------------------------------------------------------- */
\r
1132 /** Set interrupt control
\r
1133 * @param nvic_en_flag : 0 = Alternate NVIC disabled, 1 = Alternate NVIC enabled
\r
1135 void p_interrupt_control_set(uint8_t nvic_en_flag);
\r
1137 /** Read interrupt control
\r
1138 * @return uint8_t - 0 = Alternate NVIC disabled, 1 = Alternate NVIC enabled
\r
1140 uint8_t p_interrupt_control_get(void);
\r
1142 /* ------------------------------------------------------------------------------- */
\r
1143 /* Peripheral Functions - NVIC */
\r
1144 /* ------------------------------------------------------------------------------- */
\r
1146 /** Enable/Disable the NVIC IRQ in the NVIC interrupt controller
\r
1147 * @param nvic_num : NVIC number (see enum IRQn_Type)
\r
1148 * @param en_flag : 1 = Enable the NVIC IRQ, 0 = Disable the NVIC IRQ
\r
1149 * @note Application should perform this operation
\r
1151 void p_interrupt_nvic_enable(IRQn_Type nvic_num, uint8_t en_flag);
\r
1153 /** ecia_nvic_clr_en - Clear all NVIC external enables */
\r
1154 void p_interrupt_nvic_extEnables_clr(void);
\r
1156 /** Clear all NVIC external enables and pending bits */
\r
1157 void p_interrupt_nvic_enpend_clr(void);
\r
1159 /** Set NVIC external priorities to POR value */
\r
1160 void p_interrupt_nvic_priorities_default_set(void);
\r
1162 /** Set NVIC external priorities to specified priority (0 - 7)
\r
1163 * @param zero-based 3-bit priority value: 0=highest, 7=lowest.
\r
1164 * @note NVIC highest priority is the value 0, lowest is all 1's.
\r
1165 * Each external interrupt has an 8-bit register and the priority
\r
1166 * is left justified in the registers. MECxxx implements 8 priority
\r
1167 * levels or bits [7:5] in the register. Lowest priority = 0xE0
\r
1169 void p_interrupt_nvic_priorities_set(uint8_t new_pri);
\r
1171 #endif /*_INTERRUPT_H_*/
\r