| /* |
| * Copyright 2010 Tilera Corporation. All Rights Reserved. |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License |
| * as published by the Free Software Foundation, version 2. |
| * |
| * This program is distributed in the hope that it will be useful, but |
| * WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or |
| * NON INFRINGEMENT. See the GNU General Public License for |
| * more details. |
| */ |
| |
| #ifndef __ARCH_INTERRUPTS_H__ |
| #define __ARCH_INTERRUPTS_H__ |
| |
| /** Mask for an interrupt. */ |
| /* Note: must handle breaking interrupts into high and low words manually. */ |
| #define INT_MASK_LO(intno) (1 << (intno)) |
| #define INT_MASK_HI(intno) (1 << ((intno) - 32)) |
| |
| #ifndef __ASSEMBLER__ |
| #define INT_MASK(intno) (1ULL << (intno)) |
| #endif |
| |
| |
| /** Where a given interrupt executes */ |
| #define INTERRUPT_VECTOR(i, pl) (0xFC000000 + ((pl) << 24) + ((i) << 8)) |
| |
| /** Where to store a vector for a given interrupt. */ |
| #define USER_INTERRUPT_VECTOR(i) INTERRUPT_VECTOR(i, 0) |
| |
| /** The base address of user-level interrupts. */ |
| #define USER_INTERRUPT_VECTOR_BASE INTERRUPT_VECTOR(0, 0) |
| |
| |
| /** Additional synthetic interrupt. */ |
| #define INT_BREAKPOINT (63) |
| |
| #define INT_ITLB_MISS 0 |
| #define INT_MEM_ERROR 1 |
| #define INT_ILL 2 |
| #define INT_GPV 3 |
| #define INT_SN_ACCESS 4 |
| #define INT_IDN_ACCESS 5 |
| #define INT_UDN_ACCESS 6 |
| #define INT_IDN_REFILL 7 |
| #define INT_UDN_REFILL 8 |
| #define INT_IDN_COMPLETE 9 |
| #define INT_UDN_COMPLETE 10 |
| #define INT_SWINT_3 11 |
| #define INT_SWINT_2 12 |
| #define INT_SWINT_1 13 |
| #define INT_SWINT_0 14 |
| #define INT_UNALIGN_DATA 15 |
| #define INT_DTLB_MISS 16 |
| #define INT_DTLB_ACCESS 17 |
| #define INT_DMATLB_MISS 18 |
| #define INT_DMATLB_ACCESS 19 |
| #define INT_SNITLB_MISS 20 |
| #define INT_SN_NOTIFY 21 |
| #define INT_SN_FIREWALL 22 |
| #define INT_IDN_FIREWALL 23 |
| #define INT_UDN_FIREWALL 24 |
| #define INT_TILE_TIMER 25 |
| #define INT_IDN_TIMER 26 |
| #define INT_UDN_TIMER 27 |
| #define INT_DMA_NOTIFY 28 |
| #define INT_IDN_CA 29 |
| #define INT_UDN_CA 30 |
| #define INT_IDN_AVAIL 31 |
| #define INT_UDN_AVAIL 32 |
| #define INT_PERF_COUNT 33 |
| #define INT_INTCTRL_3 34 |
| #define INT_INTCTRL_2 35 |
| #define INT_INTCTRL_1 36 |
| #define INT_INTCTRL_0 37 |
| #define INT_BOOT_ACCESS 38 |
| #define INT_WORLD_ACCESS 39 |
| #define INT_I_ASID 40 |
| #define INT_D_ASID 41 |
| #define INT_DMA_ASID 42 |
| #define INT_SNI_ASID 43 |
| #define INT_DMA_CPL 44 |
| #define INT_SN_CPL 45 |
| #define INT_DOUBLE_FAULT 46 |
| #define INT_SN_STATIC_ACCESS 47 |
| #define INT_AUX_PERF_COUNT 48 |
| |
| #define NUM_INTERRUPTS 49 |
| |
| #ifndef __ASSEMBLER__ |
| #define QUEUED_INTERRUPTS ( \ |
| INT_MASK(INT_MEM_ERROR) | \ |
| INT_MASK(INT_DMATLB_MISS) | \ |
| INT_MASK(INT_DMATLB_ACCESS) | \ |
| INT_MASK(INT_SNITLB_MISS) | \ |
| INT_MASK(INT_SN_NOTIFY) | \ |
| INT_MASK(INT_SN_FIREWALL) | \ |
| INT_MASK(INT_IDN_FIREWALL) | \ |
| INT_MASK(INT_UDN_FIREWALL) | \ |
| INT_MASK(INT_TILE_TIMER) | \ |
| INT_MASK(INT_IDN_TIMER) | \ |
| INT_MASK(INT_UDN_TIMER) | \ |
| INT_MASK(INT_DMA_NOTIFY) | \ |
| INT_MASK(INT_IDN_CA) | \ |
| INT_MASK(INT_UDN_CA) | \ |
| INT_MASK(INT_IDN_AVAIL) | \ |
| INT_MASK(INT_UDN_AVAIL) | \ |
| INT_MASK(INT_PERF_COUNT) | \ |
| INT_MASK(INT_INTCTRL_3) | \ |
| INT_MASK(INT_INTCTRL_2) | \ |
| INT_MASK(INT_INTCTRL_1) | \ |
| INT_MASK(INT_INTCTRL_0) | \ |
| INT_MASK(INT_BOOT_ACCESS) | \ |
| INT_MASK(INT_WORLD_ACCESS) | \ |
| INT_MASK(INT_I_ASID) | \ |
| INT_MASK(INT_D_ASID) | \ |
| INT_MASK(INT_DMA_ASID) | \ |
| INT_MASK(INT_SNI_ASID) | \ |
| INT_MASK(INT_DMA_CPL) | \ |
| INT_MASK(INT_SN_CPL) | \ |
| INT_MASK(INT_DOUBLE_FAULT) | \ |
| INT_MASK(INT_AUX_PERF_COUNT) | \ |
| 0) |
| #define NONQUEUED_INTERRUPTS ( \ |
| INT_MASK(INT_ITLB_MISS) | \ |
| INT_MASK(INT_ILL) | \ |
| INT_MASK(INT_GPV) | \ |
| INT_MASK(INT_SN_ACCESS) | \ |
| INT_MASK(INT_IDN_ACCESS) | \ |
| INT_MASK(INT_UDN_ACCESS) | \ |
| INT_MASK(INT_IDN_REFILL) | \ |
| INT_MASK(INT_UDN_REFILL) | \ |
| INT_MASK(INT_IDN_COMPLETE) | \ |
| INT_MASK(INT_UDN_COMPLETE) | \ |
| INT_MASK(INT_SWINT_3) | \ |
| INT_MASK(INT_SWINT_2) | \ |
| INT_MASK(INT_SWINT_1) | \ |
| INT_MASK(INT_SWINT_0) | \ |
| INT_MASK(INT_UNALIGN_DATA) | \ |
| INT_MASK(INT_DTLB_MISS) | \ |
| INT_MASK(INT_DTLB_ACCESS) | \ |
| INT_MASK(INT_SN_STATIC_ACCESS) | \ |
| 0) |
| #define CRITICAL_MASKED_INTERRUPTS ( \ |
| INT_MASK(INT_MEM_ERROR) | \ |
| INT_MASK(INT_DMATLB_MISS) | \ |
| INT_MASK(INT_DMATLB_ACCESS) | \ |
| INT_MASK(INT_SNITLB_MISS) | \ |
| INT_MASK(INT_SN_NOTIFY) | \ |
| INT_MASK(INT_SN_FIREWALL) | \ |
| INT_MASK(INT_IDN_FIREWALL) | \ |
| INT_MASK(INT_UDN_FIREWALL) | \ |
| INT_MASK(INT_TILE_TIMER) | \ |
| INT_MASK(INT_IDN_TIMER) | \ |
| INT_MASK(INT_UDN_TIMER) | \ |
| INT_MASK(INT_DMA_NOTIFY) | \ |
| INT_MASK(INT_IDN_CA) | \ |
| INT_MASK(INT_UDN_CA) | \ |
| INT_MASK(INT_IDN_AVAIL) | \ |
| INT_MASK(INT_UDN_AVAIL) | \ |
| INT_MASK(INT_PERF_COUNT) | \ |
| INT_MASK(INT_INTCTRL_3) | \ |
| INT_MASK(INT_INTCTRL_2) | \ |
| INT_MASK(INT_INTCTRL_1) | \ |
| INT_MASK(INT_INTCTRL_0) | \ |
| INT_MASK(INT_AUX_PERF_COUNT) | \ |
| 0) |
| #define CRITICAL_UNMASKED_INTERRUPTS ( \ |
| INT_MASK(INT_ITLB_MISS) | \ |
| INT_MASK(INT_ILL) | \ |
| INT_MASK(INT_GPV) | \ |
| INT_MASK(INT_SN_ACCESS) | \ |
| INT_MASK(INT_IDN_ACCESS) | \ |
| INT_MASK(INT_UDN_ACCESS) | \ |
| INT_MASK(INT_IDN_REFILL) | \ |
| INT_MASK(INT_UDN_REFILL) | \ |
| INT_MASK(INT_IDN_COMPLETE) | \ |
| INT_MASK(INT_UDN_COMPLETE) | \ |
| INT_MASK(INT_SWINT_3) | \ |
| INT_MASK(INT_SWINT_2) | \ |
| INT_MASK(INT_SWINT_1) | \ |
| INT_MASK(INT_SWINT_0) | \ |
| INT_MASK(INT_UNALIGN_DATA) | \ |
| INT_MASK(INT_DTLB_MISS) | \ |
| INT_MASK(INT_DTLB_ACCESS) | \ |
| INT_MASK(INT_BOOT_ACCESS) | \ |
| INT_MASK(INT_WORLD_ACCESS) | \ |
| INT_MASK(INT_I_ASID) | \ |
| INT_MASK(INT_D_ASID) | \ |
| INT_MASK(INT_DMA_ASID) | \ |
| INT_MASK(INT_SNI_ASID) | \ |
| INT_MASK(INT_DMA_CPL) | \ |
| INT_MASK(INT_SN_CPL) | \ |
| INT_MASK(INT_DOUBLE_FAULT) | \ |
| INT_MASK(INT_SN_STATIC_ACCESS) | \ |
| 0) |
| #define MASKABLE_INTERRUPTS ( \ |
| INT_MASK(INT_MEM_ERROR) | \ |
| INT_MASK(INT_IDN_REFILL) | \ |
| INT_MASK(INT_UDN_REFILL) | \ |
| INT_MASK(INT_IDN_COMPLETE) | \ |
| INT_MASK(INT_UDN_COMPLETE) | \ |
| INT_MASK(INT_DMATLB_MISS) | \ |
| INT_MASK(INT_DMATLB_ACCESS) | \ |
| INT_MASK(INT_SNITLB_MISS) | \ |
| INT_MASK(INT_SN_NOTIFY) | \ |
| INT_MASK(INT_SN_FIREWALL) | \ |
| INT_MASK(INT_IDN_FIREWALL) | \ |
| INT_MASK(INT_UDN_FIREWALL) | \ |
| INT_MASK(INT_TILE_TIMER) | \ |
| INT_MASK(INT_IDN_TIMER) | \ |
| INT_MASK(INT_UDN_TIMER) | \ |
| INT_MASK(INT_DMA_NOTIFY) | \ |
| INT_MASK(INT_IDN_CA) | \ |
| INT_MASK(INT_UDN_CA) | \ |
| INT_MASK(INT_IDN_AVAIL) | \ |
| INT_MASK(INT_UDN_AVAIL) | \ |
| INT_MASK(INT_PERF_COUNT) | \ |
| INT_MASK(INT_INTCTRL_3) | \ |
| INT_MASK(INT_INTCTRL_2) | \ |
| INT_MASK(INT_INTCTRL_1) | \ |
| INT_MASK(INT_INTCTRL_0) | \ |
| INT_MASK(INT_AUX_PERF_COUNT) | \ |
| 0) |
| #define UNMASKABLE_INTERRUPTS ( \ |
| INT_MASK(INT_ITLB_MISS) | \ |
| INT_MASK(INT_ILL) | \ |
| INT_MASK(INT_GPV) | \ |
| INT_MASK(INT_SN_ACCESS) | \ |
| INT_MASK(INT_IDN_ACCESS) | \ |
| INT_MASK(INT_UDN_ACCESS) | \ |
| INT_MASK(INT_SWINT_3) | \ |
| INT_MASK(INT_SWINT_2) | \ |
| INT_MASK(INT_SWINT_1) | \ |
| INT_MASK(INT_SWINT_0) | \ |
| INT_MASK(INT_UNALIGN_DATA) | \ |
| INT_MASK(INT_DTLB_MISS) | \ |
| INT_MASK(INT_DTLB_ACCESS) | \ |
| INT_MASK(INT_BOOT_ACCESS) | \ |
| INT_MASK(INT_WORLD_ACCESS) | \ |
| INT_MASK(INT_I_ASID) | \ |
| INT_MASK(INT_D_ASID) | \ |
| INT_MASK(INT_DMA_ASID) | \ |
| INT_MASK(INT_SNI_ASID) | \ |
| INT_MASK(INT_DMA_CPL) | \ |
| INT_MASK(INT_SN_CPL) | \ |
| INT_MASK(INT_DOUBLE_FAULT) | \ |
| INT_MASK(INT_SN_STATIC_ACCESS) | \ |
| 0) |
| #define SYNC_INTERRUPTS ( \ |
| INT_MASK(INT_ITLB_MISS) | \ |
| INT_MASK(INT_ILL) | \ |
| INT_MASK(INT_GPV) | \ |
| INT_MASK(INT_SN_ACCESS) | \ |
| INT_MASK(INT_IDN_ACCESS) | \ |
| INT_MASK(INT_UDN_ACCESS) | \ |
| INT_MASK(INT_IDN_REFILL) | \ |
| INT_MASK(INT_UDN_REFILL) | \ |
| INT_MASK(INT_IDN_COMPLETE) | \ |
| INT_MASK(INT_UDN_COMPLETE) | \ |
| INT_MASK(INT_SWINT_3) | \ |
| INT_MASK(INT_SWINT_2) | \ |
| INT_MASK(INT_SWINT_1) | \ |
| INT_MASK(INT_SWINT_0) | \ |
| INT_MASK(INT_UNALIGN_DATA) | \ |
| INT_MASK(INT_DTLB_MISS) | \ |
| INT_MASK(INT_DTLB_ACCESS) | \ |
| INT_MASK(INT_SN_STATIC_ACCESS) | \ |
| 0) |
| #define NON_SYNC_INTERRUPTS ( \ |
| INT_MASK(INT_MEM_ERROR) | \ |
| INT_MASK(INT_DMATLB_MISS) | \ |
| INT_MASK(INT_DMATLB_ACCESS) | \ |
| INT_MASK(INT_SNITLB_MISS) | \ |
| INT_MASK(INT_SN_NOTIFY) | \ |
| INT_MASK(INT_SN_FIREWALL) | \ |
| INT_MASK(INT_IDN_FIREWALL) | \ |
| INT_MASK(INT_UDN_FIREWALL) | \ |
| INT_MASK(INT_TILE_TIMER) | \ |
| INT_MASK(INT_IDN_TIMER) | \ |
| INT_MASK(INT_UDN_TIMER) | \ |
| INT_MASK(INT_DMA_NOTIFY) | \ |
| INT_MASK(INT_IDN_CA) | \ |
| INT_MASK(INT_UDN_CA) | \ |
| INT_MASK(INT_IDN_AVAIL) | \ |
| INT_MASK(INT_UDN_AVAIL) | \ |
| INT_MASK(INT_PERF_COUNT) | \ |
| INT_MASK(INT_INTCTRL_3) | \ |
| INT_MASK(INT_INTCTRL_2) | \ |
| INT_MASK(INT_INTCTRL_1) | \ |
| INT_MASK(INT_INTCTRL_0) | \ |
| INT_MASK(INT_BOOT_ACCESS) | \ |
| INT_MASK(INT_WORLD_ACCESS) | \ |
| INT_MASK(INT_I_ASID) | \ |
| INT_MASK(INT_D_ASID) | \ |
| INT_MASK(INT_DMA_ASID) | \ |
| INT_MASK(INT_SNI_ASID) | \ |
| INT_MASK(INT_DMA_CPL) | \ |
| INT_MASK(INT_SN_CPL) | \ |
| INT_MASK(INT_DOUBLE_FAULT) | \ |
| INT_MASK(INT_AUX_PERF_COUNT) | \ |
| 0) |
| #endif /* !__ASSEMBLER__ */ |
| #endif /* !__ARCH_INTERRUPTS_H__ */ |