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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4 - (show annotations)
Mon Oct 8 16:18:00 2007 UTC (16 years, 6 months ago) by dpavlin
File MIME type: text/plain
File size: 13737 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 /* gxemul: $Id: arcbios_other.h,v 1.3 2005/03/05 12:34:02 debug Exp $ */
2 /* $NetBSD: arcbios.h,v 1.2 2000/01/23 21:01:50 soda Exp $ */
3 /* $OpenBSD: arcbios.h,v 1.4 1997/05/01 15:13:30 pefo Exp $ */
4
5 #ifndef ARCBIOS_OTHER_H
6 #define ARCBIOS_OTHER_H
7
8 /*-
9 * Copyright (c) 1996 M. Warner Losh. All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer.
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in the
18 * documentation and/or other materials provided with the distribution.
19 * 3. Neither the name of the University nor the names of its contributors
20 * may be used to endorse or promote products derived from this software
21 * without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 */
35
36 #include <sys/types.h>
37
38 typedef struct arc_sid
39 {
40 char vendor[8];
41 char prodid[8];
42 } arc_sid_t;
43
44 /* struct arc_config::class */
45 #define arc_SystemClass 0
46 #define arc_ProcessorClass 1
47 #define arc_CacheClass 2
48 #define arc_AdapterClass 3
49 #define arc_ControllerClass 4
50 #define arc_PeripheralClass 5
51 #define arc_MemoryClass 6
52
53 /* struct arc_config::type */
54 #define arc_System
55
56 #define arc_CentralProcessor
57 #define arc_FloatingPointProcessor
58
59 #define arc_PrimaryIcache
60 #define arc_PrimaryDcache
61 #define arc_SecondaryIcache
62 #define arc_SecondaryDcache
63 #define arc_SecondaryCache
64
65 #define arc_EisaAdapter /* Eisa adapter */
66 #define arc_TcAdapter /* Turbochannel adapter */
67 #define arc_ScsiAdapter /* SCSI adapter */
68 #define arc_DtiAdapter /* AccessBus adapter */
69 #define arc_MultiFunctionAdapter
70
71 #define arc_DiskController 0
72 #define arc_TapeController 1
73 #define arc_CdromController 2
74 #define arc_WormController 3
75 #define arc_SerialController 4
76 #define arc_NetworkController 5
77 #define arc_DisplayController 6
78 #define arc_ParallelController 7
79 #define arc_PointerController 8
80 #define arc_KeyboardController 9
81 #define arc_AudioController 10
82 #define arc_OtherController 11 /* denotes a controller not otherwise defined */
83
84 #define arc_DiskPeripheral 12
85 #define arc_FloppyDiskPeripheral 13
86 #define arc_TapePeripheral 14
87 #define arc_ModemPeripheral 15
88 #define arc_MonitorPeripheral 16
89 #define arc_PrinterPeripheral 17
90 #define arc_PointerPeripheral 18
91 #define arc_KeyboardPeripheral 19
92 #define arc_TerminalPeripheral 20
93 #define arc_OtherPeripheral 21 /* denotes a peripheral not otherwise defined */
94 #define arc_LinePeripheral 22
95 #define arc_NetworkPeripheral 23
96
97 #define arc_SystemMemory 24
98
99 /* struct arc_config::flag */
100 #define arc_PeripheralFailed 0x01
101 #define arc_PeripheralReadOnly 0x02
102 #define arc_PeripheralRemovable 0x04
103 #define arc_PeripheralConsoleIn 0x08
104 #define arc_PeripheralConsoleOut 0x10
105 #define arc_PeripheralInput 0x20
106 #define arc_PeripheralOutput 0x40
107
108 /* Wonder how this is aligned... */
109 typedef struct arc_config
110 {
111 u_int32_t class;
112 u_int32_t type;
113 u_int32_t flags;
114 u_int16_t version;
115 u_int16_t revision;
116 u_int32_t key;
117 u_int32_t affinity_mask;
118 u_int32_t config_data_len;
119 u_int32_t id_len;
120 char *id;
121 } arc_config_t;
122
123 typedef enum arc_cm_resource_type {
124 arc_CmResourceTypeNull,
125 arc_CmResourceTypePort,
126 arc_CmResourceTypeInterrupt,
127 arc_CmResourceTypeMemory,
128 arc_CmResourceTypeDMA,
129 arc_CmResourceTypeDeviceSpecific,
130 arc_CmResourceTypeVendor,
131 arc_CmResourceTypeProductName,
132 arc_CmResourceTypeSerialNumber
133 } arc_cm_resource_type_t;
134
135 /* do not use u_int64_t to avoid alignment problem */
136 typedef struct {
137 u_int32_t loword;
138 u_int32_t hiword;
139 } arc_paddr_t;
140
141 typedef struct arc_cm_partial_resource {
142 u_int8_t type;
143 u_int8_t share_disposition;
144 u_int16_t flags;
145
146 union {
147 struct {
148 arc_paddr_t start;
149 u_int32_t length;
150 } port;
151 struct {
152 u_int32_t level;
153 u_int32_t vector;
154 u_int32_t reserved1;
155 } interrupt;
156 struct {
157 arc_paddr_t start;
158 u_int32_t length;
159 } memory;
160 struct {
161 u_int32_t channel;
162 u_int32_t port;
163 u_int32_t reserved1;
164 } dma;
165 struct {
166 u_int8_t vendor[12];
167 } vendor;
168 struct {
169 u_int8_t product_name[12];
170 } product_name;
171 struct {
172 u_int8_t serial_number[12];
173 } serial_number;
174 struct {
175 u_int32_t data_size;
176 u_int32_t reserved1;
177 u_int32_t reserved2;
178 /* the data is followed */
179 } device_specific_data;
180 } u;
181 } arc_cm_partial_resource_t;
182
183 typedef struct arc_cm_partial_resource_list {
184 u_int16_t version;
185 u_int16_t revision;
186 u_int32_t count;
187 arc_cm_partial_resource_t partial_descriptors[1];
188 } arc_cm_partial_resource_list_t;
189
190 typedef enum arc_cm_share_disposition {
191 arc_CmResourceShareUndetermined,
192 arc_CmResourceShareDeviceExclusive,
193 arc_CmResourceShareDriverExclusive,
194 arc_CmResourceShareShared
195 } arc_cm_share_disposition_t;
196
197 /* arc_cm_partial_resource_t::flags when type == arc_CmResourceTypeInterrupt */
198 typedef enum arc_cm_flags_interrupt {
199 arc_CmResourceInterruptLevelSensitive,
200 arc_CmResourceInterruptLatched
201 } arc_cm_flags_interrupt_t;
202
203 /* arc_cm_partial_resource_t::flags when type == arc_CmResourceTypeMemory */
204 typedef enum arc_cm_flags_memory {
205 arc_CmResourceMemoryReadWrite,
206 arc_CmResourceMemoryReadOnly,
207 arc_CmResourceMemoryWriteOnly
208 } arc_cm_flags_memory_t;
209
210 /* arc_cm_partial_resource_t::flags when type == arc_CmResourceTypePort */
211 typedef enum arc_cm_flags_port {
212 arc_CmResourcePortMemory,
213 arc_CmResourcePortIO
214 } arc_cm_flags_port;
215
216 typedef enum arc_status
217 {
218 arc_ESUCCESS, /* Success */
219 arc_E2BIG, /* Arg list too long */
220 arc_EACCES, /* No such file or directory */
221 arc_EAGAIN, /* Try again */
222 arc_EBADF, /* Bad file number */
223 arc_EBUSY, /* Device or resource busy */
224 arc_EFAULT, /* Bad address */
225 arc_EINVAL, /* Invalid argument */
226 arc_EIO, /* I/O error */
227 arc_EISDIR, /* Is a directory */
228 arc_EMFILE, /* Too many open files */
229 arc_EMLINK, /* Too many links */
230 arc_ENAMETOOLONG, /* File name too long */
231 arc_ENODEV, /* No such device */
232 arc_ENOENT, /* No such file or directory */
233 arc_ENOEXEC, /* Exec format error */
234 arc_ENOMEM, /* Out of memory */
235 arc_ENOSPC, /* No space left on device */
236 arc_ENOTDIR, /* Not a directory */
237 arc_ENOTTY, /* Not a typewriter */
238 arc_ENXIO, /* No such device or address */
239 arc_EROFS, /* Read-only file system */
240 } arc_status_t;
241
242 typedef enum {
243 ExeceptionBlock,
244 SystemParameterBlock,
245 FreeMemory,
246 BadMemory,
247 LoadedProgram,
248 FirmwareTemporary,
249 FirmwarePermanent,
250 FreeContigous
251 } arc_mem_type_t;
252
253 typedef struct arc_mem {
254 arc_mem_type_t Type; /* Memory chunk type */
255 u_int32_t BasePage; /* Page no, first page */
256 u_int32_t PageCount; /* Number of pages */
257 } arc_mem_t;
258
259 typedef caddr_t arc_time_t; /* XXX */
260
261 typedef struct arc_dsp_stat {
262 u_int16_t CursorXPosition;
263 u_int16_t CursorYPosition;
264 u_int16_t CursorMaxXPosition;
265 u_int16_t CursorMaxYPosition;
266 u_int8_t ForegroundColor;
267 u_int8_t BackgroundColor;
268 u_int8_t HighIntensity;
269 u_int8_t Underscored;
270 u_int8_t ReverseVideo;
271 } arc_dsp_stat_t;
272
273 typedef caddr_t arc_dirent_t; /* XXX */
274 typedef u_int32_t arc_seek_mode_t; /* XXX */
275 typedef u_int32_t arc_mount_t; /* XXX */
276
277 typedef enum arc_open_mode {
278 arc_OpenReadOnly,
279 arc_OpenWriteOnly,
280 arc_OpenReadWrite,
281 arc_CreateWriteOnly,
282 arc_CreateReadWrite,
283 arc_SupersedeWriteOnly,
284 arc_SupersedeReadWrite,
285 arc_OpenDirectory,
286 arc_createDirectory
287 } arc_open_mode_t;
288
289 typedef struct arc_calls
290 {
291 arc_status_t (*load)( /* Load 1 */
292 char *, /* Image to load */
293 u_int32_t, /* top address */
294 u_int32_t *, /* Entry address */
295 u_int32_t *); /* Low address */
296
297 arc_status_t (*invoke)( /* Invoke 2 */
298 u_int32_t, /* Entry Address */
299 u_int32_t, /* Stack Address */
300 u_int32_t, /* Argc */
301 char **, /* argv */
302 char **); /* envp */
303
304 arc_status_t (*execute)( /* Execute 3 */
305 char *, /* Image path */
306 u_int32_t, /* Argc */
307 char **, /* argv */
308 char **); /* envp */
309
310 void (*halt)(void); /* Halt 4 */
311
312 void (*power_down)(void); /* PowerDown 5 */
313
314 void (*restart)(void); /* Restart 6 */
315
316 void (*reboot)(void); /* Reboot 7 */
317
318 void (*enter_interactive_mode)(void); /* EnterInteractiveMode 8 */
319
320 void (*return_from_main)(void); /* ReturnFromMain 9 */
321
322 arc_config_t *(*get_peer)( /* GetPeer 10 */
323 arc_config_t *); /* Component */
324
325 arc_config_t *(*get_child)( /* GetChild 11 */
326 arc_config_t *); /* Component */
327
328 arc_config_t *(*get_parent)( /* GetParent 12 */
329 arc_config_t *); /* Component */
330
331 arc_status_t (*get_config_data)( /* GetConfigurationData 13 */
332 caddr_t, /* Configuration Data */
333 arc_config_t *); /* Component */
334
335 arc_config_t *(*add_child)( /* AddChild 14 */
336 arc_config_t *, /* Component */
337 arc_config_t *); /* New Component */
338
339 arc_status_t (*delete_component)( /* DeleteComponent 15 */
340 arc_config_t *); /* Component */
341
342 arc_config_t *(*get_component)( /* GetComponent 16 */
343 char *); /* Path */
344
345 arc_status_t (*save_config)(void); /* SaveConfiguration 17 */
346
347 arc_sid_t *(*get_system_id)(void); /* GetSystemId 18 */
348
349 arc_mem_t *(*get_memory_descriptor)( /* GetMemoryDescriptor 19 */
350 arc_mem_t *); /* MemoryDescriptor */
351
352 void (*signal)( /* Signal 20 */
353 u_int32_t, /* Signal number */
354 /**/ caddr_t); /* Handler */
355
356 arc_time_t *(*get_time)(void); /* GetTime 21 */
357
358 u_int32_t (*get_relative_time)(void); /* GetRelativeTime 22 */
359
360 arc_status_t (*get_dir_entry)( /* GetDirectoryEntry 23 */
361 u_int32_t, /* FileId */
362 arc_dirent_t *, /* Directory entry */
363 u_int32_t, /* Length */
364 u_int32_t *); /* Count */
365
366 arc_status_t (*open)( /* Open 24 */
367 char *, /* Path */
368 arc_open_mode_t, /* Open mode */
369 u_int32_t *); /* FileId */
370
371 arc_status_t (*close)( /* Close 25 */
372 u_int32_t); /* FileId */
373
374 arc_status_t (*read)( /* Read 26 */
375 u_int32_t, /* FileId */
376 caddr_t, /* Buffer */
377 u_int32_t, /* Length */
378 u_int32_t *); /* Count */
379
380 arc_status_t (*get_read_status)( /* GetReadStatus 27 */
381 u_int32_t); /* FileId */
382
383 arc_status_t (*write)( /* Write 28 */
384 u_int32_t, /* FileId */
385 caddr_t, /* Buffer */
386 u_int32_t, /* Length */
387 u_int32_t *); /* Count */
388
389 arc_status_t (*seek)( /* Seek 29 */
390 u_int32_t, /* FileId */
391 int64_t *, /* Offset */
392 arc_seek_mode_t); /* Mode */
393
394 arc_status_t (*mount)( /* Mount 30 */
395 char *, /* Path */
396 arc_mount_t); /* Operation */
397
398 char *(*getenv)( /* GetEnvironmentVariable 31 */
399 char *); /* Variable */
400
401 arc_status_t (*putenv)( /* SetEnvironmentVariable 32 */
402 char *, /* Variable */
403 char *); /* Value */
404
405 arc_status_t (*get_file_info)(void); /* GetFileInformation 33 */
406
407 arc_status_t (*set_file_info)(void); /* SetFileInformation 34 */
408
409 void (*flush_all_caches)(void); /* FlushAllCaches 35 */
410
411 arc_status_t (*test_unicode)( /* TestUnicodeCharacter 36 */
412 u_int32_t, /* FileId */
413 u_int16_t); /* UnicodeCharacter */
414
415 arc_dsp_stat_t *(*get_display_status)( /* GetDisplayStatus 37 */
416 u_int32_t); /* FileId */
417 } arc_calls_t;
418
419 #define ARC_PARAM_BLK_MAGIC 0x53435241 /* "ARCS" in little endian */
420 #define ARC_PARAM_BLK_MAGIC_BUG 0x41524353 /* This is wrong... but req */
421
422 typedef struct arc_param_blk
423 {
424 u_int32_t magic; /* Magic Number */
425 u_int32_t length; /* Length of parameter block */
426 u_int16_t version; /* ?? */
427 u_int16_t revision; /* ?? */
428 /**/ caddr_t restart_block; /* ?? */
429 /**/ caddr_t debug_block; /* Debugging info -- unused */
430 /**/ caddr_t general_exp_vect; /* ?? */
431 /**/ caddr_t tlb_miss_exp_vect; /* ?? */
432 u_int32_t firmware_length; /* Size of Firmware jumptable in bytes */
433 arc_calls_t *firmware_vect; /* Firmware jumptable */
434 u_int32_t vendor_length; /* Size of Vendor specific jumptable */
435 /**/ caddr_t vendor_vect; /* Vendor specific jumptable */
436 u_int32_t adapter_count; /* ?? */
437 struct arc_adapter_param {
438 u_int32_t adapter_type; /* ?? */
439 u_int32_t adapter_length; /* ?? */
440 /**/ caddr_t adapter_vect; /* ?? */
441 } adapters[1];
442 } arc_param_blk_t;
443
444 #define ArcBiosBase ((arc_param_blk_t *) 0x80001000)
445 #define ArcBios (ArcBiosBase->firmware_vect)
446
447 #if 0
448 arc_status_t Bios_Read __P((int, void *, int, int *));
449 arc_status_t Bios_Write __P((int, void *, int, int *));
450 arc_status_t Bios_Open __P((char *, int, u_int *));
451 arc_status_t Bios_Close __P((u_int));
452 arc_mem_t *Bios_GetMemoryDescriptor __P((arc_mem_t *));
453 arc_sid_t *Bios_GetSystemId __P((void));
454 arc_config_t *Bios_GetChild __P((arc_config_t *));
455 arc_config_t *Bios_GetPeer __P((arc_config_t *));
456 int Bios_GetConfigurationData __P((void *, arc_config_t *));
457 arc_dsp_stat_t *Bios_GetDisplayStatus __P((int));
458
459 const char *const arc_strerror __P((int error));
460
461 int biosgetc __P((dev_t));
462 void biosputc __P((dev_t, int));
463 #endif
464
465 #endif /* ARCBIOS_OTHER_H */
466

  ViewVC Help
Powered by ViewVC 1.1.26