~ubuntu-branches/ubuntu/trusty/qemu/trusty

« back to all changes in this revision

Viewing changes to .pc/arm64/0006-target-arm-Add-ARMCPU-field-for-Linux-device-tree-co.patch/target-arm/cpu-qom.h

  • Committer: Package Import Robot
  • Author(s): Serge Hallyn
  • Date: 2014-02-04 12:13:08 UTC
  • mfrom: (10.1.45 sid)
  • Revision ID: package-import@ubuntu.com-20140204121308-1xq92lrfs75agw2g
Tags: 1.7.0+dfsg-3ubuntu1~ppa1
* Merge 1.7.0+dfsg-3 from debian.  Remaining changes:
  - debian/patches/ubuntu:
    * expose-vmx_qemu64cpu.patch
    * linaro (omap3) and arm64 patches
    * ubuntu/target-ppc-add-stubs-for-kvm-breakpoints: fix FTBFS
      on ppc
    * ubuntu/CVE-2013-4377.patch: fix denial of service via virtio
  - debian/qemu-system-x86.modprobe: set kvm_intel nested=1 options
  - debian/control:
    * add arm64 to Architectures
    * add qemu-common and qemu-system-aarch64 packages
  - debian/qemu-system-common.install: add debian/tmp/usr/lib
  - debian/qemu-system-common.preinst: add kvm group
  - debian/qemu-system-common.postinst: remove acl placed by udev,
    and add udevadm trigger.
  - qemu-system-x86.links: add eepro100.rom, remove pxe-virtio,
    pxe-e1000 and pxe-rtl8139.
  - add qemu-system-x86.qemu-kvm.upstart and .default
  - qemu-user-static.postinst-in: remove arm64 binfmt
  - debian/rules:
    * allow parallel build
    * add aarch64 to system_targets and sys_systems
    * add qemu-kvm-spice links
    * install qemu-system-x86.modprobe
  - add debian/qemu-system-common.links for OVMF.fd link
* Remove kvm-img, kvm-nbd, kvm-ifup and kvm-ifdown symlinks.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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 "qom/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_realize: The parent class' realize handler.
37
 
 * @parent_reset: The parent class' reset handler.
38
 
 *
39
 
 * An ARM CPU model.
40
 
 */
41
 
typedef struct ARMCPUClass {
42
 
    /*< private >*/
43
 
    CPUClass parent_class;
44
 
    /*< public >*/
45
 
 
46
 
    DeviceRealize parent_realize;
47
 
    void (*parent_reset)(CPUState *cpu);
48
 
} ARMCPUClass;
49
 
 
50
 
/**
51
 
 * ARMCPU:
52
 
 * @env: #CPUARMState
53
 
 *
54
 
 * An ARM CPU core.
55
 
 */
56
 
