Commit Graph

20953 Commits

Author SHA1 Message Date
thorpej cf591e644b Generate dependencies on the VM86 option. 1998-01-15 22:25:52 +00:00
thorpej 6254765e6a Make this compile again after recent config changes. 1998-01-15 22:22:09 +00:00
thorpej 032c433933 Just commit to using MACHINE_NEW_NONCONTIG. 1998-01-15 22:20:15 +00:00
is 632b1123ba struct cfdrivers are emitted by config(8) into ioconf.c, nowadays. Delete
mainbus_cd here.
1998-01-15 21:55:51 +00:00
cgd 10f936ff29 move the 'cd_cd' declaration back up to where it was before
the config changes were made.  Though the nature of the declaration
had to change, there wasn't a reason to change its location.
1998-01-15 19:56:03 +00:00
thorpej 1484fa567d Generate dependencies on the CPU type options (I386_CPU, I486_CPU, ...) 1998-01-15 19:47:36 +00:00
cgd ed81982205 #if some bug workaround code which only needs to be compiled if
ATAPI 'sd's are present.
1998-01-15 18:59:03 +00:00
pk 94072e56f6 Move "async command" state in here. 1998-01-15 16:08:32 +00:00
pk 47505a3b6f Elaborate on "receiver not ready" conditions; we don't need a full reset
in most cases.

Move "async command" state into the softc structure.
1998-01-15 16:07:34 +00:00
kleink e800994db9 Per X/Open CAE Specification, Issue 5, change the type of the member ss_sp of
struct sigstack from `char *' to `void *'.
1998-01-15 14:58:13 +00:00
christos 05d3f8a2e9 PR/4794: Urban Boquist: Linux cdrom ioctls are missing 1998-01-15 14:52:11 +00:00
leo dc8f785187 Make this compile again after the latest config changes. 1998-01-15 13:06:27 +00:00
thorpej 2cfef7a0ec Oops, something snuck in there that shouldn't have... 1998-01-15 07:40:06 +00:00
thorpej 86adfd8033 Switch to MI IDE drivers, add ATAPI devices. 1998-01-15 07:17:19 +00:00
thorpej c60855e116 Switch to the MI IDE drivers. 1998-01-15 07:09:24 +00:00
thorpej f127dfb6f0 Undo the wdc -> awdc mapping kludge. 1998-01-15 07:02:21 +00:00
thorpej 76e4297b91 No longer needed; we use the MI IDE driver now. 1998-01-15 07:01:51 +00:00
thorpej 525b092c2e Get include file paths correct. 1998-01-15 06:15:08 +00:00
thorpej 1f93872e5c Kludge around i/o port overlap w/ the "wdc" driver. 1998-01-15 06:11:55 +00:00
thorpej 28fa7254b3 Define the O_SYNC flag to open(2) per XPG4.2, using the same value as the
historic O_FSYNC flag (the semantics are identical).  Hide the historic
O_FSYNC flag if _POSIX_SOURCE or _XOPEN_SOURCE are defined, and define it to
be O_SYNC.
1998-01-15 02:33:12 +00:00
cgd d6e5187749 add 'sd* at atapibus? drive ?' to all kernel configs already containing
an analogous line for 'cd'.
1998-01-15 02:26:26 +00:00
cgd 24972c51a4 #include a just-added scsipi header. 1998-01-15 02:23:43 +00:00
cgd 3b207eaf83 add support for an ATAPI attachment for 'sd'.
fix 'cd' driver's NCD_SCSI bogosity (was using testing wrong macro!)
clean up in various ways:
* make common atapi_mode_{sense,select}() functions.
* put ATAPI data structures in more sensible headers, split up by
  device type.
* include headers a bit more carefully.
* pass flags to attachment-specific cd functions, and use them.
* get rid of SCSI bits in scsipi_base.h's scsipi_make_xs(), move
  them into the correct place in scsi_base.c.
