Subversion Repositories HelenOS-historic

Rev

Rev 606 | 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>
575 palkovsky 33
#include <console/chardev.h>
332 palkovsky 34
 
35
#define ARC_BASE_ADDR 0x1000;
36
#define ARC_MAGIC 0x53435241
573 palkovsky 37
/* Frame size used by ARC */
38
#define ARC_FRAME 4096
332 palkovsky 39
 
344 palkovsky 40
typedef enum {
853 palkovsky 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 {
344 palkovsky 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
 
332 palkovsky 146
typedef struct  {
344 palkovsky 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;
332 palkovsky 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;
344 palkovsky 167
} __attribute__ ((packed)) arc_timeinfo;
332 palkovsky 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);
567 palkovsky 223
    long (*getreadstatus)(__u32 fileid);
332 palkovsky 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
 
573 palkovsky 253
extern int arc_init(void);
332 palkovsky 254
extern int arc_enabled(void);
573 palkovsky 255
void arc_frame_init(void);
606 palkovsky 256
void arc_console(void);
573 palkovsky 257
 
332 palkovsky 258
#endif