Subversion Repositories HelenOS

Rev

Rev 1965 | 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.     CmResourceTypeNull = 0,
  42.     CmResourceTypePort,
  43.     CmResourceTypeInterrupt,
  44.     CmResourceTypeMemory,
  45.     CmResourceTypeDma,
  46.     CmResourceTypeDeviceSpecific,
  47.     CmResourceTypeVendor,
  48.     CmResourceTypeProductName,
  49.     CmResourceTypeSerialNumber
  50. }cm_resource_type;
  51.  
  52. typedef struct {
  53.     __u8 type;
  54.     __u8 sharedisposition;
  55.     __u16 flags;
  56.     union {
  57.         struct {
  58.             long long start; /* 64-bit phys address */
  59.             unsigned long length;
  60.         }port;
  61.         struct {
  62.             unsigned long level;
  63.             unsigned long vector;
  64.             unsigned long reserved1;
  65.         }interrupt;
  66.         struct {
  67.             long long start; /* 64-bit phys address */
  68.             unsigned long length;
  69.         }memory;
  70.     }u;
  71. }__attribute__ ((packed)) cm_resource_descriptor;
  72.  
  73. typedef struct {
  74.     __u16 version;
  75.     __u16 revision;
  76.     unsigned long count;
  77.     cm_resource_descriptor descr[1];
  78. }__attribute__ ((packed)) cm_resource_list;
  79.  
  80. typedef enum {
  81.     SystemClass = 0,
  82.     ProcessorClass,
  83.     CacheClass,
  84.     AdapterClass,
  85.     ControllerClass,
  86.     PeripheralClass,
  87.     MemoryClass
  88. } arc_component_class;
  89.  
  90. typedef enum {
  91.     ARC_type = 0,
  92.     CPU_type,
  93.     FPU_type,
  94.     PrimaryICache,
  95.     PrimaryDCache,
  96.     SecondaryICache,
  97.     SecondaryDCache,
  98.     SecondaryCache,
  99.     Memory, /* Not in NT PROM */
  100.     EISAAdapter,
  101.     TCAdapter,
  102.     SCSIAdapter,
  103.     DTIAdapter,
  104.     MultiFunctionAdapter,
  105.     DiskController,
  106.     TapeController,
  107.     CDROMController,
  108.     WORMController,
  109.     SerialController,
  110.     NetworkController,
  111.     DisplayController,
  112.     ParallelController,
  113.     PointerController,
  114.     KeyboardController,
  115.     AudioController,
  116.     OtherController,
  117.     DiskPeripheral,
  118.     FloppyDiskPeripheral,
  119.     TapePeripheral,
  120.     ModemPeripheral,
  121.     MonitorPeripheral,
  122.     PrinterPeripheral,
  123.     PointerPeripheral,
  124.     KeyboardPeripheral,
  125.     TerminalPeripheral,
  126.     LinePeripheral,
  127.     NetworkPeripheral,
  128.     OtherPeripheral,
  129.     XTalkAdapter,
  130.     PCIAdapter,
  131.     GIOAdapter,
  132.     TPUAdapter,
  133.     Anonymous
  134. }arc_component_type;
  135.  
  136. typedef enum {
  137.     Failed = 1,
  138.     ReadOnly = 2,
  139.     Removable = 4,
  140.     ConsoleIn = 8,
  141.     ConsoleOut = 16,
  142.     Input = 32,
  143.     Output = 64
  144. }arc_component_flags;
  145.  
  146. typedef struct  {
  147.     arc_component_class class;
  148.     arc_component_type type;
  149.     arc_component_flags flags;
  150.     __u16 revision;
  151.     __u16 version;
  152.     __u32 key;
  153.     __u32 affinitymask;
  154.     __u32 configdatasize;
  155.     __u32 identifier_len;
  156.     char *identifier;
  157. } __attribute__ ((packed)) arc_component;
  158.  
  159. typedef struct {
  160.     __u16 year;
  161.     __u16 month;
  162.     __u16 day;
  163.     __u16 hour;
  164.     __u16 minutes;
  165.     __u16 seconds;
  166.     __u16 mseconds;
  167. } __attribute__ ((packed)) arc_timeinfo;
  168.  
  169. /* This is the SGI block structure, WinNT has it different */
  170. typedef enum {
  171.     ExceptionBlock,
  172.     SystemParameterBlock,
  173.     FreeContiguous,
  174.     FreeMemory,
  175.     BadMemory,
  176.     LoadedProgram,
  177.     FirmwareTemporary,
  178.     FirmwarePermanent
  179. }arc_memorytype_t;
  180.  
  181. typedef struct  {
  182.     arc_memorytype_t type;
  183.     __u32 basepage;  /* *4096 = baseaddr */
  184.     __u32 basecount;
  185. }arc_memdescriptor_t;
  186.  
  187. typedef struct {
  188.     char vendorid[8];
  189.     char prodid[8];
  190. }arc_sysid_t;
  191.  
  192. typedef struct {
  193.     long (*load)(void); /* ... */
  194.     long (*invoke)(__u32 eaddr,__u32 saddr,__u32 argc,char **argv,
  195.                char **envp);
  196.     long (*execute)(char *path,__u32 argc,char **argv,char **envp);
  197.     void (*halt)(void);
  198.     void (*powerdown)(void);
  199.     void (*restart)(void);
  200.     void (*reboot)(void);
  201.     void (*enterinteractivemode)(void);
  202.     long (*reserved)(void);
  203. /* 10 */   
  204.     arc_component * (*getpeer)(arc_component *c);
  205.     arc_component * (*getchild)(arc_component *c);
  206.     arc_component * (*getparent)(arc_component *c);
  207.     long (*getconfigurationdata)(void *configdata, arc_component *c);
  208.     long (*addchild)(arc_component *c, arc_component *template,
  209.              void *configdata);
  210.     long (*deletecomponet)(arc_component *current);
  211.     long (*getcomponent)(char *path);
  212.     long (*saveconfiguration)(void);
  213.     arc_sysid_t (*getsystemid)(void);
  214.     arc_memdescriptor_t * (*getmemorydescriptor)(arc_memdescriptor_t *cur);
  215. /* 20 */
  216.     long (*reserved2)(void);
  217.     arc_timeinfo * (*gettime)(void);
  218.     __u32 (*getrelativetime)(void);
  219.     long (*getdirectoryentry)();
  220.     long (*open)(void); /* ... */
  221.     long (*close)(__u32 fileid);
  222.     long (*read)(__u32 fileid,void *buf,__u32 n,__u32 *cnt);
  223.     long (*getreadstatus)(__u32 fileid);
  224.     long (*write)(__u32 fileid, void *buf,__u32 n,__u32 *cnt);
  225.     long (*seek)(void); /* ... */
  226. /* 30 */
  227.     long (*mount)(void); /* ... */
  228.     char * (*getenvironmentvariable)(char *name);
  229.     char * (*setenvironmentvariable)(char *name, char *value);
  230.     long (*getfileinformation)(void); /* ... */
  231.     long (*setfileinformation)(__u32 fileid,__u32 attflags,__u32 attmask);
  232.     void (*flushallcaches)(void);
  233.     long (*testunicodecharacter)(void); /* ... */
  234.     long (*getdisplaystatus)(void); /* ... */
  235. } arc_func_vector_t;
  236.  
  237. typedef struct {
  238.     __u32 signature;
  239.     __u32 length;
  240.     __u16 version;
  241.     __u16 revision;
  242.     void *restartblock;
  243.     void *debugblock;
  244.     void *gevector;
  245.     void *utlbmissvector;
  246.     __u32 firmwarevectorlen;
  247.     arc_func_vector_t *firmwarevector;
  248.     __u32 privvectorlen;
  249.     void *privvector;
  250.     __u32 adaptercount;
  251. }__attribute__ ((packed)) arc_sbp;
  252.  
  253. extern int arc_init(void);
  254. extern int arc_enabled(void);
  255. void arc_frame_init(void);
  256. void arc_console(void);
  257.  
  258. #endif
  259.