/[gxemul]/upstream/0.3.1/include/memory.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 /upstream/0.3.1/include/memory.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3 - (hide annotations)
Mon Oct 8 16:17:52 2007 UTC (16 years, 8 months ago) by dpavlin
File MIME type: text/plain
File size: 6185 byte(s)
0.3.1
1 dpavlin 2 #ifndef MEMORY_H
2     #define MEMORY_H
3    
4     /*
5     * Copyright (C) 2004-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: memory.h,v 1.29 2005/02/26 16:53:32 debug Exp $
32     *
33     * Memory controller related functions.
34     */
35    
36     #include <sys/types.h>
37     #include <inttypes.h>
38    
39     #include "misc.h"
40    
41    
42     #define DEFAULT_RAM_IN_MB 32
43     #define MAX_DEVICES 24
44    
45     #define DEVICE_STATE_TYPE_INT 1
46     #define DEVICE_STATE_TYPE_UINT64_T 2
47    
48     struct cpu;
49     struct translation_page_entry;
50    
51     /* For bintrans: */
52     #define MAX_QUICK_JUMPS 8
53    
54     struct memory {
55     uint64_t physical_max;
56     void *pagetable;
57    
58     int n_mmapped_devices;
59     int last_accessed_device;
60     /* The following two might speed up things a little bit. */
61     /* (actually maxaddr is the addr after the last address) */
62     uint64_t mmap_dev_minaddr;
63     uint64_t mmap_dev_maxaddr;
64    
65     const char *dev_name[MAX_DEVICES];
66     uint64_t dev_baseaddr[MAX_DEVICES];
67     uint64_t dev_length[MAX_DEVICES];
68     int dev_flags[MAX_DEVICES];
69     void *dev_extra[MAX_DEVICES];
70     int (*dev_f[MAX_DEVICES])(struct cpu *,struct memory *,
71     uint64_t,unsigned char *,size_t,int,void *);
72     int (*dev_f_state[MAX_DEVICES])(struct cpu *,
73     struct memory *, void *extra, int wf, int nr,
74     int *type, char **namep, void **data, size_t *len);
75     unsigned char *dev_bintrans_data[MAX_DEVICES];
76    
77     #ifdef BINTRANS
78     uint64_t dev_bintrans_write_low[MAX_DEVICES];
79     uint64_t dev_bintrans_write_high[MAX_DEVICES];
80    
81     /*
82     * translation_code_chunk_space is a large chunk of (linear) memory
83     * where translated code chunks and translation_entrys are stored.
84     * When this is filled, translation is restart from scratch (by
85     * resetting translation_code_chunk_space_head to 0, and removing all
86     * translation entries).
87     *
88     * (Using a static memory region like this is somewhat inspired by
89     * the QEMU web pages,
90     * http://fabrice.bellard.free.fr/qemu/qemu-tech.html#SEC13)
91     */
92    
93     unsigned char *translation_code_chunk_space;
94     size_t translation_code_chunk_space_head;
95    
96     int bintrans_32bit_only;
97    
98     struct translation_page_entry **translation_page_entry_array;
99    
100     unsigned char *quick_jump_host_address[MAX_QUICK_JUMPS];
101     int quick_jump_page_offset[MAX_QUICK_JUMPS];
102     int n_quick_jumps;
103     int quick_jumps_index;
104     #endif
105     };
106    
107     #define BITS_PER_PAGETABLE 20
108     #define BITS_PER_MEMBLOCK 20
109     #define MAX_BITS 40
110    
111     #define MEM_READ 0
112     #define MEM_WRITE 1
113    
114    
115     #define CACHE_DATA 0
116     #define CACHE_INSTRUCTION 1
117     #define CACHE_NONE 2
118    
119     #define CACHE_FLAGS_MASK 0x3
120    
121     #define NO_EXCEPTIONS 8
122     #define PHYSICAL 16
123    
124    
125     /* memory.c: */
126     uint64_t memory_readmax64(struct cpu *cpu, unsigned char *buf, int len);
127     void memory_writemax64(struct cpu *cpu, unsigned char *buf, int len,
128     uint64_t data);
129    
130     void *zeroed_alloc(size_t s);
131    
132     struct memory *memory_new(uint64_t physical_max);
133    
134     int memory_points_to_string(struct cpu *cpu, struct memory *mem,
135     uint64_t addr, int min_string_length);
136     char *memory_conv_to_string(struct cpu *cpu, struct memory *mem,
137     uint64_t addr, char *buf, int bufsize);
138    
139     unsigned char *memory_paddr_to_hostaddr(struct memory *mem,
140     uint64_t paddr, int writeflag);
141    
142     /* memory_fast_v2h.c: */
143     unsigned char *fast_vaddr_to_hostaddr(struct cpu *cpu, uint64_t vaddr,
144     int writeflag);
145    
146     int translate_address_mmu3k(struct cpu *cpu, uint64_t vaddr,
147     uint64_t *return_addr, int flags);
148     int translate_address_mmu8k(struct cpu *cpu, uint64_t vaddr,
149     uint64_t *return_addr, int flags);
150     int translate_address_mmu10k(struct cpu *cpu, uint64_t vaddr,
151     uint64_t *return_addr, int flags);
152     int translate_address_mmu4100(struct cpu *cpu, uint64_t vaddr,
153     uint64_t *return_addr, int flags);
154     int translate_address_generic(struct cpu *cpu, uint64_t vaddr,
155     uint64_t *return_addr, int flags);
156    
157     #define FLAG_WRITEFLAG 1
158     #define FLAG_NOEXCEPTIONS 2
159     #define FLAG_INSTR 4
160    
161     int userland_memory_rw(struct cpu *cpu, struct memory *mem, uint64_t vaddr,
162     unsigned char *data, size_t len, int writeflag, int cache);
163     #define MEMORY_ACCESS_FAILED 0
164     #define MEMORY_ACCESS_OK 1
165    
166     void memory_device_bintrans_access(struct cpu *, struct memory *mem,
167     void *extra, uint64_t *low, uint64_t *high);
168    
169     void memory_device_register_statefunction(
170     struct memory *mem, void *extra,
171     int (*dev_f_state)(struct cpu *,
172     struct memory *, void *extra, int wf, int nr,
173     int *type, char **namep, void **data, size_t *len));
174    
175     void memory_device_register(struct memory *mem, const char *,
176     uint64_t baseaddr, uint64_t len, int (*f)(struct cpu *,
177     struct memory *,uint64_t,unsigned char *,size_t,int,void *),
178     void *extra, int flags, unsigned char *bintrans_data);
179     void memory_device_remove(struct memory *mem, int i);
180    
181     #define MEM_DEFAULT 0
182     #define MEM_BINTRANS_OK 1
183     #define MEM_BINTRANS_WRITE_OK 2
184    
185    
186     #endif /* MEMORY_H */

  ViewVC Help
Powered by ViewVC 1.1.26