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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3 - (show annotations)
Mon Oct 8 16:17:52 2007 UTC (16 years, 7 months ago) by dpavlin
File MIME type: text/plain
File size: 24965 byte(s)
0.3.1
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.160 2005/03/29 09:46:08 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_ohci.c: */
356 #define DEV_PS2_OHCI_LENGTH 0x1000
357 int dev_ps2_ohci_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_ohci_init(struct cpu *cpu, struct memory *mem, uint64_t baseaddr);
361
362 /* dev_ps2_spd.c: */
363 #define DEV_PS2_SPD_LENGTH 0x800
364 int dev_ps2_spd_access(struct cpu *cpu, struct memory *mem,
365 uint64_t relative_addr, unsigned char *data, size_t len,
366 int writeflag, void *);
367 void dev_ps2_spd_init(struct machine *machine, struct memory *mem,
368 uint64_t baseaddr);
369
370 /* dev_ps2_stuff.c: */
371 #include "ps2_dmacreg.h"
372 #define N_PS2_DMA_CHANNELS 10
373 #define N_PS2_TIMERS 4
374 struct ps2_data {
375 uint32_t timer_count[N_PS2_TIMERS];
376 uint32_t timer_comp[N_PS2_TIMERS];
377 uint32_t timer_mode[N_PS2_TIMERS];
378 uint32_t timer_hold[N_PS2_TIMERS]; /* NOTE: only 0 and 1 are valid */
379
380 uint64_t dmac_reg[DMAC_REGSIZE / 0x10];
381
382 uint64_t other_memory_base[N_PS2_DMA_CHANNELS];
383
384 uint32_t intr;
385 uint32_t imask;
386 };
387 #define DEV_PS2_STUFF_LENGTH 0x10000
388 int dev_ps2_stuff_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
389 struct ps2_data *dev_ps2_stuff_init(struct machine *machine, struct memory *mem, uint64_t baseaddr);
390
391 /* dev_pmagja.c: */
392 #define DEV_PMAGJA_LENGTH 0x3c0000
393 int dev_pmagja_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
394 void dev_pmagja_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr);
395
396 /* dev_px.c: */
397 struct px_data {
398 struct memory *fb_mem;
399 struct vfb_data *vfb_data;
400 int type;
401 char *px_name;
402 int irq_nr;
403 int bitdepth;
404 int xconfig;
405 int yconfig;
406
407 uint32_t intr;
408 unsigned char sram[128 * 1024];
409 };
410 /* TODO: perhaps these types are wrong? */
411 #define DEV_PX_TYPE_PX 0
412 #define DEV_PX_TYPE_PXG 1
413 #define DEV_PX_TYPE_PXGPLUS 2
414 #define DEV_PX_TYPE_PXGPLUSTURBO 3
415 #define DEV_PX_LENGTH 0x3c0000
416 int dev_px_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
417 void dev_px_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int px_type, int irq_nr);
418
419 /* dev_ram.c: */
420 #define DEV_RAM_RAM 0
421 #define DEV_RAM_MIRROR 1
422 int dev_ram_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
423 void dev_ram_init(struct memory *mem, uint64_t baseaddr, uint64_t length, int mode, uint64_t otheraddr);
424
425 /* dev_scc.c: */
426 #define DEV_SCC_LENGTH 0x1000
427 int dev_scc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
428 int dev_scc_dma_func(struct cpu *cpu, void *extra, uint64_t addr, size_t dma_len, int tx);
429 void *dev_scc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int use_fb, int scc_nr, int addrmul);
430
431 /* dev_sfb.c: */
432 #define DEV_SFB_LENGTH 0x400000
433 int dev_sfb_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
434 void dev_sfb_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, struct vfb_data *vfb_data);
435
436 /* dev_sgi_gbe.c: */
437 #define DEV_SGI_GBE_LENGTH 0x1000000
438 int dev_sgi_gbe_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
439 void dev_sgi_gbe_init(struct machine *machine, struct memory *mem, uint64_t baseaddr);
440
441 /* dev_sgi_ip20.c: */
442 #define DEV_SGI_IP20_LENGTH 0x40
443 #define DEV_SGI_IP20_BASE 0x1fb801c0
444 struct sgi_ip20_data {
445 int dummy;
446 };
447 int dev_sgi_ip20_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
448 struct sgi_ip20_data *dev_sgi_ip20_init(struct cpu *cpu, struct memory *mem, uint64_t baseaddr);
449
450 /* dev_sgi_ip22.c: */
451 #define DEV_SGI_IP22_LENGTH 0x100
452 #define DEV_SGI_IP22_IMC_LENGTH 0x100
453 #define DEV_SGI_IP22_UNKNOWN2_LENGTH 0x100
454 #define IP22_IMC_BASE 0x1fa00000
455 #define IP22_UNKNOWN2_BASE 0x1fb94000
456 struct sgi_ip22_data {
457 int guiness_flag;
458 uint32_t reg[DEV_SGI_IP22_LENGTH / 4];
459 uint32_t imc_reg[DEV_SGI_IP22_IMC_LENGTH / 4];
460 uint32_t unknown2_reg[DEV_SGI_IP22_UNKNOWN2_LENGTH / 4];
461 uint32_t unknown_timer;
462 };
463 int dev_sgi_ip22_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
464 struct sgi_ip22_data *dev_sgi_ip22_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int guiness_flag);
465
466 /* dev_sgi_ip30.c: */
467 #define DEV_SGI_IP30_LENGTH 0x80000
468 struct sgi_ip30_data {
469 /* ip30: */
470 uint64_t imask0; /* 0x10000 */
471 uint64_t reg_0x10018;
472 uint64_t isr; /* 0x10030 */
473 uint64_t reg_0x20000;
474 uint64_t reg_0x30000;
475
476 /* ip30_2: */
477 uint64_t reg_0x0029c;
478
479 /* ip30_3: */
480 uint64_t reg_0x00284;
481
482 /* ip30_4: */
483 uint64_t reg_0x000b0;
484
485 /* ip30_5: */
486 uint64_t reg_0x00000;
487 };
488 int dev_sgi_ip30_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
489 struct sgi_ip30_data *dev_sgi_ip30_init(struct machine *machine, struct memory *mem, uint64_t baseaddr);
490
491 /* dev_sgi_ip32.c: */
492 #define DEV_CRIME_LENGTH 0x0000000000001000
493 struct crime_data {
494 unsigned char reg[DEV_CRIME_LENGTH];
495 int irq_nr;
496 int use_fb;
497 };
498 int dev_crime_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
499 struct crime_data *dev_crime_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int use_fb);
500 #define DEV_MACE_LENGTH 0x100
501 struct mace_data {
502 unsigned char reg[DEV_MACE_LENGTH];
503 int irqnr;
504 };
505 int dev_mace_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
506 struct mace_data *dev_mace_init(struct memory *mem, uint64_t baseaddr, int irqnr);
507 #define DEV_MACEPCI_LENGTH 0x1000
508 int dev_macepci_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
509 struct pci_data *dev_macepci_init(struct memory *mem, uint64_t baseaddr, int pciirq);
510 #define DEV_SGI_MEC_LENGTH 0x1000
511 int dev_sgi_mec_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
512 void dev_sgi_mec_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, unsigned char *macaddr);
513 #define DEV_SGI_UST_LENGTH 0x10000
514 int dev_sgi_ust_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
515 void dev_sgi_ust_init(struct memory *mem, uint64_t baseaddr);
516 #define DEV_SGI_MTE_LENGTH 0x10000
517 int dev_sgi_mte_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
518 void dev_sgi_mte_init(struct memory *mem, uint64_t baseaddr);
519
520 /* dev_sii.c: */
521 #define DEV_SII_LENGTH 0x100
522 void dev_sii_tick(struct cpu *cpu, void *);
523 int dev_sii_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
524 void dev_sii_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, uint64_t buf_start, uint64_t buf_end, int irq_nr);
525
526 /* dev_ssc.c: */
527 #define DEV_SSC_LENGTH 0x1000
528 int dev_ssc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
529 void dev_ssc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int use_fb, uint32_t *);
530
531 /* dev_turbochannel.c: */
532 #define DEV_TURBOCHANNEL_LEN 0x0470
533 int dev_turbochannel_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
534 void dev_turbochannel_init(struct machine *machine, struct memory *mem, int slot_nr, uint64_t baseaddr, uint64_t endaddr, char *device_name, int irq);
535
536 /* dev_vga.c: */
537 int dev_vga_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr,
538 unsigned char *data, size_t len, int writeflag, void *);
539 void dev_vga_init(struct machine *machine, struct memory *mem,
540 uint64_t videomem_base, uint64_t control_base, int max_x, int max_y,
541 char *name);
542
543 /* dev_vr41xx.c: */
544 #define DEV_VR41XX_LENGTH 0x800 /* TODO? */
545 struct vr41xx_data {
546 int cpumodel;
547
548 int kiu_console_handle;
549 int kiu_offset;
550 int kiu_irq_nr;
551 int kiu_int_assert;
552 int d0;
553 int d1;
554 int d2;
555 int d3;
556 int d4;
557 int d5;
558 int dont_clear_next;
559 int escape_state;
560
561 /* See icureg.h in NetBSD for more info. */
562 uint16_t sysint1;
563 uint16_t msysint1;
564 uint16_t giuint;
565 uint16_t giumask;
566 uint16_t sysint2;
567 uint16_t msysint2;
568 };
569
570 int dev_vr41xx_access(struct cpu *cpu, struct memory *mem,
571 uint64_t relative_addr, unsigned char *data, size_t len,
572 int writeflag, void *);
573 struct vr41xx_data *dev_vr41xx_init(struct machine *machine,
574 struct memory *mem, int cpumodel);
575
576 /* dev_wdc.c: */
577 #define DEV_WDC_LENGTH 0x8
578 int dev_wdc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
579 void dev_wdc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int irq_nr, int base_drive);
580
581 /* dev_wdsc.c: */
582 #define DEV_WDSC_NREGS 0x100 /* 8-bit register select */
583 #define DEV_WDSC_LENGTH 0x10
584 int dev_wdsc_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *);
585 void dev_wdsc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int controller_nr, int irq_nr);
586
587 /* dev_zs.c: */
588 #define DEV_ZS_LENGTH 0x10
589 int dev_zs_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr,
590 unsigned char *data, size_t len, int writeflag, void *);
591 int dev_zs_init(struct machine *machine, struct memory *mem, uint64_t baseaddr,
592 int irq_nr, int addrmult, char *name);
593
594 /* lk201.c: */
595 struct lk201_data {
596 int use_fb;
597 int console_handle;
598
599 void (*add_to_rx_queue)(void *,int,int);
600 void *add_data;
601
602 unsigned char keyb_buf[8];
603 int keyb_buf_pos;
604
605 int mouse_mode;
606 int mouse_revision; /* 0..15 */
607 int mouse_x, mouse_y, mouse_buttons;
608
609 int old_host_mouse_x;
610 int old_host_mouse_y;
611 int old_host_mouse_stays_put;
612 int mouse_check_interval;
613 int mouse_check_interval_reset;
614 };
615 void lk201_tick(struct lk201_data *);
616 void lk201_tx_data(struct lk201_data *, int port, int idata);
617 void lk201_init(struct lk201_data *d, int use_fb,
618 void (*add_to_rx_queue)(void *,int,int), int console_handle, void *);
619
620
621 #endif /* DEVICES_H */
622

  ViewVC Help
Powered by ViewVC 1.1.26