cpu-defs.h revision a381ef07088ce479610129e37bfef42538f397da
18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/*
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * common defines for all CPUs
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Copyright (c) 2003 Fabrice Bellard
58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * This library is free software; you can redistribute it and/or
78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * modify it under the terms of the GNU Lesser General Public
88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * License as published by the Free Software Foundation; either
98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * version 2 of the License, or (at your option) any later version.
108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * This library is distributed in the hope that it will be useful,
128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Lesser General Public License for more details.
158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * You should have received a copy of the GNU Lesser General Public
179251866320b5f8329a043bb56b3a794f78d12849David 'Digit' Turner * License along with this library; if not, see <http://www.gnu.org/licenses/>.
188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */
198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef CPU_DEFS_H
208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CPU_DEFS_H
218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifndef NEED_CPU_H
235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#error cpu.h included from common code
245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "config.h"
278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <setjmp.h>
288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <inttypes.h>
295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include <signal.h>
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "osdep.h"
31a5d412078b8e7478d81df03710eacc7a21096ba2David 'Digit' Turner#include "qemu-queue.h"
325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include "targphys.h"
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef TARGET_LONG_BITS
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#error TARGET_LONG_BITS must be defined before including this header
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TARGET_LONG_SIZE (TARGET_LONG_BITS / 8)
398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* target_ulong is the type of a virtual address */
418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TARGET_LONG_SIZE == 4
428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef int32_t target_long;
438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef uint32_t target_ulong;
448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TARGET_FMT_lx "%08x"
458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TARGET_FMT_ld "%d"
468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TARGET_FMT_lu "%u"
478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#elif TARGET_LONG_SIZE == 8
488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef int64_t target_long;
498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef uint64_t target_ulong;
508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TARGET_FMT_lx "%016" PRIx64
518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TARGET_FMT_ld "%" PRId64
528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TARGET_FMT_lu "%" PRIu64
538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#error TARGET_LONG_SIZE undefined
558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define HOST_LONG_SIZE (HOST_LONG_BITS / 8)
588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define EXCP_INTERRUPT 	0x10000 /* async interruption */
608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define EXCP_HLT        0x10001 /* hlt instruction reached */
618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define EXCP_DEBUG      0x10002 /* cpu stopped after a breakpoint or singlestep */
628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define EXCP_HALTED     0x10003 /* cpu is halted (waiting for external event) */
638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TB_JMP_CACHE_BITS 12
658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TB_JMP_CACHE_SIZE (1 << TB_JMP_CACHE_BITS)
668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Only the bottom TB_JMP_PAGE_BITS of the jump cache hash bits vary for
688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   addresses on the same page.  The top bits are the same.  This allows
698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   TLB invalidation to quickly clear a subset of the hash table.  */
708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TB_JMP_PAGE_BITS (TB_JMP_CACHE_BITS / 2)
718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TB_JMP_PAGE_SIZE (1 << TB_JMP_PAGE_BITS)
728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TB_JMP_ADDR_MASK (TB_JMP_PAGE_SIZE - 1)
738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TB_JMP_PAGE_MASK (TB_JMP_CACHE_SIZE - TB_JMP_PAGE_SIZE)
748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
755fbe340e4937c4df99b1064178076a85e341ca89David Turner#if !defined(CONFIG_USER_ONLY)
768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CPU_TLB_BITS 8
778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CPU_TLB_SIZE (1 << CPU_TLB_BITS)
788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
795fbe340e4937c4df99b1064178076a85e341ca89David Turner#if HOST_LONG_BITS == 32 && TARGET_LONG_BITS == 32
808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CPU_TLB_ENTRY_BITS 4
818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CPU_TLB_ENTRY_BITS 5
838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct CPUTLBEntry {
868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* bit TARGET_LONG_BITS to TARGET_PAGE_BITS : virtual address
878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       bit TARGET_PAGE_BITS-1..4  : Nonzero for accesses that should not
888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                    go directly to ram.
898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       bit 3                      : indicates that the entry is invalid
908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       bit 2..0                   : zero
918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    */
928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    target_ulong addr_read;
938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    target_ulong addr_write;
948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    target_ulong addr_code;
955fbe340e4937c4df99b1064178076a85e341ca89David Turner    /* Addend to virtual address to get host address.  IO accesses
965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner       use the corresponding iotlb value.  */
97d9b6cb97a8a9e93f1bbe5351874b03f7faa81783David 'Digit' Turner    size_t addend;
988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* padding to get a power of two size */
99d9b6cb97a8a9e93f1bbe5351874b03f7faa81783David 'Digit' Turner    uint8_t dummy[(1 << CPU_TLB_ENTRY_BITS) -
100d9b6cb97a8a9e93f1bbe5351874b03f7faa81783David 'Digit' Turner                  (sizeof(target_ulong) * 3 +
101d9b6cb97a8a9e93f1bbe5351874b03f7faa81783David 'Digit' Turner                   ((-sizeof(target_ulong) * 3) & (sizeof(size_t) - 1)) +
102d9b6cb97a8a9e93f1bbe5351874b03f7faa81783David 'Digit' Turner                   sizeof(size_t))];
1038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} CPUTLBEntry;
1048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1055fbe340e4937c4df99b1064178076a85e341ca89David Turnerextern int CPUTLBEntry_wrong_size[sizeof(CPUTLBEntry) == (1 << CPU_TLB_ENTRY_BITS) ? 1 : -1];
1065fbe340e4937c4df99b1064178076a85e341ca89David Turner
1075fbe340e4937c4df99b1064178076a85e341ca89David Turner#define CPU_COMMON_TLB \
1085fbe340e4937c4df99b1064178076a85e341ca89David Turner    /* The meaning of the MMU modes is defined in the target code. */   \
1095fbe340e4937c4df99b1064178076a85e341ca89David Turner    CPUTLBEntry tlb_table[NB_MMU_MODES][CPU_TLB_SIZE];                  \
1105fbe340e4937c4df99b1064178076a85e341ca89David Turner    target_phys_addr_t iotlb[NB_MMU_MODES][CPU_TLB_SIZE];               \
1115fbe340e4937c4df99b1064178076a85e341ca89David Turner    target_ulong tlb_flush_addr;                                        \
1125fbe340e4937c4df99b1064178076a85e341ca89David Turner    target_ulong tlb_flush_mask;
1135fbe340e4937c4df99b1064178076a85e341ca89David Turner
1145fbe340e4937c4df99b1064178076a85e341ca89David Turner#else
1155fbe340e4937c4df99b1064178076a85e341ca89David Turner
1165fbe340e4937c4df99b1064178076a85e341ca89David Turner#define CPU_COMMON_TLB
1175fbe340e4937c4df99b1064178076a85e341ca89David Turner
1185fbe340e4937c4df99b1064178076a85e341ca89David Turner#endif
1195fbe340e4937c4df99b1064178076a85e341ca89David Turner
1205fbe340e4937c4df99b1064178076a85e341ca89David Turner
12120894ae3fa98f82da925fbeb72e616eef509758aDavid 'Digit' Turner#ifdef HOST_WORDS_BIGENDIAN
1228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct icount_decr_u16 {
1238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    uint16_t high;
1248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    uint16_t low;
1258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} icount_decr_u16;
1268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
1278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct icount_decr_u16 {
1288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    uint16_t low;
1298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    uint16_t high;
1308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} icount_decr_u16;
1318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
1328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct kvm_run;
1345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerstruct KVMState;
1355fbe340e4937c4df99b1064178076a85e341ca89David Turnerstruct qemu_work_item;
1365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct CPUBreakpoint {
1385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    target_ulong pc;
1395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    int flags; /* BP_* */
140a5d412078b8e7478d81df03710eacc7a21096ba2David 'Digit' Turner    QTAILQ_ENTRY(CPUBreakpoint) entry;
1415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} CPUBreakpoint;
1425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnertypedef struct CPUWatchpoint {
1445d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    target_ulong vaddr;
1455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    target_ulong len_mask;
1465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    int flags; /* BP_* */
147a5d412078b8e7478d81df03710eacc7a21096ba2David 'Digit' Turner    QTAILQ_ENTRY(CPUWatchpoint) entry;
1485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner} CPUWatchpoint;
1495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CPU_TEMP_BUF_NLONGS 128
1518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CPU_COMMON                                                      \
1528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    struct TranslationBlock *current_tb; /* currently executing TB  */  \
1538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* soft mmu support */                                              \
1548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* in order to avoid passing too many arguments to the MMIO         \
1558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       helpers, we store some rarely used information in the CPU        \
1568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       context) */                                                      \
1578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    unsigned long mem_io_pc; /* host pc at which the memory was         \
1588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                accessed */                             \
1598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    target_ulong mem_io_vaddr; /* target virtual addr at which the      \
1608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                     memory was accessed */             \
1618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    uint32_t halted; /* Nonzero if the CPU is in suspend state */       \
1628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    uint32_t interrupt_request;                                         \
1635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    volatile sig_atomic_t exit_request;                                 \
1645fbe340e4937c4df99b1064178076a85e341ca89David Turner    CPU_COMMON_TLB                                                      \
1658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    struct TranslationBlock *tb_jmp_cache[TB_JMP_CACHE_SIZE];           \
1668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* buffer for temporaries in the code generator */                  \
1678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    long temp_buf[CPU_TEMP_BUF_NLONGS];                                 \
1688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                                                        \
1698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    int64_t icount_extra; /* Instructions until next timer event.  */   \
1708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* Number of cycles left, with interrupt flag in high bit.          \
1718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       This allows a single read-compare-cbranch-write sequence to test \
1728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project       for both decrementer underflow and exceptions.  */               \
1738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    union {                                                             \
1748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        uint32_t u32;                                                   \
1758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project        icount_decr_u16 u16;                                            \
1768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    } icount_decr;                                                      \
1778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    uint32_t can_do_io; /* nonzero if memory mapped IO is safe.  */     \
1788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                                                        \
1798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* from this point: preserved by CPU reset */                       \
1808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* ice debug support */                                             \
181a5d412078b8e7478d81df03710eacc7a21096ba2David 'Digit' Turner    QTAILQ_HEAD(breakpoints_head, CPUBreakpoint) breakpoints;            \
1828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    int singlestep_enabled;                                             \
1838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                                                        \
184a5d412078b8e7478d81df03710eacc7a21096ba2David 'Digit' Turner    QTAILQ_HEAD(watchpoints_head, CPUWatchpoint) watchpoints;            \
1855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    CPUWatchpoint *watchpoint_hit;                                      \
1865d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                                                        \
1875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct GDBRegisterState *gdb_regs;                                  \
1888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                                                        \
1898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* Core interrupt code */                                           \
1908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    jmp_buf jmp_env;                                                    \
1918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    int exception_index;                                                \
1928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                                                        \
1935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    CPUState *next_cpu; /* next CPU sharing TB cache */                 \
1948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    int cpu_index; /* CPU index (informative) */                        \
1955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    uint32_t host_tid; /* host thread ID */                             \
1965d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    int numa_node; /* NUMA node this cpu is belonging to  */            \
197a5d412078b8e7478d81df03710eacc7a21096ba2David 'Digit' Turner    int nr_cores;  /* number of cores within this CPU package */        \
198a5d412078b8e7478d81df03710eacc7a21096ba2David 'Digit' Turner    int nr_threads;/* number of threads within this CPU */              \
1998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    int running; /* Nonzero if cpu is currently running(usermode).  */  \
2008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    /* user data */                                                     \
2018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    void *opaque;                                                       \
2028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project                                                                        \
2035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    uint32_t created;                                                   \
2045fbe340e4937c4df99b1064178076a85e341ca89David Turner    uint32_t stop;   /* Stop request */                                 \
2055fbe340e4937c4df99b1064178076a85e341ca89David Turner    uint32_t stopped; /* Artificially stopped */                        \
2065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct QemuThread *thread;                                          \
2075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct QemuCond *halt_cond;                                         \
2085fbe340e4937c4df99b1064178076a85e341ca89David Turner    struct qemu_work_item *queued_work_first, *queued_work_last;        \
2095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    const char *cpu_model_str;                                          \
2105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct KVMState *kvm_state;                                         \
2115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner    struct kvm_run *kvm_run;                                            \
2129251866320b5f8329a043bb56b3a794f78d12849David 'Digit' Turner    int kvm_fd;                                                         \
213a381ef07088ce479610129e37bfef42538f397daJun Nakajima    int kvm_vcpu_dirty;                                                 \
214a381ef07088ce479610129e37bfef42538f397daJun Nakajima    struct hax_vcpu_state *hax_vcpu;
2158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
217