/**************************************************************************** * arch/tricore/include/tc3xx/irq.h * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. The * ASF licenses this file to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. * ****************************************************************************/ /* This file should never be included directly but, rather, * only indirectly through nuttx/irq.h */ #ifndef __ARCH_TRICORE_INCLUDE_TC3XX_IRQ_H #define __ARCH_TRICORE_INCLUDE_TC3XX_IRQ_H /**************************************************************************** * Included Files ****************************************************************************/ #include #include /**************************************************************************** * Pre-processor Prototypes ****************************************************************************/ /* Upper CSA */ #define REG_UPCXI 0 #define REG_PSW 1 #define REG_A10 2 #define REG_UA11 3 #define REG_D8 4 #define REG_D9 5 #define REG_D10 6 #define REG_D11 7 #define REG_A12 8 #define REG_A13 9 #define REG_A14 10 #define REG_A15 11 #define REG_D12 12 #define REG_D13 13 #define REG_D14 14 #define REG_D15 15 /* Lower CSA */ #define REG_LPCXI 0 #define REG_LA11 1 #define REG_A2 2 #define REG_A3 3 #define REG_D0 4 #define REG_D1 5 #define REG_D2 6 #define REG_D3 7 #define REG_A4 8 #define REG_A5 9 #define REG_A6 10 #define REG_A7 11 #define REG_D4 12 #define REG_D5 13 #define REG_D6 14 #define REG_D7 15 #define REG_RA REG_UA11 #define REG_SP REG_A10 #define REG_UPC REG_UA11 #define REG_LPC REG_LA11 #define TC_CONTEXT_REGS (16) #define XCPTCONTEXT_REGS (TC_CONTEXT_REGS) #define XCPTCONTEXT_SIZE (sizeof(void *) * TC_CONTEXT_REGS) #define NR_IRQS (255) /* PSW: Program Status Word Register */ #define PSW_CDE (1 << 7) /* Bits 7: Call Depth Count Enable */ #define PSW_IS (1 << 9) /* Bits 9: Interrupt Stack Control */ #define PSW_IO (10) /* Bits 10-11: Access Privilege Level Control (I/O Privilege) */ # define PSW_IO_USER0 (0 << PSW_IO) # define PSW_IO_USER1 (1 << PSW_IO) # define PSW_IO_SUPERVISOR (2 << PSW_IO) /* PCXI: Previous Context Information and Pointer Register */ #define PCXI_UL (1 << 20) /* Bits 20: Upper or Lower Context Tag */ #define PCXI_PIE (1 << 21) /* Bits 21: Previous Interrupt Enable */ /* FCX: Free CSA List Head Pointer Register */ #define FCX_FCXO (0) /* Bits 0-15: FCX Offset Address */ #define FCX_FCXS (16) /* Bits 16-19: FCX Segment Address */ #define FCX_FCXO_MASK (0xffff << FCX_FCXO) #define FCX_FCXS_MASK (0xf << FCX_FCXS) #define FCX_FREE (FCX_FCXS_MASK | FCX_FCXO_MASK) /* Free CSA manipulation */ /**************************************************************************** * Public Types ****************************************************************************/ #ifndef __ASSEMBLY__ struct xcptcontext { /* The following function pointer is non-zero if there are pending signals * to be processed. */ void *sigdeliver; /* Actual type is sig_deliver_t */ /* These are saved copies of the context used during * signal processing. */ uintptr_t *saved_regs; /* Register save area with XCPTCONTEXT_SIZE, only valid when: * 1.The task isn't running or * 2.The task is interrupted * otherwise task is running, and regs contain the stale value. */ uintptr_t *regs; }; #endif /* __ASSEMBLY__ */ #endif /* __ARCH_TRICORE_INCLUDE_TC3XX_IRQ_H */