riscoscalls.h revision 1.3
1/*	$NetBSD: riscoscalls.h,v 1.3 2004/05/18 23:29:30 gavan Exp $	*/
2
3/*-
4 * Copyright (c) 2001 Ben Harris
5 * 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
9 * are met:
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 ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30/*
31 * This file defines the interface for the veneers over RISC OS SWIs used
32 * by libsa.  Only those SWIs actually needed by libsa are included.  In
33 * general, the interface is based on the one provided by OsLib, though
34 * this implementation is independent.
35 */
36
37#define OS_WriteC		0x000000
38#define XOS_WriteC		0x020000
39#define OS_NewLine		0x000003
40#define XOS_NewLine		0x020003
41#define OS_ReadC		0x000004
42#define XOS_ReadC		0x020004
43#define OS_CLI			0x000005
44#define XOS_CLI			0x020005
45#define OS_Byte			0x000006
46#define XOS_Byte		0x020006
47#define OS_Word			0x000007
48#define XOS_Word		0x020007
49#define OS_Args			0x000009
50#define XOS_Args		0x020009
51#define OS_GBPB			0x00000c
52#define XOS_GBPB		0x02000c
53#define OS_Find			0x00000d
54#define XOS_Find		0x02000d
55#define OS_GetEnv		0x000010
56#define XOS_GetEnv		0x020010
57#define OS_Exit			0x000011
58#define XOS_Exit		0x020011
59#define OS_IntOff		0x000014
60#define XOS_IntOff		0x020014
61#define OS_EnterOS		0x000016
62#define XOS_EnterOS		0x020016
63#define OS_Module		0x00001e
64#define XOS_Module		0x02001e
65#define OS_FSControl		0x000029
66#define XOS_FSControl		0x020029
67#define OS_ServiceCall		0x000030
68#define XOS_ServiceCall		0x020030
69#define OS_ReadVduVariables	0x000031
70#define XOS_ReadVduVariables	0x020031
71#define OS_SWINumberFromString	0x000039
72#define XOS_SWINumberFromString	0x020039
73#define OS_ReadMemMapInfo	0x000051
74#define XOS_ReadMemMapInfo	0x020051
75#define OS_ReadMemMapEntries	0x000052
76#define XOS_ReadMemMapEntries	0x020052
77#define OS_ReadSysInfo		0x000058
78#define XOS_ReadSysInfo		0x020058
79#define OS_Memory		0x000068
80#define XOS_Memory		0x020068
81
82#define Cache_Control		0x000280
83#define XCache_Control		0x020280
84
85#define Wimp_SlotSize		0x0400ec
86#define XWimp_SlotSize		0x0600ec
87
88#ifndef __ASSEMBLER__
89typedef struct os_error {
90	u_int32_t errnum;
91	char errmess[252];
92} os_error;
93
94/* Errors talking to the console may as well be fatal. */
95
96extern void os_writec(int);
97extern void os_new_line(void);
98extern int os_readc(void);
99#endif
100
101/* OS_CLI */
102
103#ifndef __ASSEMBLER__
104extern void os_cli(char *);
105extern os_error *xos_cli(char *);
106#endif
107
108/* OS_Byte */
109
110#define osbyte_OUTPUT_CURSOR_POSITION	165
111
112#ifndef __ASSEMBLER__
113extern void os_byte(int, int, int, int *, int *);
114#endif
115
116/* OS_Word */
117
118#define osword_WRITE_SCREEN_ADDRESS	 22
119
120#ifndef __ASSEMBLER__
121extern void os_word(int, char *);
122#endif
123
124/* OS_Args */
125
126#define OSArgs_ReadPtr		0
127#define OSArgs_SetPtr		1
128#define OSArgs_ReadExt		2
129#define OSArgs_SetExt		3
130#define OSArgs_ReadAllocation	4
131#define OSArgs_ReadEOFStatus	5
132
133#ifndef __ASSEMBLER__
134extern os_error *xosargs_read(int, int, int *);
135extern os_error *xosargs_set(int, int, int);
136
137#define xosargs_read_ptr(f, vp)	xosargs_read(OSArgs_ReadPtr, (f), (vp))
138#define xosargs_set_ptr(f, v)	xosargs_set(OSArgs_SetPtr, (f), (v))
139#define xosargs_read_ext(f, vp)	xosargs_read(OSArgs_ReadExt, (f), (vp))
140#define xosargs_set_ext(f, v)	xosargs_set(OSArgs_SetExt, (f), (v))
141#define xosargs_read_allocation(f, vp) \
142				xosargs_read(OSArgs_ReadAllocation, (f), (vp))
143#define xosargs_read_eof_status(f, vp) \
144				xosargs_read(OSArgs_ReadEOFStatus, (f), (vp))
145#endif
146
147/* OS_GBPB */
148
149#define OSGBPB_WriteAt		1
150#define OSGBPB_Write		2
151#define OSGBPB_ReadAt		3
152#define OSGBPB_Read		4
153
154#ifndef __ASSEMBLER__
155extern os_error *xosgbpb_write(int, char const *, int, int *);
156extern os_error *xosgbpb_read(int, char *, int, int *);
157#endif
158
159/* OS_Find */
160
161#define OSFind_Close	0x00
162#define OSFind_Openin	0x40
163#define OSFind_Openout	0x80
164#define OSFind_Openup	0xc0
165
166#define osfind_PATH		0x01
167#define osfind_PATH_VAR		0x02
168#define osfind_NO_PATH		0x03
169#define osfind_ERROR_IF_DIR	0x04
170#define osfind_ERROR_IF_ABSENT	0x08
171
172#ifndef __ASSEMBLER__
173extern os_error *xosfind_close(int);
174extern os_error *xosfind_open(int, char const *, char const *, int *);
175#endif
176
177/* OS_ReadSysInfo */
178
179#define	OSReadSysInfo_ReadConfiguredScreenSize	0x00
180#define OSReadSysInfo_ReadMonitorInfo		0x01
181#define OSReadSysInfo_ReadChipPresenceAndId	0x02
182#define OSReadSysInfo_ReadSuperIOFeatures	0x03
183
184#define osreadsysinfo_IOEB_ASIC_PRESENT		0x01
185#define osreadsysinfo_SUPERIO_PRESENT		0x02
186#define osreadsysinfo_LCD_ASIC_PRESENT		0x04
187
188#ifndef __ASSEMBLER__
189extern void os_readsysinfo(int what, int *r0, int *r1, int *r2, int *r3, int *r4);
190#define os_readsysinfo_configured_screensize(s) \
191	os_readsysinfo(OSReadSysInfo_ReadConfiguredScreenSize, (s), 0, 0, 0, 0)
192
193#define os_readsysinfo_monitor_info(mode, type, sync) \
194	os_readsysinfo(OSReadSysInfo_ReadMonitorInfo, (mode), (type), (sync), 0, 0)
195
196#define os_readsysinfo_chip_presence(ioeb, superio, lcd) \
197	os_readsysinfo(OSReadSysInfo_ReadChipPresenceAndId, (ioeb), (superio), (lcd), 0, 0)
198
199#define os_readsysinfo_unique_id(low, high) \
200	os_readsysinfo(OSReadSysInfo_ReadChipPresenceAndId, 0, 0, 0, (low), (high))
201
202#define os_readsysinfo_superio_features(basic, extra) \
203	os_readsysinfo(OSReadSysInfo_ReadSuperIOFeatures, (basic), (extra), 0, 0, 0)
204
205#endif
206
207/* OS_Memory */
208
209#define OSMemory_PageOp				0x00
210#define OSMemory_ReadArrangementTableSize	0x06
211#define OSMemory_ReadArrangementTable		0x07
212#define OSMemory_ReadSize			0x08
213#define OSMemory_ReadController			0x09
214
215#define osmemory_GIVEN_PAGE_NO		0x0100
216#define osmemory_GIVEN_LOG_ADDR		0x0200
217#define osmemory_GIVEN_PHYS_ADDR	0x0400
218#define osmemory_RETURN_PAGE_NO		0x0800
219#define osmemory_RETURN_LOG_ADDR	0x1000
220#define osmemory_RETURN_PHYS_ADDR	0x2000
221
222#define osmemory_TYPE			0xf00
223#define osmemory_TYPE_SHIFT		8
224#define osmemory_TYPE_ABSENT		0x0
225#define osmemory_TYPE_DRAM		0x1
226#define osmemory_TYPE_VRAM		0x2
227#define osmemory_TYPE_ROM		0x3
228#define osmemory_TYPE_IO		0x4
229/* 5, 6, 7 are undefined */
230#define osmemory_TYPE_ALLOCATABLE_MASK	0x8	/* bit signaling allocatable */
231
232
233#ifndef __ASSEMBLER__
234struct page_info {
235	int	pagenumber;
236	int	logical;
237	int	physical;
238};
239
240extern void osmemory_read_arrangement_table_size(int *size, int *nbpp);
241extern void osmemory_read_arrangement_table(unsigned char *block);
242extern void osmemory_page_op(int fromto, struct page_info *block, int num_pages);
243#endif
244
245/* Misc */
246#ifndef __ASSEMBLER__
247extern char *os_get_env(caddr_t *, void **);
248
249extern void os_exit(os_error const *, int) __attribute__((noreturn));
250
251extern void os_int_off(void);
252
253extern void os_enter_os(void);
254#endif
255
256#define OSFSControl_Shutdown	23
257
258#ifndef __ASSEMBLER__
259extern os_error *xosfscontrol_shutdown(void);
260#endif
261
262#define Service_PreReset	0x45
263
264#ifndef __ASSEMBLER__
265extern void service_pre_reset(void);
266#endif
267
268#define os_MODEVAR_LOG2_BPP		9
269#define os_MODEVAR_XWIND_LIMIT		11
270#define os_MODEVAR_YWIND_LIMIT		12
271#define os_VDUVAR_DISPLAY_START		149
272#define os_VDUVAR_TOTAL_SCREEN_SIZE	150
273#define os_VDUVAR_TCHAR_SPACEY		170
274
275#ifndef __ASSEMBLER__
276extern void os_read_vdu_variables(const int *, int *);
277
278extern os_error *xos_swi_number_from_string(char const *, int *);
279
280extern void os_read_mem_map_info(int *, int *);
281
282struct os_mem_map_request {
283	int page_no;
284	caddr_t map;
285	int access;
286#define os_AREA_ACCESS_READ_WRITE	0
287#define os_AREA_ACCESS_READ_ONLY	1
288#define os_AREA_ACCESS_NONE		3
289};
290
291extern void os_read_mem_map_entries(struct os_mem_map_request *);
292
293extern os_error xcache_control(u_int, u_int, u_int *);
294
295struct filecore_disc {
296	u_int8_t	log2secsize;
297	u_int8_t	secspertrack;
298	u_int8_t	heads;
299	u_int8_t	density;
300	u_int8_t	idlen;
301	u_int8_t	log2bpmp;
302	u_int8_t	skew;
303	u_int8_t	bootoption;
304	u_int8_t	lowsector;
305	u_int8_t	nzones;
306	u_int16_t	zone_spare;
307	u_int32_t	root;
308	u_int32_t	disc_size;
309	u_int16_t	disc_id;
310	char		disc_name[10];
311	u_int32_t	disc_type;
312	u_int32_t	disc_size_hi;
313	u_int8_t	share_size;
314	u_int8_t	big_flag;
315	u_int8_t	reserved[22];
316};
317
318#endif
319
320/* RISC OS Error numbers */
321
322#define error_IS_ADIR			0xa8
323#define error_TOO_MANY_OPEN_FILES	0xc0
324#define error_FILE_NOT_FOUND		0xd6
325
326#ifndef __ASSEMBLER__
327extern int riscos_errno(os_error *);
328#endif
329