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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4 - (show annotations)
Mon Oct 8 16:18:00 2007 UTC (13 years, 3 months ago) by dpavlin
File MIME type: text/plain
File size: 24702 byte(s)
++ trunk/HISTORY	(local)
$Id: HISTORY,v 1.707 2005/04/27 16:37:33 debug Exp $
20050408	Some minor updates to the wdc. Linux now doesn't complain
		anymore if a disk is non-present.
20050409	Various minor fixes (a bintrans bug, and some other things).
		The wdc seems to work with Playstation2 emulation, but there
		is a _long_ annoying delay when disks are detected.
		Fixing a really important bintrans bug (when devices and RAM
		are mixed within 4KB pages), which was triggered with
		NetBSD/playstation2 kernels.
20050410	Adding a dummy dev_ps2_ether (just so that NetBSD doesn't
		complain as much during bootup).
		Symbols starting with '$' are now ignored.
		Renaming dev_ps2_ohci.c to dev_ohci.c, etc.
20050411	Moving the bintrans-cache-isolation check from cpu_mips.c to
		cpu_mips_coproc.c. (I thought this would give a speedup, but
		it's not noticable.)
		Better playstation2 sbus interrupt code.
		Skip ahead many ticks if the count register is read manually.
		(This increases the speed of delay-loops that simply read
		the count register.)
20050412	Updates to the playstation2 timer/interrupt code.
		Some other minor updates.
20050413	NetBSD/cobalt runs from a disk image :-) including userland;
		updating the documentation on how to install NetBSD/cobalt
		using NetBSD/pmax (!).
		Some minor bintrans updates (no real speed improvement) and
		other minor updates (playstation2 now uses the -o options).
20050414	Adding a dummy x86 (and AMD64) mode.
20050415	Adding some (32-bit and 16-bit) x86 instructions.
		Adding some initial support for non-SCSI, non-IDE floppy
		images. (The x86 mode can boot from these, more or less.)
		Moving the devices/ and include/ directories to src/devices/
		and src/include/, respectively.
20050416	Continuing on the x86 stuff. (Adding pc_bios.c and some simple
		support for software interrupts in 16-bit mode.)
20050417	Ripping out most of the x86 instruction decoding stuff, trying
		to rewrite it in a cleaner way.
		Disabling some of the least working CPU families in the
		configure script (sparc, x86, alpha, hppa), so that they are
		not enabled by default.
20050418	Trying to fix the bug which caused problems when turning on
		and off bintrans interactively, by flushing the bintrans cache
		whenever bintrans is manually (re)enabled.
20050419	Adding the 'lswi' ppc instruction.
		Minor updates to the x86 instruction decoding.
20050420	Renaming x86 register name indices from R_xx to X86_R_xx (this
		makes building on Tru64 nicer).
20050422	Adding a check for duplicate MIPS TLB entries on tlbwr/tlbwi.
20050427	Adding screenshots to guestoses.html.
		Some minor fixes and testing for the next release.

==============  RELEASE 0.3.2  ==============


