📄 sgiarcs.h
字号:
/* * 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 (dm@engr.sgi.com) * Copyright (C) 1999 Ralf Baechle (ralf@gnu.org) * Copyright (C) 1999 Silicon Graphics, Inc. */#ifndef _ASM_SGIARCS_H#define _ASM_SGIARCS_H#include <linux/config.h>#include <asm/arc/types.h>/* 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__ unsigned long lo; long hi;#else /* !(__MIPSEL__) */ long hi; unsigned long 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;};/* The SGI ARCS parameter block is in a fixed location for standalone * programs to access PROM facilities easily. */typedef struct _SYSTEM_PARAMETER_BLOCK { ULONG magic; /* magic cookie */#define PROMBLOCK_MAGIC 0x53435241 ULONG len; /* length of parm block */ USHORT ver; /* ARCS firmware version */ USHORT rev; /* ARCS firmware revision */ _PLONG rs_block; /* Restart block. */ _PLONG dbg_block; /* Debug block. */ _PLONG gevect; /* XXX General vector??? */ _PLONG utlbvect; /* XXX UTLB vector??? */ ULONG rveclen; /* Size of romvec struct. */ _PVOID romvec; /* Function interface. */ ULONG pveclen; /* Length of private vector. */ _PVOID pvector; /* Private vector. */ ULONG adap_cnt; /* Adapter count. */ ULONG adap_typ0; /* First adapter type. */ ULONG adap_vcnt0; /* Adapter 0 vector count. */ _PVOID adap_vector; /* Adapter 0 vector ptr. */ ULONG adap_typ1; /* Second adapter type. */ ULONG adap_vcnt1; /* Adapter 1 vector count. */ _PVOID adap_vector1; /* Adapter 1 vector ptr. */ /* More adapter vectors go here... */} SYSTEM_PARAMETER_BLOCK, *PSYSTEM_PARAMETER_BLOCK;#define PROMBLOCK ((PSYSTEM_PARAMETER_BLOCK) (int)0xA0001000)#define ROMVECTOR ((struct linux_romvec *) (long)(PROMBLOCK)->romvec)/* Cache layout parameter block. */union linux_cache_key {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -