Subversion Repositories HelenOS-historic

Rev

Rev 573 | Rev 606 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Copyright (C) 2005 Ondrej Palkovsky
  3.  * 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.  *
  9.  * - Redistributions of source code must retain the above copyright
  10.  *   notice, this list of conditions and the following disclaimer.
  11.  * - Redistributions in binary form must reproduce the above copyright
  12.  *   notice, this list of conditions and the following disclaimer in the
  13.  *   documentation and/or other materials provided with the distribution.
  14.  * - The name of the author may not be used to endorse or promote products
  15.  *   derived from this software without specific prior written permission.
  16.  *
  17.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  18.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  19.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  20.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  21.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  22.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  23.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  24.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  26.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27.  */
  28.  
  29. #ifndef __mips32_ARC_H__
  30. #define __mips32_ARC_H__
  31.  
  32. #include <arch/types.h>
  33. #include <console/chardev.h>
  34.  
  35. #define ARC_BASE_ADDR 0x1000;
  36. #define ARC_MAGIC 0x53435241
  37. /* Frame size used by ARC */
  38. #define ARC_FRAME 4096
  39.  
  40. typedef enum {
  41.     SystemClass = 0,
  42.     ProcessorClass,
  43.     CacheClass,
  44.     AdapterClass,
  45.     ControllerClass,
  46.     PeripheralClass,
  47.     MemoryClass
  48. } arc_component_class;
  49.  
  50. typedef enum {
  51.     ARC_type = 0,
  52.     CPU_type,
  53.     FPU_type,
  54.     PrimaryICache,
  55.     PrimaryDCache,
  56.     SecondaryICache,
  57.     SecondaryDCache,
  58.     SecondaryCache,
  59.     Memory, /* Not in NT PROM */
  60.     EISAAdapter,
  61.     TCAdapter,
  62.     SCSIAdapter,
  63.     DTIAdapter,
  64.     MultiFunctionAdapter,
  65.     DiskController,
  66.     TapeController,
  67.     CDROMController,
  68.     WORMController,
  69.     SerialController,
  70.     NetworkController,
  71.     DisplayController,
  72.     ParallelController,
  73.     PointerController,
  74.     KeyboardController,
  75.     AudioController,
  76.     OtherController,
  77.     DiskPeripheral,
  78.     FloppyDiskPeripheral,
  79.     TapePeripheral,
  80.     ModemPeripheral,
  81.     MonitorPeripheral,
  82.     PrinterPeripheral,
  83.     PointerPeripheral,
  84.     KeyboardPeripheral,
  85.     TerminalPeripheral,
  86.     LinePeripheral,
  87.     NetworkPeripheral,
  88.     OtherPeripheral,
  89.     XTalkAdapter,
  90.     PCIAdapter,
  91.     GIOAdapter,
  92.     TPUAdapter,
  93.     Anonymous
  94. }arc_component_type;
  95.  
  96. typedef enum {
  97.     Failed = 1,
  98.     ReadOnly = 2,
  99.     Removable = 4,
  100.     ConsoleIn = 8,
  101.     ConsoleOut = 16,
  102.     Input = 32,
  103.     Output = 64
  104. }arc_component_flags;
  105.  
  106. typedef struct  {
  107.     arc_component_class class;
  108.     arc_component_type type;
  109.     arc_component_flags flags;
  110.     __u16 revision;
  111.     __u16 version;
  112.     __u32 key;
  113.     __u32 affinitymask;
  114.     __u32 configdatasize;
  115.     __u32 identifier_len;
  116.     char *identifier;
  117. } __attribute__ ((packed)) arc_component;
  118.  
  119. typedef struct {
  120.     __u16 year;
  121.     __u16 month;
  122.     __u16 day;
  123.     __u16 hour;
  124.     __u16 minutes;
  125.     __u16 seconds;
  126.     __u16 mseconds;
  127. } __attribute__ ((packed)) arc_timeinfo;
  128.  
  129. /* This is the SGI block structure, WinNT has it different */
  130. typedef enum {
  131.     ExceptionBlock,
  132.     SystemParameterBlock,
  133.     FreeContiguous,
  134.     FreeMemory,
  135.     BadMemory,
  136.     LoadedProgram,
  137.     FirmwareTemporary,
  138.     FirmwarePermanent
  139. }arc_memorytype_t;
  140.  
  141. typedef struct  {
  142.     arc_memorytype_t type;
  143.     __u32 basepage;  /* *4096 = baseaddr */
  144.     __u32 basecount;
  145. }arc_memdescriptor_t;
  146.  
  147. typedef struct {
  148.     char vendorid[8];
  149.     char prodid[8];
  150. }arc_sysid_t;
  151.  
  152. typedef struct {
  153.     long (*load)(void); /* ... */
  154.     long (*invoke)(__u32 eaddr,__u32 saddr,__u32 argc,char **argv,
  155.                char **envp);
  156.     long (*execute)(char *path,__u32 argc,char **argv,char **envp);
  157.     void (*halt)(void);
  158.     void (*powerdown)(void);
  159.     void (*restart)(void);
  160.     void (*reboot)(void);
  161.     void (*enterinteractivemode)(void);
  162.     long (*reserved)(void);
  163. /* 10 */   
  164.     arc_component * (*getpeer)(arc_component *c);
  165.     arc_component * (*getchild)(arc_component *c);
  166.     arc_component * (*getparent)(arc_component *c);
  167.     long (*getconfigurationdata)(void *configdata, arc_component *c);
  168.     long (*addchild)(arc_component *c, arc_component *template,
  169.              void *configdata);
  170.     long (*deletecomponet)(arc_component *current);
  171.     long (*getcomponent)(char *path);
  172.     long (*saveconfiguration)(void);
  173.     arc_sysid_t (*getsystemid)(void);
  174.     arc_memdescriptor_t * (*getmemorydescriptor)(arc_memdescriptor_t *cur);
  175. /* 20 */
  176.     long (*reserved2)(void);
  177.     arc_timeinfo * (*gettime)(void);
  178.     __u32 (*getrelativetime)(void);
  179.     long (*getdirectoryentry)();
  180.     long (*open)(void); /* ... */
  181.     long (*close)(__u32 fileid);
  182.     long (*read)(__u32 fileid,void *buf,__u32 n,__u32 *cnt);
  183.     long (*getreadstatus)(__u32 fileid);
  184.     long (*write)(__u32 fileid, void *buf,__u32 n,__u32 *cnt);
  185.     long (*seek)(void); /* ... */
  186. /* 30 */
  187.     long (*mount)(void); /* ... */
  188.     char * (*getenvironmentvariable)(char *name);
  189.     char * (*setenvironmentvariable)(char *name, char *value);
  190.     long (*getfileinformation)(void); /* ... */
  191.     long (*setfileinformation)(__u32 fileid,__u32 attflags,__u32 attmask);
  192.     void (*flushallcaches)(void);
  193.     long (*testunicodecharacter)(void); /* ... */
  194.     long (*getdisplaystatus)(void); /* ... */
  195. } arc_func_vector_t;
  196.  
  197. typedef struct {
  198.     __u32 signature;
  199.     __u32 length;
  200.     __u16 version;
  201.     __u16 revision;
  202.     void *restartblock;
  203.     void *debugblock;
  204.     void *gevector;
  205.     void *utlbmissvector;
  206.     __u32 firmwarevectorlen;
  207.     arc_func_vector_t *firmwarevector;
  208.     __u32 privvectorlen;
  209.     void *privvector;
  210.     __u32 adaptercount;
  211. }__attribute__ ((packed)) arc_sbp;
  212.  
  213. extern int arc_init(void);
  214. extern void arc_print_memory_map(void);
  215. extern int arc_enabled(void);
  216. extern void arc_print_devices(void);
  217. void arc_frame_init(void);
  218. chardev_t * arc_console(void);
  219.  
  220. #endif
  221.