/* * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. * * ARC firmware interface defines. * * Copyright (C) 1996 David S. Miller (davem@davemloft.net) * Copyright (C) 1999, 2001 Ralf Baechle (ralf@gnu.org) * Copyright (C) 1999 Silicon Graphics, Inc. */ #ifndef _ASM_SGIARCS_H #define _ASM_SGIARCS_H #include #include /* Various ARCS error codes. */ #define PROM_ESUCCESS 0x00 #define PROM_E2BIG 0x01 #define PROM_EACCESS 0x02 #define PROM_EAGAIN 0x03 #define PROM_EBADF 0x04 #define PROM_EBUSY 0x05 #define PROM_EFAULT 0x06 #define PROM_EINVAL 0x07 #define PROM_EIO 0x08 #define PROM_EISDIR 0x09 #define PROM_EMFILE 0x0a #define PROM_EMLINK 0x0b #define PROM_ENAMETOOLONG 0x0c #define PROM_ENODEV 0x0d #define PROM_ENOENT 0x0e #define PROM_ENOEXEC 0x0f #define PROM_ENOMEM 0x10 #define PROM_ENOSPC 0x11 #define PROM_ENOTDIR 0x12 #define PROM_ENOTTY 0x13 #define PROM_ENXIO 0x14 #define PROM_EROFS 0x15 /* SGI ARCS specific errno's. */ #define PROM_EADDRNOTAVAIL 0x1f #define PROM_ETIMEDOUT 0x20 #define PROM_ECONNABORTED 0x21 #define PROM_ENOCONNECT 0x22 /* Device classes, types, and identifiers for prom * device inventory queries. */ enum linux_devclass { system, processor, cache, adapter, controller, peripheral, memory }; enum linux_devtypes { /* Generic stuff. */ Arc, Cpu, Fpu, /* Primary insn and data caches. */ picache, pdcache, /* Secondary insn, data, and combined caches. */ sicache, sdcache, sccache, memdev, eisa_adapter, tc_adapter, scsi_adapter, dti_adapter, multifunc_adapter, dsk_controller, tp_controller, cdrom_controller, worm_controller, serial_controller, net_controller, disp_controller, parallel_controller, ptr_controller, kbd_controller, audio_controller, misc_controller, disk_peripheral, flpy_peripheral, tp_peripheral, modem_peripheral, monitor_peripheral, printer_peripheral, ptr_peripheral, kbd_peripheral, term_peripheral, line_peripheral, net_peripheral, misc_peripheral, anon }; enum linux_identifier { bogus, ronly, removable, consin, consout, input, output }; /* A prom device tree component. */ struct linux_component { enum linux_devclass class; /* node class */ enum linux_devtypes type; /* node type */ enum linux_identifier iflags; /* node flags */ USHORT vers; /* node version */ USHORT rev; /* node revision */ ULONG key; /* completely magic */ ULONG amask; /* XXX affinity mask??? */ ULONG cdsize; /* size of configuration data */ ULONG ilen; /* length of string identifier */ _PULONG iname; /* string identifier */ }; typedef struct linux_component pcomponent; struct linux_sysid { char vend[8], prod[8]; }; /* ARCS prom memory descriptors. */ enum arcs_memtypes { arcs_eblock, /* exception block */ arcs_rvpage, /* ARCS romvec page */ arcs_fcontig, /* Contiguous and free */ arcs_free, /* Generic free memory */ arcs_bmem, /* Borken memory, don't use */ arcs_prog, /* A loaded program resides here */ arcs_atmp, /* ARCS temporary storage area, wish Sparc OpenBoot told this */ arcs_aperm, /* ARCS permanent storage... */ }; /* ARC has slightly different types than ARCS */ enum arc_memtypes { arc_eblock, /* exception block */ arc_rvpage, /* romvec page */ arc_free, /* Generic free memory */ arc_bmem, /* Borken memory, don't use */ arc_prog, /* A loaded program resides here */ arc_atmp, /* temporary storage area */ arc_aperm, /* permanent storage */ arc_fcontig, /* Contiguous and free */ }; union linux_memtypes { enum arcs_memtypes arcs; enum arc_memtypes arc; }; struct linux_mdesc { union linux_memtypes type; ULONG base; ULONG pages; }; /* Time of day descriptor. */ struct linux_tinfo { unsigned short yr; unsigned short mnth; unsigned short day; unsigned short hr; unsigned short min; unsigned short sec; unsigned short msec; }; /* ARCS virtual dirents. */ struct linux_vdirent { ULONG namelen; unsigned char attr; char fname[32]; /* XXX imperical, should be a define */ }; /* Other stuff for files. */ enum linux_omode { rdonly, wronly, rdwr, wronly_creat, rdwr_creat, wronly_ssede, rdwr_ssede, dirent, dirent_creat }; enum linux_seekmode { absolute, relative }; enum linux_mountops { media_load, media_unload }; /* This prom has a bolixed design. */ struct linux_bigint { #ifdef __MIPSEL__ u32 lo; s32 hi; #else /* !(__MIPSEL__) */ s32 hi; u32 lo; #endif }; struct linux_finfo { struct linux_bigint begin; struct linux_bigint end; struct linux_bigint cur; enum linux_devtypes dtype; unsigned long namelen; unsigned char attr; char name[32]; /* XXX imperical, should be define */ }; /* This describes the vector containing function pointers to the ARC firmware functions. */ struct linux_romvec { LONG load; /* Load an executable image. */ LONG invoke; /* Invoke a standalong image. */ LONG exec; /* Load and begin execution of a standalone image. */ LONG halt; /* Halt the machine. */ LONG pdown; /* Power down the machine. */ LONG restart; /* XXX soft reset??? */ LONG reboot; /* Reboot the machine. */ LONG imode; /* Enter PROM interactive mode. */ LONG _unused1; /* Was ReturnFromMain(). */ /* PROM device tree interface. */ LONG next_component; LONG child_component; LONG parent_component; LONG component_data; LONG child_add; LONG comp_del; LONG component_by_path; /* Misc. stuff. */ LONG cfg_save; LONG get_sysid; /* Probing for memory. */ LONG get_mdesc; LONG _unused2; /* was Signal() */ LONG get_tinfo; LONG get_rtime; /* File type operations. */ LONG get_vdirent; LONG open; LONG close; LONG read; LONG get_rstatus; LONG write; LONG seek; LONG mount; /* Dealing with firmware environment variables. */ LONG get_evar; LONG set_evar; LONG get_finfo; LONG set_finfo; /* Miscellaneous. */ LONG cache_flush; LONG TestUnicodeCharacter; /* ARC; not sure if ARCS too */ LONG GetDisplayStatus; }; /* The SGI ARCS parameter block is in a fixed location for standalone * programs to access PROM facilities easily.