2021-05-13 20:29:44 +08:00

88 lines
4.0 KiB
C

/*
* Copyright (c) 2020 Institute of Parallel And Distributed Systems (IPADS), Shanghai Jiao Tong University (SJTU)
* OS-Lab-2020 (i.e., ChCore) is licensed under the Mulan PSL v1.
* You can use this software according to the terms and conditions of the Mulan PSL v1.
* You may obtain a copy of Mulan PSL v1 at:
* http://license.coscl.org.cn/MulanPSL
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v1 for more details.
*/
#pragma once
/* ESR_EL1 Exception Syndrome Register */
/* Exception Class, ESR bits[31:26].
* A subset of exception is recoreded here. */
#define EC_MASK (BIT(6) - 1)
#define ESR_EL1_EC_SHIFT 26
#define GET_ESR_EL1_EC(esr_el1) (((esr_el1) >> ESR_EL1_EC_SHIFT) & EC_MASK)
#define ESR_EL1_EC_UNKNOWN 0b000000
#define ESR_EL1_EC_WFI_WFE 0b000001 /* Trapped WFI or WFE instruction execution */
#define ESR_EL1_EC_ENFP 0b000111 /* Access to SVE, Advanced SIMD, or floating-point functionality */
#define ESR_EL1_EC_ILLEGAL_EXEC 0b001110 /* Illegal Execution state */
#define ESR_EL1_EC_SVC_32 0b010001 /* SVC instruction execution in AArch32 state */
#define ESR_EL1_EC_SVC_64 0b010101 /* SVC instruction execution in AArch64 state */
#define ESR_EL1_EC_MRS_MSR_64 0b011000 /* Trapped MSR, MRS or System instruction execution in AArch64 state */
#define ESR_EL1_EC_IABT_LEL 0b100000 /* Instruction Abort from a lower Exception level) */
#define ESR_EL1_EC_IABT_CEL 0b100001 /* Instruction Abort from a current Exception level */
#define ESR_EL1_EC_PC_ALIGN 0b100010 /* PC alignment fault exception */
#define ESR_EL1_EC_DABT_LEL 0b100100 /* Data Abort from a lower Exception level */
#define ESR_EL1_EC_DABT_CEL 0b100101 /* Data Abort from a current Exception level */
#define ESR_EL1_EC_SP_ALIGN 0b100110 /* SP alignment fault exception */
#define ESR_EL1_EC_FP_32 0b101000 /* Trapped floating-point exception taken from AArch32 state */
#define ESR_EL1_EC_FP_64 0b101100 /* Trapped floating-point exception taken from AArch64 state */
#define ESR_EL1_EC_SError 0b101111 /* SERROR */
/* Instruction Length for synchronous exceptions */
//#define ESR_EL1_IL BIT(25)
/* ESR_EL1_ISS, ESR bits[24:0] is relay on the specific cases */
/* IFSC & DFSC */
#define FSC_MASK (BIT(6) -1)
#define ESR_EL1_FSC_SHIFT 0
#define GET_ESR_EL1_FSC(esr_el1) (((esr_el1) >> ESR_EL1_FSC_SHIFT) & FSC_MASK)
/* Instruction Abort */
/* Instruction Fault Status Code, IFSC, ESR bits[5:0] */
#define IFSC_TRANS_FAULT_L0 0b000100
#define IFSC_TRANS_FAULT_L1 0b000101
#define IFSC_TRANS_FAULT_L2 0b000110
#define IFSC_TRANS_FAULT_L3 0b000111
#define IFSC_ACCESS_FAULT_L1 0b001001
#define IFSC_ACCESS_FAULT_L2 0b001010
#define IFSC_ACCESS_FAULT_L3 0b001011
#define IFSC_PERM_FAULT_L1 0b001101
#define IFSC_PERM_FAULT_L2 0b001110
#define IFSC_PERM_FAULT_L3 0b001111
/* Data Abort */
/* WnR, ESR bit[6]. Write not Read. The cause of data abort. */
#define DABT_BY_READ 0b0
#define DABT_BY_WRITE 0b1
#define WnR_MASK 1
#define ESR_EL1_WnR_SHIFT 6
#define GET_ESR_EL1_WnR(esr_el1) (((esr_el1) >> ESR_EL1_WnR_SHIFT) & WnR_MASK)
/* Data Fault Status Code, DFSC, ESR bits[5:0] */
#define DFSC_TRANS_FAULT_L0 0b000100
#define DFSC_TRANS_FAULT_L1 0b000101
#define DFSC_TRANS_FAULT_L2 0b000110
#define DFSC_TRANS_FAULT_L3 0b000111
#define DFSC_ACCESS_FAULT_L1 0b001001
#define DFSC_ACCESS_FAULT_L2 0b001010
#define DFSC_ACCESS_FAULT_L3 0b001011
#define DFSC_PERM_FAULT_L1 0b001101
#define DFSC_PERM_FAULT_L2 0b001110
#define DFSC_PERM_FAULT_L3 0b001111
#define UNKNOWN "UnKnown\n"