|
|
1.1 root 1: /* (-lgl
2: * COHERENT Version 3.0
3: * Copyright (c) 1982, 1990 by Mark Williams Company.
4: * All rights reserved. May not be copied without permission.
5: -lgl) */
6: /*
7: * Machine dependent definitions.
8: * 80386 Coherent, IBM PC.
9: */
10: #ifndef MACHINE_H
11: #define MACHINE_H MACHINE_H
12:
13: #include <sys/types.h>
14: #include <sys/param.h>
15:
16: /*
17: * Alloc definitions.
18: */
19: #define align(p) ((ALL *) ((int) (p) & ~1))
20: #define link(p) align((p)->a_link)
21: #define tstfree(p) (((int) (p)->a_link&1) == 0)
22: #define setfree(p) ((p)->a_link = (int) (p)->a_link & ~1)
23: #define setused(p) ((p)->a_link = (int) (p)->a_link | 1)
24:
25:
26: /*
27: * Functions.
28: * blockn - block number from byte number
29: * blocko - block offset from byte number
30: * nbnrem - offset into indirect block from block number
31: * nbndiv - residual indirect mapping from block number
32: * btocru - byte to click (saddr_t) rounding up
33: * btocrd - byte to click rounding down
34: * ctob - click to byte
35: * stod - saddr_t to daddr_t conversion for swapper.
36: */
37:
38: #define NIVEC 192
39:
40: #define blockn(n) ((n)>>9)
41: #define blocko(n) ((n)&(512-1))
42: #define nbnrem(b) ((int)(b)&(128-1))
43: #define nbndiv(b) ((b)>>7)
44:
45:
46: #define btos(n) ((((unsigned long)(n))+(1<<BPSSHIFT)-1) >> BPSSHIFT)
47: #define btosrd(n) (((unsigned long)(n)) >> BPSSHIFT)
48: #define stob(n) (((long)(n)) << BPSSHIFT)
49:
50: #define btoc(n) ((((unsigned long)(n))+(1<<BPCSHIFT)-1) >> BPCSHIFT)
51: #define btocrd(n) (((unsigned long)(n)) >> BPCSHIFT)
52: #define ctob(n) (((long)(n)) << BPCSHIFT)
53:
54: #define ctos(x) (((x) + (1<<SG1SHIFT)-1) >> SG1SHIFT)
55: #define ctosrd(x) ((x) >> SG1SHIFT)
56: #define stoc(x) ((x) << SG1SHIFT)
57:
58: /*
59: * The saved registers are accessed
60: * via constant offsets from the top of the
61: * user area stack. The symbols defined below,
62: * are the offsets, in words, from the initial system
63: * stack. The offsets depend on the actual save order
64: * defined by "tsave" in the assist.
65: */
66: #define SS 18
67: #define UESP 17
68: #define EFL 16
69: #define CS 15
70: #define EIP 14
71: #define ERR 13
72: #define TRAPNO 12
73: #define EAX 11
74: #define ECX 10
75: #define EDX 9
76: #define EBX 8
77: #define ESP 7
78: #define EBP 6
79: #define ESI 5
80: #define EDI 4
81: #define DS 3
82: #define ES 2
83: #define FS 1
84: #define GS 0
85:
86: /*
87: * Buffers are not mapped.
88: */
89: #define bsave(o)
90: #define brest(o)
91: #define bmapv(p)
92: #define bconv(p) (p)
93:
94: /*
95: * Drivers are not mapped.
96: */
97: #define dsave(o)
98: #define drest(o)
99: #define dmapv(s)
100: #define dvirt() 0
101: #define dcopy(dst,src)
102:
103: #define mfixcon(pp) /* do nothing */
104:
105: /*
106: * Register structure.
107: */
108: typedef union mreg_u {
109: unsigned m_reg[1];
110: unsigned m_int;
111: } MREG;
112:
113: /*
114: * Segmenation prototype.
115: */
116: typedef struct mproto {
117: unsigned mp_csl;
118: unsigned mp_dsl;
119: vaddr_t mp_svb;
120: vaddr_t mp_svl;
121: } MPROTO;
122:
123: /*
124: * Set jump and return structure.
125: */
126: typedef struct menv_s {
127: int me_di;
128: int me_si;
129: int mc_bx;
130: int me_bp;
131: int me_sp;
132: int me_pc;
133: int me_fw;
134: } MENV;
135:
136: /*
137: * Context structure.
138: */
139: typedef struct mcon_s {
140: int mc_di;
141: int mc_si;
142: int mc_bx;
143: int mc_bp;
144: int mc_sp;
145: int mc_pc;
146: int mc_fw;
147: } MCON;
148:
149: /*
150: * General register structure.
151: */
152: typedef int MGEN[1];
153:
154: /*
155: * Useful definitions.
156: */
157: #define PIC 0x20 /* 8259 command port */
158: #define PICM 0x21 /* 8259 mask port */
159: #define SPIC 0xA0 /* Slave 8259 command port */
160: #define SPICM 0xA1 /* Slave 8259 mask port */
161: #define MFTTB 0x0100 /* Trace trap bit */
162: #define MFINT 0x0200 /* Interupt enable */
163: #define MUERR 0x0002 /* Location of errno */
164: #define MFCBIT 0x0001 /* Carry bit */
165:
166: /*
167: * Trap codes.
168: * Passed in the upper 8 bits of
169: * the "id" passed to "trap".
170: */
171: #define SIDIV 0 /* Divide overflow */
172: #define SISST 1 /* Single step */
173: #define SINMI 2 /* NMI (parity) */
174: #define SIBPT 3 /* Breakpoint */
175: #define SIOVF 4 /* Overflow */
176: #define SIBND 5 /* Bound */
177: #define SIOP 6 /* Invalid opcode */
178: #define SIXNP 7 /* Processor extension not available */
179: #define SIDBL 8 /* Double exception */
180: #define SIXS 9 /* Processor extension segment overrun */
181: #define SITS 10 /* Invalid task state segment */
182: #define SINP 11 /* Segment not present */
183: #define SISS 12 /* Stack segment overrun/not present */
184: #define SIGP 13 /* General protection */
185: #define SIPF 14 /* page fault */
186: #define SISYS 32 /* System call */
187: #define SIRAN 33 /* Random interrupt */
188: #define SIOSYS 34 /* System call */
189: #define SIDEV 64 /* Device interrupt */
190:
191: /*
192: * For accessing high and low words of a long.
193: */
194: struct l {
195: int l_lo;
196: int l_hi;
197: };
198: #define msetppc(v) u.u_regl[EIP] = (int)v
199:
200: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.