xref: /netbsd-src/sys/arch/acorn32/stand/lib/riscoscalls.h (revision e5548b402ae4c44fb816de42c7bba9581ce23ef5)
1 /*	$NetBSD: riscoscalls.h,v 1.4 2005/12/11 12:16:08 christos 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__
89 typedef 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 
96 extern void os_writec(int);
97 extern void os_new_line(void);
98 extern int os_readc(void);
99 #endif
100 
101 /* OS_CLI */
102 
103 #ifndef __ASSEMBLER__
104 extern void os_cli(char *);
105 extern os_error *xos_cli(char *);
106 #endif
107 
108 /* OS_Byte */
109 
110 #define osbyte_OUTPUT_CURSOR_POSITION	165
111 
112 #ifndef __ASSEMBLER__
113 extern 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__
121 extern 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__
134 extern os_error *xosargs_read(int, int, int *);
135 extern 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__
155 extern os_error *xosgbpb_write(int, char const *, int, int *);
156 extern 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__
173 extern os_error *xosfind_close(int);
174 extern 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__
189 extern 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__
234 struct page_info {
235 	int	pagenumber;
236 	int	logical;
237 	int	physical;
238 };
239 
240 extern void osmemory_read_arrangement_table_size(int *size, int *nbpp);
241 extern void osmemory_read_arrangement_table(unsigned char *block);
242 extern void osmemory_page_op(int fromto, struct page_info *block, int num_pages);
243 #endif
244 
245 /* Misc */
246 #ifndef __ASSEMBLER__
247 extern char *os_get_env(caddr_t *, void **);
248 
249 extern void os_exit(os_error const *, int) __attribute__((noreturn));
250 
251 extern void os_int_off(void);
252 
253 extern void os_enter_os(void);
254 #endif
255 
256 #define OSFSControl_Shutdown	23
257 
258 #ifndef __ASSEMBLER__
259 extern os_error *xosfscontrol_shutdown(void);
260 #endif
261 
262 #define Service_PreReset	0x45
263 
264 #ifndef __ASSEMBLER__
265 extern 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__
276 extern void os_read_vdu_variables(const int *, int *);
277 
278 extern os_error *xos_swi_number_from_string(char const *, int *);
279 
280 extern void os_read_mem_map_info(int *, int *);
281 
282 struct 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 
291 extern void os_read_mem_map_entries(struct os_mem_map_request *);
292 
293 extern os_error xcache_control(u_int, u_int, u_int *);
294 
295 struct 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__
327 extern int riscos_errno(os_error *);
328 #endif
329