* fix minor typo in struct name in scsipiconf.h (which was apparently
  never used except in a #define later in the same file).
* use __attribute__ to force 4-byte alignment for xs command store,
  so that architectures trying to bus_space_write_multi_N() (where
  N > 1) that data to a controller won't lose.
* clean up a few comments in typos, and make a few #defines easier to
  understand/maintain.
* rename cd_link.h to cdvar.h (via repository copy).  This is exactly
  what a 'var' file is supposed to be.
1998-01-15 02:21:27 +00:00
cgd 8540a31ee3 kill a couple of unnecessary #ifs 1998-01-15 01:26:13 +00:00
cgd aa872229e1 fix typo in comment that i just added 1998-01-15 00:35:38 +00:00
cgd 4fdd07b4c5 remove 'ata' interface attribute. it now is define in the MI conf/files. 1998-01-14 23:56:23 +00:00
cgd aaede4d8d8 Various cleanups and bug fixes to the wdc/wd code:
* Fix bug in wdc that would overflow ATAPI transfer length.
* Improve wdc probe code so that 'wdc' is probed in if present
  even if there are no drives attached, and so that it works
  properly even if the only device is an ATAPI slave.
* bus_space-ify.
* split the ISA attachment from the wdc driver, and remove
  ISA dependencies from non-ISA files.
* claim that wd and wdc are now machine-independent (probably not
  completely true, but mostly so; they at least work on arm32 and
  i386).
* Various other minor fixups and cleanups, some of which were pointed
  out by Kazuki Sakamoto.
1998-01-14 23:41:59 +00:00
cgd ad141a69a7 Shuffle wd/wdc driver files around (via repository copies). wdc
now lives in dev/ic, wd now lives in dev/ata.  there's now a 'ata'
interface attribute defined in conf/files, but wdc can't go there
yet because some ports still use private versions based on the old
ISA version.
1998-01-14 23:36:30 +00:00
thorpej 561056f2e2 Grab a fix from 4.4BSD-Lite2: open(2) with O_FSYNC and MNT_SYNCHRONOUS
had not effect.  Fix: check for either of these flags in vn_write(),
and pass IO_SYNC down if they're set.
1998-01-14 22:08:44 +00:00
thorpej de0a03db2e As pointed out by Chris Demetriou, I forgot to bump the NetBSD constant
when going to 1.3B.  Let's hope we don't go to 1.3C in Februrary...
1998-01-14 22:05:52 +00:00
drochner 09354842c5 from Dave Burgess per PR4620:
-base address 0x308 is supported by more Wangtek QIC tapes than 0x300
-Ultrastor ISA SCSI adapters can't be set to base address 0x334
  (changed to 0x340)
1998-01-14 15:27:43 +00:00
pk 866632416e Fix a border case when committing physical pages to the VM system;
rename some variables in the process for clarity.
1998-01-14 14:49:29 +00:00
drochner 6dbf9b31d3 "device" structure is not used in probe anymore 1998-01-14 12:17:14 +00:00
drochner 4429cca488 make it compile without BROKEN_INDIRECT_CONFIG 1998-01-14 12:14:41 +00:00
cjs 61826c3946 Make INSTALL a fully-loaded kernel (for booting from network or CD), and
INSTALL-FLOPPY a stripped-down version to fit on a floppy.
1998-01-13 23:49:31 +00:00
pk 1842a317c3 Fix parenthesis inbalance. 1998-01-13 20:53:38 +00:00
pk 1195f3d8a9 Add fkbyte(), which is like fubyte() but for kernel addresses.
Only used at this moment to work around unexplained transient bus
errors when reading the VME interrupt vector in bus control space.
1998-01-13 20:51:01 +00:00
drochner 13463145fe make it compile without BROKEN_INDIRECT_CONFIG 1998-01-13 19:33:28 +00:00
scottr 4c69a8b2ea Update for bus.h changes. 1998-01-13 19:15:32 +00:00
scottr 5b4a54759d Conform to spec, and make bus_space_copy() handle overlapping copies.
From Jason Thorpe.
1998-01-13 18:32:15 +00:00
mrg 057795048f this is the i386 MD portion of the MACHINE_NEW_NONCONTIG code, as
written by chuck cranor.  thanks to mycroft for helping me find the
one little line of code i accidentally deleted while merging it.

this is not enabled by default.  `options MACHINE_NEW_NONCONTIG'
will use this code.  eventually, this should go into <machine/vmparam.h>
insteaed of MACHINE_NONCONTIG.
1998-01-13 12:52:16 +00:00
thorpej ebb84c5792 Fix a typo in previous. 1998-01-13 06:13:29 +00:00
sakamoto 7b093957d3 interrupt name change "softtty" -> "softserial" 1998-01-13 03:52:49 +00:00
enami 99a9d7a632 Don't include <machine/pio.h>. Include <machine/bus.h> explicitly. 1998-01-13 03:34:32 +00:00
enami 4b62270f85 Don't include <machine/pio.h> and <dev/isa/isavar.h>. Instead,
include <machine/bus.h> directly.
1998-01-13 03:31:42 +00:00
thorpej df7ad322f2 Nuke spurious semicolon, from Konrad Schroder <perseant@hhhh.org>. 1998-01-13 03:30:39 +00:00
thorpej 1e2c4ea425 Update for changes to config. 1998-01-13 02:26:06 +00:00
thorpej 687449a900 Update for changes to config. 1998-01-13 02:09:58 +00:00
pk a8dda8092d Commit to MACHINE_NEW_NONCONFIG. 1998-01-13 00:58:56 +00:00
pk 418fd96bd5 Turn NEW_NONCONTIG page upload code into a routine shared by sun4/4c
and sun4m pmap_bootstrap()s, simplify it, and make it not loose the
couple of slack pages we painstakingly remembered in pmap_bootstrap.
1998-01-13 00:55:15 +00:00
scottr 3b7ef50f8e Missed a change for the updated config(8). 1998-01-12 23:56:26 +00:00
scottr ecc55fb707 Consolidate NFS_BOOT_* options into opt_nfs_boot.h 1998-01-12 21:27:09 +00:00
thorpej c4c8934a37 Revert last change. 1998-01-12 21:21:45 +00:00
thorpej 8d1f838fd3 Significant kernel interface change: bump to 1.3B. 1998-01-12 21:16:23 +00:00
thorpej f32f947061 Update for changes to config. 1998-01-12 20:52:29 +00:00
drochner 72852bbaec make it compile without BROKEN_INDIRECT_CONFIG 1998-01-12 20:48:17 +00:00
thorpej 2565ff444a Update for config changes. 1998-01-12 20:35:04 +00:00
thorpej 1adb4489a6 Update for changes to config. 1998-01-12 20:23:38 +00:00
thorpej 0475e09198 Update for changes to config. 1998-01-12 20:04:24 +00:00
thorpej ac71bb86e2 This file was apparently accidentally ressurected. 1998-01-12 19:59:00 +00:00
thorpej 2d53e59a47 Update for changes to config. 1998-01-12 19:51:03 +00:00
thorpej 36760d9d94 Update for changes to config. 1998-01-12 18:59:04 +00:00
thorpej 871cf5e7ce Update for changes to config. 1998-01-12 18:30:41 +00:00
thorpej 1ac3d5db35 Put SPU options in opt_spuconf.h, add device classes. 1998-01-12 18:29:48 +00:00
thorpej cfdba7eac6 Update for changes to config. 1998-01-12 18:18:01 +00:00
thorpej 2d73f5ea18 Update for changes to config. 1998-01-12 18:03:58 +00:00
thorpej 0b6e56ec02 Adjust for changes to config. 1998-01-12 10:39:01 +00:00
thorpej 5419debcb7 Adjust for config changes. 1998-01-12 10:21:02 +00:00
thorpej 8742b48c3f Adjust for changes to config. 1998-01-12 09:54:57 +00:00
thorpej 19feaef2b4 Adjust for changes in config. 1998-01-12 09:51:28 +00:00
thorpej 93f26b5f40 Adjust for changes to config. 1998-01-12 09:49:10 +00:00
thorpej 06ce220790 Update for config changes. 1998-01-12 09:39:57 +00:00
thorpej 1934051221 Update for changes to config. 1998-01-12 09:36:53 +00:00
thorpej d02585cf36 Update for config changes. 1998-01-12 09:33:30 +00:00
thorpej 925ce7706e ast, boca, and rtfps are not ttys, but rather "busses". Similarly,
the lpt doesn't export a tty-like interface, so it's dull, too.
1998-01-12 09:29:37 +00:00
thorpej 095c4c092d Adjust for config changes. 1998-01-12 09:23:08 +00:00
thorpej 9c183e53cb Slight change to previous. 1998-01-12 08:57:20 +00:00
thorpej b731c12641 Adjust for config changes. 1998-01-12 08:51:09 +00:00
thorpej c574630ead Add device classes. 1998-01-12 08:48:28 +00:00
thorpej 43ba4e27bd Adjust for config changes. 1998-01-12 08:44:08 +00:00
thorpej 2ceadba464 Add device classes. 1998-01-12 08:21:30 +00:00
thorpej d58acb2a64 Pull in ioconf.h if _KERNEL and ! _LKM. 1998-01-12 08:04:55 +00:00
thorpej c5f6a2dbb3 Add (commented out) COMPAT_13 1998-01-12 07:09:24 +00:00
thorpej 83c4c24058 Add "non-volatile" memory cluster usage bit. 1998-01-12 07:07:19 +00:00
sakamoto 1f703bce45 Sync w/ dev/isa/wdc.c 1998-01-12 06:08:41 +00:00
sakamoto 38efb3ac5f add The Be interrupt controller setmask function(bebox_intr_mask).
change SINT_TTY to SINT_SERIAL
       splsofttty to splsoftserial, and so on.
1998-01-12 04:57:10 +00:00
scottr 54ea074777 Use option header file for MROUTING 1998-01-12 03:02:48 +00:00
scottr 3cdcd5e1c7 Use option header file for TCP_COMPAT_42 1998-01-12 03:00:42 +00:00
scottr 243db3d614 defopt MROUTING and TCP_COMPAT_42 1998-01-12 02:58:58 +00:00
pk 54719a53a3 More comments and general re-organization (group by device class) provided
by Todd Vierling.
1998-01-11 23:32:55 +00:00
thorpej 1ef77e68aa Oops, fix a printf format. 1998-01-11 23:16:04 +00:00
marc 4a03c84731 change the initial loop condition not to round up if the iobase starts
<= 0x70
1998-01-11 22:22:12 +00:00
thorpej f522bda243 Convert the hp300 LANCE driver to use bus.h 1998-01-11 21:57:02 +00:00
thorpej 5021043b13 ia->ia_addr is of type `bus_addr_t'. 1998-01-11 21:56:13 +00:00
thorpej 582d47fcf0 ia->ia_addr is a physical address, not a kernel virtual address. 1998-01-11 21:55:08 +00:00
thorpej 1687835b3e Pass down bus space tags to children, and use types appropriate for
bus.h.
1998-01-11 21:53:04 +00:00
thorpej 774d66001e Add bus_space.c 1998-01-11 21:42:44 +00:00
thorpej 77706becd7 Initial implementation of bus_space functions for hp300. Some cleanup
of this will be possible once some pmap changes are made.
1998-01-11 21:40:52 +00:00
thorpej b69358e4ca bus.h for the hp300 port. Only supports bus_space for now. 1998-01-11 21:26:04 +00:00
scottr 448859f0c9 Add NFS_BOOT_DHCP option, and compile nfs_bootdhcp.c if either
NFS_BOOT_BOOTP or NFS_BOOT_DHCP are specified.
1998-01-11 05:57:45 +00:00
scottr afc2a8933a Make NFS_BOOT_DHCP work as expected. 1998-01-11 05:55:40 +00:00
tv 24ca7df4ba don't run minor() macro twice in ISDEV...() macro definitions 1998-01-10 14:07:25 +00:00
thorpej e76d5a2fe1 Oops, don't need vm_page_physget() if PMAP_STEAL_MEMORY. 1998-01-10 03:02:58 +00:00
pk 69487f1532 * Fix a train-load of bugs, mostly present in one of these categories:
- "out of resource" errors cause receive buffer chain corruption
	- resets can confuse the interrupt handler
	- multi-cast setup causes receive buffer chain corruption
	- shared memory setup incomplete

* Enhance effiency by avoiding unnecessary shared memory access,
  improved handling of receive frame & buffer descriptors, and
  introducing an `asynchronous' option when issuing 82586 commands.

* Exclusively use offsets relative to the bus handle representing the shared
  memory area to formulate accesses to the chip's data-structures.  The
  front-ends provide glue functions that cater to the chip's endian-
  sensitivity, to perform the actual device access (note: single-byte
  accesses are done here using `bus_space_{read,write}_1()').
  This concludes the transformation into a bus-independent driver module.
1998-01-10 02:35:31 +00:00
pk f041e52c7e * Rename a bunch of chip definitions for consistency.
* Abolish C structures to access chip data-structures; instead use macros
  that take indices and offsets relative to the bus handle representing
  the chip's resources.

* Include the old version of this file wholesale, until all drivers
  have been updated to use the MI 82586 code.
1998-01-10 01:46:32 +00:00
perry aceff90d16 add yet another PCI brige -- from pr 4780 from Nathan J. Williams 1998-01-10 01:15:14 +00:00
fvdl 83ef3d4928 Switch off CPU-PCI write posting for the Saturn chipset; it is known
to cause problems with PCI busmasters.
1998-01-09 22:34:58 +00:00
perry 6f57e5c573 multiple include protect machine/limits.h, fixes pr 4473 (from Mika Nystrom) 1998-01-09 22:23:44 +00:00
thorpej 1256fac296 Rearrange alpha_init() somewhat, setting the page size much earlier, and
keeping track of where the kernel lives in K0SEG.  Place early data
structure allocation into an allocsys() function, like other ports, so
that it can be used to first calculate the amount of memory needed
for those data structures.
1998-01-09 21:34:47 +00:00
mycroft 59ea23516a Increase delays to the required 7us. 1998-01-09 21:28:32 +00:00
mycroft b0cf8e166d Update copyright. 1998-01-09 21:16:36 +00:00
mycroft 1434d2e50d Map the I/O region correctly, but reading its address from the EISA config
space.
1998-01-09 20:55:17 +00:00
thorpej bb4988dca2 If MACHINE_NEW_NONCONTIG is defined, activate the pmap_steal_memory()
interface.
1998-01-09 19:13:09 +00:00
thorpej 8947029c63 Make this compile in light of recent socket queue data structure change.
Pointed out by Matthias Drochner.
1998-01-09 18:31:50 +00:00
drochner 408be2261c Compile in BOOTP support for diskless boot. 1998-01-09 17:25:30 +00:00
drochner 35718a7622 Use of BOOTP or BOOTPARAM can be conntrolled by config option now. 1998-01-09 17:21:10 +00:00
drochner 9c3e23d351 Compile in BOOTP support for diskless boot. 1998-01-09 17:10:16 +00:00
drochner 874db3d0e0 Selection of network configuration method for diskless boot can be
controlled by config options now. Remove setting of nfs_boot_rfc951,
it is set by default if "option NFS_BOOT_BOOTP" is defined.
1998-01-09 17:06:35 +00:00
drochner 6757ab1b65 Remove conditional setting of "nfs_boot_rfc951" (introduced in previous
change). It's not needed anymore.
1998-01-09 16:01:27 +00:00
drochner 5b055c9032 enable diskless boot with BOOTP and BOOTPARAM configuration 1998-01-09 15:18:50 +00:00
drochner b5bcdb1107 Conditionalize call to RARP, check interface type.
(This file can now be included even if no ARP capable interfaces are
defined.)
1998-01-09 15:16:55 +00:00
drochner 2179b6488a Use interface type to select "hardware type" in bootp header. 1998-01-09 15:13:44 +00:00
drochner 9e7604474f Use new options "NFS_BOOT_BOOTP" and "NFS_BOOT_BOOTPARAM" for parts
conditional on a particular configuration method.
The global flags "nfs_boot_rfc951" and "nfs_boot_bootparam" control
independantly if the functions are actually called. (Previous meaning
of "nfs_boot_rfc951" was "either-or".)
1998-01-09 15:10:37 +00:00
drochner dfc3f18cd2 cleanup of diskless NFS boot code:
2 new options, "NFS_BOOT_BOOTP" and "NFS_BOOT_BOOTPARAM", control whether
the corresponding code is included.
1998-01-09 15:03:52 +00:00
thorpej 51902c1094 In vm_page_physload(), check page_shift not cnt.v_page_size for
having been initialized.
1998-01-09 08:50:00 +00:00
thorpej e47378c640 - pmap_collect_pv() is broken; #ifdef it out (it's not currently ever
called anyway, but now at least the reason is documented).
- rearrange a few things to make it easier to add support for non-contigous
  physical memory.
