riscoscalls.h revision 1.4
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__ 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