[BACK]Return to arcbios.h CVS log [TXT][DIR] Up to [local] / sys / arch / mips64 / include

Annotation of sys/arch/mips64/include/arcbios.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: arcbios.h,v 1.7 2007/04/26 17:02:38 miod Exp $        */
                      2: /*-
                      3:  * Copyright (c) 1996 M. Warner Losh.  All rights reserved.
                      4:  *
                      5:  * Redistribution and use in source and binary forms, with or without
                      6:  * modification, are permitted provided that the following conditions
                      7:  * are met:
                      8:  * 1. Redistributions of source code must retain the above copyright
                      9:  *    notice, this list of conditions and the following disclaimer.
                     10:  * 2. Redistributions in binary form must reproduce the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer in the
                     12:  *    documentation and/or other materials provided with the distribution.
                     13:  * 3. Neither the name of the University nor the names of its contributors
                     14:  *    may be used to endorse or promote products derived from this software
                     15:  *    without specific prior written permission.
                     16:  *
                     17:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     18:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     19:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     20:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     21:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     22:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     23:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     24:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     25:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     26:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     27:  * SUCH DAMAGE.
                     28:  */
                     29:
                     30: #include <sys/types.h>
                     31:
                     32: typedef struct arc_sid
                     33: {
                     34:        char vendor[8];
                     35:        char prodid[8];
                     36: } arc_sid_t;
                     37:
                     38: typedef enum arc_config_class
                     39: {
                     40:        arc_SystemClass,
                     41:        arc_ProcessorClass,
                     42:        arc_CacheClass,
                     43:        arc_AdapterClass,
                     44:        arc_ControllerClass,
                     45:        arc_PeripheralClass,
                     46:        arc_MemoryClass
                     47: } arc_config_class_t;
                     48:
                     49: typedef enum arc_config_type
                     50: {
                     51:        arc_System,
                     52:
                     53:        arc_CentralProcessor,
                     54:        arc_FloatingPointProcessor,
                     55:
                     56:        arc_PrimaryIcache,
                     57:        arc_PrimaryDcache,
                     58:        arc_SecondaryIcache,
                     59:        arc_SecondaryDcache,
                     60:        arc_SecondaryCache,
                     61:
                     62:        arc_EisaAdapter,                /* Eisa adapter         */
                     63:        arc_TcAdapter,                  /* Turbochannel adapter */
                     64:        arc_ScsiAdapter,                /* SCSI adapter         */
                     65:        arc_DtiAdapter,                 /* AccessBus adapter    */
                     66:        arc_MultiFunctionAdapter,
                     67:
                     68:        arc_DiskController,
                     69:        arc_TapeController,
                     70:        arc_CdromController,
                     71:        arc_WormController,
                     72:        arc_SerialController,
                     73:        arc_NetworkController,
                     74:        arc_DisplayController,
                     75:        arc_ParallelController,
                     76:        arc_PointerController,
                     77:        arc_KeyboardController,
                     78:        arc_AudioController,
                     79:        arc_OtherController,            /* denotes a controller not otherwise defined */
                     80:
                     81:        arc_DiskPeripheral,
                     82:        arc_FloppyDiskPeripheral,
                     83:        arc_TapePeripheral,
                     84:        arc_ModemPeripheral,
                     85:        arc_MonitorPeripheral,
                     86:        arc_PrinterPeripheral,
                     87:        arc_PointerPeripheral,
                     88:        arc_KeyboardPeripheral,
                     89:        arc_TerminalPeripheral,
                     90:        arc_OtherPeripheral,            /* denotes a peripheral not otherwise defined   */
                     91:        arc_LinePeripheral,
                     92:        arc_NetworkPeripheral,
                     93:
                     94:        arc_SystemMemory
                     95: } arc_config_type_t;
                     96:
                     97: typedef u_char arc_dev_flags_t;
                     98:
                     99: /* Wonder how this is aligned... */
                    100: typedef struct arc_config
                    101: {
                    102:        arc_config_class_t      class;          /* Likely these three all */
                    103:        arc_config_type_t       type;           /* need to be uchar to make */
                    104:        arc_dev_flags_t         flags;          /* the alignment right */
                    105:        u_int16_t               version;
                    106:        u_int16_t               revision;
                    107:        u_int32_t               key;
                    108:        u_int32_t               affinity_mask;
                    109:        u_int32_t               config_data_len;
                    110:        u_int32_t               id_len;
                    111:        int32_t                 id;
                    112: } arc_config_t;
                    113:
                    114: typedef enum arc_status
                    115: {
                    116:        arc_ESUCCESS,                   /* Success                   */
                    117:        arc_E2BIG,                      /* Arg list too long         */
                    118:        arc_EACCES,                     /* No such file or directory */
                    119:        arc_EAGAIN,                     /* Try again                 */
                    120:        arc_EBADF,                      /* Bad file number           */
                    121:        arc_EBUSY,                      /* Device or resource busy   */
                    122:        arc_EFAULT,                     /* Bad address               */
                    123:        arc_EINVAL,                     /* Invalid argument          */
                    124:        arc_EIO,                        /* I/O error                 */
                    125:        arc_EISDIR,                     /* Is a directory            */
                    126:        arc_EMFILE,                     /* Too many open files       */
                    127:        arc_EMLINK,                     /* Too many links            */
                    128:        arc_ENAMETOOLONG,               /* File name too long        */
                    129:        arc_ENODEV,                     /* No such device            */
                    130:        arc_ENOENT,                     /* No such file or directory */
                    131:        arc_ENOEXEC,                    /* Exec format error         */
                    132:        arc_ENOMEM,                     /* Out of memory             */
                    133:        arc_ENOSPC,                     /* No space left on device   */
                    134:        arc_ENOTDIR,                    /* Not a directory           */
                    135:        arc_ENOTTY,                     /* Not a typewriter          */
                    136:        arc_ENXIO,                      /* No such device or address */
                    137:        arc_EROFS,                      /* Read-only file system     */
                    138: } arc_status_t;
                    139:
                    140: /*
                    141:  *     Oops! Arc systems and SGI's have different order of types.
                    142:  */
                    143: #ifdef __arc__
                    144: typedef enum {
                    145:        ExeceptionBlock,        SystemParameterBlock,   FreeMemory,
                    146:        BadMemory,              LoadedProgram,          FirmwareTemporary,
                    147:        FirmwarePermanent,      FreeContigous
                    148: } MEMORYTYPE;
                    149: #endif
                    150:
                    151: #ifdef __sgi__
                    152: typedef enum {
                    153:        ExeceptionBlock,        SystemParameterBlock,   FreeContigous,
                    154:        FreeMemory,             BadMemory,              LoadedProgram,
                    155:        FirmwareTemporary,      FirmwarePermanent,
                    156: } MEMORYTYPE;
                    157: #endif
                    158:
                    159: typedef struct arc_mem {
                    160:        MEMORYTYPE      Type;           /* Memory chunk type */
                    161:        u_int32_t       BasePage;       /* Page no, first page */
                    162:        u_int32_t       PageCount;      /* Number of pages */
                    163: } arc_mem_t;
                    164:
                    165: typedef caddr_t arc_time_t; /* XXX */
                    166:
                    167: typedef struct arc_dsp_stat {
                    168:        u_int16_t       CursorXPosition;
                    169:        u_int16_t       CursorYPosition;
                    170:        u_int16_t       CursorMaxXPosition;
                    171:        u_int16_t       CursorMaxYPosition;
                    172:        u_char          ForegroundColor;
                    173:        u_char          BackgroundColor;
                    174:        u_char          HighIntensity;
                    175:        u_char          Underscored;
                    176:        u_char          ReverseVideo;
                    177: } arc_dsp_stat_t;
                    178:
                    179: typedef caddr_t arc_dirent_t; /* XXX */
                    180: typedef u_int32_t arc_open_mode_t; /* XXX */
                    181: typedef u_int32_t arc_seek_mode_t; /* XXX */
                    182: typedef u_int32_t arc_mount_t; /* XXX */
                    183:
                    184: typedef struct arc_calls
                    185: {
                    186:        arc_status_t (*load)(           /* Load 1 */
                    187:                char *,                 /* Image to load */
                    188:                u_int32_t,              /* top address */
                    189:                u_int32_t *,            /* Entry address */
                    190:                u_int32_t *);           /* Low address */
                    191:
                    192:        arc_status_t (*invoke)(         /* Invoke 2 */
                    193:                u_int32_t,              /* Entry Address */
                    194:                u_int32_t,              /* Stack Address */
                    195:                u_int32_t,              /* Argc */
                    196:                char **,                /* argv */
                    197:                char **);               /* envp */
                    198:
                    199:        arc_status_t (*execute)(        /* Execute 3 */
                    200:                char *,                 /* Image path */
                    201:                u_int32_t,              /* Argc */
                    202:                char **,                /* argv */
                    203:                char **);               /* envp */
                    204:
                    205:        volatile void (*halt)(void);    /* Halt 4 */
                    206:
                    207:        volatile void (*power_down)(void); /* PowerDown 5 */
                    208:
                    209:        volatile void (*restart)(void); /* Restart 6 */
                    210:
                    211:        volatile void (*reboot)(void);  /* Reboot 7 */
                    212:
                    213:        volatile void (*enter_interactive_mode)(void); /* EnterInteractiveMode 8 */
                    214:
                    215:        volatile void (*return_from_main)(void); /* ReturnFromMain 9 */
                    216:
                    217:        arc_config_t *(*get_peer)(      /* GetPeer 10 */
                    218:                arc_config_t *);        /* Component */
                    219:
                    220:        arc_config_t *(*get_child)(     /* GetChild 11 */
                    221:                arc_config_t *);        /* Component */
                    222:
                    223:        arc_config_t *(*get_parent)(    /* GetParent 12 */
                    224:                arc_config_t *);        /* Component */
                    225:
                    226:        arc_status_t (*get_config_data)( /* GetConfigurationData 13 */
                    227:                caddr_t,                /* Configuration Data */
                    228:                arc_config_t *);        /* Component */
                    229:
                    230:        arc_config_t *(*add_child)(     /* AddChild 14 */
                    231:                arc_config_t *,         /* Component */
                    232:                arc_config_t *);        /* New Component */
                    233:
                    234:        arc_status_t (*delete_component)( /* DeleteComponent 15 */
                    235:                arc_config_t *);        /* Component */
                    236:
                    237:        arc_config_t *(*get_component)( /* GetComponent 16 */
                    238:                char *);                /* Path */
                    239:
                    240:        arc_status_t (*save_config)(void); /* SaveConfiguration 17 */
                    241:
                    242:        arc_sid_t *(*get_system_id)(void); /* GetSystemId 18 */
                    243:
                    244:        arc_mem_t *(*get_memory_descriptor)( /* GetMemoryDescriptor 19 */
                    245:                arc_mem_t *);           /* MemoryDescriptor */
                    246:
                    247: #ifdef arc
                    248:        void (*signal)(                 /* Signal 20 */
                    249:                u_int32_t,              /* Signal number */
                    250: /**/           caddr_t);               /* Handler */
                    251: #else
                    252:        void *unused;
                    253: #endif
                    254:
                    255:        arc_time_t *(*get_time)(void);  /* GetTime 21 */
                    256:
                    257:        u_int32_t (*get_relative_time)(void); /* GetRelativeTime 22 */
                    258:
                    259:        arc_status_t (*get_dir_entry)(  /* GetDirectoryEntry 23 */
                    260:                u_int32_t,              /* FileId */
                    261:                arc_dirent_t *,         /* Directory entry */
                    262:                u_int32_t,              /* Length */
                    263:                u_int32_t *);           /* Count */
                    264:
                    265:        arc_status_t (*open)(           /* Open 24 */
                    266:                char *,                 /* Path */
                    267:                arc_open_mode_t,        /* Open mode */
                    268:                u_int32_t *);           /* FileId */
                    269:
                    270:        arc_status_t (*close)(          /* Close 25 */
                    271:                u_int32_t);             /* FileId */
                    272:
                    273:        arc_status_t (*read)(           /* Read 26 */
                    274:                u_int32_t,              /* FileId */
                    275:                caddr_t,                /* Buffer */
                    276:                u_int32_t,              /* Length */
                    277:                u_int32_t *);           /* Count */
                    278:
                    279:        arc_status_t (*get_read_status)( /* GetReadStatus 27 */
                    280:                u_int32_t);             /* FileId */
                    281:
                    282:        arc_status_t (*write)(          /* Write 28 */
                    283:                u_int32_t,              /* FileId */
                    284:                caddr_t,                /* Buffer */
                    285:                u_int32_t,              /* Length */
                    286:                u_int32_t *);           /* Count */
                    287:
                    288:        arc_status_t (*seek)(           /* Seek 29 */
                    289:                u_int32_t,              /* FileId */
                    290:                int64_t *,              /* Offset */
                    291:                arc_seek_mode_t);       /* Mode */
                    292:
                    293:        arc_status_t (*mount)(          /* Mount 30 */
                    294:                char *,                 /* Path */
                    295:                arc_mount_t);           /* Operation */
                    296:
                    297:        char *(*getenv)(                        /* GetEnvironmentVariable 31 */
                    298:                char *);                /* Variable */
                    299:
                    300:        arc_status_t (*putenv)(         /* SetEnvironmentVariable 32 */
                    301:                char *,                 /* Variable */
                    302:                char *);                /* Value */
                    303:
                    304:        arc_status_t (*get_file_info)(void);    /* GetFileInformation 33 */
                    305:
                    306:        arc_status_t (*set_file_info)(void);    /* SetFileInformation 34 */
                    307:
                    308:        void (*flush_all_caches)(void); /* FlushAllCaches 35 */
                    309:
                    310: #ifdef arc
                    311:        arc_status_t (*test_unicode)(   /* TestUnicodeCharacter 36 */
                    312:                u_int32_t,              /* FileId */
                    313:                u_int16_t);             /* UnicodeCharacter */
                    314:
                    315:        arc_dsp_stat_t *(*get_display_status)( /* GetDisplayStatus 37 */
                    316:                u_int32_t);             /* FileId */
                    317: #endif
                    318: } arc_calls_t;
                    319:
                    320: #define ARC_PARAM_BLK_MAGIC    0x53435241
                    321: #define ARC_PARAM_BLK_MAGIC_BUG        0x41524353      /* This is wrong... but req */
                    322:
                    323: typedef struct arc_param_blk_32
                    324: {
                    325:        u_int32_t       magic;          /* Magic Number */
                    326:        u_int32_t       length;         /* Length of parameter block */
                    327:        u_int16_t       version;        /* ?? */
                    328:        u_int16_t       revision;       /* ?? */
                    329:        u_int32_t       restart_block;  /* ?? */
                    330:        u_int32_t       debug_block;    /* Debugging info -- unused */
                    331:        u_int32_t       general_exp_vect; /* ?? */
                    332:        u_int32_t       tlb_miss_exp_vect; /* ?? */
                    333:        u_int32_t       firmware_length; /* Size of Firmware jumptable in bytes */
                    334:        u_int32_t       *firmware_vect; /* Firmware jumptable */
                    335:        u_int32_t       vendor_length;  /* Size of Vendor specific jumptable */
                    336:        u_int32_t       vendor_vect;    /* Vendor specific jumptable */
                    337:        u_int32_t       adapter_count;  /* ?? */
                    338:        u_int32_t       adapter0_type;  /* ?? */
                    339:        u_int32_t       adapter0_length; /* ?? */
                    340:        u_int32_t       adapter0_vect;  /* ?? */
                    341: } arc_param_blk_32_t;
                    342:
                    343: typedef struct arc_param_blk_64
                    344: {
                    345:        u_int64_t       magic;          /* Magic Number */
                    346:        u_int64_t       length;         /* Length of parameter block */
                    347:        u_int16_t       version;        /* ?? */
                    348:        u_int16_t       revision;       /* ?? */
                    349:        u_int64_t       restart_block;  /* ?? */
                    350:        u_int64_t       debug_block;    /* Debugging info -- unused */
                    351:        u_int64_t       general_exp_vect; /* ?? */
                    352:        u_int64_t       tlb_miss_exp_vect; /* ?? */
                    353:        u_int64_t       firmware_length; /* Size of Firmware jumptable in bytes */
                    354:        u_int64_t       *firmware_vect; /* Firmware jumptable */
                    355:        u_int64_t       vendor_length;  /* Size of Vendor specific jumptable */
                    356:        u_int64_t       vendor_vect;    /* Vendor specific jumptable */
                    357:        u_int64_t       adapter_count;  /* ?? */
                    358:        u_int64_t       adapter0_type;  /* ?? */
                    359:        u_int64_t       adapter0_length; /* ?? */
                    360:        u_int64_t       adapter0_vect;  /* ?? */
                    361: } arc_param_blk_64_t;
                    362:
                    363: #ifdef _LP64
                    364: #define ArcBiosBase32  ((arc_param_blk_32_t *) 0xffffffff80001000)
                    365: #define ArcBiosBase64  ((arc_param_blk_64_t *) 0xffffffff80001000)
                    366: #else
                    367: #define ArcBiosBase32  ((arc_param_blk_32_t *) 0x80001000)
                    368: #define ArcBiosBase64  ((arc_param_blk_64_t *) 0x80001000)
                    369: #endif
                    370: #define ArcBios (ArcBiosBase->firmware_vect)
                    371:
                    372: extern int bios_is_32bit;
                    373: extern char bios_enaddr[20];
                    374:
                    375: int  bios_getchar(void);
                    376: void bios_putchar(char);
                    377: void bios_putstring(char *);
                    378: void bios_printf(const char *, ...);
                    379: void bios_ident(void);
                    380: void bios_display_info(int *, int *, int *, int *);
                    381:
                    382: /*
                    383:  *  Direct ARC-Bios calls.
                    384:  */
                    385: int Bios_Load(char *, u_int32_t, u_int32_t, u_int32_t *);
                    386: int Bios_Invoke(uint32_t, uint32_t, uint32_t, char **, char **);
                    387: int Bios_Execute(char *, u_int32_t, char **, char **);
                    388: void Bios_Halt(void);
                    389: void Bios_PowerDown(void);
                    390: void Bios_Restart(void);
                    391: void Bios_Reboot(void);
                    392: void Bios_EnterInteractiveMode(void);
                    393: int Bios_GetPeer(void *);
                    394: arc_config_t *Bios_GetChild(void *);
                    395: int Bios_GetParent(void *);
                    396: int Bios_GetConfigurationData(void *, void *);
                    397: int Bios_AddChild(void *, void *);
                    398: int Bios_DeleteComponent(void *);
                    399: int Bios_GetComponent(char *);
                    400: int Bios_SaveConfiguration(void);
                    401: arc_sid_t *Bios_GetSystemId(void);
                    402: arc_mem_t *Bios_GetMemoryDescriptor(void *);
                    403: int Bios_GetTime(void);
                    404: int Bios_GetRelativeTime(void);
                    405: int Bios_GetDirectoryEntry(u_int32_t, void *, u_int32_t, u_int32_t *);
                    406: int Bios_Open(char *, int, u_int *);
                    407: int Bios_Close(u_int);
                    408: int Bios_Read(int, char *, int, int *);
                    409: int Bios_GetReadStatus(u_int);
                    410: int Bios_Write(int, char *, int, int *);
                    411: int Bios_Seek(int, int64_t *, int);
                    412: int Bios_Mount(char *, void *);
                    413: char *Bios_GetEnvironmentVariable(const char *);
                    414: int Bios_SetEnvironmentVariable(char *, char *);
                    415: int Bios_GetFileInformation(u_int32_t, u_int32_t, u_int32_t);
                    416: int Bios_SetFileInformation(u_int32_t, u_int32_t, u_int32_t);
                    417: void Bios_FlushAllCaches(void);
                    418: int Bios_TestUnicodeCharacter(u_int32_t, u_int16_t);
                    419: arc_dsp_stat_t *Bios_GetDisplayStatus(u_int32_t);
                    420:
                    421:

CVSweb