1998-01-09 08:27:09 +00:00
thorpej b115c27722 Get rid of some old cruft. 1998-01-09 08:18:22 +00:00
perry 3fe138c146 RCS Id Police. 1998-01-09 08:03:16 +00:00
scottr 867cdfc734 Another update from John: if we're polling, e.g. in ddb, pass the
keystroke to the upper half directly.
1998-01-09 06:59:29 +00:00
thorpej 4deb927ee6 Regen. 1998-01-09 06:59:27 +00:00
thorpej 2f3e61a54a Put RCS IDs into generated files, in the correct place. 1998-01-09 06:59:10 +00:00
thorpej e41a79ff38 Regen. 1998-01-09 06:58:04 +00:00
thorpej bd5df8e610 Put RCS IDs into generated files, in the correct place. 1998-01-09 06:57:44 +00:00
thorpej 884cc096ca Regen. 1998-01-09 06:56:47 +00:00
thorpej 8735ce36ca Put RCS IDs into generated files, in the correct place. 1998-01-09 06:56:23 +00:00
thorpej e21b3a4cdb Regen. 1998-01-09 06:54:56 +00:00
thorpej d41a505027 Regen. 1998-01-09 06:54:54 +00:00
thorpej d1ad0bc624 Put RCS IDs into generated files, in the correct place. 1998-01-09 06:54:25 +00:00
thorpej 5170264d4e Gather pv_table and pmap_attributes things togther, and macro'ize
access to them a little better.

