target-cris: make cpu-qom.h not target specific

Make CRISCPU an opaque type within cpu-qom.h, and move all definitions of
private methods, as well as all type definitions that require knowledge
of the layout to cpu.h.  This helps making files independent of NEED_CPU_H
if they only need to pass around CPU pointers.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2016-03-15 13:49:25 +01:00
parent 74e755647c
commit 28618ac652
2 changed files with 41 additions and 40 deletions

View File

@ -50,44 +50,6 @@ typedef struct CRISCPUClass {
uint32_t vr; uint32_t vr;
} CRISCPUClass; } CRISCPUClass;
/** typedef struct CRISCPU CRISCPU;
* CRISCPU:
* @env: #CPUCRISState
*
* A CRIS CPU.
*/
typedef struct CRISCPU {
/*< private >*/
CPUState parent_obj;
/*< public >*/
CPUCRISState env;
} CRISCPU;
static inline CRISCPU *cris_env_get_cpu(CPUCRISState *env)
{
return container_of(env, CRISCPU, env);
}
#define ENV_GET_CPU(e) CPU(cris_env_get_cpu(e))
#define ENV_OFFSET offsetof(CRISCPU, env)
#ifndef CONFIG_USER_ONLY
extern const struct VMStateDescription vmstate_cris_cpu;
#endif
void cris_cpu_do_interrupt(CPUState *cpu);
void crisv10_cpu_do_interrupt(CPUState *cpu);
bool cris_cpu_exec_interrupt(CPUState *cpu, int int_req);
void cris_cpu_dump_state(CPUState *cs, FILE *f, fprintf_function cpu_fprintf,
int flags);
hwaddr cris_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr);
int crisv10_cpu_gdb_read_register(CPUState *cpu, uint8_t *buf, int reg);
int cris_cpu_gdb_read_register(CPUState *cpu, uint8_t *buf, int reg);
int cris_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
#endif #endif

View File

@ -21,6 +21,7 @@
#define CPU_CRIS_H #define CPU_CRIS_H
#include "qemu-common.h" #include "qemu-common.h"
#include "cpu-qom.h"
#define TARGET_LONG_BITS 32 #define TARGET_LONG_BITS 32
@ -171,7 +172,45 @@ typedef struct CPUCRISState {
void *load_info; void *load_info;
} CPUCRISState; } CPUCRISState;
#include "cpu-qom.h" /**
* CRISCPU:
* @env: #CPUCRISState
*
* A CRIS CPU.
*/
struct CRISCPU {
/*< private >*/
CPUState parent_obj;
/*< public >*/
CPUCRISState env;
};
static inline CRISCPU *cris_env_get_cpu(CPUCRISState *env)
{
return container_of(env, CRISCPU, env);
}
#define ENV_GET_CPU(e) CPU(cris_env_get_cpu(e))
#define ENV_OFFSET offsetof(CRISCPU, env)
#ifndef CONFIG_USER_ONLY
extern const struct VMStateDescription vmstate_cris_cpu;
#endif
void cris_cpu_do_interrupt(CPUState *cpu);
void crisv10_cpu_do_interrupt(CPUState *cpu);
bool cris_cpu_exec_interrupt(CPUState *cpu, int int_req);
void cris_cpu_dump_state(CPUState *cs, FILE *f, fprintf_function cpu_fprintf,
int flags);
hwaddr cris_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr);
int crisv10_cpu_gdb_read_register(CPUState *cpu, uint8_t *buf, int reg);
int cris_cpu_gdb_read_register(CPUState *cpu, uint8_t *buf, int reg);
int cris_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
CRISCPU *cpu_cris_init(const char *cpu_model); CRISCPU *cpu_cris_init(const char *cpu_model);
int cpu_cris_exec(CPUState *cpu); int cpu_cris_exec(CPUState *cpu);