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