Also, improve the performance of pmap_is_{referenced,modified}() and
pmap_clear_{reference,modify}() somewhat.
1998-01-09 06:54:17 +00:00
thorpej 12b9ab0fd5 Regen. 1998-01-09 06:46:47 +00:00
thorpej 9b7afe221e Put RCS IDs into the generated files, in the correct place. 1998-01-09 06:46:26 +00:00
thorpej 15ed345b3b Regen. 1998-01-09 06:43:27 +00:00
thorpej c5a2e825a0 Regen. 1998-01-09 06:41:17 +00:00
thorpej b59d427988 Add RCS IDs to generated files, in correct place. 1998-01-09 06:40:43 +00:00
thorpej 14807c2914 Use avail_start/avail_end. 1998-01-09 06:37:04 +00:00
thorpej f9b6954f55 Call vm_set_page_size() after initializing PAGE_SIZE. 1998-01-09 06:35:17 +00:00
thorpej 80fff795f9 Regen. 1998-01-09 06:19:02 +00:00
thorpej 95b0f526ca Oops, thinko 1998-01-09 06:17:51 +00:00
thorpej 9a4eec1ed1 Regen. 1998-01-09 06:14:57 +00:00
thorpej d92ba4e07c Regen. 1998-01-09 06:10:55 +00:00
thorpej 355cc817cb Regen. 1998-01-09 06:09:55 +00:00
thorpej 1bc72bcfa6 Regen. 1998-01-09 06:09:54 +00:00
thorpej 1a49aac581 Regen. 1998-01-09 06:09:17 +00:00
thorpej f35d097c86 Put RCS IDs in generated files, in the right place. 1998-01-09 06:07:26 +00:00
thorpej 4001cf8069 In vm_mem_init(), don't test for cnt.v_page_size being == 0. It is perfectly
legitimate for this to be set if vm_set_page_size() hasn't been called (it's
how the page size is communicated to vm_set_page_size()).  Instead, test
for page_shift == 0; this is one of the values that vm_set_page_size()
initializes.
1998-01-09 06:00:50 +00:00
mrg aa39c43bc9 call vm_set_page_size(). 1998-01-09 04:37:56 +00:00
thorpej 85d56961e5 Update a comment relative to the vm_bootstrap_steal_memory() change, and
don't include pmap_free_pages() or pmap_next_page() in the new non-contig
case.
1998-01-08 23:48:16 +00:00
thorpej 4cb36c3346 Update a comment to reflect the vm_bootstrap_steal_memory() change, and
while I'm here, note which two functions will no longer exist when
new non-contig code is done for this pmap.
1998-01-08 23:47:07 +00:00
thorpej 54f8b4bf57 In the new non-contig case, redefine pmap_steal_memory() as an alternative
to vm_bootstrap_steal_memory(), since we may need to steal memory from
a direct-mapped segment at this early stage of the game (on e.g. MIPS
and Alpha).

