|
|
1.1 ! root 1: /* ! 2: * QEMU ARM CPU ! 3: * ! 4: * Copyright (c) 2012 SUSE LINUX Products GmbH ! 5: * ! 6: * This program is free software; you can redistribute it and/or ! 7: * modify it under the terms of the GNU General Public License ! 8: * as published by the Free Software Foundation; either version 2 ! 9: * of the License, or (at your option) any later version. ! 10: * ! 11: * This program is distributed in the hope that it will be useful, ! 12: * but WITHOUT ANY WARRANTY; without even the implied warranty of ! 13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 14: * GNU General Public License for more details. ! 15: * ! 16: * You should have received a copy of the GNU General Public License ! 17: * along with this program; if not, see ! 18: * <http://www.gnu.org/licenses/gpl-2.0.html> ! 19: */ ! 20: #ifndef QEMU_ARM_CPU_QOM_H ! 21: #define QEMU_ARM_CPU_QOM_H ! 22: ! 23: #include "qemu/cpu.h" ! 24: ! 25: #define TYPE_ARM_CPU "arm-cpu" ! 26: ! 27: #define ARM_CPU_CLASS(klass) \ ! 28: OBJECT_CLASS_CHECK(ARMCPUClass, (klass), TYPE_ARM_CPU) ! 29: #define ARM_CPU(obj) \ ! 30: OBJECT_CHECK(ARMCPU, (obj), TYPE_ARM_CPU) ! 31: #define ARM_CPU_GET_CLASS(obj) \ ! 32: OBJECT_GET_CLASS(ARMCPUClass, (obj), TYPE_ARM_CPU) ! 33: ! 34: /** ! 35: * ARMCPUClass: ! 36: * @parent_reset: The parent class' reset handler. ! 37: * ! 38: * An ARM CPU model. ! 39: */ ! 40: typedef struct ARMCPUClass { ! 41: /*< private >*/ ! 42: CPUClass parent_class; ! 43: /*< public >*/ ! 44: ! 45: void (*parent_reset)(CPUState *cpu); ! 46: } ARMCPUClass; ! 47: ! 48: /** ! 49: * ARMCPU: ! 50: * @env: #CPUARMState ! 51: * ! 52: * An ARM CPU core. ! 53: */ ! 54: typedef struct ARMCPU { ! 55: /*< private >*/ ! 56: CPUState parent_obj; ! 57: /*< public >*/ ! 58: ! 59: CPUARMState env; ! 60: ! 61: /* The instance init functions for implementation-specific subclasses ! 62: * set these fields to specify the implementation-dependent values of ! 63: * various constant registers and reset values of non-constant ! 64: * registers. ! 65: * Some of these might become QOM properties eventually. ! 66: * Field names match the official register names as defined in the ! 67: * ARMv7AR ARM Architecture Reference Manual. A reset_ prefix ! 68: * is used for reset values of non-constant registers; no reset_ ! 69: * prefix means a constant register. ! 70: */ ! 71: uint32_t midr; ! 72: uint32_t reset_fpsid; ! 73: uint32_t mvfr0; ! 74: uint32_t mvfr1; ! 75: uint32_t ctr; ! 76: uint32_t reset_sctlr; ! 77: uint32_t id_pfr0; ! 78: uint32_t id_pfr1; ! 79: uint32_t id_dfr0; ! 80: uint32_t id_afr0; ! 81: uint32_t id_mmfr0; ! 82: uint32_t id_mmfr1; ! 83: uint32_t id_mmfr2; ! 84: uint32_t id_mmfr3; ! 85: uint32_t id_isar0; ! 86: uint32_t id_isar1; ! 87: uint32_t id_isar2; ! 88: uint32_t id_isar3; ! 89: uint32_t id_isar4; ! 90: uint32_t id_isar5; ! 91: uint32_t clidr; ! 92: /* The elements of this array are the CCSIDR values for each cache, ! 93: * in the order L1DCache, L1ICache, L2DCache, L2ICache, etc. ! 94: */ ! 95: uint32_t ccsidr[16]; ! 96: uint32_t reset_cbar; ! 97: } ARMCPU; ! 98: ! 99: static inline ARMCPU *arm_env_get_cpu(CPUARMState *env) ! 100: { ! 101: return ARM_CPU(container_of(env, ARMCPU, env)); ! 102: } ! 103: ! 104: #define ENV_GET_CPU(e) CPU(arm_env_get_cpu(e)) ! 105: ! 106: void arm_cpu_realize(ARMCPU *cpu); ! 107: ! 108: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.