Annotation of 43BSDReno/share/doc/smm/13.kchanges/vax.t, revision 1.1.1.1

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.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.