|
|
1.1 root 1: typedef struct Conf Conf;
2: typedef struct FFrame FFrame;
3: typedef struct FPsave FPsave;
4: typedef struct Label Label;
5: typedef struct Lock Lock;
6: typedef struct Mach Mach;
7: typedef struct Page Page;
8: typedef struct PMMU PMMU;
9: typedef struct Portpage Portpage;
10: typedef struct Ureg Ureg;
11: typedef struct User User;
12:
13: #define MACHP(n) (n==0? &mach0 : *(Mach**)0)
14:
15: extern Mach mach0;
16: extern void (*kprofp)(ulong);
17:
18: /*
19: * parameters for sysproc.c
20: */
21: #define AOUT_MAGIC A_MAGIC
22:
23: struct Lock
24: {
25: char key;
26: ulong pc;
27: ulong sr;
28: };
29:
30: struct Label
31: {
32: ulong sp;
33: ulong pc;
34: ushort sr;
35: };
36:
37: /*
38: * floating point registers
39: */
40: enum
41: {
42: FPinit,
43: FPactive,
44: FPdirty,
45: };
46:
47: struct FPsave
48: {
49: uchar type;
50: uchar size;
51: short reserved;
52: char junk[212]; /* 68881: sizes 24, 180; 68882: 56, 212 */
53: /* this offset known in db */
54: union{
55: char reg[3*4+8*12];
56: struct{
57: ulong fpcr;
58: ulong fpsr;
59: ulong fpiar;
60: struct{
61: ulong d[3];
62: }dreg[8];
63: };
64: };
65: };
66:
67: struct Conf
68: {
69: int nmach; /* processors */
70: int nproc; /* processes */
71: int monitor; /* has display */
72: ulong npage0; /* total physical pages of memory, bank 0 */
73: ulong npage1; /* total physical pages of memory, bank 1 */
74: ulong npage;
75: ulong base0; /* base of bank 0 */
76: ulong base1; /* base of bank 1 */
77: ulong upages; /* user page pool */
78: ulong nimage; /* number of page cache image headers */
79: ulong nswap; /* number of swap blocks */
80: int copymode; /* 0 is copy on write, 1 is copy on reference */
81: int portispaged; /* ??? */
82: int nfloppy;
83: };
84:
85: /*
86: * MMU stuff in proc
87: */
88: struct PMMU
89: {
90: Page *mmufree; /* unused page table pages */
91: Page *mmuused; /* used page table pages */
92: ulong mmuptr; /* first free entry in cur */
93: ulong mmuA[2]; /* first 2 entries of A table */
94: };
95:
96: #include "../port/portdat.h"
97:
98: /*
99: * machine dependent definitions not used by ../port/dat.h
100: */
101:
102: struct Mach
103: {
104: /* OFFSETS OF THE FOLLOWING KNOWN BY l.s */
105: int machno; /* physical id of processor */
106: ulong splpc; /* pc of last caller to splhi */
107:
108: /* ordering from here on irrelevant */
109: int mmask; /* 1<<m->machno */
110: ulong ticks; /* of the clock since boot time */
111: Proc *proc; /* current process on this processor */
112: Label sched; /* scheduler wakeup */
113: Lock alarmlock; /* access to alarm list */
114: void *alarm; /* alarms bound to this clock */
115: int fpstate; /* state of fp registers on machine */
116:
117: int tlbfault;
118: int tlbpurge;
119: int pfault;
120: int cs;
121: int syscall;
122: int load;
123: int intr;
124: Proc *lproc;
125:
126: /* MUST BE LAST */
127: int stack[1];
128: };
129:
130: /*
131: * Fake kmap
132: */
133: typedef void KMap;
134: #define VA(k) ((ulong)(k))
135: #define kmap(p) (KMap*)(p->pa|KZERO)
136: #define kmapperm(p) kmap(p)
137: #define kunmap(k)
138:
139: #define NERR 20
140: #define NNOTE 5
141: struct User
142: {
143: Proc *p;
144: FPsave fpsave; /* offset known by db */
145: int scallnr; /* sys call number - known by db */
146: Sargs s; /* offset known by db */
147: int nerrlab;
148: Label errlab[NERR];
149: char error[ERRLEN];
150: char elem[NAMELEN]; /* last name element from namec */
151: Chan *slash;
152: Chan *dot;
153: /*
154: * Rest of structure controlled by devproc.c and friends.
155: * lock(&p->debug) to modify.
156: */
157: Note note[NNOTE];
158: short nnote;
159: short notified; /* sysnoted is due */
160: Note lastnote;
161: int (*notify)(void*, char*);
162: void *ureg;
163: void *dbgreg; /* User registers for debugging in proc */
164: ushort svvo;
165: ushort svsr;
166: };
167:
168: enum
169: {
170: Scsidevice,
171: Scsidma,
172: };
173:
174: struct
175: {
176: Lock;
177: short machs;
178: short exiting;
179: }active;
180:
181:
182: extern Mach *m;
183: extern User *u;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.