xref: /qemu/target/tricore/cpu.h (revision 69242e7e7ea55f2a3f4fa50e367cad849c9cdc36)
148e06fe0SBastian Koppelmann /*
248e06fe0SBastian Koppelmann  *  TriCore emulation for qemu: main CPU struct.
348e06fe0SBastian Koppelmann  *
448e06fe0SBastian Koppelmann  *  Copyright (c) 2012-2014 Bastian Koppelmann C-Lab/University Paderborn
548e06fe0SBastian Koppelmann  *
648e06fe0SBastian Koppelmann  * This library is free software; you can redistribute it and/or
748e06fe0SBastian Koppelmann  * modify it under the terms of the GNU Lesser General Public
848e06fe0SBastian Koppelmann  * License as published by the Free Software Foundation; either
902754acdSThomas Huth  * version 2.1 of the License, or (at your option) any later version.
1048e06fe0SBastian Koppelmann  *
1148e06fe0SBastian Koppelmann  * This library is distributed in the hope that it will be useful,
1248e06fe0SBastian Koppelmann  * but WITHOUT ANY WARRANTY; without even the implied warranty of
1348e06fe0SBastian Koppelmann  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1448e06fe0SBastian Koppelmann  * Lesser General Public License for more details.
1548e06fe0SBastian Koppelmann  *
1648e06fe0SBastian Koppelmann  * You should have received a copy of the GNU Lesser General Public
1748e06fe0SBastian Koppelmann  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
1848e06fe0SBastian Koppelmann  */
1907f5a258SMarkus Armbruster 
2007f5a258SMarkus Armbruster #ifndef TRICORE_CPU_H
2107f5a258SMarkus Armbruster #define TRICORE_CPU_H
2248e06fe0SBastian Koppelmann 
23fc111b10SPaolo Bonzini #include "cpu-qom.h"
2448e06fe0SBastian Koppelmann #include "exec/cpu-defs.h"
25*69242e7eSMarc-André Lureau #include "qemu/cpu-float.h"
2674433bf0SRichard Henderson #include "tricore-defs.h"
2748e06fe0SBastian Koppelmann 
2848e06fe0SBastian Koppelmann struct tricore_boot_info;
2948e06fe0SBastian Koppelmann 
3048e06fe0SBastian Koppelmann typedef struct tricore_def_t tricore_def_t;
3148e06fe0SBastian Koppelmann 
321ea4a06aSPhilippe Mathieu-Daudé typedef struct CPUArchState {
3348e06fe0SBastian Koppelmann     /* GPR Register */
3448e06fe0SBastian Koppelmann     uint32_t gpr_a[16];
3548e06fe0SBastian Koppelmann     uint32_t gpr_d[16];
3648e06fe0SBastian Koppelmann     /* CSFR Register */
3748e06fe0SBastian Koppelmann     uint32_t PCXI;
3848e06fe0SBastian Koppelmann /* Frequently accessed PSW_USB bits are stored separately for efficiency.
3948e06fe0SBastian Koppelmann        This contains all the other bits.  Use psw_{read,write} to access
4048e06fe0SBastian Koppelmann        the whole PSW.  */
4148e06fe0SBastian Koppelmann     uint32_t PSW;
4248e06fe0SBastian Koppelmann 
4348e06fe0SBastian Koppelmann     /* PSW flag cache for faster execution
4448e06fe0SBastian Koppelmann     */
4548e06fe0SBastian Koppelmann     uint32_t PSW_USB_C;
4648e06fe0SBastian Koppelmann     uint32_t PSW_USB_V;   /* Only if bit 31 set, then flag is set  */
4748e06fe0SBastian Koppelmann     uint32_t PSW_USB_SV;  /* Only if bit 31 set, then flag is set  */
4848e06fe0SBastian Koppelmann     uint32_t PSW_USB_AV;  /* Only if bit 31 set, then flag is set. */
4948e06fe0SBastian Koppelmann     uint32_t PSW_USB_SAV; /* Only if bit 31 set, then flag is set. */
5048e06fe0SBastian Koppelmann 
5148e06fe0SBastian Koppelmann     uint32_t PC;
5248e06fe0SBastian Koppelmann     uint32_t SYSCON;
5348e06fe0SBastian Koppelmann     uint32_t CPU_ID;
5404e62411SDavid Brenken     uint32_t CORE_ID;
5548e06fe0SBastian Koppelmann     uint32_t BIV;
5648e06fe0SBastian Koppelmann     uint32_t BTV;
5748e06fe0SBastian Koppelmann     uint32_t ISP;
5848e06fe0SBastian Koppelmann     uint32_t ICR;
5948e06fe0SBastian Koppelmann     uint32_t FCX;
6048e06fe0SBastian Koppelmann     uint32_t LCX;
6148e06fe0SBastian Koppelmann     uint32_t COMPAT;
6248e06fe0SBastian Koppelmann 
6348e06fe0SBastian Koppelmann     /* Mem Protection Register */
6448e06fe0SBastian Koppelmann     uint32_t DPR0_0L;
6548e06fe0SBastian Koppelmann     uint32_t DPR0_0U;
6648e06fe0SBastian Koppelmann     uint32_t DPR0_1L;
6748e06fe0SBastian Koppelmann     uint32_t DPR0_1U;
6848e06fe0SBastian Koppelmann     uint32_t DPR0_2L;
6948e06fe0SBastian Koppelmann     uint32_t DPR0_2U;
7048e06fe0SBastian Koppelmann     uint32_t DPR0_3L;
7148e06fe0SBastian Koppelmann     uint32_t DPR0_3U;
7248e06fe0SBastian Koppelmann 
7348e06fe0SBastian Koppelmann     uint32_t DPR1_0L;
7448e06fe0SBastian Koppelmann     uint32_t DPR1_0U;
7548e06fe0SBastian Koppelmann     uint32_t DPR1_1L;
7648e06fe0SBastian Koppelmann     uint32_t DPR1_1U;
7748e06fe0SBastian Koppelmann     uint32_t DPR1_2L;
7848e06fe0SBastian Koppelmann     uint32_t DPR1_2U;
7948e06fe0SBastian Koppelmann     uint32_t DPR1_3L;
8048e06fe0SBastian Koppelmann     uint32_t DPR1_3U;
8148e06fe0SBastian Koppelmann 
8248e06fe0SBastian Koppelmann     uint32_t DPR2_0L;
8348e06fe0SBastian Koppelmann     uint32_t DPR2_0U;
8448e06fe0SBastian Koppelmann     uint32_t DPR2_1L;
8548e06fe0SBastian Koppelmann     uint32_t DPR2_1U;
8648e06fe0SBastian Koppelmann     uint32_t DPR2_2L;
8748e06fe0SBastian Koppelmann     uint32_t DPR2_2U;
8848e06fe0SBastian Koppelmann     uint32_t DPR2_3L;
8948e06fe0SBastian Koppelmann     uint32_t DPR2_3U;
9048e06fe0SBastian Koppelmann 
9148e06fe0SBastian Koppelmann     uint32_t DPR3_0L;
9248e06fe0SBastian Koppelmann     uint32_t DPR3_0U;
9348e06fe0SBastian Koppelmann     uint32_t DPR3_1L;
9448e06fe0SBastian Koppelmann     uint32_t DPR3_1U;
9548e06fe0SBastian Koppelmann     uint32_t DPR3_2L;
9648e06fe0SBastian Koppelmann     uint32_t DPR3_2U;
9748e06fe0SBastian Koppelmann     uint32_t DPR3_3L;
9848e06fe0SBastian Koppelmann     uint32_t DPR3_3U;
9948e06fe0SBastian Koppelmann 
10048e06fe0SBastian Koppelmann     uint32_t CPR0_0L;
10148e06fe0SBastian Koppelmann     uint32_t CPR0_0U;
10248e06fe0SBastian Koppelmann     uint32_t CPR0_1L;
10348e06fe0SBastian Koppelmann     uint32_t CPR0_1U;
10448e06fe0SBastian Koppelmann     uint32_t CPR0_2L;
10548e06fe0SBastian Koppelmann     uint32_t CPR0_2U;
10648e06fe0SBastian Koppelmann     uint32_t CPR0_3L;
10748e06fe0SBastian Koppelmann     uint32_t CPR0_3U;
10848e06fe0SBastian Koppelmann 
10948e06fe0SBastian Koppelmann     uint32_t CPR1_0L;
11048e06fe0SBastian Koppelmann     uint32_t CPR1_0U;
11148e06fe0SBastian Koppelmann     uint32_t CPR1_1L;
11248e06fe0SBastian Koppelmann     uint32_t CPR1_1U;
11348e06fe0SBastian Koppelmann     uint32_t CPR1_2L;
11448e06fe0SBastian Koppelmann     uint32_t CPR1_2U;
11548e06fe0SBastian Koppelmann     uint32_t CPR1_3L;
11648e06fe0SBastian Koppelmann     uint32_t CPR1_3U;
11748e06fe0SBastian Koppelmann 
11848e06fe0SBastian Koppelmann     uint32_t CPR2_0L;
11948e06fe0SBastian Koppelmann     uint32_t CPR2_0U;
12048e06fe0SBastian Koppelmann     uint32_t CPR2_1L;
12148e06fe0SBastian Koppelmann     uint32_t CPR2_1U;
12248e06fe0SBastian Koppelmann     uint32_t CPR2_2L;
12348e06fe0SBastian Koppelmann     uint32_t CPR2_2U;
12448e06fe0SBastian Koppelmann     uint32_t CPR2_3L;
12548e06fe0SBastian Koppelmann     uint32_t CPR2_3U;
12648e06fe0SBastian Koppelmann 
12748e06fe0SBastian Koppelmann     uint32_t CPR3_0L;
12848e06fe0SBastian Koppelmann     uint32_t CPR3_0U;
12948e06fe0SBastian Koppelmann     uint32_t CPR3_1L;
13048e06fe0SBastian Koppelmann     uint32_t CPR3_1U;
13148e06fe0SBastian Koppelmann     uint32_t CPR3_2L;
13248e06fe0SBastian Koppelmann     uint32_t CPR3_2U;
13348e06fe0SBastian Koppelmann     uint32_t CPR3_3L;
13448e06fe0SBastian Koppelmann     uint32_t CPR3_3U;
13548e06fe0SBastian Koppelmann 
13648e06fe0SBastian Koppelmann     uint32_t DPM0;
13748e06fe0SBastian Koppelmann     uint32_t DPM1;
13848e06fe0SBastian Koppelmann     uint32_t DPM2;
13948e06fe0SBastian Koppelmann     uint32_t DPM3;
14048e06fe0SBastian Koppelmann 
14148e06fe0SBastian Koppelmann     uint32_t CPM0;
14248e06fe0SBastian Koppelmann     uint32_t CPM1;
14348e06fe0SBastian Koppelmann     uint32_t CPM2;
14448e06fe0SBastian Koppelmann     uint32_t CPM3;
14548e06fe0SBastian Koppelmann 
14648e06fe0SBastian Koppelmann     /* Memory Management Registers */
14748e06fe0SBastian Koppelmann     uint32_t MMU_CON;
14848e06fe0SBastian Koppelmann     uint32_t MMU_ASI;
14948e06fe0SBastian Koppelmann     uint32_t MMU_TVA;
15048e06fe0SBastian Koppelmann     uint32_t MMU_TPA;
15148e06fe0SBastian Koppelmann     uint32_t MMU_TPX;
15248e06fe0SBastian Koppelmann     uint32_t MMU_TFA;
15348e06fe0SBastian Koppelmann     /* {1.3.1 only */
15448e06fe0SBastian Koppelmann     uint32_t BMACON;
15548e06fe0SBastian Koppelmann     uint32_t SMACON;
15648e06fe0SBastian Koppelmann     uint32_t DIEAR;
15748e06fe0SBastian Koppelmann     uint32_t DIETR;
15848e06fe0SBastian Koppelmann     uint32_t CCDIER;
15948e06fe0SBastian Koppelmann     uint32_t MIECON;
16048e06fe0SBastian Koppelmann     uint32_t PIEAR;
16148e06fe0SBastian Koppelmann     uint32_t PIETR;
16248e06fe0SBastian Koppelmann     uint32_t CCPIER;
16348e06fe0SBastian Koppelmann     /*} */
16448e06fe0SBastian Koppelmann     /* Debug Registers */
16548e06fe0SBastian Koppelmann     uint32_t DBGSR;
16648e06fe0SBastian Koppelmann     uint32_t EXEVT;
16748e06fe0SBastian Koppelmann     uint32_t CREVT;
16848e06fe0SBastian Koppelmann     uint32_t SWEVT;
16948e06fe0SBastian Koppelmann     uint32_t TR0EVT;
17048e06fe0SBastian Koppelmann     uint32_t TR1EVT;
17148e06fe0SBastian Koppelmann     uint32_t DMS;
17248e06fe0SBastian Koppelmann     uint32_t DCX;
17348e06fe0SBastian Koppelmann     uint32_t DBGTCR;
17448e06fe0SBastian Koppelmann     uint32_t CCTRL;
17548e06fe0SBastian Koppelmann     uint32_t CCNT;
17648e06fe0SBastian Koppelmann     uint32_t ICNT;
17748e06fe0SBastian Koppelmann     uint32_t M1CNT;
17848e06fe0SBastian Koppelmann     uint32_t M2CNT;
17948e06fe0SBastian Koppelmann     uint32_t M3CNT;
18048e06fe0SBastian Koppelmann     /* Floating Point Registers */
181996a729fSBastian Koppelmann     float_status fp_status;
18248e06fe0SBastian Koppelmann     /* QEMU */
18348e06fe0SBastian Koppelmann     int error_code;
18448e06fe0SBastian Koppelmann     uint32_t hflags;    /* CPU State */
18548e06fe0SBastian Koppelmann 
18648e06fe0SBastian Koppelmann     /* Internal CPU feature flags.  */
18748e06fe0SBastian Koppelmann     uint64_t features;
18848e06fe0SBastian Koppelmann 
18948e06fe0SBastian Koppelmann     const tricore_def_t *cpu_model;
19048e06fe0SBastian Koppelmann     void *irq[8];
19148e06fe0SBastian Koppelmann     struct QEMUTimer *timer; /* Internal timer */
1921ea4a06aSPhilippe Mathieu-Daudé } CPUTriCoreState;
19348e06fe0SBastian Koppelmann 
194fc111b10SPaolo Bonzini /**
195fc111b10SPaolo Bonzini  * TriCoreCPU:
196fc111b10SPaolo Bonzini  * @env: #CPUTriCoreState
197fc111b10SPaolo Bonzini  *
198fc111b10SPaolo Bonzini  * A TriCore CPU.
199fc111b10SPaolo Bonzini  */
200b36e239eSPhilippe Mathieu-Daudé struct ArchCPU {
201fc111b10SPaolo Bonzini     /*< private >*/
202fc111b10SPaolo Bonzini     CPUState parent_obj;
203fc111b10SPaolo Bonzini     /*< public >*/
204fc111b10SPaolo Bonzini 
2055b146dc7SRichard Henderson     CPUNegativeOffsetState neg;
206fc111b10SPaolo Bonzini     CPUTriCoreState env;
207fc111b10SPaolo Bonzini };
208fc111b10SPaolo Bonzini 
209fc111b10SPaolo Bonzini 
210fc111b10SPaolo Bonzini hwaddr tricore_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr);
21190c84c56SMarkus Armbruster void tricore_cpu_dump_state(CPUState *cpu, FILE *f, int flags);
212fc111b10SPaolo Bonzini 
213fc111b10SPaolo Bonzini 
21448e06fe0SBastian Koppelmann #define MASK_PCXI_PCPN 0xff000000
215ce46335cSDavid Brenken #define MASK_PCXI_PIE_1_3  0x00800000
216ce46335cSDavid Brenken #define MASK_PCXI_PIE_1_6  0x00200000
21748e06fe0SBastian Koppelmann #define MASK_PCXI_UL   0x00400000
21848e06fe0SBastian Koppelmann #define MASK_PCXI_PCXS 0x000f0000
21948e06fe0SBastian Koppelmann #define MASK_PCXI_PCXO 0x0000ffff
22048e06fe0SBastian Koppelmann 
22148e06fe0SBastian Koppelmann #define MASK_PSW_USB 0xff000000
22248e06fe0SBastian Koppelmann #define MASK_USB_C   0x80000000
22348e06fe0SBastian Koppelmann #define MASK_USB_V   0x40000000
22448e06fe0SBastian Koppelmann #define MASK_USB_SV  0x20000000
22548e06fe0SBastian Koppelmann #define MASK_USB_AV  0x10000000
22648e06fe0SBastian Koppelmann #define MASK_USB_SAV 0x08000000
22748e06fe0SBastian Koppelmann #define MASK_PSW_PRS 0x00003000
22848e06fe0SBastian Koppelmann #define MASK_PSW_IO  0x00000c00
22948e06fe0SBastian Koppelmann #define MASK_PSW_IS  0x00000200
23048e06fe0SBastian Koppelmann #define MASK_PSW_GW  0x00000100
23148e06fe0SBastian Koppelmann #define MASK_PSW_CDE 0x00000080
23248e06fe0SBastian Koppelmann #define MASK_PSW_CDC 0x0000007f
233996a729fSBastian Koppelmann #define MASK_PSW_FPU_RM 0x3000000
23448e06fe0SBastian Koppelmann 
23548e06fe0SBastian Koppelmann #define MASK_SYSCON_PRO_TEN 0x2
23648e06fe0SBastian Koppelmann #define MASK_SYSCON_FCD_SF  0x1
23748e06fe0SBastian Koppelmann 
23848e06fe0SBastian Koppelmann #define MASK_CPUID_MOD     0xffff0000
23948e06fe0SBastian Koppelmann #define MASK_CPUID_MOD_32B 0x0000ff00
24048e06fe0SBastian Koppelmann #define MASK_CPUID_REV     0x000000ff
24148e06fe0SBastian Koppelmann 
24248e06fe0SBastian Koppelmann #define MASK_ICR_PIPN 0x00ff0000
243d1cbc28aSDavid Brenken #define MASK_ICR_IE_1_3   0x00000100
244d1cbc28aSDavid Brenken #define MASK_ICR_IE_1_6   0x00008000
24548e06fe0SBastian Koppelmann #define MASK_ICR_CCPN 0x000000ff
24648e06fe0SBastian Koppelmann 
24748e06fe0SBastian Koppelmann #define MASK_FCX_FCXS 0x000f0000
24848e06fe0SBastian Koppelmann #define MASK_FCX_FCXO 0x0000ffff
24948e06fe0SBastian Koppelmann 
25048e06fe0SBastian Koppelmann #define MASK_LCX_LCXS 0x000f0000
25148e06fe0SBastian Koppelmann #define MASK_LCX_LCX0 0x0000ffff
25248e06fe0SBastian Koppelmann 
253b724b012SBastian Koppelmann #define MASK_DBGSR_DE 0x1
254b724b012SBastian Koppelmann #define MASK_DBGSR_HALT 0x6
255b724b012SBastian Koppelmann #define MASK_DBGSR_SUSP 0x10
256b724b012SBastian Koppelmann #define MASK_DBGSR_PREVSUSP 0x20
257b724b012SBastian Koppelmann #define MASK_DBGSR_PEVT 0x40
258b724b012SBastian Koppelmann #define MASK_DBGSR_EVTSRC 0x1f00
259b724b012SBastian Koppelmann 
26040a1f64bSBastian Koppelmann #define TRICORE_HFLAG_KUU     0x3
26148e06fe0SBastian Koppelmann #define TRICORE_HFLAG_UM0     0x00002 /* user mode-0 flag          */
26248e06fe0SBastian Koppelmann #define TRICORE_HFLAG_UM1     0x00001 /* user mode-1 flag          */
26348e06fe0SBastian Koppelmann #define TRICORE_HFLAG_SM      0x00000 /* kernel mode flag          */
26448e06fe0SBastian Koppelmann 
26548e06fe0SBastian Koppelmann enum tricore_features {
26648e06fe0SBastian Koppelmann     TRICORE_FEATURE_13,
26748e06fe0SBastian Koppelmann     TRICORE_FEATURE_131,
26848e06fe0SBastian Koppelmann     TRICORE_FEATURE_16,
2696d2afc8aSBastian Koppelmann     TRICORE_FEATURE_161,
27048e06fe0SBastian Koppelmann };
27148e06fe0SBastian Koppelmann 
27248e06fe0SBastian Koppelmann static inline int tricore_feature(CPUTriCoreState *env, int feature)
27348e06fe0SBastian Koppelmann {
27448e06fe0SBastian Koppelmann     return (env->features & (1ULL << feature)) != 0;
27548e06fe0SBastian Koppelmann }
27648e06fe0SBastian Koppelmann 
27748e06fe0SBastian Koppelmann /* TriCore Traps Classes*/
27848e06fe0SBastian Koppelmann enum {
27948e06fe0SBastian Koppelmann     TRAPC_NONE     = -1,
28048e06fe0SBastian Koppelmann     TRAPC_MMU      = 0,
28148e06fe0SBastian Koppelmann     TRAPC_PROT     = 1,
28248e06fe0SBastian Koppelmann     TRAPC_INSN_ERR = 2,
28348e06fe0SBastian Koppelmann     TRAPC_CTX_MNG  = 3,
28448e06fe0SBastian Koppelmann     TRAPC_SYSBUS   = 4,
28548e06fe0SBastian Koppelmann     TRAPC_ASSERT   = 5,
28648e06fe0SBastian Koppelmann     TRAPC_SYSCALL  = 6,
28748e06fe0SBastian Koppelmann     TRAPC_NMI      = 7,
288518d7fd2SBastian Koppelmann     TRAPC_IRQ      = 8
28948e06fe0SBastian Koppelmann };
29048e06fe0SBastian Koppelmann 
29148e06fe0SBastian Koppelmann /* Class 0 TIN */
29248e06fe0SBastian Koppelmann enum {
29348e06fe0SBastian Koppelmann     TIN0_VAF = 0,
29448e06fe0SBastian Koppelmann     TIN0_VAP = 1,
29548e06fe0SBastian Koppelmann };
29648e06fe0SBastian Koppelmann 
29748e06fe0SBastian Koppelmann /* Class 1 TIN */
29848e06fe0SBastian Koppelmann enum {
29948e06fe0SBastian Koppelmann     TIN1_PRIV = 1,
30048e06fe0SBastian Koppelmann     TIN1_MPR  = 2,
30148e06fe0SBastian Koppelmann     TIN1_MPW  = 3,
30248e06fe0SBastian Koppelmann     TIN1_MPX  = 4,
30348e06fe0SBastian Koppelmann     TIN1_MPP  = 5,
30448e06fe0SBastian Koppelmann     TIN1_MPN  = 6,
30548e06fe0SBastian Koppelmann     TIN1_GRWP = 7,
30648e06fe0SBastian Koppelmann };
30748e06fe0SBastian Koppelmann 
30848e06fe0SBastian Koppelmann /* Class 2 TIN */
30948e06fe0SBastian Koppelmann enum {
31048e06fe0SBastian Koppelmann     TIN2_IOPC = 1,
31148e06fe0SBastian Koppelmann     TIN2_UOPC = 2,
31248e06fe0SBastian Koppelmann     TIN2_OPD  = 3,
31348e06fe0SBastian Koppelmann     TIN2_ALN  = 4,
31448e06fe0SBastian Koppelmann     TIN2_MEM  = 5,
31548e06fe0SBastian Koppelmann };
31648e06fe0SBastian Koppelmann 
31748e06fe0SBastian Koppelmann /* Class 3 TIN */
31848e06fe0SBastian Koppelmann enum {
31948e06fe0SBastian Koppelmann     TIN3_FCD  = 1,
32048e06fe0SBastian Koppelmann     TIN3_CDO  = 2,
32148e06fe0SBastian Koppelmann     TIN3_CDU  = 3,
32248e06fe0SBastian Koppelmann     TIN3_FCU  = 4,
32348e06fe0SBastian Koppelmann     TIN3_CSU  = 5,
32448e06fe0SBastian Koppelmann     TIN3_CTYP = 6,
32548e06fe0SBastian Koppelmann     TIN3_NEST = 7,
32648e06fe0SBastian Koppelmann };
32748e06fe0SBastian Koppelmann 
32848e06fe0SBastian Koppelmann /* Class 4 TIN */
32948e06fe0SBastian Koppelmann enum {
33048e06fe0SBastian Koppelmann     TIN4_PSE = 1,
33148e06fe0SBastian Koppelmann     TIN4_DSE = 2,
33248e06fe0SBastian Koppelmann     TIN4_DAE = 3,
33348e06fe0SBastian Koppelmann     TIN4_CAE = 4,
33448e06fe0SBastian Koppelmann     TIN4_PIE = 5,
33548e06fe0SBastian Koppelmann     TIN4_DIE = 6,
33648e06fe0SBastian Koppelmann };
33748e06fe0SBastian Koppelmann 
33848e06fe0SBastian Koppelmann /* Class 5 TIN */
33948e06fe0SBastian Koppelmann enum {
34048e06fe0SBastian Koppelmann     TIN5_OVF  = 1,
34148e06fe0SBastian Koppelmann     TIN5_SOVF = 1,
34248e06fe0SBastian Koppelmann };
34348e06fe0SBastian Koppelmann 
34448e06fe0SBastian Koppelmann /* Class 6 TIN
34548e06fe0SBastian Koppelmann  *
34648e06fe0SBastian Koppelmann  * Is always TIN6_SYS
34748e06fe0SBastian Koppelmann  */
34848e06fe0SBastian Koppelmann 
34948e06fe0SBastian Koppelmann /* Class 7 TIN */
35048e06fe0SBastian Koppelmann enum {
35148e06fe0SBastian Koppelmann     TIN7_NMI = 0,
35248e06fe0SBastian Koppelmann };
35348e06fe0SBastian Koppelmann 
35448e06fe0SBastian Koppelmann uint32_t psw_read(CPUTriCoreState *env);
35548e06fe0SBastian Koppelmann void psw_write(CPUTriCoreState *env, uint32_t val);
356d127de3bSBastian Koppelmann int tricore_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n);
357d127de3bSBastian Koppelmann int tricore_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n);
35848e06fe0SBastian Koppelmann 
359996a729fSBastian Koppelmann void fpu_set_state(CPUTriCoreState *env);
360996a729fSBastian Koppelmann 
36148e06fe0SBastian Koppelmann #define MMU_USER_IDX 2
36248e06fe0SBastian Koppelmann 
3630442428aSMarkus Armbruster void tricore_cpu_list(void);
36448e06fe0SBastian Koppelmann 
36548e06fe0SBastian Koppelmann #define cpu_list tricore_cpu_list
36648e06fe0SBastian Koppelmann 
36797ed5ccdSBenjamin Herrenschmidt static inline int cpu_mmu_index(CPUTriCoreState *env, bool ifetch)
36848e06fe0SBastian Koppelmann {
36948e06fe0SBastian Koppelmann     return 0;
37048e06fe0SBastian Koppelmann }
37148e06fe0SBastian Koppelmann 
37248e06fe0SBastian Koppelmann #include "exec/cpu-all.h"
37348e06fe0SBastian Koppelmann 
37448e06fe0SBastian Koppelmann void cpu_state_reset(CPUTriCoreState *s);
37548e06fe0SBastian Koppelmann void tricore_tcg_init(void);
37648e06fe0SBastian Koppelmann 
37748e06fe0SBastian Koppelmann static inline void cpu_get_tb_cpu_state(CPUTriCoreState *env, target_ulong *pc,
37889fee74aSEmilio G. Cota                                         target_ulong *cs_base, uint32_t *flags)
37948e06fe0SBastian Koppelmann {
38048e06fe0SBastian Koppelmann     *pc = env->PC;
38148e06fe0SBastian Koppelmann     *cs_base = 0;
38248e06fe0SBastian Koppelmann     *flags = 0;
38348e06fe0SBastian Koppelmann }
38448e06fe0SBastian Koppelmann 
385b9ad9d5bSIgor Mammedov #define TRICORE_CPU_TYPE_SUFFIX "-" TYPE_TRICORE_CPU
386b9ad9d5bSIgor Mammedov #define TRICORE_CPU_TYPE_NAME(model) model TRICORE_CPU_TYPE_SUFFIX
3870dacec87SIgor Mammedov #define CPU_RESOLVING_TYPE TYPE_TRICORE_CPU
38848e06fe0SBastian Koppelmann 
38948e06fe0SBastian Koppelmann /* helpers.c */
39068d6eee7SRichard Henderson bool tricore_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
39168d6eee7SRichard Henderson                           MMUAccessType access_type, int mmu_idx,
39268d6eee7SRichard Henderson                           bool probe, uintptr_t retaddr);
39348e06fe0SBastian Koppelmann 
39407f5a258SMarkus Armbruster #endif /* TRICORE_CPU_H */
395