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

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.26