/[gxemul]/trunk/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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8 - (hide annotations)
Mon Oct 8 16:18:19 2007 UTC (16 years, 6 months ago) by dpavlin
File MIME type: text/plain
File size: 5212 byte(s)
++ trunk/HISTORY	(local)
$Id: HISTORY,v 1.777 2005/06/12 12:31:52 debug Exp $
==============  RELEASE 0.3.3.1  ==============

20050609	Adding simple MIPS IPIs (to dev_mp).
20050611	Adding an ugly hack to track down low-reference bugs
		(define TRACE_NULL_CRASHES, or configure --tracenull).
		Other minor updates.
20050612	Adding a dummy evbmips mode.

==============  RELEASE 0.3.3.2  ==============


1 dpavlin 4 #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 dpavlin 8 * $Id: cpu.h,v 1.24 2005/06/11 20:59:12 debug Exp $
32 dpavlin 4 *
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 dpavlin 6 #include "cpu_arm.h"
46 dpavlin 4 #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 dpavlin 8 #ifdef TRACE_NULL_CRASHES
89     #define TRACE_NULL_N_ENTRIES 16
90     #endif
91 dpavlin 4
92     struct cpu {
93     /* Pointer back to the machine this CPU is in: */
94     struct machine *machine;
95    
96     int byte_order;
97     int running;
98     int dead;
99     int bootstrap_cpu_flag;
100     int cpu_id;
101     char *name;
102    
103     struct memory *mem;
104     int (*memory_rw)(struct cpu *cpu,
105     struct memory *mem, uint64_t vaddr,
106     unsigned char *data, size_t len,
107     int writeflag, int cache_flags);
108     int (*translate_address)(struct cpu *, uint64_t vaddr,
109     uint64_t *return_addr, int flags);
110     void (*useremul_syscall)(struct cpu *cpu,
111     uint32_t code);
112    
113     /* Things that all CPU families have: */
114     uint64_t pc;
115    
116 dpavlin 8 #ifdef TRACE_NULL_CRASHES
117     uint64_t trace_null_addr[TRACE_NULL_N_ENTRIES];
118     int trace_null_index;
119     #endif
120    
121 dpavlin 4 /* CPU-family dependant: */
122     union {
123     struct alpha_cpu alpha;
124 dpavlin 6 struct arm_cpu arm;
125 dpavlin 4 struct hppa_cpu hppa;
126     struct mips_cpu mips;
127     struct ppc_cpu ppc;
128     struct sparc_cpu sparc;
129     struct urisc_cpu urisc;
130     struct x86_cpu x86;
131     } cd;
132     };
133    
134    
135     /* cpu.c: */
136     struct cpu *cpu_new(struct memory *mem, struct machine *machine,
137     int cpu_id, char *cpu_type_name);
138     void cpu_show_full_statistics(struct machine *m);
139     void cpu_tlbdump(struct machine *m, int x, int rawflag);
140     void cpu_register_match(struct machine *m, char *name,
141     int writeflag, uint64_t *valuep, int *match_register);
142     void cpu_register_dump(struct machine *m, struct cpu *cpu,
143     int gprs, int coprocs);
144     int cpu_disassemble_instr(struct machine *m, struct cpu *cpu,
145     unsigned char *instr, int running, uint64_t addr, int bintrans);
146     int cpu_interrupt(struct cpu *cpu, uint64_t irq_nr);
147     int cpu_interrupt_ack(struct cpu *cpu, uint64_t irq_nr);
148     void cpu_run_init(struct emul *emul, struct machine *machine);
149     int cpu_run(struct emul *emul, struct machine *machine);
150     void cpu_run_deinit(struct emul *emul, struct machine *machine);
151     void cpu_dumpinfo(struct machine *m, struct cpu *cpu);
152     void cpu_list_available_types(void);
153     void cpu_show_cycles(struct machine *machine,
154     struct timeval *starttime, int64_t ncycles, int forced);
155     struct cpu_family *cpu_family_ptr_by_number(int arch);
156     void cpu_init(void);
157    
158    
159     #endif /* CPU_H */

  ViewVC Help
Powered by ViewVC 1.1.26