The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/arcbios/arcbios.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: arcbios.h,v 1.4.2.1 2004/07/23 06:57:46 tron Exp $     */
    2 
    3 /*-
    4  * Copyright (c) 2001 The NetBSD Foundation, Inc.
    5  * All rights reserved.
    6  *
    7  * This code is derived from software contributed to The NetBSD Foundation
    8  * by Jason R. Thorpe.
    9  *
   10  * Redistribution and use in source and binary forms, with or without
   11  * modification, are permitted provided that the following conditions
   12  * are met:
   13  * 1. Redistributions of source code must retain the above copyright
   14  *    notice, this list of conditions and the following disclaimer.
   15  * 2. Redistributions in binary form must reproduce the above copyright
   16  *    notice, this list of conditions and the following disclaimer in the
   17  *    documentation and/or other materials provided with the distribution.
   18  * 3. All advertising materials mentioning features or use of this software
   19  *    must display the following acknowledgement:
   20  *      This product includes software developed by the NetBSD
   21  *      Foundation, Inc. and its contributors.
   22  * 4. Neither the name of The NetBSD Foundation nor the names of its
   23  *    contributors may be used to endorse or promote products derived
   24  *    from this software without specific prior written permission.
   25  *
   26  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   27  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   28  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   29  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   30  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   31  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   32  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   33  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   34  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   35  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   36  * POSSIBILITY OF SUCH DAMAGE.
   37  */
   38 
   39 /*
   40  * The ARC BIOS (which is similar, but not 100% compatible with SGI ARCS)
   41  * specification can be found at:
   42  *
   43  *      http://www.microsoft.com/hwdev/download/respec/riscspec.zip
   44  */
   45 
   46 #ifndef _ARCBIOS_H_
   47 #define _ARCBIOS_H_
   48 
   49 #define ARCBIOS_STDIN           0
   50 #define ARCBIOS_STDOUT          1
   51 
   52 #define ARCBIOS_PAGESIZE        4096
   53 
   54 /* ARC BIOS status codes. */
   55 #define ARCBIOS_ESUCCESS        0       /* Success */
   56 #define ARCBIOS_E2BIG           1       /* argument list too long */
   57 #define ARCBIOS_EACCES          2       /* permission denied */
   58 #define ARCBIOS_EAGAIN          3       /* resource temporarily unavailable */
   59 #define ARCBIOS_EBADF           4       /* bad file number */
   60 #define ARCBIOS_EBUSY           5       /* device or resource busy */
   61 #define ARCBIOS_EFAULT          6       /* bad address */
   62 #define ARCBIOS_EINVAL          7       /* invalid argument */
   63 #define ARCBIOS_EIO             8       /* I/O error */
   64 #define ARCBIOS_EISDIR          9       /* is a directory */
   65 #define ARCBIOS_EMFILE          10      /* too many open files */
   66 #define ARCBIOS_EMLINK          11      /* too many links */
   67 #define ARCBIOS_ENAMETOOLONG    12      /* file name too long */
   68 #define ARCBIOS_ENODEV          13      /* no such device */
   69 #define ARCBIOS_ENOENT          14      /* no such file or directory */
   70 #define ARCBIOS_ENOEXEC         15      /* exec format error */
   71 #define ARCBIOS_ENOMEM          16      /* out of memory */
   72 #define ARCBIOS_ENOSPC          17      /* no space left on device */
   73 #define ARCBIOS_ENOTDIR         18      /* not a directory */
   74 #define ARCBIOS_ENOTTY          19      /* not a typewriter */
   75 #define ARCBIOS_ENXIO           20      /* media not loaded */
   76 #define ARCBIOS_EROFS           21      /* read-only file system */
   77 #if defined(sgimips)
   78 #define ARCBIOS_EADDRNOTAVAIL   31      /* address not available */
   79 #define ARCBIOS_ETIMEDOUT       32      /* operation timed out */
   80 #define ARCBIOS_ECONNABORTED    33      /* connection aborted */
   81 #define ARCBIOS_ENOCONNECT      34      /* not connected */
   82 #endif /* sgimips */
   83 
   84 /*
   85  * 4.2.2: System Parameter Block
   86  */
   87 struct arcbios_spb {
   88         uint32_t        SPBSignature;
   89         uint32_t        SPBLength;
   90         uint16_t        Version;
   91         uint16_t        Revision;
   92         void            *RestartBlock;
   93         void            *DebugBlock;
   94         void            *GEVector;
   95         void            *UTLBMissVector;
   96         uint32_t        FirmwareVectorLength;
   97         void            *FirmwareVector;
   98         uint32_t        PrivateVectorLength;
   99         void            *PrivateVector;
  100         uint32_t        AdapterCount;
  101         uint32_t        AdapterType;
  102         uint32_t        AdapterVectorLength;
  103         void            *AdapterVector;
  104 };
  105 
  106 #define ARCBIOS_SPB_SIGNATURE   0x53435241      /* A R C S */
  107 #define ARCBIOS_SPB_SIGNATURE_1 0x41524353      /* S C R A */
  108 
  109 /*
  110  * 4.2.5: System Configuration Data
  111  */
  112 struct arcbios_component {
  113         uint32_t        Class;
  114         uint32_t        Type;
  115         uint32_t        Flags;
  116         uint16_t        Version;
  117         uint16_t        Revision;
  118         uint32_t        Key;
  119         uint32_t        AffinityMask;
  120         uint32_t        ConfigurationDataSize;
  121         uint32_t        IdentifierLength;
  122         char            *Identifier;
  123 };
  124 
  125 /* 
  126  * SGI ARCS likes to be `special', so it moved some of the class/type 
  127  * numbers around from the ARC standard definitions.
  128  */
  129 #if defined(sgimips)
  130 /* Component Class */
  131 #define COMPONENT_CLASS_SystemClass             0
  132 #define COMPONENT_CLASS_ProcessorClass          1
  133 #define COMPONENT_CLASS_CacheClass              2
  134 #define COMPONENT_CLASS_MemoryClass             3
  135 #define COMPONENT_CLASS_AdapterClass            4
  136 #define COMPONENT_CLASS_ControllerClass         5
  137 #define COMPONENT_CLASS_PeripheralClass         6
  138 #else
  139 /* Component Class */
  140 #define COMPONENT_CLASS_SystemClass             0
  141 #define COMPONENT_CLASS_ProcessorClass          1
  142 #define COMPONENT_CLASS_CacheClass              2
  143 #define COMPONENT_CLASS_AdapterClass            3
  144 #define COMPONENT_CLASS_ControllerClass         4
  145 #define COMPONENT_CLASS_PeripheralClass         5
  146 #define COMPONENT_CLASS_MemoryClass             6
  147 #endif
  148 
  149 /* Component Types */
  150 #if defined(sgimips)
  151 /* System Class */
  152 #define COMPONENT_TYPE_ARC                      0
  153 
  154 /* Processor Class */
  155 #define COMPONENT_TYPE_CPU                      1
  156 #define COMPONENT_TYPE_FPU                      2
  157 
  158 /* Cache Class */
  159 #define COMPONENT_TYPE_PrimaryICache            3
  160 #define COMPONENT_TYPE_PrimaryDCache            4
  161 #define COMPONENT_TYPE_SecondaryICache          5
  162 #define COMPONENT_TYPE_SecondaryDCache          6
  163 #define COMPONENT_TYPE_SecondaryCache           7
  164 
  165 /* Memory Class */
  166 #define COMPONENT_TYPE_MemoryUnit               8
  167 
  168 /* Adapter Class */
  169 #define COMPONENT_TYPE_EISAAdapter              9
  170 #define COMPONENT_TYPE_TCAdapter                10
  171 #define COMPONENT_TYPE_SCSIAdapter              11
  172 #define COMPONENT_TYPE_DTIAdapter               12
  173 #define COMPONENT_TYPE_MultiFunctionAdapter     13
  174 
  175 /* Controller Class */
  176 #define COMPONENT_TYPE_DiskController           14
  177 #define COMPONENT_TYPE_TapeController           15
  178 #define COMPONENT_TYPE_CDROMController          16
  179 #define COMPONENT_TYPE_WORMController           17
  180 #define COMPONENT_TYPE_SerialController         18
  181 #define COMPONENT_TYPE_NetworkController        19
  182 #define COMPONENT_TYPE_DisplayController        20
  183 #define COMPONENT_TYPE_ParallelController       21
  184 #define COMPONENT_TYPE_PointerController        22
  185 #define COMPONENT_TYPE_KeyboardController       23
  186 #define COMPONENT_TYPE_AudioController          24
  187 #define COMPONENT_TYPE_OtherController          25
  188 
  189 /* Peripheral Class */
  190 #define COMPONENT_TYPE_DiskPeripheral           26
  191 #define COMPONENT_TYPE_FloppyDiskPeripheral     27
  192 #define COMPONENT_TYPE_TapePeripheral           28
  193 #define COMPONENT_TYPE_ModemPeripheral          29
  194 #define COMPONENT_TYPE_MonitorPeripheral        30
  195 #define COMPONENT_TYPE_PrinterPeripheral        31
  196 #define COMPONENT_TYPE_PointerPeripheral        32
  197 #define COMPONENT_TYPE_KeyboardPeripheral       33
  198 #define COMPONENT_TYPE_TerminalPeripheral       34
  199 #define COMPONENT_TYPE_LinePeripheral           35
  200 #define COMPONENT_TYPE_NetworkPeripheral        36
  201 #define COMPONENT_TYPE_OtherPeripheral          37
  202 #else /* not sgimips */
  203 /* System Class */
  204 #define COMPONENT_TYPE_ARC                      0
  205 
  206 /* Processor Class */
  207 #define COMPONENT_TYPE_CPU                      1
  208 #define COMPONENT_TYPE_FPU                      2
  209 
  210 /* Cache Class */
  211 #define COMPONENT_TYPE_PrimaryICache            3
  212 #define COMPONENT_TYPE_PrimaryDCache            4
  213 #define COMPONENT_TYPE_SecondaryICache          5
  214 #define COMPONENT_TYPE_SecondaryDCache          6
  215 #define COMPONENT_TYPE_SecondaryCache           7
  216 
  217 /* Adapter Class */
  218 #define COMPONENT_TYPE_EISAAdapter              8
  219 #define COMPONENT_TYPE_TCAdapter                9
  220 #define COMPONENT_TYPE_SCSIAdapter              10
  221 #define COMPONENT_TYPE_DTIAdapter               11
  222 #define COMPONENT_TYPE_MultiFunctionAdapter     12
  223 
  224 /* Controller Class */
  225 #define COMPONENT_TYPE_DiskController           13
  226 #define COMPONENT_TYPE_TapeController           14
  227 #define COMPONENT_TYPE_CDROMController          15
  228 #define COMPONENT_TYPE_WORMController           16
  229 #define COMPONENT_TYPE_SerialController         17
  230 #define COMPONENT_TYPE_NetworkController        18
  231 #define COMPONENT_TYPE_DisplayController        19
  232 #define COMPONENT_TYPE_ParallelController       20
  233 #define COMPONENT_TYPE_PointerController        21
  234 #define COMPONENT_TYPE_KeyboardController       22
  235 #define COMPONENT_TYPE_AudioController          23
  236 #define COMPONENT_TYPE_OtherController          24
  237 
  238 /* Peripheral Class */
  239 #define COMPONENT_TYPE_DiskPeripheral           25
  240 #define COMPONENT_TYPE_FloppyDiskPeripheral     26
  241 #define COMPONENT_TYPE_TapePeripheral           27
  242 #define COMPONENT_TYPE_ModemPeripheral          28
  243 #define COMPONENT_TYPE_MonitorPeripheral        29
  244 #define COMPONENT_TYPE_PrinterPeripheral        30
  245 #define COMPONENT_TYPE_PointerPeripheral        31
  246 #define COMPONENT_TYPE_KeyboardPeripheral       32
  247 #define COMPONENT_TYPE_TerminalPeripheral       33
  248 #define COMPONENT_TYPE_OtherPeripheral          34
  249 #define COMPONENT_TYPE_LinePeripheral           35
  250 #define COMPONENT_TYPE_NetworkPeripheral        36
  251 
  252 /* Memory Class */
  253 #define COMPONENT_TYPE_MemoryUnit               37
  254 #endif
  255 
  256 /* Component flags */
  257 #define COMPONENT_FLAG_Failed                   1
  258 #define COMPONENT_FLAG_ReadOnly                 2
  259 #define COMPONENT_FLAG_Removable                4
  260 #define COMPONENT_FLAG_ConsoleIn                8
  261 #define COMPONENT_FLAG_ConsoleOut               16
  262 #define COMPONENT_FLAG_Input                    32
  263 #define COMPONENT_FLAG_Output                   64
  264 
  265 /* Key for Cache: */
  266 #define COMPONENT_KEY_Cache_CacheSize(x)                                \
  267         (ARCBIOS_PAGESIZE << ((x) & 0xffff))
  268 #define COMPONENT_KEY_Cache_LineSize(x)                                 \
  269         (1U << (((x) >> 16) & 0xff))
  270 #define COMPONENT_KEY_Cache_RefillSize(x)                               \
  271         (((x) >> 24) & 0xff)
  272 
  273 /*
  274  * ARC system ID
  275  */
  276 #define ARCBIOS_SYSID_FIELDLEN          8
  277 struct arcbios_sysid {
  278         char            VendorId[ARCBIOS_SYSID_FIELDLEN];
  279         char            ProductId[ARCBIOS_SYSID_FIELDLEN];
  280 };
  281 
  282 /*
  283  * ARC memory descriptor
  284  */
  285 struct arcbios_mem {
  286         uint32_t        Type;
  287         uint32_t        BasePage;
  288         uint32_t        PageCount;
  289 };
  290 
  291 #if defined(sgimips)
  292 #define ARCBIOS_MEM_ExceptionBlock              0
  293 #define ARCBIOS_MEM_SystemParameterBlock        1
  294 #define ARCBIOS_MEM_FreeContiguous              2
  295 #define ARCBIOS_MEM_FreeMemory                  3
  296 #define ARCBIOS_MEM_BadMemory                   4
  297 #define ARCBIOS_MEM_LoadedProgram               5
  298 #define ARCBIOS_MEM_FirmwareTemporary           6
  299 #define ARCBIOS_MEM_FirmwarePermanent           7
  300 #elif defined(arc)
  301 #define ARCBIOS_MEM_ExceptionBlock              0
  302 #define ARCBIOS_MEM_SystemParameterBlock        1
  303 #define ARCBIOS_MEM_FreeMemory                  2
  304 #define ARCBIOS_MEM_BadMemory                   3
  305 #define ARCBIOS_MEM_LoadedProgram               4
  306 #define ARCBIOS_MEM_FirmwareTemporary           5
  307 #define ARCBIOS_MEM_FirmwarePermanent           6
  308 #define ARCBIOS_MEM_FreeContiguous              7
  309 #endif
  310 
  311 /*
  312  * ARC display status
  313  */
  314 struct arcbios_dsp_stat {
  315         uint16_t        CursorXPosition;
  316         uint16_t        CursorYPosition;
  317         uint16_t        CursorMaxXPosition;
  318         uint16_t        CursorMaxYPosition;
  319         uint8_t         ForegroundColor;
  320         uint8_t         BackgroundColor;
  321         uint8_t         HighIntensity;
  322         uint8_t         Underscored;
  323         uint8_t         ReverseVideo;
  324 };
  325 
  326 /*
  327  * ARC firmware vector
  328  */
  329 struct arcbios_fv {
  330         uint32_t        (*Load)(
  331                             char *,             /* image to load */
  332                             uint32_t,           /* top address */
  333                             uint32_t,           /* entry address */
  334                             uint32_t *);        /* low address */
  335 
  336         uint32_t        (*Invoke)(
  337                             uint32_t,           /* entry address */
  338                             uint32_t,           /* stack address */
  339                             uint32_t,           /* argc */
  340                             char **,            /* argv */
  341                             char **);           /* envp */
  342 
  343         uint32_t        (*Execute)(
  344                             char *,             /* image path */
  345                             uint32_t,           /* argc */
  346                             char **,            /* argv */
  347                             char **);           /* envp */
  348 
  349         void            (*Halt)(void)
  350                             __attribute__((__noreturn__));
  351 
  352         void            (*PowerDown)(void)
  353                             __attribute__((__noreturn__));
  354 
  355         void            (*Restart)(void)
  356                             __attribute__((__noreturn__));
  357 
  358         void            (*Reboot)(void)
  359                             __attribute__((__noreturn__));
  360 
  361         void            (*EnterInteractiveMode)(void)
  362                             __attribute__((__noreturn__));
  363 #if defined(sgimips)
  364         void            *reserved0;
  365 #else
  366         void            (*ReturnFromMain)(void)
  367                             __attribute__((__noreturn__));
  368 #endif
  369         void            *(*GetPeer)(
  370                             void *);            /* component */
  371 
  372         void            *(*GetChild)(
  373                             void *);            /* component */
  374 
  375         void            *(*GetParent)(
  376                             void *);            /* component */
  377 
  378         uint32_t        (*GetConfigurationData)(
  379                             void *,             /* configuration data */
  380                             void *);            /* component */
  381 
  382         void            *(*AddChild)(
  383                             void *,             /* component */
  384                             void *);            /* new component */
  385 
  386         uint32_t        (*DeleteComponent)(
  387                             void *);            /* component */
  388 
  389         uint32_t        (*GetComponent)(
  390                             char *);            /* path */
  391 
  392         uint32_t        (*SaveConfiguration)(void);
  393 
  394         void            *(*GetSystemId)(void);
  395 
  396         void            *(*GetMemoryDescriptor)(
  397                             void *);            /* memory descriptor */
  398 #if defined(sgimips)
  399         void            *reserved1;
  400 #else
  401         void            (*Signal)(
  402                             uint32_t,           /* signal number */
  403                             void *);            /* handler */
  404 #endif
  405         void            *(*GetTime)(void);
  406 
  407         uint32_t        (*GetRelativeTime)(void);
  408 
  409         uint32_t        (*GetDirectoryEntry)(
  410                             uint32_t,           /* file ID */
  411                             void *,             /* directory entry */
  412                             uint32_t,           /* length */
  413                             uint32_t *);        /* count */
  414 
  415         uint32_t        (*Open)(
  416                             char *,             /* path */
  417                             uint32_t,           /* open mode */
  418                             uint32_t *);        /* file ID */
  419 
  420         uint32_t        (*Close)(
  421                             uint32_t);          /* file ID */
  422 
  423         uint32_t        (*Read)(
  424                             uint32_t,           /* file ID */
  425                             void *,             /* buffer */
  426                             uint32_t,           /* length */
  427                             uint32_t *);        /* count */
  428 
  429         uint32_t        (*GetReadStatus)(
  430                             uint32_t);          /* file ID */
  431 
  432         uint32_t        (*Write)(
  433                             uint32_t,           /* file ID */
  434                             void *,             /* buffer */
  435                             uint32_t,           /* length */
  436                             uint32_t *);        /* count */
  437 
  438         uint32_t        (*Seek)(
  439                             uint32_t,           /* file ID */
  440                             int64_t *,          /* offset */
  441                             uint32_t);          /* whence */
  442 
  443         uint32_t        (*Mount)(
  444                             char *,             /* path */
  445                             uint32_t);          /* operation */
  446 
  447         char            *(*GetEnvironmentVariable)(
  448                             char *);            /* variable */
  449 
  450         uint32_t        (*SetEnvironmentVariable)(
  451                             char *,             /* variable */
  452                             char *);            /* contents */
  453 
  454         uint32_t        (*GetFileInformation)(
  455                             uint32_t,           /* file ID */
  456                             void *);            /* XXX */
  457 
  458         uint32_t        (*SetFileInformation)(
  459                             uint32_t,           /* file ID */
  460                             uint32_t,           /* XXX */
  461                             uint32_t);          /* XXX */
  462 
  463         void            (*FlushAllCaches)(void);
  464 #if !defined(sgimips)
  465         uint32_t        (*TestUnicode)(
  466                             uint32_t,           /* file ID */
  467                             uint16_t);          /* unicode character */
  468 
  469         void            *(*GetDisplayStatus)(
  470                             uint32_t);          /* file ID */
  471 #endif
  472 };
  473 
  474 #endif /* _ARCBIOS_H_ */

Cache object: 7942efc5c58b1206c83f0bd21b378a8a


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.