Subversion Repositories HelenOS-historic

Rev

Rev 567 | Rev 575 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
332 palkovsky 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
 
345 palkovsky 29
#ifndef __mips32_ARC_H__
30
#define __mips32_ARC_H__
332 palkovsky 31
 
32
#include <arch/types.h>
33
 
34
#define ARC_BASE_ADDR 0x1000;
35
#define ARC_MAGIC 0x53435241
573 palkovsky 36
/* Frame size used by ARC */
37
#define ARC_FRAME 4096
332 palkovsky 38
 
344 palkovsky 39
typedef enum {
40
    SystemClass = 0,
41
    ProcessorClass,
42
    CacheClass,
43
    AdapterClass,
44
    ControllerClass,
45
    PeripheralClass,
46
    MemoryClass
47
} arc_component_class;
48
 
49
typedef enum {
50
    ARC_type = 0,
51
    CPU_type,
52
    FPU_type,
53
    PrimaryICache,
54
    PrimaryDCache,
55
    SecondaryICache,
56
    SecondaryDCache,
57
    SecondaryCache,
58
    Memory, /* Not in NT PROM */
59
    EISAAdapter,
60
    TCAdapter,
61
    SCSIAdapter,
62
    DTIAdapter,
63
    MultiFunctionAdapter,
64
    DiskController,
65
    TapeController,
66
    CDROMController,
67
    WORMController,
68
    SerialController,
69
    NetworkController,
70
    DisplayController,
71
    ParallelController,
72
    PointerController,
73
    KeyboardController,
74
    AudioController,
75
    OtherController,
76
    DiskPeripheral,
77
    FloppyDiskPeripheral,
78
    TapePeripheral,
79
    ModemPeripheral,
80
    MonitorPeripheral,
81
    PrinterPeripheral,
82
    PointerPeripheral,
83
    KeyboardPeripheral,
84
    TerminalPeripheral,
85
    LinePeripheral,
86
    NetworkPeripheral,
87
    OtherPeripheral,
88
    XTalkAdapter,
89
    PCIAdapter,
90
    GIOAdapter,
91
    TPUAdapter,
92
    Anonymous
93
}arc_component_type;
94
 
95
typedef enum {
96
    Failed = 1,
97
    ReadOnly = 2,
98
    Removable = 4,
99
    ConsoleIn = 8,
100
    ConsoleOut = 16,
101
    Input = 32,
102
    Output = 64
103
}arc_component_flags;
104
 
332 palkovsky 105
typedef struct  {
344 palkovsky 106
    arc_component_class class;
107
    arc_component_type type;
108
    arc_component_flags flags;
109
    __u16 revision;
110
    __u16 version;
111
    __u32 key;
112
    __u32 affinitymask;
113
    __u32 configdatasize;
114
    __u32 identifier_len;
115
    char *identifier;
116
} __attribute__ ((packed)) arc_component;
332 palkovsky 117
 
118
typedef struct {
119
    __u16 year;
120
    __u16 month;
121
    __u16 day;
122
    __u16 hour;
123
    __u16 minutes;
124
    __u16 seconds;
125
    __u16 mseconds;
344 palkovsky 126
} __attribute__ ((packed)) arc_timeinfo;
332 palkovsky 127
 
128
/* This is the SGI block structure, WinNT has it different */
129
typedef enum {
130
    ExceptionBlock,
131
    SystemParameterBlock,
132
    FreeContiguous,
133
    FreeMemory,
134
    BadMemory,
135
    LoadedProgram,
136
    FirmwareTemporary,
137
    FirmwarePermanent
138
}arc_memorytype_t;
139
 
140
typedef struct  {
141
    arc_memorytype_t type;
142
    __u32 basepage;  /* *4096 = baseaddr */
143
    __u32 basecount;
144
}arc_memdescriptor_t;
145
 
146
typedef struct {
147
    char vendorid[8];
148
    char prodid[8];
149
}arc_sysid_t;
150
 
151
typedef struct {
152
    long (*load)(void); /* ... */
153
    long (*invoke)(__u32 eaddr,__u32 saddr,__u32 argc,char **argv,
154
               char **envp);
155
    long (*execute)(char *path,__u32 argc,char **argv,char **envp);
156
    void (*halt)(void);
157
    void (*powerdown)(void);
158
    void (*restart)(void);
159
    void (*reboot)(void);
160
    void (*enterinteractivemode)(void);
161
    long (*reserved)(void);
162
/* 10 */   
163
    arc_component * (*getpeer)(arc_component *c);
164
    arc_component * (*getchild)(arc_component *c);
165
    arc_component * (*getparent)(arc_component *c);
166
    long (*getconfigurationdata)(void *configdata, arc_component *c);
167
    long (*addchild)(arc_component *c, arc_component *template,
168
             void *configdata);
169
    long (*deletecomponet)(arc_component *current);
170
    long (*getcomponent)(char *path);
171
    long (*saveconfiguration)(void);
172
    arc_sysid_t (*getsystemid)(void);
173
    arc_memdescriptor_t * (*getmemorydescriptor)(arc_memdescriptor_t *cur);
174
/* 20 */
175
    long (*reserved2)(void);
176
    arc_timeinfo * (*gettime)(void);
177
    __u32 (*getrelativetime)(void);
178
    long (*getdirectoryentry)();
179
    long (*open)(void); /* ... */
180
    long (*close)(__u32 fileid);
181
    long (*read)(__u32 fileid,void *buf,__u32 n,__u32 *cnt);
567 palkovsky 182
    long (*getreadstatus)(__u32 fileid);
332 palkovsky 183
    long (*write)(__u32 fileid, void *buf,__u32 n,__u32 *cnt);
184
    long (*seek)(void); /* ... */
185
/* 30 */
186
    long (*mount)(void); /* ... */
187
    char * (*getenvironmentvariable)(char *name);
188
    char * (*setenvironmentvariable)(char *name, char *value);
189
    long (*getfileinformation)(void); /* ... */
190
    long (*setfileinformation)(__u32 fileid,__u32 attflags,__u32 attmask);
191
    void (*flushallcaches)(void);
192
    long (*testunicodecharacter)(void); /* ... */
193
    long (*getdisplaystatus)(void); /* ... */
194
} arc_func_vector_t;
195
 
196
typedef struct {
197
    __u32 signature;
198
    __u32 length;
199
    __u16 version;
200
    __u16 revision;
201
    void *restartblock;
202
    void *debugblock;
203
    void *gevector;
204
    void *utlbmissvector;
205
    __u32 firmwarevectorlen;
206
    arc_func_vector_t *firmwarevector;
207
    __u32 privvectorlen;
208
    void *privvector;
209
    __u32 adaptercount;
210
}__attribute__ ((packed)) arc_sbp;
211
 
573 palkovsky 212
extern int arc_init(void);
332 palkovsky 213
extern void arc_print_memory_map(void);
214
extern int arc_enabled(void);
215
extern void arc_putchar(char ch);
344 palkovsky 216
extern void arc_print_devices(void);
567 palkovsky 217
extern int arc_getchar(void);
573 palkovsky 218
void arc_frame_init(void);
219
 
332 palkovsky 220
#endif