/[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

Annotation of /trunk/src/include/machine.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 49 - (hide 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 dpavlin 4 #ifndef MACHINE_H
2     #define MACHINE_H
3    
4     /*
5 dpavlin 34 * Copyright (C) 2005-2007 Anders Gavare. All rights reserved.
6 dpavlin 4 *
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 dpavlin 44 * $Id: machine.h,v 1.182 2007/08/29 20:36:49 debug Exp $
32 dpavlin 4 */
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 dpavlin 42 struct machine_arcbios;
43     struct machine_pmax;
44 dpavlin 4 struct memory;
45 dpavlin 22 struct of_data;
46 dpavlin 32 struct settings;
47 dpavlin 4
48 dpavlin 32
49 dpavlin 34 /* TODO: This should probably go away... */
50 dpavlin 12 struct isa_pic_data {
51 dpavlin 20 struct pic8259_data *pic1;
52     struct pic8259_data *pic2;
53 dpavlin 30
54 dpavlin 32 int *pending_timer_interrupts;
55 dpavlin 20 int last_int;
56 dpavlin 12 };
57 dpavlin 4
58 dpavlin 42 struct breakpoints {
59     int n;
60 dpavlin 12
61 dpavlin 42 /* Arrays, with one element for each entry: */
62     char **string;
63     uint64_t *addr;
64     };
65    
66 dpavlin 44 struct statistics {
67     char *filename;
68     FILE *file;
69     int enabled;
70     char *fields; /* "vpi" etc. */
71     };
72    
73 dpavlin 42 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 dpavlin 44
97     /*
98     * The machine struct:
99     */
100 dpavlin 4 struct machine {
101     /* Pointer back to the emul struct we are in: */
102     struct emul *emul;
103    
104 dpavlin 32 /* Settings: */
105     struct settings *settings;
106    
107 dpavlin 4 /* Name as choosen by the user: */
108     char *name;
109    
110 dpavlin 44 /* Full "path" to the machine, e.g. "machine[0]": */
111 dpavlin 34 char *path;
112    
113 dpavlin 4 int arch; /* ARCH_MIPS, ARCH_PPC, .. */
114 dpavlin 22 int machine_type; /* MACHINE_PMAX, .. */
115 dpavlin 4 int machine_subtype; /* MACHINE_DEC_3MAX_5000, .. */
116    
117 dpavlin 22 /* Name set by code in src/machines/machine_*.c: */
118 dpavlin 4 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 dpavlin 28 /* TODO: How about multiple cpu familys in one machine? */
127 dpavlin 4 struct cpu_family *cpu_family;
128    
129     struct memory *memory;
130    
131     int main_console_handle;
132    
133 dpavlin 42 /* Tick functions (e.g. hardware devices): */
134     struct tick_functions tick_functions;
135 dpavlin 4
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 dpavlin 12 int arch_pagesize;
155 dpavlin 4
156 dpavlin 22 int bootdev_type;
157     int bootdev_id;
158     char *bootstr;
159     char *bootarg;
160    
161 dpavlin 28 /* Breakpoints: */
162 dpavlin 42 struct breakpoints breakpoints;
163 dpavlin 4
164 dpavlin 34 int halt_on_nonexistant_memaccess;
165 dpavlin 4 int instruction_trace;
166     int show_nr_of_instructions;
167 dpavlin 28 int show_trace_tree;
168 dpavlin 4 int emulated_hz;
169 dpavlin 28 int allow_instruction_combinations;
170 dpavlin 4 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 dpavlin 28 /* Instruction statistics: */
180 dpavlin 44 struct statistics statistics;
181 dpavlin 28
182 dpavlin 42 /* X11/framebuffer stuff (per machine): */
183     struct x11_md x11_md;
184    
185 dpavlin 6 /* Machine-dependent: (PROM stuff, etc.) */
186     union {
187 dpavlin 42 struct machine_arcbios *arc;
188     struct machine_pmax *pmax;
189 dpavlin 34 struct of_data *of_data;
190 dpavlin 6 } md;
191 dpavlin 4
192 dpavlin 14 /* Bus-specific interrupt data: */
193 dpavlin 34 /* TODO: Remove! */
194 dpavlin 14 struct isa_pic_data isa_pic_data;
195 dpavlin 4 };
196    
197    
198 dpavlin 28 /* Tick function "prototype": */
199     #define DEVICE_TICK(x) void dev_ ## x ## _tick(struct cpu *cpu, void *extra)
200    
201    
202 dpavlin 4 /*
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 dpavlin 12 #define ARCH_ALPHA 4
211 dpavlin 34 #define ARCH_ARM 5
212 dpavlin 40 #define ARCH_SH 6
213 dpavlin 42 #define ARCH_M88K 7
214 dpavlin 44 #define ARCH_M32R 8
215 dpavlin 4
216     /* MIPS: */
217     #define MACHINE_BAREMIPS 1000
218     #define MACHINE_TESTMIPS 1001
219 dpavlin 22 #define MACHINE_PMAX 1002
220 dpavlin 4 #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 dpavlin 42 #define MACHINE_EVBMIPS 1008
226     #define MACHINE_ALGOR 1009
227     #define MACHINE_QEMU_MIPS 1010
228 dpavlin 4
229     /* PPC: */
230     #define MACHINE_BAREPPC 2000
231     #define MACHINE_TESTPPC 2001
232 dpavlin 38 #define MACHINE_PMPPC 2002
233 dpavlin 42 #define MACHINE_BEBOX 2003
234     #define MACHINE_PREP 2004
235     #define MACHINE_MACPPC 2005
236     #define MACHINE_MVMEPPC 2006
237 dpavlin 49 #define MACHINE_SANDPOINT 2007
238 dpavlin 4
239     /* SPARC: */
240     #define MACHINE_BARESPARC 3000
241 dpavlin 12 #define MACHINE_TESTSPARC 3001
242 dpavlin 24 #define MACHINE_SPARC 3002
243 dpavlin 4
244     /* Alpha: */
245 dpavlin 12 #define MACHINE_BAREALPHA 4000
246     #define MACHINE_TESTALPHA 4001
247     #define MACHINE_ALPHA 4002
248 dpavlin 4
249 dpavlin 6 /* ARM: */
250 dpavlin 34 #define MACHINE_BAREARM 5000
251     #define MACHINE_TESTARM 5001
252     #define MACHINE_CATS 5002
253     #define MACHINE_HPCARM 5003
254 dpavlin 42 #define MACHINE_NETWINDER 5004
255     #define MACHINE_IQ80321 5005
256     #define MACHINE_QEMU_ARM 5006
257 dpavlin 6
258 dpavlin 14 /* SH: */
259 dpavlin 40 #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 dpavlin 14
265 dpavlin 40 /* M88K: */
266 dpavlin 42 #define MACHINE_BAREM88K 7000
267     #define MACHINE_TESTM88K 7001
268     #define MACHINE_MVME88K 7002
269 dpavlin 40
270 dpavlin 44 /* M32R: */
271     #define MACHINE_BAREM32R 8000
272     #define MACHINE_TESTM32R 8001
273    
274 dpavlin 4 /* 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 dpavlin 14 /* 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 dpavlin 4 /* SGI and ARC: */
315 dpavlin 42 #define MACHINE_ARC_JAZZ_PICA 1
316     #define MACHINE_ARC_JAZZ_MAGNUM 2
317 dpavlin 4
318 dpavlin 20 /* Algor: */
319 dpavlin 42 #define MACHINE_ALGOR_P4032 1
320     #define MACHINE_ALGOR_P5064 2
321 dpavlin 20
322 dpavlin 8 /* EVBMIPS: */
323     #define MACHINE_EVBMIPS_MALTA 1
324 dpavlin 12 #define MACHINE_EVBMIPS_MALTA_BE 2
325 dpavlin 8
326 dpavlin 22 /* PReP: */
327     #define MACHINE_PREP_IBM6050 1
328     #define MACHINE_PREP_MVME2400 2
329    
330 dpavlin 24 /* 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 dpavlin 36 #define MACHINE_SPARC_SUN4V 5
336 dpavlin 24
337 dpavlin 4 /* MacPPC: TODO: Real model names */
338 dpavlin 24 #define MACHINE_MACPPC_G3 1
339     #define MACHINE_MACPPC_G4 2
340     #define MACHINE_MACPPC_G5 3
341 dpavlin 4
342 dpavlin 22 /* MVMEPPC */
343     #define MACHINE_MVMEPPC_1600 1
344     #define MACHINE_MVMEPPC_2100 2
345     #define MACHINE_MVMEPPC_5500 3
346    
347 dpavlin 42 /* MVME88K */
348     #define MACHINE_MVME88K_187 1
349     #define MACHINE_MVME88K_188 2
350     #define MACHINE_MVME88K_197 3
351 dpavlin 4
352 dpavlin 42
353 dpavlin 22 /* 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 dpavlin 26 #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 dpavlin 22 void automachine_init(void);
392    
393    
394 dpavlin 4 /* machine.c: */
395 dpavlin 34 struct machine *machine_new(char *name, struct emul *emul, int id);
396 dpavlin 32 void machine_destroy(struct machine *machine);
397 dpavlin 4 int machine_name_to_type(char *stype, char *ssubtype,
398     int *type, int *subtype, int *arch);
399 dpavlin 42 void machine_add_breakpoint_string(struct machine *machine, char *str);
400 dpavlin 4 void machine_add_tickfunction(struct machine *machine,
401 dpavlin 42 void (*func)(struct cpu *, void *), void *extra, int clockshift);
402 dpavlin 28 void machine_statistics_init(struct machine *, char *fname);
403 dpavlin 22 void machine_register(char *name, MACHINE_SETUP_TYPE(setup));
404 dpavlin 4 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 dpavlin 26 int machine_run(struct machine *machine);
409 dpavlin 4 void machine_list_available_types_and_cpus(void);
410 dpavlin 22 struct machine_entry *machine_entry_new(const char *name,
411 dpavlin 26 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 dpavlin 4 void machine_init(void);
417    
418    
419     #endif /* MACHINE_H */

  ViewVC Help
Powered by ViewVC 1.1.26