28 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
29 |
* |
* |
30 |
* |
* |
31 |
* $Id: cpu.h,v 1.22 2005/04/15 21:56:25 debug Exp $ |
* $Id: cpu.h,v 1.27 2005/06/27 10:43:17 debug Exp $ |
32 |
* |
* |
33 |
* See cpu.c. |
* See cpu.c. |
34 |
*/ |
*/ |
41 |
/* This is needed for undefining 'mips' or 'ppc', on weird systems: */ |
/* This is needed for undefining 'mips' or 'ppc', on weird systems: */ |
42 |
#include "../../config.h" |
#include "../../config.h" |
43 |
|
|
44 |
#include "cpu_alpha.h" |
#include "cpu_arm.h" |
|
#include "cpu_hppa.h" |
|
45 |
#include "cpu_mips.h" |
#include "cpu_mips.h" |
46 |
#include "cpu_ppc.h" |
#include "cpu_ppc.h" |
|
#include "cpu_sparc.h" |
|
47 |
#include "cpu_urisc.h" |
#include "cpu_urisc.h" |
48 |
#include "cpu_x86.h" |
#include "cpu_x86.h" |
49 |
|
|
59 |
|
|
60 |
/* These are filled in by each CPU family's init function: */ |
/* These are filled in by each CPU family's init function: */ |
61 |
char *name; |
char *name; |
62 |
struct cpu *(*cpu_new)(struct memory *mem, |
int (*cpu_new)(struct cpu *cpu, struct memory *mem, |
63 |
struct machine *machine, |
struct machine *machine, |
64 |
int cpu_id, char *cpu_type_name); |
int cpu_id, char *cpu_type_name); |
65 |
void (*list_available_types)(void); |
void (*list_available_types)(void); |
82 |
uint64_t irq_nr); |
uint64_t irq_nr); |
83 |
}; |
}; |
84 |
|
|
85 |
|
#ifdef TRACE_NULL_CRASHES |
86 |
|
#define TRACE_NULL_N_ENTRIES 16 |
87 |
|
#endif |
88 |
|
|
89 |
struct cpu { |
struct cpu { |
90 |
/* Pointer back to the machine this CPU is in: */ |
/* Pointer back to the machine this CPU is in: */ |
110 |
/* Things that all CPU families have: */ |
/* Things that all CPU families have: */ |
111 |
uint64_t pc; |
uint64_t pc; |
112 |
|
|
113 |
|
#ifdef TRACE_NULL_CRASHES |
114 |
|
uint64_t trace_null_addr[TRACE_NULL_N_ENTRIES]; |
115 |
|
int trace_null_index; |
116 |
|
#endif |
117 |
|
|
118 |
/* CPU-family dependant: */ |
/* CPU-family dependant: */ |
119 |
union { |
union { |
120 |
struct alpha_cpu alpha; |
struct arm_cpu arm; |
|
struct hppa_cpu hppa; |
|
121 |
struct mips_cpu mips; |
struct mips_cpu mips; |
122 |
struct ppc_cpu ppc; |
struct ppc_cpu ppc; |
|
struct sparc_cpu sparc; |
|
123 |
struct urisc_cpu urisc; |
struct urisc_cpu urisc; |
124 |
struct x86_cpu x86; |
struct x86_cpu x86; |
125 |
} cd; |
} cd; |
144 |
void cpu_run_deinit(struct emul *emul, struct machine *machine); |
void cpu_run_deinit(struct emul *emul, struct machine *machine); |
145 |
void cpu_dumpinfo(struct machine *m, struct cpu *cpu); |
void cpu_dumpinfo(struct machine *m, struct cpu *cpu); |
146 |
void cpu_list_available_types(void); |
void cpu_list_available_types(void); |
147 |
void cpu_show_cycles(struct machine *machine, |
void cpu_show_cycles(struct machine *machine, int forced); |
|
struct timeval *starttime, int64_t ncycles, int forced); |
|
148 |
struct cpu_family *cpu_family_ptr_by_number(int arch); |
struct cpu_family *cpu_family_ptr_by_number(int arch); |
149 |
void cpu_init(void); |
void cpu_init(void); |
150 |
|
|