|
|
1.1 root 1: .\" Copyright (c) 1986 Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)vax.t 1.6 (Berkeley) 4/11/86
6: .\"
7: .NH
8: Machine specific support
9: .PP
10: The next several sections describe changes to the VAX-specific
11: portion of the kernel whose sources reside in \fB/sys/vax\fP.
12: .NH 2
13: Autoconfiguration
14: .PP
15: The data structures and top level of autoconfiguration
16: have been generalized to support the VAX 8600 and
17: machines whose main I/O busses are not similar to an SBI.
18: The \fIpercpu\fP structure has been broken into three
19: structures.
20: The \fIpercpu\fP structure itself contains only the CPU type,
21: an approximate value for the speed of the CPU,
22: and a pointer to an array of I/O bus descriptions.
23: Each of these, in turn, contain general information about one I/O bus that must
24: be configured and a pointer to the private data for its configuration
25: routine.
26: The third new structure that has been defined
27: describes the SBI and the other interconnects that emulate it.
28: At boot time,
29: \fIconfigure\fP calls \fIprobeio\fP to configure the I/O bus(ses).
30: \fIProbeio\fP looks through the array of bus descriptions,
31: indirecting to the correct routine to configure each bus.
32: For the VAXen currently supported,
33: the main bus is configured by either
34: \fIprobe_Abus\fP (on the 8600 and 8650)
35: or by \fIprobenexi\fP, that is used on anything resembling an SBI.
36: Multiple SBI adaptors on the 8600 are handled by multiple calls
37: to \fIprobenexi\fP.
38: (Although the code has been tested with a second SBI,
39: there were no adaptors installed on the second SBI.)
40: This structure is easily extensible to other architectures
41: using the BI bus, Q bus, or any combination of busses.
42: .PP
43: The CPU speed value is used to scale the DELAY macro
44: so that autoconfiguration of old devices on faster CPU's
45: will continue to work.
46: The units are roughly millions of instructions per second (MIPS),
47: with a value of 1 for the 780,
48: although fractional values are not used.
49: When multiple CPU's share the same CPU type,
50: the largest value for any of them is used.
51: .PP
52: UNIBUS autoconfiguration has been modified to accommodate UNIBUS
53: memory devices correctly.
54: A new routine, \fIubameminit\fP, is used to configure UNIBUS memory
55: before probing other devices,
56: and is also used after a UNIBUS reset to remap these memory areas.
57: The device probe or attach routines may then allocate and hold
58: UNIBUS map registers without interfering with these devices.
59: .NH 2
60: Memory controller support
61: .PP
62: The introduction of the MS780-E memory controller for the VAX 780
63: made it necessary to configure the memory controller(s) on a VAX
64: separately from the CPU.
65: During autoconfiguration, the types of the memory controllers
66: are recorded in an array.
67: Memory error routines that must know the type of controller
68: then use this information rather than the CPU type.
69: The MS780-E controller is listed as two controllers, as each half
70: reports errors independently.
71: Both 1Mb and 4Mb boards using 64K and 256K dRAM chips are supported.
72: .XP Locore.c
73: For \fIlint\fP's sake, \fILocore.c\fP has been updated to include the functions
74: provided by \fIinline\fP and the new functions in \fIlocore.s\fP.
75: .XP autoconf.c
76: Most of the changes to autoconfiguration are described above.
77: Other minor changes:
78: UNIBUS controller probe routines are now passed an additional argument,
79: a pointer to the \fIuba_ctlr\fP structure,
80: and similarly device probe routines are passed a pointer to the \fIuba_device\fP
81: structure.
82: \fIUbaaccess\fP and \fInxaccess\fP were combined into a single routine
83: to map I/O register areas.
84: A logic error was corrected so that swap device sizes that were initialized
85: from information in the machine configuration file
86: are used unmodified.
87: \fIDumplo\fP is set at configuration time according
88: to the sizes of the dump device and memory.
89: .XP conf.c
90: Several new devices have been added and old entries have been deleted.
91: A number of devices incorrectly set unused UNIBUS reset entries
92: to \fInodev\fP; these were changed to \fInulldev\fP.
93: An entry was added for the new error log device.
94: Additional device numbers have been reserved for local use.
95: .XP cons.h
96: New definitions have been added for the 8600 console.
97: .XP "crl.h,crl.c"
98: New files for the VAX 8600 console RL02 (our third RL02 driver!).
99: .XP flp.c
100: It was discovered that not all VAXen that are not 780's are 750's;
101: the console floppy driver for the 780 now checks for cpu == 780,
102: not cpu != 750.
103: An error causing the floppy to be locked in the busy state was corrected.
104: .XP genassym.c
105: Several new structure offsets were needed by the assembly language routines.
106: .XP in_cksum.c
107: It was discovered that the instruction used to clear the carry
108: in the checksum loops did not actually clear carry.
109: As the carry bit was always off when entering the checksum loop,
110: this was never noticed.
111: .XP inline
112: This directory contains the new \fIinline\fP program used to edit
113: the assembly language output by the compiler.
114: .XP locore.s
115: The assembly language support for the kernel has a number of changes,
116: some of which are VAX specific and some of which are needed
117: on all machines.
118: They are simply enumerated here without distinction.
119: .XP
120: The \fIdoadump\fP routine sometimes faulted because it changed the page
121: table entry for the \fIrpb\fP without flushing the translation buffer.
122: In order to reconfigure UNIBUS memory devices again after UNIBUS resets,
123: \fIbadaddr\fP was reimplemented without the need to modify the
124: system control block.
125: The machine check handler catches faults predicted by \fIbadaddr\fP,
126: cleans up and then returns to the error handler.
127: The interrupt vectors have each been modified to count the number
128: of interrupts from their respective devices, so that it is possible
129: to account for software interrupts and UBA interrupts,
130: and to determine which of several similar devices is generating
131: unexpected interrupt loads.
132: The \fIconfig\fP program generates the definitions for the indices
133: into this interrupt count table.
134: Software clock interrupts no longer call timer entries in the dz
135: and dh drivers.
136: The processing of network software interrupts has been reordered
137: so that new interrupts requested during the protocol interrupt routine
138: are likely to be handled before return from the software interrupt.
139: Additional map entries were added to the network buffer and user page
140: table page maps, as both use origin-1 indexing.
141: The memory size limit and the offsets into the coremap are both obtained
142: from \fIcmap.h\fP instead of inline constants.
143: The signal trampoline code is all new and uses the \fIsigreturn\fP
144: system call to reset signal masks and perform the \fIrei\fP to user mode.
145: The initialization code for process 1, \fIicode\fP, was moved to this file
146: to avoid hand assembly; it has been changed to exit instead of looping
147: if \fI/etc/init\fP cannot be executed, and to allow arguments
148: to be passed to \fIinit\fP.
149: The routines that are called with \fIjsb\fP rather than \fIcalls\fP
150: use a new entry macro that allows them to be profiled if profiling
151: is enabled.
152: .XP
153: Several new routines were added to move data from address space to address
154: space a character string at a time; they are \fIcopyinstr\fP,
155: \fIcopyoutstr\fP, and \fIcopystr\fP.
156: \fICopyin\fP and \fIcopyout\fP now receive their arguments
157: in registers.
158: \fISetjmp\fP and \fIlongjmp\fP are now similar to the user-level
159: routines; \fIsetjmp\fP saves the stack and frame pointers and PC only
160: (all implemented in line),
161: and \fIlongjmp\fP unwinds the stack to recover the other registers.
162: This optimizes the common case, \fIsetjmp\fP, and allows the
163: same semantics for register variables as for stack variables.
164: For swaps and alternate returns using \fIu.u_save\fP, however,
165: all registers must be saved as in a context switch, and \fIsavectx\fP
166: is provided for that purpose.
167: .XP
168: Redundant context switches were caused by two bugs in \fIswtch\fP.
169: First, \fIswtch\fP cleared \fIrunrun\fP before entering the idle loop.
170: Once an interrupt caused a \fIwakeup\fP, \fIrunrun\fP would be set,
171: requesting another context switch at system call exit.
172: Also, the use of the VAX AST mechanism caused a similar problem,
173: posting AST's to one process that would then \fIswtch\fP (or might
174: already be in the idle loop), only to catch the AST after being rescheduled
175: and completing its system service.
176: The AST is no longer marked in the process control block and is cancelled
177: during the context switch.
178: The idle loop has been separated from \fIswtch\fP for profiling.
179: .XP machdep.c
180: The \fIstartup\fP code to calculate the core map size and the limit
181: to the buffer cache's virtual memory allocation was corrected
182: and reworked.
183: The number of buffer pages was reduced for larger memories
184: (10% of the first 2 Mb of physical memory is used for buffers,
185: as before, and 5% thereafter).
186: The default number of buffers or buffer pages may be overridden
187: with configuration-file options.
188: If the number of buffers must be reduced to fit the system page table,
189: a warning message is printed.
190: Buffers are allocated after all of the fully dense data structures,
191: allowing the other tables allocated at boot time to be mapped by the identity
192: map once again.
193: The new signal stack call and return mechanisms are implemented here
194: by \fIsendsig\fP and \fIsigreturn\fP; \fIsigcleanup\fP remains for compatibility
195: with 4.2BSD's \fIlongjmp\fP.
196: There are a number of modifications for the VAX 8600, particularly
197: in the machine check and memory error handlers and in the use of the console
198: flags.
199: On the VAX-11/750 more translation-buffer
200: parity faults are considered recoverable.
201: The \fIreboot\fP routine flushes the text cache before initiating
202: the filesystem update, and may wait longer for the update to complete.
203: The time-of-day register is set, as any earlier time adjustments are not
204: reflected there yet.
205: The \fImicrotime\fP function was completed and is now used;
206: it is careful not to allow time to appear to reverse during time corrections.
207: An \fIinitcpu\fP routine was added to enable caches, floating point
208: accelerators, etc.
209: .XP machparam.h
210: The file \fIvax/param.h\fP was renamed to avoid ambiguity
211: when including \fI``param.h''\fP.
212: .XP ns_cksum.c
213: This new file contains the checksum code for the Xerox NS network protocols.
214: .XP pcb.h
215: The \fIaston\fP() and \fIastoff\fP\^() macros no longer set an AST
216: in the process control block (see \fIlocore.s\fP).
217: .XP pte.h
218: The \fIpg_blkno\fP field was increased to 24 bits to correspond
219: with the \fIcmap\fP structure; the \fIpg_fileno\fP field was reduced
220: to a single bit, as it no longer contains a file descriptor.
221: .XP swapgeneric.c
222: \fIDumpdev\fP and \fIargdev\fP are initialized to NODEV,
223: preventing accidents should they be used before configuration completes.
224: DEL is now recognized as an erase character by the kernel \fIgets\fP.
225: .XP tmscp.h
226: A new file which contains definitions for the
227: Tape Mass Storage Control Protocol.
228: .XP trap.c
229: Syscall 63 is no longer reserved by \fIsyscall\fP for out-of-range calls.
230: In order to make \fIwait3\fP restartable, \fIsyscall\fP must not clear
231: the carry bit in the program status longword before beginning a system
232: call, but only after successful completion.
233: .XP tu.c
234: There were several important fixes in the console TU58 driver.
235: .XP vm_machdep.c
236: The \fIchksize\fP routine requires an additional argument,
237: allowing it to check data size and bss growth separately without overflow.
238: .XP vmparam.h
239: The limits to user process virtual memory allow nondefault values
240: to be defined by configuration file options.
241: The definition of DMMAX here now defines only the maximum value;
242: it will be reduced according to the definition of MAXDSIZ.
243: The space allocated to user page tables was increased substantially.
244: The free-memory threshold at which \fIpageout\fP begins
245: was changed to be at most 512K.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.