|
|
1.1 root 1: /*
2: * /usr/include/sys/reg.h
3: *
4: * Machine dependent definitions, 80386 Coherent, IBM PC.
5: *
6: * Revised: Mon Jul 19 12:25:37 1993 CDT
7: */
8: #ifndef __KERNEL_REG_H__
9: #define __KERNEL_REG_H__
10:
11: #include <common/__caddr.h>
12: #include <kernel/param.h>
13:
14: /*
15: * Functions.
16: * blockn - block number from byte number
17: * blocko - block offset from byte number
18: * nbnrem - offset into indirect block from block number
19: * nbndiv - residual indirect mapping from block number
20: * btocru - byte to click (saddr_t) rounding up
21: * btocrd - byte to click rounding down
22: * ctob - click to byte
23: * stod - saddr_t to daddr_t conversion for swapper.
24: */
25:
26: #define NIVEC 192
27:
28: #define blockn(n) ((n) >> 9)
29: #define blocko(n) ((n) & (512 - 1))
30: #define nbnrem(b) ((int) (b) & (128 - 1))
31: #define nbndiv(b) ((b) >> 7)
32:
33:
34: #define btos(n) ((((unsigned long)(n))+(1<<BPSSHIFT)-1) >> BPSSHIFT)
35: #define btosrd(n) (((unsigned long)(n)) >> BPSSHIFT)
36: #define stob(n) (((long)(n)) << BPSSHIFT)
37:
38: #define btoc(n) ((((unsigned long)(n))+NBPC-1) >> BPCSHIFT)
39: #define btocrd(n) (((unsigned long)(n)) >> BPCSHIFT)
40: #define ctob(n) (((long)(n)) << BPCSHIFT)
41:
42: #define ctos(x) (((x) + (1<<SG1SHIFT)-1) >> SG1SHIFT)
43: #define ctosrd(x) ((x) >> SG1SHIFT)
44: #define stoc(x) ((x) << SG1SHIFT)
45:
46: /*
47: * These are not put on the stack, but they have slots in the table
48: * global_reg[]. These numbers are the offsets into that table.
49: */
50: #define RCR0 19
51: #define RCR1 20
52: #define RCR2 21
53: #define RCR3 22
54:
55: /*
56: * How many register slots do we recognise?
57: */
58: #define NUM_REG 23
59:
60: /*
61: * Register structure.
62: */
63: typedef union mreg_u {
64: unsigned m_reg[1];
65: unsigned m_int;
66: } MREG;
67:
68: /*
69: * Segmenation prototype.
70: */
71: typedef struct mproto {
72: unsigned mp_csl;
73: unsigned mp_dsl;
74: __caddr_t mp_svb;
75: __caddr_t mp_svl;
76: } MPROTO;
77:
78: /*
79: * Set jump and return structure.
80: */
81: typedef struct menv_s {
82: int me_di;
83: int me_si;
84: int mc_bx;
85: int me_bp;
86: int me_sp;
87: int me_cs;
88: int me_pc;
89: int me_space;
90: } MENV;
91:
92: /*
93: * Context structure.
94: */
95: typedef struct mcon_s {
96: int mc_di;
97: int mc_si;
98: int mc_bx;
99: int mc_bp;
100: int mc_sp;
101: int mc_cs;
102: int mc_pc;
103: int mc_space;
104: } MCON;
105:
106: /*
107: * General register structure.
108: */
109: typedef int MGEN[1];
110:
111: /*
112: * Useful definitions.
113: */
114: #define PIC 0x20 /* 8259 command port */
115: #define PICM 0x21 /* 8259 mask port */
116: #define SPIC 0xA0 /* Slave 8259 command port */
117: #define SPICM 0xA1 /* Slave 8259 mask port */
118: #define MFTTB 0x0100 /* Trace trap bit */
119: #define MFINT 0x0200 /* Interupt enable */
120: #define MUERR 0x0002 /* Location of errno */
121: #define MFCBIT 0x0001 /* Carry bit */
122:
123: #define NUM_IRQ_LEVELS 16 /* counting master & slave PIC's */
124: #define LOWEST_SLAVE_IRQ 8 /* master is 0-7; slave is 8-15 */
125:
126: #if _ENABLE_STREAMS
127:
128: #include <sys/types.h>
129:
130: /*
131: * NIGEL: I have made some small modifications here to allow me to slot in the
132: * extensions necessary to support the DDI/DDK rational interrupt architecture.
133: *
134: * The two macros below are used by setivec () and clrivec () in "i386/md.c" to
135: * set the PIC mask values for the base level. Under the rational scheme, this
136: * also affects some global data which is used by the DDI/DDK spl... ()
137: * functions so they can safely manipulate the PIC mask registers rather than
138: * the CPU global mask bit.
139: */
140:
141: __EXTERN_C_BEGIN__
142:
143: void DDI_BASE_SLAVE_MASK __PROTO ((uchar_t _mask));
144: void DDI_BASE_MASTER_MASK __PROTO ((uchar_t _mask));
145:
146: __EXTERN_C_END__
147:
148: #else /* if ! _ENABLE_STREAMS */
149:
150: #define DDI_BASE_SLAVE_MASK(m) outb (SPICM, m)
151: #define DDI_BASE_MASTER_MASK(m) outb (PICM, m)
152:
153: #endif /* ! _ENABLE_STREAMS */
154:
155: /*
156: * Trap codes.
157: * Passed in the upper 8 bits of
158: * the "id" passed to "trap".
159: */
160: #define SIDIV 0 /* Divide overflow */
161: #define SISST 1 /* Single step */
162: #define SINMI 2 /* NMI (parity) */
163: #define SIBPT 3 /* Breakpoint */
164: #define SIOVF 4 /* Overflow */
165: #define SIBND 5 /* Bound */
166: #define SIOP 6 /* Invalid opcode */
167: #define SIXNP 7 /* Processor extension not available */
168: #define SIDBL 8 /* Double exception */
169: #define SIXS 9 /* Processor extension segment overrun */
170: #define SITS 10 /* Invalid task state segment */
171: #define SINP 11 /* Segment not present */
172: #define SISS 12 /* Stack segment overrun/not present */
173: #define SIGP 13 /* General protection */
174: #define SIPF 14 /* Page Fault */
175: #define SIFP 16 /* Floating Point */
176: #define SISYS 32 /* System call */
177: #define SIRAN 33 /* Random interrupt */
178: #define SIOSYS 34 /* System call */
179: #define SIDEV 64 /* Device interrupt */
180:
181: /*
182: * For accessing high and low words of a long.
183: */
184: struct l {
185: int l_lo;
186: int l_hi;
187: };
188:
189: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.