1 #ifndef DEVICES_H
2 #define DEVICES_H
3
4 /*
5 * Copyright (C) 2003-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: devices.h,v 1.162 2005/04/11 20:44:40 debug Exp $
32 *
33 * Memory mapped devices.
34 *
35 * TODO: Separate into lots of smaller files? That might speed up a compile,
36 * but I'm not sure that it's a price worth paying.
37 */
38
39 #include <sys/types.h>
40 #include <inttypes.h>
41
42 struct cpu;
43 struct machine;
44 struct memory;
45 struct pci_data;
46
47 /* #ifdef WITH_X11
48 #include <X11/Xlib.h>
49 #endif */
50
51
52 /* dev_dec_ioasic.c: */
53 #define DEV_DEC_IOASIC_LENGTH 0x80100
54 #define N_DEC_IOASIC_REGS (0x1f0 / 0x10)
55 #define MAX_IOASIC_DMA_FUNCTIONS 8
56 struct dec_ioasic_data {
57 uint32_t reg[N_DEC_IOASIC_REGS];
58 int (*(dma_func[MAX_IOASIC_DMA_FUNCTIONS]))(struct cpu *, void *, uint64_t addr, size_t dma_len, int tx);
59 void *dma_func_extra[MAX_IOASIC_DMA_FUNCTIONS];
60 int rackmount_flag;
61 };
62 int dev_dec_ioasic_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
63 struct dec_ioasic_data *dev_dec_ioasic_init(struct cpu *cpu, struct memory *mem, uint64_t baseaddr, int rackmount_flag);
64
65 /* dev_asc.c: */
66 #define DEV_ASC_DEC_LENGTH 0x40000
67 #define DEV_ASC_PICA_LENGTH 0x1000
68 #define DEV_ASC_DEC 1
69 #define DEV_ASC_PICA 2
70 int dev_asc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
71 void dev_asc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr,
72 int irq_nr, void *turbochannel, int mode,
73 size_t (*dma_controller)(void *dma_controller_data,
74 unsigned char *data, size_t len, int writeflag),
75 void *dma_controller_data);
76
77 /* dev_au1x00.c: */
78 struct au1x00_ic_data {
79 int ic_nr;
80 uint32_t request0_int;
81 uint32_t request1_int;
82 uint32_t config0;
83 uint32_t config1;
84 uint32_t config2;
85 uint32_t source;
86 uint32_t assign_request;
87 uint32_t wakeup;
88 uint32_t mask;
89 };
90
91 int dev_au1x00_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
92 struct au1x00_ic_data *dev_au1x00_init(struct machine *machine, struct memory *mem);
93
94 /* dev_bt431.c: */
95 #define DEV_BT431_LENGTH 0x20
96 #define DEV_BT431_NREGS 0x800 /* ? */
97 int dev_bt431_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
98 struct vfb_data;
99 void dev_bt431_init(struct memory *mem, uint64_t baseaddr, struct vfb_data *vfb_data, int color_fb_flag);
100
101 /* dev_bt455.c: */
102 #define DEV_BT455_LENGTH 0x20
103 int dev_bt455_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
104 struct vfb_data;
105 void dev_bt455_init(struct memory *mem, uint64_t baseaddr, struct vfb_data *vfb_data);
106
107 /* dev_bt459.c: */
108 #define DEV_BT459_LENGTH 0x20
109 #define DEV_BT459_NREGS 0x1000
110 #define BT459_PX 1 /* px[g] */
111 #define BT459_BA 2 /* cfb */
112 #define BT459_BBA 3 /* sfb */
113 int dev_bt459_access(struct cpu *cpu, struct memory *mem,
114 uint64_t relative_addr, unsigned char *data, size_t len,
115 int writeflag, void *);
116 struct vfb_data;
117 void dev_bt459_init(struct machine *machine, struct memory *mem,
118 uint64_t baseaddr, uint64_t baseaddr_irq, struct vfb_data *vfb_data,
119 int color_fb_flag, int irq_nr, int type);
120
121 /* dev_cons.c: */
122 #define DEV_CONS_ADDRESS 0x0000000010000000
123 #define DEV_CONS_LENGTH 0x0000000000000020
124 #define DEV_CONS_PUTGETCHAR 0x0000
125 #define DEV_CONS_HALT 0x0010
126 int dev_cons_access(struct cpu *cpu, struct memory *mem,
127 uint64_t relative_addr, unsigned char *data, size_t len,
128 int writeflag, void *);
129 int dev_cons_init(struct machine *machine, struct memory *mem,
130 uint64_t baseaddr, char *name, int irq_nr);
131
132 /* dev_colorplanemask.c: */
133 #define DEV_COLORPLANEMASK_LENGTH 0x0000000000000010
134 int dev_colorplanemask_access(struct cpu *cpu, struct memory *mem,
135 uint64_t relative_addr, unsigned char *data, size_t len,
136 int writeflag, void *);
137 void dev_colorplanemask_init(struct memory *mem, uint64_t baseaddr,
138 unsigned char *color_plane_mask);
139
140 /* dev_dc7085.c: */
141 #define DEV_DC7085_LENGTH 0x0000000000000080
142 /* see dc7085.h for more info */
143 void dev_dc7085_tick(struct cpu *cpu, void *);
144 int dev_dc7085_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
145 int dev_dc7085_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int use_fb);
146
147 /* dev_dec5800.c: */
148 #define DEV_DEC5800_LENGTH 0x1000 /* ? */
149 struct dec5800_data {
150 uint32_t csr;
151 uint32_t vector_0x50;
152 };
153 int dev_dec5800_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
154 struct dec5800_data *dev_dec5800_init(struct machine *machine, struct memory *mem, uint64_t baseaddr);
155 /* 16 slots, 0x2000 bytes each */
156 #define DEV_DECBI_LENGTH 0x20000
157 int dev_decbi_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
158 void dev_decbi_init(struct memory *mem, uint64_t baseaddr);
159 #define DEV_DECCCA_LENGTH 0x10000 /* ? */
160 #define DEC_DECCCA_BASEADDR 0x19000000 /* ? I just made this up */
161 int dev_deccca_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
162 void dev_deccca_init(struct memory *mem, uint64_t baseaddr);
163 #define DEV_DECXMI_LENGTH 0x800000
164 int dev_decxmi_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
165 void dev_decxmi_init(struct memory *mem, uint64_t baseaddr);
166
167 /* dev_fb.c: */
168 #define DEV_FB_LENGTH 0x3c0000 /* 3c0000 to not colide with turbochannel rom, otherwise size = (4*1024*1024) */
169 #define VFB_GENERIC 0
170 #define VFB_HPCMIPS 1
171 #define VFB_DEC_VFB01 2
172 #define VFB_DEC_VFB02 3
173 #define VFB_DEC_MAXINE 4
174 #define VFB_PLAYSTATION2 5
175 struct vfb_data {
176 int vfb_type;
177
178 int vfb_scaledown;
179
180 int xsize;
181 int ysize;
182 int bit_depth;
183 int color32k;
184
185 unsigned char color_plane_mask;
186
187 int bytes_per_line; /* cached */
188
189 int visible_xsize;
190 int visible_ysize;
191
192 size_t framebuffer_size;
193 int x11_xsize, x11_ysize;
194
195 int update_x1, update_y1, update_x2, update_y2;
196
197 /* RGB palette for <= 8 bit modes: (r,g,b bytes for each) */
198 unsigned char rgb_palette[256 * 3];
199
200 /* These should always be in sync: */
201 unsigned char *framebuffer;
202 struct fb_window *fb_window;
203 };
204 #define VFB_MFB_BT455 0x100000
205 #define VFB_MFB_BT431 0x180000
206 #define VFB_MFB_VRAM 0x200000
207 #define VFB_CFB_BT459 0x200000
208 void set_grayscale_palette(struct vfb_data *d, int ncolors);
209 void dev_fb_setcursor(struct vfb_data *d, int cursor_x, int cursor_y, int on,
210 int cursor_xsize, int cursor_ysize);
211 void framebuffer_blockcopyfill(struct vfb_data *d, int fillflag, int fill_r,
212 int fill_g, int fill_b, int x1, int y1, int x2, int y2,
213 int from_x, int from_y);
214 void dev_fb_tick(struct cpu *, void *);
215 int dev_fb_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
216 struct vfb_data *dev_fb_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int vfb_type,
217 int visible_xsize, int visible_ysize, int xsize, int ysize, int bit_depth, char *name, int logo);
218
219 /* dev_gt.c: */
220 #define DEV_GT_LENGTH 0x0000000000001000
221 int dev_gt_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
222 struct pci_data *dev_gt_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int pciirq);
223
224 /* dev_jazz.c: */
225 #define DEV_JAZZ_LENGTH 0x280
226 struct jazz_data {
227 struct cpu *cpu;
228
229 /* Jazz stuff: */
230 uint32_t int_enable_mask;
231 uint32_t int_asserted;
232
233 /* ISA stuff: */
234 uint32_t isa_int_enable_mask;
235 uint32_t isa_int_asserted;
236
237 int interval;
238 int interval_start;
239
240 int jazz_timer_value;
241 int jazz_timer_current;
242
243 uint64_t dma_translation_table_base;
244 uint64_t dma_translation_table_limit;
245
246 uint32_t dma0_mode;
247 uint32_t dma0_enable;
248 uint32_t dma0_count;
249 uint32_t dma0_addr;
250
251 uint32_t dma1_mode;
252 /* same for dma1,2,3 actually (TODO) */
253
254 int led;
255 };
256 size_t dev_jazz_dma_controller(void *dma_controller_data,
257 unsigned char *data, size_t len, int writeflag);
258
259 /* dev_kn01.c: */
260 #define DEV_KN01_CSR_LENGTH 0x0000000000000004
261 int dev_kn01_csr_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
262 void dev_kn01_csr_init(struct memory *mem, uint64_t baseaddr, int color_fb);
263 #define DEV_VDAC_LENGTH 0x20
264 #define DEV_VDAC_MAPWA 0x00
265 #define DEV_VDAC_MAP 0x04
266 #define DEV_VDAC_MASK 0x08
267 #define DEV_VDAC_MAPRA 0x0c
268 #define DEV_VDAC_OVERWA 0x10
269 #define DEV_VDAC_OVER 0x14
270 #define DEV_VDAC_OVERRA 0x1c
271 int dev_vdac_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
272 void dev_vdac_init(struct memory *mem, uint64_t baseaddr, unsigned char *rgb_palette, int color_fb_flag);
273
274 /* dev_kn02.c: */
275 struct kn02_csr {
276 uint8_t csr[sizeof(uint32_t)];
277 uint8_t filler[4096 - sizeof(uint32_t)]; /* for bintrans mapping */
278 };
279 int dev_kn02_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
280 struct kn02_csr *dev_kn02_init(struct cpu *cpu, struct memory *mem,
281 uint64_t baseaddr);
282
283 /* dev_kn220.c: */
284 #define DEV_DEC5500_IOBOARD_LENGTH 0x100000
285 int dev_dec5500_ioboard_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
286 struct dec5500_ioboard_data *dev_dec5500_ioboard_init(struct cpu *cpu, struct memory *mem, uint64_t baseaddr);
287 #define DEV_SGEC_LENGTH 0x1000
288 int dev_sgec_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
289 void dev_sgec_init(struct memory *mem, uint64_t baseaddr, int irq_nr);
290
291 /* dev_kn230.c: */
292 struct kn230_csr {
293 uint32_t csr;
294 };
295
296 /* dev_le.c: */
297 #define DEV_LE_LENGTH 0x1c0200
298 int dev_le_access(struct cpu *cpu, struct memory *mem,
299 uint64_t relative_addr, unsigned char *data, size_t len,
300 int writeflag, void *);
301 void dev_le_init(struct machine *machine, struct memory *mem,
302 uint64_t baseaddr, uint64_t buf_start, uint64_t buf_end,
303 int irq_nr, int len);
304
305 /* dev_m700_fb.c: */
306 #define DEV_M700_FB_LENGTH 0x10000 /* TODO? */
307 int dev_m700_fb_access(struct cpu *cpu, struct memory *mem,
308 uint64_t relative_addr, unsigned char *data, size_t len,
309 int writeflag, void *);
310 void dev_m700_fb_init(struct machine *machine, struct memory *mem,
311 uint64_t baseaddr, uint64_t baseaddr2);
312
313 /* dev_ns16550.c: */
314 #define DEV_NS16550_LENGTH 0x0000000000000008
315 /* see comreg.h and ns16550reg.h for more info */
316 int dev_ns16550_access(struct cpu *cpu, struct memory *mem,
317 uint64_t relative_addr, unsigned char *data, size_t len,
318 int writeflag, void *);
319 int dev_ns16550_init(struct machine *machine, struct memory *mem,
320 uint64_t baseaddr, int irq_nr, int addrmult, int in_use, char *name);
321
322 /* dev_mc146818.c: */
323 #define DEV_MC146818_LENGTH 0x0000000000000100
324 #define MC146818_DEC 0
325 #define MC146818_PC_CMOS 1
326 #define MC146818_ARC_NEC 2
327 #define MC146818_ARC_JAZZ 3
328 #define MC146818_SGI 4
329 /* see mc146818reg.h for more info */
330 void dev_mc146818_tick(struct cpu *cpu, void *);
331 int dev_mc146818_access(struct cpu *cpu, struct memory *mem,
332 uint64_t relative_addr, unsigned char *data, size_t len,
333 int writeflag, void *);
334 void dev_mc146818_init(struct machine *machine, struct memory *mem,
335 uint64_t baseaddr, int irq_nr, int access_style, int addrdiv);
336
337 /* dev_pckbc.c: */
338 #define DEV_PCKBC_LENGTH 0x10
339 #define PCKBC_8042 0
340 #define PCKBC_8242 1
341 #define PCKBC_JAZZ 3
342 int dev_pckbc_access(struct cpu *cpu, struct memory *mem,
343 uint64_t relative_addr, unsigned char *data, size_t len,
344 int writeflag, void *);
345 int dev_pckbc_init(struct machine *machine, struct memory *mem,
346 uint64_t baseaddr, int type, int keyboard_irqnr, int mouse_irqnr,
347 int in_use);
348
349 /* dev_pmppc.c: */
350 int dev_pmppc_board_access(struct cpu *cpu, struct memory *mem,
351 uint64_t relative_addr, unsigned char *data, size_t len, int writeflag,
352 void *);
353 void dev_pmppc_init(struct memory *mem);
354
355 /* dev_ps2_spd.c: */
356 #define DEV_PS2_SPD_LENGTH 0x800
357 int dev_ps2_spd_access(struct cpu *cpu, struct memory *mem,
358 uint64_t relative_addr, unsigned char *data, size_t len,
359 int writeflag, void *);
360 void dev_ps2_spd_init(struct machine *machine, struct memory *mem,
361 uint64_t baseaddr);
362
363 /* dev_ps2_stuff.c: */
364 #include "ps2_dmacreg.h"
365 #define N_PS2_DMA_CHANNELS 10
366 #define N_PS2_TIMERS 4
367 struct ps2_data {
368 uint32_t timer_count[N_PS2_TIMERS];
369 uint32_t timer_comp[N_PS2_TIMERS];
370 uint32_t timer_mode[N_PS2_TIMERS];
371 uint32_t timer_hold[N_PS2_TIMERS]; /* NOTE: only 0 and 1 are valid */
372
373 uint64_t dmac_reg[DMAC_REGSIZE / 0x10];
374
375 uint64_t other_memory_base[N_PS2_DMA_CHANNELS];
376
377 uint32_t intr;
378 uint32_t imask;
379 uint32_t sbus_smflg;
380 };
381 #define DEV_PS2_STUFF_LENGTH 0x10000
382 int dev_ps2_stuff_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
383 struct ps2_data *dev_ps2_stuff_init(struct machine *machine, struct memory *mem, uint64_t baseaddr);
384
385 /* dev_pmagja.c: */
386 #define DEV_PMAGJA_LENGTH 0x3c0000
387 int dev_pmagja_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
388 void dev_pmagja_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr);
389
390 /* dev_px.c: */
391 struct px_data {
392 struct memory *fb_mem;
393 struct vfb_data *vfb_data;
394 int type;
395 char *px_name;
396 int irq_nr;
397 int bitdepth;
398 int xconfig;
399 int yconfig;
400
401 uint32_t intr;
402 unsigned char sram[128 * 1024];
403 };
404 /* TODO: perhaps these types are wrong? */
405 #define DEV_PX_TYPE_PX 0
406 #define DEV_PX_TYPE_PXG 1
407 #define DEV_PX_TYPE_PXGPLUS 2
408 #define DEV_PX_TYPE_PXGPLUSTURBO 3
409 #define DEV_PX_LENGTH 0x3c0000
410 int dev_px_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
411 void dev_px_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int px_type, int irq_nr);
412
413 /* dev_ram.c: */
414 #define DEV_RAM_RAM 0
415 #define DEV_RAM_MIRROR 1
416 int dev_ram_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
417 void dev_ram_init(struct memory *mem, uint64_t baseaddr, uint64_t length, int mode, uint64_t otheraddr);
418
419 /* dev_scc.c: */
420 #define DEV_SCC_LENGTH 0x1000
421 int dev_scc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
422 int dev_scc_dma_func(struct cpu *cpu, void *extra, uint64_t addr, size_t dma_len, int tx);
423 void *dev_scc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int use_fb, int scc_nr, int addrmul);
424
425 /* dev_sfb.c: */
426 #define DEV_SFB_LENGTH 0x400000
427 int dev_sfb_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
428 void dev_sfb_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, struct vfb_data *vfb_data);
429
430 /* dev_sgi_gbe.c: */
431 #define DEV_SGI_GBE_LENGTH 0x1000000
432 int dev_sgi_gbe_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
433 void dev_sgi_gbe_init(struct machine *machine, struct memory *mem, uint64_t baseaddr);
434
435 /* dev_sgi_ip20.c: */
436 #define DEV_SGI_IP20_LENGTH 0x40
437 #define DEV_SGI_IP20_BASE 0x1fb801c0
438 struct sgi_ip20_data {
439 int dummy;
440 };
441 int dev_sgi_ip20_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
442 struct sgi_ip20_data *dev_sgi_ip20_init(struct cpu *cpu, struct memory *mem, uint64_t baseaddr);
443
444 /* dev_sgi_ip22.c: */
445 #define DEV_SGI_IP22_LENGTH 0x100
446 #define DEV_SGI_IP22_IMC_LENGTH 0x100
447 #define DEV_SGI_IP22_UNKNOWN2_LENGTH 0x100
448 #define IP22_IMC_BASE 0x1fa00000
449 #define IP22_UNKNOWN2_BASE 0x1fb94000
450 struct sgi_ip22_data {
451 int guiness_flag;
452 uint32_t reg[DEV_SGI_IP22_LENGTH / 4];
453 uint32_t imc_reg[DEV_SGI_IP22_IMC_LENGTH / 4];
454 uint32_t unknown2_reg[DEV_SGI_IP22_UNKNOWN2_LENGTH / 4];
455 uint32_t unknown_timer;
456 };
457 int dev_sgi_ip22_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
458 struct sgi_ip22_data *dev_sgi_ip22_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int guiness_flag);
459
460 /* dev_sgi_ip30.c: */
461 #define DEV_SGI_IP30_LENGTH 0x80000
462 struct sgi_ip30_data {
463 /* ip30: */
464 uint64_t imask0; /* 0x10000 */
465 uint64_t reg_0x10018;
466 uint64_t isr; /* 0x10030 */
467 uint64_t reg_0x20000;
468 uint64_t reg_0x30000;
469
470 /* ip30_2: */
471 uint64_t reg_0x0029c;
472
473 /* ip30_3: */
474 uint64_t reg_0x00284;
475
476 /* ip30_4: */
477 uint64_t reg_0x000b0;
478
479 /* ip30_5: */
480 uint64_t reg_0x00000;
481 };
482 int dev_sgi_ip30_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
483 struct sgi_ip30_data *dev_sgi_ip30_init(struct machine *machine, struct memory *mem, uint64_t baseaddr);
484
485 /* dev_sgi_ip32.c: */
486 #define DEV_CRIME_LENGTH 0x0000000000001000
487 struct crime_data {
488 unsigned char reg[DEV_CRIME_LENGTH];
489 int irq_nr;
490 int use_fb;
491 };
492 int dev_crime_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
493 struct crime_data *dev_crime_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int use_fb);
494 #define DEV_MACE_LENGTH 0x100
495 struct mace_data {
496 unsigned char reg[DEV_MACE_LENGTH];
497 int irqnr;
498 };
499 int dev_mace_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
500 struct mace_data *dev_mace_init(struct memory *mem, uint64_t baseaddr, int irqnr);
501 #define DEV_MACEPCI_LENGTH 0x1000
502 int dev_macepci_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
503 struct pci_data *dev_macepci_init(struct memory *mem, uint64_t baseaddr, int pciirq);
504 #define DEV_SGI_MEC_LENGTH 0x1000
505 int dev_sgi_mec_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
506 void dev_sgi_mec_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, unsigned char *macaddr);
507 #define DEV_SGI_UST_LENGTH 0x10000
508 int dev_sgi_ust_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
509 void dev_sgi_ust_init(struct memory *mem, uint64_t baseaddr);
510 #define DEV_SGI_MTE_LENGTH 0x10000
511 int dev_sgi_mte_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
512 void dev_sgi_mte_init(struct memory *mem, uint64_t baseaddr);
513
514 /* dev_sii.c: */
515 #define DEV_SII_LENGTH 0x100
516 void dev_sii_tick(struct cpu *cpu, void *);
517 int dev_sii_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
518 void dev_sii_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, uint64_t buf_start, uint64_t buf_end, int irq_nr);
519
520 /* dev_ssc.c: */
521 #define DEV_SSC_LENGTH 0x1000
522 int dev_ssc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
523 void dev_ssc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int use_fb, uint32_t *);
524
525 /* dev_turbochannel.c: */
526 #define DEV_TURBOCHANNEL_LEN 0x0470
527 int dev_turbochannel_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
528 void dev_turbochannel_init(struct machine *machine, struct memory *mem, int slot_nr, uint64_t baseaddr, uint64_t endaddr, char *device_name, int irq);
529
530 /* dev_vga.c: */
531 int dev_vga_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr,
532 unsigned char *data, size_t len, int writeflag, void *);
533 void dev_vga_init(struct machine *machine, struct memory *mem,
534 uint64_t videomem_base, uint64_t control_base, int max_x, int max_y,
535 char *name);
536
537 /* dev_vr41xx.c: */
538 #define DEV_VR41XX_LENGTH 0x800 /* TODO? */
539 struct vr41xx_data {
540 int cpumodel;
541
542 int kiu_console_handle;
543 int kiu_offset;
544 int kiu_irq_nr;
545 int kiu_int_assert;
546 int d0;
547 int d1;
548 int d2;
549 int d3;
550 int d4;
551 int d5;
552 int dont_clear_next;
553 int escape_state;
554
555 /* See icureg.h in NetBSD for more info. */
556 uint16_t sysint1;
557 uint16_t msysint1;
558 uint16_t giuint;
559 uint16_t giumask;
560 uint16_t sysint2;
561 uint16_t msysint2;
562 };
563
564 int dev_vr41xx_access(struct cpu *cpu, struct memory *mem,
565 uint64_t relative_addr, unsigned char *data, size_t len,
566 int writeflag, void *);
567 struct vr41xx_data *dev_vr41xx_init(struct machine *machine,
568 struct memory *mem, int cpumodel);
569
570 /* dev_wdc.c: */
571 #define DEV_WDC_LENGTH 0x8
572 int dev_wdc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
573 void dev_wdc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int base_drive);
574
575 /* dev_wdsc.c: */
576 #define DEV_WDSC_NREGS 0x100 /* 8-bit register select */
577 #define DEV_WDSC_LENGTH 0x10
578 int dev_wdsc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
579 void dev_wdsc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int controller_nr, int irq_nr);
580
581 /* dev_zs.c: */
582 #define DEV_ZS_LENGTH 0x10
583 int dev_zs_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr,
584 unsigned char *data, size_t len, int writeflag, void *);
585 int dev_zs_init(struct machine *machine, struct memory *mem, uint64_t baseaddr,
586 int irq_nr, int addrmult, char *name);
587
588 /* lk201.c: */
589 struct lk201_data {
590 int use_fb;
591 int console_handle;
592
593 void (*add_to_rx_queue)(void *,int,int);
594 void *add_data;
595
596 unsigned char keyb_buf[8];
597 int keyb_buf_pos;
598
599 int mouse_mode;
600 int mouse_revision; /* 0..15 */
601 int mouse_x, mouse_y, mouse_buttons;
602
603 int old_host_mouse_x;
604 int old_host_mouse_y;
605 int old_host_mouse_stays_put;
606 int mouse_check_interval;
607 int mouse_check_interval_reset;
608 };
609 void lk201_tick(struct lk201_data *);
610 void lk201_tx_data(struct lk201_data *, int port, int idata);
611 void lk201_init(struct lk201_data *d, int use_fb,
612 void (*add_to_rx_queue)(void *,int,int), int console_handle, void *);
613
614
615 #endif /* DEVICES_H */
616

  ViewVC Help
Powered by ViewVC 1.1.26