1*668a5b4eSmiod /* $OpenBSD: trap.h,v 1.9 2022/05/19 05:43:48 miod Exp $ */ 2abbe6f26Skettenis /*- 3abbe6f26Skettenis * SPDX-License-Identifier: BSD-4-Clause 4abbe6f26Skettenis * 5abbe6f26Skettenis * Copyright (C) 1995, 1996 Wolfgang Solfrank. 6abbe6f26Skettenis * Copyright (C) 1995, 1996 TooLs GmbH. 7abbe6f26Skettenis * All rights reserved. 8abbe6f26Skettenis * 9abbe6f26Skettenis * Redistribution and use in source and binary forms, with or without 10abbe6f26Skettenis * modification, are permitted provided that the following conditions 11abbe6f26Skettenis * are met: 12abbe6f26Skettenis * 1. Redistributions of source code must retain the above copyright 13abbe6f26Skettenis * notice, this list of conditions and the following disclaimer. 14abbe6f26Skettenis * 2. Redistributions in binary form must reproduce the above copyright 15abbe6f26Skettenis * notice, this list of conditions and the following disclaimer in the 16abbe6f26Skettenis * documentation and/or other materials provided with the distribution. 17abbe6f26Skettenis * 3. All advertising materials mentioning features or use of this software 18abbe6f26Skettenis * must display the following acknowledgement: 19abbe6f26Skettenis * This product includes software developed by TooLs GmbH. 20abbe6f26Skettenis * 4. The name of TooLs GmbH may not be used to endorse or promote products 21abbe6f26Skettenis * derived from this software without specific prior written permission. 22abbe6f26Skettenis * 23abbe6f26Skettenis * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR 24abbe6f26Skettenis * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 25abbe6f26Skettenis * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 26abbe6f26Skettenis * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 27abbe6f26Skettenis * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 28abbe6f26Skettenis * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 29abbe6f26Skettenis * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 30abbe6f26Skettenis * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 31abbe6f26Skettenis * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 32abbe6f26Skettenis * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33abbe6f26Skettenis * 34abbe6f26Skettenis * $NetBSD: trap.h,v 1.7 2002/02/22 13:51:40 kleink Exp $ 35abbe6f26Skettenis */ 36abbe6f26Skettenis 37abbe6f26Skettenis #ifndef _MACHINE_TRAP_H_ 38abbe6f26Skettenis #define _MACHINE_TRAP_H_ 39abbe6f26Skettenis 40abbe6f26Skettenis #define EXC_RSVD 0x0000 /* Reserved */ 41abbe6f26Skettenis #define EXC_RST 0x0100 /* Reset; all but IBM4xx */ 42abbe6f26Skettenis #define EXC_MCHK 0x0200 /* Machine Check */ 43abbe6f26Skettenis #define EXC_DSI 0x0300 /* Data Storage Interrupt */ 44abbe6f26Skettenis #define EXC_DSE 0x0380 /* Data Segment Interrupt */ 45abbe6f26Skettenis #define EXC_ISI 0x0400 /* Instruction Storage Interrupt */ 46abbe6f26Skettenis #define EXC_ISE 0x0480 /* Instruction Segment Interrupt */ 47abbe6f26Skettenis #define EXC_EXI 0x0500 /* External Interrupt */ 48abbe6f26Skettenis #define EXC_ALI 0x0600 /* Alignment Interrupt */ 49abbe6f26Skettenis #define EXC_PGM 0x0700 /* Program Interrupt */ 50abbe6f26Skettenis #define EXC_FPU 0x0800 /* Floating-point Unavailable */ 51abbe6f26Skettenis #define EXC_DECR 0x0900 /* Decrementer Interrupt */ 52abbe6f26Skettenis #define EXC_SC 0x0c00 /* System Call */ 53abbe6f26Skettenis #define EXC_TRC 0x0d00 /* Trace */ 54abbe6f26Skettenis #define EXC_FPA 0x0e00 /* Floating-point Assist */ 55abbe6f26Skettenis 56abbe6f26Skettenis /* The following is only available on the 601: */ 57abbe6f26Skettenis #define EXC_RUNMODETRC 0x2000 /* Run Mode/Trace Exception */ 58abbe6f26Skettenis 59abbe6f26Skettenis /* The following are only available on 970(G5): */ 60abbe6f26Skettenis #define EXC_VECAST_G5 0x1700 /* AltiVec Assist */ 61abbe6f26Skettenis 62abbe6f26Skettenis /* The following are only available on 7400(G4): */ 63abbe6f26Skettenis #define EXC_VEC 0x0f20 /* AltiVec Unavailable */ 64abbe6f26Skettenis #define EXC_VECAST_G4 0x1600 /* AltiVec Assist */ 65abbe6f26Skettenis 66abbe6f26Skettenis /* The following are only available on 604/750/7400: */ 67abbe6f26Skettenis #define EXC_PERF 0x0f00 /* Performance Monitoring */ 68abbe6f26Skettenis #define EXC_BPT 0x1300 /* Instruction Breakpoint */ 6936fd90dcSjsg #define EXC_SMI 0x1400 /* System Management Interrupt */ 70abbe6f26Skettenis 71abbe6f26Skettenis /* The following are only available on 750/7400: */ 72abbe6f26Skettenis #define EXC_THRM 0x1700 /* Thermal Management Interrupt */ 73abbe6f26Skettenis 74abbe6f26Skettenis /* And these are only on the 603: */ 75abbe6f26Skettenis #define EXC_IMISS 0x1000 /* Instruction translation miss */ 76abbe6f26Skettenis #define EXC_DLMISS 0x1100 /* Data load translation miss */ 77abbe6f26Skettenis #define EXC_DSMISS 0x1200 /* Data store translation miss */ 78abbe6f26Skettenis 79abbe6f26Skettenis /* Power ISA 2.06+: */ 80abbe6f26Skettenis #define EXC_HDSI 0x0e00 /* Hypervisor Data Storage */ 81abbe6f26Skettenis #define EXC_HISI 0x0e20 /* Hypervisor Instruction Storage */ 82abbe6f26Skettenis #define EXC_HEA 0x0e40 /* Hypervisor Emulation Assistance */ 83abbe6f26Skettenis #define EXC_HMI 0x0e60 /* Hypervisor Maintenance */ 84abbe6f26Skettenis #define EXC_VSX 0x0f40 /* VSX Unavailable */ 85abbe6f26Skettenis 86abbe6f26Skettenis /* Power ISA 2.07+: */ 87abbe6f26Skettenis #define EXC_FAC 0x0f60 /* Facility Unavailable */ 88abbe6f26Skettenis #define EXC_HFAC 0x0f80 /* Hypervisor Facility Unavailable */ 89abbe6f26Skettenis 90abbe6f26Skettenis /* Power ISA 3.0+: */ 91abbe6f26Skettenis #define EXC_HVI 0x0ea0 /* Hypervisor Virtualization */ 92abbe6f26Skettenis 93abbe6f26Skettenis /* The following are available on 4xx and 85xx */ 94abbe6f26Skettenis #define EXC_CRIT 0x0100 /* Critical Input Interrupt */ 95abbe6f26Skettenis #define EXC_PIT 0x1000 /* Programmable Interval Timer */ 96abbe6f26Skettenis #define EXC_FIT 0x1010 /* Fixed Interval Timer */ 97abbe6f26Skettenis #define EXC_WDOG 0x1020 /* Watchdog Timer */ 98abbe6f26Skettenis #define EXC_DTMISS 0x1100 /* Data TLB Miss */ 99abbe6f26Skettenis #define EXC_ITMISS 0x1200 /* Instruction TLB Miss */ 100abbe6f26Skettenis #define EXC_APU 0x1300 /* Auxiliary Processing Unit */ 101abbe6f26Skettenis #define EXC_DEBUG 0x2f10 /* Debug trap */ 102abbe6f26Skettenis #define EXC_VECAST_E 0x2f20 /* Altivec Assist (Book-E) */ 103abbe6f26Skettenis #define EXC_SPFPD 0x2f30 /* SPE Floating-point Data */ 104abbe6f26Skettenis #define EXC_SPFPR 0x2f40 /* SPE Floating-point Round */ 105abbe6f26Skettenis 106abbe6f26Skettenis /* POWER8 */ 107abbe6f26Skettenis #define EXC_SOFT_PATCH 0x1500 /* POWER8 Soft Patch Exception */ 108abbe6f26Skettenis 109*668a5b4eSmiod #define EXC_END 0x3000 /* End of exception vectors */ 110abbe6f26Skettenis 111abbe6f26Skettenis #define EXC_AST 0x3000 /* Fake AST vector */ 112abbe6f26Skettenis 113abbe6f26Skettenis /* Trap was in user mode */ 114abbe6f26Skettenis #define EXC_USER 0x10000 115abbe6f26Skettenis 116abbe6f26Skettenis 117abbe6f26Skettenis /* 118abbe6f26Skettenis * EXC_ALI sets bits in the DSISR and DAR to provide enough 119abbe6f26Skettenis * information to recover from the unaligned access without needing to 120abbe6f26Skettenis * parse the offending instruction. This includes certain bits of the 121abbe6f26Skettenis * opcode, and information about what registers are used. The opcode 122abbe6f26Skettenis * indicator values below come from Appendix F of Book III of "The 123abbe6f26Skettenis * PowerPC Architecture". 124abbe6f26Skettenis */ 125abbe6f26Skettenis 126abbe6f26Skettenis #define EXC_ALI_OPCODE_INDICATOR(dsisr) ((dsisr >> 10) & 0x7f) 127abbe6f26Skettenis #define EXC_ALI_LFD 0x09 128abbe6f26Skettenis #define EXC_ALI_STFD 0x0b 129abbe6f26Skettenis 130abbe6f26Skettenis /* Macros to extract register information */ 131abbe6f26Skettenis #define EXC_ALI_RST(dsisr) ((dsisr >> 5) & 0x1f) /* source or target */ 132abbe6f26Skettenis #define EXC_ALI_RA(dsisr) (dsisr & 0x1f) 133abbe6f26Skettenis #define EXC_ALI_INST_RST(instr) ((instr >> 21) & 0x1f) 134abbe6f26Skettenis 135abbe6f26Skettenis /* 136abbe6f26Skettenis * SRR1 bits for program exception traps. These identify what caused 137abbe6f26Skettenis * the program exception. See section 6.5.9 of the Power ISA Version 138abbe6f26Skettenis * 2.05. 139abbe6f26Skettenis */ 140abbe6f26Skettenis 141abbe6f26Skettenis #define EXC_PGM_FPENABLED (1UL << 20) 142abbe6f26Skettenis #define EXC_PGM_ILLEGAL (1UL << 19) 143abbe6f26Skettenis #define EXC_PGM_PRIV (1UL << 18) 144abbe6f26Skettenis #define EXC_PGM_TRAP (1UL << 17) 145abbe6f26Skettenis 14645dd89a7Skettenis /* 14745dd89a7Skettenis * DSISR bits. 14845dd89a7Skettenis */ 14945dd89a7Skettenis 15045dd89a7Skettenis #define DSISR_STORE (1UL << 25) 15145dd89a7Skettenis 15267fd21e2Skettenis /* Magic pointers to store trap handler entry points */ 15312c5e085Skettenis #define TRAP_ENTRY 0x1f8 1541af8fcf9Skettenis #define TRAP_HVENTRY 0x1f0 15567fd21e2Skettenis #define TRAP_SLBENTRY 0x1e8 156196daab3Sgkoehler #define TRAP_RSTENTRY 0x1e0 157f6e57a87Skettenis 158abbe6f26Skettenis #endif /* _MACHINE_TRAP_H_ */ 159