This interface is activated by defining PMAP_STEAL_MEMORY in <machine/pmap.h>.
Otherwise, the pmap_virtual_space() prototype is in-scope for use by
vm_bootstrap_steal_memory().
1998-01-08 23:28:04 +00:00
thorpej 15efce41a3 Zorch pmap_startup() prototype. It was never implemented in machine-dependent
code, and is inlined in the MACHINE_NONCONTIG case of vm_page_bootstrap() now.
1998-01-08 23:13:05 +00:00
thorpej 589a1e440e Clean up and consolidate the old non-contig bootstrap functions, and
rename pmap_steal_memory() to vm_bootstrap_steal_memory().
1998-01-08 23:03:24 +00:00
lukem c0e8ee54e9 * start from the top of the given ephemeral range and work down;
results in reserved ephemeral ports starting at the top (as per
  current practice), and shouldn't have a negative effect on normal
  ephemeral ports...
* initialise inpt_lastlow in in_pcbinit
1998-01-08 11:56:50 +00:00
mrg c599e7d439 add new version of non contiguous memory code, written by chuck cranor,
called "MACHINE_NEW_NONCONGIG".  this is required for UVM, the new VM
system (also written by chuck) that is coming soon.  adds new functions:
	vm_page_physload() -- tell the VM system about an area of memory.
	vm_physseg_find() -- returns index in vm_physmem array that this
		address is in.
and several new versions of old functions/macros defined in vm_page.h.


this is the sparc portion.
1998-01-08 11:39:30 +00:00
mrg a20d56e92e add new version of non contiguous memory code, written by chuck cranor,
called "MACHINE_NEW_NONCONGIG".  this is required for UVM, the new VM
system (also written by chuck) that is coming soon.  adds new functions:
	vm_page_physload() -- tell the VM system about an area of memory.
	vm_physseg_find() -- returns index in vm_physmem array that this
		address is in.
and several new versions of old functions/macros defined in vm_page.h.

this is the MI portion.  sparc, and then later i386 portions to come.
all other ports need to change to this ASAP!  (alpha is already being
worked on)
1998-01-08 11:36:16 +00:00
mrg 0876a69653 some KNF. 1998-01-08 11:03:13 +00:00
mrg 7069ab9961 don't call fb_unblank if NFB < 0 1998-01-08 10:56:36 +00:00
mrg 002fbe8721 do not use fb_unblank unless NFB > 0 1998-01-08 01:13:58 +00:00
thorpej 655a55141c Regen: Back out RCS ID related changes. 1998-01-08 01:07:24 +00:00
thorpej 5713d318b8 Back out RCS ID related changes. 1998-01-08 01:06:50 +00:00
thorpej db8d7d755a Regen: Back out RCS ID related changes. 1998-01-08 01:05:10 +00:00
thorpej af0fb8a65a Back out RCS ID related changes. 1998-01-08 01:04:44 +00:00
thorpej c4a3ed1697 Regen: Back out RCS ID related changes. 1998-01-08 01:02:05 +00:00
thorpej ddb3a0e478 Back out RCS ID related changes. 1998-01-08 01:01:27 +00:00
thorpej 22aef93dcd Regen: back out RCS ID related changes. 1998-01-08 00:36:12 +00:00
thorpej b0a69d357f Back out RCS ID related changes. 1998-01-08 00:35:35 +00:00
thorpej 106bb71744 Regen: back out RCS ID related changes. 1998-01-08 00:33:49 +00:00
thorpej eac46118ba Back out RCS ID related changes. 1998-01-08 00:33:33 +00:00
lukem 1a63d90320 add missing ; ... 1998-01-08 00:32:39 +00:00
thorpej 1b2dbc7a0e Regen: back out RCS ID related changes. 1998-01-08 00:32:06 +00:00
thorpej b0ecfb4210 Back out RCD ID related changes. 1998-01-08 00:31:23 +00:00
thorpej 0068dec705 Regen: back out RCD ID related changes. 1998-01-08 00:27:16 +00:00
thorpej 585f0dec73 Regen: back out RCD ID related changes. 1998-01-08 00:17:11 +00:00
thorpej d76d905b2f Back out RCS ID related changes. 1998-01-08 00:16:25 +00:00
thorpej cbf3cc6bb8 Make insertion and removal of sockets from the partial and incoming
connections queues O(C) rather than O(N).
1998-01-07 23:47:08 +00:00
thorpej cc22126721 Implement passing credentials as ancillary data on Unix domain sockets,
enabled with the LOCAL_CREDS socket option on the listener.  Semantics are
similar to BSD/OS's:
- Creds are available with first data on SOCK_STREAM, and with every datagram
  on SOCK_DGRAM.
- It is not possible to forge credentials.

Different in that:
- Different credential data structure (ours does not rely on the format
  of internal kernel data structures, and does not pass the login name).
- We can pass creds and file descriptors at the same time (this does not
  work in BSD/OS).

Luke Mewburn <lukem@netbsd.org> gets credit for inspiring me to implement
this.  :-)
1998-01-07 22:57:09 +00:00
lukem c80b4400e5 add the following, derived from FreeBSD:
* IP_PORTRANGE socket option, which controls how the ephemeral ports
  are allocated. it takes the following settings:
	IP_PORTRANGE_DEFAULT	use anonportmin (49152) -> anonportmax (65535)
	IP_PORTRANGE_HIGH	as IP_PORTRANGE_DEFAULT (retained for FreeBSD
				compat reasons, where these are separate)
	IP_PORTRANGE_LOW	use 600 -> 1023. only works if uid==0.
* in_pcb flag INP_ANONPORT. set if port was allocated ephmerally
1998-01-07 22:51:22 +00:00
thorpej cf89ccf13e Add uipc_ctloutput(). 1998-01-07 22:50:42 +00:00
thorpej ba2c7e8ca0 Add flags to the unpcb, and define the "want credentials" flag. 1998-01-07 22:49:47 +00:00
thorpej e7a511e0c1 Define the LOCAL_CREDS socket option, and pass a proc * to unp_output(). 1998-01-07 22:49:12 +00:00
thorpej 2731959046 Prototype uipc_ctloutput(). 1998-01-07 22:47:49 +00:00
thorpej 84741f2538 Add the sockcred structure and related definitions, and the SCM_CREDS
control message type.
1998-01-07 22:46:26 +00:00
is 5d5c1cd59e - avoid system stack underflow when calling sigreturn via trap #0
- make sure all sigreturn error conditions are reported to the caller,
  instead of the place jumped to.
