1633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* 2633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * This file is subject to the terms and conditions of the GNU General Public 3633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * License. See the file "COPYING" in the main directory of this archive 4633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * for more details. 5633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * 6633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * ARC firmware interface defines. 7633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * 8633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * Copyright (C) 1996 David S. Miller (dm@engr.sgi.com) 9633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * Copyright (C) 1999, 2001 Ralf Baechle (ralf@gnu.org) 10633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * Copyright (C) 1999 Silicon Graphics, Inc. 11633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham */ 12633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#ifndef _ASM_SGIARCS_H 13633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define _ASM_SGIARCS_H 14633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 15633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#include <asm/types.h> 16633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#include <asm/fw/arc/types.h> 17633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 18633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* Various ARCS error codes. */ 19633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_ESUCCESS 0x00 20633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_E2BIG 0x01 21633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_EACCESS 0x02 22633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_EAGAIN 0x03 23633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_EBADF 0x04 24633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_EBUSY 0x05 25633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_EFAULT 0x06 26633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_EINVAL 0x07 27633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_EIO 0x08 28633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_EISDIR 0x09 29633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_EMFILE 0x0a 30633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_EMLINK 0x0b 31633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_ENAMETOOLONG 0x0c 32633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_ENODEV 0x0d 33633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_ENOENT 0x0e 34633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_ENOEXEC 0x0f 35633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_ENOMEM 0x10 36633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_ENOSPC 0x11 37633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_ENOTDIR 0x12 38633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_ENOTTY 0x13 39633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_ENXIO 0x14 40633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_EROFS 0x15 41633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* SGI ARCS specific errno's. */ 42633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_EADDRNOTAVAIL 0x1f 43633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_ETIMEDOUT 0x20 44633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_ECONNABORTED 0x21 45633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROM_ENOCONNECT 0x22 46633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 47633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* Device classes, types, and identifiers for prom 48633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * device inventory queries. 49633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham */ 50633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamenum linux_devclass { 51633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham system, processor, cache, adapter, controller, peripheral, memory 52633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 53633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 54633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamenum linux_devtypes { 55633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham /* Generic stuff. */ 56633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham Arc, Cpu, Fpu, 57633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 58633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham /* Primary insn and data caches. */ 59633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham picache, pdcache, 60633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 61633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham /* Secondary insn, data, and combined caches. */ 62633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham sicache, sdcache, sccache, 63633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 64633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham memdev, eisa_adapter, tc_adapter, scsi_adapter, dti_adapter, 65633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham multifunc_adapter, dsk_controller, tp_controller, cdrom_controller, 66633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham worm_controller, serial_controller, net_controller, disp_controller, 67633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham parallel_controller, ptr_controller, kbd_controller, audio_controller, 68633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham misc_controller, disk_peripheral, flpy_peripheral, tp_peripheral, 69633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham modem_peripheral, monitor_peripheral, printer_peripheral, 70633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham ptr_peripheral, kbd_peripheral, term_peripheral, line_peripheral, 71633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham net_peripheral, misc_peripheral, anon 72633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 73633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 74633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamenum linux_identifier { 75633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham bogus, ronly, removable, consin, consout, input, output 76633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 77633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 78633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* A prom device tree component. */ 79633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstruct linux_component { 80633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham enum linux_devclass class; /* node class */ 81633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham enum linux_devtypes type; /* node type */ 82633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham enum linux_identifier iflags; /* node flags */ 83633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham USHORT vers; /* node version */ 84633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham USHORT rev; /* node revision */ 85633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham ULONG key; /* completely magic */ 86633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham ULONG amask; /* XXX affinity mask??? */ 87633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham ULONG cdsize; /* size of configuration data */ 88633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham ULONG ilen; /* length of string identifier */ 89633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham _PULONG iname; /* string identifier */ 90633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 91633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamtypedef struct linux_component pcomponent; 92633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 93633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstruct linux_sysid { 94633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham char vend[8], prod[8]; 95633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 96633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 97633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* ARCS prom memory descriptors. */ 98633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamenum arcs_memtypes { 99633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham arcs_eblock, /* exception block */ 100633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham arcs_rvpage, /* ARCS romvec page */ 101633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham arcs_fcontig, /* Contiguous and free */ 102633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham arcs_free, /* Generic free memory */ 103633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham arcs_bmem, /* Borken memory, don't use */ 104633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham arcs_prog, /* A loaded program resides here */ 105633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham arcs_atmp, /* ARCS temporary storage area, wish Sparc OpenBoot told this */ 106633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham arcs_aperm, /* ARCS permanent storage... */ 107633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 108633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 109633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* ARC has slightly different types than ARCS */ 110633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamenum arc_memtypes { 111633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham arc_eblock, /* exception block */ 112633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham arc_rvpage, /* romvec page */ 113633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham arc_free, /* Generic free memory */ 114633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham arc_bmem, /* Borken memory, don't use */ 115633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham arc_prog, /* A loaded program resides here */ 116633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham arc_atmp, /* temporary storage area */ 117633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham arc_aperm, /* permanent storage */ 118633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham arc_fcontig, /* Contiguous and free */ 119633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 120633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 121633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamunion linux_memtypes { 122633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham enum arcs_memtypes arcs; 123633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham enum arc_memtypes arc; 124633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 125633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 126633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstruct linux_mdesc { 127633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham union linux_memtypes type; 128633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham ULONG base; 129633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham ULONG pages; 130633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 131633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 132633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* Time of day descriptor. */ 133633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstruct linux_tinfo { 134633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned short yr; 135633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned short mnth; 136633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned short day; 137633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned short hr; 138633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned short min; 139633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned short sec; 140633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned short msec; 141633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 142633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 143633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* ARCS virtual dirents. */ 144633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstruct linux_vdirent { 145633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham ULONG namelen; 146633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned char attr; 147633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham char fname[32]; /* XXX imperical, should be a define */ 148633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 149633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 150633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* Other stuff for files. */ 151633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamenum linux_omode { 152633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham rdonly, wronly, rdwr, wronly_creat, rdwr_creat, 153633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham wronly_ssede, rdwr_ssede, dirent, dirent_creat 154633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 155633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 156633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamenum linux_seekmode { 157633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham absolute, relative 158633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 159633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 160633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamenum linux_mountops { 161633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham media_load, media_unload 162633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 163633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 164633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* This prom has a bolixed design. */ 165633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstruct linux_bigint { 166633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#ifdef __MIPSEL__ 167633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham u32 lo; 168633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham s32 hi; 169633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#else /* !(__MIPSEL__) */ 170633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham s32 hi; 171633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham u32 lo; 172633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#endif 173633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 174633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 175633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstruct linux_finfo { 176633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham struct linux_bigint begin; 177633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham struct linux_bigint end; 178633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham struct linux_bigint cur; 179633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham enum linux_devtypes dtype; 180633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned long namelen; 181633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned char attr; 182633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham char name[32]; /* XXX imperical, should be define */ 183633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 184633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 185633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* This describes the vector containing function pointers to the ARC 186633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham firmware functions. */ 187633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstruct linux_romvec { 188633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG load; /* Load an executable image. */ 189633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG invoke; /* Invoke a standalong image. */ 190633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG exec; /* Load and begin execution of a 191633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham standalone image. */ 192633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG halt; /* Halt the machine. */ 193633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG pdown; /* Power down the machine. */ 194633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG restart; /* XXX soft reset??? */ 195633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG reboot; /* Reboot the machine. */ 196633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG imode; /* Enter PROM interactive mode. */ 197633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG _unused1; /* Was ReturnFromMain(). */ 198633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 199633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham /* PROM device tree interface. */ 200633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG next_component; 201633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG child_component; 202633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG parent_component; 203633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG component_data; 204633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG child_add; 205633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG comp_del; 206633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG component_by_path; 207633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 208633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham /* Misc. stuff. */ 209633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG cfg_save; 210633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG get_sysid; 211633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 212633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham /* Probing for memory. */ 213633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG get_mdesc; 214633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG _unused2; /* was Signal() */ 215633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 216633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG get_tinfo; 217633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG get_rtime; 218633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 219633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham /* File type operations. */ 220633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG get_vdirent; 221633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG open; 222633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG close; 223633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG read; 224633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG get_rstatus; 225633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG write; 226633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG seek; 227633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG mount; 228633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 229633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham /* Dealing with firmware environment variables. */ 230633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG get_evar; 231633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG set_evar; 232633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 233633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG get_finfo; 234633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG set_finfo; 235633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 236633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham /* Miscellaneous. */ 237633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG cache_flush; 238633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG TestUnicodeCharacter; /* ARC; not sure if ARCS too */ 239633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham LONG GetDisplayStatus; 240633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 241633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 242633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* The SGI ARCS parameter block is in a fixed location for standalone 243633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * programs to access PROM facilities easily. 244633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham */ 245633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamtypedef struct _SYSTEM_PARAMETER_BLOCK { 246633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham ULONG magic; /* magic cookie */ 247633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROMBLOCK_MAGIC 0x53435241 248633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 249633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham ULONG len; /* length of parm block */ 250633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham USHORT ver; /* ARCS firmware version */ 251633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham USHORT rev; /* ARCS firmware revision */ 252633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham _PLONG rs_block; /* Restart block. */ 253633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham _PLONG dbg_block; /* Debug block. */ 254633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham _PLONG gevect; /* XXX General vector??? */ 255633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham _PLONG utlbvect; /* XXX UTLB vector??? */ 256633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham ULONG rveclen; /* Size of romvec struct. */ 257633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham _PVOID romvec; /* Function interface. */ 258633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham ULONG pveclen; /* Length of private vector. */ 259633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham _PVOID pvector; /* Private vector. */ 260633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham ULONG adap_cnt; /* Adapter count. */ 261633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham ULONG adap_typ0; /* First adapter type. */ 262633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham ULONG adap_vcnt0; /* Adapter 0 vector count. */ 263633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham _PVOID adap_vector; /* Adapter 0 vector ptr. */ 264633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham ULONG adap_typ1; /* Second adapter type. */ 265633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham ULONG adap_vcnt1; /* Adapter 1 vector count. */ 266633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham _PVOID adap_vector1; /* Adapter 1 vector ptr. */ 267633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham /* More adapter vectors go here... */ 268633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham} SYSTEM_PARAMETER_BLOCK, *PSYSTEM_PARAMETER_BLOCK; 269633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 270633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define PROMBLOCK ((PSYSTEM_PARAMETER_BLOCK) (int)0xA0001000) 271633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define ROMVECTOR ((struct linux_romvec *) (long)(PROMBLOCK)->romvec) 272633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 273633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* Cache layout parameter block. */ 274633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamunion linux_cache_key { 275633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham struct param { 276633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#ifdef __MIPSEL__ 277633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned short size; 278633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned char lsize; 279633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned char bsize; 280633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#else /* !(__MIPSEL__) */ 281633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned char bsize; 282633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned char lsize; 283633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned short size; 284633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#endif 285633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham } info; 286633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned long allinfo; 287633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 288633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 289633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* Configuration data. */ 290633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstruct linux_cdata { 291633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham char *name; 292633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham int mlen; 293633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham enum linux_devtypes type; 294633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 295633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 296633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* Common SGI ARCS firmware file descriptors. */ 297633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define SGIPROM_STDIN 0 298633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define SGIPROM_STDOUT 1 299633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 300633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* Common SGI ARCS firmware file types. */ 301633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define SGIPROM_ROFILE 0x01 /* read-only file */ 302633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define SGIPROM_HFILE 0x02 /* hidden file */ 303633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define SGIPROM_SFILE 0x04 /* System file */ 304633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define SGIPROM_AFILE 0x08 /* Archive file */ 305633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define SGIPROM_DFILE 0x10 /* Directory file */ 306633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define SGIPROM_DELFILE 0x20 /* Deleted file */ 307633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 308633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* SGI ARCS boot record information. */ 309633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstruct sgi_partition { 310633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned char flag; 311633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define SGIPART_UNUSED 0x00 312633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define SGIPART_ACTIVE 0x80 313633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 314633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned char shead, ssect, scyl; /* unused */ 315633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned char systype; /* OS type, Irix or NT */ 316633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned char ehead, esect, ecyl; /* unused */ 317633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned char rsect0, rsect1, rsect2, rsect3; 318633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned char tsect0, tsect1, tsect2, tsect3; 319633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 320633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 321633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define SGIBBLOCK_MAGIC 0xaa55 322633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define SGIBBLOCK_MAXPART 0x0004 323633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 324633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstruct sgi_bootblock { 325633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned char _unused[446]; 326633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham struct sgi_partition partitions[SGIBBLOCK_MAXPART]; 327633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned short magic; 328633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 329633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 330633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* BIOS parameter block. */ 331633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstruct sgi_bparm_block { 332633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned short bytes_sect; /* bytes per sector */ 333633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned char sect_clust; /* sectors per cluster */ 334633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned short sect_resv; /* reserved sectors */ 335633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned char nfats; /* # of allocation tables */ 336633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned short nroot_dirents; /* # of root directory entries */ 337633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned short sect_volume; /* sectors in volume */ 338633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned char media_type; /* media descriptor */ 339633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned short sect_fat; /* sectors per allocation table */ 340633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned short sect_track; /* sectors per track */ 341633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned short nheads; /* # of heads */ 342633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned short nhsects; /* # of hidden sectors */ 343633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 344633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 345633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstruct sgi_bsector { 346633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned char jmpinfo[3]; 347633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned char manuf_name[8]; 348633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham struct sgi_bparm_block info; 349633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 350633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 351633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* Debugging block used with SGI symmon symbolic debugger. */ 352633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define SMB_DEBUG_MAGIC 0xfeeddead 353633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandhamstruct linux_smonblock { 354633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned long magic; 355633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham void (*handler)(void); /* Breakpoint routine. */ 356633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned long dtable_base; /* Base addr of dbg table. */ 357633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham int (*printf)(const char *fmt, ...); 358633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned long btable_base; /* Breakpoint table. */ 359633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned long mpflushreqs; /* SMP cache flush request list. */ 360633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned long ntab; /* Name table. */ 361633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham unsigned long stab; /* Symbol table. */ 362633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham int smax; /* Max # of symbols. */ 363633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}; 364633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 365633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham/* 366633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham * Macros for calling a 32-bit ARC implementation from 64-bit code 367633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham */ 368633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 369633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#if defined(CONFIG_64BIT) && defined(CONFIG_ARC32) 370633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 371633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define __arc_clobbers \ 372633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "$2", "$3" /* ... */, "$8", "$9", "$10", "$11", \ 373633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "$12", "$13", "$14", "$15", "$16", "$24", "$25", "$31" 374633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 375633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define ARC_CALL0(dest) \ 376633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham({ long __res; \ 377633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __vec = (long) romvec->dest; \ 378633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __asm__ __volatile__( \ 379633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "dsubu\t$29, 32\n\t" \ 380633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "jalr\t%1\n\t" \ 381633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "daddu\t$29, 32\n\t" \ 382633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "move\t%0, $2" \ 383633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham : "=r" (__res), "=r" (__vec) \ 384633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham : "1" (__vec) \ 385633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham : __arc_clobbers, "$4", "$5", "$6", "$7"); \ 386633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham (unsigned long) __res; \ 387633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}) 388633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 389633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define ARC_CALL1(dest, a1) \ 390633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham({ long __res; \ 391633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham register signed int __a1 __asm__("$4") = (int) (long) (a1); \ 392633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __vec = (long) romvec->dest; \ 393633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __asm__ __volatile__( \ 394633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "dsubu\t$29, 32\n\t" \ 395633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "jalr\t%1\n\t" \ 396633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "daddu\t$29, 32\n\t" \ 397633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "move\t%0, $2" \ 398633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham : "=r" (__res), "=r" (__vec) \ 399633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham : "1" (__vec), "r" (__a1) \ 400633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham : __arc_clobbers, "$5", "$6", "$7"); \ 401633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham (unsigned long) __res; \ 402633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}) 403633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 404633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define ARC_CALL2(dest, a1, a2) \ 405633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham({ long __res; \ 406633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham register signed int __a1 __asm__("$4") = (int) (long) (a1); \ 407633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham register signed int __a2 __asm__("$5") = (int) (long) (a2); \ 408633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __vec = (long) romvec->dest; \ 409633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __asm__ __volatile__( \ 410633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "dsubu\t$29, 32\n\t" \ 411633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "jalr\t%1\n\t" \ 412633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "daddu\t$29, 32\n\t" \ 413633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "move\t%0, $2" \ 414633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham : "=r" (__res), "=r" (__vec) \ 415633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham : "1" (__vec), "r" (__a1), "r" (__a2) \ 416633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham : __arc_clobbers, "$6", "$7"); \ 417633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __res; \ 418633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}) 419633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 420633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define ARC_CALL3(dest, a1, a2, a3) \ 421633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham({ long __res; \ 422633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham register signed int __a1 __asm__("$4") = (int) (long) (a1); \ 423633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham register signed int __a2 __asm__("$5") = (int) (long) (a2); \ 424633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham register signed int __a3 __asm__("$6") = (int) (long) (a3); \ 425633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __vec = (long) romvec->dest; \ 426633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __asm__ __volatile__( \ 427633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "dsubu\t$29, 32\n\t" \ 428633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "jalr\t%1\n\t" \ 429633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "daddu\t$29, 32\n\t" \ 430633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "move\t%0, $2" \ 431633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham : "=r" (__res), "=r" (__vec) \ 432633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham : "1" (__vec), "r" (__a1), "r" (__a2), "r" (__a3) \ 433633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham : __arc_clobbers, "$7"); \ 434633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __res; \ 435633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}) 436633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 437633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define ARC_CALL4(dest, a1, a2, a3, a4) \ 438633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham({ long __res; \ 439633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham register signed int __a1 __asm__("$4") = (int) (long) (a1); \ 440633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham register signed int __a2 __asm__("$5") = (int) (long) (a2); \ 441633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham register signed int __a3 __asm__("$6") = (int) (long) (a3); \ 442633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham register signed int __a4 __asm__("$7") = (int) (long) (a4); \ 443633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __vec = (long) romvec->dest; \ 444633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __asm__ __volatile__( \ 445633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "dsubu\t$29, 32\n\t" \ 446633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "jalr\t%1\n\t" \ 447633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "daddu\t$29, 32\n\t" \ 448633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "move\t%0, $2" \ 449633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham : "=r" (__res), "=r" (__vec) \ 450633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham : "1" (__vec), "r" (__a1), "r" (__a2), "r" (__a3), \ 451633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "r" (__a4) \ 452633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham : __arc_clobbers); \ 453633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __res; \ 454633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}) 455633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 456633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define ARC_CALL5(dest, a1, a2, a3, a4, a5) \ 457633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham({ long __res; \ 458633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham register signed int __a1 __asm__("$4") = (int) (long) (a1); \ 459633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham register signed int __a2 __asm__("$5") = (int) (long) (a2); \ 460633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham register signed int __a3 __asm__("$6") = (int) (long) (a3); \ 461633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham register signed int __a4 __asm__("$7") = (int) (long) (a4); \ 462633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham register signed int __a5 = (int) (long) (a5); \ 463633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __vec = (long) romvec->dest; \ 464633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __asm__ __volatile__( \ 465633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "dsubu\t$29, 32\n\t" \ 466633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "sw\t%7, 16($29)\n\t" \ 467633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "jalr\t%1\n\t" \ 468633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "daddu\t$29, 32\n\t" \ 469633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "move\t%0, $2" \ 470633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham : "=r" (__res), "=r" (__vec) \ 471633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham : "1" (__vec), \ 472633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "r" (__a1), "r" (__a2), "r" (__a3), "r" (__a4), \ 473633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham "r" (__a5) \ 474633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham : __arc_clobbers); \ 475633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __res; \ 476633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}) 477633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 478633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#endif /* defined(CONFIG_64BIT) && defined(CONFIG_ARC32) */ 479633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 480633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#if (defined(CONFIG_32BIT) && defined(CONFIG_ARC32)) || \ 481633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham (defined(CONFIG_64BIT) && defined(CONFIG_ARC64)) 482633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 483633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define ARC_CALL0(dest) \ 484633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham({ long __res; \ 485633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long (*__vec)(void) = (void *) romvec->dest; \ 486633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham \ 487633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __res = __vec(); \ 488633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __res; \ 489633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}) 490633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 491633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define ARC_CALL1(dest, a1) \ 492633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham({ long __res; \ 493633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __a1 = (long) (a1); \ 494633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long (*__vec)(long) = (void *) romvec->dest; \ 495633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham \ 496633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __res = __vec(__a1); \ 497633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __res; \ 498633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}) 499633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 500633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define ARC_CALL2(dest, a1, a2) \ 501633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham({ long __res; \ 502633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __a1 = (long) (a1); \ 503633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __a2 = (long) (a2); \ 504633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long (*__vec)(long, long) = (void *) romvec->dest; \ 505633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham \ 506633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __res = __vec(__a1, __a2); \ 507633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __res; \ 508633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}) 509633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 510633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define ARC_CALL3(dest, a1, a2, a3) \ 511633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham({ long __res; \ 512633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __a1 = (long) (a1); \ 513633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __a2 = (long) (a2); \ 514633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __a3 = (long) (a3); \ 515633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long (*__vec)(long, long, long) = (void *) romvec->dest; \ 516633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham \ 517633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __res = __vec(__a1, __a2, __a3); \ 518633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __res; \ 519633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}) 520633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 521633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define ARC_CALL4(dest, a1, a2, a3, a4) \ 522633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham({ long __res; \ 523633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __a1 = (long) (a1); \ 524633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __a2 = (long) (a2); \ 525633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __a3 = (long) (a3); \ 526633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __a4 = (long) (a4); \ 527633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long (*__vec)(long, long, long, long) = (void *) romvec->dest; \ 528633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham \ 529633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __res = __vec(__a1, __a2, __a3, __a4); \ 530633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __res; \ 531633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}) 532633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 533633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#define ARC_CALL5(dest, a1, a2, a3, a4, a5) \ 534633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham({ long __res; \ 535633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __a1 = (long) (a1); \ 536633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __a2 = (long) (a2); \ 537633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __a3 = (long) (a3); \ 538633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __a4 = (long) (a4); \ 539633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long __a5 = (long) (a5); \ 540633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham long (*__vec)(long, long, long, long, long); \ 541633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __vec = (void *) romvec->dest; \ 542633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham \ 543633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __res = __vec(__a1, __a2, __a3, __a4, __a5); \ 544633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham __res; \ 545633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham}) 546633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#endif /* both kernel and ARC either 32-bit or 64-bit */ 547633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham 548633c3473533ad9f2cca069b22cc5d95cd4e3510bRaghu Gandham#endif /* _ASM_SGIARCS_H */ 549