/[gxemul]/upstream/0.3.3.1/src/include/cpu.h
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /upstream/0.3.3.1/src/include/cpu.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7 - (show annotations)
Mon Oct 8 16:18:14 2007 UTC (16 years, 7 months ago) by dpavlin
File MIME type: text/plain
File size: 5037 byte(s)
0.3.3.1
1 #ifndef CPU_H
2 #define CPU_H
3
4 /*
5 * Copyright (C) 2005 Anders Gavare. All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
30 *
31 * $Id: cpu.h,v 1.23 2005/06/02 00:08:43 debug Exp $
32 *
33 * See cpu.c.
34 */
35
36
37 #include <sys/types.h>
38 #include <inttypes.h>
39 #include <sys/time.h>
40
41 /* This is needed for undefining 'mips' or 'ppc', on weird systems: */
42 #include "../../config.h"
43
44 #include "cpu_alpha.h"
45 #include "cpu_arm.h"
46 #include "cpu_hppa.h"
47 #include "cpu_mips.h"
48 #include "cpu_ppc.h"
49 #include "cpu_sparc.h"
50 #include "cpu_urisc.h"
51 #include "cpu_x86.h"
52
53 struct cpu;
54 struct emul;
55 struct machine;
56 struct memory;
57
58
59 struct cpu_family {
60 struct cpu_family *next;
61 int arch;
62
63 /* These are filled in by each CPU family's init function: */
64 char *name;
65 struct cpu *(*cpu_new)(struct memory *mem,
66 struct machine *machine,
67 int cpu_id, char *cpu_type_name);
68 void (*list_available_types)(void);
69 void (*register_match)(struct machine *m,
70 char *name, int writeflag,
71 uint64_t *valuep, int *match_register);
72 int (*disassemble_instr)(struct cpu *cpu,
73 unsigned char *instr, int running,
74 uint64_t dumpaddr, int bintrans);
75 void (*register_dump)(struct cpu *cpu,
76 int gprs, int coprocs);
77 int (*run)(struct emul *emul,
78 struct machine *machine);
79 void (*dumpinfo)(struct cpu *cpu);
80 void (*show_full_statistics)(struct machine *m);
81 void (*tlbdump)(struct machine *m, int x,
82 int rawflag);
83 int (*interrupt)(struct cpu *cpu, uint64_t irq_nr);
84 int (*interrupt_ack)(struct cpu *cpu,
85 uint64_t irq_nr);
86 };
87
88
89 struct cpu {
90 /* Pointer back to the machine this CPU is in: */
91 struct machine *machine;
92
93 int byte_order;
94 int running;
95 int dead;
96 int bootstrap_cpu_flag;
97 int cpu_id;
98 char *name;
99
100 struct memory *mem;
101 int (*memory_rw)(struct cpu *cpu,
102 struct memory *mem, uint64_t vaddr,
103 unsigned char *data, size_t len,
104 int writeflag, int cache_flags);
105 int (*translate_address)(struct cpu *, uint64_t vaddr,
106 uint64_t *return_addr, int flags);
107 void (*useremul_syscall)(struct cpu *cpu,
108 uint32_t code);
109
110 /* Things that all CPU families have: */
111 uint64_t pc;
112
113 /* CPU-family dependant: */
114 union {
115 struct alpha_cpu alpha;
116 struct arm_cpu arm;
117 struct hppa_cpu hppa;
118 struct mips_cpu mips;
119 struct ppc_cpu ppc;
120 struct sparc_cpu sparc;
121 struct urisc_cpu urisc;
122 struct x86_cpu x86;
123 } cd;
124 };
125
126
127 /* cpu.c: */
128 struct cpu *cpu_new(struct memory *mem, struct machine *machine,
129 int cpu_id, char *cpu_type_name);
130 void cpu_show_full_statistics(struct machine *m);
131 void cpu_tlbdump(struct machine *m, int x, int rawflag);
132 void cpu_register_match(struct machine *m, char *name,
133 int writeflag, uint64_t *valuep, int *match_register);
134 void cpu_register_dump(struct machine *m, struct cpu *cpu,
135 int gprs, int coprocs);
136 int cpu_disassemble_instr(struct machine *m, struct cpu *cpu,
137 unsigned char *instr, int running, uint64_t addr, int bintrans);
138 int cpu_interrupt(struct cpu *cpu, uint64_t irq_nr);
139 int cpu_interrupt_ack(struct cpu *cpu, uint64_t irq_nr);
140 void cpu_run_init(struct emul *emul, struct machine *machine);
141 int cpu_run(struct emul *emul, struct machine *machine);
142 void cpu_run_deinit(struct emul *emul, struct machine *machine);
143 void cpu_dumpinfo(struct machine *m, struct cpu *cpu);
144 void cpu_list_available_types(void);
145 void cpu_show_cycles(struct machine *machine,
146 struct timeval *starttime, int64_t ncycles, int forced);
147 struct cpu_family *cpu_family_ptr_by_number(int arch);
148 void cpu_init(void);
149
150
151 #endif /* CPU_H */

  ViewVC Help
Powered by ViewVC 1.1.26