This is the bugfix part of pr 4628 by ITOH Yasufumi.
The performance optimization part will be handled seperately, after evaluating
its implications.
Testing on 68040 and removing the performance change from the proposed patch
by scottr. Half of the Amiga machdep.c change had to be done manually by me,
as the patchfile didn't apply cleanly.
XXX Yes, Amiga should be changed to use the common sig_machdep.c instead.
XXX Really soon now. I promise.
1998-01-07 22:46:00 +00:00
mikel c0d8293951 fix some typos in error messages & comments 1998-01-07 08:47:54 +00:00
scottr 4567c69fea Update from John Wittkoski: the Color Classic and Color Classic II
have Cuda hardware, not IIsi-based.
1998-01-07 07:33:36 +00:00
thorpej b981fc4d34 Fix bug in recvit() that would cause recvmsg() to only receive one
control message, even if there were multiple control messages on
the queue.  From Jean-Luc Richier <Jean-Luc.Richier@imag.fr>, in
bug report kern/4700.
1998-01-07 05:49:25 +00:00
thorpej e918c058f1 Fix passing of multiple file descriptors (was broken when code was made
64-bit safe).
1998-01-07 04:03:38 +00:00
thorpej 974b59d07c Happy new year! 1998-01-07 00:41:43 +00:00
thorpej 052b639ac1 Clean up the forking of init and the pagedaemon slightly: call fork1()
directly (which provides a pointer to the new process).
1998-01-06 21:18:00 +00:00
thorpej 07216d15fc Allow retval to be NULL, filling it in only if it was passed. 1998-01-06 21:15:41 +00:00
is d002f566b3 Support 68060 (and, for the Amiga, even 68040 buserr frames) in the sendsig()
and, indirectly, sigreturn() functions.
XXX The Amiga should be switched to using sig_machdep.c instead.
1998-01-06 20:50:22 +00:00
bouyer d8d77f77d6 Add a few quirk entries from OpenBSD. 1998-01-06 17:03:15 +00:00
thorpej 6ac24f05df Garbage-collect VM_PMAP. 1998-01-06 08:46:11 +00:00
thorpej 2317f9064e Garbage-collect pm_stchanged. 1998-01-06 08:40:50 +00:00
thorpej d8ee45898e Garbage-collect __VM_PMAP_HACK. 1998-01-06 08:36:23 +00:00
thorpej 0e5cf40b1f Always include pmap_pinit(), since it is a defined pmap interface
function (thought, we might revisit that later).  Just call pmap_pinit()
in pmap_create(), instead of inlining what pmap_pinit() does.

Also, g/c a TAILQ_FIRST() macro that is now defined in <sys/queue.h>
1998-01-06 08:27:05 +00:00
thorpej a26db50632 Don't need __VM_PMAP_HACK anymore. 1998-01-06 08:14:14 +00:00
thorpej 4044eccd3f Don't use vm_pmap; use vm_map.pmap instead. 1998-01-06 08:13:08 +00:00
thorpej c2768af3d4 Garbage-collect cpu_set_init_frame(); it hasn't been needed for some time
now.
1998-01-06 08:06:45 +00:00
thorpej 07f835de1f Garbage-collect PMAP_ACTIVATE() call here; it's no longer necessary. 1998-01-06 07:49:36 +00:00
thorpej 3e7eb6c80a Garbage-collect pm_pdchanged; it's not used by anything. 1998-01-06 07:16:06 +00:00
thorpej 61567b54de Garbage-collect pm_stchanged; it's not used by anything. 1998-01-06 07:02:58 +00:00
thorpej d11b109f2b Garbage-collect use of the PCB's copy of the user segment table pointer. 1998-01-06 06:51:40 +00:00
thorpej ab9b250a37 The user segment table pointer is no longer kept here. Change it to
a spare field.

XXX Should be changed to use generic m68k PCB!
1998-01-06 06:47:04 +00:00
thorpej 8cbc5caabb The user segment table pointer is no longer kept here. Change it to
a spare field.
1998-01-06 06:46:05 +00:00
perry 8a98e23a48 RCSID Police. 1998-01-06 04:55:52 +00:00
perry 2ec6474b31 RCSID Police. 1998-01-06 04:44:59 +00:00
jtk fe87ac4104 fix for changes in bioscall structure and include files 1998-01-06 00:35:42 +00:00
thorpej a8f80ad4fd Fix a bogosity apparently inherited from when the Utah 4.3BSD code base
was converted to use Mach VM for Net2/4.4BSD.  The user segment table
pointer was originally stored in the PCB.  When Mach VM came along,
however, it was also stored in the pmap, and loaded into the PCB in
pmap_activate().  pmap_activate() would then note that the PCB's USTP
was now in sync with the pmap's USTP, and the low-level context switch
code would use the value from the PCB.

However, pmap_activate() would also load the hardware MMU context if
the pmap was the current pmap (or, in the case where pmaps can be shared,
such as in NetBSD, if the proc was the current proc).  The low-level
context switch code would then reload the hardware _again_ using the
USTP from the PCB.

However, the optimization of not calling pmap_activate() if "stchanged"
was false ended up causing some processes to use stale USTP values from
the PCB when the low-level context switch code reloaded the hardware!
This was noticed by using a real vfork(2) (which worked for some time
before failing, surprisingly!)

Since I'm hard pressed to find any real optimization here (since the
hardware was always reloaded once, sometimes twice!), the code now always
calls pmap_activate(), which uses the correct USTP value (the one in the
pmap).  The PCB's USTP is now ignored, and should eventually be g/c'd.

Another optimization can actually be performed, and I have added a comment
describing what it is, but have not yet implemented it.

