|
|
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.