typedef struct ARMCPU {
57
 
    /*< private >*/
58
 
    CPUState parent_obj;
59
 
    /*< public >*/
60
 
 
61
 
    CPUARMState env;
62
 
 
63
 
    /* Coprocessor information */
64
 
    GHashTable *cp_regs;
65
 
    /* For marshalling (mostly coprocessor) register state between the
66
 
     * kernel and QEMU (for KVM) and between two QEMUs (for migration),
67
 
     * we use these arrays.
68
 
     */
69
 
    /* List of register indexes managed via these arrays; (full KVM style
70
 
     * 64 bit indexes, not CPRegInfo 32 bit indexes)
71
 
     */
72
 
    uint64_t *cpreg_indexes;
73
 
    /* Values of the registers (cpreg_indexes[i]'s value is cpreg_values[i]) */
74
 
    uint64_t *cpreg_values;
75
 
    /* When using KVM, keeps a copy of the initial state of the VCPU,
76
 
     * so that on reset we can feed the reset values back into the kernel.
77
 
     */
78
 
    uint64_t *cpreg_reset_values;
79
 
    /* Length of the indexes, values, reset_values arrays */
80
 
    int32_t cpreg_array_len;
81
 
    /* These are used only for migration: incoming data arrives in
82
 
     * these fields and is sanity checked in post_load before copying
83
 
     * to the working data structures above.
84
 
     */
85
 
    uint64_t *cpreg_vmstate_indexes;
86
 
    uint64_t *cpreg_vmstate_values;
87
 
    int32_t cpreg_vmstate_array_len;
88
 
 
89
 
    /* Timers used by the generic (architected) timer */
90
 
    QEMUTimer *gt_timer[NUM_GTIMERS];
91
 
    /* GPIO outputs for generic timer */
92
 
    qemu_irq gt_timer_outputs[NUM_GTIMERS];
93
 
 
94
 
    /* The instance init functions for implementation-specific subclasses
95
 
     * set these fields to specify the implementation-dependent values of
96
 
     * various constant registers and reset values of non-constant
97
 
     * registers.
98
 
     * Some of these might become QOM properties eventually.
99
 
     * Field names match the official register names as defined in the
100
 
     * ARMv7AR ARM Architecture Reference Manual. A reset_ prefix
101
 
     * is used for reset values of non-constant registers; no reset_
102
 
     * prefix means a constant register.
103
 
     */
104
 
    uint32_t midr;
105
 
    uint32_t reset_fpsid;
106
 
    uint32_t mvfr0;
107
 
    uint32_t mvfr1;
108
 
    uint32_t ctr;
109
 
    uint32_t reset_sctlr;
110
 
    uint32_t id_pfr0;
111
 
    uint32_t id_pfr1;
112
 
    uint32_t id_dfr0;
113
 
    uint32_t id_afr0;
114
 
    uint32_t id_mmfr0;
115
 
    uint32_t id_mmfr1;
116
 
    uint32_t id_mmfr2;
117
 
    uint32_t id_mmfr3;
118
 
    uint32_t id_isar0;
119
 
    uint32_t id_isar1;
120
 
    uint32_t id_isar2;
121
 
    uint32_t id_isar3;
122
 
    uint32_t id_isar4;
123
 
    uint32_t id_isar5;
124
 
    uint32_t clidr;
125
 
    /* The elements of this array are the CCSIDR values for each cache,
126
 
     * in the order L1DCache, L1ICache, L2DCache, L2ICache, etc.
127
 
     */
128
 
    uint32_t ccsidr[16];
129
 
    uint32_t reset_cbar;
130
 
    uint32_t reset_auxcr;
131
 
} ARMCPU;
132
 
 
133
 
#define TYPE_AARCH64_CPU "aarch64-cpu"
134
 
#define AARCH64_CPU_CLASS(klass) \
135
 
    OBJECT_CLASS_CHECK(AArch64CPUClass, (klass), TYPE_AARCH64_CPU)
136
 
#define AARCH64_CPU_GET_CLASS(obj) \
137
 
    OBJECT_GET_CLASS(AArch64CPUClass, (obj), TYPE_AArch64_CPU)
138
 
 
139
 
typedef struct AArch64CPUClass {
140
 
    /*< private >*/
141
 
    ARMCPUClass parent_class;
142
 
    /*< public >*/
143
 
} AArch64CPUClass;
144
 
 
145
 
static inline ARMCPU *arm_env_get_cpu(CPUARMState *env)
146
 
{
147
 
    return container_of(env, ARMCPU, env);
148
 
}
149
 
 
150
 
#define ENV_GET_CPU(e) CPU(arm_env_get_cpu(e))
151
 
 
152
 
#define ENV_OFFSET offsetof(ARMCPU, env)
153
 
 
154
 
#ifndef CONFIG_USER_ONLY
155
 
extern const struct VMStateDescription vmstate_arm_cpu;
156
 
#endif
157
 
 
158
 
void register_cp_regs_for_features(ARMCPU *cpu);
159
 
void init_cpreg_list(ARMCPU *cpu);
160
 
 
161
 
void arm_cpu_do_interrupt(CPUState *cpu);
162
 
void arm_v7m_cpu_do_interrupt(CPUState *cpu);
163
 
 
164
 
void arm_cpu_dump_state(CPUState *cs, FILE *f, fprintf_function cpu_fprintf,
165
 
                        int flags);
166
 
 
167
 
hwaddr arm_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr);
168
 
 
169
 
int arm_cpu_gdb_read_register(CPUState *cpu, uint8_t *buf, int reg);
170
 
int arm_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
171
 
 
172
 
/* Callback functions for the generic timer's timers. */
173
 
void arm_gt_ptimer_cb(void *opaque);
174
 
void arm_gt_vtimer_cb(void *opaque);
175
 
 
176
 
#ifdef TARGET_AARCH64
177
 
void aarch64_cpu_dump_state(CPUState *cs, FILE *f,
178
 
                            fprintf_function cpu_fprintf, int flags);
179
 
int aarch64_cpu_gdb_read_register(CPUState *cpu, uint8_t *buf, int reg);
180
 
int aarch64_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
181
 
#endif
182
 
 
183
 
#endif