Also note that most of the loadustp() functions where actually incomplete.
This has been corrected.  These functions should probably be split up into
MMU-specific operations, and called indirectly, rather than doing constant
run-time decision making based on values that will never change during the
course of a boot's lifetime.
1998-01-05 23:16:21 +00:00
perry 3625dbcd48 RCSID Police. 1998-01-05 21:34:56 +00:00
perry 5646f55116 make script insert RCS ids into generated files 1998-01-05 21:28:21 +00:00
perry 086015d681 RCSID Police. 1998-01-05 21:13:51 +00:00
perry e464358f5f make script insert RCS ids into generated files 1998-01-05 21:12:34 +00:00
perry 49ad493e50 RCSID Police. 1998-01-05 21:11:15 +00:00
perry 489c2f7e06 make script insert RCS ids into generated files 1998-01-05 21:10:18 +00:00
perry b46484bb8a RCSID Police. 1998-01-05 20:51:25 +00:00
perry 24920eefb1 RCSID Police. 1998-01-05 19:40:40 +00:00
perry 736c62507d regened with RCSIDs in place 1998-01-05 19:38:41 +00:00
perry e6fe83471e make script insert RCS ids into generated files 1998-01-05 19:37:08 +00:00
perry 5e35a0595e regened with RCSIDs in place 1998-01-05 19:30:30 +00:00
perry 5e96ab4c0a make script insert RCS ids into generated files 1998-01-05 19:28:16 +00:00
perry c915c7718d regened with RCSIDs in place 1998-01-05 19:25:06 +00:00
perry 127f6582ff make script insert RCS ids into generated files 1998-01-05 19:24:28 +00:00
perry 1a80fd799d RCSID Police. 1998-01-05 19:19:41 +00:00
perry 3a47434df3 regened with RCSIDs in place 1998-01-05 19:14:39 +00:00
perry 02e9346e57 fix RCS ids insertion so it really works 1998-01-05 19:13:04 +00:00
perry 9b0894473d make script insert RCS ids into generated files 1998-01-05 18:45:02 +00:00
perry 36bd5a5407 regened with RCSIDs in place 1998-01-05 18:23:00 +00:00
perry 8309b37a61 ugh. escape rcs tags so that the script doesn't get messed up. 1998-01-05 18:19:35 +00:00
perry 4dc846816b put RCS ids in the output files. Not essential, but useful. 1998-01-05 18:09:44 +00:00
perry a69b5af889 regened with RCSID 1998-01-05 18:06:27 +00:00
perry 3c47900572 RCSID Police. 1998-01-05 17:51:27 +00:00
thorpej e5e283e02d Finishing merging 4.4BSD-Lite2 netinet. At this point, the only changes
left were SCCS IDs and Copyright dates.
1998-01-05 10:31:44 +00:00
lukem 1f8f74b669 enhance ephemeral port allocation code:
* support sysctl net.inet.ip.anonportmin (lowest ephemeral port)
  and net.inet.ip.anonportmax (highest ephemeral port).
  these can't be set to >65535, < IPPORT_RESERVED (unless IPNOPRIVPORTS
  is defined), and anonportmin has to be < anonportmax.
* use a cleaner way of only cycling through the available set once;
  this will be useful for when a random allocation scheme is used
* define IPPORT_ANON{MIN,MAX} instead of IPPORT_USER{LOW,HIGH}
1998-01-05 09:52:02 +00:00
thorpej 2e85747e9e From 4.4BSD-Lite2 (noted by Frank van der Linden):
so_linger is used as an argument to tsleep(), so was stuffed with
clockticks for the TCP linger time.  However, so_linger is set directly from
l_linger if the linger time is specified, and l_linger is seconds (although
this is not currently documented anywhere).  Fix this to set the TCP
linger time in seconds, and multiply so_linger by hz when tsleep() is
called to actually perform the linger.
1998-01-05 09:12:29 +00:00
perry fff05a68ab RCSID Police. 1998-01-05 07:31:05 +00:00
perry 015e898c02 RCSID Police. 1998-01-05 07:02:46 +00:00
perry 3e0fad1868 RCSID Police. 1998-01-05 06:28:44 +00:00
thorpej 010625fefd Implement access methods:
lists: LIST_FIRST(), LIST_NEXT()

simple queues: SIMPLEQ_FIRST(), SIMPLEQ_NEXT()

tail queues: TAILQ_FIRST(), TAILQ_NEXT()

circular queues: CIRCLEQ_FIRST(), CIRCLEQ_LAST(), CIRCLEQ_NEXT(),
CIRCLEQ_PREV()
1998-01-05 06:27:42 +00:00
thorpej ce340c6ca5 Also pass fork1() a struct proc **, in case the caller wants a pointer
to the newly created process.
1998-01-05 05:16:26 +00:00
perry d38a11e380 Fix imported RCS keyword slightly 1998-01-05 05:08:43 +00:00
perry e13ab577cd RCSID Police. 1998-01-05 05:05:49 +00:00
thorpej 5703397593 Initialize proc0's file descriptor table with fdinit1(). 1998-01-05 04:52:48 +00:00
thorpej 6382d6dd79 Implement file descriptor table sharing. Partially from FreeBSD. 1998-01-05 04:51:15 +00:00
thorpej fb74151eaf Fix the stat(2) ABI problem noticed by Curt Sampson and Chris Demetriou.
The problem is that the timespec structures now how 7 32-bit values before
them, which causes them to be implicitly padded on the Alpha (because the
timespecs have an alignment of 64 bits).  However, the alignment constraints
changed if _POSIX_SOURCE was defined (thus replacing the timespecs with
time_ts and longs).  This had no effect on 32-bit architectures, but changed
the offsets of several stat structure members on the Alpha.

XXX The ABI has not changed; explicit padding is added in the _POSIX_SOURCE
XXX case, enabled by an #ifdef __alpha__.  This should be changed if the
XXX stat(2) ABI is ever changed again (e.g. if we change time_t to 64 bits).
1998-01-05 02:23:43 +00:00
thorpej 341b8e9b49 Add fork statistics to vmmeter. 1998-01-04 03:53:35 +00:00
thorpej 871be215c8 Define flags passed to fork1(). Currently "block parent" and "share vmspace"
are defined.
1998-01-04 03:53:04 +00:00
thorpej 740f872797 New vfork(2) implementation, whith semantics matching those of the original
3BSD vfork(2), i.e. share address space w/ parent and block parent.

