/[gxemul]/trunk/src/include/machine.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 /trunk/src/include/machine.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 49 - (show annotations)
Wed Oct 10 23:31:09 2007 UTC (16 years, 6 months ago) by dpavlin
File MIME type: text/plain
File size: 11431 byte(s)
forked off sandpoint machine with mpc40x device from pmppc to isolate changes
1 #ifndef MACHINE_H
2 #define MACHINE_H
3
4 /*
5 * Copyright (C) 2005-2007 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: machine.h,v 1.182 2007/08/29 20:36:49 debug Exp $
32 */
33
34 #include <sys/types.h>
35
36 #include "symbol.h"
37
38 struct cpu_family;
39 struct diskimage;
40 struct emul;
41 struct fb_window;
42 struct machine_arcbios;
43 struct machine_pmax;
44 struct memory;
45 struct of_data;
46 struct settings;
47
48
49 /* TODO: This should probably go away... */
50 struct isa_pic_data {
51 struct pic8259_data *pic1;
52 struct pic8259_data *pic2;
53
54 int *pending_timer_interrupts;
55 int last_int;
56 };
57
58 struct breakpoints {
59 int n;
60
61 /* Arrays, with one element for each entry: */
62 char **string;
63 uint64_t *addr;
64 };
65
66 struct statistics {
67 char *filename;
68 FILE *file;
69 int enabled;
70 char *fields; /* "vpi" etc. */
71 };
72
73 struct tick_functions {
74 int n_entries;
75
76 /* Arrays, with one element for each entry: */
77 int *ticks_till_next;
78 int *ticks_reset_value;
79 void (*(*f))(struct cpu *, void *);
80 void **extra;
81 };
82
83 struct x11_md {
84 /* X11/framebuffer stuff: */
85 int in_use;
86 int scaledown;
87 int scaleup;
88 int n_display_names;
89 char **display_names;
90 int current_display_name_nr; /* updated by x11.c */
91
92 int n_fb_windows;
93 struct fb_window **fb_windows;
94 };
95
96
97 /*
98 * The machine struct:
99 */
100 struct machine {
101 /* Pointer back to the emul struct we are in: */
102 struct emul *emul;
103
104 /* Settings: */
105 struct settings *settings;
106
107 /* Name as choosen by the user: */
108 char *name;
109
110 /* Full "path" to the machine, e.g. "machine[0]": */
111 char *path;
112
113 int arch; /* ARCH_MIPS, ARCH_PPC, .. */
114 int machine_type; /* MACHINE_PMAX, .. */
115 int machine_subtype; /* MACHINE_DEC_3MAX_5000, .. */
116
117 /* Name set by code in src/machines/machine_*.c: */
118 char *machine_name;
119
120 /* The serial number is mostly used when emulating multiple machines
121 in a network. nr_of_nics is the current nr of network cards, which
122 is useful when emulating multiple cards in one machine: */
123 int serial_nr;
124 int nr_of_nics;
125
126 /* TODO: How about multiple cpu familys in one machine? */
127 struct cpu_family *cpu_family;
128
129 struct memory *memory;
130
131 int main_console_handle;
132
133 /* Tick functions (e.g. hardware devices): */
134 struct tick_functions tick_functions;
135
136 char *cpu_name; /* TODO: remove this, there could be several
137 cpus with different names in a machine */
138 int byte_order_override;
139 int bootstrap_cpu;
140 int use_random_bootstrap_cpu;
141 int start_paused;
142 int ncpus;
143 struct cpu **cpus;
144
145 struct diskimage *first_diskimage;
146
147 struct symbol_context symbol_context;
148
149 int random_mem_contents;
150 int physical_ram_in_mb;
151 int memory_offset_in_mb;
152 int prom_emulation;
153 int register_dump;
154 int arch_pagesize;
155
156 int bootdev_type;
157 int bootdev_id;
158 char *bootstr;
159 char *bootarg;
160
161 /* Breakpoints: */
162 struct breakpoints breakpoints;
163
164 int halt_on_nonexistant_memaccess;
165 int instruction_trace;
166 int show_nr_of_instructions;
167 int show_trace_tree;
168 int emulated_hz;
169 int allow_instruction_combinations;
170 char *userland_emul; /* NULL for no userland emulation */
171 int force_netboot;
172 int slow_serial_interrupts_hack_for_linux;
173 uint64_t file_loaded_end_addr;
174 char *boot_kernel_filename;
175 char *boot_string_argument;
176 int exit_without_entering_debugger;
177 int n_gfx_cards;
178
179 /* Instruction statistics: */
180 struct statistics statistics;
181
182 /* X11/framebuffer stuff (per machine): */
183 struct x11_md x11_md;
184
185 /* Machine-dependent: (PROM stuff, etc.) */
186 union {
187 struct machine_arcbios *arc;
188 struct machine_pmax *pmax;
189 struct of_data *of_data;
190 } md;
191
192 /* Bus-specific interrupt data: */
193 /* TODO: Remove! */
194 struct isa_pic_data isa_pic_data;
195 };
196
197
198 /* Tick function "prototype": */
199 #define DEVICE_TICK(x) void dev_ ## x ## _tick(struct cpu *cpu, void *extra)
200
201
202 /*
203 * Machine emulation types:
204 */
205
206 #define ARCH_NOARCH 0
207 #define ARCH_MIPS 1
208 #define ARCH_PPC 2
209 #define ARCH_SPARC 3
210 #define ARCH_ALPHA 4
211 #define ARCH_ARM 5
212 #define ARCH_SH 6
213 #define ARCH_M88K 7
214 #define ARCH_M32R 8
215
216 /* MIPS: */
217 #define MACHINE_BAREMIPS 1000
218 #define MACHINE_TESTMIPS 1001
219 #define MACHINE_PMAX 1002
220 #define MACHINE_COBALT 1003
221 #define MACHINE_HPCMIPS 1004
222 #define MACHINE_PS2 1005
223 #define MACHINE_SGI 1006
224 #define MACHINE_ARC 1007
225 #define MACHINE_EVBMIPS 1008
226 #define MACHINE_ALGOR 1009
227 #define MACHINE_QEMU_MIPS 1010
228
229 /* PPC: */
230 #define MACHINE_BAREPPC 2000
231 #define MACHINE_TESTPPC 2001
232 #define MACHINE_PMPPC 2002
233 #define MACHINE_BEBOX 2003
234 #define MACHINE_PREP 2004
235 #define MACHINE_MACPPC 2005
236 #define MACHINE_MVMEPPC 2006
237 #define MACHINE_SANDPOINT 2007
238
239 /* SPARC: */
240 #define MACHINE_BARESPARC 3000
241 #define MACHINE_TESTSPARC 3001
242 #define MACHINE_SPARC 3002
243
244 /* Alpha: */
245 #define MACHINE_BAREALPHA 4000
246 #define MACHINE_TESTALPHA 4001
247 #define MACHINE_ALPHA 4002
248
249 /* ARM: */
250 #define MACHINE_BAREARM 5000
251 #define MACHINE_TESTARM 5001
252 #define MACHINE_CATS 5002
253 #define MACHINE_HPCARM 5003
254 #define MACHINE_NETWINDER 5004
255 #define MACHINE_IQ80321 5005
256 #define MACHINE_QEMU_ARM 5006
257
258 /* SH: */
259 #define MACHINE_BARESH 6000
260 #define MACHINE_TESTSH 6001
261 #define MACHINE_HPCSH 6002
262 #define MACHINE_DREAMCAST 6003
263 #define MACHINE_LANDISK 6004
264
265 /* M88K: */
266 #define MACHINE_BAREM88K 7000
267 #define MACHINE_TESTM88K 7001
268 #define MACHINE_MVME88K 7002
269
270 /* M32R: */
271 #define MACHINE_BAREM32R 8000
272 #define MACHINE_TESTM32R 8001
273
274 /* Other "pseudo"-machines: */
275 #define MACHINE_NONE 0
276 #define MACHINE_USERLAND 100000
277
278 /* DEC: */
279 #define MACHINE_DEC_PMAX_3100 1
280 #define MACHINE_DEC_3MAX_5000 2
281 #define MACHINE_DEC_3MIN_5000 3
282 #define MACHINE_DEC_3MAXPLUS_5000 4
283 #define MACHINE_DEC_5800 5
284 #define MACHINE_DEC_5400 6
285 #define MACHINE_DEC_MAXINE_5000 7
286 #define MACHINE_DEC_5500 11
287 #define MACHINE_DEC_MIPSMATE_5100 12
288
289 #define DEC_PROM_CALLBACK_STRUCT 0xffffffffbfc04000ULL
290 #define DEC_PROM_EMULATION 0xffffffffbfc08000ULL
291 #define DEC_PROM_INITIAL_ARGV (INITIAL_STACK_POINTER + 0x80)
292 #define DEC_PROM_STRINGS 0xffffffffbfc20000ULL
293 #define DEC_PROM_TCINFO 0xffffffffbfc2c000ULL
294 #define DEC_MEMMAP_ADDR 0xffffffffbfc30000ULL
295
296 /* HPCmips: */
297 #define MACHINE_HPCMIPS_CASIO_BE300 1
298 #define MACHINE_HPCMIPS_CASIO_E105 2
299 #define MACHINE_HPCMIPS_NEC_MOBILEPRO_770 3
300 #define MACHINE_HPCMIPS_NEC_MOBILEPRO_780 4
301 #define MACHINE_HPCMIPS_NEC_MOBILEPRO_800 5
302 #define MACHINE_HPCMIPS_NEC_MOBILEPRO_880 6
303 #define MACHINE_HPCMIPS_AGENDA_VR3 7
304 #define MACHINE_HPCMIPS_IBM_WORKPAD_Z50 8
305
306 /* HPCarm: */
307 #define MACHINE_HPCARM_IPAQ 1
308 #define MACHINE_HPCARM_JORNADA720 2
309
310 /* HPCsh: */
311 #define MACHINE_HPCSH_JORNADA680 1
312 #define MACHINE_HPCSH_JORNADA690 2
313
314 /* SGI and ARC: */
315 #define MACHINE_ARC_JAZZ_PICA 1
316 #define MACHINE_ARC_JAZZ_MAGNUM 2
317
318 /* Algor: */
319 #define MACHINE_ALGOR_P4032 1
320 #define MACHINE_ALGOR_P5064 2
321
322 /* EVBMIPS: */
323 #define MACHINE_EVBMIPS_MALTA 1
324 #define MACHINE_EVBMIPS_MALTA_BE 2
325
326 /* PReP: */
327 #define MACHINE_PREP_IBM6050 1
328 #define MACHINE_PREP_MVME2400 2
329
330 /* Sun SPARC: */
331 #define MACHINE_SPARC_SS5 1
332 #define MACHINE_SPARC_SS20 2
333 #define MACHINE_SPARC_ULTRA1 3
334 #define MACHINE_SPARC_ULTRA60 4
335 #define MACHINE_SPARC_SUN4V 5
336
337 /* MacPPC: TODO: Real model names */
338 #define MACHINE_MACPPC_G3 1
339 #define MACHINE_MACPPC_G4 2
340 #define MACHINE_MACPPC_G5 3
341
342 /* MVMEPPC */
343 #define MACHINE_MVMEPPC_1600 1
344 #define MACHINE_MVMEPPC_2100 2
345 #define MACHINE_MVMEPPC_5500 3
346
347 /* MVME88K */
348 #define MACHINE_MVME88K_187 1
349 #define MACHINE_MVME88K_188 2
350 #define MACHINE_MVME88K_197 3
351
352
353 /* For the automachine system: */
354 struct machine_entry_subtype {
355 int machine_subtype;/* Old-style subtype */
356 const char *name; /* Official name */
357 int n_aliases;
358 char **aliases; /* Aliases */
359 };
360
361 struct machine_entry {
362 struct machine_entry *next;
363
364 /* Machine type: */
365 int arch;
366 int machine_type; /* Old-style type */
367 const char *name; /* Official name */
368 int n_aliases;
369 char **aliases; /* Aliases */
370
371 void (*setup)(struct machine *, struct cpu *);
372 void (*set_default_cpu)(struct machine *);
373 void (*set_default_ram)(struct machine *);
374
375 /* Machine subtypes: */
376 int n_subtypes;
377 struct machine_entry_subtype **subtype;
378 };
379
380 #define MACHINE_SETUP_TYPE(n) void (*n)(struct machine *, struct cpu *)
381 #define MACHINE_SETUP(x) void machine_setup_ ## x(struct machine *machine, \
382 struct cpu *cpu)
383 #define MACHINE_DEFAULT_CPU(x) void machine_default_cpu_ ## x(struct machine *machine)
384 #define MACHINE_DEFAULT_RAM(x) void machine_default_ram_ ## x(struct machine *machine)
385 #define MACHINE_REGISTER(x) void machine_register_ ## x(void)
386 #define MR_DEFAULT(x,name,arch,type) struct machine_entry \
387 *me = machine_entry_new(name,arch,type); \
388 me->setup = machine_setup_ ## x; \
389 me->set_default_cpu = machine_default_cpu_ ## x; \
390 machine_entry_register(me, arch);
391 void automachine_init(void);
392
393
394 /* machine.c: */
395 struct machine *machine_new(char *name, struct emul *emul, int id);
396 void machine_destroy(struct machine *machine);
397 int machine_name_to_type(char *stype, char *ssubtype,
398 int *type, int *subtype, int *arch);
399 void machine_add_breakpoint_string(struct machine *machine, char *str);
400 void machine_add_tickfunction(struct machine *machine,
401 void (*func)(struct cpu *, void *), void *extra, int clockshift);
402 void machine_statistics_init(struct machine *, char *fname);
403 void machine_register(char *name, MACHINE_SETUP_TYPE(setup));
404 void machine_setup(struct machine *);
405 void machine_memsize_fix(struct machine *);
406 void machine_default_cputype(struct machine *);
407 void machine_dumpinfo(struct machine *);
408 int machine_run(struct machine *machine);
409 void machine_list_available_types_and_cpus(void);
410 struct machine_entry *machine_entry_new(const char *name,
411 int arch, int oldstyle_type);
412 void machine_entry_add_alias(struct machine_entry *me, const char *name);
413 void machine_entry_add_subtype(struct machine_entry *me, const char *name,
414 int oldstyle_subtype, ...);
415 void machine_entry_register(struct machine_entry *me, int arch);
416 void machine_init(void);
417
418
419 #endif /* MACHINE_H */

  ViewVC Help
Powered by ViewVC 1.1.26