blob: e1691f4e6e02a75e9f8ba37f5ccf1efab2043327 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
typedef struct Conf Conf;
typedef struct FPenv FPenv;
typedef struct FPU FPU;
typedef struct Label Label;
typedef struct Lock Lock;
typedef struct Mach Mach;
typedef struct Ureg Ureg;
typedef struct Lance Lance;
typedef struct Lancemem Lancemem;
typedef struct Etherpkt Etherpkt;
typedef struct Lancepkt Lancepkt;
typedef ulong Instr;
struct Conf
{
int nmach; /* processors */
int nproc; /* processes */
ulong monitor; /* graphics monitor id; 0 for none */
char ss2; /* is a sparcstation 2 */
char ss2cachebug; /* has sparcstation2 cache bug */
int ncontext; /* in mmu */
int vacsize; /* size of virtual address cache, in bytes */
int vaclinesize; /* size of cache line */
ulong npage0; /* total physical pages of memory, bank 0 */
ulong npage1; /* total physical pages of memory, bank 1 */
ulong base0; /* base of bank 0 */
ulong base1; /* base of bank 1 */
ulong ialloc; /* max interrupt time allocation in bytes */
ulong npage; /* total physical pages of memory */
int copymode; /* 0 is copy on write, 1 is copy on reference */
ulong ipif; /* Ip protocol interfaces */
ulong ip; /* Ip conversations per interface */
ulong arp; /* Arp table size */
ulong frag; /* Ip fragment assemble queue size */
};
/*
* FPenv.status
*/
enum
{
FPINIT,
FPACTIVE,
FPINACTIVE,
};
struct FPenv
{
ulong status;
ulong pad;
};
/*
* This structure must agree with fpsave and fprestore asm routines
*/
struct FPU
{
double regs[17]; /* floating point registers */
FPenv env;
};
/*
* machine dependent definitions used by ../port/dat.h
*/
struct Label
{
ulong sp;
ulong pc;
};
struct Lock
{
ulong key;
ulong pc;
ulong sr;
int pri;
};
#include "../port/portdat.h"
/*
* machine dependent definitions not used by ../port/dat.h
*/
struct Mach
{
ulong ticks; /* of the clock since boot time */
int machno; /* physical id of this processor */
Proc *proc; /* current process on this processor */
Label sched; /* scheduler wakeup */
Lock alarmlock; /* access to alarm list */
void *alarm; /* alarms bound to this clock */
ulong *contexts; /* hardware context table */
ulong *ctx; /* the context */
int fptrap; /* FP trap occurred while unsave */
int nrdy;
int stack[1];
};
/*
* XXX - Eric: It just works....
*/
/*
* LANCE CSR3 (bus control bits)
*/
#define BSWP 0x4
#define ACON 0x2
#define BCON 0x1
struct Lancepkt
{
uchar d[6];
uchar s[6];
uchar type[2];
uchar data[1500];
uchar crc[4];
};
/*
* system dependent lance stuff
* filled by lancesetup()
*/
struct Lance
{
ushort lognrrb; /* log2 number of receive ring buffers */
ushort logntrb; /* log2 number of xmit ring buffers */
ushort nrrb; /* number of receive ring buffers */
ushort ntrb; /* number of xmit ring buffers */
ushort *rap; /* lance address register */
ushort *rdp; /* lance data register */
ushort busctl; /* bus control bits */
uchar ea[6]; /* our ether addr */
int sep; /* separation between shorts in lance ram
as seen by host */
ushort *lanceram; /* start of lance ram as seen by host */
Lancemem *lm; /* start of lance ram as seen by lance */
Lancepkt *rp; /* receive buffers (host address) */
Lancepkt *tp; /* transmit buffers (host address) */
Lancepkt *lrp; /* receive buffers (lance address) */
Lancepkt *ltp; /* transmit buffers (lance address) */
};
/*
* Fake kmap
*/
typedef void KMap;
#define VA(k) ((ulong)(k))
#define kmap(p) (KMap*)((p)->pa|KZERO)
#define kunmap(k)
#define MACHP(n) (n==0? &mach0 : *(Mach**)0)
extern Mach *m;
extern Proc *up;
extern Mach mach0;
#define swcursor 1
|