Subversion Repositories HelenOS-historic

Rev

Rev 573 | Rev 853 | 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 {
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
 
332 palkovsky 106
typedef struct  {
344 palkovsky 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;
332 palkovsky 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;
344 palkovsky 127
} __attribute__ ((packed)) arc_timeinfo;
332 palkovsky 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);
567 palkovsky 183
    long (*getreadstatus)(__u32 fileid);
332 palkovsky 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
 
573 palkovsky 213
extern int arc_init(void);
332 palkovsky 214
extern void arc_print_memory_map(void);
215
extern int arc_enabled(void);
344 palkovsky 216
extern void arc_print_devices(void);
573 palkovsky 217
void arc_frame_init(void);
575 palkovsky 218
chardev_t * arc_console(void);
573 palkovsky 219
 
332 palkovsky 220
#endif