Keep statistics on the total number of forks, the number of forks that
block the parent, and the number of forks that share the address space
with the parent.
1998-01-04 03:52:02 +00:00
thorpej 43677af399 Regen: add __vfork14() at #282. 1998-01-04 03:47:05 +00:00
thorpej d36ffe9822 Add __vfork14() system call at #282. 1998-01-04 03:45:21 +00:00
thorpej 5739c88a75 Implement address space sharing (by keeping ref counts on the vmspace
structure).  Many thanks to Chuck Cranor for debugging assistence.
1998-01-03 02:53:00 +00:00
thorpej e1f13c8c99 Change shmfork() and shmexit() prototypes (vmspace *'s, not proc *'s). 1998-01-03 02:51:32 +00:00
thorpej 36780f9243 Make shmexit() and shmfork() take struct vmspace *'s, not struct proc *'s,
and update internal interfaces appropriately.
1998-01-03 02:50:32 +00:00
thorpej b1cf620cfe Update for additional argument to vm_fork() ("shared" boolean). 1998-01-03 02:49:30 +00:00
thorpej bb2d5987ff Don't call shmexit() if the vmspace ref count is not 1. Update for new
argument to shmexit().
1998-01-03 02:48:43 +00:00
thorpej b9f1b716f3 Now that all ports have pmap_activate(), and it has an identical interface,
prototype it in <vm/pmap.h>
1998-01-03 01:12:59 +00:00
thorpej b73f9750f6 Don't allocate PTEs in cpu_fork(); they were allocated when the new
process's pmap was created.  Instead, use pmap_activate() to load the
page {0,1} base and length registers into the PCB for the hardware's use.
1998-01-03 00:37:31 +00:00
thorpej aa58d4ac6b Adjust for the fact that the page {0,1} base and length registers are now
stored in the pmap structure.
1998-01-03 00:35:28 +00:00
thorpej f267fe868d - Adjust so that access to the PCB is not required in most pmap functions.
Store the page {0,1} base and length registers in the pmap structure,
  and implement pmap_activate(), which stores them in the PCB (for the
  hardware's use).
- Re-implement pmap_pinit(); allocate the PTEs here, not in cpu_fork().
1998-01-03 00:34:02 +00:00
thorpej 172a9381b6 - Remove the PCB pointer from the pmap structure. Instead, store the
page {0,1} base and length registers in the pmap structure.  They will
  be loaded in to the PCB when the process's address space is activated
  by way of pmap_activate().
- Remove pmap_pinit() macro; it's now a real function.
- Prototypes for pmap_pinit(), pmap_activate(), pmap_deactivate().
1998-01-03 00:28:43 +00:00
thorpej d8076f896b Grab the PCB directly from the u-area, not by indirecting through VM
structures.
1998-01-03 00:23:53 +00:00
thorpej 9ca174a51d Implement pmap_activate(). 1998-01-02 22:57:56 +00:00
thorpej a6f228e498 Make pmap_activate() take a struct proc *. 1998-01-02 22:36:33 +00:00
thorpej c162e92a71 Implement pmap_activate(). 1998-01-02 22:17:18 +00:00
thorpej f39e44955b Make pmap_activate() take a proc *. 1998-01-02 20:37:28 +00:00
thorpej d14e18faa9 Make pmap_activate() take a proc *. 1998-01-02 20:10:26 +00:00
ragge 5680284286 Fix problem in copy*str() when not emulating locc. 1998-01-02 19:33:27 +00:00
thorpej dd966fca05 Change an argument name to PMAP_ACTIVATE() to more accurately describe the
semantics of the argument.
1998-01-01 20:05:23 +00:00
thorpej 287b63b321 - Make pmap_activate() and pmap_deactivate() take a struct proc *.
- Define active_user_pmap() and use it in the appropriate places (from hp300
  port).
1998-01-01 19:52:50 +00:00
mikel 733dae35bc use ${SIZE} instead of "size" (somehow this one got missed) 1998-01-01 08:11:41 +00:00
enami 74a36a05ae No longer needs to include sys/shm.h. 1998-01-01 02:43:18 +00:00
thorpej 8b5e0b6e06 Remove a couple of unneeded VM-related headers. 1997-12-31 19:32:55 +00:00
cjs 89951259ed Add kernfs; remove more stuff we don't need. 1997-12-31 16:44:37 +00:00
thorpej 9c20093835 Make pmap_activate() and pmap_deactivate() take a struct proc *. 1997-12-31 10:12:55 +00:00
thorpej a322314f51 Split out the code that prepares a VM space for exec into a new
vmspace_exec() function.
1997-12-31 07:47:41 +00:00
thorpej 673fb149c6 Implement a queue for delayed ACK processing. This queue is used in
tcp_fasttimo() in lieu of scanning all open TCP connections.
1997-12-31 03:31:23 +00:00
enami d6eb3246bf Fix a typo in panic string. 1997-12-31 02:46:51 +00:00
enami e4aca18342 When building fake disklabel, if a partition type is other than FS_UNUSED
don't override it so that port specific hack takes effect.
1997-12-31 02:38:24 +00:00
enami 929e6f5a6f Don't print newline at beginning of line. 1997-12-31 01:19:52 +00:00
is d5ad660623 EACCESS->EROFS, for the write on readonly medium error. 1997-12-30 21:36:51 +00:00
thorpej d3eaf8a978 Rearrange disk_detach() slightly, and make a small run-time cosmetic
change in disk_unbusy().
1997-12-30 09:51:24 +00:00
lukem 0b57ba7265 as per the IANA assigned ports numbers document, use ports
49152..65535 for ephemeral ports (instead of 1024..5000).
closes my [kern/4440], but with correct code :)
1997-12-30 02:54:08 +00:00
scottr fa1347ed5b Prompt for total sectors, and calculate sane defaults for sectors per
cylinder and total sectors.
1997-12-29 07:15:10 +00:00
is 00a8cd54c1 Added ST_Q_SENSE_HELP to the Archive Viper 150S quirks so that
density 0 (autosense) actually works.
1997-12-28 19:25:35 +00:00
scottr d8f027887d If the send routine returns an error (-1), wait and retry using the same
backoff mechanism we use for receiving the response.  This is particularly
helpful when we have transient errors on transmit, e.g. a very busy
network or router.
1997-12-26 22:41:30 +00:00
scottr 89b10b928f Do better reporting of transmit errors. 1997-12-26 22:37:05 +00:00
oki ac86463ce3 Make compile without options MACHINE_NONCONTIG. 1997-12-24 17:48:10 +00:00
oki 49779c8c5a Add MDP_STACKADJ. 1997-12-24 17:46:08 +00:00
fvdl ffb3eaa5ea Add extra delay after wdcreset() call in wdcprobe. Needed by at least
one controller, where registers otherwise will still be inaccesible
(even though the busy bit has been reset), making the probe fail.
1997-12-24 02:01:00 +00:00
tv 89e7595756 Exclude /dev/fb code if no framebuffer is compiled into the system.
Adds a fb.h flag file with '#define NFB 1' if any such card is configured
in to the kernel.
1997-12-23 23:57:20 +00:00
thorpej ff7a4d0472 Add COMPAT_13. 1997-12-22 05:31:23 +00:00