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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 26 - (hide annotations)
Mon Oct 8 16:20:10 2007 UTC (16 years, 6 months ago) by dpavlin
File MIME type: text/plain
File size: 4944 byte(s)
++ trunk/HISTORY	(local)
$Id: HISTORY,v 1.1264 2006/06/25 11:08:04 debug Exp $
20060624	Replacing the error-prone machine type initialization stuff
		with something more reasonable.
		Finally removing the old "cpu_run" kludge; moving around stuff
		in machine.c and emul.c to better suit the dyntrans system.
		Various minor dyntrans cleanups (renaming translate_address to
		translate_v2p, and experimenting with template physpages).
20060625	Removing the speed hack which separated the vph entries into
		two halves (code vs data); things seem a lot more stable now.
		Minor performance hack: R2000/R3000 cache isolation now only
		clears address translations when going into isolation, not
		when going out of it.
		Fixing the MIPS interrupt problems by letting mtc0 immediately
		cause interrupts.

==============  RELEASE 0.4.0.1  ==============


1 dpavlin 4 #ifndef MEMORY_H
2     #define MEMORY_H
3    
4     /*
5 dpavlin 24 * Copyright (C) 2004-2006 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 26 * $Id: memory.h,v 1.50 2006/06/24 21:47:24 debug Exp $
32 dpavlin 4 *
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 dpavlin 20 #define MAX_DEVICES 26
44 dpavlin 4
45     struct cpu;
46     struct translation_page_entry;
47    
48     struct memory {
49     uint64_t physical_max;
50     void *pagetable;
51    
52     int n_mmapped_devices;
53     int last_accessed_device;
54     /* The following two might speed up things a little bit. */
55     /* (actually maxaddr is the addr after the last address) */
56     uint64_t mmap_dev_minaddr;
57     uint64_t mmap_dev_maxaddr;
58    
59     const char *dev_name[MAX_DEVICES];
60     uint64_t dev_baseaddr[MAX_DEVICES];
61 dpavlin 18 uint64_t dev_endaddr[MAX_DEVICES]; /* after the end! */
62 dpavlin 4 uint64_t dev_length[MAX_DEVICES];
63     int dev_flags[MAX_DEVICES];
64     void *dev_extra[MAX_DEVICES];
65     int (*dev_f[MAX_DEVICES])(struct cpu *,struct memory *,
66     uint64_t,unsigned char *,size_t,int,void *);
67 dpavlin 12 unsigned char *dev_dyntrans_data[MAX_DEVICES];
68 dpavlin 4
69 dpavlin 12 uint64_t dev_dyntrans_write_low[MAX_DEVICES];
70     uint64_t dev_dyntrans_write_high[MAX_DEVICES];
71    
72 dpavlin 20 int dev_dyntrans_alignment;
73 dpavlin 4 };
74    
75     #define BITS_PER_PAGETABLE 20
76     #define BITS_PER_MEMBLOCK 20
77     #define MAX_BITS 40
78    
79    
80     /* memory.c: */
81 dpavlin 20 #define MEM_PCI_LITTLE_ENDIAN 128
82 dpavlin 4 uint64_t memory_readmax64(struct cpu *cpu, unsigned char *buf, int len);
83     void memory_writemax64(struct cpu *cpu, unsigned char *buf, int len,
84     uint64_t data);
85    
86     void *zeroed_alloc(size_t s);
87    
88 dpavlin 12 struct memory *memory_new(uint64_t physical_max, int arch);
89 dpavlin 4
90     int memory_points_to_string(struct cpu *cpu, struct memory *mem,
91     uint64_t addr, int min_string_length);
92     char *memory_conv_to_string(struct cpu *cpu, struct memory *mem,
93     uint64_t addr, char *buf, int bufsize);
94    
95     unsigned char *memory_paddr_to_hostaddr(struct memory *mem,
96     uint64_t paddr, int writeflag);
97    
98    
99 dpavlin 20 /* Writeflag: */
100     #define MEM_READ 0
101     #define MEM_WRITE 1
102     #define MEM_DOWNGRADE 128
103    
104     /* Misc. flags: */
105     #define CACHE_DATA 0
106     #define CACHE_INSTRUCTION 1
107     #define CACHE_NONE 2
108     #define CACHE_FLAGS_MASK 0x3
109     #define NO_EXCEPTIONS 16
110     #define PHYSICAL 32
111     #define NO_SEGMENTATION 64 /* for X86 */
112     #define MEMORY_USER_ACCESS 128 /* for ARM, at least */
113    
114     /* Dyntrans Memory flags: */
115     #define DM_DEFAULT 0
116     #define DM_DYNTRANS_OK 1
117     #define DM_DYNTRANS_WRITE_OK 2
118     #define DM_READS_HAVE_NO_SIDE_EFFECTS 4
119     #define DM_EMULATED_RAM 8
120    
121 dpavlin 4 #define FLAG_WRITEFLAG 1
122     #define FLAG_NOEXCEPTIONS 2
123     #define FLAG_INSTR 4
124    
125     int userland_memory_rw(struct cpu *cpu, struct memory *mem, uint64_t vaddr,
126     unsigned char *data, size_t len, int writeflag, int cache);
127 dpavlin 18 #define MEMORY_ACCESS_FAILED 0
128     #define MEMORY_ACCESS_OK 1
129     #define MEMORY_ACCESS_OK_WRITE 2
130     #define MEMORY_NOT_FULL_PAGE 256
131 dpavlin 4
132 dpavlin 12 void memory_device_dyntrans_access(struct cpu *, struct memory *mem,
133 dpavlin 4 void *extra, uint64_t *low, uint64_t *high);
134    
135 dpavlin 22 #define DEVICE_ACCESS(x) int dev_ ## x ## _access(struct cpu *cpu, \
136     struct memory *mem, uint64_t relative_addr, unsigned char *data, \
137     size_t len, int writeflag, void *extra)
138 dpavlin 4
139     void memory_device_register(struct memory *mem, const char *,
140     uint64_t baseaddr, uint64_t len, int (*f)(struct cpu *,
141     struct memory *,uint64_t,unsigned char *,size_t,int,void *),
142 dpavlin 12 void *extra, int flags, unsigned char *dyntrans_data);
143 dpavlin 4 void memory_device_remove(struct memory *mem, int i);
144    
145 dpavlin 24 uint64_t memory_checksum(struct memory *mem);
146    
147    
148 dpavlin 4 #endif /* MEMORY_H */

  ViewVC Help
Powered by ViewVC 1.1.26