1 /* $NetBSD: riscoscalls.h,v 1.6 2006/04/06 20:41:38 bjh21 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 #define FileCore_DiscOp 0x040540 89 #define XFileCore_DiscOp 0x060540 90 #define FileCore_Drives 0x040542 91 #define XFileCore_Drives 0x060542 92 #define FileCore_SectorOp 0x04054A 93 #define XFileCore_SectorOp 0x06054A 94 #define FileCore_DiscOp64 0x04054E 95 #define XFileCore_DiscOp64 0x06054E 96 97 98 #ifndef __ASSEMBLER__ 99 typedef struct os_error { 100 u_int32_t errnum; 101 char errmess[252]; 102 } os_error; 103 104 /* Errors talking to the console may as well be fatal. */ 105 106 extern void os_writec(int); 107 extern void os_new_line(void); 108 extern int os_readc(void); 109 #endif 110 111 /* OS_CLI */ 112 113 #ifndef __ASSEMBLER__ 114 extern void os_cli(char *); 115 extern os_error *xos_cli(char *); 116 #endif 117 118 /* OS_Byte */ 119 120 #define osbyte_OUTPUT_CURSOR_POSITION 165 121 122 #ifndef __ASSEMBLER__ 123 extern void os_byte(int, int, int, int *, int *); 124 #endif 125 126 /* OS_Word */ 127 128 #define osword_WRITE_SCREEN_ADDRESS 22 129 130 #ifndef __ASSEMBLER__ 131 extern void os_word(int, char *); 132 #endif 133 134 /* OS_Args */ 135 136 #define OSArgs_ReadPtr 0 137 #define OSArgs_SetPtr 1 138 #define OSArgs_ReadExt 2 139 #define OSArgs_SetExt 3 140 #define OSArgs_ReadAllocation 4 141 #define OSArgs_ReadEOFStatus 5 142 143 #ifndef __ASSEMBLER__ 144 extern os_error *xosargs_read(int, int, int *); 145 extern os_error *xosargs_set(int, int, int); 146 147 #define xosargs_read_ptr(f, vp) xosargs_read(OSArgs_ReadPtr, (f), (vp)) 148 #define xosargs_set_ptr(f, v) xosargs_set(OSArgs_SetPtr, (f), (v)) 149 #define xosargs_read_ext(f, vp) xosargs_read(OSArgs_ReadExt, (f), (vp)) 150 #define xosargs_set_ext(f, v) xosargs_set(OSArgs_SetExt, (f), (v)) 151 #define xosargs_read_allocation(f, vp) \ 152 xosargs_read(OSArgs_ReadAllocation, (f), (vp)) 153 #define xosargs_read_eof_status(f, vp) \ 154 xosargs_read(OSArgs_ReadEOFStatus, (f), (vp)) 155 #endif 156 157 /* OS_GBPB */ 158 159 #define OSGBPB_WriteAt 1 160 #define OSGBPB_Write 2 161 #define OSGBPB_ReadAt 3 162 #define OSGBPB_Read 4 163 164 #ifndef __ASSEMBLER__ 165 extern os_error *xosgbpb_write(int, char const *, int, int *); 166 extern os_error *xosgbpb_read(int, char *, int, int *); 167 #endif 168 169 /* OS_Find */ 170 171 #define OSFind_Close 0x00 172 #define OSFind_Openin 0x40 173 #define OSFind_Openout 0x80 174 #define OSFind_Openup 0xc0 175 176 #define osfind_PATH 0x01 177 #define osfind_PATH_VAR 0x02 178 #define osfind_NO_PATH 0x03 179 #define osfind_ERROR_IF_DIR 0x04 180 #define osfind_ERROR_IF_ABSENT 0x08 181 182 #ifndef __ASSEMBLER__ 183 extern os_error *xosfind_close(int); 184 extern os_error *xosfind_open(int, char const *, char const *, int *); 185 #endif 186 187 /* OS_ReadSysInfo */ 188 189 #define OSReadSysInfo_ReadConfiguredScreenSize 0x00 190 #define OSReadSysInfo_ReadMonitorInfo 0x01 191 #define OSReadSysInfo_ReadChipPresenceAndId 0x02 192 #define OSReadSysInfo_ReadSuperIOFeatures 0x03 193 194 #define osreadsysinfo_IOEB_ASIC_PRESENT 0x01 195 #define osreadsysinfo_SUPERIO_PRESENT 0x02 196 #define osreadsysinfo_LCD_ASIC_PRESENT 0x04 197 198 #ifndef __ASSEMBLER__ 199 extern void os_readsysinfo(int what, int *r0, int *r1, int *r2, int *r3, int *r4); 200 #define os_readsysinfo_configured_screensize(s) \ 201 os_readsysinfo(OSReadSysInfo_ReadConfiguredScreenSize, (s), 0, 0, 0, 0) 202 203 #define os_readsysinfo_monitor_info(mode, type, sync) \ 204 os_readsysinfo(OSReadSysInfo_ReadMonitorInfo, (mode), (type), (sync), 0, 0) 205 206 #define os_readsysinfo_chip_presence(ioeb, superio, lcd) \ 207 os_readsysinfo(OSReadSysInfo_ReadChipPresenceAndId, (ioeb), (superio), (lcd), 0, 0) 208 209 #define os_readsysinfo_unique_id(low, high) \ 210 os_readsysinfo(OSReadSysInfo_ReadChipPresenceAndId, 0, 0, 0, (low), (high)) 211 212 #define os_readsysinfo_superio_features(basic, extra) \ 213 os_readsysinfo(OSReadSysInfo_ReadSuperIOFeatures, (basic), (extra), 0, 0, 0) 214 215 #endif 216 217 /* OS_Memory */ 218 219 #define OSMemory_PageOp 0x00 220 #define OSMemory_ReadArrangementTableSize 0x06 221 #define OSMemory_ReadArrangementTable 0x07 222 #define OSMemory_ReadSize 0x08 223 #define OSMemory_ReadController 0x09 224 225 #define osmemory_GIVEN_PAGE_NO 0x0100 226 #define osmemory_GIVEN_LOG_ADDR 0x0200 227 #define osmemory_GIVEN_PHYS_ADDR 0x0400 228 #define osmemory_RETURN_PAGE_NO 0x0800 229 #define osmemory_RETURN_LOG_ADDR 0x1000 230 #define osmemory_RETURN_PHYS_ADDR 0x2000 231 232 #define osmemory_TYPE 0xf00 233 #define osmemory_TYPE_SHIFT 8 234 #define osmemory_TYPE_ABSENT 0x0 235 #define osmemory_TYPE_DRAM 0x1 236 #define osmemory_TYPE_VRAM 0x2 237 #define osmemory_TYPE_ROM 0x3 238 #define osmemory_TYPE_IO 0x4 239 /* 5, 6, 7 are undefined */ 240 #define osmemory_TYPE_ALLOCATABLE_MASK 0x8 /* bit signaling allocatable */ 241 242 243 #ifndef __ASSEMBLER__ 244 struct page_info { 245 int pagenumber; 246 int logical; 247 int physical; 248 }; 249 250 extern void osmemory_read_arrangement_table_size(int *size, int *nbpp); 251 extern void osmemory_read_arrangement_table(unsigned char *block); 252 extern void osmemory_page_op(int fromto, struct page_info *block, int num_pages); 253 #endif 254 255 /* Misc */ 256 #ifndef __ASSEMBLER__ 257 extern char *os_get_env(caddr_t *, void **); 258 259 extern void os_exit(os_error const *, int) __attribute__((noreturn)); 260 261 extern void os_int_off(void); 262 263 extern void os_enter_os(void); 264 #endif 265 266 #define OSModule_Alloc 6 267 #define OSModule_Free 7 268 #define OSModule_Lookup 18 269 270 #ifndef __ASSEMBLER__ 271 extern os_error *xosmodule_alloc(int, void **); 272 extern os_error *xosmodule_free(void *); 273 extern os_error *xosmodule_lookup(char const *, int *, int *, void **, void **, 274 char **); 275 #endif 276 277 #define OSFSControl_AddFS 12 278 #define OSFSControl_RemoveFS 16 279 #define OSFSControl_Shutdown 23 280 281 #define fileswitch_SUPPORTS_SPECIAL (1 << 31) 282 #define fileswitch_INTERACTIVE (1 << 30) 283 #define fileswitch_SUPPORTS_EMPTY_NAMES (1 << 29) 284 #define fileswitch_NEEDS_CREATE (1 << 28) 285 #define fileswitch_NEEDS_FLUSH (1 << 27) 286 #define fileswitch_SUPPORTS_STAMP_NAMED (1 << 26) 287 #define fileswitch_SUPPORTS_FILE_INFO (1 << 25) 288 #define fileswitch_SUPPORTS_SET_CONTEXTS (1 << 24) /* MBZ in RO3 */ 289 #define fileswitch_SUPPORTS_IMAGE (1 << 23) 290 #define fileswitch_NEEDS_URD_AND_LIB (1 << 22) 291 #define fileswitch_IMPLICIT_DIRECTORIES (1 << 21) 292 #define fileswitch_NO_LOAD_ENTRY (1 << 20) 293 #define fileswitch_NO_SAVE_ENTRY (1 << 19) 294 #define fileswitch_NO_FILE_ENTRIES (1 << 18) 295 #define fileswitch_HAS_EXTRA_FLAGS (1 << 17) 296 #define fileswitch_READ_ONLY (1 << 16) 297 298 #define fileswitch_SUPPORTS_DIR_CHANGE (1 << 0) 299 #define fileswitch_NEEDS_CAT (1 << 1) 300 #define fileswitch_NEEDS_EX (1 << 2) 301 302 #define fileswitch_NOT_FOUND 0 303 #define fileswitch_IS_FILE 1 304 #define fileswitch_IS_DIR 2 305 #define fileswitch_IS_IMAGE 3 306 307 #define fileswitch_ATTR_OWNER_READ (1 << 0) 308 #define fileswitch_ATTR_OWNER_WRITE (1 << 1) 309 #define fileswitch_ATTR_OWNER_LOCKED (1 << 3) 310 #define fileswitch_ATTR_WORLD_READ (1 << 4) 311 #define fileswitch_ATTR_WORLD_WRITE (1 << 5) 312 #define fileswitch_ATTR_WORLD_LOCKED (1 << 7) 313 314 #ifndef __ASSEMBLER__ 315 extern os_error *xosfscontrol_shutdown(void); 316 #endif 317 318 #define Service_PreReset 0x45 319 320 #ifndef __ASSEMBLER__ 321 extern void service_pre_reset(void); 322 #endif 323 324 #define os_MODEVAR_LOG2_BPP 9 325 #define os_MODEVAR_XWIND_LIMIT 11 326 #define os_MODEVAR_YWIND_LIMIT 12 327 #define os_VDUVAR_DISPLAY_START 149 328 #define os_VDUVAR_TOTAL_SCREEN_SIZE 150 329 #define os_VDUVAR_TCHAR_SPACEY 170 330 331 #ifndef __ASSEMBLER__ 332 extern void os_read_vdu_variables(const int *, int *); 333 334 extern os_error *xos_swi_number_from_string(char const *, int *); 335 336 extern void os_read_mem_map_info(int *, int *); 337 338 struct os_mem_map_request { 339 int page_no; 340 caddr_t map; 341 int access; 342 #define os_AREA_ACCESS_READ_WRITE 0 343 #define os_AREA_ACCESS_READ_ONLY 1 344 #define os_AREA_ACCESS_NONE 3 345 }; 346 347 extern void os_read_mem_map_entries(struct os_mem_map_request *); 348 349 extern os_error xcache_control(u_int, u_int, u_int *); 350 351 #endif 352 353 #define FileCoreDiscOp_ReadSectors 1 354 355 #ifndef __ASSEMBLER__ 356 357 struct filecore_disc { 358 u_int8_t log2secsize; 359 u_int8_t secspertrack; 360 u_int8_t heads; 361 u_int8_t density; 362 u_int8_t idlen; 363 u_int8_t log2bpmp; 364 u_int8_t skew; 365 u_int8_t bootoption; 366 u_int8_t lowsector; 367 u_int8_t nzones; 368 u_int16_t zone_spare; 369 u_int32_t root; 370 u_int32_t disc_size; 371 u_int16_t disc_id; 372 char disc_name[10]; 373 u_int32_t disc_type; 374 u_int32_t disc_size_hi; 375 u_int8_t share_size; 376 u_int8_t big_flag; 377 u_int8_t reserved[22]; 378 }; 379 380 struct filecore_daddr64 { 381 uint32_t drive; 382 uint64_t daddr; 383 }; 384 385 extern os_error *xfilecorediscop_read_sectors(uint32_t, uint32_t, void *, 386 size_t, void *, uint32_t *, void **, size_t *); 387 extern os_error *xfilecoresectorop_read_sectors(uint32_t, uint32_t, void *, 388 size_t, void *, uint32_t *, void **, size_t *); 389 extern os_error *xfilecorediscop64_read_sectors(uint32_t, 390 struct filecore_daddr64 *, void *, size_t, struct filecore_disc const *, 391 void *, uint32_t *, void **, size_t *); 392 extern os_error *xfilecore_drives(void *, int *, int *, int *); 393 394 #endif 395 396 /* RISC OS Error numbers */ 397 398 #define error_IS_ADIR 0xa8 399 #define error_TOO_MANY_OPEN_FILES 0xc0 400 #define error_FILE_NOT_FOUND 0xd6 401 402 #ifndef __ASSEMBLER__ 403 extern int riscos_errno(os_error *); 404 #endif 405