[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnumach] 50/56: Imported Upstream version 1.4
From: |
Samuel Thibault |
Subject: |
[gnumach] 50/56: Imported Upstream version 1.4 |
Date: |
Sat, 28 Sep 2013 12:43:20 +0000 |
This is an automated email from the git hooks/post-receive script.
sthibault pushed a commit to branch master
in repository gnumach.
commit 3a767fcfe5b1d9b8dda4214e9a35f04687989af0
Author: Samuel Thibault <address@hidden>
Date: Sat Sep 28 10:23:38 2013 +0000
Imported Upstream version 1.4
---
.gitignore | 39 -
=announce-1.0 | 40 -
=announce-1.1 | 34 -
=announce-1.1.1 | 36 -
=announce-1.2 | 27 -
=announce-1.3 | 47 -
ChangeLog |10072 +++++++++++++++++++++++-
ChangeLog.0 | 721 ++
ChangeLog.00 | 858 +++
INSTALL | 370 +
Makefile.in | 7947 +++++++++++++++++++
README | 2 +-
aclocal.m4 | 1091 +++
build-aux/compile | 347 +
build-aux/config.guess | 1558 ++++
build-aux/config.sub | 1791 +++++
build-aux/depcomp | 791 ++
build-aux/install-sh | 527 ++
build-aux/mdate-sh | 224 +
build-aux/missing | 215 +
build-aux/test-driver | 127 +
build-aux/texinfo.tex |10079 ++++++++++++++++++++++++
config.h.in | 576 ++
configure |13055 ++++++++++++++++++++++++++++++++
ddb/db_write_cmd.h | 16 -
device/dev_forward.defs | 44 -
doc/.gitignore | 4 -
doc/mach.info | 163 +
doc/mach.info-1 | 6735 ++++++++++++++++
doc/mach.info-2 | 1700 +++++
doc/stamp-vti | 4 +
doc/version.texi | 4 +
gitlog-to-changelog | 432 --
i386/i386/.gitignore | 1 -
ipc/ipc_print.h | 20 -
kern/server_loop.ch | 104 -
linux/src/arch/i386/kernel/irq.c | 582 --
linux/src/drivers/block/floppy.c | 4284 -----------
linux/src/drivers/block/genhd.c | 761 --
linux/src/drivers/net/Space.c | 541 --
linux/src/drivers/net/auto_irq.c | 123 -
linux/src/drivers/net/cb_shim.c | 296 -
linux/src/drivers/net/iow.h | 6 -
linux/src/drivers/net/net_init.c | 439 --
linux/src/drivers/net/smc9194.c | 1779 -----
linux/src/drivers/net/smc9194.h | 240 -
linux/src/drivers/net/wavelan.p.h | 635 --
linux/src/drivers/scsi/FlashPoint.c |12156 -----------------------------
linux/src/drivers/scsi/aic7xxx_proc.c | 384 -
linux/src/drivers/scsi/aic7xxx_seq.c | 769 --
linux/src/drivers/scsi/eata_dma.c | 1603 ----
linux/src/drivers/scsi/eata_dma_proc.c | 493 --
linux/src/drivers/scsi/eata_pio_proc.c | 135 -
linux/src/drivers/scsi/g_NCR5380.c | 729 --
linux/src/drivers/scsi/gdth_proc.c | 656 --
linux/src/drivers/scsi/scripts.h | 1357 ----
linux/src/drivers/scsi/scsiio.c | 1537 ----
linux/src/drivers/scsi/scsiiom.c | 1540 ----
linux/src/init/main.c | 1135 ---
linux/src/init/version.c | 30 -
linux/src/kernel/dma.c | 99 -
linux/src/kernel/printk.c | 253 -
linux/src/kernel/resource.c | 129 -
linux/src/kernel/sched.c | 1747 -----
linux/src/kernel/softirq.c | 54 -
linux/src/lib/vsprintf.c | 306 -
linux/src/net/core/dev.c | 1629 ----
tests/.gitignore | 1 -
vm/vm_print.h | 22 -
69 files changed, 58950 insertions(+), 37301 deletions(-)
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 4488bc2..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,39 +0,0 @@
-*~
-
-.deps/
-.dirstamp
-*.o
-*.a
-/gnumach
-/gnumach-undef
-/gnumach-undef-bad
-/gnumach.msgids
-
-# Makerules.am
-*.gz
-*.stripped
-
-# Makerules.mig.am
-*.user.*
-*.server.*
-
-autom4te.cache/
-build-aux/
-/INSTALL
-/Makefile
-/Makefile.in
-/aclocal.m4
-/config.h
-/config.h.in
-/config.log
-/config.status
-/config.status.orig
-/configure
-/stamp-h1
-/version.c
-
-# Ignore arch symlinks
-/machine
-/mach/machine
-/linux/src/include/asm
-/linux/dev/include/asm
diff --git a/=announce-1.0 b/=announce-1.0
deleted file mode 100644
index 673dc99..0000000
--- a/=announce-1.0
+++ /dev/null
@@ -1,40 +0,0 @@
-I am pleased to announce version 1.0 of the GNU distribution of the
-Mach kernel. It may be found in the file (about 2.54 MB compressed)
-ftp://prep.ai.mit.edu/pub/gnu/gnumach-1.0.tar.gz.
-
-This distribution was prepared in order to install some bug fixes and
-minor improvements (not worth noting here) to the Utah microkernel,
-and to make the package conform to the GNU coding standards, at least
-minimally, as regards configuration. This was based upon the UK22
-distribution, with some modifications made at Utah as well.
-
-This kernel will be in the forthcoming complete binary distribution of
-GNU. The release is being made now, in the hopes that any serious
-problems we didn't notice might be found in advance of that
-distribution. Volunteers who are interested in compiling this release
-should do so, and please report any problems asap.
-
-All the non-kernel pieces of the Utah distribution are not present in
-this distribution, except for the MiG interface generator which is
-still supplied. These other pieces were never used for GNU, and are
-not really part of the kernel at all. We may separate MiG into a
-separate distribution for convenience at some later date.
-
-This distribution is only for i386, i486, i586 (pentium), and i686
-(sexium [pentium pro]) processors on PC-AT compatible machines.
-Volunteers interested in ports to other architectures are eagerly
-sought.
-
-Most ethernet cards and disk controllers are supported by this kernel;
-ones for which Linux drivers exist can be ported easily. Non-network
-devices for which BSD drivers exist can be ported with a little
-effort, but not much.
-
-Bug reports relating to this distribution should be sent to
address@hidden Requests for assistance should be made on
address@hidden
-
-The md5sum checksum for gnumach-1.0.tar.gz is:
-
-62ac22cbe695a058243673427a264745 gnumach-1.0.tar.gz
-
diff --git a/=announce-1.1 b/=announce-1.1
deleted file mode 100644
index ef5fa0b..0000000
--- a/=announce-1.1
+++ /dev/null
@@ -1,34 +0,0 @@
-I am pleased to announce version 1.1 of the GNU distribution of the
-Mach kernel. It may be found in the file (about 254 MB compressed)
-ftp://prep.ai.mit.edu/pub/gnu/gnumach-1.1.tar.gz.
-
-Diffs from version 1.0 of this distribution are avaiable at
-ftp://prep.ai.mit.edu/pub/gnu/gnumach-1.0-1.1.diff (42 KB
-uncompressed).
-
-This is a bug-fixing release; the only new feature over version 1.0 is
-the --enable-kdb configure option which has been added to turn on
-kernel debugging support.
-
-Several bugs have been fixed in this distribution, particularly
-relating to cross-compilation support.
-
-This distribution is only for i386, i486, i586 (pentium), and i686
-(sexium [pentium pro]) processors on PC-AT compatible machines.
-Volunteers interested in ports to other architectures are eagerly
-sought.
-
-Most ethernet cards and disk controllers are supported by this kernel;
-ones for which Linux drivers exist can be ported easily. Non-network
-devices for which BSD drivers exist can be ported with a little
-effort, but not much.
-
-Bug reports relating to this distribution should be sent to
address@hidden Requests for assistance should be made on
address@hidden
-
-The md5sum checksums for the files mentioned in this message are:
-
-6bb809d81198fd28078c8ac9ccb55965 gnumach-1.1.tar.gz
-089b95de887c69c9f1f28b1b1dcb00f7 gnumach-1.0-1.1.diff
-
diff --git a/=announce-1.1.1 b/=announce-1.1.1
deleted file mode 100644
index 244141d..0000000
--- a/=announce-1.1.1
+++ /dev/null
@@ -1,36 +0,0 @@
-I am pleased to announce version 1.1.1 of the GNU distribution of the
-Mach kernel. It may be found in the file (about 254 MB compressed)
-ftp://prep.ai.mit.edu/pub/gnu/gnumach-1.1.1.tar.gz.
-
-Diffs from version 1.0 of this distribution are avaiable at
-ftp://prep.ai.mit.edu/pub/gnu/gnumach-1.0-1.1.1.diff.gz (about 169 MB
-compressed).
-
-Version 1.1 had some minor accidental problems and is being removed in
-favor of this minor update.
-
-This is a bug-fixing release; the only new feature over version 1.0 is
-the --enable-kdb configure option which has been added to turn on
-kernel debugging support.
-
-Several bugs have been fixed in this distribution, particularly
-relating to cross-compilation support.
-
-This distribution is only for i386, i486, i586 (pentium), and i686
-(sexium [pentium pro]) processors on PC-AT compatible machines.
-Volunteers interested in ports to other architectures are eagerly
-sought.
-
-Most ethernet cards and disk controllers are supported by this kernel;
-ones for which Linux drivers exist can be ported easily. Non-network
-devices for which BSD drivers exist can be ported with a little
-effort, but not much.
-
-Bug reports relating to this distribution should be sent to
address@hidden Requests for assistance should be made on
address@hidden
-
-The md5sum checksums for the files mentioned in this message are:
-
-45147839691e40b2e67412579e0fcc5d gnumach-1.1.1.tar.gz
-35e69cedb4d23b4058be26bd58345a02 gnumach-1.0-1.1.1.diff.Z
diff --git a/=announce-1.2 b/=announce-1.2
deleted file mode 100644
index 6fc987f..0000000
--- a/=announce-1.2
+++ /dev/null
@@ -1,27 +0,0 @@
-I am pleased to announce version 1.2 of the GNU distribution of the
-Mach kernel. It may be found in the file (about 3.64 MB compressed)
-ftp://ftp.gnu.org/gnu/gnumach/gnumach-1.2.tar.gz.
-
-Because of extensive source reorganization, it is not profitable to
-provide diffs against previous versions.
-
-Most notably, this release updates the Linux-derived device drivers to
-those found in Linux version 2.0.36.
-
-This distribution is only for i386, i486, i586 (pentium), and i686
-(sexium [pentium pro]) processors on PC-AT compatible machines.
-Volunteers interested in ports to other architectures are eagerly
-sought.
-
-MiG (the Mach Interface Generator) is no longer in this distribution;
-it is now distributed separately. You will need MiG in order to be
-able to compile this release.
-
-Bug reports relating to this distribution should be sent to
address@hidden Requests for assistance should be made on
address@hidden
-
-The md5sum checksums for this distibution is
-
-85e898a1753270e63a1cc69028043c68 gnumach-1.2.tar.gz
-
diff --git a/=announce-1.3 b/=announce-1.3
deleted file mode 100644
index 2f7edd0..0000000
--- a/=announce-1.3
+++ /dev/null
@@ -1,47 +0,0 @@
-We are pleased to announce version 1.3 of the GNU distribution of the
-Mach kernel. It may be found in the file (about 3.6 MB compressed)
-ftp://ftp.gnu.org/gnu/gnumach/gnumach-1.3.tar.gz;
-unidiffs from version 1.2 (about 310 KB compressed) are in
-ftp://ftp.gnu.org/gnu/gnumach/gnumach-1.2-1.3.diff.gz.
-
-This distribution is only for x86 PC machines.
-Volunteers interested in ports to other architectures are eagerly sought.
-
-We are no longer actively developing version 1.x of GNU Mach. We plan to
-make only necessary bug fixes or trivial enhancements in the 1.x line,
-and make further 1.x releases only as necessary for those purposes.
-New development efforts have been underway for some time on a new version
-of GNU Mach using the OSKit from the University of Utah for hardware
-support. Those efforts previously called OSKit-Mach are now working
-towards the future version 2.0 of GNU Mach.
-
-Aside from bug fixes, major changes from 1.2 (from the NEWS file) are:
-
-The kernel now directly supports "boot scripts" in the form of multiboot
-module names with the same syntax as the Hurd's `serverboot' program.
-That is, instead of telling GRUB "module /boot/serverboot", you can give
-GRUB a series of command like "module /hurd/ext2fs ${...}" where the
-syntax after "module" is the same as in boot scripts for Hurd's `serverboot'.
-
-The kernel message device `kmsg' is now enabled by default.
---disable-kmsg turns it off.
-
-Large disks (>= 10GB) are now correctly supported, the new get_status
-call DEV_GET_RECORDS can return the number of records of a device.
-
-Lots of tweaks have been done to the virtual memory management to make
-it perform better on today's machines.
-
-The console supports ANSI escape sequences for colors and attributes.
-
-Support for the terminal speeds B57600 and B115200 has been added.
-
-
-Bug reports relating to this distribution should be sent to
address@hidden Requests for assistance should be made on
address@hidden
-
-The md5sum checksums for this distribution are:
-
-61e90803889b079a380e30056b21d076 gnumach-1.3.tar.gz
-56ca6aa9040c4d4c4ef7a9757bb0509c gnumach-1.2-1.3.diff.gz
diff --git a/ChangeLog b/ChangeLog
index 9ed3b47..3e23dae 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,10068 @@
-e227045b06d62ee7d2fbab9d5ade9030ff43170b is the last commit imported from CVS.
-All commits after that one have valid author and committer information.
+2013-09-27 Thomas Schwinge <address@hidden>
-Use this to examine the change log for earlier changes:
+ GNU Mach 1.4.
+ * version.m4 (AC_PACKAGE_VERSION): Set to 1.4.
+ * NEWS: Finalize changes for 1.4.
+ * README: Update.
- $ git show e227045b06d62ee7d2fbab9d5ade9030ff43170b:ChangeLog
- $ git show e227045b06d62ee7d2fbab9d5ade9030ff43170b:ChangeLog.0
- $ git show e227045b06d62ee7d2fbab9d5ade9030ff43170b:ChangeLog.00
+ * configure.ac (AM_INIT_AUTOMAKE): Add dist-bzip2.
+
+ Generate ChangeLog files for distributions.
+ * gitlog-to-changelog: New file; import from gnulib's
+ 9fc81090f6c5590bd1b0e0fa5087577a2ee43a3e:build-aux/gitlog-to-changelog.
+ * Makefile.am (gen-ChangeLog): New target.
+ (dist-hook): Depend on it.
+
+ dist-hook extensibility.
+ * Makefile.am (dist-hook): Rename to...
+ (dist-rm-CVS): ... this new target.
+ (dist-hook): Depend on it.
+
+ * README: Simplify build instructions.
+ Follow-up to commit 471e5b080f7790c2cf95e3069d9fed1173c9ec17.
+
+2013-09-26 Samuel Thibault <address@hidden>
+
+ Fix gpl.texi build
+ texinfo does not support @heading/@center in the middle of an enumerate.
+
+ * doc/gpl.texi: Move "NO WARRANTY" to item heading.
+
+2013-09-26 Samuel Thibault <address@hidden>
+
+ Really update README
+ * README: Network drivers are actually enabled by default.
+
+ Update README
+ * README: Update default drivers notice. Mention cross-compilation
flags
+ for 64bit systems.
+
+2013-09-24 Samuel Thibault <address@hidden>
+
+ Drop Invariant, Front-Cover and Back-Cover references
+ The referenced Invariant sections does not exist, and the front and back
+ covers do not hold much information.
+
+2013-09-22 Marin Ramesa <address@hidden>
+
+ device: remove unused file dk_label.c
+ * device/dk_label.c: Remove file.
+
+2013-09-21 Marin Ramesa <address@hidden>
+
+ add comments after endifs
+ * device/ds_routines.c [CONFIG_PCMCIA, CONFIG_INET, LINUX_DEV,
MACH_HYP]: Add comments after endifs.
+
+ remove lint code
+ * device/ds_routines.c [lint]: Remove ifdefs and associated code.
+
+ remove register qualifiers
+ * device/ds_routines.c: Remove register qualifiers.
+
+ remove lint code
+ * device/dev_pager.c [lint]: Remove ifdefs and associated code.
+
+ Coding style trivial fixes
+
+ remove register qualifiers
+ * device/dev_pager.c: Remove register qualifiers.
+
+2013-09-16 Marin Ramesa <address@hidden>
+
+ another small change in style for consistency
+ * device/dev_name.c: Change in coding style.
+
+2013-09-16 Marin Ramesa <address@hidden>
+
+ use boolean_t instead of an int
+ Variable 'found' already receives values TRUE and FALSE, so why not make
+ it a boolean.
+
+ * device/dev_name.c: Use boolean_t instead of an int.
+
+2013-09-16 Marin Ramesa <address@hidden>
+
+ remove preprocessor comments
+ The first one is a message that name lookup has been called, which
+ I think is safe to remove, or maybe add #if DEBUG. Second one is a
+ alternate calculation that I doubt it will ever be used, so I think
+ it's safe to remove it.
+
+ * device/dev_name.c: Remove preprocessor comments.
+
+2013-09-16 Marin Ramesa <address@hidden>
+
+ another small change in style for consistency
+ * device/dev_name.c: Change in coding style.
+
+ small style changes for consistency
+ * device/dev_name: Changes in coding style.
+
+ remove register qualifiers
+ * device/dev_name.c: Remove register qualifiers.
+
+2013-09-15 Marin Ramesa <address@hidden>
+
+ remove definition of NDEVICES
+ NDEVICES is never used. Judging by the position and the comments
+ it was once used in initialization, but it's not anymore. I think
+ it's safe to remove it.
+
+ * device/dev_lookup.c (NDEVICES): Remove definition.
+
+2013-09-15 Marin Ramesa <address@hidden>
+
+ remove register qualifiers
+ * device/dev_lookup.c: Remove register qualifiers.
+
+2013-09-11 Marin Ramesa <address@hidden>
+
+ remove register qualifiers.
+ * device/cirbuf.c: Remove register qualifiers.
+
+2013-09-11 Marin Ramesa <address@hidden>
+
+ track the console init with a boolean instead of an int
+ A variable that keeps track if the console init has been called. It
should
+ never receive values other than 0 and 1, so constrain it's possible
range of
+ values to a boolean.
+
+ * device/cons.c (cn_inited): Use boolean_t instead of an int.
+
+2013-09-11 Marin Ramesa <address@hidden>
+
+ track the console buffer usage with a boolean instead of an int
+ A variable that keeps track of the console buffer usage should never
receive
+ values other than 0 and 1, so constrain it's value range to boolean.
Plus, it's
+ more readable this way.
+
+ * device/cons.c (consbufused): Use boolean_t instead of an int.
+
+2013-09-11 Marin Ramesa <address@hidden>
+
+ drop unused CONSMAJOR
+ CONSMAJOR is never used. I'm guessing that in the past it was
+ a part of some problematic code. I don't see a reason to keep
+ it's definition.
+
+ * device/cons.h (CONSMAJOR): Remove definition.
+
+2013-09-09 Marin Ramesa <address@hidden>
+
+ Remove register qualifiers
+ * device/chario.c: Remove register qualifiers.
+
+ Add const qualifiers.
+ * device/chario.c (tty_inq_size, tty_outq_size): Qualify constants as
const.
+
+ Drop useless forward declaration
+ * device/chario.c (tty_flush): Remove forward declaration (prototype is
in tty.h).
+
+ Drop luna88k bits
+ * device/tty.h [luna88k]: Remove ifdef and include for nonexistent
header files.
+ * kern/debug.c: Remove check for luna88k.
+
+2013-08-28 Samuel Thibault <address@hidden>
+
+ Drop FXSR initialization message
+ * i386/i386/fpu.c (init_fpu): Drop FXSR initialization message
+
+2013-07-18 Marin Ramesa <address@hidden>
+
+ kern: add missing prototype
+ * kern/lock.h (db_show_all_slocks): Add prototype.
+
+ ipc: organize ipc print function prototypes
+ * ipc/ipc_print.h: New file.
+ [MACH_KDB] Include <mach/mach_types.h>.
+ [MACH_KDB] Include <mach/message.h>.
+ [MACH_KDB] Include <ipc/ipc_types.h>.
+ (ipc_port_print): Add prototype.
+ (ipc_pset_print): Likewise.
+ (ipc_kmsg_print): Likewise.
+ (ipc_msg_print): Likewise.
+ * ipc/ipc_port.h (ipc_port_print): Remove prototype.
+ * ipc/ipc_port.c [MACH_KDB]: Include <ipc/ipc_print.h>.
+ * ipc/ipc_pset.h (ipc_pset_print): Remove prototype.
+ * ipc/ipc_pset.c [MACH_KDB]: Include <ipc/ipc_print.h>.
+ * ipc/ipc_kmsg.c [MACH_KDB]: Include <ipc/ipc_print.h>.
+
+ vm: organize vm print function prototypes
+ * vm/vm_print.h: New file.
+ Include <vm/vm_map.h>.
+ Include <machine/db_machdep.h>.
+ (vm_map_print): Add prototype.
+ (vm_map_copy_print): Likewise.
+ (vm_object_print): Likewise.
+ (vm_page_print): Likewise.
+ Include <vm/vm_object.h>.
+ Include <vm/vm_page.h>
+ * vm/vm_map.h (vm_map_print): Remove prototype.
+ * vm/vm_map.c [MACH_KDB]: Include <vm/vm_print.h>.
+ * vm/vm_object.h (vm_object_print): Remove prototype.
+ * vm/vm_object.c [MACH_KDB]: Include <vm/vm_print.h>.
+ * vm/vm_resident.c [MACH_KDB]: Include <vm/vm_print.h>.
+
+ ddb: cleanup db_command.c
+ * ddb/db_command.c (_longjmp): Remove prototype.
+ (vm_map_print): Likewise.
+ (vm_object_print): Likewise.
+ (vm_page_print): Likewise.
+ (vm_map_copy_print): Likewise.
+ (ipc_port_print): Likewise.
+ (ipc_pset_print): Likewise.
+ (db_show_all_slocks): Likewise.
+ (ipc_kmsg_print): Likewise.
+ (ipc_msg_print): Likewise.
+ Include <vm/vm_print.h>.
+ Include <ipc/ipc_print.h>.
+ Include <kern/lock.h>.
+ * i386/i386/setjmp.h [__GNUC__] (_longjmp): Add prototype.
+
+2013-07-07 Marin Ramesa <address@hidden>
+
+ fix implicit declarations
+ * ddb/db_trap.c: Include <machine/setjmp.h>.
+ * i386/i386/setjmp.h (_setjmp): Add prototype.
+
+2013-07-07 Samuel Thibault <address@hidden>
+
+ Restore db_help_cmd
+ * ddb/db_command.c (db_help_cmd): Restore function.
+
+2013-07-06 Marin Ramesa <address@hidden>
+
+ ddb: cleanup db_command.c
+ * ddb/db_write_cmd.h: New file.
+ (db_write_cmd): Add prototype.
+ Include <mach/boolean.h>.
+ Include <machine/db_machdep.h>.
+ * ddb/db_break.h (db_listbreak_cmd): Add prototype.
+ (db_delete_cmd): Likewise.
+ (db_breakpoint_cmd): Likewise.
+ * ddb/db_watch.h (db_listwatch_cmd): Likewise.
+ (db_deletewatch_cmd): Likewise.
+ (db_watchpoint_cmd): Likewise.
+ * ddb/db_print.h (db_show_one_thread): Likewise.
+ (db_show_all_threads): Likewise.
+ * ddb/db_examine.h (db_print_cmd): Likewise.
+ (db_examine_forward): Likewise.
+ (db_examine_backward): Likewise.
+ (db_search_cmd): Likewise.
+ * ddb/db_variables.h (db_set_cmd): Likewise.
+ * ddb/db_run.h (db_trace_until_call_cmd): Likewise.
+ (db_trace_until_matching_cmd): Likewise.
+ (db_continue_cmd): Likewise.
+ * ddb/db_command.h (db_fncall): Likewise.
+ * ddb/db_command.c: Include <ddb/db_break.h>.
+ Include <ddb/db_watch.h>.
+ Include <ddb/db_variables.h>.
+ Include <ddb/db_write_cmd.h>.
+ Include <ddb/db_run.h>.
+ Include <ddb/db_cond.h>.
+ (db_listbreak_cmd): Remove prototype.
+ (db_listwatch_cmd): Likewise.
+ (db_show_one_thread): Likewise.
+ (db_show_all_threads): Likewise.
+ (db_show_macro): Likewise.
+ (db_show_help): Likewise.
+ (db_print_cmd): Likewise.
+ (db_examine_cmd): Likewise.
+ (db_set_cmd): Likewise.
+ (db_examine_forward): Likewise.
+ (db_examine_backward): Likewise.
+ (db_search_cmd): Likewise.
+ (db_write_cmd): Likewise.
+ (db_delete_cmd): Likewise.
+ (db_breakpoint_cmd): Likewise.
+ (db_deletewatch_cmd): Likewise.
+ (db_watchpoint_cmd): Likewise.
+ (db_single_step_cmd): Likewise.
+ (db_trace_until_call_cmd): Likewise.
+ (db_trace_until_matching_cmd): Likewise.
+ (db_continue_cmd): Likewise.
+ (db_cond_cmd): Likewise.
+ (db_help_cmd): Likewise.
+ (db_def_macro_cmd): Likewise.
+ (db_del_macro_cmd): Likewise.
+ (db_fncall): Likewise.
+
+2013-07-05 Marin Ramesa <address@hidden>
+
+ ddb: use and cleanup db_print.h
+ * ddb/db_command.c: Include db_print.h.
+ Remove extern db_show_regs().
+ Remove extern db_show_one_task().
+ Remove extern db_show_port_id().
+ * ddb/db_print.c: Include db_print.h
+ * ddb/db_print.h (db_show_all_acts): Remove prototype.
+ (db_show_one_act): Likewise.
+ (db_show_shuttle): Likewise.
+ (db_show_one_task_vm): Likewise.
+ (db_show_all_task_vm): Likewise.
+ (db_show_one_space): Likewise.
+ (db_show_all_spaces): Likewise.
+ (db_sys): Likewise.
+ (db_port_kmsg_count): Likewise.
+ (db_show_one_simple_lock): Likewise.
+ (db_show_one_mutex): Likewise.
+ (db_show_subsystem): Likewise.
+ (db_show_runq): Likewise.
+
+2013-07-04 Marin Ramesa <address@hidden>
+
+ ddb: fix implicit declarations
+ * ddb/db_break.c: Include ddb/db_access.h.
+ * ddb/db_examine.h (db_xcdump): Add prototype.
+ * ddb/db_ext_symtab.c: Include vm/vm_user.h.
+ * ddb/db_input.c: Include device/cons.h.
+ * ddb/db_output.c: Likewise.
+
+2013-06-29 Marin Ramesa <address@hidden>
+
+ (slab_info): fix format warnings
+ * kern/slab.c (slab_info): Fix format for vm_size_t.
+
+ Add device_pager_setup prototype
+ * device/ds_routines.h (device_pager_setup): Add prototype.
+
+ Add [nh]to[hn][ls] prototypes
+ * device/net_io.h (ntohl, htonl, ntohs, htons): Add prototypes.
+
+2013-06-29 Samuel Thibault <address@hidden>
+
+ Fix int/long discrepancy
+ * device/net_io.c (bpf_match): Make the `keys' parameter a pointer to
+ unsigned int instead of unsigned long.
+ (bpf_do_filter): Make `A', `B' and `mem' unsigned ints instead of
unsigned
+ longs. Also turn long casts into int casts.
+
+2013-06-24 Samuel Thibault <address@hidden>
+
+ Add partitioning reload support to ahci
+ * linux/dev/drivers/block/ahci.c (port): Add `gd' field.
+ (ahci_ioctl): New function.
+ (ahci_fops): Fill `ioctl' field with `ahci_ioctl'.
+ (ahci_probe_pci): Fill `gd' field with `gd'.
+
+ Fix printing ahci PCI dev and fun
+ * linux/dev/drivers/block/ahci.c (ahci_probe_dev): Compute `dev' and
`fun'
+ earlier so they can be printed.
+
+2013-06-10 Samuel Thibault <address@hidden>
+
+ Add missing 4KiB memory
+ * i386/i386at/model_dep.c (init_alloc_aligned): Let allocated area last
+ until end of memory map.
+
+ Add non-contiguous mmap support
+ * i386/include/mach/i386/multiboot.h (multiboot_mmap): New structure
+ * i386/i386at/model_dep.c (mem_size_init): Parse boot_info.mmap_addr if
+ available.
+ (init_alloc_aligned): Likewise.
+
+2013-06-09 Samuel Thibault <address@hidden>
+
+ Merge branch 'master' of git.savannah.gnu.org:/srv/git/hurd/gnumach
+
+2013-06-09 Samuel Thibault <address@hidden>
+
+ Do not skip AHCI controller without HOST_CAP_ONLY
+ We rather rely on the announced PCI type to determine whether to use
IDE or
+ AHCI.
+
+ * linux/dev/drivers/block/ahci.c (ahci_probe_dev): Do not skip AHCI
+ controller without HOST_CAP_ONLY.
+
+2013-06-09 Samuel Thibault <address@hidden>
+
+ Add timeout to ahci IDENTIFY
+ * linux/dev/drivers/block/ahci.c (identify_timeout): New function.
+ (identify_timer): New variable.
+ (ahci_probe_port): Add timer to abandon identify command.
+
+ Fix printf format
+ * linux/dev/drivers/block/ahci.c (ahci_do_request): Cast capacity into
unsigned
+ long and use %lu format.
+ (ahci_probe_port): Cast size into unsigned and use %u format.
+
+ Fix format
+
+2013-06-09 Richard Braun <address@hidden>
+
+ Fix object construction in the slab allocator
+ There is currently no actual use of constructors, which is why this bug
has
+ been long overlooked.
+
+ * kern/slab.c (kmem_cpu_pool_fill): Call constructor on buffers unless
+ verification is enabled for the cache, or the constructor is NULL.
+
+2013-06-04 Marin Ramesa <address@hidden>
+
+ Comment unused variable
+ * kern/ipc_mig.c (syscall_device_write_request): Comment unused
variable.
+
+2013-06-04 Samuel Thibault <address@hidden>
+
+ Merge branch 'master' of git.savannah.gnu.org:/srv/git/hurd/gnumach
+
+2013-06-04 Miguel Figueiredo <address@hidden>
+
+ Fix format warnings
+ * vm/vm_resident.c (pmap_startup): Fix printf format.
+ * xen/block.c (hyp_block_init, device_write): Likewise.
+ * xen/net.c (hyp_net_init): Likewise.
+
+2013-06-02 Miguel Figueiredo <address@hidden>
+
+ Remove unused variable
+ * kern/act.c (act_create): Remove unused variable.
+
+2013-06-02 Richard Braun <address@hidden>
+
+ Fix yet another locking error in the slab allocator
+ * kern/slab.c (kmem_cache_free): Relock cache before retrying releasing
+ an object to the CPU pool layer.
+
+2013-06-02 Miguel Figueiredo <address@hidden>
+
+ Remove unused variable
+ * ipc/mach_port.c (mach_port_set_syscall_right): Remove unused variable.
+
+2013-05-30 Samuel Thibault <address@hidden>
+
+ Add LBA48 support to AHCI driver
+ * linux/dev/drivers/block/ahci.c (port): Extend `capacity' field type to
+ unsigned long long. Add `lba48' field. Make `identify' field unsigned.
+ (ahci_do_port_request): When `lba48' is true, use WIN_READDMA_EXT and
+ WIN_WRITEDMA_EXT commands.
+ (ahci_probe_port): Test lba48 flag, read capacity and set `lba48'
+ accordingly. Display size in GiB above 10GiB.
+ * linux/src/include/linux/hdreg.h (WIN_READDMA_EXT, WIN_WRITEDMA_EXT):
New
+ macros
+ (hd_driveid): Add `command_set_2' and lba_capacity_2' fields.
+
+2013-05-27 Miguel Figueiredo <address@hidden>
+
+ Remove old elevator algorithm function
+ * device/blkio.c (disksort): remove unused function
+
+2013-05-19 Miguel Figueiredo <address@hidden>
+
+ Remove unneeded variable initialization
+ * kern/thread.c (thread_force_terminate): Remove unneeded variable
+ initialization.
+
+2013-05-19 Samuel Thibault <address@hidden>
+
+ Remove duplicate line
+ Reported by Miguel Figueiredo
+
+ * kern/thread.c (thread_create): Remove duplicate reset of
+ new_thread->pc_sample.buffer to 0.
+
+2013-05-16 Richard Braun <address@hidden>
+
+ Reduce fragmentation in the slab allocator
+ This reverts a change brought when reworking slab lists handling that
made
+ the allocator store slabs in LIFO order, whatever their reference count.
+ While it's fine for free slabs, it actually increased fragmentation for
+ partial slabs.
+
+ * kern/slab.c (kmem_cache_alloc_from_slab): Insert slabs that become
partial
+ at the end of the partial slabs list.
+
+2013-05-16 Richard Braun <address@hidden>
+
+ Rename list_insert to list_insert_head
+ This change increases clarity.
+
+ * kern/list.h (list_insert): Rename to ...
+ (list_insert_head): ... this.
+ * kern/slab.c: Update calls to list_insert.
+
+2013-05-15 Richard Braun <address@hidden>
+
+ Fix itemization errors in the texinfo documentation
+ * doc/mach.texi: Replace @itemx with @item for --enable-tulip and
+ --enable-epic100.
+
+2013-05-13 Miguel Figueiredo <address@hidden>
+
+ Drop unused variables
+ * kern/slab.c (kalloc_init): Remove unused variables.
+
+2013-05-11 Samuel Thibault <address@hidden>
+
+ Add missing parameters to printf
+ * linux/dev/drivers/block/ahci.c (ahci_probe_dev): Add missing
parameters to
+ printf.
+
+2013-05-10 Samuel Thibault <address@hidden>
+
+ Fix ahci.h path
+ * linux/Makefrag.am (liblinux_a_SOURCES): Fix path to ahci.h
+
+ Add AHCI driver
+ * linux/dev/glue/kmem.c (vmtophys): New function.
+ * linux/dev/include/linux/mm.h (vmtophys): New prototype.
+ * linux/src/include/linux/pci.h (PCI_CLASS_STORAGE_SATA,
+ PCI_CLASS_STORAGE_SATA_AHCI): New macros.
+ * linux/dev/drivers/block/ahci.c: New file.
+ * linux/dev/include/ahci.h: New file.
+ * linux/Makefrag.am (liblinux_a_SOURCES): Add
linux/dev/drivers/block/ahci.c
+ and linux/dev/drivers/block/ahci.h.
+ * linux/src/drivers/block/ide.c: Include <ahci.h>.
+ (probe_for_hwifs): Call ahci_probe_pci.
+
+2013-05-02 Samuel Thibault <address@hidden>
+
+ Fix non-block-aligned-offset reads
+ This fixes grave issues when device_read is called with
non-block-aligned
+ offset, e.g. when using grub-probe with a non-block-aligned partition
table.
+
+ * linux/dev/glue/block.c (rdwr_full): Use current position instead of
base
+ buffer position to check for alignment.
+
+2013-05-01 Samuel Thibault <address@hidden>
+
+ Merge branch 'master' of git.savannah.gnu.org:/srv/git/hurd/gnumach
+
+ Fix macro name
+ * linux/dev/glue/block.c (device_get_status): Use
+ DEV_GET_RECORDS_RECORD_SIZE for DEV_GET_RECORDS instead of
+ DEV_GET_SIZE_RECORD_SIZE.
+
+2013-04-21 Richard Braun <address@hidden>
+
+ Optimize slab reaping
+ Instead of walking the list of free slabs while holding the cache lock,
+ detach the list from the cache and directly compute the final count
values,
+ and destroy slabs after releasing the cache lock.
+
+ * kern/slab.c (kmem_cache_reap): Optimize.
+
+2013-04-21 Richard Braun <address@hidden>
+
+ Rework slab lists handling
+ Don't enforce strong ordering of partial slabs. Separating partial slabs
+ from free slabs is already effective against fragmentation, and sorting
+ would sometimes cause pathological scalability issues. In addition,
store
+ new slabs (whether free or partial) in LIFO order for better cache
usage.
+
+ * kern/slab.c (kmem_cache_grow): Insert new slab at the head of the
slabs list.
+ (kmem_cache_alloc_from_slab): Likewise. In addition, don't sort partial
slabs.
+ (kmem_cache_free_to_slab): Likewise.
+ * kern/slab.h: Remove comment about partial slabs sorting.
+
+2013-04-21 Richard Braun <address@hidden>
+
+ Fix locking error in the slab allocator
+ * kern/slab.c (kmem_cache_free): Lock cache before releasing an object
to
+ the slab layer.
+
+2013-04-08 Samuel Thibault <address@hidden>
+
+ Add -fno-optimize-sibling-calls option for better kdb traces
+ * Makefrag.am (AM_CFLAGS) [enable_kdb]: Add -fno-optimize-sibling-calls
+ option.
+
+2013-03-11 Samuel Thibault <address@hidden>
+
+ Update BASEPRI_USER
+ * kern/sched.h (BASEPRI_USER): Increase to 25.
+
+ Fix build without kdb
+ * i386/i386/db_interface.h [! MACH_KBD] (db_set_hw_watchpoint,
+ db_clear_hw_watchpoint, db_dr): Do not declare functions.
+
+2013-03-06 Samuel Thibault <address@hidden>
+
+ Increase number of priorities
+ * kern/sched.h (NRQS): Increase to 50.
+
+2013-03-05 Samuel Thibault <address@hidden>
+
+ Do not hardcode maximum priority value
+ * kern/sched_prim.c (do_priority_computation): Replace 31 with NRQS - 1.
+ idle_thread: Likewise.
+
+2013-02-04 Samuel Thibault <address@hidden>
+
+ Include machine/db_interface instead of hardcoding function prototypes
+ * ddb/db_access.c: Include <machine/db_interface.h>.
+ (db_read_bytes, db_write_bytes): Remove functions prototypes.
+ (db_get_task_value): Fix calling db_read_bytes.
+ (db_put_task_value): Fix calling db_write_bytes.
+ * ddb/db_watch.c: Include <machine/db_interface.h>.
+ (db_set_hw_watchpoint, db_clear_hw_watchpoint): Remove functions
prototypes.
+
+2013-02-04 Samuel Thibault <address@hidden>
+
+ Plug hw debug register support into kdb
+ Make the `watch' command use hw debug registers whenever possible.
+
+ * ddb/db_watch.c (db_set_hw_watchpoint, db_clear_hw_watchpoint): Add
+ functions prototypes.
+ (db_set_watchpoints): Try to call db_set_hw_watchpoint.
+ (db_clear_watchpoints): Call db_clear_hw_watchpoint.
+ * i386/i386/db_interface.c: Include <ddb/db_watch.h>
+ (db_set_hw_watchpoint): Take a db_watchpoint_t WATCH parameter instead
of
+ its content. Remove support for clearing a debug register.
+ (db_clear_hw_watchpoint): Add function.
+ * i386/i386/db_interface.h: Include <ddb/db_watch.h>.
+ (db_set_hw_watchpoint): Fix function prototype.
+ (db_clear_hw_watchpoint): Add function prototype.
+ * i386/i386/db_machdep.h: Do not include <machine/db_interface.h>
+
+2013-02-04 Samuel Thibault <address@hidden>
+
+ Document dwatch
+ * doc/mach.texi: Add dwatch documentation.
+
+2013-02-04 Samuel Thibault <address@hidden>
+
+ Add x86 hardware debugging register support
+ This adds using the x86 hardware debugging registers, either from the
kernel
+ through db_set_hw_watchpoint, or from userland through i386_DEBUG_STATE.
+ While the kernel is using the registers, the userland values are
ignored.
+
+ * i386/i386/db_interface.c (kernel_dr, ids): New variables.
+ (db_load_context, db_get_debug_state, db_set_debug_state, db_dr,
+ db_set_hw_watchpoint): New functions.
+ (kdb_trap): Use get_dr* instead of dr_addr[].
+ * i386/i386/db_interface.h (db_user_to_kernel_address,
db_set_hw_watchpoint)
+ (db_dr, db_get_debug_state, db_set_debug_state, db_load_context): Add
functions
+ prototypes.
+ (dr0, dr1, dr2, dr3): Remove functions prototypes.
+ * i386/i386/locore.S (dr6, dr0, dr1, dr2, dr3): Remove functions.
+ (dr_msk, dr_addr): Remove variables.
+ * i386/include/mach/i386/thread_status.h (i386_DEBUG_STATE): Add macro.
+ (i386_debug_state): Add structure.
+ (i386_DEBUG_STATE_COUNT): Add macro.
+ * i386/i386/thread.h: Include <mach/machine/thread_status.h>.
+ (i386_machine_state): Add `struct i386_debug_state ids' field.
+ * i386/i386/pcb.c: Include <i386/db_interface.h>.
+ (switch_ktss): Call db_load_context.
+ (thread_setstatus, thread_getstatus): Add I386_DEBUG_STATE case.
+ * i386/i386/proc_reg.h (get_dr0, set_dr0, get_dr1, set_dr1, get_dr2,
+ set_dr2, get_dr3, set_dr3, get_dr6, set_dr6, get_dr7, set_dr7): Add
macros.
+
+2013-02-03 Samuel Thibault <address@hidden>
+
+ Prevent the kernel from making any FPU use
+ * i386/Makefrag.am (AM_CFLAGS): Add -mno-3dnow -mno-mmx -mno-sse
-mno-sse2.
+
+2013-01-31 Samuel Thibault <address@hidden>
+
+ Implement pmap_map_mfn for the PVH case
+ * i386/intel/pmap.c (pmap_map_mfn) [MACH_XEN && !MACH_PV_PAGETABLES]:
+ Implement.
+
+ Make the PVH variant get sure that the support is available in the
hypervisor
+ * i386/xen/xen_boothdr.S (FEATURES): Mark PVH features as required.
+
+2013-01-30 Samuel Thibault <address@hidden>
+
+ Add comment for TODO
+
+ Do not use 4gb segment assistance in PVH
+ * i386/i386/gdt.c (gdt_init) [MACH_PV_DESCRIPTORS &&
!MACH_PV_PAGETABLES]:
+ Do not enable VMASST_TYPE_4gb_segments.
+ * i386/i386/trap.c (user_trap): Do not handle trap 15, 4gb segment
+ assist notification.
+
+ Drop spurious inclusion
+ * i386/i386/vm_param.h [MACH_XEN && !MACH_PV_PAGETABLES]: Do not include
+ <xen/public/xen.h>.
+
+ Increase VM_MAX_KERNEL_ADDRESS for PVH case
+ * i386/i386/vm_param.h (VM_MAX_KERNEL_ADDRESS) [MACH_XEN &&
+ !MACH_PV_PAGETABLES]: Remove hypervisor area from VM_MAX_KERNEL_ADDRESS
+ restriction.
+
+2013-01-28 Samuel Thibault <address@hidden>
+
+ More ifdef fixes for ring1 support and pv descriptors support
+ * i386/i386/idt_inittab.S: Turn MACH_XEN test into MACH_PV_DESCRIPTORS
test.
+ * i386/i386/fpu.c: Turn appropriate MACH_HYP/XEN tests into MACH_RING1
tests.
+ * i386/i386/ktss.c: Likewise.
+ * i386/i386/locore.S: Likewise.
+ * i386/i386/mp_desc.c: Likewise.
+ * i386/i386/pcb.c: Likewise.
+ * i386/i386/proc_reg.h: Likewise.
+ * i386/i386/trap.c: Likewise.
+
+ Add initial code for disabling PV pagetables
+ * xen/configfrag.ac (--disable-pv-pagetables): Add option.
+ * i386/xen/xen_boothdr.S (XEN_ELFNOTE_FEATURES) [!MACH_PV_PAGETABLES]:
Add
+ writable_page_tables.
+ * i386/i386/gdt.c: Turn appropriate MACH_XEN/MACH_HYP tests into
+ MACH_PV_PAGETABLES tests.
+ * i386/i386/i386asm.sym: Likewise
+ * i386/i386/ldt.c: Likewise
+ * i386/i386/locore.S: Likewise
+ * i386/i386/proc_reg.h: Likewise
+ * i386/i386/user_ldt.c: Likewise
+ * i386/i386/vm_param.h: Likewise
+ * i386/i386/xen.h: Likewise
+ * i386/i386at/model_dep.c: Likewise
+ * i386/intel/pmap.h: Likewise
+ * include/mach/xen.h: Likewise
+ * xen/console.c: Likewise
+ * xen/store.c: Likewise
+ * i386/intel/pmap.c: Likewise. Define pmap_map_mfn as TODO stub.
+
+ Fix comments
+
+ Fix build with --disable-pseudo-phys
+ * i386/i386/i386asm.sym (PFN_LIST) [!MACH_PSEUDO_PHYS]: Do not define.
+
+ Add initial code for disabling ring1 xen execution
+ * xen/configfrag.ac (--disable-ring1): Add option.
+ * i386/xen/xen_boothdr.S (XEN_ELFNOTE_FEATURES) [!MACH_RING1]: Add
+ supervisor_mode_kernel.
+ * i386/i386/seg.h (KERNEL_RING) [!MACH_RING1]: Set macro to 0.
+
+ Add initial code for disabling PV descriptors
+ * xen/configfrag.ac (--disable-pv-descriptors): Add option
+ * i386/xen/xen_boothdr.S (XEN_ELFNOTE_FEATURES) [!MACH_PV_DESCRIPTORS]:
Add
+ writable_descriptor_tables.
+ * i386/i386/gdt.c: Turn appropriate MACH_XEN/MACH_HYP tests into
+ MACH_PV_DESCRIPTORS tests.
+ * i386/i386/gdt.h: Likewise.
+ * i386/i386/i386asm.sym: Likewise.
+ * i386/i386/idt.c: Likewise.
+ * i386/i386/idt_inittab.S: Likewise.
+ * i386/i386/ldt.c: Likewise.
+ * i386/i386/pcb.c: Likewise.
+ * i386/i386/seg.h: Likewise.
+ * i386/i386/user_ldt.c: Likewise.
+ * i386/i386/user_ldt.h: Likewise.
+
+2013-01-22 Richard Braun <address@hidden>
+
+ Add the mach_print debugging system call
+ The purpose of this system call is to help debugging in situations where
+ it's desirable to bypass the mach_msg call entirely.
+
+ * include/mach/syscall_sw.h (mach_print): Generate system call code.
+ * kern/syscall_subr.c: Include <kern/printf.h>.
+ [MACH_KDB] (mach_print): New function.
+ * kern/syscall_subr.h (mach_print): New prototype.
+ * kern/syscall_sw.c [MACH_KDB] (mach_trap_table): Declare mach_print
+ system call.
+
+2013-01-13 Samuel Thibault <address@hidden>
+
+ Merge branch 'master' of git.savannah.gnu.org:/srv/git/hurd/gnumach
+
+ Fix task stats incrementations
+ * vm/vm_fault.c (vm_fault_page): Properly increment
+ current_task()->zero_fills and cow_faults.
+
+2013-01-13 David Höppner <address@hidden>
+
+ Add statistics for task_events_info
+ * ipc/ipc_mqueue.c (ipc_mqueue_send, ipc_mqueue_receive): Increment
+ counters for message sent and received.
+ * kern/ipc_kobject.c (ipc_kobject_server): Increment sent and received
+ counters for the kernel task.
+ * kern/task.c (task_create): Zero statistics.
+ * kern/task.c (task_info): Add task_events_info call.
+ * kern/task.h: Add statistics.
+ * vm/vm_fault.c (vm_fault_page): Increment zero_fills, pageins,
+ reactivations and cow_faults counters.
+ * vm/vm_fault.c (vm_fault_wire_fast): Increment faults counters.
+ * vm/vm_pageout.c (vm_pageout_scan): Increment reactivations counter.
+
+2013-01-08 Richard Braun <address@hidden>
+
+ Fix slab cache list locking
+ This problem was overlooked because of simple locks being no-ops.
+
+ * kern/slab.c (slab_collect): Fix lock name to kmem_cache_list_lock.
+ (host_slab_info): Likewise.
+
+2013-01-08 Richard Braun <address@hidden>
+
+ Add function to dump a raw summary of the slab allocator state
+ The purpose of this function is to allow kernel code to display the
state
+ of the slab caches in situations where the host_slab_info RPC wouldn't
be
+ available, e.g. before a panic.
+
+ * kern/slab.c (slab_info): New function.
+ * kern/slab.h: Add declaration for slab_info.
+
+2013-01-06 Samuel Thibault <address@hidden>
+
+ Double KENTRY_DATA_SIZE
+ * vm/vm_map.h (KENTRY_DATA_SIZE): Bump from 32 pages to 64 pages.
+
+2013-01-04 David Höppner <address@hidden>
+
+ Fix compilation warning implicit function declaration kdbprintf
+ When kernel debugger support is requested ipc and vm need
+ the prototype for the debugger function kdbprintf.
+
+ * ddb/db_output.h: Add prototype for kdbprintf.
+ * ipc/ipc_object.c: Add include file ddb/db_output.h
+ * ipc/ipc_port.c: Likewise.
+ * ipc/ipc_pset.c: Likewise.
+ * vm/vm_map.c: Likewise.
+ * vm/vm_object.c: Likewise.
+ * vm/vm_resident.c: Likewise.
+
+2012-12-27 Samuel Thibault <address@hidden>
+
+ Fix slow boot in virtualbox
+ By disabling some of the most slow drivers by default, and giving
progress
+ feedback to the user.
+
+ * linux/configfrag.ac (CONFIG_SCSI_NCR53C7xx, CONFIG_SCSI_AIC7XXX,
+ CONFIG_SCSI_GDTH): Disable by default
+ * linux/src/drivers/scsi/eata.c (__initfunc): Don't feed line in probe
+ message.
+ * linux/src/drivers/scsi/hosts.c (scsi_init): Print SCSI probe progress.
+
+2012-12-27 Samuel Thibault <address@hidden>
+
+ Fix spurious error on accessing fd1
+ Cherry picked from Linux kernel commit
76c25284e0d845bff4ee1031721556148af4db1c
+
+ * linux/dev/drivers/block/floppy.c (config_types): Clear from
+ `allowed_drive_mask' floppy drives whose cmos type is 0.
+
+2012-12-23 Samuel Thibault <address@hidden>
+
+ Merge branch 'master' of git.savannah.gnu.org:/srv/git/hurd/gnumach
+
+2012-12-23 Samuel Thibault <address@hidden>
+
+ Make thread_suspend wait for !TH_UNINT
+ 0a55db5 made thread_suspend return KERN_FAILURE when the target thread
is in
+ TH_UNINT state. That however is not currently handled by libc, and it's
more
+ useful to just wait for the thread to get interruptible.
+
+ * kern/sched_prim.c (thread_invoke): Wake NEW_THREAD->STATE for
thread_suspend.
+ * kern/thread.c (thread_suspend): Wait on NEW_THREAD->STATE as long as
THREAD
+ has TH_UNINT.
+
+2012-12-21 David S. Miller <address@hidden>
+
+ ide: Increase WAIT_DRQ to accomodate some CF cards and SSD drives.
+ Based upon a patch by Philippe De Muyter, and feedback from Mark
+ Lord and Robert Hancock.
+
+ As noted by Mark Lord, the outdated ATA1 spec specifies a 20msec
+ timeout for setting DRQ but lots of common devices overshoot this.
+
+ (cherry picked from Linux kernel commit
602da297e293eb2cbd28dcdbbe247593a46a853a)
+
+ * linux/src/drivers/block/ide.h (WAIT_DRQ): Increase to 1 s.
+
+2012-12-21 Thomas Schwinge <address@hidden>
+
+ IDE disk drives with unusual C/H/S.
+ * linux/src/drivers/block/ide.c: Partially update to Linux 2.0.40 code.
+
+2012-12-05 Richard Braun <address@hidden>
+
+ Fix kernel task creation time
+ The mapable_time_init function is called before machine_init, but the
+ latter sets the system boot time. Fix their calling order.
+
+ * kern/startup.c (setup_main): Call machine_init before
mapable_time_init.
+
+2012-12-04 Richard Braun <address@hidden>
+
+ Strongly reduce risks of name capture in rbtree macros
+ * kern/rbtree.h (rbtree_lookup): Prefix local variable names with three
+ underscores.
+ (rbtree_lookup_nearest): Likewise.
+ (rbtree_insert): Likewise.
+ (rbtree_lookup_slot): Likewise.
+ (rbtree_insert_slot): Rewrite as an inline function.
+
+2012-11-21 Richard Braun <address@hidden>
+
+ Fix calls to vm_map when size is 0
+ * vm/vm_map.c (vm_map_enter): return KERN_INVALID_ARGUMENT if size is 0.
+ * vm/vm_user.c (vm_map): Likewise.
+
+2012-11-19 Matthew Leach <address@hidden>
+
+ Fix compilation error with older versions of GCC
+ Some versions of GCC will error if you define a type twice (even if
+ the definition is the same). The NCR53C8XX SCSI driver defines
+ 'vm_offset_t', this is also defined in vm_types.h and will therefore
+ cause a compilation error depending on the GCC version.
+
+ * linux/src/drivers/scsi/ncr53c8xx.c [!MACH] (vm_offset_t, vm_size_t):
Don't
+ define types.
+
+2012-09-23 Samuel Thibault <address@hidden>
+
+ Fix gnumach_server_routine prototype
+ * kern/ipc_kobject.c (ipc_kobject_server): Set gnumach_server_routine
+ prototype to mig_routine_t.
+
+2012-09-23 Richard Braun <address@hidden>
+
+ Add missing file for page statistics
+ * kern/gnumach.srv: New file.
+
+ Add missing file for page statistics
+ * include/mach/vm_cache_statistics.h: New file
+
+2012-09-23 Gianluca Guida <address@hidden>
+
+ Fix panic on irq >= 16
+ * linux/src/drivers/net/pci-scan.c (pci_drv_register): Skip device
+ if we are getting an invalid IRQ >= 16 and different from 255 (it
+ happens in some motherboard).
+
+2012-09-23 Sergio Lopez <address@hidden>
+
+ Update DMA auto-enabling, make forcing DMA an option
+ * linux/configfrag.ac (--enable-ide-forcedma): Add option.
+ * linux/src/drivers/block/ide.c (ide_probe_promise_20246): Do not call
+ ide_init_promise.
+ (probe_for_hwifs): Add SI, VIA, AL PCI probing.
+ * linux/src/drivers/block/ide.h (hwif_chipset_t): Add hpt343, udma and
+ ultra66 chipsets.
+ * linux/src/drivers/block/triton.c: Update to upstream 1.14 version.
+ * linux/src/include/linux/hdreg.h (HDIO_GET_IDENTITY): Rename to ...
+ (HDIO_OBSOLETE_IDENTITY): ... new macro.
+ (HDIO_GET_IDENTITY): New macro.
+ (hd_driveid): Add fields for extended identification.
+
+2012-09-23 Alexey Dejneka <address@hidden>
+
+ Fix CDROM door unlock on closure without device_close
+ * linux/dev/glue/block.c
+ (device_open): Properly return devp on multiple opens.
+ (device_close_forced): Renamed from device_close, when force parameter
is 1, do
+ not wait for open_count to become 0 before closing.
+ (device_close): New function.
+ (device_no_senders): New function.
+ linux_block_emulation_ops: Use (device_no_senders).
+
+2012-09-23 Richard Braun <address@hidden>
+
+ Provide basic page cache statistics
+ * Makefrag.am (EXTRA_DIST): Add kern/gnumach.srv.
+ (include_mach_HEADERS): Add include/mach/gnumach.defs and
+ include/mach/vm_cache_statistics.h
+ (nodist_libkernel_a_SOURCES): Add kern/gnumach.server.defs.c,
+ kern/gnumach.server.h, kern/gnumach.server.c,
kern/gnumach.server.msgids,
+ kern/gnumach.server.defs.
+ * include/mach/mach_types.h: Add #include <mach/vm_cache_statistics.h>.
+ * kern/ipc_kobject.c (ipc_kobject_server): Declare and call
+ gnumach_server_routine.
+ * vm/vm_object.c (vm_object_cached_pages): New variable.
+ (vm_object_cached_pages_lock_data): Likewise.
+ (vm_object_deallocate): Update number of cached pages.
+ (vm_object_lookup): Likewise.
+ (vm_object_lookup_name): Likewise.
+ (vm_object_destroy): Likewise.
+ (vm_object_enter): Likewise.
+ * vm/vm_object.h (ref_count): Declare as int.
+ (resident_page_count): Likewise.
+ (vm_object_cached_count): Add extern declaration.
+ (vm_object_cached_pages): Likewise.
+ (vm_object_cached_pages_lock_data): Likewise.
+ (vm_object_cached_pages_update): New macro.
+ * vm/vm_resident.c (vm_page_insert): Assert resident page count doesn't
+ overflow, update number of cached pages as appropriate.
+ (vm_page_replace): Likewise.
+ (vm_page_remove): Update number of cached pages as appropriate.
+ * vm/vm_user.c: Add #include <mach/vm_cache_statistics.h>.
+ (vm_cache_statistics): New function.
+ * vm/vm_user.h: Add #include <mach/mach_types.h>.
+ (vm_cache_statistics): New declaration.
+ * include/mach/gnumach.defs: New file.
+
+2012-08-24 Richard Braun <address@hidden>
+
+ Store threads waiting on a message queue in LIFO order
+ * ipc/ipc_thread.h (ipc_thread_enqueue_macro): Insert thread at the
+ head of the list instead of the tail.
+
+2012-07-14 Samuel Thibault <address@hidden>
+
+ Fix Xen boot at linear address 0xC0000000
+ * i386/intel/pmap.c (pmap_bootstrap): Interate over linear addresses
and compute
+ l3 and l2 offsets from it instead of assuming nul l3 offset.
+
+2012-07-08 Richard Braun <address@hidden>
+
+ Fix slab collection timing
+ The slab garbage collector uses sched_tick as its time reference, which
+ is increased every seconds, while the interval is expressed in clock
+ ticks. Use the proper time reference instead.
+
+ * kern/slab.c (kmem_gc_last_tick): Declare as unsigned long.
+ (slab_collect): Use elapsed_ticks instead of sched_tick.
+
+2012-07-08 Richard Braun <address@hidden>
+
+ Increase the slab collection interval
+ * kern/slab.c (KMEM_GC_INTERVAL): Increase to 5 seconds.
+
+2012-07-07 Richard Braun <address@hidden>
+
+ Allocate kernel thread stacks out of kmem_map
+ The kernel submaps eat most of the available kernel space. Using the
+ main kernel map for thread stacks sometimes lead to exhaustion when many
+ threads are created. Use kmem_map instead to increase this limit.
+
+ * kern/thread.c (stack_alloc): Use kmem_map instead of kernel_map for
+ stack allocation.
+ (stack_collect): Likewise for release.
+
+2012-07-07 Richard Braun <address@hidden>
+
+ Merge kalloc_map into kmem_map
+ * ipc/ipc_table.c: Add #include <kern/slab.h>.
+ (ipc_table_alloc): Use kmem_map instead of kalloc_map when allocating
+ a table.
+ (ipc_table_realloc): Likewise for reallocation.
+ (ipc_table_free): Likewise for release.
+ * kern/kalloc.h (kalloc_map): Remove declaration.
+ * kern/slab.c (KMEM_MAP_SIZE): Increase to 128 MiB.
+ (KALLOC_MAP_SIZE): Remove macro.
+ (kalloc_map_store): Remove variable.
+ (kalloc_map): Likewise.
+ (kalloc_pagealloc): Use kmem_map instead of kalloc_map for general
+ purpose allocations.
+ (kalloc_pagefree): Likewise.
+ (kalloc_init): Remove the creation of kalloc_map.
+
+2012-06-10 Samuel Thibault <address@hidden>
+
+ Permit to select/deselect whole driver groups
+ * linux/configfrag.ac (AC_OPTION_Linux_group): New function
+ (AC_OPTION_Linux_ix86_at): Do not enable driver by default if the group
was
+ explicitly disabled.
+ (scsi, net, pcmcia, wireless): Define groups.
+
+2012-05-17 Samuel Thibault <address@hidden>
+
+ Offset bios32 entry
+ * linux/src/arch/i386/kernel/bios32.c (check_pcibios, pcibios_init):
Convert
+ physical bios32 entry address to kernel virtual address.
+
+2012-05-17 Samuel Thibault <address@hidden>
+
+ Clear direction flag after bios32 call
+ Linux does this, there are probably wild BIOSes out there.
+
+ * linux/src/arch/i386/kernel/bios32.c (bios32_service, check_pcibios,
+ pci_bios_find_class, pci_bios_find_device, pci_bios_read_config_byte,
+ pci_bios_read_config_word, pci_bios_read_config_dword,
+ pci_bios_write_config_byte, pci_bios_write_config_word,
+ pci_bios_write_config_dword): Clear direction flag after lcall to
bios32.
+
+2012-05-05 Samuel Thibault <address@hidden>
+
+ Offset kernel addresses by 3GiB
+ This permits better trace support in kdb.
+
+ * i386/i386/vm_param.h (VM_MIN_KERNEL_ADDRESS): Set to 0xC0000000
+ * i386/Makefrag.am (_START): Set to 0xC0100000.
+
+2012-05-05 Samuel Thibault <address@hidden>
+
+ Document how to offset the kernel to get better debugging
+ * i386/i386/vm_param.h (VM_MIN_KERNEL_ADDRESS): Document that it can be
+ changed, but _START has to be offset too.
+ (INIT_VM_MIN_KERNEL_ADDRESS): Document that it should remain 0.
+
+2012-04-27 Richard Braun <address@hidden>
+
+ Augment VM maps with a red-black tree
+ * vm/vm_map.c: Add #include <kern/rbtree.h>.
+ (vm_map_setup): Initialize the map red-black tree.
+ (vm_map_entry_cmp_lookup): New function.
+ (vm_map_entry_cmp_insert): Likewise.
+ (_vm_map_entry_link): Insert map entry in the red-black tree.
+ (_vm_map_entry_unlink): Remove map entry from the red-black tree.
+ (vm_map_lookup_entry): Rework the way the VM map hint is used, and
+ replace the linear search with a binary search tree lookup.
+ (vm_map_copy_insert): Move map entries from the map copy tree to the
+ destination map tree.
+ (vm_map_copyin): Initialize the map copy red-black tree.
+ * vm/vm_map.h: Add #include <kern/rbtree.h>.
+ (vm_map_entry): Add `tree_node' member.
+ (vm_map_header): Add `tree' member.
+
+2012-04-22 Richard Braun <address@hidden>
+
+ Update comments.
+ Literature about red-black trees vary concerning the cases numbering,
+ and the implementation doesn't make all of them clearly appear. Remove
+ cases numbering references to avoid confusion.
+
+2012-04-22 Richard Braun <address@hidden>
+
+ Fix copyright assignment
+ Maksym and I have assigned copyright to the Free Software Foundation.
+ In addition, restore the original upstream copyrights for correctness.
+
+ * kern/list.h: Fix copyright assignment.
+ * kern/rbtree.c: Likewise.
+ * kern/rbtree.h: Likewise.
+ * kern/rbtree_i.h: Likewise.
+ * kern/slab.c: Likewise.
+ * kern/slab.h: Likewise.
+
+2012-04-06 Samuel Thibault <address@hidden>
+
+ Check hyp_stack_switch return
+ * i386/i386/pcb.c (switch_ktss): Check value returned by
hyp_stack_switch.
+
+ Fix integer type
+ * kern/thread.c (host_stack_usage): Set `total' type to natural_t.
+
+2012-04-06 Samuel Thibault <address@hidden>
+
+ Do not take address of va_list variable
+ This breaks on x86_64, where it is an array and thus gets bogus results.
+
+ * ddb/db_output.c (db_printf, kdbprintf): Pass copy of va_list variable
instead
+ of its address.
+ * kern/debug.c (panic, log): Likewise.
+ * kern/printf.c (vprintf, iprintf, sprintf, vsnprintf): Likewise.
+ (_doprnt): Take va_list instead of va_list *, fix usage and comment
accordingly.
+ * kern/printf.h (_doprnt): Take va_list instead of va_list *.
+
+2012-03-24 Samuel Thibault <address@hidden>
+
+ Fix Xen boot after c74adfe
+ * i386/Makefrag.am (_START_MAP): Define symbol to 0x100000.
+ * i386/xen/Makefrag.am (_START_MAP): Define symbol to 0xC0000000.
+ * i386/ldscript: Use _START_MAP instead of hardcoding 0x100000.
+
+2012-03-24 Samuel Thibault <address@hidden>
+
+ Relocate kernel at bootup
+ Grub is not able to map us at high addresses. We can however make it
load us at
+ low addresses (through the linker script mapping), then use
segmentation to move
+ ourselves to high addresses, and switch to C which uses high addresses
+ (through _START definition).
+
+ * i386/ldscript: Force mapping kernel at 0x100000, regardless of the
value
+ of _START.
+ * i386/i386at/boothdr.S (boot_entry): Set up initial segments to
project the
+ bootstrap linear space to high addresses.
+
+2012-03-24 Samuel Thibault <address@hidden>
+
+ Make sure BIOS area is mapped in kernel threads
+ * i386/i386at/model_dep.c (i386at_init): Map BIOS memory at 0.
+ * i386/intel/pmap.c (pmap_create): Do not map BIOS memory in user tasks.
+
+2012-03-24 Samuel Thibault <address@hidden>
+
+ Separate INIT_VM_MIN_KERNEL_ADDRESS from VM_MIN_KERNEL_ADDRESS
+ The former is the initial value set by the bootloader. It may not be the
+ same as what Mach will set up.
+
+ * i386/i386/vm_param.h (INIT_VM_MIN_KERNEL_ADDRESS): New macro.
+ * i386/i386at/model_dep.c (i386at_init): Use INIT_VM_MIN_KERNEL_ADDRESS
+ instead of VM_MIN_KERNEL_ADDRESS.
+
+2012-03-24 Samuel Thibault <address@hidden>
+
+ Add missing phystokv/kvtophys calls
+ * i386/i386/vm_param.h [!MACH_XEN]: Do not include <xen/public/xen.h>.
+ * i386/i386at/model_dep.c (init_alloc_aligned): Use phystokv to compare
physical
+ memory addresses with kernel start, end, and symbol table.
+ * i386/intel/pmap.c (pmap_enter): Use kvtophys to convert ptp pointer
to pte
+ entry.
+ * linux/dev/init/main.c (alloc_contig_mem, linux_init): Use phystokv to
convert
+ allocated pages to virtual pointer.
+ * linux/src/include/asm-i386/io.h: Include <machine/vm_param.h>.
+ (virt_to_phys): Call _kvtophys.
+ (phys_to_virt): Call phystokv.
+ * linux/src/include/linux/compatmac.h: Include <asm/io.h>.
+ (ioremap): Use phys_to_virt to convert physical address to virtual
pointer.
+ (my_iounmap): Likewise.
+ * linux/dev/include/asm-i386/page.h: Include <mach/vm_param.h>.
+ (PAGE_SHIFT, PAGE_SIZE, PAGE_MASK): Remove macros.
+ * linux/src/drivers/scsi/ncr53c8xx.c (vm_size_t): Remove type.
+ * linux/dev/glue/net.c: Include <machine/vm_param.h>
+ (device_write): Call phystokv to convert from physical page address to
+ virtual pointer.
+ * linux/dev/glue/block.c (alloc_buffer, free_buffer, rdwr_full):
Likewise.
+
+ Fix issig crash at boot
+ * linux/dev/glue/misc.c (issig): Return 0 if current_thread() is NULL.
+
+ Fix wrap-around in pmap bootstrap
+ * i386/intel/pmap.c (pmap_bootstrap): Check against `va' wrap around
+ 0xffffffff.
+
+2012-03-23 Samuel Thibault <address@hidden>
+
+ Fix boot with big values of _start
+ When _start is not close to 0, just using init_alloc_aligned() is not
enough
+ to know how much should be duplicated between linear and virtual
mappings.
+ Just mapping everything that can be is not very costly and should just
work
+ when it can work.
+
+ * i386/i386at/model_dep.c (i386at_init) [VM_MIN_KERNEL_ADDRESS !=
+ LINEAR_MIN_KERNEL_ADDRESS]: Extend `nb_direct' to VM_MIN_KERNEL_ADDRESS
-
+ LINEAR_MIN_KERNEL_ADDRESS.
+
+2012-03-22 Ludovic Courtès <address@hidden>
+
+ Refer to `PFN_LIST' on Xen only.
+ * i386/i386/i386asm.sym (PFN_LIST): Enclose in #ifdef MACH_XEN. Thanks
+ to Samuel Thibault for the suggestion.
+
+2012-03-20 Samuel Thibault <address@hidden>
+
+ Use long types
+ * ddb/db_examine.c (db_xcdump): Do not cast addr before passing to
+ db_read_bytes.
+ * ddb/db_macro.c (db_arg_variable): Return long.
+ * ddb/db_macro.h (db_arg_variable): Likewise.
+ * ddb/db_sym.c (db_maxoff): Set type to unsigned long.
+ * ddb/db_task_thread.c (db_set_default_thread, db_get_task_thread):
Return
+ long.
+ * ddb/db_variables.h (db_variable): Make fcn function field to return
long.
+ (FCN_NULL): Make function type return long.
+ * i386/i386/db_interface.c (int_regs): Set field sizes to long.
+ * i386/i386/db_machdep.h (db_expr_t): Set type to long.
+ * i386/i386/db_trace.c (db_i386_reg_value): Return long. Use long types.
+ (i386_frame, i386_kregs, interrupt_frame, db_nextframe): Set field
sizes to
+ long.
+ (db_regs, i386_kregs): Use long * pointers.
+ (db_lookup_i386_kreg): Return long *.
+ (db_numargs, db_nextframe, db_stack_trace_cmd, db_i386_stack_trace):
Use long
+ types.
+ * i386/i386/debug_i386.c (dump_ss): Fix format.
+ * i386/i386/ktss.c (ktss_init): Use long type.
+ * i386/i386/pcb.c (set_user_regs): Likewise.
+ * i386/i386/thread.h (i386_saved_state, v86_segs, i386_kernel_state,
+ i386_interrupt_state): Set field sizes to long.
+ * i386/i386/trap.c (kernel_trap, user_trap): Fix formats.
+ * kern/ast.h (ast_t): Set type to long.
+ * kern/boot_script.c (create_task, resume_task, prompt_resume_task,
+ boot_script_set_variable): Use long types.
+ * kern/boot_script.h (boot_script_set_variable): Use long type.
+ * kern/bootstrap.c (bootstrap_create): Pass long type.
+ * kern/lock.c (simple_lock, simple_lock_try): Use long type.
+ * linux/dev/kernel/softirq.c (linux_soft_intr): Fix format.
+
+ Complain about Xen console smash only once at a time
+ * xen/console.c (hypputc): Warning only once per console write about
console
+ ring smash.
+
+ Make xchgl arch-neutral
+ * i386/i386/xen.h (xchgl): Use xchg instruction instead of xchgl, so the
+ assembler can detect unsigned long size.
+
+2012-03-20 Guillem Jover <address@hidden>
+
+ Use compiler defined __i386__ symbol instead of use defined i386
+ * i386/configfrag.ac (i386): Remove definition.
+ * i386/intel/pmap.c (pmap_update_interrupt): Rename i386 to __i386__.
+ * i386/intel/pmap.h: Likewise.
+ * kern/debug.c (Debugger): Likewise.
+ * kern/lock.c (simple_lock, simple_lock_try, db_show_all_slocks):
Likewise.
+
+2012-03-20 Guillem Jover <address@hidden>
+
+ Change types holding cpu flags from int to long
+ On amd64 the cpu flags is a 64-bit word, and long on 32-bit systems is
+ 32-bit wide anyway.
+
+ * linux/dev/glue/kmem.c (linux_kmalloc, linux_kfree, __get_free_pages,
+ free_pages): Use unsigned long instead of unsigned.
+ * linux/dev/include/asm-i386/system.h (__save_flags, __restore_flags):
+ Likewise.
+ * linux/dev/kernel/printk.c (printk): Likewise.
+ * linux/src/drivers/scsi/advansys.c (DvcEnterCritical, DvcLeaveCritical,
+ advansys_queuecommand, advansys_abort, advansys_reset,
advansys_interrupt,
+ interrupts_enabled, AdvISR): Likewise.
+ * linux/src/drivers/scsi/aha152x.c (aha152x_intr): Likewise.
+ * linux/src/drivers/scsi/aha1542.c (aha1542_intr_handle): Likewise.
+ * linux/src/drivers/scsi/aic7xxx.c (aic7xxx_done_cmds_complete):
Likewise.
+ * linux/src/drivers/scsi/ultrastor.c (log_ultrastor_abort,
+ ultrastor_queuecommand, ultrastor_abort): Likewise.
+
+2012-03-20 Guillem Jover <address@hidden>
+
+ Match type for count with tty_get_status and tty_set_status
+ * i386/i386at/com.c (comgetstat): Use natural_t instead of `unsigned
int'.
+ (comsetstat): Likewise.
+ * i386/i386at/kd.c (kdgetstat, kdsetstat): Likewise.
+ * i386/i386at/lpr.c (lprgetstat, lprsetstat): Likewise.
+
+2012-03-19 Samuel Thibault <address@hidden>
+
+ Use unsigned int for ELF 32bit values
+ * i386/include/mach/i386/exec/elf.h (Elf32_Addr, Elf32_Off, Elf32_Sword,
+ Elf32_Word): Use int type instead of long.
+
+2012-03-18 Samuel Thibault <address@hidden>
+
+ Fix assembly snippet portability
+ * xen/evt.c (hyp_c_callback): Do not set assembly instruction suffixes,
+ using 1UL constant instead.
+
+ Use unsigned long types for addresses
+ * i386/include/mach/i386/vm_param.h (i386_btop, i386_ptob,
i386_round_page,
+ i386_trunc_page): Cast to unsigned long.
+
+ Use unsigned long for registers
+ * i386/i386/proc_reg.h (get_eflags, get_esp, get_eflags, get_cr0,
get_cr2,
+ get_cr3, get_cr4): Return unsigned long type.
+ (set_eflags, set_cr0, set_cr3, set_cr4): Take unsigned long type.
+
+ Do not hardcode structure offset
+ * i386/i386/i386asm.sym (R_EDI): Define macro.
+ * i386/i386/locore.S (t_page_fault): Use R_CR2-R_EDI instead of
hardcoded
+ 12.
+
+2012-03-18 Samuel Thibault <address@hidden>
+
+ Set Xen kernel virtual address to 0xC0000000
+ That makes the virtual addressing equal to linear addressing, thus
optimizing
+ some computations away.
+
+ * i386/i386/vm_param.h (VM_MIN_KERNEL_ADDRESS) [MACH_XEN]: Set to
+ 0xC0000000UL.
+ * i386/xen/Makefrag.am (gnumach_LINKFLAGS): Set _START to 0xC0000000.
+ * i386/xen/xen_boothdr.S (VIRT_BASE, ELF_PADDR_OFFSET): Set to
0xC0000000.
+
+2012-03-18 Samuel Thibault <address@hidden>
+
+ Fix access above 4GiB in bootstrap page table
+ * i386/intel/pmap.c (pmap_set_page_readonly_init) [PAE]: Access the
bootstrap
+ dirbase with PTEMASK (1 page) instead of PDEMASK (4 pages) through
pmap_pde.
+
+2012-03-15 Thomas Schwinge <address@hidden>
+
+ Fix build error introduced in 5f701793f63f16d111db3e3d2e91134fcc179c5b.
+ * linux/src/include/linux/interrupt.h (intr_count): Declare as unsigned
int.
+
+2012-03-14 Samuel Thibault <address@hidden>
+
+ Simplify splx
+ * i386/i386/spl.S (splx): Use S_ARG0 instead of reimplementing it.
+
+ Fix variable types according to assembly use
+ * linux/dev/arch/i386/kernel/irq.c (intr_count): Set to int type.
+ * linux/dev/kernel/softirq.c (bh_active, bh_mask): Likewise.
+ (linux_soft_intr: active, mask, left): Likewise
+ * linux/src/include/linux/interrupt.h (bh_active, bh_mask): Likewise.
+ * linux/src/kernel/softirq.c (intr_count, bh_active, bh_mask): Likewise.
+ (do_bottom_half: active, mask, left): Likewise
+
+ Stick to binutils ELF scripts
+ * i386/ldscript: Reformat to follow binutils version
+
+ Fix PAE page frame number mask.
+ * i386/intel/pmap.h (INTEL_PTE_PFN): Keep only 47bits, others are not
usable.
+
+ Fix Xen bootstrap at virtual address above 1GiB
+ * i386/intel/pmap.h (lin2pdpnum): New macro.
+ * i386/intel/pmap.c (pmap_set_page_readonly_init): Use lin2pdpnum macro
+ instead of hardcoding 0.
+
+ Simplify i386at_init
+ * i386/i386at/model_dep.c (i386at_init): Do not copy linear into
virtual kernel
+ mapping when they are equal, and do not drop the former either. Use the
+ function `i' variable.
+
+ Simplify kvtophys
+ * i386/i386/phys.c (kvtophys): Use pte_to_pa macro instead of
reimplementing
+ it.
+
+2012-03-09 Samuel Thibault <address@hidden>
+
+ Use unsigned long for addresses and sizes
+ TODO: remonter formats
+
+ * i386/include/mach/i386/vm_types.h (vm_offset_t): Define to unsigned
long.
+ (signed32_t): Define to signed int.
+ (unsigned32_t): Define to unsigned int.
+ * i386/include/mach/sa/stdarg.h (__va_size): Use sizeof(unsigned long)-1
+ instead of 3.
+ * include/mach/port.h (mach_port_t): Define to vm_offset_t instead of
+ natural_t.
+ * include/sys/types.h (size_t): Define to unsigned long instead of
+ natural_t.
+ * linux/src/include/asm-i386/posix_types.h (__kernel_size_t): Define to
+ unsigned long.
+ (__kernel_ssize_t): Define to long.
+ * linux/src/include/linux/stddef.h (size_t): Define to unsigned long.
+
+ * device/dev_pager.c (dev_pager_hash): Cast port to vm_offset_t insted
of
+ natural_t.
+ (device_pager_data_request): Fix format.
+
+ * device/ds_routines.c (ds_no_senders): Fix format.
+ * i386/i386/io_map.c (io_map): Likewise.
+ * i386/i386at/autoconf.c (take_dev_irq): Likewise.
+ * i386/i386at/com.c (comattach): Likewise.
+ * i386/i386at/lpr.c (lprattach): Likewise.
+ * i386/i386at/model_dep.c (mem_size_init, mem_size_init, c_boot_entry):
+ Likewise.
+ * i386/intel/pmap.c (pmap_enter): Likewise.
+ * ipc/ipc_notify.c (ipc_notify_port_deleted, ipc_notify_msg_accepted,
+ ipc_notify_dead_name): Likewise.
+ * ipc/mach_port.c (mach_port_destroy, mach_port_deallocate): Likewise.
+ * kern/ipc_kobject.c (ipc_kobject_destroy): Likewise.
+ * kern/slab.c (kalloc_init): Likewise.
+ * vm/vm_fault.c (vm_fault_page): Likewise.
+ * vm/vm_map.c (vm_map_pmap_enter): Likewise.
+ * xen/block.c (device_read): Likewise.
+
+ * device/net_io.c (bpf_match): Take unsigned long * instead of unsigned
int
+ *.
+ (bpf_do_filter): Make mem unsigned long instead of long.
+ * i386/i386/ktss.c (ktss_init): Cast pointer to unsigned long instead of
+ unsigned.
+ * i386/i386/pcb.c (stack_attach, switch_ktss): Cast pointers to long
instead of
+ int.
+ * i386/i386/trap.c (dump_ss): Likewise.
+ * ipc/ipc_hash.c (IH_LOCAL_HASH): Cast object to vm_offset_t.
+ * ipc/mach_msg.c (mach_msg_receive, mach_msg_receive_continue): Cast
kmsg to
+ vm_offset_t instead of natural_t.
+ * kern/pc_sample.c (take_pc_sample): Cast to vm_offset_t instead of
+ natural_t.
+ * kern/boot_script.c (sym, arg): Set type of `val' field to long
instead of int.
+ (create_task, builtin_symbols, boot_script_parse_line,
+ boot_script_define_function): Cast to long instead of int.
+ * kern/bootstrap.c (bootstrap_create): Likewise.
+ * kern/sched_prim.c (decl_simple_lock_data): Likewise.
+ * kern/printf.c (vsnprintf): Set size type to size_t.
+ * kern/printf.h (vsnprintf): Likewise.
+ * vm/vm_map.h (kentry_data_size): Fix type to vm_size_t.
+ * vm/vm_object.c (vm_object_pmap_protect_by_page): Fix size parameter
type
+ to vm_size_t.
+
+2012-03-08 Samuel Thibault <address@hidden>
+
+ Move kentry_data_size initial value to header
+ * vm/vm_map.h (KENTRY_DATA_SIZE): Define macro.
+ * vm/vm_map.c (kentry_data_size): Initialize to KENTRY_DATA_SIZE.
+
+2012-03-03 Gabriele Giacone <address@hidden>
+
+ Set default serial parameters to 8N1 instead of 7E1
+ * i386/i386at/com.c (comcninit): Set LINE_CTL register to i8BITS
instead of
+ i7BITS|iPEN.
+
+2012-02-19 Samuel Thibault <address@hidden>
+
+ Fix format for string print
+ * linux/src/drivers/net/3c505.c (elp_sense): Use %s format for printing
a mere
+ string, not the string.
+
+ Fix format for string print
+ * linux/src/drivers/net/8390.c: Use %s format for printing a mere
string, not
+ the string.
+
+ Fix format for string print
+ * linux/src/drivers/net/3c503.c (el2_probe1): Use %s format for
printing a mere
+ string, not the string.
+
+ Fix format for string print
+ * linux/src/drivers/scsi/aha1542.c (aha1542_setup): Use %s format for
printing a
+ mere string, not the string.
+
+ Fix format for string print
+ * linux/src/drivers/scsi/advansys.c (asc_prt_line): Use %s format for
+ printing a mere string, not the string.
+
+ Fix format for string print
+ * i386/i386at/model_dep.c (c_boot_entry): Use %s format for printing a
mere
+ string, not the string.
+
+2012-01-28 Samuel Thibault <address@hidden>
+
+ Merge branch 'master' into master-slab
+
+2012-01-22 Samuel Thibault <address@hidden>
+
+ Fix build on 64bit host
+ When stealing the memset function from the 32bit host libc on a 64bit
host
+ system, glibc tends to bring unwanted references to _Unwind_Resume,
+ __gcc_personality_v0, etc. So let's stop stealing memset.
+
+ * kern/strings.c (memset): New function.
+ * Makefile.am (clib_routines): Remove memset.
+
+2012-01-09 Richard Braun <address@hidden>
+
+ Improve ipc hash/marequest init readability
+ Use macros instead of raw numeric values.
+
+ * ipc/ipc_hash.h (IPC_HASH_GLOBAL_SIZE): New macro.
+ * ipc/ipc_hash.c (ipc_hash_init): Directly set the global hash table
+ size to IPC_HASH_GLOBAL_SIZE.
+ * ipc/ipc_marequest.h (IPC_MAREQUEST_SIZE): New macro.
+ * ipc/ipc_marequest.c (ipc_marequest_init): Directly set the marequest
+ hash table size to IPC_MAREQUEST_SIZE.
+
+2011-12-30 Samuel Thibault <address@hidden>
+
+ Cope with dom0s which do not respect feature-no-csum-offload
+ Event with feature-no-csum-offload=1, some dom0s (such as Debian
Squeeze's
+ 2.6.32) send packets with a blank checksum. Recompute them before givin
the
+ packet to pfinet.
+
+ * xen/net.c (recompute_checksum): New function.
+ (hyp_net_intr): Call recompute_checksum when the checksum is blank but
the
+ data is validated.
+
+2011-12-29 Samuel Thibault <address@hidden>
+
+ Fix typo
+
+ Upgrade number of event queues
+ * kern/sched_prim.c (NUMQUEUES): Increase to 1031
+
+2011-12-17 Richard Braun <address@hidden>
+
+ Remove arbitrary limits used by the zone system
+ The zone allocator could limit the size of its zones to an arbitrary
+ value set at zinit() time. There is no such parameter with the slab
+ module. As a result of removing those limits, the kern/mach_param.h
+ header becomes empty, and is simply removed altogether.
+
+ * Makefrag.am (libkernel_a_SOURCES): Remove kern/mach_param.h.
+ * i386/i386/fpu.c: Remove #include <kern/mach_param.h>.
+ * i386/i386/machine_task.c: Likewise.
+ * i386/i386/pcb.c: Likewise.
+ * ipc/ipc_init.c: Likewise.
+ (ipc_space_max): Remove variable.
+ (ipc_tree_entry_max): Likewise.
+ (ipc_port_max): Likewise.
+ (ipc_pset_max): Likewise.
+ * ipc/ipc_init.h (IPC_ZONE_TYPE): Remove macro.
+ (ipc_space_max): Remove extern declaration.
+ (ipc_tree_entry_max): Likewise.
+ (ipc_port_max): Likewise.
+ (ipc_pset_max): Likewise.
+ * ipc/ipc_hash.c (ipc_hash_init): Don't use ipc_tree_entry_max to
+ compute ipc_hash_global_size.
+ * ipc/ipc_marequest.c: Remove #include <kern/mach_param.h>.
+ (ipc_marequest_max): Remove variable.
+ (ipc_marequest_init): Don't use ipc_marequest_max to compute
+ ipc_marequest_size.
+ (ipc_marequest_info): Return (unsigned int)-1 in maxp.
+ * kern/act.c: Remove #include <kern/mach_param.h>.
+ * kern/mach_clock.c: Likewise.
+ * kern/priority.c: Likewise.
+ * kern/task.c: Likewise.
+ * kern/thread.c: Likewise.
+ * vm/memory_object_proxy.c: Likewise.
+ * vm/vm_fault.c: Likewise.
+
+2011-12-17 Richard Braun <address@hidden>
+
+ Remove the defunct kernel_task_create() function
+ The kmem_suballoc() function, which has been replaced with
+ kmem_submap(), is called by kernel_task_create(). Rather than update it,
+ remove this now unused function.
+
+ * kern/task.c (kernel_task_create): Remove function.
+ * kern/task.h (kernel_task_create): Remove prototype.
+
+2011-12-17 Richard Braun <address@hidden>
+
+ Fix kern/kalloc.h includes
+ * device/dev_pager.c: Remove #include <kern/kalloc.h>.
+ * i386/i386/io_perm.c: Add #include <kern/kalloc.h>.
+ * kern/bootstrap.c: Likewise.
+ * kern/ipc_tt.c: Likewise.
+ * kern/pc_sample.c: Likewise.
+ * kern/processor.c: Likewise.
+ * kern/server_loop.ch: Likewise.
+ * kern/thread.c: Likewise.
+ * linux/dev/glue/block.c: Likewise.
+ * linux/dev/glue/net.c: Likewise.
+ * vm/vm_map.c: Likewise.
+ * xen/block.c: Likewise.
+ * xen/net.c: Likewise.
+ * xen/store.c: Likewise.
+
+2011-12-17 Richard Braun <address@hidden>
+
+ Adjust VM initialization
+ Unlike the zone allocator, the slab code can't be fed with an initial
+ chunk of memory. Some VM objects used early during startup now have to
+ be statically allocated, and kernel map entries need a special path
+ to avoid recursion when being allocated.
+
+ * vm/vm_map.c (vm_submap_object_store): New variable.
+ (vm_submap_object): Point to vm_submap_object_store.
+ (kentry_data_size): Initialize to arbitrary value.
+ (kentry_count): Remove variable.
+ (kentry_pagealloc): New function.
+ (vm_map_setup): Likewise.
+ (vm_map_create): Replace initialization with a call to vm_map_setup().
+ * vm/vm_map.h (vm_map_setup): New prototype.
+ * vm/vm_kern.c (kernel_map_store): New variable.
+ (kernel_map): Point to kernel_map_store.
+ (kmem_suballoc): Remove function. Replaced with...
+ (kmem_submap): New function.
+ (kmem_init): Call vm_map_setup() instead of vm_map_create().
+ * vm/vm_kern.h (kmem_suballoc): Remove prototype.
+ (kmem_submap): New prototype.
+ * vm/vm_object.c (kernel_object_store): New variable.
+ (kernel_object): Point to kernel_object_store.
+ (vm_object_template): Change type from vm_object_t to struct vm_object.
+ (_vm_object_setup): New function.
+ (_vm_object_allocate): Replace initialization with a call to
+ _vm_object_setup().
+ (vm_object_bootstrap): Don't allocate vm_object_template, and use it as
+ a structure instead of a pointer. Initialize kernel_object and
+ vm_submap_object with _vm_object_setup() instead of
+ _vm_object_allocate().
+ * vm/vm_resident.c (vm_page_bootstrap): Don't initialize
+ kentry_data_size.
+ * device/ds_routines.c (device_io_map_store): New variable.
+ (device_io_map): Point to device_io_map_store.
+ (mach_device_init): Call kmem_submap() instead of kmem_suballoc().
+ * ipc/ipc_init.c (ipc_kernel_map_store): New variable.
+ (ipc_kernel_map): Point to ipc_kernel_map_store.
+
+2011-12-17 Richard Braun <address@hidden>
+
+ Adjust the kernel to use the slab allocator
+ * device/dev_lookup.c: Replace zalloc header, types and function calls
+ with their slab counterparts.
+ * device/dev_pager.c: Likewise.
+ * device/ds_routines.c: Likewise.
+ * device/io_req.h: Likewise.
+ * device/net_io.c: Likewise.
+ * i386/i386/fpu.c: Likewise.
+ * i386/i386/io_perm.c: Likewise.
+ * i386/i386/machine_task.c: Likewise.
+ * i386/i386/pcb.c: Likewise.
+ * i386/i386/task.h: Likewise.
+ * i386/intel/pmap.c: Likewise.
+ * i386/intel/pmap.h: Remove #include <kernel/zalloc.h>.
+ * include/mach_debug/mach_debug.defs (host_zone_info): Replace
+ routine declaration with skip directive.
+ (host_slab_info): New routine declaration.
+ * include/mach_debug/mach_debug_types.defs (zone_name_t)
+ (zone_name_array_t, zone_info_t, zone_info_array_t): Remove types.
+ (cache_info_t, cache_info_array_t): New types.
+ * include/mach_debug/mach_debug_types.h: Replace #include
+ <mach_debug/zone_info.h> with <mach_debug/slab_info.h>.
+ * ipc/ipc_entry.c: Replace zalloc header, types and function calls with
+ their slab counterparts.
+ * ipc/ipc_entry.h: Likewise.
+ * ipc/ipc_init.c: Likewise.
+ * ipc/ipc_marequest.c: Likewise.
+ * ipc/ipc_object.c: Likewise.
+ * ipc/ipc_object.h: Likewise.
+ * ipc/ipc_space.c: Likewise.
+ * ipc/ipc_space.h: Likewise.
+ * ipc/ipc_table.c (kalloc_map): Remove extern declaration.
+ * kern/act.c: Replace zalloc header, types and function calls with their
+ slab counterparts.
+ * kern/kalloc.h: Add #include <vm/vm_types.h>.
+ (MINSIZE): Remove definition.
+ (kalloc_map): Add extern declaration.
+ (kget): Remove prototype.
+ * kern/mach_clock.c: Adjust comment.
+ * kern/processor.c: Replace zalloc header, types and function calls with
+ their slab counterparts.
+ * kern/startup.c: Remove #include <kernel/zalloc.h>.
+ * kern/task.c: Replace zalloc header, types and function calls with
+ their slab counterparts.
+ * kern/thread.c: Likewise.
+ * vm/memory_object_proxy.c: Likewise.
+ * vm/vm_external.c: Likewise.
+ * vm/vm_fault.c: Likewise.
+ * vm/vm_init.c: Likewise.
+ * vm/vm_map.c: Likewise.
+ * vm/vm_object.c: Likewise.
+ * vm/vm_page.h: Remove #include <kernel/zalloc.h>.
+ * vm/vm_pageout.c: Replace zalloc header, types and function calls with
+ their slab counterparts.
+ * vm/vm_resident.c: Likewise.
+ (zdata, zdata_size): Remove declarations.
+ (vm_page_bootstrap): Don't steal memory for the zone system.
+
+2011-12-17 Richard Braun <address@hidden>
+
+ Import the slab allocator
+ As it is intended to completely replace the zone allocator, remove it on
+ the way. So long to the venerable code !
+
+ * Makefrag.am (libkernel_a_SOURCES): Add kern/slab.{c,h}, remove
kern/kalloc.c
+ and kern/zalloc.{c,h}.
+ * configfrag.ac (SLAB_VERIFY, SLAB_USE_CPU_POOLS): Add defines.
+ * i386/Makefrag.am (libkernel_a_SOURCES): Remove i386/i386/zalloc.h.
+ * i386/configfrag.ac (CPU_L1_SHIFT): Remove define.
+ * include/mach_debug/slab_info.h: New file.
+ * kern/slab.c: Likewise.
+ * kern/slab.h: Likewise.
+ * i386/i386/zalloc.h: Remove file.
+ * include/mach_debug/zone_info.h: Likewise.
+ * kern/kalloc.c: Likewise.
+ * kern/zalloc.c: Likewise.
+ * kern/zalloc.h: Likewise.
+
+2011-12-17 Richard Braun <address@hidden>
+
+ Import utility files
+ * Makefrag.am (libkernel_a_SOURCES): Add kern/list.h, kern/rbtree.c,
+ kern/rbtree.h and kern/rbtree_i.h.
+ * kern/list.h: New file.
+ * kern/rbtree.c: Likewise.
+ * kern/rbtree.h: Likewise.
+ * kern/rbtree_i.h: Likewise.
+ * kern/macro_help.h (MACRO_BEGIN): Use GNU C compound statement
+ enclosed in parentheses.
+ (MACRO_END): Likewise.
+
+2011-11-27 Samuel Thibault <address@hidden>
+
+ Keep frame pointer when debugger is enabled
+ * Makefrag.am (AM_CFLAGS) [enable_kdb]: Add -fno-omit-frame-pointer.
+
+2011-10-16 Samuel Thibault <address@hidden>
+
+ Merge branch 'master' of callisto:gnumach
+
+2011-10-16 Samuel Thibault <address@hidden>
+
+ Do not map xen driver pages
+ * xen/block.c (hyp_block_init): Use vm_page_grab_phys_addr instead of
+ kmem_alloc_wired to allocate driver pages.
+ * xen/net.c (hyp_net_init): Likewise.
+
+2011-10-16 Samuel Thibault <address@hidden>
+
+ Increase kmem area for the Xen case.
+ Kernel tacks are 4 pages in the Xen case, so we need more kmem space.
+
+ * i386/i386/vm_param.h (VM_KERNEL_MAP_SIZE) [MACH_XEN]: Increase to
224MiB.
+
+2011-10-10 Samuel Thibault <address@hidden>
+
+ Raise block device interrupt level to SPL6
+ * linux/dev/drivers/block/genhd.c (device_setup): Set linux_intr_pri to
+ SPL6.
+ * linux/dev/glue/block.c (init_partition, device_open): Likewise.
+
+ Raise Linux kmem memory size
+ * linux/dev/glue/kmem.c (MEM_CHUNKS): Increase to 32.
+
+2011-10-10 Samuel Thibault <address@hidden>
+
+ Leave interrupts enabled in sym53c8xx driver
+ The driver can work with them, and request_irq works fine with them.
+
+ * linux/src/drivers/scsi/sym53c8xx.c (ncr_attach): Do not pass
SA_INTERRUPT to
+ request_irq().
+
+2011-10-09 Samuel Thibault <address@hidden>
+
+ Define BITS_PER_LONG for Linux code
+ * linux/src/include/asm-i386/types.h (BITS_PER_LONG): Define to 32.
+
+2011-10-08 Samuel Thibault <address@hidden>
+
+ Add sym53c8xx driver from linux 2.2
+ This driver supports qemu's SCSI host device.
+ Unfortunately it seems to be breaking the network device, so test with
care.
+
+ * linux/Makefrag.am (liblinux_a_SOURCES): Add
+ linux/src/drivers/scsi/sym53c8xx{.c,_comm.h,.h,_defs.h}
+ * linux/configfrag.ac: Add AC_Linux_DRIVER([sym53c8xx] to enable
+ CONFIG_SCSI_SYM53C8XX.
+ * linux/dev/glue/kmem.c (MEM_CHUNKS): Increase to 16.
+ * linux/src/drivers/scsi/hosts.c [CONFIG_SCSI_SYM53C8XX]: Include
"sym53c8xx.h".
+ (builtin_scsi_hosts): include SYM53C8XX.
+
+2011-09-28 Sergio Lopez <address@hidden>
+
+ fix copy out-of-line data when length >= 512MB
+ * ipc/ipc_kmsg.c (ipc_kmsg_copyin_body): Change length type to
+ unsigned64_t. Cast number to unsigned64_t.
+ (ipc_kmsg_copyout_body): Likewise.
+
+2011-09-28 Sergio López <address@hidden>
+
+ Make thread_suspend honor the TH_UNINT flag
+ Interrupting a thread without a continuation, puts it in a
+ inconsistent state. This is the cause for the bug described in
+ https://lists.gnu.org/archive/html/bug-hurd/2011-09/msg00148.html
+
+ * kern/thread.c (thread_suspend): Fail with KERN_FAILURE if thread is
+ uninterruptible.
+
+2011-09-12 Guillem Jover <address@hidden>
+
+ Remove unused [!MACH_KERNEL] driver code
+ Use «unifdef -DMACK_KERNEL=1» as a starting point, but only remove
+ the code not exposed on public headers, the rest is needed to build
+ properly from userland.
+
+ * device/cons.c [!MACH_KERNEL]: Remove includes.
+ [!MACH_KERNEL] (constty): Remove variable.
+ (cninit, cnmaygetc) [MACH_KERNEL]: Remove preprocessor conditionals.
+ [!MACH_KERNEL] (cnopen, cnclose, cnread, cnwrite, cnioctl, cnselect)
+ (cncontrol): Remove functions.
+ * device/cons.h (struct consdev) [MACH_KERNEL]: Remove preprocessor
+ conditional.
+ * device/kmsg.h [MACH_KERNEL]: Likewise.
+ * i386/i386at/autoconf.c [!MACH_KERNEL]: Remove includes.
+ * i386/i386at/kd_event.c [!MACH_KERNEL]: Likewise.
+ [!MACH_KERNEL] (kbd_sel, kbdpgrp, kbdflag): Remove variables.
+ [!MACH_KERNEL] (KBD_COLL, KBD_ASYNC, KBD_NBIO): Remove macros.
+ (kbdopen, kbdclose, kbd_enqueue) [!MACH_KERNEL]: Remove code.
+ [!MACH_KERNEL] (kbdioctl, kbdselect, kbdread): Remove functions.
+ [!MACH_KERNEL] (X_kdb_enter_init, X_kdb_exit_init: Likewise.
+ * i386/i386at/kd_mouse.c [!MACH_KERNEL]: Remove includes.
+ [!MACH_KERNEL] (mouse_sel, mousepgrp, mouseflag): Remove variables.
+ [!MACH_KERNEL] (MOUSE_COLL, MOUSE_ASYNC, MOUSE_NBIO): Remove macros.
+ (mouseopen, mouseclose, kd_mouse_read, mouse_enqueue) [!MACH_KERNEL]:
Remove
+ code.
+ [!MACH_KERNEL] (mouseioctl, mouseselect, mouseread): Remove functions.
+ * i386/i386at/lpr.c [!MACH_KERNEL]: Remove includes.
+ (lpropen) [MACH_KERNEL]: Remove preprocessor conditionals.
+ (lpropen, lprclose, lprstart) [!MACH_KERNEL]: Remove code.
+ [!MACH_KERNEL] (lprwrite, lprioctl, lprstop): Remove functions.
+ * i386/i386at/rtc.c (readtodc, writetodc) [!MACH_KERNEL]: Remove code.
+ * kern/mach_factor.c [MACH_KERNEL]: Remove preprocessor conditional.
+ * xen/time.c (readtodc) [!MACH_KERNEL]: Remove code.
+
+2011-09-09 Samuel Thibault <address@hidden>
+
+ Merge branch 'master' of git.savannah.gnu.org:/srv/git/hurd/gnumach
+
+2011-09-09 Guillem Jover <address@hidden>
+
+ Do not take unused strpbrk() from libc
+ * Makefile.am (clib_routines): Remove strpbrk.
+
+2011-09-06 Thomas Schwinge <address@hidden>
+
+ * .gitignore: Tighten some rules, and distribute others to... *
doc/.gitignore: ... here; * i386/i386/.gitignore: ... here; * tests/.gitignore:
..., and here.
+
+ * i386/i386/pcb.h (stack_attach): Parameterize the continuation
parameter's parameter list. * i386/i386/pcb.c (stack_attach): Likewise.
+
+ Move i386/i386/locore.S declarations.
+ * i386/i386/trap.c (recover_table, recover_table_end, retry_table)
+ (retry_table_end): Move declarations to...
+ * i386/i386/locore.h: ... here.
+
+2011-09-06 Thomas Schwinge <address@hidden>
+
+ Further prototyping work for memory_object_proxy.c functions.
+ * vm/memory_object_proxy.h: Add #includes.
+ (memory_object_proxy_lookup): New declaration.
+ * vm/memory_object_proxy.c: #include <vm/memory_object_proxy.h>.
+ * vm/vm_user.c: Likewise.
+ (memory_object_proxy_lookup): Drop declaration.
+
+ Parts based on a patch by Fridolín Pokorný <address@hidden>.
+
+2011-09-05 Samuel Thibault <address@hidden>
+
+ Drop module memory free verbosity
+ * kern/bootstrap.c (bootstrap_create): Do not show freed module memory.
+
+ Free memory used by boot modules
+ * vm/vm_resident.c (pmap_startup): Warn when some pages could not be
included
+ in the allocator due to bad estimation.
+ * kern/bootstrap.c: Include <vm/pmap.h>.
+ (bootstrap_create): Call vm_page_create on bootstrap modules content.
+
+2011-09-03 Fridolín Pokorný <address@hidden>
+
+ Add prototypes for memory_object_proxy.c functions
+ * vm/memory_object_proxy.h: Add file.
+ * vm/vm_init.c: Include <vm/memory_object_proxy.h>.
+ * kern/ipc_kobject.c: Likewise.
+ * Makefile.am (libkernel_a_SOURCES): Add vm/memory_object_proxy.h.
+
+2011-09-03 Samuel Thibault <address@hidden>
+
+ Merge branch 'master' of git.savannah.gnu.org:/srv/git/hurd/gnumach
+
+2011-09-02 Guillem Jover <address@hidden>
+
+ Remove long obsolete RPC routines
+ * kern/compat_xxx_defs.h: Remove file.
+ * Makefrag.am (libkernel_a_SOURCES): Remove `kern/compat_xxx_defs.h'.
+
+ * include/mach/mach_types.defs (xxx_emulation_vector_t): Remove type.
+
+ * device/device.srv: Do not simport <kern/compat_xxx_defs.h>.
+ * kern/mach.srv: Likewise.
+ * kern/mach_host.srv: Likewise.
+
+ * include/device/device.defs [MACH_KERNEL]: Do not simport
+ <kern/compat_xxx_defs.h>.
+ (xxx_device_set_status, xxx_device_get_status)
+ (xxx_device_set_filter): Replace routine declarations with skip
+ directives.
+ * include/mach/mach.defs [MACH_KERNEL]: Do not simport
+ <kern/compat_xxx_defs.h>.
+ (xxx_memory_object_lock_request, xxx_task_get_emulation_vector)
+ (xxx_task_set_emulation_vector, xxx_host_info, xxx_slot_info)
+ (xxx_cpu_control, xxx_task_info, xxx_thread_get_state)
+ (xxx_thread_set_state, xxx_thread_info): Replace routine declarations
+ with skip directive.
+ * include/mach/mach_host.defs [MACH_KERNEL]: Do not simport
+ <kern/compat_xxx_defs.h>.
+ (yyy_host_info, yyy_processor_info, yyy_processor_control)
+ (xxx_processor_set_default_priv, yyy_processor_set_info): Replace
+ routine declarations with skip directive.
+
+ * kern/ipc_host.c (xxx_processor_set_default_priv): Remove function.
+ * kern/machine.c (xxx_host_info, xxx_slot_info)
+ (xxx_cpu_control): Likewise.
+ * kern/syscall_emulation.c (xxx_task_set_emulation_vector)
+ (xxx_task_get_emulation_vector): Likewise.
+ * vm/memory_object.c (xxx_memory_object_lock_request): Likewise.
+
+2011-09-02 Guillem Jover <address@hidden>
+
+ Do not remap errno codes from E* to LINUX_E*
+ Mach no longer uses any of the old and clashing errno E* codes, so
+ it's safe to use them now w/o namespacing. This also means one less
+ modification needed to the Linux code.
+
+ * linux/dev/include/asm-i386/errno.h: Remove file.
+ * linux/dev/kernel/dma.c (notifier_chain_unregister) [MACH_INCLUDE]:
Remove
+ code.
+ * linux/dev/include/linux/notifier.h: Likewise.
+ * linux/dev/arch/i386/kernel/irq.c (setup_x86_irq): Rename LINUX_EBUSY
+ to EBUSY.
+ (request_irq): Rename LINUX_EINVAL to EINVAL.
+ * linux/dev/glue/block.c (register_blkdev): Rename LINUX_EBUSY to EBUSY
+ and LINUX_EINVAL to EINVAL.
+ (unregister_blkdev): Rename LINUX_EINVAL to EINVAL.
+ (rdwr_partial) Rename LINUX_ENOMEM to ENOMEM and LINUX_EIO to EIO.
+ * linux/dev/glue/misc.c (linux_to_mach_error): Rename LINUX_EPERM to
+ EPERM, LINUX_EIO to EIO, LINUX_ENXIO to ENXIO, LINUX_EACCES to EACCES,
+ LINUX_EFAULT to EFAULT, LINUX_EBUSY to EBUSY, LINUX_EINVAL to EINVAL,
+ LINUX_EROFS to EROFS, LINUX_EWOULDBLOCK to EWOULDBLOCK and LINUX_ENOMEM
+ to ENOMEM.
+ (verify_area): Rename LINUX_EFAULT to EFAULT.
+ * linux/dev/kernel/resource.c (check_region): Rename LINUX_EBUSY to
+ EBUSY.
+ * linux/dev/kernel/sched.c (__do_down): Rename LINUX_EINTR to EINTR.
+
+2011-09-02 Guillem Jover <address@hidden>
+
+ Use Mach native error codes instead of POSIX errno E* ones
+ * device/errno.h: Remove file.
+ * Makefrag.am (libkernel_a_SOURCES): Remove `device/errno.h'.
+ * i386/i386at/com.c: Include <device/device_types.h> instead of
+ <device/errno.h>.
+ (comopen): Replace ENXIO with D_NO_SUCH_DEVICE.
+ * i386/i386at/kd_event.c: Include <device/device_types.h> instead of
+ <device/errno.h>.
+ * i386/i386at/kd_mouse.c: Likewise.
+ (mouseopen): Replace ENODEV with D_NO_SUCH_DEVICE and EBUSY with
+ D_ALREADY_OPEN.
+ * i386/i386at/lpr.c: Include <device/device_types.h> instead of
+ <device/errno.h>.
+ (lpropen): Replace ENXIO with D_NO_SUCH_DEVICE and EBUSY with
+ D_ALREADY_OPEN.
+
+2011-09-02 Guillem Jover <address@hidden>
+
+ Change argument name to match function body usage
+ Otherwise the function wrongly uses the global symbol.
+
+ * linux/src/drivers/scsi/ppa.c (ppa_nibble_in): Rename `str_p' argument
+ to `base'.
+
+2011-09-02 Guillem Jover <address@hidden>
+
+ Disable set but unused variable
+ * linux/src/drivers/scsi/gdth.c (gdth_detect): Conditionalize `b' on
+ [LINUX_VERSION_CODE < 0x020000]. Do not preset it to 0, it's initialized
+ later on when needed.
+
+ Remove set but unused variables
+ * linux/dev/drivers/block/floppy.c (setup_rw_floppy): Remove `dflags'.
+ (floppy_eject): Remove `dummy'.
+ * linux/src/drivers/net/8390.c (ethdev_init): Remove `ei_local'.
+ * linux/src/drivers/scsi/ppa.c (ppa_detect): Remove `ppb'.
+
+ Cast addr argument to vm_offset_t
+ * linux/dev/glue/kmem.c (vfree): Cast `addr' argument on kfree_mem
+ function to vm_offset_t.
+
+ Add vsnprintf prototype
+ * kern/printf.h (vsnprintf): New prototype.
+
+ Add missing headers
+ * linux/dev/init/main.c: Include <linux/pci.h>.
+ * linux/dev/kernel/printk.c: Include <kern/printf.h>.
+
+2011-09-01 Ludovic Courtès <address@hidden>
+
+ Add missing header file to the distribution.
+ * linux/Makefrag.am (liblinux_a_SOURCES): Add `linux/dev/glue/glue.h',
+ which appeared in commit 2b4bff9914d57bff600ac70194b8b1aab3485bee
+ ("Fix declarations").
+
+2011-09-01 Samuel Thibault <address@hidden>
+
+ Fix documentation
+
+ Close kernel stacks.
+ * i386/i386/pcb.c (stack_attach): Initialize ebp to 0.
+
+2011-09-01 Samuel Thibault <address@hidden>
+
+ Fix PC sampling
+ interrupt.S now saves the IRQ on the stack to acknowledge it later.
+
+ * i386/i386/hardclock.c (hardclock): Add irq parameter.
+ * i386/i386at/kd.c (kdintr, kdcheckmagic): Remove regs parameter.
+ * i386/i386at/kd.h (kdintr): Likewise.
+
+2011-08-31 Guillem Jover <address@hidden>
+
+ Add silent rules support if available and disable it by default
+ * configure.ac (AM_SILENT_RULES): Add silent rules support if available,
+ and disable it by default.
+ * Makefile.am (AWK_V, AWK_V_, AWK_V_0): New variables.
+ (NM_V, NM_V_, NM_V_0): Likewise.
+ (GZIP_V, GZIP_V_, GZIP_V_0): Likewise.
+ (MIGCOM_V, MIGCOM_V_, MIGCOM_V_0): Likewise.
+ (gnumach-undef): Use NM_V in front of NM.
+ (gnumach-undef-bad): Use AM_V_GEN in front of sed.
+ (clib-routines.o): Use AM_V_at in fron of undefined symbols check.
+ Use AM_V_CCLD in front of CCLD.
+ * Makefrag.am (gnumach.msgids): Use AM_V_GEN in front of cat.
+ * Makerules.am (%.symc): Use AWK_V in front of AWK.
+ (%.symc.o): Use AM_V_CC in front of COMPILE.
+ (%.h): Use AM_V_GEN in front of sed.
+ (%.gz): Use GZIP_V in front of GZIP.
+ * Makerules.mig.am (%.user.defs.c): Use AM_V_GEN in front of command.
+ (%.server.defs.c): Likewise.
+ (%.user.h %.user.c %.user.msgids): Use MIGCOM_V in front of MIGCOM.
+ (%.server.h %.server.c %.server.msgids): Likewise.
+
+2011-08-31 Samuel Thibault <address@hidden>
+
+ Optimize copyout path
+ * i386/i386/locore.S (copyout): Remove RETRY() use from >=i486 variant.
Move
+ copyout_ret and copyout_fail.
+
+ Fix copyout retry on lazy allocation on >= i486
+ * i386/i386/locore.S (copyout): Add a >=i486 variant of copyout which
uses
+ no loop, but simply retries rep mov.
+
+ Disable global page while writing in kernel space
+ * i386/i386/db_interface.c (db_write_bytes): If CPU has PGE feature,
disable
+ CR4_PGE before enabling kernel page write access, and re-enable the
former after
+ disabling the latter.
+
+2011-08-31 Samuel Thibault <address@hidden>
+
+ Protect set_cr3 against compiler assignment optimizations
+ This fixes the kdb `break' command.
+
+ i386/i386/proc_reg.h (set_cr3): Add "memory" clobber.
+
+2011-08-31 Guillem Jover <address@hidden>
+
+ Fix undefined operation on assigning self pre-incremented variable
+ * linux/src/drivers/scsi/wd7000.c (mail_out): Add `1' instead of
+ pre-incrementing self assigned variable.
+ * linux/src/drivers/net/de4x5.c (de4x5_sw_reset, de4x5_queue_pkt,
de4x5_rx)
+ (de4x5_tx, de4x5_rx_ovfc, set_multicast_list, ping_media, mii_get_phy)
+ (de4x5_ioctl): Likewise.
+ * linux/src/drivers/net/depca.c (depca_rx, depca_tx, load_packet):
Likewise.
+
+ Honour type promotion on variable argument handling
+ * linux/dev/lib/vsprintf.c (linux_vsprintf): Use `int' when retrieving
+ a `short' through `va_arg'.
+
+ Correct MiG Mach types to fix compilation warnings
+ * include/mach/mach_types.defs (thread_info_t): Change from array of
+ natural_t to integer_t.
+ (task_info_t): Likewise.
+ (host_info_t): Likewise.
+ (processor_info_t): Likewise.
+ (processor_set_info_t): Likewise.
+
+ Denote __exit symbols as used
+ * linux/src/include/linux/init.h: Include <linux/compiler.h>.
+ (__exitused): New macro.
+ (__exit): Define to ` __exitused __cold notrace'.
+ * linux/src/include/linux/kcomp.h (__exit): Remove.
+
+ Move <linux/init.h> from linux/pcmcia-cs to linux/src
+ * linux/pcmcia-cs/include/linux/init.h: Move to ...
+ * linux/src/include/linux/init.h: ... here.
+
+ Import Linux 3.1 compiler definitions
+ * linux/src/include/linux/compiler.h: New file.
+ * linux/src/include/linux/compiler-gcc.h: Likewise.
+ * linux/src/include/linux/compiler-gcc3.h: Likewise.
+ * linux/src/include/linux/compiler-gcc4.h: Likewise.
+ * linux/dev/include/linux/kernel.h (barrier): Remove definition and
+ include <linux/compiler.h> instead.
+
+ Import Linux 3.1 ctype code
+ * linux/src/include/linux/ctype.h: Update file.
+ * linux/src/lib/ctype.c: Likewise.
+
+ Remove unused and non-functional string specialization header
+ * linux/src/include/asm-i386/string-486.h: Remove.
+
+ Fix memcmp prototype
+ * include/string.h (memcmp): Remove bogus `*' from return type.
+
+2011-08-31 Samuel Thibault <address@hidden>
+
+ Fix declarations
+ * device/ds_routines.h (io_done_list): Add variable declaration.
+ (device_io_map): Keep variable declaration and move definition to...
+ * device/ds_routines.c: ... here.
+ * i386/i386/fpu.c: Include <i386/pic.h>
+ (curr_ipl): Remove declaration.
+ (fpintr): Add int unit parameter.
+ * linux/dev/glue/glue.h: New header.
+ * i386/i386/fpu.h (fpintr): Add function prototype.
+ * i386/i386/hardclock.c (clock_interrupt, linux_timer_intr): Remove
prototypes.
+ [LINUX_DEV]: Include <linux/dev/glue/glue.h>
+ * i386/i386/ipl.h (curr_ipl): Add declaration.
+ * i386/i386/pic.h (curr_pic_mask, pic_mask, prtnull, intnull): Add
+ declarations.
+ * i386/i386at/kd.h (kdintr): Add declaration.
+ * i386/i386at/pic_isa.c: Include <i386/fpu.h> and <i386at/kd.h>
+ (intnull, fpintr, hardclock, kdintr, prtnull): Remove prototypes.
+ * i386/xen/xen.c: Include <kern/mach_clock.h>
+ (clock_interrupt): Remove prototype.
+ * linux/dev/arch/i386/kernel/irq.c: Include <linux/dev/glue/glue.h> and
+ <machine/machspl.h>
+ (linux_timer_intr, splhigh, spl0, curr_ipl, curr_pic_mask, pic_mask,
+ get_options): Remove declarations.
+ * linux/dev/drivers/block/floppy.c: Include <linux/dev/glue/glue.h>
+ (issig, get_options): Remove declarations.
+ * linux/dev/drivers/block/genhd.c: Include <linux/dev/glue/glue.h>
+ (linux_intr_pri): Remove declaration.
+ * linux/dev/glue/block.c: Include <devices/ds_routines.h> and
+ <linux/dev/glue/glue.h>.
+ (device_io_map, blksize_size): Remove declarations.
+ * linux/dev/glue/kmem.c: Include <kern/printf.h> and
<linux/dev/glue/glue.h>
+ (alloc_contig_mem, printf): Remove declarations.
+ * linux/dev/glue/misc.c: Include <printf.h> and <linux/dev/glue/glue.h>
+ (vm_map_lookup_entry, printf): Remove prototypes.
+ * linux/dev/glue/net.c: Include <kern/printf.h>, <device/ds_routines.h>
and
+ <linux/dev/glue/glue.h>.
+ (linux_intr_pri, io_done_list): Remove declarations.
+ * linux/dev/init/main.c: Include <machine/model_dep.h> and
+ <linux/dev/glue/glue.h>.
+ (phys_last_addr, alloc_contig_mem, free_contig_mem, init_IRQ,
+ restore_IRQ, startrtclock, linux_version_init, linux_kmem_init,
pci_init,
+ linux_net_emulation_init, device_setup, linux_printk, linux_timer_intr,
spl0,
+ splhigh, form_pic_mask, linux_bad_intr, prtnull, intnull,
linux_sched_init,
+ pcmcia_init): Remove declarations.
+ * linux/dev/kernel/sched.c: Include <kern/printf.h>,
<machine/machspl.h> and
+ <linux/dev/glue/glue.h>.
+ (alloc_contig_mem, free_contig_mem, splhigh, splx, linux_soft_intr,
issig,
+ printf, linux_auto_config): Remove prototypes.
+ * linux/dev/kernel/softirq.c: Include <linux/dev/glue/glue.h>.
+ * linux/src/drivers/block/floppy.c: Include <linux/dev/glue/glue.h>.
+ (get_options): Remove prototype.
+ * linux/src/init/main.c: Include <linux/dev/glue/glue.h>
+ (init_IRQ): Remove prototype.
+
+2011-08-30 Guillem Jover <address@hidden>
+
+ Add linux_timer_intr function declaration
+ * i386/i386/hardclock.c [LINUX_DEV] (linux_timer_intr): New prototype.
+
+ Add missing headers
+ * device/dev_pager.c: Include <device/memory_object_reply.user.h>.
+ * linux/pcmcia-cs/glue/wireless_glue.h: Include <kern/debug.h>.
+
+ Remove unused variable
+ * i386/i386at/rtc.c (rtc): Remove variable.
+
+ Cast host_get_time() arguments to fix warnings
+ * linux/dev/glue/misc.c (do_gettimeofday): Cast arguments to
+ `host_get_time'.
+
+ Cast function timeout() argument to fix a warning
+ * kern/mach_clock.h (timer_func_t): New function type.
+ (struct timer_elt): Change fcn type to timer_func_t.
+ * i386/i386at/com.c (comstart): Cast `ttrstrt' to `timer_funct_t *' in
+ `timeout' call.
+ * i386/i386at/lpr.c (lprstart): Likewise,
+
+ Return a value on non-void function
+ * i386/i386at/com.c (comcnprobe, comcninit, comcnputc): Return 0.
+
+2011-08-30 Samuel Thibault <address@hidden>
+
+ Fix copyright assignment
+ I have assigned copyright to the Free Software Foundation.
+
+ * i386/i386/xen.h: Fix copyright assignment
+ * i386/xen/xen.c: Likewise.
+ * i386/xen/xen_boothdr.S: Likewise.
+ * i386/xen/xen_locore.S: Likewise.
+ * include/mach/xen.h: Likewise.
+ * xen/block.c: Likewise.
+ * xen/block.h: Likewise.
+ * xen/console.c: Likewise.
+ * xen/console.h: Likewise.
+ * xen/evt.c: Likewise.
+ * xen/evt.h: Likewise.
+ * xen/grant.c: Likewise.
+ * xen/grant.h: Likewise.
+ * xen/net.c: Likewise.
+ * xen/net.h: Likewise.
+ * xen/ring.c: Likewise.
+ * xen/ring.h: Likewise.
+ * xen/store.c: Likewise.
+ * xen/store.h: Likewise.
+ * xen/time.c: Likewise.
+ * xen/time.h: Likewise.
+ * xen/xen.c: Likewise.
+ * xen/xen.h: Likewise.
+
+2011-08-30 Samuel Thibault <address@hidden>
+
+ Console declaration cleanup
+ * device/cons.h: Add multiple inclusion _DEVICE_CONS_H macro protector.
+ (struct consdev): Add function members prototypes.
+ * i386/i386/xen.h: Include <mach/xen.h>.
+ * i386/i386at/com.c (comcnprobe, comcninit, comcngetc, comcnputc): Move
+ prototypes...
+ * i386/i386at/com.h: ... here. Include <device/cons.h>.
+ * i386/i386at/cons_conf.c [MACH_HYP]: Include <xen/console.h>.
+ [!MACH_HYP]: Include "kd.h".
+ [!MACH_HYP && NCOM > 0]: Include "com.h".
+ (hypcnprobe, hypcninit, hypcngetc, hypcnputc, kdcnprobe, kdcninit,
kdcngetc,
+ kdcnputc comcnprobe, comcninit, comcngetc, comcnputc): Remove
prototypes.
+ * i386/i386at/kd.c (kdcnputc): Make it return int, -1 on error, 0 on
+ success.
+ (kdcnprobe, kdcninit, kdcngetc, kdcnputc): Move prototypes...
+ * i386/i386at/kd.h: ... here. Include <device/cons.h>.
+ * xen/console.c (hypcnprobe): Remove unused `my_console' local variable.
+ * xen/console.h: Include <device/cons.h>
+ (hypcnputc, hypcngetc, hypcnprobe, hypcninit): Add prototypes.
+
+2011-08-30 Guillem Jover <address@hidden>
+
+ Move Linux module macros to their original header
+ * linux/pcmcia-cs/glue/wireless_glue.h (EXPORT_SYMBOL)
+ (SET_MODULE_OWNER): Move to ...
+ * linux/src/include/linux/module.h [!MODULE]: ... here.
+
+ Move cdrom_sleep() definition to its original source file
+ * linux/dev/kernel/sched.c (cdrom_sleep): Move to ...
+ * linux/src/drivers/block/ide-cd.c [MACH]: ... here, make it static.
+ Include <kern/sched_prim.h>.
+
+2011-08-29 Samuel Thibault <address@hidden>
+
+ Make copyout run in 1 loop on >= i486
+ * i386/i386/locore.S (copyout): On >= i486, skip WP-check loop split
and just
+ use byte count.
+
+2011-08-28 Samuel Thibault <address@hidden>
+
+ Skip kernel WP check on i486 and above
+ * i386/i386/i386asm.sym (machine_slot.sub_type): Define.
+ * i386/i386/locore.S (copyout_retry): Skip if machine_slot[0].cpu_type
> 3.
+
+ Enable >4GiB cr3
+ * i386/xen/xen_boothdr.S (__xen_guest): Add [extended-cr3] to PAE
+ (XEN_ELFNOTE_PAE_MODE): Likewise.
+
+2011-08-28 Samuel Thibault <address@hidden>
+
+ Disable (<i486)-only WP workaround on Xen & PAE
+ i386 didn't support PAE anyway.
+
+ * i386/i386/locore.S (copyout_retry) [MACH_HYP || PAE]: Remove.
+ * xen/xen.c (hyp_invalidate_pte): Remove function.
+ * xen/xen.h (hyp_invalidate_pte): Remove prototype.
+
+2011-08-28 Samuel Thibault <address@hidden>
+
+ Fix pmap_clear_bootstrap_pagetable with >4G mfns
+ * i386/intel/pmap.c (pmap_clear_bootstrap_pagetable): Use pte_to_pa
instead
+ of atop.
+
+ Rework memory mapping reservation
+ * i386/i386/vm_param.h (VM_KERNEL_MAP_SIZE): Define to 192MiB.
+ * i386/i386at/model_dep.c (mem_size_init): Use VM_KERNEL_MAP_SIZE
instead of
+ 1/6 factor.
+ * i386/intel/pmap.c (morevm): Remove.
+ (pmap_bootstrap): Use VM_KERNEL_MAP_SIZE instead of morevm.
+
+ Move free_skbuffs declaration to the top
+ * device/ds_routines.c (free_skbuffs): Move declaration to the top.
+
+2011-08-27 Guillem Jover <address@hidden>
+
+ Initialize the new map entry when it's a projected buffer
+ * vm/vm_map.c (vm_map_fork): Call vm_map_entry_create for projected_on
+ buffers too.
+
+ Fix initialization from incompatible pointer type
+ * linux/dev/glue/block.c (device_get_status): Cast `hg' to `unsigned
long'
+ in ioctl call.
+
+ Match signedness of char pointer comparisons and assignments
+ * linux/dev/drivers/block/genhd.c (msdos_partition): Cast `data'
assignment
+ to `unsigned char *'.
+ * linux/src/drivers/block/ide-cd.c (cdrom_queue_request_sense): Cast
+ `buffer' assignment to `unsigned char *'.
+ (cdrom_transfer_packet_command): Change `cmd_buf' argument type to
+ `unsigned char *'.
+ (cdrom_read_capacity): Cast `pc.buffer' assignments to `unsigned char
*'.
+ Use temporary `model' and `fw_rev' `const char *' variables to compare
+ against literal strings and characters.
+ * linux/src/drivers/block/ide.c (execute_drive_cmd): Cast `args'
+ assignment to `byte *'.
+ (ide_open): Cast `rq.buffer' assignment to `char *'.
+ (ide_release): Likewise.
+ (ide_ioctl): Likewise.
+ (do_identify): Cast variables being compared against literal string to
+ `char *'.
+ (probe_for_drive): Likewise.
+ * linux/src/drivers/block/ide.h (struct packet_command): Change `buffer'
+ type to `unsigned char *'.
+
+ Always initialize A and X variables in BPF code
+ * device/net_io.c (bpf_do_filter): Remove lint conditional.
+
+ Disable unused variables
+ * i386/i386at/com.c (comstart): Disable `i' variable.
+ * linux/src/drivers/net/at1700.c (net_close): Disable `lp' variable.
+ * linux/dev/include/linux/blk.h (end_request): Disable `nsect' variable
+ on MACH.
+
+ Remove unused variables
+ * vm/memory_object_proxy.c (memory_object_create_proxy): Remove unused
+ `kr' variable.
+ * linux/dev/glue/block.c (free_buffer): Remove unused `i' variable.
+ (register_blkdev): Remove unused `err' variable.
+ (unregister_blkdev): Likewise.
+ (bread): Likewise.
+ (init_partition): Likewise.
+ * linux/dev/glue/net.c (device_write): Likewise.
+
+ Remove ident tags producing preprocessor warnings
+ * linux/src/drivers/scsi/FlashPoint.c: Remove #ident tags.
+
+ Add header for printf prototype
+ * vm/memory_object_proxy.c: Include <kern/printf.h>.
+
+ Add prototype for free_skbuffs function
+ * device/ds_routines.c [LINUX_DEV && CONFIG_INET] (free_skbuffs): Add
+ prototype.
+
+ Add prototype for log function
+ * kern/debug.h (log): New prototype.
+
+2011-08-27 Samuel Thibault <address@hidden>
+
+ * Makefile.am (AM_CFLAGS): Add -fno-builtin-log.
+
+2011-08-27 Guillem Jover <address@hidden>
+
+ Add prototypes for locore functions
+ * i386/i386at/model_dep.c (discover_x86_cpu_type): Move ...
+ * i386/i386/locore.h: ... here.
+ (inst_fetch, cpu_shutdown): New prototypes.
+ * i386/i386at/kd.c: Include <i386/locore.h>.
+
+ Do not take obsolete and unused bcopy and bzero from libc
+ * Makefile.am (clib_routines): Remove bcopy and bzero.
+
+ Use AC_LANG_SOURCE inside AC_LANG_CONFTEST to fix autoconf warning
+ * configure.ac (AC_LANG_CONFTEST): Wrap the source into a AC_LANG_SOURCE
+ call.
+
+ Add a .gitignore file
+ * .gitignore: New file.
+
+2011-08-22 Samuel Thibault <address@hidden>
+
+ Make ipc_space_zone not exhaustible
+ Users of ipc_space_create() actually assume that it succeeds.
+
+ * ipc/ipc_init.c (ipc_bootstrap): Create ipc_space_zone without
EXHAUSTIBLE
+ flag.
+
+2011-08-22 Samuel Thibault <address@hidden>
+
+ Add more details to "zone exhausted" panics.
+ * kern/zalloc (zalloc): Add more details to "zone exhausted" panics.
+
+2011-08-21 Samuel Thibault <address@hidden>
+
+ Add 8byte breakpoint macro
+ * i386/i386/db_interface.h (I386_DB_LEN_8): Define macro.
+
+2011-08-18 Samuel Thibault <address@hidden>
+
+ Add compiler barrier to update_mapped_time
+ * kern/mach_clock.c (update_mapped_time): Add compiler barriers between
+ writes to shared memory. Update comment: on SMP, write barriers are
+ required.
+
+2011-08-10 Samuel Thibault <address@hidden>
+
+ Do not warn for cross-space spurious port deallocation
+ These are harmless (the target is stopped) and difficult to fix anyway.
+
+ * ipc/mach_port.c (mach_port_destroy): Do not warn about spurious port
+ deallocation when SPACE is not equal to current_space().
+ (mach_port_deallocate): Likewise.
+
+2011-08-10 Samuel Thibault <address@hidden>
+
+ Add more spurious deallocation debugging
+ * ipc/mach_port.c (mach_port_destroy): Print the current space and the
+ target space on spurious deallocation.
+ (mach_port_deallocate): Likewise.
+
+2011-07-21 Samuel Thibault <address@hidden>
+
+ Whitelist QEMU Hard-Drive for DMA.
+ PIO has become very slow in Linux 2.6.35+, so we do not really have the
+ choice any more.
+
+ * linux/src/drivers/block/triton.c (good_dma_drives): Re-whitelist QEMU
hard
+ drive.
+
+2011-05-19 Samuel Thibault <address@hidden>
+
+ Fix gcc 4.6 build
+ * linux/dev/include/linux/skbuff.h (skb_put, skb_push): Do not print the
+ address of a local label, gcc 4.6 does not build this and the debugger
can
+ output it anyway.
+ * linux/src/include/linux/skbuff.h (skb_put, skb_push): Likewise.
+
+2011-05-18 Samuel Thibault <address@hidden>
+
+ Merge two asm constraints
+ * linux/src/drivers/scsi/ultrastor.c (find_and_clear_bit_16): Use +
modifier
+ instead of using both a read and a write constraint.
+
+2011-05-09 Samuel Thibault <address@hidden>
+
+ Do not warn on vm_map_enter with fixed address failing
+ * vm/vm_map.c (vm_map_enter): Warn about missing room in map only if
+ anywhere is set.
+
+2011-04-24 Samuel Thibault <address@hidden>
+
+ Update constants to nowadays standards
+ Follow-up to fa6c711d
+
+ * ipc/ipc_init.c (ipc_kernel_map_size): Increase to 8MiB.
+
+2011-04-23 Samuel Thibault <address@hidden>
+
+ Enable all caches
+ * i386/i386at/model_dep.c (i386at_init): Set CR0_CD and CR0_NW in CR0
+ register.
+
+ Drop spurious warning
+ * ipc/ipc_entry.c (ipc_entry_get): Do not warn when ipc_entry_get
returns
+ KERN_NO_SPACE.
+
+2011-04-22 Samuel Thibault <address@hidden>
+
+ Warn once when part of the kernel is lacking space
+ * ipc/ipc_entry.c (ipc_entry_get, ipc_entry_grow_table): Warn when
returning
+ KERN_NO_SPACE.
+ * vm/vm_map.c (vm_map_find_entry, vm_map_enter, vm_map_copyout,
+ vm_map_copyout_page_list): Warn when returning KERN_NO_SPACE.
+
+2011-04-22 Samuel Thibault <address@hidden>
+
+ Update constants to nowadays standards
+ Follow-up to fa6c711d
+
+ * vm/vm_object.c (DEVICE_IO_MAP_SIZE): Increase to 16MiB.
+ * kern/kalloc.c (kalloc_map_size): Increase to 64MiB.
+ * i386/intel/pmap.c (morevm): Increase to 128MiB.
+
+2011-04-20 Samuel Thibault <address@hidden>
+
+ Warn once when part of the kernel is lacking memory
+ * kern/printf.h (printf_once): New macro.
+ * ipc/mach_port.c (mach_port_names, mach_port_get_set_status): Warn when
+ returning KERN_RESOURCE_SHORTAGE.
+ * vm/vm_kern.c: Include printf.h.
+ (kmem_alloc, kmem_realloc, kmem_alloc_wired, kmem_alloc_aligned,
+ kmem_alloc_pageable): Warn when failing.
+ * vm/vm_resident.c (vm_page_grab_contiguous_pages): Warn when returning
+ KERN_RESOURCE_SHORTAGE.
+
+2011-04-19 Samuel Thibault <address@hidden>
+
+ Close call stack on continuation
+ * i386/i386/locore.S (call_continuation): Push dummy return address
instead
+ of letting the callee get a random one.
+
+2011-04-18 Arne Babenhauserheide <address@hidden>
+
+ Removed deprecated LINTLIBRARY #ifdefs
+ mach/mach_traps.h: Removed LINTLIBRARY #ifdefs.
+ mach/message.h: Removed LINTLIBRARY #ifdefs.
+
+2011-04-03 Samuel Thibault <address@hidden>
+
+ Fix build with kdb from make dist-generated tarball
+ * Makefrag.am (libkernel_a_SOURCES): Add ddb/db_cond.h,
ddb/db_examine.h,
+ ddb/db_input.h, ddb/db_macro.h, ddb/db_trap.h.
+ * i386/Makefrag.am (libkernel_a_SOURCES): Add i386/i386/db_interface.h
+
+2011-03-21 Samuel Thibault <address@hidden>
+
+ Fix typo
+ * i386/i386at/kd.c (key_map): Fix K_PERIOD typo.
+
+2011-03-20 Samuel Thibault <address@hidden>
+
+ Clean kd.[ch]
+ * i386/i386at/kd.h (NUMSTATES): Fix comment about NORM_STATE.
+ * i386/i386at/kd.c (key_map): Use K_* macros instead of numeric values.
+
+2011-03-14 Samuel Thibault <address@hidden>
+
+ Also warn about mach_port_destroy on invalid ports
+ * ipc/mach_port.c (mach_port_destroy): Warn (and possibly call
debugger) when
+ ipc_right_lookup_write didn't find the port name.
+
+2011-03-11 Samuel Thibault <address@hidden>
+
+ Fix continuation after keyboard debugger invocation
+ According to stack layout change in 5da1aea7
+
+ * i386/i386/locore.S [!MACH_XEN] (RET_OFFSET): Define to 12 instead of
8.
+
+2011-03-06 Samuel Thibault <address@hidden>
+
+ Enable global pages after enabling paging
+ * i386/i386at/model_dep.c (i386at_init): Enable CR4_PGE after enabling
+ CR0_PG.
+
+2011-03-05 Samuel Thibault <address@hidden>
+
+ Fix temporary direct mapping during page table enabling
+ * i386/i386at/model_dep.c (i386at_init): Count the number of actually
+ needed temporary L1 direct mapping by getting the last used address from
+ init_alloc_aligned(), instead of hardcoding it to 1 or 3, and then use
a for
+ loop.
+
+2011-03-03 Samuel Thibault <address@hidden>
+
+ Keep supplementary L1 pages read-only
+ * i386/intel/pmap.c (pmap_bootstrap): Fix loop which keeps
supplementary L1
+ pages read-only: break as soon as one of the L1 supplementary pages has
been
+ recognized, so that its pte does not get rewritten read-write.
+
+2011-02-27 Samuel Thibault <address@hidden>
+
+ Refuse to share IRQs at different interrupt levels
+ * linux/dev/arch/i386/kernel/irq.c (setup_x86_irq): Return -LINUX_EBUSY
when
+ trying to share an IRQ between two different interrupt levels.
+
+2011-02-27 Samuel Thibault <address@hidden>
+
+ Re-enable updating pvlist for kernel_pmap
+ This partially reverts 0744feb6
+
+ * i386/intel/pmap.c (pmap_remove_range): Update pvlist for kernel_pmap
too.
+
+2011-02-27 Samuel Thibault <address@hidden>
+
+ Acknoledge interrupt after handler call
+ This fixes interrupt overflows when software interrupts processing gets
slower
+ than hardware.
+
+ * i386/i386at/interrupt.S (interrupt): Issue EOI to PICs after having
called
+ the interrupt handler and disabled interrupts through cli.
+
+2011-02-27 Samuel Thibault <address@hidden>
+
+ Detect interrupt overflow
+ * i386/i386/locore.S (int_from_instack): Check %esp against _intstack,
issue
+ ud2 on stack overflow.
+
+ Add x86 debug register Xen support
+ * i386/xen/xen_boothdr.S: Add global visibility to __hyp_* symbols.
+ * i386/i386/locore.S [MACH_XEN] (dr6,dr0,dr1,dr2,dr3): Make
get_debugreg and
+ set_debugreg hypercalls to manipulate debug registers.
+ (dr0,dr1,dr2,dr3): Fix dr7 field shift.
+ * i386/i386/xen.h (hyp_set_debugreg, hyp_get_debugreg): New prototypes.
+
+ Add prototypes for x86 debug registers
+ * i386/i386/db_interface.h (I386_DB_TYPE_X, I386_DB_TYPE_W,
I386_DB_TYPE_RW,
+ I386_DB_LEN_1, I386_DB_LEN_2, I386_DB_LEN_4, I386_DB_LOCAL,
+ I386_DB_GLOBAL): New macros.
+ (dr0, dr1, dr2, dr3): New function prototypes.
+
+ Fix for kdb watch command
+ * i386/intel/pmap.c (pmap_remove_range): Do not update pvlist for
+ kernel_map.
+ [MACH_KBD] (pmap_enter): Allow physical memory remapping.
+
+2011-02-26 Samuel Thibault <address@hidden>
+
+ Add console=comN boot option to enable serial console
+ * i386/configfrag.ac (RCLINE, RCADDR): Remove defines.
+ * i386/i386at/com.c: Include <string.h> and <util/atoi.h>
+ [!RCLINE] (RCBAUD, comcndev, comcnprobe, comcninit, comcngetc,
comcnputc):
+ Declare and define macro, variable, and functions.
+ (rcline): New variable.
+ (kernel_cmdline): New declaration.
+ (comcnprobe): Detect "console=comN" option and set rcline accordingly,
use
+ rcline instead of RCLINE for serial console selection.
+ * i386/i386at/cons_conf.c [NCOM>0 && !RCLINE] (comcnprobe, comcninit,
+ comcngetc, comcnputc): Declare functions.
+ [NCOM>0 && !RCLINE] (constab): Enable "com" console.
+ * i386/i386at/kd_event.c (kbdopen): Call kdinit function, for when the
+ VGA+pckbd console was not initialized.
+
+2011-02-09 Samuel Thibault <address@hidden>
+
+ xen block: Add more legacy hd* name support
+ * xen/block.c (hyp_block_init): Add IDE 3-10 device number recognition.
Skip
+ unknown block device numbers.
+
+2011-02-07 Samuel Thibault <address@hidden>
+
+ Defer Xen device initialization to device_service_create
+ * device/device_init.c (device_service_create) [MACH_HYP]: Call
+ hyp_dev_init.
+ * xen/xen.c (hyp_init): Do not call hyp_block_init and hyp_net_init, now
+ called in ...
+ (hyp_dev_init): New function.
+ * xen/xen.h (hyp_dev_init): New declaration.
+
+ Add rx-copy support to netfront
+ * xen/net.c (net_data): Add rx_copy field.
+ (enqueue_rx_buf): When rx_copy != 0, give grant on buffer to domD
instead of
+ issuing a transfer from domD.
+ (hyp_net_intr): When rx_copy != 0, take back grant on buffer instead of
+ finishing transfer. Do not panic on packet error, free kmsg on error.
+ (hyp_net_init): Check for feature-rx-copy in backend, write 1 to
+ request-rx-copy in such case. Wait for Connected state before
continuing.
+ Only unmap buffer when rx_copy is 0.
+
+2011-01-31 Diego Nieto Cid <address@hidden>
+
+ * doc/mach.texi (device_set_filter): Document filter header.
+ Acked-by: Richard Braun <address@hidden>
+
+2011-01-31 Samuel Thibault <address@hidden>
+
+ Enable pae_extended_cr3 in pmap_bootstrap
+ * i386/i386/gdt.c (gdt_init): Do not enable
VMASST_TYPE_pae_extended_cr3.
+ * i386/intel/pmap.c (pmap_bootstrap): Enable
VMASST_TYPE_pae_extended_cr3.
+
+ Enable Xen >4GiB physical memory support
+ * i386/i386/gdt.c (gdt_init): Enable VMASST_TYPE_pae_extended_cr3.
+ * i386/i386/xen.h: Drop actually-unneeded comment.
+ * i386/xen/xen_boothdr.S (FEATURES) [MACH_PSEUDO_PHYS]: Add
pae_pgdir_above_4gb.
+ (XEN_ELFNOTE_FEATURES) [MACH_PSEUDO_PHYS]: Add pae_pgdir_above_4gb.
+
+ Drop kbd device on xen
+ * i386/Makefrag.am (libkernel_a_SOURCES): Move
i386/i386at/kd_event.[ch] and
+ i386/i386at/kd_queue.[ch] to [PLATFORM_at].
+ * i386/i386at/conf.c (dev_name_list): Move kbd device to [!MACH_HYP].
+
+2011-01-15 Samuel Thibault <address@hidden>
+
+ Avoid dropping kd_intr when RCLINE is >= 0
+ * i386/i386at/kd.c (kdintr): Return immediately if !kd_initialized.
+ * i386/i386at/pic_isa.c (ivect) [RCLINE >= 0]: Enable kdintr in that
case
+ too.
+
+2011-01-15 Samuel Thibault <address@hidden>
+
+ Move -d and -H parse to kern/startup.c
+ The code is arch-independant, and reboot_on_panic, used by kern/debug.c
+ would be undefined on non-i386.
+
+ * i386/i386at/model_dep.c (reboot_on_panic, c_boot_entry): Move -d and
-H parse
+ to...
+ * kern/startup.c (reboot_on_panic,setup_main): ... here. Include
<string.h>
+
+2010-12-09 Samuel Thibault <address@hidden>
+
+ memcpy operands are not supposed to overlap
+ * include/string.h (memmove): Add prototype.
+ * i386/i386at/immc.c (immc_cnputc): Replace memcpy with memmove.
+
+2010-10-24 Samuel Thibault <address@hidden>
+
+ Avoid harmless warning
+ * i386/i386at/kd.c (kd_setleds1): Only display unexpected state warning
when
+ debugging is enabled.
+
+2010-10-23 Samuel Thibault <address@hidden>
+
+ Add prototype for strstr
+ * include/string.h (strstr): Add prototype.
+
+ Add prototype for discover_x86_cpu_type
+ * i386/i386at/model_dep.c (discover_x86_cpu_type): Add prototype.
+
+ Warn on unknown CPU family
+ * i386/i386at/model_dep.c (c_boot_entry): Warn in the default case for
+ cpu_type.
+
+ Recognize P4 and Opteron-like as pentium pro
+ * i386/i386at/model_dep.c (c_boot_entry): Treat cpu_type 15 as Pentium
pro.
+
+2010-09-19 Samuel Thibault <address@hidden>
+
+ Fix device_get/set_status ABI for NET_FLAGS
+ * linux/dev/glue/net.c (device_get_status): Compare count with 1 instead
+ of sizeof(short). Access *status instead of *(short *) status.
+ (device_set_status): Likewise.
+
+2010-09-14 Thomas Schwinge <address@hidden>
+
+ Merge branch 'typo-print'
+
+2010-09-14 Thomas Schwinge <address@hidden>
+
+ Typo fix.
+ * i386/i386/trap.c (user_trap): Call printf, not print.
+
+2010-09-14 Samuel Thibault <address@hidden>
+
+ Fix ifunc entries
+ * i386/ldscript: Update to the version from binutils 2.20.51.20100617.
+ Remove SEARCH_DIR calls.
+ * Makefile.am (clib_routines): Accept undefined __rel_iplt_start and
+ __rel_iplt_end as these come from the ldscript.
+ * i386/i386at/boothdr.S (boot_entry): Call ifunc hooks at boot.
+ * i386/xen/xen_boothdr.S (start): Likewise.
+
+2010-09-08 Samuel Thibault <address@hidden>
+
+ Merge branch 'master' of git.savannah.gnu.org:/srv/git/hurd/gnumach
+
+ Fix non-contiguous PCI functions
+ * linux/src/drivers/pci/pci.c (scan_bus): Do not set `is_multi' to 0
+ when a hole is encountered. Detect 0000:ffff and ffff:0000 vendor ID as
+ holes too.
+
+2010-08-27 Guillem Jover <address@hidden>
+
+ Fix "make dist"
+ * Makefile.am (EXTRA_DIST): Remove ChangeLog.0, ChangeLog.00 and
+ Makefile.correct_output_files_for_.S_files.patch.
+ * Makefrag.am (libkernel_a_SOURCES): Add ipc/mach_port.h,
+ kern/ipc_mig.h, kern/machine.h, util/putchar.h, util/atoi.h,
+ vm/vm_resident.h, vm/vm_types.h and device/subrs.h.
+ Remove kern/time_out.h.
+ * i386/Makefrag.am (libkernel_a_SOURCES): Add i386/i386at/autoconf.h,
+ i386/i386at/com.h, i386/i386at/int_init.h, i386/i386/loose_ends.h,
+ i386/i386/model_dep.h, i386/intel/read_fault.h and i386/i386/xen.h.
+ Remove i386/i386/timer.h.
+ * linux/Makefrag.am (liblinux_a_SOURCES): Add
+ linux/src/drivers/net/sis900.h.
+ * xen/Makefrag.am (libkernel_a_SOURCES): Add xen/public/arch-x86_32.h
+ xen/public/arch-x86_64.h, xen/public/arch-x86/xen.h,
+ xen/public/arch-x86/xen-mca.h, xen/public/arch-x86/xen-x86_32.h,
+ xen/public/arch-x86/xen-x86_64.h, xen/public/callback.h,
xen/public/COPYING,
+ xen/public/dom0_ops.h, xen/public/domctl.h, xen/public/elfnote.h,
+ xen/public/elfstructs.h, xen/public/event_channel.h,
xen/public/features.h,
+ xen/public/grant_table.h, xen/public/io/blkif.h,
xen/public/io/console.h,
+ xen/public/io/fbif.h, xen/public/io/fsif.h, xen/public/io/kbdif.h,
+ xen/public/io/netif.h, xen/public/io/pciif.h, xen/public/io/protocols.h,
+ xen/public/io/ring.h, xen/public/io/tpmif.h, xen/public/io/xenbus.h,
+ xen/public/io/xs_wire.h, xen/public/kexec.h, xen/public/libelf.h,
+ xen/public/memory.h, xen/public/nmi.h, xen/public/physdev.h,
+ xen/public/platform.h, xen/public/sched.h, xen/public/sysctl.h,
+ xen/public/trace.h, xen/public/vcpu.h, xen/public/version.h,
+ xen/public/xencomm.h, xen/public/xen-compat.h, xen/public/xen.h,
+ xen/public/xenoprof.h, xen/block.h, xen/console.h, xen/evt.h,
+ xen/grant.h, xen/net.h, xen/ring.h, xen/store.h, xen/time.h and
xen/xen.h.
+
+2010-08-26 Samuel Thibault <address@hidden>
+
+ Do not advice to install libc0.3-xen on 4gb_segment trap
+ ext2fs.static will trigger some anyway. Instead, provide an easy way to
+ track how many traps happen.
+
+ * i386/i386/gdt.c [MACH_XEN] (gdt_init): Disable enabling
+ VMASST_TYPE_4gb_segments_notify.
+ * i386/i386/trap.c [MACH_XEN] (user_trap): Remove printing libc0.3-xen
+ installation advice on 4gb_segments trap. Instead, print a count every
10000
+ traps, and disable them on the 1000000th.
+
+2010-08-22 Samuel Thibault <address@hidden>
+
+ Disable 4gb segment emulation notification on first notification
+ i386/i386/trap.c [MACH_XEN] (user_trap): Disable
+ VMASST_TYPE_4gb_segments_notify on trap 15.
+
+ Report Xen 4gb segment emulation
+ * i386/i386/gdt.c [MACH_XEN] (gdt_init): Enable
VMASST_TYPE_4gb_segments_notify.
+ * i386/i386/idt_inittab.S [MACH_XEN]: Set trap 15 as pushing an error
+ code.
+ * i386/i386/trap.c [MACH_XEN]: Print trap 15 first occurrence.
+
+2010-08-01 Samuel Thibault <address@hidden>
+
+ Fix unexpected irq + irq timeout on write
+ * linux/src/drivers/block/ide.c (do_rw_disk): Set IRQ handler before
+ issuing write command.
+
+ Move read-only sections to after text section
+
+2010-07-31 Samuel Thibault <address@hidden>
+
+ Un-whitelist the QEMU harddisk for DMA support
+ * linux/src/drivers/block/triton.c (good_dma_drives): Remove "QEMU
HARDDISK".
+
+ Put a name on the 16MiB magic number
+ * linux/dev/glue/kmem.c (MEM_DMA_LIMIT): New macro
+ (linux_kmem_init): Replace 16 * 1024 * 1024 occurrences with
+ MEM_DMA_LIMIT.
+
+2010-06-25 Jeremie Koenig <address@hidden>
+
+ Route BLKRRPART to partitions layer
+ * linux/dev/glue/block.c (device_set_status): New function
+ (linux_block_emulation_ops): Set set_status field to device_set_status.
+
+2010-04-16 Samuel Thibault <address@hidden>
+
+ Add memory clobbers to segment selector loaders
+ * i386/i386/seg.h (lldt): Add memory clobber to lldt asm
+ snippet.
+ * i386/i386/tss.h (ltr): Add memory clobber to ltr asm
+ snippet.
+
+2010-04-08 Samuel Thibault <address@hidden>
+
+ Fix bootstrap additional mapping
+ * i386/intel/pmap.c (pmap_bootstrap): Use pt_entry_t type
+ instead of vm_offset_t to map additional kernel space.
+
+ Extend machine addresses to 64bit for PAE
+ * i386/i386/pcb.c (switch_ktss): Use uint64_t for descriptor
+ type instead of unsigned long long.
+ * i386/i386/seg.h (fill_descriptor): Use uint64_t for descriptor
+ type instead of unsigned long long. Cast result of kv_to_ma()
+ into vm_offset_t before printing.
+ * i386/i386/xen.h (hyp_mmu_update_pte): Use pt_entry_t type
+ instead of unsigned long long, make pte parameter a pt_entry_t
+ too.
+ (hyp_mmu_update_pte): Compute pte address just using pt_entry_t
+ integers.
+ (hyp_high): New macro to fix 32bit right shifting.
+ (hyp_do_update_descriptor): Use pt_entry_t type for machine
+ address instead of unsigned long. Split it in 32bit parts. Use
uint64_t
+ for descriptor type instead of unsigned long long.
+ (update_va_mapping): Use pt_entry_t type instead of unsigned
+ long long. Use hyp_high macro.
+ (hyp_invlpg): Use uint64_t for time type instead of unsigned
+ long long.
+ * i386/intel/pmap.c (pmap_bootstrap): Use ptetokv instead of
+ pte_to_pa + phystokv. Cast machine addresses into vm_offset_t
+ before printing.
+ (pmap_set_page_readwrite): Likewise.
+ (pmap_set_page_readonly): Likewise
+ (pmap_set_page_readonly_init): Likewise
+ (pmap_clear_bootstrap_pagetable): Likewise
+ (pmap_destroy): Likewise
+ (pmap_map_mfn): Use pt_entry_t type for machine addresses. Cast
+ machine addresses into vm_offset_t before printing.
+ * i386/intel/pmap.h [PAE] (INTEL_PTE_PFN): Set macro to
+ 0xfffffffffffff000ULL.
+ * include/mach/xen.h [PAE] (pa_to_ma, ma_to_pa): Use pt_entry_t
+ type for machine addresses.
+ [!PAE] (pa_to_ma): Remove cast to vm_offset_t.
+ (mfn_to_kv): Use mfn_to_pfn + ptoa instead of ptoa + ma_to_pa.
+ * xen/xen.c (hyp_invalidate_pte): Cast machine addresses into
+ vm_offset_t before printing.
+
+2010-04-06 Samuel Thibault <address@hidden>
+
+ Merge branch 'master' of git.savannah.gnu.org:/srv/git/hurd/gnumach
+
+ Fix crash on Xen when no module is provided
+ * kern/bootstrap.c (bootstrap_create): Iterate over bmods only
+ if is not NULL.
+
+2010-03-15 Thomas Schwinge <address@hidden>
+
+ Require GNU Automake 1.10.2.
+ 9ff49d9648debffbe42d18863c739d37bcdb50b4's config.status.dep.patch is
fit for
+ 1.10.2 (released in November 2008) and later, and is no longer suitable
for
+ 1.10.1.
+
+ * configure.ac (AM_INIT_AUTOMAKE): Require 1.10.2.
+
+2010-03-14 Samuel Thibault <address@hidden>
+
+ Fix Xen build without kdb
+ * xen/console.c (hypcnintr): Use #if MACH_KDB instead of #ifdef
+ MACH_KDB.
+
+ Add mem device
+ * i386/Makefrag.am (libkernel_a_SOURCES): Add
+ i386/i386at/iopl.c.
+ * i386/i386at/conf.c [!MACH_HYP] (memmmap): Declare function.
+ (memname): Add macro.
+ (dev_name_list): Add mem device.
+ * i386/i386at/mem.c: New file.
+
+2010-03-02 Samuel Thibault <address@hidden>
+
+ whitelist the QEMU harddisk for DMA support
+ * linux/src/drivers/block/triton.c (good_dma_drives): Add
+ "QEMU HARDDISK".
+
+2010-01-04 Samuel Thibault <address@hidden>
+
+ ignore bogus FDPT information from BIOS
+
+2009-12-22 Samuel Thibault <address@hidden>
+
+ Align mach_port_deallocate debug flag with usage
+ * ipc/mach_port.c (debug_mach_port_deallocate): Rename to...
+ (mach_port_deallocate_debug): ... new name, and set volatile
+ to permit live changes from ddb.
+
+ Do not systematically debug buggy port deallocation
+ * ipc/mach_port.c (debug_mach_port_deallocation): New variable,
+ set to 0.
+ (mach_port_deallocate): Only call SoftDebugger if
+ debug_mach_port_deallocation is not 0.
+
+ Merge branch 'master' of debhurd0:xen/gnumach
+
+2009-12-22 root <address@hidden>
+
+ Fix debugger trigger
+ * i386/i386/locore.S [MACH_XEN] (RET_OFFSET): Define to 8
+ * xen/console.c (hypcnintr): On pound sign, call kdb_kintr instead of
+ panicing.
+
+2009-12-21 Samuel Thibault <address@hidden>
+
+ Invoke debugger on duplicate port deallocation
+ * ipc/mach_port.c (mach_port_deallocate): Call SoftDebugger if
+ ipc_right_lookup_write was not succcessful and `name' is not
+ MACH_PORT_NULL or MACH_PORT_DEAD.
+
+ Add a SoftDebugger function
+ * kern/debug.h (SoftDebugger): Add prototype.
+ * kern/debug.c (Debugger): Move code invoking debugging trap
+ to...
+ (SoftDebugger): ... new function. Print the passed message.
+ * kern/lock_mon.c (decl_simple_lock_data, retry_bit_lock): Call
+ SoftDebugger instead of Debugger.
+ * device/ds_routines.c (ds_device_open, device_read,
+ device_read_inband): Call SoftDebugger instead of Debugger.
+ * i386/i386at/model_dep.c (c_boot_entry): Call SoftDebugger
+ instead of Debugger.
+ * kern/syscall_sw.c (null_port, kern_invalid): Call SoftDebugger
+ instead of Debugger.
+ * vm/vm_object.c (vm_object_collapse): Call SoftDebugger instead
+ of Debugger.
+
+2009-12-19 Samuel Thibault <address@hidden>
+
+ Document kdb_kintr stack manipulation
+ * i386/i386/locore.S: Document kdb_kintr stack manipulation.
+
+2009-12-19 root <address@hidden>
+
+ Fix debugger trigger
+ * i386/i386/locore.S [MACH_XEN] (RET_OFFSET): Define to 8
+ * xen/console.c (hypcnintr): On pound sign, call kdb_kintr instead of
+ panicing.
+
+2009-12-18 Guillem Jover <address@hidden>
+
+ Add missing casts
+ * vm/vm_resident.c (vm_page_grab_contiguous_pages): Cast `prevmemp'
+ assignement to vm_page_t.
+
+ Add missing function prototypes
+ * i386/i386/pcb.c (Load_context): New prototype.
+ * i386/i386at/lpr.c (lprpr_addr): Likewise.
+
+ Use `unsigned char *' for byte buffers
+ * linux/src/drivers/net/apricot.c (struct i596_tbd): Change `data'
+ member type to `unsigned char *'.
+ (struct i596_rfd): Change `data' member type to `unsigned char'.
+ (print_eth): Change argument type to `unsigned char'. Remove
+ unneeded casts.
+ (set_multicast_list): Change cast for print_eth to `unsigned char *'.
+
+ Mark macro arguments as used
+ * i386/intel/pmap.c [!NCPUS > 1] (INVALIDATE_TLB): Mark `pmap', `s'
+ and `e' arguments as used.
+ * i386/intel/pmap.h [!NCPUS > 1] (PMAP_ACTIVATE_KERNEL): Mark `my_cpu'
+ argument as used.
+ (PMAP_DEACTIVATE_KERNEL): Likewise.
+ (PMAP_ACTIVATE_USER): Likewise. Mark `th' argument as used.
+ (PMAP_DEACTIVATE_USER): Mark `thread' and `cpu' arguments as used.
+
+ Missing `*' in assembler indirect lcall
+ * linux/src/arch/i386/kernel/bios32.c (bios32_service): Add `*'
+ in indirect lcall.
+ (check_pcibios, pci_bios_find_class, pci_bios_find_device): Likewise.
+ (pci_bios_read_config_byte, pci_bios_read_config_word): Likewise.
+ (pci_bios_read_config_dword, pci_bios_write_config_byte): Likewise.
+ (pci_bios_write_config_word, pci_bios_write_config_dword): Likewise.
+
+ Interrupt handlers do not return any value
+ * i386/i386at/kd_mouse.c (kd_mouse_open): Change kdintr return type
+ to `void'.
+ (oldvect): Change return type to `void'.
+ * linux/dev/arch/i386/kernel/irq.c (linux_timer_intr): Likewise.
+ (intnull, prtnull, linux_intr, linux_bad_intr): Likewise.
+ (old_clock_handler): Likewise.
+
+ Use selector definitions from Mach for Linux code
+ * linux/src/include/asm-i386/segment.h [MACH]: Include <machine/gdt.h>
+ and <machine/ldt.h>.
+ [MACH && MACH_HYP] (KERNEL_CS, KERNEL_DS): Remove macros.
+ [MACH && !MACH_HYP] (KERNEL_CS, KERNEL_DS): Likewise.
+ [MACH] (USER_CS, USER_DS): Likewise.
+
+ Move linux/dev/include/asm-i386/segment.h to src tree
+ * linux/dev/include/asm-i386/segment.h: Move to ...
+ * linux/src/include/asm-i386/segment.h: ... here.
+
+ Match function types with `struct tty' member functions
+ * i386/i386at/com.c (comstart): Change return type to `void'.
+ * i386/i386at/lpr.c (lprstop): Likewise.
+
+ Use explicit type int when defining register variables
+ * linux/src/drivers/scsi/aha1542.c (WAIT, WAITd): Define variables
+ with explicit type `register int' and not just `register'.
+
+2009-12-16 Samuel Thibault <address@hidden>
+
+ Add Xen support
+ 2009-03-11 Samuel Thibault <address@hidden>
+
+ * i386/i386/vm_param.h (VM_MIN_KERNEL_ADDRESS) [MACH_XEN]: Set to
+ 0x20000000.
+ * i386/i386/i386asm.sym (pfn_list) [VM_MIN_KERNEL_ADDRESS ==
+ LINEAR_MIN_KERNEL_ADDRESS]: Define to constant PFN_LIST.
+
+ 2009-02-27 Samuel Thibault <address@hidden>
+
+ * i386/intel/pmap.c [MACH_HYP] (INVALIDATE_TLB): Call hyp_invlpg
+ instead of flush_tlb when e - s is compile-time known to be
+ PAGE_SIZE.
+
+ 2008-11-27 Samuel Thibault <address@hidden>
+
+ * i386/configfrag.ac (enable_pae): Enable by default on the Xen
+ platform.
+
+ 2007-11-14 Samuel Thibault <address@hidden>
+
+ * i386/i386at/model_dep.c (machine_relax): New function.
+ (c_boot_entry): Refuse to boot as dom0.
+
+ 2007-10-17 Samuel Thibault <address@hidden>
+
+ * i386/i386/fpu.c [MACH_XEN]: Disable unused fpintr().
+
+ 2007-08-12 Samuel Thibault <address@hidden>
+
+ * Makefile.am (clib_routines): Add _START.
+ * i386/xen/xen_boothdr: Use _START for VIRT_BASE and PADDR_OFFSET. Add
+ GUEST_VERSION and XEN_ELFNOTE_FEATURES.
+
+ 2007-06-13 Samuel Thibault <address@hidden>
+
+ * i386/i386/user_ldt.h (user_ldt) [MACH_XEN]: Add alloc field.
+ * i386/i386/user_ldt.c (i386_set_ldt) [MACH_XEN]: Round allocation of
+ LDT to a page, set back LDT pages read/write before freeing them.
+ (user_ldt_free) [MACH_XEN]: Likewise.
+
+ 2007-04-18 Samuel Thibault <address@hidden>
+
+ * device/ds_routines.c [MACH_HYP]: Add hypervisor block and net devices.
+
+ 2007-02-19 Thomas Schwinge <address@hidden>
+
+ * i386/xen/Makefrag.am [PLATFORM_xen] (gnumach_LINKFLAGS): Define.
+
+ * Makefrag.am: Include `xen/Makefrag.am'.
+ * configure.ac: Include `xen/configfrag.ac'.
+ (--enable-platform): Support the `xen' platform.
+ * i386/configfrag.ac: Likewise.
+ * i386/Makefrag.am [PLATFORM_xen]: Include `i386/xen/Makefrag.am'.
+
+ 2007-02-19 Samuel Thibault <address@hidden>
+ Thomas Schwinge <address@hidden>
+
+ * i386/xen/Makefrag.am: New file.
+ * xen/Makefrag.am: Likewise.
+ * xen/configfrag.ac: Likewise.
+
+ 2007-02-11 (and later dates) Samuel Thibault <address@hidden>
+
+ Xen support
+ * Makefile.am (clib_routines): Add _start.
+ * Makefrag.am (include_mach_HEADERS): Add include/mach/xen.h.
+ * device/cons.c (cnputc): Call hyp_console_write.
+ * i386/Makefrag.am (libkernel_a_SOURCES): Move non-Xen source to
+ [PLATFORM_at].
+ * i386/i386/debug_trace.S: Include <i386/xen.h>
+ * i386/i386/fpu.c [MACH_HYP] (init_fpu): Call set_ts() and clear_ts(),
+ do not enable CR0_EM.
+ * i386/i386/gdt.c: Include <mach/xen.h> and <intel/pmap.h>.
+ [MACH_XEN]: Make gdt array extern.
+ [MACH_XEN] (gdt_init): Register gdt with hypervisor. Request 4gb
+ segments assist. Shift la_shift.
+ [MACH_PSEUDO_PHYS] (gdt_init): Shift pfn_list.
+ * i386/i386/gdt.h [MACH_XEN]: Don't define KERNEL_LDT and LINEAR_DS.
+ * i386/i386/i386asm.sym: Include <i386/xen.h>.
+ [MACH_XEN]: Remove KERNEL_LDT, Add shared_info's CPU_CLI, CPU_PENDING,
+ CPU_PENDING_SEL, PENDING, EVTMASK and CR2.
+ * i386/i386/idt.c [MACH_HYP] (idt_init): Register trap table with
+ hypervisor.
+ * i386/i386/idt_inittab.S: Include <i386/i386asm.h>.
+ [MACH_XEN]: Set IDT_ENTRY() for hypervisor. Set trap table terminator.
+ * i386/i386/ktss.c [MACH_XEN] (ktss_init): Request exception task switch
+ from hypervisor.
+ * i386/i386/ldt.c: Include <mach/xen.h> and <intel/pmap.h>
+ [MACH_XEN]: Make ldt array extern.
+ [MACH_XEN] (ldt_init): Set ldt readwrite.
+ [MACH_HYP] (ldt_init): Register ldt with hypervisor.
+ * i386/i386/locore.S: Include <i386/xen.h>. Handle KERNEL_RING == 1
+ case.
+ [MACH_XEN]: Read hyp_shared_info's CR2 instead of %cr2.
+ [MACH_PSEUDO_PHYS]: Add mfn_to_pfn computation.
+ [MACH_HYP]: Drop Cyrix I/O-based detection. Read cr3 instead of %cr3.
+ Make hypervisor call for pte invalidation.
+ * i386/i386/mp_desc.c: Include <mach/xen.h>.
+ [MACH_HYP] (mp_desc_init): Panic.
+ * i386/i386/pcb.c: Include <mach/xen.h>.
+ [MACH_XEN] (switch_ktss): Request stack switch from hypervisor.
+ [MACH_HYP] (switch_ktss): Request ldt and gdt switch from hypervisor.
+ * i386/i386/phys.c: Include <mach/xen.h>
+ [MACH_PSEUDO_PHYS] (kvtophys): Do page translation.
+ * i386/i386/proc_reg.h [MACH_HYP] (cr3): New declaration.
+ (set_cr3, get_cr3, set_ts, clear_ts): Implement macros.
+ * i386/i386/seg.h [MACH_HYP]: Define KERNEL_RING macro. Include
+ <mach/xen.h>
+ [MACH_XEN] (fill_descriptor): Register descriptor with hypervisor.
+ * i386/i386/spl.S: Include <i386/xen.h> and <i386/i386/asm.h>
+ [MACH_XEN] (pic_mask): #define to int_mask.
+ [MACH_XEN] (SETMASK): Implement.
+ * i386/i386/vm_param.h [MACH_XEN] (HYP_VIRT_START): New macro.
+ [MACH_XEN]: Set VM_MAX_KERNEL_ADDRESS to HYP_VIRT_START-
+ LINEAR_MIN_KERNEL_ADDRESS + VM_MIN_KERNEL_ADDRESS. Increase
+ KERNEL_STACK_SIZE and INTSTACK_SIZE to 4 pages.
+ * i386/i386at/conf.c [MACH_HYP]: Remove hardware devices, add hypervisor
+ console device.
+ * i386/i386at/cons_conf.c [MACH_HYP]: Add hypervisor console device.
+ * i386/i386at/model_dep.c: Include <sys/types.h>, <mach/xen.h>.
+ [MACH_XEN] Include <xen/console.h>, <xen/store.h>, <xen/evt.h>,
+ <xen/xen.h>.
+ [MACH_PSEUDO_PHYS]: New boot_info, mfn_list, pfn_list variables.
+ [MACH_XEN]: New la_shift variable.
+ [MACH_HYP] (avail_next, mem_size_init): Drop BIOS skipping mecanism.
+ [MACH_HYP] (machine_init): Call hyp_init(), drop hardware
+ initialization.
+ [MACH_HYP] (machine_idle): Call hyp_idle().
+ [MACH_HYP] (halt_cpu): Call hyp_halt().
+ [MACH_HYP] (halt_all_cpus): Call hyp_reboot() or hyp_halt().
+ [MACH_HYP] (i386at_init): Initialize with hypervisor.
+ [MACH_XEN] (c_boot_entry): Add Xen-specific initialization.
+ [MACH_HYP] (init_alloc_aligned, pmap_valid_page): Drop zones skipping
+ mecanism.
+ * i386/intel/pmap.c: Include <mach/xen.h>.
+ [MACH_PSEUDO_PHYS] (WRITE_PTE): Do page translation.
+ [MACH_HYP] (INVALIDATE_TLB): Request invalidation from hypervisor.
+ [MACH_XEN] (pmap_map_bd, pmap_create, pmap_destroy, pmap_remove_range)
+ (pmap_page_protect, pmap_protect, pmap_enter, pmap_change_wiring)
+ (pmap_attribute_clear, pmap_unmap_page_zero, pmap_collect): Request MMU
+ update from hypervisor.
+ [MACH_XEN] (pmap_bootstrap): Request pagetable initialization from
+ hypervisor.
+ [MACH_XEN] (pmap_set_page_readwrite, pmap_set_page_readonly)
+ (pmap_set_page_readonly_init, pmap_clear_bootstrap_pagetable)
+ (pmap_map_mfn): New functions.
+ * i386/intel/pmap.h [MACH_XEN] (INTEL_PTE_GLOBAL): Disable global page
+ support.
+ [MACH_PSEUDO_PHYS] (pte_to_pa): Do page translation.
+ [MACH_XEN] (pmap_set_page_readwrite, pmap_set_page_readonly)
+ (pmap_set_page_readonly_init, pmap_clear_bootstrap_pagetable)
+ (pmap_map_mfn): Declare functions.
+ * i386/i386/xen.h: New file.
+ * i386/xen/xen.c: New file.
+ * i386/xen/xen_boothdr.S: New file.
+ * i386/xen/xen_locore.S: New file.
+ * include/mach/xen.h: New file.
+ * kern/bootstrap.c [MACH_XEN] (boot_info): Declare variable.
+ [MACH_XEN] (bootstrap_create): Rebase multiboot header.
+ * kern/debug.c: Include <mach/xen.h>.
+ [MACH_HYP] (panic): Call hyp_crash() without delay.
+ * linux/dev/include/asm-i386/segment.h [MACH_HYP] (KERNEL_CS)
+ (KERNEL_DS): Use ring 1.
+ * xen/block.c: New file.
+ * xen/block.h: Likewise.
+ * xen/console.c: Likewise.
+ * xen/console.h: Likewise.
+ * xen/evt.c: Likewise.
+ * xen/evt.h: Likewise.
+ * xen/grant.c: Likewise.
+ * xen/grant.h: Likewise.
+ * xen/net.c: Likewise.
+ * xen/net.h: Likewise.
+ * xen/ring.c: Likewise.
+ * xen/ring.h: Likewise.
+ * xen/store.c: Likewise.
+ * xen/store.h: Likewise.
+ * xen/time.c: Likewise.
+ * xen/time.h: Likewise.
+ * xen/xen.c: Likewise.
+ * xen/xen.h: Likewise.
+ * xen/public/COPYING: Import file from Xen.
+ * xen/public/callback.h: Likewise.
+ * xen/public/dom0_ops.h: Likewise.
+ * xen/public/domctl.h: Likewise.
+ * xen/public/elfnote.h: Likewise.
+ * xen/public/elfstructs.h: Likewise.
+ * xen/public/event_channel.h: Likewise.
+ * xen/public/features.h: Likewise.
+ * xen/public/grant_table.h: Likewise.
+ * xen/public/kexec.h: Likewise.
+ * xen/public/libelf.h: Likewise.
+ * xen/public/memory.h: Likewise.
+ * xen/public/nmi.h: Likewise.
+ * xen/public/physdev.h: Likewise.
+ * xen/public/platform.h: Likewise.
+ * xen/public/sched.h: Likewise.
+ * xen/public/sysctl.h: Likewise.
+ * xen/public/trace.h: Likewise.
+ * xen/public/vcpu.h: Likewise.
+ * xen/public/version.h: Likewise.
+ * xen/public/xen-compat.h: Likewise.
+ * xen/public/xen.h: Likewise.
+ * xen/public/xencomm.h: Likewise.
+ * xen/public/xenoprof.h: Likewise.
+ * xen/public/arch-x86/xen-mca.h: Likewise.
+ * xen/public/arch-x86/xen-x86_32.h: Likewise.
+ * xen/public/arch-x86/xen-x86_64.h: Likewise.
+ * xen/public/arch-x86/xen.h: Likewise.
+ * xen/public/arch-x86_32.h: Likewise.
+ * xen/public/arch-x86_64.h: Likewise.
+ * xen/public/io/blkif.h: Likewise.
+ * xen/public/io/console.h: Likewise.
+ * xen/public/io/fbif.h: Likewise.
+ * xen/public/io/fsif.h: Likewise.
+ * xen/public/io/kbdif.h: Likewise.
+ * xen/public/io/netif.h: Likewise.
+ * xen/public/io/pciif.h: Likewise.
+ * xen/public/io/protocols.h: Likewise.
+ * xen/public/io/ring.h: Likewise.
+ * xen/public/io/tpmif.h: Likewise.
+ * xen/public/io/xenbus.h: Likewise.
+ * xen/public/io/xs_wire.h: Likewise.
+
+2009-11-30 Samuel Thibault <address@hidden>
+
+ Add stack-protector support
+ * kern/debug.c (__stack_chk_guard): New variable
+ (__stack_chk_fail): New function.
+
+ Use gcc builtins for stdarg.h when available
+ * i386/include/mach/sa/stdarg.h [__GNUC__ >= 3] (va_list):
+ Typedef to __builtin_va_list.
+ (va_start): define to __builtin_va_start.
+ (va_end): define to __builtin_va_end.
+ (va_arg): define to __builtin_va_arg.
+
+2009-11-28 Samuel Thibault <address@hidden>
+
+ Fix commit d088a062
+ * vm/memory_object_proxy.c: New file.
+
+2009-11-28 Samuel Thibault <address@hidden>
+
+ Add memory object proxies
+ Memory object proxies permit to replicate objects with different
parameters,
+ like reduced privileged, different offset, etc. They are e.g.
essential for
+ properly managing memory access permissions.
+
+ 2005-06-06 Marcus Brinkmann <address@hidden>
+
+ * include/mach/mach4.defs: Add memory_object_create_proxy
+ interface.
+ * Makefile.in (vm-cfiles): Add memory_object_proxy.c.
+ * i386/include/mach/i386/vm_types.h (vm_offset_array_t): New type.
+ * include/mach/memory_object.h (memory_object_array_t): New type.
+ * vm/memory_object_proxy.c: New file.
+ * kern/ipc_kobject.h: New macro IKOT_PAGER_PROXY. Bump up macros
+ IKOT_UNKNOWN and IKOT_MAX_TYPE.
+ * kern/ipc_kobject.c (ipc_kobject_notify): Call
+ memory_object_proxy_notify for IKOT_PAGER_PROXY.
+ * vm/vm_init.c (vm_mem_init): Call memory_object_proxy_init.
+ * vm/vm_user.c (vm_map): Implement support for proxy memory
+ objects.
+
+2009-11-28 Samuel Thibault <address@hidden>
+
+ Add -H option to halt on panic
+ 2005-12-29 Soeren D. Schulze <address@hidden>
+
+ * i386/i386at/model_dep.c (reboot_on_panic) [!MACH_KBD]: New variable.
+ (c_boot_entry) [!MACH_KBD]: Set reboot_on_panic to 0 if kernel_cmdline
+ contains '-H'.
+ * kern/debug.c (panic): Call halt_all_cpus with reboot_on_panic as
+ argument.
+
+2009-11-28 Samuel Thibault <address@hidden>
+
+ Add sis900 driver
+ 2005-05-01 Andreas B. Mundt <address@hidden>
+
+ * i386/README-Drivers: Likewise.
+ * i386/linux/Makefile.in (linux-net-files): Added 'sis900'.
+ * i386/linux/configure.ac (sis900): New driver.
+ * linux/dev/drivers/net/Space.c: Add conditional probes 'sis900'
+ driver.
+ * linux/src/drivers/net/sis900.c: New file.
+ * linux/src/drivers/net/sis900.h: Likewise.
+
+2009-11-28 Samuel Thibault <address@hidden>
+
+ Add XMM FPU registers save/restore support.
+ * i386/include/mach/i386/fp_reg.h (struct i386_fp_regs): Invert array
+ indices.
+ (struct i386_xfp_save): New structure.
+ (FP_387X): New macro.
+ * i386/i386/thread.h (struct i386_fpsave_state): Add xfp_save_state
+ member, keep existing fp_save_state and fp_regs members in an unnamed
+ union member. Move fp_valid member to the end of the structure.
+ * i386/i386/fpu.h (fxsave, fxrstor): New macros.
+ (fpu_save_context): Use fxsave() when FPU is FXSR-capable.
+ * i386/i386/fpu.c: Include <i386/locore.h>
+ (mxcsr_feature_mask): New variable.
+ (fp_save, fp_load): Add declaration.
+ (init_fpu): Add FXSR-capable FPU detection.
+ (fpu_module_init): Request 16-byte alignment to zinit() for
+ i386_fpsave_state structures.
+ (twd_i387_to_fxsr, twd_fxsr_to_i387): New functions.
+ (fpu_set_state): Convert FPU state when FPU is FXSR-capable.
+ (fpu_get_state): Convert FPU state when FPU is FXSR-capable.
+ (fpexterrflt): Pass to i386_exception either xfp_save_state or
+ fp_save_state according to FPU type.
+ (fpastintr): Likewise.
+ (fp_load): Likewise. Use fxrstor() when FPU is FXSR-capable.
+ (fp_save): Use fxsave() when FPU is FXSR-capable.
+ (fp_state_alloc): Add FXSR-aware initialization.
+
+ Fix debugging message
+ * i386/i386/fpu.c (fphandleerr): Fix debugging message.
+
+ Add native FPU error support
+ * i386/i386/fpu.c (init_fpu): Enable CR0_NE when processor is at
+ least i486.
+ (fpintr): Move code handling the FPU state to...
+ (fphandleerr): New function.
+ (fpexterrflt): Rename into...
+ (fpastintr): New function.
+ (fpexterrflt): Reintroduce function, calls fphandleerr then
+ raises exception.
+ * i386/i386/fpu.h (fpastintr): Add prototype.
+ * i386/i386/trap.c (i386_astintr): Call fpastintr instead of
+ fpexterrflt.
+
+ Panic when no FPU is available
+ * i386/i386/fpu.c (init_fpu): Panic if no FPU is available.
+
+ Initialize FPU in MS-DOS compatibility mode
+ * i386/i386/fpu.c (init_fpu): Make sure CR0_NE is dropped.
+
+2009-11-22 Samuel Thibault <address@hidden>
+
+ Declare memcmp function
+ * include/string.h (memcmp): New prototype.
+
+ Do not fail if no PTE maps virtual address 0
+ * i386/intel/pmap.c (pmap_unmap_page_zero): Do not fail if no
PTE maps
+ virtual address 0.
+
+ Remove (vm_offset_t) casts from constants
+ * i386/i386/vm_param.h (VM_MIN_KERNEL_ADDRESS,
VM_MAX_KERNEL_ADDRESS,
+ LINEAR_MIN_KERNEL_ADDRESS, LINEAR_MAX_KERNEL_ADDRESS): Remove
+ (vm_offset_t) cast, use UL suffix instead.
+ * i386/include/mach/i386/vm_param.h (VM_MIN_ADDRESS,
+ VM_MAX_ADDRESS): Remove (vm_offset_t) cast, use UL suffix instead.
+
+ Really call startrtclock() with an active thread.
+ * kern/startup.c (cpu_launch_first_thread): Call startrtclock
+ really after starting at least one thread.
+
+ Add pmap parameter to INVALIDATE_TLB
+ * i386/intel/pmap.c (INVALIDATE_TLB): Add pmap parameter.
+ (PMAP_UPDATE_TLBS): Pass pmap parameter.
+ (process_pmap_updates): Likewise.
+ (pmap_unmap_page_zero): Use INVALIDATE_TLB instead of hardcoding
+ it.
+
+ Add phys_first_addr and phys_last_addr declaration
+ * i386/i386/model_dep.h (phys_first_addr, phys_last_addr): New
+ declarations.
+ * i386/i386/trap.c: Include <i386/model_dep.h>
+ (user_trap): Remove extern declaration of phys_last_addr.
+ * i386/intel/pmap.c: Include <i386/model_dep.h>
+ (phys_first_addr, phys_last_addr): Remove extern declaration.
+
+ Use typeof(boot_info)
+ * i386/i386at/model_dep.c (i386at_init): Use typeof(boot_info)
+ instead of hardcoding struct multiboot_info*.
+
+ Fix early interrupt crash
+ * i386/i386at/model_dep.c (i386at_init): Move int_stack_high
+ assignation to before setting up interrupts.
+
+ Add missing phystokv/kvtophys conversions
+ * i386/i386/mp_desc.c (interrupt_stack_alloc): Apply phystokv to
+ stack_start.
+ * i386/i386at/model_dep.c (i386at_init): Apply phystokv to
+ memory allocated to duplicate multiboot information. Apply
+ _kvtophys before calling set_cr3. Apply phystokv to
+ phys_last_addr before assigning to int_stack_high.
+ * i386/intel/pmap.c (pmap_bootstrap): Apply phystokv to
+ phys_last_addr, use kernel_virtual_start instead of
+ phys_last_addr. Apply phystokv to allocated bootstrap page
+ table pages. Apply _kvtophys to page table pointers before
+ writing into page table.
+ (pmap_enter): Apply phystokv to allocated page table page, apply
+ kvtophys to deallocated page table page.
+
+ Show command lines in task list
+ * Makefile.am (clib_routines): Add memcmp.
+ * i386/i386/db_machdep.h (DB_GNUMACH_TASK_NAME): New macro.
+ * i386/i386/db_interface.c (GNU): New macro.
+ [GNU] (looks_like_command): New function.
+ (db_task_name): When task map is kernel_pmap, return
+ DB_GNUMACH_TASK_NAME.
+ [GNU] (db_task_name): Use a GNU/Hurd-specific heuristic to get
+ argv[] of a task.
+
+ Replace phys_mem_va with VM_MIN_KERNEL_ADDRESS
+ * i386/i386/vm_param.h (phystokv): Use VM_MIN_KERNEL_ADDRESS
+ instead of phys_mem_va.
+ (_kvtophys): New macro.
+ * i386/i386at/model_dep.c (phys_mem_va): Remove variable.
+
+ Avoid confusion between global and local ldt vars
+ * i386/i386/pcb.c (switch_ktss): Rename ldt variable into tldt.
+
+ Do not assume that VM_MIN_KERNEL_ADDRESS is 0
+ * i386/i386/vm_param.h (VM_MAX_KERNEL_ADDRESS): Add
+ VM_MIN_KERNEL_ADDRESS.
+ (kvtolin): Subtract VM_MIN_KERNEL_ADDRESS.
+ (lintokv): Add VM_MIN_KERNEL_ADDRESS.
+ * i386/i386at/model_dep.c (mem_size_init): Subtract
+ VM_MIN_KERNEL_ADDRESS in computation of phys_last_addr.
+ (i386at_init): Use VM_MIN_KERNEL_ADDRESS instead of 0 as
+ argument of lin2pdenum.
+
+ Rewamp spl.h
+ * i386/i386/spl.h (splnet, splbio, spl7, splx_cli): Add
+ prototypes.
+
+ Do not assume that VM_MIN_KERNEL_ADDRESS is 0
+ * i386/i386/gdt.c (gdt_init): Subtract VM_MIN_KERNEL_ADDRESS
+ from LINEAR_MIN_KERNEL_ADDRESS to avoid assuming the former
+ being 0.
+
+ Fix db_search_null loop
+ * i386/i386/db_interface.c (db_search_null): Do not decrease
+ vaddr twice.
+
+ Introduce KERNEL_RING
+ * i386/i386/seg.h (KERNEL_RING): New macro, set to 0.
+ (ACC_PL_K, SEL_PL_K): Use KERNEL_RING instead of assuming 0.
+ * i386/i386/gdt.h (KERNEL_CS, KERNEL_DS): Likewise.
+ * i386/i386/db_interface.c (kdb_trap, kdb_kentry): Likewise.
+ * i386/i386/kttd_interface.c (kttd_trap, kttd_netentry):
Likewise.
+ * i386/i386/i386asm.sym: Add KERNEL_RING expression.
+
+ Rename kd_atoi into mach_atoi
+ * i386/i386at/kd.c: Include <util/atoi.h>
+ (DEFAULT): Remove, replaced by MACH_ATOI_DEFAULT.
+ (kd_parserest): Use mach_atoi instead of kd_atoi and
MACH_ATOI_DEFAULT
+ instead of DEFAULT.
+ (kd_atoi): Move and rename function to...
+ * util/atoi.c: ... mach_atoi in new file.
+ * i386/i386at/kd.h (kd_atoi): Move and rename declaration to...
+ * util/atoi.h: ... mach_atoi in new file.
+ * Makefrag.am (libkernel_a_SOURCES): Add util/atoi.c
+
+2009-11-16 Guillem Jover <address@hidden>
+
+ Update dependency patch for Automake 1.10.2, 1.11, and thereabouts.
+ * config.status.dep.patch: Refresh.
+
+2009-11-11 Zheng Da <address@hidden>
+
+ Fix a bug in vm_page_grab_contiguous_pages.
+ * vm/vm_resident.c (vm_page_grab_contiguous_pages): Maintain the free
vm page queue correctly.
+
+2009-11-01 Samuel Thibault <address@hidden>
+
+ Show EATA probing progression
+ * linux/src/drivers/scsi/eata.c (port_detect): Print the port being
+ probed.
+
+2009-10-26 Samuel Thibault <address@hidden>
+
+ Fix VM_MAX_ADDRESS default
+ * i386/include/mach/i386/vm_param.h (VM_MAX_ADDRESS): Set back to
0xc0000000 by
+ default.
+
+ Make tuning VM_MAX_ADDRESS trivial
+ * i386/i386/vm_param.h (LINEAR_MIN_KERNEL_ADDRESS): Set to
+ VM_MAX_ADDRESS instead of hardcoding to 0xc0000000.
+ (VM_MAX_KERNEL_ADDRESS): Set to LINEAR_MAX_KERNEL_ADDRESS -
+ LINEAR_MIN_KERNEL_ADDRESS instead of hardcoding to 0x40000000.
+ * i386/include/mach/i386/vm_param.h: Document how it may be tuned.
+
+ Fix build
+ * i386/i386at/com.h (comtimer): Fix prototype of comtimer.
+
+2009-10-25 Samuel Thibault <address@hidden>
+
+ Fix warning
+ * i386/i386at/autoconf.c: Include <i386/pic.h> even when [!LINUX_DEV].
+
+ Fix warning
+ * i386/i386/trap.h: Include <mach/mach_types.h>
+
+ Fix warning
+ * i386/i386/pcb.c (thread_setstatus): Comment out state variable
+ declaration.
+
+ Fix warning
+ * device/net_io.c (net_set_filter): Cast filter into bpf_insn_t for
+ bpf_eq call.
+
+ Fix warning
+ * i386/i386/locore.S (TIME_INT_ENTRY): Fix comment.
+
+ Fix warning
+ * i386/intel/pmap.c (i): Declare only when [NCPUS > 1].
+
+2009-10-20 Samuel Thibault <address@hidden>
+
+ Fix warnings
+ * devices/io_reqs.h (io_req): Set type of io_alloc_size field to
+ vm_size_t.
+ * device/ds_routines.c (device_write_dealloc): Remove cast of
+ io_alloc_size field.
+ * device/subrs.c (brelse): Likewise.
+
+ Fix warnings
+ * device/chario.c (ttypush): Set parameter type to void * instead of
+ struct tty *, and implicitly cast the former into the latter instead.
+ * i386/i386at/com.c: Include <kern/mach_clock.h>.
+ (timeout, ttrstrt): Remove declarations.
+ (comtimer): Add unused void * parameter.
+ (comopen): Pass NULL to comtimer function.
+ * i386/i386at/kd.h (kd_belloff): Add unused void * parameter.
+ * i386/i386at/kd.c (timeout): Remove declaration.
+ (kd_belloff): Add unused void * parameter.
+ (feep, kdsetbell): Pass NULL to kd_belloff function.
+ * i386/i386at/lpr.c: Include <mach_clock.h>.
+ (timeout, ttrstrt): Remove declarations.
+ * kern/mach_clock.c (softclock, timeout, untimeout): Set parameter
+ type of fcn function pointer to void * instead of char *. Set type
+ of param to void * instead of char *.
+ * kern/mach_clock.h (timer_elt): Set parameter type of fcn member
+ to void * instead of char *. Set time of param member to void * instead
+ of char *.
+ (timeout): Set parameter type of fcn function pointer parameter to void
+ * instead of char *.
+ (untimeout): Likewise, set type of param parameter to void * instead of
+ char *.
+ * kern/sched_prim.c (sched_init): Remove cast of recompute_priorities.
+ Replace (char *)0 with NULL.
+ (thread_timeout): Set parameter type to void * instead of thread_t, and
+ implicitly cast the former into the latter instead.
+ (thread_timeout_setup): Remove cast of thread_timeout, cast
+ thread_depress_timeout into (void (*) (void*)). Remove cast of thread.
+ (thread_recompute_priorities): Add unused void * parameter.
+
+ Fix warnings
+ * device/tty.h (tty): Set type of t_ispeed and t_ospeed members to
+ unsigned char instead of (potentially signed) char.
+
+ Fix warnings
+ * vm/vm_resident.c (vm_page_grab_contiguous_pages): Remove unused
+ count_zeroes and not_found_em labels.
+
+ Fix warning
+ * vm/vm_pageout.c (vm_pageout_scan): Remove unused Restart label.
+
+ Fix warning
+ * vm/vm_map.c (vm_map_lookup): Add braces to fix readability.
+
+ Fix warning
+ * kern/thread.c (_s_): Remove unused variable.
+
+ Fix warnings
+ * kern/bootstrap.c (task_insert_send_right): Remove spurious cast of
+ port into ipc_object_t.
+ (load_protect_text, load_fault_in_text, boot_map,
+ load_bootstrap_symbols): Comment out unused variables and function.
+ (read_exec): Comment out unused user_map variable.
+
+ Fix boot from grub2 with more than 800MiB memory
+ * i386/i386at/model_dep.c (init_alloc_aligned): Add declaration.
+ (i386at_init): Use init_alloc_aligned to allocate memory to save the
+ content pointed by boot_info: cmdline, mods_addr, mod_start, and string.
+ Set kernel_cmdline to the newly allocated string.
+ (c_boot_entry): Do not set kernel_cmdline.
+
+ Better estimate avail_remaining
+ * i386/i386at/model_dep.c (mem_size_init): Move avail_remaining
computation to
+ after all phys_last_addr corrections.
+
+2009-10-18 Samuel Thibault <address@hidden>
+
+ Revert "Fix multiboot compliancy concerning x86 D flag"
+ This reverts commit de00e82b8c4491a4ff3320c0ddd80ac91ed0977b.
+
+ Flags already get cleared using push/pop a few instructions later.
+
+2009-10-17 Samuel Thibault <address@hidden>
+
+ Fix multiboot compliancy concerning x86 D flag
+ i386/i386at/boothdr.S (boot_entry): Clear D flag.
+
+2009-10-14 Samuel Thibault <address@hidden>
+
+ Merge branch 'master' of git.savannah.gnu.org:/srv/git/hurd/gnumach
+
+ Update constants to nowadays standards
+ kern/zalloc.c (zone_map_size): Increase to 64MiB.
+ i386/i386at/model_dep.c (mem_size_init): Reduce cap to 1/6 of memory
+ space to save room for zalloc area.
+ linux/src/drivers/block/ide.h (INITIAL_MULT_COUNT): Set to 16.
+ vm/vm_map.h (VM_MAP_COPY_PAGE_LIST_MAX): Set to 64.
+ vm/vm_object.c (vm_object_cached_max): Set to 4000.
+
+2009-10-14 Thomas Schwinge <address@hidden>
+
+ Merge branch 'master-zhengda'
+
+2009-10-14 Zheng Da <address@hidden>
+
+ Apply patch #6851: fix a bug in BPF * net_io.c (net_filter): Correct
the amount of data of a packet accepted by BPF.
+
+2009-10-14 Samuel Thibault <address@hidden>
+
+ Fix yet more allocation failures during gc
+ kern/zalloc.c (zone_gc): Allocate and free two vm_map_kentry_zone
elements to
+ make sure the gc will be able to allocate two in vm_map_delete.
+
+ Revert spurious part of 909c941d
+
+ Fix db kernel memory access
+ i386/i386/db_interface.c (db_read_bytes): Also check addr against
+ VM_MAX_KERNEL_ADDRESS.
+
+ Fix macro escapes
+ i386/intel/pmap.c (INVALIDATE_TLB): Fix macro escapes
+
+ Fix allocation failure during gc
+ kern/zalloc.c (zone_gc): Allocate and free a vm_map_kentry_zone element
to make
+ sure the gc will be able to allocate one for vm_map_delete.
+
+ More restrictive requirements on zone alignment
+ kern/zalloc.c (zinit): Panic if requested alignment doesn't match page
+ size and list elements.
+
+ Fix return with lock held
+ vm/vm_map.c (vm_map_copy_overwrite): Unlock dst_map before returning.
+
+ Fix return with lock held
+ vm/vm_map.c (vm_map_enter): Use RETURN instead of return to unlock the
+ map before returning.
+
+ Make local variable static
+ kern/lock.c (lock_wait_time): Add static qualifier.
+
+ Advertise memory size truncations
+ i386/i386at/model_dep.c (mem_size_init): Advertise memory size
+ truncations.
+
+2009-09-27 Samuel Thibault <address@hidden>
+
+ Disable CMD-640 support
+ It messes too much with probing and brings hang issue.
+
+ * i386/linux/dev/include/linux/autoconf.h
+ (CONFIG_BLK_DEV_CMD640, CONFIG_BLK_DEV_CMD640_ENHANCED):
+ Undefine macros.
+
+2009-07-11 Thomas Schwinge <address@hidden>
+
+ Switch to the new ChangeLog style.
+ * ChangeLog: Wipe out content, and add instructions about how to get it
back.
+ * ChangeLog.0: Remove file.
+ * ChangeLog.00: Likewise.
+
+2009-02-26 Samuel Thibault <address@hidden>
+
+ * i386/i386/prog_reg.h (invlpg_linear): Rename macro into...
+ (invlpg_linear_range): ... this.
+ (invlpg_linear): New macro.
+ * i386/intel/pmap.c (INVALIDATE_TLB): Call invlpg_linear instead
+ of flush_tlb when e - S is compile-time known to be PAGE_SIZE,
+ instead of run-time known to be less than 32 * PAGE_SIZE.
+
+2009-01-05 Samuel Thibault <address@hidden>
+
+ * i386/i386/gdt.h (LINEAR_DS): New macro.
+ * i386/i386/gdt.c (gdt_init): Initialize LINEAR_DS descriptor.
+ * i386/i386/proc_reg.h (invlpg_user): Rename macro into...
+ (invlpg_linear): ... this. Use movw instead of movl to set KERNEL_DS
+ selector. Use LINEAR_DS selector instead of USER_DS selector.
+ * i386/intel/pmap.c (INVALIDATE_TLB): Call invlpg_linear instead of
+ invlpg_user. For now, disable use of invlpg.
+
+2008-12-30 Samuel Thibault <address@hidden>
+
+ * i386/i386/proc_reg.h [__ASSEMBLER__ && __GNUC__]: Include
+ <i386/gdt.h> and <i386/ldt.h>
+ (invlpg_user): New macro.
+ * i386/intel/pmap.c (INVALIDATE_TLB): Call invlpg_user instead
+ of invlpg.
+ (pmap_remove, pmap_page_protect, pmap_protect, pmap_enter,
+ pmap_collect, phys_attribute_clear): Call PMAP_UPDATE_TLBS
+ after pde update instead of before.
+
+2008-12-29 Samuel Thibault <address@hidden>
+
+ * i386/intel/pmap.c (pmap_bootstrap): Extend kernel virtual memory to
+ at least the size of the physical memory.
+
+2008-12-05 Samuel Thibault <address@hidden>
+
+ * vm/vm_fault.c (vm_fault_page): Print value returned
+ memory_object_data_request as %x instead of %d.
+
+2008-11-15 Shakthi Kannan <address@hidden>
+
+ * device/ds_routines.h (device_reference, device_deallocate): Add
+ function prototypes.
+ * kern/task.c (task_create): Moved unused i variable inside FAST_TAS.
+ * vm/vm_map.h (vm_map_copy_page_discard): Add function prototype.
+ * vm/vm_kern.c (projected_buffer_deallocate): Give &map->hdr
+ instead of map to _vm_map_clip_start and _vm_map_clip_end functions.
+
+2008-12-01 Samuel Thibault <address@hidden>
+
+ * device/device_emul.h (device_emulation_ops): Turn back reference,
+ dealloc, dev_to_port, write_trap and writev_trap into taking a void*,
+ as they do not always take a mach_device_t.
+ * device/ds_routines.c (mach_device_emulation_ops): Cast
+ mach_device_reference, mach_device_deallocate,
+ mach_convert_device_to_port, device_write_trap and device_writev_trap
+ to (void*) to make them accept a void* argument.
+ * linux/pcmcia-cs/glue/ds.c (device_deallocate): Rename function
+ into...
+ (ds_device_deallocate): ... this.
+ (dev_to_port): Call ds_device_deallocate instead of device_deallocate.
+ (linux_pcmcia_emulation_ops): Use ds_device_deallocate instead of
+ device_deallocate, cast mach_device_reference to (void*) to make it
+ accept a void* argument.
+
+2008-11-28 Thomas Schwinge <address@hidden>
+
+ * doc/Makefrag.am: Only advertize updating the web pages on
+ gnumach-1-branch.
+
+2008-11-27 Samuel Thibault <address@hidden>
+
+ * i386/i386/proc_reg.h (invlpg): New macro.
+ * i386/intel/pmap.c (INVALIDATE_TLB): If portion to be flushed is less
+ than 32 pages, use calls to invlpg instead of flush_tlb.
+
+2008-11-23 Samuel Thibault <address@hidden>
+
+ * i386/i386/proc_reg.h (get_cr0, get_cr2, get_cr3, get_cr4, get_tr,
+ get_ldt): Add volatile qualifier to asm statement to prevent gcc from
+ optimizing it away since there seems to be no way to clobber these
+ properly in the set_* macros.
+
+2008-11-17 Thomas Schwinge <address@hidden>
+
+ * Makefile.am (install_sh, INSTALL): Point to `build-aux/install-sh'.
+ Make use of its `-C' option.
+
+ * configure.ac: Require GNU Automake 1.10.1.
+ * Makefile.am: Adapt.
+ * Makefile.correct_output_files_for_.S_files.patch: Remove.
+
+2008-07-19 Barry deFreese <address@hidden>
+
+ * device/device_emul.h (struct device_emulation_ops): Make members
+ reference, dealloc, dev_to_port, write_trap, and writev_trap take
+ mach_device_t parameter instead of void *.
+ * i386/i386at/autoconf.c: Make forward declarations for comintr()
+ and lprintr() match prototype. Add brackets around initialization
+ members for bus_ctlr and bus_device structs.
+ * i386/i386at/conf.c (dev_name_list): Pass nomap instead of nulldev
+ for map field.
+ * i386/i386at/pic_isa.c (intnull, fpintr, hardclock, kdintr,
+ prtnull): Declare the type of the value returned by functions to void.
+
+2008-11-13 Thomas Schwinge <address@hidden>
+
+ [task #8135 -- PAE for GNU Mach]
+ * i386/configfrag.ac (enable_pae): Add checks: this is ix86-only.
+ * doc/mach.texi (Configuration): Document the new option.
+
+2008-11-11 Shakthi Kannan <address@hidden>
+
+ * kern/eventcount.c (evc_wait_clear): Remove unused variable 'ret'.
+
+2008-11-10 Samuel Thibault <address@hidden>
+
+ [task #8135 -- PAE for GNU Mach]
+ * i386/configfrag.ac: Add --enable-pae option, which defines PAE.
+ * i386/i386/i386asm.sym (PDPSHIFT, PDEMASK, PTE_SIZE): New assembly
+ macros.
+ * i386/i386/locore.S (copyout_retry) [PAE]: Use page directory pointer
+ bits, take PTE_SIZE into account.
+ * i386/i386at/model_dep.c (i386at_init) [PAE]: Set second initial 2MB
+ page. Enable PAE bit. Set cr3 to page directory pointer table instead
+ of page directory.
+ * i386/intel/pmap.c (pmap_bootstrap, pmap_create) [PAE]: Allocate 4
+ pages for dirbase. Setup pdpbase.
+ (pmap_destroy) [PAE]: Free 4 pages from dirbase. Free pdpbase.
+ * i386/intel/pmap.h (pt_entry_t) [PAE]: Typedef to unsigned long long.
+ (PDPSHIFT, PDPNUM, PDPMASK) [PAE]: New macros.
+ (PDESHIFT, PDEMASK, PTEMASK) [PAE]: Set to PAE values.
+ (lin2pdenum, NPDES) [PAE]: Make them take the page directory pointer
+ index into account too.
+ (struct pmap) [PAE]: Add `pdpbase' member.
+ (set_dirbase): Remove macro, replaced by...
+ (set_pmap): New macro, taking a pmap instead of the dirbase.
+ (PMAP_ACTIVATE_USER): Use set_pmap instead of set_dirbase.
+
+2008-11-05 Shakthi Kannan <address@hidden>
+
+ * ipc/mach_port.c (mach_port_insert_right): Cast poly into
+ (ipc_object_t) to fix compiler warning when calling
+ ipc_object_copyout_name.
+
+2008-08-31 Samuel Thibault <address@hidden>
+
+ * i386/i386/trap.c (user_trap): On page fault, raise exception instead
+ of asserting that cr2 is below LINEAR_MIN_KERNEL_ADDRESS.
+
+2008-07-29 Zheng Da <address@hidden>
+ Manuel Menal <address@hidden>
+
+ * include/device/net_status.h (NET_FLAGS): New macro.
+ * linux/dev/glue/net.c (device_get_status): Handle NET_FLAGS case.
+ (device_set_status): Likewise, calls dev_change_flags.
+ * linux/dev/include/linux/netdevice.h (dev_change_flags): Declare
+ function.
+ * linux/dev/net/core/dev.c (dev_change_flags): Add function.
+
+2008-08-03 Samuel Thibault <address@hidden>
+
+ * i386/i386/lock.h (_simple_lock_xchg_, bit_lock, bit_unlock): Add
+ memory clobbers.
+ * i386/include/mach/i386/cthreads.h (spin_unlock, spin_try_lock): Add
+ memory clobbers.
+
+2008-07-23 Barry deFreese <address@hidden>
+
+ * device/chario.c (ttyinput_many): Change chars param to char *.
+ * device/tty.h (ttyinput_many): Likewise.
+ * i386/i386/pcb.h: Include <mach/exec/exec.h>.
+ * i386/i386at/autoconf.h: Include <chips/busses.h>.
+ * i386/i386at/model_dep.c (inittodr): Cast &new_time.seconds to u_int *.
+ * ipc/mach_port.c (mach_port_insert_right): Cast poly to ipc_object_t.
+ * ipc/mach_debug.c (host_ipc_hash_info): Initialize size to 0 to make
+ the compiler believe that there is no bug.
+ * ipc/mach_debug.c (mach_port_space_info): Likewise for tree_size and
+ table_size.
+ * i386/i386at/com.c (commctl): Likewise for b.
+ * i386/i386/trap.c (user_trap): Likewise for exc.
+ * i386/i386/user_ldt.c (i386_set_ldt): Likewise for old_copy_object.
+ * i386/i386at/com.c (comintr): Check line_stat&iOR instead of line&iOR.
+
+2008-07-23 Barry deFreese <address@hidden>
+
+ * i386/i386/locore.h (copyinmsg, copyoutmsg):
+ Make parameters const void* and void* instead of vm_offset_t.
+ * i386/i386at/com.c (comportdeath): Cast port as ipc_port_t in
+ tty_portdeath call.
+ * i386/i386at/kd.c (kdportdeath): Likewise.
+ * i386/i386at/lpr.c (lprportdeath): Likewise.
+ * i386/i386at/kd_mouse.c (mouse_handle_byte): Cast param to wakeup() as
+ vm_offset_t.
+ * i386/intel/pmap.c (pmap_destroy): Cast arg 2 of kmem_free() to
+ vm_offset_t.
+ * i386/intel/pmap.h: Cast all arg 1 params to kvtophy() to vm_offset_t.
+ * ipc/ipc_kmsg.c: Remove casts from params to copyinmsg and
+ copyoutmsg calls.
+ * ipc/mach_msg.c: Likewise.
+ * kern/exceptions.c: Likewise.
+ * ipc/mach_msg.c: Remove casts from params to copyout calls.
+ * ipc/bootstrap.c: Likewise.
+ * kern/ipc_tt.c (mach_ports_register): Cast memory[i] as ipc_port_t in
+ assignment.
+
+2008-07-19 Barry deFreese <address@hidden>
+
+ * chips/busses.h (bus_ctlr, bus_device): Make intr return void instead
+ of int.
+ * device/tty.h (tty): Make t_start and t_stop return void instead of
+ int.
+ * i386/i386/ipl.h (ivect[]): return void instead of int.
+ * i386/i386at/pic_isa.h (ivect[]): Likewise.
+ * i386/i386at/kd_mouse.c (mouseintr): Likewise.
+ * i386/i386at/com.c (comintr, comstop): Likewise.
+ * i386/i386at/kd.c (kdcnputc, kdstart, kdstop, kdintr): Likewise.
+ * i386/i386/trap.c (exception, thread_exception_return, i386_exception):
+ Add __attribute__ ((noreturn)).
+ * i386/i386at/kd.c (kdcnprobe): Return 0 at end of function.
+ * i386/i386at/lpr.c (lprintr, lprstart): Return void instead of int.
+ (lprstart): Don't return numeric values any longer.
+ * kern/eventcount.c (evc_wait_clear): Return a value.
+ * kern/exceptions.c (exception, exception_try_task,
exception_no_server,
+ exception_raise, exception_raise_continue,
exception_raise_continue_slow,
+ exception_raise_continue_fast): Add __attribute__ ((noreturn)).
+ (exception, exceptio_try_task, exception_raise,
+ exception_raise_continue_slow, exception_raise_continue_fast):
+ Remove spurious returns.
+ (exception_no_server): Add panic() on return from thread_halt_self().
+
+2008-07-20 Samuel Thibault <address@hidden>
+
+ * linux/pcmcia-cs/glue/wireless_glue.h (schedule_task): Add parameter
+ to Debugger() call.
+ * kern/lock_mon.c (retry_simple_lock, retry_bit_lock): Likewise.
+ * kern/machine.c (Debugger): Remove declaration.
+ * device/net_io.c (net_deliver): Fix parenthesis to really round up.
+ * kern/mach_clock.c (timeout): Make the `fcn' parameter take a void *
+ instead of char *.
+ * kern/mach_clock.h (timeout): Likewise.
+ * device/net_io.c (net_set_filter): Reference the proper member
+ instead of casting pointers.
+ * device/subrs.c (ether_sprintf): Set type of `i' to `int'.
+ * i386/i386/trap.c (kernel_trap): Pass page fault address to printf.
+ * i386/i386at/rtc.c (rtcget): Fix parenthesis to really test the bit.
+ * linux/src/include/linux/tqueue.h (queue_task_irq,
+ queue_task_irq_off, queue_task, run_task_queue): Turn into static
+ inlines.
+
+2008-07-19 Barry deFreese <address@hidden>
+
+ * device/dev_hdr.h (dev_name_lookup, dev_set_indirection): Add
+ prototypes.
+ * device/dev_pager.c: Include <vm/vm_user.h>.
+ * device/ds_routines.c: Likewise.
+ * device/subrs.c: Likewise.
+ * device/device_init.c: Include <device/tty.h>.
+ * device/ds_routines.h (iowait): Add prototype.
+ * device/net_io.h (net_kmsg_collect): Add prototype.
+ * device/net_io.c (hash_ent_remove, net_free_dead_infp,
+ net_free_dead_entp, bpf_validate, bpf_eq, net_add_q_info,
+ bpf_match): Add forward declarations.
+ * device/subrs.h: New header.
+ * i386/i386/fpu.h: Include <sys/types.h>.
+ Change <i386/thread.h> include to <kern/thread.h>.
+ (fp_save, fp_load, fp_free, fpu_module_init, fpu_set_state,
+ fpu_get_state, fpnoextflt, fpextovrflt, fpexterrflt, init_fpu):
+ Add prototypes.
+ * i386/i386/gdt.h (gdt_init): Add prototype.
+ * i386/i386/io_map.c: Include <vm/pmap.h>.
+ * vm/vm_kern.c: Likewise.
+ * i386/i386/ktss.h (ktss_init): Add prototype.
+ * i386/i386/ldt.h (ldt_init): Add prototype.
+ * i386/i386/loose_ends.h: New header.
+ * i386/i386/loose_ends.c (delay): Complete prototype.
+ * i386/i386/model_dep.h (startrtclock): Add prototype.
+ * i386/i386/pcb.h (load_context, stack_attach, stack_detach,
+ switch_ktss): Add prototypes.
+ * i386/i386/pic.h (form_pic_mask, picinit): Add prototypes.
+ * i386/i386/pit.c: Include <i386/pic.h>.
+ * i386/i386at/kd_mouse.c: Likewise.
+ * i386/i386/pit.h (clkstart): Add prototype.
+ * i386/i386/trap.c: Include <i386/fpu.h>, <intel/read_fault.h>,
+ <vm/vm_fault.h>.
+ * i386/i386/trap.h (interrupted_pc): Add prototype.
+ * i386/i386/user_ldt.c: Include <i386/pcb.h>.
+ * i386/i386at/autoconf.h: New header.
+ * i386/i386at/com.h: New header.
+ * i386/i386at/com.c: Include <i386at/autoconf.h>, <i386at/com.h>.
+ * i386/i386at/idt.h (idt_init): Add prototype.
+ * i386/i386at/int_init.h: New header.
+ * i386/i386at/kd.c: Include <i386/loose_ends.h>.
+ * kern/debug.c: Likewise.
+ * i386/i386at/kd_event.c: Include <device/ds_routines.h>.
+ * i386/i386at/kd_mouse.c: Likewise.
+ * i386/i386at/kd_mouse.c: Include <device/subrs.h>, <i386at/com.h>.
+ * i386/i386at/lpr.c: Include <i386at/autoconf.h>
+ * i386/i386at/model_dep.c: Include: <i386/fpu.h>, <i386/gdt.h>,
+ <i386/ktss.h>, <i386/ldt.h>, <i386/pic.h>, <i386/pit.h>,
+ <i386at/autoconf.h>, <i386at/idt.h>, <i386at/int_init.h>,
+ <i386at/kd.h>, <i386at/rtc.h>.
+ * i386/i386at/rtc.h (readtodc, writetodc): Add prototypes.
+ * i386/intel/pmap.h: Include <mach/vm_prot.h>.
+ (pmap_bootstrap, pmap_unmap_page_zero, pmap_zero_page, pmap_copy_page,
+ kvtophys): Add prototypes.
+ * i386/intel/read_fault.h: New header.
+ * kern/ast.h (ast_init, ast_check): Add prototypes.
+ * kern/debug.c (Debugger): Move prototype to...
+ * kern/debug.h (Debugger): ... here.
+ * kern/eventcount.h (evc_notify_abort): Add prototype.
+ * kern/ipc_mig.c: Include <kern/syscall_subr.h>, <kern/ipc_tt.h>,
+ <device/ds_routines.h>
+ * kern/ipc_mig.h: New header.
+ * kern/ipc_tt.h (mach_reply_port): Add prototype.
+ * kern/machine.h: New header.
+ * kern/processor.h (pset_sys_bootstrap): Move prototype outside of
+ MACH_HOST check.
+ * kern/sched_prim.h (thread_bind, compute_priority,
+ thread_timeout_setup): Add prototypes.
+ * kern/startup.c: Include <kern/machine.h>, <machine/pcb.h>.
+ * kern/syscall_subr.c: Include <kern/syscall_subr.h>.
+ (thread_depress_abort): Remove prototype.
+ * kern/syscall_subr.h: Include <sys/types.h>, <mach/mach_types.h>
+ (thread_depress_abort): Add prototype.
+ * kern/syscall_sw.c: Include: <kern/debug.h>.
+ * kern/task.h (consider_task_collect): Add prototype.
+ * kern/thread.c: Include <kern/eventcount.h>, <kern/ipc_mig.h>,
+ <kern/syscall_subr.h>.
+ * kern/thread.h (stack_collect): Add prototype.
+ * linux/pcmcia-cs/glue/pcmcia_glue.h (Debugger): Remove prototype.
+ * util/putchar.c: Include <device/cons.h>.
+ * util/putchar.h: New header.
+ * util/puts.c: Include <device/cons.h>, <util/putchar.h>.
+ * vm/memory_object.c: Include <vm/vm_map.h>.
+ (memory_object_data_provided): Move function below
+ memory_object_data_supply definition.
+ * vm/vm_init.c: Include <vm/vm_fault.h>.
+ * vm/vm_kern.h (projected_buffer_in_range): Add prototype.
+ * vm/vm_map.c: Include <vm/pmap.h>, <vm/vm_resident.h>.
+ (vm_map_delete, vm_map_copyout_page_list, vm_map_copy_page_discard):
+ Add forward declaration.
+ * vm/vm_map.h (vm_map_copyin_object, vm_map_submap,
+ _vm_map_clip_start, _vm_map_clip_end): Add prototypes.
+ * vm/vm_pageout.c: Include <device/net_io.h>, <kern/task.h>,
+ <machine/locore.h>.
+ * vm/vm_resident.h: New header.
+ * vm/vm_user.c: Include <vm/vm_kern.h>.
+ * vm/pmap.h (pmap_pageable, pmap_map_bd): Add prototype.
+
+2008-07-18 Andrei Barbu <address@hidden>
+
+ * i386/i386/db_disasm.c (Iba): New macro.
+ (db_inst_table): Use Iba for aam and aad instructions.
+ (db_disasm): Decode operands for Iba case.
+ * i386/i386/db_interface.c (db_read_bytes): Do not increment the
+ address before printing it.
+ * include/sys/types.h (int8_t, uint8_t, u_int8_t, int16_t, uint16_t,
+ u_int16_t, int32_t, uint32_t, u_int32_t, int64_t, uint64_t,
+ u_int64_t): New types.
+ * ddb/db_sym.c (db_task_printsym): Do not print empty symbols.
+ * ddb/db_break.c (db_set_breakpoint): Add db_breakpoint_t return type,
+ return the breakpoint in non-ddb case.
+ * ddb/db_break.h (BKPT_EXTERNAL): New macro.
+ (db_set_breakpoint): Add declaration.
+ * (ddb/db_sym.h): Add _DDB_DB_SYM_H_ header protection.
+ (db_find_sym_and_offset, db_find_xtrn_sym_and_offset,
+ db_find_task_sym_and_offset, db_find_xtrn_task_sym_and_offset): Call
+ db_free_symbol.
+ (db_free_symbol): New declaration.
+ (db_sym_switch): New `free_symbol' member.
+ (X_db_free_symbol): New macro.
+ * ddb/db_sym.c (db_value_of_name, db_lookup, db_name_is_ambiguous,
+ db_search_task_symbol, db_search_in_task_symbol, db_task_printsym):
+ Call db_free_symbol.
+ (db_free_symbol): New function.
+ (dummy_db_free_symbol): New empty function.
+ (x_db): Initialize `free_symbol' memberi with dummy_db_free_symbol.
+ * i386/i386/db_trace.c (db_i386_stack_trace): Call db_free_symbol.
+ * kern/lock_mon.c (print_lock_info): Likewise.
+ * include/sys/types.h (quad): Remove type.
+
+2008-07-15 Barry deFreese <address@hidden>
+
+ * device/cons.c (cnputc): Turn parameter `c' into a char.
+ * device/cons.h (cninit, cngetc, cnmaygetc, cnputc): Add prototypes.
+ * i386/i386at/model_dep.c: Include <device/cons.h>
+ * kern/printf.c: Include <device/cons.h>
+ (cnputc): Remove prototype.
+ (vprintf, iprintf): Explicitely cast cnputc into the type _doprnt
+ expects.
+ * linux/dev/kernel/printk.c: Include <device/cons.h>
+ (cnputc): Remove prototype.
+ * device/ds_routines.c: Include <machine/locore.h>
+ * ipc/ipc_kmsg.c: Likewise.
+ * kern/bootstrap.c: Likewise.
+ * kern/exception.c: Likewise.
+ * kern/ipc_mig.c: Likewise.
+ * kern/sched_prim.c: Likewise.
+ * kern/time_stamp.c: Likewise.
+ * vm/vm_kern.c: Likewise.
+ * device/ds_routine.h (ds_notify): Add prototype.
+ * kern/ipc_kobject.c: Include <device/ds_routines.h>
+ * device/net_io.h (net_ast): Add prototype.
+ * ipc/ipc_kmsg.c: Include <device/net_io.h>
+ * kern/ast.c: Include <device/net_io.h>
+ * i386/i386at/kd.h (kd_isupper, kd_islower, kd_senddata, kd_sendcmd,
+ kd_cmdreg_write, kd_mouse_drain, set_kd_state, kd_setleds1, kd_setleds2,
+ cnsetleds, kdreboot, kd_putc, kd_parseesc, kd_down, kd_up, kd_cr,
+ kd_tab, kd_left, kd_right, kd_scrollup, kd_scrolldn, kd_cls, kd_home,
+ kd_atoi, kd_insch, kd_cltobcur, kd_cltopcur, kd_cltoecur, kd_clfrbcur,
+ kd_eraseln, kd_insln, kd_delln, kd_delch, kd_erase, kd_bellon,
+ kd_belloff, kdinit, kdsetkbent, kdgetkbent, kdsetbell, kd_resend,
+ kd_handle_ack, kd_kbd_magic, kdstate2idx, kd_parserest, kdcnmaygetc,
+ kd_slmwd, kd_slmscu, kd_slmscd): Add prototypes.
+ * i386/i386at/kd.c (do_modifier): Add prototype.
+ * kern/ipc_kobject.c: Include <vm/vm_object.h>
+ * vm/vm_object.h: Include <sys/types.h> and <ipc/ipc_types.h>.
+ (vm_object_coalesce, vm_object_pager_wakeup): Add prototypes.
+ * kern/priority.c: Include <kern/sched_prim.h>.
+ * kern/sched_prim.c (recompute_priorities, update_priority): Remove
+ prototypes.
+ * kern/sched_prim.h (update_priority, compute_my_priority): Add
+ prototypes.
+ * kern/time_stamp.h (timestamp_init): Add prototype.
+ * kern/startup.c: Include <kern/time_stamp.h>.
+ * ipc/ipc_kmsg.c: Include <vm/vm_user.h> and <ipc/ipc_hash.h>.
+ * ipc/ipc_mqueue (ipc_mqueue_copyin): Add prototype.
+ * kern/bootstrap.c: Include <vm/vm_user.h>.
+ * kern/exceptions.c: Include <ipc/ipc_notify.h>.
+ * kern/ipc_kobject.h (ipc_kobject_notify): Add prototype.
+ * kern/ipc_mig.c: Include <device/dev_hdr.h>.
+ * kern/pc_sample.c: Include <machine/trap.h>.
+ * kern/printf.h (safe_gets): Add prototype.
+ * kern/processor.c: Include <kern/ipc_tt.h>.
+ * kern/queue.h (insque): Add prototype.
+ * kern/startup.c: Include <kern/mach_factor.h> and <kern/xpr.h>.
+ * kern/thread.h (thread_start, kernel_thread, thread_priority,
+ thread_set_own_priority, thread_max_priority, thread_policy,
+ consider_thread_collect, stack_privilege): Add prototypes.
+ * kern/timer.h (timer_normalize, timer_init, init_timers): Add
+ prototypes.
+ * vm/vm_map.h (vm_map_lookup_entry, vm_map_entry_delete): Add
+ prototypes.
+ * device/chario.c: Include <vm/vm_user.h>
+ * device/device_init.c (chario_init): Remove prototype.
+ * device/tty.h (ttyinput_many, tty_cts, tty_get_status,
+ tty_set_status, tty_flush, ttrstrt, ttstart, ttyclose, tty_portdeath,
+ chario_init): Add prototypes.
+ * i386/i386/model_dep.h: New header.
+ * i386/i386at/model_dep.c: Include <i386/model_dep.h>.
+ * kern/debug.c: Include <machine/model_dep.h>.
+ * kern/mach_clock.c: Likewise.
+ * kern/sched_prim.c: Likewise.
+ * kern/startup.c: Likewise.
+ * kern/machine.c: Likewise.
+ (halt_cpu): Remove prototype.
+ * vm/pmap.h (pmap_grab_page): Add prototype.
+ * ipc/mach_port.h: New header.
+ * ipc/mach_port.c: Include <ipc/mach_port.h>.
+ (mach_port_get_receive_status): Add forward declaration.
+ * kern/bootstrap.c: Include <ipc/mach_port.h>.
+ * kern/ipc_mig.c: Likewise.
+ * kern/syscall_sw.c: Likewise.
+ * device/dev_pager.c (device_pager_data_request,
+ device_pager_data_request_done, device_pager_init_pager): Fix printf
+ formats.
+ * i386/i386/debug_i386.c (dump_ss): Likewise.
+ * i386/i386/trap.c (user_trap): Likewise.
+ * i386/i386at/com.c (comtimer): Likewise.
+ * ipc/ipc_notify (ipc_notify_port_deleted, ipc_notify_msg_accepted,
+ ipc_notify_port_destroyed, ipc_notify_no_senders,
+ ipc_notify_send_once, ipc_notify_dead_name): Likewise.
+ * kern/ipc_kobject.c (ipc_kobject_destroy): Likewise.
+ * kern/sched_prim.c (do_runq_scan): Likewise.
+ * linux/pcmcia-cs/clients/smc91c92_cs.c (smc_start_xmit): Likewise.
+ * linux/src/drivers/net/sundance.c (start_tx): Likewise.
+ * vm/vm_fault.c (vm_fault_page): Likewise.
+ * vm/vm_map.c (vm_map_pmap_enter): Likewise.
+ * vm/vm_object.c (vm_object_collapse): Likewise.
+
+2008-07-04 Samuel Thibault <address@hidden>
+
+ * linux/src/drivers/net/rtl8139.c (rtl8129_open): Move IRQ
+ initialization after ring initialization.
+
+2008-07-02 Samuel Thibault <address@hidden>
+
+ * linux/dev/include/asm/segment.h (__put_user, __get_user): Add
+ always_inline attribute.
+
+2008-06-29 Samuel Thibault <address@hidden>
+
+ * i386/i386/fpu.c (fpintr): Do not panic if the we receive the
+ interrupt twice in the same thread.
+
+2008-05-28 Thomas Schwinge <address@hidden>
+
+ [bug #23417, patch #6508 -- Building with -g3]
+ * Makefile.am (MIGCOM): Revert the 2008-05-19 change.
+
+2008-05-25 Andrei Barbu <address@hidden>
+
+ * ddb/db_aout.c (aout_db_symbol_values): Add stab parameter.
+ * ddb/db_sym.h (db_sym_switch): Add stab parameter to symbol_values
+ member.
+ (X_db_symbol_values): Pass stab parameter to symbole_values function.
+
+2008-05-19 Thomas Schwinge <address@hidden>
+
+ [patch #6508 -- Building with -g3]
+ * Makefile.am (MIGCOM): Let it filter through CPP again.
+ Suggested by Andrei Barbu <address@hidden>.
+
+2008-05-09 Andrei Barbu <address@hidden>
+
+ * i386/i386/loose_ends.c (DELAY): Use volatile qualifier instead of
+ register to prevent optimization.
+
+2008-03-10 Samuel Thibault <address@hidden>
+
+ * doc/Makefrag.am: Fix typo.
+
+2008-03-07 Samuel Thibault <address@hidden>
+
+ * i386/i386/locore.S (syscall): Clear direction flag at entry.
+
+2008-02-06 Samuel Thibault <address@hidden>
+
+ * linux/src/drivers/block/triton.c (ide_init_triton): Enable Bus
+ Mastering if not enabled by BIOS.
+
+2007-12-30 Samuel Thibault <address@hidden>
+
+ * kern/debug.c (panic) [MACH_KDB]: Don't wait before running the
+ debugger.
+ * linux/dev/glue/block.c (MAX_BUF): Set to sane stack-friendly 8
+ instead of blindly following VM_MAP_COPY_PAGE_LIST_MAX.
+ (rdwr_full): increment blk by cc >> bshift instead of nb.
+
+2007-12-11 Thomas Schwinge <address@hidden>
+
+ * linux/dev/include/linux/nfs.h: Remove unused file.
+ * linux/src/include/linux/nfs.h: Likewise.
+
+2007-12-10 Thomas Schwinge <address@hidden>
+
+ * i386/Makefrag.am (i386/i386at/boothdr.o, i386/i386at/interrupt.o)
+ (i386/i386/cswitch.o, i386/i386/locore.o): Remove targets.
+ * configure.ac <Dependency tracking for `.S' files>: Add a hack to
+ re-add the four targets with have been removed above for the (legacy)
+ case only where they are actually needed.
+
+2007-12-05 Guillem Jover <address@hidden>
+
+ * i386/Makefrag.am (i386/i386at/interrupt.o): New target, depends on
+ i386/i386/i386asm.h
+ (i386/i386/cswitch.o): Likewise.
+ (i386/i386/locore.o): Likewise.
+
+2007-11-18 Samuel Thibault <address@hidden>
+
+ * i386/intel/pmap.c (pmap_map_bd): Use
+ INTEL_PTE_NCACHE|INTEL_PTE_WTHRU. Get pmap lock.
+
+2007-11-15 Samuel Thibault <address@hidden>
+
+ * ddb/db_examine.c (db_strcpy): Add extra parentheses around
+ assignment used as boolean.
+ * ddb/db_sym.c (db_qualify, db_lookup): Likewise.
+
+2007-11-08 Thomas Schwinge <address@hidden>
+
+ * doc/mach.texi: Do the copyright and licensing things as suggested by
+ the GNU Texinfo manual.
+
+2007-10-09 Thomas Schwinge <address@hidden>
+
+ * linux/dev/glue/net.c (device_open) <LINUX_IFF_ALLMULTI>: Comment.
+
+2007-10-08 Stefan Siegl <address@hidden>
+
+ * linux/dev/glue/net.c (device_open): Set LINUX_IFF_ALLMULTI flag
+ on device and propagate.
+
+2007-10-02 Samuel Thibault <address@hidden>
+
+ * kern/zalloc.c (zget_space): Fix last change.
+
+2007-09-03 Samuel Thibault <address@hidden>
+
+ * kern/zalloc.c (zget_space): Align zalloc_next_space again after
+ calling kmem_alloc_wired (which may sleep).
+
+2007-08-16 Samuel Thibault <address@hidden>
+
+ * Makefile.am (clib_routines): Add udivdi3, __udivdi3 and _end. Fix
+ edata into _edata.
+ (gnumach-undef): Do not remove heading _s.
+ (clib-routines.o): Add -lgcc.
+
+2007-07-09 Samuel Thibault <address@hidden>
+
+ * i386/i386/db_interface.c (int_regs): Drop gs and fs fields.
+ (kdb_kentry): Get fs and gs from struct i386_interrupt_state instead of
+ struct int_regs.
+ * i386/i386/kttd_interface.c (int_regs, kttd_netentry): Likewise.
+ * i386/i386/locore.S (all_intrs): Save fs and gs and set them to kernel
+ segment too.
+ (return_to_iret): Restore fs and gs too.
+ (return_to_iret_i): Likewise.
+ (ast_from_interrupt): Set fs and gs to kernel segment too.
+ (kdb_from_iret): Don't save/restore fs and gs either.
+ (ttd_from_iret): Likewise.
+ * i386/i386/thread.h (i386_interrupt_state): Add gs and fs fields.
+ * linux/src/include/asm-i386/irq.h (SAVE_ALL): Set gs to kernel
+ segment too.
+
+2007-08-04 Samuel Thibault <address@hidden>
+
+ * i386/i386/locore.S (TIME_TRAP_UENTRY, TIME_TRAP_SENTRY)
+ (TIME_TRAP_UEXIT): Use TH_SYSTEM_TIMER instead of old TH_SYS_TIMER.
+ (current_tstamp, TIME_TRAP_UENTRY, TIME_TRAP_SENTRY, TIME_TRAP_UEXIT)
+ (TIME_INT_ENTRY, TIME_INT_EXIT, timer_switch, start_timer): Use
+ EXT(current_tstamp) and EXT(current_timer) instead of _current_tstampt
+ and _current_timer.
+ * i386/i386/io_perm.c (i386_io_perm_create): Lock io_perm->port, not
+ inexistent device->port.
+ * i386/i386at/model_dep.c: Make init_alloc_aligned() extern.
+ * i386/i386/mp_desc.c: Include <machine/vm_param.h>
+ (interrupt_stack_alloc): Call init_alloc_aligned() instead of
+ init_alloc().
+ (cpu_control, interrupt_processor, cpu_start, start_other_cpus): New
+ functions.
+ * i386/i386/mp_desc.h: Include <i386at/idt.h> instead of "idt.h"
+ * i386/i386/cswitch.S: Use EXT(interrupt_stack) instead of
+ _interrupt_stack.
+ * i386/i386/i386asm.sym (MP_GDT, MP_IDT): Remove macros.
+ * i386/i386/lock.h: Don't include_next "lock.h".
+ * i386/linux/dev/include/linux/autoconf.h [NCPUS > 1]: Define
+ CONFIG_SMP.
+ * linux/dev/include/asm-i386/smp.h: New file.
+ * linux/dev/init/main.c [__SMP__ && __i386] (smp_loops_per_tick):
+ Restore variable.
+ * linux/pcmcia-cs/modules/cs_internal.h: Use __SMP__ instead of
+ USE_SPIN_LOCKS.
+ * linux/pcmcia-cs/modules/i82365.c: Likewise.
+ * linux/pcmcia-cs/modules/rsrc_mgr.c: Likewise.
+ * linux/dev/include/asm-i386/system.h: Update to Linux 2.2 for SMP.
+ * configfrag.ac (mach_ncpus): Define to 1.
+ (NCPUS): Set to $mach_ncpus.
+ [$mach_ncpus > 1] (MULTIPROCESSOR): Set to 1.
+ * linux/configfrag.ac [$mach_ncpus > 1] (__SMP__): Define.
+ * linux/dev/arch/i386/kernel/irq.c: Include <asm/hardirq.h>.
+ (local_bh_count, local_irq_count, global_irq_holder, global_irq_lock)
+ (global_irq_count, check_smp_invalidate, show, wait_on_bh)
+ (wait_on_irq, synchronize_bh, synchronize_irq, get_irqlock)
+ (__global_cli, __global_sti, __global_save_flags)
+ (__global_restore_flags): New variables and functions from Linux 2.2
+ * linux/src/drivers/net/3c515.c (test_and_set_bit): Remove macro.
+ * linux/src/drivers/net/de4x5.c (test_and_set_bit): Remove macro.
+ * linux/src/drivers/net/eth16i.c (test_and_set_bit): Remove macro.
+ * linux/src/drivers/net/kern_compat.h (test_and_set_bit): Remove macro.
+ * linux/src/drivers/net/pcnet32.c (test_and_set_bit): Remove macro.
+ * linux/src/include/linux/compatmac.h (test_and_set_bit)
+ (test_and_clear_bit): Remove macro.
+ * linux/src/include/asm-i386/atomic.h (atomic_read): New macro.
+ * linux/src/include/asm-i386/bitops.h (test_and_set_bit)
+ (test_and_clear_bit, test_and_change_bit): New inline functions.
+ * linux/src/include/asm-i386/hardirq.h (local_bh_count): New
+ declaration.
+ * linux/src/include/linux/tasks.h (NR_CPUS): Set to NCPUS.
+ (NO_PROC_ID): New macro.
+
+2007-07-08 Samuel Thibault <address@hidden>
+
+ * i386/i386/seg.h (SZ_64): New macro.
+ * i386/i386/user_ldt.c (selector_check, i386_set_gdt): Check
+ user-provided descriptor against SZ_64.
+
+2007-07-04 Samuel Thibault <address@hidden>
+
+ * i386/intel/pmap.c (pmap_enter): Use INTEL_PTE_NCACHE|INTEL_PTE_WTHRU
+ when cpu >= 486 and physical address is after memory end.
+
+2007-06-23 Samuel Thibault <address@hidden>
+
+ * i386/i386/trap.c (user_trap): Read faulting linear address before
+ using it.
+
+2007-06-02 Thomas Schwinge <address@hidden>
+
+ * Makerules.mig.am: New file, factored out of code of...
+ * Makefrag.am: ... this file and...
+ * Makerules.am: ... this file.
+ * i386/Makefrag.am: Update comment.
+
+ * Makefile.am (MIGFLAGS): Remove.
+ (MIGCOM): Add ``-n''.
+ * Makerules.am: Adapt to that.
+
+2007-05-09 Thomas Schwinge <address@hidden>
+
+ * include/mach/mach_types.defs (userprefix, serverprefix): Set, if
+ requested (by setting USERPREFIX respective SERVERPREFIX).
+
+2007-05-08 Samuel Thibault <address@hidden>
+
+ * i386/i386/fpu.c (fpu_set_state): Set fp_valid to TRUE. Free the
+ unused ifps.
+
+2007-05-07 Thomas Schwinge <address@hidden>
+
+ [bug #15295 -- Mach lets processes write to I/O ports]
+
+ * i386/Makefrag.am (libkernel_a_SOURCES): Add `i386/i386/io_perm.c',
+ `i386/i386/io_perm.h', `i386/i386/machine_task.c', `i386/i386/task.h'
+ and remove `i386/i386/io_port.h', `i386/i386/iopb.c',
+ `i386/i386/iopb.h'.
+
+ * i386/i386/io_port.h: Remove file.
+ * i386/i386at/kd.c: Don't include <i386/io_port.h>.
+ (vga_port_list, kd_io_device, kd_io_map_open, kd_io_map_close): Don't
+ define and don't use anymore.
+
+ * include/stddef.h: New file.
+
+ * i386/i386/io_perm.c: Include <string.h>, <device/device_emul.h>,
+ <ipc/ipc_space.h> and don't include <oskit/ds_oskit.h>.
+ (io_perm_device_emulation_ops): New variable.
+ (dev_open_alloc, setup_no_senders): Remove declarations.
+ (convert_io_perm_to_port, convert_port_to_io_perm, io_perm_deallocate):
+ Rewrite.
+ (no_senders): New function.
+ (i386_io_perm_create, i386_io_perm_modify): Rewrite partially, to adapt
+ to the GNU Mach environment.
+ * i386/i386/io_perm.h: Include <device/dev_hdr.h> and
+ <ipc/ipc_types.h>.
+ (io_perm, io_perm_t): New structure and accompanying type definition.
+ (IO_PERM_NULL): Define.
+ * i386/i386/locore.S (ktss): Move variable to...
+ * i386/i386/ktss.c: ... here, make it a ``struct task_tss''.
+ (ktss_init): Initialize the `task_tss' structure and the i/o permission
+ bit map.
+ * i386/i386/ktss.h: Adapt to that.
+ * i386/i386/machine_task.c (machine_task_module_init): Adapt the `zinit'
+ call to the GNU Mach environment.
+ * i386/i386/mp_desc.c: Include <machine/ktss.h>.
+ * i386/i386/tss.h: Include <machine/io_perm.h>.
+ (task_tss): New structure, equivalent to the OSKit-Mach one.
+ * i386/include/mach/i386/mach_i386.defs: Don't include
+ <device/device_types.defs>.
+ (device_list_t): Remove type.
+ * i386/include/mach/i386/mach_i386_types.h (device_list_t): Remove type
+ definition.
+
+2007-05-07 Marcus Brinkmann <address@hidden>
+
+ [bug #15295 -- Mach lets processes write to I/O ports]
+
+ * i386/i386/iopb.h, i386/i386/iopb.c: Obsolete files removed.
+
+ * i386/i386/pcb.c (switch_context): Update the I/O permission
+ bitmap from stack_handoff() here (not only in stack_handoff()).
+
+ * i386/i386/machine_task.c (machine_task_module_init): Set
+ ZONE_COLLECTABLE and ZONE_EXHAUSTIBLE flags for the iopb zone.
+ Requested by Roland McGrath <address@hidden>.
+
+ * i386/i386/io_perm.h: New file.
+ * i386/i386/io_perm.c: New file.
+ * i386/i386/machine_task.c: New file.
+ * i386/i386/mp_desc.h: (struct mp_desc_table): Change type of ktss to
+ struct task_tss.
+ (mp_ktss): Likewise for array of pointers to the struct.
+ * i386/i386/mp_desc.c: Include `machine/tss.h' and `machine/io_perm.h'.
+ (mp_ktss): Change type to array of struct task_tss.
+ (mp_desc_init): Cast pointer to x86_tss into pointer to task_tss,
+ and use size of struct task_tss instead size of struct x86_tss.
+ Initialize the task_tss structure.
+ * i386/i386/pcb.c: Include `stddef.h' and `machine/tss.h'.
+ (iopb_create, iopb_destroy): Prototypes removed.
+ (curr_ktss): Cast pointer to base_tss to pointer to struct
+ task_tss.
+ (switch_ktss): Always use kernel TSS.
+ (update_ktss_iopb): New function.
+ (stack_handoff): Call update_ktss_iopb.
+ (pcb_module_init): Do not call iopb_init.
+ (pcb_terminate): Do not call iopb_destroy.
+ (thread_setstatus): Remove local variable tss.
+ (thread_getstatus): Rewrite i386_ISA_PORT_MAP_STATE case handler.
+ * i386/i386/task.h: New file.
+ * i386/i386/thread.h: Do not include `i386/iopb.h'.
+ (struct i386_machine_state): Remove member io_tss.
+ * i386/include/mach/i386/mach_i386.defs [KERNEL_SERVER]: Include
+ `machine/io_perm.h'. Define intran, outtran and destructor.
+ (io_port_t): New type.
+ (io_perm_t): Likewise.
+ (i386_io_port_add): Interface removed.
+ (i386_io_port_remove): Likewise.
+ (i386_io_port_list): Likewise.
+ (i386_io_perm_create): New interface.
+ (i386_io_perm_modify): Likewise.
+ * i386/include/mach/i386/mach_i386_types.h [MACH_KERNEL]: Include
+ `i386/io_perm.h'.
+ [!MACH_KERNEL]: Define types io_port_t and io_perm_t.
+ * kern/task.c (task_init): Call machine_task_module_init.
+ (task_create): Call machine_task_init.
+ (task_deallocate): Call machine_task_terminate.
+ (task_collect_scan): Call machine_task_collect.
+ * task.h: Include `machine/task.h'.
+ (struct task): Add member machine.
+
+2007-05-06 Thomas Schwinge <address@hidden>
+
+ * device/kmsg.c: Include <device/ds_routines.h>.
+ (kmsg_lock): Use `decl_simple_lock_data'.
+ (kmsgread, kmsg_read_done): Add two typecasts.
+
+ * device/buf.h (minphys): Add return type.
+ * device/device_types_kernel.h: We're not in the eighties anymore...
+ * device/io_req.h: Likewise.
+
+2007-05-05 Thomas Schwinge <address@hidden>
+
+ * i386/i386at/model_dep.c (halt_cpu, halt_all_cpus): Call
+ `machine_idle' to avoid busy-looping.
+
+ * i386/intel/read_fault.c (intel_read_fault): Remove the last parameter
+ from the calls of `vm_map_lookup'.
+
+ We're not in the eighties anymore. List arguments in function
+ prototypes and definitions for a lot of symbols. Also drop some unused
+ prototypes. I refrain from listing every changed symbol.
+ * vm/memory_object.c: Do as described.
+ * vm/memory_object.h: Likewise.
+ * vm/pmap.h: Likewise.
+ * vm/vm_external.c: Likewise.
+ * vm/vm_external.h: Likewise.
+ * vm/vm_fault.c: Likewise.
+ * vm/vm_fault.h: Likewise.
+ * vm/vm_kern.h: Likewise.
+ * vm/vm_map.c: Likewise.
+ * vm/vm_map.h: Likewise.
+ * vm/vm_pageout.h: Likewise.
+ * vm/vm_user.h: Likewise.
+ * vm/memory_object.h: Include <ipc/ipc_types.h>.
+ * vm/pmap.h: Include <kern/thread.h>.
+ * vm/vm_fault.h: Include <mach/vm_prot.h>, <vm/vm_map.h> and
+ <vm/vm_types.h>.
+ * vm/vm_map.h: Include <mach/vm_attributes.h> and <vm/vm_types.h>.
+ (vm_map_t, VM_MAP_NULL): Remove type and definition.
+ * vm/vm_object.h (vm_object_t, VM_OBJECT_NULL): Remove type and
+ definition.
+ * vm/vm_page.h: Include <vm/vm_types.h>.
+ (vm_page_t, VM_PAGE_NULL): Remove type and definition.
+ * vm/vm_user.h: Include <mach/std_types.h>.
+ * kern/task.h: Include <vm/vm_types.h> instead of <vm/vm_map.h>.
+ * vm/vm_types.h: New file: the above-removed types and definitions.
+
+2007-05-02 Thomas Schwinge <address@hidden>
+
+ * configure.ac (--disable-default-device-drivers): Transform into...
+ (--enable-device-drivers): ... this new option and extend it.
+ * i386/configfrag.ac (--enable-lpr): Adapt to that.
+ * linux/configfrag.ac (AC_OPTION_Linux_ix86_at, AC_Linux_DRIVER):
+ Likewise.
+ (AC_Linux_DRIVER_qemu): New definition. Use it for the `floppy', `ide'
+ and `ne' device drivers.
+ * doc/mach.texi: Document all that.
+
+2007-05-01 Thomas Schwinge <address@hidden>
+
+ * assigns: Remove file. See `copyright.list' on the GNU server instead.
+
+2007-04-30 Thomas Schwinge <address@hidden>
+
+ We're not in the eighties anymore. List arguments in function
+ prototypes and definitions for a lot of symbols. Also drop some unused
+ prototypes. I refrain from listing every changed symbol.
+ * chips/busses.h: Do as described.
+ * ddb/db_break.c: Likewise.
+ * ddb/db_break.h: Likewise.
+ * ddb/db_command.c: Likewise.
+ * ddb/db_command.h: Likewise.
+ * ddb/db_lex.c: Likewise.
+ * ddb/db_lex.h: Likewise.
+ * ddb/db_output.c: Likewise.
+ * ddb/db_output.h: Likewise.
+ * ddb/db_sym.h: Likewise.
+ * ddb/db_task_thread.c: Likewise.
+ * ddb/db_task_thread.h: Likewise.
+ * ddb/db_variables.h: Likewise.
+ * ddb/db_watch.c: Likewise.
+ * ddb/db_watch.h: Likewise.
+ * device/buf.h: Likewise.
+ * device/conf.h: Likewise.
+ * device/dev_hdr.h: Likewise.
+ * device/ds_routines.h: Likewise.
+ * device/if_ether.h: Likewise.
+ * device/io_req.h: Likewise.
+ * device/net_io.h: Likewise.
+ * i386/i386/io_port.h: Likewise.
+ * i386/i386/lock.h: Likewise.
+ * i386/i386/mp_desc.c: Likewise.
+ * i386/i386/mp_desc.h: Likewise.
+ * i386/i386/proc_reg.h: Likewise.
+ * i386/i386/user_ldt.h: Likewise.
+ * i386/i386at/kd_queue.h: Likewise.
+ * i386/i386at/kdsoft.h: Likewise.
+ * i386/intel/pmap.c: Likewise.
+ * i386/intel/pmap.h: Likewise.
+ * include/mach/mach_traps.h: Likewise.
+ * ipc/ipc_entry.h: Likewise.
+ * ipc/ipc_hash.h: Likewise.
+ * ipc/ipc_kmsg.h: Likewise.
+ * ipc/ipc_marequest.c: Likewise.
+ * ipc/ipc_marequest.h: Likewise.
+ * ipc/ipc_mqueue.h: Likewise.
+ * ipc/ipc_notify.h: Likewise.
+ * ipc/ipc_object.h: Likewise.
+ * ipc/ipc_port.h: Likewise.
+ * ipc/ipc_pset.h: Likewise.
+ * ipc/ipc_right.h: Likewise.
+ * ipc/ipc_space.h: Likewise.
+ * ipc/ipc_table.h: Likewise.
+ * ipc/mach_msg.c: Likewise.
+ * ipc/mach_msg.h: Likewise.
+ * kern/ast.c: Likewise.
+ * kern/ast.h: Likewise.
+ * kern/debug.c: Likewise.
+ * kern/debug.h: Likewise.
+ * kern/ipc_tt.c: Likewise.
+ * kern/ipc_tt.h: Likewise.
+ * kern/mach_factor.c: Likewise.
+ * kern/mach_factor.h: Likewise.
+ * kern/printf.c: Likewise.
+ * kern/printf.h: Likewise.
+ * kern/queue.h: Likewise.
+ * kern/sched.h: Likewise.
+ * kern/syscall_subr.c: Likewise.
+ * kern/syscall_subr.h: Likewise.
+ * kern/task.h: Likewise.
+ * kern/thread_swap.c: Likewise.
+ * kern/thread_swap.h: Likewise.
+ * kern/timer.h: Likewise.
+ * kern/xpr.c: Likewise.
+ * kern/xpr.h: Likewise.
+ * kern/zalloc.c: Likewise.
+ * kern/zalloc.h: Likewise.
+ * ipc/ipc_port.h: Don't include <ipc/ipc_space.h>.
+ * device/dev_hdr.h: Include <ipc/ipc_types.h>.
+ * device/net_io.h: Include <device/if_hdr.h> and <device/io_req.h>.
+ * ipc/ipc_entry.h: Include <mach/mach_types.h> and <ipc/ipc_types.h>.
+ * ipc/ipc_kmsg.h: Include <ipc/ipc_object.h>, <ipc/ipc_types.h> and
+ <vm/vm_map.h>.
+ * ipc/ipc_marequest.h: Include <mach_debug/hash_info.h> and
+ <ipc/ipc_types.h>.
+ * ipc/ipc_object.h: Include <ipc/ipc_types.h>.
+ * ipc/ipc_right.h: Include <ipc/ipc_entry.h>.
+ * ipc/ipc_space.h: Include <mach/mach_types.h> and <ipc/ipc_types.h>.
+ * kern/ipc_tt.h: Include <mach/mach_types.h>.
+ * kern/sched.h: Include <kern/kern_types.h>.
+ * kern/syscall_subr.h: Include <kern/kern_types.h>.
+ * ipc/ipc_hash.c (ipc_hash_index_t): Move type definition...
+ * ipc/ipc_hash.h: ... into here.
+
+2007-04-25 Thomas Schwinge <address@hidden>
+
+ * DEVELOPMENT: Add url.
+
+ [task #5878 -- Backport code from GNU Mach's trunk to
+ gnumach-1-branch: i386_set_gdt, i386_get_gdt]
+ * i386/include/mach/i386/mach_i386.defs (i386_set_gdt, i386_get_gdt):
+ Shift by two to maintain rpc id compatibility with OSKit-Mach.
+
+ * linux/dev/glue/kmem.c (vmalloc_list_remove): Cast the first argument
+ in the `kfree' call to what is expected.
+
+ * linux/pcmcia-cs/glue/ds.c (kmalloc, kfree): Call `linux_kmalloc',
+ respective `linux_kfree' instead.
+
+ * kern/kalloc.h (kalloc, kget, kfree, kalloc_init): List the arguments.
+
+2007-04-24 Michael Casadevall <address@hidden>
+
+ * linux/src/drivers/net/ne.c (bad_clone_list): Add the RealTek 8029 PCI
+ card's signature.
+ <http://lists.gnu.org/archive/html/bug-hurd/2007-04/msg00039.html>
+
+2007-04-24 Thomas Schwinge <address@hidden>
+
+ * ipc/ipc_port.h: Include <ipc/ipc_space.h>.
+
+2007-04-11 Thomas Schwinge <address@hidden>
+
+ * config.status.dep.patch: Update to match more files. This fixes
+ building GNU Mach with ``make -j2'' and higher. The problem was
+ reported by Michael Casadevall <address@hidden>.
+
+2007-04-02 Thomas Schwinge <address@hidden>
+
+ * i386/i386/io_emulate.c: Remove file.
+ * i386/i386/io_emulate.h: Likewise.
+ * i386/i386at/iopl.c: Likewise.
+ * i386/Makefrag.am (libkernel_a_SOURCES): Remove the aforementioned
+ files.
+ * i386/i386/trap.c: Don't include <i386/io_emulate.h>.
+ (v86_assist, check_io_fault): Remove functions.
+ (user_trap): Remove the code referencing the above functions.
+ * i386/i386at/conf.c (dev_name_list): Remove the `iopl' device.
+ * DEVELOPMENT: Document this.
+
+2007-03-30 Thomas Schwinge <address@hidden>
+
+ * Makefile.am (gnumach_o_LINK): Remove ``--start-group''.
+
+2007-03-27 Thomas Schwinge <address@hidden>
+
+ Unconditionally use the device driver multiplexing. Suggested by
+ Gianluca Guida <address@hidden>.
+ * i386/i386at/dev_hdr.h: Merge into `device/dev_hdr.h' and remove.
+ * i386/i386at/device_emul.h: Rename to `device/device_emul.h'. Adapt
+ all users.
+ * i386/i386at/i386at_ds_routines.c: Merge into `device/ds_routines.c'
+ and remove.
+ * i386/linux/dev/include/linux_emul.h: Remove file.
+ * Makefrag.am (libkernel_a_SOURCES): Add `device/device_emul.h'.
+ * i386/Makefrag.am (libkernel_a_SOURCES): Remove
+ `i386/i386at/dev_hdr.h', `i386/i386at/device_emul.h' and
+ `i386/i386at/i386at_ds_routines.c'.
+ * i386/linux/Makefrag.am (liblinux_a_SOURCES): Remove
+ `i386/linux/dev/include/linux_emul.h'.
+ * dev/dev_hdr.h: Adapt all users of `i386' as if it were always
+ defined.
+ * device/dev_lookup.c: Likewise.
+ * device/ds_routines.c: Likewise.
+ * device/device_init.c (ds_init): Rename to `mach_device_init'.
+ * device/ds_routines.c (ds_init): Likewise.
+ (ds_trap_init): Rename to `mach_device_trap_init'.
+ (mach_device_trap_init): Make it `static'.
+ * linux/dev/glue/block.c: Don't include <linux_emul.h>, but instead
+ include <device/device_emul.h> and <i386at/disk.h>.
+ * linux/dev/glue/net.c: Don't include <linux_emul.h>, but instead
+ include <device/device_emul.h>.
+ * linux/pcmcia-cs/glue/ds.c: Likewise.
+
+ * kern/pcsample.h: Remove the automatic cvs log appending machinery.
+ * linux/dev/drivers/scsi/g_NCR5380.c: Likewise.
+ * linux/src/drivers/net/sk_g16.h: Likewise.
+ * linux/src/drivers/scsi/AM53C974.c: Likewise.
+ * linux/src/drivers/scsi/AM53C974.h: Likewise.
+ * linux/src/drivers/scsi/NCR5380.c: Likewise.
+ * linux/src/drivers/scsi/NCR5380.h: Likewise.
+ * linux/src/drivers/scsi/aha152x.c: Likewise.
+ * linux/src/drivers/scsi/aha1542.h: Likewise.
+ * linux/src/drivers/scsi/g_NCR5380.c: Likewise.
+ * linux/src/drivers/scsi/g_NCR5380.h: Likewise.
+ * linux/src/drivers/scsi/gdth.c: Likewise.
+ * linux/src/drivers/scsi/qlogicisp.c: Likewise.
+ * linux/src/drivers/scsi/qlogicisp.h: Likewise.
+ * linux/src/drivers/scsi/t128.c: Likewise.
+ * linux/src/drivers/scsi/t128.h: Likewise.
+
+2007-03-24 Thomas Schwinge <address@hidden>
+
+ * i386/i386at/conf.c (block_io_mmap): Remove declaration.
+
+ * doc/mach.texi: Fix a typo and the url for GNU GRUB.
+
+ * device/kmsg.h: Include <sys/types.h>, <device/device_types.h> and
+ <device/io_req.h>.
+
+ * Makefrag.am (libkernel_a_SOURCES): Move `device/kmsg.h' into
+ [enable_kmsg].
+
+2007-03-23 Thomas Schwinge <address@hidden>
+
+ * Makerules.am (%.server.msgids, %.user.msgids): Merge into the
+ existing ``%.h %.c'' rules.
+ Comment out the currently unused rpc stub rules.
+ * Makefrag.am (gnumach.msgids): Rewrite.
+ (nodist_libkernel_a_SOURCES): Add all ``.msgids'' files.
+ * i386/Makefrag.am (nodist_libkernel_a_SOURCES): Likewise.
+
+2007-03-19 Tim Retout <address@hidden>
+
+ * i386/ldscript: Correct 'LINKFLAGS_gnumach' in comment.
+
+2007-03-06 Samuel Thibault <address@hidden>
+
+ * i386/i386/user_ldt.c (i386_set_gdt): Call switch_ktss() if target is
+ current thread.
+
+2007-03-05 Samuel Thibault <address@hidden>
+
+ [bug #18349 -- ``General Protection Trap'' in `ipc_kmsg_enqueue']
+ * linux/dev/glue/net.c (device_write): Call net_packet() with splimp
+ held.
+
+2007-03-04 Thomas Schwinge <address@hidden>
+
+ * tests/configfrag.ac (MBCHK): Remove check.
+ * tests/test-mbchk.in: Fail correctly if `mbchk' is not available.
+
+2007-03-01 Thomas Schwinge <address@hidden>
+
+ * linux/dev/glue/block.c (free_buffer): Use `VM_PAGE_FREE'.
+ * vm/vm_object.c (vm_object_collapse, vm_object_page_remove)
+ (vm_object_page_map): Likewise.
+
+2007-02-20 Samuel Thibault <address@hidden>
+
+ * linux/dev/glue/block.c (free_buffer): Fix
+ vm_page_lock_queues/vm_page_unlock_queues pair.
+
+ Fix ddb's trace command.
+ * i386/i386/db_trace.c (db_find_trace_symbols): Drop _ prefix on ELF
+ targets.
+ (db_i386_stack_trace): Check that adresses of known functions were
+ really found.
+
+2007-02-19 Thomas Schwinge <address@hidden>
+
+ * Makefile.am (gnumach_LINKFLAGS): New variable.
+ (gnumach_LINK): Use that one instead of the previously used
+ `LINKFLAGS_gnumach'.
+ * i386/Makefrag.am (LINKFLAGS_gnumach): Rename to `gnumach_LINKFLAGS',
+ move into [PLATFORM_at] and pass `_START'.
+ * i386/ldscript: Don't hardcode a _start address of 0x100000, but make
+ it configurable via `_START'.
+
+ Add a `--enable-platform' option for future use. Allow building
+ without any Linux code.
+ * Makefile.am: Don't include `linux/Makefrag.am' in there...
+ * Makefrag.am: ... but rather in here.
+ * configfrag.ac (MACH_MACHINE_ROUTINES): AC_DEFINE_UNQUOTED based on
+ then shell variable `mach_machine_routines'.
+ (--disable-default-device-drivers): Don't define in there...
+ * configure.ac: ... but rather in here.
+ (--enable-platform): New option.
+ (host_platform): New variable.
+ (HOST_i386): Don't define there...
+ * i386/configfrag.ac (HOST_ix86): ... but rather here, rename it and
+ adapt all users.
+ (PLATFORM_at): New conditional.
+ (MACH_MACHINE_ROUTINES): Don't AC_DEFINE, but rather set a shell
+ variable `mach_machine_routines'.
+ * linux/Makefrag.am (noinst_LIBRARIES, gnumach_o_LDADD): Only enhance
+ ``if CODE_linux'' or ``if device_driver_group_pcmcia''.
+ * linux/configfrag.ac (AC_OPTION): Rename to `AC_OPTION_Linux_ix86_at'
+ and rework a bit. Adapt all users.
+ (AC_OPTION_nodef): Rename to `AC_OPTION_Linux_ix86_at_nodef' and rework
+ a bit. Adapt all users.
+ (CODE_linux): New conditional.
+ * i386/Makefrag.am (LINKFLAGS_gnumach): Don't evaluate $(systype).
+
+ * Makefile.am: Update the FSF's postal address.
+ * doc/Makefrag.am: Likewise.
+ * i386/linux/Makefrag.am: Likewise.
+ * linux/Makefrag.am: Likewise.
+ * tests/Makefrag.am: Likewise.
+ * tests/configfrag.ac: Move to GPL.
+
+2007-02-05 Thomas Schwinge <address@hidden>
+
+ * kern/mach_clock.c: Don't include <kern/time_out.h>.
+
+ * i386/i386/hardclock.c: Include <kern/mach_clock.h> instead of
+ <kern/time_out.h>.
+ * i386/i386/pit.c: Likewise.
+ * i386/i386at/kd.c: Likewise.
+ * i386/i386at/model_dep.c: Likewise.
+ * i386/i386at/rtc.c: Likewise.
+ * kern/ipc_sched.c: Likewise.
+ * kern/mach_factor.c: Likewise.
+ * kern/priority.c: Likewise.
+ * kern/sched_prim.c: Likewise.
+ * kern/startup.c: Likewise.
+ * kern/syscall_subr.c: Likewise.
+ * kern/thread.h: Likewise.
+ * kern/zalloc.c: Likewise.
+
+ * kern/host.c: Include <kern/mach_clock.h>.
+ (tick): Remove declaration.
+ * kern/pc_sample.c: Likewise.
+ * kern/thread.c: Likewise.
+ * kern/sched_prim.c (hz): Remove declaration.
+ * kern/syscall_subr.c (hz): Likewise.
+ * linux/dev/init/main.c (hz): Likewise.
+
+ * kern/time_out.h: Remove file after having installed the missing bits
+ in...
+ * kern/mach_clock.h: ... here.
+
+ * configfrag.ac: Enhance comments.
+
+ * vm/vm_debug.c (MACH_VM_DEBUG): Correctly place conditional.
+
+2007-02-04 Thomas Schwinge <address@hidden>
+
+ * doc/mach.texi (thread_switch): Enhance a bit.
+
+ * doc/Makefrag.am ($(web)): Use ``mkdir -p''.
+
+ * doc/mach.texi: Fix unusual hyphens.
+
+ * i386/i386/hardclock.c: Don't check for the `SYMMETRY' platform.
+
+ * kern/timer.h: Add some comments from...
+ * i386/i386/timer.h: ... here and remove this file.
+
+2007-01-26 Thomas Schwinge <address@hidden>
+
+ * doc/mach.texi: Fix the last change.
+
+2007-01-22 Thomas Schwinge <address@hidden>
+
+ * COPYING: Update via GNU automake 1.10.
+ * doc/fdl.texi: Update from <http://www.gnu.org/licenses/fdl.texi>.
+ * doc/gpl.texi: Update from <http://www.gnu.org/licenses/gpl.texi>.
+ * doc/mach.texi: Use the GFDL 1.2.
+
+2007-01-21 Ralf Wildenhues <address@hidden>
+
+ * doc/mach.texi: Many typos fixed.
+
+2007-01-11 Thomas Schwinge <address@hidden>
+
+ * DEVELOPMENT (LAYOUT OF THE SOURCE TREE): New section.
+
+ These following files are regenerated by running ``autoreconf -i'' and
+ ``make info''.
+ * INSTALL: Remove file.
+ * Makefile.in: Likewise.
+ * aclocal.m4: Likewise.
+ * build-aux/compile: Likewise.
+ * build-aux/config.guess: Likewise.
+ * build-aux/config.sub: Likewise.
+ * build-aux/depcomp: Likewise.
+ * build-aux/install-sh: Likewise.
+ * build-aux/mdate-sh: Likewise.
+ * build-aux/missing: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+ * config.h.in: Likewise.
+ * configure: Likewise.
+ * doc/mach.info: Likewise.
+ * doc/mach.info-1: Likewise.
+ * doc/mach.info-2: Likewise.
+ * doc/stamp-vti: Likewise.
+ * doc/version.texi: Likewise.
+
+2007-01-06 Thomas Schwinge <address@hidden>
+
+ * ddb/db_break.c (db_delete_thread_breakpoint): Don't declare
+ `db_cond_free'.
+ * ddb/db_run.c: Include <ddb/db_cond.h>.
+ (db_stop_at_pc): Don't declare `db_cond_check'.
+ * ddb/db_input.c: Include <ddb/db_input.h>.
+ * ddb/db_macro.c: Include <ddb/db_macro.h>.
+ * ddb/db_trap.c: Include <ddb/db_trap.h>.
+ * i386/i386/db_interface.h: Include <machine/thread.h>.
+ * i386/i386/db_interface.c: Include <machine/db_interface.h>.
+ * i386/i386/db_machdep.h: Include <machine/db_interface.h>.
+ (db_check_access, db_phys_eq, db_task_name): Remove declarations.
+
+2007-01-06 Barry deFreese <address@hidden>
+
+ * ddb/db_aout.c: Include <ddb/db_output.h>.
+ * ddb/db_break.c: Include <ddb/db_cond.h>, <ddb/db_expr.h> and
+ <ddb/db_output.h>.
+ (db_delete_cmd, db_breakpoint_cmd): Explicitly define untyped variables
+ as `int'.
+ * ddb/db_command.c: Include <ddb/db_examine.h>, <ddb/db_expr.h> and
+ <ddb/db_macro.h>.
+ * ddb/db_command.h (db_exec_cmd_nest): New declaration.
+ * ddb/db_cond.c: Include <ddb/db_cond.h>, <ddb/db_expr.h> and
+ <ddb/db_output.h>.
+ (db_cond_cmd): Explicitly define untyped variable as `int'.
+ * ddb/db_cond.h: New file.
+ * ddb/db_examine.c: Include <machine/db_interface.h>,
+ <ddb/db_examine.h> and <ddb/db_expr.h>.
+ (db_strcpy, db_examine): Remove forward declarations.
+ (db_xcdump): Explicitly define untyped variables as `int'.
+ * ddb/db_examine.h: New file.
+ * ddb/db_expr.c: Include <ddb/db_expr.h>, <ddb/db_output.h>,
+ <ddb/db_sym.h> and <ddb/db_variables.h>.
+ * ddb/db_input.c: Include <ddb/db_command.h>.
+ * ddb/db_input.h: New file.
+ * ddb/db_lex.c: Include <ddb/db_command.h>, <ddb/db_examine.h>,
+ <ddb/db_input.h> and <ddb/db_output.h>.
+ (db_skip_to_eol, db_lex): Explicitly define untyped variables as `int'.
+ * ddb/db_lex.h (db_lex): New declaration.
+ * ddb/db_macro.c: Include <ddb/db_examine.h>, <ddb/db_expr.h> and
+ <ddb/db_output.h>.
+ (db_def_macro_cmd, db_exec_macro): Explicitly define untyped variables
+ as `int'.
+ * ddb/db_macro.h: New file.
+ * ddb/db_output.c: Include <ddb/db_command.h>.
+ * ddb/db_output.h (db_putchar): New declaration.
+ * ddb/db_print.c: Include <machine/db_interface.h>, <ddb/db_command.h>
+ and <ddb/db_output.h>.
+ (db_show_regs): Explicitly define untyped variables as `int'.
+ * ddb/db_run.c: Include <ddb/db_command.h>, <ddb/db_examine.h>,
+ <ddb/db_output.h> and <ddb/db_watch.h>.
+ * ddb/db_run.h: Include <kern/task.h> and <machine/db_machdep.h>.
+ (db_single_step, db_single_step_cmd, db_in_single_step): New
+ declarations.
+ * ddb/db_sym.c: Include <ddb/db_command.h> and <ddb/db_output.h>.
+ (db_sym_parse_and_lookup): Explicitly define untyped variables as
+ `int'.
+ * ddb/db_sym.h (db_line_at_pc): New declaration.
+ * ddb/db_task_thread.c: Include <ddb/db_command.h>, <ddb/db_expr.h>,
+ <ddb/db_lex.h> and <ddb/db_output.h>.
+ (db_lookup_task, db_lookup_task_thread, db_lookup_thread)
+ (db_lookup_task_id, db_lookup_thread_id): Explicitly define untyped
+ variables as `int'.
+ * ddb/db_trap.c: Include <ddb/db_examine.h> and <ddb/db_output.h>.
+ * ddb/db_trap.h: New file.
+ * ddb/db_variables.c: Include <ddb/db_command.h>, <ddb/db_examine.h>,
+ <ddb/db_expr.h> and <ddb/db_output.h>.
+ (db_get_suffix, db_cmp_variable_name): Explicitly define untyped
+ variables as `int'.
+ * ddb/db_variables.h (db_get_variable): New declaration.
+ * ddb/db_watch.c: Include <ddb/db_command.h>, <ddb/db_expr.h>,
+ <ddb/db_output.h> and <ddb/db_run.h>.
+ * ddb/db_write_cmd.c: Include <ddb/db_expr.h> and <ddb/db_output.h>.
+ * i386/i386/db_interface.c: Include <kern/printf.h>, <ddb/db_access.h>,
+ <ddb/db_command.h>, <ddb/db_output.h>, <ddb/db_run.h> and
+ <ddb/db_trap.h>.
+ (kdbprinttrap): Add `void' return type.
+ (db_user_to_kernel_address, db_task_name): Explicitly define untyped
+ variables as `int'.
+ * i386/i386/db_interface.h: New file.
+ * i386/i386/db_trace.c (db_i386_reg_value): Add `int' return type.
+ * i386/i386/trap.c [MACH_KDB]: Include <ddb/db_run.h> and
+ <ddb/db_watch.h>.
+ * ipc/ipc_kmsg.c [MACH_KDB]: Include <ddb/db_output.h>.
+ * kern/lock.c [MACH_KDB]: Include <ddb/db_output.h>.
+
+2007-01-06 Thomas Schwinge <address@hidden>
+
+ * configure.ac (AM_INIT_AUTOMAKE): Add ``-Wall -Wno-portability''.
+
+2007-01-05 Richard Braun <address@hidden>
+
+ Add alignment support in the zone allocator.
+ * kern/zalloc.c (ALIGN_SIZE_UP): New macro.
+ (zinit): New `align' parameter.
+ (zget_space): Likewise.
+ (zalloc): Updated call to zget_space() with the zone alignment.
+ * kern/zalloc.h (zone): New member `align'.
+ (zinit): Declaration updated as required.
+ * device/dev_lookup.c (dev_lookup_init): Updated call to zinit() with
+ alignment of 0.
+ * device/dev_pager.c (dev_pager_hash_init): Likewise.
+ (device_pager_init): Likewise.
+ * device/ds_routines.c (ds_init): Likewise.
+ (ds_trap_init): Likewise.
+ * device/net_io.c (net_io_init): Likewise.
+ * i386/i386/fpu.c (fpu_module_init): Likewise.
+ * i386/i386/pcb.c (pcb_module_init): Likewise.
+ * i386/intel/pmap.c (pmap_init): Likewise.
+ * ipc/ipc_init.c (ipc_bootstrap): Likewise.
+ * ipc/ipc_marequest.c (ipc_marequest_init): Likewise.
+ * kern/act.c (global_act_init): Likewise.
+ * kern/kalloc.c (kalloc_init): Likewise.
+ * kern/processor.c (pset_sys_init): Likewise.
+ * kern/task.c (task_init): Likewise.
+ * kern/thread.c (thread_init): Likewise.
+ * kern/zalloc.c (zone_bootstrap): Likewise.
+ * vm/vm_external.c (vm_external_module_initialize): Likewise.
+ * vm/vm_fault.c (vm_fault_init): Likewise.
+ * vm/vm_map.c (vm_map_init): Likewise.
+ * vm/vm_object.c (vm_object_bootstrap): Likewise.
+ * vm/vm_resident.c (vm_page_module_init): Likewise.
+
+2007-01-02 Samuel Thibault <address@hidden>
+
+ Fix translation of port into device in the "no sender" notification.
+ * i386/i386at/i386at_ds_routines.c (ds_notify): Use dev_port_lookup()
+ for translating the remote port.
+
+ Fix loop indexing.
+ * i386/intel/pmap.c (pmap_change_wiring): Increment pte in the
+ unwiring loop.
+
+ Drop old and broken support for Olivetti XP7 & XP9
+ * i386/intel/pmap.c [ORC] (OLIVETTICACHE): Remove macro.
+ [OLIVETTICACHE] (pstart): Remove declaration.
+ (CACHE_LINE, CACHE_SIZE, CACHE_PAGE, WRITE_PTE, WRITE_PTE_FAST): Remove
+ macros.
+ [OLIVETTICACHE] (write_pte): Remove function.
+ * DEVELOPMENT: Document the removal.
+
+2006-12-19 Samuel Thibault <address@hidden>
+
+ Add support for global pages.
+ * i386/i386at/model_dep.c: Include <i386/locore.h>.
+ (i386at_init): Set CR4_PGE if available.
+ (c_boot_entry): Call discover_x86_cpu_type() before i386at_init().
+ * i386/intel/pmap.c: Include <i386/locore.h>.
+ (pmap_map_bd): Use INTEL_PTE_GLOBAL if available.
+ (pmap_bootstrap): Likewise.
+
+ Add support for cr3/cr4 flags.
+ * i386/i386/proc_reg.h (CR3_PCD, CR3_PWT, CR4_VME, CR4_PVI, CR4_TSD)
+ (CR4_DE, CR4_PSE, CR4_PAE, CR4_MCE, CR4_PGE, CR4_PCE, CR4_OSFXSR)
+ (CR4_OSXMMEXCPT, get_cr4, set_cr4): New macros.
+ * i386/intel/pmap.h (INTEL_PTE_GLOBAL): New macro.
+
+ Add support for querying x86 features.
+ * i386/i386/locore.h (cpu_features): New variable declaration.
+ (CPU_FEATURE_FPU, CPU_FEATURE_VME, CPU_FEATURE_DE, CPU_FEATURE_PSE)
+ (CPU_FEATURE_TSC, CPU_FEATURE_MSR, CPU_FEATURE_PAE, CPU_FEATURE_MCE)
+ (CPU_FEATURE_CX8, CPU_FEATURE_APIC, CPU_FEATURE_SEP, CPU_FEATURE_MTRR)
+ (CPU_FEATURE_PGE, CPU_FEATURE_MCA, CPU_FEATURE_CMOV, CPU_FEATURE_PAT)
+ (CPU_FEATURE_PSE_36, CPU_FEATURE_PSN, CPU_FEATURE_CFLSH)
+ (CPU_FEATURE_DS, CPU_FEATURE_ACPI, CPU_FEATURE_MMX, CPU_FEATURE_FXSR)
+ (CPU_FEATURE_SSE, CPU_FEATURE_SSE2, CPU_FEATURE_SS, CPU_FEATURE_HTT)
+ (CPU_FEATURE_TM, CPU_FEATURE_PBE, CPU_HAS_FEATURE): New macros.
+ * i386/i386/locore.S (cpu_features): New variable.
+ (discover_x86_cpu_type): Record CPUID feature word 0.
+
+2006-12-13 Samuel Thibault <address@hidden>
+
+ Drop useless and broken FPE support.
+ * i386/configfrac.ac (FPE): Don't define.
+ * i386/i386/gdt.h (FPE_CS, USER_FPREGS): Remove macros.
+ * i386/i386/fpu.c (init_fpu, fpu_set_state, fpu_get_state): Remove FPE
+ support.
+ * i386/i386/fpu.h: Likewise.
+ * i386/i386/trap.c (user_trap, i386_exception): Likewise.
+ * i386/i386/fpe_linkage.c: Remove file.
+ * i386/Makefrag.am: Remove i386/i386/fpe_linkage.c.
+ * Makefile.in: Regenerate.
+
+2006-12-03 Thomas Schwinge <address@hidden>
+
+ [patch #5019 -- Remove checks for continuations]
+
+ * DEVELOPMENT: Document the removal.
+
+ * i386/configfrag.ac (CONTINUATIONS): Don't define.
+
+2006-12-03 Leonardo Lopes Pereira <address@hidden>
+
+ [patch #5019 -- Remove checks for continuations]
+ * ipc/mach_msg.c: Adapt all users of CONTINUATIONS as if it were always
+ defined.
+ * kern/eventcount.c: Likewise.
+ * kern/ipc_sched.c: Likewise.
+ * kern/syscall_subr.c: Likewise.
+ * vm/vm_fault.c: Likewise.
+ * vm/vm_pageout.c: Likewise.
+ * vm/vm_resident.c: Likewise.
+
+2006-12-03 Thomas Schwinge <address@hidden>
+
+ [patch #5017 -- Remove obsolete IPC interfaces]
+
+ * DEVELOPMENT: Document the removal.
+
+ * configfrag.ac (MACH_IPC_COMPAT): Don't define.
+
+2006-12-03 Leonardo Lopes Pereira <address@hidden>
+
+ [patch #5017 -- Remove obsolete IPC interfaces]
+ * kern/act.c [MIGRATING_THREADS]: Don't include <mach_ipc_compat.h>.
+ * kern/act.h: Likewise.
+ * i386/include/mach/i386/machine_types.defs: Adapt all users of
+ MACH_IPC_COMPAT as if it were always defined to `0'.
+ * include/mach/mach.defs: Likewise.
+ * include/mach/mach_param.h: Likewise.
+ * include/mach/mach_traps.h: Likewise.
+ * include/mach/message.h: Likewise.
+ * include/mach/mig_errors.h: Likewise.
+ * include/mach/notify.h: Likewise.
+ * include/mach/port.h: Likewise.
+ * include/mach/std_types.defs: Likewise.
+ * include/mach/syscall_sw.h: Likewise.
+ * include/mach/task_special_ports.h: Likewise.
+ * include/mach/thread_special_ports.h: Likewise.
+ * ipc/ipc_kmsg.c: Likewise.
+ * ipc/ipc_kmsg.h: Likewise.
+ * ipc/ipc_marequest.c: Likewise.
+ * ipc/ipc_notify.c: Likewise.
+ * ipc/ipc_notify.h: Likewise.
+ * ipc/ipc_object.c: Likewise.
+ * ipc/ipc_object.h: Likewise.
+ * ipc/ipc_port.c: Likewise.
+ * ipc/ipc_port.h: Likewise.
+ * ipc/ipc_right.c: Likewise.
+ * ipc/ipc_right.h: Likewise.
+ * ipc/ipc_space.c: Likewise.
+ * ipc/ipc_space.h: Likewise.
+ * ipc/mach_debug.c: Likewise.
+ * ipc/mach_msg.c: Likewise
+ * ipc/mach_msg.h: Likewise.
+ * ipc/mach_port.c: Likewise.
+ * kern/act.c: Likewise.
+ * kern/act.h: Likewise.
+ * kern/ipc_host.c: Likewise.
+ * kern/ipc_tt.c: Likewise.
+ * kern/syscall_sw.c: Likewise.
+ * kern/thread.h: Likewise.
+
+2006-12-03 Thomas Schwinge <address@hidden>
+
+ [bug #17120 -- GNU Mach debian dir]
+ * debian/README.Debian: Remove file.
+ * debian/changelog: Likewise.
+ * debian/control: Likewise.
+ * debian/copyright: Likewise.
+ * debian/postinst: Likewise.
+ * debian/prerm: Likewise.
+ * debian/rules: Likewise.
+
+ [bug #18015 -- GNU Mach: `make dist' and friends]
+ * Makefile.am (DISTCLEANFILES): New variable.
+
+2006-11-30 Thomas Schwinge <address@hidden>
+
+ * Makefile.in: Regenerate.
+ * configure: Likewise.
+
+2006-11-30 Barry deFreese <address@hidden>
+ Thomas Schwinge <address@hidden>
+
+ [bug #18015 -- GNU Mach: `make dist' and friends]
+ * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): New variable.
+ (EXTRA_DIST): Enhance with the patches and documentation files.
+ (dist-hook): New target to remove the `CVS' directories.
+ * Makefrag.am (libkernel_a_SOURCES, EXTRA_DIST): Add header and `mig'
+ input files.
+ (DISTCHECK_CONFIGURE_FLAGS): Enable the kernel debugger.
+ * i386/Makefrag.am: Likewise. Also add `i386/i386/i386asm.sym',
+ `i386/ldscript' and `i386/README-Drivers'.
+ * i386/linux/Makefrag.am (liblinux_a_SOURCES): Add the header files
+ from `i386/linux/'.
+ * linux/Makefrag.am (liblinux_a_SOURCES, EXTRA_DIST)
+ (liblinux_pcmcia_cs_modules_a_SOURCES)
+ (liblinux_pcmcia_cs_clients_a_SOURCES)
+ (liblinux_pcmcia_cs_wireless_a_SOURCES): Add header and other included
+ files.
+ (dist-hook): Depend on `dist-hook-linux'.
+ (dist-hook-linux): New phony target to remove the `asm' symbolic links.
+ * Makerules.am (EXTRA_DIST): Add `gensym.awk'.
+ * doc/Makefrag.am (EXTRA_DIST): Add `$(mach_TEXINFOS)'.
+ * configure.ac (AC_CONFIG_LINKS): Move instantiation to...
+ * configfrag.ac: ... here and change quotation.
+ * linux/configfrag.ac (AC_CONFIG_LINKS): Change quotation.
+
+2006-11-29 Thomas Schwinge <address@hidden>
+
+ * configure: Regenerate.
+ * Makefile.in: Likewise.
+
+ * configure.ac (disable_smashing_stack_protector): New conditional, set
+ depending on the compiler accepting `-fstack-protector' or not.
+ * Makefile.am (CFLAGS): Add `-fno-stack-protector' if
+ `disable_smashing_stack_protector' is set.
+
+2006-11-28 Thomas Schwinge <address@hidden>
+
+ * doc/Makefrag.am ($(srcdir)/doc/version.texi): Oppress a potential
+ error message from grep.
+
+2006-11-26 Samuel Thibault <address@hidden>
+
+ [bug #17346 -- GNU mach can't handle 4GB memory]
+ * i386/i386at/model_dep.c (mem_size_init): Truncate memory size to
+ 4GiB.
+
+2006-11-21 Thomas Schwinge <address@hidden>
+
+ * doc/Makefrag.am (doc/web, html-local, ps-local, pdf-local)
+ ($(srcdir)/doc/version.texi): New targets to faciliate keeping the web
+ pages of the GNU Mach Reference Manual updated.
+
+2006-11-20 Samuel Thibault <address@hidden>
+
+ [patch #5328 -- GNU Mach asm statements tidy]
+ * i386/i386/fpe_linkage.c (disable_fpe): Gather dependent asm
+ statements, add `ax' clobber.
+ (fpe_exception_fixup): Drop bogus cast from input parameter of lcall
+ asm statement.
+ * i386/i386/pio.h (inw, outw): Drop 0x66 prefix an just use the w
+ instruction variant.
+ * i386/i386/proc_reg.h: (get_eflags, get_tr, get_ldt): Drop
+ useless "volatile" from asm statement.
+ (get_esp): Use direct asm register specification.
+ * i386/include/mach/i386/cthreads.h (cthread_sp): Likewise.
+ * i386/intel/pmap.c (pmap_unmap_page_zero): Fix asm clobber into `eax'.
+
+ [patch #5375 -- Fix de4x5 probe]
+ * linux/src/drivers/net/de4x5.c (pci_probe): Make probe loop stop on
+ any error, not only device not found.
+
+2006-11-17 Constantine Kousoulos <address@hidden>
+ Thomas Schwinge <address@hidden>
+
+ [bug #18010 -- GNU Mach: update i386/README-Drivers and doc/mach.texi]
+ * i386/README-Drivers: Move most of the text into...
+ * doc/mach.texi: ... here and update a number of things.
+ (UPDATED): Don't override.
+
+2006-11-13 Samuel Thibault <address@hidden>
+
+ * i386/i386at/iopl.c (ioplmmap): Add `int' return type.
+ * i386/i386at/model_dep.c (halt_all_cpus): Fix typo in declaration.
+ * kern/assert.h (Assert): Add __attribute__ ((noreturn)) to
+ declaration.
+ * kern/debug.c (Debugger): Add __attribute__ ((noreturn)) to
+ declaration.
+ (Debugger): Add call to panic().
+ * kern/debug.h (panic): Add __attribute__ ((noreturn)) to declaration.
+ * util/putchar.c (putchar): Return printed char.
+
+2006-11-13 Barry deFreese <address@hidden>
+
+ * device/chario.c (tty_cts): Add `void' return type.
+ * device/cons.c (cninit, cnputc): Add `void' return type.
+ (cngetc, cnmaygetc): Add `int' return type.
+ * device/net_io.c (net_del_q_info, net_free_dead_infp)
+ (net_free_dead_entp): Add `void' return type.
+ * i386/i386/fpu.c (fpnoextflt, fpextovrflt, fpexterrflt, fp_save)
+ (fp_load, fpintr): Add `void' return type.
+ * i386/i386/ktss.c (ktss_init): Add `int' type to `exception_stack'.
+ * i386/i386/loose_ends.c (delay): Add `void' return type.
+ * i386/i386/phys.c (pmap_zero_page, pmap_copy_page, copy_to_phys)
+ (copy_from_phys): Add `void' return type.
+ * i386/i386/pic.c (picinit, form_pic_mask, intnull, prtnull): Add
+ `void' return type.
+ * i386/i386/pit.c (clkstart): Add `void' return type.
+ * i386/i386at/com.c (comparm, comtimer, fix_modem_state)
+ (commodem_intr): Add `void' return type.
+ (comintr, commctl, comstop): Add `int' return type.
+ * i386/i386at/iopl.c (ioplclose): Add `int' return type.
+ * i386/i386at/kd.c (kd_io_map_openn, kd_io_map_close, feep, pause)
+ (kd_debug_put, cnpollc, kdclose, kd_handle_ack, kd_resend, kdinit)
+ (kd_belloff, kd_bellon, kd_putc, kd_setpos, kd_scrollup, kd_scrolldn)
+ (kd_parseesc, kd_parserest, kd_tab, kd_cls, kd_home, kd_up, kd_down)
+ (kd_right, kd_left, kd_cr, kd_cltobcur, kd_cltopcurn, kd_cltoecur)
+ (kd_clfrbcur, kd_delln, kd_insln, kd_delch, kd_erase, kd_eraseln)
+ (kd_insch, kd_senddata, kd_sendcmd, kd_cmdreg_write, kd_mouse_drain)
+ (set_kd_state, kd_setleds1, kd_setleds2, cnsetleds, kdreboot): Add
+ `void' return type.
+ (kdopen, kdread, kdwrite, kdportdeath, kdsetbell, kdgetkbent, kdintr)
+ (do_modifier, kdstate2idx, kdstart, kdstop, kd_kbd_magic): Add `int'
+ return type.
+ (kd_isupper, kd_islower): Add `boolean_t' return type.
+ (kd_cmdreg_read): Add `unsigned char' return type.
+ * i386/i386at/kd_event.c (kbdinit, kbdclose, kdb_in_out, X_kdb_enter)
+ (X_kdb_exit, X_kdb_enter_init, X_kdb_exit_init): Add `void' return
+ type.
+ (kbdopen, kbdioctl, kbdselect, kbdread): Add `int' return type.
+ * i386/i386at/kd_mouse.c (init_mouse_hw, serial_mouse_open)
+ (kd_mouse_open, mouseclose, serial_mouse_close, kd_mouse_close)
+ (mouse_handle_byte, mouse_packet_mouse_system_mouse)
+ (mouse_packet_microsoft_mouse, ibm_ps2_mouse_open)
+ (ibm_ps2_mouse_close, mouse_packet_ibm_ps2_mouse, mouse_moved)
+ (mouse_button): Add `void' return type.
+ (mouseopen, mouseioctl, mouseselect, mouseread, mouseintr): Add `int'
+ return type.
+ * i386/i386at/lpr.c (lprclose, lprpr_addr): Add `void' return type.
+ (lprprobe, lpropen, lprread, lprwrite, lprportdeath, lprstop, lprpr):
+ Add `int' return type.
+ * i386/i386at/model_dep.c (i386at_init, startrtclock): Add `void'
+ return type.
+ (timemmap): Add `int' return type.
+ * i386/i386at/rtc.c (rtcinit, rtcput): Add `void' return type.
+ (yeartoday, hexdectodec, readtodc, writetodc): Add `int' return type.
+ * i386/intel/pmap.c (pmap_pageable): Add `void' return type.
+ * kern/eventcount.c (simpler_thread_setrun): Add `int' type to
+ `whichrq' variable.
+
+2006-11-13 Barry deFreese <address@hidden>
+
+ * i386/i386/locore.h: New file.
+ * i386/i386/pcb.h: New file.
+ * i386/i386/pcb.c: Include `pcb.h'.
+ * i386/i386/pit.c (clkstart): Fix type of s into unsigned long.
+ * i386/i386/spl.h (spl0, splsched, splx, splsoftclock, splon, sploff)
+ (splhigh, splimp, spltty, splclock, setsoftclock): Add prototype.
+ * i386/i386at/kd_event.h: New file.
+ * i386/i386at/kd_event.c: Include `kd_event.h'.
+ * i386/i386at/kd_mouse.h: New file.
+ * i386/i386at/kd_mouse.c: Include `kd_mouse.h'.
+ (mouseclose): Fix call of `serial_mouse_close' function.
+ * i386/i386at/kd.c: Include `kd_event.h' and `kd_mouse.h'.
+ * i386/i386at/kd.h (splx, spltty): Remove prototypes.h
+ * i386/i386at/lpr.c: Likewise.
+ * ipc/mach_msg.c: Include `machine/locore.h' and `machine/pcb.h'.
+ * kern/mach_clock.h: New file.
+ * kern/mach_clock.c: Include `kern/queue.h', `kern/timer.h' and
+ `mach_clock.h'.
+ * kern/mach_factor.h: New file.
+ * kern/mach_factor.c: Include `mach_factor.h'.
+ * kern/sched_prim.c: Include `kern/mach_factor.h'.
+ * kern/thread.c: Include `machine/pcb.h'.
+
+2006-11-11 Thomas Schwinge <address@hidden>
+
+ * Makefile.am (gnumach-undef-bad): Depend on the Makefile.
+
+2006-11-11 Samuel Thibault <address@hidden>
+
+ Fix I/O port type.
+ * i386/i386/pic.c (master_icq, master_ocw, slaves_icq, slaves_ocw):
+ Change variables type from char * to unsigned short.
+ (picinit): Remove now-useless cast.
+ * i386/i386at/kd_mouse.c (init_mouse_hw, serial_mouse_close)
+ (mouseintr): Change variable type from caddr_t to unsigned short,
+ remove now-useless cast.
+
+ [task #5726 -- GCC built-in functions]
+ * kern/machine.c: Include `string.h'.
+
+ Fix ``assignment used as truth value'' warnings.
+ * device/cons.c (cninit): Add parenthesis.
+ * kern/bootstrap.c (copy_bootstrap): Likewise.
+ * kern/printf.c (_doprnt): Likewise.
+ * vm/vm_map.c (vm_map_lookup): Likewise.
+
+ Fix a bunch of ``unused variable'' warnings.
+ * device/ds_routines.c (ds_device_open): Remove unused `namebuf'
+ variable.
+ * device/kmsg.c (kmsgread): Remove unused `err' variable.
+ * device/net_io.c (net_set_filter): Remove unused `j' variable.
+ * i386/i386/pcb.c (curr_gdt, curr_ktss): Artificially use parameter of
+ macro.
+ * i386/i386/pic.c (picinit): Remove unused `i' variable.
+ * i386/i386/pit.c (clkstart): Remove unused `flags' variable.
+ * i386/i386/trap.c (kernel_trap): Remove unused `exc' variable.
+ (user_trap): Remove unused `map' and `result' variables.
+ (v86_assist): Remove unused `size' variable.
+ * i386/i386at/i386at_ds_routines.c (ds_device_open): Remove unused
+ `dev' variable.
+ * i386/i386at/kd.c (kdintr): Remove unused `o_pri' variable.
+ (kdcngetc): Remove unused `i' variable.
+ * i386/i386at/kd_event.c (kbdgetstat, kbdsetstat): Remove unused
+ `result' variable.
+ * i386/i386at/kd_mouse.c (mousegetstat): Likewise.
+ * i386/i386at/lpr.c (lprattach): Remove unused `tp' variable.
+ (lprsetstat): Remove unused `dev_addr' and `s' variables.
+ * i386/intel/pmap.c (pmap_bootstrap): Remove unused `pteva' variable.
+ (SPLVM, SPLX): Artificially use parameter of macro.
+ * ipc/ipc_kmsg.c (ipc_kmsg_copyin_body): Remove unused `mr' variable.
+ * kern/bootstrap.c (boot_script_exec_cmd): Remove unused
+ `boot_exec_info' and `user_map' variables.
+ * vm/vm_kern.c (projected_buffer_map): Remove unused `object'
+ variable.
+
+2006-11-10 Samuel Thibault <address@hidden>
+
+ * kern/sched_prim.h (thread_syscall_return): Replace old `volatile'
+ function qualifier with __attribute__((__noreturn__)).
+
+2006-11-09 Barry deFreese <address@hidden>
+
+ [task #5726 -- GCC built-in functions]
+ * include/printf.h: Move file...
+ * kern/printf.h: ... here.
+ * kern/debug.h (panic_init, panic): Add prototypes.
+ * chips/busses.c: Don't include `printf.h', include `kern/printf.h'
+ and `kern/debug.h' for panic().
+ * ddb/db_command.c: Likewise.
+ * ddb/db_cond.c: Likewise.
+ * ddb/db_output.c: Likewise.
+ * device/cirbuf.c: Likewise.
+ * device/cons.c: Likewise.
+ * device/dev_name.c: Likewise.
+ * device/dev_pager.c: Likewise.
+ * device/device_init.c: Likewise.
+ * device/dk_label.c: Likewise.
+ * device/ds_routines.c: Likewise.
+ * device/net_io.c: Likewise.
+ * device/subrs.c: Likewise.
+ * i386/i386/debug_i386.c: Likewise.
+ * i386/i386/fpe_linkage.c: Likewise.
+ * i386/i386/fpu.c: Likewise.
+ * i386/i386/io_map.c: Likewise.
+ * i386/i386/kttd_interface.c: Likewise.
+ * i386/i386/mp_desc.c: Likewise.
+ * i386/i386/pcb.c: Likewise.
+ * i386/i386/pic.c: Likewise.
+ * i386/i386/trap.c: Likewise.
+ * i386/i386at/autoconf.c: Likewise.
+ * i386/i386at/com.c: Likewise.
+ * i386/i386at/i386at_ds_routines.c: Likewise.
+ * i386/i386at/kd.c: Likewise.
+ * i386/i386at/kd_event.c: Likewise.
+ * i386/i386at/kd_mouse.c: Likewise.
+ * i386/i386at/lpr.c: Likewise.
+ * i386/i386at/model_dep.c: Likewise.
+ * i386/intel/pmap.c: Likewise.
+ * ipc/ipc_entry.c: Likewise.
+ * ipc/ipc_hash.c: Likewise.
+ * ipc/ipc_kmsg.c: Likewise.
+ * ipc/ipc_mqueue.c: Likewise.
+ * ipc/ipc_notify.c: Likewise.
+ * ipc/ipc_object.c: Likewise.
+ * ipc/ipc_port.c: Likewise.
+ * ipc/ipc_pset.c: Likewise.
+ * ipc/ipc_right.c: Likewise.
+ * ipc/mach_msg.c: Likewise.
+ * ipc/mach_port.c: Likewise.
+ * ipc/mach_rpc.c: Likewise.
+ * kern/act.c: Likewise.
+ * kern/ast.c: Likewise.
+ * kern/bootstrap.c: Likewise.
+ * kern/debug.c: Likewise.
+ * kern/eventcount.c: Likewise.
+ * kern/exception.c: Likewise.
+ * kern/host.c: Likewise.
+ * kern/ipc_host.c: Likewise.
+ * kern/ipc_kobject.c: Likewise.
+ * kern/ipc_mig.c: Likewise.
+ * kern/ipc_sched.c: Likewise.
+ * kern/ipc_tt.c: Likewise.
+ * kern/kalloc.c: Likewise.
+ * kern/lock.c: Likewise.
+ * kern/mach_clock.c: Likewise.
+ * kern/machine.c: Likewise.
+ * kern/pc_sample.c: Likewise.
+ * kern/printf.c: Likewise.
+ * kern/processor.c: Likewise.
+ * kern/sched_prim.c: Likewise.
+ * kern/server_loop.ch: Likewise.
+ * kern/startup.c: Likewise.
+ * kern/task.c: Likewise.
+ * kern/thread.c: Likewise.
+ * kern/thread_swap.c: Likewise.
+ * kern/xpr.c: Likewise.
+ * kern/zalloc.c: Likewise.
+ * vm/memory_object.c: Likewise.
+ * vm/vm_debug.c: Likewise.
+ * vm/vm_fault.c: Likewise.
+ * vm/vm_kern.c: Likewise.
+ * vm/vm_map.c: Likewise.
+ * vm/vm_object.c: Likewise.
+ * vm/vm_object.h: Likewise.
+ * vm/vm_pageout.c: Likewise.
+ * vm/vm_resident.c: Likewise.
+
+2006-11-08 Thomas Schwinge <address@hidden>
+
+ * aclocal.m4: Regenerate using GNU Autoconf 2.60 and GNU Automake 1.10.
+ * INSTALL: Likewise.
+ * Makefile.in: Likewise.
+ * configure: Likewise.
+ * build-aux/config.guess: Likewise.
+ * build-aux/config.sub: Likewise.
+ * build-aux/depcomp: Likewise.
+ * build-aux/install-sh: Likewise.
+ * build-aux/missing: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+
+ * Makefrag.am (gnumach.msgids): Remove temporary files.
+
+2006-11-08 Samuel Thibault <address@hidden>
+
+ [task #5726 -- GCC built-in functions]
+ * include/printf.h (iprintf): Fix prototype.
+ (vprintf): Add prototype.
+ * kern/printf.c: Include `printf.h'.
+ (vprintf, printf): Fix prototype and return a dumb value.
+ * kern/startup.c: Include `printf.h'.
+
+2006-11-07 Barry deFreese <address@hidden>
+
+ [task #5726 -- GCC built-in functions]
+ * include/printf.h: New file.
+ (printf_init, _doprnt, printnum, sprintf, printf, indent, iprint): New
+ declarations.
+ * include/string.h (strchr, strcmp, strcpy, strlen, strncmp, strncpy)
+ (strrchr, strsep): New extern declarations.
+ * kern/strings.c: Don't include `kern/strings.h', include `string.h'.
+ (strncmp, strncpy, strlen): Fix prototypes into using size_t.
+ * kern/strings.h: Removed file.
+ * kern/debug.c: Include `printf.h'.
+ (do_cnputc): New function.
+ (panic, log): Use do_cnputc instead of cnputc.
+ * chips/busses.c: Don't include `kern/strings.h', include `printf.h' and
+ `string.h'.
+ (_doprnt): Remove extern declaration.
+ (indent): Remove extern declaration.
+ * ddb/db_aout.c: Likewise.
+ * ddb/db_command.c: Likewise.
+ * ddb/db_lex.c: Likewise.
+ * ddb/db_macro.c: Likewise.
+ * ddb/db_output.c: Likewise.
+ * ddb/db_print.c: Likewise.
+ * ddb/db_sym.c: Likewise.
+ * device/dev_name.c: Likewise.
+ * device/dev_pager.c: Likewise.
+ * device/dk_label.c: Likewise.
+ * device/ds_routines.c: Likewise.
+ * device/net_io.c: Likewise.
+ * device/subrs.c: Likewise.
+ * i386/i386/db_trace.c: Likewise.
+ * i386/i386/debug_i386.c: Likewise.
+ * i386/i386/fpu.c: Likewise.
+ * i386/i386/io_map.c: Likewise.
+ * i386/i386/kttd_interface.c: Likewise.
+ * i386/i386/pic.c: Likewise.
+ * i386/i386/trap.c: Likewise.
+ * i386/i386at/autoconf.c: Likewise.
+ * i386/i386at/com.c: Likewise.
+ * i386/i386at/i386at_ds_routines.c: Likewise.
+ * i386/i386at/kd.c: Likewise.
+ * i386/i386at/kd_event.c: Likewise.
+ * i386/i386at/kd_mouse.c: Likewise.
+ * i386/i386at/lpr.c: Likewise.
+ * i386/i386at/model_dep.c: Likewise.
+ * i386/intel/pmap.c: Likewise.
+ * ipc/ipc_entry.c: Likewise.
+ * ipc/ipc_hash.c: Likewise.
+ * ipc/ipc_kmsg.c: Likewise.
+ * ipc/ipc_notify.c: Likewise.
+ * ipc/ipc_object.c: Likewise.
+ * ipc/ipc_port.c: Likewise.
+ * ipc/ipc_pset.c: Likewise.
+ * ipc/mach_msg.c: Likewise.
+ * ipc/mach_port.c: Likewise.
+ * ipc/mach_rpc.c: Likewise.
+ * kern/bootstrap.c: Likewise.
+ * kern/eventcount.c: Likewise.
+ * kern/ipc_kobject.c: Likewise.
+ * kern/pc_sample.c: Likewise.
+ * kern/printf.c: Likewise.
+ * kern/sched_prim.c: Likewise.
+ * kern/thread.c: Likewise.
+ * kern/zalloc.c: Likewise.
+ * vm/vm_fault.c: Likewise.
+ * vm/vm_map.c: Likewise.
+ * vm/vm_object.c: Likewise.
+ * vm/vm_resident.c: Likewise.
+
+2006-11-05 Samuel Thibault <address@hidden>
+
+ * include/string.h: Fix copyright assignment to FSF, keep author's
+ name.
+
+2006-11-05 Thomas Schwinge <address@hidden>
+
+ * linux/dev/README: New file.
+
+ * config.h.in: Regenerate.
+ * configure: Likewise.
+
+ [task #5956 -- Automake'ify GNU Mach's code base]
+ * configure.ac <AM_INIT_AUTOMAKE>: Add `no-define' and `1.9'.
+
+2006-11-05 Barry deFreese <address@hidden>
+
+ [task #5878 -- Backport code from GNU Mach's trunk to
+ gnumach-1-branch: i386_set_gdt, i386_get_gdt'']
+ [sync from HEAD, 2002-10-03]
+ * i386/include/mach/i386/mach_i386.defs (i386_set_gdt, i386_get_gdt):
+ New routines.
+ * i386/i386/user_ldt.c (i386_set_gdt, i386_get_gdt): New functions.
+ * i386/i386/gdt.h (USER_GDT, USER_GDT_SLOTS): New macros.
+ (GDTSZ): Compute it from USER_GDT and USER_GDT_SLOTS.
+ * i386/i386/thread.h: Include `gdt.h'.
+ (struct i386_machine_state): New member `user_gdt'.
+ * i386/i386/pcb.c (switch_ktss): Copy those slots into the GDT.
+ * linux/src/include/linux/head.h (idt,gdt): Remove extern declaration.
+
+2006-11-05 Samuel Thibault <address@hidden>
+
+ FPU, CPU and IO stubs cleanup.
+ * i386/i386/fpu.h (fstcw): New macro.
+ * i386/i386/locore.S (_fninit, _fstcw, _fldcw, _fnstsw, _fnclex)
+ (_clts, _fpsave, _fprestore, set_cr3, get_cr3, flush_tlb, get_cr2)
+ (get_ldt, set_ldt, get_tr, set_tr, _setts, outb, inb, outw, inw, outl)
+ (inl, loutb, loutw, linb, linw): Remove functions.
+ * i386/i386/proc_reg.h (flush_tlb): New macro.
+ * i386/i386/db_interface.c: Include `i386/proc_reg.h'.
+ * i386/intel/pmap.c: Likewise.
+ * i386/intel/pmap.h: Likewise.
+ * i386/i386/fpu.c: Include `i386/pio.h'.
+ * i386/i386/pic.c: Likewise.
+ * i386/i386/pit.c: Likewise.
+ * i386/i386at/iopl.c: Likewise.
+ * i386/i386at/kd.c: Likewise.
+ * i386/i386at/kd_event.c: Likewise.
+ * i386/i386at/kd_mouse.c: Likewise.
+ * i386/i386at/rtc.c: Likewise.
+
+2006-11-05 Barry deFreese <address@hidden>
+
+ [task #5726 -- GCC built-in functions]
+ * include/string.h: New file.
+ * include/mach/mig_support.h: Include `string.h'.
+ [MACH_KERNEL] (bcopy): Remove extern declaration.
+ [MACH_KERNEL] (memcpy): Remove macro.
+ * device/cirbuf.c: Include `string.h'.
+ (q_to_b, b_to_q): Replace bcopy() with memcpy() and bzero() with
+ memset(), clean memcpy() and memset() invocation.
+ * device/cons.c (cnputc): Likewise.
+ * device/dev_pager.c (device_pager_data_request_done): Likewise.
+ * device/ds_routines.c (device_write_get, ds_read_done): Likewise.
+ * device/kmsg.c: Likewise.
+ * device/net_io.c (net_filter, net_set_filter, net_getstat): Likewise.
+ * i386/i386/fpu.c (fpu_set_state, fpu_get_state, fp_load)
+ (fp_state_alloc): Likewise.
+ * i386/i386/iopb.c (io_tss_init, i386_io_port_list): Likewise.
+ * i386/i386/mp_desc.c (mp_desc_init): Likewise.
+ * i386/i386/pcb.c (pcb_init, thread_setstatus)
+ (thread_getstatus): Likewise.
+ * i386/i386/phys.c (pmap_zero_page, pmap_copy_page, copy_to_phys)
+ (copy_from_phys): Likewise.
+ * i386/i386/trap.c (v86_assist): Likewise.
+ * i386/i386/user_ldt.c (i386_set_ldt, i386_get_ldt): Likewise.
+ * i386/i386at/immc.c (immc_cnputc): Likewise.
+ * i386/i386at/kd_event.c (X_kdb_enter_init, X_kdb_exit_init): Likewise.
+ * i386/intel/pmap.c (pmap_init, pmap_page_table_page_alloc)
+ (pmap_create): Likewise.
+ * ipc/ipc_entry.c (ipc_entry_grow_table): Likewise.
+ * ipc/ipc_kmsg.c (ipc_kmsg_get_from_kernel)
+ (ipc_kmsg_put_to_kernel): Likewise.
+ * ipc/ipc_object.c (ipc_object_alloc, ipc_object_alloc_name): Likewise.
+ * ipc/ipc_port.c (ipc_port_dngrow): Likewise.
+ * ipc/ipc_space.c: Likewise.
+ * ipc/mach_debug.c (mach_port_space_info)
+ (mach_port_space_info): Likewise.
+ * kern/act.c (act_create): Likewise.
+ * kern/boot_script.c: Likewise.
+ * kern/bootstrap.c: Likewise.
+ * kern/eventcount.c (evc_init): Likewise.
+ * kern/host.c (host_info, host_processor_sets): Likewise.
+ * kern/lock.c (lock_init): Likewise.
+ * kern/lock_mon.c (lock_info_clear): Likewise.
+ * kern/mach_clock.c (mapable_time_init): Likewise.
+ * kern/pc_sample.c (get_sampled_pcs): Likewise.
+ * kern/processor.c (processor_set_things): Likewise.
+ * kern/syscall_emulation.c (task_set_emulation_vector_internal)
+ (task_get_emulation_vector, xxx_task_get_emulation_vector): Likewise.
+ * kern/task.c (task_threads): Likewise.
+ * kern/xpr.c (xprbootstrap): Likewise.
+ * kern/zalloc.c (host_zone_info): Likewise.
+ * vm/vm_debug.c (mach_vm_object_pages): Likewise.
+ * vm/vm_kern.c (projected_buffer_allocate, copyinmap)
+ (copyoutmap): Likewise.
+ * vm/vm_object.c (vm_object_bootstrap): Likewise.
+ * vm/vm_resident.c (vm_page_grab_contiguous_pages): Likewise.
+
+2006-11-05 Samuel Thibault <address@hidden>
+
+ * DEVELOPMENT: Document the following removals.
+
+ Drop MB1/MB2/EXL architecture support.
+ * i386/i386/pit.h (PITCTR0_PORT, PITCTR1_PORT, PITCTR2_PORT)
+ (PITCTL_PORT, CLKNUM): Remove MB1/MB2/EXL cases.
+ [EXL] (time_latch): Remove structure and type.
+ [EXL] (intr_disable, intr_restore): Remove functions.
+
+ Drop iPSC architecture support.
+ * i386/i386/hardclock.c: Remove iPSC386 from #if.
+ * i386/i386/locore.S: Remove iPSC386 delays.
+ * i386/i386/pic.c: Remove iPSC386 support.
+ (SLAVEMASK): Rmove iPSC386 case.
+ * i386/i386/pic.h (ADDR_PIC_BASE, OFF_ICW, OFF_OCW, SIZE_PIC)
+ (PICM_VECTBASE, PICS_VECTBASE): Remove iPSC386 cases.
+ [iPSC386] (I_AM_A_SLAVE, I_AM_A_MASTR): Remove macros.
+ * i386/i386/pit.h: Remove iPSC386 from #if.
+ [iPSC386] (CLKNUM): Remove macro.
+ * kern/machine.c (host_get_boot_info): Remove iPSC386 support.
+ * vm/vm_map.h (VM_MAP_COPY_PAGE_LIST_MAX): Remove iPSC case.
+
+ Drop i860 architecture support.
+ * i386/i386/pmap.h: Remove i860 comment.
+ * i386/intel/pmap.c: Remove i860 comments.
+ [i860]: Don't include `i860ipsc/nodehw.h'.
+ (INVALIDATE_TLB): Remove i860 case.
+ (paging_enabled): Remove variable.
+ (pmap_map): Remove setting INTEL_PTE_NCACHE.
+ (pmap_bootstrap): Remove i860 support.
+ (pmap_page_table_page_alloc): Remove setting INTEL_PTE_NCACHE.
+ (pmap_enter): Remove call to flush function.
+ (set_dirbase): Remove function.
+ * i386/intel/pmap.h: Remove i860 comments.
+ (INTEL_PGBYTES, INTEL_PGSHIFT, intel_btop, intel_ptob)
+ (intel_round_page, intel_trunc_page, trunc_intel_to_vm)
+ (round_intel_to_vm, vm_to_intel, INTEL_PTE_VALID, set_dirbase): Remove
+ i860 cases.
+ (INTEL_PTE_valid): Remove macro.
+ * i386/intel/read_fault.c: Remove i860 comment.
+
+ Drop PS2 architecture support.
+ * i386/i386/fpu.c (fpintr): Remove PS2 from #if.
+ * i386/i386/gdt.c [PS2] (abios_int_return, abios_th_return, intstack):
+ Remove extern declarations.
+ * i386/i386/gdt.h [PS2] (ABIOS_INT_RET, ABIOS_TH_RET, ABIOS_INT_SS)
+ (ABIOS_TH_SS, ABIOS_FIRST_AVAIL_SEL): Remove macros.
+ (GDTSZ): Remove PS2 case.
+ * i386/i386/hardclock.c [PS2]: Don't include `i386/pic.h' and
+ `i386/pio.h'.
+ (hardclock): Remove PS2 prototype and code.
+ * i386/i386/locore.S (RET_OFFSET): Remove PS2 stack layout.
+ * i386/i386/pic.c (picinit): Remove #ifdef PS2.
+ * i386/i386/pic.h: Remove PS2 from #if.
+ * i386/i386/pit.c [PS2] (clock_int_handler): Remove extern declaration.
+ Don't include `sys/types.h' and `i386ps2/abios.h'.
+ (clock_request_block, clock_flags, cqbuf): Remove variables.
+ (clkstart): Remove call to abios_clock_start function.
+ (COUNT): Don't define.
+ (abios_clock_start, ackrtclock): Remove functions.
+ * i386/i386/pit.h: Remove PS2 from #if.
+
+2006-10-26 Thomas Schwinge <address@hidden>
+
+ * Makefile.in: Regenerate.
+
+ [task #5956 -- Automake'ify GNU Mach's code base]
+
+ * Makefrag.am (gnumach.msgids): Remove repetition.
+ * Makerules.am (%.server.msgids, %.user.msgids): Targets renamed from
+ `%.msgids'. Also consider MIGCOMSFLAGS respective MIGCOMUFLAGS.
+ Thanks to Guillem Jover and Leonardo Lopes Pereira for reporting this.
+
+ The Automake build system wants us to have these files in the rcs, so
+ do that.
+ * doc/mach.info: New file, generated.
+ * doc/mach.info-1: Likewise.
+ * doc/mach.info-2: Likewise.
+ * doc/stamp-vti: Likewise.
+ * doc/version.texi: Likewise.
+
+2006-10-18 Thomas Schwinge <address@hidden>
+
+ * Makefile.in: Regenerate.
+
+ Install `PREFIX/share/msgids/gnumach.msgids'.
+ * Makerules.am (%.msgids): Two new rules.
+ * Makefrag.am (MOSTLYCLEANFILES): Add `gnumach.msgids'.
+ (gnumach.msgids): New rule.
+ (exec_msgidsdir, exec_msgids_DATA): New variables.
+
+2006-10-16 Thomas Schwinge <address@hidden>
+
+ * configure: Regenerate.
+
+ [bug #18011 -- `make install-data' will build the
+ ``to-be-generated files'']
+ * config.status.dep.patch: Do an educated guess instead of using the
+ `Makefile'.
+ * configure.ac <config.status.dep.patch>: Update description.
+
+2006-10-15 Thomas Schwinge <address@hidden>
+
+ * configure: Regenerate.
+
+ * configure.ac: Update texts snippets: GNU Automake 1.10 has just been
+ released.
+
+ * i386/include/Makefile.in: Remove unused file. Thanks to Guillem
+ Jover for spotting this.
+
+ [task #5956 -- Automake'ify GNU Mach's code base]
+
+ * configure: Regenerate.
+
+ * configure.ac <config.status.dep.patch>: Point to [bug #18011 --
+ `make install-data' will build the ``to-be-generated files''].
+
+ * Makefile.in: Regenerate.
+
+ * Makefrag.am (include_mach_exec): Rename to `include_mach_eXec'.
+
+ * Makefile.in: New file, generated by `autoreconf'.
+ * config.h.in: Likewise.
+ * configure: Updated file, generated by `autoreconf'.
+
+ * INSTALL: File updated, thanks to `autoreconf'.
+ * aclocal.m4: Likewise.
+
+ * build-aux/compile: New file, thanks to `autoreconf'.
+ * build-aux/config.guess: Likewise.
+ * build-aux/config.sub: Likewise.
+ * build-aux/depcomp: Likewise.
+ * build-aux/install-sh: Likewise.
+ * build-aux/mdate-sh: Likewise.
+ * build-aux/missing: Likewise.
+ * build-aux/texinfo.tex: Likewise.
+
+ * AUTHORS: New file, copy from the MIG repository.
+
+ * kern/bootstrap.c: Don't include `bootstrap_symbols.h'.
+ * ddb/db_command.c: Don't include `cpus.h'.
+ * ddb/db_mp.c: Likewise.
+ * i386/i386/ast_check.c: Likewise.
+ * i386/i386/cswitch.S: Likewise.
+ * i386/i386/db_interface.c: Likewise.
+ * i386/i386/fpu.c: Likewise.
+ * i386/i386/fpu.h: Likewise.
+ * i386/i386/i386asm.sym: Likewise.
+ * i386/i386/locore.S: Likewise.
+ * i386/i386/mp_desc.c: Likewise.
+ * i386/i386/mp_desc.h: Likewise.
+ * i386/i386/pcb.c: Likewise.
+ * i386/i386/trap.c: Likewise.
+ * i386/intel/pmap.c: Likewise.
+ * include/mach/machine.h: Likewise.
+ * ipc/ipc_kmsg.c: Likewise.
+ * ipc/ipc_kmsg.h: Likewise.
+ * kern/ast.c: Likewise.
+ * kern/ast.h: Likewise.
+ * kern/cpu_number.h: Likewise.
+ * kern/debug.c: Likewise.
+ * kern/eventcount.c: Likewise.
+ * kern/host.c: Likewise.
+ * kern/ipc_sched.c: Likewise.
+ * kern/lock.c: Likewise.
+ * kern/lock.h: Likewise.
+ * kern/lock_mon.c: Likewise.
+ * kern/mach_clock.c: Likewise.
+ * kern/mach_factor.c: Likewise.
+ * kern/machine.c: Likewise.
+ * kern/priority.c: Likewise.
+ * kern/processor.c: Likewise.
+ * kern/processor.h: Likewise.
+ * kern/sched.h: Likewise.
+ * kern/sched_prim.c: Likewise.
+ * kern/startup.c: Likewise.
+ * kern/syscall_subr.c: Likewise.
+ * kern/thread.c: Likewise.
+ * kern/timer.c: Likewise.
+ * kern/timer.h: Likewise.
+ * vm/vm_resident.c: Likewise.
+ * kern/sched_prim.c: Don't include `fast_tas.h'.
+ * kern/task.c: Likewise.
+ * kern/task.h: Likewise.
+ * kern/sched_prim.c: Don't include `hw_footprint.h'.
+ * kern/thread.c: Likewise.
+ * kern/thread.h: Likewise.
+ * kern/counters.c: Don't include `mach_counters.h'.
+ * kern/counters.h: Likewise.
+ * ddb/db_ext_symtab.c: Don't include `mach_debug.h'.
+ * i386/i386/pcb.c: Likewise.
+ * kern/ipc_kobject.c: Likewise.
+ * kern/thread.c: Likewise.
+ * kern/zalloc.c: Likewise.
+ * kern/ast.c: Don't include `mach_fixpri.h'.
+ * kern/processor.c: Likewise.
+ * kern/processor.h: Likewise.
+ * kern/sched.h: Likewise.
+ * kern/sched_prim.c: Likewise.
+ * kern/syscall_subr.c: Likewise.
+ * kern/thread.c: Likewise.
+ * kern/thread.h: Likewise.
+ * kern/host.c: Don't include `mach_host.h'.
+ * kern/ipc_sched.c: Likewise.
+ * kern/machine.c: Likewise.
+ * kern/processor.c: Likewise.
+ * kern/processor.h: Likewise.
+ * kern/sched_prim.c: Likewise.
+ * kern/startup.c: Likewise.
+ * kern/task.c: Likewise.
+ * kern/thread.c: Likewise.
+ * kern/thread.h: Likewise.
+ * include/mach/mach.defs: Don't include `mach_ipc_compat.h'.
+ * include/mach/mach_param.h: Likewise.
+ * include/mach/mach_traps.h: Likewise.
+ * include/mach/message.h: Likewise.
+ * include/mach/mig_errors.h: Likewise.
+ * include/mach/notify.h: Likewise.
+ * include/mach/port.h: Likewise.
+ * include/mach/std_types.defs: Likewise.
+ * include/mach/task_special_ports.h: Likewise.
+ * include/mach/thread_special_ports.h: Likewise.
+ * ipc/ipc_kmsg.c: Likewise.
+ * ipc/ipc_kmsg.h: Likewise.
+ * ipc/ipc_marequest.c: Likewise.
+ * ipc/ipc_notify.c: Likewise.
+ * ipc/ipc_notify.h: Likewise.
+ * ipc/ipc_object.c: Likewise.
+ * ipc/ipc_object.h: Likewise.
+ * ipc/ipc_port.c: Likewise.
+ * ipc/ipc_port.h: Likewise.
+ * ipc/ipc_right.c: Likewise.
+ * ipc/ipc_right.h: Likewise.
+ * ipc/ipc_space.c: Likewise.
+ * ipc/ipc_space.h: Likewise.
+ * ipc/mach_debug.c: Likewise.
+ * ipc/mach_msg.c: Likewise.
+ * ipc/mach_msg.h: Likewise.
+ * ipc/mach_port.c: Likewise.
+ * kern/ipc_tt.c: Likewise.
+ * kern/syscall_sw.c: Likewise.
+ * kern/thread.h: Likewise.
+ * include/mach_debug/mach_debug.defs: Don't include `mach_ipc_debug.h'.
+ * ipc/ipc_hash.c: Likewise.
+ * ipc/ipc_hash.h: Likewise.
+ * ipc/ipc_marequest.c: Likewise.
+ * ipc/ipc_marequest.h: Likewise.
+ * kern/ipc_kobject.c: Don't include `mach_ipc_test.h'.
+ * ddb/db_access.c: Don't include `mach_kdb.h'.
+ * ddb/db_aout.c: Likewise.
+ * ddb/db_break.c: Likewise.
+ * ddb/db_command.c: Likewise.
+ * ddb/db_command.h: Likewise.
+ * ddb/db_cond.c: Likewise.
+ * ddb/db_examine.c: Likewise.
+ * ddb/db_expr.c: Likewise.
+ * ddb/db_ext_symtab.c: Likewise.
+ * ddb/db_input.c: Likewise.
+ * ddb/db_lex.c: Likewise.
+ * ddb/db_macro.c: Likewise.
+ * ddb/db_mp.c: Likewise.
+ * ddb/db_output.c: Likewise.
+ * ddb/db_print.c: Likewise.
+ * ddb/db_run.c: Likewise.
+ * ddb/db_sym.c: Likewise.
+ * ddb/db_task_thread.c: Likewise.
+ * ddb/db_trap.c: Likewise.
+ * ddb/db_variables.c: Likewise.
+ * ddb/db_watch.c: Likewise.
+ * ddb/db_watch.h: Likewise.
+ * ddb/db_write_cmd.c: Likewise.
+ * i386/i386/db_disasm.c: Likewise.
+ * i386/i386/db_interface.c: Likewise.
+ * i386/i386/db_trace.c: Likewise.
+ * i386/i386/i386asm.sym: Likewise.
+ * i386/i386/locore.S: Likewise.
+ * i386/i386/trap.c: Likewise.
+ * i386/i386at/kd.c: Likewise.
+ * i386/i386at/model_dep.c: Likewise.
+ * include/mach_debug/mach_debug.defs: Likewise.
+ * ipc/ipc_kmsg.c: Likewise.
+ * ipc/ipc_object.c: Likewise.
+ * ipc/ipc_port.c: Likewise.
+ * ipc/ipc_pset.c: Likewise.
+ * kern/bootstrap.c: Likewise.
+ * kern/debug.c: Likewise.
+ * kern/exception.c: Likewise.
+ * kern/lock.c: Likewise.
+ * kern/xpr.c: Likewise.
+ * vm/vm_fault.c: Likewise.
+ * vm/vm_map.c: Likewise.
+ * vm/vm_object.c: Likewise.
+ * vm/vm_resident.c: Likewise.
+ * kern/lock.h: Don't include `mach_ldebug.h'.
+ * kern/lock_mon.c: Don't include `mach_lock_mon.h'.
+ * kern/ipc_kobject.c: Don't include `mach_machine_routines.h'.
+ * kern/lock_mon.c: Don't include `mach_mp_debug.h'.
+ * vm/memory_object.c: Don't include `mach_pagemap.h'.
+ * vm/vm_fault.c: Likewise.
+ * vm/vm_object.c: Likewise.
+ * vm/vm_object.h: Likewise.
+ * vm/vm_pageout.c: Likewise.
+ * i386/i386/trap.c: Don't include `mach_pcsample.h'.
+ * kern/mach4.srv: Likewise.
+ * kern/mach_clock.c: Likewise.
+ * kern/pc_sample.c: Likewise.
+ * kern/task.c: Likewise.
+ * kern/thread.c: Likewise.
+ * vm/vm_fault.c: Likewise.
+ * device/net_io.c: Don't include `mach_ttd.h'.
+ * i386/i386/kttd_interface.c: Likewise.
+ * i386/i386/locore.S: Likewise.
+ * i386/i386/trap.c: Likewise.
+ * i386/i386at/autoconf.c: Likewise.
+ * include/mach_debug/mach_debug.defs: Don't include `mach_vm_debug.h'.
+ * vm/vm_debug.c: Likewise.
+ * vm/vm_page.h: Likewise.
+ * vm/vm_resident.c: Likewise.
+ * kern/sched_prim.c: Don't include `power_save.h'.
+ * kern/sched.h: Don't include `simple_clock.h'.
+ * kern/sched_prim.c: Likewise.
+ * kern/thread.c: Likewise.
+ * kern/mach_clock.c: Don't include `stat_time.h'.
+ * i386/i386/i386asm.sym: Likewise.
+ * i386/i386/locore.S: Likewise.
+ * kern/sched.h: Likewise.
+ * kern/timer.c: Likewise.
+ * kern/timer.h: Likewise.
+ * kern/startup.c: Don't include `xpr_debug.h'.
+ * kern/xpr.h: Likewise.
+ * i386/i386at/autoconf.c: Don't include `com.h'.
+ * i386/i386at/com.c: Likewise.
+ * i386/i386at/conf.c: Likewise.
+ * i386/i386at/cons_conf.c: Likewise.
+ * i386/i386/fpe_linkage.c: Don't include `fpe.h'.
+ * i386/i386/fpu.c: Likewise.
+ * i386/i386/fpu.h: Likewise.
+ * i386/i386/trap.c: Likewise.
+ * i386/i386at/autoconf.c: Don't include `lpr.h'.
+ * i386/i386at/conf.c: Likewise.
+ * i386/i386at/lpr.c: Likewise.
+ * i386/i386/cswitch.S: Don't include `platforms.h'.
+ * i386/i386/fpu.c: Likewise.
+ * i386/i386/gdt.c: Likewise.
+ * i386/i386/hardclock.c: Likewise.
+ * i386/i386/i386asm.sym: Likewise.
+ * i386/i386/io_emulate.c: Likewise.
+ * i386/i386/locore.S: Likewise.
+ * i386/i386/pic.c: Likewise.
+ * i386/i386/pic.h: Likewise.
+ * i386/i386/pit.c: Likewise.
+ * i386/i386/pit.h: Likewise.
+ * i386/i386/seg.h: Likewise.
+ * i386/i386at/model_dep.c: Likewise.
+ * i386/i386at/com.c: Don't include `rc.h'
+ * i386/i386at/cons_conf.c: Likewise.
+ * i386/i386at/pic_isa.c: Likewise.
+ * device/ds_routines.c: Don't include <i386/linux/device-drivers.h>.
+ * i386/i386at/i386at_ds_routines.c: Likewise.
+ * i386/linux/dev/include/linux/autoconf.h: Likewise.
+ * linux/dev/arch/i386/kernel/setup.c: Likewise.
+ * linux/dev/init/main.c: Likewise.
+ * linux/pcmcia-cs/glue/pcmcia_glue.h: Likewise.
+ * linux/pcmcia-cs/glue/wireless_glue.h: Likewise.
+ * kern/lock_mon.c: Don't include <time_stamp.h>.
+ * device/cons.c: Include <device/cons.h> instead of <cons.h>.
+ * i386/i386at/com.c: Likewise.
+ * i386/i386at/kd.c: Likewise.
+ * i386/i386at/cons_conf.c: Likewise.
+ * i386/i386at/i386at_ds_routines.c: Include <device/device.server.h>
+ instead of "device_interface.h".
+ * device/chario.c: Include <device/device_reply.user.h> instead of
+ "device_reply.h".
+ * device/ds_routines.c: Likewise.
+ * linux/dev/glue/block.c: Likewise.
+ * linux/dev/glue/net.c: Likewise.
+ * linux/pcmcia-cs/glue/ds.c: Likewise.
+ * device/cons.c: Include <device/kmsg.h> instead of <kmsg.h>.
+ * device/kmsg.c: Likewise.
+ * i386/i386/cswitch.S: Include <i386/cpu_number.h> instead of
+ "cpu_number.h".
+ * i386/i386/locore.S: Likewise.
+ * i386/intel/pmap.c: Likewise.
+ * ipc/ipc_kmsg.h: Likewise.
+ * i386/i386/i386asm.sym: Include <i386/gdt.h> instead of "gdt.h".
+ * i386/i386/idt.c: Likewise.
+ * i386/i386at/int_init.c: Likewise.
+ * i386/i386/cswitch.S: Include <i386/i386asm.h> instead of "i386asm.h".
+ * i386/i386/locore.S: Likewise.
+ * i386/i386at/boothdr.S: Likewise.
+ * i386/i386at/interrupt.S: Likewise.
+ * i386/i386at/idt.h: Include <i386/idt-gen.h> instead of "idt-gen.h".
+ * i386/i386at/interrupt.S: Include <i386/ipl.h> instead of "ipl.h".
+ * i386/i386/i386asm.sym: Include <i386/ldt.h> instead of "ldt.h".
+ * i386/i386/locore.S: Likewise.
+ * i386/i386/i386asm.sym: Include <i386/mp_desc.h> instead of
+ "mp_desc.h".
+ * i386/i386at/interrupt.S: Include <i386/pic.h> instead of "pic.h".
+ * i386/i386/cswitch.S: Include <i386/proc_reg.h> instead of
+ "proc_reg.h".
+ * i386/i386/locore.S: Likewise.
+ * i386/i386at/model_dep.c: Likewise.
+ * i386/i386/i386asm.sym: Include <i386/seg.h> instead of "seg.h".
+ * i386/i386/idt.c: Likewise.
+ * i386/i386/locore.S: Likewise.
+ * i386/i386/locore.S: Include <i386/trap.h> instead of "trap.h".
+ * i386/i386/i386asm.sym: Include <i386/tss.h> instead of "tss.h".
+ * i386/i386/i386asm.sym: Include <i386/vm_param.h> instead of
+ "vm_param.h".
+ * i386/i386/idt.c: Likewise.
+ * i386/i386at/kd.c: Likewise.
+ * i386/i386at/model_dep.c: Likewise.
+ * i386/intel/pmap.c: Likewise.
+ * i386/i386/i386asm.sym: Include <i386at/idt.h> instead of "idt.h".
+ * i386/i386/idt.c: Likewise.
+ * i386/i386at/int_init.c: Likewise.
+ * ipc/ipc_target.c: Include <kern/sched_prim.h> instead of
+ "sched_prim.h".
+ * vm/memory_object.c: Include <vm/memory_object_default.user.h> instead
+ of "memory_object_default.h".
+ * vm/vm_object.c: Likewise.
+ * vm/vm_pageout.c: Likewise.
+ * vm/memory_object.c: Include <vm/memory_object_user.user.h> instead of
+ "memory_object_user.h".
+ * vm/vm_fault.c: Likewise.
+ * vm/vm_object.c: Likewise.
+ * vm/vm_pageout.c: Likewise.
+
+ * Makefile.am: New file.
+ * Makerules.am <configure's findings, System dependent Makerules>
+ <Compilation flags, Dependency generation, Autoconf support>: Remove
+ sections.
+ <Building from foo.cli, Building from foo.srv>: Rewrite:
+ (%.server.defs.c, %.user.defs.c, %.server.h %.server.c)
+ (%.user.h %.user.c, %.server.defs, %.user.defs): New targets.
+ (%.h %_user.c %.cli.d, %_interface.h %_server.c %.srv.d): Remove
+ targets.
+ (echo-%): New target.
+ * Makefrag.am <configure's findings, Rules, Kernel Image, Installation>
+ <Building the distribution, Autoconf support, Makerules>: Remove
+ sections.
+ (enable_kdb, enable_kmsg): Adapt.
+ <All the source in each directory>
+ <Header files installed for user use>: Rewrite to adapt to how things
+ are to be done now.
+ <Automatically generated source files>: New section.
+ (i386/Makefrag.am): Include file if appropriate.
+ * i386/Makefrag.am <configure's findings, Rules, Installation>
+ <Autoconf support, Makerules>: Remove sections.
+ (enable_lpr): Adapt.
+ <Source files for any i386 kernel>: Rewrite to adapt to how things are
+ to be done now.
+ * i386/linux/Makefrag.am: New file.
+ * linux/Makefrag.am: Likewise.
+
+ * Makefile.in: Move file...
+ * Makefrag.am: ... here.
+ * i386/Makefile.in: Move file...
+ * i386/Makefrag.am: ... here.
+ * i386/linux/Makefile.in: Remove file.
+
+ * doc/Makefile.in: Remove file.
+ * doc/Makefrag.am: New file.
+ * tests/Makefrag.am: Likewise.
+ * tests/test-mbchk.in: Likewise.
+
+ * configfrag.ac: New file.
+ * tests/configfrag.ac: Likewise.
+ * Makerules.am (DEFINES): Convert those into...
+ * configfrag.ac: ... AC_DEFINE instantiations.
+ * i386/Makerules.in (DEFINES): Convert those into...
+ * i386/configfrag.ac: ... AC_DEFINE instantiations.
+ * i386/Makerules.in: Remove file.
+ * i386/configfrag.ac (AC_PREREQ, AC_INIT, AC_CONFIG_SRCDIR)
+ (AC_CONFIG_SUBDIRS, AC_CONFIG_FILES, AC_OUTPUT): Don't invoke.
+ (../version.m4): Don't include.
+ (--disable-lpr): Rework configuration option.
+ (--disable-default-device-drivers): Move configuration option to...
+ * configfrag.ac: ... here.
+ * configure.ac (AC_CONFIG_AUX_DIR, AM_INIT_AUTOMAKE): Instantiate.
+ (AC_PREFIX_DEFAULT, AC_CONFIG_SUBDIRS): Don't invoke.
+ <Output variable `systype'>: Rework the whole section.
+ <Options> (--enable-kdb, --disable-kmsg): Move into `configfrag.ac' and
+ adapt.
+ <Programs> (AM_PROG_AS, AM_PROG_CC_C_O): Instantiate.
+ (AC_CHECK_PROG): Move instantiation searching for a `mbchk' program
+ into `tests/configfrag.ac'.
+ (AC_CHECK_PROG): Instantiate to search for a `patch' program.
+ <configure fragments> (tests/configfrag.ac, configfrag.ac)
+ (linux/configfrag.ac): Include files.
+ (i386/configfrag.ac): Include file if appropriate.
+ (AC_CONFIG_HEADER): Instantiate for `config.h'.
+ (AC_CONFIG_FILES): Remove `Makerules' and `doc/Makefile'.
+ (AC_CONFIG_COMMANDS_POST): Instantiate for `config.status.dep.patch'.
+ (AC_CONFIG_COMMANDS): Instantiate for
+ `Makefile.correct_output_files_for_.S_files.patch' and (the
+ nonexistent) `Makefile.dependency_tracking_for_.S_files.patch'.
+ * Makefile.dependency_tracking_for_.S_files.patch: New file.
+ * config.status.dep.patch: Likewise.
+ * bogus/bootstrap_symbols.h: Remove file.
+ * configfrag.ac: AC_DEFINE `BOOTSTRAP_SYMBOLS' to `0'.
+ * bogus/cpus.h: Remove file.
+ * configfrag.ac: AC_DEFINE `NCPUS' to `1'. AH_TEMPLATE
+ `MULTIPROCESSOR'.
+ * bogus/fast_tas.h: Remove file.
+ * configfrag.ac: AC_DEFINE `FAST_TAS' to `0'.
+ * bogus/hw_footprint.h: Remove file.
+ * configfrag.ac: AC_DEFINE `HW_FOOTPRINT' to `0'.
+ * bogus/mach_counters.h: Remove file.
+ * configfrag.ac: AC_DEFINE `MACH_COUNTERS' to `0'.
+ * bogus/mach_debug.h: Remove file.
+ * configfrag.ac: AC_DEFINE `MACH_DEBUG' to `1'.
+ * bogus/mach_fixpri.h: Remove file.
+ * configfrag.ac: AC_DEFINE `MACH_FIXPRI' to `1'.
+ * bogus/mach_host.h: Remove file.
+ * configfrag.ac: AC_DEFINE `MACH_HOST' to `0'.
+ * bogus/mach_ipc_compat.h: Remove file.
+ * configfrag.ac: AC_DEFINE `MACH_IPC_COMPAT' to `1'.
+ * bogus/mach_ipc_debug.h: Remove file.
+ * configfrag.ac: AC_DEFINE `MACH_IPC_DEBUG' to `1'.
+ * bogus/mach_ipc_test.h: Remove file.
+ * configfrag.ac: AC_DEFINE `MACH_IPC_TEST' to `0'.
+ * bogus/mach_kdb.h: Remove file.
+ * configfrag.ac (--disable-kdb): AC_DEFINE `MACH_KDB' to `0'.
+ * bogus/mach_ldebug.h: Remove file.
+ * configfrag.ac: AC_DEFINE `MACH_LDEBUG' to `0'.
+ * bogus/mach_lock_mon.h: Remove file.
+ * configfrag.ac: AC_DEFINE `MACH_LOCK_MON' to `0'.
+ * bogus/mach_machine_routines.h: Remove file.
+ * configfrag.ac: Add comment about not AC_DEFINEing
+ `MACH_MACHINE_ROUTINES' to `0'.
+ * bogus/mach_mp_debug.h: Remove file.
+ * configfrag.ac: AC_DEFINE `MACH_MP_DEBUG' to `0'.
+ * bogus/mach_pagemap.h: Remove file.
+ * configfrag.ac: AC_DEFINE `MACH_PAGEMAP' to `1'.
+ * bogus/mach_pcsample.h: Remove file.
+ * configfrag.ac: AC_DEFINE `MACH_PCSAMPLE' to `1'.
+ * bogus/mach_ttd.h: Remove file.
+ * configfrag.ac: AC_DEFINE `MACH_TTD' to `0'.
+ * bogus/mach_vm_debug.h: Remove file.
+ * configfrag.ac: AC_DEFINE `MACH_VM_DEBUG' to `1'.
+ * bogus/power_save.h: Remove file.
+ * configfrag.ac: AC_DEFINE `POWER_SAVE' to `1'.
+ * bogus/simple_clock.h: Remove file.
+ * configfrag.ac: AC_DEFINE `SIMPLE_CLOCK' to `0'.
+ * bogus/stat_time.h: Remove file.
+ * configfrag.ac: AC_DEFINE `STAT_TIME' to `1'.
+ * bogus/xpr_debug.h: Remove file.
+ * configfrag.ac: AC_DEFINE `XPR_DEBUG' to `1'.
+ * i386/bogus/com.h: Remove file.
+ * i386/configfrag.ac: AC_DEFINE `NCOM' to `4'.
+ * i386/bogus/fpe.h: Remove file.
+ * i386/configfrag.ac: AC_DEFINE `FPE' to `0'.
+ * i386/bogus/lpr.h: Remove file.
+ * i386/configfrag.ac: AC_DEFINE `NLPR' to `1'.
+ * i386/bogus/mach_machine_routines.h: Remove file.
+ * i386/configfrag.ac: AC_DEFINE `MACH_MACHINE_ROUTINES' to `1'.
+ * i386/bogus/platforms.h: Remove file.
+ * i386/configfrag.ac: AC_DEFINE `AT386' to `1'.
+ * i386/bogus/rc.h: Remove file.
+ * i386/configfrag.ac: AC_DEFINE `RCLINE' to `-1' and `RCADDR' to
`0x3f8'.
+
+ * Makerules.in: Move file...
+ * Makerules.am: ... here.
+
+ * linux/configfrag.ac (AC_PREREQ, AC_INIT, AC_CONFIG_SRCDIR)
+ (AC_CONFIG_HEADER, AC_CANONICAL_HOST, hurd_SYSTYPE, AC_CONFIG_FILES)
+ (AC_OUTPUT): Don't invoke.
+ (../../version.m4, ../../Drivers.macros, ../../aclocal.m4): Don't
+ include.
+ <case "$host_cpu">: Only evaluate for i386.
+ (--disable-default-device-drivers): Remove configuraion option.
+ (LINUX_DEV, __KERNEL__): AC_DEFINE these.
+ (scsi, net, pcmcia, wireless): Remove AC_DRIVER_CLASS instantiations.
+ (device_driver_group): New shell function.
+ (AC_OPTION, AC_OPTION_nodef): New functions.
+ (linux_DRIVER): Rename function to AC_Linux_DRIVER and adapt.
+ (linux_DRIVER_nodef): Likewise to AC_Linux_DRIVER_nodef.
+ <Configuration options>: Adapt to the new functions introduced above
+ and re-position parts.
+ <Process device driver groups>: Adapt to the changes related to device
+ driver groups.
+ * linux/configure.in <AC_CONFIG_LINKS>: Move to...
+ * linux/configfrag.ac: ... here.
+ * linux/configure.in: Remove file.
+ * linux/configure: Likewise.
+ * i386/linux/Makerules.in: Likewise.
+ * Drivers.macros: Likewise.
+
+ * i386/linux/configure.ac: Move file...
+ * linux/configfrag.ac: ... here.
+ * i386/linux/configure: Remove file.
+ * i386/linux/device-drivers.h.in: Likewise.
+
+ * i386/configure.in: Move file...
+ * i386/configfrag.ac: ... here.
+ * i386/configure: Remove file.
+
+ * config.guess: Remove file.
+ * config.sub: Likewise.
+ * install-sh: Likewise.
+
+ * i386/Files: Remove file.
+ * i386/Subdirs: Likewise.
+ * linux/Files: Likewise.
+ * linux/Subdirs: Likewise.
+
+2006-10-13 Thomas Schwinge <address@hidden>
+
+ * configure.in: Move file...
+ * configure.ac: ... here.
+
+ * Makerules.in (ASFLAGS): Don't define `ASSEMBLER'.
+ * i386/i386/cpu_number.h: Check for `__ASSEMBLER__' instead of
+ `ASSEMBLER'.
+ * i386/i386/debug.h: Likewise.
+ * i386/i386/ipl.h: Likewise.
+ * i386/i386/ldt.h: Likewise.
+ * i386/i386/proc_reg.h: Likewise.
+ * i386/i386/seg.h: Likewise.
+ * i386/i386/trap.h: Likewise.
+ * i386/include/mach/i386/kern_return.h: Likewise.
+ * i386/include/mach/i386/vm_types.h: Likewise.
+ * i386/intel/pmap.h: Likewise.
+ * include/mach/boolean.h: Likewise.
+ * include/mach/boot.h: Likewise.
+ * include/mach/error.h: Likewise.
+ * kern/syscall_emulation.h: Likewise.
+
+ * configure: Regenerate.
+ * i386/configure: Likewise.
+ * i386/linux/configure: Likewise.
+ * linux/configure: Likewise.
+
+2006-10-12 Thomas Schwinge <address@hidden>
+
+ * version.m4 (AC_PACKAGE_VERSION): Let's name it `1.3.99'.
+
+ * configure: Regenerate.
+ * i386/configure: Likewise.
+ * i386/linux/configure: Likewise.
+ * linux/configure: Likewise.
+
+ * version.m4: Rewrite.
+ * configure.in: Adapt to the above.
+ * i386/configure.in: Likewise.
+ * i386/linux/configure.ac: Likewise.
+ * linux/configure.in: Likewise.
+
+2006-10-09 Thomas Schwinge <address@hidden>
+
+ * ddb/tr.h: Insert the content of `bogus/mach_assert.h' instead of
+ including it.
+ * i386/i386/loose_ends.c: Likewise.
+ * bogus/mach_assert.h: Remove file.
+
+ * bogus/panic.c: Remove file.
+
+ * linux/src/drivers/scsi/in2000.c (in2000_proc_info) [PROC_INTERFACE]:
+ Don't consider `__DATE__' and `__TIME__'.
+
+2006-10-08 Thomas Schwinge <address@hidden>
+
+ * linux/dev/drivers/scsi/scsi.h: Move file...
+ * linux/src/drivers/scsi/scsi.h: ... here, overwriting the old file.
+
+ * linux/dev/drivers/scsi/seagate.c: Move file...
+ * linux/src/drivers/scsi/seagate.c: ... here, overwriting the old file.
+
+ * linux/dev/drivers/scsi/aha152x.c: Move file...
+ * linux/src/drivers/scsi/aha152x.c: ... here, overwriting the old file.
+
+ * linux/dev/drivers/scsi/sr.c: Move file...
+ * linux/src/drivers/scsi/sr.c: ... here, overwriting the old file.
+
+ * linux/dev/drivers/scsi/sd_ioctl.c: Move file...
+ * linux/src/drivers/scsi/sd_ioctl.c: ... here, overwriting the old file.
+
+ * linux/dev/drivers/scsi/sd.c: Move file...
+ * linux/src/drivers/scsi/sd.c: ... here, overwriting the old file.
+
+ * linux/dev/drivers/scsi/hosts.c: Remove file.
+ * linux/dev/drivers/scsi/scsi.c: Likewise.
+
+ * linux/dev/drivers/block/ide.c: Move file...
+ * linux/src/drivers/block/ide.c: ... here, overwriting the old file.
+
+ * linux/dev/drivers/block/ide-cd.c: Remove file.
+ * linux/src/drivers/block/ide-cd.c (cdrom_sleep): Don't define function
+ `#ifndef MACH'.
+
+2006-10-07 Thomas Schwinge <address@hidden>
+
+ * i386/linux/configure: Regernerate.
+ * i386/linux/device-drivers.h.in: Likewise.
+
+ * Drivers.macros (AC_DRIVER, AC_DRIVER_nodef): Rewrite to allow options
+ with dashes in them, make it usable more universally and enhance the
+ generated comments in header files.
+ * i386/linux/configure.ac (linux_DRIVER, linux_DRIVER_nodef): Enhance
+ DESCRIPTION.
+ (u1434f): Rename to `u14-34f'.
+ (smcultra): Rename to `smc-ultra'.
+ (smcultra32): Rename to `smc-ultra32'.
+ (hpplus): Rename to `hp-plus'.
+ (ne2kpci): Rename to `ne2k-pci'.
+ (viarhine): Rename to `via-rhine'.
+ (intelgige): Rename to `intel-gige'.
+ (winbond840): Rename to `winbond-840'.
+ (AC_PCMCIA_OPTION): Remove function.
+ (pcmcia-isa): Use `AC_DRIVER' instead of `AC_PCMCIA_OPTION'.
+ * i386/README-Drivers: Update accordingly.
+
+2006-10-03 Thomas Schwinge <address@hidden>
+
+ [task #5941 -- Linker script for GNU Mach]
+
+ * Makefile.in (kernel.o): Remove `$(systype)-objfiles-prepend' hackery.
+ * i386/Makefile.in (sysdep.a): Likewise.
+ * i386/Makerules.in: Likewise.
+ (LDFLAGS-kernel): Point to the linker script.
+ * i386/i386at/boothdr.S (_start): Don't put into `.text', but into
+ `.text.start' instead.
+ * i386/ldscript: Change to put `.text' at 0x100000 and put
+ `.text.start' first into `.text'.
+
+ * i386/ldscript: New file, copied from `/lib/ldscripts/elf_i386.x' of a
+ GNU Binutils 2.16.1 installation.
+
+2006-09-25 Stefan Siegl <address@hidden>
+
+ * linux/dev/glue/net.c (device_get_status): Reworked to not read
+ from STATUS. Fill `struct iw_point' correctly if necessary.
+
+2006-09-23 Stefan Siegl <address@hidden>
+
+ * i386/linux/configure: Regenerate.
+ * i386/linux/device-drivers.h.in: Likewise.
+
+ * i386/linux/configure.ac (AC_PCMCIA_OPTION): New function.
+ (--disable-pcmcia-isa): New configuration option to disable ISA-bus
+ support in the pcmcia core, which is otherwise enabled now by default.
+ * doc/mach.texi (Configuration): Briefly document the new configuration
+ option.
+ * i386/README-Drivers: Likewise.
+
+2006-09-20 Thomas Schwinge <address@hidden>
+
+ * configure: Regenerate.
+ * i386/configure: Likewise.
+ * i386/linux/configure: Likewise.
+ * i386/linux/device-drivers.h.in: Likewise.
+
+ * Drivers.macros (AC_DRIVER_ALIAS): Remove definition.
+ (AC_DRIVER): Extend to take a `description' parameter and consider
+ `$enable_default_device_drivers'.
+ (AC_DRIVER_nodef): New definition.
+ * configure.in (options kdb, kmsg): Remove redundancy.
+ * i386/configure.in (option default-device-drivers): New option.
+ (option lpr): Consider `$enable_default_device_drivers'.
+ * i386/linux/configure.ac: Rework substantially. Remove all aliases.
+ Rename some of the device driver options.
+ (option default-device-drivers): New option.
+ (linux_DRIVER): Take care about a `description' parameter and don't
+ invoke AC_DRIVER_ALIAS.
+ (linux_DRIVER_nodef): New definition.
+ Adapt all usages of AC_DRIVER and linux_DRIVER to provide a
+ `description' parameter.
+ (g_NCR5380, NCR53c406a, eata_dma, wavelan, atp): Change from AC_DRIVER
+ to AC_DRIVER_nodef to have these device drivers disabled by default.
+ * doc/mach.texi: Add a note about the outdatedness to the configuration
+ option table.
+ * i386/README-Drivers: Update.
+
+2006-09-19 Samuel Thibault <address@hidden>
+
+ [bug #17338 -- GNU Mach vs. GCC 4.1]
+ * i386/i386/seg.h (struct pseudo_descriptor): Pack structure and
+ move the padding field to the end.
+ (lgdt): Pass the whole structure to the lgdt assembly command.
+ (lidt): Likewise.
+
+2006-08-06 Thomas Schwinge <address@hidden>
+
+ * DEVELOPMENT: Update.
+
+2006-07-31 Stefan Siegl <address@hidden>
+
+ * doc/mach.texi (Configuration): Document the new PCMCIA drivers a bit
+ more.
+ * i386/README-Drivers: Likewise.
+
+2006-07-27 Thomas Schwinge <address@hidden>
+
+ * i386/linux/configure: Regenerate.
+
+ * i386/linux/configure.ac: Pull in the pcmcia code only if really
+ needed.
+
+ * doc/mach.texi (Configuration): Very briefly document the new drivers.
+ * i386/README-Drivers: Likewise.
+
+ * linux/dev/include/linux/types.h (_MACH_SA_SYS_TYPES_H_): Define.
+
+ * i386/linux/configure: Regenerate.
+ * i386/linux/device-drivers.h.in: Likewise.
+
+2006-07-27 Stefan Siegl <address@hidden>
+
+ * i386/linux/configure.ac (pcmcia, wireless): New driver classes.
+ (i82365, 3c574_cs, 3c589_cs, axnet_cs, fmvj18x_cs, nmclan_cs, pcnet_cs)
+ (smc91c92_cs, xirc2ps_cs, orinoco_cs): New drivers.
+ * i386/linux/Makefile.in (linux-pcmcia-cs-modules-files)
+ (linux-pcmcia-cs-clients-files, linux-pcmcia-cs-wireless-files): New
+ variables. Add `vpath's to the files locations.
+ (all-linux-files): Add the three new variables.
+ (linux-pcmcia-cs-modules-flags, linux-pcmcia-cs-clients-flags)
+ (linux-pcmcia-cs-wireless-flags): New variables.
+ (linux-flags): Add code to handle the above files and flags.
+
+ * i386/i386at/i386at_ds_routines.c (emulation_list)
+ [LINUX_DEV && CONFIG_INET && CONFIG_PCMCIA]: Add the Linux pcmcia
+ emulation structure.
+ * linux/dev/glue/net.c: Include <linux/wireless.h>.
+ (device_get_status): Rewrite function.
+ (device_set_status): New function.
+ (linux_net_emulation_ops): Add `device_set_status' at the appropriate
+ position.
+ * linux/dev/init/main.c (linux_init) [CONFIG_PCMCIA]: Call pcmcia_init.
+
+ * linux/pcmcia-cs/glue/ds.c: New file.
+ * linux/pcmcia-cs/glue/pcmcia.c: Likewise.
+ * linux/pcmcia-cs/glue/pcmcia_glue.h: Likewise.
+ * linux/pcmcia-cs/glue/wireless_glue.h: Likewise.
+
+ * linux/pcmcia-cs/clients/xirc2ps_cs.c (busy_loop): Replace the code by
+ a call to __udelay.
+ * linux/pcmcia-cs/include/linux/init.h: Adapt to our Linux environment.
+ * linux/pcmcia-cs/include/linux/slab.h: Use `#include', not
+ `#include_next'.
+ * linux/pcmcia-cs/include/pcmcia/mem_op.h: Adapt to our Linux
+ environment and fix GCC 4.0 complaints.
+ * linux/pcmcia-cs/include/pcmcia/version.h: Always assume that
+ CONFIG_PCMCIA is not defined.
+ * linux/pcmcia-cs/modules/cs.c (init_pcmcia_cs): Don't make it static.
+ * linux/pcmcia-cs/modules/ds.c: Use some magic to avoid duplicate
+ definition `io_req_t'.
+ (ds_open, ds_release, ds_read, ds_write, ds_select, ds_poll, ds_fops):
+ Hide functions if MACH is defined.
+ Likewise for the module handling code.
+ (ds_ioctl): Use plain `memcpy' if MACH is defined.
+ (init_pcmcia_ds): Don't register charcater devices if MACH is defined.
+ Include "../glue/ds.c".
+ * linux/pcmcia-cs/modules/i82365.c (test_irq): Adapt to GNU Mach.
+ (init_i82365): Don't make it static.
+ * linux/pcmcia-cs/modules/pci_fixup.c (pci_devices): Don't define if
+ MACH is defined.
+ * linux/pcmcia-cs/wireless/orinoco.c: Adapt to our Linux environment.
+
+2006-07-27 Thomas Schwinge <address@hidden>
+
+ Import a number of files from the pcmcia-cs package, version 3.2.8,
+ available from <http://pcmcia-cs.sourceforge.net/>.
+
+ * linux/pcmcia-cs/clients/3c574_cs.c: Import file.
+ * linux/pcmcia-cs/clients/3c589_cs.c: Likewise.
+ * linux/pcmcia-cs/clients/ax8390.h: Likewise.
+ * linux/pcmcia-cs/clients/axnet_cs.c: Likewise.
+ * linux/pcmcia-cs/clients/fmvj18x_cs.c: Likewise.
+ * linux/pcmcia-cs/clients/nmclan_cs.c: Likewise.
+ * linux/pcmcia-cs/clients/ositech.h: Likewise.
+ * linux/pcmcia-cs/clients/pcnet_cs.c: Likewise.
+ * linux/pcmcia-cs/clients/smc91c92_cs.c: Likewise.
+ * linux/pcmcia-cs/clients/xirc2ps_cs.c: Likewise.
+ * linux/pcmcia-cs/include/linux/crc32.h: Likewise.
+ * linux/pcmcia-cs/include/linux/init.h: Likewise.
+ * linux/pcmcia-cs/include/linux/slab.h: Likewise.
+ * linux/pcmcia-cs/include/pcmcia/bulkmem.h: Likewise.
+ * linux/pcmcia-cs/include/pcmcia/bus_ops.h: Likewise.
+ * linux/pcmcia-cs/include/pcmcia/ciscode.h: Likewise.
+ * linux/pcmcia-cs/include/pcmcia/cisreg.h: Likewise.
+ * linux/pcmcia-cs/include/pcmcia/cistpl.h: Likewise.
+ * linux/pcmcia-cs/include/pcmcia/cs.h: Likewise.
+ * linux/pcmcia-cs/include/pcmcia/cs_types.h: Likewise.
+ * linux/pcmcia-cs/include/pcmcia/driver_ops.h: Likewise.
+ * linux/pcmcia-cs/include/pcmcia/ds.h: Likewise.
+ * linux/pcmcia-cs/include/pcmcia/mem_op.h: Likewise.
+ * linux/pcmcia-cs/include/pcmcia/ss.h: Likewise.
+ * linux/pcmcia-cs/include/pcmcia/version.h: Likewise.
+ * linux/pcmcia-cs/modules/bulkmem.c: Likewise.
+ * linux/pcmcia-cs/modules/cirrus.h: Likewise.
+ * linux/pcmcia-cs/modules/cistpl.c: Likewise.
+ * linux/pcmcia-cs/modules/cs.c: Likewise.
+ * linux/pcmcia-cs/modules/cs_internal.h: Likewise.
+ * linux/pcmcia-cs/modules/ds.c: Likewise.
+ * linux/pcmcia-cs/modules/ene.h: Likewise.
+ * linux/pcmcia-cs/modules/i82365.c: Likewise.
+ * linux/pcmcia-cs/modules/i82365.h: Likewise.
+ * linux/pcmcia-cs/modules/o2micro.h: Likewise.
+ * linux/pcmcia-cs/modules/pci_fixup.c: Likewise.
+ * linux/pcmcia-cs/modules/ricoh.h: Likewise.
+ * linux/pcmcia-cs/modules/rsrc_mgr.c: Likewise.
+ * linux/pcmcia-cs/modules/smc34c90.h: Likewise.
+ * linux/pcmcia-cs/modules/ti113x.h: Likewise.
+ * linux/pcmcia-cs/modules/topic.h: Likewise.
+ * linux/pcmcia-cs/modules/vg468.h: Likewise.
+ * linux/pcmcia-cs/modules/yenta.h: Likewise.
+ * linux/pcmcia-cs/wireless/hermes.c: Likewise.
+ * linux/pcmcia-cs/wireless/hermes.h: Likewise.
+ * linux/pcmcia-cs/wireless/hermes_rid.h: Likewise.
+ * linux/pcmcia-cs/wireless/ieee802_11.h: Likewise.
+ * linux/pcmcia-cs/wireless/orinoco.c: Likewise.
+ * linux/pcmcia-cs/wireless/orinoco.h: Likewise.
+ * linux/pcmcia-cs/wireless/orinoco_cs.c: Likewise.
+
+2006-07-24 Thomas Schwinge <address@hidden>
+
+ * Makerules.in (%.h %_user.c): Add `%.cli.d' to the target list.
+ Create these files by specifying `-MD' as a flag for mig and rename the
+ resulting files as needed.
+ Include these `*.cli.d' files instead of `*.migu.d' files.
+ (%_interface.h %_server.c): Likewise for `%.srv.d' / `*.migs.d'.
+ (%.migs.d, %.migu.d): Remove targets.
+ * Makefile.in (clean): Adapt to the above.
+ * i386/Makefile.in (clean): Likewise.
+
+2006-06-30 Samuel Thibault <address@hidden>
+
+ * i386/i386at/kd_mouse.c (mouse_char_in, mouse_char) Remove variables.
+ (mouse_char_index) New variable.
+ (mouse_handle_byte, kd_mouse_read): Use MOUSEBUF instead of MOUSE_CHAR
+ for storing incoming command characters.
+ (kd_mouse_read_reset): New function.
+ (ibm_ps2_mouse_open, ibm_ps2_mouse_close): Call new kd_mouse_read_reset
+ function.
+
+2006-06-09 Stefan Siegl <address@hidden>
+
+ * linux/dev/include/asm-i386/uaccess.h: New dummy file.
+ * linux/dev/include/linux/pm.h: Likewise.
+ * linux/dev/include/linux/threads.h: Likewise.
+ * linux/src/include/linux/symtab_begin.h: New file from Linux 2.0.40.
+ * linux/src/include/linux/symtab_end.h: Likewise.
+ * linux/src/include/linux/module.h: Update from Linux 2.0.40 with minor
+ changes.
+ * linux/src/include/linux/list.h: New file from Linux 2.2.26.
+ * linux/src/include/linux/kcomp.h: Likewise with minor changes.
+ * linux/src/include/linux/wait.h: Update from Linux 2.2.26.
+ * linux/src/include/linux/wireless.h: Likewise.
+ * linux/src/include/asm-i386/bitops.h [__KERNEL__] (ffs, hweight32)
+ (hweight16, hweight8): Copy from Linux 2.2.26.
+
+ * kern/printf.c (_doprnt): Support printing of pointer addresses.
+
+2006-05-14 Roland McGrath <address@hidden>
+
+ [sync from HEAD, 2002-06-17]
+ * device/if_hdr.h: Replace ancient UCB copyright terms with current
+ approved UCB terms.
+ * include/sys/reboot.h: Likewise.
+ * include/device/disk_status.h: Likewise.
+ * include/device/tape_status.h: Likewise.
+ * device/net_io.c: Remove advertising clause from UCB copyright terms.
+ * include/device/audio_status.h: Likewise.
+ * include/device/bpf.h: Likewise.
+
+2006-05-14 Thomas Schwinge <address@hidden>
+
+ * i386/i386at/autoconf.c (bus_device_init) <lpr> [! LINUX_DEV]: Depend
+ on `MACH_LPR' instead.
+ * i386/i386at/lpr.c: Fix obsolescent `#else' / `#endif' syntax.
+
+2006-05-12 Stefan Siegl <address@hidden>
+
+ * linux/dev/glue/kmem.c (vfree): Panic if `vmalloc_list_lookup' did
+ NOT succeed.
+
+2006-05-08 Thomas Schwinge <address@hidden>
+
+ * DEVELOPMENT: Document Samuel's patch.
+
+2006-05-08 Samuel Thibault <address@hidden>
+
+ [bug #7118 -- GNU Mach can't handle 1G memory]
+ * i386/i386at/model_dep.c (mem_size_init): Limit memory to what can
+ actually be used (minus a little extra for virtual mappings).
+ * i386/intel/pmap.c (pmap_bootstrap): Extend the virtual mapping area
+ according to memory size for at least being able to manage it. But
+ look out for wrap and limit it to kernel adresses. Remove duplicate
+ computing.
+
+2006-04-27 Richard Braun <address@hidden>
+ Manuel Menal <address@hidden>
+
+ * device/if_hdr.h (struct ifnet): Added new members `if_snd_port_list'
+ and `if_snd_port_list_lock'.
+ * device/net_io.c: Reworked to improve BPF support. Filters can be
+ applied to ingress packets, egress packets, or both.
+ * device/subrs.c: Initialize the `if_snd_port_list' and
+ `if_snd_port_list_lock'.
+ * include/device/bpf.h [0]: Enable unconditionally.
+ Include <sys/types.h>.
+ (BPF_IN, BPF_OUT): New macros.
+ * include/device/net_status.h (NETF_TYPE_MASK, NETF_IN, NETF_OUT): New
+ macros.
+ (struct net_rcv_msg): New member `sent'.
+ * linux/dev/glue/net.c: Mark ingress packets as received and inject
+ egress packets into the packet filters.
+
+2006-04-26 Thomas Schwinge <address@hidden>
+
+ * Makefile.in: Replace `make' with `$(MAKE)'.
+ * i386/Makefile.in: Likewise.
+ Reported by Leonardo Lopes Pereira <address@hidden>.
+
+2006-04-08 Thomas Schwinge <address@hidden>
+
+ * i386/Makefile.in (INCLUDES): Don't add `$(srcdir)/bogus'.
+ * i386/Makerules.in (INCLUDES): Add
+ `$(abs_top_srcdir)/$(systype)/bogus'.
+ Reported by Samuel Thibault <address@hidden>.
+
+2006-04-02 Thomas Schwinge <address@hidden>
+
+ * Makerules.in (%_user.c, %_server.c): Those are `.PRECIOUS'.
+ (%.migs.d, %.migu.d): New targets.
+ (%.migs_d, %.migu_d, %.migsh_d, %.miguh_d): Remove targets.
+ Adapt the `include's to the renamed targets.
+ * Makefile.in (clean): Adapt to the renamed targets.
+ * i386/Makefile.in (clean): Likewise.
+
+ * i386/Makefile.in (boothdr.o): New target.
+
+2006-03-21 Thomas Schwinge <address@hidden>
+
+ * Makefile.in (clean): Also remove `kernel.gz', `kernel.stripped' and
+ `kernel.stripped.gz'.
+
+ * Makefile.in (kernel.o): Handle `$(systype)-objfiles-prepend'.
+ * i386/Makefile.in (sysdep.a): Likewise.
+ * i386/Makerules.in (kernel-objfiles-prepend): Transform variable into
+ `$(systype)-objfiles-prepend'.
+ (kernel.o): Remove target.
+
+2006-03-20 Thomas Schwinge <address@hidden>
+
+ * DEVELOPMENT: Document the NORMA removal.
+
+2006-03-20 Leonardo Lopes Pereira <address@hidden>
+
+ Remove unused and unsupported code. Consult the file `DEVELOPMENT'
+ for details.
+
+ [patch #4982 -- remove of unused / unsuported functions of
+ gnumach-1-branch]
+ * bogus/norma_device.h: Remove file.
+ * bogus/norma_ether.h: Likewise.
+ * bogus/norma_ipc.h: Likewise.
+ * bogus/norma_task.h: Likewise.
+ * bogus/norma_vm.h: Likewise.
+ * include/mach/mach_norma.defs: Likewise.
+ * include/mach/norma_task.defs: Likewise.
+ * include/mach/norma_special_ports.h: Likewise.
+ * Makefile.in (bogus-files): Remove `norma_device.h', `norma_ether.h',
+ `norma_ipc.h', `norma_task.h' and `norma_vm.h'.
+ (mach-headers): Remove `mach_norma.defs', `norma_task.defs' and
+ `norma_special_ports.h'.
+ * device/ds_routines.c: Don't include <norma_device.h> anymore and
+ adapt all users of NORMA_DEVICE as if it were always defined to `0'.
+ * device/net_io.c: Likewise for <norma_ether.h>, NORMA_ETHER.
+ * kern/machine.c: Likewise.
+ * ddb/db_command.c: Likevise for <norma_ipc.h>, NORMA_IPC.
+ * ipc/ipc_init.c: Likewise.
+ * ipc/ipc_kmsg.c: Likewise.
+ * ipc/ipc_kmsg.h: Likewise.
+ * ipc/ipc_mqueue.c: Likewise.
+ * ipc/ipc_notify.c: Likewise.
+ * ipc/ipc_port.c: Likewise.
+ * ipc/ipc_port.h: Likewise.
+ * ipc/ipc_space.c: Likewise.
+ * ipc/ipc_space.h: Likewise.
+ * ipc/mach_msg.c: Likewise.
+ * kern/ast.c: Likewise.
+ * kern/debug.c: Likewise.
+ * kern/exception.c: Likewise.
+ * kern/startup.c: Likewise.
+ * vm/memory_object.c: Likewise.
+ * vm/vm_map.c: Likewise.
+ * kern/ipc_kobject.c: Likewise for <norma_task.h>, NORMA_TASK.
+ * kern/task.c: Likewise.
+ * kern/task.h: Likewise.
+ * ddb/db_command.c: Likewise for <norma_vm.h>, NORMA_VM.
+ * device/dev_pager.c: Likewise.
+ * include/mach/mach_types.defs: Likewise.
+ * include/mach/mach_types.h: Likewise.
+ * include/mach/memory_object_default.defs: Likewise.
+ * include/mach/memory_object.defs: Likewise.
+ * ipc/ipc_kmsg.c: Likewise.
+ * kern/ipc_kobject.c: Likewise.
+ * kern/ipc_mig.c: Likewise.
+ * kern/startup.c: Likewise.
+ * vm/memory_object.c: Likewise.
+ * vm/vm_object.c: Likewise.
+ * vm/vm_object.h: Likewise.
+ * vm/vm_pageout.c: Likewise.
+
+2006-03-19 Thomas Schwinge <address@hidden>
+
+ * DEVELOPMENT: Document the FIPC removal.
+
+2006-03-19 Leonardo Lopes Pereira <address@hidden>
+
+ Remove unused and unsupported code. Consult the file `DEVELOPMENT'
+ for details.
+
+ [patch #4982 -- remove of unused / unsuported functions of
+ gnumach-1-branch]
+ * ipc/fipc.c: Remove file.
+ * ipc/fipc.h: Likewise.
+ * Makefile.in (ipc-cfiles): Remove `fipc.c'.
+ (ipc-files): Remove `fipc.h'.
+ * device/device_init.c [FIPC]: Remove code.
+ * device/net_io.c [FIPC]: Likewise.
+ * include/mach/syscall_sw.h [FIPC]: Likewise.
+ * kern/syscall_sw.c [FIPC]: Likewise.
+
+2006-03-15 Thomas Schwinge <address@hidden>
+
+ * configure.in: Check for strip and gzip.
+ * configure: Regenerated.
+ * Makerules.in (GZIP, STRIP): New variables.
+ (%.gz, %.stripped): New targets.
+
+2006-03-04 Roland McGrath <address@hidden>
+
+ * Makefile.in (DEFS): Substitute once and use the variable elsewhere.
+
+2006-03-04 Samuel Thibault <address@hidden>
+
+ [patch #4737 -- User TSS fixup]
+ * i386/i386/iopb.c: Include "vm_param.h".
+ (io_tss_init): Fix address and limit of user TSS.
+
+2006-03-04 Thomas Schwinge <address@hidden>
+
+ Remove unused and unsupported code. Consult the file
+ `DEVELOPMENT' for details. Partly based on suggestions by
+ Gianluca Guida <address@hidden>.
+
+ * i386/bogus/par.h: Remove file.
+ * i386/i386at/if_par.c: Likewise.
+ * i386/i386at/if_par.h: Likewise.
+ * i386/i386at/conf.c: Don't include <par.h> anymore and adapt all users
+ of NPAR as if it were always defined to `0'.
+ * i386/i386at/lpr.c: Likewise.
+
+ * i386/bogus/de6c.h: Remove file.
+ * i386/i386at/if_de6c.c: Likewise.
+ * i386/i386at/if_de6c.h: Likewise.
+ * i386/i386at/if_de6s.S: Likewise.
+ * i386/i386at/conf.c: Don't include <de6c.h> anymore and adapt all
+ users of NDE6C as if it were always defined to `0'.
+ * i386/i386at/lpr.c: Likewise.
+
+2006-02-20 Thomas Schwinge <address@hidden>
+
+ Remove unused and unsupported code. Consult the file
+ `DEVELOPMENT' for details. Partly based on suggestions by
+ Gianluca Guida <address@hidden>.
+
+ * i386/bogus/blit.h: Remove file.
+ * i386/i386at/blit.c: Likewise.
+ * i386/i386at/blitreg.h: Likewise.
+ * i386/i386at/blituser.h: Likewise.
+ * i386/i386at/blitvar.h: Likewise.
+ * i386/i386at/conf.c: Don't include <blit.h> anymore and adapt all
+ users of NBLIT as if it were always defined to `0'.
+ * i386/i386at/kd.c: Likewise.
+ (blit_init): Remove definition.
+ (blit_present): Likewise and adapt all users as if it were always
+ defined to `FALSE'.
+ * i386/Makefile.in (i386at-files): Remove `blit.c'.
+
+ * bogus/net_atm.h: Remove file.
+ * Makefile.in (bogus-files): Remove `net_atm.h'.
+ * kern/syscall_sw.c: Don't include <net_atm.h> anymore and adapt all
+ users of NET_ATM as if it were always defined to `0'.
+ * kern/task.c: Likewise.
+ * kern/task.h: Likewise.
+ * kern/thread.c: Likewise.
+ * kern/thread.h: Likewise.
+
+ * util/about_to_die.c: Remove file.
+ * util/config.h: Likewise.
+ * util/cpu.c: Likewise.
+ * util/cpu.h: Likewise.
+ * util/cpu_init.c: Likewise.
+ * util/cpu_subs.h: Likewise.
+ * util/debug.h: Likewise.
+ * util/die.c: Likewise.
+ * util/phys_mem.h: Likewise.
+ * util/ref_count.h: Likewise.
+ * util/cpus.h: Move from here...
+ * bogus/cpus.h: ... to here.
+ * Makefile.in (bogus-files): Add `cpus.h'.
+ (util-cfiles): Only contain `putchar.c' and `puts.c'.
+ (util-files): Only contain `$(util-cfiles)'.
+
+ * i386/util/NOTES: Remove file.
+ * i386/util/anno.c: Likewise.
+ * i386/util/anno.h: Likewise.
+ * i386/util/cpu.h: Likewise.
+ * i386/util/cpu_subs.h: Likewise.
+ * i386/util/cpu_tables_init.c: Likewise.
+ * i386/util/cpu_tables_load.c: Likewise.
+ * i386/util/crtn.S: Likewise.
+ * i386/util/debug.h: Likewise.
+ * i386/util/gdt.c: Likewise.
+ * i386/util/gdt.h: Likewise.
+ * i386/util/gdt_sels.h: Likewise.
+ * i386/util/i16/debug.h: Likewise.
+ * i386/util/i16/i16.h: Likewise.
+ * i386/util/i16/i16_die.c: Likewise.
+ * i386/util/i16/i16_gdt_init_temp.c: Likewise.
+ * i386/util/i16/i16_nanodelay.c: Likewise.
+ * i386/util/i16/i16_puts.c: Likewise.
+ * i386/util/i16/i16_writehex.c: Likewise.
+ * i386/util/i386_asm.sym: Likewise.
+ * i386/util/idt.c: Likewise.
+ * i386/util/idt.h: Likewise.
+ * i386/util/idt_inittab.S: Likewise.
+ * i386/util/idt_inittab.h: Likewise.
+ * i386/util/ldt.h: Likewise.
+ * i386/util/trap.h: Likewise.
+ * i386/util/trap_asm.sym: Likewise.
+ * i386/util/trap_dump.c: Likewise.
+ * i386/util/trap_dump_die.c: Likewise.
+ * i386/util/trap_handler.S: Likewise.
+ * i386/util/trap_return.S: Likewise.
+ * i386/util/tss.c: Likewise.
+ * i386/util/tss.h: Likewise.
+ * i386/util/tss_dump.c: Likewise.
+ * i386/util/vm_param.h: Likewise.
+
+ * i386/pc/NOTES: Remove file.
+ * i386/pc/debug.h: Likewise.
+ * i386/pc/exit.c: Likewise.
+ * i386/pc/gdt.h: Likewise.
+ * i386/pc/gdt_sels.h: Likewise.
+ * i386/pc/i16/i16_a20.c: Likewise.
+ * i386/pc/i16/i16_a20.h: Likewise.
+ * i386/pc/i16/i16_bios.h: Likewise.
+ * i386/pc/i16/i16_exit.c: Likewise.
+ * i386/pc/i16/i16_ext_mem.c: Likewise.
+ * i386/pc/i16/i16_init.c: Likewise.
+ * i386/pc/i16/i16_main.c: Likewise.
+ * i386/pc/i16/i16_pic.c: Likewise.
+ * i386/pc/i16/i16_putchar.c: Likewise.
+ * i386/pc/i16/i16_raw.c: Likewise.
+ * i386/pc/i16/i16_raw_test_a20.S: Likewise.
+ * i386/pc/i16/i16_real_int.S: Likewise.
+ * i386/pc/i16/i16_switch.h: Likewise.
+ * i386/pc/i16/phys_mem_collect.c: Likewise.
+ * i386/pc/i16/phys_mem_sources.h: Likewise.
+ * i386/pc/i16/raw_exit.c: Likewise.
+ * i386/pc/i16/raw_real_int.c: Likewise.
+ * i386/pc/ipl.h: Likewise.
+ * i386/pc/irq.h: Likewise.
+ * i386/pc/irq_list.h: Likewise.
+ * i386/pc/pc_asm.sym: Likewise.
+ * i386/pc/phys_mem.h: Likewise.
+ * i386/pc/phys_mem_add.c: Likewise.
+ * i386/pc/pic.c: Likewise.
+ * i386/pc/pic.h: Likewise.
+ * i386/pc/putchar.c: Likewise.
+ * i386/pc/real.h: Likewise.
+ * i386/pc/real_tss.c: Likewise.
+ * i386/pc/real_tss.h: Likewise.
+ * i386/pc/real_tss_def.S: Likewise.
+ * i386/pc/rv86/config.h: Likewise.
+ * i386/pc/rv86/gdt_sels.h: Likewise.
+ * i386/pc/rv86/idt_irq_init.c: Likewise.
+ * i386/pc/rv86/rv86_real_int.c: Likewise.
+ * i386/pc/rv86/rv86_real_int_asm.S: Likewise.
+ * i386/pc/rv86/rv86_reflect_irq.S: Likewise.
+ * i386/pc/rv86/rv86_trap_handler.S: Likewise.
+ * i386/pc/rv86/trap_handler.S: Likewise.
+
+ * i386/imps/Makefile.in: Remove file.
+ * i386/imps/apic.h: Likewise.
+ * i386/imps/cpu_number.h: Likewise.
+ * i386/imps/cpus.h: Likewise.
+ * i386/imps/imps.c: Likewise.
+ * i386/imps/impsasm.sym: Likewise.
+
+ * i386/dos/dos_buf.c: Remove file.
+ * i386/dos/dos_check_err.c: Likewise.
+ * i386/dos/dos_close.c: Likewise.
+ * i386/dos/dos_fstat.c: Likewise.
+ * i386/dos/dos_gettimeofday.c: Likewise.
+ * i386/dos/dos_io.h: Likewise.
+ * i386/dos/dos_open.c: Likewise.
+ * i386/dos/dos_read.c: Likewise.
+ * i386/dos/dos_rename.c: Likewise.
+ * i386/dos/dos_seek.c: Likewise.
+ * i386/dos/dos_tcgetattr.c: Likewise.
+ * i386/dos/dos_unlink.c: Likewise.
+ * i386/dos/dos_write.c: Likewise.
+ * i386/dos/i16/gdt.h: Likewise.
+ * i386/dos/i16/gdt_sels.h: Likewise.
+ * i386/dos/i16/i16_crt0.S: Likewise.
+ * i386/dos/i16/i16_crt0.h: Likewise.
+ * i386/dos/i16/i16_dos.h: Likewise.
+ * i386/dos/i16/i16_dos_mem.c: Likewise.
+ * i386/dos/i16/i16_exit.c: Likewise.
+ * i386/dos/i16/i16_main.c: Likewise.
+ * i386/dos/i16/i16_putchar.c: Likewise.
+ * i386/dos/i16/i16_vcpi.c: Likewise.
+ * i386/dos/i16/i16_xms.c: Likewise.
+ * i386/dos/i16/idt.h: Likewise.
+ * i386/dos/i16/phys_mem_sources.h: Likewise.
+ * i386/dos/putchar.c: Likewise.
+
+ * chips/atm.c: Remove file.
+ * chips/atmreg.h: Likewise.
+ * chips/audio.c: Likewise.
+ * chips/audio_config.h: Likewise.
+ * chips/audio_defs.h: Likewise.
+ * chips/bt431.c: Likewise.
+ * chips/bt431.h: Likewise.
+ * chips/bt455.c: Likewise.
+ * chips/bt455.h: Likewise.
+ * chips/bt459.c: Likewise.
+ * chips/bt459.h: Likewise.
+ * chips/bt478.c: Likewise.
+ * chips/bt478.h: Likewise.
+ * chips/build_font.c: Likewise.
+ * chips/cfb_hdw.c: Likewise.
+ * chips/cfb_misc.c: Likewise.
+ * chips/dc503.c: Likewise.
+ * chips/dc503.h: Likewise.
+ * chips/dtop.h: Likewise.
+ * chips/dtop_handlers.c: Likewise.
+ * chips/dtop_hdw.c: Likewise.
+ * chips/dz_7085.h: Likewise.
+ * chips/dz_defs.h: Likewise.
+ * chips/dz_hdw.c: Likewise.
+ * chips/eccreg.h: Likewise.
+ * chips/fb_hdw.c: Likewise.
+ * chips/fb_misc.c: Likewise.
+ * chips/fdc_82077.h: Likewise.
+ * chips/fdc_82077_hdw.c: Likewise.
+ * chips/frc.c: Likewise.
+ * chips/ims332.c: Likewise.
+ * chips/ims332.h: Likewise.
+ * chips/isdn_79c30.h: Likewise.
+ * chips/isdn_79c30_hdw.c: Likewise.
+ * chips/kernel_font.c: Likewise.
+ * chips/kernel_font.data: Likewise.
+ * chips/lance.c: Likewise.
+ * chips/lance.h: Likewise.
+ * chips/lance_mapped.c: Likewise.
+ * chips/lk201.c: Likewise.
+ * chips/lk201.h: Likewise.
+ * chips/mc_clock.c: Likewise.
+ * chips/mc_clock.h: Likewise.
+ * chips/mouse.c: Likewise.
+ * chips/nc.c: Likewise.
+ * chips/nc.h: Likewise.
+ * chips/nw.h: Likewise.
+ * chips/nw_mk.c: Likewise.
+ * chips/nw_mk.h: Likewise.
+ * chips/pm_defs.h: Likewise.
+ * chips/pm_hdw.c: Likewise.
+ * chips/pm_misc.c: Likewise.
+ * chips/scc_8530.h: Likewise.
+ * chips/scc_8530_hdw.c: Likewise.
+ * chips/screen.c: Likewise.
+ * chips/screen.h: Likewise.
+ * chips/screen_defs.h: Likewise.
+ * chips/screen_switch.c: Likewise.
+ * chips/screen_switch.h: Likewise.
+ * chips/serial_console.c: Likewise.
+ * chips/serial_defs.h: Likewise.
+ * chips/sfb_hdw.c: Likewise.
+ * chips/sfb_misc.c: Likewise.
+ * chips/spans.c: Likewise.
+ * chips/spans.h: Likewise.
+ * chips/tca100.c: Likewise.
+ * chips/tca100.h: Likewise.
+ * chips/tca100_if.c: Likewise.
+ * chips/tca100_if.h: Likewise.
+ * chips/vs42x_rb.h: Likewise.
+ * chips/xcfb_hdw.c: Likewise.
+ * chips/xcfb_misc.c: Likewise.
+ * chips/xcfb_monitor.h: Likewise.
+ * Makefile.in (chips-files): Only contain `busses.c' and `busses.h'.
+ * kern/syscall_sw.c: Don't include <chips/nw_mk.h> anymore.
+
+ * i386/i386at/asm_startup.h: Remove file.
+ * i386/i386at/phys_mem_grab_page.c: Likewise.
+ * i386/Makefile.in (i386at-files): Remove `phys_mem_grab_page.c'.
+
+ * i386/bogus/evc.h: Remove file.
+ * i386/i386at/kd.c: Don't include <evc.h> anymore and adapt all users
+ of NEVC as if it were always defined to `0'.
+ (evc1init): Remove definition and adapt all users as if it were always
+ defined to `FALSE'.
+
+ * i386/bogus/nscsi.h: Remove file.
+ * i386/i386at/model_dep.c: Don't include <nscsi.h> anymore and adapt
+ all users of NSCSI as if it were always defined to `0'.
+ (use_all_mem): Don't define anymore and adapt all users as if it were
+ always defined to `1'.
+ (NBBY, NBPW, DMA_MAX): Remove macros.
+ (alloc_dma_mem): Remove function.
+
+ * i386/bogus/asc.h: Remove file.
+ * i386/bogus/aha.h: Likewise.
+ * i386/bogus/eaha.h: Likewise.
+ * i386/bogus/sbic.h: Likewise.
+ * i386/bogus/sci.h: Likewise.
+ * i386/bogus/sii.h: Likewise.
+ * i386/bogus/siop.h: Likewise.
+ * i386/i386at/eisa.h: Likewise.
+ * scsi/adapters/README: Likewise.
+ * scsi/adapters/scsi_33C93.h: Likewise.
+ * scsi/adapters/scsi_33C93_hdw.c: Likewise.
+ * scsi/adapters/scsi_5380.h: Likewise.
+ * scsi/adapters/scsi_5380_hdw.c: Likewise.
+ * scsi/adapters/scsi_53C700.h: Likewise.
+ * scsi/adapters/scsi_53C700_hdw.c: Likewise.
+ * scsi/adapters/scsi_53C94.h: Likewise.
+ * scsi/adapters/scsi_53C94_hdw.c: Likewise.
+ * scsi/adapters/scsi_7061.h: Likewise.
+ * scsi/adapters/scsi_7061_hdw.c: Likewise.
+ * scsi/adapters/scsi_89352.h: Likewise.
+ * scsi/adapters/scsi_89352_hdw.c: Likewise.
+ * scsi/adapters/scsi_aha15.h: Likewise.
+ * scsi/adapters/scsi_aha15_hdw.c: Likewise.
+ * scsi/adapters/scsi_aha17_hdw.c: Likewise.
+ * scsi/adapters/scsi_dma.h: Likewise.
+ * scsi/adapters/scsi_user_dma.c: Likewise.
+ * scsi/adapters/scsi_user_dma.h: Likewise.
+ * scsi/compat_30.h: Likewise.
+ * scsi/disk_label.c: Likewise.
+ * scsi/mapped_scsi.c: Likewise.
+ * scsi/mapped_scsi.h: Likewise.
+ * scsi/pc_scsi_label.c: Likewise.
+ * scsi/rz.c: Likewise.
+ * scsi/rz.h: Likewise.
+ * scsi/rz_audio.c: Likewise.
+ * scsi/rz_cpu.c: Likewise.
+ * scsi/rz_disk.c: Likewise.
+ * scsi/rz_disk_bbr.c: Likewise.
+ * scsi/rz_host.c: Likewise.
+ * scsi/rz_labels.h: Likewise.
+ * scsi/rz_tape.c: Likewise.
+ * scsi/scsi.c: Likewise.
+ * scsi/scsi.h: Likewise.
+ * scsi/scsi2.h: Likewise.
+ * scsi/scsi_alldevs.c: Likewise.
+ * scsi/scsi_comm.c: Likewise.
+ * scsi/scsi_cpu.c: Likewise.
+ * scsi/scsi_defs.h: Likewise.
+ * scsi/scsi_disk.c: Likewise.
+ * scsi/scsi_endian.h: Likewise.
+ * scsi/scsi_jukebox.c: Likewise.
+ * scsi/scsi_optical.c: Likewise.
+ * scsi/scsi_printer.c: Likewise.
+ * scsi/scsi_rom.c: Likewise.
+ * scsi/scsi_scanner.c: Likewise.
+ * scsi/scsi_tape.c: Likewise.
+ * scsi/scsi_worm.c: Likewise.
+ * i386/i386at/autoconf.c: Don't include <aha.h> and <eaha.h> anymore
+ and adapt all users of NAHA and NEAHA as if it were always defined to
+ `0'.
+ * i386/i386at/conf.c: Likewise.
+ * Makefile.in (scsi-files): Remove variable and all users of it.
+
+ * i386/bogus/wt.h: Remove file.
+ * i386/i386at/autoconf.c: Don't include <wt.h> anymore and adapt all
+ users of NWT as if it were always defined to `0'.
+ * i386/i386at/conf.c: Likewise.
+
+ * i386/bogus/hpp.h: Remove file.
+ * i386/bogus/ul.h: Likewise.
+ * i386/bogus/wd.h: Likewise.
+ * i386/i386at/gpl/if_hpp.c: Likewise.
+ * i386/i386at/gpl/if_ns.c: Likewise.
+ * i386/i386at/gpl/if_nsreg.h: Likewise.
+ * i386/i386at/gpl/if_ul.c: Likewise.
+ * i386/i386at/gpl/if_wd.c: Likewise.
+ * i386/i386at/autoconf.c: Don't include <hpp.h>, <ul.h> and <wd.h>
+ anymore and adapt all users of NHPP, NUL and NWD as if they were always
+ defined to `0'.
+ * i386/i386at/conf.c: Likewise.
+
+ * i386/bogus/at3c501.h: Remove file.
+ * i386/i386at/if_3c501.c: Likewise.
+ * i386/i386at/if_3c501.h: Likewise.
+ * i386/i386at/autoconf.c: Don't include <at3c501.h> anymore and adapt
+ all users of NAT3C501 as if it were always defined to `0'.
+ * i386/i386at/conf.c: Likewise.
+
+ * i386/bogus/ns8390.h: Remove file.
+ * i386/i386at/ds8390.h: Likewise.
+ * i386/i386at/if_3c503.h: Likewise.
+ * i386/i386at/if_ns8390.c: Likewise.
+ * i386/i386at/if_ns8390.h: Likewise.
+ * i386/i386at/if_wd8003.h: Likewise.
+ * i386/i386at/autoconf.c: Don't include <ns8390.h> anymore and adapt
+ all users of NNS8390 as if it were always defined to `0'.
+ * i386/i386at/conf.c: Likewise.
+
+ * i386/bogus/ne.h: Remove file.
+ * i386/i386at/if_ne.c: Likewise.
+ * i386/i386at/if_nereg.h: Likewise.
+ * i386/i386at/autoconf.c: Don't include <ne.h> anymore and adapt all
+ users of NNE as if it were always defined to `0'.
+ * i386/i386at/conf.c: Likewise.
+
+ * i386/bogus/pc586.h: Remove file.
+ * i386/i386at/i82586.h: Likewise.
+ * i386/i386at/if_pc586.c: Likewise.
+ * i386/i386at/if_pc586.h: Likewise.
+ * i386/i386at/autoconf.c: Don't include <pc586.h> anymore and adapt all
+ users of NPC586 as if it were always defined to `0'.
+ * i386/i386at/conf.c: Likewise.
+
+ * i386/bogus/fd.h: Remove file.
+ * i386/i386at/fd.c: Likewise.
+ * i386/i386at/fdreg.h: Likewise.
+ * i386/i386at/nfd.c: Likewise.
+ * i386/i386at/nfdreg.h: Likewise.
+ * i386/Makefile.in (i386at-files): Remove `fd.c'.
+ * i386/i386at/autoconf.c: Don't include <fd.h> anymore and adapt all
+ users of NFD as if it were always defined to `0'.
+ * i386/i386at/conf.c: Likewise.
+
+ * i386/bogus/hd.h: Remove file.
+ * i386/i386at/nhd.c: Likewise.
+ * i386/i386at/nhdreg.h: Likewise.
+ * i386/i386at/autoconf.c: Don't include <hd.h> anymore and adapt all
+ users of NHD as if it were always defined to `0'.
+ * i386/i386at/conf.c: Likewise.
+
+ * DEVELOPMENT: New file.
+
+2006-02-05 Thomas Schwinge <address@hidden>
+
+ * Makerules.in: Don't set no_deps to true if MAKECMDGOALS is empty.
+
+2006-02-03 Thomas Schwinge <address@hidden>
+
+ * Makerules.in: Set no_deps to true if we don't need the dependency
+ files.
+ * i386/linux/Makefile.in: Do care about linux-flags if no_deps is true;
+ reverting the change from 2006-01-31.
+
+ * Makefile.in: Include Makerules through top_builddir, so that it will
+ automatically be rebuilt if needed.
+
+ * Makerules.in (CFLAGS): Added -fno-strict-aliasing.
+ * i386/linux/Makefile.in (linux-gen-flags): Likewise.
+
+2006-02-02 Sergio Lopez <address@hidden>
+
+ * linux/src/drivers/scsi/eata_pio.c (eata_pio_detect): Fix a
+ off-by-one error when probing.
+ * linux/src/drivers/scsi/eata_dma.c (eata_detect): Likewise.
+ * linux/dev/drivers/scsi/eata_dma.c (eata_detect): Likewise.
+
+ * linux/src/drivers/net/apricot.c (apricot_probe): Increase eth_addr
+ size to 8 so we do not trash the stack when reading from the io ports.
+
+2006-02-02 Thomas Schwinge <address@hidden>
+
+ * Makerules.in: Move a comment ...
+ * Makefile.in: ... here.
+
+2006-02-01 Thomas Schwinge <address@hidden>
+
+ * linux/dev/drivers/block/genhd.c (add_bsd_partition): Only define if
+ both MACH and CONFIG_BSD_DISKLABEL are defined.
+ Reported by Matheus Morais <address@hidden>.
+
+2006-01-31 Thomas Schwinge <address@hidden>
+
+ Cleanup of GNU Mach's build system. The system dependent parts are now
+ handled by the respective Makefile and no longer by the top-level one.
+
+ * configure, i386/configure, i386/linux/configure, linux/configure:
+ Regenerated.
+
+ * Makefile.in: Various cleanups.
+ (mach/machine, mach_machine): Targets removed.
+ (AWK, CC, CFLAGS, CPPFLAGS, DEFINES, INCLUDES, INSTALL, INSTALL_DATA)
+ (INSTALL_PROGRAM, LD, MIG, MIGFLAGS, NM): Variables moved into
+ Makerules.in.
+ Do not include $(sysdep)/Makefrag anymore.
+ (all, check, clean, distclean, mostlyclean, maintainer-clean, install)
+ (install-headers, install-kernel): Recurse into the system dependent
+ subdirectory.
+ (check): Add a basic test using mbchk.
+ (clean, distclean): Be more explicit in what to delete.
+ ($(systype)/%): New target.
+ (kernel.o): Incorporate the system dependent archive.
+ (installed-sysdep-headers-names, $(installed-sysdep-headers-names)):
+ Variable and target moved into the system dependent Makefile.in.
+ (install-headers, mkheaderdirs): Don't care for the system dependent
+ header files.
+ (%.symc, %.symc.o, %.h, %_user.c, %_interface.h, %_server.c): Targets
+ moved into Makerules.in.
+ Inclusion of dependency files: Likewise.
+ (%.migs_d, %.migu_d, %.migsh_d, %.miguh_d, make-deps, %.d): Likewise.
+ Include Makerules.
+ * Makerules.in: New file, mainly based on Makefile.in.
+ * configure.in: Do not substitute cross_compiling and not explicitly
+ substitute LDFLAGS.
+ Check for cpp, ranlib, ar and mbchk.
+ Care for the mach/machine symbolic link.
+ Add Makerules as a config file.
+ * i386/Makefile.in: Various cleanups.
+ Merge i386/Makefrag and the system dependent stuff from Makefile.in
+ into this file.
+ (all, check, install, install-headers, install-kernel): Recurse into
+ the system dependent subdirectory.
+ (sysdep.o): transformed to the new target sysdep.a.
+ (linux/linux.o): Target removed.
+ (clean, distclean): Be more explicit in what to delete.
+ (linux/%): New target.
+ (install-headers): Install the system dependent header files.
+ (mkheaderdirs): New target.
+ Include the top-level Makerules.
+ * i386/Makefrag: File removed.
+ * i386/Makerules.in: New file.
+ * i386/configure.in: Synchronize AC_INIT to the top-level definition.
+ Do not check for ld and make.
+ Add Makerules as a config file.
+ * i386/linux/Makefile.in: Various cleanups.
+ Replace linux-objs with objfiles.
+ (check, install, install-headers, install-kernel): New empty targets.
+ Don't care about linux-flags if no_deps is true.
+ Inclusion of dependency files removed and instead...
+ Include the top-level Makerules.
+ * i386/linux/Makerules.in: New file.
+ * i386/linux/configure.ac: Synchronize AC_INIT to the top-level
+ definition.
+ Do not check for gcc and ld.
+ Do not explicitly substitute LDFLAGS.
+ Add Makerules as a config file.
+ * linux/configure.in: Synchronize AC_INIT to the top-level definition.
+ Do not create directories using a dummy file.
+ * linux/dummy.in: File removed.
+
+ * ddb/db_access.h: Include <machine/vm_param.h> instead of
+ "vm_param.h".
+ * kern/bootstrap.c: Likewise.
+ * kern/thread.c: Likewise.
+ * vm/vm_kern.c: Likewise.
+ * vm/vm_object.c: Likewise.
+ * vm/vm_resident.c: Likewise.
+
+2006-01-26 Thomas Schwinge <address@hidden>
+
+ * config.guess: Updated from the canonical source.
+ * config.sub: Likewise.
+
+2006-01-26 Jeroen Dekkers <address@hidden>
+
+ * i386/i386/locore.S (trap_push_segs): Switch fs and gs to kernel
+ data segment too.
+ (syscall_entry_2): Likewise.
+ * i386/i386/user_ldt.c (i386_set_ldt): Always copy the master LDT
+ when there is no old user LDT.
+
+2006-01-26 Samuel Thibault <address@hidden>
+
+ * linux/dev/arch/i386/kernel/irq.c (linux_intr): Disable interrupts
+ if the driver requested it through request_irq().
+
+ * linux/dev/drivers/block/ide.c (read_intr): Set the IRQ handler before
+ issuing a request.
+ (write_intr): Likewise.
+ (multwrite_intr): Likewise.
+
+2006-01-26 Thomas Schwinge <address@hidden>
+
+ * i386/linux/Makefile.in: Automatically recreate the `Makefile'.
+
+2006-01-23 Thomas Schwinge <address@hidden>
+
+ * i386/linux/configure: Regenerated.
+
+ * i386/linux/configure.ac: Only add a AC_DRIVER_ALIAS if it really is a
+ alias.
+
+2006-01-22 Thomas Schwinge <address@hidden>
+
+ * doc/mach.texi (Configuration): Document the recently added drivers.
+ * i386/README-Drivers: Likewise.
+
+ * configure, i386/configure, i386/linux/configure, linux/configure,
+ i386/linux/device-drivers.h.in: Regenerated.
+
+ * linux/src/drivers/net/ne2k-pci.c: Resolve conflicts.
+
+2006-01-22 Guillem Jover <address@hidden>
+
+ * i386/linux/configure.ac: Renamed winbond-840 driver to winbond_840.
+ Enable the starfire, intel_gige and natsemi network drivers. Remove
+ "CONFIG_" from cb_chim, starfire, sundance, winbond840, hamachi,
+ natsemi, myson803 and ns820 driver declarations. Replace INTER_GIGE
+ with INTEL_GIGE.
+ * linux/dev/drivers/net/Space.c: Add conditional probes for natsemi,
+ ns820, winbond840, hamachi, sundance, starfire, myson803 and intel-gige
+ drivers.
+
+ * linux/src/include/asm-i386/cache.h: New file from linux 2.2.26.
+ * linux/dev/include/linux/malloc.h: Include <asm/cache.h>.
+
+ * linux/src/drivers/net/ns820.c (netsami_drv_id): Renamed to ...
+ (ns820_drv_id): ... this. Fix all callers.
+ * linux/src/drivers/net/intel-gige.c
+ (skel_netdev_probe): Renamed to ...
+ (igige_probe): ... this.
+ * linux/dev/drivers/net/eepro100.c: Remove obsoleted file.
+ * linux/src/drivers/net/eepro100.c (pci_id_tbl): Add PCI ID's from
+ linux-2.6.14-rc4.
+
+2006-01-22 Alfred M. Szmidt <address@hidden>
+
+ * i386/linux/configure.ac: Added `pci-scan.o' to the network driver
+ class. (ns820, myson803, sundance, winbond-840, hamachi): New drivers.
+ * i386/linux/Makefile.in (linux-net-files): Added `cb_shim.c',
+ `hamachi.c', `intel-gige.c', `myson803.c', `natsemi.c', `ns820.c',
+ `starfire.c', `sundance.c', `winbond-840.c' and `pci-scan.c'.
+
+ * linux/dev/include/linux/modversions.h: New file.
+
+ * linux/src/drivers/net/cb_shim.c, linux/src/drivers/net/hamachi.c,
+ linux/src/drivers/net/intel-gige.c, linux/src/drivers/net/myson803.c,
+ linux/src/drivers/net/natsemi.c, linux/src/drivers/net/ns820.c,
+ linux/src/drivers/net/starfire.c, linux/src/drivers/net/sundance.c,
+ linux/src/drivers/net/winbond-840.c,
+ linux/src/drivers/net/kern_compat.h, linux/src/drivers/net/pci-scan.c,
+ linux/src/drivers/net/pci-scan.h: New files from netdrivers 3.5 package
+ (http://www.scyld.com/network).
+
+ * linux/src/drivers/net/3c59x.c, linux/src/drivers/net/eepro100.c,
+ linux/src/drivers/net/epic100.c, linux/src/drivers/net/ne2k-pci.c,
+ linux/src/drivers/net/rtl8139.c, linux/src/drivers/net/tulip.c,
+ linux/src/drivers/net/via-rhine.c, linux/src/drivers/net/yellowfin.c:
+ Updated files from netdrivers 3.5 (http://www.scyld.com/network).
+
+2006-01-22 Thomas Schwinge <address@hidden>
+
+ * linux/src/drivers/net/ne2k-pci.c (ne_block_input, ne_block_output):
+ Fix previous patch.
+
+2005-07-12 Guillem Jover <address@hidden>
+
+ * configure: Regenerated.
+ * i386/configure: Regenerated.
+
+ * Drivers.macros (AC_DRIVER_CLASS): Use AH_TEMPLATE.
+ (AC_DRIVER): Set the value for the AC_DEFINE and AC_DEFINE_UNQUOTED
+ to 1.
+
+ * aclocal.m4 (AC_PROG_CC_LOCAL, AC_PROG_CC_WORKS_LOCAL): Removed.
+ * version.m4: New file.
+ * Makefile.in: Use PACKAGE_VERSION, not VERSION.
+ * doc/Makefile.in: Likewise.
+ * version.c.in: Likewise. Use PACKAGE_NAME, not "GNUmach".
+ * i386/linux/Makefile.in (configure): Change its source to
+ configure.ac.
+
+ * aclocal.m4: Add missing quotations.
+ * Drivers.macros: Likewise.
+ * configure.in: Likewise. Include version.m4 and use PACKAGE and
+ VERSION m4 macros from it.
+ * i386/configure.in: Likewise.
+ (AC_INIT): Use new syntax and move source check to AC_CONFIG_SRCDIR.
+ * i386/linux/configure.ac: Likewise. Use m4_sinclude, not sinclude.
+ * linux/configure.in: Likewise.
+
+ * i386/configure.in: Update AC_DEFINE to the new three argument form.
+ * i386/linux/configure.ac: Move AC_DEFINE inside AC_ARG_ENABLE.
+
+ * configure.in: Use AC_CONFIG_LINKS, not AC_LINK_FILES.
+ * linux/configure.in: Likewise.
+
+ * i386/configure.in: Call AC_CONFIG_FILES and use the new form of
+ AC_OUTPUT.
+ * i386/linux/configure.ac: Likewise.
+ * linux/configure.in: Likewise
+
+ * configure.in: Use AS_HELP_STRING in AC_ARG_ENABLE help strings.
+ * Drivers.macros: Likewise.
+ * i386/configure.in: Likewise.
+ * i386/linux/configure.ac: Likewise.
+
+2005-07-12 Neal H. Walfield <address@hidden>
+
+ * configure.in: Update to use autoconf 2.57.
+ Do not error out if host_os is not GNU.
+ Update AC_DEFINEs to the required three argument form.
+ Don't call AC_CHECK_TOOL(CC, gcc) and AC_PROG_CC_LOCAL, just use
+ AC_PROG_CC.
+ AC_SUBST(LDFLAGS).
+ Refactor AC_CONFIG_SUBDIRS to not do variable substitution.
+ Call AC_CONFIG_FILES and use the new form of AC_OUTPUT.
+ * i386/configure.in: Require autoconf 2.57.
+ * linux/configure.in: Likewise.
+ * i386/linux/Drivers.in: Move from here...
+ * i386/linux/configure.ac: ... to here to conform to the
+ environment autoreconf expects.
+ (hurd_host_CPU): New macro.
+ Call AC_PROG_CC, not AC_PROG_CC_LOCAL.
+ AC_SUBST(LD_FLAGS).
+ (flashpoint): Update AC_DEFINE to the new three argument form.
+ * Drivers.macros (AC_DRIVER): Update AC_DEFINE to the new three
+ argument form.
+
+2005-05-24 Alfred M. Szmidt <address@hidden>
+
+ * i386/include/mach/i386/asm.h (END): New macro.
+
+ * i386/include/mach/i386/syscall_sw.h (kernel_trap): Call END.
+
+2005-05-28 Alfred M. Szmidt <address@hidden>
+
+ * linux/src/drivers/scsi/u14-34f.c (ihdlr): Silence gcc 4.x
+ errors.
+ * linux/src/drivers/scsi/qlogicisp.h: Likewise.
+ * linux/src/drivers/scsi/advansys.c: Likewise.
+ (advansys_reset, advansys_interrupt, asc_scsi_done_list,
+ (asc_enqueue, asc_dequeue, asc_dequeue_list, asc_rmqueue,
+ (asc_isqueued): Likewise.
+ * linux/src/drivers/scsi/53c78xx.c (NCR53c7xx_queue_command):
+ Likewise.
+ * linux/src/drivers/net/ne2k-pci.c (ne_block_input)
+ (ne_block_output): Likewise.
+ * linux/src/drivers/net/hp100.c (__initfunc): Likewise.
+ * linux/src/drivers/net/3c507.c (el16_interrupt): Likewise.
+ * linux/dev/drivers/scsi/seagate.c (seagate_st0x_queue_command):
+ Likewise.
+
+2005-05-26 Alfred M. Szmidt <address@hidden>
+
+ * device/cons.h (cn_tab) [KERNEL]: Removed extern declaration.
+
+ * linux/dev/include/linux/fs.h (super_blocks): Declare as an
+ pointer.
+
+2005-02-10 Guillem Jover <address@hidden>
+
+ * linux/dev/glue/block.c (rdwr_partial): Remove leftover assert.
+
+2005-01-22 Guillem Jover <address@hidden>
+
+ * linux/dev/include/linux/skbuff.h (skb_put, skb_push): Fix errors
+ for deprecated use of labels at end of compound statements.
+ * i386/i386/fpe_linkage.c (enable_fpe): Declare prototype.
+
+2005-01-22 Guillem Jover <address@hidden>
+
+ * linux/src/drivers/scsi/qlogicisp_asm.c: Remove file with binary
+ only firmware.
+ * linux/src/drivers/scsi/qlogicisp.c: Do not include "qlogicisp_asm.c".
+ (RELOAD_FIRMWARE): Set to 0.
+ (risc_code_addr01): New variable from qlogicisp_asm.c.
+ * linux/Files: Remove linux/src/drivers/scsi/qlogicisp_asm.c.
+
+2004-09-08 Neal H. Walfield <address@hidden>
+
+ * linux/dev/kernel/printk.c: Include <kern/assert.h>.
+ (printk): Use vsnprintf, not linux_vsprintf to avoid buffer
+ overruns.
+
+ * kern/printf.c (struct vsnprintf_cookie): New structure.
+ (snputc): New function.
+ (vsnprintf): Likewise.
+
+2004-11-22 Guillem Jover <address@hidden>
+
+ * bogus/mach_assert.h: Change #ifdef DEBUG to #ifndef NDEBUG
+ for assert et al.
+ * kern/assert.h: Likewise.
+ * kern/debug.h: Likewise.
+ * util/debug.h: Likewise.
+
+ * i386/i386/debug.h: Move dump_ss definition out of [DEBUG].
+ * linux/dev/glue/block.c (rdwr_full): Remove invalid assert.
+
+2004-09-07 Neal H. Walfield <address@hidden>
+
+ * linux/dev/glue/block.c (__brelse): Unconditionally kfree BH.
+ (getblk): Unconditionally kalloc BH.
+
+ * kern/kalloc.c [!NDEBUG] (kalloc_init_called): New static
+ variable.
+ (kalloc_init): Assert that kalloc_init_called is zero.
+ [! NDEBUG] Set kalloc_init_called to 1 on success.
+ (kalloc): Assert that kalloc_init_called is non-zero.
+ (kget): Likewise.
+ (kfree): Likewise.
+
+2004-11-22 Guillem Jover <address@hidden>
+
+ * i386/i386/locore.S (discover_x86_cpu_type): Enable function.
+ Enable ID flag for Cyrix CPU. Use %ebp to save the stack pointer.
+ Restore EFLAGS just after its last usage.
+ * i386/i386at/model_dep.c (c_boot_entry): Enable use of
+ discover_x86_cpu_type. Remove hardcoded cpu_type assignment.
+ * i386/include/mach/i386/eflags.h
+ (EFL_VI, EFL_VIP): New bits.
+ (EFL_AC, EFL_ID): Bits finally added.
+
+2004-10-26 Guillem Jover <address@hidden>
+
+ * i386/i386/fpe.b: Remove binary without source.
+ * i386/i386/fpe.b_elf: Likewise.
+ * i386/i386/fpe_linkage.c: Disable the code if [! FPE].
+ * i386/bogus/fpe.h: Add comment about not having an fpe implementation.
+ * i386/Makefrag (objfiles): Do not add fpe.o.
+ Remove targets to generate fpe.o.
+
+2004-02-29 Marcus Brinkmann <address@hidden>
+
+ * NEWS: Add things that changed so far since 1.3.
+
+2004-02-02 Marco Gerards <address@hidden>
+
+ * i386/i386at/kd.c (kdinit): Initialize the input buffer.
+
+ * i386/i386at/kd.h (KDSETLEDS): New macro.
+ * i386/i386at/kd_event.c (kbdsetstat): Handle KDSETLEDS here to
+ set the keyboard LEDs state.
+
+2004-01-19 Marco Gerards <address@hidden>
+
+ * linux/dev/glue/block.c (init_partition): Don't check for BSD
+ partitions if the DOS partition is too small.
+
+2004-01-16 Marco Gerards <address@hidden>
+
+ * linux/dev/glue/block.c (device_get_status): Correctly calculate
+ the number of blocks.
+
+2004-01-15 Alfred M. Szmidt <address@hidden>
+
+ * linux/dev/include/asm-i386/string.h (memscan): Don't use
+ multi-line string literals for asm().
+ * linux/dev/include/asm-i386/segment.h (__generic_memcpy_tofs)
+ (__generic_memcpy_fromfs): Likewise.
+ * linux/src/include/asm-i386/floppy.h (floppy_hardint): Likewise.
+ * i386/i386/proc_reg.h (flush_instr_queue): Likewise.
+ * i386/i386/gdt.c (gdt_init): Likewise.
+
+ * linux/src/drivers/scsi/aic7xxx.c: Updated from Linux 2.0.39
+ * linux/src/drivers/scsi/aic7xxx.h: Likewise.
+ * linux/src/drivers/scsi/aic7xxx_proc.c: Likewise.
+ * linux/src/drivers/scsi/scsicam.c: Likewise.
+ * linux/src/include/linux/pci.h: Likewise.
+
+ * linux/src/drivers/scsi/53c7,8xx.h (patch_dsa_32): Don't use
+ token paste operator (##).
+
+ * Makefile.in (kernel-undef): Match new output format from
+ nm (binutils) 2.14.x.
+
+2002-05-27 Roland McGrath <address@hidden>
+
+ * Version 1.3 released.
+
+2002-05-23 Marcus Brinkmann <address@hidden>
+
+ * i386/i386at/model_dep.c: Include <kern/cpu_number.h> and
+ <kern/assert.h>.
+ (machine_idle): New function.
+ * bogus/power_save.h (POWER_SAVE): Define to 1.
+
+2002-05-22 Roland McGrath <address@hidden>
+
+ * configure.in (VERSION): New substituted variable: set to 1.3 now.
+ (version.c): Add it to AC_OUTPUT.
+ * configure: Regenerated.
+ * Makefile.in (version): New variable, set from that.
+ Remove vpath directive for version.c, not found in build dir.
+ (topfiles): version.c -> version.c.in
+ * doc/Makefile.in (mach-version): Substituted instead of constant.
+ * version.c: File removed, replaced with ...
+ * version.c.in: ... this new file.
+ (version): Make it const. Use @VERSION@ for the number.
+
+ * Makefile.in (debian-files): Add postinst and prerm.
+ (dist): Use gzip -9 instead of tar z.
+
+ * linux/Files: Add missing files to the list:
+ linux/dev/drivers/net/eepro100.c
+ linux/src/include/asm-i386/hardirq.h
+ linux/src/include/asm-i386/spinlock.h
+ linux/src/include/linux/compatmac.h
+ linux/src/include/linux/spinlock.h
+
+ * linux/src/drivers/net/eth16i.c (eth16i_check_signature): Fix syntax:
+ #ifdef 0 -> #if 0
+
+ * Makefile.in (%.migs_d, %.migu_d): Fix sed substitution to match
+ whatever target file name gcc comes up with.
+ (%.migs_d, %.migu_d, %.symc.o, %_user.c, %_server.c):
+ Depend on $(before-compile).
+
+2002-04-24 Marcus Brinkmann <address@hidden>
+
+ * debian/rules (DOCDIR): Move to
+ $(PREFIX)/share/doc/$(package-dev).
+
+2002-04-23 Roland McGrath <address@hidden>
+
+ * i386/i386/ldt.c (ldt_init): Fix fencepost error in segment limits.
+
+2002-04-19 Roland McGrath <address@hidden>
+
+ * gensym.awk: Emit \n\ at the end of lines inside strings.
+ * Makefile.in (%.symc: %.sym): Depend on gensym.awk.
+
+2002-03-29 Marcus Brinkmann <address@hidden>
+
+ * doc/mach.texi: End index entry with full stop.
+
+2002-03-05 Roland McGrath <address@hidden>
+
+ * kern/bootstrap.c: Include <alloca.h>.
+
+2002-03-04 Roland McGrath <address@hidden>
+
+ * Makefile.in (%_interface.h %_server.c: %.srv): Pass -sheader switch
+ to mig, not -header.
+
+2001-11-23 Roland McGrath <address@hidden>
+
+ * i386/i386at/i386at_ds_routines.c (device_deallocate): Do nothing if
+ argument is DEVICE_NULL.
+
+2001-10-21 Marcus Brinkmann <address@hidden>
+
+ * linux/src/arch/i386/lib/delay.c: Convert HTML entities.
+ Reported by John Tobey <address@hidden>.
+
+2001-10-13 Marcus Brinkmann <address@hidden>
+
+ * debian/changelog: Update for next release.
+
+2001-10-07 Roland McGrath <address@hidden>
+
+ * ddb/db_access.c: Fix obsolescent #else/#endif syntax.
+ * device/dev_name.c: Likewise.
+ * device/dev_pager.c: Likewise.
+ * device/ds_routines.c: Likewise.
+ * i386/i386/i386asm.sym: Likewise.
+ * include/device/device_reply.defs: Likewise.
+ * include/mach/memory_object.defs: Likewise.
+ * include/mach/memory_object_default.defs: Likewise.
+
+ * i386/i386/locore.S: Fix sloppy asm syntax to avoid warnings from
+ newer assembler (%ecx -> %cl in byte insns).
+
+ * kern/bootstrap.c (bootstrap_create): Fix inverted test logic for
+ compatibility case. Ignore trailing newlines after space for
+ compatibility detection.
+ Reported by Neal H Walfield <address@hidden>.
+
+2001-10-06 Marcus Brinkmann <address@hidden>
+
+ * README: Replace `GNU mach' by `GNU Mach', and remove
+ obsolete paragraph about kmsg device.
+
+2001-10-06 Marcus Brinkmann <address@hidden>
+
+ * doc/mach.texi: Fix direntry.
+
+2001-10-05 Marcus Brinkmann <address@hidden>
+
+ * doc/mach.texi: Replace `path name' by `file name' in one place.
+ Replace `illegal' by `invalid' and `to to' by `to' everwhere.
+
+ * debian/changelog: Prepare for next release.
+
+2001-10-04 Marcus Brinkmann <address@hidden>
+
+ * doc: New directory.
+ * doc/Makefile.in: New file.
+ * doc/gpl.texi: Likewise.
+ * doc/fdl.texi: Likewise.
+ * doc/mach.texi: Likewise.
+ * configure.in: Add doc/Makefile to AC_OUTPUT call.
+ * configure: Regenerated.
+
+ * Makefile.in (dist): Create directories doc and debian.
+ (doc-files): New variable with documentation files.
+ (debian-files): New variable with Debian packaging files.
+
+ * debian/rules (stamp-build): Build documentation.
+ (build-gnumach): Install the documentation into the gnumach
+ package.
+ * debian/postrm: New file to install info document.
+ * debian/prerm: New file to install info document.
+
+2001-10-01 Marcus Brinkmann <address@hidden>
+
+ * i386/i386/locore.S (tenmicrosec): Remove subroutine.
+ * i386/i386/pit.c (delaycount): Remove global variable.
+ (microdata): Likewise.
+ (clkstart): Do not call findspeed() and microfind().
+ (findspeed): Remove function.
+ (spinwait): Likewise.
+ (microfind): Likewise. This function triggers a division by zero
+ trap on AMD K6 350Mhz+ and Athlon 1.1GHz+ machines (and in general
+ leads to bad results on fast cpus), and nothing uses this code anymore.
+
+2001-09-30 Roland McGrath <address@hidden>
+
+ * kern/bootstrap.c (bootstrap_create): Ignore trailing spaces when
+ checking boot module string for containing none.
+
+2001-09-18 Marcus Brinkmann <address@hidden>
+
+ * linux/dev/glue/misc.c: Do not include <linux/types.h> and
+ <linux/string.h>.
+ Remove global variable ___strtok.
+ Remove implementation of strspn, strpbrk, strtok and strstr.
+ * Makefile.in: Add strpbrk and strtok.
+
+2001-08-24 Roland McGrath <address@hidden>
+
+ * kern/bootstrap.c (bootstrap_create): Make setting of boot-args and
+ root-device no longer conditional on [! OSKIT_MACH].
+ (bootstrap_create) [! OSKIT_MACH]: Parse FOO=BAR words out of the
+ multiboot command line and turn those into boot script variables.
+
+ * Makefile.in (clib-routines): Add strsep.
+ * kern/strings.h (strsep, strchr): Declare them.
+
+2001-08-23 Roland McGrath <address@hidden>
+
+ * kern/bootstrap.c (bootstrap_create, user_bootstrap,
+ boot_script_exec_cmd, boot_script_task_resume): Add printfs at
+ various stages of startup.
+
+2001-08-21 Roland McGrath <address@hidden>
+
+ * i386/i386at/model_dep.c (use_all_mem): Turn variable into macro.
+ (init_alloc_aligned): Make this function static.
+ Initially skip memory < 16MB and then wrap around to get it last.
+
+2001-08-20 Roland McGrath <address@hidden>
+
+ Support "boot script" functionality in multiboot module strings.
+ * kern/bootstrap.c: Rewrite merged from oskit-branch.
+ * kern/boot_script.c, kern/boot_script.h: New files,
+ copied from boot/ directory in Hurd sources.
+ * Makefile.in (kern-cfiles): Add boot_script.c here.
+ (kern-files): Add boot_script.h here.
+ * NEWS: Mention the new feature.
+
+2001-08-18 Roland McGrath <address@hidden>
+
+ * i386/i386at/model_dep.c (boot_info): Define a struct, not a pointer.
+ (c_boot_entry): Copy the contents into it rather than setting the ptr.
+ (c_boot_entry, init_alloc_aligned, pmap_valid_page, mem_size_init):
+ Update uses.
+ (init_alloc_aligned): Don't need to skip the boot_info memory.
+ * kern/bootstrap.c (boot_info): Update decl.
+ (bootstrap_create): Update uses.
+
+2001-08-18 Marcus Brinkmann <address@hidden>
+
+ * linux/src/drivers/net/eepro100.c: File updated to version in
+ Linux 2.2.19. This time for real.
+
+2001-08-18 Marcus Brinkmann <address@hidden>
+
+ * debian/changelog: Update for next package upload.
+ * debian/control: Add gnumach-dbg package.
+ * debian/rules: New targets to build gnumach-dbg package.
+ Fix various bugs.
+
+2001-08-18 Marcus Brinkmann <address@hidden>
+
+ * i386/i386at/kd.c (kdintr): In event mode, make it so that
+ 0xE0 scancodes are received.
+ From Kalle Olavi Niemitalo <address@hidden>.
+
+ * i386/i386at/kd.h: New constants KAX_REVERSE, KAX_UNDERLINE,
+ KAX_BLINK, KAX_BOLD, KAX_DIM, KAX_INVISIBLE, KAX_COL_UNDERLINE,
+ KAX_COL_DIM.
+ * i386/i386at/kd.c: Increase K_MAXESC to 32.
+ New global variable color_table to map color values.
+ New globals kd_color and kd_attrflags.
+ (kdinit): Initialize these variables.
+ (kd_update_kd_attr): New function.
+ (kd_parserest): Redone to support more terminal attributes,
+ including colors.
+
+2001-08-18 Marcus Brinkmann <address@hidden>
+
+ * linux/src/drivers/net/eepro100.c: File updated to version in
+ Linux 2.2.19.
+ * linux/src/include/asm-i386/spinlock.h: New file from Linux 2.2.19.
+ * linux/src/include/asm-i386/hardirq.h: Likewise.
+ * linux/src/include/linux/spinlock.h: Likewise.
+ * linux/src/include/linux/compatmac.h: Likewise.
+ * linux/dev/drivers/net/eepro100.c: New file, modified version from
+ the above to glue it in gnumach.
+ Submitted by Kapil H. Paranjape <address@hidden>.
+
+2001-08-17 Roland McGrath <address@hidden>
+
+ * Makefile.in (clib-routines): Add strchr.
+ (kernel-undef-bad): Depend on Makefile.
+
+ * Makefile.in ($(srcdir)/configure, $(srcdir)/config.h.in):
+ Use $(srcdir) in deps.
+ (Makefile, config.h, config.status): Likewise.
+
+2001-07-29 Marcus Brinkmann <address@hidden>
+
+ * NEWS: Add items for this and other changes.
+ * configure.in: Define MACH_KMSG by default and document this in
+ the help output.
+ * configure: Regenerated.
+ * debian/rules: Do not enable kmsg explicitely.
+
+2001-07-18 Marcus Brinkmann <address@hidden>
+
+ * debian/rules: Add -isp to dpkg-gencontrol invocation.
+ Move documentation to /share/doc.
+ * debian/changelog: Update.
+
+2001-06-28 Marcus Brinkmann <address@hidden>
+
+ * linux/dev/drivers/block/ide.c (lba_capacity_is_ok): Do not
+ attempt to correct id->cyls, it is a short and for large disks the
+ number of cylinders necessary would not fit. Subsequent checks
+ for lba support would fail.
+ (current_capacity): Likewise for drive->cyl.
+ (do_identify): Store value returned by current_capacity in
+ CAPACITY. The check which corrects the number of bios cylinders
+ is not aggressive enough. Update it with the check in linux
+ kernel-2.2.19.
+
+2001-06-25 Marcus Brinkmann <address@hidden>
+
+ * i386/bogus/fpe.h (FPE): Define FPE to 0, as the floating point
+ emulation is broken anyway and blows up plex86.
+
+2001-06-17 Marcus Brinkmann <address@hidden>
+
+ * debian/rules: Update to current version.
+
+2001-06-13 Roland McGrath <address@hidden>
+
+ * linux/dev/glue/block.c (device_get_status: DEV_GET_RECORDS):
+ Always return 512 for DEV_GET_SIZE_RECORD_SIZE as DEV_GET_SIZE does.
+
+2001-05-27 Marcus Brinkmann <address@hidden>
+
+ * debian/rules: Add --enable-ncr53c8xx to configure.
+
+1999-10-06 OKUJI Yoshinori <address@hidden>
+
+ * linux/src/drivers/scsi/tmscsiw.c: Removed.
+ * linux/src/drivers/scsi/tmscsiw.h: Likewise.
+ * linux/src/drivers/scsi/dc390w.h: Likewise.
+ * i386/linux/device-drivers.h.in (CONFIG_SCSI_DC390W): Deleted.
+ * i386/linux/Drivers.in: Remove linux_DRIVER(dc390w, ...). Now
+ dc390w, dc390u, and dc390f are aliases to ncr53c8xx.
+ * i386/linux/configure: Regenerated.
+ * linux/Files: Likewise.
+ * i386/linux/Makefile.in (linux-scsi-files): Delete tmscsiw.c.
+ * linux/dev/drivers/scsi/hosts.c: Do not include dc390w.h.
+ Reported by Andreas Voegele <address@hidden>.
+
+2001-05-20 Roland McGrath <address@hidden>
+
+ * kern/sched_prim.c (state_panic): New function, panic with some
+ info when a thread's state is bogus.
+ (thread_wakeup_prim): Use that instead of uninformative panic.
+ (thread_invoke): Likewise.
+ (thread_dispatch): Likewise.
+
+2001-05-12 Marcus Brinkmann <address@hidden>
+
+ * ipc/ipc_object.c (ipc_object_alloc): Remove initialization of
+ *namep, which was without effect.
+
+2001-04-29 Marcus Brinkmann <address@hidden>
+
+ * debian/changelog: New entries for past Debian uploads.
+ * debian/rules: Disable eatdma driver (breaks AMD K7), do
+ not enable com, lpr (com is redundant, lpr doesn't work),
+ move enabling of kmsg in its own line.
+ * debian/control: Add build dependency on mig and sharutils.
+
+2001-04-29 Marcus Brinkmann <address@hidden>
+
+ * device/chario.c: Set number of elements of tthiwat and ttlowat
+ to NSPEEDS rather than 16. Initialize the two new elements.
+ (chario_init): Initialize pdma_timeouts and pdma_water_mark for
+ B57600 and B115200.
+
+2001-04-27 Marcus Brinkmann <address@hidden>
+
+ * include/device/tty_status.h: New macros B57600 and B115200,
+ increase NSPEED accordingly.
+ * i386/i386at/com.c (divisorreg): New divisor 1.
+
+2001-04-04 Roland McGrath <address@hidden>
+
+ * ddb/db_access.h: Fix obsolescent #else/#endif syntax.
+ * ddb/db_aout.c: Likewise.
+ * ddb/db_break.c: Likewise.
+ * ddb/db_break.h: Likewise.
+ * ddb/db_command.c: Likewise.
+ * ddb/db_command.h: Likewise.
+ * ddb/db_cond.c: Likewise.
+ * ddb/db_examine.c: Likewise.
+ * ddb/db_expr.c: Likewise.
+ * ddb/db_ext_symtab.c: Likewise.
+ * ddb/db_input.c: Likewise.
+ * ddb/db_lex.c: Likewise.
+ * ddb/db_macro.c: Likewise.
+ * ddb/db_mp.c: Likewise.
+ * ddb/db_output.c: Likewise.
+ * ddb/db_print.c: Likewise.
+ * ddb/db_run.c: Likewise.
+ * ddb/db_sym.c: Likewise.
+ * ddb/db_task_thread.c: Likewise.
+ * ddb/db_task_thread.h: Likewise.
+ * ddb/db_trap.c: Likewise.
+ * ddb/db_variables.c: Likewise.
+ * ddb/db_watch.c: Likewise.
+ * ddb/db_watch.h: Likewise.
+ * ddb/db_write_cmd.c: Likewise.
+ * device/dev_pager.c: Likewise.
+ * device/device_port.h: Likewise.
+ * device/device_types_kernel.h: Likewise.
+ * device/ds_routines.h: Likewise.
+ * device/errno.h: Likewise.
+ * device/if_ether.h: Likewise.
+ * device/if_hdr.h: Likewise.
+ * device/io_req.h: Likewise.
+ * device/net_io.c: Likewise.
+ * device/net_io.h: Likewise.
+ * i386/i386/ast_check.c: Likewise.
+ * i386/i386/cswitch.S: Likewise.
+ * i386/i386/db_disasm.c: Likewise.
+ * i386/i386/db_interface.c: Likewise.
+ * i386/i386/db_trace.c: Likewise.
+ * i386/i386/debug.h: Likewise.
+ * i386/i386/debug_i386.c: Likewise.
+ * i386/i386/debug_trace.S: Likewise.
+ * i386/i386/eflags.h: Likewise.
+ * i386/i386/gdt.h: Likewise.
+ * i386/i386/hardclock.c: Likewise.
+ * i386/i386/idt-gen.h: Likewise.
+ * i386/i386/ipl.h: Likewise.
+ * i386/i386/ktss.h: Likewise.
+ * i386/i386/kttd_interface.c: Likewise.
+ * i386/i386/ldt.h: Likewise.
+ * i386/i386/lock.h: Likewise.
+ * i386/i386/locore.S: Likewise.
+ * i386/i386/mp_desc.h: Likewise.
+ * i386/i386/pic.c: Likewise.
+ * i386/i386/pic.h: Likewise.
+ * i386/i386/pio.h: Likewise.
+ * i386/i386/pit.h: Likewise.
+ * i386/i386/seg.h: Likewise.
+ * i386/i386/thread.h: Likewise.
+ * i386/i386/trap.c: Likewise.
+ * i386/i386/trap.h: Likewise.
+ * i386/i386/vm_param.h: Likewise.
+ * i386/i386/vm_tuning.h: Likewise.
+ * i386/i386at/autoconf.c: Likewise.
+ * i386/i386at/blit.c: Likewise.
+ * i386/i386at/conf.c: Likewise.
+ * i386/i386at/fd.c: Likewise.
+ * i386/i386at/idt.h: Likewise.
+ * i386/i386at/immc.c: Likewise.
+ * i386/i386at/kd.c: Likewise.
+ * i386/i386at/kd_event.c: Likewise.
+ * i386/i386at/kd_mouse.c: Likewise.
+ * i386/i386at/model_dep.c: Likewise.
+ * i386/i386at/rtc.c: Likewise.
+ * i386/include/mach/i386/asm.h: Likewise.
+ * i386/include/mach/i386/eflags.h: Likewise.
+ * i386/include/mach/i386/mach_i386.defs: Likewise.
+ * i386/include/mach/i386/multiboot.h: Likewise.
+ * i386/include/mach/i386/trap.h: Likewise.
+ * i386/include/mach/i386/vm_types.h: Likewise.
+ * i386/include/mach/sa/stdarg.h: Likewise.
+ * i386/intel/pmap.c: Likewise.
+ * i386/intel/pmap.h: Likewise.
+ * include/alloca.h: Likewise.
+ * include/device/device_types.defs: Likewise.
+ * include/device/device_types.h: Likewise.
+ * include/device/disk_status.h: Likewise.
+ * include/device/net_status.h: Likewise.
+ * include/mach/mach.defs: Likewise.
+ * include/mach/memory_object.defs: Likewise.
+ * include/mach/std_types.defs: Likewise.
+ * include/mach_debug/hash_info.h: Likewise.
+ * include/mach_debug/ipc_info.h: Likewise.
+ * include/mach_debug/mach_debug.defs: Likewise.
+ * include/mach_debug/mach_debug_types.defs: Likewise.
+ * include/mach_debug/mach_debug_types.h: Likewise.
+ * include/mach_debug/vm_info.h: Likewise.
+ * include/mach_debug/zone_info.h: Likewise.
+ * include/sys/ioctl.h: Likewise.
+ * include/sys/time.h: Likewise.
+ * ipc/ipc_entry.h: Likewise.
+ * ipc/ipc_hash.h: Likewise.
+ * ipc/ipc_init.c: Likewise.
+ * ipc/ipc_kmsg.c: Likewise.
+ * ipc/ipc_kmsg.h: Likewise.
+ * ipc/ipc_marequest.c: Likewise.
+ * ipc/ipc_marequest.h: Likewise.
+ * ipc/ipc_mqueue.c: Likewise.
+ * ipc/ipc_mqueue.h: Likewise.
+ * ipc/ipc_notify.c: Likewise.
+ * ipc/ipc_notify.h: Likewise.
+ * ipc/ipc_object.c: Likewise.
+ * ipc/ipc_object.h: Likewise.
+ * ipc/ipc_port.c: Likewise.
+ * ipc/ipc_port.h: Likewise.
+ * ipc/ipc_pset.c: Likewise.
+ * ipc/ipc_pset.h: Likewise.
+ * ipc/ipc_right.c: Likewise.
+ * ipc/ipc_right.h: Likewise.
+ * ipc/ipc_space.c: Likewise.
+ * ipc/ipc_space.h: Likewise.
+ * ipc/mach_debug.c: Likewise.
+ * ipc/mach_msg.c: Likewise.
+ * ipc/mach_msg.h: Likewise.
+ * ipc/mach_port.c: Likewise.
+ * kern/act.c: Likewise.
+ * kern/assert.h: Likewise.
+ * kern/ast.c: Likewise.
+ * kern/ast.h: Likewise.
+ * kern/bootstrap.c: Likewise.
+ * kern/counters.c: Likewise.
+ * kern/counters.h: Likewise.
+ * kern/debug.h: Likewise.
+ * kern/exception.c: Likewise.
+ * kern/host.h: Likewise.
+ * kern/ipc_host.c: Likewise.
+ * kern/ipc_host.h: Likewise.
+ * kern/ipc_kobject.c: Likewise.
+ * kern/ipc_mig.c: Likewise.
+ * kern/ipc_tt.c: Likewise.
+ * kern/ipc_tt.h: Likewise.
+ * kern/kalloc.h: Likewise.
+ * kern/lock_mon.c: Likewise.
+ * kern/mach_clock.c: Likewise.
+ * kern/mach_factor.c: Likewise.
+ * kern/mach_param.h: Likewise.
+ * kern/machine.c: Likewise.
+ * kern/processor.c: Likewise.
+ * kern/profile.c: Likewise.
+ * kern/queue.h: Likewise.
+ * kern/sched.h: Likewise.
+ * kern/startup.c: Likewise.
+ * kern/syscall_emulation.h: Likewise.
+ * kern/syscall_subr.c: Likewise.
+ * kern/syscall_subr.h: Likewise.
+ * kern/syscall_sw.c: Likewise.
+ * kern/syscall_sw.h: Likewise.
+ * kern/task.h: Likewise.
+ * kern/thread_swap.h: Likewise.
+ * kern/time_out.h: Likewise.
+ * kern/time_stamp.c: Likewise.
+ * kern/time_stamp.h: Likewise.
+ * kern/timer.c: Likewise.
+ * kern/timer.h: Likewise.
+ * kern/xpr.c: Likewise.
+ * kern/xpr.h: Likewise.
+ * kern/zalloc.c: Likewise.
+ * kern/zalloc.h: Likewise.
+ * linux/dev/drivers/block/ide.c: Likewise.
+ * linux/dev/include/linux/blk.h: Likewise.
+ * linux/src/include/linux/cdrom.h: Likewise.
+ * linux/src/include/linux/md.h: Likewise.
+ * util/cpu.h: Likewise.
+ * vm/memory_object.c: Likewise.
+ * vm/memory_object.h: Likewise.
+ * vm/pmap.h: Likewise.
+ * vm/vm_debug.c: Likewise.
+ * vm/vm_external.h: Likewise.
+ * vm/vm_fault.c: Likewise.
+ * vm/vm_fault.h: Likewise.
+ * vm/vm_kern.h: Likewise.
+ * vm/vm_map.c: Likewise.
+ * vm/vm_map.h: Likewise.
+ * vm/vm_object.h: Likewise.
+ * vm/vm_pageout.c: Likewise.
+ * vm/vm_pageout.h: Likewise.
+ * vm/vm_user.h: Likewise.
+
+2001-01-28 Roland McGrath <address@hidden>
+
+ * kern/zalloc.c (zalloc): Change panics for exhausted zone to include
+ the zone name.
+
+2001-01-09 Marcus Brinkmann <address@hidden>
+
+ * include/device/device_types.h: New get_status call
+ DEV_GET_RECORDS to get the number of records of a device (rather
+ than the number of bytes). Accordingly define
+ DEV_GET_RECORDS_DEVICE_RECORDS, DEV_GET_RECORDS_RECORD_SIZE and
+ DEV_GET_RECORDS_COUNT.
+
+ * linux/dev/glue/block.c (device_get_status): Handle
+ DEV_GET_RECORDS.
+
+2000-11-26 David Welch <address@hidden>
+
+ * i386/Makefrag (i386-installed-headers): Removed dead files
+ from the list of headers to be installed
+
+2000-11-26 Marcus Brinkmann <address@hidden>
+
+ * linux/src/drivers/net/tulip.c: Updated to version
+ from Linux 2.2.17 (I am amazed that 2.2.x drivers work).
+ Suggested by Jason Henry Parker <address@hidden>.
+
+2000-10-29 Roland McGrath <address@hidden>
+
+ Remove numerous dead header files.
+ Suggested by Igor Khavkine <address@hidden>.
+ * i386/include/mach/i386/bios.h: Dead file removed.
+ * i386/include/mach/i386/code16.h: Dead file removed.
+ * i386/include/mach/i386/debug_reg.h: Dead file removed.
+ * i386/include/mach/i386/dpmi.h: Dead file removed.
+ * i386/include/mach/i386/far_ptr.h: Dead file removed.
+ * i386/include/mach/i386/paging.h: Dead file removed.
+ * i386/include/mach/i386/pio.h: Dead file removed.
+ * i386/include/mach/i386/pmode.h: Dead file removed.
+ * i386/include/mach/i386/proc_reg.h: Dead file removed.
+ * i386/include/mach/i386/seg.h: Dead file removed.
+ * i386/include/mach/i386/time_stamp.h: Dead file removed.
+ * i386/include/mach/i386/tss.h: Dead file removed.
+ * i386/include/mach/i386/vcpi.h: Dead file removed.
+ * i386/include/mach/proc_ops.h: Dead file removed.
+ * i386/include/mach/sa/sys/varargs.h: Dead file removed.
+ * i386/include/mach/setjmp.h: Dead file removed.
+ * include/mach/proc_ops.h: Dead file removed.
+ * Makefile.in (mach-headers): Remove proc_ops.h.
+ * i386/Makefrag (i386-installed-headers): Likewise.
+ (installed-headers): Don't touch this any more.
+ * i386/Files: Update for removed files.
+
+2000-09-29 Marcus Brinkmann <address@hidden>
+
+ * i386/i386at/conf.c (dev_name_list): Don't use MACH_COM to check
+ if com support is enabled, but NCOM, as it used to be.
+
+2000-09-24 OKUJI Yoshinori <address@hidden>
+
+ * linux/dev/glue/block.c: Reverted the changes at 2000-08-17.
+ Reported by Brent Fulgham <address@hidden>.
+
+2000-09-19 Marcus Brinkmann <address@hidden>
+
+ * linux/dev/glue/block.c (init_partition): Move initialization
+ of MASK until it is asserted that gd is non-NULL.
+
+2000-08-17 OKUJI Yoshinori <address@hidden>
+
+ * linux/dev/glue/block.c (rdwr_partial): Mask the minor device
+ number with MINOR_SHIFT bits, when indexing the array of
+ partitions. Reported by Marius Vollmer <address@hidden>.
+ (init_partition): Likewise.
+ (check_limit): Likewise.
+ (device_get_status): Likewise.
+
+2000-07-27 Marcus Brinkmann <address@hidden>
+
+ * Fix omissions in last change:
+ * linux/src/arch/i386/lib/delay.S: Now really delete the file.
+ * linux/src/arch/i386/lib/delay.c: Now really add the file.
+
+2000-07-04 Marcus Brinkmann <address@hidden>
+
+ * debian/changelog: Add entry for new Debian upload.
+ * linux/dev/drivers/scsi/seagate.c (WRITE_CONTROL, WRITE_DATA):
+ Added from linux 2.2.15.
+ (__asm__ constructs): Replace with equivalent C code from linux 2.2.15
+ to support gcc-2.95.
+ * linux/src/drivers/scsi/in2000.h: Update asm code to linux 2.2.15.
+ * linux/src/drivers/scsi/ppa.c: Replace asm code with equivalent
+ C code from linux 2.2.15.
+
+2000-02-06 Stefan Weil <address@hidden>
+
+ * device/subrs.c: Fixed compiler warning.
+ * ddb/db_output.c, kern/bootstrap.c, kern/debug.c, kern/printf.c:
+ Replaced varargs.h by stdarg.h. Fixed prototypes (const char *fmt).
+ * ddb/db_output.h: Use prototype for db_printf.
+ * i386/Files: removed varargs.h.
+ * i386/i386/pit.h: Fixed compiler warning.
+ * i386/i386at/model_dep.c: Tried to fix compiler warning.
+ * i386/include/mach/sa/sys/varargs.h: Removed.
+ * i386/linux/Makefile.in: Removed delay.S, added delay.c.
+ * linux/dev/include/asm-i386/segment.h: Support gcc-2.95.
+ * linux/dev/include/asm-i386/string.h,
+ linux/src/include/asm-i386/string.h: Update from linux-2.2.14.
+ * linux/dev/lib/vsprintf.c: Fixed compiler warning.
+ * linux/src/include/asm-i386/delay.h: Update from linux-2.2.14.
+ * linux/src/arch/i386/lib/delay.c: Copy from linux-2.2.14.
+ * linux/src/include/asm-i386/string.h: Update from linux-2.2.14.
+
+1999-10-08 Thomas Bushnell, BSG <address@hidden>
+
+ * linux/src/drivers/net/3c59x.c: Updated to version 0.99L of the
+ driver from ftp://cesdis.gsfc.nasa.gov/linux/drivers/3c59x.c, in
+ order to support the 3c509c card, as requested by Jeff Bailey
+ <address@hidden>.
+
+1999-09-17 Thomas Bushnell, BSG <address@hidden>
+
+ * linux/dev/drivers/block/ide.c (do_request) [MACH]: In "bad
+ access" printf, actually print the number of sectors of the
+ partition.
+
+1999-10-05 Roland McGrath <address@hidden>
+
+ * i386/intel/pmap.c (pmap_bootstrap): Use _start instead of start.
+ * i386/i386/trap.c (kernel_trap): Likewise.
+
+1999-10-04 Roland McGrath <address@hidden>
+
+ * configure.in: Remove AC_CHECK_TOOL(MAKE,...) check.
+ * Makefile.in (MAKE): Variable removed. We require GNU make anyway,
+ and it always sets MAKE.
+ * configure: Regenerated.
+
+ * Makefile.in (clib-routines.o, check-clib-routines, clib-routines.d):
+ Remove these rules, replace with:
+ (kernel.o): New target, relocatable object linked from kernel objects.
+ (kernel-undef, kernel-undef-bad): New targets, glean undefined symbols
+ from kernel.o.
+ (clib-routines.o): New target, use those to select symbols from libc.
+ (clib-routines): Add some symbols; move defn to kernel linking page.
+ This variable is now a list of symbols allowed to be undefined,
+ rather than a prescriptive list of symbols always grabbed from libc.
+ (kernel): Rewrite this rules to just link kernel.o and clib-routines.o
+ together to make the kernel image.
+
+1999-09-15 Mark Kettenis <address@hidden>
+
+ * i386/i386/user_ldt.c: Fix user LDT management.
+ (i386_set_ldt): Prevent thrashing the LDT for the current thread.
+ Correctly calculate size of new LDT. Set base adress of the LDT
+ descriptor to the linear address of the LDT instead of the kernel
+ virtual address. Copy descriptors from the default LDT if there
+ is no old LDT for the current thread. Call switch_ktss if we are
+ setting a new LDT for the current thread.
+ (i386_get_ldt): Fix bug in copying out the descriptors.
+
+1999-09-09 Thomas Bushnell, BSG <address@hidden>
+
+ * linux/src/drivers/net/rtl8139.c (RX_BUF_LEN_IDX): Reduce from 3
+ to 2. (64K exceeds the limits in linux/dev/glue/kmem.c:kmalloc.)
+ (rtl8129_open): If we fail to get the memory we need, then free
+ the IRQ before returning.
+ Reported by Daniel Kobras <address@hidden>.
+
+1999-09-07 Thomas Bushnell, BSG <address@hidden>
+
+ * linux/src/drivers/net/yellowfin.c (yellowfin_probe): Return
+ correct value. Reported by Marcus Brinkmann
+ <address@hidden>.
+
+ * linux/dev/drivers/net/Space.c: Declare tc515_probe. Reported by
+ Marcus Brinkmann <address@hidden>.
+
+1999-09-04 Thomas Bushnell, BSG <address@hidden>
+
+ * vm/vm_resident.c (vm_page_grab): Only block unprivileged
+ allocations over vm_page_external_limit if they are actually
+ external allocations. Reported by Mark Kettenis
+ (address@hidden>.
+
+1999-08-10 Thomas Bushnell, BSG <address@hidden>
+
+ * i386/i386at/model_dep.c (init_alloc_aligned): Revert previous
+ change except for the one to AVAIL_NEXT. All the rest of the
+ previous code was correct. Correction from Momchil Velikov
+ (address@hidden).
+
+1999-07-23 Roland McGrath <address@hidden>
+
+ * Drivers.macros (AC_DRIVER): Use `test' instead of `[ ... ]'.
+ Reported by "Momchil 'Velco' Velikov" <address@hidden>.
+
+1999-07-20 Roland McGrath <address@hidden>
+
+ * linux/dev/drivers/block/genhd.c (check_partition): Change message
+ to say these are only the DOS partitions.
+ * i386/linux/dev/include/linux/autoconf.h (CONFIG_BSD_DISKLABEL,
+ CONFIG_SMD_DISKLABEL): #undef these. The dev/glue/block.c code
+ deals with BSD disklabels and expects the Linux genhd.c code to
+ handle only the DOS partitions; having genhd.c do BSD disklabels
+ too just confuses things.
+
+ Force subdirectory targets so they get recompiled properly.
+ * i386/Makefile.in (linux/linux.o): Depend on FORCE instead of linux.
+ (FORCE): New target.
+ * i386/Makefrag (i386/sysdep.o, FORCE): Likewise.
+
+1999-07-11 Thomas Bushnell, BSG <address@hidden>
+
+ * i386/i386at/model_dep.c (init_alloc_aligned): Make the checks
+ correctly for addresses falling into skip regions. Reported by
+ Momchil Velikov (address@hidden).
+
+1999-07-01 Thomas Bushnell, BSG <address@hidden>
+
+ * i386/linux/Makefile.in: For each .o file in $(linux-objs)
+ include a corresponding .d file, unless `no_deps' is `t'.
+ (make-deps): New function.
+ (%.d): New pattern rules for building %.d from %.c and %.S.
+
+1999-06-29 Thomas Bushnell, BSG <address@hidden>
+
+ * vm/vm_resident.c (vm_page_grab): Don't bounce requests when
+ vm_page_external_count == vm_page_external_limit, so that before
+ initialization is complete we can still allocate memory without
+ relying on current_thread.
+ (vm_page_wait): Also block if we are over the external page
+ limit.
+ * vm/vm_pageout.c (vm_pageout_scan): Rewrite the
+ scan-for-pages-to-pageout loop to not crash when we hit the end of
+ the inactive queue; instead jump back to the
+ pause-for-a-little-while code.
+
+1999-06-27 Thomas Bushnell, BSG <address@hidden>
+
+ * vm/vm_resident.c (vm_page_external_count): Define variable.
+ (vm_page_grab): New argument `external'. All callers changed.
+ Keep track of number of externally managed pages. Don't let
+ non-privileged threads exceed the externally-managed page limit.
+ (vm_page_grab_contiguous_pages): New argument `external'. All
+ callers changed. Keep track of number of externally managed
+ pages. Don't let non-privileged threads exceed the
+ externally-managed page limit.
+ (vm_page_convert): New argument `external', handed off to
+ vm_page_grab. All callers changed.
+ (vm_page_release): New argument `external'. All callers
+ changed. Keep track of number of externally managed pages.
+ (vm_page_bootstrap): Initialize M->external.
+ (vm_page_external_limit): Define new variable.
+ (vm_page_grab_phys_addr, vm_page_alloc): Add new arg for
+ vm_page_grab.
+ (vm_page_free): Provide new arg to vm_page_release.
+ * vm/vm_page.h (vm_page_external_limit, vm_page_external_count):
+ New variables.
+ (struct vm_page): New members `external' and `extcounted'.
+ (vm_page_grab, vm_page_release, vm_page_convert): Specify new
+ argument.
+ * vm/vm_pageout.c (vm_pageout): Initialize vm_page_external_limit
+ and vm_page_external_target.
+ (VM_PAGE_EXTERNAL_LIMIT, VM_PAGE_EXTERNAL_TARGET): New macro.
+ (vm_page_external_target): New variable.
+ (vm_pageout_scan): Regard "too many externally managed pages" as a
+ reason to keep doing work, but if that's the only reason we're
+ doing work, then the only thing we do is schedule cleaning of
+ pages. Help keep track of the number of externally managed pages
+ that we care about.
+ * i386/intel/pmap.c (pmap_page_table_page_alloc): Add new arg for
+ vm_page_grab.
+ * linux/dev/glue/block.c (alloc_buffer, device_read): Likewise.
+ * vm/vm_map.c (vm_map_copy_steal_pages): Likewise.
+ * vm/vm_fault.c (vm_fault_page): Add new args for vm_page_grab and
+ vm_page_convert.
+
+ * vm/vm_pageout.c (VM_PAGEOUT_BURST_WAIT): Reduce to 10ms/page.
+ (VM_PAGEOUT_EMPTY_WAIT): Reduce to 75 ms.
+ (VM_PAGE_FREE_RESERVED): Increase to 50 pages.
+ (VM_PAGEOUT_RESERVED_INTERNAL): Adjust to `(reserve) - 25'.
+ (VM_PAGEOUT_RESERVED_REALLY): Adjust to `(reserve) - 40'.
+
+1999-06-21 Thomas Bushnell, BSG <address@hidden>
+
+ * i386/Files: Don't mention i386/pc/Makerules,
+ i386/include/Makerules, or i386/util/Makerules.
+
+ * Makefile.in (all-real-archs): Delete variable.
+ (dist): No longer make `machine' symlink.
+
+ * Makefile.in (dist): Sanify file permissions before building tar
+ file.
+
+ * i386/Subdirs: Remove i386/i386at/boot.
+
+Sun Jun 20 18:33:59 1999 Thomas Bushnell, BSG <address@hidden>
+
+ * version.c (version): Updated to version 1.2.
+
+ * i386/Files: Regenerated.
+ * i386/Subdirs: Regenerated.
+
+ * linux/Files: New file.
+ * linux/Subdirs: New file.
+ * Makefile.in (all-archs): Add `linux'.
+ (all-real-archs): New variable.
+ (dist): Create `machine' symlink only on
+ $(all-real-archs).
+
+ * Makefile.in (dist): Use `cp' instead of `ln'.
+
+ * config.guess: Updated from autoconf 2.13.
+ * config.sub: Likewise.
+
+1999-06-16 Thomas Bushnell, BSG <address@hidden>
+
+ * linux/dev/drivers/net/Space.c (ethif_probe): Probe tc59x_probe
+ (CONFIG_VORTEX) after el3_probe (CONFIG_EL3), because the latter
+ card matches the former probe, but the driver doesn't work with
+ it. Reported by Marcus Brinkmann <address@hidden>.
+
+ * Drivers.macros (AC_DRIVER): Only turn on driver if $enableval is
+ not `no'. Reported by Kalle Olavi Niemitalo <address@hidden>.
+
+1999-06-15 Thomas Bushnell, BSG <address@hidden>
+
+ * ipc/ipc_init.c (ipc_bootstrap): Don't make the IOT_PORT zone
+ exhaustible, because allocation of ports for internal objects
+ panics if zalloc fails.
+
+1999-06-07 OKUJI Yoshinori <address@hidden>
+
+ * linux/dev/drivers/block/genhd.c [MACH] (mach_minor): New variable.
+ (add_bsd_partition): New function.
+ (bsd_disklabel_partition) [MACH]: Call add_bsd_partition.
+ (msdos_partition) [MACH]: Set mach_minor to MINOR before
+ calling bsd_disklabel_partition.
+ * linux/dev/drivers/block/ide.c (do_request) [MACH]: Fix "bad access"
+ message.
+
+1999-06-02 Roland McGrath <address@hidden>
+
+ * kern/bootstrap.c (build_args_and_stack): If kernel_cmdline is
+ nonempty, give the bootstrap task an environment variable of
+ "MULTIBOOT_CMDLINE=kernel command line" on its stack.
+
+1999-05-29 Roland McGrath <address@hidden>
+
+ * kern/startup.c (start_kernel_threads): Call record_time_stamp to
+ reset the kernel task's creation_time field, so it's not zero.
+
+1999-05-24 Mark Kettenis <address@hidden>
+
+ * i386/i386/fpu.c (fp_free): Clear task switch flag before calling
+ fwait.
+ (fpu_get_state): Only save FPU state info if the live FPU state
+ belongs to our target, i.e. if THREAD is the current thread.
+ (fp_load): Print warning if we try to load an invalid FPU state,
+ and reset the FPU to some sane state instead.
+
+1999-05-23 Roland McGrath <address@hidden>
+
+ * kern/task.c (task_info): Allow count for TASK_BASIC_INFO to be less
+ two words, not just one. The new member creation_time is two words.
+
+1999-05-22 Roland McGrath <address@hidden>
+
+ * linux/configure: Regenerated.
+
+1999-05-21 Roland McGrath <address@hidden>
+
+ * linux/configure.in: Fix names dummy -> dummy.in in AC_OUTPUT call.
+
+1999-05-14 Roland McGrath <address@hidden>
+
+ * i386/linux/Drivers.in (linux_DRIVER): New macro, does AC_DRIVER and
+ defines alias for Linux module name. Use that for all single-module
+ Linux drivers, so we don't forget to define any of the aliases for the
+ Linux module names.
+ * i386/linux/configure: Regenerated.
+
+1999-04-28 OKUJI Yoshinori <address@hidden>
+
+ * linux/dev/drivers/block/genhd.c (bsd_disklabel_partition) [MACH]:
+ Print BSD slices, using Mach device syntax instead of Linux extented
+ partition syntax.
+
+1999-05-01 Mark Kettenis <address@hidden>
+
+ * linux/dev/glue/block.c (device_get_status): Always set
+ status_count to DEV_GET_STATUS_COUNT if flavor is DEV_GET_SIZE.
+
+1999-04-30 Roland McGrath <address@hidden>
+
+ * i386/linux/Drivers.in: Don't create asm-${systype} symlinks here.
+ * linux/configure.in: New file. Create them here instead.
+ * linux/dummy.in: New file, used by configure.
+ * linux/configure: New file (generated by autoconf).
+ * configure.in: Configure in linux subdir.
+ * configure: Regenerated.
+
+ * i386/configure.in: Require only autoconf 2.12, not 2.13.
+ * i386/configure: Regenerated.
+
+ * aclocal.m4 (hurd_SYSTYPE): New macro.
+ * i386/linux/Drivers.in: Use it.
+ * i386/linux/configure: Regenerated.
+
+Wed Apr 28 02:17:51 1999 Thomas Bushnell, BSG <address@hidden>
+
+ * linux/src/drivers/net/3c59x.c: Upgrade to Linux 2.2.1 version.
+ (vortex_start_xmit): Don't frob VP->stat.tx_bytes.
+ (boomerang_start_xmit): Likewise.
+ (vortex_rx): Don't frob VP->stats.rx_bytes.
+ (boomerang_rx): Likewise.
+ Requested by Jeff Bailey (address@hidden).
+
+Mon Apr 26 02:13:02 1999 Thomas Bushnell, BSG <address@hidden>
+
+ * Makefile.in (objfiles): Don't add $(systype)/sysdep.o here.
+ ($(systype)/sysdep.o): Delete rule.
+ (clean, distclean, mostlyclean, maintainerclean, install-headers,
+ install-kernel): Don't do recursive make here.
+ * i386/Makefrag (objfiles): Add i386/sysdep.o to the list.
+ (i386/sysdep.o): New rule.
+ (clean): Depend on i386-clean.
+ (distclean): Depend on i386-distclean.
+ (mostlyclean): Depend on i386-mostlyclean.
+ (maintainerclean): Depend on i386-maintainerclean.
+ (install-headers): Depend on i386-install-headers.
+ (install-kernel): Depend on i386-install-kernel.
+ (i386-clean, i386-distclean, i386-mostlyclean,
+ i386-maintainerclean, i386-install-kernel, i386-install-headers):
+ New rules.
+
+1999-04-14 OKUJI Yoshinori <address@hidden>
+
+ * version.c (version): Update to 1.1.92.
+
+Sun Mar 14 18:53:01 1999 Thomas Bushnell, BSG <address@hidden>
+
+ * device/ds_routines.c (ds_read_done): When touching memory to
+ mark it dirty, make sure we say "volatile" so the compiler doesn't
+ optimize it out.
+
+1999-04-12 OKUJI Yoshinori <address@hidden>
+
+ * i386/linux/Drivers.in: Fix the source paths for `asm' symbolic
+ links. Reported by KONISHI Toru <address@hidden>.
+
+ * linux/dev/drivers/block/ide.c (init_hwif_data) [MACH]: Print Mach
+ device name instead of Linux one.
+ * linux/dev/drivers/block/genhd.c (disk_name): Likewise.
+ * linux/dev/drivers/scsi/sd.c (sd_init_onedisk): Likewise.
+ (sd_detect): Likewise.
+ * linux/dev/drivers/sr.c (sr_detect): Likewise.
+ (get_sectorsize): Likewise.
+
+1999-03-01 OKUJI Yoshinori <address@hidden>
+
+ Version 1.1.91.
+
+ * version.c (version): Update to 1.1.91.
+
+1999-03-01 OKUJI Yoshinori <address@hidden>
+
+ * i386/linux/Drivers.in: Fix linking paths.
+ * i386/linux/Makefile.in: Corrent include paths and fix
+ Drivers.macros location.
+
+1999-02-28 OKUJI Yoshinori <address@hidden>
+
+ * Makefile.in (clean): Don't move device-drivers.h, because it is
+ not in the top directory any longer.
+ (distclean): Remove config.cache and config.log.
+ * i386/Makefile.in (distclean): Remove config.status, config.log
+ and Makefile.
+ * i386/linux/Makefile.in (distclean): Remove config.status,
+ config.log, Makefile and device-drivers.h.
+
+1999-02-27 OKUJI Yoshinori <address@hidden>
+
+ * i386/linux/Drivers.in: Don't link dev/include/asm-i386 to
+ dev/include/asm. Check if directories already exist before
+ mkdir_p's. Link directories manually, because AC_LINK_FILES
+ is weak in linking files from non-current directories.
+
+ * i386/i386at/i386at_ds_routines.c: Include
+ <i386/linux/device-drivers.h> instead of <linux/device-drivers.h>.
+ * device/ds_routines.c [LINUX_DEV]: Likewise.
+ * i386/linux/Makefile.in (linux-gen-flags): Fix an extra slash.
+ (distclean): Remove asm links.
+ * linux/src/COPYING: Copied from linux-2.0.36.
+
+1999-02-27 OKUJI Yoshinori <address@hidden>
+
+ * Makefile.in: Omit to detect if com or lpr is used, and don't use
+ linux.o.
+ (objfiles): Add $(systype)/sysdep.o.
+ (clean): Chain the target to $(systype).
+ (distclean): Likewise.
+ (mostlyclean): Likewise.
+ (maintainer-clean): Likewise.
+ (install-headers): Likewise.
+ (install-kernel): Likewise.
+ * configure.in: AC_CONFIG_SUBDIRS ${systype} instead of linux.
+ (--disable-linuxdev): Deleted.
+ (--disable-com): Likewise.
+ (--enable-lpr): Likewise.
+ * i386/Makefile.in: New file.
+ * i386/configure.in: Likewise.
+ * i386/Makefrag (DEFINES): Add -DLINUX_DEV.
+ (objfiles): Always add com.o. If MACH_LPR is defined, then add lpr.o.
+ * linux/Drivers.in: Moved to ...
+ * i386/linux/Drivers.in: ... here. Include ../../aclocal.m4.
+ (mkdir_p): New function to create the linux include dirs.
+ * linux/Makefile.in: Moved to ...
+ * i386/linux/Makefile.in: ... here, and modify so that paths
+ are valid.
+ (clean): New target.
+ (distclean): Likewise.
+ (mostlyclean): Likewise.
+ (maintainer-clean): Likewise.
+ * linux/src/include/linux/autoconf.h: Removed.
+ * linux/dev/include/linux/autoconf.h: Moved to ...
+ * i386/linux/dev/include/linux/autoconf.h: ... here.
+ * linux/dev/arch/i386/linux_emul.h: Moved to ...
+ * i386/linux/dev/include/linux_emul.h: ... here.
+ * linux/device-drivers.h.in: Moved to ...
+ * i386/linux/device-drivers.h.in: ... here.
+ * linux/aclocal.m4: Removed.
+ * linux/configure: Likewise.
+
+1999-02-14 Gordon Matzigkeit <address@hidden>
+
+ * Makefile.in (install-kernel): Be sure that $(bootdir) is
+ created before installing the kernel.
+
+1999-02-06 OKUJI Yoshinori <address@hidden>
+
+ * configure.in: Enable com by default, because current kbd and
+ mouse can't be linked without com. Reported by M. Meiarashi
+ <address@hidden>.
+
+1999-02-05 OKUJI Yoshinori <address@hidden>
+
+ Version 1.1.90.
+
+ * version.c (version): Update to 1.1.90.
+
+1999-02-04 OKUJI Yoshinori <address@hidden>
+
+ * device/kmsg.c (kmsginit): Add a missing semicolon.
+ (kmsggetstat): Fix typos,
+ DEV_GET_DEVICE_SIZE -> DEV_GET_SIZE_DEVICE_SIZE and
+ DEV_GET_RECORD_SIZE -> DEV_GET_SIZE_RECORD_SIZE.
+ (kmsg_putchar): Fix a typo kmsg_done_init -> kmsg_init_done.
+ * linux/dev/glue/block.c (device_get_status): Allocate a hd_geometry
+ on the stack.
+ * linux/dev/drivers/block/ide.c: New file.
+ * linux/dev/drivers/scsi/sd_ioctl.c: New file.
+
+1999-02-02 OKUJI Yoshinori <address@hidden>
+
+ * i386/i386at/kd_event.c (kbdgetstat): Fix a typo
+ DEV_GET_SIZES -> DEV_GET_SIZE.
+ * i386/i386at/kd_mouse.c (mousegetstat): Likewise.
+ * device/kmsg.c (kmsggetstat): Likewise.
+
+1999-02-01 OKUJI Yoshinori <address@hidden>
+
+ * linux/dev/glue/block.c (dev_getstat): Fix a missing `struct'.
+ * device/cons.c (cninit): Don't call kmsginit.
+ * kmsg.c (kmsg_buffer): Defined as static.
+ (kmsg_write_offset): Likewise.
+ (kmsg_read_offset): Likewise.
+ (kmsg_read_queue): Likewise.
+ (kmsg_in_use): Likewise.
+ (kmsg_lock): Likewise.
+ (kmsginit): Likewise, and call queue_init instead of setting
+ PREV and NEXT manually.
+ (kmsg_done_init): New variable.
+ (kmsg_putchar): Call kmsginit if not initialized yet.
+ (kmsggetstat): New function.
+ * kmsg.h (kmsggetstat): Add the prototype.
+ * i386/i386at/kd_event.c (kbdgetstat): Handle DEV_GET_SIZE.
+ (kbdread): Check if the amount a user specify is a multiple
+ of sizeof(kd_event).
+ * i386/i386at/kd_mouse.c (mousegetstat): New function.
+ (mouseread): Check if the amount a user specify is a multiple
+ of sizeof(kd_event).
+ * i386/i386at/conf.c (dev_name_list): Set the mouse getstat entry
+ to mousegetstat and the kmsg getstat entry to kmsggetstat.
+ Use MACH_COM instead of NCOM to determine if com is used.
+ Use MACH_LPR instead of NLPR to determine if lpr is used.
+ * configure.in (--enable-com): New option.
+ (--enable-lpr): Likewise.
+ * Makefile.in (enable_com): New variable.
+ (enable_lpr): Likewise.
+ * i386/Makefrag (i386at-files): Remove com.c.
+ (objfiles): Add com.o if enable_com is yes, and lpr.o if enable_lpr
+ is yes.
+
+Tue Jan 26 21:36:10 1999 Thomas Bushnell, BSG <address@hidden>
+
+ * kern/exception.c (exception_no_server): Correctly comment out
+ the suspend code. (This should have happened on 17 April 1997,
+ but apparently I did it backwards.)
+
+1999-01-26 OKUJI Yoshinori <address@hidden>
+
+ * device/kmsg.c (kmsgopen): Added simple_lock and simple_unlock.
+ (ksmgclose): Likewise.
+
+1999-01-25 OKUJI Yoshinori <address@hidden>
+
+ * Makefile.in (install-headers): New target for installing only
+ the headers.
+ (install-kernel): New target for installing only the kernel.
+ (mkheaderdirs): New target for making the headers
+ installation directories.
+ (mkkerneldirs): New target for making the kernel
+ installation directory.
+ (install): Do nothing by itself, but depend on install-kernel
+ and install-headers.
+
+1999-01-24 OKUJI Yoshinori <address@hidden>
+
+ * device/kmsg.h (KMSGBUFSIZE): Deleted.
+ * device/kmsg.c: Rewritten completely to provide stream interface.
+ * linux/dev/glue/block.c (device_getstat): Added V_GETPARMS support.
+ * config.guess: New version from automake-1.4.
+ * config.sub: Likewise.
+ * install-sh: Likewise.
+
+ Some changes were merged from gnumach-m68k by
+ Aymeric Vincent <address@hidden>.
+
+ * Makefile.in (clean): Don't hang if device-drivers.h doesn't exist.
+ * linux/Makefile.in (CPPFLAGS): Fix a typo.
+
+1999-01-16 OKUJI Yoshinori <address@hidden>
+
+ * device/kmsg.c: Fixed the copyright notice.
+ (MACH_KMSG): Removed.
+ * Makefile.in (enable_kmsg): New variable.
+ (objfiles): Add kmsg.o, if and only if enable_kmsg is yes.
+
+1999-01-10 OKUJI Yoshinori <address@hidden>
+
+ * i386/i386at/kd.c: Applied a keymap patch. Reported by
+ Marcus Brinkmann <address@hidden>.
+ * i386/i386at/kd.h: Likewise.
+
+1998-12-30 OKUJI Yoshinori <address@hidden>
+
+ * linux/dev/glue/net.c (dev_alloc_skb): Change the skb arragement.
+ (dev_kfree_skb): Free only skb.
+ (device_write): Keep skb elements up-to-date.
+
+1998-12-18 OKUJI Yoshinori <address@hidden>
+
+ * Makefile.in (objfiles): Add kmsg.o.
+ * device/cons.c: Include <device/io_req.h>.
+ * device/kmsg.c: Rewritten almost entirely.
+
+1998-12-06 OKUJI Yoshinori <address@hidden>
+
+ Add kmsg device.
+
+ * Makefile.in (device-files): Add kmsg.c and kmsg.h.
+ * configure.in (--enable-kmsg): New option.
+ * device/cons.c: Include kmsg.h.
+ (cninit): Call kmsginit if MACH_KMSG is defined.
+ (cnputc): Call kmsg_putchar if MACH_KMSG is defined.
+ * device/kmsg.c: New file.
+ * device/kmsg.h: Likewise.
+ * i386/i386at/conf.c (dev_name_list): Add kmsg entry.
+
+1998-12-02 OKUJI Yoshinori <address@hidden>
+
+ * configure.in: Fix linuxdev option handling.
+ * linux/Drivers.in: Remove linuxdev option and fix linking files.
+ * linux/Makefile.in: Replace @DEFS@ with -DLINUX_DEV.
+ * linux/dev/arch/i386/kernel/irq.c: Include missing header files.
+ * linux/dev/arch/i386/kernel/setup.c: Include <device-drivers.h>.
+ * linux/dev/glue/kmem.c: Add printf declaration.
+ * linux/dev/glue/misc.c: Include <linux/types.h>.
+ * linux/dev/init/main.c: Call linux_sched_init instead of sched_init.
+ * linux/dev/kernel/sched.c: Add timer_bh declaration.
+ (tqueue_bh): Fix the argument.
+ (linux_sched_init): Renamed from sched_init.
+
+1998-12-01 OKUJI Yoshinori <address@hidden>
+
+ * i386/i386at/i386at_ds_routines.c: Include <linux/device-drivers.h>
+ only if LINUX_DEV is defined. Reported by UCHIYAMA Yasushi
+ <address@hidden>.
+ * device/ds_routines.c: Likewise.
+ * configure.in: AC_CONFIG_SUBDIRS(linux) instead of linuxdev.
+ (--disable-linuxdev): New option.
+ * linux/Makefile.in (CPPFLAGS): Remove -DLINUX_DEV, and add
@address@hidden
+ (objfiles): Add linux.o only if LINUX_DEV is defined.
+ * linux/Drivers.in (--disable-linuxdev): New option.
+ * i386/Makefrag (DEFINES): Remove -DLINUX_DEV.
+
+1998-11-30 OKUJI Yoshinori <address@hidden>
+
+ Clean up linux emulation code to make it architecture-independent
+ as much as possible.
+
+ * linux: Renamed from linuxdev.
+ * Makefile.in (objfiles): Add linux.o instead of linuxdev.o.
+ (MAKE): New variable. Used for the linux.o target.
+ * configure.in: Add AC_CHECK_TOOL(MAKE, make).
+ * i386/i386/spl.h: Include <i386/ipl.h>, for compatibility with
+ OSF Mach 3.0. Suggested by Elgin Lee <address@hidden>.
+ * linux/src: Renamed from linux/linux.
+ * linux/dev: Renamed from linux/mach.
+ * linux/Drivers.in (AC_INIT): Use dev/include/linux/autoconf.h,
+ instead of mach/include/linux/autoconf.h.
+ * Makefile.in (all): Target ../linux.o instead of ../linuxdev.o.
+ * linux/dev/drivers/block/genhd.c: Include <machine/spl.h> instead
+ of <i386/ipl.h>.
+ * linux/dev/drivers/net/auto_irq.c: Remove unneeded header files,
+ <i386/ipl.h> and <i386/pic.h>.
+ * linux/dev/init/main.c: Many i386-dependent codes moved to ...
+ * linux/dev/arch/i386/irq.c: ... here.
+ * linux/dev/arch/i386/setup.c: New file.
+ * linux/dev/arch/i386/linux_emul.h: Likewise.
+ * linux/dev/arch/i386/glue/timer.c: Merged into sched.c.
+ * linux/dev/arch/i386/glue/sched.c: Include <machine/spl.h> instead
+ of <i386/ipl.h>, and moved to ...
+ * linux/dev/kernel/sched.c: ... here.
+ * linux/dev/arch/i386/glue/block.c: Include <machine/spl.h> and
+ <linux_emul.h>, instead of i386-dependent header files, and
+ moved to ...
+ * linux/dev/glue/blocl.c: ... here.
+ * linux/dev/arch/i386/glue/net.c: Include <machine/spl.h> and
+ <linux_emul.h>, instead of i386-dependent header files, and
+ moved to ...
+ * linux/dev/glue/net.c: ... here.
+ * linux/dev/arch/i386/glue/misc.c: Remove `x86' and moved to ...
+ * linux/dev/glue/misc.c: ... here.
+ * linux/dev/arch/i386/glue/kmem.c: Moved to ...
+ * linux/dev/glue/kmem.c: ... here.
+
+1998-11-25 OKUJI Yoshinori <address@hidden>
+
+ * linuxdev/mach/init/main.c (linux_init): Call reserve_mach_irqs.
+ * linuxdev/mach/arch/i386/kernel/irq.c (probe_irq_on): Fix ivect
+ mishandling.
+ (probe_irq_off): Disable unnecessary IRQs. Reported by
+ UCHIYAMA Yasushi <address@hidden>.
+ (reserve_mach_irqs): New function.
+
+1998-11-24 OKUJI Yoshinori <address@hidden>
+
+ * linuxdev/arch/i386/linux_init.c (linux_init): Check ivect
+ before set linux_bad_intr.
+ * linuxdev/arch/i386/linux_irq.c (probe_irq_on): Allocate only
+ if ivect is null, and set linux_intr_pri to intpri.
+
+ * linuxdev: Heavily changed. It becomes more Linux-like file
+ hierarchy as suggested by Roland McGrath <address@hidden>.
+ * linuxdev/linux: Contain original Linux source files.
+ * linuxdev/mach: Contain modified source files for Mach.
+ * linuxdev/mach/arch/i386/glue: XXX Contain files that are
+ not easy to segregate.
+ * Makefile.in: Call `make -C linuxdev all', instead of include
+ linuxdev/Makefrag.
+
+1998-11-23 OKUJI Yoshinori <address@hidden>
+
+ * linuxdev/arch/i386/linux_irq.c (linux_bad_intr): New function.
+ (free_irq): Set linux_bad_intr into ivect[irq].
+ * linuxdev/arch/i386/linux_init.c (linux_init):
+ Set linux_bad_intr as the default interrupt handler.
+
+ * linuxdev/include/asm-i386/string.h (strstr): Fix the
+ egcs/gcc 2.8.x bug and a linkage problem. Reported by
+ Roland McGrath <address@hidden>.
+
+1998-11-18 OKUJI Yoshinori <address@hidden>
+
+ * linuxdev/Drivers.in: Fix a typo.
+ * linuxdev/Makefrag: Likewise.
+ * linuxdev/arch/i386/linux_block.c (set_blocksize): Likewise.
+
+ * linuxdev/arch/i386/linux_kmem.c (vfree): Cast void * to
+ vm_offset_t.
+ * linuxdev/drivers/net/wavelan.p.h: Include
+ <linuxdev/drivers/net/i82586.h>, instead of <drivers/net/i82586.h>.
+ * linuxdev/drivers/scsi/aha152x.c: Define AUTOCONF.
+ * linuxdev/configure: Regenerate.
+
+1998-11-17 OKUJI Yoshinori <address@hidden>
+
+ * linuxdev/arch/i386/linux_misc.c (strstr): New function.
+ Because inline version strstr is not used when use
+ egcs/gcc 2.8.x. Reported by UCHIYAMA Yasushi <address@hidden>.
+
+ * linuxdev/arch/i386/linux_irq.c (unmask_irq): Fix a typo.
+
+1998-11-17 OKUJI Yoshinori <address@hidden>
+
+ * i386/README-Drivers: Update to Linux 2.0.36 device drivers.
+ * linuxdev/Drivers.in: Likewise.
+ * linuxdev/Makefrag: Likewise.
+ * linuxdev/arch/i386/linux_lib.S: Likewise.
+ * linuxdev/device-drivers.h.in: Likewise.
+ * linuxdev/drivers/block/floppy.c: Likewise.
+ * linuxdev/drivers/block/ide.c: Likewise.
+ * linuxdev/drivers/block/ide.h: Likewise.
+ * linuxdev/drivers/net/3c505.h: Likewise.
+ * linuxdev/drivers/net/3c509.c: Likewise.
+ * linuxdev/drivers/net/3c515.c: Likewise.
+ * linuxdev/drivers/net/3c59x.c: Likewise.
+ * linuxdev/drivers/net/Space.c: Likewise.
+ * linuxdev/drivers/net/apricot.c: Likewise.
+ * linuxdev/drivers/net/de4x5.c: Likewise.
+ * linuxdev/drivers/net/eepro.c: Likewise.
+ * linuxdev/drivers/net/eepro100.c: Likewise.
+ * linuxdev/drivers/net/eexpress.c: Likewise.
+ * linuxdev/drivers/net/epic100.c: Likewise.
+ * linuxdev/drivers/net/eth16i.c: Likewise.
+ * linuxdev/drivers/net/hp100.c: Likewise.
+ * linuxdev/drivers/net/lance.c: Likewise.
+ * linuxdev/drivers/net/ne2k-pci.c: Likewise.
+ * linuxdev/drivers/net/pcnet32.c: Likewise.
+ * linuxdev/drivers/net/rtl8139.c: Likewise.
+ * linuxdev/drivers/net/tlan.c: Likewise.
+ * linuxdev/drivers/net/tulip.c: Likewise.
+ * linuxdev/drivers/net/wavelan.c: Likewise.
+ * linuxdev/drivers/pci/pci.c: Likewise.
+ * linuxdev/drivers/scsi/BusLogic.c: Likewise.
+ * linuxdev/drivers/scsi/FlashPoint.c: Likewise.
+ * linuxdev/drivers/scsi/aha152x.c: Likewise.
+ * linuxdev/drivers/scsi/aha1542.c: Likewise.
+ * linuxdev/drivers/scsi/aic7xxx/sequencer.h: Likewise.
+ * linuxdev/drivers/scsi/aic7xxx.c: Likewise.
+ * linuxdev/drivers/scsi/aic7xxx_proc.c: Likewise.
+ * linuxdev/drivers/scsi/aic7xxx_reg.h: Likewise.
+ * linuxdev/drivers/scsi/dtc.c: Likewise.
+ * linuxdev/drivers/scsi/eata.c: Likewise.
+ * linuxdev/drivers/scsi/eata.h: Likewise.
+ * linuxdev/drivers/scsi/eata_dma.c: Likewise.
+ * linuxdev/drivers/scsi/gdth.c: Likewise.
+ * linuxdev/drivers/scsi/gdth.h: Likewise.
+ * linuxdev/drivers/scsi/gdth_proc.c: Likewise.
+ * linuxdev/drivers/scsi/gdth_proc.h: Likewise.
+ * linuxdev/drivers/scsi/hosts.c: Likewise.
+ * linuxdev/drivers/scsi/in2000.c: Likewise.
+ * linuxdev/drivers/scsi/in2000.h: Likewise.
+ * linuxdev/drivers/scsi/ncr53c8xx.c: Likewise.
+ * linuxdev/drivers/scsi/ppa.h: Likewise.
+ * linuxdev/drivers/scsi/scsi.c: Likewise.
+ * linuxdev/drivers/scsi/scsicam.c: Likewise.
+ * linuxdev/drivers/scsi/sd.c: Likewise.
+ * linuxdev/drivers/scsi/seagate.c: Likewise.
+ * linuxdev/drivers/scsi/u14-34f.c: Likewise.
+ * linuxdev/drivers/scsi/u14-34f.h: Likewise.
+ * linuxdev/drivers/scsi/wd7000.c: Likewise.
+ * linuxdev/drivers/scsi/wd7000.h: Likewise.
+ * linuxdev/include/asm-i386/irq.h: Likewise.
+ * linuxdev/include/asm-i386/processor.h: Likewise.
+ * linuxdev/include/asm-i386/ptrace.h: Likewise.
+ * linuxdev/include/asm-i386/system.h: Likewise.
+ * linuxdev/include/asm-i386/unistd.h: Likewise.
+ * linuxdev/include/linux/fs.h: Likewise.
+ * linuxdev/include/linux/genhd.h: Likewise.
+ * linuxdev/include/linux/interrupt.h: Likewise.
+ * linuxdev/include/linux/ip.h: Likewise.
+ * linuxdev/include/linux/pci.h: Likewise.
+ * linuxdev/include/linux/version.h: Likewise.
+ * linuxdev/include/linux/wireless.h: Likewise.
+
+ * linuxdev/drivers/net/via-rhine.c: New file.
+ * linuxdev/drivers/scsi/aic7xxx_seq.c: Likewise.
+ * linuxdev/include/linux/rose.h: Likewise.
+
+ * linuxdev/drivers/scsi/aic7xxx_seq.h: Removed.
+ * linuxdev/configure: Regenerate.
+ * linuxdev/include/asm-i386/string.h: Fix the egcs/gcc 2.8.x problem,
+ according to http://www.suse.de/~florian/kernel+egcs.html.
+
+1998-11-14 OKUJI Yoshinori <address@hidden>
+
+ * Makefile.in (clib-routines.o): Add -L option to search libc.a.
+ Reported by TAKEUCHI Yoji <address@hidden>.
+
+ * linuxdev/drivers/pci/bios32.c: Moved to ...
+ * linuxdev/arch/i386/linux_bios32.c: ... here. Because it is
+ i386-specific code.
+ * linuxdev/include/asm: Moved to ...
+ * linuxdev/include/asm-i386: ... here.
+
+ * i386/README-Drivers: Update to Linux 2.0.35 device drivers.
+ * linuxdev/Drivers.in: Likewise.
+ * linuxdev/configure: Likewise.
+ * linuxdev/device-drivers.h.in: Likewise.
+ * linuxdev/Makefrag: Likewise.
+ * linuxdev/arch/i386/linux_autoirq.c: Likewise.
+ * linuxdev/arch/i386/linux_block.c: Likewise.
+ * linuxdev/arch/i386/linux_dma.c: Likewise.
+ * linuxdev/arch/i386/linux_init.c: Likewise.
+ * linuxdev/arch/i386/linux_irq.c: Likewise.
+ * linuxdev/arch/i386/linux_kmem.c: Likewise.
+ * linuxdev/arch/i386/linux_misc.c: Likewise.
+ * linuxdev/arch/i386/linux_net.c: Likewise.
+ * linuxdev/arch/i386/linux_port.c: Likewise.
+ * linuxdev/arch/i386/linux_printk.c: Likewise.
+ * linuxdev/arch/i386/linux_sched.c: Likewise.
+ * linuxdev/arch/i386/linux_timer.c: Likewise.
+ * linuxdev/arch/i386/linux_version.c: Likewise.
+ * linuxdev/arch/i386/linux_vsprintf.c: Likewise.
+ * linuxdev/drivers/block/cmd640.c: Likewise.
+ * linuxdev/drivers/block/floppy.c: Likewise.
+ * linuxdev/drivers/block/genhd.c: Likewise.
+ * linuxdev/drivers/block/ide-cd.c: Likewise.
+ * linuxdev/drivers/block/ide.c: Likewise.
+ * linuxdev/drivers/block/ide.h: Likewise.
+ * linuxdev/drivers/block/ide_modes.h: Likewise.
+ * linuxdev/drivers/block/rz1000.c: Likewise.
+ * linuxdev/drivers/block/triton.c: Likewise.
+ * linuxdev/drivers/net/3c501.c: Likewise.
+ * linuxdev/drivers/net/3c503.c: Likewise.
+ * linuxdev/drivers/net/3c505.c: Likewise.
+ * linuxdev/drivers/net/3c507.c: Likewise.
+ * linuxdev/drivers/net/3c509.c: Likewise.
+ * linuxdev/drivers/net/3c59x.c: Likewise.
+ * linuxdev/drivers/net/8390.c: Likewise.
+ * linuxdev/drivers/net/8390.h: Likewise.
+ * linuxdev/drivers/net/Space.c: Likewise.
+ * linuxdev/drivers/net/ac3200.c: Likewise.
+ * linuxdev/drivers/net/apricot.c: Likewise.
+ * linuxdev/drivers/net/at1700.c: Likewise.
+ * linuxdev/drivers/net/atp.c: Likewise.
+ * linuxdev/drivers/net/atp.h: Likewise.
+ * linuxdev/drivers/net/de4x5.c: Likewise.
+ * linuxdev/drivers/net/de4x5.h: Likewise.
+ * linuxdev/drivers/net/de600.c: Likewise.
+ * linuxdev/drivers/net/de620.c: Likewise.
+ * linuxdev/drivers/net/depca.c: Likewise.
+ * linuxdev/drivers/net/dev.c: Likewise.
+ * linuxdev/drivers/net/e2100.c: Likewise.
+ * linuxdev/drivers/net/eepro.c: Likewise.
+ * linuxdev/drivers/net/eepro100.c: Likewise.
+ * linuxdev/drivers/net/eexpress.c: Likewise.
+ * linuxdev/drivers/net/eth16i.c: Likewise.
+ * linuxdev/drivers/net/ewrk3.c: Likewise.
+ * linuxdev/drivers/net/ewrk3.h: Likewise.
+ * linuxdev/drivers/net/hp-plus.c: Likewise.
+ * linuxdev/drivers/net/hp.c: Likewise.
+ * linuxdev/drivers/net/hp100.c: Likewise.
+ * linuxdev/drivers/net/hp100.h: Likewise.
+ * linuxdev/drivers/net/i82586.h: Likewise.
+ * linuxdev/drivers/net/lance.c: Likewise.
+ * linuxdev/drivers/net/ne.c: Likewise.
+ * linuxdev/drivers/net/net_init.c: Likewise.
+ * linuxdev/drivers/net/ni52.c: Likewise.
+ * linuxdev/drivers/net/ni52.h: Likewise.
+ * linuxdev/drivers/net/ni65.c: Likewise.
+ * linuxdev/drivers/net/ni65.h: Likewise.
+ * linuxdev/drivers/net/seeq8005.c: Likewise.
+ * linuxdev/drivers/net/seeq8005.h: Likewise.
+ * linuxdev/drivers/net/sk_g16.c: Likewise.
+ * linuxdev/drivers/net/sk_g16.h: Likewise.
+ * linuxdev/drivers/net/smc-ultra.c: Likewise.
+ * linuxdev/drivers/net/tulip.c: Likewise.
+ * linuxdev/drivers/net/wavelan.c: Likewise.
+ * linuxdev/drivers/net/wavelan.h: Likewise.
+ * linuxdev/drivers/net/wd.c: Likewise.
+ * linuxdev/drivers/net/znet.c: Likewise.
+ * linuxdev/drivers/pci/pci.c: Likewise.
+ * linuxdev/drivers/scsi/53c7,8xx.h: Likewise.
+ * linuxdev/drivers/scsi/53c78xx.c: Likewise.
+ * linuxdev/drivers/scsi/53c8xx_d.h: Likewise.
+ * linuxdev/drivers/scsi/AM53C974.c: Likewise.
+ * linuxdev/drivers/scsi/AM53C974.h: Likewise.
+ * linuxdev/drivers/scsi/BusLogic.c: Likewise.
+ * linuxdev/drivers/scsi/BusLogic.h: Likewise.
+ * linuxdev/drivers/scsi/NCR53c406a.c: Likewise.
+ * linuxdev/drivers/scsi/NCR53c406a.h: Likewise.
+ * linuxdev/drivers/scsi/advansys.c: Likewise.
+ * linuxdev/drivers/scsi/advansys.h: Likewise.
+ * linuxdev/drivers/scsi/aha152x.c: Likewise.
+ * linuxdev/drivers/scsi/aha152x.h: Likewise.
+ * linuxdev/drivers/scsi/aha1542.c: Likewise.
+ * linuxdev/drivers/scsi/aha1542.h: Likewise.
+ * linuxdev/drivers/scsi/aha1740.c: Likewise.
+ * linuxdev/drivers/scsi/aha1740.h: Likewise.
+ * linuxdev/drivers/scsi/aic7xxx.c: Likewise.
+ * linuxdev/drivers/scsi/aic7xxx.h: Likewise.
+ * linuxdev/drivers/scsi/aic7xxx_seq.h: Likewise.
+ * linuxdev/drivers/scsi/constants.h: Likewise.
+ * linuxdev/drivers/scsi/eata.c: Likewise.
+ * linuxdev/drivers/scsi/eata.h: Likewise.
+ * linuxdev/drivers/scsi/eata_dma.c: Likewise.
+ * linuxdev/drivers/scsi/eata_dma.h: Likewise.
+ * linuxdev/drivers/scsi/eata_generic.h: Likewise.
+ * linuxdev/drivers/scsi/eata_pio.c: Likewise.
+ * linuxdev/drivers/scsi/eata_pio.h: Likewise.
+ * linuxdev/drivers/scsi/fdomain.c: Likewise.
+ * linuxdev/drivers/scsi/fdomain.h: Likewise.
+ * linuxdev/drivers/scsi/g_NCR5380.c: Likewise.
+ * linuxdev/drivers/scsi/g_NCR5380.h: Likewise.
+ * linuxdev/drivers/scsi/hosts.c: Likewise.
+ * linuxdev/drivers/scsi/hosts.h: Likewise.
+ * linuxdev/drivers/scsi/in2000.c: Likewise.
+ * linuxdev/drivers/scsi/in2000.h: Likewise.
+ * linuxdev/drivers/scsi/pas16.c: Likewise.
+ * linuxdev/drivers/scsi/pas16.h: Likewise.
+ * linuxdev/drivers/scsi/scsi.c: Likewise.
+ * linuxdev/drivers/scsi/scsi.h: Likewise.
+ * linuxdev/drivers/scsi/scsi_ioctl.c: Likewise.
+ * linuxdev/drivers/scsi/scsi_proc.c: Likewise.
+ * linuxdev/drivers/scsi/scsicam.c: Likewise.
+ * linuxdev/drivers/scsi/sd.c: Likewise.
+ * linuxdev/drivers/scsi/sd.h: Likewise.
+ * linuxdev/drivers/scsi/sd_ioctl.c: Likewise.
+ * linuxdev/drivers/scsi/seagate.c: Likewise.
+ * linuxdev/drivers/scsi/seagate.h: Likewise.
+ * linuxdev/drivers/scsi/sr.c: Likewise.
+ * linuxdev/drivers/scsi/sr_ioctl.c: Likewise.
+ * linuxdev/drivers/scsi/t128.c: Likewise.
+ * linuxdev/drivers/scsi/t128.h: Likewise.
+ * linuxdev/drivers/scsi/u14-34f.c: Likewise.
+ * linuxdev/drivers/scsi/u14-34f.h: Likewise.
+ * linuxdev/drivers/scsi/ultrastor.c: Likewise.
+ * linuxdev/drivers/scsi/ultrastor.h: Likewise.
+ * linuxdev/drivers/scsi/wd7000.c: Likewise.
+ * linuxdev/drivers/scsi/wd7000.h: Likewise.
+ * linuxdev/include/asm-i386/bitops.h: Likewise.
+ * linuxdev/include/asm-i386/delay.h: Likewise.
+ * linuxdev/include/asm-i386/dma.h: Likewise.
+ * linuxdev/include/asm-i386/errno.h: Likewise.
+ * linuxdev/include/asm-i386/fcntl.h: Likewise.
+ * linuxdev/include/asm-i386/floppy.h: Likewise.
+ * linuxdev/include/asm-i386/ioctl.h: Likewise.
+ * linuxdev/include/asm-i386/floppy.h: Likewise.
+ * linuxdev/include/asm-i386/irq.h: Likewise.
+ * linuxdev/include/asm-i386/processor.h: Likewise.
+ * linuxdev/include/asm-i386/ptrace.h: Likewise.
+ * linuxdev/include/asm-i386/resource.h: Likewise.
+ * linuxdev/include/asm-i386/segment.h: Likewise.
+ * linuxdev/include/asm-i386/sigcontext.h: Likewise.
+ * linuxdev/include/asm-i386/signal.h: Likewise.
+ * linuxdev/include/asm-i386/socket.h: Likewise.
+ * linuxdev/include/asm-i386/statfs.h: Likewise.
+ * linuxdev/include/asm-i386/string.h: Likewise.
+ * linuxdev/include/asm-i386/system.h: Likewise.
+ * linuxdev/include/asm-i386/termios.h: Likewise.
+ * linuxdev/include/asm-i386/types.h: Likewise.
+ * linuxdev/include/asm-i386/unistd.h: Likewise.
+ * linuxdev/include/linux/autoconf.h: Likewise.
+ * linuxdev/include/linux/binfmts.h: Likewise.
+ * linuxdev/include/linux/bios32.h: Likewise.
+ * linuxdev/include/linux/blk.h: Likewise.
+ * linuxdev/include/linux/blkdev.h: Likewise.
+ * linuxdev/include/linux/cdrom.h: Likewise.
+ * linuxdev/include/linux/config.h: Likewise.
+ * linuxdev/include/linux/etherdevice.h: Likewise.
+ * linuxdev/include/linux/fd.h: Likewise.
+ * linuxdev/include/linux/fdreg.h: Likewise.
+ * linuxdev/include/linux/fs.h: Likewise.
+ * linuxdev/include/linux/genhd.h: Likewise.
+ * linuxdev/include/linux/hdreg.h: Likewise.
+ * linuxdev/include/linux/if.h: Likewise.
+ * linuxdev/include/linux/if_arp.h: Likewise.
+ * linuxdev/include/linux/if_ether.h: Likewise.
+ * linuxdev/include/linux/if_tr.h: Likewise.
+ * linuxdev/include/linux/igmp.h: Likewise.
+ * linuxdev/include/linux/in.h: Likewise.
+ * linuxdev/include/linux/inet.h: Likewise.
+ * linuxdev/include/linux/interrupt.h: Likewise.
+ * linuxdev/include/linux/ioport.h: Likewise.
+ * linuxdev/include/linux/ip.h: Likewise.
+ * linuxdev/include/linux/kernel.h: Likewise.
+ * linuxdev/include/linux/locks.h: Likewise.
+ * linuxdev/include/linux/major.h: Likewise.
+ * linuxdev/include/linux/malloc.h: Likewise.
+ * linuxdev/include/linux/mc146818rtc.h: Likewise.
+ * linuxdev/include/linux/mm.h: Likewise.
+ * linuxdev/include/linux/module.h: Likewise.
+ * linuxdev/include/linux/mount.h: Likewise.
+ * linuxdev/include/linux/net.h: Likewise.
+ * linuxdev/include/linux/netdevice.h: Likewise.
+ * linuxdev/include/linux/nfs.h: Likewise.
+ * linuxdev/include/linux/notifier.h: Likewise.
+ * linuxdev/include/linux/pagemap.h: Likewise.
+ * linuxdev/include/linux/pci.h: Likewise.
+ * linuxdev/include/linux/personality.h: Likewise.
+ * linuxdev/include/linux/proc_fs.h: Likewise.
+ * linuxdev/include/linux/quota.h: Likewise.
+ * linuxdev/include/linux/route.h: Likewise.
+ * linuxdev/include/linux/sched.h: Likewise.
+ * linuxdev/include/linux/skbuff.h: Likewise.
+ * linuxdev/include/linux/socket.h: Likewise.
+ * linuxdev/include/linux/sockios.h: Likewise.
+ * linuxdev/include/linux/string.h: Likewise.
+ * linuxdev/include/linux/time.h: Likewise.
+ * linuxdev/include/linux/timer.h: Likewise.
+ * linuxdev/include/linux/tqueue.h: Likewise.
+ * linuxdev/include/linux/tty.h: Likewise.
+ * linuxdev/include/linux/types.h: Likewise.
+ * linuxdev/include/linux/uio.h: Likewise.
+ * linuxdev/include/linux/version.h: Likewise.
+ * linuxdev/include/linux/wait.h: Likewise.
+ * linuxdev/include/net/af_unix.h: Likewise.
+ * linuxdev/include/net/ax25.h: Likewise.
+ * linuxdev/include/net/ax25call.h: Likewise.
+ * linuxdev/include/net/icmp.h: Likewise.
+ * linuxdev/include/net/ip.h: Likewise.
+ * linuxdev/include/net/ip_alias.h: Likewise.
+ * linuxdev/include/net/ip_forward.h: Likewise.
+ * linuxdev/include/net/ipx.h: Likewise.
+ * linuxdev/include/net/netlink.h: Likewise.
+ * linuxdev/include/net/netrom.h: Likewise.
+ * linuxdev/include/net/nrcall.h: Likewise.
+ * linuxdev/include/net/p8022.h: Likewise.
+ * linuxdev/include/net/protocol.h: Likewise.
+ * linuxdev/include/net/psnap.h: Likewise.
+ * linuxdev/include/net/raw.h: Likewise.
+ * linuxdev/include/net/route.h: Likewise.
+ * linuxdev/include/net/sock.h: Likewise.
+ * linuxdev/include/net/tcp.h: Likewise.
+ * linuxdev/include/net/udp.h: Likewise.
+
+ * linuxdev/arch/i386/linux_soft.c: Removed.
+ * linuxdev/drivers/scsi/NCR5380.src: Likewise.
+ * linuxdev/drivers/scsi/aic7xxx_proc.src: Likewise.
+ * linuxdev/drivers/scsi/aic7xxx_reg.h: Likewise.
+ * linuxdev/drivers/scsi/eata_dma_proc.src: Likewise.
+ * linuxdev/drivers/scsi/eata_pio_proc.src: Likewise.
+ * linuxdev/drivers/scsi/qlogic.c: Likewise.
+ * linuxdev/drivers/scsi/qlogic.h: Likewise.
+ * linuxdev/drivers/scsi/scsi_debug.c: Likewise.
+ * linuxdev/drivers/scsi/scsi_debug.h: Likewise.
+ * linuxdev/drivers/scsi/scsi_ioctl.h: Likewise.
+ * linuxdev/include/linux/math_emu.h: Likewise.
+ * linuxdev/include/linux/minix_fs.h: Likewise.
+ * linuxdev/include/linux/minix_fs_sb.h: Likewise.
+ * linuxdev/include/linux/scsi.h: Likewise.
+ * linuxdev/include/linux/scsicam.h: Likewise.
+ * linuxdev/include/linux/vm86.h: Likewise.
+
+ * linuxdev/arch/i386/linux_ctype.c: New file.
+ * linuxdev/arch/i386/linux_lib.S: Likewise.
+ * linuxdev/arch/i386/linux_softirq.c: Likewise.
+ * linuxdev/drivers/net/3c515.c: Likewise.
+ * linuxdev/drivers/net/epic100.c: Likewise.
+ * linuxdev/drivers/net/eth82586.h: Likewise.
+ * linuxdev/drivers/net/fmv18x.c: Likewise.
+ * linuxdev/drivers/net/ne2k-pci.c: Likewise.
+ * linuxdev/drivers/net/pcnet32.c: Likewise.
+ * linuxdev/drivers/net/rtl8139.c: Likewise.
+ * linuxdev/drivers/net/smc-ultra32.c: Likewise.
+ * linuxdev/drivers/net/smc9194.c: Likewise.
+ * linuxdev/drivers/net/smc9194.h: Likewise.
+ * linuxdev/drivers/net/tlan.c: Likewise.
+ * linuxdev/drivers/net/tlan.h: Likewise.
+ * linuxdev/drivers/net/wavelan.p.h: Likewise.
+ * linuxdev/drivers/net/yellowfin.c: Likewise.
+ * linuxdev/drivers/scsi/FlashPoint.c: Likewise.
+ * linuxdev/drivers/scsi/NCR5380.c: Likewise.
+ * linuxdev/drivers/scsi/NCR5380.h: Likewise.
+ * linuxdev/drivers/scsi/aic7xxx/scsi_message.h: Likewise.
+ * linuxdev/drivers/scsi/aic7xxx/sequencer.h: Likewise.
+ * linuxdev/drivers/scsi/aic7xxx_proc.c: Likewise.
+ * linuxdev/drivers/scsi/dc390.h: Likewise.
+ * linuxdev/drivers/scsi/dc390w.h: Likewise.
+ * linuxdev/drivers/scsi/dtc.c: Likewise.
+ * linuxdev/drivers/scsi/dtc.h: Likewise.
+ * linuxdev/drivers/scsi/eata_dma_proc.c: Likewise.
+ * linuxdev/drivers/scsi/eata_pio_proc.c: Likewise.
+ * linuxdev/drivers/scsi/gdth.c: Likewise.
+ * linuxdev/drivers/scsi/gdth.h: Likewise.
+ * linuxdev/drivers/scsi/gdth_ioctl.h: Likewise.
+ * linuxdev/drivers/scsi/gdth_proc.c: Likewise.
+ * linuxdev/drivers/scsi/gdth_proc.h: Likewise.
+ * linuxdev/drivers/scsi/ncr53c8xx.c: Likewise.
+ * linuxdev/drivers/scsi/ncr53c8xx.h: Likewise.
+ * linuxdev/drivers/scsi/ppa.c: Likewise.
+ * linuxdev/drivers/scsi/ppa.h: Likewise.
+ * linuxdev/drivers/scsi/qlogicfas.c: Likewise.
+ * linuxdev/drivers/scsi/qlogicfas.h: Likewise.
+ * linuxdev/drivers/scsi/qlogicisp.c: Likewise.
+ * linuxdev/drivers/scsi/qlogicisp.h: Likewise.
+ * linuxdev/drivers/scsi/qlogicisp_asm.c: Likewise.
+ * linuxdev/drivers/scsi/scripts.h: Likewise.
+ * linuxdev/drivers/scsi/scsiio.c: Likewise.
+ * linuxdev/drivers/scsi/scsiiom.c: Likewise.
+ * linuxdev/drivers/scsi/tmscsim.c: Likewise.
+ * linuxdev/drivers/scsi/tmscsim.h: Likewise.
+ * linuxdev/drivers/scsi/tmscsiw.c: Likewise.
+ * linuxdev/drivers/scsi/tmscsiw.h: Likewise.
+ * linuxdev/include/asm-i386/atomic.h: Likewise.
+ * linuxdev/include/asm-i386/checksum.h: Likewise.
+ * linuxdev/include/asm-i386/ioctls.h: Likewise.
+ * linuxdev/include/asm-i386/math_emu.h: Likewise.
+ * linuxdev/include/asm-i386/posix_types.h: Likewise.
+ * linuxdev/include/asm-i386/semaphore.h: Likewise.
+ * linuxdev/include/asm-i386/sockios.h: Likewise.
+ * linuxdev/include/asm-i386/string-486.h: Likewise.
+ * linuxdev/include/asm-i386/termbits.h: Likewise.
+ * linuxdev/include/asm-i386/unaligned.h: Likewise.
+ * linuxdev/include/asm-i386/vm86.h: Likewise.
+ * linuxdev/include/linux/affs_hardblocks.h: Likewise.
+ * linuxdev/include/linux/atalk.h: Likewise.
+ * linuxdev/include/linux/ax25.h: Likewise.
+ * linuxdev/include/linux/compile.h: Likewise.
+ * linuxdev/include/linux/ctype.h: Likewise.
+ * linuxdev/include/linux/fddidevice.h: Likewise.
+ * linuxdev/include/linux/icmp.h: Likewise.
+ * linuxdev/include/linux/if_fddi.h: Likewise.
+ * linuxdev/include/linux/ipx.h: Likewise.
+ * linuxdev/include/linux/md.h: Likewise.
+ * linuxdev/include/linux/netrom.h: Likewise.
+ * linuxdev/include/linux/posix_types.h: Likewise.
+ * linuxdev/include/linux/random.h: Likewise.
+ * linuxdev/include/linux/ucdrom.h: Likewise.
+ * linuxdev/include/linux/udp.h: Likewise.
+ * linuxdev/include/linux/wireless.h: Likewise.
+ * linuxdev/include/net/br.h: Likewise.
+ * linuxdev/include/net/gc.h: Likewise.
+ * linuxdev/include/net/ip_masq.h: Likewise.
+ * linuxdev/include/net/p8022tr.h: Likewise.
+ * linuxdev/include/net/p8022trcall.h: Likewise.
+ * linuxdev/include/net/rose.h: Likewise.
+ * linuxdev/include/net/rosecall.h: Likewise.
+ * linuxdev/include/net/slhc_vj.h: Likewise.
+ * linuxdev/include/net/spx.h: Likewise.
+ * linuxdev/include/scsi/scsi.h: Likewise.
+ * linuxdev/include/scsi/scsi_ioctl.h: Likewise.
+ * linuxdev/include/scsi/scsicam.h: Likewise.
+
+1998-11-06 OKUJI Yoshinori <address@hidden>
+
+ * i386/i386at/gpl/linux: Moved to ...
+ * linuxdev: ... here.
+ * i386/Makefrag: Linux drivers specific code moved to ...
+ * linuxdev/Makefrag: ... here.
+ * i386/Files: Recreated.
+ * i386/Subdirs: Likewise.
+ * linuxdev/drivers: New directory.
+ * linuxdev/arch: Likewise.
+ * linuxdev/arch/i386: Likewise.
+ * linuxdev/{block,scsi,net,pci}: Moved to ...
+ * linuxdev/drivers/{block,scsi,net,pci}: ... here.
+ * i386/{Drivers.in,device-drivers.h.in,driverlist.in}: Moved to ...
+ * linuxdev/{Drivers.in,device-drivers.h.in,driverlist.in}: ... here.
+ * linuxdev/{linux_emul.h,linux_*.c}: Moved to ...
+ * linuxdev/arch/i386/{linux_emul.h,linux_*.c}: ... here.
+ * linuxdev/arch/i386/linux_block.c: Include <linux_emul.h>, instead
+ of <i386at/gpl/linux/linux_emul.h>.
+ * linuxdev/arch/i386/linux_init.c: Likewise.
+ * linuxdev/arch/i386/linux_kmem.c: Likewise.
+ * linuxdev/arch/i386/linux_misc.c: Likewise.
+ * linuxdev/arch/i386/linux_net.c: Likewise.
+ * linuxdev/arch/i386/linux_sched.c: Likewise.
+ * device/ds_routines.c: Include <linuxdev/device-drivers.h>, instead
+ of <i386/device-drivers.h>.
+ * linuxdev/arch/i386/linux_init.c: Likewise.
+ * linuxdev/include/linux/autoconf.h: Likewise.
+ * Makefile.in: Include $(srcdir)/linuxdev/Makefrag.
+ * linuxdev/Drivers.in (AC_INIT): Use include/linux/autoconf.h,
+ instead of i386/i386asm.sym.
+
+1998-10-28 Roland McGrath <address@hidden>
+
+ * include/mach/multiboot.h: Contents were doubled.
+
+1998-10-24 Roland McGrath <address@hidden>
+
+ * Makefile.in (mach_machine): Don't depend on config.status, since it
+ is always newer than the symlink target.
+
+ * i386/Makefrag ($(systype)/device-drivers.h): Depend on
+ $(systype)/driverlist, and have no commands.
+
+ * configure.in (--enable-kdb): Fix help text; handle --disable-kdb.
+ Remove BUILD_CC checks and lex/yacc checks (which were for mig).
+ (installed_clib): Remove these checks.
+ (LD, NM, MIG): Use AC_CHECK_TOOL for these.
+
+ * Makefile.in (all, clean, mostlyclean, install, dist,
+ %_interface.h rule, all *mig* rules): Remove all commands, deps,
+ and rules related to mig, which is now in a separate distribution.
+
+ * Makefile.in (before-compile): Add mach/machine.
+ (mach/machine, mach_machine): New rules to make symlink so
+ #include <mach/machine/foo.h> works.
+
+ * Makefile.in (NM): New variable, substituted by configure.
+ (check-clib-routines): Use $(NM) instead of literal "nm".
+ Fix awk script to grok __ defns and weak defns of desired symbols.
+ (clib-routines.o): Use $(CC) -r -nostartfiles -nostdlib -static
+ instead of $(LD) -r. Use -lc instead of $(installed-clib).
+ (installed-clib): Variable removed.
+
+ * i386/Makefrag: Use -include for linux-flags, so no warning.
+
+ * device/chario.c: Add forward decl for ttstart.
+
+ * i386/i386/db_trace.c: Use explicit int in decl.
+
+ * device/ds_routines.c (device_write_trap, device_writev_trap,
+ ds_trap_write_done): Cast arg to zfree.
+
+ * kern/ipc_tt.c (mach_ports_lookup): Remove unnecessary cast.
+
+1998-10-04 Roland McGrath <address@hidden>
+
+ * include/mach/message.h: Use __typeof instead of typeof.
+
+1998-09-06 Roland McGrath <address@hidden>
+
+ * kern/time_out.h: Include <mach/time_value.h> for time_value_t defn.
+
+1998-07-19 Roland McGrath <address@hidden>
+
+ * mig: Subdirectory removed, now in separate dist.
+
+Fri Apr 24 14:24:15 1998 Thomas Bushnell, n/BSG <address@hidden>
+
+ * i386/i386/pcb.c (thread_setstatus): Set STATE before validating
+ segment registers. Reported by UCHIYAMA Fasushi (address@hidden).
+
+Fri Apr 24 13:19:40 1998 Thomas Bushnell n/BSG <address@hidden>
+
+ * kern/debug.c (panic): Increase "seconds" in delay to 1000; machines
+ are faster now.
+
+ * i386/i386at/gpl/linux/linux_kmem.c: Increase MEM_CHUNKS to 7.
+
+Wed Aug 20 16:05:19 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * kern/thread.h (struct thread): New member `creation_time'.
+ * include/mach/thread_info.h: New member `creation_time'.
+ * kern/thread.c (thread_create): Set creation time stamp.
+ (thread_info) [THREAD_BASIC_INFO]: Fill in new creation time
+ field. Carefully preserve compatibility with old callers.
+
+ * kern/task.h (struct task): New member `creation_time'.
+ * include/mach/task_info.h: New member `creation_time'.
+ * kern/task.c (task_create): Set creation time stamp.
+ (task_info) [TASK_BASIC_INFO]: Fill in new creation time field.
+ Carefully preserve compatibility with old callers.
+
+ * kern/mach_clock.c (record_time_stamp): New function.
+ * kern/time_out.h (record_time_stamp): Add prototype.
+
+Sun Aug 3 18:25:38 1997 Shantanu Goel <address@hidden>
+
+ * i386/i386/thread.h (struct pcb): Added new field `data' used
+ by Linux driver emulation.
+
+ * i386/i386at/gpl/linux/include/linux/blk.h (end_request):
+ Revamped Mach specific code. Don't use `errors' field in request.
+ Don't call driver's request function.
+
+ * i386/i386at/gpl/linux/include/linux/fs.h (struct buffer_head):
+ Deleted old Mach-specific definition. Use original Linux defintion.
+
+ * i386/i386at/gpl/linux/linux_block.c: Rewritten extensively.
+ (collect_buffer_pages): Deleted.
+ (alloc_buffer, free_buffer): Rewritten to use Mach page allocator.
+ (getblk, __brelse): Use Mach kernel allocator.
+ (check_for_error): Deleted.
+ (ll_rw_block): Allocate request structure on stack.
+ (rdwr_partial, rdwr_full, do_rdwr) New routines.
+ (block_read, block_write): Rewritten to use new routine do_rdwr.
+ (find_name): New routine.
+ (read_bsd_label, read_vtoc): New routines.
+ (init_partition): New routine.
+ (device_open): Rewritten for modularity. Allocate Linux block
+ variables on the stack.
+ (check_limit): New routine.
+ (device_read, device_write): Rewritten extensively. Map user
+ pages into kernel buffer before passing to driver. This is in
+ preparation for general Linux block driver support. Allocate
+ Linux block variables on the stack.
+
+ * i386/i386at/gpl/linux/linux_kmem.c:
+ (collect_buffer_pages): Deleted.
+
+Fri Aug 1 16:15:33 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * kern/mach_clock.c (clock_interrupt): Test correct macro to see
+ if PC sampling is configured: MACH_PCSAMPLE, not MACH_SAMPLE.
+
+ * i386/i386/locore.S (discover_x86_cpu_type): Comment out routine
+ for now.
+ * i386/i386at/model_dep.c (c_boot_entry): Comment out use of
+ discover_x86_cpu_type for now.
+
+ * i386/include/mach/i386/eflags.h (EFL_AC, EFL_ID): New bits.
+
+ * i386/i386/locore.S (discover_x86_cpu_type): Use correct opcode
+ for right shift. Use ENTRY macro correctly.
+
+Mon Jul 28 17:01:19 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * COPYING: New file.
+ * Makefile.in (topfiles): Add COPYING.
+
+Mon Jul 21 14:20:39 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * kern/mach4.srv: Include <mach_pcsample.h> so the value of
+ MACH_PCSAMPLE is made available for mach4.defs.
+
+Thu Jul 10 13:51:20 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * Makefile.in (install): Use `ln -sf' instead of `-ln -s'.
+ Suggested by Marcus G. Daniels (address@hidden).
+
+Thu Jun 26 13:48:31 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * i386/i386/locore.S (discover_x86_cpu_type): New function.
+ * i386/i386at/model_dep.c (c_boot_entry): Fill in cpu type in
+ MACHINE_SLOT using new function.
+
+ * include/mach/machine.h (CPU_TYPE_I486, CPU_TYPE_PENTIUM,
+ CPU_TYPE_PENTIUMPRO, CPU_TYPE_POWERPC): New CPU types. These
+ conform to current OSF Mach values, but note that some of the
+ various subtypes are different.
+
+Mon Jun 16 12:14:17 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * i386/i386/loose_ends.c (ovbcopy): Delete function. Suggested by
+ Matthew Wilcox (address@hidden)
+
+Thu Jun 12 18:08:29 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ Version 1.1.3 released.
+
+ * version.c (version): Update to 1.1.3.
+
+Wed Jun 11 20:16:47 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * i386/Drivers.in: Add el3. How did this escape notice?
+ * i386/device-drivers.h.in: Add CONFIG_EL3.
+
+Tue Jun 10 13:33:37 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ Version 1.1.2 released.
+
+ * Makefile.in (install): Install cross-migcom as `migcom', not as
+ `mig'.
+
+ * i386/Makefrag (objfiles += $(device_drivers)): Sort
+ $(device_drivers) before adding to objfiles in order to remove
+ duplicates.
+
+Mon Jun 9 22:14:09 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * i386/Drivers.in: Fix typos apt.o -> atp.o; 3c403.o -> 3c503.o.
+
+ * Drivers.macros (AC_DRIVER): Test the class selected flag
+ correctly.
+
+Mon May 26 14:33:19 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * version.c (version): Update to version 1.1.2.
+
+Fri May 23 10:08:48 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * kern/thread.c (thread_info): Set flags word correctly;
+ TH_FLAGS_SWAPPED and TH_FLAGS_IDLE are not exclusive.
+
+ * Makefile.in (topfiles): Add aclocal.m4.
+ Reported by Marcus G. Daniels (address@hidden).
+
+Mon May 12 11:25:38 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ Version 1.1.1 released.
+
+ * version.c (version): Update to version 1.1.1.
+
+ * bogus/mach_kdb.h: Make sure MACH_KDB is always defined, to zero
+ if necessary. Bug report from Marcus Daniels
+ (address@hidden).
+
+Fri May 9 13:06:25 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * i386/Files: Fix typo for _setjmp.S.
+ Reflect 53c7,8xx.c -> 53c78xx.c change.
+
+Wed May 7 15:32:08 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * version.c (version): Update to version 1.1.
+ * NEWS: New file.
+ * Makefile.in (topfiles): Add NEWS.
+
+Mon May 5 11:34:01 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * Makefile.in (enable_kdb): Use findstring instead of filter.
+ Reported by Marcus Daniels (address@hidden).
+
+Fri May 2 12:43:46 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * Makefile.in (enable_kdb): New variable.
+ (clib-routines): If enable_kdb, then add strstr.
+ * i386/i386/_setjmp.S: New file, from UK22 libmach.
+ * i386/Files: Add i386/i386/_setjmp.S.
+ * i386/Makefrag (objfiles): Add _setjmp.o if enable_kdb.
+
+1997-04-30 Marcus G. Daniels <address@hidden>
+
+ * Makefile.in (clib-routines): Add htons not because it is necessary,
+ but because libc5 systems will bring it in.
+ (check-clib-routines): Tolerate extra weak symbols.
+
+Wed Apr 30 14:12:12 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * Makefile.in: Delete duplicate rule for cross-mig.
+
+Mon Apr 28 12:09:53 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * Makefile.in (check): New target. Reported by
+ address@hidden
+
+ * i386/Drivers.in (ncr53c7xx): Change file name to 53c78xx.o.
+ * i386/i386at/gpl/linux/scsi/53c7,8xx.c: Moved to ...
+ * i386/i386at/gpl/linux/scsi/53c78xx.c: ... here.
+ * i386/Makefrag (linux-scsi-files): Change file name here too.
+ Reported by address@hidden
+
+Wed Apr 23 14:35:44 1997 Miles Bader <address@hidden>
+
+ * ipc/ipc_entry.c [MACH_KDB]: Add include of <kern/task.h>.
+
+Wed Apr 23 13:21:23 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * configure.in (BUILD_CC): Use AC_CHECK_PROGS, not AC_CHECK_PROG,
+ since we are checking multiple names.
+
+ * configure.in (kdb): New --enable option.
+ * Makefile.in (DEFINES): Add @address@hidden
+ * bogus/mach_kdb.h: Make this file zero length; we get MACH_KDB
+ from configure now.
+
+ * Makefile.in (clean, distclean, mostlyclean, maintainter-clean):
+ New targets.
+ (all-archs-configures): New variable.
+ (MIG): Change to ./local-mig.
+ (./local-mig): Change to build this instead of ./mig
+ (check-clib-routines): Use nm -g in case there are local symbols.
+ Suggested by Matthew Wilcox (address@hidden).
+
+Fri Apr 18 15:25:10 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * configure.in: Add AC_PREREQ for version 2.12.
+ * i386/Drivers.in: Likewise.
+
+Wed Apr 16 16:55:36 1997 Marcus G. Daniels <address@hidden>
+
+ * configure.in: Replace AC_PROG_CC with AC_PROG_CC_LOCAL.
+ If cross compiling do Lex/Yacc checks with BUILD_CC.
+ Check CC and BUILD_CC for libraries having the needed support,
+ and substitute discovery in installed_clib.
+
+ * aclocal.m4: New file. These replacement macros are to handle
+ the case where there is a cross compiler but no supporting files.
+
+ * Makefile.in (installed-clib): Don't hardwire a Hurd libcrt.a.
+ (cross_linkable): Only define cross-migcom variable when it will
+ be possible to build it.
+ (all, install): Use $(cross-migcom).
+ (install): Install cross-migcom only if was to be built.
+ (mkinstalldirs): Add $(bindir), $(includedir)/mach/exec
+ (cross-lexxer.o lexxer.o): lexxer.o needs cpu.h.
+ (./cross-migcom): Prevent dependency generation for cross-* MiG files
+ unless they can actually be built.
+
+Thu Apr 17 15:55:40 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * kern/exception.c (exception_no_server): Comment out the suspend
+ code; it's useful for special case debugging, but causes problems
+ in general.
+
+Wed Apr 16 12:52:25 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * Makefile.in (cross-lexxer.o lexxer.o): Add pump-priming
+ dependency on cpu.h. Reported by Marcus G. Daniels
+ (address@hidden).
+
+ * configure.in: Fail if configure target is not for GNU os.
+
+ * i386/Drivers.in (com): Delete option. It's required by
+ kd_mouse.c.
+ * i386/Makefrag (i386at-files): Add com.c.
+ (driver-files): Delete variable.
+ * i386/bogus/com.h: Revert change of March 10.
+ * i386/device-drivers.h.in (CONFIG_MACH_COM): Delete option.
+ Bug report from Marcus G. Daniels (address@hidden).
+
+ * Makefile.in (./cross-mig): New rule.
+ (mkinstalldirs): Add $(libexecdir).
+ * configure.in: Recognize i686.
+ Reported by Marcus G. Daniels (address@hidden).
+
+Mon Apr 14 11:50:45 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * Released version 1.0.
+
+ * kern/exception.c (exception_no_server): Try and suspend the
+ failing thread before killing the task. Then a debugger can be
+ used.
+
+ * i386/Makefrag: Add rebuilding rules for configure subscript.
+
+ * i386/Makefrag: Fix up copyright notice.
+ * i386/Drivers.in: Likewise.
+ * Makefile.in: Likewise.
+ * Drivers.macros: Likewise.
+ * configure.in: Likewise.
+
+ * include/sys/time.h: New file, from include/mach/sa/sys/time.h.
+ * include/sys/reboot.h: New file, from include/mach/sa/sys/reboot.h.
+ * include/sys/ioctl.h: New file, from include/mach/sa/sys/ioctl.h.
+ * include/alloca.h: New file, from include/mach/sa/alloca.h.
+ * Makefile.in (other-sys-headers): Add time.h, ioctl.h, and reboot.h.
+ (other-mach-headers): New variable.
+ (mach-exec-headers): New variable.
+ (other-headers): New variable.
+ (installed-headers): Add mach-exec-headers.
+ (dist): Distribute other-mach-headers, other-sys-headers,
+ mach-exec-headers, and other-headers.
+ (device-files): Add device.srv.
+
+ * Makefile.in (check-clib-routines): Use more efficient rule.
+
+Fri Apr 11 15:18:09 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * Makefile.in (dist): Repair rule.
+ (other-sys-headers): New variable.
+ (dist): Install $(other-sys-headers).
+ (INCLUDES): Remove -I$(srcdir)/include/mach/sa.
+ (rules for mig-related .d files): Include MiG-specific -I flags.
+ (mach-headers): Add inline.h.
+ * include/sys/types.h: New file, from include/mach/sa/sys/types.h.
+
+Mon Mar 24 16:23:21 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * version.c (version): Make that 1.0. Whee.
+
+Fri Mar 21 15:50:09 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * i386/i386at/gpl/linux/scsi/aha1740.c (aha1740_test_port): Try
+ and turn on PORTADDR_ENH before checking it.
+
+ * vm/vm_object.c (vm_object_cached_max): Increase to 200.
+
+Thu Mar 20 12:33:06 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * Makefile.in (dist): New target. Reorganized some vars
+ describing source.
+ * i386/Subdirs: New file.
+ * i386/Files: New file.
+
+ * version.c (version): Push back to 0.1.
+
+ * Makefile.in (cross_compiling, bindir, libexecdir): New
+ variable.
+
+ * Makefile.in (install): Depend on cross-mig and cross-migcom;
+ install them. New rules added to build mig, migcom, cross-mig,
+ and cross-migcom.
+
+ * configure.in (AC_PROG_LEX, AC_PROG_YACC): New tests.
+ (BUILD_CC): New test to set these.
+
+ * Makefile.in (%.h %_user.c): Depend on $(MIG) too.
+ (%_interface.h %_server.c): Likewise.
+ (MIG): Don't use @MIG@; hard code it to the one we build.
+ (BUILD_CC, BUILD_CFLAGS, MIGCOM, LEX, YACC, LEXLIB): New variables.
+
+Wed Mar 19 16:47:28 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * i386/i386at/kd.c (BROKEN_KEYBOARD_RESET): Turn off this so that
+ we attempt the keyboard resets.
+ * i386/i386/locore.S (cpu_shutdown): Attempt to provide a more
+ `robust' null_idtr.
+
+Mon Mar 17 13:47:14 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * i386/i386at/gpl/linux/scsi/hosts.c (scsi_init): Don't print out
+ gratuitious obnoxiousness.
+ * i386/i386at/gpl/linux/scsi/scsi.c (scsi_dev_init): Likewise.
+ * i386/i386at/gpl/linux/block/triton.c (ide_init_triton):
+ Likewise.
+ (init_triton_dma): Likewise.
+ * i386/i386at/gpl/linux/pci/pci.c (pci_init): Likewise.
+ * i386/i386at/gpl/linux/pci/bios32.c (check_pcibios): Likewise.
+ (pcibios_init): Likewise.
+ * i386/i386at/gpl/linux/block/genhd.c (add_partition): Likewise.
+
+ * i386/i386at/gpl/linux/net/8390.c (ei_debug): Make default value
+ zero.
+
+Wed Mar 12 14:50:46 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * i386/i386at/com.c (comprobe): Turn off noisiness.
+
+ * i386/i386at/gpl/linux/linux_block.c (check_disk_change): Don't
+ print out gratuitous obnoxiousness.
+ (device_open): Likewise.
+ * kern/bootstrap.c (copy_bootstrap): Likewise.
+ (user_bootstrap): Likewise.
+ * i386/i386at/gpl/linux/block/genhd.c (msdos_partition): Likewise.
+ (osf_partition): Likewise.
+ (sun_partition): Likewise.
+ (check_partition): Likewise.
+ * i386/i386/pit.c (findspeed): Likewise.
+ * vm/vm_resident.c (vm_page_bootstrap): Likewise.
+
+Mon Mar 10 15:04:47 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * i386/i386at/gpl/linux/linux_init.c (calibrate_delay): Don't
+ print out gratuitous obnoxiousness.
+
+ * i386/i386at/gpl/linux/linux_init.c (linux_init): Only call
+ linux_net_emulation_init if CONFIG_INET. Include
+ <i386/device-drivers.h>.
+
+ * i386/i386at/i386at_ds_routines.c: Include
+ <i386/device-drivers.h>. Don't mention linux_net_emulation_ops
+ unless CONFIG_INET.
+
+ * device/ds_routines.c (io_done_thread_continue): [i386]
+ Conditionalize free_skbuffs also on CONFIG_INET. Include
+ <i386/device-drivers.h>.
+
+ * i386/Drivers.in, i386/device-drivers.h.in, i386/driverlist.in:
+ New files.
+ * i386/Makefrag: Include i386/driverlist; don't include all device
+ drivers in kernel image; instead use list from driverlist.
+ * configure.in: Configure in $systype subdir too.
+
+ * i386/i386at/gpl/linux/include/linux/autoconf.h: Damage severly
+ to conform to device-drivers.h model.
+
+ * i386/bogus/com.h: Include <i386/device-drivers.h>.
+ Only turn on NCOM if CONFIG_MACH_COM is present.
+
+Mon Mar 3 16:26:58 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * include/mach/message.h (__mach_msg, __mach_msg_trap): Add decls.
+
+Tue Feb 25 15:42:23 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * i386/Makefrag (INCLUDES): Find `include' directory in new
+ location.
+ * Makefile (INCLUDES): Find `include' directory in new location.
+ (%.symc): Find gensym.awk in new location.
+
+ * Reorganized directories into new layout and unified mach4 and
+ mach4-i386 into a single tree.
+
+
+Older changes in ChangeLog.00 (for i386 directory) and ChangeLog.0 (for
+all other files).
diff --git a/ChangeLog.0 b/ChangeLog.0
new file mode 100644
index 0000000..2ef943a
--- /dev/null
+++ b/ChangeLog.0
@@ -0,0 +1,721 @@
+Wed Feb 12 16:22:07 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * kernel/kern/debug.c (panic): Insert a delay loop. Do a reboot
+ instead of a mere halt.
+
+Wed Feb 5 12:07:30 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * kernel/util/cpu.h (struct cpu): Add dummy field so that zero
+ size structure doesn't become an undefined variable.
+
+ * kernel/version.c: New file.
+
+ * kernel/kern/elf-load.c: New file. (Was mach4/libmach/exec/elf.c
+ in Utah distribution.) Define exec_load instead of exec_load_elf.
+
+ * kernel/device/chario.c: Include "device_reply.h" rather than
+ <device/device_reply.h>.
+
+Thu Mar 28 17:59:36 1996 Linus Kamb <address@hidden>
+
+ * kernel/ipc/fipc.c:
+
+ changed fipc_send() to take a fipc_endpoint_t structure
+ which has the destination hardware address and destination
+ port, instead of the two integer arguments used before.
+
+ changed fipc_recv() to also take a fipc_endpoint_t
+ parameter that returns the senders hardware address.
+ (Their is no concept of a sending fipc port.)
+
+ Also added some spl stuff to avoid a possible race
+ condition, and generally cleaned it up.
+
+ * include/mach/syscall_sw.h: changed the argument #'s for fipc calls.
+
+ * kernel/kern/syscall_sw.c: changed the argument #'s for fipc calls.
+
+ * kernel/device/device_init.c: Changed call to fipc_thread()
+ to call to fipc_init().
+
+Mon Mar 25 01:39:45 1996 steve clawson <address@hidden>
+
+ * changes for VM_PROT_NOTIFY added for Godmar Back
+ (address@hidden):
+
+ * include/mach/kern_return.h: Added KERN_WRITE_PROTECTION_FAILURE
+ return value.
+
+ * include/mach/vm_prot.h: Added VM_PROT_NOTIFY.
+
+ * kernel/vm/vm_map.c (vm_map_protect): or in VM_PROT_NOTIFY
+ when we check the new protection against max protection (should
+ always be able to set the NOTIFY bit, ).
+
+ * kernel/vm/vm_map.c (vm_map_lookup): If VM_PROT_NOTIFY is set and
+ we get a write protection violation, return
+ KERN_WRITE_PROTECTION_FAILURE.
+
+ * kernel/vm/vm_user.c (vm_protect): Make sure that we accept
+ VM_PROT_NOTIFY (since it's not in VM_PROT_ALL).
+
+Sun Mar 24 13:17:45 1996 Shantanu Goel <address@hidden>
+
+ * kernel/device/dev_hdr.h: Following changes #ifdef'ed for i386.
+ Include i386at/dev_hdr.h.
+ (device): Renamed to mach_device. All users changed.
+ (device_t): Renamed to mach_device_t. All users changed.
+
+ * kernel/device/dev_lookup.c: Following changes #ifdef'ed for i386.
+ (dev_port_enter): Initialize emulation ops and data.
+ (convert_device_to_port): Use emulation ops.
+ (device_reference): Renamed to mach_device_reference.
+ Interface changed. All callers changed.
+ (device_allocate): Renamed to mach_device_deallocate.
+ Interface changed. All callers changed.
+
+ * kernel/device/ds_routines.c: Following changes #ifdef'ed for i386.
+ Include i386at/device_emul.h.
+ (mach_convert_device_to_port): New function. Replaces
+ convert_device_to_port. All callers changed.
+ (ds_device_open, ds_device_close, ds_device_write,
+ ds_device_write_inband, ds_device_read, ds_device_read_inband,
+ ds_device_set_status, ds_device_get_status, ds_device_set_filter,
+ ds_device_map, ds_device_write_trap, ds_device_writev_trap):
+ Declaration made static. Dropped "ds_" prefix. Interface changed.
+ (ds_notify): Deleted.
+ (ds_nosenders): Declaration made static.
+ (io_done_thread_continue): (free_skbuffs): Use it.
+ (mach_device_emulation_ops): New variable.
+
+Mon Mar 4 10:39:03 MST 1996 Linus Kamb (address@hidden)
+
+ * Checked in FIPC code:
+
+ * Added kernel/ipc/fipc.[ch]
+ fipc_send(int a0, int a1, char *buf, int buf_len);
+ a0 and a1 together contain the 6 byte ethernet
+ address of the receiving machine, and the 16 bit
+ unsigned "fipc_port".
+
+ fipc_recv(unsigned short fipc_port, char *buf, int *buf_len);
+ Returns as much as buf_len bytes to the user's buf from
+ port fipc_port. Will block if there is no available
+ message on the fipc port. Buf_len is an IN/OUT
+ parameter, giving the size of the user's buffer,
+ and returning the actual number of bytes in the
+ message.
+
+ * Changed kernel/device/device_init.c
+ starts the fipc_thread, which does necessary initialization.
+
+ * Changed kernel/device/net_io.c
+ added net_fwrite() which is very similar to net_write(), but
+ is called by nefoutput() (if_ne.c) which is the path for
+ fipc_send calls.
+
+ * Changed kernel/kern/syscall_sw.c
+ adding -96 and -97 for FIPC traps
+
+ * Changed include/mach/syscall_sw.h
+ adding kernel_trap() delcarations for fipc_send and fipc_recv
+
+Tue Feb 13 22:34:27 1996 Kevin T. Van Maren <address@hidden>
+
+ * More diskslice changes are integrated:
+
+ * kernel/scsi/disk_label.c: Updated this file I added last time.
+ Full support for dos partitions and BSD disklabels. No longer
+ uses a disklabel structure for partition information encoding.
+,
+ * kernel/scsi/pc_scsi_label.c: No code changes
+
+ * kernel/scsi/rz.h: rzpartition() definition changed for slices
+
+ * kernel/scsi/rz_disk.c: Modified to use the array of partitions
+ and the common partitioning code. Disklabels are still there
+ but are fairly meaningless to the kernel, and incorrect in any
+ event.
+
+ * kernel/scsi/rz_disk_bbr.c: Uses new partitioning. NOT TESTED.
+
+ * kernel/scsi/rz_labels.h: Added diskpart structure. Also added
+ #defines for partition types in this structure.
+
+ * kernel/scsi/scsi_defs.h: MAX_SCSI_PARTS defined
+
+ * kernel/device/dev_name.c: Now converts a block device string to
+ the correct slice+partition fields for the partition code.
+
+Thu Feb 8 00:27:33 MST 1996 Bryan Ford <address@hidden>
+
+ Merged in changes from UK02p20 to end of UK02-freeze branch,
+ and terminated the last remnant of the UK02-freeze branch.
+
+ Fri Feb 2 17:03:38 1996 steve clawson <address@hidden>
+
+ * kernel/ipc/ipc_notify.c: added ipc_notify_init_msg_accepted
+ call to ipc_notify_init().
+
+ Wed Jan 17 17:04:24 1996 Bart Robinson <address@hidden>
+
+ * Serial console working for real.
+
+ * kernel/device/cons.c, cons.h: added. These are the same as in
+ mach4-parisc/kernel/hpdev but changed slightly to make cninit
+ re-entrant. They can and should be used for the PA too.
+
+ * kernel/util/console.c, console_buf.c, console_list.h: removed.
+ The console is handled differently now.
+
+ Wed Jan 17 13:51:46 1996 Kevin Van Maren <vanmaren.cs.utah.edu>
+
+ * Unified the partition code for IDE & SCSI device drivers
+
+ * kernel/scsi/disklabel.c: new file
+ * kernel/scsi/rz_labels.c: deleted
+ * kerenl/scsi/pc_label.c: deleted
+
+ * kernel/scsi/rz_labels.h: Added more partition ID types. Also
+ added the prefix scsi_ to structs.
+
+ * kernel/scsi/pc_scsi_label.c: removed grab_bob_label(),
+ default_label is now scsi_default_label.
+
+ * kernel/scsi/rz_disk.c: Replaced scsi-specific partition code
+ with code that calls the unified partition code.
+
+Thu Jan 11 20:06:33 MST 1996 Bryan Ford <address@hidden>
+
+ Added remote debugging support to MOSS;
+ fixed a number of bugs.
+
+Mon Oct 30 09:21:10 MST 1995 Bryan Ford <address@hidden>
+
+ Merged in changes from UK02p15 to UK02p20:
+
+ Mon Oct 23 11:03:10 1995 steve clawson <address@hidden>
+
+ * bootstrap/bootstrap.c: Added back code to ask for a root
+ device (the '-a' switch from the command line). Added
+ `translate_root' function that converts from Linux device
+ names to Mach ones.
+
+ Sun Oct 22 18:36:49 1995 Bryan Ford <address@hidden>
+
+ * Integrated Steve's and Bart's changes from the UK02p16-work
+ branch.
+
+ * bootstrap: use exec_load() to find startup's symbol table,
+ instead of trying to hand-interpret the a.out header.
+
+ * bootstrap: no longer try to load emulator symbols; that's
+ Lites' job.
+
+ * bootstrap: if user types in a new server directory name,
+ use the new device name as the root device as well.
+
+ * include/mach/sa/sys/reboot.h: added BSD flag definitions.
+
+ * mach4/kernel/ddb/db_aout.c: got rid of ddb_init();
+ instead just call aout_db_sym_init() directly from
model_dep.c.
+
+ * mach4/kernel/kern/bootstrap.c: Use MultiBoot kernel command
+ line to find root device and flags, instead of old kludgy
+ boothowto and bootdev values.
+
+ Fri Oct 13 16:47:52 1995 steve clawson <address@hidden>
+
+ * include/mach/multiboot.h: Added entries for symbol table
+ information and for boothowto and bootdev into the boot_info
+ structure.
+
+ * include/mach/exec/exec.h: Cleaned up text (>80 columns).
+ * include/mach/exec/a.out.h: Added some macros from FreeBSD.
+
+ * kernel/ddb/db_aout.c: Enabled code to load kernel symbol
+ table.
+
+ Thu Sep 28 16:57:07 1995 steve clawson <address@hidden>
+
+ * kernel/scsi/adapters/scsi_aha15.h: Added #defines for the
+ 1542CF.
+
+ * kernel/scsi/adapters/scsi_aha15_hdw.c: Added support for the
+ 1542CF. #defined db_printf to just be printf.
+
+ * kernel/scsi/adapters/scsi_aha17_hdw.c: #defined db_printf to
+ just be printf.
+
+ Mon Jun 26 13:51:42 MDT 1995 Wolfram Stering <address@hidden>
+
+ * kernel/scsi/*label*: fixed to support Linux-style
+ partitioning.
+
+ Fri May 19 11:17:13 MDT 1995 Bryan Ford <address@hidden>
+
+ * Released UK02p17, as a private snapshot for goel.
+
+ Tue May 16 01:45:22 1995 Shantanu Goel <address@hidden>
+
+ * kernel/device/ds_routines.c (ds_device_set_status):
+ Pass device structure to Linux driver.
+ (ds_device_get_status): Likewise.
+
+ Fri May 12 10:47:41 MDT 1995 Bryan Ford <address@hidden>
+
+ * Released UK02p16, as an internal snapshot for rdukes
+
+Wed Oct 4 20:04:27 MDT 1995 Bryan Ford <address@hidden>
+
+ Released moss-0.80 (tag moss-0-80)
+
+Wed Oct 4 12:05:57 MDT 1995 Bryan Ford <address@hidden>
+
+ Merged in changes made for DOS extender at home:
+ * better mach/sa include files
+ * new list-based flexible memory allocator
+
+Wed May 3 13:59:54 MDT 1995 Bryan Ford <address@hidden>
+
+ Merged in diffs from UK02p12 to UK02p15:
+
+ Wed May 3 10:47:41 MDT 1995 Bryan Ford <address@hidden>
+
+ * Released UK02p15.
+ (UK02p14 was just an intermediate tag after adding ELF
support.)
+
+ Configuration-related changes:
+
+ * configrules: now looks for mach4 sources in a default location
+ "next to" the machine-dependent sources if no '--with-mach4='
+ option is specified.
+
+ ELF support changes:
+
+ * Got rid of old ex_get_header() routine from libmach_sa.a;
+ instead provide a new library, libmach_exec.a (in
libmach/exec)
+ which provides a less a.out-specific exec_load() function.
+
+ * bootstrap/load.c, kernel/kern/bootstrap.c: use new
exec_load() function.
+
+ * Added include/mach/exec/elf.h, from OSF's server bootstrap
code
+
+ Makefile-related changes:
+
+ * Starting to phase out GSECTIONS/MSECTIONS, because
+ that design forced all machine-dependent directories
+ to come before all machine-independent directories,
+ which isn't the right behavior in all cases.
+ Now makefiles should just build SRCDIRS directly.
+
+ * We now generate public header files and libraries in
+ $(OBJDIR)/include and $(OBJDIR)/lib before installing them.
+ Added mach4/Makerules.lib, for various library targets to use.
+
+ * mach4/Makerules: sort all object files at once, so that
+ .c files can override .S files and such.
+
+ * Split out common part of mach4-i386/Makefile.in and
+ mach4-parisc/Makefile.in, and put them in mach4/Makerules.top.
+
+ Miscellaneous changes:
+
+ * (fjl) Various additions and fixes to the HTML pages.
+
+ * kernel/scsi: merged in MK83a changes, including new aha17
(eaha) driver.
+
+ * gensym.awk: 'size' command can now take an optional fourth
parameter
+ indicating the name of the symbol to declare.
+
+ * Moved errorlib.h to the public include/mach directory.
+
+ * include/mach/machine/vm_param.h:
+
+ * include/mach/sa: Added some common POSIX errno's and other
useful stuff.
+
+ * libmach/standalone: Moved generic C-library stuff to
libmach/c.
+
+ * libmach/c/stdio: created, containing extremely simple
high-level file I/O
+ functions that do no buffering, instead going straight to the
low-level
+ Unix-like file I/O routines.
+
+ Fri Apr 7 17:43:22 MDT 1995 Bryan Ford <address@hidden>
+
+ * Released UK02p13.
+
+Fri Apr 7 13:08:16 MDT 1995 Bryan Ford <address@hidden>
+
+ Merged in diffs from UK02p9 to UK02p12:
+
+ Mon Apr 3 19:55:41 MDT 1995 Bryan Ford <address@hidden>
+
+ * Released UK02p11.
+ Too many changes to describe concisely,
+ almost all affecting only the boot mechanism for now.
+ Also, integrated the kernel/util, kernel/pc, kernel/dos code
+ from my DOS extender project at home.
+
+ Mon Feb 27 16:32:59 MST 1995 Bryan Ford <address@hidden>
+
+ * Released UK02p10 as a non-functional snapshot
+
+Fri Feb 10 13:25:54 MST 1995 Bryan Ford <address@hidden>
+
+ Merged in diffs from UK02p7 to UK02p9:
+
+ Thu Jan 26 19:37:04 1995 steve clawson <address@hidden>
+
+ * kernel/scsi/adapters/scsi_aha15_hdw.c:
+
+ Merged in MK83-MK83a changes.
+
+ Added code to recognize 1542CF controllers.
+ (changes marked with a + imported from netbsd).
+
+ aha_probe():
+ added 1542CF case in the id switch.
+ +added code to unlock the mailbox interface on the C/CF's.
+ +added code to set DMA on/off times
+ moved initialization around a bit:
+ commented out the code to call aha_init_1().
+ changed the call to aha_init_2() into aha_init().
+
+ * kernel/scsi/adapters/scsi_aha15.h:
+
+ Added AHA_BID_1542CF, AHA_EXT_BIOS and AHA_MBX_ENABLE defines.
+ Added struct aha_extbios.
+
+ * bootstrap/fs.h:
+ Added fs_state field to struct fs. (fix suggested by Remy
Card)
+
+
+ Tue Jan 17 15:55:01 MST 1995 Bryan Ford <address@hidden>
+
+ * Released UK02p8
+
+ 03-Dec-94 Johannes Helander (jvh) at Helsinki University of Technology
+
+ * bootstrap/ffs_file_io.c:
+
+ Added support for 4.4 BSD fastlinks. The change breaks 4.3
+ slowlinks of length four or less.
+
+ Interpret 4.4 BSD directory entries correctly also on little
+ endian machines.
+
+ 12 Jan 1995 17:52:44 -0500 Shantanu Goel <address@hidden>
+
+ * vm/vm_map.c: Incorporated the device_write bug fix from MK83a.
+
+ 09-Dec-94 Ian Dall (address@hidden)
+
+ * Fixed char_write_done to use ds_device_write_reply_inband when
+ appropriate.
+
+ 16-May-94 Ian Dall (address@hidden) at University of Adelaide
+
+ * Increase tty_outq_size to 2048. *Must* be greater than largest
+ tthiwat entry or bad things happen.
+
+ Wed Dec 7 11:43:02 MST 1994 Roland McGrath (address@hidden)
+
+ * Fix to bootstrap code to interpret BSD 4.4 FFS filesystems.
+
+Fri Nov 25 13:56:32 MST 1994 Bryan Ford (address@hidden)
+
+ Merged in diffs from UK02p6 to UK02p7:
+
+ * GNU make should now no longer mistakenly delete any more
+ intermediate files the first time around.
+
+ * 'make configure' should now work without producing bogus
+ error messages. (Hint: don't put any bogus 'AC_*' text
+ strings in input files to autoconf, even if they're
+ in comments!)
+
+ * Don't install 'Makefile.in' into the public include directory.
+
+ * mig/Makerules (parser.o):
+ Added explicit dependencies to protect files that were
+ automatically deleted by GNU make after the first compilation on
+ an empty object tree. These were deleted because GNU make
+ decided that they were intermediary files. However, because
+ they are listed in the automatically generated dependency file,
+ GNU make realizes that it must regenerate them on a subsequent
+ "make" pass. Since they have explicit dependencies (in the
+ "depend" file) on that subsequent pass, GNU make does not delete
+ them.
+
+Tue Nov 1 19:12:55 1994 Jeff Law (address@hidden)
+
+ * kernel/kern/{processor.h, task.h, thread.h}: Enclose full
+ prototypes inside #if KERNEL (for "klg" files where foo_t
+ is typically mapped to mach_port_t, which causes decl and defn
+ not to match).
+
+ * Merge in machine-independent kernel changes from MK83-MK83a.
+ Detailed change entries in CHANGES.MK83a.log. Effected files:
+
+ * include/device/bpf.h: MK83a Changes.
+ * include/mach/{exe, mach4, mach_types}.defs: Likewise.
+ * include/mach/{host_info, pc_sample, processor_info}.h: Likewise.
+ * include/mach/vm_statistics.h: Likewise.
+ * kernel/chips/{audio.h, busses.h}: Likewise.
+ * kernel/device/{chario.c, conf.h, net_io.c}: Likewise.
+ * kernel/kern/{exception.c, host.c, mach_clock.c}: Likewise.
+ * kernel/kern/{host.c mach_clock.c pc_sample.c}: Likewise.
+ * kernel/kern/{processor.h, strings.c, task.c, task.h}: Likewise.
+ * kernel/kern/{thread.c, thread.h}: Likewise.
+ * kernel/scsi/rz_labels.c: Likewise.
+ * kernel/scsi/adapters/scsi_aha15_hdw.c: Likewise.
+ * kernel/vm/{vm_fault, vm_map, vm_resident}: Likewise.
+
+ * kernel/bogus/eaha.h: New file for MK83a support.
+ * kernel/kern/pc_sample.h: Likewise.
+ * kernel/scsi/adapters/scsi_aha17_hdw.c: Likewise.
+
+Sat Oct 22 14:56:33 MDT 1994 Bryan Ford (address@hidden)
+
+ * Got rid of various rinky-dink C library routines
+ that were duplicated in both the kernel and libmach.
+ In the system-independent source tree, this just
+ means kern/sscanf.c so far, but I've got my eye
+ on printf.c as well. In the i386-specific tree
+ it includes all kinds of little things such as bcopy.
+
+Wed Oct 19 12:58:13 1994 Jeff Law (address@hidden)
+
+ * kernel/kern/mach.srv: Use immediate forms of act_get_state and
+ act_set_state for thread_{get,set}_state.
+
+Thu Oct 13 09:50:24 MDT 1994 Bryan Ford (address@hidden)
+
+ * include/mach/sys_*.h: moved to include/mach/sa/sys/*.h.
+ Also added some other C-library-like files in there
+ for the benefit of standalone programs as well as my
+ Mach-on-DOS ("MOSS") C library.
+
+ * Makerules: For all programs compiled on the target machine
+ (actually host machine in proper terminology),
+ add include/mach/sa to the include path.
+
+ * Makefiles: minor cleanups, added some .PRECIOUS rules
+ to reduce the number of files gratuitously recompiled
+ the second time around.
+
+ * libmach/unixoid: Cleaned out. We no longer need the
+ unixoid version of libmach at all, because neither
+ the Hurd nor Lites need it (or ever will). Good riddance.
+ We might start generating a 'libmach.a' again soon,
+ but it will contain only the "pure" Mach parts -
+ nothing related to Unix or C libraries.
+
+ * libmach/standalone/printf.c: Broke into multiple files
+ and added various tidbits of functionality.
+
+Fri Sep 30 01:43:16 1994 Jeff Law (address@hidden)
+
+ * kernel/bogus/bogus.c: New file.
+
+Mon Sep 26 12:58:57 1994 Jeff Law (address@hidden)
+
+ * kernel/kern/processor.c (pset_init): Nuke debugging printf.
+
+ * kernel/kern/thread.c (thread_create_in): Grab a reference to the
+ processor set for the new thread.
+
+Fri Sep 9 00:00:53 1994 Jeff Law (address@hidden)
+
+ * kernel/device/ds_routines.c (io_done_thread): Nuke call to
+ stack_privilege.
+
+Thu Sep 8 11:37:03 1994 Jeff Law (address@hidden)
+
+ * kernel/kern/act.c (act_set_state, act_get_state): Use natural_t
+ to match prototype.
+
+ * kernel/kern/zalloc.c: lock_zone has been renames to zone_lock,
+ likewise for unlock_zone.
+
+ * kernel/bogus/mach_pcsample.h: Disable for now.
+ * kernel/bogus/xpr_debug.h: Likewise.
+
+ * include/mach/rpc.h: Add c-signature stuff.
+
+ * kernel/device/chario.c (ttstart): New function.
+ (ttrstrt): Use it.
+
+ * include/mach/mach4.defs: Wrap PC sampling stuff inside
+ an appropriate #ifdef.
+
+Wed Aug 31 10:59:51 1994 Jeff Law (address@hidden)
+
+ * kernel/ipc/ipc_notify.c: Use MACH_MSG_TYPE_INTEGER_32 rather
+ than MACH_MSG_TYPE_INTEGER_T.
+
+ * kernel/kern/ipc_sched.c: Don't include thread_swap.h
+
+ * kernel/kern/sched_prim.c (thread_wakeup_prim): "event" should
+ be an event_t. Cast argument to wait_hash to an int.
+ (various): Chagne thread->runq to thread->shuttle.runq.
+
+ * kernel/device/net_io.c: Don't typedef u_long here.
+
+ * kernel/kern/ipc_kobject.c: Include mach_machine_routines.h
+
+ * kernel/device/ds_routines: Include current.h for current_thread.
+
+ * include/mach/sys_types.h: Put u_long back.
+
+Tue Aug 30 13:45:05 MDT 1994
+
+ * Makefiles: Don't use CFLAGS etc. to build variables in;
+ that way the user can specify them on the `make' line
+ and still get sensible results.
+ Also, named some variables HOST_xxx and TARGET_xxx
+ to better support cross-compilation.
+
+Fri Aug 26 12:06:35 1994 Jeff Law (address@hidden)
+
+ * include/mach/mach_port.defs: Use thread_t, not act_t.
+
+Mon Aug 1 18:15:00 MDT 1994 Bryan Ford (address@hidden)
+
+ * Got most of the migrating threads changes merged in
+
+Tue Oct 25 12:32:28 MDT 1994 Bryan Ford (address@hidden)
+
+ * Released UK02p6.
+
+ * Moved exec header interpretation stuff from the bootstrap code
+ into libmach so the kernel could also use it when initializing
+ the bootstrap program itself.
+
+Sat Oct 22 15:44:42 MDT 1994 Bryan Ford (address@hidden)
+
+ * Moved cthreads.h from the top-level public include directory
+ into the mach/ include subtree. Higher-level OS personalities
+ can create their own cthreads.h, or just make a stub
+ that cross-includes mach/cthreads.h if they want to use
+ the "standard" implementation.
+
+Mon Oct 17 10:54:38 ??? 1994 Csizmazia Balazs (address@hidden)
+
+ * Added MINIX filesystem support to the bootstrap loader.
+
+Sat Oct 15 17:22:01 MDT 1994 Bryan Ford (address@hidden)
+
+ * Temporary kludge: added servers/ include directory
+ containing libmachid and libnetname headers;
+ added corresponding library code to libmach.
+ This is so we can compile Lites against Mach4
+ without having to create a full new USER package yet.
+
+ * Changed ifdef's of KERNEL to MACH_KERNEL
+ in the public header files.
+ (Really should get rid of them entirely.)
+
+Fri Sep 16 11:33:44 MDT 1994 Bryan Ford (address@hidden)
+
+ * Released UK02p5.
+
+ * Added copyrights to the makefiles.
+
+Fri Sep 9 10:44:49 MDT 1994 Bryan Ford (address@hidden)
+
+ * configure.in: if user specifies --enable-debug,
+ add -DDEBUG to the compiler flags.
+
+Tue Sep 6 09:58:49 MDT 1994 Bryan Ford (address@hidden)
+
+ * Added blank .SUFFIXES line
+ to eliminate the requirement of using `make -r'.
+ (Things still go faster with `-r' though.)
+
+Mon Sep 5 22:44:00 1994 Patrick Doyle (address@hidden)
+
+ * README (DIRECTORY STRUCTURE): Added a distillation of a
+ discussion with Bryan regarding organization of and differences
+ between the two libraries produced by the distribution. (Also
+ cleaned up references to libmach_ux.a when I stumbled across
+ them in the source).
+
+Mon Sep 5 12:16:30 MDT 1994 Bryan Ford (address@hidden)
+
+ * Full cross compilation support
+
+ * Cleaned up all install rules
+ so they will no longer gratuitously reinstall things.
+
+Sun Sep 4 11:33:03 MDT 1994 Bryan Ford (address@hidden)
+
+ * As suggested by Roland McGrath,
+ changed the genassym mechanism to cross-compile better,
+ by compiling to assembly language source
+ instead of an executable program.
+
+ Also refined and extended this technique
+ to make it more convenient,
+ and to allow MIG to use it too.
+
+Sun Sep 4 08:10:05 MDT 1994 Bryan Ford (address@hidden)
+
+ * Makefiles: better cross-compilation support.
+
+Sat Sep 3 15:14:36 MDT 1994 Bryan Ford (address@hidden)
+
+ * bootstrap/*: got FFS support back in;
+ now both ext2 and FFS are supported at the same time
+ (although in a horrendously kludgy way).
+
+Wed Jul 20 14:00:45 MDT 1994 Bryan Ford (address@hidden)
+
+ * include/mach/mig_support.h: Got rid of cross-includes
+ of some old bogus header files.
+
+ * Released UK02
+
+
+Mon Jul 18 18:28:00 MDT 1994 Bryan Ford (address@hidden)
+
+ Integrated microkernel changes needed by LITES,
+ from Johannes Helander (jvh) and Tero Kivinen (kivinen) @cs.hut.fi:
+
+ * (jvh) include/device/device_reply.defs: added SEQNOS support.
+
+ * (jvh) include/mach/error.h: Surrounded typedefs with ifndef ASSEMBLER.
+
+ * (jvh) mig, libmach: mig_dealloc_reply_port() now takes an argument,
+ which is ignored in the default libmach implementation of this
function,
+ but may be needed for custom reply port allocators.
+ MIG stubs now pass the reply port to be deallocated.
+
+ * (jvh) mig, libmach: new function mig_put_reply_port(),
+ which does nothing in the default libmach implementation.
+ MIG stubs call this function when done with a reply port,
+ if it wasn't deallocated with mig_dealloc_reply_port().
+
+ * (jvh) mig/mig.sh: added -migcom flag to specify the location of
migcom.
+
+ * (jvh) libmach/err_kern.sub: added new errno strings for 4.4BSD and
Lite.
+
+ * (???) libthreads: added wait_type to cproc structure
+ keeping track of what type of event is being waited for.
+
+ * (???) libthreads: added a holder field to mutex structure
+ keeping track of who's holding a mutex, for debugging.
+
+ * (kivinen) libthreads: Renamed cthread_t->catch to
cthread_t->catch_exit,
+ because catch is a reserved word in C++.
+
+ * (jvh) libthreads: Added CONDITION_NAMED_INITIALIZER and
MUTEX_NAMED_INITIALIZER
+ macros. They take one argument: a name string.
+
+
+Fri Jul 15 11:46:19 MDT 1994 Bryan Ford (address@hidden)
+
+ * kern/bootstrap.c: gutted and rewrote
+ to get the boot image from the bmod mechanism.
+ Needs to be gutted still more.
+
diff --git a/ChangeLog.00 b/ChangeLog.00
new file mode 100644
index 0000000..553b5fe
--- /dev/null
+++ b/ChangeLog.00
@@ -0,0 +1,858 @@
+Wed Feb 19 15:51:34 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * kernel/i386at/gpl/linux/include/linux/autoconf.h
+ (CONFIG_SCSI_AHA1740, CONFIG_EL3, CONFIG_WD80x3): Turn on these
+ devices.
+
+Wed Feb 5 11:35:39 1997 Thomas Bushnell, n/BSG <address@hidden>
+
+ * kernel/i386at/idt.h: Include "idt-gen.h" instead of
+ include-next. Safer this way.
+ * kernel/i386/idt.h: Moved to ...
+ * kernel/i386/idt-gen.h: ... here.
+
+Mon Dec 16 21:01:37 1996 Thomas Bushnell, n/BSG <address@hidden>
+
+ * kernel/i386/ast.h: Comment out chained include; generic
+ kern/ast.h includes us always, and that's all the ast.h's there
+ are.
+ * kernel/i386/thread.h: Likewise.
+
+ * kernel/chips/busses.c: Delete file (duplicates generic copy).
+
+Thu Apr 18 22:54:26 1996 steve clawson <address@hidden>
+
+ * configrules: Changed --with-elf option to define __ELF__ instead
+ of ELF.
+ * configure: likewise
+
+ * include/mach/machine/asm.h: Changed references from ELF to
+ __ELF__.
+ * kernel/i386at/boothdr: likewise.
+ * kernel/util/crtn.S: likewise.
+ * libmach/standalone/mach-crt0.c: likewise.
+
+ * boot/bsd/main.c: Changes to conform with Multiboot 0.6 (adds a
+ checksum field to the multiboot header). From Erich Boleyn
+ (address@hidden).
+ * boot/linux/misc.c: likewise.
+ * include/mach/machine/multiboot.h: likewise.
+ * kernel/i386at/boothdr: likewise.
+
+Thu Apr 4 11:02:40 MST 1996 Bryan Ford <address@hidden>
+
+ * boot/boot_info_dump.c: dump the string associated with
+ each boot module, if any.
+
+ * boot/bsd/main.c: pass along the associated boot module string
+
+ * boot/bsd/mkbsdimage.sh: allow strings to be associated with
+ boot modules, using the syntax "filename:string".
+
+Thu Apr 18 22:54:26 1996 steve clawson <address@hidden>
+
+ * configrules: Changed --with-elf option to define __ELF__ instead
+ of ELF.
+ * configure: likewise
+
+ * include/mach/machine/asm.h: Changed references from ELF to
+ __ELF__.
+ * kernel/i386at/boothdr: likewise.
+ * kernel/util/crtn.S: likewise.
+ * libmach/standalone/mach-crt0.c: likewise.
+
+ * boot/bsd/main.c: Changes to conform with Multiboot 0.6 (adds a
+ checksum field to the multiboot header). From Erich Boleyn
+ (address@hidden).
+ * boot/linux/misc.c: likewise.
+ * include/mach/machine/multiboot.h: likewise.
+ * kernel/i386at/boothdr: likewise.
+
+Thu Apr 4 11:02:40 MST 1996 Bryan Ford <address@hidden>
+
+ * boot/boot_info_dump.c: dump the string associated with
+ each boot module, if any.
+
+ * boot/bsd/main.c: pass along the associated boot module string
+
+ * boot/bsd/mkbsdimage.sh: allow strings to be associated with
+ boot modules, using the syntax "filename:string".
+
+Fri Mar 29 02:00:29 1996 steve clawson <address@hidden>
+
+ * html/mach4-UK22.html: new file.
+ * html/mach4-UK22-linuxdev.html: likewise.
+
+ * configrules: Added --enable-fipc option, which adds -DFIPC to DEFS.
+ * configure: likewise.
+
+Sun Mar 24 13:12:14 1996 Shantanu Goel <address@hidden>
+
+ * kernel/i386at/model_dep.c: (init_alloc_aligned): Check for end
+ of memory.
+
+Sat Mar 16 20:26:28 1996 Shantanu Goel <address@hidden>
+
+ Following changes for new driver emulation framework.
+
+ * kernel/Makerules: Exclude SCSI directories if LINUX_DEV.
+
+ * kernel/i386/iopb.c: Renamed device_t to mach_device_t.
+ Renamed convert_device_to_port to mach_convert_device_to_port.
+
+ * kernel/i386/trap.c: (kernel_trap): Panic if page fault at address
+ 0 or kernel text segment.
+
+ * kernel/i386at/autoconf.c: (bus_master_init): Don't probe for
+ block drivers if the kernel is configured to use Linux block
+ drivers.
+ (bus_device_init): Likewise.
+
+ * kernel/i386at/kd.c: Renamed device_t to mach_device_t.
+ kernel/i386at/iopl.c: Likewise.
+ kernel/i386at/kd.c: Likewise.
+ kernel/i386/io_emulate.c: Likewise.
+
+ * kernel/i386at/conf.c: (dev_name_list): Don't include block
+ driver entries if the kernel is configured to use Linux block
+ drivers.
+
+ * kernel/i386at/i386at_ds_routines.c: New file.
+ kernel/i386at/dev_hdr.h: New file.
+ kernel/i386at/device_emul.h: New file.
+
+ * kernel/i386at/model_dep.c: (use_all_mem): Set it for LINUX_DEV.
+ (machine_init): Set BIOS warm boot magic. Unmap page zero after
+ device initialization.
+ (halt_all_cpus): Removed BIOS warm boot magic.
+
+ * kernel/i386at/nhd.c: Don't compile if using Linux drivers.
+
+ * kernel/i386at/gpl/linux/linux_block.c: New file.
+ kernel/i386at/gpl/linux/linux_emul.h: New file.
+ kernel/i386at/gpl/linux/linux_misc.c: New file.
+ kernel/i386at/gpl/linux/linux_sched.c: New file.
+ kernel/i386at/gpl/linux/linux_version.c: New file.
+
+ * kernel/i386at/gpl/linux/linux_net.c: Rewritten from scratch.
+
+ * kernel/i386at/gpl/linux/block: New directory. Block drivers
+ from Linux 1.3.68.
+
+ * kernel/i386at/gpl/linux/scsi: New directory. SCSI drivers from
+ Linux 1.3.68.
+
+ * kernel/i386at/gpl/linux/pci: New directory. PCI bus support from
+ Linux 1.3.68.
+
+ * kernel/i386at/gpl/linux/include: All files upgraded to Linux 1.3.68.
+ kernel/i386at/gpl/linux/net: Likewise.
+
+ * kernel/intel/pmap.c: (pmap_unmap_page_zero): New function.
+
+Wed Mar 6 18:14:22 1996 steve clawson <address@hidden>
+
+ * include/mach/setjmp.h: Changed definition of jmp_buf[] so that
+ it's big enough for NetBSD, FreeBSD and linux's libc setjmp
+ functions. Otherwise their setjmp ends up overwriting useful info
+ in the cthread_t structures.
+
+Tue Mar 5 17:47:59 MST 1996 Linus Kamb (address@hidden)
+
+ * Changed kernel/i386at/if_ne.c
+ nerecv() recognizes FIPC_MSG_TYPE packets.
+ nefoutput() called by co-opting d_port_death.
+
+ * Changed kernel/i386at/conf.c
+ maps d_port_death to nefoutput()
+
+Fri Feb 23 19:44:52 1996 Bryan Ford <address@hidden>
+
+ Merged in Erich Boleyn's changes for the latest version of MultiBoot:
+
+ * boot/Proposal: updated to Erich's latest version of the proposal;
+ bumped the version number to 0.5.
+
+ * include/mach/machine/multiboot.h: added memory descriptions,
+ ELF symbol table passing support.
+
+ * kernel/i386at/boothdr.S: flag requiring memory info;
+ receive multiboot_info pointer in ebx instead of eax.
+
+ * kernel/i386at/model_dep.c: new way of finding available memory
+
+ * boot/boot_info_dump.c, boot/boot_start.c, boot/do_boot.S:
+ updated for new entry protocol and boot_info format.
+
+ * boot/bsd/main.c: updated to pass BIOS memory info.
+
+ * boot/linux/misc.c: [baford] updated to pass BIOS memory info.
+
+Thu Feb 15 18:36:54 1996 steve clawson <address@hidden>
+
+ * kernel/i386/locore.S: added cpu_shutdown() function from OSF
+ Mach mk6.1_free, originally from Dave Slattengren
+ <address@hidden>.
+
+ * kernel/i386at/kd.c: Made kdreboot() call cpu_shutdown() if
+ the attempt to reset the machine through the keyboard controller
+ dosen't work.
+
+ * kernel/i386at/kd.c: Dosen't include <com.h> anymore, or set
+ RCLINE. This isn't needed with the serial console changes.
+
+ * kernel/i386at/if_3c503.h: added 3com vendor ID numbers.
+
+ * kernel/i386at/if_ns8390.c: Added code from Linux to check for
+ 3com's vendor ID in the Etherlink II probe routine.
+
+Tue Feb 13 22:34:27 1996 Kevin T. Van Maren <address@hidden>
+
+ * kernel/i386at/conf.c: Changed the number of subdevices for the
+ nhd and sd devices to 2^10 for slice numbering.
+
+ * kernel/i386at/nhd.c: Modified to use the array of partitions
+ and the common partitioning code. Disklabels are still there,
+ but are fairly meaningless to the kernel (except for the basic
+ geometry information from the BIOS).
+
+ * kernel/i386at/disk.h: minor addition of BAD_BLK from the
+ old hdreg.h file (which is gone)
+
+ * kernel/i386at/pchd.c: removed as obsolete
+
+ * kernel/i386at/hdreg.h: removed as obsolete
+
+Tue Feb 13 16:22:48 1996 steve clawson <address@hidden>
+
+ * kernel/i386at/if_ne.c: Changed initialization code to follow the
+ National Semiconductor guidelines for setting up the 8390.
+
+Sun Jan 28 22:56:38 MST 1996 Bryan Ford <address@hidden>
+
+ * Checked in major MOSS changes from work at home:
+ got DPMI support working (Win 3.1, Win95, OS/2)
+ modulo a few minor incompatibilities;
+ VCPI and DOS support are fully functional (again);
+ VCPI and DPMI now support fastints.
+
+Wed Jan 17 17:18:57 1996 Bart Robinson <address@hidden>
+
+ * Serial console working for real.
+
+ * kernel/bogus/rc.h: removed RCBAUD and added RCADDR, prettied up.
+
+ * boot/serial.S: added. This is used by the boot adaptor part,
+ the rest of the kernel uses mach4/kernel/device/cons.[ch]. This
+ file was taken from FreeBSD who took it from Mach sometime.
+
+ * kernel/pc/putchar.c: changed to use serial.S if <rc.h> says so.
+
+ * boot/bsd/Makerules: serial.S needs kernel/bogus to be on the -I
+ list
+
+ * boot/linux/Makerules: ditto
+
+ * kernel/i386at/model_dep.c: changed to call cninit() rather than
+ kdinit(). Also if booted with -d will call cninit() before
+ Debugger(). It used to have kd_cnmaygetc call cninit (yuk!)
+
+ * kernel/i386at/console_list.h: removed. The console is handled
+ differently now.
+
+ * kernel/i386at/conf.c: console entry in the device list is now
+ the `virtual' one "cn" instead of "kd"
+
+ * kernel/i386at/cons_conf.c: added. Defines the constab array
+ which tells us which console-like things to look for.
+
+ * kernel/i386at/com.c: tweaked to export an interface that
+ mach4/kernel/device/cons.[ch] wants. RCBAUD is in here now
+ rather than rc.h.
+
+ * kernel/i386at/kd.c: ditto
+
+Wed Jan 17 13:51:46 1996 Kevin Van Maren <vanmaren.cs.utah.edu>
+
+ * Unified the partition code for IDE & SCSI device drivers
+
+ * kernel/i386at/pc_label.c: deleted
+ * kernel/i386/pc_hd_label.c: deleted (used by hd.c)
+ * kernel/i386/hd.c: deleted (old 'ide' driver)
+
+ * kernel/i386at/nhdreg.h: Removed the definition of PDLOCATION,
+ should be in <i386at/disk.h> not here!
+
+ * kernel/i386at/nhd.c: Removed IDE specific PC partition code.
+ Changed to use the unified partition code.
+
+Mon Oct 30 08:33:01 1995 Bryan Ford <address@hidden>
+
+ * mach4-i386/kernel/i386at/interrupt.S: from Shantanu: proper fix
+ for interrupt disable bug.
+ * mach4-i386/kernel/i386/spl.S: likewise.
+
+Mon Oct 23 11:08:33 1995 steve clawson <address@hidden>
+
+ * bootstrap/translate_root.c: new file
+ bootstrap/translate_root.h: likewise
+
+ Code to convert strange root device encodings (like Linux device
+ numbers) into what Mach wants.
+
+Sun Oct 22 18:36:49 1995 Bryan Ford <address@hidden>
+
+ * Integrated Steve's and Bart's changes from the UK02p16-work branch.
+
+ * boot: updated booter/kernel interface to be (mostly) conformant
+ to MultiBoot-0.3 proposal.
+
+ * boot/bsd/crt0.S: pass a boot loader value (Mach/NetBSD/FreeBSD)
+ as well as boothowto and bootdev.
+
+ * boot/bsd/main.c: Fabricate a proper MultiBoot kernel command line
+ from the boothowto and bootdev values.
+
+ * boot/bsd/main.c: Cleaned up symbol table loading, so it should
+ work with all a.out format variants.
+
+ * boot/bsd/main.c: Provide the kernel info on the device we booted from.
+
+ * mach4-i386/kernel/i386at/model_dep.c: MultiBoot-0.3 compliance.
+
+ * mach4-i386/kernel/i386at/interrupt.S: mostly fix interrupt nesting
+ problem with Linux driver changes.
+
+Mon Oct 16 14:49:01 1995 steve clawson <address@hidden>
+
+ * boot/bsd/crt0.S: Now should be able to differentiate between
+ the original Mach bootblocks, the old BSD (which NetBSD uses)
+ bootblocks and the new-style FreeBSD bootblocks.
+
+Fri Oct 13 16:59:10 1995 steve clawson <address@hidden>
+
+ * boot/boot_info.c: Add code to add the symbol table into the
+ occupied list that we hand to the kernel.
+
+ * boot/bsd/crt0.S: Added in code to pass along the boothowto and
+ bootdev. We should be able to tell between Mach, FreeBSD and
+ NetBSD bootblocks, but we don't tell anyone about it yet.
+
+ * boot/bsd/main.c: Now tries to find the kernel symbol table and
+ put it into a `safe' place for the kernel to grab later. It
+ also sets the bsd_boothowto and bsd_bootdev fields of the
+ boot_info struct.
+
+ * bootstrap/exec.c: Enabled code to load symbol tables.
+
+ * kernel/i386/setroot.c: Changed code to work with BSD bootblocks
+ (and their major device numbering...sd == 4, instead of 3).
+
+ * kernel/i386at/model_dep.c: Now sets kern_sym_start and
+ kern_sym_size from boot_info, along with boothowto and
+ bootinfo from the bootblocks.
+
+Wed Oct 4 20:04:27 MDT 1995 Bryan Ford <address@hidden>
+
+ Released moss-0.80 (tag moss-0-80)
+
+Wed Oct 4 12:05:57 MDT 1995 Bryan Ford <address@hidden>
+
+ Merged in changes made for DOS extender at home:
+ * added mach/i386/debug_reg.h,
+ containing definitions for accessing the debug registers.
+ * changed i16 code to add physical memory to the malloc pool
+ (assuming we're using the lmm to handle the malloc pool).
+
+Tue Oct 3 13:22:50 1995 steve clawson <address@hidden>
+
+ * kernel/pc/i16/i16_raw.c: baford's changes to work with gcc
+ 2.7.0.
+ boot/boot_start.c: Likewise.
+
+Thu Sep 28 17:37:44 1995 steve clawson <address@hidden>
+
+ * Makefile.in: added image, bsdimage and linuximage targets.
+ image will build both the linux and bsd images (Mach and zMach),
+ in the Object directory, the others will only build their their
+ respective images.
+
+ * kernel/bogus/hpp.h: Changed #define to be 1, so that the driver
+ is included by default.
+
+ * kernel/i386at/autoconf.c: Changes for NE2000.
+ kernel/i386at/conf.c: Likewise.
+ kernel/i386at/if_ne.c: NE2000 driver.
+ kernel/i386at/if_nereg.h: NE2000 driver header file.
+
+ * kernel/i386at/gpl/if_hpp.c: Changed #include of vm_param.h to
+ "vm_param.h", since it wasn't getting found in the usual place.
+ kernel/i386at/gpl/if_ul.c: Likewise.
+ kernel/i386at/gpl/if_wd.c: Likewise.
+
+
+Fri Aug 25 23:39:19 1995 Shantanu Goel <address@hidden>
+
+ * kernel/i386/hardclock.c: (cold): Deleted. The Linux code now
+ uses its own clock interrupt handler.
+
+ * kernel/i386/spl.S: Use EXT to reference global variables.
+
+ * kernel/i386/spl.h: spl_t must be int; asm code assume this.
+
+ * kernel/i386at/autoconf.c: Changed default IRQ for "wd" to 9.
+ (probeio): Don't compare dev->ctlr against -1. GCC 2.7.0 doesn't
+ like it.
+
+ * kernel/i386at/interrupt.S: (interrupt): Removed check
+ for spurious interrupts.
+
+ * kernel/i386at/model_dep.c: (cold): Deleted.
+ (startrtclock): Deleted check against multiple invocations;
+ it's no longer needed.
+
+ * kernel/i386at/pic_isa.c: (intpri): Initialize clock interrupt
+ priority to 0 to disable clock interrupts.
+
+ * kernel/i386at/gpl/linux/linux_dma.c:
+ (linux_request_dma, linux_free_dma): Made function declarations
+ consistent with prototype.
+
+ * kernel/i386at/gpl/linux/linux_init.c: (linux_init): Deleted
+ call to startrtclock(). Install temporary clock interrupt handler
+ for Linux device initialization.
+
+ * kernel/i386at/gpl/linux/linux_net.c: (linux_net_dev_init): Added
+ entries for SEEQ8005, HP100, and Intel EtherExpress Pro.
+ (linux_alloc_skb): No longer takes a 2nd argument in accordance
+ with Linux 1.3.x.
+ (net_soft): Cleaned up DMA handling.
+
+ * kernel/i386at/gpl/linux/linux_port.c: (linux_request_region): Made
+ function declaration consistent with prototype.
+
+ * kernel/i386at/gpl/linux/linux_printk.c: Get GCC's stdarg.h.
+
+ * kernel/i386at/gpl/linux/linux_vsprintf.c: Get GCC's stdarg.h.
+
+ * kernel/i386at/gpl/linux/net: All files in this directory
+ have been upgraded to Linux 1.3.20.
+
+Mon Jun 26 12:41:56 MDT 1995 Miles Bader <address@hidden>
+
+ * boot/boot_start.c: changed "m" asm constraints to "rm"
+ to make gcc 2.7.0 happy.
+ * kernel/pc/i16/i16_raw.c: avoid using #ifdef's
+ in the middle of macro invocations; gcc 2.7.0 doesn't like them.
+
+Fri May 19 11:17:13 MDT 1995 Bryan Ford <address@hidden>
+
+ * Released UK02p17, as a private snapshot for goel.
+
+Tue May 16 00:59:56 1995 Shantanu Goel <address@hidden>
+
+ * configure: Recognise --enable-linuxdev.
+
+ * kernel/Makerules: Recognise LINUX_DEV.
+ Don't compile ported Linux drivers if using the native Linux ones.
+
+ * include/mach/machine/asm.h (TEXT_ALIGN, DATA_ALIGN): New defines.
+
+ * kernel/i386/ipl.h (NSPL): New define.
+ (intpri): Make type int.
+ (SPLHI, SPL7, IPLHI): Defined to be 7.
+
+ * kernel/i386/pic.h (PIC_MASTER_ICW, PIC_MASTER_OCW): New defines.
+ (PIC_SLAVE_ICW, PIC_SLAVE_OCW): New defines.
+
+ * kernel/i386/pic.c (pic_mask, curr_pic_mask): Make type int.
+ (NSPL): Use it.
+
+ * kernel/i386/spl.S: Rewritten from scratch.
+
+ * kernel/i386/hardclock.c (hardclock): Linux support changes:
+
+ * Don't call the Mach interrupt handler during configuration.
+
+ * Never pass SPL0 flag to clock_interrupt.
+
+ * Handle Linux timers.
+
+ * kernel/i386at/conf.c: Added entries for Linux network drivers.
+ Disable native Mach drivers when using the Linux ones.
+
+ * kernel/i386at/autoconf.c: Disable probing of native Mach drivers
+ when using the Linux ones.
+ Disable printer driver when using Linux drivers because
+ it blindly allocates the irq, causing conflicts with the parallel
+ port Linux network drivers.
+
+ * kernel/i386at/model_dep.c (machine_init): Call linux_init.
+ (alloc_dma_mem): Modified so it can be called any time while
+ the system is running. Interface changed.
+ (startrtclock): Protect against multiple invocations.
+
+ * kernel/i386at/nfd.c (fdprobe): Updated call to alloc_dma_mem
+ to account for interface change.
+
+ * kernel/i386at/interrupt.S: Rewritten from scratch.
+
+ * kernel/i386at/pic_isa.c (intpri): Make type int.
+
+ * kernel/i386at/gpl/linux: Directory and files under it added.
+ These provide native Linux network driver support.
+
+Fri May 12 10:47:41 MDT 1995 Bryan Ford <address@hidden>
+
+ * Released UK02p16, as an internal snapshot for rdukes
+
+Wed May 3 10:47:41 MDT 1995 Bryan Ford <address@hidden>
+
+ * Released UK02p15.
+ (UK02p14 was just an intermediate tag after adding ELF support.)
+
+ Configuration-related changes:
+
+ ELF support changes:
+
+ * configure: set 'enable_elf' if user specifies --enable-elf.
+
+ * include/mach/machine/asm.h: don't add underscores to symbols if ELF.
+
+ * All over: make proper use of EXT/LEXT/ENTRY macros
+ instead of assuming all public symbols are prefixed with underscores.
+
+ * boot/bsd.main.c: if a.out-kludge bit isn't set, use exec_load()
+ from libmach_exec.a to interpret the boot image executable header.
+
+ * kernel/i386/fpe.b_elf: created a uuencoded ELF version of fpe.b
+
+ * libmach/loader_info.c: deleted, became libmach/exec/a_out.c.
+
+ Miscellaneous changes:
+
+ * Makeconf.in: got rid of LD86 and AS86; no longer needed
+
+ * Makerules: various cleanups and fixes, ELF stuff.
+
+ * include/mach/machine/vm_param.h: Moved private kernel parts
+ to kernel/i386/vm_param.h.
+
+ * kernel/dos/*: added a bunch of Unix-like low-level file I/O
+ routines that translate to the appropriate DOS software interrupts.
+
+ * kernel/i386/seg.h: use MACH_INLINE macro for inline functions.
+
+ * kernel/i386at/eisa.h: added from MK83a, was missing for some reason.
+
+Fri Apr 7 17:43:22 MDT 1995 Bryan Ford <address@hidden>
+
+ * Released UK02p13.
+
+ * Got rid of the UK02-freeze branch in the i386 tree.
+ As a result, all the MK83a changes in this tree are now merged in.
+
+Fri Apr 7 14:19:55 MDT 1995 Bryan Ford <address@hidden>
+
+ * Merged in diffs from UK02p9 to UK02p12:
+
+ Mon Apr 3 19:55:41 MDT 1995 Bryan Ford <address@hidden>
+
+ * Released UK02p11.
+ Too many changes to describe concisely,
+ almost all affecting only the boot mechanism for now.
+ Also, integrated the kernel/util, kernel/pc, kernel/dos code
+ from my DOS extender project at home.
+
+ Mon Feb 27 16:32:59 MST 1995 Bryan Ford <address@hidden>
+
+ * Released UK02p10 as a non-functional snapshot
+
+Fri Feb 10 13:25:54 MST 1995 Bryan Ford <address@hidden>
+
+ Merged in diffs from UK02p7 to UK02p9:
+
+ Tue Jan 17 15:55:01 MST 1995 Bryan Ford <address@hidden>
+
+ * Released UK02p8
+
+ Tue Jan 17 12:03:37 MST 1995 Bryan Ford <address@hidden>
+
+ * boot/bsd/Makerules: BSD default boot image is now
+ named 'Mach.all' instead of 'boot.all'.
+
+ Sat Jan 14 15:13:54 MST 1995 Bryan Ford <address@hidden>
+
+ * libmach/unixoid/Makefile: enable building libmach.a
+ only if user specifies --enable-libmach to configure.
+
+ Fri Jan 13 15:14:43 1995 steve clawson <address@hidden>
+
+ * Integrated Shantanu Goel's new floppy and hard drive
+ device drivers. (address@hidden)
+
+ * kernel/i386at/nhd.c: Rewritten from scratch.
+ kernel/i386at/nhdreg.h: Likewise.
+ kernel/i386at/nfd.c: Likewise.
+ kernel/i386at/nfdreg.h: Likewise.
+
+ * kernel/i386at/model_dep.c:
+ Added alloc_dma_mem().
+
+ * kernel/bogus/fd.h:
+ Set NFD to 4 to include floppy support.
+
+ * Added an #if 0/#endif wrapper around:
+ kernel/i386/pc_hd_label.c
+ kernel/i386at/pchd.c
+ kernel/i386at/hd.c
+ kernel/i386at/fd.c
+
+ Fri Jan 13 14:56:35 1995 steve clawson <address@hidden>
+
+ * added .../kernel/i386at/gpl directory to hold gpl'd
+ code (currently it holds ethernet drivers ported from
+ Linux).
+
+ * Integrated Shantanu Goel's ethernet driver ports from
+ Linux into the gpl directory. (address@hidden)
+
+ * kernel/i386at/gpl/if_ns.c: New file.
+ kernel/i386at/gpl/if_nsreg.h: New file.
+ kernel/i386at/gpl/if_ul.c: New file.
+ kernel/i386at/gpl/if_wd.c: New file.
+ kernel/bogus/ul.h: New file.
+ kernel/bogus/wd.h: New file.
+
+ * kernel/i386at/autoconf.c:
+ Added entries for new drivers, "ul", "wd".
+
+ * kernel/i386at/conf.c:
+ Added entries for new drivers, "ul", "wd".
+
+ * kernel/i386at/if_ns8390.c:
+ Compile file only #if NNS8390 > 0. This and if_wd.c
+ are probably mutually exclusive. (ie. don't try and stick
+ both in your kernel...)
+
+ * Added HP PC LAN Plus support code ported from Linux.
+
+ * kernel/i386at/gpl/if_hpp.c: New file.
+ kernel/bogus/hpp.h: New file.
+
+ * kernel/i386at/autoconf.c:
+ Added entry for new driver, "hpp".
+
+ * kernel/i386at/conf.c:
+ Added entry for new driver, "hpp".
+
+ * kernel/i386at/gpl/if_ns.c: nsintr(): Added back in the
+ code to read the counter values from the card if they
+ overflow. The HP PC LAN Plus needs to have this (just
+ acking the interrupt dosen't reset the counters on the
+ card I've got).
+
+ 13 Jan 1995 19:53:53 +0100 (MET) address@hidden (Remy CARD)
+
+ * libmach/unixoid/Makefile.in: reenabled building of libmach.a.
+
+ Fri Jan 13 14:52:42 MST 1995 Bryan Ford <address@hidden>
+
+ * libmach/loader_info.c: fixed bug interpreting QMAGIC
executables.
+
+Fri Nov 25 13:56:32 MST 1994 Bryan Ford (address@hidden)
+
+ Merged in diffs from UK02p6 to UK02p7:
+
+ Sun Nov 20 11:56:51 MST 1994 Bryan Ford (address@hidden)
+
+ * Changed the ifdefs referring to '__liXnux__' back to '__linux__'
+ so that partition interpretation will once again default to
+ standard PC-style when compiled on a Linux machine.
+ If you're cross-compiling from Linux and want BSD partitioning
+ anyway, add '-U__linux__' to the DEFINES line in Makeconf.
+
+ * Modified Alvin's compressed boot image mechanism slightly
+ so the Linux-derived files can be taken _completely_
+ unmodified from the Linux kernel source distribution.
+ Easier to keep up-to-date this way. Also created a little
+ shell script to update these files automatically.
+
+ * Separated out the 'mkbootimage' script and supporting stuff
+ into a separate 'boot/bsd' subdirectory, just like the
+ Linux boot image stuff was separated out. Now the top-level
+ 'boot' directory contains _only_ stuff related to
+ boot _modules_.
+
+ * The top-level Makefile is no longer responsible for creating
+ the "default boot image" containing all available boot modules.
+ Instead, boot/bsd/Makefile now produces a default 32-bit boot
+ image ('boot.all'), and boot/linux/Makefile produces a
+ default 16-bit compressed Linux boot image ('zMach.all').
+
+ * Cleaned up the console code a little bit.
+
+ Mon Nov 14 22:50:57 -0500 1994 Alvin Starr <address@hidden>
+
+ * Separated out the Linux boot image creation mechanisms
+ into a separate 'boot/linux' subdirectory, and changed
+ it to produce compressed Linux boot images. The Linux
+ boot images produced are now _exactly_ like those
+ produced by Linux, in that they use all the same 16-bit
+ setup code and decompression code and everything.
+ This also means you can 'dd' one of these boot images
+ straight onto a floppy to create a Mach boot floppy.
+
+ To create compressed Linux boot images now, use the
+ new 'mkliloimage' script. It works just like 'mkbootimage'.
+
+ The old 'mkbootimage' script is still there, but is greatly
+ simplified since it no longer needs to produce Linux-compatible
+ boot images at all. One side-effect of this is that the
+ 32-bit boot images produced by this script will be in the
+ "native" executable format of the build environment in use.
+ For example, if you build under NetBSD, the produced 32-bit
+ boot images will load fine from BSD boot blocks, but probably
+ not from Mach boot blocks, because the Mach boot blocks don't
+ know about BSD's newer a.out format.
+
+ * Enabled SCSI drivers.
+
+ * God kernel debugger working again.
+
+ * Changed kd.c to handle tabs correctly.
+
+ Fri Sep 30 21:38:31 1994 Patrick Doyle (address@hidden)
+
+ * Makefile.in
+ (SORTED_SUBDIRS):
+ Added a macro to generated a "sorted" list of subdirectories
+ such that those listed in $(FIRST_SUBDIRS) are first. Changed
+ the "all" and "install" rules to use this macro so we don't
+ have to descend into those subdirs twice. (Idea was stolen
+ from glibc makefile).
+ (boot.all):
+ Added rule to generate "boot.all" in the top level object
+ directory and changed "all" to create this target.
+
+Sat Oct 22 14:59:03 MDT 1994 Bryan Ford (address@hidden)
+
+ * Incorporated tons of minor changes and additions
+ produced by my Mach-based DOS extender project.
+ Mostly involved cleaning up and adding to libmach_sa.
+
+Tue Oct 25 12:32:28 MDT 1994 Bryan Ford (address@hidden)
+
+ * Released UK02p6.
+
+ * Moved exec header interpretation stuff from the bootstrap code
+ into libmach so the kernel could also use it when initializing
+ the bootstrap program itself.
+
+Fri Sep 16 11:33:44 MDT 1994 Bryan Ford (address@hidden)
+
+ * Fixed a bug in locore.S that caused occasional
+ "null pv_list" panics from within pmap.c.
+
+ * Fixed a bug in pmap.c: forgot to clear the kernel
+ page directory before initializing (only part of) it.
+
+Fri Sep 9 10:45:26 MDT 1994 Bryan Ford (address@hidden)
+
+ * Added kernel/imps directory
+ for Intel MultiProcessor Spec compliant PCs;
+ only enabled if user specifies --enable-mp.
+
+ * boot image building scripts: exit when errors occur
+
+ * boot/mkbmod.sh: changed -s to -no-strip to avoid confusion
+
+Thu Sep 8 16:51:15 MDT 1994 Bryan Ford (address@hidden)
+
+ * bootstrap/exec.c:
+ support NetBSD big-endian ZMAGIC executables
+
+ * include/Makefile.in:
+ fixed installation directories
+
+Tue Sep 6 08:49:39 1994 Patrick Doyle (address@hidden)
+
+ * Makefile.in (install): Changed "install" rule so that it doesn't
+ gratuitously reinstall boot.all.
+
+Mon Sep 5 12:11:45 MDT 1994 Bryan Ford (address@hidden)
+
+ * Full cross compilation support
+
+ * Changed default Mach boot image filename
+ from `machboot' to just `boot'.
+
+ * Automatically create a `boot.all' upon installation
+ containing all boot modules.
+
+Sat Sep 3 07:13:44 MDT 1994 Bryan Ford (address@hidden)
+
+ * Bugfix: boot code didn't clear NT flag properly,
+ and the VTech Platinum BIOS was leaving it set.
+
+ * Added get_esp() and get_eflags() in proc_reg.h.
+
+ * Added debug_trace facility.
+
+ * bootstrap/exec.c: got rid of #ifdef __linux__'s;
+ instead, support both at once and detect at runtime.
+
+ * include/mach/machine/disk.h,
+ kernel/i386/pc_hd_label.c:
+ hacked #ifdef __linux__'s to #ifdef __liXnux__
+ to get back to BSD-style partition table interpretation.
+
+Fri Aug 26 09:52:35 1994 Jeff Law (address@hidden)
+
+ * configure: Add "-print" argument to find so that it works with
+ non-GNU finds.
+
+Mon Aug 1 18:15:00 MDT 1994 Bryan Ford (address@hidden)
+
+ * Got most of the migrating threads changes merged in
+
+Mon Aug 1 14:45:52 MDT 1994 Bryan Ford (address@hidden)
+
+ * Integrated Louis-D. Dubeau's pchd (PC hard drive) patches.
+
+
+Wed Jul 20 14:00:45 MDT 1994 Bryan Ford (address@hidden)
+
+ * include/Makefile: top-level header files weren't getting installed.
+
+ * Moved kernel i386/eflags.h to include/mach/machine/eflags.h,
+ so outsiders such as LITES can use it if they want to.
+
+ * Released UK02
+
+
+Fri Jul 15 11:46:19 MDT 1994 Bryan Ford (address@hidden)
+
+ * Kernel address space and physical memory
+ is now mapped at virtual address 0 instead of 0xC0000000.
+ (It's still up high in linear memory,
+ but the kernel segment registers are used to shift addresses.)
+
+ * All copyin/copyout code now uses segment registers
+ to access user space, like Linux does.
+
+ * Separated the console stuff out of kd.c and into (new) console.c.
+ No longer initialize the console at the very beginning in i386_init;
+ instead do it with the rest of the devices, in machine_startup.
+
+ * console.c: Created a kludgy little "immediate console" for kernel
debugging
+ which spews things onto a CGA/EGA/VGA display
+ without requiring _any_ initialization first.
+ It gets disabled automatically when the real console is initialized.
+
+ * include/mach/boot_info.h: deleted, because it was only for the old
+ `makeboot'-based server bootstrap mechanism.
+ Superseded by the new include/mach/boot.h.
+
+ * Lots of other minor changes.
+
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..007e939
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,370 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
+Inc.
+
+ Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved. This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+ Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package. The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package. Some packages provide this
+`INSTALL' file but do not implement all of the features documented
+below. The lack of an optional feature in a given package is not
+necessarily a bug. More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+ It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring. Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+ The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'. You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+ The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system.
+
+ Running `configure' might take a while. While running, it prints
+ some messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package, generally using the just-built uninstalled binaries.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation. When installing into a prefix owned by root, it is
+ recommended that the package be configured and built as a regular
+ user, and only the `make install' phase executed with root
+ privileges.
+
+ 5. Optionally, type `make installcheck' to repeat any self-tests, but
+ this time using the binaries in their final installed location.
+ This target does not install anything. Running this target as a
+ regular user, particularly if the prior `make install' required
+ root privileges, verifies that the installation completed
+ correctly.
+
+ 6. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+ 7. Often, you can also type `make uninstall' to remove the installed
+ files again. In practice, not all packages have tested that
+ uninstallation works correctly, even though it is required by the
+ GNU Coding Standards.
+
+ 8. Some packages, particularly those that use Automake, provide `make
+ distcheck', which can by used by developers to test that all other
+ targets like `make install' and `make uninstall' work correctly.
+ This target is generally not run by end users.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+ You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment. Here
+is an example:
+
+ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+ *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you can use GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'. This
+is known as a "VPATH" build.
+
+ With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory. After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+ On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor. Like
+this:
+
+ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+ CPP="gcc -E" CXXCPP="g++ -E"
+
+ This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+ By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc. You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them. In general, the
+default for these options is expressed in terms of `${prefix}', so that
+specifying just `--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+ The most portable way to affect installation locations is to pass the
+correct locations to `configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+`make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+ The first method involves providing an override variable for each
+affected directory. For example, `make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+`${prefix}'. Any directories that were specified during `configure',
+but not in terms of `${prefix}', must each be overridden at install
+time for the entire installation to be relocated. The approach of
+makefile variable overrides for each directory variable is required by
+the GNU Coding Standards, and ideally causes no recompilation.
+However, some platforms have known limitations with the semantics of
+shared libraries that end up requiring recompilation when using this
+method, particularly noticeable in packages that use GNU Libtool.
+
+ The second method involves providing the `DESTDIR' variable. For
+example, `make install DESTDIR=/alternate/directory' will prepend
+`/alternate/directory' before all installation names. The approach of
+`DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters. On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of `${prefix}'
+at `configure' time.
+
+Optional Features
+=================
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+ Some packages offer the ability to configure how verbose the
+execution of `make' will be. For these packages, running `./configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with `make V=1'; while running `./configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with `make V=0'.
+
+Particular systems
+==================
+
+ On HP-UX, the default C compiler is not ANSI C compatible. If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+ ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+ HP-UX `make' updates targets which have the same time stamps as
+their prerequisites, which makes it generally unusable when shipped
+generated files such as `configure' are involved. Use GNU `make'
+instead.
+
+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file. The option `-nodtk' can be used as
+a workaround. If GNU CC is not installed, it is therefore recommended
+to try
+
+ ./configure CC="cc"
+
+and if that doesn't work, try
+
+ ./configure CC="cc -nodtk"
+
+ On Solaris, don't put `/usr/ucb' early in your `PATH'. This
+directory contains several dysfunctional programs; working variants of
+these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
+in your `PATH', put it _after_ `/usr/bin'.
+
+ On Haiku, software installed for all users goes in `/boot/common',
+not `/usr/local'. It is recommended to use the following options:
+
+ ./configure --prefix=/boot/common
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on. Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+ CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+ OS
+ KERNEL-OS
+
+ See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+ If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+ If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+ Variables not defined in a site shell script can be set in the
+environment passed to `configure'. However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost. In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'. For example:
+
+ ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf limitation. Until the limitation is lifted, you can use
+this workaround:
+
+ CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+ Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+ Print a summary of the options unique to this package's
+ `configure', and exit. The `short' variant lists options used
+ only in the top level, while the `recursive' variant lists options
+ also present in any nested packages.
+
+`--version'
+`-V'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`--cache-file=FILE'
+ Enable the cache: use and save the results of the tests in FILE,
+ traditionally `config.cache'. FILE defaults to `/dev/null' to
+ disable caching.
+
+`--config-cache'
+`-C'
+ Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+ Use DIR as the installation prefix. *note Installation Names::
+ for more details, including other options available for fine-tuning
+ the installation locations.
+
+`--no-create'
+`-n'
+ Run the configure checks, but stop before creating any output
+ files.
+
+`configure' also accepts some other, not widely useful, options. Run
+`configure --help' for more details.
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..5bbbbd1
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,7947 @@
+# Makefile.in generated by automake 1.13.3 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
address@hidden@
+
+# Makefile for GNU Mach.
+
+# Copyright (C) 2006, 2007, 2008, 2009, 2013 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+#
+# Various definitions of the Automake environment.
+#
+# These will be augmented below.
+#
+
+# Makerules: how to do some things.
+
+# Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc.
+
+# Permission to use, copy, modify and distribute this software and its
+# documentation is hereby granted, provided that both the copyright
+# notice and this permission notice appear in all copies of the
+# software, derivative works or modified versions, and any portions
+# thereof, and that both notices appear in supporting documentation.
+#
+# THE FREE SOFTWARE FOUNDATION ALLOWS FREE USE OF THIS SOFTWARE IN ITS
+# "AS IS" CONDITION. THE FREE SOFTWARE FOUNDATION DISCLAIMS ANY
+# LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE
+# USE OF THIS SOFTWARE.
+
+#
+# Building foo.h from foo.sym.
+#
+
+# Makerules.mig: how to do some MIG-related things.
+
+# Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Written by Thomas Schwinge.
+
+# serial 0
+
+# TODO. This file should probably be distributed with GNU MIG and then there
+# should be some mechanism so that every package using it is automagically
+# using the latest available (or best-matching) version of it. Which is not
+# trivial, as the file is already needed to build the build system. But then,
+# this file does not really depend on GNU Automake. Hmm...
+
+# USAGE.
+
+# Before `include'ing this file, `noinst_LIBRARIES' and `MOSTLYCLEANFILES' have
+# to be initialized.
+
+# For using these rules, `AM_CPPFLAGS', `MIGCOM', `MIGCOMFLAGS', `MIGCOMSFLAGS'
+# and `MIGCOMUFLAGS' have to be defined as desired.
+
+# Then you can (read: currently ``have to''; see below for comments) use
+# constructs like:
+#
+# # User stubs.
+# nodist_lib_dep_tr_for_defs_a_SOURCES += \
+# vm/memory_object_user.user.defs.c
+# nodist_libkernel_a_SOURCES += \
+# vm/memory_object_user.user.h \
+# vm/memory_object_user.user.c \
+# vm/memory_object_user.user.msgids
+#
+# # Server stubs.
+# nodist_lib_dep_tr_for_defs_a_SOURCES += \
+# device/device.server.defs.c
+# nodist_libkernel_a_SOURCES += \
+# device/device.server.h \
+# device/device.server.c \
+# device/device.server.msgids
+
+#
+# Building RPC stubs.
+#
+
+# TODO. Get rid of that stuff, lib_dep_tr_for_defs.a and the four following
+# rules. See the thread at
+# <http://lists.gnu.org/archive/html/automake/2006-10/msg00039.html> about what
+# we really want to do. This requires work on GNU Automake.
+
+# Main Makefile fragment for GNU Mach.
+
+# Copyright (C) 1997, 1999, 2004, 2006, 2007, 2009 Free Software
+# Foundation, Inc.
+
+# Permission to use, copy, modify and distribute this software and its
+# documentation is hereby granted, provided that both the copyright
+# notice and this permission notice appear in all copies of the
+# software, derivative works or modified versions, and any portions
+# thereof, and that both notices appear in supporting documentation.
+#
+# THE FREE SOFTWARE FOUNDATION ALLOWS FREE USE OF THIS SOFTWARE IN ITS
+# "AS IS" CONDITION. THE FREE SOFTWARE FOUNDATION DISCLAIMS ANY
+# LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE
+# USE OF THIS SOFTWARE.
+
+#
+# DDB support --- eventually to die. Please.
+#
+
+# Makefile fragment for Linux device drivers and the glue code.
+
+# Copyright (C) 2006, 2007, 2011 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+#
+# Files for device driver support.
+#
+
+# Makefile fragment for i386-specific Linux code.
+
+# Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+#
+# Files for device driver support.
+#
+
+# Makefile fragment for the Xen platform.
+
+# Copyright (C) 2007 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+#
+# Xen support.
+#
+
+# Makefile fragment for i386.
+
+# Copyright (C) 1997, 1999, 2006, 2007 Free Software Foundation, Inc.
+
+# Permission to use, copy, modify and distribute this software and its
+# documentation is hereby granted, provided that both the copyright
+# notice and this permission notice appear in all copies of the
+# software, derivative works or modified versions, and any portions
+# thereof, and that both notices appear in supporting documentation.
+#
+# THE FREE SOFTWARE FOUNDATION ALLOWS FREE USE OF THIS SOFTWARE IN ITS
+# "AS IS" CONDITION. THE FREE SOFTWARE FOUNDATION DISCLAIMS ANY
+# LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE
+# USE OF THIS SOFTWARE.
+
+#
+# Source files for any i386 kernel.
+#
+
+# Makefile fragment for the ix86 specific part of the Xen platform.
+
+# Copyright (C) 2007 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+#
+# Xen support.
+#
+
+# Makefile fragment for the test suite.
+
+# Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+#
+# Tests.
+#
+
+# Makefile fragment for the documentation.
+
+# Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+#
+# The GNU Mach Reference Manual.
+#
+
+
+
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = gnumach.o$(EXEEXT)
+
+# The smashing stack protector might be enabled by default, but might emit
+# unsuitable code.
address@hidden@am__append_1 = \
address@hidden@ -fno-stack-protector
+
+DIST_COMMON = $(srcdir)/Makerules.am $(srcdir)/Makerules.mig.am \
+ $(srcdir)/Makefrag.am $(srcdir)/linux/Makefrag.am \
+ $(srcdir)/i386/linux/Makefrag.am $(srcdir)/xen/Makefrag.am \
+ $(srcdir)/i386/Makefrag.am $(srcdir)/i386/xen/Makefrag.am \
+ $(srcdir)/tests/Makefrag.am $(srcdir)/doc/Makefrag.am INSTALL \
+ NEWS README AUTHORS ChangeLog $(srcdir)/Makefile.in \
+ $(srcdir)/Makefile.am $(top_srcdir)/configure \
+ $(am__configure_deps) $(srcdir)/config.h.in \
+ $(top_srcdir)/tests/test-mbchk.in $(srcdir)/version.c.in \
+ $(top_srcdir)/build-aux/depcomp \
+ $(top_srcdir)/build-aux/mdate-sh $(srcdir)/doc/version.texi \
+ $(srcdir)/doc/stamp-vti $(top_srcdir)/build-aux/texinfo.tex \
+ $(include_device_HEADERS) $(include_mach_HEADERS) \
+ $(include_mach_eXec_HEADERS) \
+ $(am__include_mach_i386_HEADERS_DIST) \
+ $(top_srcdir)/build-aux/test-driver COPYING build-aux/compile \
+ build-aux/config.guess build-aux/config.sub build-aux/depcomp \
+ build-aux/install-sh build-aux/mdate-sh build-aux/missing \
+ build-aux/texinfo.tex $(top_srcdir)/build-aux/compile \
+ $(top_srcdir)/build-aux/config.guess \
+ $(top_srcdir)/build-aux/config.sub \
+ $(top_srcdir)/build-aux/install-sh \
+ $(top_srcdir)/build-aux/missing
+
+# Do we want the icky kernel debugger?
address@hidden@am__append_2 = \
address@hidden@ ddb/db_access.c \
address@hidden@ ddb/db_access.h \
address@hidden@ ddb/db_aout.c \
address@hidden@ ddb/db_break.c \
address@hidden@ ddb/db_break.h \
address@hidden@ ddb/db_command.c \
address@hidden@ ddb/db_command.h \
address@hidden@ ddb/db_cond.c \
address@hidden@ ddb/db_cond.h \
address@hidden@ ddb/db_examine.c \
address@hidden@ ddb/db_examine.h \
address@hidden@ ddb/db_expr.c \
address@hidden@ ddb/db_expr.h \
address@hidden@ ddb/db_ext_symtab.c \
address@hidden@ ddb/db_input.c \
address@hidden@ ddb/db_input.h \
address@hidden@ ddb/db_lex.c \
address@hidden@ ddb/db_lex.h \
address@hidden@ ddb/db_macro.c \
address@hidden@ ddb/db_macro.h \
address@hidden@ ddb/db_mp.c \
address@hidden@ ddb/db_output.c \
address@hidden@ ddb/db_output.h \
address@hidden@ ddb/db_print.c \
address@hidden@ ddb/db_print.h \
address@hidden@ ddb/db_run.c \
address@hidden@ ddb/db_run.h \
address@hidden@ ddb/db_sym.c \
address@hidden@ ddb/db_sym.h \
address@hidden@ ddb/db_task_thread.c \
address@hidden@ ddb/db_task_thread.h \
address@hidden@ ddb/db_trap.c \
address@hidden@ ddb/db_trap.h \
address@hidden@ ddb/db_variables.c \
address@hidden@ ddb/db_variables.h \
address@hidden@ ddb/db_watch.c \
address@hidden@ ddb/db_watch.h \
address@hidden@ ddb/db_write_cmd.c \
address@hidden@ ddb/nlist.h \
address@hidden@ ddb/stab.h \
address@hidden@ ddb/tr.h
+
+
+# We need frame pointers for trace to work properly.
address@hidden@am__append_3 = -fno-omit-frame-pointer
-fno-optimize-sibling-calls
+
+#
+# `kmsg' device.
+#
address@hidden@am__append_4 = \
address@hidden@ device/kmsg.c \
address@hidden@ device/kmsg.h
+
address@hidden@am__append_5 = \
address@hidden@ liblinux.a
+
address@hidden@am__append_6 = \
address@hidden@ liblinux.a
+
+
+#
+# Linux device drivers.
+#
address@hidden@am__append_7 = \
address@hidden@ linux/dev/drivers/block/floppy.c
+
address@hidden@am__append_8 = \
address@hidden@ linux/src/drivers/block/cmd640.c \
address@hidden@ linux/src/drivers/block/ide-cd.c \
address@hidden@ linux/src/drivers/block/ide.c \
address@hidden@ linux/src/drivers/block/ide.h \
address@hidden@ linux/dev/drivers/block/ahci.c \
address@hidden@ linux/dev/include/ahci.h \
address@hidden@ linux/src/drivers/block/ide_modes.h \
address@hidden@ linux/src/drivers/block/rz1000.c \
address@hidden@ linux/src/drivers/block/triton.c
+
address@hidden@am__append_9 = \
address@hidden@ linux/src/drivers/scsi/constants.c \
address@hidden@ linux/src/drivers/scsi/constants.h \
address@hidden@ linux/src/drivers/scsi/hosts.c \
address@hidden@ linux/src/drivers/scsi/hosts.h \
address@hidden@ linux/src/drivers/scsi/scsi.c \
address@hidden@ linux/src/drivers/scsi/scsi.h \
address@hidden@ linux/src/drivers/scsi/scsi_ioctl.c \
address@hidden@ linux/src/drivers/scsi/scsi_proc.c \
address@hidden@ linux/src/drivers/scsi/scsicam.c \
address@hidden@ linux/src/drivers/scsi/sd.c \
address@hidden@ linux/src/drivers/scsi/sd.h \
address@hidden@ linux/src/drivers/scsi/sd_ioctl.c \
address@hidden@ linux/src/drivers/scsi/sr.c \
address@hidden@ linux/src/drivers/scsi/sr.h \
address@hidden@ linux/src/drivers/scsi/sr_ioctl.c
+
address@hidden@am__append_10 = \
address@hidden@ linux/src/drivers/scsi/53c7,8xx.h \
address@hidden@ linux/src/drivers/scsi/53c78xx.c \
address@hidden@ linux/src/drivers/scsi/53c8xx_d.h \
address@hidden@ linux/src/drivers/scsi/53c8xx_u.h
+
address@hidden@am__append_11 = \
address@hidden@ linux/src/drivers/scsi/AM53C974.c \
address@hidden@ linux/src/drivers/scsi/AM53C974.h
+
address@hidden@am__append_12 = \
address@hidden@ linux/src/drivers/scsi/BusLogic.c \
address@hidden@ linux/src/drivers/scsi/BusLogic.h
+
address@hidden@am__append_13 = \
address@hidden@ linux/src/drivers/scsi/FlashPoint.c
+
address@hidden@am__append_14 = \
address@hidden@ linux/src/drivers/scsi/NCR53c406a.c \
address@hidden@ linux/src/drivers/scsi/NCR53c406a.h
+
address@hidden@am__append_15 = \
address@hidden@ linux/src/drivers/scsi/advansys.c \
address@hidden@ linux/src/drivers/scsi/advansys.h
+
address@hidden@am__append_16 = \
address@hidden@ linux/src/drivers/scsi/aha152x.c \
address@hidden@ linux/src/drivers/scsi/aha152x.h
+
address@hidden@am__append_17 = \
address@hidden@ linux/src/drivers/scsi/aha1542.c \
address@hidden@ linux/src/drivers/scsi/aha1542.h
+
address@hidden@am__append_18 = \
address@hidden@ linux/src/drivers/scsi/aha1740.c \
address@hidden@ linux/src/drivers/scsi/aha1740.h
+
address@hidden@am__append_19 = \
address@hidden@ linux/src/drivers/scsi/aic7xxx.c \
address@hidden@ linux/src/drivers/scsi/aic7xxx.h \
address@hidden@ linux/src/drivers/scsi/aic7xxx/scsi_message.h \
address@hidden@ linux/src/drivers/scsi/aic7xxx/sequencer.h \
address@hidden@ linux/src/drivers/scsi/aic7xxx_reg.h
+
address@hidden@am__append_20 = \
address@hidden@ linux/src/drivers/scsi/aic7xxx_proc.c \
address@hidden@ linux/src/drivers/scsi/aic7xxx_seq.c
+
address@hidden@am__append_21 = \
address@hidden@ linux/src/drivers/scsi/dtc.c \
address@hidden@ linux/src/drivers/scsi/dtc.h
+
address@hidden@am__append_22 = \
address@hidden@ linux/src/drivers/scsi/eata.c \
address@hidden@ linux/src/drivers/scsi/eata.h \
address@hidden@ linux/src/drivers/scsi/eata_generic.h
+
address@hidden@am__append_23 = \
address@hidden@ linux/dev/drivers/scsi/eata_dma.c \
address@hidden@ linux/src/drivers/scsi/eata_dma.h \
address@hidden@ linux/src/drivers/scsi/eata_dma_proc.h
+
address@hidden@am__append_24 = \
address@hidden@ linux/src/drivers/scsi/eata_dma_proc.c
+
address@hidden@am__append_25 = \
address@hidden@ linux/src/drivers/scsi/eata_pio.c \
address@hidden@ linux/src/drivers/scsi/eata_pio.h
+
address@hidden@am__append_26 = \
address@hidden@ linux/src/drivers/scsi/eata_pio_proc.c
+
address@hidden@am__append_27 = \
address@hidden@ linux/src/drivers/scsi/fdomain.c \
address@hidden@ linux/src/drivers/scsi/fdomain.h
+
address@hidden@am__append_28 = \
address@hidden@ linux/dev/drivers/scsi/g_NCR5380.c \
address@hidden@ linux/src/drivers/scsi/g_NCR5380.h
+
address@hidden@am__append_29 = \
address@hidden@ linux/src/drivers/scsi/gdth.c \
address@hidden@ linux/src/drivers/scsi/gdth.h \
address@hidden@ linux/src/drivers/scsi/gdth_ioctl.h \
address@hidden@ linux/src/drivers/scsi/gdth_proc.h
+
address@hidden@am__append_30 = \
address@hidden@ linux/src/drivers/scsi/gdth_proc.c
+
address@hidden@am__append_31 = \
address@hidden@ linux/src/drivers/scsi/in2000.c \
address@hidden@ linux/src/drivers/scsi/in2000.h
+
address@hidden@am__append_32 = \
address@hidden@ linux/src/drivers/scsi/ncr53c8xx.c \
address@hidden@ linux/src/drivers/scsi/ncr53c8xx.h
+
address@hidden@am__append_33 = \
address@hidden@ linux/src/drivers/scsi/pas16.c \
address@hidden@ linux/src/drivers/scsi/pas16.h
+
address@hidden@am__append_34 = \
address@hidden@ linux/src/drivers/scsi/ppa.c \
address@hidden@ linux/src/drivers/scsi/ppa.h
+
address@hidden@am__append_35 = \
address@hidden@ linux/src/drivers/scsi/qlogicfas.c \
address@hidden@ linux/src/drivers/scsi/qlogicfas.h
+
address@hidden@am__append_36 = \
address@hidden@ linux/src/drivers/scsi/qlogicisp.c \
address@hidden@ linux/src/drivers/scsi/qlogicisp.h
+
address@hidden@am__append_37 = \
address@hidden@ linux/src/drivers/scsi/seagate.c \
address@hidden@ linux/src/drivers/scsi/seagate.h
+
address@hidden@am__append_38 = \
address@hidden@ linux/src/drivers/scsi/sym53c8xx.c \
address@hidden@ linux/src/drivers/scsi/sym53c8xx_comm.h \
address@hidden@ linux/src/drivers/scsi/sym53c8xx.h \
address@hidden@ linux/src/drivers/scsi/sym53c8xx_defs.h
+
address@hidden@am__append_39 = \
address@hidden@ linux/src/drivers/scsi/t128.c \
address@hidden@ linux/src/drivers/scsi/t128.h
+
address@hidden@am__append_40 = \
address@hidden@ linux/src/drivers/scsi/dc390.h \
address@hidden@ linux/src/drivers/scsi/tmscsim.c \
address@hidden@ linux/src/drivers/scsi/tmscsim.h
+
address@hidden@am__append_41 = \
address@hidden@ linux/src/drivers/scsi/scsiiom.c
+
address@hidden@am__append_42 = \
address@hidden@ linux/src/drivers/scsi/u14-34f.c \
address@hidden@ linux/src/drivers/scsi/u14-34f.h
+
address@hidden@am__append_43 = \
address@hidden@ linux/src/drivers/scsi/ultrastor.c \
address@hidden@ linux/src/drivers/scsi/ultrastor.h
+
address@hidden@am__append_44 = \
address@hidden@ linux/src/drivers/scsi/wd7000.c \
address@hidden@ linux/src/drivers/scsi/wd7000.h
+
address@hidden@am__append_45 = \
address@hidden@ linux/dev/drivers/net/auto_irq.c \
address@hidden@ linux/dev/glue/net.c \
address@hidden@ linux/dev/drivers/net/Space.c \
address@hidden@ linux/dev/net/core/dev.c \
address@hidden@ linux/dev/drivers/net/net_init.c \
address@hidden@ linux/src/drivers/net/pci-scan.c \
address@hidden@ linux/src/drivers/net/pci-scan.h
+
address@hidden@am__append_46 = \
address@hidden@ linux/src/drivers/net/3c501.c
+
address@hidden@am__append_47 = \
address@hidden@ linux/src/drivers/net/3c503.c \
address@hidden@ linux/src/drivers/net/3c503.h \
address@hidden@ linux/src/drivers/net/8390.c
+
address@hidden@am__append_48 = \
address@hidden@ linux/src/drivers/net/3c505.c \
address@hidden@ linux/src/drivers/net/3c505.h
+
address@hidden@am__append_49 = \
address@hidden@ linux/src/drivers/net/3c507.c
+
address@hidden@am__append_50 = \
address@hidden@ linux/src/drivers/net/3c509.c
+
address@hidden@am__append_51 = \
address@hidden@ linux/src/drivers/net/3c59x.c
+
address@hidden@am__append_52 = \
address@hidden@ linux/src/drivers/net/3c515.c
+
address@hidden@am__append_53 = \
address@hidden@ linux/src/drivers/net/ac3200.c \
address@hidden@ linux/src/drivers/net/8390.c
+
address@hidden@am__append_54 = \
address@hidden@ linux/src/drivers/net/apricot.c
+
address@hidden@am__append_55 = \
address@hidden@ linux/src/drivers/net/at1700.c
+
address@hidden@am__append_56 = \
address@hidden@ linux/src/drivers/net/atp.c \
address@hidden@ linux/src/drivers/net/atp.h
+
+
+#if device_driver_cb_shim
+#liblinux_a_SOURCES += \
+# linux/src/drivers/net/cb_shim.c
+#endif
address@hidden@am__append_57 = \
address@hidden@ linux/src/drivers/net/de4x5.c \
address@hidden@ linux/src/drivers/net/de4x5.h
+
address@hidden@am__append_58 = \
address@hidden@ linux/src/drivers/net/de600.c
+
address@hidden@am__append_59 = \
address@hidden@ linux/src/drivers/net/de620.c \
address@hidden@ linux/src/drivers/net/de620.h
+
address@hidden@am__append_60 = \
address@hidden@ linux/src/drivers/net/depca.c \
address@hidden@ linux/src/drivers/net/depca.h
+
address@hidden@am__append_61 = \
address@hidden@ linux/src/drivers/net/e2100.c \
address@hidden@ linux/src/drivers/net/8390.c
+
address@hidden@am__append_62 = \
address@hidden@ linux/src/drivers/net/eepro.c
+
address@hidden@am__append_63 = \
address@hidden@ linux/src/drivers/net/eepro100.c
+
address@hidden@am__append_64 = \
address@hidden@ linux/src/drivers/net/eexpress.c \
address@hidden@ linux/src/drivers/net/eth82586.h
+
address@hidden@am__append_65 = \
address@hidden@ linux/src/drivers/net/epic100.c
+
address@hidden@am__append_66 = \
address@hidden@ linux/src/drivers/net/eth16i.c
+
address@hidden@am__append_67 = \
address@hidden@ linux/src/drivers/net/ewrk3.c \
address@hidden@ linux/src/drivers/net/ewrk3.h
+
address@hidden@am__append_68 = \
address@hidden@ linux/src/drivers/net/fmv18x.c
+
address@hidden@am__append_69 = \
address@hidden@ linux/src/drivers/net/hamachi.c
+
address@hidden@am__append_70 = \
address@hidden@ linux/src/drivers/net/hp-plus.c \
address@hidden@ linux/src/drivers/net/8390.c
+
address@hidden@am__append_71 = \
address@hidden@ linux/src/drivers/net/hp.c \
address@hidden@ linux/src/drivers/net/8390.c
+
address@hidden@am__append_72 = \
address@hidden@ linux/src/drivers/net/hp100.c \
address@hidden@ linux/src/drivers/net/hp100.h
+
address@hidden@am__append_73 = \
address@hidden@ linux/src/drivers/net/intel-gige.c
+
address@hidden@am__append_74 = \
address@hidden@ linux/src/drivers/net/lance.c
+
address@hidden@am__append_75 = \
address@hidden@ linux/src/drivers/net/myson803.c
+
address@hidden@am__append_76 = \
address@hidden@ linux/src/drivers/net/natsemi.c
+
address@hidden@am__append_77 = \
address@hidden@ linux/src/drivers/net/ne.c \
address@hidden@ linux/src/drivers/net/8390.c
+
address@hidden@am__append_78 = \
address@hidden@ linux/src/drivers/net/ne2k-pci.c \
address@hidden@ linux/src/drivers/net/8390.c
+
address@hidden@am__append_79 = \
address@hidden@ linux/src/drivers/net/ni52.c \
address@hidden@ linux/src/drivers/net/ni52.h
+
address@hidden@am__append_80 = \
address@hidden@ linux/src/drivers/net/ni65.c \
address@hidden@ linux/src/drivers/net/ni65.h
+
address@hidden@am__append_81 = \
address@hidden@ linux/src/drivers/net/ns820.c
+
address@hidden@am__append_82 = \
address@hidden@ linux/src/drivers/net/pcnet32.c
+
address@hidden@am__append_83 = \
address@hidden@ linux/src/drivers/net/rtl8139.c
+
address@hidden@am__append_84 = \
address@hidden@ linux/src/drivers/net/seeq8005.c \
address@hidden@ linux/src/drivers/net/seeq8005.h
+
address@hidden@am__append_85 = \
address@hidden@ linux/src/drivers/net/sis900.c \
address@hidden@ linux/src/drivers/net/sis900.h
+
address@hidden@am__append_86 = \
address@hidden@ linux/src/drivers/net/sk_g16.c \
address@hidden@ linux/src/drivers/net/sk_g16.h
+
address@hidden@am__append_87 = \
address@hidden@ linux/src/drivers/net/smc-ultra.c \
address@hidden@ linux/src/drivers/net/8390.c
+
address@hidden@am__append_88 = \
address@hidden@ linux/src/drivers/net/smc-ultra32.c \
address@hidden@ linux/src/drivers/net/8390.c
+
address@hidden@am__append_89 = \
address@hidden@ linux/src/drivers/net/starfire.c
+
address@hidden@am__append_90 = \
address@hidden@ linux/src/drivers/net/sundance.c
+
address@hidden@am__append_91 = \
address@hidden@ linux/src/drivers/net/tlan.c \
address@hidden@ linux/src/drivers/net/tlan.h
+
address@hidden@am__append_92 = \
address@hidden@ linux/src/drivers/net/tulip.c
+
address@hidden@am__append_93 = \
address@hidden@ linux/src/drivers/net/via-rhine.c
+
address@hidden@am__append_94 = \
address@hidden@ linux/src/drivers/net/i82586.h \
address@hidden@ linux/src/drivers/net/wavelan.c \
address@hidden@ linux/src/drivers/net/wavelan.h \
address@hidden@ linux/dev/drivers/net/wavelan.p.h
+
address@hidden@am__append_95 = \
address@hidden@ linux/src/drivers/net/wd.c
+
address@hidden@am__append_96 = \
address@hidden@ linux/src/drivers/net/winbond-840.c \
address@hidden@ linux/src/drivers/net/8390.c
+
address@hidden@am__append_97 = \
address@hidden@ linux/src/drivers/net/yellowfin.c
+
address@hidden@am__append_98 = \
address@hidden@ linux/src/drivers/net/znet.c
+
address@hidden@am__append_99 = \
address@hidden@ liblinux_pcmcia_cs_modules.a \
address@hidden@ liblinux_pcmcia_cs_clients.a \
address@hidden@ liblinux_pcmcia_cs_wireless.a
address@hidden@am__append_100 = \
address@hidden@ liblinux_pcmcia_cs_modules.a \
address@hidden@ liblinux_pcmcia_cs_clients.a \
address@hidden@ liblinux_pcmcia_cs_wireless.a
address@hidden@am__append_101 = \
address@hidden@ linux/pcmcia-cs/modules/cirrus.h \
address@hidden@ linux/pcmcia-cs/modules/ene.h \
address@hidden@ linux/pcmcia-cs/modules/i82365.c \
address@hidden@ linux/pcmcia-cs/modules/i82365.h \
address@hidden@ linux/pcmcia-cs/modules/o2micro.h \
address@hidden@ linux/pcmcia-cs/modules/ricoh.h \
address@hidden@ linux/pcmcia-cs/modules/smc34c90.h \
address@hidden@ linux/pcmcia-cs/modules/ti113x.h \
address@hidden@ linux/pcmcia-cs/modules/topic.h \
address@hidden@ linux/pcmcia-cs/modules/vg468.h \
address@hidden@ linux/pcmcia-cs/modules/yenta.h
+
address@hidden@am__append_102 = \
address@hidden@ linux/pcmcia-cs/clients/3c574_cs.c
+
address@hidden@am__append_103 = \
address@hidden@ linux/pcmcia-cs/clients/3c589_cs.c
+
address@hidden@am__append_104 = \
address@hidden@ linux/pcmcia-cs/clients/ax8390.h \
address@hidden@ linux/pcmcia-cs/clients/axnet_cs.c
+
address@hidden@am__append_105 = \
address@hidden@ linux/pcmcia-cs/clients/fmvj18x_cs.c
+
address@hidden@am__append_106 = \
address@hidden@ linux/pcmcia-cs/clients/nmclan_cs.c
+
address@hidden@am__append_107 = \
address@hidden@ linux/pcmcia-cs/clients/pcnet_cs.c \
address@hidden@ linux/src/drivers/net/8390.c
+
address@hidden@am__append_108 = \
address@hidden@ linux/pcmcia-cs/clients/ositech.h \
address@hidden@ linux/pcmcia-cs/clients/smc91c92_cs.c
+
address@hidden@am__append_109 = \
address@hidden@ linux/pcmcia-cs/clients/xirc2ps_cs.c
+
address@hidden@am__append_110 = \
address@hidden@ linux/pcmcia-cs/glue/wireless_glue.h \
address@hidden@ linux/pcmcia-cs/wireless/hermes.c \
address@hidden@ linux/pcmcia-cs/wireless/hermes.h \
address@hidden@ linux/pcmcia-cs/wireless/hermes_rid.h \
address@hidden@ linux/pcmcia-cs/wireless/ieee802_11.h \
address@hidden@ linux/pcmcia-cs/wireless/orinoco.c \
address@hidden@ linux/pcmcia-cs/wireless/orinoco.h \
address@hidden@ linux/pcmcia-cs/wireless/orinoco_cs.c
+
address@hidden@am__append_111 = \
address@hidden@ i386/linux/dev/include/linux/autoconf.h \
address@hidden@ linux/src/arch/i386/lib/semaphore.S
+
address@hidden@am__append_112 = \
address@hidden@ xen/public/arch-x86_32.h \
address@hidden@ xen/public/arch-x86_64.h \
address@hidden@ xen/public/arch-x86/xen.h \
address@hidden@ xen/public/arch-x86/xen-mca.h \
address@hidden@ xen/public/arch-x86/xen-x86_32.h \
address@hidden@ xen/public/arch-x86/xen-x86_64.h \
address@hidden@ xen/public/callback.h \
address@hidden@ xen/public/COPYING \
address@hidden@ xen/public/dom0_ops.h \
address@hidden@ xen/public/domctl.h \
address@hidden@ xen/public/elfnote.h \
address@hidden@ xen/public/elfstructs.h \
address@hidden@ xen/public/event_channel.h \
address@hidden@ xen/public/features.h \
address@hidden@ xen/public/grant_table.h \
address@hidden@ xen/public/io/blkif.h \
address@hidden@ xen/public/io/console.h \
address@hidden@ xen/public/io/fbif.h \
address@hidden@ xen/public/io/fsif.h \
address@hidden@ xen/public/io/kbdif.h \
address@hidden@ xen/public/io/netif.h \
address@hidden@ xen/public/io/pciif.h \
address@hidden@ xen/public/io/protocols.h \
address@hidden@ xen/public/io/ring.h \
address@hidden@ xen/public/io/tpmif.h \
address@hidden@ xen/public/io/xenbus.h \
address@hidden@ xen/public/io/xs_wire.h \
address@hidden@ xen/public/kexec.h \
address@hidden@ xen/public/libelf.h \
address@hidden@ xen/public/memory.h \
address@hidden@ xen/public/nmi.h \
address@hidden@ xen/public/physdev.h \
address@hidden@ xen/public/platform.h \
address@hidden@ xen/public/sched.h \
address@hidden@ xen/public/sysctl.h \
address@hidden@ xen/public/trace.h \
address@hidden@ xen/public/vcpu.h \
address@hidden@ xen/public/version.h \
address@hidden@ xen/public/xencomm.h \
address@hidden@ xen/public/xen-compat.h \
address@hidden@ xen/public/xen.h \
address@hidden@ xen/public/xenoprof.h \
address@hidden@ xen/block.c \
address@hidden@ xen/block.h \
address@hidden@ xen/console.c \
address@hidden@ xen/console.h \
address@hidden@ xen/evt.c \
address@hidden@ xen/evt.h \
address@hidden@ xen/grant.c \
address@hidden@ xen/grant.h \
address@hidden@ xen/net.c \
address@hidden@ xen/net.h \
address@hidden@ xen/ring.c \
address@hidden@ xen/ring.h \
address@hidden@ xen/store.c \
address@hidden@ xen/store.h \
address@hidden@ xen/time.c \
address@hidden@ xen/time.h \
address@hidden@ xen/xen.c \
address@hidden@ xen/xen.h
+
address@hidden@am__append_113 = \
address@hidden@ i386/i386at/autoconf.c \
address@hidden@ i386/i386at/autoconf.h \
address@hidden@ i386/i386at/conf.c \
address@hidden@ i386/i386at/cons_conf.c \
address@hidden@ i386/i386at/idt.h \
address@hidden@ i386/i386at/model_dep.c \
address@hidden@ i386/include/mach/sa/stdarg.h
+
address@hidden@@address@hidden = \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/boothdr.S \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/com.c \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/com.h \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/comreg.h \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/cram.h \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/disk.h \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/i8250.h \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/immc.c \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/int_init.c \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/int_init.h \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/interrupt.S \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/kd.c \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/kd.h \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/kd_event.c \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/kd_event.h \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/kd_queue.c \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/kd_queue.h \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/kd_mouse.c \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/kd_mouse.h \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/kdasm.S \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/kdsoft.h \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/mem.c \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/pic_isa.c \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/rtc.c \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/rtc.h
+
+
+#
+# `lpr' device support.
+#
address@hidden@@address@hidden = \
address@hidden@@enable_lpr_TRUE@ i386/i386at/lpr.c \
address@hidden@@enable_lpr_TRUE@ i386/i386at/lprreg.h
+
+
+#
+# Further source files for any i386 kernel.
+#
address@hidden@am__append_116 = \
address@hidden@ i386/i386/ast.h \
address@hidden@ i386/i386/ast_check.c \
address@hidden@ i386/i386/ast_types.h \
address@hidden@ i386/i386/cpu_number.h \
address@hidden@ i386/i386/cswitch.S \
address@hidden@ i386/i386/db_disasm.c \
address@hidden@ i386/i386/db_interface.c \
address@hidden@ i386/i386/db_interface.h \
address@hidden@ i386/i386/db_machdep.h \
address@hidden@ i386/i386/db_trace.c \
address@hidden@ i386/i386/debug.h \
address@hidden@ i386/i386/debug_i386.c \
address@hidden@ i386/i386/debug_trace.S \
address@hidden@ i386/i386/eflags.h \
address@hidden@ i386/i386/fpu.c \
address@hidden@ i386/i386/fpu.h \
address@hidden@ i386/i386/gdt.c \
address@hidden@ i386/i386/gdt.h \
address@hidden@ i386/i386/idt-gen.h \
address@hidden@ i386/i386/idt.c \
address@hidden@ i386/i386/idt_inittab.S \
address@hidden@ i386/i386/io_perm.c \
address@hidden@ i386/i386/io_perm.h \
address@hidden@ i386/i386/ipl.h \
address@hidden@ i386/i386/ktss.c \
address@hidden@ i386/i386/ktss.h \
address@hidden@ i386/i386/kttd_interface.c \
address@hidden@ i386/i386/kttd_machdep.h \
address@hidden@ i386/i386/ldt.c \
address@hidden@ i386/i386/ldt.h \
address@hidden@ i386/i386/lock.h \
address@hidden@ i386/i386/locore.S \
address@hidden@ i386/i386/locore.h \
address@hidden@ i386/i386/loose_ends.c \
address@hidden@ i386/i386/loose_ends.h \
address@hidden@ i386/i386/mach_param.h \
address@hidden@ i386/i386/machine_routines.h \
address@hidden@ i386/i386/machine_task.c \
address@hidden@ i386/i386/machspl.h \
address@hidden@ i386/i386/model_dep.h \
address@hidden@ i386/i386/mp_desc.c \
address@hidden@ i386/i386/mp_desc.h \
address@hidden@ i386/i386/pcb.c \
address@hidden@ i386/i386/pcb.h \
address@hidden@ i386/i386/phys.c \
address@hidden@ i386/i386/pio.h \
address@hidden@ i386/i386/pmap.h \
address@hidden@ i386/i386/proc_reg.h \
address@hidden@ i386/i386/sched_param.h \
address@hidden@ i386/i386/seg.c \
address@hidden@ i386/i386/seg.h \
address@hidden@ i386/i386/setjmp.h \
address@hidden@ i386/i386/spl.S \
address@hidden@ i386/i386/spl.h \
address@hidden@ i386/i386/task.h \
address@hidden@ i386/i386/thread.h \
address@hidden@ i386/i386/time_stamp.h \
address@hidden@ i386/i386/trap.c \
address@hidden@ i386/i386/trap.h \
address@hidden@ i386/i386/tss.h \
address@hidden@ i386/i386/user_ldt.c \
address@hidden@ i386/i386/user_ldt.h \
address@hidden@ i386/i386/vm_param.h \
address@hidden@ i386/i386/vm_tuning.h \
address@hidden@ i386/i386/xpr.h \
address@hidden@ i386/intel/pmap.c \
address@hidden@ i386/intel/pmap.h \
address@hidden@ i386/intel/read_fault.c \
address@hidden@ i386/intel/read_fault.h
+
+# i386/i386/mach_i386.server.defs
+
+#
+# Architecture specialities.
+#
+
+#
+# Building a distribution.
+#
+
+# Instead of listing each file individually...
address@hidden@am__append_117 = i386/i386/mach_i386.srv \
address@hidden@ i386/i386/i386asm.sym i386/ldscript \
address@hidden@ i386/README-Drivers i386/include
address@hidden@@address@hidden = \
address@hidden@@PLATFORM_at_TRUE@ i386/i386/hardclock.c \
address@hidden@@PLATFORM_at_TRUE@ i386/i386/io_map.c \
address@hidden@@PLATFORM_at_TRUE@ i386/i386/pic.c \
address@hidden@@PLATFORM_at_TRUE@ i386/i386/pic.h \
address@hidden@@PLATFORM_at_TRUE@ i386/i386/pit.c \
address@hidden@@PLATFORM_at_TRUE@ i386/i386/pit.h
+
+
+#
+# KDB support.
+#
address@hidden@@address@hidden = \
address@hidden@@enable_kdb_TRUE@ i386/i386/_setjmp.S
+
+
+#
+# Files from the generic sources that we want.
+#
address@hidden@am__append_120 = \
address@hidden@ chips/busses.c \
address@hidden@ chips/busses.h \
address@hidden@ device/cirbuf.c
+
+
+#
+# Automatically generated source files.
+#
+# See Makerules.mig.am.
+#
address@hidden@am__append_121 = \
address@hidden@ i386/i386/mach_i386.server.defs.c
+
address@hidden@am__append_122 = i386/i386/mach_i386.server.h \
address@hidden@ i386/i386/mach_i386.server.c \
address@hidden@ i386/i386/mach_i386.server.msgids \
address@hidden@ i386/i386/i386asm.h
address@hidden@@address@hidden = \
address@hidden@@PLATFORM_at_TRUE@ --defsym _START=0xC0100000 \
address@hidden@@PLATFORM_at_TRUE@ --defsym _START_MAP=0x100000 \
address@hidden@@PLATFORM_at_TRUE@ -T '$(srcdir)'/i386/ldscript
+
address@hidden@am__append_124 = \
address@hidden@ -mno-3dnow \
address@hidden@ -mno-mmx \
address@hidden@ -mno-sse \
address@hidden@ -mno-sse2
+
+
+#
+# Platform specific parts.
+#
address@hidden@@address@hidden = i386/xen/xen.c \
address@hidden@@PLATFORM_xen_TRUE@ i386/xen/xen_locore.S \
address@hidden@@PLATFORM_xen_TRUE@ i386/xen/xen_boothdr.S \
address@hidden@@PLATFORM_xen_TRUE@ i386/i386/xen.h
address@hidden@@address@hidden = \
address@hidden@@PLATFORM_xen_TRUE@ --defsym _START=0xC0000000 \
address@hidden@@PLATFORM_xen_TRUE@ --defsym _START_MAP=0xC0000000 \
address@hidden@@PLATFORM_xen_TRUE@ -T '$(srcdir)'/i386/ldscript
+
+exec_boot_PROGRAMS = gnumach$(EXEEXT)
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/version.m4 \
+ $(top_srcdir)/tests/configfrag.ac \
+ $(top_srcdir)/xen/configfrag.ac \
+ $(top_srcdir)/i386/configfrag.ac $(top_srcdir)/configfrag.ac \
+ $(top_srcdir)/linux/configfrag.ac $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = tests/test-mbchk version.c machine mach/machine \
+ linux/src/include/asm linux/dev/include/asm
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+AM_V_AR = $(address@hidden@)
+am__v_AR_ = $(address@hidden@)
+am__v_AR_0 = @echo " AR " $@;
+am__v_AR_1 =
+lib_dep_tr_for_defs_a_AR = $(AR) $(ARFLAGS)
+lib_dep_tr_for_defs_a_LIBADD =
+am__dirstamp = $(am__leading_dot)dirstamp
address@hidden@am__objects_1 =
i386/i386/lib_dep_tr_for_defs_a-mach_i386.server.defs.$(OBJEXT)
+nodist_lib_dep_tr_for_defs_a_OBJECTS =
vm/lib_dep_tr_for_defs_a-memory_object_user.user.defs.$(OBJEXT) \
+ vm/lib_dep_tr_for_defs_a-memory_object_default.user.defs.$(OBJEXT) \
+ device/lib_dep_tr_for_defs_a-device_reply.user.defs.$(OBJEXT) \
+ device/lib_dep_tr_for_defs_a-memory_object_reply.user.defs.$(OBJEXT) \
+ device/lib_dep_tr_for_defs_a-device.server.defs.$(OBJEXT) \
+ device/lib_dep_tr_for_defs_a-device_pager.server.defs.$(OBJEXT) \
+ ipc/lib_dep_tr_for_defs_a-mach_port.server.defs.$(OBJEXT) \
+ kern/lib_dep_tr_for_defs_a-mach.server.defs.$(OBJEXT) \
+ kern/lib_dep_tr_for_defs_a-mach4.server.defs.$(OBJEXT) \
+ kern/lib_dep_tr_for_defs_a-gnumach.server.defs.$(OBJEXT) \
+ kern/lib_dep_tr_for_defs_a-mach_debug.server.defs.$(OBJEXT) \
+ kern/lib_dep_tr_for_defs_a-mach_host.server.defs.$(OBJEXT) \
+ $(am__objects_1)
+lib_dep_tr_for_defs_a_OBJECTS = \
+ $(nodist_lib_dep_tr_for_defs_a_OBJECTS)
+libkernel_a_AR = $(AR) $(ARFLAGS)
+libkernel_a_LIBADD =
+am__libkernel_a_SOURCES_DIST = ddb/db_access.c ddb/db_access.h \
+ ddb/db_aout.c ddb/db_break.c ddb/db_break.h ddb/db_command.c \
+ ddb/db_command.h ddb/db_cond.c ddb/db_cond.h ddb/db_examine.c \
+ ddb/db_examine.h ddb/db_expr.c ddb/db_expr.h \
+ ddb/db_ext_symtab.c ddb/db_input.c ddb/db_input.h ddb/db_lex.c \
+ ddb/db_lex.h ddb/db_macro.c ddb/db_macro.h ddb/db_mp.c \
+ ddb/db_output.c ddb/db_output.h ddb/db_print.c ddb/db_print.h \
+ ddb/db_run.c ddb/db_run.h ddb/db_sym.c ddb/db_sym.h \
+ ddb/db_task_thread.c ddb/db_task_thread.h ddb/db_trap.c \
+ ddb/db_trap.h ddb/db_variables.c ddb/db_variables.h \
+ ddb/db_watch.c ddb/db_watch.h ddb/db_write_cmd.c ddb/nlist.h \
+ ddb/stab.h ddb/tr.h ipc/ipc_entry.c ipc/ipc_entry.h \
+ ipc/ipc_hash.c ipc/ipc_hash.h ipc/ipc_init.c ipc/ipc_init.h \
+ ipc/ipc_kmsg.c ipc/ipc_kmsg.h ipc/ipc_kmsg_queue.h \
+ ipc/ipc_machdep.h ipc/ipc_marequest.c ipc/ipc_marequest.h \
+ ipc/ipc_mqueue.c ipc/ipc_mqueue.h ipc/ipc_notify.c \
+ ipc/ipc_notify.h ipc/ipc_object.c ipc/ipc_object.h \
+ ipc/ipc_port.c ipc/ipc_port.h ipc/ipc_pset.c ipc/ipc_pset.h \
+ ipc/ipc_right.c ipc/ipc_right.h ipc/ipc_space.c \
+ ipc/ipc_space.h ipc/ipc_splay.c ipc/ipc_splay.h \
+ ipc/ipc_table.c ipc/ipc_table.h ipc/ipc_target.c \
+ ipc/ipc_target.h ipc/ipc_thread.c ipc/ipc_thread.h \
+ ipc/ipc_types.h ipc/mach_msg.c ipc/mach_msg.h ipc/mach_port.c \
+ ipc/mach_port.h ipc/mach_rpc.c ipc/mach_debug.c ipc/port.h \
+ kern/act.c kern/act.h kern/assert.h kern/ast.c kern/ast.h \
+ kern/boot_script.h kern/bootstrap.c kern/counters.c \
+ kern/counters.h kern/cpu_number.h kern/debug.c kern/debug.h \
+ kern/eventcount.c kern/eventcount.h kern/exception.c \
+ kern/host.c kern/host.h kern/ipc_host.c kern/ipc_host.h \
+ kern/ipc_kobject.c kern/ipc_kobject.h kern/ipc_mig.c \
+ kern/ipc_mig.h kern/ipc_sched.c kern/ipc_sched.h kern/ipc_tt.c \
+ kern/ipc_tt.h kern/kalloc.h kern/kern_types.h kern/list.h \
+ kern/lock.c kern/lock.h kern/lock_mon.c kern/mach_clock.c \
+ kern/mach_clock.h kern/mach_factor.c kern/mach_factor.h \
+ kern/machine.c kern/machine.h kern/macro_help.h \
+ kern/pc_sample.c kern/pc_sample.h kern/printf.c kern/printf.h \
+ kern/priority.c kern/processor.c kern/processor.h \
+ kern/profile.c kern/queue.c kern/queue.h kern/rbtree.c \
+ kern/rbtree.h kern/rbtree_i.h kern/refcount.h kern/slab.c \
+ kern/slab.h kern/sched.h kern/sched_prim.c kern/sched_prim.h \
+ kern/shuttle.h kern/startup.c kern/strings.c \
+ kern/syscall_emulation.c kern/syscall_emulation.h \
+ kern/syscall_subr.c kern/syscall_subr.h kern/syscall_sw.c \
+ kern/syscall_sw.h kern/task.c kern/task.h kern/thread.c \
+ kern/thread.h kern/thread_swap.c kern/thread_swap.h \
+ kern/time_stamp.c kern/time_stamp.h kern/timer.c kern/timer.h \
+ kern/xpr.c kern/xpr.h kern/elf-load.c kern/boot_script.c \
+ util/putchar.c util/putchar.h util/puts.c util/atoi.c \
+ util/atoi.h vm/memory_object_proxy.c vm/memory_object_proxy.h \
+ vm/memory_object.c vm/memory_object.h vm/pmap.h vm/vm_debug.c \
+ vm/vm_external.c vm/vm_external.h vm/vm_fault.c vm/vm_fault.h \
+ vm/vm_init.c vm/vm_kern.c vm/vm_kern.h vm/vm_map.c vm/vm_map.h \
+ vm/vm_object.c vm/vm_object.h vm/vm_page.h vm/vm_pageout.c \
+ vm/vm_pageout.h vm/vm_resident.c vm/vm_resident.h \
+ vm/vm_types.h vm/vm_user.c vm/vm_user.h device/blkio.c \
+ device/buf.h device/chario.c device/cirbuf.h device/conf.h \
+ device/cons.c device/cons.h device/device_emul.h \
+ device/dev_hdr.h device/dev_lookup.c device/dev_master.h \
+ device/dev_name.c device/dev_pager.c device/device_init.c \
+ device/device_port.h device/device_types_kernel.h \
+ device/ds_routines.c device/ds_routines.h device/if_ether.h \
+ device/if_hdr.h device/io_req.h device/net_io.c \
+ device/net_io.h device/param.h device/subrs.c device/subrs.h \
+ device/tty.h device/kmsg.c device/kmsg.h \
+ xen/public/arch-x86_32.h xen/public/arch-x86_64.h \
+ xen/public/arch-x86/xen.h xen/public/arch-x86/xen-mca.h \
+ xen/public/arch-x86/xen-x86_32.h \
+ xen/public/arch-x86/xen-x86_64.h xen/public/callback.h \
+ xen/public/COPYING xen/public/dom0_ops.h xen/public/domctl.h \
+ xen/public/elfnote.h xen/public/elfstructs.h \
+ xen/public/event_channel.h xen/public/features.h \
+ xen/public/grant_table.h xen/public/io/blkif.h \
+ xen/public/io/console.h xen/public/io/fbif.h \
+ xen/public/io/fsif.h xen/public/io/kbdif.h \
+ xen/public/io/netif.h xen/public/io/pciif.h \
+ xen/public/io/protocols.h xen/public/io/ring.h \
+ xen/public/io/tpmif.h xen/public/io/xenbus.h \
+ xen/public/io/xs_wire.h xen/public/kexec.h xen/public/libelf.h \
+ xen/public/memory.h xen/public/nmi.h xen/public/physdev.h \
+ xen/public/platform.h xen/public/sched.h xen/public/sysctl.h \
+ xen/public/trace.h xen/public/vcpu.h xen/public/version.h \
+ xen/public/xencomm.h xen/public/xen-compat.h xen/public/xen.h \
+ xen/public/xenoprof.h xen/block.c xen/block.h xen/console.c \
+ xen/console.h xen/evt.c xen/evt.h xen/grant.c xen/grant.h \
+ xen/net.c xen/net.h xen/ring.c xen/ring.h xen/store.c \
+ xen/store.h xen/time.c xen/time.h xen/xen.c xen/xen.h \
+ i386/i386at/autoconf.c i386/i386at/autoconf.h \
+ i386/i386at/conf.c i386/i386at/cons_conf.c i386/i386at/idt.h \
+ i386/i386at/model_dep.c i386/include/mach/sa/stdarg.h \
+ i386/i386at/boothdr.S i386/i386at/com.c i386/i386at/com.h \
+ i386/i386at/comreg.h i386/i386at/cram.h i386/i386at/disk.h \
+ i386/i386at/i8250.h i386/i386at/immc.c i386/i386at/int_init.c \
+ i386/i386at/int_init.h i386/i386at/interrupt.S \
+ i386/i386at/kd.c i386/i386at/kd.h i386/i386at/kd_event.c \
+ i386/i386at/kd_event.h i386/i386at/kd_queue.c \
+ i386/i386at/kd_queue.h i386/i386at/kd_mouse.c \
+ i386/i386at/kd_mouse.h i386/i386at/kdasm.S \
+ i386/i386at/kdsoft.h i386/i386at/mem.c i386/i386at/pic_isa.c \
+ i386/i386at/rtc.c i386/i386at/rtc.h i386/i386at/lpr.c \
+ i386/i386at/lprreg.h i386/i386/ast.h i386/i386/ast_check.c \
+ i386/i386/ast_types.h i386/i386/cpu_number.h \
+ i386/i386/cswitch.S i386/i386/db_disasm.c \
+ i386/i386/db_interface.c i386/i386/db_interface.h \
+ i386/i386/db_machdep.h i386/i386/db_trace.c i386/i386/debug.h \
+ i386/i386/debug_i386.c i386/i386/debug_trace.S \
+ i386/i386/eflags.h i386/i386/fpu.c i386/i386/fpu.h \
+ i386/i386/gdt.c i386/i386/gdt.h i386/i386/idt-gen.h \
+ i386/i386/idt.c i386/i386/idt_inittab.S i386/i386/io_perm.c \
+ i386/i386/io_perm.h i386/i386/ipl.h i386/i386/ktss.c \
+ i386/i386/ktss.h i386/i386/kttd_interface.c \
+ i386/i386/kttd_machdep.h i386/i386/ldt.c i386/i386/ldt.h \
+ i386/i386/lock.h i386/i386/locore.S i386/i386/locore.h \
+ i386/i386/loose_ends.c i386/i386/loose_ends.h \
+ i386/i386/mach_param.h i386/i386/machine_routines.h \
+ i386/i386/machine_task.c i386/i386/machspl.h \
+ i386/i386/model_dep.h i386/i386/mp_desc.c i386/i386/mp_desc.h \
+ i386/i386/pcb.c i386/i386/pcb.h i386/i386/phys.c \
+ i386/i386/pio.h i386/i386/pmap.h i386/i386/proc_reg.h \
+ i386/i386/sched_param.h i386/i386/seg.c i386/i386/seg.h \
+ i386/i386/setjmp.h i386/i386/spl.S i386/i386/spl.h \
+ i386/i386/task.h i386/i386/thread.h i386/i386/time_stamp.h \
+ i386/i386/trap.c i386/i386/trap.h i386/i386/tss.h \
+ i386/i386/user_ldt.c i386/i386/user_ldt.h i386/i386/vm_param.h \
+ i386/i386/vm_tuning.h i386/i386/xpr.h i386/intel/pmap.c \
+ i386/intel/pmap.h i386/intel/read_fault.c \
+ i386/intel/read_fault.h i386/i386/hardclock.c \
+ i386/i386/io_map.c i386/i386/pic.c i386/i386/pic.h \
+ i386/i386/pit.c i386/i386/pit.h i386/i386/_setjmp.S \
+ chips/busses.c chips/busses.h device/cirbuf.c i386/xen/xen.c \
+ i386/xen/xen_locore.S i386/xen/xen_boothdr.S i386/i386/xen.h
address@hidden@am__objects_2 = ddb/db_access.$(OBJEXT) \
address@hidden@ ddb/db_aout.$(OBJEXT) ddb/db_break.$(OBJEXT) \
address@hidden@ ddb/db_command.$(OBJEXT) \
address@hidden@ ddb/db_cond.$(OBJEXT) \
address@hidden@ ddb/db_examine.$(OBJEXT) \
address@hidden@ ddb/db_expr.$(OBJEXT) \
address@hidden@ ddb/db_ext_symtab.$(OBJEXT) \
address@hidden@ ddb/db_input.$(OBJEXT) ddb/db_lex.$(OBJEXT) \
address@hidden@ ddb/db_macro.$(OBJEXT) ddb/db_mp.$(OBJEXT) \
address@hidden@ ddb/db_output.$(OBJEXT) \
address@hidden@ ddb/db_print.$(OBJEXT) ddb/db_run.$(OBJEXT) \
address@hidden@ ddb/db_sym.$(OBJEXT) \
address@hidden@ ddb/db_task_thread.$(OBJEXT) \
address@hidden@ ddb/db_trap.$(OBJEXT) \
address@hidden@ ddb/db_variables.$(OBJEXT) \
address@hidden@ ddb/db_watch.$(OBJEXT) \
address@hidden@ ddb/db_write_cmd.$(OBJEXT)
address@hidden@am__objects_3 = device/kmsg.$(OBJEXT)
address@hidden@am__objects_4 = xen/block.$(OBJEXT) \
address@hidden@ xen/console.$(OBJEXT) xen/evt.$(OBJEXT) \
address@hidden@ xen/grant.$(OBJEXT) xen/net.$(OBJEXT) \
address@hidden@ xen/ring.$(OBJEXT) xen/store.$(OBJEXT) \
address@hidden@ xen/time.$(OBJEXT) xen/xen.$(OBJEXT)
address@hidden@am__objects_5 = i386/i386at/autoconf.$(OBJEXT) \
address@hidden@ i386/i386at/conf.$(OBJEXT) \
address@hidden@ i386/i386at/cons_conf.$(OBJEXT) \
address@hidden@ i386/i386at/model_dep.$(OBJEXT)
address@hidden@@address@hidden = i386/i386at/boothdr.$(OBJEXT) \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/com.$(OBJEXT) \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/immc.$(OBJEXT) \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/int_init.$(OBJEXT) \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/interrupt.$(OBJEXT) \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/kd.$(OBJEXT) \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/kd_event.$(OBJEXT) \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/kd_queue.$(OBJEXT) \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/kd_mouse.$(OBJEXT) \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/kdasm.$(OBJEXT) \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/mem.$(OBJEXT) \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/pic_isa.$(OBJEXT) \
address@hidden@@PLATFORM_at_TRUE@ i386/i386at/rtc.$(OBJEXT)
address@hidden@@address@hidden = \
address@hidden@@enable_lpr_TRUE@ i386/i386at/lpr.$(OBJEXT)
address@hidden@am__objects_8 = i386/i386/ast_check.$(OBJEXT) \
address@hidden@ i386/i386/cswitch.$(OBJEXT) \
address@hidden@ i386/i386/db_disasm.$(OBJEXT) \
address@hidden@ i386/i386/db_interface.$(OBJEXT) \
address@hidden@ i386/i386/db_trace.$(OBJEXT) \
address@hidden@ i386/i386/debug_i386.$(OBJEXT) \
address@hidden@ i386/i386/debug_trace.$(OBJEXT) \
address@hidden@ i386/i386/fpu.$(OBJEXT) \
address@hidden@ i386/i386/gdt.$(OBJEXT) \
address@hidden@ i386/i386/idt.$(OBJEXT) \
address@hidden@ i386/i386/idt_inittab.$(OBJEXT) \
address@hidden@ i386/i386/io_perm.$(OBJEXT) \
address@hidden@ i386/i386/ktss.$(OBJEXT) \
address@hidden@ i386/i386/kttd_interface.$(OBJEXT) \
address@hidden@ i386/i386/ldt.$(OBJEXT) \
address@hidden@ i386/i386/locore.$(OBJEXT) \
address@hidden@ i386/i386/loose_ends.$(OBJEXT) \
address@hidden@ i386/i386/machine_task.$(OBJEXT) \
address@hidden@ i386/i386/mp_desc.$(OBJEXT) \
address@hidden@ i386/i386/pcb.$(OBJEXT) \
address@hidden@ i386/i386/phys.$(OBJEXT) \
address@hidden@ i386/i386/seg.$(OBJEXT) \
address@hidden@ i386/i386/spl.$(OBJEXT) \
address@hidden@ i386/i386/trap.$(OBJEXT) \
address@hidden@ i386/i386/user_ldt.$(OBJEXT) \
address@hidden@ i386/intel/pmap.$(OBJEXT) \
address@hidden@ i386/intel/read_fault.$(OBJEXT)
address@hidden@@address@hidden = i386/i386/hardclock.$(OBJEXT) \
address@hidden@@PLATFORM_at_TRUE@ i386/i386/io_map.$(OBJEXT) \
address@hidden@@PLATFORM_at_TRUE@ i386/i386/pic.$(OBJEXT) \
address@hidden@@PLATFORM_at_TRUE@ i386/i386/pit.$(OBJEXT)
address@hidden@@address@hidden = \
address@hidden@@enable_kdb_TRUE@ i386/i386/_setjmp.$(OBJEXT)
address@hidden@am__objects_11 = chips/busses.$(OBJEXT) \
address@hidden@ device/cirbuf.$(OBJEXT)
address@hidden@@address@hidden = \
address@hidden@@PLATFORM_xen_TRUE@ i386/xen/xen.$(OBJEXT) \
address@hidden@@PLATFORM_xen_TRUE@ i386/xen/xen_locore.$(OBJEXT) \
address@hidden@@PLATFORM_xen_TRUE@ i386/xen/xen_boothdr.$(OBJEXT)
+am_libkernel_a_OBJECTS = $(am__objects_2) ipc/ipc_entry.$(OBJEXT) \
+ ipc/ipc_hash.$(OBJEXT) ipc/ipc_init.$(OBJEXT) \
+ ipc/ipc_kmsg.$(OBJEXT) ipc/ipc_marequest.$(OBJEXT) \
+ ipc/ipc_mqueue.$(OBJEXT) ipc/ipc_notify.$(OBJEXT) \
+ ipc/ipc_object.$(OBJEXT) ipc/ipc_port.$(OBJEXT) \
+ ipc/ipc_pset.$(OBJEXT) ipc/ipc_right.$(OBJEXT) \
+ ipc/ipc_space.$(OBJEXT) ipc/ipc_splay.$(OBJEXT) \
+ ipc/ipc_table.$(OBJEXT) ipc/ipc_target.$(OBJEXT) \
+ ipc/ipc_thread.$(OBJEXT) ipc/mach_msg.$(OBJEXT) \
+ ipc/mach_port.$(OBJEXT) ipc/mach_rpc.$(OBJEXT) \
+ ipc/mach_debug.$(OBJEXT) kern/act.$(OBJEXT) kern/ast.$(OBJEXT) \
+ kern/bootstrap.$(OBJEXT) kern/counters.$(OBJEXT) \
+ kern/debug.$(OBJEXT) kern/eventcount.$(OBJEXT) \
+ kern/exception.$(OBJEXT) kern/host.$(OBJEXT) \
+ kern/ipc_host.$(OBJEXT) kern/ipc_kobject.$(OBJEXT) \
+ kern/ipc_mig.$(OBJEXT) kern/ipc_sched.$(OBJEXT) \
+ kern/ipc_tt.$(OBJEXT) kern/lock.$(OBJEXT) \
+ kern/lock_mon.$(OBJEXT) kern/mach_clock.$(OBJEXT) \
+ kern/mach_factor.$(OBJEXT) kern/machine.$(OBJEXT) \
+ kern/pc_sample.$(OBJEXT) kern/printf.$(OBJEXT) \
+ kern/priority.$(OBJEXT) kern/processor.$(OBJEXT) \
+ kern/profile.$(OBJEXT) kern/queue.$(OBJEXT) \
+ kern/rbtree.$(OBJEXT) kern/slab.$(OBJEXT) \
+ kern/sched_prim.$(OBJEXT) kern/startup.$(OBJEXT) \
+ kern/strings.$(OBJEXT) kern/syscall_emulation.$(OBJEXT) \
+ kern/syscall_subr.$(OBJEXT) kern/syscall_sw.$(OBJEXT) \
+ kern/task.$(OBJEXT) kern/thread.$(OBJEXT) \
+ kern/thread_swap.$(OBJEXT) kern/time_stamp.$(OBJEXT) \
+ kern/timer.$(OBJEXT) kern/xpr.$(OBJEXT) \
+ kern/elf-load.$(OBJEXT) kern/boot_script.$(OBJEXT) \
+ util/putchar.$(OBJEXT) util/puts.$(OBJEXT) util/atoi.$(OBJEXT) \
+ vm/memory_object_proxy.$(OBJEXT) vm/memory_object.$(OBJEXT) \
+ vm/vm_debug.$(OBJEXT) vm/vm_external.$(OBJEXT) \
+ vm/vm_fault.$(OBJEXT) vm/vm_init.$(OBJEXT) \
+ vm/vm_kern.$(OBJEXT) vm/vm_map.$(OBJEXT) \
+ vm/vm_object.$(OBJEXT) vm/vm_pageout.$(OBJEXT) \
+ vm/vm_resident.$(OBJEXT) vm/vm_user.$(OBJEXT) \
+ device/blkio.$(OBJEXT) device/chario.$(OBJEXT) \
+ device/cons.$(OBJEXT) device/dev_lookup.$(OBJEXT) \
+ device/dev_name.$(OBJEXT) device/dev_pager.$(OBJEXT) \
+ device/device_init.$(OBJEXT) device/ds_routines.$(OBJEXT) \
+ device/net_io.$(OBJEXT) device/subrs.$(OBJEXT) \
+ $(am__objects_3) $(am__objects_4) $(am__objects_5) \
+ $(am__objects_6) $(am__objects_7) $(am__objects_8) \
+ $(am__objects_9) $(am__objects_10) $(am__objects_11) \
+ $(am__objects_12)
address@hidden@am__objects_13 = i386/i386/mach_i386.server.$(OBJEXT)
+nodist_libkernel_a_OBJECTS = version.$(OBJEXT) \
+ vm/memory_object_user.user.$(OBJEXT) \
+ vm/memory_object_default.user.$(OBJEXT) \
+ device/device_reply.user.$(OBJEXT) \
+ device/memory_object_reply.user.$(OBJEXT) \
+ device/device.server.$(OBJEXT) \
+ device/device_pager.server.$(OBJEXT) \
+ ipc/mach_port.server.$(OBJEXT) kern/mach.server.$(OBJEXT) \
+ kern/mach4.server.$(OBJEXT) kern/gnumach.server.$(OBJEXT) \
+ kern/mach_debug.server.$(OBJEXT) \
+ kern/mach_host.server.$(OBJEXT) $(am__objects_13)
+libkernel_a_OBJECTS = $(am_libkernel_a_OBJECTS) \
+ $(nodist_libkernel_a_OBJECTS)
+liblinux_a_AR = $(AR) $(ARFLAGS)
+liblinux_a_LIBADD =
+am__liblinux_a_SOURCES_DIST = linux/dev/init/version.c \
+ linux/dev/kernel/softirq.c linux/src/arch/i386/lib/delay.c \
+ linux/dev/kernel/dma.c linux/dev/kernel/resource.c \
+ linux/dev/kernel/printk.c linux/src/arch/i386/kernel/bios32.c \
+ linux/dev/arch/i386/kernel/irq.c linux/src/lib/ctype.c \
+ linux/dev/lib/vsprintf.c linux/dev/init/main.c \
+ linux/dev/glue/misc.c linux/dev/kernel/sched.c \
+ linux/dev/glue/kmem.c linux/dev/glue/block.c \
+ linux/dev/glue/glue.h linux/dev/arch/i386/kernel/setup.c \
+ linux/src/drivers/pci/pci.c linux/dev/drivers/block/genhd.c \
+ linux/dev/drivers/block/floppy.c \
+ linux/src/drivers/block/cmd640.c \
+ linux/src/drivers/block/ide-cd.c linux/src/drivers/block/ide.c \
+ linux/src/drivers/block/ide.h linux/dev/drivers/block/ahci.c \
+ linux/dev/include/ahci.h linux/src/drivers/block/ide_modes.h \
+ linux/src/drivers/block/rz1000.c \
+ linux/src/drivers/block/triton.c \
+ linux/src/drivers/scsi/constants.c \
+ linux/src/drivers/scsi/constants.h \
+ linux/src/drivers/scsi/hosts.c linux/src/drivers/scsi/hosts.h \
+ linux/src/drivers/scsi/scsi.c linux/src/drivers/scsi/scsi.h \
+ linux/src/drivers/scsi/scsi_ioctl.c \
+ linux/src/drivers/scsi/scsi_proc.c \
+ linux/src/drivers/scsi/scsicam.c linux/src/drivers/scsi/sd.c \
+ linux/src/drivers/scsi/sd.h linux/src/drivers/scsi/sd_ioctl.c \
+ linux/src/drivers/scsi/sr.c linux/src/drivers/scsi/sr.h \
+ linux/src/drivers/scsi/sr_ioctl.c \
+ linux/src/drivers/scsi/53c7,8xx.h \
+ linux/src/drivers/scsi/53c78xx.c \
+ linux/src/drivers/scsi/53c8xx_d.h \
+ linux/src/drivers/scsi/53c8xx_u.h \
+ linux/src/drivers/scsi/AM53C974.c \
+ linux/src/drivers/scsi/AM53C974.h \
+ linux/src/drivers/scsi/BusLogic.c \
+ linux/src/drivers/scsi/BusLogic.h \
+ linux/src/drivers/scsi/NCR53c406a.c \
+ linux/src/drivers/scsi/NCR53c406a.h \
+ linux/src/drivers/scsi/advansys.c \
+ linux/src/drivers/scsi/advansys.h \
+ linux/src/drivers/scsi/aha152x.c \
+ linux/src/drivers/scsi/aha152x.h \
+ linux/src/drivers/scsi/aha1542.c \
+ linux/src/drivers/scsi/aha1542.h \
+ linux/src/drivers/scsi/aha1740.c \
+ linux/src/drivers/scsi/aha1740.h \
+ linux/src/drivers/scsi/aic7xxx.c \
+ linux/src/drivers/scsi/aic7xxx.h \
+ linux/src/drivers/scsi/aic7xxx/scsi_message.h \
+ linux/src/drivers/scsi/aic7xxx/sequencer.h \
+ linux/src/drivers/scsi/aic7xxx_reg.h \
+ linux/src/drivers/scsi/dtc.c linux/src/drivers/scsi/dtc.h \
+ linux/src/drivers/scsi/eata.c linux/src/drivers/scsi/eata.h \
+ linux/src/drivers/scsi/eata_generic.h \
+ linux/dev/drivers/scsi/eata_dma.c \
+ linux/src/drivers/scsi/eata_dma.h \
+ linux/src/drivers/scsi/eata_dma_proc.h \
+ linux/src/drivers/scsi/eata_pio.c \
+ linux/src/drivers/scsi/eata_pio.h \
+ linux/src/drivers/scsi/fdomain.c \
+ linux/src/drivers/scsi/fdomain.h \
+ linux/dev/drivers/scsi/g_NCR5380.c \
+ linux/src/drivers/scsi/g_NCR5380.h \
+ linux/src/drivers/scsi/gdth.c linux/src/drivers/scsi/gdth.h \
+ linux/src/drivers/scsi/gdth_ioctl.h \
+ linux/src/drivers/scsi/gdth_proc.h \
+ linux/src/drivers/scsi/in2000.c \
+ linux/src/drivers/scsi/in2000.h \
+ linux/src/drivers/scsi/ncr53c8xx.c \
+ linux/src/drivers/scsi/ncr53c8xx.h \
+ linux/src/drivers/scsi/pas16.c linux/src/drivers/scsi/pas16.h \
+ linux/src/drivers/scsi/ppa.c linux/src/drivers/scsi/ppa.h \
+ linux/src/drivers/scsi/qlogicfas.c \
+ linux/src/drivers/scsi/qlogicfas.h \
+ linux/src/drivers/scsi/qlogicisp.c \
+ linux/src/drivers/scsi/qlogicisp.h \
+ linux/src/drivers/scsi/seagate.c \
+ linux/src/drivers/scsi/seagate.h \
+ linux/src/drivers/scsi/sym53c8xx.c \
+ linux/src/drivers/scsi/sym53c8xx_comm.h \
+ linux/src/drivers/scsi/sym53c8xx.h \
+ linux/src/drivers/scsi/sym53c8xx_defs.h \
+ linux/src/drivers/scsi/t128.c linux/src/drivers/scsi/t128.h \
+ linux/src/drivers/scsi/dc390.h \
+ linux/src/drivers/scsi/tmscsim.c \
+ linux/src/drivers/scsi/tmscsim.h \
+ linux/src/drivers/scsi/u14-34f.c \
+ linux/src/drivers/scsi/u14-34f.h \
+ linux/src/drivers/scsi/ultrastor.c \
+ linux/src/drivers/scsi/ultrastor.h \
+ linux/src/drivers/scsi/wd7000.c \
+ linux/src/drivers/scsi/wd7000.h \
+ linux/dev/drivers/net/auto_irq.c linux/dev/glue/net.c \
+ linux/dev/drivers/net/Space.c linux/dev/net/core/dev.c \
+ linux/dev/drivers/net/net_init.c \
+ linux/src/drivers/net/pci-scan.c \
+ linux/src/drivers/net/pci-scan.h linux/src/drivers/net/3c501.c \
+ linux/src/drivers/net/3c503.c linux/src/drivers/net/3c503.h \
+ linux/src/drivers/net/8390.c linux/src/drivers/net/3c505.c \
+ linux/src/drivers/net/3c505.h linux/src/drivers/net/3c507.c \
+ linux/src/drivers/net/3c509.c linux/src/drivers/net/3c59x.c \
+ linux/src/drivers/net/3c515.c linux/src/drivers/net/ac3200.c \
+ linux/src/drivers/net/apricot.c linux/src/drivers/net/at1700.c \
+ linux/src/drivers/net/atp.c linux/src/drivers/net/atp.h \
+ linux/src/drivers/net/de4x5.c linux/src/drivers/net/de4x5.h \
+ linux/src/drivers/net/de600.c linux/src/drivers/net/de620.c \
+ linux/src/drivers/net/de620.h linux/src/drivers/net/depca.c \
+ linux/src/drivers/net/depca.h linux/src/drivers/net/e2100.c \
+ linux/src/drivers/net/eepro.c linux/src/drivers/net/eepro100.c \
+ linux/src/drivers/net/eexpress.c \
+ linux/src/drivers/net/eth82586.h \
+ linux/src/drivers/net/epic100.c linux/src/drivers/net/eth16i.c \
+ linux/src/drivers/net/ewrk3.c linux/src/drivers/net/ewrk3.h \
+ linux/src/drivers/net/fmv18x.c linux/src/drivers/net/hamachi.c \
+ linux/src/drivers/net/hp-plus.c linux/src/drivers/net/hp.c \
+ linux/src/drivers/net/hp100.c linux/src/drivers/net/hp100.h \
+ linux/src/drivers/net/intel-gige.c \
+ linux/src/drivers/net/lance.c linux/src/drivers/net/myson803.c \
+ linux/src/drivers/net/natsemi.c linux/src/drivers/net/ne.c \
+ linux/src/drivers/net/ne2k-pci.c linux/src/drivers/net/ni52.c \
+ linux/src/drivers/net/ni52.h linux/src/drivers/net/ni65.c \
+ linux/src/drivers/net/ni65.h linux/src/drivers/net/ns820.c \
+ linux/src/drivers/net/pcnet32.c \
+ linux/src/drivers/net/rtl8139.c \
+ linux/src/drivers/net/seeq8005.c \
+ linux/src/drivers/net/seeq8005.h \
+ linux/src/drivers/net/sis900.c linux/src/drivers/net/sis900.h \
+ linux/src/drivers/net/sk_g16.c linux/src/drivers/net/sk_g16.h \
+ linux/src/drivers/net/smc-ultra.c \
+ linux/src/drivers/net/smc-ultra32.c \
+ linux/src/drivers/net/starfire.c \
+ linux/src/drivers/net/sundance.c linux/src/drivers/net/tlan.c \
+ linux/src/drivers/net/tlan.h linux/src/drivers/net/tulip.c \
+ linux/src/drivers/net/via-rhine.c \
+ linux/src/drivers/net/i82586.h linux/src/drivers/net/wavelan.c \
+ linux/src/drivers/net/wavelan.h \
+ linux/dev/drivers/net/wavelan.p.h linux/src/drivers/net/wd.c \
+ linux/src/drivers/net/winbond-840.c \
+ linux/src/drivers/net/yellowfin.c linux/src/drivers/net/znet.c \
+ i386/linux/dev/include/linux/autoconf.h \
+ linux/src/arch/i386/lib/semaphore.S
address@hidden@am__objects_14 =
linux/dev/drivers/block/liblinux_a-floppy.$(OBJEXT)
address@hidden@am__objects_15 =
linux/src/drivers/block/liblinux_a-cmd640.$(OBJEXT) \
address@hidden@ linux/src/drivers/block/liblinux_a-ide-cd.$(OBJEXT) \
address@hidden@ linux/src/drivers/block/liblinux_a-ide.$(OBJEXT) \
address@hidden@ linux/dev/drivers/block/liblinux_a-ahci.$(OBJEXT) \
address@hidden@ linux/src/drivers/block/liblinux_a-rz1000.$(OBJEXT) \
address@hidden@ linux/src/drivers/block/liblinux_a-triton.$(OBJEXT)
address@hidden@am__objects_16 =
linux/src/drivers/scsi/liblinux_a-constants.$(OBJEXT) \
address@hidden@ linux/src/drivers/scsi/liblinux_a-hosts.$(OBJEXT) \
address@hidden@ linux/src/drivers/scsi/liblinux_a-scsi.$(OBJEXT) \
address@hidden@ linux/src/drivers/scsi/liblinux_a-scsi_ioctl.$(OBJEXT) \
address@hidden@ linux/src/drivers/scsi/liblinux_a-scsi_proc.$(OBJEXT) \
address@hidden@ linux/src/drivers/scsi/liblinux_a-scsicam.$(OBJEXT) \
address@hidden@ linux/src/drivers/scsi/liblinux_a-sd.$(OBJEXT) \
address@hidden@ linux/src/drivers/scsi/liblinux_a-sd_ioctl.$(OBJEXT) \
address@hidden@ linux/src/drivers/scsi/liblinux_a-sr.$(OBJEXT) \
address@hidden@ linux/src/drivers/scsi/liblinux_a-sr_ioctl.$(OBJEXT)
address@hidden@am__objects_17 =
linux/src/drivers/scsi/liblinux_a-53c78xx.$(OBJEXT)
address@hidden@am__objects_18 =
linux/src/drivers/scsi/liblinux_a-AM53C974.$(OBJEXT)
address@hidden@am__objects_19 =
linux/src/drivers/scsi/liblinux_a-BusLogic.$(OBJEXT)
address@hidden@am__objects_20 =
linux/src/drivers/scsi/liblinux_a-NCR53c406a.$(OBJEXT)
address@hidden@am__objects_21 =
linux/src/drivers/scsi/liblinux_a-advansys.$(OBJEXT)
address@hidden@am__objects_22 =
linux/src/drivers/scsi/liblinux_a-aha152x.$(OBJEXT)
address@hidden@am__objects_23 =
linux/src/drivers/scsi/liblinux_a-aha1542.$(OBJEXT)
address@hidden@am__objects_24 =
linux/src/drivers/scsi/liblinux_a-aha1740.$(OBJEXT)
address@hidden@am__objects_25 =
linux/src/drivers/scsi/liblinux_a-aic7xxx.$(OBJEXT)
address@hidden@am__objects_26 = linux/src/drivers/scsi/liblinux_a-dtc.$(OBJEXT)
address@hidden@am__objects_27 = linux/src/drivers/scsi/liblinux_a-eata.$(OBJEXT)
address@hidden@am__objects_28 =
linux/dev/drivers/scsi/liblinux_a-eata_dma.$(OBJEXT)
address@hidden@am__objects_29 =
linux/src/drivers/scsi/liblinux_a-eata_pio.$(OBJEXT)
address@hidden@am__objects_30 =
linux/src/drivers/scsi/liblinux_a-fdomain.$(OBJEXT)
address@hidden@am__objects_31 =
linux/dev/drivers/scsi/liblinux_a-g_NCR5380.$(OBJEXT)
address@hidden@am__objects_32 = linux/src/drivers/scsi/liblinux_a-gdth.$(OBJEXT)
address@hidden@am__objects_33 =
linux/src/drivers/scsi/liblinux_a-in2000.$(OBJEXT)
address@hidden@am__objects_34 =
linux/src/drivers/scsi/liblinux_a-ncr53c8xx.$(OBJEXT)
address@hidden@am__objects_35 =
linux/src/drivers/scsi/liblinux_a-pas16.$(OBJEXT)
address@hidden@am__objects_36 = linux/src/drivers/scsi/liblinux_a-ppa.$(OBJEXT)
address@hidden@am__objects_37 =
linux/src/drivers/scsi/liblinux_a-qlogicfas.$(OBJEXT)
address@hidden@am__objects_38 =
linux/src/drivers/scsi/liblinux_a-qlogicisp.$(OBJEXT)
address@hidden@am__objects_39 =
linux/src/drivers/scsi/liblinux_a-seagate.$(OBJEXT)
address@hidden@am__objects_40 =
linux/src/drivers/scsi/liblinux_a-sym53c8xx.$(OBJEXT)
address@hidden@am__objects_41 = linux/src/drivers/scsi/liblinux_a-t128.$(OBJEXT)
address@hidden@am__objects_42 =
linux/src/drivers/scsi/liblinux_a-tmscsim.$(OBJEXT)
address@hidden@am__objects_43 =
linux/src/drivers/scsi/liblinux_a-u14-34f.$(OBJEXT)
address@hidden@am__objects_44 =
linux/src/drivers/scsi/liblinux_a-ultrastor.$(OBJEXT)
address@hidden@am__objects_45 =
linux/src/drivers/scsi/liblinux_a-wd7000.$(OBJEXT)
address@hidden@am__objects_46 =
linux/dev/drivers/net/liblinux_a-auto_irq.$(OBJEXT) \
address@hidden@ linux/dev/glue/liblinux_a-net.$(OBJEXT) \
address@hidden@ linux/dev/drivers/net/liblinux_a-Space.$(OBJEXT) \
address@hidden@ linux/dev/net/core/liblinux_a-dev.$(OBJEXT) \
address@hidden@ linux/dev/drivers/net/liblinux_a-net_init.$(OBJEXT) \
address@hidden@ linux/src/drivers/net/liblinux_a-pci-scan.$(OBJEXT)
address@hidden@am__objects_47 = linux/src/drivers/net/liblinux_a-3c501.$(OBJEXT)
address@hidden@am__objects_48 =
linux/src/drivers/net/liblinux_a-3c503.$(OBJEXT) \
address@hidden@ linux/src/drivers/net/liblinux_a-8390.$(OBJEXT)
address@hidden@am__objects_49 = linux/src/drivers/net/liblinux_a-3c505.$(OBJEXT)
address@hidden@am__objects_50 = linux/src/drivers/net/liblinux_a-3c507.$(OBJEXT)
address@hidden@am__objects_51 = linux/src/drivers/net/liblinux_a-3c509.$(OBJEXT)
address@hidden@am__objects_52 = linux/src/drivers/net/liblinux_a-3c59x.$(OBJEXT)
address@hidden@am__objects_53 = linux/src/drivers/net/liblinux_a-3c515.$(OBJEXT)
address@hidden@am__objects_54 =
linux/src/drivers/net/liblinux_a-ac3200.$(OBJEXT) \
address@hidden@ linux/src/drivers/net/liblinux_a-8390.$(OBJEXT)
address@hidden@am__objects_55 =
linux/src/drivers/net/liblinux_a-apricot.$(OBJEXT)
address@hidden@am__objects_56 =
linux/src/drivers/net/liblinux_a-at1700.$(OBJEXT)
address@hidden@am__objects_57 = linux/src/drivers/net/liblinux_a-atp.$(OBJEXT)
address@hidden@am__objects_58 = linux/src/drivers/net/liblinux_a-de4x5.$(OBJEXT)
address@hidden@am__objects_59 = linux/src/drivers/net/liblinux_a-de600.$(OBJEXT)
address@hidden@am__objects_60 = linux/src/drivers/net/liblinux_a-de620.$(OBJEXT)
address@hidden@am__objects_61 = linux/src/drivers/net/liblinux_a-depca.$(OBJEXT)
address@hidden@am__objects_62 =
linux/src/drivers/net/liblinux_a-e2100.$(OBJEXT) \
address@hidden@ linux/src/drivers/net/liblinux_a-8390.$(OBJEXT)
address@hidden@am__objects_63 = linux/src/drivers/net/liblinux_a-eepro.$(OBJEXT)
address@hidden@am__objects_64 =
linux/src/drivers/net/liblinux_a-eepro100.$(OBJEXT)
address@hidden@am__objects_65 =
linux/src/drivers/net/liblinux_a-eexpress.$(OBJEXT)
address@hidden@am__objects_66 =
linux/src/drivers/net/liblinux_a-epic100.$(OBJEXT)
address@hidden@am__objects_67 =
linux/src/drivers/net/liblinux_a-eth16i.$(OBJEXT)
address@hidden@am__objects_68 = linux/src/drivers/net/liblinux_a-ewrk3.$(OBJEXT)
address@hidden@am__objects_69 =
linux/src/drivers/net/liblinux_a-fmv18x.$(OBJEXT)
address@hidden@am__objects_70 =
linux/src/drivers/net/liblinux_a-hamachi.$(OBJEXT)
address@hidden@am__objects_71 =
linux/src/drivers/net/liblinux_a-hp-plus.$(OBJEXT) \
address@hidden@ linux/src/drivers/net/liblinux_a-8390.$(OBJEXT)
address@hidden@am__objects_72 = linux/src/drivers/net/liblinux_a-hp.$(OBJEXT) \
address@hidden@ linux/src/drivers/net/liblinux_a-8390.$(OBJEXT)
address@hidden@am__objects_73 = linux/src/drivers/net/liblinux_a-hp100.$(OBJEXT)
address@hidden@am__objects_74 =
linux/src/drivers/net/liblinux_a-intel-gige.$(OBJEXT)
address@hidden@am__objects_75 = linux/src/drivers/net/liblinux_a-lance.$(OBJEXT)
address@hidden@am__objects_76 =
linux/src/drivers/net/liblinux_a-myson803.$(OBJEXT)
address@hidden@am__objects_77 =
linux/src/drivers/net/liblinux_a-natsemi.$(OBJEXT)
address@hidden@am__objects_78 = linux/src/drivers/net/liblinux_a-ne.$(OBJEXT) \
address@hidden@ linux/src/drivers/net/liblinux_a-8390.$(OBJEXT)
address@hidden@am__objects_79 =
linux/src/drivers/net/liblinux_a-ne2k-pci.$(OBJEXT) \
address@hidden@ linux/src/drivers/net/liblinux_a-8390.$(OBJEXT)
address@hidden@am__objects_80 = linux/src/drivers/net/liblinux_a-ni52.$(OBJEXT)
address@hidden@am__objects_81 = linux/src/drivers/net/liblinux_a-ni65.$(OBJEXT)
address@hidden@am__objects_82 = linux/src/drivers/net/liblinux_a-ns820.$(OBJEXT)
address@hidden@am__objects_83 =
linux/src/drivers/net/liblinux_a-pcnet32.$(OBJEXT)
address@hidden@am__objects_84 =
linux/src/drivers/net/liblinux_a-rtl8139.$(OBJEXT)
address@hidden@am__objects_85 =
linux/src/drivers/net/liblinux_a-seeq8005.$(OBJEXT)
address@hidden@am__objects_86 =
linux/src/drivers/net/liblinux_a-sis900.$(OBJEXT)
address@hidden@am__objects_87 =
linux/src/drivers/net/liblinux_a-sk_g16.$(OBJEXT)
address@hidden@am__objects_88 =
linux/src/drivers/net/liblinux_a-smc-ultra.$(OBJEXT) \
address@hidden@ linux/src/drivers/net/liblinux_a-8390.$(OBJEXT)
address@hidden@am__objects_89 =
linux/src/drivers/net/liblinux_a-smc-ultra32.$(OBJEXT) \
address@hidden@ linux/src/drivers/net/liblinux_a-8390.$(OBJEXT)
address@hidden@am__objects_90 =
linux/src/drivers/net/liblinux_a-starfire.$(OBJEXT)
address@hidden@am__objects_91 =
linux/src/drivers/net/liblinux_a-sundance.$(OBJEXT)
address@hidden@am__objects_92 = linux/src/drivers/net/liblinux_a-tlan.$(OBJEXT)
address@hidden@am__objects_93 = linux/src/drivers/net/liblinux_a-tulip.$(OBJEXT)
address@hidden@am__objects_94 =
linux/src/drivers/net/liblinux_a-via-rhine.$(OBJEXT)
address@hidden@am__objects_95 =
linux/src/drivers/net/liblinux_a-wavelan.$(OBJEXT)
address@hidden@am__objects_96 = linux/src/drivers/net/liblinux_a-wd.$(OBJEXT)
address@hidden@am__objects_97 =
linux/src/drivers/net/liblinux_a-winbond-840.$(OBJEXT) \
address@hidden@ linux/src/drivers/net/liblinux_a-8390.$(OBJEXT)
address@hidden@am__objects_98 =
linux/src/drivers/net/liblinux_a-yellowfin.$(OBJEXT)
address@hidden@am__objects_99 = linux/src/drivers/net/liblinux_a-znet.$(OBJEXT)
address@hidden@am__objects_100 =
linux/src/arch/i386/lib/liblinux_a-semaphore.$(OBJEXT)
+am_liblinux_a_OBJECTS = linux/dev/init/liblinux_a-version.$(OBJEXT) \
+ linux/dev/kernel/liblinux_a-softirq.$(OBJEXT) \
+ linux/src/arch/i386/lib/liblinux_a-delay.$(OBJEXT) \
+ linux/dev/kernel/liblinux_a-dma.$(OBJEXT) \
+ linux/dev/kernel/liblinux_a-resource.$(OBJEXT) \
+ linux/dev/kernel/liblinux_a-printk.$(OBJEXT) \
+ linux/src/arch/i386/kernel/liblinux_a-bios32.$(OBJEXT) \
+ linux/dev/arch/i386/kernel/liblinux_a-irq.$(OBJEXT) \
+ linux/src/lib/liblinux_a-ctype.$(OBJEXT) \
+ linux/dev/lib/liblinux_a-vsprintf.$(OBJEXT) \
+ linux/dev/init/liblinux_a-main.$(OBJEXT) \
+ linux/dev/glue/liblinux_a-misc.$(OBJEXT) \
+ linux/dev/kernel/liblinux_a-sched.$(OBJEXT) \
+ linux/dev/glue/liblinux_a-kmem.$(OBJEXT) \
+ linux/dev/glue/liblinux_a-block.$(OBJEXT) \
+ linux/dev/arch/i386/kernel/liblinux_a-setup.$(OBJEXT) \
+ linux/src/drivers/pci/liblinux_a-pci.$(OBJEXT) \
+ linux/dev/drivers/block/liblinux_a-genhd.$(OBJEXT) \
+ $(am__objects_14) $(am__objects_15) $(am__objects_16) \
+ $(am__objects_17) $(am__objects_18) $(am__objects_19) \
+ $(am__objects_20) $(am__objects_21) $(am__objects_22) \
+ $(am__objects_23) $(am__objects_24) $(am__objects_25) \
+ $(am__objects_26) $(am__objects_27) $(am__objects_28) \
+ $(am__objects_29) $(am__objects_30) $(am__objects_31) \
+ $(am__objects_32) $(am__objects_33) $(am__objects_34) \
+ $(am__objects_35) $(am__objects_36) $(am__objects_37) \
+ $(am__objects_38) $(am__objects_39) $(am__objects_40) \
+ $(am__objects_41) $(am__objects_42) $(am__objects_43) \
+ $(am__objects_44) $(am__objects_45) $(am__objects_46) \
+ $(am__objects_47) $(am__objects_48) $(am__objects_49) \
+ $(am__objects_50) $(am__objects_51) $(am__objects_52) \
+ $(am__objects_53) $(am__objects_54) $(am__objects_55) \
+ $(am__objects_56) $(am__objects_57) $(am__objects_58) \
+ $(am__objects_59) $(am__objects_60) $(am__objects_61) \
+ $(am__objects_62) $(am__objects_63) $(am__objects_64) \
+ $(am__objects_65) $(am__objects_66) $(am__objects_67) \
+ $(am__objects_68) $(am__objects_69) $(am__objects_70) \
+ $(am__objects_71) $(am__objects_72) $(am__objects_73) \
+ $(am__objects_74) $(am__objects_75) $(am__objects_76) \
+ $(am__objects_77) $(am__objects_78) $(am__objects_79) \
+ $(am__objects_80) $(am__objects_81) $(am__objects_82) \
+ $(am__objects_83) $(am__objects_84) $(am__objects_85) \
+ $(am__objects_86) $(am__objects_87) $(am__objects_88) \
+ $(am__objects_89) $(am__objects_90) $(am__objects_91) \
+ $(am__objects_92) $(am__objects_93) $(am__objects_94) \
+ $(am__objects_95) $(am__objects_96) $(am__objects_97) \
+ $(am__objects_98) $(am__objects_99) $(am__objects_100)
+liblinux_a_OBJECTS = $(am_liblinux_a_OBJECTS)
+liblinux_pcmcia_cs_clients_a_AR = $(AR) $(ARFLAGS)
+liblinux_pcmcia_cs_clients_a_LIBADD =
+am__liblinux_pcmcia_cs_clients_a_SOURCES_DIST = \
+ linux/pcmcia-cs/clients/3c574_cs.c \
+ linux/pcmcia-cs/clients/3c589_cs.c \
+ linux/pcmcia-cs/clients/ax8390.h \
+ linux/pcmcia-cs/clients/axnet_cs.c \
+ linux/pcmcia-cs/clients/fmvj18x_cs.c \
+ linux/pcmcia-cs/clients/nmclan_cs.c \
+ linux/pcmcia-cs/clients/pcnet_cs.c \
+ linux/src/drivers/net/8390.c linux/pcmcia-cs/clients/ositech.h \
+ linux/pcmcia-cs/clients/smc91c92_cs.c \
+ linux/pcmcia-cs/clients/xirc2ps_cs.c
address@hidden@am__objects_101 =
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c574_cs.$(OBJEXT)
address@hidden@am__objects_102 =
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c589_cs.$(OBJEXT)
address@hidden@am__objects_103 =
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-axnet_cs.$(OBJEXT)
address@hidden@am__objects_104 =
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-fmvj18x_cs.$(OBJEXT)
address@hidden@am__objects_105 =
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-nmclan_cs.$(OBJEXT)
address@hidden@am__objects_106 =
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-pcnet_cs.$(OBJEXT) \
address@hidden@
linux/src/drivers/net/liblinux_pcmcia_cs_clients_a-8390.$(OBJEXT)
address@hidden@am__objects_107 =
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-smc91c92_cs.$(OBJEXT)
address@hidden@am__objects_108 =
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-xirc2ps_cs.$(OBJEXT)
+am_liblinux_pcmcia_cs_clients_a_OBJECTS = $(am__objects_101) \
+ $(am__objects_102) $(am__objects_103) $(am__objects_104) \
+ $(am__objects_105) $(am__objects_106) $(am__objects_107) \
+ $(am__objects_108)
+liblinux_pcmcia_cs_clients_a_OBJECTS = \
+ $(am_liblinux_pcmcia_cs_clients_a_OBJECTS)
+liblinux_pcmcia_cs_modules_a_AR = $(AR) $(ARFLAGS)
+liblinux_pcmcia_cs_modules_a_LIBADD =
+am__liblinux_pcmcia_cs_modules_a_SOURCES_DIST = \
+ linux/pcmcia-cs/glue/pcmcia.c \
+ linux/pcmcia-cs/glue/pcmcia_glue.h \
+ linux/pcmcia-cs/modules/cs.c \
+ linux/pcmcia-cs/modules/cs_internal.h \
+ linux/pcmcia-cs/modules/ds.c \
+ linux/pcmcia-cs/modules/rsrc_mgr.c \
+ linux/pcmcia-cs/modules/bulkmem.c \
+ linux/pcmcia-cs/modules/cistpl.c \
+ linux/pcmcia-cs/modules/pci_fixup.c \
+ linux/pcmcia-cs/modules/cirrus.h linux/pcmcia-cs/modules/ene.h \
+ linux/pcmcia-cs/modules/i82365.c \
+ linux/pcmcia-cs/modules/i82365.h \
+ linux/pcmcia-cs/modules/o2micro.h \
+ linux/pcmcia-cs/modules/ricoh.h \
+ linux/pcmcia-cs/modules/smc34c90.h \
+ linux/pcmcia-cs/modules/ti113x.h \
+ linux/pcmcia-cs/modules/topic.h \
+ linux/pcmcia-cs/modules/vg468.h \
+ linux/pcmcia-cs/modules/yenta.h
address@hidden@am__objects_109 =
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-i82365.$(OBJEXT)
+am_liblinux_pcmcia_cs_modules_a_OBJECTS =
linux/pcmcia-cs/glue/liblinux_pcmcia_cs_modules_a-pcmcia.$(OBJEXT) \
+ linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cs.$(OBJEXT) \
+ linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-ds.$(OBJEXT) \
+ linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-rsrc_mgr.$(OBJEXT)
\
+ linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-bulkmem.$(OBJEXT) \
+ linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cistpl.$(OBJEXT) \
+
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-pci_fixup.$(OBJEXT) \
+ $(am__objects_109)
+liblinux_pcmcia_cs_modules_a_OBJECTS = \
+ $(am_liblinux_pcmcia_cs_modules_a_OBJECTS)
+liblinux_pcmcia_cs_wireless_a_AR = $(AR) $(ARFLAGS)
+liblinux_pcmcia_cs_wireless_a_LIBADD =
+am__liblinux_pcmcia_cs_wireless_a_SOURCES_DIST = \
+ linux/pcmcia-cs/glue/wireless_glue.h \
+ linux/pcmcia-cs/wireless/hermes.c \
+ linux/pcmcia-cs/wireless/hermes.h \
+ linux/pcmcia-cs/wireless/hermes_rid.h \
+ linux/pcmcia-cs/wireless/ieee802_11.h \
+ linux/pcmcia-cs/wireless/orinoco.c \
+ linux/pcmcia-cs/wireless/orinoco.h \
+ linux/pcmcia-cs/wireless/orinoco_cs.c
address@hidden@am__objects_110 =
linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-hermes.$(OBJEXT) \
address@hidden@
linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco.$(OBJEXT) \
address@hidden@
linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco_cs.$(OBJEXT)
+am_liblinux_pcmcia_cs_wireless_a_OBJECTS = $(am__objects_110)
+liblinux_pcmcia_cs_wireless_a_OBJECTS = \
+ $(am_liblinux_pcmcia_cs_wireless_a_OBJECTS)
+am__installdirs = "$(DESTDIR)$(exec_bootdir)" "$(DESTDIR)$(infodir)" \
+ "$(DESTDIR)$(exec_msgidsdir)" "$(DESTDIR)$(include_devicedir)" \
+ "$(DESTDIR)$(include_machdir)" \
+ "$(DESTDIR)$(include_mach_eXecdir)" \
+ "$(DESTDIR)$(include_mach_i386dir)"
+PROGRAMS = $(exec_boot_PROGRAMS) $(noinst_PROGRAMS)
+am_gnumach_OBJECTS =
+gnumach_OBJECTS = $(am_gnumach_OBJECTS)
+gnumach_DEPENDENCIES = gnumach.o clib-routines.o
+am_gnumach_o_OBJECTS =
+gnumach_o_OBJECTS = $(am_gnumach_o_OBJECTS)
+gnumach_o_DEPENDENCIES = libkernel.a $(am__append_6) $(am__append_100)
+AM_V_P = $(address@hidden@)
+am__v_P_ = $(address@hidden@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(address@hidden@)
+am__v_GEN_ = $(address@hidden@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(address@hidden@)
+am__v_at_ = $(address@hidden@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = address@hidden@
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+AM_V_lt = $(address@hidden@)
+am__v_lt_ = $(address@hidden@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS)
+AM_V_CPPAS = $(address@hidden@)
+am__v_CPPAS_ = $(address@hidden@)
+am__v_CPPAS_0 = @echo " CPPAS " $@;
+am__v_CPPAS_1 =
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(address@hidden@)
+am__v_CC_ = $(address@hidden@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(address@hidden@)
+am__v_CCLD_ = $(address@hidden@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(nodist_lib_dep_tr_for_defs_a_SOURCES) \
+ $(libkernel_a_SOURCES) $(nodist_libkernel_a_SOURCES) \
+ $(liblinux_a_SOURCES) $(liblinux_pcmcia_cs_clients_a_SOURCES) \
+ $(liblinux_pcmcia_cs_modules_a_SOURCES) \
+ $(liblinux_pcmcia_cs_wireless_a_SOURCES) $(gnumach_SOURCES) \
+ $(gnumach_o_SOURCES)
+DIST_SOURCES = $(am__libkernel_a_SOURCES_DIST) \
+ $(am__liblinux_a_SOURCES_DIST) \
+ $(am__liblinux_pcmcia_cs_clients_a_SOURCES_DIST) \
+ $(am__liblinux_pcmcia_cs_modules_a_SOURCES_DIST) \
+ $(am__liblinux_pcmcia_cs_wireless_a_SOURCES_DIST) \
+ $(gnumach_SOURCES) $(gnumach_o_SOURCES)
+AM_V_DVIPS = $(address@hidden@)
+am__v_DVIPS_ = $(address@hidden@)
+am__v_DVIPS_0 = @echo " DVIPS " $@;
+am__v_DVIPS_1 =
+AM_V_MAKEINFO = $(address@hidden@)
+am__v_MAKEINFO_ = $(address@hidden@)
+am__v_MAKEINFO_0 = @echo " MAKEINFO" $@;
+am__v_MAKEINFO_1 =
+AM_V_INFOHTML = $(address@hidden@)
+am__v_INFOHTML_ = $(address@hidden@)
+am__v_INFOHTML_0 = @echo " INFOHTML" $@;
+am__v_INFOHTML_1 =
+AM_V_TEXI2DVI = $(address@hidden@)
+am__v_TEXI2DVI_ = $(address@hidden@)
+am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@;
+am__v_TEXI2DVI_1 =
+AM_V_TEXI2PDF = $(address@hidden@)
+am__v_TEXI2PDF_ = $(address@hidden@)
+am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@;
+am__v_TEXI2PDF_1 =
+AM_V_texinfo = $(address@hidden@)
+am__v_texinfo_ = $(address@hidden@)
+am__v_texinfo_0 = -q
+am__v_texinfo_1 =
+AM_V_texidevnull = $(address@hidden@)
+am__v_texidevnull_ = $(address@hidden@)
+am__v_texidevnull_0 = > /dev/null
+am__v_texidevnull_1 =
+INFO_DEPS = $(srcdir)/doc/mach.info
+TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex
+am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux
+DVIS = doc/mach.dvi
+PDFS = doc/mach.pdf
+PSS = doc/mach.ps
+HTMLS = doc/mach.html
+TEXINFOS = doc/mach.texi
+TEXI2DVI = texi2dvi
+TEXI2PDF = $(TEXI2DVI) --pdf --batch
+MAKEINFOHTML = $(MAKEINFO) --html
+AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+DVIPS = dvips
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+ ctags-recursive dvi-recursive html-recursive info-recursive \
+ install-data-recursive install-dvi-recursive \
+ install-exec-recursive install-html-recursive \
+ install-info-recursive install-pdf-recursive \
+ install-ps-recursive install-recursive installcheck-recursive \
+ installdirs-recursive pdf-recursive ps-recursive \
+ tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+DATA = $(exec_msgids_DATA)
+am__include_mach_i386_HEADERS_DIST = i386/include/mach/i386/asm.h \
+ i386/include/mach/i386/boolean.h i386/include/mach/i386/disk.h \
+ i386/include/mach/i386/eflags.h \
+ i386/include/mach/i386/exception.h \
+ i386/include/mach/i386/fp_reg.h \
+ i386/include/mach/i386/ioccom.h \
+ i386/include/mach/i386/kern_return.h \
+ i386/include/mach/i386/mach_i386.defs \
+ i386/include/mach/i386/mach_i386_types.h \
+ i386/include/mach/i386/machine_types.defs \
+ i386/include/mach/i386/multiboot.h \
+ i386/include/mach/i386/rpc.h \
+ i386/include/mach/i386/syscall_sw.h \
+ i386/include/mach/i386/thread_status.h \
+ i386/include/mach/i386/trap.h \
+ i386/include/mach/i386/vm_param.h \
+ i386/include/mach/i386/vm_types.h
+HEADERS = $(include_device_HEADERS) $(include_mach_HEADERS) \
+ $(include_mach_eXec_HEADERS) $(include_mach_i386_HEADERS)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
+ distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+ $(RECURSIVE_TARGETS) \
+ $(RECURSIVE_CLEAN_TARGETS) \
+ $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+ cscope check recheck distdir dist dist-all distcheck
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
+ $(LISP)config.h.in
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+CSCOPE = cscope
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red='[0;31m'; \
+ grn='[0;32m'; \
+ lgn='[1;32m'; \
+ blu='[1;34m'; \
+ mgn='[0;35m'; \
+ brg='[1m'; \
+ std='[m'; \
+ fi; \
+}
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+ break; \
+ } \
+ }; \
+ if (recheck) \
+ print $$0; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@address@hidden)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+ $(TEST_LOG_FLAGS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+ if test -d "$(distdir)"; then \
+ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+ && rm -rf "$(distdir)" \
+ || { sleep 5 && rm -rf "$(distdir)"; }; \
+ else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+am__relativize = \
+ dir0=`pwd`; \
+ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+ sed_rest='s,^[^/]*/*,,'; \
+ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+ sed_butlast='s,/*[^/]*$$,,'; \
+ while test -n "$$dir1"; do \
+ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+ if test "$$first" != "."; then \
+ if test "$$first" = ".."; then \
+ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+ else \
+ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+ if test "$$first2" = "$$first"; then \
+ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+ else \
+ dir2="../$$dir2"; \
+ fi; \
+ dir0="$$dir0"/"$$first"; \
+ fi; \
+ fi; \
+ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+ done; \
+ reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
+GZIP_ENV = --best
+DIST_TARGETS = dist-bzip2 dist-gzip
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+
+# We need this because we use $(CPP) to preprocess MIG .defs files.
+CPP = @CPP@ -x c
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+GZIP = @GZIP@
+INSTALL = $(install_sh)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MIG = @MIG@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATCH = @PATCH@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_platform = @host_platform@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+
+#
+# Other Tools' Configuration.
+#
+
+# Don't needlessly overwrite files that whose contents haven't changed. This
+# helps for avoinding unneccessary recompilation cycles when keeping
+# cross-compilation toolchains up-to-date. Thus, unconditionally use the
+# `install-sh' that is supplied by GNU Automake 1.10.1, as the GNU Coreutils
+# one doesn't provide this functionality yet (TODO: change that). TODO:
+# `build-aux' is hardcoded.
+install_sh = $(SHELL) $(abs_srcdir)/build-aux/install-sh -C
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+systype = @systype@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS =
+DIST_SUBDIRS =
+
+# Instead of listing each file individually...
+
+#
+# Building a distribution.
+#
+
+# Instead of listing each file individually...
+
+#
+# Building a distribution.
+#
+EXTRA_DIST = gensym.awk ipc/mach_port.srv kern/mach.srv kern/mach4.srv \
+ kern/gnumach.srv kern/mach_debug.srv kern/mach_host.srv \
+ vm/memory_object_default.cli vm/memory_object_user.cli \
+ device/device.srv device/device_pager.srv \
+ device/device_reply.cli device/memory_object_reply.cli include \
+ $(am__append_13) $(am__append_20) $(am__append_24) \
+ $(am__append_26) $(am__append_30) $(am__append_41) \
+ linux/src/drivers/scsi/NCR5380.c \
+ linux/src/drivers/scsi/NCR5380.h linux/src/drivers/net/8390.h \
+ linux/src/drivers/net/kern_compat.h linux/pcmcia-cs/glue/ds.c \
+ linux/dev/README linux/src/COPYING linux/dev/include \
+ linux/src/include linux/pcmcia-cs/include $(am__append_117) \
+ $(mach_TEXINFOS) config.status.dep.patch DEVELOPMENT
+
+#
+# Building a distribution.
+#
+
+# Enable all available features.
+DISTCHECK_CONFIGURE_FLAGS = --enable-kdb
+
+#
+# The main kernel functionality.
+#
+noinst_LIBRARIES = libkernel.a lib_dep_tr_for_defs.a $(am__append_5) \
+ $(am__append_99)
+TESTS = tests/test-mbchk
+info_TEXINFOS = doc/mach.texi
+# kern/mach.server.defs
+# kern/mach4.server.defs
+# kern/gnumach.server.defs
+# kern/mach_debug.server.defs
+# kern/mach_host.server.defs
+
+# rpctrace can make use of that.
+MOSTLYCLEANFILES = $(nodist_libkernel_a_SOURCES) \
+ $(nodist_lib_dep_tr_for_defs_a_SOURCES) gnumach.msgids \
+ gnumach-undef gnumach-undef-bad
+DISTCLEANFILES = Makefile.orig config.status.orig
+
+#
+# Compilation flags
+#
+AM_CPPFLAGS = -nostdinc -imacros config.h -I$(systype) -I. \
+ -I$(top_srcdir)/$(systype) \
+ -I$(top_srcdir)/$(systype)/include/mach/sa \
+ -I$(top_srcdir)/include
+AM_CCASFLAGS =
+
+# Yes, this makes the eyes hurt. But perhaps someone will finally take care of
+# all that scruffy Mach code... Also see <http://savannah.gnu.org/task/?5726>.
+
+# See <http://lists.gnu.org/archive/html/bug-hurd/2006-01/msg00148.html>.
+AM_CFLAGS = -fno-builtin-log -Wall -fno-strict-aliasing \
+ $(am__append_1) $(am__append_3) $(am__append_124)
+AM_LDFLAGS =
+
+#
+# Silent build support.
+#
+AWK_V = $(AWK_V_$(V))
+AWK_V_ = $(AWK_V_$(AM_DEFAULT_VERBOSITY))
+AWK_V_0 = @echo " AWK $@";
+GZIP_V = $(GZIP_V_$(V))
+GZIP_V_ = $(GZIP_V_$(AM_DEFAULT_VERBOSITY))
+GZIP_V_0 = @echo " GZIP $@";
+NM_V = $(NM_V_$(V))
+NM_V_ = $(NM_V_$(AM_DEFAULT_VERBOSITY))
+NM_V_0 = @echo " NM $@";
+MIGCOM_V = $(MIGCOM_V_$(V))
+MIGCOM_V_ = $(MIGCOM_V_$(AM_DEFAULT_VERBOSITY))
+MIGCOM_V_0 = @echo " MIG $@";
+
+#
+# MIG Setup.
+#
+
+# MIGCOM.
+MIGCOM = $(MIG) -n -cc cat - /dev/null
+
+#
+# IPC implementation.
+#
+
+#
+# `kernel' implementation (tasks, threads, trivia, etc.).
+#
+
+#
+# Still more trivia.
+#
+
+#
+# Virtual memory implementation.
+#
+
+#
+# Device driver support.
+#
+
+# These device support files are always needed; the others are needed only if
+# particular drivers want the routines.
+# TODO. Functions in device/subrs.c should each be moved elsewhere.
+libkernel_a_SOURCES = $(am__append_2) ipc/ipc_entry.c ipc/ipc_entry.h \
+ ipc/ipc_hash.c ipc/ipc_hash.h ipc/ipc_init.c ipc/ipc_init.h \
+ ipc/ipc_kmsg.c ipc/ipc_kmsg.h ipc/ipc_kmsg_queue.h \
+ ipc/ipc_machdep.h ipc/ipc_marequest.c ipc/ipc_marequest.h \
+ ipc/ipc_mqueue.c ipc/ipc_mqueue.h ipc/ipc_notify.c \
+ ipc/ipc_notify.h ipc/ipc_object.c ipc/ipc_object.h \
+ ipc/ipc_port.c ipc/ipc_port.h ipc/ipc_pset.c ipc/ipc_pset.h \
+ ipc/ipc_right.c ipc/ipc_right.h ipc/ipc_space.c \
+ ipc/ipc_space.h ipc/ipc_splay.c ipc/ipc_splay.h \
+ ipc/ipc_table.c ipc/ipc_table.h ipc/ipc_target.c \
+ ipc/ipc_target.h ipc/ipc_thread.c ipc/ipc_thread.h \
+ ipc/ipc_types.h ipc/mach_msg.c ipc/mach_msg.h ipc/mach_port.c \
+ ipc/mach_port.h ipc/mach_rpc.c ipc/mach_debug.c ipc/port.h \
+ kern/act.c kern/act.h kern/assert.h kern/ast.c kern/ast.h \
+ kern/boot_script.h kern/bootstrap.c kern/counters.c \
+ kern/counters.h kern/cpu_number.h kern/debug.c kern/debug.h \
+ kern/eventcount.c kern/eventcount.h kern/exception.c \
+ kern/host.c kern/host.h kern/ipc_host.c kern/ipc_host.h \
+ kern/ipc_kobject.c kern/ipc_kobject.h kern/ipc_mig.c \
+ kern/ipc_mig.h kern/ipc_sched.c kern/ipc_sched.h kern/ipc_tt.c \
+ kern/ipc_tt.h kern/kalloc.h kern/kern_types.h kern/list.h \
+ kern/lock.c kern/lock.h kern/lock_mon.c kern/mach_clock.c \
+ kern/mach_clock.h kern/mach_factor.c kern/mach_factor.h \
+ kern/machine.c kern/machine.h kern/macro_help.h \
+ kern/pc_sample.c kern/pc_sample.h kern/printf.c kern/printf.h \
+ kern/priority.c kern/processor.c kern/processor.h \
+ kern/profile.c kern/queue.c kern/queue.h kern/rbtree.c \
+ kern/rbtree.h kern/rbtree_i.h kern/refcount.h kern/slab.c \
+ kern/slab.h kern/sched.h kern/sched_prim.c kern/sched_prim.h \
+ kern/shuttle.h kern/startup.c kern/strings.c \
+ kern/syscall_emulation.c kern/syscall_emulation.h \
+ kern/syscall_subr.c kern/syscall_subr.h kern/syscall_sw.c \
+ kern/syscall_sw.h kern/task.c kern/task.h kern/thread.c \
+ kern/thread.h kern/thread_swap.c kern/thread_swap.h \
+ kern/time_stamp.c kern/time_stamp.h kern/timer.c kern/timer.h \
+ kern/xpr.c kern/xpr.h kern/elf-load.c kern/boot_script.c \
+ util/putchar.c util/putchar.h util/puts.c util/atoi.c \
+ util/atoi.h vm/memory_object_proxy.c vm/memory_object_proxy.h \
+ vm/memory_object.c vm/memory_object.h vm/pmap.h vm/vm_debug.c \
+ vm/vm_external.c vm/vm_external.h vm/vm_fault.c vm/vm_fault.h \
+ vm/vm_init.c vm/vm_kern.c vm/vm_kern.h vm/vm_map.c vm/vm_map.h \
+ vm/vm_object.c vm/vm_object.h vm/vm_page.h vm/vm_pageout.c \
+ vm/vm_pageout.h vm/vm_resident.c vm/vm_resident.h \
+ vm/vm_types.h vm/vm_user.c vm/vm_user.h device/blkio.c \
+ device/buf.h device/chario.c device/cirbuf.h device/conf.h \
+ device/cons.c device/cons.h device/device_emul.h \
+ device/dev_hdr.h device/dev_lookup.c device/dev_master.h \
+ device/dev_name.c device/dev_pager.c device/device_init.c \
+ device/device_port.h device/device_types_kernel.h \
+ device/ds_routines.c device/ds_routines.h device/if_ether.h \
+ device/if_hdr.h device/io_req.h device/net_io.c \
+ device/net_io.h device/param.h device/subrs.c device/subrs.h \
+ device/tty.h $(am__append_4) $(am__append_112) \
+ $(am__append_113) $(am__append_114) $(am__append_115) \
+ $(am__append_116) $(am__append_118) $(am__append_119) \
+ $(am__append_120) $(am__append_125)
+
+#
+# Version number.
+#
+nodist_libkernel_a_SOURCES = version.c vm/memory_object_user.user.h \
+ vm/memory_object_user.user.c vm/memory_object_user.user.msgids \
+ vm/memory_object_default.user.h \
+ vm/memory_object_default.user.c \
+ vm/memory_object_default.user.msgids \
+ device/device_reply.user.h device/device_reply.user.c \
+ device/device_reply.user.msgids \
+ device/memory_object_reply.user.h \
+ device/memory_object_reply.user.c \
+ device/memory_object_reply.user.msgids device/device.server.h \
+ device/device.server.c device/device.server.msgids \
+ device/device_pager.server.h device/device_pager.server.c \
+ device/device_pager.server.msgids ipc/mach_port.server.h \
+ ipc/mach_port.server.c ipc/mach_port.server.msgids \
+ kern/mach.server.h kern/mach.server.c kern/mach.server.msgids \
+ kern/mach4.server.h kern/mach4.server.c \
+ kern/mach4.server.msgids kern/gnumach.server.h \
+ kern/gnumach.server.c kern/gnumach.server.msgids \
+ kern/mach_debug.server.h kern/mach_debug.server.c \
+ kern/mach_debug.server.msgids kern/mach_host.server.h \
+ kern/mach_host.server.c kern/mach_host.server.msgids \
+ $(am__append_122)
+gnumach_o_LDADD = libkernel.a $(am__append_6) $(am__append_100)
+gnumach_SOURCES =
+gnumach_LINKFLAGS = $(am__append_123) $(am__append_126)
+
+#
+# Automatically generated source files.
+#
+# See Makerules.mig.am.
+#
+
+# User stubs.
+# vm/memory_object_user.user.defs
+# vm/memory_object_default.user.defs
+# device/device_reply.user.defs
+# device/memory_object_reply.user.defs
+
+# Server stubs.
+# device/device.server.defs
+# device/device_pager.server.defs
+# ipc/mach_port.server.defs
+nodist_lib_dep_tr_for_defs_a_SOURCES = \
+ vm/memory_object_user.user.defs.c \
+ vm/memory_object_default.user.defs.c \
+ device/device_reply.user.defs.c \
+ device/memory_object_reply.user.defs.c \
+ device/device.server.defs.c device/device_pager.server.defs.c \
+ ipc/mach_port.server.defs.c kern/mach.server.defs.c \
+ kern/mach4.server.defs.c kern/gnumach.server.defs.c \
+ kern/mach_debug.server.defs.c kern/mach_host.server.defs.c \
+ $(am__append_121)
+# Preprocess only.
+lib_dep_tr_for_defs_a_CPPFLAGS = $(AM_CPPFLAGS) \
+ -E
+
+
+#
+# Installation.
+#
+include_devicedir = $(includedir)/device
+include_device_HEADERS = \
+ include/device/audio_status.h \
+ include/device/bpf.h \
+ include/device/device.defs \
+ include/device/device_reply.defs \
+ include/device/device_request.defs \
+ include/device/device_types.defs \
+ include/device/device_types.h \
+ include/device/disk_status.h \
+ include/device/net_status.h \
+ include/device/tape_status.h \
+ include/device/tty_status.h
+
+include_machdir = $(includedir)/mach
+include_mach_HEADERS = \
+ include/mach/bootstrap.defs \
+ include/mach/default_pager.defs \
+ include/mach/default_pager_helper.defs \
+ include/mach/default_pager_types.defs \
+ include/mach/exc.defs \
+ include/mach/mach.defs \
+ include/mach/mach4.defs \
+ include/mach/gnumach.defs \
+ include/mach/mach_host.defs \
+ include/mach/mach_port.defs \
+ include/mach/mach_types.defs \
+ include/mach/memory_object.defs \
+ include/mach/memory_object_default.defs \
+ include/mach/notify.defs \
+ include/mach/std_types.defs \
+ include/mach/alert.h \
+ include/mach/boolean.h \
+ include/mach/boot.h \
+ include/mach/default_pager_types.h \
+ include/mach/exception.h \
+ include/mach/host_info.h \
+ include/mach/kern_return.h \
+ include/mach/mach_param.h \
+ include/mach/mach_types.h \
+ include/mach/machine.h \
+ include/mach/macro_help.h \
+ include/mach/memory_object.h \
+ include/mach/message.h \
+ include/mach/mig_errors.h \
+ include/mach/msg_type.h \
+ include/mach/multiboot.h \
+ include/mach/notify.h \
+ include/mach/pc_sample.h \
+ include/mach/policy.h \
+ include/mach/port.h \
+ include/mach/processor_info.h \
+ include/mach/profil.h \
+ include/mach/profilparam.h \
+ include/mach/rpc.h \
+ include/mach/std_types.h \
+ include/mach/syscall_sw.h \
+ include/mach/task_info.h \
+ include/mach/task_special_ports.h \
+ include/mach/thread_info.h \
+ include/mach/thread_special_ports.h \
+ include/mach/thread_status.h \
+ include/mach/thread_switch.h \
+ include/mach/time_value.h \
+ include/mach/version.h \
+ include/mach/vm_attributes.h \
+ include/mach/vm_cache_statistics.h \
+ include/mach/vm_inherit.h \
+ include/mach/vm_param.h \
+ include/mach/vm_prot.h \
+ include/mach/vm_statistics.h \
+ include/mach/inline.h \
+ include/mach/xen.h
+
+
+# If we name this `*_execdir', Automake won't add it to `install-data'...
+include_mach_eXecdir = $(includedir)/mach/exec
+include_mach_eXec_HEADERS = \
+ include/mach/exec/a.out.h \
+ include/mach/exec/elf.h \
+ include/mach/exec/exec.h
+
+# `exec_' prefix, so that we don't try to build that file during when running
+# `make install-data', as it may fail there, but isn't needed there either.
+exec_msgidsdir = $(datadir)/msgids
+exec_msgids_DATA = gnumach.msgids
+liblinux_a_CPPFLAGS = $(AM_CPPFLAGS) \
+ -I$(srcdir)/$(systype)/linux/dev/include \
+ -I$(top_builddir)/linux/dev/include \
+ -I$(srcdir)/linux/dev/include \
+ -I$(top_builddir)/linux/src/include \
+ -I$(srcdir)/linux/src/include
+
+# Because of the use of `extern inline' in some Linux header files without
+# corresponding text segment definitions, we must always optimize.
+liblinux_a_CFLAGS = -O2 $(AM_CFLAGS)
+# TODO. Do we really need `-traditional'?
+liblinux_a_CCASFLAGS = $(AM_CCASFLAGS) \
+ -D__ASSEMBLY__ -traditional \
+ $(liblinux_a_CPPFLAGS)
+
+liblinux_a_SOURCES = linux/dev/init/version.c \
+ linux/dev/kernel/softirq.c linux/src/arch/i386/lib/delay.c \
+ linux/dev/kernel/dma.c linux/dev/kernel/resource.c \
+ linux/dev/kernel/printk.c linux/src/arch/i386/kernel/bios32.c \
+ linux/dev/arch/i386/kernel/irq.c linux/src/lib/ctype.c \
+ linux/dev/lib/vsprintf.c linux/dev/init/main.c \
+ linux/dev/glue/misc.c linux/dev/kernel/sched.c \
+ linux/dev/glue/kmem.c linux/dev/glue/block.c \
+ linux/dev/glue/glue.h linux/dev/arch/i386/kernel/setup.c \
+ linux/src/drivers/pci/pci.c linux/dev/drivers/block/genhd.c \
+ $(am__append_7) $(am__append_8) $(am__append_9) \
+ $(am__append_10) $(am__append_11) $(am__append_12) \
+ $(am__append_14) $(am__append_15) $(am__append_16) \
+ $(am__append_17) $(am__append_18) $(am__append_19) \
+ $(am__append_21) $(am__append_22) $(am__append_23) \
+ $(am__append_25) $(am__append_27) $(am__append_28) \
+ $(am__append_29) $(am__append_31) $(am__append_32) \
+ $(am__append_33) $(am__append_34) $(am__append_35) \
+ $(am__append_36) $(am__append_37) $(am__append_38) \
+ $(am__append_39) $(am__append_40) $(am__append_42) \
+ $(am__append_43) $(am__append_44) $(am__append_45) \
+ $(am__append_46) $(am__append_47) $(am__append_48) \
+ $(am__append_49) $(am__append_50) $(am__append_51) \
+ $(am__append_52) $(am__append_53) $(am__append_54) \
+ $(am__append_55) $(am__append_56) $(am__append_57) \
+ $(am__append_58) $(am__append_59) $(am__append_60) \
+ $(am__append_61) $(am__append_62) $(am__append_63) \
+ $(am__append_64) $(am__append_65) $(am__append_66) \
+ $(am__append_67) $(am__append_68) $(am__append_69) \
+ $(am__append_70) $(am__append_71) $(am__append_72) \
+ $(am__append_73) $(am__append_74) $(am__append_75) \
+ $(am__append_76) $(am__append_77) $(am__append_78) \
+ $(am__append_79) $(am__append_80) $(am__append_81) \
+ $(am__append_82) $(am__append_83) $(am__append_84) \
+ $(am__append_85) $(am__append_86) $(am__append_87) \
+ $(am__append_88) $(am__append_89) $(am__append_90) \
+ $(am__append_91) $(am__append_92) $(am__append_93) \
+ $(am__append_94) $(am__append_95) $(am__append_96) \
+ $(am__append_97) $(am__append_98) $(am__append_111)
+
+# pcmcia-cs.
+liblinux_pcmcia_cs_modules_a_CPPFLAGS = $(liblinux_a_CPPFLAGS) \
+ -I$(srcdir)/linux/pcmcia-cs/include
+
+liblinux_pcmcia_cs_modules_a_CFLAGS = $(liblinux_a_CFLAGS) \
+ -include $(srcdir)/linux/pcmcia-cs/glue/pcmcia_glue.h
+
+liblinux_pcmcia_cs_modules_a_SOURCES = linux/pcmcia-cs/glue/pcmcia.c \
+ linux/pcmcia-cs/glue/pcmcia_glue.h \
+ linux/pcmcia-cs/modules/cs.c \
+ linux/pcmcia-cs/modules/cs_internal.h \
+ linux/pcmcia-cs/modules/ds.c \
+ linux/pcmcia-cs/modules/rsrc_mgr.c \
+ linux/pcmcia-cs/modules/bulkmem.c \
+ linux/pcmcia-cs/modules/cistpl.c \
+ linux/pcmcia-cs/modules/pci_fixup.c $(am__append_101)
+liblinux_pcmcia_cs_clients_a_CPPFLAGS = $(liblinux_a_CPPFLAGS) \
+ -DPCMCIA_CLIENT -I$(srcdir)/linux/pcmcia-cs/include
+
+liblinux_pcmcia_cs_clients_a_CFLAGS = $(liblinux_a_CFLAGS) \
+ -include $(srcdir)/linux/pcmcia-cs/glue/pcmcia_glue.h
+
+liblinux_pcmcia_cs_clients_a_SOURCES = $(am__append_102) \
+ $(am__append_103) $(am__append_104) $(am__append_105) \
+ $(am__append_106) $(am__append_107) $(am__append_108) \
+ $(am__append_109)
+liblinux_pcmcia_cs_wireless_a_CPPFLAGS = $(liblinux_a_CPPFLAGS) \
+ -I$(srcdir)/linux/pcmcia-cs/include
+
+liblinux_pcmcia_cs_wireless_a_CFLAGS = $(liblinux_a_CFLAGS) \
+ -include $(srcdir)/linux/pcmcia-cs/glue/wireless_glue.h
+
+liblinux_pcmcia_cs_wireless_a_SOURCES = $(am__append_110)
+
+#
+# Installation.
+#
address@hidden@include_mach_i386dir = $(includedir)/mach/i386
address@hidden@include_mach_i386_HEADERS = \
address@hidden@ i386/include/mach/i386/asm.h \
address@hidden@ i386/include/mach/i386/boolean.h \
address@hidden@ i386/include/mach/i386/disk.h \
address@hidden@ i386/include/mach/i386/eflags.h \
address@hidden@ i386/include/mach/i386/exception.h \
address@hidden@ i386/include/mach/i386/fp_reg.h \
address@hidden@ i386/include/mach/i386/ioccom.h \
address@hidden@ i386/include/mach/i386/kern_return.h \
address@hidden@ i386/include/mach/i386/mach_i386.defs \
address@hidden@ i386/include/mach/i386/mach_i386_types.h \
address@hidden@ i386/include/mach/i386/machine_types.defs \
address@hidden@ i386/include/mach/i386/multiboot.h \
address@hidden@ i386/include/mach/i386/rpc.h \
address@hidden@ i386/include/mach/i386/syscall_sw.h \
address@hidden@ i386/include/mach/i386/thread_status.h \
address@hidden@ i386/include/mach/i386/trap.h \
address@hidden@ i386/include/mach/i386/vm_param.h \
address@hidden@ i386/include/mach/i386/vm_types.h
+
+mach_TEXINFOS = \
+ doc/fdl.texi doc/gpl.texi
+
+
+#
+# Web pages of the GNU Mach Reference Manual.
+#
+web = doc/web
+
+# Makerules: how to do some things.
+
+# Main Makefile fragment.
+
+# Test suite.
+
+# Documentation.
+
+#
+# Kernel Image
+#
+
+# We need the following junk because of the include-files-from-libc.a magic.
+# TODO. Is the following kosher from a Automake point of view? (I.e. a
+# program `gnumach.o' that is then later used again as an object file.)
+gnumach_o_SOURCES =
+# TODO. ``-u _start''. System dependent?
+gnumach_o_LINK = $(LD) -u _start -r -o $@
+
+# This is the list of routines we decide is OK to steal from the C library.
+clib_routines := memcmp memcpy memmove \
+ strchr strstr strsep strtok \
+ htonl htons ntohl ntohs \
+ udivdi3 __udivdi3 \
+ __rel_iplt_start __rel_iplt_end \
+ _START _start etext _edata end _end # actually ld magic, not
libc.
+
+gnumach_LINK = $(LD) $(LINKFLAGS) $(gnumach_LINKFLAGS) -o $@
+gnumach_LDADD = gnumach.o clib-routines.o
+
+#
+# Installation.
+#
+exec_bootdir = \
+ $(exec_prefix)/boot
+
+gen_start_commit = e227045b06d62ee7d2fbab9d5ade9030ff43170b
+ChangeLog_files = ChangeLog ChangeLog.0 ChangeLog.00
+all: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .S .c .dvi .log .o .obj .ps .test .test$(EXEEXT) .trs
+am--refresh: Makefile
+ @:
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/Makerules.am
$(srcdir)/Makerules.mig.am $(srcdir)/Makefrag.am $(srcdir)/linux/Makefrag.am
$(srcdir)/i386/linux/Makefrag.am $(srcdir)/xen/Makefrag.am
$(srcdir)/i386/Makefrag.am $(srcdir)/i386/xen/Makefrag.am
$(srcdir)/tests/Makefrag.am $(srcdir)/doc/Makefrag.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
+ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ echo ' $(SHELL) ./config.status'; \
+ $(SHELL) ./config.status;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@
$(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $@
$(am__depfiles_maybe);; \
+ esac;
+$(srcdir)/Makerules.am $(srcdir)/Makerules.mig.am $(srcdir)/Makefrag.am
$(srcdir)/linux/Makefrag.am $(srcdir)/i386/linux/Makefrag.am
$(srcdir)/xen/Makefrag.am $(srcdir)/i386/Makefrag.am
$(srcdir)/i386/xen/Makefrag.am $(srcdir)/tests/Makefrag.am
$(srcdir)/doc/Makefrag.am:
+
+$(top_builddir)/config.status: $(top_srcdir)/configure
$(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+ @if test ! -f $@; then rm -f stamp-h1; else :; fi
+ @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+ @rm -f stamp-h1
+ cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in: $(am__configure_deps)
+ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+ rm -f stamp-h1
+ touch $@
+
+distclean-hdr:
+ -rm -f config.h stamp-h1
+tests/test-mbchk: $(top_builddir)/config.status
$(top_srcdir)/tests/test-mbchk.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+version.c: $(top_builddir)/config.status $(srcdir)/version.c.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
+
+clean-noinstLIBRARIES:
+ -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+vm/$(am__dirstamp):
+ @$(MKDIR_P) vm
+ @: > vm/$(am__dirstamp)
+vm/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) vm/$(DEPDIR)
+ @: > vm/$(DEPDIR)/$(am__dirstamp)
+vm/lib_dep_tr_for_defs_a-memory_object_user.user.defs.$(OBJEXT): \
+ vm/$(am__dirstamp) vm/$(DEPDIR)/$(am__dirstamp)
+vm/lib_dep_tr_for_defs_a-memory_object_default.user.defs.$(OBJEXT): \
+ vm/$(am__dirstamp) vm/$(DEPDIR)/$(am__dirstamp)
+device/$(am__dirstamp):
+ @$(MKDIR_P) device
+ @: > device/$(am__dirstamp)
+device/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) device/$(DEPDIR)
+ @: > device/$(DEPDIR)/$(am__dirstamp)
+device/lib_dep_tr_for_defs_a-device_reply.user.defs.$(OBJEXT): \
+ device/$(am__dirstamp) device/$(DEPDIR)/$(am__dirstamp)
+device/lib_dep_tr_for_defs_a-memory_object_reply.user.defs.$(OBJEXT): \
+ device/$(am__dirstamp) device/$(DEPDIR)/$(am__dirstamp)
+device/lib_dep_tr_for_defs_a-device.server.defs.$(OBJEXT): \
+ device/$(am__dirstamp) device/$(DEPDIR)/$(am__dirstamp)
+device/lib_dep_tr_for_defs_a-device_pager.server.defs.$(OBJEXT): \
+ device/$(am__dirstamp) device/$(DEPDIR)/$(am__dirstamp)
+ipc/$(am__dirstamp):
+ @$(MKDIR_P) ipc
+ @: > ipc/$(am__dirstamp)
+ipc/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) ipc/$(DEPDIR)
+ @: > ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/lib_dep_tr_for_defs_a-mach_port.server.defs.$(OBJEXT): \
+ ipc/$(am__dirstamp) ipc/$(DEPDIR)/$(am__dirstamp)
+kern/$(am__dirstamp):
+ @$(MKDIR_P) kern
+ @: > kern/$(am__dirstamp)
+kern/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) kern/$(DEPDIR)
+ @: > kern/$(DEPDIR)/$(am__dirstamp)
+kern/lib_dep_tr_for_defs_a-mach.server.defs.$(OBJEXT): \
+ kern/$(am__dirstamp) kern/$(DEPDIR)/$(am__dirstamp)
+kern/lib_dep_tr_for_defs_a-mach4.server.defs.$(OBJEXT): \
+ kern/$(am__dirstamp) kern/$(DEPDIR)/$(am__dirstamp)
+kern/lib_dep_tr_for_defs_a-gnumach.server.defs.$(OBJEXT): \
+ kern/$(am__dirstamp) kern/$(DEPDIR)/$(am__dirstamp)
+kern/lib_dep_tr_for_defs_a-mach_debug.server.defs.$(OBJEXT): \
+ kern/$(am__dirstamp) kern/$(DEPDIR)/$(am__dirstamp)
+kern/lib_dep_tr_for_defs_a-mach_host.server.defs.$(OBJEXT): \
+ kern/$(am__dirstamp) kern/$(DEPDIR)/$(am__dirstamp)
+i386/i386/$(am__dirstamp):
+ @$(MKDIR_P) i386/i386
+ @: > i386/i386/$(am__dirstamp)
+i386/i386/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) i386/i386/$(DEPDIR)
+ @: > i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/lib_dep_tr_for_defs_a-mach_i386.server.defs.$(OBJEXT): \
+ i386/i386/$(am__dirstamp) i386/i386/$(DEPDIR)/$(am__dirstamp)
+
+lib_dep_tr_for_defs.a: $(lib_dep_tr_for_defs_a_OBJECTS)
$(lib_dep_tr_for_defs_a_DEPENDENCIES)
$(EXTRA_lib_dep_tr_for_defs_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f lib_dep_tr_for_defs.a
+ $(AM_V_AR)$(lib_dep_tr_for_defs_a_AR) lib_dep_tr_for_defs.a
$(lib_dep_tr_for_defs_a_OBJECTS) $(lib_dep_tr_for_defs_a_LIBADD)
+ $(AM_V_at)$(RANLIB) lib_dep_tr_for_defs.a
+ddb/$(am__dirstamp):
+ @$(MKDIR_P) ddb
+ @: > ddb/$(am__dirstamp)
+ddb/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) ddb/$(DEPDIR)
+ @: > ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_access.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_aout.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_break.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_command.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_cond.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_examine.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_expr.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_ext_symtab.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_input.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_lex.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_macro.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_mp.$(OBJEXT): ddb/$(am__dirstamp) ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_output.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_print.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_run.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_sym.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_task_thread.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_trap.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_variables.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_watch.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ddb/db_write_cmd.$(OBJEXT): ddb/$(am__dirstamp) \
+ ddb/$(DEPDIR)/$(am__dirstamp)
+ipc/ipc_entry.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/ipc_hash.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/ipc_init.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/ipc_kmsg.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/ipc_marequest.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/ipc_mqueue.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/ipc_notify.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/ipc_object.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/ipc_port.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/ipc_pset.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/ipc_right.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/ipc_space.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/ipc_splay.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/ipc_table.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/ipc_target.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/ipc_thread.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/mach_msg.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/mach_port.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/mach_rpc.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+ipc/mach_debug.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+kern/act.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/ast.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/bootstrap.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/counters.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/debug.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/eventcount.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/exception.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/host.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/ipc_host.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/ipc_kobject.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/ipc_mig.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/ipc_sched.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/ipc_tt.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/lock.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/lock_mon.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/mach_clock.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/mach_factor.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/machine.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/pc_sample.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/printf.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/priority.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/processor.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/profile.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/queue.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/rbtree.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/slab.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/sched_prim.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/startup.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/strings.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/syscall_emulation.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/syscall_subr.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/syscall_sw.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/task.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/thread.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/thread_swap.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/time_stamp.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/timer.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/xpr.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/elf-load.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/boot_script.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+util/$(am__dirstamp):
+ @$(MKDIR_P) util
+ @: > util/$(am__dirstamp)
+util/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) util/$(DEPDIR)
+ @: > util/$(DEPDIR)/$(am__dirstamp)
+util/putchar.$(OBJEXT): util/$(am__dirstamp) \
+ util/$(DEPDIR)/$(am__dirstamp)
+util/puts.$(OBJEXT): util/$(am__dirstamp) \
+ util/$(DEPDIR)/$(am__dirstamp)
+util/atoi.$(OBJEXT): util/$(am__dirstamp) \
+ util/$(DEPDIR)/$(am__dirstamp)
+vm/memory_object_proxy.$(OBJEXT): vm/$(am__dirstamp) \
+ vm/$(DEPDIR)/$(am__dirstamp)
+vm/memory_object.$(OBJEXT): vm/$(am__dirstamp) \
+ vm/$(DEPDIR)/$(am__dirstamp)
+vm/vm_debug.$(OBJEXT): vm/$(am__dirstamp) vm/$(DEPDIR)/$(am__dirstamp)
+vm/vm_external.$(OBJEXT): vm/$(am__dirstamp) \
+ vm/$(DEPDIR)/$(am__dirstamp)
+vm/vm_fault.$(OBJEXT): vm/$(am__dirstamp) vm/$(DEPDIR)/$(am__dirstamp)
+vm/vm_init.$(OBJEXT): vm/$(am__dirstamp) vm/$(DEPDIR)/$(am__dirstamp)
+vm/vm_kern.$(OBJEXT): vm/$(am__dirstamp) vm/$(DEPDIR)/$(am__dirstamp)
+vm/vm_map.$(OBJEXT): vm/$(am__dirstamp) vm/$(DEPDIR)/$(am__dirstamp)
+vm/vm_object.$(OBJEXT): vm/$(am__dirstamp) \
+ vm/$(DEPDIR)/$(am__dirstamp)
+vm/vm_pageout.$(OBJEXT): vm/$(am__dirstamp) \
+ vm/$(DEPDIR)/$(am__dirstamp)
+vm/vm_resident.$(OBJEXT): vm/$(am__dirstamp) \
+ vm/$(DEPDIR)/$(am__dirstamp)
+vm/vm_user.$(OBJEXT): vm/$(am__dirstamp) vm/$(DEPDIR)/$(am__dirstamp)
+device/blkio.$(OBJEXT): device/$(am__dirstamp) \
+ device/$(DEPDIR)/$(am__dirstamp)
+device/chario.$(OBJEXT): device/$(am__dirstamp) \
+ device/$(DEPDIR)/$(am__dirstamp)
+device/cons.$(OBJEXT): device/$(am__dirstamp) \
+ device/$(DEPDIR)/$(am__dirstamp)
+device/dev_lookup.$(OBJEXT): device/$(am__dirstamp) \
+ device/$(DEPDIR)/$(am__dirstamp)
+device/dev_name.$(OBJEXT): device/$(am__dirstamp) \
+ device/$(DEPDIR)/$(am__dirstamp)
+device/dev_pager.$(OBJEXT): device/$(am__dirstamp) \
+ device/$(DEPDIR)/$(am__dirstamp)
+device/device_init.$(OBJEXT): device/$(am__dirstamp) \
+ device/$(DEPDIR)/$(am__dirstamp)
+device/ds_routines.$(OBJEXT): device/$(am__dirstamp) \
+ device/$(DEPDIR)/$(am__dirstamp)
+device/net_io.$(OBJEXT): device/$(am__dirstamp) \
+ device/$(DEPDIR)/$(am__dirstamp)
+device/subrs.$(OBJEXT): device/$(am__dirstamp) \
+ device/$(DEPDIR)/$(am__dirstamp)
+device/kmsg.$(OBJEXT): device/$(am__dirstamp) \
+ device/$(DEPDIR)/$(am__dirstamp)
+xen/$(am__dirstamp):
+ @$(MKDIR_P) xen
+ @: > xen/$(am__dirstamp)
+xen/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) xen/$(DEPDIR)
+ @: > xen/$(DEPDIR)/$(am__dirstamp)
+xen/block.$(OBJEXT): xen/$(am__dirstamp) xen/$(DEPDIR)/$(am__dirstamp)
+xen/console.$(OBJEXT): xen/$(am__dirstamp) \
+ xen/$(DEPDIR)/$(am__dirstamp)
+xen/evt.$(OBJEXT): xen/$(am__dirstamp) xen/$(DEPDIR)/$(am__dirstamp)
+xen/grant.$(OBJEXT): xen/$(am__dirstamp) xen/$(DEPDIR)/$(am__dirstamp)
+xen/net.$(OBJEXT): xen/$(am__dirstamp) xen/$(DEPDIR)/$(am__dirstamp)
+xen/ring.$(OBJEXT): xen/$(am__dirstamp) xen/$(DEPDIR)/$(am__dirstamp)
+xen/store.$(OBJEXT): xen/$(am__dirstamp) xen/$(DEPDIR)/$(am__dirstamp)
+xen/time.$(OBJEXT): xen/$(am__dirstamp) xen/$(DEPDIR)/$(am__dirstamp)
+xen/xen.$(OBJEXT): xen/$(am__dirstamp) xen/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/$(am__dirstamp):
+ @$(MKDIR_P) i386/i386at
+ @: > i386/i386at/$(am__dirstamp)
+i386/i386at/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) i386/i386at/$(DEPDIR)
+ @: > i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/autoconf.$(OBJEXT): i386/i386at/$(am__dirstamp) \
+ i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/conf.$(OBJEXT): i386/i386at/$(am__dirstamp) \
+ i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/cons_conf.$(OBJEXT): i386/i386at/$(am__dirstamp) \
+ i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/model_dep.$(OBJEXT): i386/i386at/$(am__dirstamp) \
+ i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/boothdr.$(OBJEXT): i386/i386at/$(am__dirstamp) \
+ i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/com.$(OBJEXT): i386/i386at/$(am__dirstamp) \
+ i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/immc.$(OBJEXT): i386/i386at/$(am__dirstamp) \
+ i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/int_init.$(OBJEXT): i386/i386at/$(am__dirstamp) \
+ i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/interrupt.$(OBJEXT): i386/i386at/$(am__dirstamp) \
+ i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/kd.$(OBJEXT): i386/i386at/$(am__dirstamp) \
+ i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/kd_event.$(OBJEXT): i386/i386at/$(am__dirstamp) \
+ i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/kd_queue.$(OBJEXT): i386/i386at/$(am__dirstamp) \
+ i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/kd_mouse.$(OBJEXT): i386/i386at/$(am__dirstamp) \
+ i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/kdasm.$(OBJEXT): i386/i386at/$(am__dirstamp) \
+ i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/mem.$(OBJEXT): i386/i386at/$(am__dirstamp) \
+ i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/pic_isa.$(OBJEXT): i386/i386at/$(am__dirstamp) \
+ i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/rtc.$(OBJEXT): i386/i386at/$(am__dirstamp) \
+ i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386at/lpr.$(OBJEXT): i386/i386at/$(am__dirstamp) \
+ i386/i386at/$(DEPDIR)/$(am__dirstamp)
+i386/i386/ast_check.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/cswitch.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/db_disasm.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/db_interface.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/db_trace.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/debug_i386.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/debug_trace.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/fpu.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/gdt.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/idt.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/idt_inittab.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/io_perm.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/ktss.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/kttd_interface.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/ldt.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/locore.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/loose_ends.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/machine_task.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/mp_desc.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/pcb.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/phys.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/seg.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/spl.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/trap.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/user_ldt.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/intel/$(am__dirstamp):
+ @$(MKDIR_P) i386/intel
+ @: > i386/intel/$(am__dirstamp)
+i386/intel/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) i386/intel/$(DEPDIR)
+ @: > i386/intel/$(DEPDIR)/$(am__dirstamp)
+i386/intel/pmap.$(OBJEXT): i386/intel/$(am__dirstamp) \
+ i386/intel/$(DEPDIR)/$(am__dirstamp)
+i386/intel/read_fault.$(OBJEXT): i386/intel/$(am__dirstamp) \
+ i386/intel/$(DEPDIR)/$(am__dirstamp)
+i386/i386/hardclock.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/io_map.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/pic.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/pit.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+i386/i386/_setjmp.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+chips/$(am__dirstamp):
+ @$(MKDIR_P) chips
+ @: > chips/$(am__dirstamp)
+chips/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) chips/$(DEPDIR)
+ @: > chips/$(DEPDIR)/$(am__dirstamp)
+chips/busses.$(OBJEXT): chips/$(am__dirstamp) \
+ chips/$(DEPDIR)/$(am__dirstamp)
+device/cirbuf.$(OBJEXT): device/$(am__dirstamp) \
+ device/$(DEPDIR)/$(am__dirstamp)
+i386/xen/$(am__dirstamp):
+ @$(MKDIR_P) i386/xen
+ @: > i386/xen/$(am__dirstamp)
+i386/xen/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) i386/xen/$(DEPDIR)
+ @: > i386/xen/$(DEPDIR)/$(am__dirstamp)
+i386/xen/xen.$(OBJEXT): i386/xen/$(am__dirstamp) \
+ i386/xen/$(DEPDIR)/$(am__dirstamp)
+i386/xen/xen_locore.$(OBJEXT): i386/xen/$(am__dirstamp) \
+ i386/xen/$(DEPDIR)/$(am__dirstamp)
+i386/xen/xen_boothdr.$(OBJEXT): i386/xen/$(am__dirstamp) \
+ i386/xen/$(DEPDIR)/$(am__dirstamp)
+vm/memory_object_user.user.$(OBJEXT): vm/$(am__dirstamp) \
+ vm/$(DEPDIR)/$(am__dirstamp)
+vm/memory_object_default.user.$(OBJEXT): vm/$(am__dirstamp) \
+ vm/$(DEPDIR)/$(am__dirstamp)
+device/device_reply.user.$(OBJEXT): device/$(am__dirstamp) \
+ device/$(DEPDIR)/$(am__dirstamp)
+device/memory_object_reply.user.$(OBJEXT): device/$(am__dirstamp) \
+ device/$(DEPDIR)/$(am__dirstamp)
+device/device.server.$(OBJEXT): device/$(am__dirstamp) \
+ device/$(DEPDIR)/$(am__dirstamp)
+device/device_pager.server.$(OBJEXT): device/$(am__dirstamp) \
+ device/$(DEPDIR)/$(am__dirstamp)
+ipc/mach_port.server.$(OBJEXT): ipc/$(am__dirstamp) \
+ ipc/$(DEPDIR)/$(am__dirstamp)
+kern/mach.server.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/mach4.server.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/gnumach.server.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/mach_debug.server.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+kern/mach_host.server.$(OBJEXT): kern/$(am__dirstamp) \
+ kern/$(DEPDIR)/$(am__dirstamp)
+i386/i386/mach_i386.server.$(OBJEXT): i386/i386/$(am__dirstamp) \
+ i386/i386/$(DEPDIR)/$(am__dirstamp)
+
+libkernel.a: $(libkernel_a_OBJECTS) $(libkernel_a_DEPENDENCIES)
$(EXTRA_libkernel_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f libkernel.a
+ $(AM_V_AR)$(libkernel_a_AR) libkernel.a $(libkernel_a_OBJECTS)
$(libkernel_a_LIBADD)
+ $(AM_V_at)$(RANLIB) libkernel.a
+linux/dev/init/$(am__dirstamp):
+ @$(MKDIR_P) linux/dev/init
+ @: > linux/dev/init/$(am__dirstamp)
+linux/dev/init/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/dev/init/$(DEPDIR)
+ @: > linux/dev/init/$(DEPDIR)/$(am__dirstamp)
+linux/dev/init/liblinux_a-version.$(OBJEXT): \
+ linux/dev/init/$(am__dirstamp) \
+ linux/dev/init/$(DEPDIR)/$(am__dirstamp)
+linux/dev/kernel/$(am__dirstamp):
+ @$(MKDIR_P) linux/dev/kernel
+ @: > linux/dev/kernel/$(am__dirstamp)
+linux/dev/kernel/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/dev/kernel/$(DEPDIR)
+ @: > linux/dev/kernel/$(DEPDIR)/$(am__dirstamp)
+linux/dev/kernel/liblinux_a-softirq.$(OBJEXT): \
+ linux/dev/kernel/$(am__dirstamp) \
+ linux/dev/kernel/$(DEPDIR)/$(am__dirstamp)
+linux/src/arch/i386/lib/$(am__dirstamp):
+ @$(MKDIR_P) linux/src/arch/i386/lib
+ @: > linux/src/arch/i386/lib/$(am__dirstamp)
+linux/src/arch/i386/lib/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/src/arch/i386/lib/$(DEPDIR)
+ @: > linux/src/arch/i386/lib/$(DEPDIR)/$(am__dirstamp)
+linux/src/arch/i386/lib/liblinux_a-delay.$(OBJEXT): \
+ linux/src/arch/i386/lib/$(am__dirstamp) \
+ linux/src/arch/i386/lib/$(DEPDIR)/$(am__dirstamp)
+linux/dev/kernel/liblinux_a-dma.$(OBJEXT): \
+ linux/dev/kernel/$(am__dirstamp) \
+ linux/dev/kernel/$(DEPDIR)/$(am__dirstamp)
+linux/dev/kernel/liblinux_a-resource.$(OBJEXT): \
+ linux/dev/kernel/$(am__dirstamp) \
+ linux/dev/kernel/$(DEPDIR)/$(am__dirstamp)
+linux/dev/kernel/liblinux_a-printk.$(OBJEXT): \
+ linux/dev/kernel/$(am__dirstamp) \
+ linux/dev/kernel/$(DEPDIR)/$(am__dirstamp)
+linux/src/arch/i386/kernel/$(am__dirstamp):
+ @$(MKDIR_P) linux/src/arch/i386/kernel
+ @: > linux/src/arch/i386/kernel/$(am__dirstamp)
+linux/src/arch/i386/kernel/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/src/arch/i386/kernel/$(DEPDIR)
+ @: > linux/src/arch/i386/kernel/$(DEPDIR)/$(am__dirstamp)
+linux/src/arch/i386/kernel/liblinux_a-bios32.$(OBJEXT): \
+ linux/src/arch/i386/kernel/$(am__dirstamp) \
+ linux/src/arch/i386/kernel/$(DEPDIR)/$(am__dirstamp)
+linux/dev/arch/i386/kernel/$(am__dirstamp):
+ @$(MKDIR_P) linux/dev/arch/i386/kernel
+ @: > linux/dev/arch/i386/kernel/$(am__dirstamp)
+linux/dev/arch/i386/kernel/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/dev/arch/i386/kernel/$(DEPDIR)
+ @: > linux/dev/arch/i386/kernel/$(DEPDIR)/$(am__dirstamp)
+linux/dev/arch/i386/kernel/liblinux_a-irq.$(OBJEXT): \
+ linux/dev/arch/i386/kernel/$(am__dirstamp) \
+ linux/dev/arch/i386/kernel/$(DEPDIR)/$(am__dirstamp)
+linux/src/lib/$(am__dirstamp):
+ @$(MKDIR_P) linux/src/lib
+ @: > linux/src/lib/$(am__dirstamp)
+linux/src/lib/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/src/lib/$(DEPDIR)
+ @: > linux/src/lib/$(DEPDIR)/$(am__dirstamp)
+linux/src/lib/liblinux_a-ctype.$(OBJEXT): \
+ linux/src/lib/$(am__dirstamp) \
+ linux/src/lib/$(DEPDIR)/$(am__dirstamp)
+linux/dev/lib/$(am__dirstamp):
+ @$(MKDIR_P) linux/dev/lib
+ @: > linux/dev/lib/$(am__dirstamp)
+linux/dev/lib/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/dev/lib/$(DEPDIR)
+ @: > linux/dev/lib/$(DEPDIR)/$(am__dirstamp)
+linux/dev/lib/liblinux_a-vsprintf.$(OBJEXT): \
+ linux/dev/lib/$(am__dirstamp) \
+ linux/dev/lib/$(DEPDIR)/$(am__dirstamp)
+linux/dev/init/liblinux_a-main.$(OBJEXT): \
+ linux/dev/init/$(am__dirstamp) \
+ linux/dev/init/$(DEPDIR)/$(am__dirstamp)
+linux/dev/glue/$(am__dirstamp):
+ @$(MKDIR_P) linux/dev/glue
+ @: > linux/dev/glue/$(am__dirstamp)
+linux/dev/glue/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/dev/glue/$(DEPDIR)
+ @: > linux/dev/glue/$(DEPDIR)/$(am__dirstamp)
+linux/dev/glue/liblinux_a-misc.$(OBJEXT): \
+ linux/dev/glue/$(am__dirstamp) \
+ linux/dev/glue/$(DEPDIR)/$(am__dirstamp)
+linux/dev/kernel/liblinux_a-sched.$(OBJEXT): \
+ linux/dev/kernel/$(am__dirstamp) \
+ linux/dev/kernel/$(DEPDIR)/$(am__dirstamp)
+linux/dev/glue/liblinux_a-kmem.$(OBJEXT): \
+ linux/dev/glue/$(am__dirstamp) \
+ linux/dev/glue/$(DEPDIR)/$(am__dirstamp)
+linux/dev/glue/liblinux_a-block.$(OBJEXT): \
+ linux/dev/glue/$(am__dirstamp) \
+ linux/dev/glue/$(DEPDIR)/$(am__dirstamp)
+linux/dev/arch/i386/kernel/liblinux_a-setup.$(OBJEXT): \
+ linux/dev/arch/i386/kernel/$(am__dirstamp) \
+ linux/dev/arch/i386/kernel/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/pci/$(am__dirstamp):
+ @$(MKDIR_P) linux/src/drivers/pci
+ @: > linux/src/drivers/pci/$(am__dirstamp)
+linux/src/drivers/pci/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/src/drivers/pci/$(DEPDIR)
+ @: > linux/src/drivers/pci/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/pci/liblinux_a-pci.$(OBJEXT): \
+ linux/src/drivers/pci/$(am__dirstamp) \
+ linux/src/drivers/pci/$(DEPDIR)/$(am__dirstamp)
+linux/dev/drivers/block/$(am__dirstamp):
+ @$(MKDIR_P) linux/dev/drivers/block
+ @: > linux/dev/drivers/block/$(am__dirstamp)
+linux/dev/drivers/block/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/dev/drivers/block/$(DEPDIR)
+ @: > linux/dev/drivers/block/$(DEPDIR)/$(am__dirstamp)
+linux/dev/drivers/block/liblinux_a-genhd.$(OBJEXT): \
+ linux/dev/drivers/block/$(am__dirstamp) \
+ linux/dev/drivers/block/$(DEPDIR)/$(am__dirstamp)
+linux/dev/drivers/block/liblinux_a-floppy.$(OBJEXT): \
+ linux/dev/drivers/block/$(am__dirstamp) \
+ linux/dev/drivers/block/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/block/$(am__dirstamp):
+ @$(MKDIR_P) linux/src/drivers/block
+ @: > linux/src/drivers/block/$(am__dirstamp)
+linux/src/drivers/block/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/src/drivers/block/$(DEPDIR)
+ @: > linux/src/drivers/block/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/block/liblinux_a-cmd640.$(OBJEXT): \
+ linux/src/drivers/block/$(am__dirstamp) \
+ linux/src/drivers/block/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/block/liblinux_a-ide-cd.$(OBJEXT): \
+ linux/src/drivers/block/$(am__dirstamp) \
+ linux/src/drivers/block/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/block/liblinux_a-ide.$(OBJEXT): \
+ linux/src/drivers/block/$(am__dirstamp) \
+ linux/src/drivers/block/$(DEPDIR)/$(am__dirstamp)
+linux/dev/drivers/block/liblinux_a-ahci.$(OBJEXT): \
+ linux/dev/drivers/block/$(am__dirstamp) \
+ linux/dev/drivers/block/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/block/liblinux_a-rz1000.$(OBJEXT): \
+ linux/src/drivers/block/$(am__dirstamp) \
+ linux/src/drivers/block/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/block/liblinux_a-triton.$(OBJEXT): \
+ linux/src/drivers/block/$(am__dirstamp) \
+ linux/src/drivers/block/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/$(am__dirstamp):
+ @$(MKDIR_P) linux/src/drivers/scsi
+ @: > linux/src/drivers/scsi/$(am__dirstamp)
+linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/src/drivers/scsi/$(DEPDIR)
+ @: > linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-constants.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-hosts.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-scsi.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-scsi_ioctl.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-scsi_proc.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-scsicam.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-sd.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-sd_ioctl.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-sr.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-sr_ioctl.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-53c78xx.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-AM53C974.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-BusLogic.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-NCR53c406a.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-advansys.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-aha152x.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-aha1542.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-aha1740.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-aic7xxx.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-dtc.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-eata.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/dev/drivers/scsi/$(am__dirstamp):
+ @$(MKDIR_P) linux/dev/drivers/scsi
+ @: > linux/dev/drivers/scsi/$(am__dirstamp)
+linux/dev/drivers/scsi/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/dev/drivers/scsi/$(DEPDIR)
+ @: > linux/dev/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/dev/drivers/scsi/liblinux_a-eata_dma.$(OBJEXT): \
+ linux/dev/drivers/scsi/$(am__dirstamp) \
+ linux/dev/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-eata_pio.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-fdomain.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/dev/drivers/scsi/liblinux_a-g_NCR5380.$(OBJEXT): \
+ linux/dev/drivers/scsi/$(am__dirstamp) \
+ linux/dev/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-gdth.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-in2000.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-ncr53c8xx.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-pas16.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-ppa.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-qlogicfas.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-qlogicisp.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-seagate.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-sym53c8xx.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-t128.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-tmscsim.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-u14-34f.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-ultrastor.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/scsi/liblinux_a-wd7000.$(OBJEXT): \
+ linux/src/drivers/scsi/$(am__dirstamp) \
+ linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+linux/dev/drivers/net/$(am__dirstamp):
+ @$(MKDIR_P) linux/dev/drivers/net
+ @: > linux/dev/drivers/net/$(am__dirstamp)
+linux/dev/drivers/net/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/dev/drivers/net/$(DEPDIR)
+ @: > linux/dev/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/dev/drivers/net/liblinux_a-auto_irq.$(OBJEXT): \
+ linux/dev/drivers/net/$(am__dirstamp) \
+ linux/dev/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/dev/glue/liblinux_a-net.$(OBJEXT): \
+ linux/dev/glue/$(am__dirstamp) \
+ linux/dev/glue/$(DEPDIR)/$(am__dirstamp)
+linux/dev/drivers/net/liblinux_a-Space.$(OBJEXT): \
+ linux/dev/drivers/net/$(am__dirstamp) \
+ linux/dev/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/dev/net/core/$(am__dirstamp):
+ @$(MKDIR_P) linux/dev/net/core
+ @: > linux/dev/net/core/$(am__dirstamp)
+linux/dev/net/core/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/dev/net/core/$(DEPDIR)
+ @: > linux/dev/net/core/$(DEPDIR)/$(am__dirstamp)
+linux/dev/net/core/liblinux_a-dev.$(OBJEXT): \
+ linux/dev/net/core/$(am__dirstamp) \
+ linux/dev/net/core/$(DEPDIR)/$(am__dirstamp)
+linux/dev/drivers/net/liblinux_a-net_init.$(OBJEXT): \
+ linux/dev/drivers/net/$(am__dirstamp) \
+ linux/dev/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/$(am__dirstamp):
+ @$(MKDIR_P) linux/src/drivers/net
+ @: > linux/src/drivers/net/$(am__dirstamp)
+linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/src/drivers/net/$(DEPDIR)
+ @: > linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-pci-scan.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-3c501.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-3c503.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-8390.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-3c505.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-3c507.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-3c509.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-3c59x.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-3c515.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-ac3200.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-apricot.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-at1700.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-atp.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-de4x5.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-de600.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-de620.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-depca.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-e2100.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-eepro.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-eepro100.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-eexpress.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-epic100.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-eth16i.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-ewrk3.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-fmv18x.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-hamachi.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-hp-plus.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-hp.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-hp100.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-intel-gige.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-lance.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-myson803.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-natsemi.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-ne.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-ne2k-pci.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-ni52.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-ni65.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-ns820.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-pcnet32.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-rtl8139.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-seeq8005.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-sis900.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-sk_g16.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-smc-ultra.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-smc-ultra32.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-starfire.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-sundance.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-tlan.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-tulip.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-via-rhine.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-wavelan.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-wd.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-winbond-840.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-yellowfin.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_a-znet.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/src/arch/i386/lib/liblinux_a-semaphore.$(OBJEXT): \
+ linux/src/arch/i386/lib/$(am__dirstamp) \
+ linux/src/arch/i386/lib/$(DEPDIR)/$(am__dirstamp)
+
+liblinux.a: $(liblinux_a_OBJECTS) $(liblinux_a_DEPENDENCIES)
$(EXTRA_liblinux_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f liblinux.a
+ $(AM_V_AR)$(liblinux_a_AR) liblinux.a $(liblinux_a_OBJECTS)
$(liblinux_a_LIBADD)
+ $(AM_V_at)$(RANLIB) liblinux.a
+linux/pcmcia-cs/clients/$(am__dirstamp):
+ @$(MKDIR_P) linux/pcmcia-cs/clients
+ @: > linux/pcmcia-cs/clients/$(am__dirstamp)
+linux/pcmcia-cs/clients/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/pcmcia-cs/clients/$(DEPDIR)
+ @: > linux/pcmcia-cs/clients/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c574_cs.$(OBJEXT): \
+ linux/pcmcia-cs/clients/$(am__dirstamp) \
+ linux/pcmcia-cs/clients/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c589_cs.$(OBJEXT): \
+ linux/pcmcia-cs/clients/$(am__dirstamp) \
+ linux/pcmcia-cs/clients/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-axnet_cs.$(OBJEXT): \
+ linux/pcmcia-cs/clients/$(am__dirstamp) \
+ linux/pcmcia-cs/clients/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-fmvj18x_cs.$(OBJEXT): \
+ linux/pcmcia-cs/clients/$(am__dirstamp) \
+ linux/pcmcia-cs/clients/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-nmclan_cs.$(OBJEXT): \
+ linux/pcmcia-cs/clients/$(am__dirstamp) \
+ linux/pcmcia-cs/clients/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-pcnet_cs.$(OBJEXT): \
+ linux/pcmcia-cs/clients/$(am__dirstamp) \
+ linux/pcmcia-cs/clients/$(DEPDIR)/$(am__dirstamp)
+linux/src/drivers/net/liblinux_pcmcia_cs_clients_a-8390.$(OBJEXT): \
+ linux/src/drivers/net/$(am__dirstamp) \
+ linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-smc91c92_cs.$(OBJEXT): \
+ linux/pcmcia-cs/clients/$(am__dirstamp) \
+ linux/pcmcia-cs/clients/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-xirc2ps_cs.$(OBJEXT): \
+ linux/pcmcia-cs/clients/$(am__dirstamp) \
+ linux/pcmcia-cs/clients/$(DEPDIR)/$(am__dirstamp)
+
+liblinux_pcmcia_cs_clients.a: $(liblinux_pcmcia_cs_clients_a_OBJECTS)
$(liblinux_pcmcia_cs_clients_a_DEPENDENCIES)
$(EXTRA_liblinux_pcmcia_cs_clients_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f liblinux_pcmcia_cs_clients.a
+ $(AM_V_AR)$(liblinux_pcmcia_cs_clients_a_AR)
liblinux_pcmcia_cs_clients.a $(liblinux_pcmcia_cs_clients_a_OBJECTS)
$(liblinux_pcmcia_cs_clients_a_LIBADD)
+ $(AM_V_at)$(RANLIB) liblinux_pcmcia_cs_clients.a
+linux/pcmcia-cs/glue/$(am__dirstamp):
+ @$(MKDIR_P) linux/pcmcia-cs/glue
+ @: > linux/pcmcia-cs/glue/$(am__dirstamp)
+linux/pcmcia-cs/glue/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/pcmcia-cs/glue/$(DEPDIR)
+ @: > linux/pcmcia-cs/glue/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/glue/liblinux_pcmcia_cs_modules_a-pcmcia.$(OBJEXT): \
+ linux/pcmcia-cs/glue/$(am__dirstamp) \
+ linux/pcmcia-cs/glue/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/modules/$(am__dirstamp):
+ @$(MKDIR_P) linux/pcmcia-cs/modules
+ @: > linux/pcmcia-cs/modules/$(am__dirstamp)
+linux/pcmcia-cs/modules/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/pcmcia-cs/modules/$(DEPDIR)
+ @: > linux/pcmcia-cs/modules/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cs.$(OBJEXT): \
+ linux/pcmcia-cs/modules/$(am__dirstamp) \
+ linux/pcmcia-cs/modules/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-ds.$(OBJEXT): \
+ linux/pcmcia-cs/modules/$(am__dirstamp) \
+ linux/pcmcia-cs/modules/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-rsrc_mgr.$(OBJEXT): \
+ linux/pcmcia-cs/modules/$(am__dirstamp) \
+ linux/pcmcia-cs/modules/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-bulkmem.$(OBJEXT): \
+ linux/pcmcia-cs/modules/$(am__dirstamp) \
+ linux/pcmcia-cs/modules/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cistpl.$(OBJEXT): \
+ linux/pcmcia-cs/modules/$(am__dirstamp) \
+ linux/pcmcia-cs/modules/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-pci_fixup.$(OBJEXT): \
+ linux/pcmcia-cs/modules/$(am__dirstamp) \
+ linux/pcmcia-cs/modules/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-i82365.$(OBJEXT): \
+ linux/pcmcia-cs/modules/$(am__dirstamp) \
+ linux/pcmcia-cs/modules/$(DEPDIR)/$(am__dirstamp)
+
+liblinux_pcmcia_cs_modules.a: $(liblinux_pcmcia_cs_modules_a_OBJECTS)
$(liblinux_pcmcia_cs_modules_a_DEPENDENCIES)
$(EXTRA_liblinux_pcmcia_cs_modules_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f liblinux_pcmcia_cs_modules.a
+ $(AM_V_AR)$(liblinux_pcmcia_cs_modules_a_AR)
liblinux_pcmcia_cs_modules.a $(liblinux_pcmcia_cs_modules_a_OBJECTS)
$(liblinux_pcmcia_cs_modules_a_LIBADD)
+ $(AM_V_at)$(RANLIB) liblinux_pcmcia_cs_modules.a
+linux/pcmcia-cs/wireless/$(am__dirstamp):
+ @$(MKDIR_P) linux/pcmcia-cs/wireless
+ @: > linux/pcmcia-cs/wireless/$(am__dirstamp)
+linux/pcmcia-cs/wireless/$(DEPDIR)/$(am__dirstamp):
+ @$(MKDIR_P) linux/pcmcia-cs/wireless/$(DEPDIR)
+ @: > linux/pcmcia-cs/wireless/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-hermes.$(OBJEXT): \
+ linux/pcmcia-cs/wireless/$(am__dirstamp) \
+ linux/pcmcia-cs/wireless/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco.$(OBJEXT): \
+ linux/pcmcia-cs/wireless/$(am__dirstamp) \
+ linux/pcmcia-cs/wireless/$(DEPDIR)/$(am__dirstamp)
+linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco_cs.$(OBJEXT): \
+ linux/pcmcia-cs/wireless/$(am__dirstamp) \
+ linux/pcmcia-cs/wireless/$(DEPDIR)/$(am__dirstamp)
+
+liblinux_pcmcia_cs_wireless.a: $(liblinux_pcmcia_cs_wireless_a_OBJECTS)
$(liblinux_pcmcia_cs_wireless_a_DEPENDENCIES)
$(EXTRA_liblinux_pcmcia_cs_wireless_a_DEPENDENCIES)
+ $(AM_V_at)-rm -f liblinux_pcmcia_cs_wireless.a
+ $(AM_V_AR)$(liblinux_pcmcia_cs_wireless_a_AR)
liblinux_pcmcia_cs_wireless.a $(liblinux_pcmcia_cs_wireless_a_OBJECTS)
$(liblinux_pcmcia_cs_wireless_a_LIBADD)
+ $(AM_V_at)$(RANLIB) liblinux_pcmcia_cs_wireless.a
+install-exec_bootPROGRAMS: $(exec_boot_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ @list='$(exec_boot_PROGRAMS)'; test -n "$(exec_bootdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(exec_bootdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(exec_bootdir)" || exit 1; \
+ fi; \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed 's/$(EXEEXT)$$//' | \
+ while read p p1; do if test -f $$p \
+ ; then echo "$$p"; echo "$$p"; else :; fi; \
+ done | \
+ sed -e 'p;s,.*/,,;n;h' \
+ -e 's|.*|.|' \
+ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+ sed 'N;N;N;s,\n, ,g' | \
+ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+ if ($$2 == $$4) files[d] = files[d] " " $$1; \
+ else { print "f", $$3 "/" $$4, $$1; } } \
+ END { for (d in files) print "f", d, files[d] }' | \
+ while read type dir files; do \
+ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+ test -z "$$files" || { \
+ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files
'$(DESTDIR)$(exec_bootdir)$$dir'"; \
+ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files
"$(DESTDIR)$(exec_bootdir)$$dir" || exit $$?; \
+ } \
+ ; done
+
+uninstall-exec_bootPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(exec_boot_PROGRAMS)'; test -n "$(exec_bootdir)" || list=; \
+ files=`for p in $$list; do echo "$$p"; done | \
+ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+ -e 's/$$/$(EXEEXT)/' \
+ `; \
+ test -n "$$list" || exit 0; \
+ echo " ( cd '$(DESTDIR)$(exec_bootdir)' && rm -f" $$files ")"; \
+ cd "$(DESTDIR)$(exec_bootdir)" && rm -f $$files
+
+clean-exec_bootPROGRAMS:
+ -test -z "$(exec_boot_PROGRAMS)" || rm -f $(exec_boot_PROGRAMS)
+
+clean-noinstPROGRAMS:
+ -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
+
+gnumach$(EXEEXT): $(gnumach_OBJECTS) $(gnumach_DEPENDENCIES)
$(EXTRA_gnumach_DEPENDENCIES)
+ @rm -f gnumach$(EXEEXT)
+ $(AM_V_GEN)$(gnumach_LINK) $(gnumach_OBJECTS) $(gnumach_LDADD) $(LIBS)
+
+gnumach.o$(EXEEXT): $(gnumach_o_OBJECTS) $(gnumach_o_DEPENDENCIES)
$(EXTRA_gnumach_o_DEPENDENCIES)
+ @rm -f gnumach.o$(EXEEXT)
+ $(AM_V_GEN)$(gnumach_o_LINK) $(gnumach_o_OBJECTS) $(gnumach_o_LDADD)
$(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+ -rm -f chips/*.$(OBJEXT)
+ -rm -f ddb/*.$(OBJEXT)
+ -rm -f device/*.$(OBJEXT)
+ -rm -f i386/i386/*.$(OBJEXT)
+ -rm -f i386/i386at/*.$(OBJEXT)
+ -rm -f i386/intel/*.$(OBJEXT)
+ -rm -f i386/xen/*.$(OBJEXT)
+ -rm -f ipc/*.$(OBJEXT)
+ -rm -f kern/*.$(OBJEXT)
+ -rm -f linux/dev/arch/i386/kernel/*.$(OBJEXT)
+ -rm -f linux/dev/drivers/block/*.$(OBJEXT)
+ -rm -f linux/dev/drivers/net/*.$(OBJEXT)
+ -rm -f linux/dev/drivers/scsi/*.$(OBJEXT)
+ -rm -f linux/dev/glue/*.$(OBJEXT)
+ -rm -f linux/dev/init/*.$(OBJEXT)
+ -rm -f linux/dev/kernel/*.$(OBJEXT)
+ -rm -f linux/dev/lib/*.$(OBJEXT)
+ -rm -f linux/dev/net/core/*.$(OBJEXT)
+ -rm -f linux/pcmcia-cs/clients/*.$(OBJEXT)
+ -rm -f linux/pcmcia-cs/glue/*.$(OBJEXT)
+ -rm -f linux/pcmcia-cs/modules/*.$(OBJEXT)
+ -rm -f linux/pcmcia-cs/wireless/*.$(OBJEXT)
+ -rm -f linux/src/arch/i386/kernel/*.$(OBJEXT)
+ -rm -f linux/src/arch/i386/lib/*.$(OBJEXT)
+ -rm -f linux/src/drivers/block/*.$(OBJEXT)
+ -rm -f linux/src/drivers/net/*.$(OBJEXT)
+ -rm -f linux/src/drivers/pci/*.$(OBJEXT)
+ -rm -f linux/src/drivers/scsi/*.$(OBJEXT)
+ -rm -f linux/src/lib/*.$(OBJEXT)
+ -rm -f util/*.$(OBJEXT)
+ -rm -f vm/*.$(OBJEXT)
+ -rm -f xen/*.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386at/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386at/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386at/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386at/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386at/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386at/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386at/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386at/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386at/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386at/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386at/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386at/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386at/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386at/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386at/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386at/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386at/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/i386at/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/intel/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/intel/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/xen/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/xen/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/xen/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/dev/arch/i386/kernel/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/dev/arch/i386/kernel/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/dev/drivers/block/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/dev/drivers/block/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/dev/drivers/block/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/dev/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/dev/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/dev/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/dev/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/dev/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/dev/glue/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/dev/glue/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/dev/glue/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/dev/glue/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/dev/init/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/dev/init/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/dev/kernel/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/dev/kernel/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/dev/kernel/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/dev/kernel/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/dev/kernel/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/dev/lib/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/dev/net/core/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/clients/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/clients/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/clients/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/clients/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/clients/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/clients/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/clients/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/clients/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/glue/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/modules/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/modules/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/modules/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/modules/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/modules/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/modules/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/modules/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/wireless/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/wireless/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/pcmcia-cs/wireless/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/arch/i386/kernel/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/arch/i386/lib/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/arch/i386/lib/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/block/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/block/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/block/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/block/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/block/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/net/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/pci/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@
@address@hidden/src/drivers/scsi/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/src/lib/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
address@hidden@@am__include@ @address@hidden/$(DEPDIR)/address@hidden@
+
+.S.o:
address@hidden@ $(AM_V_CPPAS)depbase=`echo $@ | sed
's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
address@hidden@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
address@hidden@ $(am__mv) $$depbase.Tpo $$depbase.Po
address@hidden@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CPPASCOMPILE) -c -o $@ $<
+
+.S.obj:
address@hidden@ $(AM_V_CPPAS)depbase=`echo $@ | sed
's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
address@hidden@ $(CPPASCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@
`$(CYGPATH_W) '$<'` &&\
address@hidden@ $(am__mv) $$depbase.Tpo $$depbase.Po
address@hidden@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='$<' object='$@'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+linux/src/arch/i386/lib/liblinux_a-semaphore.o:
linux/src/arch/i386/lib/semaphore.S
address@hidden@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CCASFLAGS) $(CCASFLAGS) -MT
linux/src/arch/i386/lib/liblinux_a-semaphore.o -MD -MP -MF
linux/src/arch/i386/lib/$(DEPDIR)/liblinux_a-semaphore.Tpo -c -o
linux/src/arch/i386/lib/liblinux_a-semaphore.o `test -f
'linux/src/arch/i386/lib/semaphore.S' || echo
'$(srcdir)/'`linux/src/arch/i386/lib/semaphore.S
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/arch/i386/lib/$(DEPDIR)/liblinux_a-semaphore.Tpo
linux/src/arch/i386/lib/$(DEPDIR)/liblinux_a-semaphore.Po
address@hidden@@am__fastdepCCAS_FALSE@
$(AM_V_CPPAS)source='linux/src/arch/i386/lib/semaphore.S'
object='linux/src/arch/i386/lib/liblinux_a-semaphore.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES)
$(INCLUDES) $(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CCASFLAGS)
$(CCASFLAGS) -c -o linux/src/arch/i386/lib/liblinux_a-semaphore.o `test -f
'linux/src/arch/i386/lib/semaphore.S' || echo
'$(srcdir)/'`linux/src/arch/i386/lib/semaphore.S
+
+linux/src/arch/i386/lib/liblinux_a-semaphore.obj:
linux/src/arch/i386/lib/semaphore.S
address@hidden@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CCASFLAGS) $(CCASFLAGS) -MT
linux/src/arch/i386/lib/liblinux_a-semaphore.obj -MD -MP -MF
linux/src/arch/i386/lib/$(DEPDIR)/liblinux_a-semaphore.Tpo -c -o
linux/src/arch/i386/lib/liblinux_a-semaphore.obj `if test -f
'linux/src/arch/i386/lib/semaphore.S'; then $(CYGPATH_W)
'linux/src/arch/i386/lib/semaphore.S'; else $(CYGPATH_W)
'$(srcdir)/linux/src/arch/i386/ [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/arch/i386/lib/$(DEPDIR)/liblinux_a-semaphore.Tpo
linux/src/arch/i386/lib/$(DEPDIR)/liblinux_a-semaphore.Po
address@hidden@@am__fastdepCCAS_FALSE@
$(AM_V_CPPAS)source='linux/src/arch/i386/lib/semaphore.S'
object='linux/src/arch/i386/lib/liblinux_a-semaphore.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES)
$(INCLUDES) $(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CCASFLAGS)
$(CCASFLAGS) -c -o linux/src/arch/i386/lib/liblinux_a-semaphore.obj `if test -f
'linux/src/arch/i386/lib/semaphore.S'; then $(CYGPATH_W)
'linux/src/arch/i386/lib/semaphore.S'; else $(CYGPATH_W)
'$(srcdir)/linux/src/arch/i386/lib/semaphore.S'; fi`
+
+.c.o:
address@hidden@ $(AM_V_CC)depbase=`echo $@ | sed
's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
address@hidden@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
address@hidden@ $(am__mv) $$depbase.Tpo $$depbase.Po
address@hidden@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
address@hidden@ $(AM_V_CC)depbase=`echo $@ | sed
's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
address@hidden@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@
`$(CYGPATH_W) '$<'` &&\
address@hidden@ $(am__mv) $$depbase.Tpo $$depbase.Po
address@hidden@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+vm/lib_dep_tr_for_defs_a-memory_object_user.user.defs.o:
vm/memory_object_user.user.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
vm/lib_dep_tr_for_defs_a-memory_object_user.user.defs.o -MD -MP -MF
vm/$(DEPDIR)/lib_dep_tr_for_defs_a-memory_object_user.user.defs.Tpo -c -o
vm/lib_dep_tr_for_defs_a-memory_object_user.user.defs.o `test -f
'vm/memory_object_user.user.defs.c' || echo
'$(srcdir)/'`vm/memory_object_user.user.defs.c
address@hidden@ $(AM_V_at)$(am__mv)
vm/$(DEPDIR)/lib_dep_tr_for_defs_a-memory_object_user.user.defs.Tpo
vm/$(DEPDIR)/lib_dep_tr_for_defs_a-memory_object_user.user.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='vm/memory_object_user.user.defs.c'
object='vm/lib_dep_tr_for_defs_a-memory_object_user.user.defs.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
vm/lib_dep_tr_for_defs_a-memory_object_user.user.defs.o `test -f
'vm/memory_object_user.user.defs.c' || echo
'$(srcdir)/'`vm/memory_object_user.user.defs.c
+
+vm/lib_dep_tr_for_defs_a-memory_object_user.user.defs.obj:
vm/memory_object_user.user.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
vm/lib_dep_tr_for_defs_a-memory_object_user.user.defs.obj -MD -MP -MF
vm/$(DEPDIR)/lib_dep_tr_for_defs_a-memory_object_user.user.defs.Tpo -c -o
vm/lib_dep_tr_for_defs_a-memory_object_user.user.defs.obj `if test -f
'vm/memory_object_user.user.defs.c'; then $(CYGPATH_W)
'vm/memory_object_user.user.defs.c'; else $(CYGPATH_W) '$(srcdir)/vm/memo [...]
address@hidden@ $(AM_V_at)$(am__mv)
vm/$(DEPDIR)/lib_dep_tr_for_defs_a-memory_object_user.user.defs.Tpo
vm/$(DEPDIR)/lib_dep_tr_for_defs_a-memory_object_user.user.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='vm/memory_object_user.user.defs.c'
object='vm/lib_dep_tr_for_defs_a-memory_object_user.user.defs.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
vm/lib_dep_tr_for_defs_a-memory_object_user.user.defs.obj `if test -f
'vm/memory_object_user.user.defs.c'; then $(CYGPATH_W)
'vm/memory_object_user.user.defs.c'; else $(CYGPATH_W)
'$(srcdir)/vm/memory_object_user.user.defs.c'; fi`
+
+vm/lib_dep_tr_for_defs_a-memory_object_default.user.defs.o:
vm/memory_object_default.user.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
vm/lib_dep_tr_for_defs_a-memory_object_default.user.defs.o -MD -MP -MF
vm/$(DEPDIR)/lib_dep_tr_for_defs_a-memory_object_default.user.defs.Tpo -c -o
vm/lib_dep_tr_for_defs_a-memory_object_default.user.defs.o `test -f
'vm/memory_object_default.user.defs.c' || echo
'$(srcdir)/'`vm/memory_object_default.user.defs.c
address@hidden@ $(AM_V_at)$(am__mv)
vm/$(DEPDIR)/lib_dep_tr_for_defs_a-memory_object_default.user.defs.Tpo
vm/$(DEPDIR)/lib_dep_tr_for_defs_a-memory_object_default.user.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='vm/memory_object_default.user.defs.c'
object='vm/lib_dep_tr_for_defs_a-memory_object_default.user.defs.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
vm/lib_dep_tr_for_defs_a-memory_object_default.user.defs.o `test -f
'vm/memory_object_default.user.defs.c' || echo
'$(srcdir)/'`vm/memory_object_default.user.defs.c
+
+vm/lib_dep_tr_for_defs_a-memory_object_default.user.defs.obj:
vm/memory_object_default.user.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
vm/lib_dep_tr_for_defs_a-memory_object_default.user.defs.obj -MD -MP -MF
vm/$(DEPDIR)/lib_dep_tr_for_defs_a-memory_object_default.user.defs.Tpo -c -o
vm/lib_dep_tr_for_defs_a-memory_object_default.user.defs.obj `if test -f
'vm/memory_object_default.user.defs.c'; then $(CYGPATH_W)
'vm/memory_object_default.user.defs.c'; else $(CYGPATH_W) '$( [...]
address@hidden@ $(AM_V_at)$(am__mv)
vm/$(DEPDIR)/lib_dep_tr_for_defs_a-memory_object_default.user.defs.Tpo
vm/$(DEPDIR)/lib_dep_tr_for_defs_a-memory_object_default.user.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='vm/memory_object_default.user.defs.c'
object='vm/lib_dep_tr_for_defs_a-memory_object_default.user.defs.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
vm/lib_dep_tr_for_defs_a-memory_object_default.user.defs.obj `if test -f
'vm/memory_object_default.user.defs.c'; then $(CYGPATH_W)
'vm/memory_object_default.user.defs.c'; else $(CYGPATH_W)
'$(srcdir)/vm/memory_object_default.user.defs.c'; fi`
+
+device/lib_dep_tr_for_defs_a-device_reply.user.defs.o:
device/device_reply.user.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
device/lib_dep_tr_for_defs_a-device_reply.user.defs.o -MD -MP -MF
device/$(DEPDIR)/lib_dep_tr_for_defs_a-device_reply.user.defs.Tpo -c -o
device/lib_dep_tr_for_defs_a-device_reply.user.defs.o `test -f
'device/device_reply.user.defs.c' || echo
'$(srcdir)/'`device/device_reply.user.defs.c
address@hidden@ $(AM_V_at)$(am__mv)
device/$(DEPDIR)/lib_dep_tr_for_defs_a-device_reply.user.defs.Tpo
device/$(DEPDIR)/lib_dep_tr_for_defs_a-device_reply.user.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='device/device_reply.user.defs.c'
object='device/lib_dep_tr_for_defs_a-device_reply.user.defs.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
device/lib_dep_tr_for_defs_a-device_reply.user.defs.o `test -f
'device/device_reply.user.defs.c' || echo
'$(srcdir)/'`device/device_reply.user.defs.c
+
+device/lib_dep_tr_for_defs_a-device_reply.user.defs.obj:
device/device_reply.user.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
device/lib_dep_tr_for_defs_a-device_reply.user.defs.obj -MD -MP -MF
device/$(DEPDIR)/lib_dep_tr_for_defs_a-device_reply.user.defs.Tpo -c -o
device/lib_dep_tr_for_defs_a-device_reply.user.defs.obj `if test -f
'device/device_reply.user.defs.c'; then $(CYGPATH_W)
'device/device_reply.user.defs.c'; else $(CYGPATH_W)
'$(srcdir)/device/device_rep [...]
address@hidden@ $(AM_V_at)$(am__mv)
device/$(DEPDIR)/lib_dep_tr_for_defs_a-device_reply.user.defs.Tpo
device/$(DEPDIR)/lib_dep_tr_for_defs_a-device_reply.user.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='device/device_reply.user.defs.c'
object='device/lib_dep_tr_for_defs_a-device_reply.user.defs.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
device/lib_dep_tr_for_defs_a-device_reply.user.defs.obj `if test -f
'device/device_reply.user.defs.c'; then $(CYGPATH_W)
'device/device_reply.user.defs.c'; else $(CYGPATH_W)
'$(srcdir)/device/device_reply.user.defs.c'; fi`
+
+device/lib_dep_tr_for_defs_a-memory_object_reply.user.defs.o:
device/memory_object_reply.user.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
device/lib_dep_tr_for_defs_a-memory_object_reply.user.defs.o -MD -MP -MF
device/$(DEPDIR)/lib_dep_tr_for_defs_a-memory_object_reply.user.defs.Tpo -c -o
device/lib_dep_tr_for_defs_a-memory_object_reply.user.defs.o `test -f
'device/memory_object_reply.user.defs.c' || echo
'$(srcdir)/'`device/memory_object_reply.user.defs.c
address@hidden@ $(AM_V_at)$(am__mv)
device/$(DEPDIR)/lib_dep_tr_for_defs_a-memory_object_reply.user.defs.Tpo
device/$(DEPDIR)/lib_dep_tr_for_defs_a-memory_object_reply.user.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='device/memory_object_reply.user.defs.c'
object='device/lib_dep_tr_for_defs_a-memory_object_reply.user.defs.o'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
device/lib_dep_tr_for_defs_a-memory_object_reply.user.defs.o `test -f
'device/memory_object_reply.user.defs.c' || echo
'$(srcdir)/'`device/memory_object_reply.user.defs.c
+
+device/lib_dep_tr_for_defs_a-memory_object_reply.user.defs.obj:
device/memory_object_reply.user.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
device/lib_dep_tr_for_defs_a-memory_object_reply.user.defs.obj -MD -MP -MF
device/$(DEPDIR)/lib_dep_tr_for_defs_a-memory_object_reply.user.defs.Tpo -c -o
device/lib_dep_tr_for_defs_a-memory_object_reply.user.defs.obj `if test -f
'device/memory_object_reply.user.defs.c'; then $(CYGPATH_W)
'device/memory_object_reply.user.defs.c'; else $(CYGP [...]
address@hidden@ $(AM_V_at)$(am__mv)
device/$(DEPDIR)/lib_dep_tr_for_defs_a-memory_object_reply.user.defs.Tpo
device/$(DEPDIR)/lib_dep_tr_for_defs_a-memory_object_reply.user.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='device/memory_object_reply.user.defs.c'
object='device/lib_dep_tr_for_defs_a-memory_object_reply.user.defs.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
device/lib_dep_tr_for_defs_a-memory_object_reply.user.defs.obj `if test -f
'device/memory_object_reply.user.defs.c'; then $(CYGPATH_W)
'device/memory_object_reply.user.defs.c'; else $(CYGPATH_W)
'$(srcdir)/device/memory_object_reply.user.defs.c'; fi`
+
+device/lib_dep_tr_for_defs_a-device.server.defs.o: device/device.server.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
device/lib_dep_tr_for_defs_a-device.server.defs.o -MD -MP -MF
device/$(DEPDIR)/lib_dep_tr_for_defs_a-device.server.defs.Tpo -c -o
device/lib_dep_tr_for_defs_a-device.server.defs.o `test -f
'device/device.server.defs.c' || echo '$(srcdir)/'`device/device.server.defs.c
address@hidden@ $(AM_V_at)$(am__mv)
device/$(DEPDIR)/lib_dep_tr_for_defs_a-device.server.defs.Tpo
device/$(DEPDIR)/lib_dep_tr_for_defs_a-device.server.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='device/device.server.defs.c'
object='device/lib_dep_tr_for_defs_a-device.server.defs.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
device/lib_dep_tr_for_defs_a-device.server.defs.o `test -f
'device/device.server.defs.c' || echo '$(srcdir)/'`device/device.server.defs.c
+
+device/lib_dep_tr_for_defs_a-device.server.defs.obj:
device/device.server.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
device/lib_dep_tr_for_defs_a-device.server.defs.obj -MD -MP -MF
device/$(DEPDIR)/lib_dep_tr_for_defs_a-device.server.defs.Tpo -c -o
device/lib_dep_tr_for_defs_a-device.server.defs.obj `if test -f
'device/device.server.defs.c'; then $(CYGPATH_W) 'device/device.server.defs.c';
else $(CYGPATH_W) '$(srcdir)/device/device.server.defs.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
device/$(DEPDIR)/lib_dep_tr_for_defs_a-device.server.defs.Tpo
device/$(DEPDIR)/lib_dep_tr_for_defs_a-device.server.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='device/device.server.defs.c'
object='device/lib_dep_tr_for_defs_a-device.server.defs.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
device/lib_dep_tr_for_defs_a-device.server.defs.obj `if test -f
'device/device.server.defs.c'; then $(CYGPATH_W) 'device/device.server.defs.c';
else $(CYGPATH_W) '$(srcdir)/device/device.server.defs.c'; fi`
+
+device/lib_dep_tr_for_defs_a-device_pager.server.defs.o:
device/device_pager.server.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
device/lib_dep_tr_for_defs_a-device_pager.server.defs.o -MD -MP -MF
device/$(DEPDIR)/lib_dep_tr_for_defs_a-device_pager.server.defs.Tpo -c -o
device/lib_dep_tr_for_defs_a-device_pager.server.defs.o `test -f
'device/device_pager.server.defs.c' || echo
'$(srcdir)/'`device/device_pager.server.defs.c
address@hidden@ $(AM_V_at)$(am__mv)
device/$(DEPDIR)/lib_dep_tr_for_defs_a-device_pager.server.defs.Tpo
device/$(DEPDIR)/lib_dep_tr_for_defs_a-device_pager.server.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='device/device_pager.server.defs.c'
object='device/lib_dep_tr_for_defs_a-device_pager.server.defs.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
device/lib_dep_tr_for_defs_a-device_pager.server.defs.o `test -f
'device/device_pager.server.defs.c' || echo
'$(srcdir)/'`device/device_pager.server.defs.c
+
+device/lib_dep_tr_for_defs_a-device_pager.server.defs.obj:
device/device_pager.server.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
device/lib_dep_tr_for_defs_a-device_pager.server.defs.obj -MD -MP -MF
device/$(DEPDIR)/lib_dep_tr_for_defs_a-device_pager.server.defs.Tpo -c -o
device/lib_dep_tr_for_defs_a-device_pager.server.defs.obj `if test -f
'device/device_pager.server.defs.c'; then $(CYGPATH_W)
'device/device_pager.server.defs.c'; else $(CYGPATH_W) '$(srcdir)/device/ [...]
address@hidden@ $(AM_V_at)$(am__mv)
device/$(DEPDIR)/lib_dep_tr_for_defs_a-device_pager.server.defs.Tpo
device/$(DEPDIR)/lib_dep_tr_for_defs_a-device_pager.server.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='device/device_pager.server.defs.c'
object='device/lib_dep_tr_for_defs_a-device_pager.server.defs.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
device/lib_dep_tr_for_defs_a-device_pager.server.defs.obj `if test -f
'device/device_pager.server.defs.c'; then $(CYGPATH_W)
'device/device_pager.server.defs.c'; else $(CYGPATH_W)
'$(srcdir)/device/device_pager.server.defs.c'; fi`
+
+ipc/lib_dep_tr_for_defs_a-mach_port.server.defs.o: ipc/mach_port.server.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
ipc/lib_dep_tr_for_defs_a-mach_port.server.defs.o -MD -MP -MF
ipc/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_port.server.defs.Tpo -c -o
ipc/lib_dep_tr_for_defs_a-mach_port.server.defs.o `test -f
'ipc/mach_port.server.defs.c' || echo '$(srcdir)/'`ipc/mach_port.server.defs.c
address@hidden@ $(AM_V_at)$(am__mv)
ipc/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_port.server.defs.Tpo
ipc/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_port.server.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='ipc/mach_port.server.defs.c'
object='ipc/lib_dep_tr_for_defs_a-mach_port.server.defs.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
ipc/lib_dep_tr_for_defs_a-mach_port.server.defs.o `test -f
'ipc/mach_port.server.defs.c' || echo '$(srcdir)/'`ipc/mach_port.server.defs.c
+
+ipc/lib_dep_tr_for_defs_a-mach_port.server.defs.obj:
ipc/mach_port.server.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
ipc/lib_dep_tr_for_defs_a-mach_port.server.defs.obj -MD -MP -MF
ipc/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_port.server.defs.Tpo -c -o
ipc/lib_dep_tr_for_defs_a-mach_port.server.defs.obj `if test -f
'ipc/mach_port.server.defs.c'; then $(CYGPATH_W) 'ipc/mach_port.server.defs.c';
else $(CYGPATH_W) '$(srcdir)/ipc/mach_port.server.defs.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
ipc/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_port.server.defs.Tpo
ipc/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_port.server.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='ipc/mach_port.server.defs.c'
object='ipc/lib_dep_tr_for_defs_a-mach_port.server.defs.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
ipc/lib_dep_tr_for_defs_a-mach_port.server.defs.obj `if test -f
'ipc/mach_port.server.defs.c'; then $(CYGPATH_W) 'ipc/mach_port.server.defs.c';
else $(CYGPATH_W) '$(srcdir)/ipc/mach_port.server.defs.c'; fi`
+
+kern/lib_dep_tr_for_defs_a-mach.server.defs.o: kern/mach.server.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
kern/lib_dep_tr_for_defs_a-mach.server.defs.o -MD -MP -MF
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach.server.defs.Tpo -c -o
kern/lib_dep_tr_for_defs_a-mach.server.defs.o `test -f
'kern/mach.server.defs.c' || echo '$(srcdir)/'`kern/mach.server.defs.c
address@hidden@ $(AM_V_at)$(am__mv)
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach.server.defs.Tpo
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach.server.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='kern/mach.server.defs.c'
object='kern/lib_dep_tr_for_defs_a-mach.server.defs.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
kern/lib_dep_tr_for_defs_a-mach.server.defs.o `test -f
'kern/mach.server.defs.c' || echo '$(srcdir)/'`kern/mach.server.defs.c
+
+kern/lib_dep_tr_for_defs_a-mach.server.defs.obj: kern/mach.server.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
kern/lib_dep_tr_for_defs_a-mach.server.defs.obj -MD -MP -MF
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach.server.defs.Tpo -c -o
kern/lib_dep_tr_for_defs_a-mach.server.defs.obj `if test -f
'kern/mach.server.defs.c'; then $(CYGPATH_W) 'kern/mach.server.defs.c'; else
$(CYGPATH_W) '$(srcdir)/kern/mach.server.defs.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach.server.defs.Tpo
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach.server.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='kern/mach.server.defs.c'
object='kern/lib_dep_tr_for_defs_a-mach.server.defs.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
kern/lib_dep_tr_for_defs_a-mach.server.defs.obj `if test -f
'kern/mach.server.defs.c'; then $(CYGPATH_W) 'kern/mach.server.defs.c'; else
$(CYGPATH_W) '$(srcdir)/kern/mach.server.defs.c'; fi`
+
+kern/lib_dep_tr_for_defs_a-mach4.server.defs.o: kern/mach4.server.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
kern/lib_dep_tr_for_defs_a-mach4.server.defs.o -MD -MP -MF
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach4.server.defs.Tpo -c -o
kern/lib_dep_tr_for_defs_a-mach4.server.defs.o `test -f
'kern/mach4.server.defs.c' || echo '$(srcdir)/'`kern/mach4.server.defs.c
address@hidden@ $(AM_V_at)$(am__mv)
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach4.server.defs.Tpo
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach4.server.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='kern/mach4.server.defs.c'
object='kern/lib_dep_tr_for_defs_a-mach4.server.defs.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
kern/lib_dep_tr_for_defs_a-mach4.server.defs.o `test -f
'kern/mach4.server.defs.c' || echo '$(srcdir)/'`kern/mach4.server.defs.c
+
+kern/lib_dep_tr_for_defs_a-mach4.server.defs.obj: kern/mach4.server.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
kern/lib_dep_tr_for_defs_a-mach4.server.defs.obj -MD -MP -MF
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach4.server.defs.Tpo -c -o
kern/lib_dep_tr_for_defs_a-mach4.server.defs.obj `if test -f
'kern/mach4.server.defs.c'; then $(CYGPATH_W) 'kern/mach4.server.defs.c'; else
$(CYGPATH_W) '$(srcdir)/kern/mach4.server.defs.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach4.server.defs.Tpo
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach4.server.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='kern/mach4.server.defs.c'
object='kern/lib_dep_tr_for_defs_a-mach4.server.defs.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
kern/lib_dep_tr_for_defs_a-mach4.server.defs.obj `if test -f
'kern/mach4.server.defs.c'; then $(CYGPATH_W) 'kern/mach4.server.defs.c'; else
$(CYGPATH_W) '$(srcdir)/kern/mach4.server.defs.c'; fi`
+
+kern/lib_dep_tr_for_defs_a-gnumach.server.defs.o: kern/gnumach.server.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
kern/lib_dep_tr_for_defs_a-gnumach.server.defs.o -MD -MP -MF
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-gnumach.server.defs.Tpo -c -o
kern/lib_dep_tr_for_defs_a-gnumach.server.defs.o `test -f
'kern/gnumach.server.defs.c' || echo '$(srcdir)/'`kern/gnumach.server.defs.c
address@hidden@ $(AM_V_at)$(am__mv)
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-gnumach.server.defs.Tpo
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-gnumach.server.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='kern/gnumach.server.defs.c'
object='kern/lib_dep_tr_for_defs_a-gnumach.server.defs.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
kern/lib_dep_tr_for_defs_a-gnumach.server.defs.o `test -f
'kern/gnumach.server.defs.c' || echo '$(srcdir)/'`kern/gnumach.server.defs.c
+
+kern/lib_dep_tr_for_defs_a-gnumach.server.defs.obj: kern/gnumach.server.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
kern/lib_dep_tr_for_defs_a-gnumach.server.defs.obj -MD -MP -MF
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-gnumach.server.defs.Tpo -c -o
kern/lib_dep_tr_for_defs_a-gnumach.server.defs.obj `if test -f
'kern/gnumach.server.defs.c'; then $(CYGPATH_W) 'kern/gnumach.server.defs.c';
else $(CYGPATH_W) '$(srcdir)/kern/gnumach.server.defs.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-gnumach.server.defs.Tpo
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-gnumach.server.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='kern/gnumach.server.defs.c'
object='kern/lib_dep_tr_for_defs_a-gnumach.server.defs.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
kern/lib_dep_tr_for_defs_a-gnumach.server.defs.obj `if test -f
'kern/gnumach.server.defs.c'; then $(CYGPATH_W) 'kern/gnumach.server.defs.c';
else $(CYGPATH_W) '$(srcdir)/kern/gnumach.server.defs.c'; fi`
+
+kern/lib_dep_tr_for_defs_a-mach_debug.server.defs.o:
kern/mach_debug.server.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
kern/lib_dep_tr_for_defs_a-mach_debug.server.defs.o -MD -MP -MF
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_debug.server.defs.Tpo -c -o
kern/lib_dep_tr_for_defs_a-mach_debug.server.defs.o `test -f
'kern/mach_debug.server.defs.c' || echo
'$(srcdir)/'`kern/mach_debug.server.defs.c
address@hidden@ $(AM_V_at)$(am__mv)
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_debug.server.defs.Tpo
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_debug.server.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='kern/mach_debug.server.defs.c'
object='kern/lib_dep_tr_for_defs_a-mach_debug.server.defs.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
kern/lib_dep_tr_for_defs_a-mach_debug.server.defs.o `test -f
'kern/mach_debug.server.defs.c' || echo
'$(srcdir)/'`kern/mach_debug.server.defs.c
+
+kern/lib_dep_tr_for_defs_a-mach_debug.server.defs.obj:
kern/mach_debug.server.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
kern/lib_dep_tr_for_defs_a-mach_debug.server.defs.obj -MD -MP -MF
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_debug.server.defs.Tpo -c -o
kern/lib_dep_tr_for_defs_a-mach_debug.server.defs.obj `if test -f
'kern/mach_debug.server.defs.c'; then $(CYGPATH_W)
'kern/mach_debug.server.defs.c'; else $(CYGPATH_W)
'$(srcdir)/kern/mach_debug.server.defs [...]
address@hidden@ $(AM_V_at)$(am__mv)
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_debug.server.defs.Tpo
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_debug.server.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='kern/mach_debug.server.defs.c'
object='kern/lib_dep_tr_for_defs_a-mach_debug.server.defs.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
kern/lib_dep_tr_for_defs_a-mach_debug.server.defs.obj `if test -f
'kern/mach_debug.server.defs.c'; then $(CYGPATH_W)
'kern/mach_debug.server.defs.c'; else $(CYGPATH_W)
'$(srcdir)/kern/mach_debug.server.defs.c'; fi`
+
+kern/lib_dep_tr_for_defs_a-mach_host.server.defs.o:
kern/mach_host.server.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
kern/lib_dep_tr_for_defs_a-mach_host.server.defs.o -MD -MP -MF
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_host.server.defs.Tpo -c -o
kern/lib_dep_tr_for_defs_a-mach_host.server.defs.o `test -f
'kern/mach_host.server.defs.c' || echo '$(srcdir)/'`kern/mach_host.server.defs.c
address@hidden@ $(AM_V_at)$(am__mv)
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_host.server.defs.Tpo
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_host.server.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='kern/mach_host.server.defs.c'
object='kern/lib_dep_tr_for_defs_a-mach_host.server.defs.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
kern/lib_dep_tr_for_defs_a-mach_host.server.defs.o `test -f
'kern/mach_host.server.defs.c' || echo '$(srcdir)/'`kern/mach_host.server.defs.c
+
+kern/lib_dep_tr_for_defs_a-mach_host.server.defs.obj:
kern/mach_host.server.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
kern/lib_dep_tr_for_defs_a-mach_host.server.defs.obj -MD -MP -MF
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_host.server.defs.Tpo -c -o
kern/lib_dep_tr_for_defs_a-mach_host.server.defs.obj `if test -f
'kern/mach_host.server.defs.c'; then $(CYGPATH_W)
'kern/mach_host.server.defs.c'; else $(CYGPATH_W)
'$(srcdir)/kern/mach_host.server.defs.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_host.server.defs.Tpo
kern/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_host.server.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='kern/mach_host.server.defs.c'
object='kern/lib_dep_tr_for_defs_a-mach_host.server.defs.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
kern/lib_dep_tr_for_defs_a-mach_host.server.defs.obj `if test -f
'kern/mach_host.server.defs.c'; then $(CYGPATH_W)
'kern/mach_host.server.defs.c'; else $(CYGPATH_W)
'$(srcdir)/kern/mach_host.server.defs.c'; fi`
+
+i386/i386/lib_dep_tr_for_defs_a-mach_i386.server.defs.o:
i386/i386/mach_i386.server.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
i386/i386/lib_dep_tr_for_defs_a-mach_i386.server.defs.o -MD -MP -MF
i386/i386/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_i386.server.defs.Tpo -c -o
i386/i386/lib_dep_tr_for_defs_a-mach_i386.server.defs.o `test -f
'i386/i386/mach_i386.server.defs.c' || echo
'$(srcdir)/'`i386/i386/mach_i386.server.defs.c
address@hidden@ $(AM_V_at)$(am__mv)
i386/i386/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_i386.server.defs.Tpo
i386/i386/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_i386.server.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='i386/i386/mach_i386.server.defs.c'
object='i386/i386/lib_dep_tr_for_defs_a-mach_i386.server.defs.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
i386/i386/lib_dep_tr_for_defs_a-mach_i386.server.defs.o `test -f
'i386/i386/mach_i386.server.defs.c' || echo
'$(srcdir)/'`i386/i386/mach_i386.server.defs.c
+
+i386/i386/lib_dep_tr_for_defs_a-mach_i386.server.defs.obj:
i386/i386/mach_i386.server.defs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT
i386/i386/lib_dep_tr_for_defs_a-mach_i386.server.defs.obj -MD -MP -MF
i386/i386/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_i386.server.defs.Tpo -c -o
i386/i386/lib_dep_tr_for_defs_a-mach_i386.server.defs.obj `if test -f
'i386/i386/mach_i386.server.defs.c'; then $(CYGPATH_W)
'i386/i386/mach_i386.server.defs.c'; else $(CYGPATH_W) '$(srcdir)/i386/i3 [...]
address@hidden@ $(AM_V_at)$(am__mv)
i386/i386/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_i386.server.defs.Tpo
i386/i386/$(DEPDIR)/lib_dep_tr_for_defs_a-mach_i386.server.defs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='i386/i386/mach_i386.server.defs.c'
object='i386/i386/lib_dep_tr_for_defs_a-mach_i386.server.defs.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(lib_dep_tr_for_defs_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o
i386/i386/lib_dep_tr_for_defs_a-mach_i386.server.defs.obj `if test -f
'i386/i386/mach_i386.server.defs.c'; then $(CYGPATH_W)
'i386/i386/mach_i386.server.defs.c'; else $(CYGPATH_W)
'$(srcdir)/i386/i386/mach_i386.server.defs.c'; fi`
+
+linux/dev/init/liblinux_a-version.o: linux/dev/init/version.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/init/liblinux_a-version.o -MD -MP -MF
linux/dev/init/$(DEPDIR)/liblinux_a-version.Tpo -c -o
linux/dev/init/liblinux_a-version.o `test -f 'linux/dev/init/version.c' || echo
'$(srcdir)/'`linux/dev/init/version.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/init/$(DEPDIR)/liblinux_a-version.Tpo
linux/dev/init/$(DEPDIR)/liblinux_a-version.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/init/version.c'
object='linux/dev/init/liblinux_a-version.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/init/liblinux_a-version.o `test -f 'linux/dev/init/version.c' || echo
'$(srcdir)/'`linux/dev/init/version.c
+
+linux/dev/init/liblinux_a-version.obj: linux/dev/init/version.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/init/liblinux_a-version.obj -MD -MP -MF
linux/dev/init/$(DEPDIR)/liblinux_a-version.Tpo -c -o
linux/dev/init/liblinux_a-version.obj `if test -f 'linux/dev/init/version.c';
then $(CYGPATH_W) 'linux/dev/init/version.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/init/version.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/init/$(DEPDIR)/liblinux_a-version.Tpo
linux/dev/init/$(DEPDIR)/liblinux_a-version.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/init/version.c'
object='linux/dev/init/liblinux_a-version.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/init/liblinux_a-version.obj `if test -f 'linux/dev/init/version.c';
then $(CYGPATH_W) 'linux/dev/init/version.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/init/version.c'; fi`
+
+linux/dev/kernel/liblinux_a-softirq.o: linux/dev/kernel/softirq.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/kernel/liblinux_a-softirq.o -MD -MP -MF
linux/dev/kernel/$(DEPDIR)/liblinux_a-softirq.Tpo -c -o
linux/dev/kernel/liblinux_a-softirq.o `test -f 'linux/dev/kernel/softirq.c' ||
echo '$(srcdir)/'`linux/dev/kernel/softirq.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/kernel/$(DEPDIR)/liblinux_a-softirq.Tpo
linux/dev/kernel/$(DEPDIR)/liblinux_a-softirq.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/kernel/softirq.c'
object='linux/dev/kernel/liblinux_a-softirq.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/kernel/liblinux_a-softirq.o `test -f 'linux/dev/kernel/softirq.c' ||
echo '$(srcdir)/'`linux/dev/kernel/softirq.c
+
+linux/dev/kernel/liblinux_a-softirq.obj: linux/dev/kernel/softirq.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/kernel/liblinux_a-softirq.obj -MD -MP -MF
linux/dev/kernel/$(DEPDIR)/liblinux_a-softirq.Tpo -c -o
linux/dev/kernel/liblinux_a-softirq.obj `if test -f
'linux/dev/kernel/softirq.c'; then $(CYGPATH_W) 'linux/dev/kernel/softirq.c';
else $(CYGPATH_W) '$(srcdir)/linux/dev/kernel/softirq.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/kernel/$(DEPDIR)/liblinux_a-softirq.Tpo
linux/dev/kernel/$(DEPDIR)/liblinux_a-softirq.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/kernel/softirq.c'
object='linux/dev/kernel/liblinux_a-softirq.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/kernel/liblinux_a-softirq.obj `if test -f
'linux/dev/kernel/softirq.c'; then $(CYGPATH_W) 'linux/dev/kernel/softirq.c';
else $(CYGPATH_W) '$(srcdir)/linux/dev/kernel/softirq.c'; fi`
+
+linux/src/arch/i386/lib/liblinux_a-delay.o: linux/src/arch/i386/lib/delay.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/arch/i386/lib/liblinux_a-delay.o -MD -MP -MF
linux/src/arch/i386/lib/$(DEPDIR)/liblinux_a-delay.Tpo -c -o
linux/src/arch/i386/lib/liblinux_a-delay.o `test -f
'linux/src/arch/i386/lib/delay.c' || echo
'$(srcdir)/'`linux/src/arch/i386/lib/delay.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/arch/i386/lib/$(DEPDIR)/liblinux_a-delay.Tpo
linux/src/arch/i386/lib/$(DEPDIR)/liblinux_a-delay.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/arch/i386/lib/delay.c'
object='linux/src/arch/i386/lib/liblinux_a-delay.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/arch/i386/lib/liblinux_a-delay.o `test -f
'linux/src/arch/i386/lib/delay.c' || echo
'$(srcdir)/'`linux/src/arch/i386/lib/delay.c
+
+linux/src/arch/i386/lib/liblinux_a-delay.obj: linux/src/arch/i386/lib/delay.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/arch/i386/lib/liblinux_a-delay.obj -MD -MP -MF
linux/src/arch/i386/lib/$(DEPDIR)/liblinux_a-delay.Tpo -c -o
linux/src/arch/i386/lib/liblinux_a-delay.obj `if test -f
'linux/src/arch/i386/lib/delay.c'; then $(CYGPATH_W)
'linux/src/arch/i386/lib/delay.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/arch/i386/lib/delay.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/arch/i386/lib/$(DEPDIR)/liblinux_a-delay.Tpo
linux/src/arch/i386/lib/$(DEPDIR)/liblinux_a-delay.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/arch/i386/lib/delay.c'
object='linux/src/arch/i386/lib/liblinux_a-delay.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/arch/i386/lib/liblinux_a-delay.obj `if test -f
'linux/src/arch/i386/lib/delay.c'; then $(CYGPATH_W)
'linux/src/arch/i386/lib/delay.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/arch/i386/lib/delay.c'; fi`
+
+linux/dev/kernel/liblinux_a-dma.o: linux/dev/kernel/dma.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/kernel/liblinux_a-dma.o -MD -MP -MF
linux/dev/kernel/$(DEPDIR)/liblinux_a-dma.Tpo -c -o
linux/dev/kernel/liblinux_a-dma.o `test -f 'linux/dev/kernel/dma.c' || echo
'$(srcdir)/'`linux/dev/kernel/dma.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/kernel/$(DEPDIR)/liblinux_a-dma.Tpo
linux/dev/kernel/$(DEPDIR)/liblinux_a-dma.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/kernel/dma.c'
object='linux/dev/kernel/liblinux_a-dma.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/kernel/liblinux_a-dma.o `test -f 'linux/dev/kernel/dma.c' || echo
'$(srcdir)/'`linux/dev/kernel/dma.c
+
+linux/dev/kernel/liblinux_a-dma.obj: linux/dev/kernel/dma.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/kernel/liblinux_a-dma.obj -MD -MP -MF
linux/dev/kernel/$(DEPDIR)/liblinux_a-dma.Tpo -c -o
linux/dev/kernel/liblinux_a-dma.obj `if test -f 'linux/dev/kernel/dma.c'; then
$(CYGPATH_W) 'linux/dev/kernel/dma.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/kernel/dma.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/kernel/$(DEPDIR)/liblinux_a-dma.Tpo
linux/dev/kernel/$(DEPDIR)/liblinux_a-dma.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/kernel/dma.c'
object='linux/dev/kernel/liblinux_a-dma.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/kernel/liblinux_a-dma.obj `if test -f 'linux/dev/kernel/dma.c'; then
$(CYGPATH_W) 'linux/dev/kernel/dma.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/kernel/dma.c'; fi`
+
+linux/dev/kernel/liblinux_a-resource.o: linux/dev/kernel/resource.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/kernel/liblinux_a-resource.o -MD -MP -MF
linux/dev/kernel/$(DEPDIR)/liblinux_a-resource.Tpo -c -o
linux/dev/kernel/liblinux_a-resource.o `test -f 'linux/dev/kernel/resource.c'
|| echo '$(srcdir)/'`linux/dev/kernel/resource.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/kernel/$(DEPDIR)/liblinux_a-resource.Tpo
linux/dev/kernel/$(DEPDIR)/liblinux_a-resource.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/kernel/resource.c'
object='linux/dev/kernel/liblinux_a-resource.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/kernel/liblinux_a-resource.o `test -f 'linux/dev/kernel/resource.c'
|| echo '$(srcdir)/'`linux/dev/kernel/resource.c
+
+linux/dev/kernel/liblinux_a-resource.obj: linux/dev/kernel/resource.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/kernel/liblinux_a-resource.obj -MD -MP -MF
linux/dev/kernel/$(DEPDIR)/liblinux_a-resource.Tpo -c -o
linux/dev/kernel/liblinux_a-resource.obj `if test -f
'linux/dev/kernel/resource.c'; then $(CYGPATH_W) 'linux/dev/kernel/resource.c';
else $(CYGPATH_W) '$(srcdir)/linux/dev/kernel/resource.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/kernel/$(DEPDIR)/liblinux_a-resource.Tpo
linux/dev/kernel/$(DEPDIR)/liblinux_a-resource.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/kernel/resource.c'
object='linux/dev/kernel/liblinux_a-resource.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/kernel/liblinux_a-resource.obj `if test -f
'linux/dev/kernel/resource.c'; then $(CYGPATH_W) 'linux/dev/kernel/resource.c';
else $(CYGPATH_W) '$(srcdir)/linux/dev/kernel/resource.c'; fi`
+
+linux/dev/kernel/liblinux_a-printk.o: linux/dev/kernel/printk.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/kernel/liblinux_a-printk.o -MD -MP -MF
linux/dev/kernel/$(DEPDIR)/liblinux_a-printk.Tpo -c -o
linux/dev/kernel/liblinux_a-printk.o `test -f 'linux/dev/kernel/printk.c' ||
echo '$(srcdir)/'`linux/dev/kernel/printk.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/kernel/$(DEPDIR)/liblinux_a-printk.Tpo
linux/dev/kernel/$(DEPDIR)/liblinux_a-printk.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/kernel/printk.c'
object='linux/dev/kernel/liblinux_a-printk.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/kernel/liblinux_a-printk.o `test -f 'linux/dev/kernel/printk.c' ||
echo '$(srcdir)/'`linux/dev/kernel/printk.c
+
+linux/dev/kernel/liblinux_a-printk.obj: linux/dev/kernel/printk.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/kernel/liblinux_a-printk.obj -MD -MP -MF
linux/dev/kernel/$(DEPDIR)/liblinux_a-printk.Tpo -c -o
linux/dev/kernel/liblinux_a-printk.obj `if test -f 'linux/dev/kernel/printk.c';
then $(CYGPATH_W) 'linux/dev/kernel/printk.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/kernel/printk.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/kernel/$(DEPDIR)/liblinux_a-printk.Tpo
linux/dev/kernel/$(DEPDIR)/liblinux_a-printk.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/kernel/printk.c'
object='linux/dev/kernel/liblinux_a-printk.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/kernel/liblinux_a-printk.obj `if test -f 'linux/dev/kernel/printk.c';
then $(CYGPATH_W) 'linux/dev/kernel/printk.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/kernel/printk.c'; fi`
+
+linux/src/arch/i386/kernel/liblinux_a-bios32.o:
linux/src/arch/i386/kernel/bios32.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/arch/i386/kernel/liblinux_a-bios32.o -MD -MP -MF
linux/src/arch/i386/kernel/$(DEPDIR)/liblinux_a-bios32.Tpo -c -o
linux/src/arch/i386/kernel/liblinux_a-bios32.o `test -f
'linux/src/arch/i386/kernel/bios32.c' || echo
'$(srcdir)/'`linux/src/arch/i386/kernel/bios32.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/arch/i386/kernel/$(DEPDIR)/liblinux_a-bios32.Tpo
linux/src/arch/i386/kernel/$(DEPDIR)/liblinux_a-bios32.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/arch/i386/kernel/bios32.c'
object='linux/src/arch/i386/kernel/liblinux_a-bios32.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/arch/i386/kernel/liblinux_a-bios32.o `test -f
'linux/src/arch/i386/kernel/bios32.c' || echo
'$(srcdir)/'`linux/src/arch/i386/kernel/bios32.c
+
+linux/src/arch/i386/kernel/liblinux_a-bios32.obj:
linux/src/arch/i386/kernel/bios32.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/arch/i386/kernel/liblinux_a-bios32.obj -MD -MP -MF
linux/src/arch/i386/kernel/$(DEPDIR)/liblinux_a-bios32.Tpo -c -o
linux/src/arch/i386/kernel/liblinux_a-bios32.obj `if test -f
'linux/src/arch/i386/kernel/bios32.c'; then $(CYGPATH_W)
'linux/src/arch/i386/kernel/bios32.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/arch/i386/kernel/bios32 [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/arch/i386/kernel/$(DEPDIR)/liblinux_a-bios32.Tpo
linux/src/arch/i386/kernel/$(DEPDIR)/liblinux_a-bios32.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/arch/i386/kernel/bios32.c'
object='linux/src/arch/i386/kernel/liblinux_a-bios32.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/arch/i386/kernel/liblinux_a-bios32.obj `if test -f
'linux/src/arch/i386/kernel/bios32.c'; then $(CYGPATH_W)
'linux/src/arch/i386/kernel/bios32.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/arch/i386/kernel/bios32.c'; fi`
+
+linux/dev/arch/i386/kernel/liblinux_a-irq.o: linux/dev/arch/i386/kernel/irq.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/arch/i386/kernel/liblinux_a-irq.o -MD -MP -MF
linux/dev/arch/i386/kernel/$(DEPDIR)/liblinux_a-irq.Tpo -c -o
linux/dev/arch/i386/kernel/liblinux_a-irq.o `test -f
'linux/dev/arch/i386/kernel/irq.c' || echo
'$(srcdir)/'`linux/dev/arch/i386/kernel/irq.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/arch/i386/kernel/$(DEPDIR)/liblinux_a-irq.Tpo
linux/dev/arch/i386/kernel/$(DEPDIR)/liblinux_a-irq.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/arch/i386/kernel/irq.c'
object='linux/dev/arch/i386/kernel/liblinux_a-irq.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/arch/i386/kernel/liblinux_a-irq.o `test -f
'linux/dev/arch/i386/kernel/irq.c' || echo
'$(srcdir)/'`linux/dev/arch/i386/kernel/irq.c
+
+linux/dev/arch/i386/kernel/liblinux_a-irq.obj: linux/dev/arch/i386/kernel/irq.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/arch/i386/kernel/liblinux_a-irq.obj -MD -MP -MF
linux/dev/arch/i386/kernel/$(DEPDIR)/liblinux_a-irq.Tpo -c -o
linux/dev/arch/i386/kernel/liblinux_a-irq.obj `if test -f
'linux/dev/arch/i386/kernel/irq.c'; then $(CYGPATH_W)
'linux/dev/arch/i386/kernel/irq.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/arch/i386/kernel/irq.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/arch/i386/kernel/$(DEPDIR)/liblinux_a-irq.Tpo
linux/dev/arch/i386/kernel/$(DEPDIR)/liblinux_a-irq.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/arch/i386/kernel/irq.c'
object='linux/dev/arch/i386/kernel/liblinux_a-irq.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/arch/i386/kernel/liblinux_a-irq.obj `if test -f
'linux/dev/arch/i386/kernel/irq.c'; then $(CYGPATH_W)
'linux/dev/arch/i386/kernel/irq.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/arch/i386/kernel/irq.c'; fi`
+
+linux/src/lib/liblinux_a-ctype.o: linux/src/lib/ctype.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/lib/liblinux_a-ctype.o -MD -MP -MF
linux/src/lib/$(DEPDIR)/liblinux_a-ctype.Tpo -c -o
linux/src/lib/liblinux_a-ctype.o `test -f 'linux/src/lib/ctype.c' || echo
'$(srcdir)/'`linux/src/lib/ctype.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/lib/$(DEPDIR)/liblinux_a-ctype.Tpo
linux/src/lib/$(DEPDIR)/liblinux_a-ctype.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/lib/ctype.c'
object='linux/src/lib/liblinux_a-ctype.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/lib/liblinux_a-ctype.o `test -f 'linux/src/lib/ctype.c' || echo
'$(srcdir)/'`linux/src/lib/ctype.c
+
+linux/src/lib/liblinux_a-ctype.obj: linux/src/lib/ctype.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/lib/liblinux_a-ctype.obj -MD -MP -MF
linux/src/lib/$(DEPDIR)/liblinux_a-ctype.Tpo -c -o
linux/src/lib/liblinux_a-ctype.obj `if test -f 'linux/src/lib/ctype.c'; then
$(CYGPATH_W) 'linux/src/lib/ctype.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/lib/ctype.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/lib/$(DEPDIR)/liblinux_a-ctype.Tpo
linux/src/lib/$(DEPDIR)/liblinux_a-ctype.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/lib/ctype.c'
object='linux/src/lib/liblinux_a-ctype.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/lib/liblinux_a-ctype.obj `if test -f 'linux/src/lib/ctype.c'; then
$(CYGPATH_W) 'linux/src/lib/ctype.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/lib/ctype.c'; fi`
+
+linux/dev/lib/liblinux_a-vsprintf.o: linux/dev/lib/vsprintf.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/lib/liblinux_a-vsprintf.o -MD -MP -MF
linux/dev/lib/$(DEPDIR)/liblinux_a-vsprintf.Tpo -c -o
linux/dev/lib/liblinux_a-vsprintf.o `test -f 'linux/dev/lib/vsprintf.c' || echo
'$(srcdir)/'`linux/dev/lib/vsprintf.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/lib/$(DEPDIR)/liblinux_a-vsprintf.Tpo
linux/dev/lib/$(DEPDIR)/liblinux_a-vsprintf.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/lib/vsprintf.c'
object='linux/dev/lib/liblinux_a-vsprintf.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/lib/liblinux_a-vsprintf.o `test -f 'linux/dev/lib/vsprintf.c' || echo
'$(srcdir)/'`linux/dev/lib/vsprintf.c
+
+linux/dev/lib/liblinux_a-vsprintf.obj: linux/dev/lib/vsprintf.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/lib/liblinux_a-vsprintf.obj -MD -MP -MF
linux/dev/lib/$(DEPDIR)/liblinux_a-vsprintf.Tpo -c -o
linux/dev/lib/liblinux_a-vsprintf.obj `if test -f 'linux/dev/lib/vsprintf.c';
then $(CYGPATH_W) 'linux/dev/lib/vsprintf.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/lib/vsprintf.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/lib/$(DEPDIR)/liblinux_a-vsprintf.Tpo
linux/dev/lib/$(DEPDIR)/liblinux_a-vsprintf.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/lib/vsprintf.c'
object='linux/dev/lib/liblinux_a-vsprintf.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/lib/liblinux_a-vsprintf.obj `if test -f 'linux/dev/lib/vsprintf.c';
then $(CYGPATH_W) 'linux/dev/lib/vsprintf.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/lib/vsprintf.c'; fi`
+
+linux/dev/init/liblinux_a-main.o: linux/dev/init/main.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/init/liblinux_a-main.o -MD -MP -MF
linux/dev/init/$(DEPDIR)/liblinux_a-main.Tpo -c -o
linux/dev/init/liblinux_a-main.o `test -f 'linux/dev/init/main.c' || echo
'$(srcdir)/'`linux/dev/init/main.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/init/$(DEPDIR)/liblinux_a-main.Tpo
linux/dev/init/$(DEPDIR)/liblinux_a-main.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/init/main.c'
object='linux/dev/init/liblinux_a-main.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/init/liblinux_a-main.o `test -f 'linux/dev/init/main.c' || echo
'$(srcdir)/'`linux/dev/init/main.c
+
+linux/dev/init/liblinux_a-main.obj: linux/dev/init/main.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/init/liblinux_a-main.obj -MD -MP -MF
linux/dev/init/$(DEPDIR)/liblinux_a-main.Tpo -c -o
linux/dev/init/liblinux_a-main.obj `if test -f 'linux/dev/init/main.c'; then
$(CYGPATH_W) 'linux/dev/init/main.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/init/main.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/init/$(DEPDIR)/liblinux_a-main.Tpo
linux/dev/init/$(DEPDIR)/liblinux_a-main.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/init/main.c'
object='linux/dev/init/liblinux_a-main.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/init/liblinux_a-main.obj `if test -f 'linux/dev/init/main.c'; then
$(CYGPATH_W) 'linux/dev/init/main.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/init/main.c'; fi`
+
+linux/dev/glue/liblinux_a-misc.o: linux/dev/glue/misc.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/glue/liblinux_a-misc.o -MD -MP -MF
linux/dev/glue/$(DEPDIR)/liblinux_a-misc.Tpo -c -o
linux/dev/glue/liblinux_a-misc.o `test -f 'linux/dev/glue/misc.c' || echo
'$(srcdir)/'`linux/dev/glue/misc.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/glue/$(DEPDIR)/liblinux_a-misc.Tpo
linux/dev/glue/$(DEPDIR)/liblinux_a-misc.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/glue/misc.c'
object='linux/dev/glue/liblinux_a-misc.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/glue/liblinux_a-misc.o `test -f 'linux/dev/glue/misc.c' || echo
'$(srcdir)/'`linux/dev/glue/misc.c
+
+linux/dev/glue/liblinux_a-misc.obj: linux/dev/glue/misc.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/glue/liblinux_a-misc.obj -MD -MP -MF
linux/dev/glue/$(DEPDIR)/liblinux_a-misc.Tpo -c -o
linux/dev/glue/liblinux_a-misc.obj `if test -f 'linux/dev/glue/misc.c'; then
$(CYGPATH_W) 'linux/dev/glue/misc.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/glue/misc.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/glue/$(DEPDIR)/liblinux_a-misc.Tpo
linux/dev/glue/$(DEPDIR)/liblinux_a-misc.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/glue/misc.c'
object='linux/dev/glue/liblinux_a-misc.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/glue/liblinux_a-misc.obj `if test -f 'linux/dev/glue/misc.c'; then
$(CYGPATH_W) 'linux/dev/glue/misc.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/glue/misc.c'; fi`
+
+linux/dev/kernel/liblinux_a-sched.o: linux/dev/kernel/sched.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/kernel/liblinux_a-sched.o -MD -MP -MF
linux/dev/kernel/$(DEPDIR)/liblinux_a-sched.Tpo -c -o
linux/dev/kernel/liblinux_a-sched.o `test -f 'linux/dev/kernel/sched.c' || echo
'$(srcdir)/'`linux/dev/kernel/sched.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/kernel/$(DEPDIR)/liblinux_a-sched.Tpo
linux/dev/kernel/$(DEPDIR)/liblinux_a-sched.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/kernel/sched.c'
object='linux/dev/kernel/liblinux_a-sched.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/kernel/liblinux_a-sched.o `test -f 'linux/dev/kernel/sched.c' || echo
'$(srcdir)/'`linux/dev/kernel/sched.c
+
+linux/dev/kernel/liblinux_a-sched.obj: linux/dev/kernel/sched.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/kernel/liblinux_a-sched.obj -MD -MP -MF
linux/dev/kernel/$(DEPDIR)/liblinux_a-sched.Tpo -c -o
linux/dev/kernel/liblinux_a-sched.obj `if test -f 'linux/dev/kernel/sched.c';
then $(CYGPATH_W) 'linux/dev/kernel/sched.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/kernel/sched.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/kernel/$(DEPDIR)/liblinux_a-sched.Tpo
linux/dev/kernel/$(DEPDIR)/liblinux_a-sched.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/kernel/sched.c'
object='linux/dev/kernel/liblinux_a-sched.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/kernel/liblinux_a-sched.obj `if test -f 'linux/dev/kernel/sched.c';
then $(CYGPATH_W) 'linux/dev/kernel/sched.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/kernel/sched.c'; fi`
+
+linux/dev/glue/liblinux_a-kmem.o: linux/dev/glue/kmem.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/glue/liblinux_a-kmem.o -MD -MP -MF
linux/dev/glue/$(DEPDIR)/liblinux_a-kmem.Tpo -c -o
linux/dev/glue/liblinux_a-kmem.o `test -f 'linux/dev/glue/kmem.c' || echo
'$(srcdir)/'`linux/dev/glue/kmem.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/glue/$(DEPDIR)/liblinux_a-kmem.Tpo
linux/dev/glue/$(DEPDIR)/liblinux_a-kmem.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/glue/kmem.c'
object='linux/dev/glue/liblinux_a-kmem.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/glue/liblinux_a-kmem.o `test -f 'linux/dev/glue/kmem.c' || echo
'$(srcdir)/'`linux/dev/glue/kmem.c
+
+linux/dev/glue/liblinux_a-kmem.obj: linux/dev/glue/kmem.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/glue/liblinux_a-kmem.obj -MD -MP -MF
linux/dev/glue/$(DEPDIR)/liblinux_a-kmem.Tpo -c -o
linux/dev/glue/liblinux_a-kmem.obj `if test -f 'linux/dev/glue/kmem.c'; then
$(CYGPATH_W) 'linux/dev/glue/kmem.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/glue/kmem.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/glue/$(DEPDIR)/liblinux_a-kmem.Tpo
linux/dev/glue/$(DEPDIR)/liblinux_a-kmem.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/glue/kmem.c'
object='linux/dev/glue/liblinux_a-kmem.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/glue/liblinux_a-kmem.obj `if test -f 'linux/dev/glue/kmem.c'; then
$(CYGPATH_W) 'linux/dev/glue/kmem.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/glue/kmem.c'; fi`
+
+linux/dev/glue/liblinux_a-block.o: linux/dev/glue/block.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/glue/liblinux_a-block.o -MD -MP -MF
linux/dev/glue/$(DEPDIR)/liblinux_a-block.Tpo -c -o
linux/dev/glue/liblinux_a-block.o `test -f 'linux/dev/glue/block.c' || echo
'$(srcdir)/'`linux/dev/glue/block.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/glue/$(DEPDIR)/liblinux_a-block.Tpo
linux/dev/glue/$(DEPDIR)/liblinux_a-block.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/glue/block.c'
object='linux/dev/glue/liblinux_a-block.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/glue/liblinux_a-block.o `test -f 'linux/dev/glue/block.c' || echo
'$(srcdir)/'`linux/dev/glue/block.c
+
+linux/dev/glue/liblinux_a-block.obj: linux/dev/glue/block.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/glue/liblinux_a-block.obj -MD -MP -MF
linux/dev/glue/$(DEPDIR)/liblinux_a-block.Tpo -c -o
linux/dev/glue/liblinux_a-block.obj `if test -f 'linux/dev/glue/block.c'; then
$(CYGPATH_W) 'linux/dev/glue/block.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/glue/block.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/glue/$(DEPDIR)/liblinux_a-block.Tpo
linux/dev/glue/$(DEPDIR)/liblinux_a-block.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/glue/block.c'
object='linux/dev/glue/liblinux_a-block.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/glue/liblinux_a-block.obj `if test -f 'linux/dev/glue/block.c'; then
$(CYGPATH_W) 'linux/dev/glue/block.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/glue/block.c'; fi`
+
+linux/dev/arch/i386/kernel/liblinux_a-setup.o:
linux/dev/arch/i386/kernel/setup.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/arch/i386/kernel/liblinux_a-setup.o -MD -MP -MF
linux/dev/arch/i386/kernel/$(DEPDIR)/liblinux_a-setup.Tpo -c -o
linux/dev/arch/i386/kernel/liblinux_a-setup.o `test -f
'linux/dev/arch/i386/kernel/setup.c' || echo
'$(srcdir)/'`linux/dev/arch/i386/kernel/setup.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/arch/i386/kernel/$(DEPDIR)/liblinux_a-setup.Tpo
linux/dev/arch/i386/kernel/$(DEPDIR)/liblinux_a-setup.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/arch/i386/kernel/setup.c'
object='linux/dev/arch/i386/kernel/liblinux_a-setup.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/arch/i386/kernel/liblinux_a-setup.o `test -f
'linux/dev/arch/i386/kernel/setup.c' || echo
'$(srcdir)/'`linux/dev/arch/i386/kernel/setup.c
+
+linux/dev/arch/i386/kernel/liblinux_a-setup.obj:
linux/dev/arch/i386/kernel/setup.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/arch/i386/kernel/liblinux_a-setup.obj -MD -MP -MF
linux/dev/arch/i386/kernel/$(DEPDIR)/liblinux_a-setup.Tpo -c -o
linux/dev/arch/i386/kernel/liblinux_a-setup.obj `if test -f
'linux/dev/arch/i386/kernel/setup.c'; then $(CYGPATH_W)
'linux/dev/arch/i386/kernel/setup.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/arch/i386/kernel/setup.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/arch/i386/kernel/$(DEPDIR)/liblinux_a-setup.Tpo
linux/dev/arch/i386/kernel/$(DEPDIR)/liblinux_a-setup.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/arch/i386/kernel/setup.c'
object='linux/dev/arch/i386/kernel/liblinux_a-setup.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/arch/i386/kernel/liblinux_a-setup.obj `if test -f
'linux/dev/arch/i386/kernel/setup.c'; then $(CYGPATH_W)
'linux/dev/arch/i386/kernel/setup.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/arch/i386/kernel/setup.c'; fi`
+
+linux/src/drivers/pci/liblinux_a-pci.o: linux/src/drivers/pci/pci.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/pci/liblinux_a-pci.o -MD -MP -MF
linux/src/drivers/pci/$(DEPDIR)/liblinux_a-pci.Tpo -c -o
linux/src/drivers/pci/liblinux_a-pci.o `test -f 'linux/src/drivers/pci/pci.c'
|| echo '$(srcdir)/'`linux/src/drivers/pci/pci.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/pci/$(DEPDIR)/liblinux_a-pci.Tpo
linux/src/drivers/pci/$(DEPDIR)/liblinux_a-pci.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/pci/pci.c'
object='linux/src/drivers/pci/liblinux_a-pci.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/pci/liblinux_a-pci.o `test -f 'linux/src/drivers/pci/pci.c'
|| echo '$(srcdir)/'`linux/src/drivers/pci/pci.c
+
+linux/src/drivers/pci/liblinux_a-pci.obj: linux/src/drivers/pci/pci.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/pci/liblinux_a-pci.obj -MD -MP -MF
linux/src/drivers/pci/$(DEPDIR)/liblinux_a-pci.Tpo -c -o
linux/src/drivers/pci/liblinux_a-pci.obj `if test -f
'linux/src/drivers/pci/pci.c'; then $(CYGPATH_W) 'linux/src/drivers/pci/pci.c';
else $(CYGPATH_W) '$(srcdir)/linux/src/drivers/pci/pci.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/pci/$(DEPDIR)/liblinux_a-pci.Tpo
linux/src/drivers/pci/$(DEPDIR)/liblinux_a-pci.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/pci/pci.c'
object='linux/src/drivers/pci/liblinux_a-pci.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/pci/liblinux_a-pci.obj `if test -f
'linux/src/drivers/pci/pci.c'; then $(CYGPATH_W) 'linux/src/drivers/pci/pci.c';
else $(CYGPATH_W) '$(srcdir)/linux/src/drivers/pci/pci.c'; fi`
+
+linux/dev/drivers/block/liblinux_a-genhd.o: linux/dev/drivers/block/genhd.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/drivers/block/liblinux_a-genhd.o -MD -MP -MF
linux/dev/drivers/block/$(DEPDIR)/liblinux_a-genhd.Tpo -c -o
linux/dev/drivers/block/liblinux_a-genhd.o `test -f
'linux/dev/drivers/block/genhd.c' || echo
'$(srcdir)/'`linux/dev/drivers/block/genhd.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/drivers/block/$(DEPDIR)/liblinux_a-genhd.Tpo
linux/dev/drivers/block/$(DEPDIR)/liblinux_a-genhd.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/drivers/block/genhd.c'
object='linux/dev/drivers/block/liblinux_a-genhd.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/drivers/block/liblinux_a-genhd.o `test -f
'linux/dev/drivers/block/genhd.c' || echo
'$(srcdir)/'`linux/dev/drivers/block/genhd.c
+
+linux/dev/drivers/block/liblinux_a-genhd.obj: linux/dev/drivers/block/genhd.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/drivers/block/liblinux_a-genhd.obj -MD -MP -MF
linux/dev/drivers/block/$(DEPDIR)/liblinux_a-genhd.Tpo -c -o
linux/dev/drivers/block/liblinux_a-genhd.obj `if test -f
'linux/dev/drivers/block/genhd.c'; then $(CYGPATH_W)
'linux/dev/drivers/block/genhd.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/drivers/block/genhd.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/drivers/block/$(DEPDIR)/liblinux_a-genhd.Tpo
linux/dev/drivers/block/$(DEPDIR)/liblinux_a-genhd.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/drivers/block/genhd.c'
object='linux/dev/drivers/block/liblinux_a-genhd.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/drivers/block/liblinux_a-genhd.obj `if test -f
'linux/dev/drivers/block/genhd.c'; then $(CYGPATH_W)
'linux/dev/drivers/block/genhd.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/drivers/block/genhd.c'; fi`
+
+linux/dev/drivers/block/liblinux_a-floppy.o: linux/dev/drivers/block/floppy.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/drivers/block/liblinux_a-floppy.o -MD -MP -MF
linux/dev/drivers/block/$(DEPDIR)/liblinux_a-floppy.Tpo -c -o
linux/dev/drivers/block/liblinux_a-floppy.o `test -f
'linux/dev/drivers/block/floppy.c' || echo
'$(srcdir)/'`linux/dev/drivers/block/floppy.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/drivers/block/$(DEPDIR)/liblinux_a-floppy.Tpo
linux/dev/drivers/block/$(DEPDIR)/liblinux_a-floppy.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/drivers/block/floppy.c'
object='linux/dev/drivers/block/liblinux_a-floppy.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/drivers/block/liblinux_a-floppy.o `test -f
'linux/dev/drivers/block/floppy.c' || echo
'$(srcdir)/'`linux/dev/drivers/block/floppy.c
+
+linux/dev/drivers/block/liblinux_a-floppy.obj: linux/dev/drivers/block/floppy.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/drivers/block/liblinux_a-floppy.obj -MD -MP -MF
linux/dev/drivers/block/$(DEPDIR)/liblinux_a-floppy.Tpo -c -o
linux/dev/drivers/block/liblinux_a-floppy.obj `if test -f
'linux/dev/drivers/block/floppy.c'; then $(CYGPATH_W)
'linux/dev/drivers/block/floppy.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/drivers/block/floppy.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/drivers/block/$(DEPDIR)/liblinux_a-floppy.Tpo
linux/dev/drivers/block/$(DEPDIR)/liblinux_a-floppy.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/drivers/block/floppy.c'
object='linux/dev/drivers/block/liblinux_a-floppy.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/drivers/block/liblinux_a-floppy.obj `if test -f
'linux/dev/drivers/block/floppy.c'; then $(CYGPATH_W)
'linux/dev/drivers/block/floppy.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/drivers/block/floppy.c'; fi`
+
+linux/src/drivers/block/liblinux_a-cmd640.o: linux/src/drivers/block/cmd640.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/block/liblinux_a-cmd640.o -MD -MP -MF
linux/src/drivers/block/$(DEPDIR)/liblinux_a-cmd640.Tpo -c -o
linux/src/drivers/block/liblinux_a-cmd640.o `test -f
'linux/src/drivers/block/cmd640.c' || echo
'$(srcdir)/'`linux/src/drivers/block/cmd640.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/block/$(DEPDIR)/liblinux_a-cmd640.Tpo
linux/src/drivers/block/$(DEPDIR)/liblinux_a-cmd640.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/block/cmd640.c'
object='linux/src/drivers/block/liblinux_a-cmd640.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/block/liblinux_a-cmd640.o `test -f
'linux/src/drivers/block/cmd640.c' || echo
'$(srcdir)/'`linux/src/drivers/block/cmd640.c
+
+linux/src/drivers/block/liblinux_a-cmd640.obj: linux/src/drivers/block/cmd640.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/block/liblinux_a-cmd640.obj -MD -MP -MF
linux/src/drivers/block/$(DEPDIR)/liblinux_a-cmd640.Tpo -c -o
linux/src/drivers/block/liblinux_a-cmd640.obj `if test -f
'linux/src/drivers/block/cmd640.c'; then $(CYGPATH_W)
'linux/src/drivers/block/cmd640.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/block/cmd640.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/block/$(DEPDIR)/liblinux_a-cmd640.Tpo
linux/src/drivers/block/$(DEPDIR)/liblinux_a-cmd640.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/block/cmd640.c'
object='linux/src/drivers/block/liblinux_a-cmd640.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/block/liblinux_a-cmd640.obj `if test -f
'linux/src/drivers/block/cmd640.c'; then $(CYGPATH_W)
'linux/src/drivers/block/cmd640.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/block/cmd640.c'; fi`
+
+linux/src/drivers/block/liblinux_a-ide-cd.o: linux/src/drivers/block/ide-cd.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/block/liblinux_a-ide-cd.o -MD -MP -MF
linux/src/drivers/block/$(DEPDIR)/liblinux_a-ide-cd.Tpo -c -o
linux/src/drivers/block/liblinux_a-ide-cd.o `test -f
'linux/src/drivers/block/ide-cd.c' || echo
'$(srcdir)/'`linux/src/drivers/block/ide-cd.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/block/$(DEPDIR)/liblinux_a-ide-cd.Tpo
linux/src/drivers/block/$(DEPDIR)/liblinux_a-ide-cd.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/block/ide-cd.c'
object='linux/src/drivers/block/liblinux_a-ide-cd.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/block/liblinux_a-ide-cd.o `test -f
'linux/src/drivers/block/ide-cd.c' || echo
'$(srcdir)/'`linux/src/drivers/block/ide-cd.c
+
+linux/src/drivers/block/liblinux_a-ide-cd.obj: linux/src/drivers/block/ide-cd.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/block/liblinux_a-ide-cd.obj -MD -MP -MF
linux/src/drivers/block/$(DEPDIR)/liblinux_a-ide-cd.Tpo -c -o
linux/src/drivers/block/liblinux_a-ide-cd.obj `if test -f
'linux/src/drivers/block/ide-cd.c'; then $(CYGPATH_W)
'linux/src/drivers/block/ide-cd.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/block/ide-cd.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/block/$(DEPDIR)/liblinux_a-ide-cd.Tpo
linux/src/drivers/block/$(DEPDIR)/liblinux_a-ide-cd.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/block/ide-cd.c'
object='linux/src/drivers/block/liblinux_a-ide-cd.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/block/liblinux_a-ide-cd.obj `if test -f
'linux/src/drivers/block/ide-cd.c'; then $(CYGPATH_W)
'linux/src/drivers/block/ide-cd.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/block/ide-cd.c'; fi`
+
+linux/src/drivers/block/liblinux_a-ide.o: linux/src/drivers/block/ide.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/block/liblinux_a-ide.o -MD -MP -MF
linux/src/drivers/block/$(DEPDIR)/liblinux_a-ide.Tpo -c -o
linux/src/drivers/block/liblinux_a-ide.o `test -f
'linux/src/drivers/block/ide.c' || echo
'$(srcdir)/'`linux/src/drivers/block/ide.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/block/$(DEPDIR)/liblinux_a-ide.Tpo
linux/src/drivers/block/$(DEPDIR)/liblinux_a-ide.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/block/ide.c'
object='linux/src/drivers/block/liblinux_a-ide.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/block/liblinux_a-ide.o `test -f
'linux/src/drivers/block/ide.c' || echo
'$(srcdir)/'`linux/src/drivers/block/ide.c
+
+linux/src/drivers/block/liblinux_a-ide.obj: linux/src/drivers/block/ide.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/block/liblinux_a-ide.obj -MD -MP -MF
linux/src/drivers/block/$(DEPDIR)/liblinux_a-ide.Tpo -c -o
linux/src/drivers/block/liblinux_a-ide.obj `if test -f
'linux/src/drivers/block/ide.c'; then $(CYGPATH_W)
'linux/src/drivers/block/ide.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/block/ide.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/block/$(DEPDIR)/liblinux_a-ide.Tpo
linux/src/drivers/block/$(DEPDIR)/liblinux_a-ide.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/block/ide.c'
object='linux/src/drivers/block/liblinux_a-ide.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/block/liblinux_a-ide.obj `if test -f
'linux/src/drivers/block/ide.c'; then $(CYGPATH_W)
'linux/src/drivers/block/ide.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/block/ide.c'; fi`
+
+linux/dev/drivers/block/liblinux_a-ahci.o: linux/dev/drivers/block/ahci.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/drivers/block/liblinux_a-ahci.o -MD -MP -MF
linux/dev/drivers/block/$(DEPDIR)/liblinux_a-ahci.Tpo -c -o
linux/dev/drivers/block/liblinux_a-ahci.o `test -f
'linux/dev/drivers/block/ahci.c' || echo
'$(srcdir)/'`linux/dev/drivers/block/ahci.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/drivers/block/$(DEPDIR)/liblinux_a-ahci.Tpo
linux/dev/drivers/block/$(DEPDIR)/liblinux_a-ahci.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/drivers/block/ahci.c'
object='linux/dev/drivers/block/liblinux_a-ahci.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/drivers/block/liblinux_a-ahci.o `test -f
'linux/dev/drivers/block/ahci.c' || echo
'$(srcdir)/'`linux/dev/drivers/block/ahci.c
+
+linux/dev/drivers/block/liblinux_a-ahci.obj: linux/dev/drivers/block/ahci.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/drivers/block/liblinux_a-ahci.obj -MD -MP -MF
linux/dev/drivers/block/$(DEPDIR)/liblinux_a-ahci.Tpo -c -o
linux/dev/drivers/block/liblinux_a-ahci.obj `if test -f
'linux/dev/drivers/block/ahci.c'; then $(CYGPATH_W)
'linux/dev/drivers/block/ahci.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/drivers/block/ahci.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/drivers/block/$(DEPDIR)/liblinux_a-ahci.Tpo
linux/dev/drivers/block/$(DEPDIR)/liblinux_a-ahci.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/drivers/block/ahci.c'
object='linux/dev/drivers/block/liblinux_a-ahci.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/drivers/block/liblinux_a-ahci.obj `if test -f
'linux/dev/drivers/block/ahci.c'; then $(CYGPATH_W)
'linux/dev/drivers/block/ahci.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/drivers/block/ahci.c'; fi`
+
+linux/src/drivers/block/liblinux_a-rz1000.o: linux/src/drivers/block/rz1000.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/block/liblinux_a-rz1000.o -MD -MP -MF
linux/src/drivers/block/$(DEPDIR)/liblinux_a-rz1000.Tpo -c -o
linux/src/drivers/block/liblinux_a-rz1000.o `test -f
'linux/src/drivers/block/rz1000.c' || echo
'$(srcdir)/'`linux/src/drivers/block/rz1000.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/block/$(DEPDIR)/liblinux_a-rz1000.Tpo
linux/src/drivers/block/$(DEPDIR)/liblinux_a-rz1000.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/block/rz1000.c'
object='linux/src/drivers/block/liblinux_a-rz1000.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/block/liblinux_a-rz1000.o `test -f
'linux/src/drivers/block/rz1000.c' || echo
'$(srcdir)/'`linux/src/drivers/block/rz1000.c
+
+linux/src/drivers/block/liblinux_a-rz1000.obj: linux/src/drivers/block/rz1000.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/block/liblinux_a-rz1000.obj -MD -MP -MF
linux/src/drivers/block/$(DEPDIR)/liblinux_a-rz1000.Tpo -c -o
linux/src/drivers/block/liblinux_a-rz1000.obj `if test -f
'linux/src/drivers/block/rz1000.c'; then $(CYGPATH_W)
'linux/src/drivers/block/rz1000.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/block/rz1000.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/block/$(DEPDIR)/liblinux_a-rz1000.Tpo
linux/src/drivers/block/$(DEPDIR)/liblinux_a-rz1000.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/block/rz1000.c'
object='linux/src/drivers/block/liblinux_a-rz1000.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/block/liblinux_a-rz1000.obj `if test -f
'linux/src/drivers/block/rz1000.c'; then $(CYGPATH_W)
'linux/src/drivers/block/rz1000.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/block/rz1000.c'; fi`
+
+linux/src/drivers/block/liblinux_a-triton.o: linux/src/drivers/block/triton.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/block/liblinux_a-triton.o -MD -MP -MF
linux/src/drivers/block/$(DEPDIR)/liblinux_a-triton.Tpo -c -o
linux/src/drivers/block/liblinux_a-triton.o `test -f
'linux/src/drivers/block/triton.c' || echo
'$(srcdir)/'`linux/src/drivers/block/triton.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/block/$(DEPDIR)/liblinux_a-triton.Tpo
linux/src/drivers/block/$(DEPDIR)/liblinux_a-triton.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/block/triton.c'
object='linux/src/drivers/block/liblinux_a-triton.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/block/liblinux_a-triton.o `test -f
'linux/src/drivers/block/triton.c' || echo
'$(srcdir)/'`linux/src/drivers/block/triton.c
+
+linux/src/drivers/block/liblinux_a-triton.obj: linux/src/drivers/block/triton.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/block/liblinux_a-triton.obj -MD -MP -MF
linux/src/drivers/block/$(DEPDIR)/liblinux_a-triton.Tpo -c -o
linux/src/drivers/block/liblinux_a-triton.obj `if test -f
'linux/src/drivers/block/triton.c'; then $(CYGPATH_W)
'linux/src/drivers/block/triton.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/block/triton.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/block/$(DEPDIR)/liblinux_a-triton.Tpo
linux/src/drivers/block/$(DEPDIR)/liblinux_a-triton.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/block/triton.c'
object='linux/src/drivers/block/liblinux_a-triton.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/block/liblinux_a-triton.obj `if test -f
'linux/src/drivers/block/triton.c'; then $(CYGPATH_W)
'linux/src/drivers/block/triton.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/block/triton.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-constants.o:
linux/src/drivers/scsi/constants.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-constants.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-constants.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-constants.o `test -f
'linux/src/drivers/scsi/constants.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/constants.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-constants.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-constants.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/constants.c'
object='linux/src/drivers/scsi/liblinux_a-constants.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-constants.o `test -f
'linux/src/drivers/scsi/constants.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/constants.c
+
+linux/src/drivers/scsi/liblinux_a-constants.obj:
linux/src/drivers/scsi/constants.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-constants.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-constants.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-constants.obj `if test -f
'linux/src/drivers/scsi/constants.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/constants.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/constants.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-constants.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-constants.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/constants.c'
object='linux/src/drivers/scsi/liblinux_a-constants.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-constants.obj `if test -f
'linux/src/drivers/scsi/constants.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/constants.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/constants.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-hosts.o: linux/src/drivers/scsi/hosts.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-hosts.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-hosts.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-hosts.o `test -f
'linux/src/drivers/scsi/hosts.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/hosts.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-hosts.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-hosts.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/hosts.c'
object='linux/src/drivers/scsi/liblinux_a-hosts.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-hosts.o `test -f
'linux/src/drivers/scsi/hosts.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/hosts.c
+
+linux/src/drivers/scsi/liblinux_a-hosts.obj: linux/src/drivers/scsi/hosts.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-hosts.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-hosts.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-hosts.obj `if test -f
'linux/src/drivers/scsi/hosts.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/hosts.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/hosts.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-hosts.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-hosts.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/hosts.c'
object='linux/src/drivers/scsi/liblinux_a-hosts.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-hosts.obj `if test -f
'linux/src/drivers/scsi/hosts.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/hosts.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/hosts.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-scsi.o: linux/src/drivers/scsi/scsi.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-scsi.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsi.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-scsi.o `test -f
'linux/src/drivers/scsi/scsi.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/scsi.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsi.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsi.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/scsi.c'
object='linux/src/drivers/scsi/liblinux_a-scsi.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-scsi.o `test -f
'linux/src/drivers/scsi/scsi.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/scsi.c
+
+linux/src/drivers/scsi/liblinux_a-scsi.obj: linux/src/drivers/scsi/scsi.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-scsi.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsi.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-scsi.obj `if test -f
'linux/src/drivers/scsi/scsi.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/scsi.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/scsi.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsi.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsi.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/scsi.c'
object='linux/src/drivers/scsi/liblinux_a-scsi.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-scsi.obj `if test -f
'linux/src/drivers/scsi/scsi.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/scsi.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/scsi.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-scsi_ioctl.o:
linux/src/drivers/scsi/scsi_ioctl.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-scsi_ioctl.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsi_ioctl.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-scsi_ioctl.o `test -f
'linux/src/drivers/scsi/scsi_ioctl.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/scsi_ioctl.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsi_ioctl.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsi_ioctl.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/scsi_ioctl.c'
object='linux/src/drivers/scsi/liblinux_a-scsi_ioctl.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-scsi_ioctl.o `test -f
'linux/src/drivers/scsi/scsi_ioctl.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/scsi_ioctl.c
+
+linux/src/drivers/scsi/liblinux_a-scsi_ioctl.obj:
linux/src/drivers/scsi/scsi_ioctl.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-scsi_ioctl.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsi_ioctl.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-scsi_ioctl.obj `if test -f
'linux/src/drivers/scsi/scsi_ioctl.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/scsi_ioctl.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/scsi_ioctl [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsi_ioctl.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsi_ioctl.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/scsi_ioctl.c'
object='linux/src/drivers/scsi/liblinux_a-scsi_ioctl.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-scsi_ioctl.obj `if test -f
'linux/src/drivers/scsi/scsi_ioctl.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/scsi_ioctl.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/scsi_ioctl.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-scsi_proc.o:
linux/src/drivers/scsi/scsi_proc.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-scsi_proc.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsi_proc.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-scsi_proc.o `test -f
'linux/src/drivers/scsi/scsi_proc.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/scsi_proc.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsi_proc.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsi_proc.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/scsi_proc.c'
object='linux/src/drivers/scsi/liblinux_a-scsi_proc.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-scsi_proc.o `test -f
'linux/src/drivers/scsi/scsi_proc.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/scsi_proc.c
+
+linux/src/drivers/scsi/liblinux_a-scsi_proc.obj:
linux/src/drivers/scsi/scsi_proc.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-scsi_proc.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsi_proc.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-scsi_proc.obj `if test -f
'linux/src/drivers/scsi/scsi_proc.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/scsi_proc.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/scsi_proc.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsi_proc.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsi_proc.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/scsi_proc.c'
object='linux/src/drivers/scsi/liblinux_a-scsi_proc.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-scsi_proc.obj `if test -f
'linux/src/drivers/scsi/scsi_proc.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/scsi_proc.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/scsi_proc.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-scsicam.o: linux/src/drivers/scsi/scsicam.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-scsicam.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsicam.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-scsicam.o `test -f
'linux/src/drivers/scsi/scsicam.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/scsicam.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsicam.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsicam.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/scsicam.c'
object='linux/src/drivers/scsi/liblinux_a-scsicam.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-scsicam.o `test -f
'linux/src/drivers/scsi/scsicam.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/scsicam.c
+
+linux/src/drivers/scsi/liblinux_a-scsicam.obj: linux/src/drivers/scsi/scsicam.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-scsicam.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsicam.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-scsicam.obj `if test -f
'linux/src/drivers/scsi/scsicam.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/scsicam.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/scsicam.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsicam.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-scsicam.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/scsicam.c'
object='linux/src/drivers/scsi/liblinux_a-scsicam.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-scsicam.obj `if test -f
'linux/src/drivers/scsi/scsicam.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/scsicam.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/scsicam.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-sd.o: linux/src/drivers/scsi/sd.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-sd.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sd.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-sd.o `test -f 'linux/src/drivers/scsi/sd.c'
|| echo '$(srcdir)/'`linux/src/drivers/scsi/sd.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sd.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sd.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/sd.c'
object='linux/src/drivers/scsi/liblinux_a-sd.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-sd.o `test -f 'linux/src/drivers/scsi/sd.c'
|| echo '$(srcdir)/'`linux/src/drivers/scsi/sd.c
+
+linux/src/drivers/scsi/liblinux_a-sd.obj: linux/src/drivers/scsi/sd.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-sd.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sd.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-sd.obj `if test -f
'linux/src/drivers/scsi/sd.c'; then $(CYGPATH_W) 'linux/src/drivers/scsi/sd.c';
else $(CYGPATH_W) '$(srcdir)/linux/src/drivers/scsi/sd.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sd.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sd.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/sd.c'
object='linux/src/drivers/scsi/liblinux_a-sd.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-sd.obj `if test -f
'linux/src/drivers/scsi/sd.c'; then $(CYGPATH_W) 'linux/src/drivers/scsi/sd.c';
else $(CYGPATH_W) '$(srcdir)/linux/src/drivers/scsi/sd.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-sd_ioctl.o: linux/src/drivers/scsi/sd_ioctl.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-sd_ioctl.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sd_ioctl.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-sd_ioctl.o `test -f
'linux/src/drivers/scsi/sd_ioctl.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/sd_ioctl.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sd_ioctl.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sd_ioctl.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/sd_ioctl.c'
object='linux/src/drivers/scsi/liblinux_a-sd_ioctl.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-sd_ioctl.o `test -f
'linux/src/drivers/scsi/sd_ioctl.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/sd_ioctl.c
+
+linux/src/drivers/scsi/liblinux_a-sd_ioctl.obj:
linux/src/drivers/scsi/sd_ioctl.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-sd_ioctl.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sd_ioctl.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-sd_ioctl.obj `if test -f
'linux/src/drivers/scsi/sd_ioctl.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/sd_ioctl.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/sd_ioctl.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sd_ioctl.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sd_ioctl.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/sd_ioctl.c'
object='linux/src/drivers/scsi/liblinux_a-sd_ioctl.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-sd_ioctl.obj `if test -f
'linux/src/drivers/scsi/sd_ioctl.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/sd_ioctl.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/sd_ioctl.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-sr.o: linux/src/drivers/scsi/sr.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-sr.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sr.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-sr.o `test -f 'linux/src/drivers/scsi/sr.c'
|| echo '$(srcdir)/'`linux/src/drivers/scsi/sr.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sr.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sr.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/sr.c'
object='linux/src/drivers/scsi/liblinux_a-sr.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-sr.o `test -f 'linux/src/drivers/scsi/sr.c'
|| echo '$(srcdir)/'`linux/src/drivers/scsi/sr.c
+
+linux/src/drivers/scsi/liblinux_a-sr.obj: linux/src/drivers/scsi/sr.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-sr.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sr.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-sr.obj `if test -f
'linux/src/drivers/scsi/sr.c'; then $(CYGPATH_W) 'linux/src/drivers/scsi/sr.c';
else $(CYGPATH_W) '$(srcdir)/linux/src/drivers/scsi/sr.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sr.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sr.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/sr.c'
object='linux/src/drivers/scsi/liblinux_a-sr.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-sr.obj `if test -f
'linux/src/drivers/scsi/sr.c'; then $(CYGPATH_W) 'linux/src/drivers/scsi/sr.c';
else $(CYGPATH_W) '$(srcdir)/linux/src/drivers/scsi/sr.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-sr_ioctl.o: linux/src/drivers/scsi/sr_ioctl.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-sr_ioctl.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sr_ioctl.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-sr_ioctl.o `test -f
'linux/src/drivers/scsi/sr_ioctl.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/sr_ioctl.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sr_ioctl.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sr_ioctl.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/sr_ioctl.c'
object='linux/src/drivers/scsi/liblinux_a-sr_ioctl.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-sr_ioctl.o `test -f
'linux/src/drivers/scsi/sr_ioctl.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/sr_ioctl.c
+
+linux/src/drivers/scsi/liblinux_a-sr_ioctl.obj:
linux/src/drivers/scsi/sr_ioctl.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-sr_ioctl.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sr_ioctl.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-sr_ioctl.obj `if test -f
'linux/src/drivers/scsi/sr_ioctl.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/sr_ioctl.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/sr_ioctl.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sr_ioctl.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sr_ioctl.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/sr_ioctl.c'
object='linux/src/drivers/scsi/liblinux_a-sr_ioctl.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-sr_ioctl.obj `if test -f
'linux/src/drivers/scsi/sr_ioctl.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/sr_ioctl.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/sr_ioctl.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-53c78xx.o: linux/src/drivers/scsi/53c78xx.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-53c78xx.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-53c78xx.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-53c78xx.o `test -f
'linux/src/drivers/scsi/53c78xx.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/53c78xx.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-53c78xx.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-53c78xx.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/53c78xx.c'
object='linux/src/drivers/scsi/liblinux_a-53c78xx.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-53c78xx.o `test -f
'linux/src/drivers/scsi/53c78xx.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/53c78xx.c
+
+linux/src/drivers/scsi/liblinux_a-53c78xx.obj: linux/src/drivers/scsi/53c78xx.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-53c78xx.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-53c78xx.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-53c78xx.obj `if test -f
'linux/src/drivers/scsi/53c78xx.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/53c78xx.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/53c78xx.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-53c78xx.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-53c78xx.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/53c78xx.c'
object='linux/src/drivers/scsi/liblinux_a-53c78xx.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-53c78xx.obj `if test -f
'linux/src/drivers/scsi/53c78xx.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/53c78xx.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/53c78xx.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-AM53C974.o: linux/src/drivers/scsi/AM53C974.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-AM53C974.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-AM53C974.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-AM53C974.o `test -f
'linux/src/drivers/scsi/AM53C974.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/AM53C974.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-AM53C974.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-AM53C974.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/AM53C974.c'
object='linux/src/drivers/scsi/liblinux_a-AM53C974.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-AM53C974.o `test -f
'linux/src/drivers/scsi/AM53C974.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/AM53C974.c
+
+linux/src/drivers/scsi/liblinux_a-AM53C974.obj:
linux/src/drivers/scsi/AM53C974.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-AM53C974.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-AM53C974.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-AM53C974.obj `if test -f
'linux/src/drivers/scsi/AM53C974.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/AM53C974.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/AM53C974.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-AM53C974.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-AM53C974.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/AM53C974.c'
object='linux/src/drivers/scsi/liblinux_a-AM53C974.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-AM53C974.obj `if test -f
'linux/src/drivers/scsi/AM53C974.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/AM53C974.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/AM53C974.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-BusLogic.o: linux/src/drivers/scsi/BusLogic.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-BusLogic.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-BusLogic.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-BusLogic.o `test -f
'linux/src/drivers/scsi/BusLogic.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/BusLogic.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-BusLogic.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-BusLogic.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/BusLogic.c'
object='linux/src/drivers/scsi/liblinux_a-BusLogic.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-BusLogic.o `test -f
'linux/src/drivers/scsi/BusLogic.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/BusLogic.c
+
+linux/src/drivers/scsi/liblinux_a-BusLogic.obj:
linux/src/drivers/scsi/BusLogic.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-BusLogic.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-BusLogic.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-BusLogic.obj `if test -f
'linux/src/drivers/scsi/BusLogic.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/BusLogic.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/BusLogic.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-BusLogic.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-BusLogic.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/BusLogic.c'
object='linux/src/drivers/scsi/liblinux_a-BusLogic.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-BusLogic.obj `if test -f
'linux/src/drivers/scsi/BusLogic.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/BusLogic.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/BusLogic.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-NCR53c406a.o:
linux/src/drivers/scsi/NCR53c406a.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-NCR53c406a.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-NCR53c406a.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-NCR53c406a.o `test -f
'linux/src/drivers/scsi/NCR53c406a.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/NCR53c406a.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-NCR53c406a.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-NCR53c406a.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/NCR53c406a.c'
object='linux/src/drivers/scsi/liblinux_a-NCR53c406a.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-NCR53c406a.o `test -f
'linux/src/drivers/scsi/NCR53c406a.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/NCR53c406a.c
+
+linux/src/drivers/scsi/liblinux_a-NCR53c406a.obj:
linux/src/drivers/scsi/NCR53c406a.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-NCR53c406a.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-NCR53c406a.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-NCR53c406a.obj `if test -f
'linux/src/drivers/scsi/NCR53c406a.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/NCR53c406a.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/NCR53c406a [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-NCR53c406a.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-NCR53c406a.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/NCR53c406a.c'
object='linux/src/drivers/scsi/liblinux_a-NCR53c406a.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-NCR53c406a.obj `if test -f
'linux/src/drivers/scsi/NCR53c406a.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/NCR53c406a.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/NCR53c406a.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-advansys.o: linux/src/drivers/scsi/advansys.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-advansys.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-advansys.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-advansys.o `test -f
'linux/src/drivers/scsi/advansys.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/advansys.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-advansys.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-advansys.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/advansys.c'
object='linux/src/drivers/scsi/liblinux_a-advansys.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-advansys.o `test -f
'linux/src/drivers/scsi/advansys.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/advansys.c
+
+linux/src/drivers/scsi/liblinux_a-advansys.obj:
linux/src/drivers/scsi/advansys.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-advansys.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-advansys.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-advansys.obj `if test -f
'linux/src/drivers/scsi/advansys.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/advansys.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/advansys.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-advansys.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-advansys.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/advansys.c'
object='linux/src/drivers/scsi/liblinux_a-advansys.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-advansys.obj `if test -f
'linux/src/drivers/scsi/advansys.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/advansys.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/advansys.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-aha152x.o: linux/src/drivers/scsi/aha152x.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-aha152x.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aha152x.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-aha152x.o `test -f
'linux/src/drivers/scsi/aha152x.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/aha152x.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aha152x.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aha152x.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/aha152x.c'
object='linux/src/drivers/scsi/liblinux_a-aha152x.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-aha152x.o `test -f
'linux/src/drivers/scsi/aha152x.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/aha152x.c
+
+linux/src/drivers/scsi/liblinux_a-aha152x.obj: linux/src/drivers/scsi/aha152x.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-aha152x.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aha152x.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-aha152x.obj `if test -f
'linux/src/drivers/scsi/aha152x.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/aha152x.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/aha152x.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aha152x.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aha152x.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/aha152x.c'
object='linux/src/drivers/scsi/liblinux_a-aha152x.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-aha152x.obj `if test -f
'linux/src/drivers/scsi/aha152x.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/aha152x.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/aha152x.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-aha1542.o: linux/src/drivers/scsi/aha1542.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-aha1542.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aha1542.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-aha1542.o `test -f
'linux/src/drivers/scsi/aha1542.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/aha1542.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aha1542.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aha1542.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/aha1542.c'
object='linux/src/drivers/scsi/liblinux_a-aha1542.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-aha1542.o `test -f
'linux/src/drivers/scsi/aha1542.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/aha1542.c
+
+linux/src/drivers/scsi/liblinux_a-aha1542.obj: linux/src/drivers/scsi/aha1542.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-aha1542.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aha1542.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-aha1542.obj `if test -f
'linux/src/drivers/scsi/aha1542.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/aha1542.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/aha1542.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aha1542.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aha1542.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/aha1542.c'
object='linux/src/drivers/scsi/liblinux_a-aha1542.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-aha1542.obj `if test -f
'linux/src/drivers/scsi/aha1542.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/aha1542.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/aha1542.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-aha1740.o: linux/src/drivers/scsi/aha1740.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-aha1740.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aha1740.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-aha1740.o `test -f
'linux/src/drivers/scsi/aha1740.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/aha1740.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aha1740.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aha1740.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/aha1740.c'
object='linux/src/drivers/scsi/liblinux_a-aha1740.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-aha1740.o `test -f
'linux/src/drivers/scsi/aha1740.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/aha1740.c
+
+linux/src/drivers/scsi/liblinux_a-aha1740.obj: linux/src/drivers/scsi/aha1740.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-aha1740.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aha1740.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-aha1740.obj `if test -f
'linux/src/drivers/scsi/aha1740.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/aha1740.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/aha1740.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aha1740.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aha1740.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/aha1740.c'
object='linux/src/drivers/scsi/liblinux_a-aha1740.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-aha1740.obj `if test -f
'linux/src/drivers/scsi/aha1740.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/aha1740.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/aha1740.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-aic7xxx.o: linux/src/drivers/scsi/aic7xxx.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-aic7xxx.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aic7xxx.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-aic7xxx.o `test -f
'linux/src/drivers/scsi/aic7xxx.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/aic7xxx.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aic7xxx.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aic7xxx.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/aic7xxx.c'
object='linux/src/drivers/scsi/liblinux_a-aic7xxx.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-aic7xxx.o `test -f
'linux/src/drivers/scsi/aic7xxx.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/aic7xxx.c
+
+linux/src/drivers/scsi/liblinux_a-aic7xxx.obj: linux/src/drivers/scsi/aic7xxx.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-aic7xxx.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aic7xxx.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-aic7xxx.obj `if test -f
'linux/src/drivers/scsi/aic7xxx.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/aic7xxx.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/aic7xxx.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aic7xxx.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-aic7xxx.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/aic7xxx.c'
object='linux/src/drivers/scsi/liblinux_a-aic7xxx.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-aic7xxx.obj `if test -f
'linux/src/drivers/scsi/aic7xxx.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/aic7xxx.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/aic7xxx.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-dtc.o: linux/src/drivers/scsi/dtc.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-dtc.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-dtc.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-dtc.o `test -f 'linux/src/drivers/scsi/dtc.c'
|| echo '$(srcdir)/'`linux/src/drivers/scsi/dtc.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-dtc.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-dtc.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/dtc.c'
object='linux/src/drivers/scsi/liblinux_a-dtc.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-dtc.o `test -f 'linux/src/drivers/scsi/dtc.c'
|| echo '$(srcdir)/'`linux/src/drivers/scsi/dtc.c
+
+linux/src/drivers/scsi/liblinux_a-dtc.obj: linux/src/drivers/scsi/dtc.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-dtc.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-dtc.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-dtc.obj `if test -f
'linux/src/drivers/scsi/dtc.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/dtc.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/dtc.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-dtc.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-dtc.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/dtc.c'
object='linux/src/drivers/scsi/liblinux_a-dtc.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-dtc.obj `if test -f
'linux/src/drivers/scsi/dtc.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/dtc.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/dtc.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-eata.o: linux/src/drivers/scsi/eata.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-eata.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-eata.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-eata.o `test -f
'linux/src/drivers/scsi/eata.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/eata.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-eata.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-eata.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/eata.c'
object='linux/src/drivers/scsi/liblinux_a-eata.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-eata.o `test -f
'linux/src/drivers/scsi/eata.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/eata.c
+
+linux/src/drivers/scsi/liblinux_a-eata.obj: linux/src/drivers/scsi/eata.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-eata.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-eata.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-eata.obj `if test -f
'linux/src/drivers/scsi/eata.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/eata.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/eata.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-eata.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-eata.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/eata.c'
object='linux/src/drivers/scsi/liblinux_a-eata.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-eata.obj `if test -f
'linux/src/drivers/scsi/eata.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/eata.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/eata.c'; fi`
+
+linux/dev/drivers/scsi/liblinux_a-eata_dma.o: linux/dev/drivers/scsi/eata_dma.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/drivers/scsi/liblinux_a-eata_dma.o -MD -MP -MF
linux/dev/drivers/scsi/$(DEPDIR)/liblinux_a-eata_dma.Tpo -c -o
linux/dev/drivers/scsi/liblinux_a-eata_dma.o `test -f
'linux/dev/drivers/scsi/eata_dma.c' || echo
'$(srcdir)/'`linux/dev/drivers/scsi/eata_dma.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/drivers/scsi/$(DEPDIR)/liblinux_a-eata_dma.Tpo
linux/dev/drivers/scsi/$(DEPDIR)/liblinux_a-eata_dma.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/drivers/scsi/eata_dma.c'
object='linux/dev/drivers/scsi/liblinux_a-eata_dma.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/drivers/scsi/liblinux_a-eata_dma.o `test -f
'linux/dev/drivers/scsi/eata_dma.c' || echo
'$(srcdir)/'`linux/dev/drivers/scsi/eata_dma.c
+
+linux/dev/drivers/scsi/liblinux_a-eata_dma.obj:
linux/dev/drivers/scsi/eata_dma.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/drivers/scsi/liblinux_a-eata_dma.obj -MD -MP -MF
linux/dev/drivers/scsi/$(DEPDIR)/liblinux_a-eata_dma.Tpo -c -o
linux/dev/drivers/scsi/liblinux_a-eata_dma.obj `if test -f
'linux/dev/drivers/scsi/eata_dma.c'; then $(CYGPATH_W)
'linux/dev/drivers/scsi/eata_dma.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/drivers/scsi/eata_dma.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/drivers/scsi/$(DEPDIR)/liblinux_a-eata_dma.Tpo
linux/dev/drivers/scsi/$(DEPDIR)/liblinux_a-eata_dma.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/drivers/scsi/eata_dma.c'
object='linux/dev/drivers/scsi/liblinux_a-eata_dma.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/drivers/scsi/liblinux_a-eata_dma.obj `if test -f
'linux/dev/drivers/scsi/eata_dma.c'; then $(CYGPATH_W)
'linux/dev/drivers/scsi/eata_dma.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/drivers/scsi/eata_dma.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-eata_pio.o: linux/src/drivers/scsi/eata_pio.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-eata_pio.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-eata_pio.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-eata_pio.o `test -f
'linux/src/drivers/scsi/eata_pio.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/eata_pio.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-eata_pio.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-eata_pio.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/eata_pio.c'
object='linux/src/drivers/scsi/liblinux_a-eata_pio.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-eata_pio.o `test -f
'linux/src/drivers/scsi/eata_pio.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/eata_pio.c
+
+linux/src/drivers/scsi/liblinux_a-eata_pio.obj:
linux/src/drivers/scsi/eata_pio.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-eata_pio.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-eata_pio.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-eata_pio.obj `if test -f
'linux/src/drivers/scsi/eata_pio.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/eata_pio.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/eata_pio.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-eata_pio.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-eata_pio.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/eata_pio.c'
object='linux/src/drivers/scsi/liblinux_a-eata_pio.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-eata_pio.obj `if test -f
'linux/src/drivers/scsi/eata_pio.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/eata_pio.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/eata_pio.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-fdomain.o: linux/src/drivers/scsi/fdomain.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-fdomain.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-fdomain.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-fdomain.o `test -f
'linux/src/drivers/scsi/fdomain.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/fdomain.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-fdomain.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-fdomain.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/fdomain.c'
object='linux/src/drivers/scsi/liblinux_a-fdomain.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-fdomain.o `test -f
'linux/src/drivers/scsi/fdomain.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/fdomain.c
+
+linux/src/drivers/scsi/liblinux_a-fdomain.obj: linux/src/drivers/scsi/fdomain.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-fdomain.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-fdomain.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-fdomain.obj `if test -f
'linux/src/drivers/scsi/fdomain.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/fdomain.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/fdomain.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-fdomain.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-fdomain.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/fdomain.c'
object='linux/src/drivers/scsi/liblinux_a-fdomain.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-fdomain.obj `if test -f
'linux/src/drivers/scsi/fdomain.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/fdomain.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/fdomain.c'; fi`
+
+linux/dev/drivers/scsi/liblinux_a-g_NCR5380.o:
linux/dev/drivers/scsi/g_NCR5380.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/drivers/scsi/liblinux_a-g_NCR5380.o -MD -MP -MF
linux/dev/drivers/scsi/$(DEPDIR)/liblinux_a-g_NCR5380.Tpo -c -o
linux/dev/drivers/scsi/liblinux_a-g_NCR5380.o `test -f
'linux/dev/drivers/scsi/g_NCR5380.c' || echo
'$(srcdir)/'`linux/dev/drivers/scsi/g_NCR5380.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/drivers/scsi/$(DEPDIR)/liblinux_a-g_NCR5380.Tpo
linux/dev/drivers/scsi/$(DEPDIR)/liblinux_a-g_NCR5380.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/drivers/scsi/g_NCR5380.c'
object='linux/dev/drivers/scsi/liblinux_a-g_NCR5380.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/drivers/scsi/liblinux_a-g_NCR5380.o `test -f
'linux/dev/drivers/scsi/g_NCR5380.c' || echo
'$(srcdir)/'`linux/dev/drivers/scsi/g_NCR5380.c
+
+linux/dev/drivers/scsi/liblinux_a-g_NCR5380.obj:
linux/dev/drivers/scsi/g_NCR5380.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/drivers/scsi/liblinux_a-g_NCR5380.obj -MD -MP -MF
linux/dev/drivers/scsi/$(DEPDIR)/liblinux_a-g_NCR5380.Tpo -c -o
linux/dev/drivers/scsi/liblinux_a-g_NCR5380.obj `if test -f
'linux/dev/drivers/scsi/g_NCR5380.c'; then $(CYGPATH_W)
'linux/dev/drivers/scsi/g_NCR5380.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/drivers/scsi/g_NCR5380.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/drivers/scsi/$(DEPDIR)/liblinux_a-g_NCR5380.Tpo
linux/dev/drivers/scsi/$(DEPDIR)/liblinux_a-g_NCR5380.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/drivers/scsi/g_NCR5380.c'
object='linux/dev/drivers/scsi/liblinux_a-g_NCR5380.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/drivers/scsi/liblinux_a-g_NCR5380.obj `if test -f
'linux/dev/drivers/scsi/g_NCR5380.c'; then $(CYGPATH_W)
'linux/dev/drivers/scsi/g_NCR5380.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/drivers/scsi/g_NCR5380.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-gdth.o: linux/src/drivers/scsi/gdth.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-gdth.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-gdth.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-gdth.o `test -f
'linux/src/drivers/scsi/gdth.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/gdth.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-gdth.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-gdth.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/gdth.c'
object='linux/src/drivers/scsi/liblinux_a-gdth.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-gdth.o `test -f
'linux/src/drivers/scsi/gdth.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/gdth.c
+
+linux/src/drivers/scsi/liblinux_a-gdth.obj: linux/src/drivers/scsi/gdth.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-gdth.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-gdth.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-gdth.obj `if test -f
'linux/src/drivers/scsi/gdth.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/gdth.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/gdth.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-gdth.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-gdth.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/gdth.c'
object='linux/src/drivers/scsi/liblinux_a-gdth.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-gdth.obj `if test -f
'linux/src/drivers/scsi/gdth.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/gdth.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/gdth.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-in2000.o: linux/src/drivers/scsi/in2000.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-in2000.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-in2000.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-in2000.o `test -f
'linux/src/drivers/scsi/in2000.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/in2000.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-in2000.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-in2000.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/in2000.c'
object='linux/src/drivers/scsi/liblinux_a-in2000.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-in2000.o `test -f
'linux/src/drivers/scsi/in2000.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/in2000.c
+
+linux/src/drivers/scsi/liblinux_a-in2000.obj: linux/src/drivers/scsi/in2000.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-in2000.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-in2000.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-in2000.obj `if test -f
'linux/src/drivers/scsi/in2000.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/in2000.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/in2000.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-in2000.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-in2000.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/in2000.c'
object='linux/src/drivers/scsi/liblinux_a-in2000.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-in2000.obj `if test -f
'linux/src/drivers/scsi/in2000.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/in2000.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/in2000.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-ncr53c8xx.o:
linux/src/drivers/scsi/ncr53c8xx.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-ncr53c8xx.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-ncr53c8xx.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-ncr53c8xx.o `test -f
'linux/src/drivers/scsi/ncr53c8xx.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/ncr53c8xx.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-ncr53c8xx.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-ncr53c8xx.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/ncr53c8xx.c'
object='linux/src/drivers/scsi/liblinux_a-ncr53c8xx.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-ncr53c8xx.o `test -f
'linux/src/drivers/scsi/ncr53c8xx.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/ncr53c8xx.c
+
+linux/src/drivers/scsi/liblinux_a-ncr53c8xx.obj:
linux/src/drivers/scsi/ncr53c8xx.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-ncr53c8xx.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-ncr53c8xx.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-ncr53c8xx.obj `if test -f
'linux/src/drivers/scsi/ncr53c8xx.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/ncr53c8xx.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/ncr53c8xx.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-ncr53c8xx.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-ncr53c8xx.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/ncr53c8xx.c'
object='linux/src/drivers/scsi/liblinux_a-ncr53c8xx.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-ncr53c8xx.obj `if test -f
'linux/src/drivers/scsi/ncr53c8xx.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/ncr53c8xx.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/ncr53c8xx.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-pas16.o: linux/src/drivers/scsi/pas16.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-pas16.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-pas16.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-pas16.o `test -f
'linux/src/drivers/scsi/pas16.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/pas16.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-pas16.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-pas16.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/pas16.c'
object='linux/src/drivers/scsi/liblinux_a-pas16.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-pas16.o `test -f
'linux/src/drivers/scsi/pas16.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/pas16.c
+
+linux/src/drivers/scsi/liblinux_a-pas16.obj: linux/src/drivers/scsi/pas16.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-pas16.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-pas16.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-pas16.obj `if test -f
'linux/src/drivers/scsi/pas16.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/pas16.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/pas16.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-pas16.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-pas16.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/pas16.c'
object='linux/src/drivers/scsi/liblinux_a-pas16.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-pas16.obj `if test -f
'linux/src/drivers/scsi/pas16.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/pas16.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/pas16.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-ppa.o: linux/src/drivers/scsi/ppa.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-ppa.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-ppa.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-ppa.o `test -f 'linux/src/drivers/scsi/ppa.c'
|| echo '$(srcdir)/'`linux/src/drivers/scsi/ppa.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-ppa.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-ppa.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/ppa.c'
object='linux/src/drivers/scsi/liblinux_a-ppa.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-ppa.o `test -f 'linux/src/drivers/scsi/ppa.c'
|| echo '$(srcdir)/'`linux/src/drivers/scsi/ppa.c
+
+linux/src/drivers/scsi/liblinux_a-ppa.obj: linux/src/drivers/scsi/ppa.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-ppa.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-ppa.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-ppa.obj `if test -f
'linux/src/drivers/scsi/ppa.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/ppa.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/ppa.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-ppa.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-ppa.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/ppa.c'
object='linux/src/drivers/scsi/liblinux_a-ppa.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-ppa.obj `if test -f
'linux/src/drivers/scsi/ppa.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/ppa.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/ppa.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-qlogicfas.o:
linux/src/drivers/scsi/qlogicfas.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-qlogicfas.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-qlogicfas.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-qlogicfas.o `test -f
'linux/src/drivers/scsi/qlogicfas.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/qlogicfas.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-qlogicfas.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-qlogicfas.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/qlogicfas.c'
object='linux/src/drivers/scsi/liblinux_a-qlogicfas.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-qlogicfas.o `test -f
'linux/src/drivers/scsi/qlogicfas.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/qlogicfas.c
+
+linux/src/drivers/scsi/liblinux_a-qlogicfas.obj:
linux/src/drivers/scsi/qlogicfas.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-qlogicfas.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-qlogicfas.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-qlogicfas.obj `if test -f
'linux/src/drivers/scsi/qlogicfas.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/qlogicfas.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/qlogicfas.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-qlogicfas.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-qlogicfas.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/qlogicfas.c'
object='linux/src/drivers/scsi/liblinux_a-qlogicfas.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-qlogicfas.obj `if test -f
'linux/src/drivers/scsi/qlogicfas.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/qlogicfas.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/qlogicfas.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-qlogicisp.o:
linux/src/drivers/scsi/qlogicisp.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-qlogicisp.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-qlogicisp.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-qlogicisp.o `test -f
'linux/src/drivers/scsi/qlogicisp.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/qlogicisp.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-qlogicisp.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-qlogicisp.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/qlogicisp.c'
object='linux/src/drivers/scsi/liblinux_a-qlogicisp.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-qlogicisp.o `test -f
'linux/src/drivers/scsi/qlogicisp.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/qlogicisp.c
+
+linux/src/drivers/scsi/liblinux_a-qlogicisp.obj:
linux/src/drivers/scsi/qlogicisp.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-qlogicisp.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-qlogicisp.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-qlogicisp.obj `if test -f
'linux/src/drivers/scsi/qlogicisp.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/qlogicisp.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/qlogicisp.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-qlogicisp.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-qlogicisp.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/qlogicisp.c'
object='linux/src/drivers/scsi/liblinux_a-qlogicisp.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-qlogicisp.obj `if test -f
'linux/src/drivers/scsi/qlogicisp.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/qlogicisp.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/qlogicisp.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-seagate.o: linux/src/drivers/scsi/seagate.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-seagate.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-seagate.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-seagate.o `test -f
'linux/src/drivers/scsi/seagate.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/seagate.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-seagate.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-seagate.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/seagate.c'
object='linux/src/drivers/scsi/liblinux_a-seagate.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-seagate.o `test -f
'linux/src/drivers/scsi/seagate.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/seagate.c
+
+linux/src/drivers/scsi/liblinux_a-seagate.obj: linux/src/drivers/scsi/seagate.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-seagate.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-seagate.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-seagate.obj `if test -f
'linux/src/drivers/scsi/seagate.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/seagate.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/seagate.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-seagate.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-seagate.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/seagate.c'
object='linux/src/drivers/scsi/liblinux_a-seagate.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-seagate.obj `if test -f
'linux/src/drivers/scsi/seagate.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/seagate.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/seagate.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-sym53c8xx.o:
linux/src/drivers/scsi/sym53c8xx.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-sym53c8xx.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sym53c8xx.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-sym53c8xx.o `test -f
'linux/src/drivers/scsi/sym53c8xx.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/sym53c8xx.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sym53c8xx.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sym53c8xx.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/sym53c8xx.c'
object='linux/src/drivers/scsi/liblinux_a-sym53c8xx.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-sym53c8xx.o `test -f
'linux/src/drivers/scsi/sym53c8xx.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/sym53c8xx.c
+
+linux/src/drivers/scsi/liblinux_a-sym53c8xx.obj:
linux/src/drivers/scsi/sym53c8xx.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-sym53c8xx.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sym53c8xx.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-sym53c8xx.obj `if test -f
'linux/src/drivers/scsi/sym53c8xx.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/sym53c8xx.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/sym53c8xx.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sym53c8xx.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-sym53c8xx.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/sym53c8xx.c'
object='linux/src/drivers/scsi/liblinux_a-sym53c8xx.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-sym53c8xx.obj `if test -f
'linux/src/drivers/scsi/sym53c8xx.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/sym53c8xx.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/sym53c8xx.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-t128.o: linux/src/drivers/scsi/t128.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-t128.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-t128.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-t128.o `test -f
'linux/src/drivers/scsi/t128.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/t128.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-t128.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-t128.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/t128.c'
object='linux/src/drivers/scsi/liblinux_a-t128.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-t128.o `test -f
'linux/src/drivers/scsi/t128.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/t128.c
+
+linux/src/drivers/scsi/liblinux_a-t128.obj: linux/src/drivers/scsi/t128.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-t128.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-t128.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-t128.obj `if test -f
'linux/src/drivers/scsi/t128.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/t128.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/t128.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-t128.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-t128.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/t128.c'
object='linux/src/drivers/scsi/liblinux_a-t128.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-t128.obj `if test -f
'linux/src/drivers/scsi/t128.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/t128.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/t128.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-tmscsim.o: linux/src/drivers/scsi/tmscsim.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-tmscsim.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-tmscsim.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-tmscsim.o `test -f
'linux/src/drivers/scsi/tmscsim.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/tmscsim.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-tmscsim.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-tmscsim.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/tmscsim.c'
object='linux/src/drivers/scsi/liblinux_a-tmscsim.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-tmscsim.o `test -f
'linux/src/drivers/scsi/tmscsim.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/tmscsim.c
+
+linux/src/drivers/scsi/liblinux_a-tmscsim.obj: linux/src/drivers/scsi/tmscsim.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-tmscsim.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-tmscsim.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-tmscsim.obj `if test -f
'linux/src/drivers/scsi/tmscsim.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/tmscsim.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/tmscsim.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-tmscsim.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-tmscsim.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/tmscsim.c'
object='linux/src/drivers/scsi/liblinux_a-tmscsim.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-tmscsim.obj `if test -f
'linux/src/drivers/scsi/tmscsim.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/tmscsim.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/tmscsim.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-u14-34f.o: linux/src/drivers/scsi/u14-34f.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-u14-34f.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-u14-34f.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-u14-34f.o `test -f
'linux/src/drivers/scsi/u14-34f.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/u14-34f.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-u14-34f.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-u14-34f.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/u14-34f.c'
object='linux/src/drivers/scsi/liblinux_a-u14-34f.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-u14-34f.o `test -f
'linux/src/drivers/scsi/u14-34f.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/u14-34f.c
+
+linux/src/drivers/scsi/liblinux_a-u14-34f.obj: linux/src/drivers/scsi/u14-34f.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-u14-34f.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-u14-34f.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-u14-34f.obj `if test -f
'linux/src/drivers/scsi/u14-34f.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/u14-34f.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/u14-34f.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-u14-34f.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-u14-34f.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/u14-34f.c'
object='linux/src/drivers/scsi/liblinux_a-u14-34f.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-u14-34f.obj `if test -f
'linux/src/drivers/scsi/u14-34f.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/u14-34f.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/u14-34f.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-ultrastor.o:
linux/src/drivers/scsi/ultrastor.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-ultrastor.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-ultrastor.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-ultrastor.o `test -f
'linux/src/drivers/scsi/ultrastor.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/ultrastor.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-ultrastor.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-ultrastor.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/ultrastor.c'
object='linux/src/drivers/scsi/liblinux_a-ultrastor.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-ultrastor.o `test -f
'linux/src/drivers/scsi/ultrastor.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/ultrastor.c
+
+linux/src/drivers/scsi/liblinux_a-ultrastor.obj:
linux/src/drivers/scsi/ultrastor.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-ultrastor.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-ultrastor.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-ultrastor.obj `if test -f
'linux/src/drivers/scsi/ultrastor.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/ultrastor.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/ultrastor.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-ultrastor.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-ultrastor.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/ultrastor.c'
object='linux/src/drivers/scsi/liblinux_a-ultrastor.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-ultrastor.obj `if test -f
'linux/src/drivers/scsi/ultrastor.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/ultrastor.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/ultrastor.c'; fi`
+
+linux/src/drivers/scsi/liblinux_a-wd7000.o: linux/src/drivers/scsi/wd7000.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-wd7000.o -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-wd7000.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-wd7000.o `test -f
'linux/src/drivers/scsi/wd7000.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/wd7000.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-wd7000.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-wd7000.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/wd7000.c'
object='linux/src/drivers/scsi/liblinux_a-wd7000.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-wd7000.o `test -f
'linux/src/drivers/scsi/wd7000.c' || echo
'$(srcdir)/'`linux/src/drivers/scsi/wd7000.c
+
+linux/src/drivers/scsi/liblinux_a-wd7000.obj: linux/src/drivers/scsi/wd7000.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/scsi/liblinux_a-wd7000.obj -MD -MP -MF
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-wd7000.Tpo -c -o
linux/src/drivers/scsi/liblinux_a-wd7000.obj `if test -f
'linux/src/drivers/scsi/wd7000.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/wd7000.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/wd7000.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-wd7000.Tpo
linux/src/drivers/scsi/$(DEPDIR)/liblinux_a-wd7000.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/scsi/wd7000.c'
object='linux/src/drivers/scsi/liblinux_a-wd7000.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/scsi/liblinux_a-wd7000.obj `if test -f
'linux/src/drivers/scsi/wd7000.c'; then $(CYGPATH_W)
'linux/src/drivers/scsi/wd7000.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/scsi/wd7000.c'; fi`
+
+linux/dev/drivers/net/liblinux_a-auto_irq.o: linux/dev/drivers/net/auto_irq.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/drivers/net/liblinux_a-auto_irq.o -MD -MP -MF
linux/dev/drivers/net/$(DEPDIR)/liblinux_a-auto_irq.Tpo -c -o
linux/dev/drivers/net/liblinux_a-auto_irq.o `test -f
'linux/dev/drivers/net/auto_irq.c' || echo
'$(srcdir)/'`linux/dev/drivers/net/auto_irq.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/drivers/net/$(DEPDIR)/liblinux_a-auto_irq.Tpo
linux/dev/drivers/net/$(DEPDIR)/liblinux_a-auto_irq.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/drivers/net/auto_irq.c'
object='linux/dev/drivers/net/liblinux_a-auto_irq.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/drivers/net/liblinux_a-auto_irq.o `test -f
'linux/dev/drivers/net/auto_irq.c' || echo
'$(srcdir)/'`linux/dev/drivers/net/auto_irq.c
+
+linux/dev/drivers/net/liblinux_a-auto_irq.obj: linux/dev/drivers/net/auto_irq.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/drivers/net/liblinux_a-auto_irq.obj -MD -MP -MF
linux/dev/drivers/net/$(DEPDIR)/liblinux_a-auto_irq.Tpo -c -o
linux/dev/drivers/net/liblinux_a-auto_irq.obj `if test -f
'linux/dev/drivers/net/auto_irq.c'; then $(CYGPATH_W)
'linux/dev/drivers/net/auto_irq.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/drivers/net/auto_irq.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/drivers/net/$(DEPDIR)/liblinux_a-auto_irq.Tpo
linux/dev/drivers/net/$(DEPDIR)/liblinux_a-auto_irq.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/drivers/net/auto_irq.c'
object='linux/dev/drivers/net/liblinux_a-auto_irq.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/drivers/net/liblinux_a-auto_irq.obj `if test -f
'linux/dev/drivers/net/auto_irq.c'; then $(CYGPATH_W)
'linux/dev/drivers/net/auto_irq.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/drivers/net/auto_irq.c'; fi`
+
+linux/dev/glue/liblinux_a-net.o: linux/dev/glue/net.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/glue/liblinux_a-net.o -MD -MP -MF
linux/dev/glue/$(DEPDIR)/liblinux_a-net.Tpo -c -o
linux/dev/glue/liblinux_a-net.o `test -f 'linux/dev/glue/net.c' || echo
'$(srcdir)/'`linux/dev/glue/net.c
address@hidden@ $(AM_V_at)$(am__mv) linux/dev/glue/$(DEPDIR)/liblinux_a-net.Tpo
linux/dev/glue/$(DEPDIR)/liblinux_a-net.Po
address@hidden@@am__fastdepCC_FALSE@ $(AM_V_CC)source='linux/dev/glue/net.c'
object='linux/dev/glue/liblinux_a-net.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/glue/liblinux_a-net.o `test -f 'linux/dev/glue/net.c' || echo
'$(srcdir)/'`linux/dev/glue/net.c
+
+linux/dev/glue/liblinux_a-net.obj: linux/dev/glue/net.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/glue/liblinux_a-net.obj -MD -MP -MF
linux/dev/glue/$(DEPDIR)/liblinux_a-net.Tpo -c -o
linux/dev/glue/liblinux_a-net.obj `if test -f 'linux/dev/glue/net.c'; then
$(CYGPATH_W) 'linux/dev/glue/net.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/glue/net.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv) linux/dev/glue/$(DEPDIR)/liblinux_a-net.Tpo
linux/dev/glue/$(DEPDIR)/liblinux_a-net.Po
address@hidden@@am__fastdepCC_FALSE@ $(AM_V_CC)source='linux/dev/glue/net.c'
object='linux/dev/glue/liblinux_a-net.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/glue/liblinux_a-net.obj `if test -f 'linux/dev/glue/net.c'; then
$(CYGPATH_W) 'linux/dev/glue/net.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/glue/net.c'; fi`
+
+linux/dev/drivers/net/liblinux_a-Space.o: linux/dev/drivers/net/Space.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/drivers/net/liblinux_a-Space.o -MD -MP -MF
linux/dev/drivers/net/$(DEPDIR)/liblinux_a-Space.Tpo -c -o
linux/dev/drivers/net/liblinux_a-Space.o `test -f
'linux/dev/drivers/net/Space.c' || echo
'$(srcdir)/'`linux/dev/drivers/net/Space.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/drivers/net/$(DEPDIR)/liblinux_a-Space.Tpo
linux/dev/drivers/net/$(DEPDIR)/liblinux_a-Space.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/drivers/net/Space.c'
object='linux/dev/drivers/net/liblinux_a-Space.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/drivers/net/liblinux_a-Space.o `test -f
'linux/dev/drivers/net/Space.c' || echo
'$(srcdir)/'`linux/dev/drivers/net/Space.c
+
+linux/dev/drivers/net/liblinux_a-Space.obj: linux/dev/drivers/net/Space.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/drivers/net/liblinux_a-Space.obj -MD -MP -MF
linux/dev/drivers/net/$(DEPDIR)/liblinux_a-Space.Tpo -c -o
linux/dev/drivers/net/liblinux_a-Space.obj `if test -f
'linux/dev/drivers/net/Space.c'; then $(CYGPATH_W)
'linux/dev/drivers/net/Space.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/drivers/net/Space.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/drivers/net/$(DEPDIR)/liblinux_a-Space.Tpo
linux/dev/drivers/net/$(DEPDIR)/liblinux_a-Space.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/drivers/net/Space.c'
object='linux/dev/drivers/net/liblinux_a-Space.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/drivers/net/liblinux_a-Space.obj `if test -f
'linux/dev/drivers/net/Space.c'; then $(CYGPATH_W)
'linux/dev/drivers/net/Space.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/drivers/net/Space.c'; fi`
+
+linux/dev/net/core/liblinux_a-dev.o: linux/dev/net/core/dev.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/net/core/liblinux_a-dev.o -MD -MP -MF
linux/dev/net/core/$(DEPDIR)/liblinux_a-dev.Tpo -c -o
linux/dev/net/core/liblinux_a-dev.o `test -f 'linux/dev/net/core/dev.c' || echo
'$(srcdir)/'`linux/dev/net/core/dev.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/net/core/$(DEPDIR)/liblinux_a-dev.Tpo
linux/dev/net/core/$(DEPDIR)/liblinux_a-dev.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/net/core/dev.c'
object='linux/dev/net/core/liblinux_a-dev.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/net/core/liblinux_a-dev.o `test -f 'linux/dev/net/core/dev.c' || echo
'$(srcdir)/'`linux/dev/net/core/dev.c
+
+linux/dev/net/core/liblinux_a-dev.obj: linux/dev/net/core/dev.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/net/core/liblinux_a-dev.obj -MD -MP -MF
linux/dev/net/core/$(DEPDIR)/liblinux_a-dev.Tpo -c -o
linux/dev/net/core/liblinux_a-dev.obj `if test -f 'linux/dev/net/core/dev.c';
then $(CYGPATH_W) 'linux/dev/net/core/dev.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/net/core/dev.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/net/core/$(DEPDIR)/liblinux_a-dev.Tpo
linux/dev/net/core/$(DEPDIR)/liblinux_a-dev.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/net/core/dev.c'
object='linux/dev/net/core/liblinux_a-dev.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/net/core/liblinux_a-dev.obj `if test -f 'linux/dev/net/core/dev.c';
then $(CYGPATH_W) 'linux/dev/net/core/dev.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/net/core/dev.c'; fi`
+
+linux/dev/drivers/net/liblinux_a-net_init.o: linux/dev/drivers/net/net_init.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/drivers/net/liblinux_a-net_init.o -MD -MP -MF
linux/dev/drivers/net/$(DEPDIR)/liblinux_a-net_init.Tpo -c -o
linux/dev/drivers/net/liblinux_a-net_init.o `test -f
'linux/dev/drivers/net/net_init.c' || echo
'$(srcdir)/'`linux/dev/drivers/net/net_init.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/drivers/net/$(DEPDIR)/liblinux_a-net_init.Tpo
linux/dev/drivers/net/$(DEPDIR)/liblinux_a-net_init.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/drivers/net/net_init.c'
object='linux/dev/drivers/net/liblinux_a-net_init.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/drivers/net/liblinux_a-net_init.o `test -f
'linux/dev/drivers/net/net_init.c' || echo
'$(srcdir)/'`linux/dev/drivers/net/net_init.c
+
+linux/dev/drivers/net/liblinux_a-net_init.obj: linux/dev/drivers/net/net_init.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/dev/drivers/net/liblinux_a-net_init.obj -MD -MP -MF
linux/dev/drivers/net/$(DEPDIR)/liblinux_a-net_init.Tpo -c -o
linux/dev/drivers/net/liblinux_a-net_init.obj `if test -f
'linux/dev/drivers/net/net_init.c'; then $(CYGPATH_W)
'linux/dev/drivers/net/net_init.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/drivers/net/net_init.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/dev/drivers/net/$(DEPDIR)/liblinux_a-net_init.Tpo
linux/dev/drivers/net/$(DEPDIR)/liblinux_a-net_init.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/dev/drivers/net/net_init.c'
object='linux/dev/drivers/net/liblinux_a-net_init.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/dev/drivers/net/liblinux_a-net_init.obj `if test -f
'linux/dev/drivers/net/net_init.c'; then $(CYGPATH_W)
'linux/dev/drivers/net/net_init.c'; else $(CYGPATH_W)
'$(srcdir)/linux/dev/drivers/net/net_init.c'; fi`
+
+linux/src/drivers/net/liblinux_a-pci-scan.o: linux/src/drivers/net/pci-scan.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-pci-scan.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-pci-scan.Tpo -c -o
linux/src/drivers/net/liblinux_a-pci-scan.o `test -f
'linux/src/drivers/net/pci-scan.c' || echo
'$(srcdir)/'`linux/src/drivers/net/pci-scan.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-pci-scan.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-pci-scan.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/pci-scan.c'
object='linux/src/drivers/net/liblinux_a-pci-scan.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-pci-scan.o `test -f
'linux/src/drivers/net/pci-scan.c' || echo
'$(srcdir)/'`linux/src/drivers/net/pci-scan.c
+
+linux/src/drivers/net/liblinux_a-pci-scan.obj: linux/src/drivers/net/pci-scan.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-pci-scan.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-pci-scan.Tpo -c -o
linux/src/drivers/net/liblinux_a-pci-scan.obj `if test -f
'linux/src/drivers/net/pci-scan.c'; then $(CYGPATH_W)
'linux/src/drivers/net/pci-scan.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/pci-scan.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-pci-scan.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-pci-scan.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/pci-scan.c'
object='linux/src/drivers/net/liblinux_a-pci-scan.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-pci-scan.obj `if test -f
'linux/src/drivers/net/pci-scan.c'; then $(CYGPATH_W)
'linux/src/drivers/net/pci-scan.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/pci-scan.c'; fi`
+
+linux/src/drivers/net/liblinux_a-3c501.o: linux/src/drivers/net/3c501.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-3c501.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c501.Tpo -c -o
linux/src/drivers/net/liblinux_a-3c501.o `test -f
'linux/src/drivers/net/3c501.c' || echo
'$(srcdir)/'`linux/src/drivers/net/3c501.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c501.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c501.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/3c501.c'
object='linux/src/drivers/net/liblinux_a-3c501.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-3c501.o `test -f
'linux/src/drivers/net/3c501.c' || echo
'$(srcdir)/'`linux/src/drivers/net/3c501.c
+
+linux/src/drivers/net/liblinux_a-3c501.obj: linux/src/drivers/net/3c501.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-3c501.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c501.Tpo -c -o
linux/src/drivers/net/liblinux_a-3c501.obj `if test -f
'linux/src/drivers/net/3c501.c'; then $(CYGPATH_W)
'linux/src/drivers/net/3c501.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/3c501.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c501.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c501.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/3c501.c'
object='linux/src/drivers/net/liblinux_a-3c501.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-3c501.obj `if test -f
'linux/src/drivers/net/3c501.c'; then $(CYGPATH_W)
'linux/src/drivers/net/3c501.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/3c501.c'; fi`
+
+linux/src/drivers/net/liblinux_a-3c503.o: linux/src/drivers/net/3c503.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-3c503.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c503.Tpo -c -o
linux/src/drivers/net/liblinux_a-3c503.o `test -f
'linux/src/drivers/net/3c503.c' || echo
'$(srcdir)/'`linux/src/drivers/net/3c503.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c503.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c503.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/3c503.c'
object='linux/src/drivers/net/liblinux_a-3c503.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-3c503.o `test -f
'linux/src/drivers/net/3c503.c' || echo
'$(srcdir)/'`linux/src/drivers/net/3c503.c
+
+linux/src/drivers/net/liblinux_a-3c503.obj: linux/src/drivers/net/3c503.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-3c503.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c503.Tpo -c -o
linux/src/drivers/net/liblinux_a-3c503.obj `if test -f
'linux/src/drivers/net/3c503.c'; then $(CYGPATH_W)
'linux/src/drivers/net/3c503.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/3c503.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c503.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c503.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/3c503.c'
object='linux/src/drivers/net/liblinux_a-3c503.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-3c503.obj `if test -f
'linux/src/drivers/net/3c503.c'; then $(CYGPATH_W)
'linux/src/drivers/net/3c503.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/3c503.c'; fi`
+
+linux/src/drivers/net/liblinux_a-8390.o: linux/src/drivers/net/8390.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-8390.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-8390.Tpo -c -o
linux/src/drivers/net/liblinux_a-8390.o `test -f 'linux/src/drivers/net/8390.c'
|| echo '$(srcdir)/'`linux/src/drivers/net/8390.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-8390.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-8390.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/8390.c'
object='linux/src/drivers/net/liblinux_a-8390.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-8390.o `test -f 'linux/src/drivers/net/8390.c'
|| echo '$(srcdir)/'`linux/src/drivers/net/8390.c
+
+linux/src/drivers/net/liblinux_a-8390.obj: linux/src/drivers/net/8390.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-8390.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-8390.Tpo -c -o
linux/src/drivers/net/liblinux_a-8390.obj `if test -f
'linux/src/drivers/net/8390.c'; then $(CYGPATH_W)
'linux/src/drivers/net/8390.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/8390.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-8390.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-8390.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/8390.c'
object='linux/src/drivers/net/liblinux_a-8390.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-8390.obj `if test -f
'linux/src/drivers/net/8390.c'; then $(CYGPATH_W)
'linux/src/drivers/net/8390.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/8390.c'; fi`
+
+linux/src/drivers/net/liblinux_a-3c505.o: linux/src/drivers/net/3c505.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-3c505.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c505.Tpo -c -o
linux/src/drivers/net/liblinux_a-3c505.o `test -f
'linux/src/drivers/net/3c505.c' || echo
'$(srcdir)/'`linux/src/drivers/net/3c505.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c505.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c505.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/3c505.c'
object='linux/src/drivers/net/liblinux_a-3c505.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-3c505.o `test -f
'linux/src/drivers/net/3c505.c' || echo
'$(srcdir)/'`linux/src/drivers/net/3c505.c
+
+linux/src/drivers/net/liblinux_a-3c505.obj: linux/src/drivers/net/3c505.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-3c505.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c505.Tpo -c -o
linux/src/drivers/net/liblinux_a-3c505.obj `if test -f
'linux/src/drivers/net/3c505.c'; then $(CYGPATH_W)
'linux/src/drivers/net/3c505.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/3c505.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c505.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c505.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/3c505.c'
object='linux/src/drivers/net/liblinux_a-3c505.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-3c505.obj `if test -f
'linux/src/drivers/net/3c505.c'; then $(CYGPATH_W)
'linux/src/drivers/net/3c505.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/3c505.c'; fi`
+
+linux/src/drivers/net/liblinux_a-3c507.o: linux/src/drivers/net/3c507.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-3c507.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c507.Tpo -c -o
linux/src/drivers/net/liblinux_a-3c507.o `test -f
'linux/src/drivers/net/3c507.c' || echo
'$(srcdir)/'`linux/src/drivers/net/3c507.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c507.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c507.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/3c507.c'
object='linux/src/drivers/net/liblinux_a-3c507.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-3c507.o `test -f
'linux/src/drivers/net/3c507.c' || echo
'$(srcdir)/'`linux/src/drivers/net/3c507.c
+
+linux/src/drivers/net/liblinux_a-3c507.obj: linux/src/drivers/net/3c507.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-3c507.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c507.Tpo -c -o
linux/src/drivers/net/liblinux_a-3c507.obj `if test -f
'linux/src/drivers/net/3c507.c'; then $(CYGPATH_W)
'linux/src/drivers/net/3c507.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/3c507.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c507.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c507.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/3c507.c'
object='linux/src/drivers/net/liblinux_a-3c507.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-3c507.obj `if test -f
'linux/src/drivers/net/3c507.c'; then $(CYGPATH_W)
'linux/src/drivers/net/3c507.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/3c507.c'; fi`
+
+linux/src/drivers/net/liblinux_a-3c509.o: linux/src/drivers/net/3c509.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-3c509.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c509.Tpo -c -o
linux/src/drivers/net/liblinux_a-3c509.o `test -f
'linux/src/drivers/net/3c509.c' || echo
'$(srcdir)/'`linux/src/drivers/net/3c509.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c509.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c509.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/3c509.c'
object='linux/src/drivers/net/liblinux_a-3c509.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-3c509.o `test -f
'linux/src/drivers/net/3c509.c' || echo
'$(srcdir)/'`linux/src/drivers/net/3c509.c
+
+linux/src/drivers/net/liblinux_a-3c509.obj: linux/src/drivers/net/3c509.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-3c509.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c509.Tpo -c -o
linux/src/drivers/net/liblinux_a-3c509.obj `if test -f
'linux/src/drivers/net/3c509.c'; then $(CYGPATH_W)
'linux/src/drivers/net/3c509.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/3c509.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c509.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c509.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/3c509.c'
object='linux/src/drivers/net/liblinux_a-3c509.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-3c509.obj `if test -f
'linux/src/drivers/net/3c509.c'; then $(CYGPATH_W)
'linux/src/drivers/net/3c509.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/3c509.c'; fi`
+
+linux/src/drivers/net/liblinux_a-3c59x.o: linux/src/drivers/net/3c59x.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-3c59x.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c59x.Tpo -c -o
linux/src/drivers/net/liblinux_a-3c59x.o `test -f
'linux/src/drivers/net/3c59x.c' || echo
'$(srcdir)/'`linux/src/drivers/net/3c59x.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c59x.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c59x.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/3c59x.c'
object='linux/src/drivers/net/liblinux_a-3c59x.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-3c59x.o `test -f
'linux/src/drivers/net/3c59x.c' || echo
'$(srcdir)/'`linux/src/drivers/net/3c59x.c
+
+linux/src/drivers/net/liblinux_a-3c59x.obj: linux/src/drivers/net/3c59x.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-3c59x.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c59x.Tpo -c -o
linux/src/drivers/net/liblinux_a-3c59x.obj `if test -f
'linux/src/drivers/net/3c59x.c'; then $(CYGPATH_W)
'linux/src/drivers/net/3c59x.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/3c59x.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c59x.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c59x.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/3c59x.c'
object='linux/src/drivers/net/liblinux_a-3c59x.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-3c59x.obj `if test -f
'linux/src/drivers/net/3c59x.c'; then $(CYGPATH_W)
'linux/src/drivers/net/3c59x.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/3c59x.c'; fi`
+
+linux/src/drivers/net/liblinux_a-3c515.o: linux/src/drivers/net/3c515.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-3c515.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c515.Tpo -c -o
linux/src/drivers/net/liblinux_a-3c515.o `test -f
'linux/src/drivers/net/3c515.c' || echo
'$(srcdir)/'`linux/src/drivers/net/3c515.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c515.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c515.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/3c515.c'
object='linux/src/drivers/net/liblinux_a-3c515.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-3c515.o `test -f
'linux/src/drivers/net/3c515.c' || echo
'$(srcdir)/'`linux/src/drivers/net/3c515.c
+
+linux/src/drivers/net/liblinux_a-3c515.obj: linux/src/drivers/net/3c515.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-3c515.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c515.Tpo -c -o
linux/src/drivers/net/liblinux_a-3c515.obj `if test -f
'linux/src/drivers/net/3c515.c'; then $(CYGPATH_W)
'linux/src/drivers/net/3c515.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/3c515.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c515.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-3c515.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/3c515.c'
object='linux/src/drivers/net/liblinux_a-3c515.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-3c515.obj `if test -f
'linux/src/drivers/net/3c515.c'; then $(CYGPATH_W)
'linux/src/drivers/net/3c515.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/3c515.c'; fi`
+
+linux/src/drivers/net/liblinux_a-ac3200.o: linux/src/drivers/net/ac3200.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-ac3200.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ac3200.Tpo -c -o
linux/src/drivers/net/liblinux_a-ac3200.o `test -f
'linux/src/drivers/net/ac3200.c' || echo
'$(srcdir)/'`linux/src/drivers/net/ac3200.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ac3200.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ac3200.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/ac3200.c'
object='linux/src/drivers/net/liblinux_a-ac3200.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-ac3200.o `test -f
'linux/src/drivers/net/ac3200.c' || echo
'$(srcdir)/'`linux/src/drivers/net/ac3200.c
+
+linux/src/drivers/net/liblinux_a-ac3200.obj: linux/src/drivers/net/ac3200.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-ac3200.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ac3200.Tpo -c -o
linux/src/drivers/net/liblinux_a-ac3200.obj `if test -f
'linux/src/drivers/net/ac3200.c'; then $(CYGPATH_W)
'linux/src/drivers/net/ac3200.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/ac3200.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ac3200.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ac3200.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/ac3200.c'
object='linux/src/drivers/net/liblinux_a-ac3200.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-ac3200.obj `if test -f
'linux/src/drivers/net/ac3200.c'; then $(CYGPATH_W)
'linux/src/drivers/net/ac3200.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/ac3200.c'; fi`
+
+linux/src/drivers/net/liblinux_a-apricot.o: linux/src/drivers/net/apricot.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-apricot.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-apricot.Tpo -c -o
linux/src/drivers/net/liblinux_a-apricot.o `test -f
'linux/src/drivers/net/apricot.c' || echo
'$(srcdir)/'`linux/src/drivers/net/apricot.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-apricot.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-apricot.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/apricot.c'
object='linux/src/drivers/net/liblinux_a-apricot.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-apricot.o `test -f
'linux/src/drivers/net/apricot.c' || echo
'$(srcdir)/'`linux/src/drivers/net/apricot.c
+
+linux/src/drivers/net/liblinux_a-apricot.obj: linux/src/drivers/net/apricot.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-apricot.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-apricot.Tpo -c -o
linux/src/drivers/net/liblinux_a-apricot.obj `if test -f
'linux/src/drivers/net/apricot.c'; then $(CYGPATH_W)
'linux/src/drivers/net/apricot.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/apricot.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-apricot.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-apricot.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/apricot.c'
object='linux/src/drivers/net/liblinux_a-apricot.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-apricot.obj `if test -f
'linux/src/drivers/net/apricot.c'; then $(CYGPATH_W)
'linux/src/drivers/net/apricot.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/apricot.c'; fi`
+
+linux/src/drivers/net/liblinux_a-at1700.o: linux/src/drivers/net/at1700.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-at1700.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-at1700.Tpo -c -o
linux/src/drivers/net/liblinux_a-at1700.o `test -f
'linux/src/drivers/net/at1700.c' || echo
'$(srcdir)/'`linux/src/drivers/net/at1700.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-at1700.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-at1700.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/at1700.c'
object='linux/src/drivers/net/liblinux_a-at1700.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-at1700.o `test -f
'linux/src/drivers/net/at1700.c' || echo
'$(srcdir)/'`linux/src/drivers/net/at1700.c
+
+linux/src/drivers/net/liblinux_a-at1700.obj: linux/src/drivers/net/at1700.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-at1700.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-at1700.Tpo -c -o
linux/src/drivers/net/liblinux_a-at1700.obj `if test -f
'linux/src/drivers/net/at1700.c'; then $(CYGPATH_W)
'linux/src/drivers/net/at1700.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/at1700.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-at1700.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-at1700.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/at1700.c'
object='linux/src/drivers/net/liblinux_a-at1700.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-at1700.obj `if test -f
'linux/src/drivers/net/at1700.c'; then $(CYGPATH_W)
'linux/src/drivers/net/at1700.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/at1700.c'; fi`
+
+linux/src/drivers/net/liblinux_a-atp.o: linux/src/drivers/net/atp.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-atp.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-atp.Tpo -c -o
linux/src/drivers/net/liblinux_a-atp.o `test -f 'linux/src/drivers/net/atp.c'
|| echo '$(srcdir)/'`linux/src/drivers/net/atp.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-atp.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-atp.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/atp.c'
object='linux/src/drivers/net/liblinux_a-atp.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-atp.o `test -f 'linux/src/drivers/net/atp.c'
|| echo '$(srcdir)/'`linux/src/drivers/net/atp.c
+
+linux/src/drivers/net/liblinux_a-atp.obj: linux/src/drivers/net/atp.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-atp.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-atp.Tpo -c -o
linux/src/drivers/net/liblinux_a-atp.obj `if test -f
'linux/src/drivers/net/atp.c'; then $(CYGPATH_W) 'linux/src/drivers/net/atp.c';
else $(CYGPATH_W) '$(srcdir)/linux/src/drivers/net/atp.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-atp.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-atp.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/atp.c'
object='linux/src/drivers/net/liblinux_a-atp.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-atp.obj `if test -f
'linux/src/drivers/net/atp.c'; then $(CYGPATH_W) 'linux/src/drivers/net/atp.c';
else $(CYGPATH_W) '$(srcdir)/linux/src/drivers/net/atp.c'; fi`
+
+linux/src/drivers/net/liblinux_a-de4x5.o: linux/src/drivers/net/de4x5.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-de4x5.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-de4x5.Tpo -c -o
linux/src/drivers/net/liblinux_a-de4x5.o `test -f
'linux/src/drivers/net/de4x5.c' || echo
'$(srcdir)/'`linux/src/drivers/net/de4x5.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-de4x5.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-de4x5.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/de4x5.c'
object='linux/src/drivers/net/liblinux_a-de4x5.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-de4x5.o `test -f
'linux/src/drivers/net/de4x5.c' || echo
'$(srcdir)/'`linux/src/drivers/net/de4x5.c
+
+linux/src/drivers/net/liblinux_a-de4x5.obj: linux/src/drivers/net/de4x5.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-de4x5.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-de4x5.Tpo -c -o
linux/src/drivers/net/liblinux_a-de4x5.obj `if test -f
'linux/src/drivers/net/de4x5.c'; then $(CYGPATH_W)
'linux/src/drivers/net/de4x5.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/de4x5.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-de4x5.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-de4x5.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/de4x5.c'
object='linux/src/drivers/net/liblinux_a-de4x5.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-de4x5.obj `if test -f
'linux/src/drivers/net/de4x5.c'; then $(CYGPATH_W)
'linux/src/drivers/net/de4x5.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/de4x5.c'; fi`
+
+linux/src/drivers/net/liblinux_a-de600.o: linux/src/drivers/net/de600.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-de600.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-de600.Tpo -c -o
linux/src/drivers/net/liblinux_a-de600.o `test -f
'linux/src/drivers/net/de600.c' || echo
'$(srcdir)/'`linux/src/drivers/net/de600.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-de600.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-de600.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/de600.c'
object='linux/src/drivers/net/liblinux_a-de600.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-de600.o `test -f
'linux/src/drivers/net/de600.c' || echo
'$(srcdir)/'`linux/src/drivers/net/de600.c
+
+linux/src/drivers/net/liblinux_a-de600.obj: linux/src/drivers/net/de600.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-de600.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-de600.Tpo -c -o
linux/src/drivers/net/liblinux_a-de600.obj `if test -f
'linux/src/drivers/net/de600.c'; then $(CYGPATH_W)
'linux/src/drivers/net/de600.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/de600.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-de600.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-de600.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/de600.c'
object='linux/src/drivers/net/liblinux_a-de600.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-de600.obj `if test -f
'linux/src/drivers/net/de600.c'; then $(CYGPATH_W)
'linux/src/drivers/net/de600.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/de600.c'; fi`
+
+linux/src/drivers/net/liblinux_a-de620.o: linux/src/drivers/net/de620.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-de620.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-de620.Tpo -c -o
linux/src/drivers/net/liblinux_a-de620.o `test -f
'linux/src/drivers/net/de620.c' || echo
'$(srcdir)/'`linux/src/drivers/net/de620.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-de620.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-de620.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/de620.c'
object='linux/src/drivers/net/liblinux_a-de620.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-de620.o `test -f
'linux/src/drivers/net/de620.c' || echo
'$(srcdir)/'`linux/src/drivers/net/de620.c
+
+linux/src/drivers/net/liblinux_a-de620.obj: linux/src/drivers/net/de620.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-de620.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-de620.Tpo -c -o
linux/src/drivers/net/liblinux_a-de620.obj `if test -f
'linux/src/drivers/net/de620.c'; then $(CYGPATH_W)
'linux/src/drivers/net/de620.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/de620.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-de620.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-de620.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/de620.c'
object='linux/src/drivers/net/liblinux_a-de620.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-de620.obj `if test -f
'linux/src/drivers/net/de620.c'; then $(CYGPATH_W)
'linux/src/drivers/net/de620.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/de620.c'; fi`
+
+linux/src/drivers/net/liblinux_a-depca.o: linux/src/drivers/net/depca.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-depca.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-depca.Tpo -c -o
linux/src/drivers/net/liblinux_a-depca.o `test -f
'linux/src/drivers/net/depca.c' || echo
'$(srcdir)/'`linux/src/drivers/net/depca.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-depca.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-depca.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/depca.c'
object='linux/src/drivers/net/liblinux_a-depca.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-depca.o `test -f
'linux/src/drivers/net/depca.c' || echo
'$(srcdir)/'`linux/src/drivers/net/depca.c
+
+linux/src/drivers/net/liblinux_a-depca.obj: linux/src/drivers/net/depca.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-depca.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-depca.Tpo -c -o
linux/src/drivers/net/liblinux_a-depca.obj `if test -f
'linux/src/drivers/net/depca.c'; then $(CYGPATH_W)
'linux/src/drivers/net/depca.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/depca.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-depca.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-depca.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/depca.c'
object='linux/src/drivers/net/liblinux_a-depca.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-depca.obj `if test -f
'linux/src/drivers/net/depca.c'; then $(CYGPATH_W)
'linux/src/drivers/net/depca.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/depca.c'; fi`
+
+linux/src/drivers/net/liblinux_a-e2100.o: linux/src/drivers/net/e2100.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-e2100.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-e2100.Tpo -c -o
linux/src/drivers/net/liblinux_a-e2100.o `test -f
'linux/src/drivers/net/e2100.c' || echo
'$(srcdir)/'`linux/src/drivers/net/e2100.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-e2100.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-e2100.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/e2100.c'
object='linux/src/drivers/net/liblinux_a-e2100.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-e2100.o `test -f
'linux/src/drivers/net/e2100.c' || echo
'$(srcdir)/'`linux/src/drivers/net/e2100.c
+
+linux/src/drivers/net/liblinux_a-e2100.obj: linux/src/drivers/net/e2100.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-e2100.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-e2100.Tpo -c -o
linux/src/drivers/net/liblinux_a-e2100.obj `if test -f
'linux/src/drivers/net/e2100.c'; then $(CYGPATH_W)
'linux/src/drivers/net/e2100.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/e2100.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-e2100.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-e2100.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/e2100.c'
object='linux/src/drivers/net/liblinux_a-e2100.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-e2100.obj `if test -f
'linux/src/drivers/net/e2100.c'; then $(CYGPATH_W)
'linux/src/drivers/net/e2100.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/e2100.c'; fi`
+
+linux/src/drivers/net/liblinux_a-eepro.o: linux/src/drivers/net/eepro.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-eepro.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eepro.Tpo -c -o
linux/src/drivers/net/liblinux_a-eepro.o `test -f
'linux/src/drivers/net/eepro.c' || echo
'$(srcdir)/'`linux/src/drivers/net/eepro.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eepro.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eepro.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/eepro.c'
object='linux/src/drivers/net/liblinux_a-eepro.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-eepro.o `test -f
'linux/src/drivers/net/eepro.c' || echo
'$(srcdir)/'`linux/src/drivers/net/eepro.c
+
+linux/src/drivers/net/liblinux_a-eepro.obj: linux/src/drivers/net/eepro.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-eepro.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eepro.Tpo -c -o
linux/src/drivers/net/liblinux_a-eepro.obj `if test -f
'linux/src/drivers/net/eepro.c'; then $(CYGPATH_W)
'linux/src/drivers/net/eepro.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/eepro.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eepro.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eepro.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/eepro.c'
object='linux/src/drivers/net/liblinux_a-eepro.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-eepro.obj `if test -f
'linux/src/drivers/net/eepro.c'; then $(CYGPATH_W)
'linux/src/drivers/net/eepro.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/eepro.c'; fi`
+
+linux/src/drivers/net/liblinux_a-eepro100.o: linux/src/drivers/net/eepro100.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-eepro100.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eepro100.Tpo -c -o
linux/src/drivers/net/liblinux_a-eepro100.o `test -f
'linux/src/drivers/net/eepro100.c' || echo
'$(srcdir)/'`linux/src/drivers/net/eepro100.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eepro100.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eepro100.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/eepro100.c'
object='linux/src/drivers/net/liblinux_a-eepro100.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-eepro100.o `test -f
'linux/src/drivers/net/eepro100.c' || echo
'$(srcdir)/'`linux/src/drivers/net/eepro100.c
+
+linux/src/drivers/net/liblinux_a-eepro100.obj: linux/src/drivers/net/eepro100.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-eepro100.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eepro100.Tpo -c -o
linux/src/drivers/net/liblinux_a-eepro100.obj `if test -f
'linux/src/drivers/net/eepro100.c'; then $(CYGPATH_W)
'linux/src/drivers/net/eepro100.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/eepro100.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eepro100.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eepro100.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/eepro100.c'
object='linux/src/drivers/net/liblinux_a-eepro100.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-eepro100.obj `if test -f
'linux/src/drivers/net/eepro100.c'; then $(CYGPATH_W)
'linux/src/drivers/net/eepro100.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/eepro100.c'; fi`
+
+linux/src/drivers/net/liblinux_a-eexpress.o: linux/src/drivers/net/eexpress.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-eexpress.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eexpress.Tpo -c -o
linux/src/drivers/net/liblinux_a-eexpress.o `test -f
'linux/src/drivers/net/eexpress.c' || echo
'$(srcdir)/'`linux/src/drivers/net/eexpress.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eexpress.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eexpress.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/eexpress.c'
object='linux/src/drivers/net/liblinux_a-eexpress.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-eexpress.o `test -f
'linux/src/drivers/net/eexpress.c' || echo
'$(srcdir)/'`linux/src/drivers/net/eexpress.c
+
+linux/src/drivers/net/liblinux_a-eexpress.obj: linux/src/drivers/net/eexpress.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-eexpress.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eexpress.Tpo -c -o
linux/src/drivers/net/liblinux_a-eexpress.obj `if test -f
'linux/src/drivers/net/eexpress.c'; then $(CYGPATH_W)
'linux/src/drivers/net/eexpress.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/eexpress.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eexpress.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eexpress.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/eexpress.c'
object='linux/src/drivers/net/liblinux_a-eexpress.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-eexpress.obj `if test -f
'linux/src/drivers/net/eexpress.c'; then $(CYGPATH_W)
'linux/src/drivers/net/eexpress.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/eexpress.c'; fi`
+
+linux/src/drivers/net/liblinux_a-epic100.o: linux/src/drivers/net/epic100.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-epic100.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-epic100.Tpo -c -o
linux/src/drivers/net/liblinux_a-epic100.o `test -f
'linux/src/drivers/net/epic100.c' || echo
'$(srcdir)/'`linux/src/drivers/net/epic100.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-epic100.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-epic100.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/epic100.c'
object='linux/src/drivers/net/liblinux_a-epic100.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-epic100.o `test -f
'linux/src/drivers/net/epic100.c' || echo
'$(srcdir)/'`linux/src/drivers/net/epic100.c
+
+linux/src/drivers/net/liblinux_a-epic100.obj: linux/src/drivers/net/epic100.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-epic100.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-epic100.Tpo -c -o
linux/src/drivers/net/liblinux_a-epic100.obj `if test -f
'linux/src/drivers/net/epic100.c'; then $(CYGPATH_W)
'linux/src/drivers/net/epic100.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/epic100.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-epic100.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-epic100.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/epic100.c'
object='linux/src/drivers/net/liblinux_a-epic100.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-epic100.obj `if test -f
'linux/src/drivers/net/epic100.c'; then $(CYGPATH_W)
'linux/src/drivers/net/epic100.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/epic100.c'; fi`
+
+linux/src/drivers/net/liblinux_a-eth16i.o: linux/src/drivers/net/eth16i.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-eth16i.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eth16i.Tpo -c -o
linux/src/drivers/net/liblinux_a-eth16i.o `test -f
'linux/src/drivers/net/eth16i.c' || echo
'$(srcdir)/'`linux/src/drivers/net/eth16i.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eth16i.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eth16i.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/eth16i.c'
object='linux/src/drivers/net/liblinux_a-eth16i.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-eth16i.o `test -f
'linux/src/drivers/net/eth16i.c' || echo
'$(srcdir)/'`linux/src/drivers/net/eth16i.c
+
+linux/src/drivers/net/liblinux_a-eth16i.obj: linux/src/drivers/net/eth16i.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-eth16i.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eth16i.Tpo -c -o
linux/src/drivers/net/liblinux_a-eth16i.obj `if test -f
'linux/src/drivers/net/eth16i.c'; then $(CYGPATH_W)
'linux/src/drivers/net/eth16i.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/eth16i.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eth16i.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-eth16i.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/eth16i.c'
object='linux/src/drivers/net/liblinux_a-eth16i.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-eth16i.obj `if test -f
'linux/src/drivers/net/eth16i.c'; then $(CYGPATH_W)
'linux/src/drivers/net/eth16i.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/eth16i.c'; fi`
+
+linux/src/drivers/net/liblinux_a-ewrk3.o: linux/src/drivers/net/ewrk3.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-ewrk3.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ewrk3.Tpo -c -o
linux/src/drivers/net/liblinux_a-ewrk3.o `test -f
'linux/src/drivers/net/ewrk3.c' || echo
'$(srcdir)/'`linux/src/drivers/net/ewrk3.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ewrk3.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ewrk3.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/ewrk3.c'
object='linux/src/drivers/net/liblinux_a-ewrk3.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-ewrk3.o `test -f
'linux/src/drivers/net/ewrk3.c' || echo
'$(srcdir)/'`linux/src/drivers/net/ewrk3.c
+
+linux/src/drivers/net/liblinux_a-ewrk3.obj: linux/src/drivers/net/ewrk3.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-ewrk3.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ewrk3.Tpo -c -o
linux/src/drivers/net/liblinux_a-ewrk3.obj `if test -f
'linux/src/drivers/net/ewrk3.c'; then $(CYGPATH_W)
'linux/src/drivers/net/ewrk3.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/ewrk3.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ewrk3.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ewrk3.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/ewrk3.c'
object='linux/src/drivers/net/liblinux_a-ewrk3.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-ewrk3.obj `if test -f
'linux/src/drivers/net/ewrk3.c'; then $(CYGPATH_W)
'linux/src/drivers/net/ewrk3.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/ewrk3.c'; fi`
+
+linux/src/drivers/net/liblinux_a-fmv18x.o: linux/src/drivers/net/fmv18x.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-fmv18x.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-fmv18x.Tpo -c -o
linux/src/drivers/net/liblinux_a-fmv18x.o `test -f
'linux/src/drivers/net/fmv18x.c' || echo
'$(srcdir)/'`linux/src/drivers/net/fmv18x.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-fmv18x.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-fmv18x.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/fmv18x.c'
object='linux/src/drivers/net/liblinux_a-fmv18x.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-fmv18x.o `test -f
'linux/src/drivers/net/fmv18x.c' || echo
'$(srcdir)/'`linux/src/drivers/net/fmv18x.c
+
+linux/src/drivers/net/liblinux_a-fmv18x.obj: linux/src/drivers/net/fmv18x.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-fmv18x.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-fmv18x.Tpo -c -o
linux/src/drivers/net/liblinux_a-fmv18x.obj `if test -f
'linux/src/drivers/net/fmv18x.c'; then $(CYGPATH_W)
'linux/src/drivers/net/fmv18x.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/fmv18x.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-fmv18x.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-fmv18x.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/fmv18x.c'
object='linux/src/drivers/net/liblinux_a-fmv18x.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-fmv18x.obj `if test -f
'linux/src/drivers/net/fmv18x.c'; then $(CYGPATH_W)
'linux/src/drivers/net/fmv18x.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/fmv18x.c'; fi`
+
+linux/src/drivers/net/liblinux_a-hamachi.o: linux/src/drivers/net/hamachi.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-hamachi.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hamachi.Tpo -c -o
linux/src/drivers/net/liblinux_a-hamachi.o `test -f
'linux/src/drivers/net/hamachi.c' || echo
'$(srcdir)/'`linux/src/drivers/net/hamachi.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hamachi.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hamachi.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/hamachi.c'
object='linux/src/drivers/net/liblinux_a-hamachi.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-hamachi.o `test -f
'linux/src/drivers/net/hamachi.c' || echo
'$(srcdir)/'`linux/src/drivers/net/hamachi.c
+
+linux/src/drivers/net/liblinux_a-hamachi.obj: linux/src/drivers/net/hamachi.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-hamachi.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hamachi.Tpo -c -o
linux/src/drivers/net/liblinux_a-hamachi.obj `if test -f
'linux/src/drivers/net/hamachi.c'; then $(CYGPATH_W)
'linux/src/drivers/net/hamachi.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/hamachi.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hamachi.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hamachi.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/hamachi.c'
object='linux/src/drivers/net/liblinux_a-hamachi.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-hamachi.obj `if test -f
'linux/src/drivers/net/hamachi.c'; then $(CYGPATH_W)
'linux/src/drivers/net/hamachi.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/hamachi.c'; fi`
+
+linux/src/drivers/net/liblinux_a-hp-plus.o: linux/src/drivers/net/hp-plus.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-hp-plus.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hp-plus.Tpo -c -o
linux/src/drivers/net/liblinux_a-hp-plus.o `test -f
'linux/src/drivers/net/hp-plus.c' || echo
'$(srcdir)/'`linux/src/drivers/net/hp-plus.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hp-plus.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hp-plus.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/hp-plus.c'
object='linux/src/drivers/net/liblinux_a-hp-plus.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-hp-plus.o `test -f
'linux/src/drivers/net/hp-plus.c' || echo
'$(srcdir)/'`linux/src/drivers/net/hp-plus.c
+
+linux/src/drivers/net/liblinux_a-hp-plus.obj: linux/src/drivers/net/hp-plus.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-hp-plus.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hp-plus.Tpo -c -o
linux/src/drivers/net/liblinux_a-hp-plus.obj `if test -f
'linux/src/drivers/net/hp-plus.c'; then $(CYGPATH_W)
'linux/src/drivers/net/hp-plus.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/hp-plus.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hp-plus.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hp-plus.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/hp-plus.c'
object='linux/src/drivers/net/liblinux_a-hp-plus.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-hp-plus.obj `if test -f
'linux/src/drivers/net/hp-plus.c'; then $(CYGPATH_W)
'linux/src/drivers/net/hp-plus.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/hp-plus.c'; fi`
+
+linux/src/drivers/net/liblinux_a-hp.o: linux/src/drivers/net/hp.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-hp.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hp.Tpo -c -o
linux/src/drivers/net/liblinux_a-hp.o `test -f 'linux/src/drivers/net/hp.c' ||
echo '$(srcdir)/'`linux/src/drivers/net/hp.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hp.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hp.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/hp.c'
object='linux/src/drivers/net/liblinux_a-hp.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-hp.o `test -f 'linux/src/drivers/net/hp.c' ||
echo '$(srcdir)/'`linux/src/drivers/net/hp.c
+
+linux/src/drivers/net/liblinux_a-hp.obj: linux/src/drivers/net/hp.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-hp.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hp.Tpo -c -o
linux/src/drivers/net/liblinux_a-hp.obj `if test -f
'linux/src/drivers/net/hp.c'; then $(CYGPATH_W) 'linux/src/drivers/net/hp.c';
else $(CYGPATH_W) '$(srcdir)/linux/src/drivers/net/hp.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hp.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hp.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/hp.c'
object='linux/src/drivers/net/liblinux_a-hp.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-hp.obj `if test -f
'linux/src/drivers/net/hp.c'; then $(CYGPATH_W) 'linux/src/drivers/net/hp.c';
else $(CYGPATH_W) '$(srcdir)/linux/src/drivers/net/hp.c'; fi`
+
+linux/src/drivers/net/liblinux_a-hp100.o: linux/src/drivers/net/hp100.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-hp100.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hp100.Tpo -c -o
linux/src/drivers/net/liblinux_a-hp100.o `test -f
'linux/src/drivers/net/hp100.c' || echo
'$(srcdir)/'`linux/src/drivers/net/hp100.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hp100.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hp100.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/hp100.c'
object='linux/src/drivers/net/liblinux_a-hp100.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-hp100.o `test -f
'linux/src/drivers/net/hp100.c' || echo
'$(srcdir)/'`linux/src/drivers/net/hp100.c
+
+linux/src/drivers/net/liblinux_a-hp100.obj: linux/src/drivers/net/hp100.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-hp100.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hp100.Tpo -c -o
linux/src/drivers/net/liblinux_a-hp100.obj `if test -f
'linux/src/drivers/net/hp100.c'; then $(CYGPATH_W)
'linux/src/drivers/net/hp100.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/hp100.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hp100.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-hp100.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/hp100.c'
object='linux/src/drivers/net/liblinux_a-hp100.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-hp100.obj `if test -f
'linux/src/drivers/net/hp100.c'; then $(CYGPATH_W)
'linux/src/drivers/net/hp100.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/hp100.c'; fi`
+
+linux/src/drivers/net/liblinux_a-intel-gige.o:
linux/src/drivers/net/intel-gige.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-intel-gige.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-intel-gige.Tpo -c -o
linux/src/drivers/net/liblinux_a-intel-gige.o `test -f
'linux/src/drivers/net/intel-gige.c' || echo
'$(srcdir)/'`linux/src/drivers/net/intel-gige.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-intel-gige.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-intel-gige.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/intel-gige.c'
object='linux/src/drivers/net/liblinux_a-intel-gige.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-intel-gige.o `test -f
'linux/src/drivers/net/intel-gige.c' || echo
'$(srcdir)/'`linux/src/drivers/net/intel-gige.c
+
+linux/src/drivers/net/liblinux_a-intel-gige.obj:
linux/src/drivers/net/intel-gige.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-intel-gige.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-intel-gige.Tpo -c -o
linux/src/drivers/net/liblinux_a-intel-gige.obj `if test -f
'linux/src/drivers/net/intel-gige.c'; then $(CYGPATH_W)
'linux/src/drivers/net/intel-gige.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/intel-gige.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-intel-gige.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-intel-gige.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/intel-gige.c'
object='linux/src/drivers/net/liblinux_a-intel-gige.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-intel-gige.obj `if test -f
'linux/src/drivers/net/intel-gige.c'; then $(CYGPATH_W)
'linux/src/drivers/net/intel-gige.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/intel-gige.c'; fi`
+
+linux/src/drivers/net/liblinux_a-lance.o: linux/src/drivers/net/lance.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-lance.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-lance.Tpo -c -o
linux/src/drivers/net/liblinux_a-lance.o `test -f
'linux/src/drivers/net/lance.c' || echo
'$(srcdir)/'`linux/src/drivers/net/lance.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-lance.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-lance.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/lance.c'
object='linux/src/drivers/net/liblinux_a-lance.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-lance.o `test -f
'linux/src/drivers/net/lance.c' || echo
'$(srcdir)/'`linux/src/drivers/net/lance.c
+
+linux/src/drivers/net/liblinux_a-lance.obj: linux/src/drivers/net/lance.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-lance.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-lance.Tpo -c -o
linux/src/drivers/net/liblinux_a-lance.obj `if test -f
'linux/src/drivers/net/lance.c'; then $(CYGPATH_W)
'linux/src/drivers/net/lance.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/lance.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-lance.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-lance.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/lance.c'
object='linux/src/drivers/net/liblinux_a-lance.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-lance.obj `if test -f
'linux/src/drivers/net/lance.c'; then $(CYGPATH_W)
'linux/src/drivers/net/lance.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/lance.c'; fi`
+
+linux/src/drivers/net/liblinux_a-myson803.o: linux/src/drivers/net/myson803.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-myson803.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-myson803.Tpo -c -o
linux/src/drivers/net/liblinux_a-myson803.o `test -f
'linux/src/drivers/net/myson803.c' || echo
'$(srcdir)/'`linux/src/drivers/net/myson803.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-myson803.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-myson803.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/myson803.c'
object='linux/src/drivers/net/liblinux_a-myson803.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-myson803.o `test -f
'linux/src/drivers/net/myson803.c' || echo
'$(srcdir)/'`linux/src/drivers/net/myson803.c
+
+linux/src/drivers/net/liblinux_a-myson803.obj: linux/src/drivers/net/myson803.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-myson803.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-myson803.Tpo -c -o
linux/src/drivers/net/liblinux_a-myson803.obj `if test -f
'linux/src/drivers/net/myson803.c'; then $(CYGPATH_W)
'linux/src/drivers/net/myson803.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/myson803.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-myson803.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-myson803.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/myson803.c'
object='linux/src/drivers/net/liblinux_a-myson803.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-myson803.obj `if test -f
'linux/src/drivers/net/myson803.c'; then $(CYGPATH_W)
'linux/src/drivers/net/myson803.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/myson803.c'; fi`
+
+linux/src/drivers/net/liblinux_a-natsemi.o: linux/src/drivers/net/natsemi.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-natsemi.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-natsemi.Tpo -c -o
linux/src/drivers/net/liblinux_a-natsemi.o `test -f
'linux/src/drivers/net/natsemi.c' || echo
'$(srcdir)/'`linux/src/drivers/net/natsemi.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-natsemi.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-natsemi.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/natsemi.c'
object='linux/src/drivers/net/liblinux_a-natsemi.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-natsemi.o `test -f
'linux/src/drivers/net/natsemi.c' || echo
'$(srcdir)/'`linux/src/drivers/net/natsemi.c
+
+linux/src/drivers/net/liblinux_a-natsemi.obj: linux/src/drivers/net/natsemi.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-natsemi.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-natsemi.Tpo -c -o
linux/src/drivers/net/liblinux_a-natsemi.obj `if test -f
'linux/src/drivers/net/natsemi.c'; then $(CYGPATH_W)
'linux/src/drivers/net/natsemi.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/natsemi.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-natsemi.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-natsemi.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/natsemi.c'
object='linux/src/drivers/net/liblinux_a-natsemi.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-natsemi.obj `if test -f
'linux/src/drivers/net/natsemi.c'; then $(CYGPATH_W)
'linux/src/drivers/net/natsemi.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/natsemi.c'; fi`
+
+linux/src/drivers/net/liblinux_a-ne.o: linux/src/drivers/net/ne.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-ne.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ne.Tpo -c -o
linux/src/drivers/net/liblinux_a-ne.o `test -f 'linux/src/drivers/net/ne.c' ||
echo '$(srcdir)/'`linux/src/drivers/net/ne.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ne.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ne.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/ne.c'
object='linux/src/drivers/net/liblinux_a-ne.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-ne.o `test -f 'linux/src/drivers/net/ne.c' ||
echo '$(srcdir)/'`linux/src/drivers/net/ne.c
+
+linux/src/drivers/net/liblinux_a-ne.obj: linux/src/drivers/net/ne.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-ne.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ne.Tpo -c -o
linux/src/drivers/net/liblinux_a-ne.obj `if test -f
'linux/src/drivers/net/ne.c'; then $(CYGPATH_W) 'linux/src/drivers/net/ne.c';
else $(CYGPATH_W) '$(srcdir)/linux/src/drivers/net/ne.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ne.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ne.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/ne.c'
object='linux/src/drivers/net/liblinux_a-ne.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-ne.obj `if test -f
'linux/src/drivers/net/ne.c'; then $(CYGPATH_W) 'linux/src/drivers/net/ne.c';
else $(CYGPATH_W) '$(srcdir)/linux/src/drivers/net/ne.c'; fi`
+
+linux/src/drivers/net/liblinux_a-ne2k-pci.o: linux/src/drivers/net/ne2k-pci.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-ne2k-pci.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ne2k-pci.Tpo -c -o
linux/src/drivers/net/liblinux_a-ne2k-pci.o `test -f
'linux/src/drivers/net/ne2k-pci.c' || echo
'$(srcdir)/'`linux/src/drivers/net/ne2k-pci.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ne2k-pci.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ne2k-pci.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/ne2k-pci.c'
object='linux/src/drivers/net/liblinux_a-ne2k-pci.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-ne2k-pci.o `test -f
'linux/src/drivers/net/ne2k-pci.c' || echo
'$(srcdir)/'`linux/src/drivers/net/ne2k-pci.c
+
+linux/src/drivers/net/liblinux_a-ne2k-pci.obj: linux/src/drivers/net/ne2k-pci.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-ne2k-pci.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ne2k-pci.Tpo -c -o
linux/src/drivers/net/liblinux_a-ne2k-pci.obj `if test -f
'linux/src/drivers/net/ne2k-pci.c'; then $(CYGPATH_W)
'linux/src/drivers/net/ne2k-pci.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/ne2k-pci.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ne2k-pci.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ne2k-pci.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/ne2k-pci.c'
object='linux/src/drivers/net/liblinux_a-ne2k-pci.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-ne2k-pci.obj `if test -f
'linux/src/drivers/net/ne2k-pci.c'; then $(CYGPATH_W)
'linux/src/drivers/net/ne2k-pci.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/ne2k-pci.c'; fi`
+
+linux/src/drivers/net/liblinux_a-ni52.o: linux/src/drivers/net/ni52.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-ni52.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ni52.Tpo -c -o
linux/src/drivers/net/liblinux_a-ni52.o `test -f 'linux/src/drivers/net/ni52.c'
|| echo '$(srcdir)/'`linux/src/drivers/net/ni52.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ni52.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ni52.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/ni52.c'
object='linux/src/drivers/net/liblinux_a-ni52.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-ni52.o `test -f 'linux/src/drivers/net/ni52.c'
|| echo '$(srcdir)/'`linux/src/drivers/net/ni52.c
+
+linux/src/drivers/net/liblinux_a-ni52.obj: linux/src/drivers/net/ni52.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-ni52.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ni52.Tpo -c -o
linux/src/drivers/net/liblinux_a-ni52.obj `if test -f
'linux/src/drivers/net/ni52.c'; then $(CYGPATH_W)
'linux/src/drivers/net/ni52.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/ni52.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ni52.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ni52.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/ni52.c'
object='linux/src/drivers/net/liblinux_a-ni52.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-ni52.obj `if test -f
'linux/src/drivers/net/ni52.c'; then $(CYGPATH_W)
'linux/src/drivers/net/ni52.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/ni52.c'; fi`
+
+linux/src/drivers/net/liblinux_a-ni65.o: linux/src/drivers/net/ni65.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-ni65.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ni65.Tpo -c -o
linux/src/drivers/net/liblinux_a-ni65.o `test -f 'linux/src/drivers/net/ni65.c'
|| echo '$(srcdir)/'`linux/src/drivers/net/ni65.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ni65.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ni65.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/ni65.c'
object='linux/src/drivers/net/liblinux_a-ni65.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-ni65.o `test -f 'linux/src/drivers/net/ni65.c'
|| echo '$(srcdir)/'`linux/src/drivers/net/ni65.c
+
+linux/src/drivers/net/liblinux_a-ni65.obj: linux/src/drivers/net/ni65.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-ni65.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ni65.Tpo -c -o
linux/src/drivers/net/liblinux_a-ni65.obj `if test -f
'linux/src/drivers/net/ni65.c'; then $(CYGPATH_W)
'linux/src/drivers/net/ni65.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/ni65.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ni65.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ni65.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/ni65.c'
object='linux/src/drivers/net/liblinux_a-ni65.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-ni65.obj `if test -f
'linux/src/drivers/net/ni65.c'; then $(CYGPATH_W)
'linux/src/drivers/net/ni65.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/ni65.c'; fi`
+
+linux/src/drivers/net/liblinux_a-ns820.o: linux/src/drivers/net/ns820.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-ns820.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ns820.Tpo -c -o
linux/src/drivers/net/liblinux_a-ns820.o `test -f
'linux/src/drivers/net/ns820.c' || echo
'$(srcdir)/'`linux/src/drivers/net/ns820.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ns820.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ns820.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/ns820.c'
object='linux/src/drivers/net/liblinux_a-ns820.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-ns820.o `test -f
'linux/src/drivers/net/ns820.c' || echo
'$(srcdir)/'`linux/src/drivers/net/ns820.c
+
+linux/src/drivers/net/liblinux_a-ns820.obj: linux/src/drivers/net/ns820.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-ns820.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ns820.Tpo -c -o
linux/src/drivers/net/liblinux_a-ns820.obj `if test -f
'linux/src/drivers/net/ns820.c'; then $(CYGPATH_W)
'linux/src/drivers/net/ns820.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/ns820.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ns820.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-ns820.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/ns820.c'
object='linux/src/drivers/net/liblinux_a-ns820.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-ns820.obj `if test -f
'linux/src/drivers/net/ns820.c'; then $(CYGPATH_W)
'linux/src/drivers/net/ns820.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/ns820.c'; fi`
+
+linux/src/drivers/net/liblinux_a-pcnet32.o: linux/src/drivers/net/pcnet32.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-pcnet32.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-pcnet32.Tpo -c -o
linux/src/drivers/net/liblinux_a-pcnet32.o `test -f
'linux/src/drivers/net/pcnet32.c' || echo
'$(srcdir)/'`linux/src/drivers/net/pcnet32.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-pcnet32.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-pcnet32.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/pcnet32.c'
object='linux/src/drivers/net/liblinux_a-pcnet32.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-pcnet32.o `test -f
'linux/src/drivers/net/pcnet32.c' || echo
'$(srcdir)/'`linux/src/drivers/net/pcnet32.c
+
+linux/src/drivers/net/liblinux_a-pcnet32.obj: linux/src/drivers/net/pcnet32.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-pcnet32.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-pcnet32.Tpo -c -o
linux/src/drivers/net/liblinux_a-pcnet32.obj `if test -f
'linux/src/drivers/net/pcnet32.c'; then $(CYGPATH_W)
'linux/src/drivers/net/pcnet32.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/pcnet32.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-pcnet32.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-pcnet32.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/pcnet32.c'
object='linux/src/drivers/net/liblinux_a-pcnet32.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-pcnet32.obj `if test -f
'linux/src/drivers/net/pcnet32.c'; then $(CYGPATH_W)
'linux/src/drivers/net/pcnet32.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/pcnet32.c'; fi`
+
+linux/src/drivers/net/liblinux_a-rtl8139.o: linux/src/drivers/net/rtl8139.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-rtl8139.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-rtl8139.Tpo -c -o
linux/src/drivers/net/liblinux_a-rtl8139.o `test -f
'linux/src/drivers/net/rtl8139.c' || echo
'$(srcdir)/'`linux/src/drivers/net/rtl8139.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-rtl8139.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-rtl8139.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/rtl8139.c'
object='linux/src/drivers/net/liblinux_a-rtl8139.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-rtl8139.o `test -f
'linux/src/drivers/net/rtl8139.c' || echo
'$(srcdir)/'`linux/src/drivers/net/rtl8139.c
+
+linux/src/drivers/net/liblinux_a-rtl8139.obj: linux/src/drivers/net/rtl8139.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-rtl8139.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-rtl8139.Tpo -c -o
linux/src/drivers/net/liblinux_a-rtl8139.obj `if test -f
'linux/src/drivers/net/rtl8139.c'; then $(CYGPATH_W)
'linux/src/drivers/net/rtl8139.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/rtl8139.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-rtl8139.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-rtl8139.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/rtl8139.c'
object='linux/src/drivers/net/liblinux_a-rtl8139.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-rtl8139.obj `if test -f
'linux/src/drivers/net/rtl8139.c'; then $(CYGPATH_W)
'linux/src/drivers/net/rtl8139.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/rtl8139.c'; fi`
+
+linux/src/drivers/net/liblinux_a-seeq8005.o: linux/src/drivers/net/seeq8005.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-seeq8005.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-seeq8005.Tpo -c -o
linux/src/drivers/net/liblinux_a-seeq8005.o `test -f
'linux/src/drivers/net/seeq8005.c' || echo
'$(srcdir)/'`linux/src/drivers/net/seeq8005.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-seeq8005.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-seeq8005.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/seeq8005.c'
object='linux/src/drivers/net/liblinux_a-seeq8005.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-seeq8005.o `test -f
'linux/src/drivers/net/seeq8005.c' || echo
'$(srcdir)/'`linux/src/drivers/net/seeq8005.c
+
+linux/src/drivers/net/liblinux_a-seeq8005.obj: linux/src/drivers/net/seeq8005.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-seeq8005.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-seeq8005.Tpo -c -o
linux/src/drivers/net/liblinux_a-seeq8005.obj `if test -f
'linux/src/drivers/net/seeq8005.c'; then $(CYGPATH_W)
'linux/src/drivers/net/seeq8005.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/seeq8005.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-seeq8005.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-seeq8005.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/seeq8005.c'
object='linux/src/drivers/net/liblinux_a-seeq8005.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-seeq8005.obj `if test -f
'linux/src/drivers/net/seeq8005.c'; then $(CYGPATH_W)
'linux/src/drivers/net/seeq8005.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/seeq8005.c'; fi`
+
+linux/src/drivers/net/liblinux_a-sis900.o: linux/src/drivers/net/sis900.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-sis900.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-sis900.Tpo -c -o
linux/src/drivers/net/liblinux_a-sis900.o `test -f
'linux/src/drivers/net/sis900.c' || echo
'$(srcdir)/'`linux/src/drivers/net/sis900.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-sis900.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-sis900.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/sis900.c'
object='linux/src/drivers/net/liblinux_a-sis900.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-sis900.o `test -f
'linux/src/drivers/net/sis900.c' || echo
'$(srcdir)/'`linux/src/drivers/net/sis900.c
+
+linux/src/drivers/net/liblinux_a-sis900.obj: linux/src/drivers/net/sis900.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-sis900.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-sis900.Tpo -c -o
linux/src/drivers/net/liblinux_a-sis900.obj `if test -f
'linux/src/drivers/net/sis900.c'; then $(CYGPATH_W)
'linux/src/drivers/net/sis900.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/sis900.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-sis900.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-sis900.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/sis900.c'
object='linux/src/drivers/net/liblinux_a-sis900.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-sis900.obj `if test -f
'linux/src/drivers/net/sis900.c'; then $(CYGPATH_W)
'linux/src/drivers/net/sis900.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/sis900.c'; fi`
+
+linux/src/drivers/net/liblinux_a-sk_g16.o: linux/src/drivers/net/sk_g16.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-sk_g16.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-sk_g16.Tpo -c -o
linux/src/drivers/net/liblinux_a-sk_g16.o `test -f
'linux/src/drivers/net/sk_g16.c' || echo
'$(srcdir)/'`linux/src/drivers/net/sk_g16.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-sk_g16.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-sk_g16.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/sk_g16.c'
object='linux/src/drivers/net/liblinux_a-sk_g16.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-sk_g16.o `test -f
'linux/src/drivers/net/sk_g16.c' || echo
'$(srcdir)/'`linux/src/drivers/net/sk_g16.c
+
+linux/src/drivers/net/liblinux_a-sk_g16.obj: linux/src/drivers/net/sk_g16.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-sk_g16.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-sk_g16.Tpo -c -o
linux/src/drivers/net/liblinux_a-sk_g16.obj `if test -f
'linux/src/drivers/net/sk_g16.c'; then $(CYGPATH_W)
'linux/src/drivers/net/sk_g16.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/sk_g16.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-sk_g16.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-sk_g16.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/sk_g16.c'
object='linux/src/drivers/net/liblinux_a-sk_g16.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-sk_g16.obj `if test -f
'linux/src/drivers/net/sk_g16.c'; then $(CYGPATH_W)
'linux/src/drivers/net/sk_g16.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/sk_g16.c'; fi`
+
+linux/src/drivers/net/liblinux_a-smc-ultra.o: linux/src/drivers/net/smc-ultra.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-smc-ultra.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-smc-ultra.Tpo -c -o
linux/src/drivers/net/liblinux_a-smc-ultra.o `test -f
'linux/src/drivers/net/smc-ultra.c' || echo
'$(srcdir)/'`linux/src/drivers/net/smc-ultra.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-smc-ultra.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-smc-ultra.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/smc-ultra.c'
object='linux/src/drivers/net/liblinux_a-smc-ultra.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-smc-ultra.o `test -f
'linux/src/drivers/net/smc-ultra.c' || echo
'$(srcdir)/'`linux/src/drivers/net/smc-ultra.c
+
+linux/src/drivers/net/liblinux_a-smc-ultra.obj:
linux/src/drivers/net/smc-ultra.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-smc-ultra.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-smc-ultra.Tpo -c -o
linux/src/drivers/net/liblinux_a-smc-ultra.obj `if test -f
'linux/src/drivers/net/smc-ultra.c'; then $(CYGPATH_W)
'linux/src/drivers/net/smc-ultra.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/smc-ultra.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-smc-ultra.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-smc-ultra.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/smc-ultra.c'
object='linux/src/drivers/net/liblinux_a-smc-ultra.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-smc-ultra.obj `if test -f
'linux/src/drivers/net/smc-ultra.c'; then $(CYGPATH_W)
'linux/src/drivers/net/smc-ultra.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/smc-ultra.c'; fi`
+
+linux/src/drivers/net/liblinux_a-smc-ultra32.o:
linux/src/drivers/net/smc-ultra32.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-smc-ultra32.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-smc-ultra32.Tpo -c -o
linux/src/drivers/net/liblinux_a-smc-ultra32.o `test -f
'linux/src/drivers/net/smc-ultra32.c' || echo
'$(srcdir)/'`linux/src/drivers/net/smc-ultra32.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-smc-ultra32.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-smc-ultra32.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/smc-ultra32.c'
object='linux/src/drivers/net/liblinux_a-smc-ultra32.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-smc-ultra32.o `test -f
'linux/src/drivers/net/smc-ultra32.c' || echo
'$(srcdir)/'`linux/src/drivers/net/smc-ultra32.c
+
+linux/src/drivers/net/liblinux_a-smc-ultra32.obj:
linux/src/drivers/net/smc-ultra32.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-smc-ultra32.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-smc-ultra32.Tpo -c -o
linux/src/drivers/net/liblinux_a-smc-ultra32.obj `if test -f
'linux/src/drivers/net/smc-ultra32.c'; then $(CYGPATH_W)
'linux/src/drivers/net/smc-ultra32.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/smc-ultra32 [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-smc-ultra32.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-smc-ultra32.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/smc-ultra32.c'
object='linux/src/drivers/net/liblinux_a-smc-ultra32.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-smc-ultra32.obj `if test -f
'linux/src/drivers/net/smc-ultra32.c'; then $(CYGPATH_W)
'linux/src/drivers/net/smc-ultra32.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/smc-ultra32.c'; fi`
+
+linux/src/drivers/net/liblinux_a-starfire.o: linux/src/drivers/net/starfire.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-starfire.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-starfire.Tpo -c -o
linux/src/drivers/net/liblinux_a-starfire.o `test -f
'linux/src/drivers/net/starfire.c' || echo
'$(srcdir)/'`linux/src/drivers/net/starfire.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-starfire.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-starfire.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/starfire.c'
object='linux/src/drivers/net/liblinux_a-starfire.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-starfire.o `test -f
'linux/src/drivers/net/starfire.c' || echo
'$(srcdir)/'`linux/src/drivers/net/starfire.c
+
+linux/src/drivers/net/liblinux_a-starfire.obj: linux/src/drivers/net/starfire.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-starfire.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-starfire.Tpo -c -o
linux/src/drivers/net/liblinux_a-starfire.obj `if test -f
'linux/src/drivers/net/starfire.c'; then $(CYGPATH_W)
'linux/src/drivers/net/starfire.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/starfire.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-starfire.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-starfire.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/starfire.c'
object='linux/src/drivers/net/liblinux_a-starfire.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-starfire.obj `if test -f
'linux/src/drivers/net/starfire.c'; then $(CYGPATH_W)
'linux/src/drivers/net/starfire.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/starfire.c'; fi`
+
+linux/src/drivers/net/liblinux_a-sundance.o: linux/src/drivers/net/sundance.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-sundance.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-sundance.Tpo -c -o
linux/src/drivers/net/liblinux_a-sundance.o `test -f
'linux/src/drivers/net/sundance.c' || echo
'$(srcdir)/'`linux/src/drivers/net/sundance.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-sundance.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-sundance.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/sundance.c'
object='linux/src/drivers/net/liblinux_a-sundance.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-sundance.o `test -f
'linux/src/drivers/net/sundance.c' || echo
'$(srcdir)/'`linux/src/drivers/net/sundance.c
+
+linux/src/drivers/net/liblinux_a-sundance.obj: linux/src/drivers/net/sundance.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-sundance.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-sundance.Tpo -c -o
linux/src/drivers/net/liblinux_a-sundance.obj `if test -f
'linux/src/drivers/net/sundance.c'; then $(CYGPATH_W)
'linux/src/drivers/net/sundance.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/sundance.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-sundance.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-sundance.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/sundance.c'
object='linux/src/drivers/net/liblinux_a-sundance.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-sundance.obj `if test -f
'linux/src/drivers/net/sundance.c'; then $(CYGPATH_W)
'linux/src/drivers/net/sundance.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/sundance.c'; fi`
+
+linux/src/drivers/net/liblinux_a-tlan.o: linux/src/drivers/net/tlan.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-tlan.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-tlan.Tpo -c -o
linux/src/drivers/net/liblinux_a-tlan.o `test -f 'linux/src/drivers/net/tlan.c'
|| echo '$(srcdir)/'`linux/src/drivers/net/tlan.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-tlan.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-tlan.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/tlan.c'
object='linux/src/drivers/net/liblinux_a-tlan.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-tlan.o `test -f 'linux/src/drivers/net/tlan.c'
|| echo '$(srcdir)/'`linux/src/drivers/net/tlan.c
+
+linux/src/drivers/net/liblinux_a-tlan.obj: linux/src/drivers/net/tlan.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-tlan.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-tlan.Tpo -c -o
linux/src/drivers/net/liblinux_a-tlan.obj `if test -f
'linux/src/drivers/net/tlan.c'; then $(CYGPATH_W)
'linux/src/drivers/net/tlan.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/tlan.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-tlan.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-tlan.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/tlan.c'
object='linux/src/drivers/net/liblinux_a-tlan.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-tlan.obj `if test -f
'linux/src/drivers/net/tlan.c'; then $(CYGPATH_W)
'linux/src/drivers/net/tlan.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/tlan.c'; fi`
+
+linux/src/drivers/net/liblinux_a-tulip.o: linux/src/drivers/net/tulip.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-tulip.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-tulip.Tpo -c -o
linux/src/drivers/net/liblinux_a-tulip.o `test -f
'linux/src/drivers/net/tulip.c' || echo
'$(srcdir)/'`linux/src/drivers/net/tulip.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-tulip.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-tulip.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/tulip.c'
object='linux/src/drivers/net/liblinux_a-tulip.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-tulip.o `test -f
'linux/src/drivers/net/tulip.c' || echo
'$(srcdir)/'`linux/src/drivers/net/tulip.c
+
+linux/src/drivers/net/liblinux_a-tulip.obj: linux/src/drivers/net/tulip.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-tulip.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-tulip.Tpo -c -o
linux/src/drivers/net/liblinux_a-tulip.obj `if test -f
'linux/src/drivers/net/tulip.c'; then $(CYGPATH_W)
'linux/src/drivers/net/tulip.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/tulip.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-tulip.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-tulip.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/tulip.c'
object='linux/src/drivers/net/liblinux_a-tulip.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-tulip.obj `if test -f
'linux/src/drivers/net/tulip.c'; then $(CYGPATH_W)
'linux/src/drivers/net/tulip.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/tulip.c'; fi`
+
+linux/src/drivers/net/liblinux_a-via-rhine.o: linux/src/drivers/net/via-rhine.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-via-rhine.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-via-rhine.Tpo -c -o
linux/src/drivers/net/liblinux_a-via-rhine.o `test -f
'linux/src/drivers/net/via-rhine.c' || echo
'$(srcdir)/'`linux/src/drivers/net/via-rhine.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-via-rhine.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-via-rhine.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/via-rhine.c'
object='linux/src/drivers/net/liblinux_a-via-rhine.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-via-rhine.o `test -f
'linux/src/drivers/net/via-rhine.c' || echo
'$(srcdir)/'`linux/src/drivers/net/via-rhine.c
+
+linux/src/drivers/net/liblinux_a-via-rhine.obj:
linux/src/drivers/net/via-rhine.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-via-rhine.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-via-rhine.Tpo -c -o
linux/src/drivers/net/liblinux_a-via-rhine.obj `if test -f
'linux/src/drivers/net/via-rhine.c'; then $(CYGPATH_W)
'linux/src/drivers/net/via-rhine.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/via-rhine.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-via-rhine.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-via-rhine.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/via-rhine.c'
object='linux/src/drivers/net/liblinux_a-via-rhine.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-via-rhine.obj `if test -f
'linux/src/drivers/net/via-rhine.c'; then $(CYGPATH_W)
'linux/src/drivers/net/via-rhine.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/via-rhine.c'; fi`
+
+linux/src/drivers/net/liblinux_a-wavelan.o: linux/src/drivers/net/wavelan.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-wavelan.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-wavelan.Tpo -c -o
linux/src/drivers/net/liblinux_a-wavelan.o `test -f
'linux/src/drivers/net/wavelan.c' || echo
'$(srcdir)/'`linux/src/drivers/net/wavelan.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-wavelan.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-wavelan.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/wavelan.c'
object='linux/src/drivers/net/liblinux_a-wavelan.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-wavelan.o `test -f
'linux/src/drivers/net/wavelan.c' || echo
'$(srcdir)/'`linux/src/drivers/net/wavelan.c
+
+linux/src/drivers/net/liblinux_a-wavelan.obj: linux/src/drivers/net/wavelan.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-wavelan.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-wavelan.Tpo -c -o
linux/src/drivers/net/liblinux_a-wavelan.obj `if test -f
'linux/src/drivers/net/wavelan.c'; then $(CYGPATH_W)
'linux/src/drivers/net/wavelan.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/wavelan.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-wavelan.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-wavelan.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/wavelan.c'
object='linux/src/drivers/net/liblinux_a-wavelan.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-wavelan.obj `if test -f
'linux/src/drivers/net/wavelan.c'; then $(CYGPATH_W)
'linux/src/drivers/net/wavelan.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/wavelan.c'; fi`
+
+linux/src/drivers/net/liblinux_a-wd.o: linux/src/drivers/net/wd.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-wd.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-wd.Tpo -c -o
linux/src/drivers/net/liblinux_a-wd.o `test -f 'linux/src/drivers/net/wd.c' ||
echo '$(srcdir)/'`linux/src/drivers/net/wd.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-wd.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-wd.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/wd.c'
object='linux/src/drivers/net/liblinux_a-wd.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-wd.o `test -f 'linux/src/drivers/net/wd.c' ||
echo '$(srcdir)/'`linux/src/drivers/net/wd.c
+
+linux/src/drivers/net/liblinux_a-wd.obj: linux/src/drivers/net/wd.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-wd.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-wd.Tpo -c -o
linux/src/drivers/net/liblinux_a-wd.obj `if test -f
'linux/src/drivers/net/wd.c'; then $(CYGPATH_W) 'linux/src/drivers/net/wd.c';
else $(CYGPATH_W) '$(srcdir)/linux/src/drivers/net/wd.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-wd.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-wd.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/wd.c'
object='linux/src/drivers/net/liblinux_a-wd.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-wd.obj `if test -f
'linux/src/drivers/net/wd.c'; then $(CYGPATH_W) 'linux/src/drivers/net/wd.c';
else $(CYGPATH_W) '$(srcdir)/linux/src/drivers/net/wd.c'; fi`
+
+linux/src/drivers/net/liblinux_a-winbond-840.o:
linux/src/drivers/net/winbond-840.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-winbond-840.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-winbond-840.Tpo -c -o
linux/src/drivers/net/liblinux_a-winbond-840.o `test -f
'linux/src/drivers/net/winbond-840.c' || echo
'$(srcdir)/'`linux/src/drivers/net/winbond-840.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-winbond-840.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-winbond-840.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/winbond-840.c'
object='linux/src/drivers/net/liblinux_a-winbond-840.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-winbond-840.o `test -f
'linux/src/drivers/net/winbond-840.c' || echo
'$(srcdir)/'`linux/src/drivers/net/winbond-840.c
+
+linux/src/drivers/net/liblinux_a-winbond-840.obj:
linux/src/drivers/net/winbond-840.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-winbond-840.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-winbond-840.Tpo -c -o
linux/src/drivers/net/liblinux_a-winbond-840.obj `if test -f
'linux/src/drivers/net/winbond-840.c'; then $(CYGPATH_W)
'linux/src/drivers/net/winbond-840.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/winbond-840 [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-winbond-840.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-winbond-840.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/winbond-840.c'
object='linux/src/drivers/net/liblinux_a-winbond-840.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-winbond-840.obj `if test -f
'linux/src/drivers/net/winbond-840.c'; then $(CYGPATH_W)
'linux/src/drivers/net/winbond-840.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/winbond-840.c'; fi`
+
+linux/src/drivers/net/liblinux_a-yellowfin.o: linux/src/drivers/net/yellowfin.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-yellowfin.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-yellowfin.Tpo -c -o
linux/src/drivers/net/liblinux_a-yellowfin.o `test -f
'linux/src/drivers/net/yellowfin.c' || echo
'$(srcdir)/'`linux/src/drivers/net/yellowfin.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-yellowfin.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-yellowfin.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/yellowfin.c'
object='linux/src/drivers/net/liblinux_a-yellowfin.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-yellowfin.o `test -f
'linux/src/drivers/net/yellowfin.c' || echo
'$(srcdir)/'`linux/src/drivers/net/yellowfin.c
+
+linux/src/drivers/net/liblinux_a-yellowfin.obj:
linux/src/drivers/net/yellowfin.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-yellowfin.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-yellowfin.Tpo -c -o
linux/src/drivers/net/liblinux_a-yellowfin.obj `if test -f
'linux/src/drivers/net/yellowfin.c'; then $(CYGPATH_W)
'linux/src/drivers/net/yellowfin.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/yellowfin.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-yellowfin.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-yellowfin.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/yellowfin.c'
object='linux/src/drivers/net/liblinux_a-yellowfin.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-yellowfin.obj `if test -f
'linux/src/drivers/net/yellowfin.c'; then $(CYGPATH_W)
'linux/src/drivers/net/yellowfin.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/yellowfin.c'; fi`
+
+linux/src/drivers/net/liblinux_a-znet.o: linux/src/drivers/net/znet.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-znet.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-znet.Tpo -c -o
linux/src/drivers/net/liblinux_a-znet.o `test -f 'linux/src/drivers/net/znet.c'
|| echo '$(srcdir)/'`linux/src/drivers/net/znet.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-znet.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-znet.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/znet.c'
object='linux/src/drivers/net/liblinux_a-znet.o' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-znet.o `test -f 'linux/src/drivers/net/znet.c'
|| echo '$(srcdir)/'`linux/src/drivers/net/znet.c
+
+linux/src/drivers/net/liblinux_a-znet.obj: linux/src/drivers/net/znet.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_a-znet.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_a-znet.Tpo -c -o
linux/src/drivers/net/liblinux_a-znet.obj `if test -f
'linux/src/drivers/net/znet.c'; then $(CYGPATH_W)
'linux/src/drivers/net/znet.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/znet.c'; fi`
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_a-znet.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_a-znet.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/znet.c'
object='linux/src/drivers/net/liblinux_a-znet.obj' libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_a_CPPFLAGS) $(CPPFLAGS) $(liblinux_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_a-znet.obj `if test -f
'linux/src/drivers/net/znet.c'; then $(CYGPATH_W)
'linux/src/drivers/net/znet.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/znet.c'; fi`
+
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c574_cs.o:
linux/pcmcia-cs/clients/3c574_cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c574_cs.o -MD -MP -MF
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-3c574_cs.Tpo -c
-o linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c574_cs.o `test -f
'linux/pcmcia-cs/clients/3c574_cs.c' || echo '$(srcdir)/'`linux/pcmcia-cs/clie
[...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-3c574_cs.Tpo
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-3c574_cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/clients/3c574_cs.c'
object='linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c574_cs.o'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c574_cs.o `test -f
'linux/pcmcia-cs/clients/3c574_cs.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/clients/3c574_cs.c
+
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c574_cs.obj:
linux/pcmcia-cs/clients/3c574_cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c574_cs.obj -MD -MP -MF
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-3c574_cs.Tpo -c
-o linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c574_cs.obj `if test
-f 'linux/pcmcia-cs/clients/3c574_cs.c'; then $(CYGPATH_W) 'linux/pcmcia-c [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-3c574_cs.Tpo
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-3c574_cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/clients/3c574_cs.c'
object='linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c574_cs.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c574_cs.obj `if test -f
'linux/pcmcia-cs/clients/3c574_cs.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/clients/3c574_cs.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/clients/3c574_cs.c'; fi`
+
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c589_cs.o:
linux/pcmcia-cs/clients/3c589_cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c589_cs.o -MD -MP -MF
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-3c589_cs.Tpo -c
-o linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c589_cs.o `test -f
'linux/pcmcia-cs/clients/3c589_cs.c' || echo '$(srcdir)/'`linux/pcmcia-cs/clie
[...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-3c589_cs.Tpo
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-3c589_cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/clients/3c589_cs.c'
object='linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c589_cs.o'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c589_cs.o `test -f
'linux/pcmcia-cs/clients/3c589_cs.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/clients/3c589_cs.c
+
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c589_cs.obj:
linux/pcmcia-cs/clients/3c589_cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c589_cs.obj -MD -MP -MF
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-3c589_cs.Tpo -c
-o linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c589_cs.obj `if test
-f 'linux/pcmcia-cs/clients/3c589_cs.c'; then $(CYGPATH_W) 'linux/pcmcia-c [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-3c589_cs.Tpo
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-3c589_cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/clients/3c589_cs.c'
object='linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c589_cs.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-3c589_cs.obj `if test -f
'linux/pcmcia-cs/clients/3c589_cs.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/clients/3c589_cs.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/clients/3c589_cs.c'; fi`
+
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-axnet_cs.o:
linux/pcmcia-cs/clients/axnet_cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-axnet_cs.o -MD -MP -MF
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-axnet_cs.Tpo -c
-o linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-axnet_cs.o `test -f
'linux/pcmcia-cs/clients/axnet_cs.c' || echo '$(srcdir)/'`linux/pcmcia-cs/clie
[...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-axnet_cs.Tpo
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-axnet_cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/clients/axnet_cs.c'
object='linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-axnet_cs.o'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-axnet_cs.o `test -f
'linux/pcmcia-cs/clients/axnet_cs.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/clients/axnet_cs.c
+
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-axnet_cs.obj:
linux/pcmcia-cs/clients/axnet_cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-axnet_cs.obj -MD -MP -MF
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-axnet_cs.Tpo -c
-o linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-axnet_cs.obj `if test
-f 'linux/pcmcia-cs/clients/axnet_cs.c'; then $(CYGPATH_W) 'linux/pcmcia-c [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-axnet_cs.Tpo
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-axnet_cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/clients/axnet_cs.c'
object='linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-axnet_cs.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-axnet_cs.obj `if test -f
'linux/pcmcia-cs/clients/axnet_cs.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/clients/axnet_cs.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/clients/axnet_cs.c'; fi`
+
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-fmvj18x_cs.o:
linux/pcmcia-cs/clients/fmvj18x_cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-fmvj18x_cs.o -MD -MP -MF
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-fmvj18x_cs.Tpo
-c -o linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-fmvj18x_cs.o `test
-f 'linux/pcmcia-cs/clients/fmvj18x_cs.c' || echo '$(srcdir)/'`linux/pcmcia
[...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-fmvj18x_cs.Tpo
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-fmvj18x_cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/clients/fmvj18x_cs.c'
object='linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-fmvj18x_cs.o'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-fmvj18x_cs.o `test -f
'linux/pcmcia-cs/clients/fmvj18x_cs.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/clients/fmvj18x_cs.c
+
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-fmvj18x_cs.obj:
linux/pcmcia-cs/clients/fmvj18x_cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-fmvj18x_cs.obj -MD -MP -MF
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-fmvj18x_cs.Tpo
-c -o linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-fmvj18x_cs.obj `if
test -f 'linux/pcmcia-cs/clients/fmvj18x_cs.c'; then $(CYGPATH_W) 'linux/ [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-fmvj18x_cs.Tpo
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-fmvj18x_cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/clients/fmvj18x_cs.c'
object='linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-fmvj18x_cs.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-fmvj18x_cs.obj `if test -f
'linux/pcmcia-cs/clients/fmvj18x_cs.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/clients/fmvj18x_cs.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/clients/fmvj18x_cs.c'; fi`
+
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-nmclan_cs.o:
linux/pcmcia-cs/clients/nmclan_cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-nmclan_cs.o -MD -MP -MF
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-nmclan_cs.Tpo -c
-o linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-nmclan_cs.o `test -f
'linux/pcmcia-cs/clients/nmclan_cs.c' || echo '$(srcdir)/'`linux/pcmcia-cs/
[...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-nmclan_cs.Tpo
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-nmclan_cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/clients/nmclan_cs.c'
object='linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-nmclan_cs.o'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-nmclan_cs.o `test -f
'linux/pcmcia-cs/clients/nmclan_cs.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/clients/nmclan_cs.c
+
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-nmclan_cs.obj:
linux/pcmcia-cs/clients/nmclan_cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-nmclan_cs.obj -MD -MP -MF
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-nmclan_cs.Tpo -c
-o linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-nmclan_cs.obj `if test
-f 'linux/pcmcia-cs/clients/nmclan_cs.c'; then $(CYGPATH_W) 'linux/pcmc [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-nmclan_cs.Tpo
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-nmclan_cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/clients/nmclan_cs.c'
object='linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-nmclan_cs.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-nmclan_cs.obj `if test -f
'linux/pcmcia-cs/clients/nmclan_cs.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/clients/nmclan_cs.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/clients/nmclan_cs.c'; fi`
+
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-pcnet_cs.o:
linux/pcmcia-cs/clients/pcnet_cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-pcnet_cs.o -MD -MP -MF
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-pcnet_cs.Tpo -c
-o linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-pcnet_cs.o `test -f
'linux/pcmcia-cs/clients/pcnet_cs.c' || echo '$(srcdir)/'`linux/pcmcia-cs/clie
[...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-pcnet_cs.Tpo
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-pcnet_cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/clients/pcnet_cs.c'
object='linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-pcnet_cs.o'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-pcnet_cs.o `test -f
'linux/pcmcia-cs/clients/pcnet_cs.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/clients/pcnet_cs.c
+
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-pcnet_cs.obj:
linux/pcmcia-cs/clients/pcnet_cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-pcnet_cs.obj -MD -MP -MF
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-pcnet_cs.Tpo -c
-o linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-pcnet_cs.obj `if test
-f 'linux/pcmcia-cs/clients/pcnet_cs.c'; then $(CYGPATH_W) 'linux/pcmcia-c [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-pcnet_cs.Tpo
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-pcnet_cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/clients/pcnet_cs.c'
object='linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-pcnet_cs.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-pcnet_cs.obj `if test -f
'linux/pcmcia-cs/clients/pcnet_cs.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/clients/pcnet_cs.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/clients/pcnet_cs.c'; fi`
+
+linux/src/drivers/net/liblinux_pcmcia_cs_clients_a-8390.o:
linux/src/drivers/net/8390.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_pcmcia_cs_clients_a-8390.o -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-8390.Tpo -c -o
linux/src/drivers/net/liblinux_pcmcia_cs_clients_a-8390.o `test -f
'linux/src/drivers/net/8390.c' || echo '$(srcdir)/'`linux/src/drivers/net/8390.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-8390.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-8390.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/8390.c'
object='linux/src/drivers/net/liblinux_pcmcia_cs_clients_a-8390.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_pcmcia_cs_clients_a-8390.o `test -f
'linux/src/drivers/net/8390.c' || echo '$(srcdir)/'`linux/src/drivers/net/8390.c
+
+linux/src/drivers/net/liblinux_pcmcia_cs_clients_a-8390.obj:
linux/src/drivers/net/8390.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -MT
linux/src/drivers/net/liblinux_pcmcia_cs_clients_a-8390.obj -MD -MP -MF
linux/src/drivers/net/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-8390.Tpo -c -o
linux/src/drivers/net/liblinux_pcmcia_cs_clients_a-8390.obj `if test -f
'linux/src/drivers/net/8390.c'; then $(CYGPATH_W)
'linux/src/drivers/net/8390.c'; else $( [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/src/drivers/net/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-8390.Tpo
linux/src/drivers/net/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-8390.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/src/drivers/net/8390.c'
object='linux/src/drivers/net/liblinux_pcmcia_cs_clients_a-8390.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -c -o
linux/src/drivers/net/liblinux_pcmcia_cs_clients_a-8390.obj `if test -f
'linux/src/drivers/net/8390.c'; then $(CYGPATH_W)
'linux/src/drivers/net/8390.c'; else $(CYGPATH_W)
'$(srcdir)/linux/src/drivers/net/8390.c'; fi`
+
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-smc91c92_cs.o:
linux/pcmcia-cs/clients/smc91c92_cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-smc91c92_cs.o -MD -MP -MF
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-smc91c92_cs.Tpo
-c -o linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-smc91c92_cs.o `test
-f 'linux/pcmcia-cs/clients/smc91c92_cs.c' || echo '$(srcdir)/'`linux/pc [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-smc91c92_cs.Tpo
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-smc91c92_cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/clients/smc91c92_cs.c'
object='linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-smc91c92_cs.o'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-smc91c92_cs.o `test -f
'linux/pcmcia-cs/clients/smc91c92_cs.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/clients/smc91c92_cs.c
+
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-smc91c92_cs.obj:
linux/pcmcia-cs/clients/smc91c92_cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-smc91c92_cs.obj -MD -MP
-MF
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-smc91c92_cs.Tpo
-c -o linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-smc91c92_cs.obj `if
test -f 'linux/pcmcia-cs/clients/smc91c92_cs.c'; then $(CYGPATH_W) 'li [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-smc91c92_cs.Tpo
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-smc91c92_cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/clients/smc91c92_cs.c'
object='linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-smc91c92_cs.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-smc91c92_cs.obj `if test
-f 'linux/pcmcia-cs/clients/smc91c92_cs.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/clients/smc91c92_cs.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/clients/smc91c92_cs.c'; fi`
+
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-xirc2ps_cs.o:
linux/pcmcia-cs/clients/xirc2ps_cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-xirc2ps_cs.o -MD -MP -MF
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-xirc2ps_cs.Tpo
-c -o linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-xirc2ps_cs.o `test
-f 'linux/pcmcia-cs/clients/xirc2ps_cs.c' || echo '$(srcdir)/'`linux/pcmcia
[...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-xirc2ps_cs.Tpo
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-xirc2ps_cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/clients/xirc2ps_cs.c'
object='linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-xirc2ps_cs.o'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-xirc2ps_cs.o `test -f
'linux/pcmcia-cs/clients/xirc2ps_cs.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/clients/xirc2ps_cs.c
+
+linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-xirc2ps_cs.obj:
linux/pcmcia-cs/clients/xirc2ps_cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-xirc2ps_cs.obj -MD -MP -MF
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-xirc2ps_cs.Tpo
-c -o linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-xirc2ps_cs.obj `if
test -f 'linux/pcmcia-cs/clients/xirc2ps_cs.c'; then $(CYGPATH_W) 'linux/ [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-xirc2ps_cs.Tpo
linux/pcmcia-cs/clients/$(DEPDIR)/liblinux_pcmcia_cs_clients_a-xirc2ps_cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/clients/xirc2ps_cs.c'
object='linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-xirc2ps_cs.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_clients_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_clients_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/clients/liblinux_pcmcia_cs_clients_a-xirc2ps_cs.obj `if test -f
'linux/pcmcia-cs/clients/xirc2ps_cs.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/clients/xirc2ps_cs.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/clients/xirc2ps_cs.c'; fi`
+
+linux/pcmcia-cs/glue/liblinux_pcmcia_cs_modules_a-pcmcia.o:
linux/pcmcia-cs/glue/pcmcia.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/glue/liblinux_pcmcia_cs_modules_a-pcmcia.o -MD -MP -MF
linux/pcmcia-cs/glue/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-pcmcia.Tpo -c -o
linux/pcmcia-cs/glue/liblinux_pcmcia_cs_modules_a-pcmcia.o `test -f
'linux/pcmcia-cs/glue/pcmcia.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/glue/pcmcia.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/glue/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-pcmcia.Tpo
linux/pcmcia-cs/glue/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-pcmcia.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/glue/pcmcia.c'
object='linux/pcmcia-cs/glue/liblinux_pcmcia_cs_modules_a-pcmcia.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/glue/liblinux_pcmcia_cs_modules_a-pcmcia.o `test -f
'linux/pcmcia-cs/glue/pcmcia.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/glue/pcmcia.c
+
+linux/pcmcia-cs/glue/liblinux_pcmcia_cs_modules_a-pcmcia.obj:
linux/pcmcia-cs/glue/pcmcia.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/glue/liblinux_pcmcia_cs_modules_a-pcmcia.obj -MD -MP -MF
linux/pcmcia-cs/glue/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-pcmcia.Tpo -c -o
linux/pcmcia-cs/glue/liblinux_pcmcia_cs_modules_a-pcmcia.obj `if test -f
'linux/pcmcia-cs/glue/pcmcia.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/glue/pcmcia.c'; el [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/glue/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-pcmcia.Tpo
linux/pcmcia-cs/glue/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-pcmcia.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/glue/pcmcia.c'
object='linux/pcmcia-cs/glue/liblinux_pcmcia_cs_modules_a-pcmcia.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/glue/liblinux_pcmcia_cs_modules_a-pcmcia.obj `if test -f
'linux/pcmcia-cs/glue/pcmcia.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/glue/pcmcia.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/glue/pcmcia.c'; fi`
+
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cs.o:
linux/pcmcia-cs/modules/cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cs.o -MD -MP -MF
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-cs.Tpo -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cs.o `test -f
'linux/pcmcia-cs/modules/cs.c' || echo '$(srcdir)/'`linux/pcmcia-cs/modules/cs.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-cs.Tpo
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/modules/cs.c'
object='linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cs.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cs.o `test -f
'linux/pcmcia-cs/modules/cs.c' || echo '$(srcdir)/'`linux/pcmcia-cs/modules/cs.c
+
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cs.obj:
linux/pcmcia-cs/modules/cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cs.obj -MD -MP -MF
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-cs.Tpo -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cs.obj `if test -f
'linux/pcmcia-cs/modules/cs.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/modules/cs.c'; else $( [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-cs.Tpo
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/modules/cs.c'
object='linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cs.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cs.obj `if test -f
'linux/pcmcia-cs/modules/cs.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/modules/cs.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/modules/cs.c'; fi`
+
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-ds.o:
linux/pcmcia-cs/modules/ds.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-ds.o -MD -MP -MF
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-ds.Tpo -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-ds.o `test -f
'linux/pcmcia-cs/modules/ds.c' || echo '$(srcdir)/'`linux/pcmcia-cs/modules/ds.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-ds.Tpo
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-ds.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/modules/ds.c'
object='linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-ds.o' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-ds.o `test -f
'linux/pcmcia-cs/modules/ds.c' || echo '$(srcdir)/'`linux/pcmcia-cs/modules/ds.c
+
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-ds.obj:
linux/pcmcia-cs/modules/ds.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-ds.obj -MD -MP -MF
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-ds.Tpo -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-ds.obj `if test -f
'linux/pcmcia-cs/modules/ds.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/modules/ds.c'; else $( [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-ds.Tpo
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-ds.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/modules/ds.c'
object='linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-ds.obj' libtool=no
@AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-ds.obj `if test -f
'linux/pcmcia-cs/modules/ds.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/modules/ds.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/modules/ds.c'; fi`
+
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-rsrc_mgr.o:
linux/pcmcia-cs/modules/rsrc_mgr.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-rsrc_mgr.o -MD -MP -MF
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-rsrc_mgr.Tpo -c
-o linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-rsrc_mgr.o `test -f
'linux/pcmcia-cs/modules/rsrc_mgr.c' || echo '$(srcdir)/'`linux/pcmcia-cs/modu
[...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-rsrc_mgr.Tpo
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-rsrc_mgr.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/modules/rsrc_mgr.c'
object='linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-rsrc_mgr.o'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-rsrc_mgr.o `test -f
'linux/pcmcia-cs/modules/rsrc_mgr.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/modules/rsrc_mgr.c
+
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-rsrc_mgr.obj:
linux/pcmcia-cs/modules/rsrc_mgr.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-rsrc_mgr.obj -MD -MP -MF
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-rsrc_mgr.Tpo -c
-o linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-rsrc_mgr.obj `if test
-f 'linux/pcmcia-cs/modules/rsrc_mgr.c'; then $(CYGPATH_W) 'linux/pcmcia-c [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-rsrc_mgr.Tpo
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-rsrc_mgr.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/modules/rsrc_mgr.c'
object='linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-rsrc_mgr.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-rsrc_mgr.obj `if test -f
'linux/pcmcia-cs/modules/rsrc_mgr.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/modules/rsrc_mgr.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/modules/rsrc_mgr.c'; fi`
+
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-bulkmem.o:
linux/pcmcia-cs/modules/bulkmem.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-bulkmem.o -MD -MP -MF
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-bulkmem.Tpo -c
-o linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-bulkmem.o `test -f
'linux/pcmcia-cs/modules/bulkmem.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/modules/ [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-bulkmem.Tpo
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-bulkmem.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/modules/bulkmem.c'
object='linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-bulkmem.o'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-bulkmem.o `test -f
'linux/pcmcia-cs/modules/bulkmem.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/modules/bulkmem.c
+
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-bulkmem.obj:
linux/pcmcia-cs/modules/bulkmem.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-bulkmem.obj -MD -MP -MF
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-bulkmem.Tpo -c
-o linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-bulkmem.obj `if test -f
'linux/pcmcia-cs/modules/bulkmem.c'; then $(CYGPATH_W) 'linux/pcmcia-cs/mo [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-bulkmem.Tpo
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-bulkmem.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/modules/bulkmem.c'
object='linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-bulkmem.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-bulkmem.obj `if test -f
'linux/pcmcia-cs/modules/bulkmem.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/modules/bulkmem.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/modules/bulkmem.c'; fi`
+
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cistpl.o:
linux/pcmcia-cs/modules/cistpl.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cistpl.o -MD -MP -MF
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-cistpl.Tpo -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cistpl.o `test -f
'linux/pcmcia-cs/modules/cistpl.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/modules/cistpl.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-cistpl.Tpo
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-cistpl.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/modules/cistpl.c'
object='linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cistpl.o'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cistpl.o `test -f
'linux/pcmcia-cs/modules/cistpl.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/modules/cistpl.c
+
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cistpl.obj:
linux/pcmcia-cs/modules/cistpl.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cistpl.obj -MD -MP -MF
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-cistpl.Tpo -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cistpl.obj `if test -f
'linux/pcmcia-cs/modules/cistpl.c'; then $(CYGPATH_W) 'linux/pcmcia-cs/module
[...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-cistpl.Tpo
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-cistpl.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/modules/cistpl.c'
object='linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cistpl.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-cistpl.obj `if test -f
'linux/pcmcia-cs/modules/cistpl.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/modules/cistpl.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/modules/cistpl.c'; fi`
+
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-pci_fixup.o:
linux/pcmcia-cs/modules/pci_fixup.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-pci_fixup.o -MD -MP -MF
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-pci_fixup.Tpo -c
-o linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-pci_fixup.o `test -f
'linux/pcmcia-cs/modules/pci_fixup.c' || echo '$(srcdir)/'`linux/pcmcia-cs/
[...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-pci_fixup.Tpo
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-pci_fixup.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/modules/pci_fixup.c'
object='linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-pci_fixup.o'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-pci_fixup.o `test -f
'linux/pcmcia-cs/modules/pci_fixup.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/modules/pci_fixup.c
+
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-pci_fixup.obj:
linux/pcmcia-cs/modules/pci_fixup.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-pci_fixup.obj -MD -MP -MF
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-pci_fixup.Tpo -c
-o linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-pci_fixup.obj `if test
-f 'linux/pcmcia-cs/modules/pci_fixup.c'; then $(CYGPATH_W) 'linux/pcmc [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-pci_fixup.Tpo
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-pci_fixup.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/modules/pci_fixup.c'
object='linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-pci_fixup.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-pci_fixup.obj `if test -f
'linux/pcmcia-cs/modules/pci_fixup.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/modules/pci_fixup.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/modules/pci_fixup.c'; fi`
+
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-i82365.o:
linux/pcmcia-cs/modules/i82365.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-i82365.o -MD -MP -MF
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-i82365.Tpo -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-i82365.o `test -f
'linux/pcmcia-cs/modules/i82365.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/modules/i82365.c
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-i82365.Tpo
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-i82365.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/modules/i82365.c'
object='linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-i82365.o'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-i82365.o `test -f
'linux/pcmcia-cs/modules/i82365.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/modules/i82365.c
+
+linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-i82365.obj:
linux/pcmcia-cs/modules/i82365.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-i82365.obj -MD -MP -MF
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-i82365.Tpo -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-i82365.obj `if test -f
'linux/pcmcia-cs/modules/i82365.c'; then $(CYGPATH_W) 'linux/pcmcia-cs/module
[...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-i82365.Tpo
linux/pcmcia-cs/modules/$(DEPDIR)/liblinux_pcmcia_cs_modules_a-i82365.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/modules/i82365.c'
object='linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-i82365.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_modules_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_modules_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/modules/liblinux_pcmcia_cs_modules_a-i82365.obj `if test -f
'linux/pcmcia-cs/modules/i82365.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/modules/i82365.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/modules/i82365.c'; fi`
+
+linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-hermes.o:
linux/pcmcia-cs/wireless/hermes.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_wireless_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_wireless_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-hermes.o -MD -MP -MF
linux/pcmcia-cs/wireless/$(DEPDIR)/liblinux_pcmcia_cs_wireless_a-hermes.Tpo -c
-o linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-hermes.o `test -f
'linux/pcmcia-cs/wireless/hermes.c' || echo '$(srcdir)/'`linux/pcmcia-cs/wir
[...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/wireless/$(DEPDIR)/liblinux_pcmcia_cs_wireless_a-hermes.Tpo
linux/pcmcia-cs/wireless/$(DEPDIR)/liblinux_pcmcia_cs_wireless_a-hermes.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/wireless/hermes.c'
object='linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-hermes.o'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_wireless_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_wireless_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-hermes.o `test -f
'linux/pcmcia-cs/wireless/hermes.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/wireless/hermes.c
+
+linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-hermes.obj:
linux/pcmcia-cs/wireless/hermes.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_wireless_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_wireless_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-hermes.obj -MD -MP -MF
linux/pcmcia-cs/wireless/$(DEPDIR)/liblinux_pcmcia_cs_wireless_a-hermes.Tpo -c
-o linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-hermes.obj `if test
-f 'linux/pcmcia-cs/wireless/hermes.c'; then $(CYGPATH_W) 'linux/pcmcia- [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/wireless/$(DEPDIR)/liblinux_pcmcia_cs_wireless_a-hermes.Tpo
linux/pcmcia-cs/wireless/$(DEPDIR)/liblinux_pcmcia_cs_wireless_a-hermes.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/wireless/hermes.c'
object='linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-hermes.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_wireless_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_wireless_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-hermes.obj `if test -f
'linux/pcmcia-cs/wireless/hermes.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/wireless/hermes.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/wireless/hermes.c'; fi`
+
+linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco.o:
linux/pcmcia-cs/wireless/orinoco.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_wireless_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_wireless_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco.o -MD -MP -MF
linux/pcmcia-cs/wireless/$(DEPDIR)/liblinux_pcmcia_cs_wireless_a-orinoco.Tpo -c
-o linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco.o `test -f
'linux/pcmcia-cs/wireless/orinoco.c' || echo '$(srcdir)/'`linux/pcmcia-cs [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/wireless/$(DEPDIR)/liblinux_pcmcia_cs_wireless_a-orinoco.Tpo
linux/pcmcia-cs/wireless/$(DEPDIR)/liblinux_pcmcia_cs_wireless_a-orinoco.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/wireless/orinoco.c'
object='linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco.o'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_wireless_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_wireless_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco.o `test -f
'linux/pcmcia-cs/wireless/orinoco.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/wireless/orinoco.c
+
+linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco.obj:
linux/pcmcia-cs/wireless/orinoco.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_wireless_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_wireless_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco.obj -MD -MP -MF
linux/pcmcia-cs/wireless/$(DEPDIR)/liblinux_pcmcia_cs_wireless_a-orinoco.Tpo -c
-o linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco.obj `if test
-f 'linux/pcmcia-cs/wireless/orinoco.c'; then $(CYGPATH_W) 'linux/pcm [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/wireless/$(DEPDIR)/liblinux_pcmcia_cs_wireless_a-orinoco.Tpo
linux/pcmcia-cs/wireless/$(DEPDIR)/liblinux_pcmcia_cs_wireless_a-orinoco.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/wireless/orinoco.c'
object='linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_wireless_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_wireless_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco.obj `if test -f
'linux/pcmcia-cs/wireless/orinoco.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/wireless/orinoco.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/wireless/orinoco.c'; fi`
+
+linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco_cs.o:
linux/pcmcia-cs/wireless/orinoco_cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_wireless_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_wireless_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco_cs.o -MD -MP -MF
linux/pcmcia-cs/wireless/$(DEPDIR)/liblinux_pcmcia_cs_wireless_a-orinoco_cs.Tpo
-c -o linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco_cs.o `test
-f 'linux/pcmcia-cs/wireless/orinoco_cs.c' || echo '$(srcdir)/'`lin [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/wireless/$(DEPDIR)/liblinux_pcmcia_cs_wireless_a-orinoco_cs.Tpo
linux/pcmcia-cs/wireless/$(DEPDIR)/liblinux_pcmcia_cs_wireless_a-orinoco_cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/wireless/orinoco_cs.c'
object='linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco_cs.o'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_wireless_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_wireless_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco_cs.o `test -f
'linux/pcmcia-cs/wireless/orinoco_cs.c' || echo
'$(srcdir)/'`linux/pcmcia-cs/wireless/orinoco_cs.c
+
+linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco_cs.obj:
linux/pcmcia-cs/wireless/orinoco_cs.c
address@hidden@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_wireless_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_wireless_a_CFLAGS) $(CFLAGS) -MT
linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco_cs.obj -MD -MP
-MF
linux/pcmcia-cs/wireless/$(DEPDIR)/liblinux_pcmcia_cs_wireless_a-orinoco_cs.Tpo
-c -o linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco_cs.obj `if
test -f 'linux/pcmcia-cs/wireless/orinoco_cs.c'; then $(CYGPATH_W [...]
address@hidden@ $(AM_V_at)$(am__mv)
linux/pcmcia-cs/wireless/$(DEPDIR)/liblinux_pcmcia_cs_wireless_a-orinoco_cs.Tpo
linux/pcmcia-cs/wireless/$(DEPDIR)/liblinux_pcmcia_cs_wireless_a-orinoco_cs.Po
address@hidden@@am__fastdepCC_FALSE@
$(AM_V_CC)source='linux/pcmcia-cs/wireless/orinoco_cs.c'
object='linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco_cs.obj'
libtool=no @AMDEPBACKSLASH@
address@hidden@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE)
$(depcomp) @AMDEPBACKSLASH@
address@hidden@ $(address@hidden@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)
$(liblinux_pcmcia_cs_wireless_a_CPPFLAGS) $(CPPFLAGS)
$(liblinux_pcmcia_cs_wireless_a_CFLAGS) $(CFLAGS) -c -o
linux/pcmcia-cs/wireless/liblinux_pcmcia_cs_wireless_a-orinoco_cs.obj `if test
-f 'linux/pcmcia-cs/wireless/orinoco_cs.c'; then $(CYGPATH_W)
'linux/pcmcia-cs/wireless/orinoco_cs.c'; else $(CYGPATH_W)
'$(srcdir)/linux/pcmcia-cs/wireless/orinoco_cs.c'; fi`
+doc/$(am__dirstamp):
+ @$(MKDIR_P) doc
+ @: > doc/$(am__dirstamp)
+
+$(srcdir)/doc/mach.info: doc/mach.texi $(srcdir)/doc/version.texi
+ $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+ am__cwd=`pwd` && $(am__cd) $(srcdir) && \
+ rm -rf $$backupdir && mkdir $$backupdir && \
+ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+ for f in $@ address@hidden address@hidden $(@:.info=).i[0-9]
$(@:.info=).i[0-9][0-9]; do \
+ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+ done; \
+ else :; fi && \
+ cd "$$am__cwd"; \
+ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I
$(srcdir)/doc \
+ -o $@ $(srcdir)/doc/mach.texi; \
+ then \
+ rc=0; \
+ $(am__cd) $(srcdir); \
+ else \
+ rc=$$?; \
+ $(am__cd) $(srcdir) && \
+ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+ fi; \
+ rm -rf $$backupdir; exit $$rc
+
+doc/mach.dvi: doc/mach.texi $(srcdir)/doc/version.texi doc/$(am__dirstamp)
+
$(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I
$(srcdir)/doc' \
+ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@
$(AM_V_texidevnull) \
+ `test -f 'doc/mach.texi' || echo '$(srcdir)/'`doc/mach.texi
+
+doc/mach.pdf: doc/mach.texi $(srcdir)/doc/version.texi doc/$(am__dirstamp)
+
$(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I
$(srcdir)/doc' \
+ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@
$(AM_V_texidevnull) \
+ `test -f 'doc/mach.texi' || echo '$(srcdir)/'`doc/mach.texi
+
+doc/mach.html: doc/mach.texi $(srcdir)/doc/version.texi doc/$(am__dirstamp)
+ $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp)
+ $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS)
-I doc -I $(srcdir)/doc \
+ -o $(@:.html=.htp) `test -f 'doc/mach.texi' || echo
'$(srcdir)/'`doc/mach.texi; \
+ then \
+ rm -rf $@; \
+ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+ mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
+ else \
+ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+ rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
+ exit 1; \
+ fi
+$(srcdir)/doc/stamp-vti: doc/mach.texi $(top_srcdir)/configure
+ test -f doc/$(am__dirstamp) || $(MAKE) $(AM_MAKEFLAGS)
doc/$(am__dirstamp)
+ @(dir=.; test -f ./doc/mach.texi || dir=$(srcdir); \
+ set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/doc/mach.texi`; \
+ echo "@set UPDATED $$1 $$2 $$3"; \
+ echo "@set UPDATED-MONTH $$2 $$3"; \
+ echo "@set EDITION $(VERSION)"; \
+ echo "@set VERSION $(VERSION)") > vti.tmp
+ @cmp -s vti.tmp $(srcdir)/doc/version.texi \
+ || (echo "Updating $(srcdir)/doc/version.texi"; \
+ cp vti.tmp $(srcdir)/doc/version.texi)
+ address@hidden -f vti.tmp
+ @cp $(srcdir)/doc/version.texi $@
+
+mostlyclean-vti:
+ -rm -f vti.tmp
+
+maintainer-clean-vti:
+ -rm -f $(srcdir)/doc/stamp-vti $(srcdir)/doc/version.texi
+.dvi.ps:
+
$(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ $(DVIPS) $(AM_V_texinfo) -o $@ $<
+
+uninstall-dvi-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
+ rm -f "$(DESTDIR)$(dvidir)/$$f"; \
+ done
+
+uninstall-html-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
+ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
+ done
+
+uninstall-info-am:
+ @$(PRE_UNINSTALL)
+ @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \
+ list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove
'$(DESTDIR)$(infodir)/$$relfile'"; \
+ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove
"$(DESTDIR)$(infodir)/$$relfile"; \
+ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1;
fi; \
+ done; \
+ else :; fi
+ @$(NORMAL_UNINSTALL)
+ @list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
+ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then
\
+ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile
$$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
+ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9]
$$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
+ else :; fi); \
+ done
+
+uninstall-pdf-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
+ done
+
+uninstall-ps-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(psdir)/$$f"; \
+ done
+
+dist-info: $(INFO_DEPS)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; \
+ for base in $$list; do \
+ case $$base in \
+ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$base; then d=.; else d=$(srcdir); fi; \
+ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9]
$$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
+ if test -f $$file; then \
+ relfile=`expr "$$file" : "$$d/\(.*\)"`; \
+ test -f "$(distdir)/$$relfile" || \
+ cp -p $$file "$(distdir)/$$relfile"; \
+ else :; fi; \
+ done; \
+ done
+
+mostlyclean-aminfo:
+ -rm -rf doc/mach.t2d doc/mach.t2p
+
+clean-aminfo:
+ -test -z "doc/mach.dvi doc/mach.pdf doc/mach.ps doc/mach.html" \
+ || rm -rf doc/mach.dvi doc/mach.pdf doc/mach.ps doc/mach.html
+
+maintainer-clean-aminfo:
+ @list='$(INFO_DEPS)'; for i in $$list; do \
+ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
+ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9]
$$i_i[0-9][0-9]"; \
+ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
+ done
+install-exec_msgidsDATA: $(exec_msgids_DATA)
+ @$(NORMAL_INSTALL)
+ @list='$(exec_msgids_DATA)'; test -n "$(exec_msgidsdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(exec_msgidsdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(exec_msgidsdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(exec_msgidsdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(exec_msgidsdir)" || exit $$?; \
+ done
+
+uninstall-exec_msgidsDATA:
+ @$(NORMAL_UNINSTALL)
+ @list='$(exec_msgids_DATA)'; test -n "$(exec_msgidsdir)" || list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(exec_msgidsdir)'; $(am__uninstall_files_from_dir)
+install-include_deviceHEADERS: $(include_device_HEADERS)
+ @$(NORMAL_INSTALL)
+ @list='$(include_device_HEADERS)'; test -n "$(include_devicedir)" ||
list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(include_devicedir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(include_devicedir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(include_devicedir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(include_devicedir)" || exit
$$?; \
+ done
+
+uninstall-include_deviceHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(include_device_HEADERS)'; test -n "$(include_devicedir)" ||
list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(include_devicedir)'; $(am__uninstall_files_from_dir)
+install-include_machHEADERS: $(include_mach_HEADERS)
+ @$(NORMAL_INSTALL)
+ @list='$(include_mach_HEADERS)'; test -n "$(include_machdir)" || list=;
\
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(include_machdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(include_machdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(include_machdir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(include_machdir)" || exit $$?;
\
+ done
+
+uninstall-include_machHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(include_mach_HEADERS)'; test -n "$(include_machdir)" || list=;
\
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(include_machdir)'; $(am__uninstall_files_from_dir)
+install-include_mach_eXecHEADERS: $(include_mach_eXec_HEADERS)
+ @$(NORMAL_INSTALL)
+ @list='$(include_mach_eXec_HEADERS)'; test -n "$(include_mach_eXecdir)"
|| list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(include_mach_eXecdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(include_mach_eXecdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files
'$(DESTDIR)$(include_mach_eXecdir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(include_mach_eXecdir)" || exit
$$?; \
+ done
+
+uninstall-include_mach_eXecHEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(include_mach_eXec_HEADERS)'; test -n "$(include_mach_eXecdir)"
|| list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(include_mach_eXecdir)'; $(am__uninstall_files_from_dir)
+install-include_mach_i386HEADERS: $(include_mach_i386_HEADERS)
+ @$(NORMAL_INSTALL)
+ @list='$(include_mach_i386_HEADERS)'; test -n "$(include_mach_i386dir)"
|| list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(include_mach_i386dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(include_mach_i386dir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_HEADER) $$files
'$(DESTDIR)$(include_mach_i386dir)'"; \
+ $(INSTALL_HEADER) $$files "$(DESTDIR)$(include_mach_i386dir)" || exit
$$?; \
+ done
+
+uninstall-include_mach_i386HEADERS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(include_mach_i386_HEADERS)'; test -n "$(include_mach_i386dir)"
|| list=; \
+ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+ dir='$(DESTDIR)$(include_mach_i386dir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+# (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+ @fail=; \
+ if $(am__make_keepgoing); then \
+ failcom='fail=yes'; \
+ else \
+ failcom='exit 1'; \
+ fi; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ case "$@" in \
+ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+ *) list='$(SUBDIRS)' ;; \
+ esac; \
+ for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || eval $$failcom; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+ include_option=--etags-include; \
+ empty_fix=.; \
+ else \
+ include_option=--include; \
+ empty_fix=; \
+ fi; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test ! -f $$subdir/TAGS || \
+ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscope: cscope.files
+ test ! -s cscope.files \
+ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files
$(CSCOPE_ARGS)
+clean-cscope:
+ -rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+ -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+ else \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+ br='==================='; br=$$br$$br$$br$$br; \
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+ $$success || exit 1
+
+check-TESTS:
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+recheck: all
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ log_list=`echo $$log_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+ exit $$?
+tests/test-mbchk.log: tests/test-mbchk
+ @p='tests/test-mbchk'; \
+ b='tests/test-mbchk'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS)
-- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+ @p='$<'; \
+ $(am__set_b); \
+ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS)
$(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
address@hidden@.test$(EXEEXT).log:
address@hidden@ @p='$<'; \
address@hidden@ $(am__set_b); \
address@hidden@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
address@hidden@ --log-file $$b.log --trs-file $$b.trs \
address@hidden@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS)
$(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
address@hidden@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+ $(am__remove_distdir)
+ test -d "$(distdir)" || mkdir "$(distdir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx
{} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx
{} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ $(am__make_dryrun) \
+ || test -d "$(distdir)/$$subdir" \
+ || $(MKDIR_P) "$(distdir)/$$subdir" \
+ || exit 1; \
+ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+ $(am__relativize); \
+ new_distdir=$$reldir; \
+ dir1=$$subdir; dir2="$(top_distdir)"; \
+ $(am__relativize); \
+ new_top_distdir=$$reldir; \
+ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS)
top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+ echo " am__remove_distdir=: am__skip_length_check=:
am__skip_mode_fix=: distdir)"; \
+ ($(am__cd) $$subdir && \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$$new_top_distdir" \
+ distdir="$$new_distdir" \
+ am__remove_distdir=: \
+ am__skip_length_check=: \
+ am__skip_mode_fix=: \
+ distdir) \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-info dist-hook
+ -test -n "$(am__skip_mode_fix)" \
+ || find "$(distdir)" -type d ! -perm -755 \
+ -exec chmod u+rwx,go+rx {} \; -o \
+ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+ || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c
>$(distdir).tar.gz
+ $(am__post_remove_distdir)
+dist-bzip2: distdir
+ tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c
>$(distdir).tar.bz2
+ $(am__post_remove_distdir)
+
+dist-lzip: distdir
+ tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9}
>$(distdir).tar.lz
+ $(am__post_remove_distdir)
+
+dist-xz: distdir
+ tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c
>$(distdir).tar.xz
+ $(am__post_remove_distdir)
+
+dist-tarZ: distdir
+ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+ $(am__post_remove_distdir)
+
+dist-shar: distdir
+ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+ $(am__post_remove_distdir)
+
+dist-zip: distdir
+ -rm -f $(distdir).zip
+ zip -rq $(distdir).zip $(distdir)
+ $(am__post_remove_distdir)
+
+dist dist-all:
+ $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+ $(am__post_remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ case '$(DIST_ARCHIVES)' in \
+ *.tar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+ *.tar.bz2*) \
+ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+ *.tar.lz*) \
+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+ *.tar.xz*) \
+ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.Z*) \
+ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+ *.shar.gz*) \
+ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+ *.zip*) \
+ unzip $(distdir).zip ;;\
+ esac
+ chmod -R a-w $(distdir)
+ chmod u+w $(distdir)
+ mkdir $(distdir)/_build $(distdir)/_inst
+ chmod a-w $(distdir)
+ test -d $(distdir)/_build || exit 0; \
+ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e
's,^[^:\\/]:[\\/],/,'` \
+ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+ && am__cwd=`pwd` \
+ && $(am__cd) $(distdir)/_build \
+ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+ $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+ $(DISTCHECK_CONFIGURE_FLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base"
\
+ distuninstallcheck \
+ && chmod -R a-w "$$dc_install_base" \
+ && ({ \
+ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+ } || { rm -rf "$$dc_destdir"; exit 1; }) \
+ && rm -rf "$$dc_destdir" \
+ && $(MAKE) $(AM_MAKEFLAGS) dist \
+ && rm -rf $(DIST_ARCHIVES) \
+ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+ && cd "$$am__cwd" \
+ || exit 1
+ $(am__post_remove_distdir)
+ @(echo "$(distdir) archives ready for distribution: "; \
+ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+ @test -n '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: trying to run $@ with an empty' \
+ '$$(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ $(am__cd) '$(distuninstallcheck_dir)' || { \
+ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+ exit 1; \
+ }; \
+ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left after uninstall:" ; \
+ if test -n "$(DESTDIR)"; then \
+ echo " (check DESTDIR support)"; \
+ fi ; \
+ $(distuninstallcheck_listfiles) ; \
+ exit 1; } >&2
+distcleancheck: distclean
+ @if test '$(srcdir)' = . ; then \
+ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+ exit 1 ; \
+ fi
+ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+ || { echo "ERROR: files left in build directory after distclean:" ; \
+ $(distcleancheck_listfiles) ; \
+ exit 1; } >&2
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-recursive
+all-am: Makefile $(INFO_DEPS) $(LIBRARIES) $(PROGRAMS) $(DATA) \
+ $(HEADERS) config.h
+installdirs: installdirs-recursive
+installdirs-am:
+ for dir in "$(DESTDIR)$(exec_bootdir)" "$(DESTDIR)$(infodir)"
"$(DESTDIR)$(exec_msgidsdir)" "$(DESTDIR)$(include_devicedir)"
"$(DESTDIR)$(include_machdir)" "$(DESTDIR)$(include_mach_eXecdir)"
"$(DESTDIR)$(include_mach_i386dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s
\
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s
\
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f
$(CONFIG_CLEAN_VPATH_FILES)
+ -rm -f chips/$(DEPDIR)/$(am__dirstamp)
+ -rm -f chips/$(am__dirstamp)
+ -rm -f ddb/$(DEPDIR)/$(am__dirstamp)
+ -rm -f ddb/$(am__dirstamp)
+ -rm -f device/$(DEPDIR)/$(am__dirstamp)
+ -rm -f device/$(am__dirstamp)
+ -rm -f doc/$(am__dirstamp)
+ -rm -f i386/i386/$(DEPDIR)/$(am__dirstamp)
+ -rm -f i386/i386/$(am__dirstamp)
+ -rm -f i386/i386at/$(DEPDIR)/$(am__dirstamp)
+ -rm -f i386/i386at/$(am__dirstamp)
+ -rm -f i386/intel/$(DEPDIR)/$(am__dirstamp)
+ -rm -f i386/intel/$(am__dirstamp)
+ -rm -f i386/xen/$(DEPDIR)/$(am__dirstamp)
+ -rm -f i386/xen/$(am__dirstamp)
+ -rm -f ipc/$(DEPDIR)/$(am__dirstamp)
+ -rm -f ipc/$(am__dirstamp)
+ -rm -f kern/$(DEPDIR)/$(am__dirstamp)
+ -rm -f kern/$(am__dirstamp)
+ -rm -f linux/dev/arch/i386/kernel/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/dev/arch/i386/kernel/$(am__dirstamp)
+ -rm -f linux/dev/drivers/block/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/dev/drivers/block/$(am__dirstamp)
+ -rm -f linux/dev/drivers/net/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/dev/drivers/net/$(am__dirstamp)
+ -rm -f linux/dev/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/dev/drivers/scsi/$(am__dirstamp)
+ -rm -f linux/dev/glue/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/dev/glue/$(am__dirstamp)
+ -rm -f linux/dev/init/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/dev/init/$(am__dirstamp)
+ -rm -f linux/dev/kernel/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/dev/kernel/$(am__dirstamp)
+ -rm -f linux/dev/lib/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/dev/lib/$(am__dirstamp)
+ -rm -f linux/dev/net/core/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/dev/net/core/$(am__dirstamp)
+ -rm -f linux/pcmcia-cs/clients/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/pcmcia-cs/clients/$(am__dirstamp)
+ -rm -f linux/pcmcia-cs/glue/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/pcmcia-cs/glue/$(am__dirstamp)
+ -rm -f linux/pcmcia-cs/modules/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/pcmcia-cs/modules/$(am__dirstamp)
+ -rm -f linux/pcmcia-cs/wireless/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/pcmcia-cs/wireless/$(am__dirstamp)
+ -rm -f linux/src/arch/i386/kernel/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/src/arch/i386/kernel/$(am__dirstamp)
+ -rm -f linux/src/arch/i386/lib/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/src/arch/i386/lib/$(am__dirstamp)
+ -rm -f linux/src/drivers/block/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/src/drivers/block/$(am__dirstamp)
+ -rm -f linux/src/drivers/net/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/src/drivers/net/$(am__dirstamp)
+ -rm -f linux/src/drivers/pci/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/src/drivers/pci/$(am__dirstamp)
+ -rm -f linux/src/drivers/scsi/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/src/drivers/scsi/$(am__dirstamp)
+ -rm -f linux/src/lib/$(DEPDIR)/$(am__dirstamp)
+ -rm -f linux/src/lib/$(am__dirstamp)
+ -rm -f util/$(DEPDIR)/$(am__dirstamp)
+ -rm -f util/$(am__dirstamp)
+ -rm -f vm/$(DEPDIR)/$(am__dirstamp)
+ -rm -f vm/$(am__dirstamp)
+ -rm -f xen/$(DEPDIR)/$(am__dirstamp)
+ -rm -f xen/$(am__dirstamp)
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-aminfo clean-exec_bootPROGRAMS clean-generic \
+ clean-noinstLIBRARIES clean-noinstPROGRAMS mostlyclean-am
+
+distclean: distclean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf ./$(DEPDIR) chips/$(DEPDIR) ddb/$(DEPDIR) device/$(DEPDIR)
i386/i386/$(DEPDIR) i386/i386at/$(DEPDIR) i386/intel/$(DEPDIR)
i386/xen/$(DEPDIR) ipc/$(DEPDIR) kern/$(DEPDIR)
linux/dev/arch/i386/kernel/$(DEPDIR) linux/dev/drivers/block/$(DEPDIR)
linux/dev/drivers/net/$(DEPDIR) linux/dev/drivers/scsi/$(DEPDIR)
linux/dev/glue/$(DEPDIR) linux/dev/init/$(DEPDIR) linux/dev/kernel/$(DEPDIR)
linux/dev/lib/$(DEPDIR) linux/dev/net/core/$(DEPDIR)
linux/pcmcia-cs/clients/$(DEPDIR) linux/pcmcia- [...]
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-hdr distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am: $(DVIS)
+
+html: html-recursive
+
+html-am: $(HTMLS) html-local
+
+info: info-recursive
+
+info-am: $(INFO_DEPS)
+
+install-data-am: install-include_deviceHEADERS \
+ install-include_machHEADERS install-include_mach_eXecHEADERS \
+ install-include_mach_i386HEADERS install-info-am
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-data-hook
+install-dvi: install-dvi-recursive
+
+install-dvi-am: $(DVIS)
+ @$(NORMAL_INSTALL)
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \
+ done
+install-exec-am: install-exec_bootPROGRAMS install-exec_msgidsDATA
+
+install-html: install-html-recursive
+
+install-html-am: $(HTMLS)
+ @$(NORMAL_INSTALL)
+ @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ $(am__strip_dir) \
+ d2=$$d$$p; \
+ if test -d "$$d2"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
+ else \
+ list2="$$list2 $$d2"; \
+ fi; \
+ done; \
+ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
+ done; }
+install-info: install-info-recursive
+
+install-info-am: $(INFO_DEPS)
+ @$(NORMAL_INSTALL)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \
+ fi; \
+ for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
+ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
+ if test -f $$ifile; then \
+ echo "$$ifile"; \
+ else : ; fi; \
+ done; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done
+ @$(POST_INSTALL)
+ @if $(am__can_run_installinfo); then \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)'
'$(DESTDIR)$(infodir)/$$relfile'";\
+ install-info --info-dir="$(DESTDIR)$(infodir)"
"$(DESTDIR)$(infodir)/$$relfile" || :;\
+ done; \
+ else : ; fi
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am: $(PDFS)
+ @$(NORMAL_INSTALL)
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done
+install-ps: install-ps-recursive
+
+install-ps-am: $(PSS)
+ @$(NORMAL_INSTALL)
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+ -rm -rf $(top_srcdir)/autom4te.cache
+ -rm -rf ./$(DEPDIR) chips/$(DEPDIR) ddb/$(DEPDIR) device/$(DEPDIR)
i386/i386/$(DEPDIR) i386/i386at/$(DEPDIR) i386/intel/$(DEPDIR)
i386/xen/$(DEPDIR) ipc/$(DEPDIR) kern/$(DEPDIR)
linux/dev/arch/i386/kernel/$(DEPDIR) linux/dev/drivers/block/$(DEPDIR)
linux/dev/drivers/net/$(DEPDIR) linux/dev/drivers/scsi/$(DEPDIR)
linux/dev/glue/$(DEPDIR) linux/dev/init/$(DEPDIR) linux/dev/kernel/$(DEPDIR)
linux/dev/lib/$(DEPDIR) linux/dev/net/core/$(DEPDIR)
linux/pcmcia-cs/clients/$(DEPDIR) linux/pcmcia- [...]
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-aminfo \
+ maintainer-clean-generic maintainer-clean-vti
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \
+ mostlyclean-generic mostlyclean-vti
+
+pdf: pdf-recursive
+
+pdf-am: $(PDFS) pdf-local
+
+ps: ps-recursive
+
+ps-am: $(PSS) ps-local
+
+uninstall-am: uninstall-dvi-am uninstall-exec_bootPROGRAMS \
+ uninstall-exec_msgidsDATA uninstall-html-am \
+ uninstall-include_deviceHEADERS uninstall-include_machHEADERS \
+ uninstall-include_mach_eXecHEADERS \
+ uninstall-include_mach_i386HEADERS uninstall-info-am \
+ uninstall-pdf-am uninstall-ps-am
+
+.MAKE: $(am__recursive_targets) all check-am install-am \
+ install-data-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+ am--refresh check check-TESTS check-am clean clean-aminfo \
+ clean-cscope clean-exec_bootPROGRAMS clean-generic \
+ clean-noinstLIBRARIES clean-noinstPROGRAMS cscope \
+ cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
+ dist-gzip dist-hook dist-info dist-lzip dist-shar dist-tarZ \
+ dist-xz dist-zip distcheck distclean distclean-compile \
+ distclean-generic distclean-hdr distclean-tags distcleancheck \
+ distdir distuninstallcheck dvi dvi-am html html-am html-local \
+ info info-am install install-am install-data install-data-am \
+ install-data-hook install-dvi install-dvi-am install-exec \
+ install-exec-am install-exec_bootPROGRAMS \
+ install-exec_msgidsDATA install-html install-html-am \
+ install-include_deviceHEADERS install-include_machHEADERS \
+ install-include_mach_eXecHEADERS \
+ install-include_mach_i386HEADERS install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs installdirs-am maintainer-clean \
+ maintainer-clean-aminfo maintainer-clean-generic \
+ maintainer-clean-vti mostlyclean mostlyclean-aminfo \
+ mostlyclean-compile mostlyclean-generic mostlyclean-vti pdf \
+ pdf-am pdf-local ps ps-am ps-local recheck tags tags-am \
+ uninstall uninstall-am uninstall-dvi-am \
+ uninstall-exec_bootPROGRAMS uninstall-exec_msgidsDATA \
+ uninstall-html-am uninstall-include_deviceHEADERS \
+ uninstall-include_machHEADERS \
+ uninstall-include_mach_eXecHEADERS \
+ uninstall-include_mach_i386HEADERS uninstall-info-am \
+ uninstall-pdf-am uninstall-ps-am
+
+%.symc: %.sym gensym.awk
+ $(AWK_V) $(AWK) -f $(word 2,$^) $< > $@
+%.symc.o: %.symc
+ $(AM_V_CC) $(COMPILE) -S -x c -o $@ $<
+%.h: %.symc.o
+ $(AM_V_GEN) sed < $< > $@ \
+ -e 's/^[^*].*$$//' \
+ -e 's/^[*]/#define/' \
+ -e 's/mAgIc[^-0-9]*//'
+
+%.server.defs.c: %.srv
+ $(AM_V_at) rm -f $@
+ $(AM_V_GEN) cp -p $< $@
+%.user.defs.c: %.cli
+ $(AM_V_at) rm -f $@
+ $(AM_V_GEN) cp -p $< $@
+%.server.h %.server.c %.server.msgids:
lib_dep_tr_for_defs_a-%.server.defs.$(OBJEXT)
+ $(MIGCOM_V) $(MIGCOM) $(MIGCOMFLAGS) $(MIGCOMSFLAGS) \
+ -sheader $*.server.h -server $*.server.c \
+ -list $*.server.msgids \
+ < $<
+%.user.h %.user.c %.user.msgids: lib_dep_tr_for_defs_a-%.user.defs.$(OBJEXT)
+ $(MIGCOM_V) $(MIGCOM) $(MIGCOMFLAGS) $(MIGCOMUFLAGS) \
+ -user $*.user.c -header $*.user.h \
+ -list $*.user.msgids \
+ < $<
+
+# This is how it should be done, but this is not integrated into GNU Automake
+# and is missing automatic inter-file dependency management because of that.
+
+# These chained rules could be (and used to be) single rules using pipes or
+# could even --- if you dare to --- use the `mig' shell script, but it's
+# convenient to be able to explicitly make the intermediate files when you want
+# to deal with a problem in the MIG stub generator.
+
+# TODO. Get rid of the .srv files and rather use .defs files and MIG*SFLAGS?
+#%.server.defs: %.srv
+# $(CPP) $(AM_CPPFLAGS) $(CPPFLAGS) -o $@ $<
+#%.server.defs: %.defs
+# $(CPP) $(AM_CPPFLAGS) $(CPPFLAGS) $(MIGSFLAGS) -o $@ $<
+#%.server.h %.server.c %.server.msgids: %.server.defs
+# $(MIGCOM) $(MIGCOMFLAGS) $(MIGCOMSFLAGS) \
+# -sheader $*.server.h -server $*.server.c \
+# -list $*.server.msgids \
+# < $<
+# TODO. Get rid of the .cli files and rather use .defs files and MIG*UFLAGS?
+#%.user.defs: %.cli
+# $(CPP) $(AM_CPPFLAGS) $(CPPFLAGS) -o $@ $<
+#%.user.defs: %.defs
+# $(CPP) $(AM_CPPFLAGS) $(CPPFLAGS) $(MIGUFLAGS) -o $@ $<
+#%.user.h %.user.c %.user.msgids: %.user.defs
+# $(MIGCOM) $(MIGCOMFLAGS) $(MIGCOMUFLAGS) \
+# -user $*.user.c -header $*.user.h \
+# -list $*.user.msgids \
+# < $<
+
+# Makerules.mig: how to do some MIG-related things.
+
+#
+# gzip files.
+#
+
+%.gz: %
+ $(GZIP_V) $(GZIP) -9 < $< > $@
+
+#
+# strip files.
+#
+
+%.stripped: %
+ $(STRIP) -o $@ $<
+
+#
+# Echo target.
+#
+
+echo-%:
+ @echo '$* = `$($*)'\'
+
+# mach-debug-headers:= $(addprefix mach_debug/, hash_info.h ipc_info.h \
+# mach_debug.defs mach_debug_types.defs mach_debug_types.h \
+# pc_info.h vm_info.h slab_info.h)
+
+# Other headers for the distribution. We don't install these, because the
+# GNU C library has correct versions for users to use.
+# other-sys-headers := types.h time.h reboot.h ioctl.h
+# other-mach-headers := mig_support.h mach_traps.h error.h
+# other-headers := alloca.h
+
+install-data-hook:
+ rm -f '$(DESTDIR)$(include_machdir)'/machine
+ ln -s '$(systype)' '$(DESTDIR)$(include_machdir)'/machine
+gnumach.msgids: $(filter %.msgids,$(nodist_libkernel_a_SOURCES))
+ $(AM_V_at) cat $^ > address@hidden
+ $(AM_V_GEN) mv address@hidden $@
+dist-hook: dist-hook-linux
+.PHONY: dist-hook-linux
+dist-hook-linux:
+# These symbolic links are copied from the build directory due to including
+# `linux/dev/include linux/src/include' to `EXTRA_DIST' above.
+ rm -f \
+ $(distdir)/linux/dev/include/asm \
+ $(distdir)/linux/src/include/asm
+
+#
+# Architecture specific parts.
+#
+
+#
+# Specific code.
+#
+
+# Linux device drivers and the glue code.
+
+#
+# Platform specific parts.
+#
+
+# Xen.
+
+#
+# Architecture specific parts.
+#
+
+# ix86.
+
+# Prepare a checkout in `$(web)/' of the web pages of the GNU Mach Reference
+# Manual, using the same account that was used for the source code. Then
+# install the potentially updated files into `$(web)/'.
+.PHONY: $(web)
+$(web):
+ if test -d $@/CVS; then :; else \
+ mkdir -p $@ $@/CVS && \
+ sed -e s%cvsroot%web% \
+ < $(top_srcdir)/CVS/Root \
+ > $@/CVS/Root && \
+ echo hurd/gnumach-doc \
+ > $@/CVS/Repository && \
+ : > $@/CVS/Entries; \
+ fi
+ cd $@/ && \
+ cvs update
+ $(MAKE) $(AM_MAKEFLAGS) \
+ html \
+ ps \
+ pdf
+
+# Update the files, if such a checkout exists.
+html-local:
+ if test -d $(web); then \
+ ( cd $(web)/ && \
+ for f in *.html; do \
+ if test -f ../../$(HTMLS)/"$$f"; then :; else \
+ echo "\`$$f' isn't anymore. Removing." && \
+ rm "$$f" && \
+ cvs remove "$$f"; \
+ fi; \
+ done ) && \
+ cp $(HTMLS)/*.html $(web)/ && \
+ cd $(web)/ && \
+ { cvs add *.html || :; }; \
+ fi
+ps-local:
+ if test -d $(web); then \
+ ( cd $(web)/ && \
+ for f in *.ps; do \
+ case \ $(PSS)\ in \
+ \ doc/"$$f"\ ) :;; \
+ *) echo "\`$$f' isn't anymore. Removing." && \
+ rm -f "$$f" "$$f".ps && \
+ cvs remove "$$f" "$$f".ps ;; \
+ esac; \
+ done ) && \
+ cp $(PSS) $(web)/ && \
+ cd $(web)/ && \
+ for f in *.ps; do \
+ gzip -9 < "$$f" > "$$f".gz; \
+ done && \
+ { cvs add *.ps *.ps.gz || :; }; \
+ fi
+pdf-local:
+ if test -d $(web); then \
+ ( cd $(web)/ && \
+ for f in *.pdf; do \
+ case \ $(PDFS)\ in \
+ \ doc/"$$f"\ ) :;; \
+ *) echo "\`$$f' isn't anymore. Removing." && \
+ rm "$$f" && \
+ cvs remove "$$f";; \
+ esac; \
+ done ) && \
+ cp $(PDFS) $(web)/ && \
+ cd $(web)/ && \
+ { cvs add *.pdf || :; }; \
+ fi
+# TODO. There doesn't seem to be a hook or `-local' target suitable for this.
+$(srcdir)/doc/version.texi: $(srcdir)/doc/stamp-vti
+ @if test -d $(web); then :; \
+ elif grep 2> /dev/null \
+ -q :ext: $(top_srcdir)/CVS/Root 2> /dev/null && \
+ grep 2> /dev/null \
+ -q ^Tgnumach-1-branch$$ $(top_srcdir)/CVS/Tag; \
+ then \
+ echo "*** As it seems that you'd be allowed to check in the" \
+ "possible resulting fixes, you may consider running" \
+ " \`make $(web)' to get a checkout of the web pages of the" \
+ "GNU Mach manual and have possible changes installed into" \
+ "\`$(web)/', ready for checking them in in there." && \
+ sleep 2; \
+ fi
+gnumach-undef: gnumach.$(OBJEXT)
+ $(NM_V) $(NM) -u $< | sed 's/ *U *//' | sort -u > $@
+gnumach-undef-bad: gnumach-undef Makefile
+ $(AM_V_GEN) sed '$(foreach r,$(clib_routines),/^$r$$/d;)' $< > $@
+clib-routines.o: gnumach-undef gnumach-undef-bad
+ $(AM_V_at) if test -s gnumach-undef-bad; \
+ then cat gnumach-undef-bad; exit 2; else true; fi
+ $(AM_V_CCLD) $(CCLD) -nostdlib -nostartfiles -r -static \
+ -o $@ `sed 's/^/-Wl,-u,/' < $<` -x c /dev/null -lc -lgcc
+
+dist-hook: dist-rm-CVS gen-ChangeLog
+
+.PHONY: dist-rm-CVS
+dist-rm-CVS:
+# Try to be very safe with respect to spuriously removing various directories
+# in case of an error.
+ find $(distdir)/ -type d -name CVS | while read d; do \
+ rm -f "$$d"/{Entries,Repository,Root,Tag} && \
+ rmdir "$$d"; \
+ done
+.PHONY: gen-ChangeLog
+gen-ChangeLog:
+ $(AM_V_GEN)if test -d $(top_srcdir)/.git; then \
+ (cd $(top_srcdir)/ && \
+ ./gitlog-to-changelog --strip-tab \
+ $(gen_start_commit).. && \
+ echo) >> $(distdir)/cl-t && \
+ for f in $(ChangeLog_files); do \
+ (cd $(top_srcdir)/ && \
+ git show $(gen_start_commit):$$f) >> $(distdir)/cl-t && \
+ rm -f $(distdir)/$$f && \
+ mv $(distdir)/cl-t $(distdir)/$$f \
+ || exit $$?; \
+ done; \
+ fi
+
+#
+# Legacy support.
+#
+
+install-headers: install-data
+ @echo '*****************************************************'
+ @echo '* As you can see above, I was so kind to rewrite your'
+ @echo '* `make $@'\'
+ @echo '* into'
+ @echo '* `make $^'\'
+ @echo '* which is how it is to be spelled these days.'
+ @echo '*'
+ @echo '* Please get your instructions fixed.'
+ @echo '*****************************************************'
+ @echo
+ @echo 'Penalty:'
+ sleep 20
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/README b/README
index 6c0ea5b..2d7724a 100644
--- a/README
+++ b/README
@@ -28,7 +28,7 @@ drivers for IDE, SCSI and AHCI disks.
If you want the in-kernel debugger compiled in, specify --enable-kdb
to configure. This is only useful if you actually anticipate
-debugging the kernel, of course. We don't turn it on by default
+debugging the kernel, of course. We don't turn it on be default
because it adds considerably to the unpageable memory footprint of the
kernel.
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..4d4fb78
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,1091 @@
+# generated automatically by aclocal 1.13.3 -*- Autoconf -*-
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS],
[])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
+You have another version of autoconf. It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically
'autoreconf'.])])
+
+# Copyright (C) 2002-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.13'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version. Point them to the right macro.
+m4_if([$1], [1.13.3], [],
+ [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too. Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.13.3])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+ [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# Figure out how to run the assembler. -*- Autoconf -*-
+
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_AS
+# ----------
+AC_DEFUN([AM_PROG_AS],
+[# By default we simply use the C compiler to build assembly code.
+AC_REQUIRE([AC_PROG_CC])
+test "${CCAS+set}" = set || CCAS=$CC
+test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
+AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)])
+AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)])
+_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl
+])
+
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
+
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory. The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run. This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+# fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+# fails if $ac_aux_dir is absolute,
+# fails when called from a subdirectory in a VPATH build with
+# a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir. In an in-source build this is usually
+# harmless because $srcdir is '.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
+# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+# MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH. The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL -*- Autoconf -*-
+
+# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
+ [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+ AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery. Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+m4_if([$1], [CC], [depcc="$CC" am_compiler_list=],
+ [$1], [CXX], [depcc="$CXX" am_compiler_list=],
+ [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+ [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+ [$1], [UPC], [depcc="$UPC" am_compiler_list=],
+ [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
+ [depcc="$$1" am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+ [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_$1_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+ fi
+ am__universal=false
+ m4_case([$1], [CC],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac],
+ [CXX],
+ [case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac])
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_$1_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+ [--enable-dependency-tracking],
+ [do not reject slow dependency extractors])
+AS_HELP_STRING(
+ [--disable-dependency-tracking],
+ [speeds up one-time build])])
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking. -*- Autoconf -*-
+
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named 'Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null
2>&1; then
+ dirpart=`AS_DIRNAME("$mf")`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running 'make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "$am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`AS_DIRNAME(["$file"])`
+ AS_MKDIR_P([$dirpart/$fdir])
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled. FIXME. This creates each '.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+ [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+ [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Do all the work for Automake. -*- Autoconf -*-
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out. PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition. After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.65])dnl
+dnl Autoconf wants to disallow AM_ names. We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean"
there first])
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[AC_DIAGNOSE([obsolete],
+ [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+ m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+ [ok:ok],,
+ [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+ [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+ [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+ [_AM_DEPENDENCIES([CC])],
+ [m4_define([AC_PROG_CC],
+ m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+ [_AM_DEPENDENCIES([CXX])],
+ [m4_define([AC_PROG_CXX],
+
m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+ [_AM_DEPENDENCIES([OBJC])],
+ [m4_define([AC_PROG_OBJC],
+
m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+ [_AM_DEPENDENCIES([OBJCXX])],
+ [m4_define([AC_PROG_OBJCXX],
+
m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+ [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated. The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg"
>`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+AC_SUBST([install_sh])])
+
+# Copyright (C) 2003-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot. For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes. -*- Autoconf -*-
+
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_CC_C_O
+# --------------
+# Like AC_PROG_CC_C_O, but changed for automake.
+AC_DEFUN([AM_PROG_CC_C_O],
+[AC_REQUIRE([AC_PROG_CC_C_O])dnl
+AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+dnl Make sure AC_PROG_CC is never called again, or it will override our
+dnl setting of CC.
+m4_define([AC_PROG_CC],
+ [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])])
+])
+
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
+
+# Copyright (C) 1997-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Helper functions for option handling. -*- Autoconf -*-
+
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME. Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[[\\\"\#\$\&\'\`$am_lf]]*)
+ AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+ *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
+ AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$[*]" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$[*]" != "X $srcdir/configure conftest.file" \
+ && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+ alias in your environment])
+ fi
+ if test "$[2]" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$[2]" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+ [AC_MSG_CHECKING([that generated files are newer than configure])
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2009-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+ [--enable-silent-rules],
+ [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+ [--disable-silent-rules],
+ [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+ [am_cv_make_support_nested_variables],
+ [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+ dnl Using '$V' instead of '$(V)' breaks IRIX make.
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor 'install' (even GNU) is that you can't
+# specify the program used to strip binaries. This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in "make install-strip", and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+if test "$cross_compiling" != no; then
+ AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball. -*- Autoconf -*-
+
+# Copyright (C) 2004-2013 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+# tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+# $(am__untar) < result.tar
+#
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+ [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+ [m4_case([$1],
+ [ustar],
+ [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+ # There is notably a 21 bits limit for the UID and the GID. In fact,
+ # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+ # and bug#13588).
+ am_max_uid=2097151 # 2^21 - 1
+ am_max_gid=$am_max_uid
+ # The $UID and $GID variables are not portable, so we need to resort
+ # to the POSIX-mandated id(1) utility. Errors in the 'id' calls
+ # below are definitely unexpected, so allow the users to see them
+ # (that is, avoid stderr redirection).
+ am_uid=`id -u || echo unknown`
+ am_gid=`id -g || echo unknown`
+ AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+ if test $am_uid -le $am_max_uid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi
+ AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+ if test $am_gid -le $am_max_gid; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ _am_tools=none
+ fi],
+
+ [pax],
+ [],
+
+ [m4_fatal([Unknown tar format])])
+
+ AC_MSG_CHECKING([how to create a $1 tar archive])
+
+ # Go ahead even if we have the value already cached. We do so because we
+ # need to set the values for the 'am__tar' and 'am__untar' variables.
+ _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+ for _am_tool in $_am_tools; do
+ case $_am_tool in
+ gnutar)
+ for _am_tar in tar gnutar gtar; do
+ AM_RUN_LOG([$_am_tar --version]) && break
+ done
+ am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf -
"'"$$tardir"'
+ am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf -
"'"$tardir"'
+ am__untar="$_am_tar -xf -"
+ ;;
+ plaintar)
+ # Must skip GNU tar: if it does not support --format= it doesn't create
+ # ustar tarball either.
+ (tar --version) >/dev/null 2>&1 && continue
+ am__tar='tar chf - "$$tardir"'
+ am__tar_='tar chf - "$tardir"'
+ am__untar='tar xf -'
+ ;;
+ pax)
+ am__tar='pax -L -x $1 -w "$$tardir"'
+ am__tar_='pax -L -x $1 -w "$tardir"'
+ am__untar='pax -r'
+ ;;
+ cpio)
+ am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+ am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+ am__untar='cpio -i -H $1 -d'
+ ;;
+ none)
+ am__tar=false
+ am__tar_=false
+ am__untar=false
+ ;;
+ esac
+
+ # If the value was cached, stop now. We just wanted to have am__tar
+ # and am__untar set.
+ test -n "${am_cv_prog_tar_$1}" && break
+
+ # tar/untar a dummy directory, and stop if the command works.
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ echo GrepMe > conftest.dir/file
+ AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+ rm -rf conftest.dir
+ if test -s conftest.tar; then
+ AM_RUN_LOG([$am__untar <conftest.tar])
+ AM_RUN_LOG([cat conftest.dir/file])
+ grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+ fi
+ done
+ rm -rf conftest.dir
+
+ AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+ AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
diff --git a/build-aux/compile b/build-aux/compile
new file mode 100755
index 0000000..531136b
--- /dev/null
+++ b/build-aux/compile
@@ -0,0 +1,347 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2012-10-14.11; # UTC
+
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+# Written by Tom Tromey <address@hidden>.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <address@hidden> or send patches to
+# <address@hidden>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" "" $nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+ file=$1
+ case $file in
+ / | /[!/]*) # absolute file, and not a UNC file
+ if test -z "$file_conv"; then
+ # lazily determine how to convert abs files
+ case `uname -s` in
+ MINGW*)
+ file_conv=mingw
+ ;;
+ CYGWIN*)
+ file_conv=cygwin
+ ;;
+ *)
+ file_conv=wine
+ ;;
+ esac
+ fi
+ case $file_conv/,$2, in
+ *,$file_conv,*)
+ ;;
+ mingw/*)
+ file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+ ;;
+ cygwin/*)
+ file=`cygpath -m "$file" || echo "$file"`
+ ;;
+ wine/*)
+ file=`winepath -w "$file" || echo "$file"`
+ ;;
+ esac
+ ;;
+ esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+ func_file_conv "$1"
+ if test -z "$lib_path"; then
+ lib_path=$file
+ else
+ lib_path="$lib_path;$file"
+ fi
+ linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+ lib=$1
+ found=no
+ save_IFS=$IFS
+ IFS=';'
+ for dir in $lib_path $LIB
+ do
+ IFS=$save_IFS
+ if $shared && test -f "$dir/$lib.dll.lib"; then
+ found=yes
+ lib=$dir/$lib.dll.lib
+ break
+ fi
+ if test -f "$dir/$lib.lib"; then
+ found=yes
+ lib=$dir/$lib.lib
+ break
+ fi
+ if test -f "$dir/lib$lib.a"; then
+ found=yes
+ lib=$dir/lib$lib.a
+ break
+ fi
+ done
+ IFS=$save_IFS
+
+ if test "$found" != yes; then
+ lib=$lib.lib
+ fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+ # Assume a capable shell
+ lib_path=
+ shared=:
+ linker_opts=
+ for arg
+ do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ eat=1
+ case $2 in
+ *.o | *.[oO][bB][jJ])
+ func_file_conv "$2"
+ set x "$@" -Fo"$file"
+ shift
+ ;;
+ *)
+ func_file_conv "$2"
+ set x "$@" -Fe"$file"
+ shift
+ ;;
+ esac
+ ;;
+ -I)
+ eat=1
+ func_file_conv "$2" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -I*)
+ func_file_conv "${1#-I}" mingw
+ set x "$@" -I"$file"
+ shift
+ ;;
+ -l)
+ eat=1
+ func_cl_dashl "$2"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -l*)
+ func_cl_dashl "${1#-l}"
+ set x "$@" "$lib"
+ shift
+ ;;
+ -L)
+ eat=1
+ func_cl_dashL "$2"
+ ;;
+ -L*)
+ func_cl_dashL "${1#-L}"
+ ;;
+ -static)
+ shared=false
+ ;;
+ -Wl,*)
+ arg=${1#-Wl,}
+ save_ifs="$IFS"; IFS=','
+ for flag in $arg; do
+ IFS="$save_ifs"
+ linker_opts="$linker_opts $flag"
+ done
+ IFS="$save_ifs"
+ ;;
+ -Xlinker)
+ eat=1
+ linker_opts="$linker_opts $2"
+ ;;
+ -*)
+ set x "$@" "$1"
+ shift
+ ;;
+ *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+ func_file_conv "$1"
+ set x "$@" -Tp"$file"
+ shift
+ ;;
+ *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+ func_file_conv "$1" mingw
+ set x "$@" "$file"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+ done
+ if test -n "$linker_opts"; then
+ linker_opts="-link$linker_opts"
+ fi
+ exec "$@" $linker_opts
+ exit 1
+}
+
+eat=
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <address@hidden>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "compile $scriptversion"
+ exit $?
+ ;;
+ cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
+ func_cl_wrapper "$@" # Doesn't return...
+ ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+ if test -n "$eat"; then
+ eat=
+ else
+ case $1 in
+ -o)
+ # configure might choose to run compile as 'compile cc -o foo foo.c'.
+ # So we strip '-o arg' only if arg is an object.
+ eat=1
+ case $2 in
+ *.o | *.obj)
+ ofile=$2
+ ;;
+ *)
+ set x "$@" -o "$2"
+ shift
+ ;;
+ esac
+ ;;
+ *.c)
+ cfile=$1
+ set x "$@" "$1"
+ shift
+ ;;
+ *)
+ set x "$@" "$1"
+ shift
+ ;;
+ esac
+ fi
+ shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+ # If no '-o' option was seen then we might have been invoked from a
+ # pattern rule where we don't need one. That is ok -- this is a
+ # normal compilation that the losing compiler can handle. If no
+ # '.c' file was seen then we are probably linking. That is also
+ # ok.
+ exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file. Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+ if mkdir "$lockdir" >/dev/null 2>&1; then
+ break
+ fi
+ sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+ test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+ test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/config.guess b/build-aux/config.guess
new file mode 100755
index 0000000..b79252d
--- /dev/null
+++ b/build-aux/config.guess
@@ -0,0 +1,1558 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright 1992-2013 Free Software Foundation, Inc.
+
+timestamp='2013-06-10'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+#
+# Originally written by Per Bothner.
+#
+# You can get the latest version of this script from:
+#
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+#
+# Please send patches with a ChangeLog entry to address@hidden
+
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <address@hidden>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright 1992-2013 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help" >&2
+ exit 1 ;;
+ * )
+ break ;;
+ esac
+done
+
+if test $# != 0; then
+ echo "$me: too many arguments$help" >&2
+ exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) &&
exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15
;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n
"$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp)
; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating
insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,) echo "int x;" > $dummy.c ;
+ for c in cc gcc c89 c99 ; do
+ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+ CC_FOR_BUILD="$c"; break ;
+ fi ;
+ done ;
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found ;
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+esac ; set_cc_for_build= ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (address@hidden 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+case "${UNAME_SYSTEM}" in
+Linux|GNU|GNU/*)
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ LIBC=gnu
+
+ eval $set_cc_for_build
+ cat <<-EOF > $dummy.c
+ #include <features.h>
+ #if defined(__UCLIBC__)
+ LIBC=uclibc
+ #elif defined(__dietlibc__)
+ LIBC=dietlibc
+ #else
+ LIBC=gnu
+ #endif
+ EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+ ;;
+esac
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ *:NetBSD:*:*)
+ # NetBSD (nbsd) targets should (where applicable) match one or
+ # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
+ # switched to ELF, *-*-netbsd* would select the old
+ # object file format. This provides both forward
+ # compatibility and a consistent mechanism for selecting the
+ # object file format.
+ #
+ # Note: NetBSD doesn't particularly care about the vendor
+ # portion of the name. We always set it to "unknown".
+ sysctl="sysctl -n hw.machine_arch"
+ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+ case "${UNAME_MACHINE_ARCH}" in
+ armeb) machine=armeb-unknown ;;
+ arm*) machine=arm-unknown ;;
+ sh3el) machine=shl-unknown ;;
+ sh3eb) machine=sh-unknown ;;
+ sh5el) machine=sh5le-unknown ;;
+ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+ esac
+ # The Operating System including object format, if it has switched
+ # to ELF recently, or will in the future.
+ case "${UNAME_MACHINE_ARCH}" in
+ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+ eval $set_cc_for_build
+ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ELF__
+ then
+ # Once all utilities can be ECOFF (netbsdecoff) or a.out
(netbsdaout).
+ # Return netbsd for either. FIX?
+ os=netbsd
+ else
+ os=netbsdelf
+ fi
+ ;;
+ *)
+ os=netbsd
+ ;;
+ esac
+ # The OS release
+ # Debian GNU/NetBSD machines have a different userland, and
+ # thus, need a distinct triplet. However, they do not need
+ # kernel version information, so it can be replaced with a
+ # suitable tag, in the style of linux-gnu.
+ case "${UNAME_VERSION}" in
+ Debian*)
+ release='-gnu'
+ ;;
+ *)
+ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ ;;
+ esac
+ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+ # contains redundant information, the shorter form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+ echo "${machine}-${os}${release}"
+ exit ;;
+ *:Bitrig:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+ exit ;;
+ *:OpenBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+ exit ;;
+ *:ekkoBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+ exit ;;
+ *:SolidBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+ exit ;;
+ macppc:MirBSD:*:*)
+ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ *:MirBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+ exit ;;
+ alpha:OSF1:*:*)
+ case $UNAME_RELEASE in
+ *4.0)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ ;;
+ *5.*)
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ ;;
+ esac
+ # According to Compaq, /usr/sbin/psrinfo has been available on
+ # OSF/1 and Tru64 systems produced since 1995. I hope that
+ # covers most systems running today. This code pipes the CPU
+ # types through head -n 1, so we only detect the type of CPU 0.
+ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\)
processor.*$/\1/p' | head -n 1`
+ case "$ALPHA_CPU_TYPE" in
+ "EV4 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "EV4.5 (21064)")
+ UNAME_MACHINE="alpha" ;;
+ "LCA4 (21066/21068)")
+ UNAME_MACHINE="alpha" ;;
+ "EV5 (21164)")
+ UNAME_MACHINE="alphaev5" ;;
+ "EV5.6 (21164A)")
+ UNAME_MACHINE="alphaev56" ;;
+ "EV5.6 (21164PC)")
+ UNAME_MACHINE="alphapca56" ;;
+ "EV5.7 (21164PC)")
+ UNAME_MACHINE="alphapca57" ;;
+ "EV6 (21264)")
+ UNAME_MACHINE="alphaev6" ;;
+ "EV6.7 (21264A)")
+ UNAME_MACHINE="alphaev67" ;;
+ "EV6.8CB (21264C)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8AL (21264B)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.8CX (21264D)")
+ UNAME_MACHINE="alphaev68" ;;
+ "EV6.9A (21264/EV69A)")
+ UNAME_MACHINE="alphaev69" ;;
+ "EV7 (21364)")
+ UNAME_MACHINE="alphaev7" ;;
+ "EV7.9 (21364A)")
+ UNAME_MACHINE="alphaev79" ;;
+ esac
+ # A Pn.n version is a patched version.
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e
's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ exitcode=$?
+ trap '' 0
+ exit $exitcode ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-unknown-sysv4
+ exit ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit ;;
+ *:[Mm]orph[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-morphos
+ exit ;;
+ *:OS/390:*:*)
+ echo i370-ibm-openedition
+ exit ;;
+ *:z/VM:*:*)
+ echo s390-ibm-zvmoe
+ exit ;;
+ *:OS400:*:*)
+ echo powerpc-ibm-os400
+ exit ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit ;;
+ arm*:riscos:*:*|arm*:RISCOS:*:*)
+ echo arm-unknown-riscos
+ exit ;;
+ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit ;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # address@hidden (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit ;;
+ DRS?6000:unix:4.0:6*)
+ echo sparc-icl-nx6
+ exit ;;
+ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+ case `/usr/bin/uname -p` in
+ sparc) echo sparc-icl-nx7; exit ;;
+ esac ;;
+ s390x:SunOS:*:*)
+ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e
's/[^.]*//'`
+ exit ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+ echo i386-pc-auroraux${UNAME_RELEASE}
+ exit ;;
+ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+ eval $set_cc_for_build
+ SUN_ARCH="i386"
+ # If there is a compiler, see if it is configured for 64-bit objects.
+ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
+ # This test works for both compilers.
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ SUN_ARCH="x86_64"
+ fi
+ fi
+ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}')
2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
+ m68k:machten:*:*)
+ echo m68k-apple-machten${UNAME_RELEASE}
+ exit ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h> /* for printf() prototype */
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c &&
+ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+ SYSTEM_NAME=`$dummy $dummyarg` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit ;;
+ Motorola:PowerMAX_OS:*:*)
+ echo powerpc-motorola-powermax
+ exit ;;
+ Motorola:*:4.3:PL8-*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+ echo powerpc-harris-powermax
+ exit ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+ then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+ [ ${TARGET_BINARY_INTERFACE}x = x ]
+ then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else
+ echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i*86:AIX:*:*)
+ echo i386-ibm-aix
+ exit ;;
+ ia64:AIX:*:*)
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+ then
+ echo "$SYSTEM_NAME"
+ else
+ echo rs6000-ibm-aix3.2.5
+ fi
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit ;;
+ *:AIX:*:[4567])
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk
'{ print $1 }'`
+ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1;
then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit ;;
+ 9000/[34678]??:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ if [ -x /usr/bin/getconf ]; then
+ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
+ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
+ esac ;;
+ esac
+ fi
+ if [ "${HP_ARCH}" = "" ]; then
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) &&
HP_ARCH=`$dummy`
+ test -z "$HP_ARCH" && HP_ARCH=hppa
+ fi ;;
+ esac
+ if [ ${HP_ARCH} = "hppa2.0w" ]
+ then
+ eval $set_cc_for_build
+
+ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
+ # generating 64-bit code. GNU and HP use different nomenclature:
+ #
+ # $ CC_FOR_BUILD=cc ./config.guess
+ # => hppa2.0w-hp-hpux11.23
+ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+ # => hppa64-hp-hpux11.23
+
+ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+ grep -q __LP64__
+ then
+ HP_ARCH="hppa2.0w"
+ else
+ HP_ARCH="hppa64"
+ fi
+ fi
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit ;;
+ ia64:HP-UX:*:*)
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ia64-hp-hpux${HPUX_REV}
+ exit ;;
+ 3050*:HI-UX:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+ echo unknown-hitachi-hiuxwe2
+ exit ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit ;;
+ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit ;;
+ i*86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+ -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*T3E:*:*:*)
+ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ CRAY*SV1:*:*:*)
+ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ *:UNICOS/mp:*:*)
+ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+ exit ;;
+ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
'abcdefghijklmnopqrstuvwxyz'`
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ 5000:UNIX_System_V:4.*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
+ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit ;;
+ *:FreeBSD:*:*)
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ case ${UNAME_PROCESSOR} in
+ amd64)
+ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e
's/[-(].*//'` ;;
+ *)
+ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo
${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+ esac
+ exit ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit ;;
+ *:MINGW64*:*)
+ echo ${UNAME_MACHINE}-pc-mingw64
+ exit ;;
+ *:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit ;;
+ i*:MSYS*:*)
+ echo ${UNAME_MACHINE}-pc-msys
+ exit ;;
+ i*:windows32*:*)
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
+ exit ;;
+ i*:PW*:*)
+ echo ${UNAME_MACHINE}-pc-pw32
+ exit ;;
+ *:Interix*:*)
+ case ${UNAME_MACHINE} in
+ x86)
+ echo i586-pc-interix${UNAME_RELEASE}
+ exit ;;
+ authenticamd | genuineintel | EM64T)
+ echo x86_64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ IA64)
+ echo ia64-unknown-interix${UNAME_RELEASE}
+ exit ;;
+ esac ;;
+ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+ echo i${UNAME_MACHINE}-pc-mks
+ exit ;;
+ 8664:Windows_NT:*)
+ echo x86_64-pc-mks
+ exit ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i586-pc-interix
+ exit ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit ;;
+ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+ echo x86_64-unknown-cygwin
+ exit ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e
's/[^.]*//'`
+ exit ;;
+ *:GNU:*:*)
+ # the GNU system
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo
${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit ;;
+ *:GNU/*:*:*)
+ # other systems with GNU libc and userland
+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,'
| tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
+ exit ;;
+ i*86:Minix:*:*)
+ echo ${UNAME_MACHINE}-pc-minix
+ exit ;;
+ aarch64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ aarch64_be:Linux:*:*)
+ UNAME_MACHINE=aarch64_be
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
+ EV56) UNAME_MACHINE=alphaev56 ;;
+ PCA56) UNAME_MACHINE=alphapca56 ;;
+ PCA57) UNAME_MACHINE=alphapca56 ;;
+ EV6) UNAME_MACHINE=alphaev6 ;;
+ EV67) UNAME_MACHINE=alphaev67 ;;
+ EV68*) UNAME_MACHINE=alphaev68 ;;
+ esac
+ objdump --private-headers /bin/sh | grep -q ld.so.1
+ if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ arc:Linux:*:* | arceb:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ arm*:Linux:*:*)
+ eval $set_cc_for_build
+ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_EABI__
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ else
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
+ fi
+ fi
+ exit ;;
+ avr32*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ cris:Linux:*:*)
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+ exit ;;
+ crisv32:Linux:*:*)
+ echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+ exit ;;
+ frv:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ hexagon:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ i*86:Linux:*:*)
+ echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+ exit ;;
+ ia64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ m32r*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ m68*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ mips:Linux:*:* | mips64:Linux:*:*)
+ eval $set_cc_for_build
+ sed 's/^ //' << EOF >$dummy.c
+ #undef CPU
+ #undef ${UNAME_MACHINE}
+ #undef ${UNAME_MACHINE}el
+ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) ||
defined(MIPSEL)
+ CPU=${UNAME_MACHINE}el
+ #else
+ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) ||
defined(MIPSEB)
+ CPU=${UNAME_MACHINE}
+ #else
+ CPU=
+ #endif
+ #endif
+EOF
+ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
+ ;;
+ or1k:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ or32:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ padre:Linux:*:*)
+ echo sparc-unknown-linux-${LIBC}
+ exit ;;
+ parisc64:Linux:*:* | hppa64:Linux:*:*)
+ echo hppa64-unknown-linux-${LIBC}
+ exit ;;
+ parisc:Linux:*:* | hppa:Linux:*:*)
+ # Look for CPU level
+ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+ PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
+ PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
+ *) echo hppa-unknown-linux-${LIBC} ;;
+ esac
+ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-${LIBC}
+ exit ;;
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-${LIBC}
+ exit ;;
+ ppc64le:Linux:*:*)
+ echo powerpc64le-unknown-linux-${LIBC}
+ exit ;;
+ ppcle:Linux:*:*)
+ echo powerpcle-unknown-linux-${LIBC}
+ exit ;;
+ s390:Linux:*:* | s390x:Linux:*:*)
+ echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
+ exit ;;
+ sh64*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ sh*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ sparc:Linux:*:* | sparc64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ tile*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ vax:Linux:*:*)
+ echo ${UNAME_MACHINE}-dec-linux-${LIBC}
+ exit ;;
+ x86_64:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ xtensa*:Linux:*:*)
+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ exit ;;
+ i*86:DYNIX/ptx:4*:*)
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+ # earlier versions are messed up and put the nodename in both
+ # sysname and nodename.
+ echo i386-sequent-sysv4
+ exit ;;
+ i*86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit ;;
+ i*86:OS/2:*:*)
+ # If we were able to find `uname', then EMX Unix compatibility
+ # is probably installed.
+ echo ${UNAME_MACHINE}-pc-os2-emx
+ exit ;;
+ i*86:XTS-300:*:STOP)
+ echo ${UNAME_MACHINE}-unknown-stop
+ exit ;;
+ i*86:atheos:*:*)
+ echo ${UNAME_MACHINE}-unknown-atheos
+ exit ;;
+ i*86:syllable:*:*)
+ echo ${UNAME_MACHINE}-pc-syllable
+ exit ;;
+ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ i*86:*DOS:*:*)
+ echo ${UNAME_MACHINE}-pc-msdosdjgpp
+ exit ;;
+ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+ fi
+ exit ;;
+ i*86:*:5:[678]*)
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ case `/bin/uname -X | grep "^Machine"` in
+ *486*) UNAME_MACHINE=i486 ;;
+ *Pentium) UNAME_MACHINE=i586 ;;
+ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+ esac
+ echo
${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ exit ;;
+ i*86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit ;;
+ pc:*:*:*)
+ # Left here for compatibility:
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
+ # Note: whatever this is, it MUST be the same as what config.sub
+ # prints for the "djgpp" host, or else GDB configury will decide that
+ # this is a cross-build.
+ echo i586-pc-msdosdjgpp
+ exit ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit ;;
+ mc68k:UNIX:SYSTEM5:3.51m)
+ echo m68k-convergent-sysv
+ exit ;;
+ M680?0:D-NIX:5.3:*)
+ echo m68k-diab-dnix
+ exit ;;
+ M68*:*:R3V[5678]*:*)
+ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 |
3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 |
SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
+ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+ OS_REL='.3'
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' <
/etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ rs6000:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+ echo powerpc-unknown-lynxos${UNAME_RELEASE}
+ exit ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <address@hidden>
+ echo i586-unisys-sysv4
+ exit ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <address@hidden>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit ;;
+ *:*:*:FTX*)
+ # From address@hidden
+ echo i860-stratus-sysv4
+ exit ;;
+ i*86:VOS:*:*)
+ # From address@hidden
+ echo ${UNAME_MACHINE}-stratus-vos
+ exit ;;
+ *:VOS:*:*)
+ # From address@hidden
+ echo hppa1.1-stratus-vos
+ exit ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit ;;
+ news*:NEWS-OS:6*:*)
+ echo mips-sony-newsos6
+ exit ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit ;;
+ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
+ echo i586-pc-haiku
+ exit ;;
+ x86_64:Haiku:*:*)
+ echo x86_64-unknown-haiku
+ exit ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-6:SUPER-UX:*:*)
+ echo sx6-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-7:SUPER-UX:*:*)
+ echo sx7-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8:SUPER-UX:*:*)
+ echo sx8-nec-superux${UNAME_RELEASE}
+ exit ;;
+ SX-8R:SUPER-UX:*:*)
+ echo sx8r-nec-superux${UNAME_RELEASE}
+ exit ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit ;;
+ *:Darwin:*:*)
+ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+ eval $set_cc_for_build
+ if test "$UNAME_PROCESSOR" = unknown ; then
+ UNAME_PROCESSOR=powerpc
+ fi
+ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ fi
+ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ exit ;;
+ *:procnto*:*:* | *:QNX:[0123456789]*:*)
+ UNAME_PROCESSOR=`uname -p`
+ if test "$UNAME_PROCESSOR" = "x86"; then
+ UNAME_PROCESSOR=i386
+ UNAME_MACHINE=pc
+ fi
+ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+ exit ;;
+ *:QNX:*:4*)
+ echo i386-pc-qnx
+ exit ;;
+ NEO-?:NONSTOP_KERNEL:*:*)
+ echo neo-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSE-*:NONSTOP_KERNEL:*:*)
+ echo nse-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ NSR-?:NONSTOP_KERNEL:*:*)
+ echo nsr-tandem-nsk${UNAME_RELEASE}
+ exit ;;
+ *:NonStop-UX:*:*)
+ echo mips-compaq-nonstopux
+ exit ;;
+ BS2000:POSIX*:*:*)
+ echo bs2000-siemens-sysv
+ exit ;;
+ DS/*:UNIX_System_V:*:*)
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+ exit ;;
+ *:Plan9:*:*)
+ # "uname -m" is not consistent, so use $cputype instead. 386
+ # is converted to i386 for consistency with other x86
+ # operating systems.
+ if test "$cputype" = "386"; then
+ UNAME_MACHINE=i386
+ else
+ UNAME_MACHINE="$cputype"
+ fi
+ echo ${UNAME_MACHINE}-unknown-plan9
+ exit ;;
+ *:TOPS-10:*:*)
+ echo pdp10-unknown-tops10
+ exit ;;
+ *:TENEX:*:*)
+ echo pdp10-unknown-tenex
+ exit ;;
+ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+ echo pdp10-dec-tops20
+ exit ;;
+ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+ echo pdp10-xkl-tops20
+ exit ;;
+ *:TOPS-20:*:*)
+ echo pdp10-unknown-tops20
+ exit ;;
+ *:ITS:*:*)
+ echo pdp10-unknown-its
+ exit ;;
+ SEI:*:*:SEIUX)
+ echo mips-sei-seiux${UNAME_RELEASE}
+ exit ;;
+ *:DragonFly:*:*)
+ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e
's/[-(].*//'`
+ exit ;;
+ *:*VMS:*:*)
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ case "${UNAME_MACHINE}" in
+ A*) echo alpha-dec-vms ; exit ;;
+ I*) echo ia64-dec-vms ; exit ;;
+ V*) echo vax-dec-vms ; exit ;;
+ esac ;;
+ *:XENIX:*:SysV)
+ echo i386-pc-xenix
+ exit ;;
+ i*86:skyos:*:*)
+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/
.*$//'
+ exit ;;
+ i*86:rdos:*:*)
+ echo ${UNAME_MACHINE}-pc-rdos
+ exit ;;
+ i*86:AROS:*:*)
+ echo ${UNAME_MACHINE}-pc-aros
+ exit ;;
+ x86_64:VMkernel:*:*)
+ echo ${UNAME_MACHINE}-unknown-esx
+ exit ;;
+esac
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix\n"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+# include <sys/param.h>
+# if defined (BSD)
+# if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+# else
+# if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# endif
+# else
+ printf ("vax-dec-bsd\n"); exit (0);
+# endif
+# else
+ printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit ;;
+ c34*)
+ echo c34-convex-bsd
+ exit ;;
+ c38*)
+ echo c38-convex-bsd
+ exit ;;
+ c4*)
+ echo c4-convex-bsd
+ exit ;;
+ esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+and
+
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <address@hidden> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo = `(hostinfo) 2>/dev/null`
+/bin/universe = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/build-aux/config.sub b/build-aux/config.sub
new file mode 100755
index 0000000..9633db7
--- /dev/null
+++ b/build-aux/config.sub
@@ -0,0 +1,1791 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+# Copyright 1992-2013 Free Software Foundation, Inc.
+
+timestamp='2013-08-10'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program. This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+
+
+# Please send patches with a ChangeLog entry to address@hidden
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+#
http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support. The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+ $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+ -h, --help print this help, then exit
+ -t, --time-stamp print date of last modification, then exit
+ -v, --version print version number, then exit
+
+Report bugs and patches to <address@hidden>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright 1992-2013 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+ case $1 in
+ --time-stamp | --time* | -t )
+ echo "$timestamp" ; exit ;;
+ --version | -v )
+ echo "$version" ; exit ;;
+ --help | --h* | -h )
+ echo "$usage"; exit ;;
+ -- ) # Stop option processing
+ shift; break ;;
+ - ) # Use stdin as input.
+ break ;;
+ -* )
+ echo "$me: invalid option $1$help"
+ exit 1 ;;
+
+ *local*)
+ # First pass through any local machine types.
+ echo $1
+ exit ;;
+
+ * )
+ break ;;
+ esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+ exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+ exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* |
kfreebsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | \
+ kopensolaris*-gnu* | \
+ storm-chaos* | os2-emx* | rtmk-nova*)
+ os=-$maybe_os
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+ ;;
+ android-linux)
+ os=-linux-android
+ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+ ;;
+ *)
+ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+ if [ $basic_machine != $1 ]
+ then os=`echo $1 | sed 's/.*-/-/'`
+ else os=; fi
+ ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work. We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+ -sun*os*)
+ # Prevent following clause from handling this invalid input.
+ ;;
+ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+ -apple | -axis | -knuth | -cray | -microblaze*)
+ os=
+ basic_machine=$1
+ ;;
+ -bluegene*)
+ os=-cnk
+ ;;
+ -sim | -cisco | -oki | -wec | -winbond)
+ os=
+ basic_machine=$1
+ ;;
+ -scout)
+ ;;
+ -wrs)
+ os=-vxworks
+ basic_machine=$1
+ ;;
+ -chorusos*)
+ os=-chorusos
+ basic_machine=$1
+ ;;
+ -chorusrdb)
+ os=-chorusrdb
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
+ -sco6)
+ os=-sco5v6
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5)
+ os=-sco3.2v5
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco4)
+ os=-sco3.2v4
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco5v6*)
+ # Don't forget version if it is 3.2v4 or newer.
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -udk*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*178)
+ os=-lynxos178
+ ;;
+ -lynx*5)
+ os=-lynxos5
+ ;;
+ -lynx*)
+ os=-lynxos
+ ;;
+ -ptx*)
+ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+ ;;
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
+ -psos*)
+ os=-psos
+ ;;
+ -mint | -mint[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+ 1750a | 580 \
+ | a29k \
+ | aarch64 | aarch64_be \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] |
alpha64pca5[67] \
+ | am33_2.0 \
+ | arc | arceb \
+ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
+ | avr | avr32 \
+ | be32 | be64 \
+ | bfin \
+ | c4x | c8051 | clipper \
+ | d10v | d30v | dlx | dsp16xx \
+ | epiphany \
+ | fido | fr30 | frv \
+ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
+ | i370 | i860 | i960 | ia64 \
+ | ip2k | iq2000 \
+ | le32 | le64 \
+ | lm32 \
+ | m32c | m32r | m32rle | m68000 | m68k | m88k \
+ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
+ | mips | mipsbe | mipseb | mipsel | mipsle \
+ | mips16 \
+ | mips64 | mips64el \
+ | mips64octeon | mips64octeonel \
+ | mips64orion | mips64orionel \
+ | mips64r5900 | mips64r5900el \
+ | mips64vr | mips64vrel \
+ | mips64vr4100 | mips64vr4100el \
+ | mips64vr4300 | mips64vr4300el \
+ | mips64vr5000 | mips64vr5000el \
+ | mips64vr5900 | mips64vr5900el \
+ | mipsisa32 | mipsisa32el \
+ | mipsisa32r2 | mipsisa32r2el \
+ | mipsisa64 | mipsisa64el \
+ | mipsisa64r2 | mipsisa64r2el \
+ | mipsisa64sb1 | mipsisa64sb1el \
+ | mipsisa64sr71k | mipsisa64sr71kel \
+ | mipsr5900 | mipsr5900el \
+ | mipstx39 | mipstx39el \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nios | nios2 | nios2eb | nios2el \
+ | ns16k | ns32k \
+ | open8 \
+ | or1k | or32 \
+ | pdp10 | pdp11 | pj | pjl \
+ | powerpc | powerpc64 | powerpc64le | powerpcle \
+ | pyramid \
+ | rl78 | rx \
+ | score \
+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb |
shbe | shle | sh[1234]le | sh3ele \
+ | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet |
sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
+ | spu \
+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | ubicom32 \
+ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
+ | we32k \
+ | x86 | xc16x | xstormy16 | xtensa \
+ | z8k | z80)
+ basic_machine=$basic_machine-unknown
+ ;;
+ c54x)
+ basic_machine=tic54x-unknown
+ ;;
+ c55x)
+ basic_machine=tic55x-unknown
+ ;;
+ c6x)
+ basic_machine=tic6x-unknown
+ ;;
+ m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+ ;;
+ ms1)
+ basic_machine=mt-unknown
+ ;;
+
+ strongarm | thumb | xscale)
+ basic_machine=arm-unknown
+ ;;
+ xgate)
+ basic_machine=$basic_machine-unknown
+ os=-none
+ ;;
+ xscaleeb)
+ basic_machine=armeb-unknown
+ ;;
+
+ xscaleel)
+ basic_machine=armel-unknown
+ ;;
+
+ # We use `pc' rather than `unknown'
+ # because (1) that's what they normally are, and
+ # (2) the word "unknown" tends to confuse beginning users.
+ i*86 | x86_64)
+ basic_machine=$basic_machine-pc
+ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\'
not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+ 580-* \
+ | a29k-* \
+ | aarch64-* | aarch64_be-* \
+ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
+ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
+ | avr-* | avr32-* \
+ | be32-* | be64-* \
+ | bfin-* | bs2000-* \
+ | c[123]* | c30-* | [cjt]90-* | c4x-* \
+ | c8051-* | clipper-* | craynv-* | cydra-* \
+ | d10v-* | d30v-* | dlx-* \
+ | elxsi-* \
+ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+ | h8300-* | h8500-* \
+ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+ | hexagon-* \
+ | i*86-* | i860-* | i960-* | ia64-* \
+ | ip2k-* | iq2000-* \
+ | le32-* | le64-* \
+ | lm32-* \
+ | m32c-* | m32r-* | m32rle-* \
+ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
+ | microblaze-* | microblazeel-* \
+ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ | mips16-* \
+ | mips64-* | mips64el-* \
+ | mips64octeon-* | mips64octeonel-* \
+ | mips64orion-* | mips64orionel-* \
+ | mips64r5900-* | mips64r5900el-* \
+ | mips64vr-* | mips64vrel-* \
+ | mips64vr4100-* | mips64vr4100el-* \
+ | mips64vr4300-* | mips64vr4300el-* \
+ | mips64vr5000-* | mips64vr5000el-* \
+ | mips64vr5900-* | mips64vr5900el-* \
+ | mipsisa32-* | mipsisa32el-* \
+ | mipsisa32r2-* | mipsisa32r2el-* \
+ | mipsisa64-* | mipsisa64el-* \
+ | mipsisa64r2-* | mipsisa64r2el-* \
+ | mipsisa64sb1-* | mipsisa64sb1el-* \
+ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
+ | mipsr5900-* | mipsr5900el-* \
+ | mipstx39-* | mipstx39el-* \
+ | mmix-* \
+ | mt-* \
+ | msp430-* \
+ | nds32-* | nds32le-* | nds32be-* \
+ | nios-* | nios2-* | nios2eb-* | nios2el-* \
+ | none-* | np1-* | ns16k-* | ns32k-* \
+ | open8-* \
+ | orion-* \
+ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
+ | pyramid-* \
+ | rl78-* | romp-* | rs6000-* | rx-* \
+ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-*
| sheb-* | shbe-* \
+ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* |
sparclet-* \
+ | sparclite-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | tahoe-* \
+ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+ | tile*-* \
+ | tron-* \
+ | ubicom32-* \
+ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
+ | vax-* \
+ | we32k-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* \
+ | xstormy16-* | xtensa*-* \
+ | ymp-* \
+ | z8k-* | z80-*)
+ ;;
+ # Recognize the basic CPU types without company name, with glob match.
+ xtensa*)
+ basic_machine=$basic_machine-unknown
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+ 386bsd)
+ basic_machine=i386-unknown
+ os=-bsd
+ ;;
+ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+ basic_machine=m68000-att
+ ;;
+ 3b*)
+ basic_machine=we32k-att
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ abacus)
+ basic_machine=abacus-unknown
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ os=-scout
+ ;;
+ alliant | fx80)
+ basic_machine=fx80-alliant
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ os=-bsd
+ ;;
+ amd64)
+ basic_machine=x86_64-pc
+ ;;
+ amd64-*)
+ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ os=-sysv
+ ;;
+ amiga | amiga-*)
+ basic_machine=m68k-unknown
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ os=-sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ os=-bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ os=-aros
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ os=-aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ os=-linux
+ ;;
+ blackfin-*)
+ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ bluegene*)
+ basic_machine=powerpc-ibm
+ os=-cnk
+ ;;
+ c54x-*)
+ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c55x-*)
+ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c6x-*)
+ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ c90)
+ basic_machine=c90-cray
+ os=-unicos
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ os=-cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ os=-bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ os=-bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ os=-bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ os=-bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ os=-bsd
+ ;;
+ cray | j90)
+ basic_machine=j90-cray
+ os=-unicos
+ ;;
+ craynv)
+ basic_machine=craynv-cray
+ os=-unicosmp
+ ;;
+ cr16 | cr16-*)
+ basic_machine=cr16-unknown
+ os=-elf
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+ crisv32 | crisv32-* | etraxfs*)
+ basic_machine=crisv32-axis
+ ;;
+ cris | cris-* | etrax*)
+ basic_machine=cris-axis
+ ;;
+ crx)
+ basic_machine=crx-unknown
+ os=-elf
+ ;;
+ da30 | da30-*)
+ basic_machine=m68k-da30
+ ;;
+ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 |
decstatn)
+ basic_machine=mips-dec
+ ;;
+ decsystem10* | dec10*)
+ basic_machine=pdp10-dec
+ os=-tops10
+ ;;
+ decsystem20* | dec20*)
+ basic_machine=pdp10-dec
+ os=-tops20
+ ;;
+ delta | 3300 | motorola-3300 | motorola-delta \
+ | 3300-motorola | delta-motorola)
+ basic_machine=m68k-motorola
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ os=-sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ os=-dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ os=-msdosdjgpp
+ ;;
+ dpx20 | dpx20-*)
+ basic_machine=rs6000-bull
+ os=-bosx
+ ;;
+ dpx2* | dpx2*-bull)
+ basic_machine=m68k-bull
+ os=-sysv3
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ os=-ebmon
+ ;;
+ elxsi)
+ basic_machine=elxsi-elxsi
+ os=-bsd
+ ;;
+ encore | umax | mmax)
+ basic_machine=ns32k-encore
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ os=-ose
+ ;;
+ fx2800)
+ basic_machine=i860-alliant
+ ;;
+ genix)
+ basic_machine=ns32k-ns
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ os=-sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ os=-go32
+ ;;
+ h3050r* | hiux*)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ os=-hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ os=-xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ os=-hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ os=-sysv3
+ ;;
+ hp300-*)
+ basic_machine=m68k-hp
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ os=-bsd
+ ;;
+ hp300hpux)
+ basic_machine=m68k-hp
+ os=-hpux
+ ;;
+ hp3k9[0-9][0-9] | hp9[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k2[0-9][0-9] | hp9k31[0-9])
+ basic_machine=m68000-hp
+ ;;
+ hp9k3[2-9][0-9])
+ basic_machine=m68k-hp
+ ;;
+ hp9k6[0-9][0-9] | hp6[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hp9k7[0-79][0-9] | hp7[0-79][0-9])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k78[0-9] | hp78[0-9])
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 |
hp9k893 | hp893)
+ # FIXME: really hppa2.0-hp
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][13679] | hp8[0-9][13679])
+ basic_machine=hppa1.1-hp
+ ;;
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
+ hppa-next)
+ os=-nextstep3
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ os=-osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ os=-proelf
+ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ ;;
+ i*86v32)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+ i*86v4*)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+ i*86v)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+ i*86sol2)
+ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ os=-mach
+ ;;
+ i386-vsta | vsta)
+ basic_machine=i386-unknown
+ os=-vsta
+ ;;
+ iris | iris4d)
+ basic_machine=mips-sgi
+ case $os in
+ -irix*)
+ ;;
+ *)
+ os=-irix4
+ ;;
+ esac
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ os=-sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ os=-linux
+ ;;
+ m68knommu-*)
+ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ m88k-omron*)
+ basic_machine=m88k-omron
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ os=-sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ os=-sysv
+ ;;
+ microblaze*)
+ basic_machine=microblaze-xilinx
+ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ os=-mingw64
+ ;;
+ mingw32)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ os=-mingw32ce
+ ;;
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
+ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ basic_machine=m68k-atari
+ os=-mint
+ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+ mips3*)
+ basic_machine=`echo $basic_machine | sed -e
's/mips3/mips64/'`-unknown
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ os=-morphos
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ os=-msdos
+ ;;
+ ms1-*)
+ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ ;;
+ msys)
+ basic_machine=i686-pc
+ os=-msys
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ nacl)
+ basic_machine=le32-unknown
+ os=-nacl
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ os=-sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-unknown
+ os=-netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ os=-linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ os=-newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ os=-newsos
+ ;;
+ news-3600 | risc-news)
+ basic_machine=mips-sony
+ os=-newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ os=-sysv
+ ;;
+ next | m*-next )
+ basic_machine=m68k-next
+ case $os in
+ -nextstep* )
+ ;;
+ -ns2*)
+ os=-nextstep2
+ ;;
+ *)
+ os=-nextstep3
+ ;;
+ esac
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ os=-cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ os=-cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ os=-nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ os=-mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ os=-nonstopux
+ ;;
+ np1)
+ basic_machine=np1-gould
+ ;;
+ neo-tandem)
+ basic_machine=neo-tandem
+ ;;
+ nse-tandem)
+ basic_machine=nse-tandem
+ ;;
+ nsr-tandem)
+ basic_machine=nsr-tandem
+ ;;
+ op50n-* | op60c-*)
+ basic_machine=hppa1.1-oki
+ os=-proelf
+ ;;
+ openrisc | openrisc-*)
+ basic_machine=or32-unknown
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ os=-os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ os=-ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ os=-os68k
+ ;;
+ pa-hitachi)
+ basic_machine=hppa1.1-hitachi
+ os=-hiuxwe2
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ os=-osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ os=-linux
+ ;;
+ parisc-*)
+ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+ os=-linux
+ ;;
+ pbd)
+ basic_machine=sparc-tti
+ ;;
+ pbb)
+ basic_machine=m68k-tti
+ ;;
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+ pc98)
+ basic_machine=i386-pc
+ ;;
+ pc98-*)
+ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium | p5 | k5 | k6 | nexgen | viac3)
+ basic_machine=i586-pc
+ ;;
+ pentiumpro | p6 | 6x86 | athlon | athlon_*)
+ basic_machine=i686-pc
+ ;;
+ pentiumii | pentium2 | pentiumiii | pentium3)
+ basic_machine=i686-pc
+ ;;
+ pentium4)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumpro-* | p6-* | 6x86-* | athlon-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pentium4-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+ ;;
+ power) basic_machine=power-ibm
+ ;;
+ ppc | ppcbe) basic_machine=powerpc-unknown
+ ;;
+ ppc-* | ppcbe-*)
+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ ppcle | powerpclittle | ppc-le | powerpc-little)
+ basic_machine=powerpcle-unknown
+ ;;
+ ppcle-* | powerpclittle-*)
+ basic_machine=powerpcle-`echo $basic_machine | sed
's/^[^-]*-//'`
+ ;;
+ ppc64) basic_machine=powerpc64-unknown
+ ;;
+ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed
's/^[^-]*-//'`
+ ;;
+ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+ basic_machine=powerpc64le-unknown
+ ;;
+ ppc64le-* | powerpc64little-*)
+ basic_machine=powerpc64le-`echo $basic_machine | sed
's/^[^-]*-//'`
+ ;;
+ ps2)
+ basic_machine=i386-ibm
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ os=-pw32
+ ;;
+ rdos | rdos64)
+ basic_machine=x86_64-pc
+ os=-rdos
+ ;;
+ rdos32)
+ basic_machine=i386-pc
+ os=-rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ os=-coff
+ ;;
+ rm[46]00)
+ basic_machine=mips-siemens
+ ;;
+ rtpc | rtpc-*)
+ basic_machine=romp-ibm
+ ;;
+ s390 | s390-*)
+ basic_machine=s390-ibm
+ ;;
+ s390x | s390x-*)
+ basic_machine=s390x-ibm
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ sb1)
+ basic_machine=mipsisa64sb1-unknown
+ ;;
+ sb1el)
+ basic_machine=mipsisa64sb1el-unknown
+ ;;
+ sde)
+ basic_machine=mipsisa32-sde
+ os=-elf
+ ;;
+ sei)
+ basic_machine=mips-sei
+ os=-seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ ;;
+ sh)
+ basic_machine=sh-hitachi
+ os=-hms
+ ;;
+ sh5el)
+ basic_machine=sh5le-unknown
+ ;;
+ sh64)
+ basic_machine=sh64-unknown
+ ;;
+ sparclite-wrs | simso-wrs)
+ basic_machine=sparclite-wrs
+ os=-vxworks
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ os=-sysv2
+ ;;
+ spur)
+ basic_machine=spur-unknown
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ os=-sysv4
+ ;;
+ strongarm-* | thumb-*)
+ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ os=-sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ os=-sunos4
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ os=-sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ os=-sunos4
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ os=-sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ os=-sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ os=-solaris2
+ ;;
+ sun3 | sun3-*)
+ basic_machine=m68k-sun
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ os=-unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ os=-unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ os=-unicos
+ ;;
+ tile*)
+ basic_machine=$basic_machine-unknown
+ os=-linux-gnu
+ ;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ os=-tops20
+ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ os=-tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ os=-udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ os=-sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ os=-none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ os=-sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ os=-vms
+ ;;
+ vpp*|vx|vx-*)
+ basic_machine=f301-fujitsu
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ os=-vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ os=-vxworks
+ ;;
+ w65*)
+ basic_machine=w65-wdc
+ os=-none
+ ;;
+ w89k-*)
+ basic_machine=hppa1.1-winbond
+ os=-proelf
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ os=-mingw32
+ ;;
+ xps | xps100)
+ basic_machine=xps100-honeywell
+ ;;
+ xscale-* | xscalee[bl]-*)
+ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ os=-unicos
+ ;;
+ z8k-*-coff)
+ basic_machine=z8k-unknown
+ os=-sim
+ ;;
+ z80-*-coff)
+ basic_machine=z80-unknown
+ os=-sim
+ ;;
+ none)
+ basic_machine=none-none
+ os=-none
+ ;;
+
+# Here we handle the default manufacturer of certain CPU types. It is in
+# some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ basic_machine=hppa1.1-winbond
+ ;;
+ op50n)
+ basic_machine=hppa1.1-oki
+ ;;
+ op60c)
+ basic_machine=hppa1.1-oki
+ ;;
+ romp)
+ basic_machine=romp-ibm
+ ;;
+ mmix)
+ basic_machine=mmix-knuth
+ ;;
+ rs6000)
+ basic_machine=rs6000-ibm
+ ;;
+ vax)
+ basic_machine=vax-dec
+ ;;
+ pdp10)
+ # there are many clones, so DEC is not a safe bet
+ basic_machine=pdp10-unknown
+ ;;
+ pdp11)
+ basic_machine=pdp11-dec
+ ;;
+ we32k)
+ basic_machine=we32k-att
+ ;;
+ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
+ basic_machine=sh-unknown
+ ;;
+ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
+ basic_machine=sparc-sun
+ ;;
+ cydra)
+ basic_machine=cydra-cydrome
+ ;;
+ orion)
+ basic_machine=orion-highlevel
+ ;;
+ orion105)
+ basic_machine=clipper-highlevel
+ ;;
+ mac | mpw | mac-mpw)
+ basic_machine=m68k-apple
+ ;;
+ pmac | pmac-mpw)
+ basic_machine=powerpc-apple
+ ;;
+ *-unknown)
+ # Make sure to match an already-canonicalized machine name.
+ ;;
+ *)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\'
not recognized 1>&2
+ exit 1
+ ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+ *-digital*)
+ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+ ;;
+ *-commodore*)
+ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+ ;;
+ *)
+ ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+ # First match some system type aliases
+ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -auroraux)
+ os=-auroraux
+ ;;
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ ;;
+ -solaris)
+ os=-solaris2
+ ;;
+ -svr4*)
+ os=-sysv4
+ ;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
+ -gnu/linux*)
+ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos |
-sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* |
-solaris* \
+ | -sym* | -kopensolaris* | -plan9* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* | -aros* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+ | -bitrig* | -openbsd* | -solidbsd* \
+ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+ | -chorusos* | -chorusrdb* | -cegcc* \
+ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems*
\
+ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-musl* | -linux-uclibc* \
+ | -uxpv* | -beos* | -mpeix* | -udk* \
+ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
+ -qnx*)
+ case $basic_machine in
+ x86-* | i*86-*)
+ ;;
+ *)
+ os=-nto$os
+ ;;
+ esac
+ ;;
+ -nto-qnx*)
+ ;;
+ -nto*)
+ os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ ;;
+ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku*
\
+ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ ;;
+ -mac*)
+ os=`echo $os | sed -e 's|mac|macos|'`
+ ;;
+ -linux-dietlibc)
+ os=-linux-dietlibc
+ ;;
+ -linux*)
+ os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+ -sunos6*)
+ os=`echo $os | sed -e 's|sunos6|solaris3|'`
+ ;;
+ -opened*)
+ os=-openedition
+ ;;
+ -os400*)
+ os=-os400
+ ;;
+ -wince*)
+ os=-wince
+ ;;
+ -osfrose*)
+ os=-osfrose
+ ;;
+ -osf*)
+ os=-osf
+ ;;
+ -utek*)
+ os=-bsd
+ ;;
+ -dynix*)
+ os=-bsd
+ ;;
+ -acis*)
+ os=-aos
+ ;;
+ -atheos*)
+ os=-atheos
+ ;;
+ -syllable*)
+ os=-syllable
+ ;;
+ -386bsd)
+ os=-bsd
+ ;;
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
+ -nova*)
+ os=-rtmk-nova
+ ;;
+ -ns2 )
+ os=-nextstep2
+ ;;
+ -nsk*)
+ os=-nsk
+ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+ ;;
+ -sinix*)
+ os=-sysv4
+ ;;
+ -tpf*)
+ os=-tpf
+ ;;
+ -triton*)
+ os=-sysv3
+ ;;
+ -oss*)
+ os=-sysv3
+ ;;
+ -svr4)
+ os=-sysv4
+ ;;
+ -svr3)
+ os=-sysv3
+ ;;
+ -sysvr4)
+ os=-sysv4
+ ;;
+ # This must come after -sysvr4.
+ -sysv*)
+ ;;
+ -ose*)
+ os=-ose
+ ;;
+ -es1800*)
+ os=-ose
+ ;;
+ -xenix)
+ os=-xenix
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ os=-mint
+ ;;
+ -aros*)
+ os=-aros
+ ;;
+ -zvmoe)
+ os=-zvmoe
+ ;;
+ -dicos*)
+ os=-dicos
+ ;;
+ -nacl*)
+ ;;
+ -none)
+ ;;
+ *)
+ # Get rid of the `-' at the beginning of $os.
+ os=`echo $os | sed 's/[^-]*-//'`
+ echo Invalid configuration \`$1\': system \`$os\' not
recognized 1>&2
+ exit 1
+ ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system. Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+ score-*)
+ os=-elf
+ ;;
+ spu-*)
+ os=-elf
+ ;;
+ *-acorn)
+ os=-riscix1.2
+ ;;
+ arm*-rebel)
+ os=-linux
+ ;;
+ arm*-semi)
+ os=-aout
+ ;;
+ c4x-* | tic4x-*)
+ os=-coff
+ ;;
+ c8051-*)
+ os=-elf
+ ;;
+ hexagon-*)
+ os=-elf
+ ;;
+ tic54x-*)
+ os=-coff
+ ;;
+ tic55x-*)
+ os=-coff
+ ;;
+ tic6x-*)
+ os=-coff
+ ;;
+ # This must come before the *-dec entry.
+ pdp10-*)
+ os=-tops20
+ ;;
+ pdp11-*)
+ os=-none
+ ;;
+ *-dec | vax-*)
+ os=-ultrix4.2
+ ;;
+ m68*-apollo)
+ os=-domain
+ ;;
+ i386-sun)
+ os=-sunos4.0.2
+ ;;
+ m68000-sun)
+ os=-sunos3
+ ;;
+ m68*-cisco)
+ os=-aout
+ ;;
+ mep-*)
+ os=-elf
+ ;;
+ mips*-cisco)
+ os=-elf
+ ;;
+ mips*-*)
+ os=-elf
+ ;;
+ or1k-*)
+ os=-elf
+ ;;
+ or32-*)
+ os=-coff
+ ;;
+ *-tti) # must be before sparc entry or we get the wrong os.
+ os=-sysv3
+ ;;
+ sparc-* | *-sun)
+ os=-sunos4.1.1
+ ;;
+ *-be)
+ os=-beos
+ ;;
+ *-haiku)
+ os=-haiku
+ ;;
+ *-ibm)
+ os=-aix
+ ;;
+ *-knuth)
+ os=-mmixware
+ ;;
+ *-wec)
+ os=-proelf
+ ;;
+ *-winbond)
+ os=-proelf
+ ;;
+ *-oki)
+ os=-proelf
+ ;;
+ *-hp)
+ os=-hpux
+ ;;
+ *-hitachi)
+ os=-hiux
+ ;;
+ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+ os=-sysv
+ ;;
+ *-cbm)
+ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+ ;;
+ *-dolphin)
+ os=-sysv3
+ ;;
+ m68k-ccur)
+ os=-rtu
+ ;;
+ m88k-omron*)
+ os=-luna
+ ;;
+ *-next )
+ os=-nextstep
+ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+ *-crds)
+ os=-unos
+ ;;
+ *-ns)
+ os=-genix
+ ;;
+ i370-*)
+ os=-mvs
+ ;;
+ *-next)
+ os=-nextstep3
+ ;;
+ *-gould)
+ os=-sysv
+ ;;
+ *-highlevel)
+ os=-bsd
+ ;;
+ *-encore)
+ os=-bsd
+ ;;
+ *-sgi)
+ os=-irix
+ ;;
+ *-siemens)
+ os=-sysv4
+ ;;
+ *-masscomp)
+ os=-rtu
+ ;;
+ f30[01]-fujitsu | f700-fujitsu)
+ os=-uxpv
+ ;;
+ *-rom68k)
+ os=-coff
+ ;;
+ *-*bug)
+ os=-coff
+ ;;
+ *-apple)
+ os=-macos
+ ;;
+ *-atari*)
+ os=-mint
+ ;;
+ *)
+ os=-none
+ ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer. We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+ *-unknown)
+ case $os in
+ -riscix*)
+ vendor=acorn
+ ;;
+ -sunos*)
+ vendor=sun
+ ;;
+ -cnk*|-aix*)
+ vendor=ibm
+ ;;
+ -beos*)
+ vendor=be
+ ;;
+ -hpux*)
+ vendor=hp
+ ;;
+ -mpeix*)
+ vendor=hp
+ ;;
+ -hiux*)
+ vendor=hitachi
+ ;;
+ -unos*)
+ vendor=crds
+ ;;
+ -dgux*)
+ vendor=dg
+ ;;
+ -luna*)
+ vendor=omron
+ ;;
+ -genix*)
+ vendor=ns
+ ;;
+ -mvs* | -opened*)
+ vendor=ibm
+ ;;
+ -os400*)
+ vendor=ibm
+ ;;
+ -ptx*)
+ vendor=sequent
+ ;;
+ -tpf*)
+ vendor=ibm
+ ;;
+ -vxsim* | -vxworks* | -windiss*)
+ vendor=wrs
+ ;;
+ -aux*)
+ vendor=apple
+ ;;
+ -hms*)
+ vendor=hitachi
+ ;;
+ -mpw* | -macos*)
+ vendor=apple
+ ;;
+ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ vendor=atari
+ ;;
+ -vos*)
+ vendor=stratus
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+ ;;
+esac
+
+echo $basic_machine$os
+exit
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/build-aux/depcomp b/build-aux/depcomp
new file mode 100755
index 0000000..4ebd5b3
--- /dev/null
+++ b/build-aux/depcomp
@@ -0,0 +1,791 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2013-05-30.07; # UTC
+
+# Copyright (C) 1999-2013 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <address@hidden>.
+
+case $1 in
+ '')
+ echo "$0: No command. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+ depmode Dependency tracking mode.
+ source Source file read by 'PROGRAMS ARGS'.
+ object Object file output by 'PROGRAMS ARGS'.
+ DEPDIR directory where to store dependencies.
+ depfile Dependency file to output.
+ tmpdepfile Temporary file to use when outputting dependencies.
+ libtool Whether libtool is used (yes/no).
+
+Report bugs to <address@hidden>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "depcomp $scriptversion"
+ exit $?
+ ;;
+esac
+
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'. Note that this directory component will
+# be either empty or ending with a '/' character. This is deliberate.
+set_dir_from ()
+{
+ case $1 in
+ */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+ *) dir=;;
+ esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+ base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+ echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+ # If the compiler actually managed to produce a dependency file,
+ # post-process it.
+ if test -f "$tmpdepfile"; then
+ # Each line is of the form 'foo.o: dependency.h'.
+ # Do two passes, one to just change these to
+ # $object: dependency.h
+ # and one to simply output
+ # dependency.h:
+ # which is needed to avoid the deleted-header problem.
+ { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+ sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+ } > "$depfile"
+ rm -f "$tmpdepfile"
+ else
+ make_dummy_depfile
+ fi
+}
+
+# A tabulation character.
+tab=' '
+# A newline character.
+nl='
+'
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+digits=0123456789
+alpha=${upper}${lower}
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+ echo "depcomp: Variables source, object and depmode must be set" 1>&2
+ exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
+# Some modes work just like other modes, but use different flags. We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write. Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+ # HP compiler uses -M and no extra arg.
+ gccflag=-M
+ depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+ # This is just like dashmstdout with a different argument.
+ dashmflag=-xM
+ depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+ # This is just like msvisualcpp but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+ # This is just like msvc7 but w/o cygpath translation.
+ # Just convert the backslash-escaped backslashes to single forward
+ # slashes to satisfy depend.m4
+ cygpath_u='sed s,\\\\,/,g'
+ depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+ # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+ gccflag=-qmakedep=gcc,-MF
+ depmode=gcc
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want. Yay! Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff. Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am. Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+ for arg
+ do
+ case $arg in
+ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+ *) set fnord "$@" "$arg" ;;
+ esac
+ shift # fnord
+ shift # $arg
+ done
+ "$@"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ mv "$tmpdepfile" "$depfile"
+ ;;
+
+gcc)
+## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
+## There are various ways to get dependency output from gcc. Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+## up in a subdir. Having to rename by hand is ugly.
+## (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+## -MM, not -M (despite what the docs say). Also, it might not be
+## supported by the other compilers which use the 'gcc' depmode.
+## - Using -M directly means running the compiler twice (even worse
+## than renaming).
+ if test -z "$gccflag"; then
+ gccflag=-MD,
+ fi
+ "$@" -Wp,"$gccflag$tmpdepfile"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The second -e expression handles DOS-style file names with drive
+ # letters.
+ sed -e 's/^[^:]*: / /' \
+ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the "deleted header file" problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header). We avoid this by adding
+## dummy dependencies for each header file. Too bad gcc doesn't do
+## this for us directly.
+## Some versions of gcc put a space before the ':'. On the theory
+## that the space means something, we add a space to the output as
+## well. hp depmode also adds that space, but also prefixes the VPATH
+## to the object. Take care to not repeat it in the output.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly. Breaking it into two sed invocations is a workaround.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+sgi)
+ if test "$libtool" = yes; then
+ "$@" "-Wp,-MDupdate,$tmpdepfile"
+ else
+ "$@" -MDupdate "$tmpdepfile"
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+
+ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
+ echo "$object : \\" > "$depfile"
+ # Clip off the initial element (the dependent). Don't try to be
+ # clever and replace this with sed code, as IRIX sed won't handle
+ # lines with more than a fixed number of characters (4096 in
+ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
+ # the IRIX cc adds comments like '#:fec' to the end of the
+ # dependency line.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+ | tr "$nl" ' ' >> "$depfile"
+ echo >> "$depfile"
+ # The second pass generates a dummy entry for each header file.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+ >> "$depfile"
+ else
+ make_dummy_depfile
+ fi
+ rm -f "$tmpdepfile"
+ ;;
+
+xlc)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+aix)
+ # The C for AIX Compiler uses -M and outputs the dependencies
+ # in a .u file. In older versions, this file always lives in the
+ # current directory. Also, the AIX compiler puts '$object:' at the
+ # start of each line; $object doesn't have directory information.
+ # Version 6 uses the directory in both cases.
+ set_dir_from "$object"
+ set_base_from "$object"
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$base.u
+ tmpdepfile3=$dir.libs/$base.u
+ "$@" -Wc,-M
+ else
+ tmpdepfile1=$dir$base.u
+ tmpdepfile2=$dir$base.u
+ tmpdepfile3=$dir$base.u
+ "$@" -M
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ aix_post_process_depfile
+ ;;
+
+tcc)
+ # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+ # FIXME: That version still under development at the moment of writing.
+ # Make that this statement remains true also for stable, released
+ # versions.
+ # It will wrap lines (doesn't matter whether long or short) with a
+ # trailing '\', as in:
+ #
+ # foo.o : \
+ # foo.c \
+ # foo.h \
+ #
+ # It will put a trailing '\' even on the last line, and will use leading
+ # spaces rather than leading tabs (at least since its commit 0394caf7
+ # "Emit spaces for -MD").
+ "$@" -MD -MF "$tmpdepfile"
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+ # We have to change lines of the first kind to '$object: \'.
+ sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+ # And for each line of the second kind, we have to emit a 'dep.h:'
+ # dummy dependency, to avoid the deleted-header problem.
+ sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file. A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+ # Portland's C compiler understands '-MD'.
+ # Will always output deps to 'file.d' where file is the root name of the
+ # source file under compilation, even if file resides in a subdirectory.
+ # The object file name does not affect the name of the '.d' file.
+ # pgcc 10.2 will output
+ # foo.o: sub/foo.c sub/foo.h
+ # and will wrap long lines using '\' :
+ # foo.o: sub/foo.c ... \
+ # sub/foo.h ... \
+ # ...
+ set_dir_from "$object"
+ # Use the source, not the object, to determine the base name, since
+ # that's sadly what pgcc will do too.
+ set_base_from "$source"
+ tmpdepfile=$base.d
+
+ # For projects that build the same source file twice into different object
+ # files, the pgcc approach of using the *source* file root name can cause
+ # problems in parallel builds. Use a locking strategy to avoid stomping on
+ # the same $tmpdepfile.
+ lockdir=$base.d-lock
+ trap "
+ echo '$0: caught signal, cleaning up...' >&2
+ rmdir '$lockdir'
+ exit 1
+ " 1 2 13 15
+ numtries=100
+ i=$numtries
+ while test $i -gt 0; do
+ # mkdir is a portable test-and-set.
+ if mkdir "$lockdir" 2>/dev/null; then
+ # This process acquired the lock.
+ "$@" -MD
+ stat=$?
+ # Release the lock.
+ rmdir "$lockdir"
+ break
+ else
+ # If the lock is being held by a different process, wait
+ # until the winning process is done or we timeout.
+ while test -d "$lockdir" && test $i -gt 0; do
+ sleep 1
+ i=`expr $i - 1`
+ done
+ fi
+ i=`expr $i - 1`
+ done
+ trap - 1 2 13 15
+ if test $i -le 0; then
+ echo "$0: failed to acquire lock after $numtries attempts" >&2
+ echo "$0: check lockdir '$lockdir'" >&2
+ exit 1
+ fi
+
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ # Each line is of the form `foo.o: dependent.h',
+ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+ # Do two passes, one to just change these to
+ # `$object: dependent.h' and one to simply `dependent.h:'.
+ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+hp2)
+ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+ # compilers, which have integrated preprocessors. The correct option
+ # to use with these is +Maked; it writes dependencies to a file named
+ # 'foo.d', which lands next to the object file, wherever that
+ # happens to be.
+ # Much of this is similar to the tru64 case; see comments there.
+ set_dir_from "$object"
+ set_base_from "$object"
+ if test "$libtool" = yes; then
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir.libs/$base.d
+ "$@" -Wc,+Maked
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ "$@" +Maked
+ fi
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ if test -f "$tmpdepfile"; then
+ sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
+ # Add 'dependent.h:' lines.
+ sed -ne '2,${
+ s/^ *//
+ s/ \\*$//
+ s/$/:/
+ p
+ }' "$tmpdepfile" >> "$depfile"
+ else
+ make_dummy_depfile
+ fi
+ rm -f "$tmpdepfile" "$tmpdepfile2"
+ ;;
+
+tru64)
+ # The Tru64 compiler uses -MD to generate dependencies as a side
+ # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+ # dependencies in 'foo.d' instead, so we check for that too.
+ # Subdirectories are respected.
+ set_dir_from "$object"
+ set_base_from "$object"
+
+ if test "$libtool" = yes; then
+ # Libtool generates 2 separate objects for the 2 libraries. These
+ # two compilations output dependencies in $dir.libs/$base.o.d and
+ # in $dir$base.o.d. We have to check for both files, because
+ # one of the two compilations can be disabled. We should prefer
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+ # automatically cleaned when .libs/ is deleted, while ignoring
+ # the former would cause a distcleancheck panic.
+ tmpdepfile1=$dir$base.o.d # libtool 1.5
+ tmpdepfile2=$dir.libs/$base.o.d # Likewise.
+ tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504
+ "$@" -Wc,-MD
+ else
+ tmpdepfile1=$dir$base.d
+ tmpdepfile2=$dir$base.d
+ tmpdepfile3=$dir$base.d
+ "$@" -MD
+ fi
+
+ stat=$?
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ exit $stat
+ fi
+
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ do
+ test -f "$tmpdepfile" && break
+ done
+ # Same post-processing that is required for AIX mode.
+ aix_post_process_depfile
+ ;;
+
+msvc7)
+ if test "$libtool" = yes; then
+ showIncludes=-Wc,-showIncludes
+ else
+ showIncludes=-showIncludes
+ fi
+ "$@" $showIncludes > "$tmpdepfile"
+ stat=$?
+ grep -v '^Note: including file: ' "$tmpdepfile"
+ if test $stat -ne 0; then
+ rm -f "$tmpdepfile"
+ exit $stat
+ fi
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ # The first sed program below extracts the file names and escapes
+ # backslashes for cygpath. The second sed program outputs the file
+ # name when reading, but also accumulates all include files in the
+ # hold buffer in order to output them again at the end. This only
+ # works with sed implementations that can handle large buffers.
+ sed < "$tmpdepfile" -n '
+/^Note: including file: *\(.*\)/ {
+ s//\1/
+ s/\\/\\\\/g
+ p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+ s/.*/'"$tab"'/
+ G
+ p
+}' >> "$depfile"
+ echo >> "$depfile" # make sure the fragment doesn't end with a backslash
+ rm -f "$tmpdepfile"
+ ;;
+
+msvc7msys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+#nosideeffect)
+ # This comment above is used by automake to tell side-effect
+ # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout, regardless of -o.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ test -z "$dashmflag" && dashmflag=-M
+ # Require at least two characters before searching for ':'
+ # in the target name. This is to cope with DOS-style filenames:
+ # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
+ "$@" $dashmflag |
+ sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
+ rm -f "$depfile"
+ cat < "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process this sed invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ tr ' ' "$nl" < "$tmpdepfile" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+dashXmstdout)
+ # This case only exists to satisfy depend.m4. It is never actually
+ # run, as this mode is specially recognized in the preamble.
+ exit 1
+ ;;
+
+makedepend)
+ "$@" || exit $?
+ # Remove any Libtool call
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+ # X makedepend
+ shift
+ cleared=no eat=no
+ for arg
+ do
+ case $cleared in
+ no)
+ set ""; shift
+ cleared=yes ;;
+ esac
+ if test $eat = yes; then
+ eat=no
+ continue
+ fi
+ case "$arg" in
+ -D*|-I*)
+ set fnord "$@" "$arg"; shift ;;
+ # Strip any option that makedepend may not understand. Remove
+ # the object too, otherwise makedepend will parse it as a source file.
+ -arch)
+ eat=yes ;;
+ -*|$object)
+ ;;
+ *)
+ set fnord "$@" "$arg"; shift ;;
+ esac
+ done
+ obj_suffix=`echo "$object" | sed 's/^.*\././'`
+ touch "$tmpdepfile"
+ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+ rm -f "$depfile"
+ # makedepend may prepend the VPATH from the source file name to the object.
+ # No need to regex-escape $object, excess matching of '.' is harmless.
+ sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+ # Some versions of the HPUX 10.20 sed can't process the last invocation
+ # correctly. Breaking it into two sed invocations is a workaround.
+ sed '1,2d' "$tmpdepfile" \
+ | tr ' ' "$nl" \
+ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+ | sed -e 's/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile" "$tmpdepfile".bak
+ ;;
+
+cpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ # Remove '-o $object'.
+ IFS=" "
+ for arg
+ do
+ case $arg in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift # fnord
+ shift # $arg
+ ;;
+ esac
+ done
+
+ "$@" -E \
+ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ | sed '$ s: \\$::' > "$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ cat < "$tmpdepfile" >> "$depfile"
+ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvisualcpp)
+ # Important note: in order to support this mode, a compiler *must*
+ # always write the preprocessed file to stdout.
+ "$@" || exit $?
+
+ # Remove the call to Libtool.
+ if test "$libtool" = yes; then
+ while test "X$1" != 'X--mode=compile'; do
+ shift
+ done
+ shift
+ fi
+
+ IFS=" "
+ for arg
+ do
+ case "$arg" in
+ -o)
+ shift
+ ;;
+ $object)
+ shift
+ ;;
+ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+ set fnord "$@"
+ shift
+ shift
+ ;;
+ *)
+ set fnord "$@" "$arg"
+ shift
+ shift
+ ;;
+ esac
+ done
+ "$@" -E 2>/dev/null |
+ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u >
"$tmpdepfile"
+ rm -f "$depfile"
+ echo "$object : \\" > "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >>
"$depfile"
+ echo "$tab" >> "$depfile"
+ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+ rm -f "$tmpdepfile"
+ ;;
+
+msvcmsys)
+ # This case exists only to let depend.m4 do its work. It works by
+ # looking at the text of this script. This case will never be run,
+ # since it is checked for above.
+ exit 1
+ ;;
+
+none)
+ exec "$@"
+ ;;
+
+*)
+ echo "Unknown depmode $depmode" 1>&2
+ exit 1
+ ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/install-sh b/build-aux/install-sh
new file mode 100755
index 0000000..377bb86
--- /dev/null
+++ b/build-aux/install-sh
@@ -0,0 +1,527 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2011-11-20.07; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+nl='
+'
+IFS=" "" $nl"
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit=${DOITPROG-}
+if test -z "$doit"; then
+ doit_exec=exec
+else
+ doit_exec=$doit
+fi
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_glob='?'
+initialize_posix_glob='
+ test "$posix_glob" != "?" || {
+ if (set -f) 2>/dev/null; then
+ posix_glob=
+ else
+ posix_glob=:
+ fi
+ }
+'
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+no_target_directory=
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+ or: $0 [OPTION]... SRCFILES... DIRECTORY
+ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+ or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+ --help display this help and exit.
+ --version display version info and exit.
+
+ -c (ignored)
+ -C install only if different (preserve the last data modification
time)
+ -d create directories instead of installing files.
+ -g GROUP $chgrpprog installed files to GROUP.
+ -m MODE $chmodprog installed files to MODE.
+ -o USER $chownprog installed files to USER.
+ -s $stripprog installed files.
+ -t DIRECTORY install into DIRECTORY.
+ -T report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+ RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+ case $1 in
+ -c) ;;
+
+ -C) copy_on_change=true;;
+
+ -d) dir_arg=true;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift;;
+
+ --help) echo "$usage"; exit $?;;
+
+ -m) mode=$2
+ case $mode in
+ *' '* | *' '* | *'
+'* | *'*'* | *'?'* | *'['*)
+ echo "$0: invalid mode: $mode" >&2
+ exit 1;;
+ esac
+ shift;;
+
+ -o) chowncmd="$chownprog $2"
+ shift;;
+
+ -s) stripcmd=$stripprog;;
+
+ -t) dst_arg=$2
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ shift;;
+
+ -T) no_target_directory=true;;
+
+ --version) echo "$0 $scriptversion"; exit $?;;
+
+ --) shift
+ break;;
+
+ -*) echo "$0: invalid option: $1" >&2
+ exit 1;;
+
+ *) break;;
+ esac
+ shift
+done
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+ # When -d is used, all remaining arguments are directories to create.
+ # When -t is used, the destination is already specified.
+ # Otherwise, the last argument is the destination. Remove it from
address@hidden
+ for arg
+ do
+ if test -n "$dst_arg"; then
+ # $@ is not empty: it contains at least $arg.
+ set fnord "$@" "$dst_arg"
+ shift # fnord
+ fi
+ shift # arg
+ dst_arg=$arg
+ # Protect names problematic for 'test' and other utilities.
+ case $dst_arg in
+ -* | [=\(\)!]) dst_arg=./$dst_arg;;
+ esac
+ done
+fi
+
+if test $# -eq 0; then
+ if test -z "$dir_arg"; then
+ echo "$0: no input file specified." >&2
+ exit 1
+ fi
+ # It's OK to call 'install-sh -d' without argument.
+ # This can happen when creating conditional directories.
+ exit 0
+fi
+
+if test -z "$dir_arg"; then
+ do_exit='(exit $ret); exit $ret'
+ trap "ret=129; $do_exit" 1
+ trap "ret=130; $do_exit" 2
+ trap "ret=141; $do_exit" 13
+ trap "ret=143; $do_exit" 15
+
+ # Set umask so as not to create temps with too-generous modes.
+ # However, 'strip' requires both read and write access to temps.
+ case $mode in
+ # Optimize common cases.
+ *644) cp_umask=133;;
+ *755) cp_umask=22;;
+
+ *[0-7])
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw='% 200'
+ fi
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+ *)
+ if test -z "$stripcmd"; then
+ u_plus_rw=
+ else
+ u_plus_rw=,u+rw
+ fi
+ cp_umask=$mode$u_plus_rw;;
+ esac
+fi
+
+for src
+do
+ # Protect names problematic for 'test' and other utilities.
+ case $src in
+ -* | [=\(\)!]) src=./$src;;
+ esac
+
+ if test -n "$dir_arg"; then
+ dst=$src
+ dstdir=$dst
+ test -d "$dstdir"
+ dstdir_status=$?
+ else
+
+ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+ # might cause directories to be created, which would be especially bad
+ # if $src (and thus $dsttmp) contains '*'.
+ if test ! -f "$src" && test ! -d "$src"; then
+ echo "$0: $src does not exist." >&2
+ exit 1
+ fi
+
+ if test -z "$dst_arg"; then
+ echo "$0: no destination specified." >&2
+ exit 1
+ fi
+ dst=$dst_arg
+
+ # If destination is a directory, append the input filename; won't work
+ # if double slashes aren't ignored.
+ if test -d "$dst"; then
+ if test -n "$no_target_directory"; then
+ echo "$0: $dst_arg: Is a directory" >&2
+ exit 1
+ fi
+ dstdir=$dst
+ dst=$dstdir/`basename "$src"`
+ dstdir_status=0
+ else
+ # Prefer dirname, but fall back on a substitute if dirname fails.
+ dstdir=`
+ (dirname "$dst") 2>/dev/null ||
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$dst" : 'X\(//\)[^/]' \| \
+ X"$dst" : 'X\(//\)$' \| \
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
+ echo X"$dst" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'
+ `
+
+ test -d "$dstdir"
+ dstdir_status=$?
+ fi
+ fi
+
+ obsolete_mkdir_used=false
+
+ if test $dstdir_status != 0; then
+ case $posix_mkdir in
+ '')
+ # Create intermediate dirs using mode 755 as modified by the umask.
+ # This is like FreeBSD 'install' as of 1997-10-28.
+ umask=`umask`
+ case $stripcmd.$umask in
+ # Optimize common cases.
+ *[2367][2367]) mkdir_umask=$umask;;
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+ *[0-7])
+ mkdir_umask=`expr $umask + 22 \
+ - $umask % 100 % 40 + $umask % 20 \
+ - $umask % 10 % 4 + $umask % 2
+ `;;
+ *) mkdir_umask=$umask,go-w;;
+ esac
+
+ # With -d, create the new directory with the user-specified mode.
+ # Otherwise, rely on $mkdir_umask.
+ if test -n "$dir_arg"; then
+ mkdir_mode=-m$mode
+ else
+ mkdir_mode=
+ fi
+
+ posix_mkdir=false
+ case $umask in
+ *[123567][0-7][0-7])
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+ ;;
+ *)
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+ if (umask $mkdir_umask &&
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+ then
+ if test -z "$dir_arg" || {
+ # Check for POSIX incompatibilities with -m.
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+ # other-writable bit of parent directory when it shouldn't.
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
+ case $ls_ld_tmpdir in
+ d????-?r-*) different_mode=700;;
+ d????-?--*) different_mode=755;;
+ *) false;;
+ esac &&
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+ }
+ }
+ then posix_mkdir=:
+ fi
+ rmdir "$tmpdir/d" "$tmpdir"
+ else
+ # Remove any dirs left behind by ancient mkdir implementations.
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+ fi
+ trap '' 0;;
+ esac;;
+ esac
+
+ if
+ $posix_mkdir && (
+ umask $mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+ )
+ then :
+ else
+
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
+ # or it failed possibly due to a race condition. Create the
+ # directory the slow way, step by step, checking for races as we go.
+
+ case $dstdir in
+ /*) prefix='/';;
+ [-=\(\)!]*) prefix='./';;
+ *) prefix='';;
+ esac
+
+ eval "$initialize_posix_glob"
+
+ oIFS=$IFS
+ IFS=/
+ $posix_glob set -f
+ set fnord $dstdir
+ shift
+ $posix_glob set +f
+ IFS=$oIFS
+
+ prefixes=
+
+ for d
+ do
+ test X"$d" = X && continue
+
+ prefix=$prefix$d
+ if test -d "$prefix"; then
+ prefixes=
+ else
+ if $posix_mkdir; then
+ (umask=$mkdir_umask &&
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+ # Don't fail if two instances are running concurrently.
+ test -d "$prefix" || exit 1
+ else
+ case $prefix in
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+ *) qprefix=$prefix;;
+ esac
+ prefixes="$prefixes '$qprefix'"
+ fi
+ fi
+ prefix=$prefix/
+ done
+
+ if test -n "$prefixes"; then
+ # Don't fail if two instances are running concurrently.
+ (umask $mkdir_umask &&
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
+ test -d "$dstdir" || exit 1
+ obsolete_mkdir_used=true
+ fi
+ fi
+ fi
+
+ if test -n "$dir_arg"; then
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+ else
+
+ # Make a couple of temp file names in the proper directory.
+ dsttmp=$dstdir/_inst.$$_
+ rmtmp=$dstdir/_rm.$$_
+
+ # Trap to clean up those temp files at exit.
+ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+ # Copy the file name to the temp name.
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+ # and set any options; do chmod last to preserve setuid bits.
+ #
+ # If any of these fail, we abort the whole thing. If we want to
+ # ignore errors from any of these, just make sure not to ignore
+ # errors from the above "$doit $cpprog $src $dsttmp" command.
+ #
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+ # If -C, don't bother to copy if it wouldn't change the file.
+ if $copy_on_change &&
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
+
+ eval "$initialize_posix_glob" &&
+ $posix_glob set -f &&
+ set X $old && old=:$2:$4:$5:$6 &&
+ set X $new && new=:$2:$4:$5:$6 &&
+ $posix_glob set +f &&
+
+ test "$old" = "$new" &&
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+ then
+ rm -f "$dsttmp"
+ else
+ # Rename the file to the real destination.
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+ # The rename failed, perhaps because mv can't rename something else
+ # to itself, or perhaps because mv is so ancient that it does not
+ # support -f.
+ {
+ # Now remove or move aside any old file at destination location.
+ # We try this two ways since rm can't unlink itself on some
+ # systems and the destination file might be busy for other
+ # reasons. In this case, the final cleanup might fail but the new
+ # file should still install successfully.
+ {
+ test ! -f "$dst" ||
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+ } ||
+ { echo "$0: cannot unlink or rename $dst" >&2
+ (exit 1); exit 1
+ }
+ } &&
+
+ # Now rename the file to the real destination.
+ $doit $mvcmd "$dsttmp" "$dst"
+ }
+ fi || exit 1
+
+ trap '' 0
+ fi
+done
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/mdate-sh b/build-aux/mdate-sh
new file mode 100755
index 0000000..b3719cf
--- /dev/null
+++ b/build-aux/mdate-sh
@@ -0,0 +1,224 @@
+#!/bin/sh
+# Get modification time of a file or directory and pretty-print it.
+
+scriptversion=2010-08-21.06; # UTC
+
+# Copyright (C) 1995-2013 Free Software Foundation, Inc.
+# written by Ulrich Drepper <address@hidden>, June 1995
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <address@hidden> or send patches to
+# <address@hidden>.
+
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+fi
+
+case $1 in
+ '')
+ echo "$0: No file. Try '$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: mdate-sh [--help] [--version] FILE
+
+Pretty-print the modification day of FILE, in the format:
+1 January 1970
+
+Report bugs to <address@hidden>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "mdate-sh $scriptversion"
+ exit $?
+ ;;
+esac
+
+error ()
+{
+ echo "$0: $1" >&2
+ exit 1
+}
+
+
+# Prevent date giving response in another language.
+LANG=C
+export LANG
+LC_ALL=C
+export LC_ALL
+LC_TIME=C
+export LC_TIME
+
+# GNU ls changes its time format in response to the TIME_STYLE
+# variable. Since we cannot assume 'unset' works, revert this
+# variable to its documented default.
+if test "${TIME_STYLE+set}" = set; then
+ TIME_STYLE=posix-long-iso
+ export TIME_STYLE
+fi
+
+save_arg1=$1
+
+# Find out how to get the extended ls output of a file or directory.
+if ls -L /dev/null 1>/dev/null 2>&1; then
+ ls_command='ls -L -l -d'
+else
+ ls_command='ls -l -d'
+fi
+# Avoid user/group names that might have spaces, when possible.
+if ls -n /dev/null 1>/dev/null 2>&1; then
+ ls_command="$ls_command -n"
+fi
+
+# A 'ls -l' line looks as follows on OS/2.
+# drwxrwx--- 0 Aug 11 2001 foo
+# This differs from Unix, which adds ownership information.
+# drwxrwx--- 2 root root 4096 Aug 11 2001 foo
+#
+# To find the date, we split the line on spaces and iterate on words
+# until we find a month. This cannot work with files whose owner is a
+# user named "Jan", or "Feb", etc. However, it's unlikely that '/'
+# will be owned by a user whose name is a month. So we first look at
+# the extended ls output of the root directory to decide how many
+# words should be skipped to get the date.
+
+# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
+set x`$ls_command /`
+
+# Find which argument is the month.
+month=
+command=
+until test $month
+do
+ test $# -gt 0 || error "failed parsing '$ls_command /' output"
+ shift
+ # Add another shift to the command.
+ command="$command shift;"
+ case $1 in
+ Jan) month=January; nummonth=1;;
+ Feb) month=February; nummonth=2;;
+ Mar) month=March; nummonth=3;;
+ Apr) month=April; nummonth=4;;
+ May) month=May; nummonth=5;;
+ Jun) month=June; nummonth=6;;
+ Jul) month=July; nummonth=7;;
+ Aug) month=August; nummonth=8;;
+ Sep) month=September; nummonth=9;;
+ Oct) month=October; nummonth=10;;
+ Nov) month=November; nummonth=11;;
+ Dec) month=December; nummonth=12;;
+ esac
+done
+
+test -n "$month" || error "failed parsing '$ls_command /' output"
+
+# Get the extended ls output of the file or directory.
+set dummy x`eval "$ls_command \"\\\$save_arg1\""`
+
+# Remove all preceding arguments
+eval $command
+
+# Because of the dummy argument above, month is in $2.
+#
+# On a POSIX system, we should have
+#
+# $# = 5
+# $1 = file size
+# $2 = month
+# $3 = day
+# $4 = year or time
+# $5 = filename
+#
+# On Darwin 7.7.0 and 7.6.0, we have
+#
+# $# = 4
+# $1 = day
+# $2 = month
+# $3 = year or time
+# $4 = filename
+
+# Get the month.
+case $2 in
+ Jan) month=January; nummonth=1;;
+ Feb) month=February; nummonth=2;;
+ Mar) month=March; nummonth=3;;
+ Apr) month=April; nummonth=4;;
+ May) month=May; nummonth=5;;
+ Jun) month=June; nummonth=6;;
+ Jul) month=July; nummonth=7;;
+ Aug) month=August; nummonth=8;;
+ Sep) month=September; nummonth=9;;
+ Oct) month=October; nummonth=10;;
+ Nov) month=November; nummonth=11;;
+ Dec) month=December; nummonth=12;;
+esac
+
+case $3 in
+ ???*) day=$1;;
+ *) day=$3; shift;;
+esac
+
+# Here we have to deal with the problem that the ls output gives either
+# the time of day or the year.
+case $3 in
+ *:*) set `date`; eval year=\$$#
+ case $2 in
+ Jan) nummonthtod=1;;
+ Feb) nummonthtod=2;;
+ Mar) nummonthtod=3;;
+ Apr) nummonthtod=4;;
+ May) nummonthtod=5;;
+ Jun) nummonthtod=6;;
+ Jul) nummonthtod=7;;
+ Aug) nummonthtod=8;;
+ Sep) nummonthtod=9;;
+ Oct) nummonthtod=10;;
+ Nov) nummonthtod=11;;
+ Dec) nummonthtod=12;;
+ esac
+ # For the first six month of the year the time notation can also
+ # be used for files modified in the last year.
+ if (expr $nummonth \> $nummonthtod) > /dev/null;
+ then
+ year=`expr $year - 1`
+ fi;;
+ *) year=$3;;
+esac
+
+# The result.
+echo $day $month $year
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/missing b/build-aux/missing
new file mode 100755
index 0000000..cdea514
--- /dev/null
+++ b/build-aux/missing
@@ -0,0 +1,215 @@
+#! /bin/sh
+# Common wrapper for a few potentially missing GNU programs.
+
+scriptversion=2012-06-26.16; # UTC
+
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <address@hidden>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+fi
+
+case $1 in
+
+ --is-lightweight)
+ # Used by our autoconf macros to check whether the available missing
+ # script is modern enough.
+ exit 0
+ ;;
+
+ --run)
+ # Back-compat with the calling convention used by older automake.
+ shift
+ ;;
+
+ -h|--h|--he|--hel|--help)
+ echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
+
+Options:
+ -h, --help display this help and exit
+ -v, --version output version information and exit
+
+Supported PROGRAM values:
+ aclocal autoconf autoheader autom4te automake makeinfo
+ bison yacc flex lex help2man
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <address@hidden>."
+ exit $?
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing $scriptversion (GNU Automake)"
+ exit $?
+ ;;
+
+ -*)
+ echo 1>&2 "$0: unknown '$1' option"
+ echo 1>&2 "Try '$0 --help' for more information"
+ exit 1
+ ;;
+
+esac
+
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch. This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+ msg="probably too old"
+elif test $st -eq 127; then
+ # Program was missing.
+ msg="missing on your system"
+else
+ # Program was found and executed, but failed. Give up.
+ exit $st
+fi
+
+perl_URL=http://www.perl.org/
+flex_URL=http://flex.sourceforge.net/
+gnu_software_URL=http://www.gnu.org/software
+
+program_details ()
+{
+ case $1 in
+ aclocal|automake)
+ echo "The '$1' program is part of the GNU Automake package:"
+ echo "<$gnu_software_URL/automake>"
+ echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/autoconf>"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ autoconf|autom4te|autoheader)
+ echo "The '$1' program is part of the GNU Autoconf package:"
+ echo "<$gnu_software_URL/autoconf/>"
+ echo "It also requires GNU m4 and Perl in order to run:"
+ echo "<$gnu_software_URL/m4/>"
+ echo "<$perl_URL>"
+ ;;
+ esac
+}
+
+give_advice ()
+{
+ # Normalize program name to check for.
+ normalized_program=`echo "$1" | sed '
+ s/^gnu-//; t
+ s/^gnu//; t
+ s/^g//; t'`
+
+ printf '%s\n' "'$1' is $msg."
+
+ configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+ case $normalized_program in
+ autoconf*)
+ echo "You should only need it if you modified 'configure.ac',"
+ echo "or m4 files included by it."
+ program_details 'autoconf'
+ ;;
+ autoheader*)
+ echo "You should only need it if you modified 'acconfig.h' or"
+ echo "$configure_deps."
+ program_details 'autoheader'
+ ;;
+ automake*)
+ echo "You should only need it if you modified 'Makefile.am' or"
+ echo "$configure_deps."
+ program_details 'automake'
+ ;;
+ aclocal*)
+ echo "You should only need it if you modified 'acinclude.m4' or"
+ echo "$configure_deps."
+ program_details 'aclocal'
+ ;;
+ autom4te*)
+ echo "You might have modified some maintainer files that require"
+ echo "the 'automa4te' program to be rebuilt."
+ program_details 'autom4te'
+ ;;
+ bison*|yacc*)
+ echo "You should only need it if you modified a '.y' file."
+ echo "You may want to install the GNU Bison package:"
+ echo "<$gnu_software_URL/bison/>"
+ ;;
+ lex*|flex*)
+ echo "You should only need it if you modified a '.l' file."
+ echo "You may want to install the Fast Lexical Analyzer package:"
+ echo "<$flex_URL>"
+ ;;
+ help2man*)
+ echo "You should only need it if you modified a dependency" \
+ "of a man page."
+ echo "You may want to install the GNU Help2man package:"
+ echo "<$gnu_software_URL/help2man/>"
+ ;;
+ makeinfo*)
+ echo "You should only need it if you modified a '.texi' file, or"
+ echo "any other file indirectly affecting the aspect of the manual."
+ echo "You might want to install the Texinfo package:"
+ echo "<$gnu_software_URL/texinfo/>"
+ echo "The spurious makeinfo call might also be the consequence of"
+ echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+ echo "want to install GNU make:"
+ echo "<$gnu_software_URL/make/>"
+ ;;
+ *)
+ echo "You might have modified some files without having the proper"
+ echo "tools for further handling them. Check the 'README' file, it"
+ echo "often tells you about the needed prerequisites for installing"
+ echo "this package. You may also peek at any GNU archive site, in"
+ echo "case some other package contains this missing '$1' program."
+ ;;
+ esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+ -e '2,$s/^/ /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/test-driver b/build-aux/test-driver
new file mode 100755
index 0000000..32bf39e
--- /dev/null
+++ b/build-aux/test-driver
@@ -0,0 +1,127 @@
+#! /bin/sh
+# test-driver - basic testsuite driver script.
+
+scriptversion=2012-06-27.10; # UTC
+
+# Copyright (C) 2011-2013 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <address@hidden> or send patches to
+# <address@hidden>.
+
+# Make unconditional expansion of undefined variables an error. This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+usage_error ()
+{
+ echo "$0: $*" >&2
+ print_usage >&2
+ exit 2
+}
+
+print_usage ()
+{
+ cat <<END
+Usage:
+ test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
+ [--expect-failure={yes|no}] [--color-tests={yes|no}]
+ [--enable-hard-errors={yes|no}] [--] TEST-SCRIPT
+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+END
+}
+
+# TODO: better error handling in option parsing (in particular, ensure
+# TODO: $log_file, $trs_file and $test_name are defined).
+test_name= # Used for reporting.
+log_file= # Where to save the output of the test script.
+trs_file= # Where to save the metadata of the test run.
+expect_failure=no
+color_tests=no
+enable_hard_errors=yes
+while test $# -gt 0; do
+ case $1 in
+ --help) print_usage; exit $?;;
+ --version) echo "test-driver $scriptversion"; exit $?;;
+ --test-name) test_name=$2; shift;;
+ --log-file) log_file=$2; shift;;
+ --trs-file) trs_file=$2; shift;;
+ --color-tests) color_tests=$2; shift;;
+ --expect-failure) expect_failure=$2; shift;;
+ --enable-hard-errors) enable_hard_errors=$2; shift;;
+ --) shift; break;;
+ -*) usage_error "invalid option: '$1'";;
+ esac
+ shift
+done
+
+if test $color_tests = yes; then
+ # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
+ red='[0;31m' # Red.
+ grn='[0;32m' # Green.
+ lgn='[1;32m' # Light green.
+ blu='[1;34m' # Blue.
+ mgn='[0;35m' # Magenta.
+ std='[m' # No color.
+else
+ red= grn= lgn= blu= mgn= std=
+fi
+
+do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
+trap "st=129; $do_exit" 1
+trap "st=130; $do_exit" 2
+trap "st=141; $do_exit" 13
+trap "st=143; $do_exit" 15
+
+# Test script is run here.
+"$@" >$log_file 2>&1
+estatus=$?
+if test $enable_hard_errors = no && test $estatus -eq 99; then
+ estatus=1
+fi
+
+case $estatus:$expect_failure in
+ 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
+ 0:*) col=$grn res=PASS recheck=no gcopy=no;;
+ 77:*) col=$blu res=SKIP recheck=no gcopy=yes;;
+ 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;;
+ *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;;
+ *:*) col=$red res=FAIL recheck=yes gcopy=yes;;
+esac
+
+# Report outcome to console.
+echo "${col}${res}${std}: $test_name"
+
+# Register the test result, and other relevant metadata.
+echo ":test-result: $res" > $trs_file
+echo ":global-test-result: $res" >> $trs_file
+echo ":recheck: $recheck" >> $trs_file
+echo ":copy-in-global-log: $gcopy" >> $trs_file
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/texinfo.tex b/build-aux/texinfo.tex
new file mode 100644
index 0000000..85f184c
--- /dev/null
+++ b/build-aux/texinfo.tex
@@ -0,0 +1,10079 @@
+% texinfo.tex -- TeX macros to handle Texinfo files.
+%
+% Load plain if necessary, i.e., if running under initex.
+\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+%
+\def\texinfoversion{2013-02-01.11}
+%
+% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+% 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
+%
+% This texinfo.tex file is free software: you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as
+% published by the Free Software Foundation, either version 3 of the
+% License, or (at your option) any later version.
+%
+% This texinfo.tex file is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this program. If not, see <http://www.gnu.org/licenses/>.
+%
+% As a special exception, when this file is read by TeX when processing
+% a Texinfo source document, you may use the result without
+% restriction. This Exception is an additional permission under section 7
+% of the GNU General Public License, version 3 ("GPLv3").
+%
+% Please try the latest version of texinfo.tex before submitting bug
+% reports; you can get the latest version from:
+% http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or
+% http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or
+% http://www.gnu.org/software/texinfo/ (the Texinfo home page)
+% The texinfo.tex in any given distribution could well be out
+% of date, so if that's what you're using, please check.
+%
+% Send bug reports to address@hidden Please include including a
+% complete document in each bug report with which we can reproduce the
+% problem. Patches are, of course, greatly appreciated.
+%
+% To process a Texinfo manual with TeX, it's most reliable to use the
+% texi2dvi shell script that comes with the distribution. For a simple
+% manual foo.texi, however, you can get away with this:
+% tex foo.texi
+% texindex foo.??
+% tex foo.texi
+% tex foo.texi
+% dvips foo.dvi -o # or whatever; this makes foo.ps.
+% The extra TeX runs get the cross-reference information correct.
+% Sometimes one run after texindex suffices, and sometimes you need more
+% than two; texi2dvi does it as many times as necessary.
+%
+% It is possible to adapt texinfo.tex for other languages, to some
+% extent. You can get the existing language-specific files from the
+% full Texinfo distribution.
+%
+% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
+
+
+\message{Loading texinfo [version \texinfoversion]:}
+
+% If in a .fmt file, print the version number
+% and turn on active characters that we couldn't do earlier because
+% they might have appeared in the input file name.
+\everyjob{\message{[Texinfo version \texinfoversion]}%
+ \catcode`+=\active \catcode`\_=\active}
+
+\chardef\other=12
+
+% We never want plain's \outer definition of \+ in Texinfo.
+% For @tex, we can use \tabalign.
+\let\+ = \relax
+
+% Save some plain tex macros whose names we will redefine.
+\let\ptexb=\b
+\let\ptexbullet=\bullet
+\let\ptexc=\c
+\let\ptexcomma=\,
+\let\ptexdot=\.
+\let\ptexdots=\dots
+\let\ptexend=\end
+\let\ptexequiv=\equiv
+\let\ptexexclam=\!
+\let\ptexfootnote=\footnote
+\let\ptexgtr=>
+\let\ptexhat=^
+\let\ptexi=\i
+\let\ptexindent=\indent
+\let\ptexinsert=\insert
+\let\ptexlbrace=\{
+\let\ptexless=<
+\let\ptexnewwrite\newwrite
+\let\ptexnoindent=\noindent
+\let\ptexplus=+
+\let\ptexraggedright=\raggedright
+\let\ptexrbrace=\}
+\let\ptexslash=\/
+\let\ptexstar=\*
+\let\ptext=\t
+\let\ptextop=\top
+{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
+
+% If this character appears in an error message or help string, it
+% starts a new line in the output.
+\newlinechar = `^^J
+
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+%
+\ifx\inputlineno\thisisundefined
+ \let\linenumber = \empty % Pre-3.0.
+\else
+ \def\linenumber{l.\the\inputlineno:\space}
+\fi
+
+% Set up fixed words for English if not already set.
+\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
+\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
+\ifx\putworderror\undefined \gdef\putworderror{error}\fi
+\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
+\ifx\putwordin\undefined \gdef\putwordin{in}\fi
+\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is
empty)}\fi
+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index
is nonexistent)}\fi
+\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
+\ifx\putwordInstanceVariableof\undefined
\gdef\putwordInstanceVariableof{Instance Variable of}\fi
+\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
+\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi
+\ifx\putwordof\undefined \gdef\putwordof{of}\fi
+\ifx\putwordon\undefined \gdef\putwordon{on}\fi
+\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi
+\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi
+\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi
+\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi
+\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi
+\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi
+\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi
+%
+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
+%
+\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi
+\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
+\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
+\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
+\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
+
+% Since the category of space is not known, we have to be careful.
+\chardef\spacecat = 10
+\def\spaceisspace{\catcode`\ =\spacecat}
+
+% sometimes characters are active, so we need control sequences.
+\chardef\ampChar = `\&
+\chardef\colonChar = `\:
+\chardef\commaChar = `\,
+\chardef\dashChar = `\-
+\chardef\dotChar = `\.
+\chardef\exclamChar= `\!
+\chardef\hashChar = `\#
+\chardef\lquoteChar= `\`
+\chardef\questChar = `\?
+\chardef\rquoteChar= `\'
+\chardef\semiChar = `\;
+\chardef\slashChar = `\/
+\chardef\underChar = `\_
+
+% Ignore a token.
+%
+\def\gobble#1{}
+
+% The following is used inside several \edef's.
+\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
+
+% Hyphenation fixes.
+\hyphenation{
+ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
+ ap-pen-dix bit-map bit-maps
+ data-base data-bases eshell fall-ing half-way long-est man-u-script
+ man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
+ par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
+ spell-ing spell-ings
+ stand-alone strong-est time-stamp time-stamps which-ever white-space
+ wide-spread wrap-around
+}
+
+% Margin to add to right of even pages, to left of odd pages.
+\newdimen\bindingoffset
+\newdimen\normaloffset
+\newdimen\pagewidth \newdimen\pageheight
+
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt }
+
+% Sometimes it is convenient to have everything in the transcript file
+% and nothing on the terminal. We don't just call \tracingall here,
+% since that produces some useless output on the terminal. We also make
+% some effort to order the tracing commands to reduce output in the log
+% file; cf. trace.sty in LaTeX.
+%
+\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+\def\loggingall{%
+ \tracingstats2
+ \tracingpages1
+ \tracinglostchars2 % 2 gives us more in etex
+ \tracingparagraphs1
+ \tracingoutput1
+ \tracingmacros2
+ \tracingrestores1
+ \showboxbreadth\maxdimen \showboxdepth\maxdimen
+ \ifx\eTeXversion\thisisundefined\else % etex gives us more logging
+ \tracingscantokens1
+ \tracingifs1
+ \tracinggroups1
+ \tracingnesting2
+ \tracingassigns1
+ \fi
+ \tracingcommands3 % 3 gives us more in etex
+ \errorcontextlines16
+}%
+
+% @errormsg{MSG}. Do the index-like expansions on MSG, but if things
+% aren't perfect, it's not the end of the world, being an error message,
+% after all.
+%
+\def\errormsg{\begingroup \indexnofonts \doerrormsg}
+\def\doerrormsg#1{\errmessage{#1}}
+
+% add check for \lastpenalty to plain's definitions. If the last thing
+% we did was a \nobreak, we don't want to insert more space.
+%
+\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
+ \removelastskip\penalty-50\smallskip\fi\fi}
+\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
+ \removelastskip\penalty-100\medskip\fi\fi}
+\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
+ \removelastskip\penalty-200\bigskip\fi\fi}
+
+% Do @cropmarks to get crop marks.
+%
+\newif\ifcropmarks
+\let\cropmarks = \cropmarkstrue
+%
+% Dimensions to add cropmarks at corners.
+% Added by P. A. MacKay, 12 Nov. 1986
+%
+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
+\newdimen\cornerlong \cornerlong=1pc
+\newdimen\cornerthick \cornerthick=.3pt
+\newdimen\topandbottommargin \topandbottommargin=.75in
+
+% Output a mark which sets \thischapter, \thissection and \thiscolor.
+% We dump everything together because we only have one kind of mark.
+% This works because we only use \botmark / \topmark, not \firstmark.
+%
+% A mark contains a subexpression of the \ifcase ... \fi construct.
+% \get*marks macros below extract the needed part using \ifcase.
+%
+% Another complication is to let the user choose whether \thischapter
+% (\thissection) refers to the chapter (section) in effect at the top
+% of a page, or that at the bottom of a page. The solution is
+% described on page 260 of The TeXbook. It involves outputting two
+% marks for the sectioning macros, one before the section break, and
+% one after. I won't pretend I can describe this better than DEK...
+\def\domark{%
+ \toks0=\expandafter{\lastchapterdefs}%
+ \toks2=\expandafter{\lastsectiondefs}%
+ \toks4=\expandafter{\prevchapterdefs}%
+ \toks6=\expandafter{\prevsectiondefs}%
+ \toks8=\expandafter{\lastcolordefs}%
+ \mark{%
+ \the\toks0 \the\toks2
+ \noexpand\or \the\toks4 \the\toks6
+ \noexpand\else \the\toks8
+ }%
+}
+% \topmark doesn't work for the very first chapter (after the title
+% page or the contents), so we use \firstmark there -- this gets us
+% the mark with the chapter defs, unless the user sneaks in, e.g.,
+% @setcolor (or @url, or @link, etc.) between @contents and the very
+% first @chapter.
+\def\gettopheadingmarks{%
+ \ifcase0\topmark\fi
+ \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
+}
+\def\getbottomheadingmarks{\ifcase1\botmark\fi}
+\def\getcolormarks{\ifcase2\topmark\fi}
+
+% Avoid "undefined control sequence" errors.
+\def\lastchapterdefs{}
+\def\lastsectiondefs{}
+\def\prevchapterdefs{}
+\def\prevsectiondefs{}
+\def\lastcolordefs{}
+
+% Main output routine.
+\chardef\PAGE = 255
+\output = {\onepageout{\pagecontents\PAGE}}
+
+\newbox\headlinebox
+\newbox\footlinebox
+
+% \onepageout takes a vbox as an argument. Note that \pagecontents
+% does insertions, but you have to call it yourself.
+\def\onepageout#1{%
+ \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
+ %
+ \ifodd\pageno \advance\hoffset by \bindingoffset
+ \else \advance\hoffset by -\bindingoffset\fi
+ %
+ % Do this outside of the \shipout so @code etc. will be expanded in
+ % the headline as they should be, not taken literally (outputting ''code).
+ \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
+ \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
+ \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
+ \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
+ %
+ {%
+ % Have to do this stuff outside the \shipout because we want it to
+ % take effect in \write's, yet the group defined by the \vbox ends
+ % before the \shipout runs.
+ %
+ \indexdummies % don't expand commands in the output.
+ \normalturnoffactive % \ in index entries must not stay \, e.g., if
+ % the page break happens to be in the middle of an example.
+ % We don't want .vr (or whatever) entries like this:
+ % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
+ % "\acronym" won't work when it's read back in;
+ % it needs to be
+ % {\code {{\tt \backslashcurfont }acronym}
+ \shipout\vbox{%
+ % Do this early so pdf references go to the beginning of the page.
+ \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
+ %
+ \ifcropmarks \vbox to \outervsize\bgroup
+ \hsize = \outerhsize
+ \vskip-\topandbottommargin
+ \vtop to0pt{%
+ \line{\ewtop\hfil\ewtop}%
+ \nointerlineskip
+ \line{%
+ \vbox{\moveleft\cornerthick\nstop}%
+ \hfill
+ \vbox{\moveright\cornerthick\nstop}%
+ }%
+ \vss}%
+ \vskip\topandbottommargin
+ \line\bgroup
+ \hfil % center the page within the outer (page) hsize.
+ \ifodd\pageno\hskip\bindingoffset\fi
+ \vbox\bgroup
+ \fi
+ %
+ \unvbox\headlinebox
+ \pagebody{#1}%
+ \ifdim\ht\footlinebox > 0pt
+ % Only leave this space if the footline is nonempty.
+ % (We lessened \vsize for it in \oddfootingyyy.)
+ % The \baselineskip=24pt in plain's \makefootline has no effect.
+ \vskip 24pt
+ \unvbox\footlinebox
+ \fi
+ %
+ \ifcropmarks
+ \egroup % end of \vbox\bgroup
+ \hfil\egroup % end of (centering) \line\bgroup
+ \vskip\topandbottommargin plus1fill minus1fill
+ \boxmaxdepth = \cornerthick
+ \vbox to0pt{\vss
+ \line{%
+ \vbox{\moveleft\cornerthick\nsbot}%
+ \hfill
+ \vbox{\moveright\cornerthick\nsbot}%
+ }%
+ \nointerlineskip
+ \line{\ewbot\hfil\ewbot}%
+ }%
+ \egroup % \vbox from first cropmarks clause
+ \fi
+ }% end of \shipout\vbox
+ }% end of group with \indexdummies
+ \advancepageno
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi
+}
+
+\newinsert\margin \dimen\margin=\maxdimen
+
+\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
+{\catcode`\@ =11
+\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
+% marginal hacks, address@hidden (Juha Takala)
+\ifvoid\margin\else % marginal info is present
+ \rlap{\kern\hsize\vbox address@hidden \vss}}\fi
address@hidden \unvbox#1\relax
+\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
address@hidden \kern-\dimen@ \vfil \fi}
+}
+
+% Here are the rules for the cropmarks. Note that they are
+% offset so that the space between them is truly \outerhsize or \outervsize
+% (P. A. MacKay, 12 November, 1986)
+%
+\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
+\def\nstop{\vbox
+ {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
+\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
+\def\nsbot{\vbox
+ {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
+
+% Parse an argument, then pass it to #1. The argument is the rest of
+% the input line (except we remove a trailing comment). #1 should be a
+% macro which expects an ordinary undelimited TeX argument.
+%
+\def\parsearg{\parseargusing{}}
+\def\parseargusing#1#2{%
+ \def\argtorun{#2}%
+ \begingroup
+ \obeylines
+ \spaceisspace
+ #1%
+ \parseargline\empty% Insert the \empty token, see \finishparsearg below.
+}
+
+{\obeylines %
+ \gdef\parseargline#1^^M{%
+ \endgroup % End of the group started in \parsearg.
+ \argremovecomment #1\comment\ArgTerm%
+ }%
+}
+
+% First remove any @comment, then any @c comment.
+\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
+\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
+
+% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
+%
+% \argremovec might leave us with trailing space, e.g.,
+% @end itemize @c foo
+% This space token undergoes the same procedure and is eventually removed
+% by \finishparsearg.
+%
+\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
+\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
+\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
+ \def\temp{#3}%
+ \ifx\temp\empty
+ % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
+ \let\temp\finishparsearg
+ \else
+ \let\temp\argcheckspaces
+ \fi
+ % Put the space token in:
+ \temp#1 #3\ArgTerm
+}
+
+% If a _delimited_ argument is enclosed in braces, they get stripped; so
+% to get _exactly_ the rest of the line, we had to prevent such situation.
+% We prepended an \empty token at the very beginning and we expand it now,
+% just before passing the control to \argtorun.
+% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
+% either the null string, or it ends with \^^M---thus there is no danger
+% that a pair of braces would be stripped.
+%
+% But first, we have to remove the trailing space token.
+%
+\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
+
+% \parseargdef\foo{...}
+% is roughly equivalent to
+% \def\foo{\parsearg\Xfoo}
+% \def\Xfoo#1{...}
+%
+% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
+% favourite TeX trick. --kasal, 16nov03
+
+\def\parseargdef#1{%
+ \expandafter \doparseargdef \csname\string#1\endcsname #1%
+}
+\def\doparseargdef#1#2{%
+ \def#2{\parsearg#1}%
+ \def#1##1%
+}
+
+% Several utility definitions with active space:
+{
+ \obeyspaces
+ \gdef\obeyedspace{ }
+
+ % Make each space character in the input produce a normal interword
+ % space in the output. Don't allow a line break at this space, as this
+ % is used only in environments like @example, where each line of input
+ % should produce a line of output anyway.
+ %
+ \gdef\sepspaces{\obeyspaces\let =\tie}
+
+ % If an index command is used in an @example environment, any spaces
+ % therein should become regular spaces in the raw index file, not the
+ % expansion of \tie (\leavevmode \penalty address@hidden \ ).
+ \gdef\unsepspaces{\let =\space}
+}
+
+
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+
+% Define the framework for environments in texinfo.tex. It's used like this:
+%
+% \envdef\foo{...}
+% \def\Efoo{...}
+%
+% It's the responsibility of \envdef to insert \begingroup before the
+% actual body; @end closes the group after calling \Efoo. \envdef also
+% defines \thisenv, so the current environment is known; @end checks
+% whether the environment name matches. The \checkenv macro can also be
+% used to check whether the current environment is the one expected.
+%
+% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
+% are not treated as environments; they don't open a group. (The
+% implementation of @end takes care not to call \endgroup in this
+% special case.)
+
+
+% At run-time, environments start with this:
+\def\startenvironment#1{\begingroup\def\thisenv{#1}}
+% initialize
+\let\thisenv\empty
+
+% ... but they get defined via ``\envdef\foo{...}'':
+\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
+\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
+
+% Check whether we're in the right environment:
+\def\checkenv#1{%
+ \def\temp{#1}%
+ \ifx\thisenv\temp
+ \else
+ \badenverr
+ \fi
+}
+
+% Environment mismatch, #1 expected:
+\def\badenverr{%
+ \errhelp = \EMsimple
+ \errmessage{This command can appear only \inenvironment\temp,
+ not \inenvironment\thisenv}%
+}
+\def\inenvironment#1{%
+ \ifx#1\empty
+ outside of any environment%
+ \else
+ in environment \expandafter\string#1%
+ \fi
+}
+
+% @end foo executes the definition of \Efoo.
+% But first, it executes a specialized version of \checkenv
+%
+\parseargdef\end{%
+ \if 1\csname iscond.#1\endcsname
+ \else
+ % The general wording of \badenverr may not be ideal.
+ \expandafter\checkenv\csname#1\endcsname
+ \csname E#1\endcsname
+ \endgroup
+ \fi
+}
+
+\newhelp\EMsimple{Press RETURN to continue.}
+
+
+% Be sure we're in horizontal mode when doing a tie, since we make space
+% equivalent to this in @example-like environments. Otherwise, a space
+% at the beginning of a line will start with \penalty -- and
+% since \penalty is valid in vertical mode, we'd end up putting the
+% penalty on the vertical list instead of in the new paragraph.
+{\catcode`@ = 11
+ % Avoid using address@hidden directly, because that causes trouble
+ % if the definition is written into an index file.
+ \global\let\tiepenalty = address@hidden
+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+}
+
+% @: forces normal size whitespace following.
+\def\:{\spacefactor=1000 }
+
+% @* forces a line break.
+\def\*{\unskip\hfil\break\hbox{}\ignorespaces}
+
+% @/ allows a line break.
+\let\/=\allowbreak
+
+% @. is an end-of-sentence period.
+\def\.{.\spacefactor=\endofsentencespacefactor\space}
+
+% @! is an end-of-sentence bang.
+\def\!{!\spacefactor=\endofsentencespacefactor\space}
+
+% @? is an end-of-sentence query.
+\def\?{?\spacefactor=\endofsentencespacefactor\space}
+
+% @frenchspacing on|off says whether to put extra space after punctuation.
+%
+\def\onword{on}
+\def\offword{off}
+%
+\parseargdef\frenchspacing{%
+ \def\temp{#1}%
+ \ifx\temp\onword \plainfrenchspacing
+ \else\ifx\temp\offword \plainnonfrenchspacing
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @frenchspacing option `\temp', must be on|off}%
+ \fi\fi
+}
+
+% @w prevents a word break. Without the \leavevmode, @w at the
+% beginning of a paragraph, when TeX is still in vertical mode, would
+% produce a whole line of output instead of starting the paragraph.
+\def\w#1{\leavevmode\hbox{#1}}
+
+% @group ... @end group forces ... to be all on one page, by enclosing
+% it in a TeX vbox. We use \vtop instead of \vbox to construct the box
+% to keep its height that of a normal line. According to the rules for
+% \topskip (p.114 of the TeXbook), the glue inserted is
+% max (\topskip - \ht (first item), 0). If that height is large,
+% therefore, no glue is inserted, and the space between the headline and
+% the text is small, which looks bad.
+%
+% Another complication is that the group might be very large. This can
+% cause the glue on the previous page to be unduly stretched, because it
+% does not have much material. In this case, it's better to add an
+% explicit \vfill so that the extra space is at the bottom. The
+% threshold for doing this is if the group is more than \vfilllimit
+% percent of a page (\vfilllimit can be changed inside of @tex).
+%
+\newbox\groupbox
+\def\vfilllimit{0.7}
+%
+\envdef\group{%
+ \ifnum\catcode`\^^M=\active \else
+ \errhelp = \groupinvalidhelp
+ address@hidden invalid in context where filling is enabled}%
+ \fi
+ \startsavinginserts
+ %
+ \setbox\groupbox = \vtop\bgroup
+ % Do @comment since we are called inside an environment such as
+ % @example, where each end-of-line in the input causes an
+ % end-of-line in the output. We don't want the end-of-line after
+ % the address@hidden' to put extra space in the output. Since @group
+ % should appear on a line by itself (according to the Texinfo
+ % manual), we don't worry about eating any user text.
+ \comment
+}
+%
+% The \vtop produces a box with normal height and large depth; thus, TeX puts
+% \baselineskip glue before it, and (when the next line of text is done)
+% \lineskip glue after it. Thus, space below is not quite equal to space
+% above. But it's pretty close.
+\def\Egroup{%
+ % To get correct interline space between the last line of the group
+ % and the first line afterwards, we have to propagate \prevdepth.
+ \endgraf % Not \par, as it may have been set to \lisppar.
+ \global\dimen1 = \prevdepth
+ \egroup % End the \vtop.
+ % \dimen0 is the vertical size of the group's box.
+ \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox
+ % \dimen2 is how much space is left on the page (more or less).
+ \dimen2 = \pageheight \advance\dimen2 by -\pagetotal
+ % if the group doesn't fit on the current page, and it's a big big
+ % group, force a page break.
+ \ifdim \dimen0 > \dimen2
+ \ifdim \pagetotal < \vfilllimit\pageheight
+ \page
+ \fi
+ \fi
+ \box\groupbox
+ \prevdepth = \dimen1
+ \checkinserts
+}
+%
+% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
+% message, so this ends up printing address@hidden can only ...'.
+%
+\newhelp\groupinvalidhelp{%
+group can only be used in environments such as @example,^^J%
+where each line of input produces a line of output.}
+
+% @need space-in-mils
+% forces a page break if there is not space-in-mils remaining.
+
+\newdimen\mil \mil=0.001in
+
+\parseargdef\need{%
+ % Ensure vertical mode, so we don't make a big box in the middle of a
+ % paragraph.
+ \par
+ %
+ % If the @need value is less than one line space, it's useless.
+ \dimen0 = #1\mil
+ \dimen2 = \ht\strutbox
+ \advance\dimen2 by \dp\strutbox
+ \ifdim\dimen0 > \dimen2
+ %
+ % Do a \strut just to make the height of this box be normal, so the
+ % normal leading is inserted relative to the preceding line.
+ % And a page break here is fine.
+ \vtop to #1\mil{\strut\vfil}%
+ %
+ % TeX does not even consider page breaks if a penalty added to the
+ % main vertical list is 10000 or more. But in order to see if the
+ % empty box we just added fits on the page, we must make it consider
+ % page breaks. On the other hand, we don't want to actually break the
+ % page after the empty box. So we use a penalty of 9999.
+ %
+ % There is an extremely small chance that TeX will actually break the
+ % page at this \penalty, if there are no other feasible breakpoints in
+ % sight. (If the user is using lots of big @group commands, which
+ % almost-but-not-quite fill up a page, TeX will have a hard time doing
+ % good page breaking, for example.) However, I could not construct an
+ % example where a page broke at this \penalty; if it happens in a real
+ % document, then we can reconsider our strategy.
+ \penalty9999
+ %
+ % Back up by the size of the box, whether we did a page break or not.
+ \kern -#1\mil
+ %
+ % Do not allow a page break right after this kern.
+ \nobreak
+ \fi
+}
+
+% @br forces paragraph break (and is undocumented).
+
+\let\br = \par
+
+% @page forces the start of a new page.
+%
+\def\page{\par\vfill\supereject}
+
+% @exdent text....
+% outputs text on separate line in roman font, starting at standard page margin
+
+% This records the amount of indent in the innermost environment.
+% That's how much \exdent should take out.
+\newskip\exdentamount
+
+% This defn is used inside fill environments such as @defun.
+\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
+
+% This defn is used inside nofill environments such as @example.
+\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
+ \leftline{\hskip\leftskip{\rm#1}}}}
+
+% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
+% paragraph. For more general purposes, use the \margin insertion
+% class. WHICH is `l' or `r'. Not documented, written for gawk manual.
+%
+\newskip\inmarginspacing \inmarginspacing=1cm
+\def\strutdepth{\dp\strutbox}
+%
+\def\doinmargin#1#2{\strut\vadjust{%
+ \nobreak
+ \kern-\strutdepth
+ \vtop to \strutdepth{%
+ \baselineskip=\strutdepth
+ \vss
+ % if you have multiple lines of stuff to put here, you'll need to
+ % make the vbox yourself of the appropriate size.
+ \ifx#1l%
+ \llap{\ignorespaces #2\hskip\inmarginspacing}%
+ \else
+ \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
+ \fi
+ \null
+ }%
+}}
+\def\inleftmargin{\doinmargin l}
+\def\inrightmargin{\doinmargin r}
+%
+% @inmargin{TEXT [, RIGHT-TEXT]}
+% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
+% else use TEXT for both).
+%
+\def\inmargin#1{\parseinmargin #1,,\finish}
+\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \def\lefttext{#1}% have both texts
+ \def\righttext{#2}%
+ \else
+ \def\lefttext{#1}% have only one text
+ \def\righttext{#1}%
+ \fi
+ %
+ \ifodd\pageno
+ \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
+ \else
+ \def\temp{\inleftmargin\lefttext}%
+ \fi
+ \temp
+}
+
+% @| inserts a changebar to the left of the current line. It should
+% surround any changed text. This approach does *not* work if the
+% change spans more than two lines of output. To handle that, we would
+% have adopt a much more difficult approach (putting marks into the main
+% vertical list for the beginning and end of each change). This command
+% is not documented, not supported, and doesn't work.
+%
+\def\|{%
+ % \vadjust can only be used in horizontal mode.
+ \leavevmode
+ %
+ % Append this vertical mode material after the current line in the output.
+ \vadjust{%
+ % We want to insert a rule with the height and depth of the current
+ % leading; that is exactly what \strutbox is supposed to record.
+ \vskip-\baselineskip
+ %
+ % \vadjust-items are inserted at the left edge of the type. So
+ % the \llap here moves out into the left-hand margin.
+ \llap{%
+ %
+ % For a thicker or thinner bar, change the `1pt'.
+ \vrule height\baselineskip width1pt
+ %
+ % This is the space between the bar and the text.
+ \hskip 12pt
+ }%
+ }%
+}
+
+% @include FILE -- \input text of FILE.
+%
+\def\include{\parseargusing\filenamecatcodes\includezzz}
+\def\includezzz#1{%
+ \pushthisfilestack
+ \def\thisfile{#1}%
+ {%
+ \makevalueexpandable % we want to expand any @value in FILE.
+ \turnoffactive % and allow special characters in the expansion
+ \indexnofonts % Allow `@@' and other weird things in file names.
+ \wlog{texinfo.tex: doing @include of #1^^J}%
+ \edef\temp{\noexpand\input #1 }%
+ %
+ % This trickery is to read FILE outside of a group, in case it makes
+ % definitions, etc.
+ \expandafter
+ }\temp
+ \popthisfilestack
+}
+\def\filenamecatcodes{%
+ \catcode`\\=\other
+ \catcode`~=\other
+ \catcode`^=\other
+ \catcode`_=\other
+ \catcode`|=\other
+ \catcode`<=\other
+ \catcode`>=\other
+ \catcode`+=\other
+ \catcode`-=\other
+ \catcode`\`=\other
+ \catcode`\'=\other
+}
+
+\def\pushthisfilestack{%
+ \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
+}
+\def\pushthisfilestackX{%
+ \expandafter\pushthisfilestackY\thisfile\StackTerm
+}
+\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
+ \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
+}
+
+\def\popthisfilestack{\errthisfilestackempty}
+\def\errthisfilestackempty{\errmessage{Internal error:
+ the stack of filenames is empty.}}
+%
+\def\thisfile{}
+
+% @center line
+% outputs that line, centered.
+%
+\parseargdef\center{%
+ \ifhmode
+ \let\centersub\centerH
+ \else
+ \let\centersub\centerV
+ \fi
+ \centersub{\hfil \ignorespaces#1\unskip \hfil}%
+ \let\centersub\relax % don't let the definition persist, just in case
+}
+\def\centerH#1{{%
+ \hfil\break
+ \advance\hsize by -\leftskip
+ \advance\hsize by -\rightskip
+ \line{#1}%
+ \break
+}}
+%
+\newcount\centerpenalty
+\def\centerV#1{%
+ % The idea here is the same as in \startdefun, \cartouche, etc.: if
+ % @center is the first thing after a section heading, we need to wipe
+ % out the negative parskip inserted by \sectionheading, but still
+ % prevent a page break here.
+ \centerpenalty = \lastpenalty
+ \ifnum\centerpenalty>10000 \vskip\parskip \fi
+ \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi
+ \line{\kern\leftskip #1\kern\rightskip}%
+}
+
+% @sp n outputs n lines of vertical space
+%
+\parseargdef\sp{\vskip #1\baselineskip}
+
+% @comment ...line which is ignored...
+% @c is the same as @comment
+% @ignore ... @end ignore is another way to write a comment
+%
+\def\comment{\begingroup \catcode`\^^M=\other%
address@hidden \catcode`\{=\other \catcode`\}=\other%
+\commentxxx}
+{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
+%
+\let\c=\comment
+
+% @paragraphindent NCHARS
+% We'll use ems for NCHARS, close enough.
+% NCHARS can also be the word `asis' or `none'.
+% We cannot feasibly implement @paragraphindent asis, though.
+%
+\def\asisword{asis} % no translation, these are keywords
+\def\noneword{none}
+%
+\parseargdef\paragraphindent{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \defaultparindent = 0pt
+ \else
+ \defaultparindent = #1em
+ \fi
+ \fi
+ \parindent = \defaultparindent
+}
+
+% @exampleindent NCHARS
+% We'll use ems for NCHARS like @paragraphindent.
+% It seems @exampleindent asis isn't necessary, but
+% I preserve it to make it similar to @paragraphindent.
+\parseargdef\exampleindent{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \lispnarrowing = 0pt
+ \else
+ \lispnarrowing = #1em
+ \fi
+ \fi
+}
+
+% @firstparagraphindent WORD
+% If WORD is `none', then suppress indentation of the first paragraph
+% after a section heading. If WORD is `insert', then do indent at such
+% paragraphs.
+%
+% The paragraph indentation is suppressed or not by calling
+% \suppressfirstparagraphindent, which the sectioning commands do.
+% We switch the definition of this back and forth according to WORD.
+% By default, we suppress indentation.
+%
+\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
+\def\insertword{insert}
+%
+\parseargdef\firstparagraphindent{%
+ \def\temp{#1}%
+ \ifx\temp\noneword
+ \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
+ \else\ifx\temp\insertword
+ \let\suppressfirstparagraphindent = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @firstparagraphindent option `\temp'}%
+ \fi\fi
+}
+
+% Here is how we actually suppress indentation. Redefine \everypar to
+% \kern backwards by \parindent, and then reset itself to empty.
+%
+% We also make \indent itself not actually do anything until the next
+% paragraph.
+%
+\gdef\dosuppressfirstparagraphindent{%
+ \gdef\indent{%
+ \restorefirstparagraphindent
+ \indent
+ }%
+ \gdef\noindent{%
+ \restorefirstparagraphindent
+ \noindent
+ }%
+ \global\everypar = {%
+ \kern -\parindent
+ \restorefirstparagraphindent
+ }%
+}
+
+\gdef\restorefirstparagraphindent{%
+ \global \let \indent = \ptexindent
+ \global \let \noindent = \ptexnoindent
+ \global \everypar = {}%
+}
+
+
+% @refill is a no-op.
+\let\refill=\relax
+
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate (before @setfilename).
+%
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
+% @setfilename is done at the beginning of every texinfo file.
+% So open here the files we need to have open while reading the input.
+% This makes it possible to make a .fmt file for texinfo.
+\def\setfilename{%
+ \fixbackslash % Turn off hack to swallow `\input texinfo'.
+ \iflinks
+ \tryauxfile
+ % Open the new aux file. TeX will close it automatically at exit.
+ \immediate\openout\auxfile=\jobname.aux
+ \fi % \openindices needs to do some work in any case.
+ \openindices
+ \let\setfilename=\comment % Ignore extra @setfilename cmds.
+ %
+ % If texinfo.cnf is present on the system, read it.
+ % Useful for site-wide @afourpaper, etc.
+ \openin 1 texinfo.cnf
+ \ifeof 1 \else \input texinfo.cnf \fi
+ \closein 1
+ %
+ \comment % Ignore the actual filename.
+}
+
+% Called from \setfilename.
+%
+\def\openindices{%
+ \newindex{cp}%
+ \newcodeindex{fn}%
+ \newcodeindex{vr}%
+ \newcodeindex{tp}%
+ \newcodeindex{ky}%
+ \newcodeindex{pg}%
+}
+
+% @bye.
+\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+
+
+\message{pdf,}
+% adobe `portable' document format
+\newcount\tempnum
+\newcount\lnkcount
+\newtoks\filename
+\newcount\filenamelength
+\newcount\pgn
+\newtoks\toksA
+\newtoks\toksB
+\newtoks\toksC
+\newtoks\toksD
+\newbox\boxA
+\newcount\countA
+\newif\ifpdf
+\newif\ifpdfmakepagedest
+
+% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
+% can be set). So we test for \relax and 0 as well as being undefined.
+\ifx\pdfoutput\thisisundefined
+\else
+ \ifx\pdfoutput\relax
+ \else
+ \ifcase\pdfoutput
+ \else
+ \pdftrue
+ \fi
+ \fi
+\fi
+
+% PDF uses PostScript string constants for the names of xref targets,
+% for display in the outlines, and in other places. Thus, we have to
+% double any backslashes. Otherwise, a name like "\node" will be
+% interpreted as a newline (\n), followed by o, d, e. Not good.
+%
+% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
+% related messages. The final outcome is that it is up to the TeX user
+% to double the backslashes and otherwise make the string valid, so
+% that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to
+% do this reliably, so we use it.
+
+% #1 is a control sequence in which to do the replacements,
+% which we \xdef.
+\def\txiescapepdf#1{%
+ \ifx\pdfescapestring\thisisundefined
+ % No primitive available; should we give a warning or log?
+ % Many times it won't matter.
+ \else
+ % The expandable \pdfescapestring primitive escapes parentheses,
+ % backslashes, and other special chars.
+ \xdef#1{\pdfescapestring{#1}}%
+ \fi
+}
+
+\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
+with PDF output, and none of those formats could be found. (.eps cannot
+be supported due to the design of the PDF format; use regular TeX (DVI
+output) for that.)}
+
+\ifpdf
+ %
+ % Color manipulation macros based on pdfcolor.tex,
+ % except using rgb instead of cmyk; the latter is said to render as a
+ % very dark gray on-screen and a very dark halftone in print, instead
+ % of actual black.
+ \def\rgbDarkRed{0.50 0.09 0.12}
+ \def\rgbBlack{0 0 0}
+ %
+ % k sets the color for filling (usual text, etc.);
+ % K sets the color for stroking (thin rules, e.g., normal _'s).
+ \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}}
+ %
+ % Set color, and create a mark which defines \thiscolor accordingly,
+ % so that \makeheadline knows which color to restore.
+ \def\setcolor#1{%
+ \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
+ \domark
+ \pdfsetcolor{#1}%
+ }
+ %
+ \def\maincolor{\rgbBlack}
+ \pdfsetcolor{\maincolor}
+ \edef\thiscolor{\maincolor}
+ \def\lastcolordefs{}
+ %
+ \def\makefootline{%
+ \baselineskip24pt
+ \line{\pdfsetcolor{\maincolor}\the\footline}%
+ }
+ %
+ \def\makeheadline{%
+ \vbox to 0pt{%
+ \vskip-22.5pt
+ \line{%
+ \vbox to8.5pt{}%
+ % Extract \thiscolor definition from the marks.
+ \getcolormarks
+ % Typeset the headline with \maincolor, then restore the color.
+ \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
+ }%
+ \vss
+ }%
+ \nointerlineskip
+ }
+ %
+ %
+ \pdfcatalog{/PageMode /UseOutlines}
+ %
+ % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+ \def\dopdfimage#1#2#3{%
+ \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+ \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+ %
+ % pdftex (and the PDF format) support .pdf, .png, .jpg (among
+ % others). Let's try in that order, PDF first since if
+ % someone has a scalable image, presumably better to use that than a
+ % bitmap.
+ \let\pdfimgext=\empty
+ \begingroup
+ \openin 1 #1.pdf \ifeof 1
+ \openin 1 #1.PDF \ifeof 1
+ \openin 1 #1.png \ifeof 1
+ \openin 1 #1.jpg \ifeof 1
+ \openin 1 #1.jpeg \ifeof 1
+ \openin 1 #1.JPG \ifeof 1
+ \errhelp = \nopdfimagehelp
+ \errmessage{Could not find image file #1 for pdf}%
+ \else \gdef\pdfimgext{JPG}%
+ \fi
+ \else \gdef\pdfimgext{jpeg}%
+ \fi
+ \else \gdef\pdfimgext{jpg}%
+ \fi
+ \else \gdef\pdfimgext{png}%
+ \fi
+ \else \gdef\pdfimgext{PDF}%
+ \fi
+ \else \gdef\pdfimgext{pdf}%
+ \fi
+ \closein 1
+ \endgroup
+ %
+ % without \immediate, ancient pdftex seg faults when the same image is
+ % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.)
+ \ifnum\pdftexversion < 14
+ \immediate\pdfimage
+ \else
+ \immediate\pdfximage
+ \fi
+ \ifdim \wd0 >0pt width \pdfimagewidth \fi
+ \ifdim \wd2 >0pt height \pdfimageheight \fi
+ \ifnum\pdftexversion<13
+ #1.\pdfimgext
+ \else
+ {#1.\pdfimgext}%
+ \fi
+ \ifnum\pdftexversion < 14 \else
+ \pdfrefximage \pdflastximage
+ \fi}
+ %
+ \def\pdfmkdest#1{{%
+ % We have to set dummies so commands such as @code, and characters
+ % such as \, aren't expanded when present in a section title.
+ \indexnofonts
+ \turnoffactive
+ \makevalueexpandable
+ \def\pdfdestname{#1}%
+ \txiescapepdf\pdfdestname
+ \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
+ }}
+ %
+ % used to mark target names; must be expandable.
+ \def\pdfmkpgn#1{#1}
+ %
+ % by default, use a color that is dark enough to print on paper as
+ % nearly black, but still distinguishable for online viewing.
+ \def\urlcolor{\rgbDarkRed}
+ \def\linkcolor{\rgbDarkRed}
+ \def\endlink{\setcolor{\maincolor}\pdfendlink}
+ %
+ % Adding outlines to PDF; macros for calculating structure of outlines
+ % come from Petr Olsak
+ \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
+ \else \csname#1\endcsname \fi}
+ \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
+ \advance\tempnum by 1
+ \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
+ %
+ % #1 is the section text, which is what will be displayed in the
+ % outline by the pdf viewer. #2 is the pdf expression for the number
+ % of subentries (or empty, for subsubsections). #3 is the node text,
+ % which might be empty if this toc entry had no corresponding node.
+ % #4 is the page number
+ %
+ \def\dopdfoutline#1#2#3#4{%
+ % Generate a link to the node text if that exists; else, use the
+ % page number. We could generate a destination for the section
+ % text in the case where a section has no node, but it doesn't
+ % seem worth the trouble, since most documents are normally structured.
+ \edef\pdfoutlinedest{#3}%
+ \ifx\pdfoutlinedest\empty
+ \def\pdfoutlinedest{#4}%
+ \else
+ \txiescapepdf\pdfoutlinedest
+ \fi
+ %
+ % Also escape PDF chars in the display string.
+ \edef\pdfoutlinetext{#1}%
+ \txiescapepdf\pdfoutlinetext
+ %
+ \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
+ }
+ %
+ \def\pdfmakeoutlines{%
+ \begingroup
+ % Read toc silently, to get counts of subentries for \pdfoutline.
+ \def\partentry##1##2##3##4{}% ignore parts in the outlines
+ \def\numchapentry##1##2##3##4{%
+ \def\thischapnum{##2}%
+ \def\thissecnum{0}%
+ \def\thissubsecnum{0}%
+ }%
+ \def\numsecentry##1##2##3##4{%
+ \advancenumber{chap\thischapnum}%
+ \def\thissecnum{##2}%
+ \def\thissubsecnum{0}%
+ }%
+ \def\numsubsecentry##1##2##3##4{%
+ \advancenumber{sec\thissecnum}%
+ \def\thissubsecnum{##2}%
+ }%
+ \def\numsubsubsecentry##1##2##3##4{%
+ \advancenumber{subsec\thissubsecnum}%
+ }%
+ \def\thischapnum{0}%
+ \def\thissecnum{0}%
+ \def\thissubsecnum{0}%
+ %
+ % use \def rather than \let here because we redefine \chapentry et
+ % al. a second time, below.
+ \def\appentry{\numchapentry}%
+ \def\appsecentry{\numsecentry}%
+ \def\appsubsecentry{\numsubsecentry}%
+ \def\appsubsubsecentry{\numsubsubsecentry}%
+ \def\unnchapentry{\numchapentry}%
+ \def\unnsecentry{\numsecentry}%
+ \def\unnsubsecentry{\numsubsecentry}%
+ \def\unnsubsubsecentry{\numsubsubsecentry}%
+ \readdatafile{toc}%
+ %
+ % Read toc second time, this time actually producing the outlines.
+ % The `-' means take the \expnumber as the absolute number of
+ % subentries, which we calculated on our first read of the .toc above.
+ %
+ % We use the node names as the destinations.
+ \def\numchapentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
+ \def\numsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
+ \def\numsubsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
+ \def\numsubsubsecentry##1##2##3##4{% count is always zero
+ \dopdfoutline{##1}{}{##3}{##4}}%
+ %
+ % PDF outlines are displayed using system fonts, instead of
+ % document fonts. Therefore we cannot use special characters,
+ % since the encoding is unknown. For example, the eogonek from
+ % Latin 2 (0xea) gets translated to a | character. Info from
+ % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
+ %
+ % TODO this right, we have to translate 8-bit characters to
+ % their "best" equivalent, based on the @documentencoding. Too
+ % much work for too little return. Just use the ASCII equivalents
+ % we use for the index sort strings.
+ %
+ \indexnofonts
+ \setupdatafile
+ % We can have normal brace characters in the PDF outlines, unlike
+ % Texinfo index files. So set that up.
+ \def\{{\lbracecharliteral}%
+ \def\}{\rbracecharliteral}%
+ \catcode`\\=\active \otherbackslash
+ \input \tocreadfilename
+ \endgroup
+ }
+ {\catcode`[=1 \catcode`]=2
+ \catcode`{=\other \catcode`}=\other
+ \gdef\lbracecharliteral[{]%
+ \gdef\rbracecharliteral[}]%
+ ]
+ %
+ \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+ \ifx\PP\D\let\nextsp\relax
+ \else\let\nextsp\skipspaces
+ \addtokens{\filename}{\PP}%
+ \advance\filenamelength by 1
+ \fi
+ \nextsp}
+ \def\getfilename#1{%
+ \filenamelength=0
+ % If we don't expand the argument now, \skipspaces will get
+ % snagged on things like "@value{foo}".
+ \edef\temp{#1}%
+ \expandafter\skipspaces\temp|\relax
+ }
+ \ifnum\pdftexversion < 14
+ \let \startlink \pdfannotlink
+ \else
+ \let \startlink \pdfstartlink
+ \fi
+ % make a live url in pdf output.
+ \def\pdfurl#1{%
+ \begingroup
+ % it seems we really need yet another set of dummies; have not
+ % tried to figure out what each command should do in the context
+ % of @url. for now, just make @/ a no-op, that's the only one
+ % people have actually reported a problem with.
+ %
+ \normalturnoffactive
+ address@hidden@}%
+ \let\/=\empty
+ \makevalueexpandable
+ % do we want to go so far as to use \indexnofonts instead of just
+ % special-casing \var here?
+ \def\var##1{##1}%
+ %
+ \leavevmode\setcolor{\urlcolor}%
+ \startlink attr{/Border [0 0 0]}%
+ user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
+ \endgroup}
+ \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+ \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+ \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+ \def\maketoks{%
+ \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+ \ifx\first0\adn0
+ \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+ \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+ \else
+ \ifnum0=\countA\else\makelink\fi
+ \ifx\first.\let\next=\done\else
+ \let\next=\maketoks
+ \addtokens{\toksB}{\the\toksD}
+ \ifx\first,\addtokens{\toksB}{\space}\fi
+ \fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \next}
+ \def\makelink{\addtokens{\toksB}%
+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+ \def\pdflink#1{%
+ \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
+ \setcolor{\linkcolor}#1\endlink}
+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\else
+ % non-pdf mode
+ \let\pdfmkdest = \gobble
+ \let\pdfurl = \gobble
+ \let\endlink = \relax
+ \let\setcolor = \gobble
+ \let\pdfsetcolor = \gobble
+ \let\pdfmakeoutlines = \relax
+\fi % \ifx\pdfoutput
+
+
+\message{fonts,}
+
+% Change the current font style to #1, remembering it in \curfontstyle.
+% For now, we do not accumulate font styles: @address@hidden prints foo in
+% italics, not bold italics.
+%
+\def\setfontstyle#1{%
+ \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
+ \csname ten#1\endcsname % change the current font
+}
+
+% Select #1 fonts with the current style.
+%
+\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
+
+\def\rm{\fam=0 \setfontstyle{rm}}
+\def\it{\fam=\itfam \setfontstyle{it}}
+\def\sl{\fam=\slfam \setfontstyle{sl}}
+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
+\def\tt{\fam=\ttfam \setfontstyle{tt}}
+
+% Unfortunately, we have to override this for titles and the like, since
+% in those cases "rm" is bold. Sigh.
+\def\rmisbold{\rm\def\curfontstyle{bf}}
+
+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
+% So we set up a \sf.
+\newfam\sffam
+\def\sf{\fam=\sffam \setfontstyle{sf}}
+\let\li = \sf % Sometimes we call it \li, not \sf.
+
+% We don't need math for this font style.
+\def\ttsl{\setfontstyle{ttsl}}
+
+
+% Set the baselineskip to #1, and the lineskip and strut size
+% correspondingly. There is no deep meaning behind these magic numbers
+% used as factors; they just match (closely enough) what Knuth defined.
+%
+\def\lineskipfactor{.08333}
+\def\strutheightpercent{.70833}
+\def\strutdepthpercent {.29167}
+%
+% can get a sort of poor man's double spacing by redefining this.
+\def\baselinefactor{1}
+%
+\newdimen\textleading
+\def\setleading#1{%
+ \dimen0 = #1\relax
+ \normalbaselineskip = \baselinefactor\dimen0
+ \normallineskip = \lineskipfactor\normalbaselineskip
+ \normalbaselines
+ \setbox\strutbox =\hbox{%
+ \vrule width0pt height\strutheightpercent\baselineskip
+ depth \strutdepthpercent \baselineskip
+ }%
+}
+
+% PDF CMaps. See also LaTeX's t1.cmap.
+%
+% do nothing with this by default.
+\expandafter\let\csname cmapOT1\endcsname\gobble
+\expandafter\let\csname cmapOT1IT\endcsname\gobble
+\expandafter\let\csname cmapOT1TT\endcsname\gobble
+
+% if we are producing pdf, and we have \pdffontattr, then define cmaps.
+% (\pdffontattr was introduced many years ago, but people still run
+% older pdftex's; it's easy to conditionalize, so we do.)
+\ifpdf \ifx\pdffontattr\thisisundefined \else
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1-0)
+%%Title: (TeX-OT1-0 TeX OT1 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<23> <26> <0023>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+40 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+%
+% \cmapOT1IT
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1IT-0)
+%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1IT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1IT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+8 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<25> <26> <0025>
+<28> <3B> <0028>
+<3F> <5B> <003F>
+<5D> <5E> <005D>
+<61> <7A> <0061>
+<7B> <7C> <2013>
+endbfrange
+42 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <00660066>
+<0C> <00660069>
+<0D> <0066006C>
+<0E> <006600660069>
+<0F> <00660066006C>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<21> <0021>
+<22> <201D>
+<23> <0023>
+<24> <00A3>
+<27> <2019>
+<3C> <00A1>
+<3D> <003D>
+<3E> <00BF>
+<5C> <201C>
+<5F> <02D9>
+<60> <2018>
+<7D> <02DD>
+<7E> <007E>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1IT\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+%
+% \cmapOT1TT
+ \begingroup
+ \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
+ \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
+%%DocumentNeededResources: ProcSet (CIDInit)
+%%IncludeResource: ProcSet (CIDInit)
+%%BeginResource: CMap (TeX-OT1TT-0)
+%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
+%%Version: 1.000
+%%EndComments
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (TeX)
+/Ordering (OT1TT)
+/Supplement 0
+>> def
+/CMapName /TeX-OT1TT-0 def
+/CMapType 2 def
+1 begincodespacerange
+<00> <7F>
+endcodespacerange
+5 beginbfrange
+<00> <01> <0393>
+<09> <0A> <03A8>
+<21> <26> <0021>
+<28> <5F> <0028>
+<61> <7E> <0061>
+endbfrange
+32 beginbfchar
+<02> <0398>
+<03> <039B>
+<04> <039E>
+<05> <03A0>
+<06> <03A3>
+<07> <03D2>
+<08> <03A6>
+<0B> <2191>
+<0C> <2193>
+<0D> <0027>
+<0E> <00A1>
+<0F> <00BF>
+<10> <0131>
+<11> <0237>
+<12> <0060>
+<13> <00B4>
+<14> <02C7>
+<15> <02D8>
+<16> <00AF>
+<17> <02DA>
+<18> <00B8>
+<19> <00DF>
+<1A> <00E6>
+<1B> <0153>
+<1C> <00F8>
+<1D> <00C6>
+<1E> <0152>
+<1F> <00D8>
+<20> <2423>
+<27> <2019>
+<60> <2018>
+<7F> <00A8>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+%%EndResource
+%%EOF
+ }\endgroup
+ \expandafter\edef\csname cmapOT1TT\endcsname#1{%
+ \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
+ }%
+\fi\fi
+
+
+% Set the font macro #1 to the font named \fontprefix#2.
+% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
+% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit).
+% Example:
+% #1 = \textrm
+% #2 = \rmshape
+% #3 = 10
+% #4 = \mainmagstep
+% #5 = OT1
+%
+\def\setfont#1#2#3#4#5{%
+ \font#1=\fontprefix#2#3 scaled #4
+ \csname cmap#5\endcsname#1%
+}
+% This is what gets called when #5 of \setfont is empty.
+\let\cmap\gobble
+%
+% (end of cmaps)
+
+% Use cm as the default font prefix.
+% To specify the font prefix, you must define \fontprefix
+% before you read in texinfo.tex.
+\ifx\fontprefix\thisisundefined
+\def\fontprefix{cm}
+\fi
+% Support font families that don't use the same naming scheme as CM.
+\def\rmshape{r}
+\def\rmbshape{bx} % where the normal face is bold
+\def\bfshape{b}
+\def\bxshape{bx}
+\def\ttshape{tt}
+\def\ttbshape{tt}
+\def\ttslshape{sltt}
+\def\itshape{ti}
+\def\itbshape{bxti}
+\def\slshape{sl}
+\def\slbshape{bxsl}
+\def\sfshape{ss}
+\def\sfbshape{ss}
+\def\scshape{csc}
+\def\scbshape{csc}
+
+% Definitions for a main text size of 11pt. (The default in Texinfo.)
+%
+\def\definetextfontsizexi{%
+% Text fonts (11.2pt, magstep1).
+\def\textnominalsize{11pt}
+\edef\mainmagstep{\magstephalf}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1095}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstep1}{OT1}
+\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
+\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\titleecsize{2074}
+
+% Chapter (and unnumbered) fonts (17.28pt).
+\def\chapnominalsize{17pt}
+\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
+\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
+\setfont\chapsf\sfbshape{17}{1000}{OT1}
+\let\chapbf=\chaprm
+\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
+\font\chapi=cmmi12 scaled \magstep2
+\font\chapsy=cmsy10 scaled \magstep3
+\def\chapecsize{1728}
+
+% Section fonts (14.4pt).
+\def\secnominalsize{14pt}
+\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
+\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep2}{OT1}
+\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep2}{OT1}
+\font\seci=cmmi12 scaled \magstep1
+\font\secsy=cmsy10 scaled \magstep2
+\def\sececsize{1440}
+
+% Subsection fonts (13.15pt).
+\def\ssecnominalsize{13pt}
+\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
+\setfont\ssecit\itbshape{10}{1315}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1315}{OT1}
+\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
+\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1315}{OT1}
+\font\sseci=cmmi12 scaled \magstephalf
+\font\ssecsy=cmsy10 scaled 1315
+\def\ssececsize{1200}
+
+% Reduced fonts for @acro in text (10pt).
+\def\reducednominalsize{10pt}
+\setfont\reducedrm\rmshape{10}{1000}{OT1}
+\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{1000}{OT1}
+\setfont\reducedit\itshape{10}{1000}{OT1IT}
+\setfont\reducedsl\slshape{10}{1000}{OT1}
+\setfont\reducedsf\sfshape{10}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{1000}{OT1}
+\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
+\font\reducedi=cmmi10
+\font\reducedsy=cmsy10
+\def\reducedecsize{1000}
+
+\textleading = 13.2pt % line spacing for 11pt CM
+\textfonts % reset the current fonts
+\rm
+} % end of 11pt text font size definitions, \definetextfontsizexi
+
+
+% Definitions to make the main text be 10pt Computer Modern, with
+% section, chapter, etc., sizes following suit. This is for the GNU
+% Press printing of the Emacs 22 manual. Maybe other manuals in the
+% future. Used with @smallbook, which sets the leading to 12pt.
+%
+\def\definetextfontsizex{%
+% Text fonts (10pt).
+\def\textnominalsize{10pt}
+\edef\mainmagstep{1000}
+\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
+\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
+\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
+\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
+\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
+\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
+\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+\def\textecsize{1000}
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
+\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
+\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}{OT1}
+\setfont\smalltt\ttshape{9}{1000}{OT1TT}
+\setfont\smallbf\bfshape{10}{900}{OT1}
+\setfont\smallit\itshape{9}{1000}{OT1IT}
+\setfont\smallsl\slshape{9}{1000}{OT1}
+\setfont\smallsf\sfshape{9}{1000}{OT1}
+\setfont\smallsc\scshape{10}{900}{OT1}
+\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+\def\smallecsize{0900}
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}{OT1}
+\setfont\smallertt\ttshape{8}{1000}{OT1TT}
+\setfont\smallerbf\bfshape{10}{800}{OT1}
+\setfont\smallerit\itshape{8}{1000}{OT1IT}
+\setfont\smallersl\slshape{8}{1000}{OT1}
+\setfont\smallersf\sfshape{8}{1000}{OT1}
+\setfont\smallersc\scshape{10}{800}{OT1}
+\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+\def\smallerecsize{0800}
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
+\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
+\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
+\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
+\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
+\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\titleecsize{2074}
+
+% Chapter fonts (14.4pt).
+\def\chapnominalsize{14pt}
+\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
+\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
+\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
+\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
+\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
+\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
+\let\chapbf\chaprm
+\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
+\font\chapi=cmmi12 scaled \magstep1
+\font\chapsy=cmsy10 scaled \magstep2
+\def\chapecsize{1440}
+
+% Section fonts (12pt).
+\def\secnominalsize{12pt}
+\setfont\secrm\rmbshape{12}{1000}{OT1}
+\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
+\setfont\secsl\slbshape{10}{\magstep1}{OT1}
+\setfont\sectt\ttbshape{12}{1000}{OT1TT}
+\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
+\setfont\secsf\sfbshape{12}{1000}{OT1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep1}{OT1}
+\font\seci=cmmi12
+\font\secsy=cmsy10 scaled \magstep1
+\def\sececsize{1200}
+
+% Subsection fonts (10pt).
+\def\ssecnominalsize{10pt}
+\setfont\ssecrm\rmbshape{10}{1000}{OT1}
+\setfont\ssecit\itbshape{10}{1000}{OT1IT}
+\setfont\ssecsl\slbshape{10}{1000}{OT1}
+\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
+\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
+\setfont\ssecsf\sfbshape{10}{1000}{OT1}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1000}{OT1}
+\font\sseci=cmmi10
+\font\ssecsy=cmsy10
+\def\ssececsize{1000}
+
+% Reduced fonts for @acro in text (9pt).
+\def\reducednominalsize{9pt}
+\setfont\reducedrm\rmshape{9}{1000}{OT1}
+\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
+\setfont\reducedbf\bfshape{10}{900}{OT1}
+\setfont\reducedit\itshape{9}{1000}{OT1IT}
+\setfont\reducedsl\slshape{9}{1000}{OT1}
+\setfont\reducedsf\sfshape{9}{1000}{OT1}
+\setfont\reducedsc\scshape{10}{900}{OT1}
+\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
+\font\reducedi=cmmi9
+\font\reducedsy=cmsy9
+\def\reducedecsize{0900}
+
+\divide\parskip by 2 % reduce space between paragraphs
+\textleading = 12pt % line spacing for 10pt CM
+\textfonts % reset the current fonts
+\rm
+} % end of 10pt text font size definitions, \definetextfontsizex
+
+
+% We provide the user-level command
+% @fonttextsize 10
+% (or 11) to redefine the text font size. pt is assumed.
+%
+\def\xiword{11}
+\def\xword{10}
+\def\xwordpt{10pt}
+%
+\parseargdef\fonttextsize{%
+ \def\textsizearg{#1}%
+ %\wlog{doing @fonttextsize \textsizearg}%
+ %
+ % Set \globaldefs so that documents can use this inside @tex, since
+ % makeinfo 4.8 does not support it, but we need it nonetheless.
+ %
+ \begingroup \globaldefs=1
+ \ifx\textsizearg\xword \definetextfontsizex
+ \else \ifx\textsizearg\xiword \definetextfontsizexi
+ \else
+ \errhelp=\EMsimple
+ address@hidden only supports `10' or `11', not `\textsizearg'}
+ \fi\fi
+ \endgroup
+}
+
+
+% In order for the font changes to affect most math symbols and letters,
+% we have to define the \textfont of the standard families. Since
+% texinfo doesn't allow for producing subscripts and superscripts except
+% in the main text, we don't bother to reset \scriptfont and
+% \scriptscriptfont (which would also require loading a lot more fonts).
+%
+\def\resetmathfonts{%
+ \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
+ \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
+ \textfont\ttfam=\tentt \textfont\sffam=\tensf
+}
+
+% The font-changing commands redefine the meanings of \tenSTYLE, instead
+% of just \STYLE. We do this because \STYLE needs to also set the
+% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire
+% \tenSTYLE to set the current font.
+%
+% Each font-changing command also sets the names \lsize (one size lower)
+% and \lllsize (three sizes lower). These relative commands are used in
+% the LaTeX logo and acronyms.
+%
+% This all needs generalizing, badly.
+%
+\def\textfonts{%
+ \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
+ \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
+ \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
+ \let\tenttsl=\textttsl
+ \def\curfontsize{text}%
+ \def\lsize{reduced}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{\textleading}}
+\def\titlefonts{%
+ \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
+ \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
+ \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
+ \let\tenttsl=\titlettsl
+ \def\curfontsize{title}%
+ \def\lsize{chap}\def\lllsize{subsec}%
+ \resetmathfonts \setleading{27pt}}
+\def\titlefont#1{{\titlefonts\rmisbold #1}}
+\def\chapfonts{%
+ \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
+ \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
+ \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
+ \let\tenttsl=\chapttsl
+ \def\curfontsize{chap}%
+ \def\lsize{sec}\def\lllsize{text}%
+ \resetmathfonts \setleading{19pt}}
+\def\secfonts{%
+ \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
+ \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
+ \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
+ \let\tenttsl=\secttsl
+ \def\curfontsize{sec}%
+ \def\lsize{subsec}\def\lllsize{reduced}%
+ \resetmathfonts \setleading{16pt}}
+\def\subsecfonts{%
+ \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
+ \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
+ \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
+ \let\tenttsl=\ssecttsl
+ \def\curfontsize{ssec}%
+ \def\lsize{text}\def\lllsize{small}%
+ \resetmathfonts \setleading{15pt}}
+\let\subsubsecfonts = \subsecfonts
+\def\reducedfonts{%
+ \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
+ \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
+ \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
+ \let\tenttsl=\reducedttsl
+ \def\curfontsize{reduced}%
+ \def\lsize{small}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{10.5pt}}
+\def\smallfonts{%
+ \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
+ \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
+ \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
+ \let\tenttsl=\smallttsl
+ \def\curfontsize{small}%
+ \def\lsize{smaller}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{10.5pt}}
+\def\smallerfonts{%
+ \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
+ \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
+ \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
+ \let\tenttsl=\smallerttsl
+ \def\curfontsize{smaller}%
+ \def\lsize{smaller}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{9.5pt}}
+
+% Fonts for short table of contents.
+\setfont\shortcontrm\rmshape{12}{1000}{OT1}
+\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12
+\setfont\shortcontsl\slshape{12}{1000}{OT1}
+\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
+
+% Define these just so they can be easily changed for other fonts.
+\def\angleleft{$\langle$}
+\def\angleright{$\rangle$}
+
+% Set the fonts to use with the @small... environments.
+\let\smallexamplefonts = \smallfonts
+
+% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample
+% can fit this many characters:
+% 8.5x11=86 smallbook=72 a4=90 a5=69
+% If we use \scriptfonts (8pt), then we can fit this many characters:
+% 8.5x11=90+ smallbook=80 a4=90+ a5=77
+% For me, subjectively, the few extra characters that fit aren't worth
+% the additional smallness of 8pt. So I'm making the default 9pt.
+%
+% By the way, for comparison, here's what fits with @example (10pt):
+% 8.5x11=71 smallbook=60 a4=75 a5=58
+% --karl, 24jan03.
+
+% Set up the default fonts, so we can use them for creating boxes.
+%
+\definetextfontsizexi
+
+
+\message{markup,}
+
+% Check if we are currently using a typewriter font. Since all the
+% Computer Modern typewriter fonts have zero interword stretch (and
+% shrink), and it is reasonable to expect all typewriter fonts to have
+% this property, we can check that font parameter.
+%
+\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
+
+% Markup style infrastructure. \defmarkupstylesetup\INITMACRO will
+% define and register \INITMACRO to be called on markup style changes.
+% \INITMACRO can check \currentmarkupstyle for the innermost
+% style and the set of \ifmarkupSTYLE switches for all styles
+% currently in effect.
+\newif\ifmarkupvar
+\newif\ifmarkupsamp
+\newif\ifmarkupkey
+%\newif\ifmarkupfile % @file == @samp.
+%\newif\ifmarkupoption % @option == @samp.
+\newif\ifmarkupcode
+\newif\ifmarkupkbd
+%\newif\ifmarkupenv % @env == @code.
+%\newif\ifmarkupcommand % @command == @code.
+\newif\ifmarkuptex % @tex (and part of @math, for now).
+\newif\ifmarkupexample
+\newif\ifmarkupverb
+\newif\ifmarkupverbatim
+
+\let\currentmarkupstyle\empty
+
+\def\setupmarkupstyle#1{%
+ \csname markup#1true\endcsname
+ \def\currentmarkupstyle{#1}%
+ \markupstylesetup
+}
+
+\let\markupstylesetup\empty
+
+\def\defmarkupstylesetup#1{%
+ \expandafter\def\expandafter\markupstylesetup
+ \expandafter{\markupstylesetup #1}%
+ \def#1%
+}
+
+% Markup style setup for left and right quotes.
+\defmarkupstylesetup\markupsetuplq{%
+ \expandafter\let\expandafter \temp
+ \csname markupsetuplq\currentmarkupstyle\endcsname
+ \ifx\temp\relax \markupsetuplqdefault \else \temp \fi
+}
+
+\defmarkupstylesetup\markupsetuprq{%
+ \expandafter\let\expandafter \temp
+ \csname markupsetuprq\currentmarkupstyle\endcsname
+ \ifx\temp\relax \markupsetuprqdefault \else \temp \fi
+}
+
+{
+\catcode`\'=\active
+\catcode`\`=\active
+
+\gdef\markupsetuplqdefault{\let`\lq}
+\gdef\markupsetuprqdefault{\let'\rq}
+
+\gdef\markupsetcodequoteleft{\let`\codequoteleft}
+\gdef\markupsetcodequoteright{\let'\codequoteright}
+}
+
+\let\markupsetuplqcode \markupsetcodequoteleft
+\let\markupsetuprqcode \markupsetcodequoteright
+%
+\let\markupsetuplqexample \markupsetcodequoteleft
+\let\markupsetuprqexample \markupsetcodequoteright
+%
+\let\markupsetuplqkbd \markupsetcodequoteleft
+\let\markupsetuprqkbd \markupsetcodequoteright
+%
+\let\markupsetuplqsamp \markupsetcodequoteleft
+\let\markupsetuprqsamp \markupsetcodequoteright
+%
+\let\markupsetuplqverb \markupsetcodequoteleft
+\let\markupsetuprqverb \markupsetcodequoteright
+%
+\let\markupsetuplqverbatim \markupsetcodequoteleft
+\let\markupsetuprqverbatim \markupsetcodequoteright
+
+% Allow an option to not use regular directed right quote/apostrophe
+% (char 0x27), but instead the undirected quote from cmtt (char 0x0d).
+% The undirected quote is ugly, so don't make it the default, but it
+% works for pasting with more pdf viewers (at least evince), the
+% lilypond developers report. xpdf does work with the regular 0x27.
+%
+\def\codequoteright{%
+ \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
+ \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
+ '%
+ \else \char'15 \fi
+ \else \char'15 \fi
+}
+%
+% and a similar option for the left quote char vs. a grave accent.
+% Modern fonts display ASCII 0x60 as a grave accent, so some people like
+% the code environments to do likewise.
+%
+\def\codequoteleft{%
+ \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
+ \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
+ % [Knuth] pp. 380,381,391
+ % \relax disables Spanish ligatures ?` and !` of \tt font.
+ \relax`%
+ \else \char'22 \fi
+ \else \char'22 \fi
+}
+
+% Commands to set the quote options.
+%
+\parseargdef\codequoteundirected{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxicodequoteundirected\endcsname
+ = t%
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxicodequoteundirected\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}%
+ \fi\fi
+}
+%
+\parseargdef\codequotebacktick{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxicodequotebacktick\endcsname
+ = t%
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxicodequotebacktick\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}%
+ \fi\fi
+}
+
+% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
+\def\noligaturesquoteleft{\relax\lq}
+
+% Count depth in font-changes, for error checks
+\newcount\fontdepth \fontdepth=0
+
+% Font commands.
+
+% #1 is the font command (\sl or \it), #2 is the text to slant.
+% If we are in a monospaced environment, however, 1) always use \ttsl,
+% and 2) do not add an italic correction.
+\def\dosmartslant#1#2{%
+ \ifusingtt
+ {{\ttsl #2}\let\next=\relax}%
+ {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}%
+ \next
+}
+\def\smartslanted{\dosmartslant\sl}
+\def\smartitalic{\dosmartslant\it}
+
+% Output an italic correction unless \next (presumed to be the following
+% character) is such as not to need one.
+\def\smartitaliccorrection{%
+ \ifx\next,%
+ \else\ifx\next-%
+ \else\ifx\next.%
+ \else\ptexslash
+ \fi\fi\fi
+ \aftersmartic
+}
+
+% Unconditional use \ttsl, and no ic. @var is set to this for defuns.
+\def\ttslanted#1{{\ttsl #1}}
+
+% @cite is like \smartslanted except unconditionally use \sl. We never want
+% ttsl for book titles, do we?
+\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection}
+
+\def\aftersmartic{}
+\def\var#1{%
+ \let\saveaftersmartic = \aftersmartic
+ \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}%
+ \smartslanted{#1}%
+}
+
+\let\i=\smartitalic
+\let\slanted=\smartslanted
+\let\dfn=\smartslanted
+\let\emph=\smartitalic
+
+% Explicit font changes: @r, @sc, undocumented @ii.
+\def\r#1{{\rm #1}} % roman font
+\def\sc#1{{\smallcaps#1}} % smallcaps font
+\def\ii#1{{\it #1}} % italic font
+
+% @b, explicit bold. Also @strong.
+\def\b#1{{\bf #1}}
+\let\strong=\b
+
+% @sansserif, explicit sans.
+\def\sansserif#1{{\sf #1}}
+
+% We can't just use \exhyphenpenalty, because that only has effect at
+% the end of a paragraph. Restore normal hyphenation at the end of the
+% group within which \nohyphenation is presumably called.
+%
+\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation}
+\def\restorehyphenation{\hyphenchar\font = `- }
+
+% Set sfcode to normal for the chars that usually have another value.
+% Can't use plain's \frenchspacing because it uses the `\x notation, and
+% sometimes \x has an active definition that messes things up.
+%
address@hidden
+ \def\plainfrenchspacing{%
+ \sfcode\dotChar address@hidden address@hidden address@hidden
+ address@hidden \sfcode\semiChar address@hidden \sfcode\commaChar
address@hidden
+ \def\endofsentencespacefactor{1000}% for @. and friends
+ }
+ \def\plainnonfrenchspacing{%
+ \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
+ \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
+ \def\endofsentencespacefactor{3000}% for @. and friends
+ }
address@hidden
+\def\endofsentencespacefactor{3000}% default
+
+% @t, explicit typewriter.
+\def\t#1{%
+ {\tt \rawbackslash \plainfrenchspacing #1}%
+ \null
+}
+
+% @samp.
+\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
+
+% @indicateurl is \samp, that is, with quotes.
+\let\indicateurl=\samp
+
+% @code (and similar) prints in typewriter, but with spaces the same
+% size as normal in the surrounding text, without hyphenation, etc.
+% This is a subroutine for that.
+\def\tclose#1{%
+ {%
+ % Change normal interword space to be same as for the current font.
+ \spaceskip = \fontdimen2\font
+ %
+ % Switch to typewriter.
+ \tt
+ %
+ % But `\ ' produces the large typewriter interword space.
+ \def\ {{\spaceskip = 0pt{} }}%
+ %
+ % Turn off hyphenation.
+ \nohyphenation
+ %
+ \rawbackslash
+ \plainfrenchspacing
+ #1%
+ }%
+ \null % reset spacefactor to 1000
+}
+
+% We *must* turn on hyphenation at `-' and `_' in @code.
+% Otherwise, it is too hard to avoid overfull hboxes
+% in the Emacs manual, the Library manual, etc.
+%
+% Unfortunately, TeX uses one parameter (\hyphenchar) to control
+% both hyphenation at - and hyphenation within words.
+% We must therefore turn them both off (\tclose does that)
+% and arrange explicitly to hyphenate at a dash.
+% -- rms.
+{
+ \catcode`\-=\active \catcode`\_=\active
+ \catcode`\'=\active \catcode`\`=\active
+ \global\let'=\rq \global\let`=\lq % default definitions
+ %
+ \global\def\code{\begingroup
+ \setupmarkupstyle{code}%
+ % The following should really be moved into \setupmarkupstyle handlers.
+ \catcode\dashChar=\active \catcode\underChar=\active
+ \ifallowcodebreaks
+ \let-\codedash
+ \let_\codeunder
+ \else
+ \let-\normaldash
+ \let_\realunder
+ \fi
+ \codex
+ }
+}
+
+\def\codex #1{\tclose{#1}\endgroup}
+
+\def\normaldash{-}
+\def\codedash{-\discretionary{}{}{}}
+\def\codeunder{%
+ % this is all so @address@hidden can work. In math mode, _
+ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
+ % will therefore expand the active definition of _, which is us
+ % (inside @code that is), therefore an endless loop.
+ \ifusingtt{\ifmmode
+ \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
+ \else\normalunderscore \fi
+ \discretionary{}{}{}}%
+ {\_}%
+}
+
+% An additional complication: the above will allow breaks after, e.g.,
+% each of the four underscores in __typeof__. This is bad.
+% @allowcodebreaks provides a document-level way to turn breaking at -
+% and _ on and off.
+%
+\newif\ifallowcodebreaks \allowcodebreakstrue
+
+\def\keywordtrue{true}
+\def\keywordfalse{false}
+
+\parseargdef\allowcodebreaks{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\keywordtrue
+ \allowcodebreakstrue
+ \else\ifx\txiarg\keywordfalse
+ \allowcodebreaksfalse
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}%
+ \fi\fi
+}
+
+% For @command, @env, @file, @option quotes seem unnecessary,
+% so use \code rather than \samp.
+\let\command=\code
+\let\env=\code
+\let\file=\code
+\let\option=\code
+
+% @uref (abbreviation for `urlref') takes an optional (comma-separated)
+% second argument specifying the text to display and an optional third
+% arg as text to display instead of (rather than in addition to) the url
+% itself. First (mandatory) arg is the url.
+% (This \urefnobreak definition isn't used now, leaving it for a while
+% for comparison.)
+\def\urefnobreak#1{\dourefnobreak #1,,,\finish}
+\def\dourefnobreak#1,#2,#3,#4\finish{\begingroup
+ \unsepspaces
+ \pdfurl{#1}%
+ \setbox0 = \hbox{\ignorespaces #3}%
+ \ifdim\wd0 > 0pt
+ \unhbox0 % third arg given, show only that
+ \else
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \ifpdf
+ \unhbox0 % PDF: 2nd arg given, show only it
+ \else
+ \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
+ \fi
+ \else
+ \code{#1}% only url given, so show it
+ \fi
+ \fi
+ \endlink
+\endgroup}
+
+% This \urefbreak definition is the active one.
+\def\urefbreak{\begingroup \urefcatcodes \dourefbreak}
+\let\uref=\urefbreak
+\def\dourefbreak#1{\urefbreakfinish #1,,,\finish}
+\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example
+ \unsepspaces
+ \pdfurl{#1}%
+ \setbox0 = \hbox{\ignorespaces #3}%
+ \ifdim\wd0 > 0pt
+ \unhbox0 % third arg given, show only that
+ \else
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \ifpdf
+ \unhbox0 % PDF: 2nd arg given, show only it
+ \else
+ \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url
+ \fi
+ \else
+ \urefcode{#1}% only url given, so show it
+ \fi
+ \fi
+ \endlink
+\endgroup}
+
+% Allow line breaks around only a few characters (only).
+\def\urefcatcodes{%
+ \catcode\ampChar=\active \catcode\dotChar=\active
+ \catcode\hashChar=\active \catcode\questChar=\active
+ \catcode\slashChar=\active
+}
+{
+ \urefcatcodes
+ %
+ \global\def\urefcode{\begingroup
+ \setupmarkupstyle{code}%
+ \urefcatcodes
+ \let&\urefcodeamp
+ \let.\urefcodedot
+ \let#\urefcodehash
+ \let?\urefcodequest
+ \let/\urefcodeslash
+ \codex
+ }
+ %
+ % By default, they are just regular characters.
+ \global\def&{\normalamp}
+ \global\def.{\normaldot}
+ \global\def#{\normalhash}
+ \global\def?{\normalquest}
+ \global\def/{\normalslash}
+}
+
+% we put a little stretch before and after the breakable chars, to help
+% line breaking of long url's. The unequal skips make look better in
+% cmtt at least, especially for dots.
+\def\urefprestretch{\urefprebreak \hskip0pt plus.13em }
+\def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em }
+%
+\def\urefcodeamp{\urefprestretch \&\urefpoststretch}
+\def\urefcodedot{\urefprestretch .\urefpoststretch}
+\def\urefcodehash{\urefprestretch \#\urefpoststretch}
+\def\urefcodequest{\urefprestretch ?\urefpoststretch}
+\def\urefcodeslash{\futurelet\next\urefcodeslashfinish}
+{
+ \catcode`\/=\active
+ \global\def\urefcodeslashfinish{%
+ \urefprestretch \slashChar
+ % Allow line break only after the final / in a sequence of
+ % slashes, to avoid line break between the slashes in http://.
+ \ifx\next/\else \urefpoststretch \fi
+ }
+}
+
+% One more complication: by default we'll break after the special
+% characters, but some people like to break before the special chars, so
+% allow that. Also allow no breaking at all, for manual control.
+%
+\parseargdef\urefbreakstyle{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\wordnone
+ \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak}
+ \else\ifx\txiarg\wordbefore
+ \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak}
+ \else\ifx\txiarg\wordafter
+ \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak}
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @urefbreakstyle setting `\txiarg'}%
+ \fi\fi\fi
+}
+\def\wordafter{after}
+\def\wordbefore{before}
+\def\wordnone{none}
+
+\urefbreakstyle after
+
+% @url synonym for @uref, since that's how everyone uses it.
+%
+\let\url=\uref
+
+% rms does not like angle brackets --karl, 17may97.
+% So now @email is just like @uref, unless we are pdf.
+%
+%\def\email#1{\angleleft{\tt #1}\angleright}
+\ifpdf
+ \def\email#1{\doemail#1,,\finish}
+ \def\doemail#1,#2,#3\finish{\begingroup
+ \unsepspaces
+ \pdfurl{mailto:#1}%
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
+ \endlink
+ \endgroup}
+\else
+ \let\email=\uref
+\fi
+
+% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+% `example' (@kbd uses ttsl only inside of @example and friends),
+% or `code' (@kbd uses normal tty font always).
+\parseargdef\kbdinputstyle{%
+ \def\txiarg{#1}%
+ \ifx\txiarg\worddistinct
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+ \else\ifx\txiarg\wordexample
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+ \else\ifx\txiarg\wordcode
+ \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @kbdinputstyle setting `\txiarg'}%
+ \fi\fi\fi
+}
+\def\worddistinct{distinct}
+\def\wordexample{example}
+\def\wordcode{code}
+
+% Default is `distinct'.
+\kbdinputstyle distinct
+
+% @kbd is like @code, except that if the argument is just one @key command,
+% then @kbd has no effect.
+\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}}
+
+\def\xkey{\key}
+\def\kbdsub#1#2#3\par{%
+ \def\one{#1}\def\three{#3}\def\threex{??}%
+ \ifx\one\xkey\ifx\threex\three \key{#2}%
+ \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
+ \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
+}
+
+% definition of @key that produces a lozenge. Doesn't adjust to text size.
+%\setfont\keyrm\rmshape{8}{1000}{OT1}
+%\font\keysy=cmsy9
+%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
+% \vbox{\hrule\kern-0.4pt
+% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
+% \kern-0.4pt\hrule}%
+% \kern-.06em\raise0.4pt\hbox{\angleright}}}}
+
+% definition of @key with no lozenge. If the current font is already
+% monospace, don't change it; that way, we respect @kbdinputstyle. But
+% if it isn't monospace, then use \tt.
+%
+\def\key#1{{\setupmarkupstyle{key}%
+ \nohyphenation
+ \ifmonospace\else\tt\fi
+ #1}\null}
+
+% @clicksequence{File @click{} Open ...}
+\def\clicksequence#1{\begingroup #1\endgroup}
+
+% @clickstyle @arrow (by default)
+\parseargdef\clickstyle{\def\click{#1}}
+\def\click{\arrow}
+
+% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
+%
+\def\dmn#1{\thinspace #1}
+
+% @l was never documented to mean ``switch to the Lisp font'',
+% and it is not used as such in any manual I can find. We need it for
+% Polish suppressed-l. --karl, 22sep96.
+%\def\l#1{{\li #1}\null}
+
+% @acronym for "FBI", "NATO", and the like.
+% We print this one point size smaller, since it's intended for
+% all-uppercase.
+%
+\def\acronym#1{\doacronym #1,,\finish}
+\def\doacronym#1,#2,#3\finish{%
+ {\selectfonts\lsize #1}%
+ \def\temp{#2}%
+ \ifx\temp\empty \else
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
+ \fi
+ \null % reset \spacefactor=1000
+}
+
+% @abbr for "Comput. J." and the like.
+% No font change, but don't do end-of-sentence spacing.
+%
+\def\abbr#1{\doabbr #1,,\finish}
+\def\doabbr#1,#2,#3\finish{%
+ {\plainfrenchspacing #1}%
+ \def\temp{#2}%
+ \ifx\temp\empty \else
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
+ \fi
+ \null % reset \spacefactor=1000
+}
+
+% @asis just yields its argument. Used with @table, for example.
+%
+\def\asis#1{#1}
+
+% @math outputs its argument in math mode.
+%
+% One complication: _ usually means subscripts, but it could also mean
+% an actual _ character, as in @address@hidden + 1}. So make
+% _ active, and distinguish by seeing if the current family is \slfam,
+% which is what @var uses.
+{
+ \catcode`\_ = \active
+ \gdef\mathunderscore{%
+ \catcode`\_=\active
+ \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
+ }
+}
+% Another complication: we want \\ (and @\) to output a math (or tt) \.
+% FYI, plain.tex uses \\ as a temporary control sequence (for no
+% particular reason), but this is not advertised and we don't care.
+%
+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
+%
+\def\math{%
+ \tex
+ \mathunderscore
+ \let\\ = \mathbackslash
+ \mathactive
+ % make the texinfo accent commands work in math mode
+ \let\"=\ddot
+ \let\'=\acute
+ \let\==\bar
+ \let\^=\hat
+ \let\`=\grave
+ \let\u=\breve
+ \let\v=\check
+ \let\~=\tilde
+ \let\dotaccent=\dot
+ $\finishmath
+}
+\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex.
+
+% Some active characters (such as <) are spaced differently in math.
+% We have to reset their definitions in case the @math was an argument
+% to a command which sets the catcodes (such as @item or @section).
+%
+{
+ \catcode`^ = \active
+ \catcode`< = \active
+ \catcode`> = \active
+ \catcode`+ = \active
+ \catcode`' = \active
+ \gdef\mathactive{%
+ \let^ = \ptexhat
+ \let< = \ptexless
+ \let> = \ptexgtr
+ \let+ = \ptexplus
+ \let' = \ptexquoteright
+ }
+}
+
+% ctrl is no longer a Texinfo command, but leave this definition for fun.
+\def\ctrl #1{{\tt \rawbackslash \hat}#1}
+
+% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
+% Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
+% except specified as a normal braced arg, so no newlines to worry about.
+%
+\def\outfmtnametex{tex}
+%
+\long\def\inlinefmt#1{\doinlinefmt #1,\finish}
+\long\def\doinlinefmt#1,#2,\finish{%
+ \def\inlinefmtname{#1}%
+ \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
+}
+% For raw, must switch into @tex before parsing the argument, to avoid
+% setting catcodes prematurely. Doing it this way means that, for
+% example, @inlineraw{html, foo{bar} gets a parse error instead of being
+% ignored. But this isn't important because if people want a literal
+% *right* brace they would have to use a command anyway, so they may as
+% well use a command to get a left brace too. We could re-use the
+% delimiter character idea from \verb, but it seems like overkill.
+%
+\long\def\inlineraw{\tex \doinlineraw}
+\long\def\doinlineraw#1{\doinlinerawtwo #1,\finish}
+\def\doinlinerawtwo#1,#2,\finish{%
+ \def\inlinerawname{#1}%
+ \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi
+ \endgroup % close group opened by \tex.
+}
+
+
+\message{glyphs,}
+% and logos.
+
+% @@ prints an @, as does @atchar{}.
address@hidden }
+\let\atchar=\@
+
+% @{ @} @lbracechar{} @rbracechar{} all generate brace characters.
+% Unless we're in typewriter, use \ecfont because the CM text fonts do
+% not have braces, and we don't want to switch into math.
+\def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}}
+\def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}}
+\let\{=\mylbrace \let\lbracechar=\{
+\let\}=\myrbrace \let\rbracechar=\}
+\begingroup
+ % Definitions to produce \{ and \} commands for indices,
+ % and @{ and @} for the aux/toc files.
+ \catcode`\{ = \other \catcode`\} = \other
+ \catcode`\[ = 1 \catcode`\] = 2
+ \catcode`\! = 0 \catcode`\\ = \other
+ !gdef!lbracecmd[\{]%
+ !gdef!rbracecmd[\}]%
+ address@hidden
+ address@hidden
+!endgroup
+
+% @comma{} to avoid , parsing problems.
+\let\comma = ,
+
+% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
+\let\, = \ptexc
+\let\dotaccent = \ptexdot
+\def\ringaccent#1{{\accent23 #1}}
+\let\tieaccent = \ptext
+\let\ubaraccent = \ptexb
+\let\udotaccent = \d
+
+% Other special characters: @questiondown @exclamdown @ordf @ordm
+% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
+\def\questiondown{?`}
+\def\exclamdown{!`}
+\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
+\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
+
+% Dotless i and dotless j, used for accents.
+\def\imacro{i}
+\def\jmacro{j}
+\def\dotless#1{%
+ \def\temp{#1}%
+ \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
+ \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
+ \else address@hidden can be used only with i or j}%
+ \fi\fi
+}
+
+% The \TeX{} logo, as in plain, but resetting the spacing so that a
+% period following counts as ending a sentence. (Idea found in latex.)
+%
+\edef\TeX{\TeX \spacefactor=1000 }
+
+% @LaTeX{} logo. Not quite the same results as the definition in
+% latex.ltx, since we use a different font for the raised A; it's most
+% convenient for us to use an explicitly smaller font, rather than using
+% the \scriptstyle font (since we don't reset \scriptstyle and
+% \scriptscriptstyle).
+%
+\def\LaTeX{%
+ L\kern-.36em
+ {\setbox0=\hbox{T}%
+ \vbox to \ht0{\hbox{%
+ \ifx\textnominalsize\xwordpt
+ % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX.
+ % Revert to plain's \scriptsize, which is 7pt.
+ \count255=\the\fam $\fam\count255 \scriptstyle A$%
+ \else
+ % For 11pt, we can use our lllsize.
+ \selectfonts\lllsize A%
+ \fi
+ }%
+ \vss
+ }}%
+ \kern-.15em
+ \TeX
+}
+
+% Some math mode symbols.
+\def\bullet{$\ptexbullet$}
+\def\geq{\ifmmode \ge\else $\ge$\fi}
+\def\leq{\ifmmode \le\else $\le$\fi}
+\def\minus{\ifmmode -\else $-$\fi}
+
+% @dots{} outputs an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in the cm
+% typewriter fonts as three actual period characters; on the other hand,
+% in other typewriter fonts three periods are wider than 1.5em. So do
+% whichever is larger.
+%
+\def\dots{%
+ \leavevmode
+ \setbox0=\hbox{...}% get width of three periods
+ \ifdim\wd0 > 1.5em
+ \dimen0 = \wd0
+ \else
+ \dimen0 = 1.5em
+ \fi
+ \hbox to \dimen0{%
+ \hskip 0pt plus.25fil
+ .\hskip 0pt plus1fil
+ .\hskip 0pt plus1fil
+ .\hskip 0pt plus.5fil
+ }%
+}
+
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+ \dots
+ \spacefactor=\endofsentencespacefactor
+}
+
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+%
+% Since these characters are used in examples, they should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+%
+\def\point{$\star$}
+\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
+\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+% The @error{} command.
+% Adapted from the TeXbook's \boxit.
+%
+\newbox\errorbox
+%
+{\tentt \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .55pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt}
+%
+\setbox\errorbox=\hbox to \dimen0{\hfil
+ \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+ \advance\hsize by -2\dimen2 % Rules.
+ \vbox{%
+ \hrule height\dimen2
+ \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
+ \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+ \kern3pt\vrule width\dimen2}% Space to right.
+ \hrule height\dimen2}
+ \hfil}
+%
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
+
+% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
+%
+\def\pounds{{\it\$}}
+
+% @euro{} comes from a separate font, depending on the current style.
+% We use the free feym* fonts from the eurosym package by Henrik
+% Theiling, which support regular, slanted, bold and bold slanted (and
+% "outlined" (blackboard board, sort of) versions, which we don't need).
+% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
+%
+% Although only regular is the truly official Euro symbol, we ignore
+% that. The Euro is designed to be slightly taller than the regular
+% font height.
+%
+% feymr - regular
+% feymo - slanted
+% feybr - bold
+% feybo - bold slanted
+%
+% There is no good (free) typewriter version, to my knowledge.
+% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
+% Hmm.
+%
+% Also doesn't work in math. Do we need to do math with euro symbols?
+% Hope not.
+%
+%
+\def\euro{{\eurofont e}}
+\def\eurofont{%
+ % We set the font at each command, rather than predefining it in
+ % \textfonts and the other font-switching commands, so that
+ % installations which never need the symbol don't have to have the
+ % font installed.
+ %
+ % There is only one designed size (nominal 10pt), so we always scale
+ % that to the current nominal size.
+ %
+ % By the way, simply using "at 1em" works for cmr10 and the like, but
+ % does not work for cmbx10 and other extended/shrunken fonts.
+ %
+ \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
+ %
+ \ifx\curfontstyle\bfstylename
+ % bold:
+ \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
+ \else
+ % regular:
+ \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
+ \fi
+ \thiseurofont
+}
+
+% Glyphs from the EC fonts. We don't use \let for the aliases, because
+% sometimes we redefine the original macro, and the alias should reflect
+% the redefinition.
+%
+% Use LaTeX names for the Icelandic letters.
+\def\DH{{\ecfont \char"D0}} % Eth
+\def\dh{{\ecfont \char"F0}} % eth
+\def\TH{{\ecfont \char"DE}} % Thorn
+\def\th{{\ecfont \char"FE}} % thorn
+%
+\def\guillemetleft{{\ecfont \char"13}}
+\def\guillemotleft{\guillemetleft}
+\def\guillemetright{{\ecfont \char"14}}
+\def\guillemotright{\guillemetright}
+\def\guilsinglleft{{\ecfont \char"0E}}
+\def\guilsinglright{{\ecfont \char"0F}}
+\def\quotedblbase{{\ecfont \char"12}}
+\def\quotesinglbase{{\ecfont \char"0D}}
+%
+% This positioning is not perfect (see the ogonek LaTeX package), but
+% we have the precomposed glyphs for the most common cases. We put the
+% tests to use those glyphs in the single \ogonek macro so we have fewer
+% dummy definitions to worry about for index entries, etc.
+%
+% ogonek is also used with other letters in Lithuanian (IOU), but using
+% the precomposed glyphs for those is not so easy since they aren't in
+% the same EC font.
+\def\ogonek#1{{%
+ \def\temp{#1}%
+ \ifx\temp\macrocharA\Aogonek
+ \else\ifx\temp\macrochara\aogonek
+ \else\ifx\temp\macrocharE\Eogonek
+ \else\ifx\temp\macrochare\eogonek
+ \else
+ \ecfont \setbox0=\hbox{#1}%
+ \ifdim\ht0=1ex\accent"0C #1%
+ \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}%
+ \fi
+ \fi\fi\fi\fi
+ }%
+}
+\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A}
+\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a}
+\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
+\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
+%
+% Use the ec* fonts (cm-super in outline format) for non-CM glyphs.
+\def\ecfont{%
+ % We can't distinguish serif/sans and italic/slanted, but this
+ % is used for crude hacks anyway (like adding French and German
+ % quotes to documents typeset with CM, where we lose kerning), so
+ % hopefully nobody will notice/care.
+ \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
+ \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
+ \ifmonospace
+ % typewriter:
+ \font\thisecfont = ectt\ecsize \space at \nominalsize
+ \else
+ \ifx\curfontstyle\bfstylename
+ % bold:
+ \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
+ \else
+ % regular:
+ \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
+ \fi
+ \fi
+ \thisecfont
+}
+
+% @registeredsymbol - R in a circle. The font for the R should really
+% be smaller yet, but lllsize is the best we can do for now.
+% Adapted from the plain.tex definition of \copyright.
+%
+\def\registeredsymbol{%
+ $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
+ \hfil\crcr\Orb}}%
+ }$%
+}
+
+% @textdegree - the normal degrees sign.
+%
+\def\textdegree{$^\circ$}
+
+% Laurent Siebenmann reports \Orb undefined with:
+% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38
+% so we'll define it if necessary.
+%
+\ifx\Orb\thisisundefined
+\def\Orb{\mathhexbox20D}
+\fi
+
+% Quotes.
+\chardef\quotedblleft="5C
+\chardef\quotedblright=`\"
+\chardef\quoteleft=`\`
+\chardef\quoteright=`\'
+
+
+\message{page headings,}
+
+\newskip\titlepagetopglue \titlepagetopglue = 1.5in
+\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
+
+% First the title page. Must do @settitle before @titlepage.
+\newif\ifseenauthor
+\newif\iffinishedtitlepage
+
+% Do an implicit @contents or @shortcontents after @end titlepage if the
+% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
+%
+\newif\ifsetcontentsaftertitlepage
+ \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
+\newif\ifsetshortcontentsaftertitlepage
+ \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
+
+\parseargdef\shorttitlepage{%
+ \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+ \endgroup\page\hbox{}\page}
+
+\envdef\titlepage{%
+ % Open one extra group, as we want to close it in the middle of \Etitlepage.
+ \begingroup
+ \parindent=0pt \textfonts
+ % Leave some space at the very top of the page.
+ \vglue\titlepagetopglue
+ % No rule at page bottom unless we print one at the top with @title.
+ \finishedtitlepagetrue
+ %
+ % Most title ``pages'' are actually two pages long, with space
+ % at the top of the second. We don't want the ragged left on the second.
+ \let\oldpage = \page
+ \def\page{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ \let\page = \oldpage
+ \page
+ \null
+ }%
+}
+
+\def\Etitlepage{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ % It is important to do the page break before ending the group,
+ % because the headline and footline are only empty inside the group.
+ % If we use the new definition of \page, we always get a blank page
+ % after the title page, which we certainly don't want.
+ \oldpage
+ \endgroup
+ %
+ % Need this before the \...aftertitlepage checks so that if they are
+ % in effect the toc pages will come out with page numbers.
+ \HEADINGSon
+ %
+ % If they want short, they certainly want long too.
+ \ifsetshortcontentsaftertitlepage
+ \shortcontents
+ \contents
+ \global\let\shortcontents = \relax
+ \global\let\contents = \relax
+ \fi
+ %
+ \ifsetcontentsaftertitlepage
+ \contents
+ \global\let\contents = \relax
+ \global\let\shortcontents = \relax
+ \fi
+}
+
+\def\finishtitlepage{%
+ \vskip4pt \hrule height 2pt width \hsize
+ \vskip\titlepagebottomglue
+ \finishedtitlepagetrue
+}
+
+% Settings used for typesetting titles: no hyphenation, no indentation,
+% don't worry much about spacing, ragged right. This should be used
+% inside a \vbox, and fonts need to be set appropriately first. Because
+% it is always used for titles, nothing else, we call \rmisbold. \par
+% should be specified before the end of the \vbox, since a vbox is a group.
+%
+\def\raggedtitlesettings{%
+ \rmisbold
+ \hyphenpenalty=10000
+ \parindent=0pt
+ \tolerance=5000
+ \ptexraggedright
+}
+
+% Macros to be used within @titlepage:
+
+\let\subtitlerm=\tenrm
+\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
+
+\parseargdef\title{%
+ \checkenv\titlepage
+ \vbox{\titlefonts \raggedtitlesettings #1\par}%
+ % print a rule at the page bottom also.
+ \finishedtitlepagefalse
+ \vskip4pt \hrule height 4pt width \hsize \vskip4pt
+}
+
+\parseargdef\subtitle{%
+ \checkenv\titlepage
+ {\subtitlefont \rightline{#1}}%
+}
+
+% @author should come last, but may come many times.
+% It can also be used inside @quotation.
+%
+\parseargdef\author{%
+ \def\temp{\quotation}%
+ \ifx\thisenv\temp
+ \def\quotationauthor{#1}% printed in \Equotation.
+ \else
+ \checkenv\titlepage
+ \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
+ {\secfonts\rmisbold \leftline{#1}}%
+ \fi
+}
+
+
+% Set up page headings and footings.
+
+\let\thispage=\folio
+
+\newtoks\evenheadline % headline on even pages
+\newtoks\oddheadline % headline on odd pages
+\newtoks\evenfootline % footline on even pages
+\newtoks\oddfootline % footline on odd pages
+
+% Now make TeX use those variables
+\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
+ \else \the\evenheadline \fi}}
+\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
+ \else \the\evenfootline \fi}\HEADINGShook}
+\let\HEADINGShook=\relax
+
+% Commands to set those variables.
+% For example, this is what @headings on does
+% @evenheading @thistitle|@thispage|@thischapter
+% @oddheading @thischapter|@thispage|@thistitle
+% @evenfooting @thisfile||
+% @oddfooting ||@thisfile
+
+
+\def\evenheading{\parsearg\evenheadingxxx}
+\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
+\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
+\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\def\oddheading{\parsearg\oddheadingxxx}
+\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
+\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
+\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
+
+\def\evenfooting{\parsearg\evenfootingxxx}
+\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
+\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
+\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\def\oddfooting{\parsearg\oddfootingxxx}
+\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
+\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
+ \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+ %
+ % Leave some space for the footline. Hopefully ok to assume
+ % @evenfooting will not be used by itself.
+ \global\advance\pageheight by -12pt
+ \global\advance\vsize by -12pt
+}
+
+\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
+
+% @evenheadingmarks top \thischapter <- chapter at the top of a page
+% @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page
+%
+% The same set of arguments for:
+%
+% @oddheadingmarks
+% @evenfootingmarks
+% @oddfootingmarks
+% @everyheadingmarks
+% @everyfootingmarks
+
+\def\evenheadingmarks{\headingmarks{even}{heading}}
+\def\oddheadingmarks{\headingmarks{odd}{heading}}
+\def\evenfootingmarks{\headingmarks{even}{footing}}
+\def\oddfootingmarks{\headingmarks{odd}{footing}}
+\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1}
+ \headingmarks{odd}{heading}{#1} }
+\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1}
+ \headingmarks{odd}{footing}{#1} }
+% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
+\def\headingmarks#1#2#3 {%
+ \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
+ \global\expandafter\let\csname get#1#2marks\endcsname \temp
+}
+
+\everyheadingmarks bottom
+\everyfootingmarks bottom
+
+% @headings double turns headings on for double-sided printing.
+% @headings single turns headings on for single-sided printing.
+% @headings off turns them off.
+% @headings on same as @headings double, retained for compatibility.
+% @headings after turns on double-sided headings after this page.
+% @headings doubleafter turns on double-sided headings after this page.
+% @headings singleafter turns on single-sided headings after this page.
+% By default, they are off at the start of a document,
+% and turned `on' after @end titlepage.
+
+\def\headings #1 {\csname HEADINGS#1\endcsname}
+
+\def\headingsoff{% non-global headings elimination
+ \evenheadline={\hfil}\evenfootline={\hfil}%
+ \oddheadline={\hfil}\oddfootline={\hfil}%
+}
+
+\def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting
+\HEADINGSoff % it's the default
+
+% When we turn headings on, set the page number to 1.
+% For double-sided printing, put current file name in lower left corner,
+% chapter name on inside top of right hand pages, document
+% title on inside top of left hand pages, and page numbers on outside top
+% edge of all pages.
+\def\HEADINGSdouble{%
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+\let\contentsalignmacro = \chappager
+
+% For single-sided printing, chapter title goes across top left of page,
+% page number on top right.
+\def\HEADINGSsingle{%
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+\def\HEADINGSon{\HEADINGSdouble}
+
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
+\let\HEADINGSdoubleafter=\HEADINGSafter
+\def\HEADINGSdoublex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
+\def\HEADINGSsinglex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+
+% Subroutines used in generating headings
+% This produces Day Month Year style of output.
+% Only define if not already defined, in case a txi-??.tex file has set
+% up a different format (e.g., txi-cs.tex does this).
+\ifx\today\thisisundefined
+\def\today{%
+ \number\day\space
+ \ifcase\month
+ \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
+ \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
+ \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+ \fi
+ \space\number\year}
+\fi
+
+% @settitle line... specifies the title of the document, for headings.
+% It generates no output of its own.
+\def\thistitle{\putwordNoTitle}
+\def\settitle{\parsearg{\gdef\thistitle}}
+
+
+\message{tables,}
+% Tables -- @table, @ftable, @vtable, @item(x).
+
+% default indentation of table text
+\newdimen\tableindent \tableindent=.8in
+% default indentation of @itemize and @enumerate text
+\newdimen\itemindent \itemindent=.3in
+% margin between end of table item and start of table text.
+\newdimen\itemmargin \itemmargin=.1in
+
+% used internally for \itemindent minus \itemmargin
+\newdimen\itemmax
+
+% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
+% these defs.
+% They also define \itemindex
+% to index the item name in whatever manner is desired (perhaps none).
+
+\newif\ifitemxneedsnegativevskip
+
+\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
+
+\def\internalBitem{\smallbreak \parsearg\itemzzz}
+\def\internalBitemx{\itemxpar \parsearg\itemzzz}
+
+\def\itemzzz #1{\begingroup %
+ \advance\hsize by -\rightskip
+ \advance\hsize by -\tableindent
+ \setbox0=\hbox{\itemindicate{#1}}%
+ \itemindex{#1}%
+ \nobreak % This prevents a break before @itemx.
+ %
+ % If the item text does not fit in the space we have, put it on a line
+ % by itself, and do not allow a page break either before or after that
+ % line. We do not start a paragraph here because then if the next
+ % command is, e.g., @kindex, the whatsit would get put into the
+ % horizontal list on a line by itself, resulting in extra blank space.
+ \ifdim \wd0>\itemmax
+ %
+ % Make this a paragraph so we get the \parskip glue and wrapping,
+ % but leave it ragged-right.
+ \begingroup
+ \advance\leftskip by-\tableindent
+ \advance\hsize by\tableindent
+ \advance\rightskip by0pt plus1fil\relax
+ \leavevmode\unhbox0\par
+ \endgroup
+ %
+ % We're going to be starting a paragraph, but we don't want the
+ % \parskip glue -- logically it's part of the @item we just started.
+ \nobreak \vskip-\parskip
+ %
+ % Stop a page break at the \parskip glue coming up. However, if
+ % what follows is an environment such as @example, there will be no
+ % \parskip glue; then the negative vskip we just inserted would
+ % cause the example and the item to crash together. So we use this
+ % bizarre value of 10001 as a signal to \aboveenvbreak to insert
+ % \parskip glue after all. Section titles are handled this way also.
+ %
+ \penalty 10001
+ \endgroup
+ \itemxneedsnegativevskipfalse
+ \else
+ % The item text fits into the space. Start a paragraph, so that the
+ % following text (if any) will end up on the same line.
+ \noindent
+ % Do this with kerns and \unhbox so that if there is a footnote in
+ % the item text, it can migrate to the main vertical list and
+ % eventually be printed.
+ \nobreak\kern-\tableindent
+ \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
+ \unhbox0
+ \nobreak\kern\dimen0
+ \endgroup
+ \itemxneedsnegativevskiptrue
+ \fi
+}
+
address@hidden while not in a list environment}}
address@hidden while not in a list environment}}
+
+% @table, @ftable, @vtable.
+\envdef\table{%
+ \let\itemindex\gobble
+ \tablecheck{table}%
+}
+\envdef\ftable{%
+ \def\itemindex ##1{\doind {fn}{\code{##1}}}%
+ \tablecheck{ftable}%
+}
+\envdef\vtable{%
+ \def\itemindex ##1{\doind {vr}{\code{##1}}}%
+ \tablecheck{vtable}%
+}
+\def\tablecheck#1{%
+ \ifnum \the\catcode`\^^M=\active
+ \endgroup
+ \errmessage{This command won't work in this context; perhaps the problem is
+ that we are \inenvironment\thisenv}%
+ \def\next{\doignore{#1}}%
+ \else
+ \let\next\tablex
+ \fi
+ \next
+}
+\def\tablex#1{%
+ \def\itemindicate{#1}%
+ \parsearg\tabley
+}
+\def\tabley#1{%
+ {%
+ \makevalueexpandable
+ \edef\temp{\noexpand\tablez #1\space\space\space}%
+ \expandafter
+ }\temp \endtablez
+}
+\def\tablez #1 #2 #3 #4\endtablez{%
+ \aboveenvbreak
+ \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
+ \ifnum 0#2>0 \tableindent=#2\mil \fi
+ \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
+ \itemmax=\tableindent
+ \advance \itemmax by -\itemmargin
+ \advance \leftskip by \tableindent
+ \exdentamount=\tableindent
+ \parindent = 0pt
+ \parskip = \smallskipamount
+ \ifdim \parskip=0pt \parskip=2pt \fi
+ \let\item = \internalBitem
+ \let\itemx = \internalBitemx
+}
+\def\Etable{\endgraf\afterenvbreak}
+\let\Eftable\Etable
+\let\Evtable\Etable
+\let\Eitemize\Etable
+\let\Eenumerate\Etable
+
+% This is the counter used by @enumerate, which is really @itemize
+
+\newcount \itemno
+
+\envdef\itemize{\parsearg\doitemize}
+
+\def\doitemize#1{%
+ \aboveenvbreak
+ \itemmax=\itemindent
+ \advance\itemmax by -\itemmargin
+ \advance\leftskip by \itemindent
+ \exdentamount=\itemindent
+ \parindent=0pt
+ \parskip=\smallskipamount
+ \ifdim\parskip=0pt \parskip=2pt \fi
+ %
+ % Try typesetting the item mark that if the document erroneously says
+ % something like @itemize @samp (intending @table), there's an error
+ % right away at the @itemize. It's not the best error message in the
+ % world, but it's better than leaving it to the @item. This means if
+ % the user wants an empty mark, they have to say @w{} not just @w.
+ \def\itemcontents{#1}%
+ \setbox0 = \hbox{\itemcontents}%
+ %
+ % @itemize with no arg is equivalent to @itemize @bullet.
+ \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
+ %
+ \let\item=\itemizeitem
+}
+
+% Definition of @item while inside @itemize and @enumerate.
+%
+\def\itemizeitem{%
+ \advance\itemno by 1 % for enumerations
+ {\let\par=\endgraf \smallbreak}% reasonable place to break
+ {%
+ % If the document has an @itemize directly after a section title, a
+ % \nobreak will be last on the list, and \sectionheading will have
+ % done a \vskip-\parskip. In that case, we don't want to zero
+ % parskip, or the item text will crash with the heading. On the
+ % other hand, when there is normal text preceding the item (as there
+ % usually is), we do want to zero parskip, or there would be too much
+ % space. In that case, we won't have a \nobreak before. At least
+ % that's the theory.
+ \ifnum\lastpenalty<10000 \parskip=0in \fi
+ \noindent
+ \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
+ %
+ \vadjust{\penalty 1200}}% not good to break after first line of item.
+ \flushcr
+}
+
+% \splitoff TOKENS\endmark defines \first to be the first token in
+% TOKENS, and \rest to be the remainder.
+%
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
+
+% Allow an optional argument of an uppercase letter, lowercase letter,
+% or number, to specify the first label in the enumerated list. No
+% argument is the same as `1'.
+%
+\envparseargdef\enumerate{\enumeratey #1 \endenumeratey}
+\def\enumeratey #1 #2\endenumeratey{%
+ % If we were given no argument, pretend we were given `1'.
+ \def\thearg{#1}%
+ \ifx\thearg\empty \def\thearg{1}\fi
+ %
+ % Detect if the argument is a single token. If so, it might be a
+ % letter. Otherwise, the only valid thing it can be is a number.
+ % (We will always have one token, because of the test we just made.
+ % This is a good thing, since \splitoff doesn't work given nothing at
+ % all -- the first parameter is undelimited.)
+ \expandafter\splitoff\thearg\endmark
+ \ifx\rest\empty
+ % Only one token in the argument. It could still be anything.
+ % A ``lowercase letter'' is one whose \lccode is nonzero.
+ % An ``uppercase letter'' is one whose \lccode is both nonzero, and
+ % not equal to itself.
+ % Otherwise, we assume it's a number.
+ %
+ % We need the \relax at the end of the \ifnum lines to stop TeX from
+ % continuing to look for a <number>.
+ %
+ \ifnum\lccode\expandafter`\thearg=0\relax
+ \numericenumerate % a number (we hope)
+ \else
+ % It's a letter.
+ \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
+ \lowercaseenumerate % lowercase letter
+ \else
+ \uppercaseenumerate % uppercase letter
+ \fi
+ \fi
+ \else
+ % Multiple tokens in the argument. We hope it's a number.
+ \numericenumerate
+ \fi
+}
+
+% An @enumerate whose labels are integers. The starting integer is
+% given in \thearg.
+%
+\def\numericenumerate{%
+ \itemno = \thearg
+ \startenumeration{\the\itemno}%
+}
+
+% The starting (lowercase) letter is in \thearg.
+\def\lowercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more lowercase letters in @enumerate; get a bigger
+ alphabet}%
+ \fi
+ \char\lccode\itemno
+ }%
+}
+
+% The starting (uppercase) letter is in \thearg.
+\def\uppercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more uppercase letters in @enumerate; get a bigger
+ alphabet}
+ \fi
+ \char\uccode\itemno
+ }%
+}
+
+% Call \doitemize, adding a period to the first argument and supplying the
+% common last two arguments. Also subtract one from the initial value in
+% \itemno, since @item increments \itemno.
+%
+\def\startenumeration#1{%
+ \advance\itemno by -1
+ \doitemize{#1.}\flushcr
+}
+
+% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
+% to @enumerate.
+%
+\def\alphaenumerate{\enumerate{a}}
+\def\capsenumerate{\enumerate{A}}
+\def\Ealphaenumerate{\Eenumerate}
+\def\Ecapsenumerate{\Eenumerate}
+
+
+% @multitable macros
+% Amy Hendrickson, 8/18/94, 3/6/96
+%
+% @multitable ... @end multitable will make as many columns as desired.
+% Contents of each column will wrap at width given in preamble. Width
+% can be specified either with sample text given in a template line,
+% or in percent of \hsize, the current width of text on page.
+
+% Table can continue over pages but will only break between lines.
+
+% To make preamble:
+%
+% Either define widths of columns in terms of percent of \hsize:
+% @multitable @columnfractions .25 .3 .45
+% @item ...
+%
+% Numbers following @columnfractions are the percent of the total
+% current hsize to be used for each column. You may use as many
+% columns as desired.
+
+
+% Or use a template:
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item ...
+% using the widest term desired in each column.
+
+% Each new table line starts with @item, each subsequent new column
+% starts with @tab. Empty columns may be produced by supplying @tab's
+% with nothing between them for as many times as empty columns are needed,
+% ie, @address@hidden@tab will produce two empty columns.
+
+% @item, @tab do not need to be on their own lines, but it will not hurt
+% if they are.
+
+% Sample multitable:
+
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item first col stuff @tab second col stuff @tab third col
+% @item
+% first col stuff
+% @tab
+% second col stuff
+% @tab
+% third col
+% @item first col stuff @tab second col stuff
+% @tab Many paragraphs of text may be used in any column.
+%
+% They will wrap at the width determined by the template.
+% @address@hidden@tab This will be in third column.
+% @end multitable
+
+% Default dimensions may be reset by user.
+% @multitableparskip is vertical space between paragraphs in table.
+% @multitableparindent is paragraph indent in table.
+% @multitablecolmargin is horizontal space to be left between columns.
+% @multitablelinespace is space to leave between table items, baseline
+% to baseline.
+% 0pt means it depends on current normal line spacing.
+%
+\newskip\multitableparskip
+\newskip\multitableparindent
+\newdimen\multitablecolspace
+\newskip\multitablelinespace
+\multitableparskip=0pt
+\multitableparindent=6pt
+\multitablecolspace=12pt
+\multitablelinespace=0pt
+
+% Macros used to set up halign preamble:
+%
+\let\endsetuptable\relax
+\def\xendsetuptable{\endsetuptable}
+\let\columnfractions\relax
+\def\xcolumnfractions{\columnfractions}
+\newif\ifsetpercent
+
+% #1 is the @columnfraction, usually a decimal number like .5, but might
+% be just 1. We just use it, whatever it is.
+%
+\def\pickupwholefraction#1 {%
+ \global\advance\colcount by 1
+ \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
+ \setuptable
+}
+
+\newcount\colcount
+\def\setuptable#1{%
+ \def\firstarg{#1}%
+ \ifx\firstarg\xendsetuptable
+ \let\go = \relax
+ \else
+ \ifx\firstarg\xcolumnfractions
+ \global\setpercenttrue
+ \else
+ \ifsetpercent
+ \let\go\pickupwholefraction
+ \else
+ \global\advance\colcount by 1
+ \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
+ % separator; typically that is always in the input, anyway.
+ \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+ \fi
+ \fi
+ \ifx\go\pickupwholefraction
+ % Put the argument back for the \pickupwholefraction call, so
+ % we'll always have a period there to be parsed.
+ \def\go{\pickupwholefraction#1}%
+ \else
+ \let\go = \setuptable
+ \fi%
+ \fi
+ \go
+}
+
+% multitable-only commands.
+%
+% @headitem starts a heading row, which we typeset in bold.
+% Assignments have to be global since we are inside the implicit group
+% of an alignment entry. \everycr resets \everytab so we don't have to
+% undo it ourselves.
+\def\headitemfont{\b}% for people to use in the template row; not changeable
+\def\headitem{%
+ \checkenv\multitable
+ \crcr
+ \global\everytab={\bf}% can't use \headitemfont since the parsing differs
+ \the\everytab % for the first item
+}%
+%
+% A \tab used to include \hskip1sp. But then the space in a template
+% line is not enough. That is bad. So let's go back to just `&' until
+% we again encounter the problem the 1sp was intended to solve.
+% --karl, address@hidden, 20apr99.
+\def\tab{\checkenv\multitable &\the\everytab}%
+
+% @multitable ... @end multitable definitions:
+%
+\newtoks\everytab % insert after every tab.
+%
+\envdef\multitable{%
+ \vskip\parskip
+ \startsavinginserts
+ %
+ % @item within a multitable starts a normal row.
+ % We use \def instead of \let so that if one of the multitable entries
+ % contains an @itemize, we don't choke on the \item (seen as \crcr aka
+ % \endtemplate) expanding \doitemize.
+ \def\item{\crcr}%
+ %
+ \tolerance=9500
+ \hbadness=9500
+ \setmultitablespacing
+ \parskip=\multitableparskip
+ \parindent=\multitableparindent
+ \overfullrule=0pt
+ \global\colcount=0
+ %
+ \everycr = {%
+ \noalign{%
+ \global\everytab={}%
+ \global\colcount=0 % Reset the column counter.
+ % Check for saved footnotes, etc.
+ \checkinserts
+ % Keeps underfull box messages off when table breaks over pages.
+ %\filbreak
+ % Maybe so, but it also creates really weird page breaks when the
+ % table breaks over pages. Wouldn't \vfil be better? Wait until the
+ % problem manifests itself, so it can be fixed for real --karl.
+ }%
+ }%
+ %
+ \parsearg\domultitable
+}
+\def\domultitable#1{%
+ % To parse everything between @multitable and @item:
+ \setuptable#1 \endsetuptable
+ %
+ % This preamble sets up a generic column definition, which will
+ % be used as many times as user calls for columns.
+ % \vtop will set a single line and will also let text wrap and
+ % continue for many paragraphs if desired.
+ \halign\bgroup &%
+ \global\advance\colcount by 1
+ \multistrut
+ \vtop{%
+ % Use the current \colcount to find the correct column width:
+ \hsize=\expandafter\csname col\the\colcount\endcsname
+ %
+ % In order to keep entries from bumping into each other
+ % we will add a \leftskip of \multitablecolspace to all columns after
+ % the first one.
+ %
+ % If a template has been used, we will add \multitablecolspace
+ % to the width of each template entry.
+ %
+ % If the user has set preamble in terms of percent of \hsize we will
+ % use that dimension as the width of the column, and the \leftskip
+ % will keep entries from bumping into each other. Table will start at
+ % left margin and final column will justify at right margin.
+ %
+ % Make sure we don't inherit \rightskip from the outer environment.
+ \rightskip=0pt
+ \ifnum\colcount=1
+ % The first column will be indented with the surrounding text.
+ \advance\hsize by\leftskip
+ \else
+ \ifsetpercent \else
+ % If user has not set preamble in terms of percent of \hsize
+ % we will advance \hsize by \multitablecolspace.
+ \advance\hsize by \multitablecolspace
+ \fi
+ % In either case we will make \leftskip=\multitablecolspace:
+ \leftskip=\multitablecolspace
+ \fi
+ % Ignoring space at the beginning and end avoids an occasional spurious
+ % blank line, when TeX decides to break the line at the space before the
+ % box from the multistrut, so the strut ends up on a line by itself.
+ % For example:
+ % @multitable @columnfractions .11 .89
+ % @item @code{#}
+ % @tab Legal holiday which is valid in major parts of the whole country.
+ % Is automatically provided with highlighting sequences respectively
+ % marking characters.
+ \noindent\ignorespaces##\unskip\multistrut
+ }\cr
+}
+\def\Emultitable{%
+ \crcr
+ \egroup % end the \halign
+ \global\setpercentfalse
+}
+
+\def\setmultitablespacing{%
+ \def\multistrut{\strut}% just use the standard line spacing
+ %
+ % Compute \multitablelinespace (if not defined by user) for use in
+ % \multitableparskip calculation. We used define \multistrut based on
+ % this, but (ironically) that caused the spacing to be off.
+ % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
+\ifdim\multitablelinespace=0pt
+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
+\global\advance\multitablelinespace by-\ht0
+\fi
+% Test to see if parskip is larger than space between lines of
+% table. If not, do nothing.
+% If so, set to same dimension as multitablelinespace.
+\ifdim\multitableparskip>\multitablelinespace
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
+ % than skip between lines in the table.
+\fi%
+\ifdim\multitableparskip=0pt
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
+ % than skip between lines in the table.
+\fi}
+
+
+\message{conditionals,}
+
+% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
+% @ifnotxml always succeed. They currently do nothing; we don't
+% attempt to check whether the conditionals are properly nested. But we
+% have to remember that they are conditionals, so that @end doesn't
+% attempt to close an environment group.
+%
+\def\makecond#1{%
+ \expandafter\let\csname #1\endcsname = \relax
+ \expandafter\let\csname iscond.#1\endcsname = 1
+}
+\makecond{iftex}
+\makecond{ifnotdocbook}
+\makecond{ifnothtml}
+\makecond{ifnotinfo}
+\makecond{ifnotplaintext}
+\makecond{ifnotxml}
+
+% Ignore @ignore, @ifhtml, @ifinfo, and the like.
+%
+\def\direntry{\doignore{direntry}}
+\def\documentdescription{\doignore{documentdescription}}
+\def\docbook{\doignore{docbook}}
+\def\html{\doignore{html}}
+\def\ifdocbook{\doignore{ifdocbook}}
+\def\ifhtml{\doignore{ifhtml}}
+\def\ifinfo{\doignore{ifinfo}}
+\def\ifnottex{\doignore{ifnottex}}
+\def\ifplaintext{\doignore{ifplaintext}}
+\def\ifxml{\doignore{ifxml}}
+\def\ignore{\doignore{ignore}}
+\def\menu{\doignore{menu}}
+\def\xml{\doignore{xml}}
+
+% Ignore text until a line address@hidden #1', keeping track of nested
conditionals.
+%
+% A count to remember the depth of nesting.
+\newcount\doignorecount
+
+\def\doignore#1{\begingroup
+ % Scan in ``verbatim'' mode:
+ \obeylines
+ \catcode`\@ = \other
+ \catcode`\{ = \other
+ \catcode`\} = \other
+ %
+ % Make sure that spaces turn into tokens that match what \doignoretext wants.
+ \spaceisspace
+ %
+ % Count number of #1's that we've seen.
+ \doignorecount = 0
+ %
+ % Swallow text until we reach the matching address@hidden #1'.
+ \dodoignore{#1}%
+}
+
+{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
+ \obeylines %
+ %
+ \gdef\dodoignore#1{%
+ % #1 contains the command name as a string, e.g., `ifinfo'.
+ %
+ % Define a command to find the next address@hidden #1'.
+ address@hidden #1{%
+ address@hidden
+ %
+ % And this command to find another #1 command, at the beginning of a
+ % line. (Otherwise, we would consider a line address@hidden @ifset', for
+ % example, to count as an @ifset for nesting.)
+ address@hidden
+ %
+ % And now expand that command.
+ \doignoretext ^^M%
+ }%
+}
+
+\def\doignoreyyy#1{%
+ \def\temp{#1}%
+ \ifx\temp\empty % Nothing found.
+ \let\next\doignoretextzzz
+ \else % Found a nested condition, ...
+ \advance\doignorecount by 1
+ \let\next\doignoretextyyy % ..., look for another.
+ % If we're here, #1 ends with ^^M\ifinfo (for example).
+ \fi
+ \next #1% the token \_STOP_ is present just after this macro.
+}
+
+% We have to swallow the remaining "\_STOP_".
+%
+\def\doignoretextzzz#1{%
+ \ifnum\doignorecount = 0 % We have just found the outermost @end.
+ \let\next\enddoignore
+ \else % Still inside a nested condition.
+ \advance\doignorecount by -1
+ \let\next\doignoretext % Look for the next @end.
+ \fi
+ \next
+}
+
+% Finish off ignored text.
+{ \obeylines%
+ % Ignore anything after the last address@hidden #1'; this matters in verbatim
+ % environments, where otherwise the newline after an ignored conditional
+ % would result in a blank line in the output.
+ \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
+}
+
+
+% @set VAR sets the variable VAR to an empty value.
+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
+%
+% Since we want to separate VAR from REST-OF-LINE (which might be
+% empty), we can't just use \parsearg; we have to insert a space of our
+% own to delimit the rest of the line, and then take it out again if we
+% didn't need it.
+% We rely on the fact that \parsearg sets \catcode`\ =10.
+%
+\parseargdef\set{\setyyy#1 \endsetyyy}
+\def\setyyy#1 #2\endsetyyy{%
+ {%
+ \makevalueexpandable
+ \def\temp{#2}%
+ \edef\next{\gdef\makecsname{SET#1}}%
+ \ifx\temp\empty
+ \next{}%
+ \else
+ \setzzz#2\endsetzzz
+ \fi
+ }%
+}
+% Remove the trailing space \setxxx inserted.
+\def\setzzz#1 \endsetzzz{\next{#1}}
+
+% @clear VAR clears (i.e., unsets) the variable VAR.
+%
+\parseargdef\clear{%
+ {%
+ \makevalueexpandable
+ \global\expandafter\let\csname SET#1\endcsname=\relax
+ }%
+}
+
+% @value{foo} gets the text saved in variable foo.
+\def\value{\begingroup\makevalueexpandable\valuexxx}
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
+{
+ \catcode`\- = \active \catcode`\_ = \active
+ %
+ \gdef\makevalueexpandable{%
+ \let\value = \expandablevalue
+ % We don't want these characters active, ...
+ \catcode`\-=\other \catcode`\_=\other
+ % ..., but we might end up with active ones in the argument if
+ % we're called from @code, as @address@hidden, though.
+ % So \let them to their normal equivalents.
+ \let-\normaldash \let_\normalunderscore
+ }
+}
+
+% We have this subroutine so that we can handle at least some @value's
+% properly in indexes (we call \makevalueexpandable in \indexdummies).
+% The command has to be fully expandable (if the variable is set), since
+% the result winds up in the index file. This means that if the
+% variable's value contains other Texinfo commands, it's almost certain
+% it will fail (although perhaps we could fix that with sufficient work
+% to do a one-level expansion on the result, instead of complete).
+%
+\def\expandablevalue#1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ {[No value for ``#1'']}%
+ \message{Variable `#1', used in @value, is not set.}%
+ \else
+ \csname SET#1\endcsname
+ \fi
+}
+
+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+% with @set.
+%
+% To get special treatment of address@hidden ifset,' call \makeond and the
redefine.
+%
+\makecond{ifset}
+\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
+\def\doifset#1#2{%
+ {%
+ \makevalueexpandable
+ \let\next=\empty
+ \expandafter\ifx\csname SET#2\endcsname\relax
+ #1% If not set, redefine \next.
+ \fi
+ \expandafter
+ }\next
+}
+\def\ifsetfail{\doignore{ifset}}
+
+% @ifclear VAR ... @end executes the `...' iff VAR has never been
+% defined with @set, or has been undefined with @clear.
+%
+% The `\else' inside the `\doifset' parameter is a trick to reuse the
+% above code: if the variable is not set, do nothing, if it is set,
+% then redefine \next to \ifclearfail.
+%
+\makecond{ifclear}
+\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
+\def\ifclearfail{\doignore{ifclear}}
+
+% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written
+% without the @) is in fact defined. We can only feasibly check at the
+% TeX level, so something like `mathcode' is going to considered
+% defined even though it is not a Texinfo command.
+%
+\makecond{ifcommanddefined}
+\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}}
+%
+\def\doifcmddefined#1#2{{%
+ \makevalueexpandable
+ \let\next=\empty
+ \expandafter\ifx\csname #2\endcsname\relax
+ #1% If not defined, \let\next as above.
+ \fi
+ \expandafter
+ }\next
+}
+\def\ifcmddefinedfail{\doignore{ifcommanddefined}}
+
+% @ifcommandnotdefined CMD ... handled similar to @ifclear above.
+\makecond{ifcommandnotdefined}
+\def\ifcommandnotdefined{%
+ \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}}
+\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}}
+
+% Set the `txicommandconditionals' variable, so documents have a way to
+% test if the @ifcommand...defined conditionals are available.
+\set txicommandconditionals
+
+% @dircategory CATEGORY -- specify a category of the dir file
+% which this file should belong to. Ignore this in TeX.
+\let\dircategory=\comment
+
+% @defininfoenclose.
+\let\definfoenclose=\comment
+
+
+\message{indexing,}
+% Index generation facilities
+
+% Define \newwrite to be identical to plain tex's \newwrite
+% except not \outer, so it can be used within macros and \if's.
+\edef\newwrite{\makecsname{ptexnewwrite}}
+
+% \newindex {foo} defines an index named foo.
+% It automatically defines \fooindex such that
+% \fooindex ...rest of line... puts an entry in the index foo.
+% It also defines \fooindfile to be the number of the output channel for
+% the file that accumulates this index. The file's extension is foo.
+% The name of an index should be no more than 2 characters long
+% for the sake of vms.
+%
+\def\newindex#1{%
+ \iflinks
+ \expandafter\newwrite \csname#1indfile\endcsname
+ \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+ \fi
+ \expandafter\xdef\csname#1index\endcsname{% % Define @#1index
+ \noexpand\doindex{#1}}
+}
+
+% @defindex foo == \newindex{foo}
+%
+\def\defindex{\parsearg\newindex}
+
+% Define @defcodeindex, like @defindex except put all entries in @code.
+%
+\def\defcodeindex{\parsearg\newcodeindex}
+%
+\def\newcodeindex#1{%
+ \iflinks
+ \expandafter\newwrite \csname#1indfile\endcsname
+ \openout \csname#1indfile\endcsname \jobname.#1
+ \fi
+ \expandafter\xdef\csname#1index\endcsname{%
+ \noexpand\docodeindex{#1}}%
+}
+
+
+% @synindex foo bar makes index foo feed into index bar.
+% Do this instead of @defindex foo if you don't want it as a separate index.
+%
+% @syncodeindex foo bar similar, but put all entries made for index foo
+% inside @code.
+%
+\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
+\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
+
+% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
+% #3 the target index (bar).
+\def\dosynindex#1#2#3{%
+ % Only do \closeout if we haven't already done it, else we'll end up
+ % closing the target index.
+ \expandafter \ifx\csname donesynindex#2\endcsname \relax
+ % The \closeout helps reduce unnecessary open files; the limit on the
+ % Acorn RISC OS is a mere 16 files.
+ \expandafter\closeout\csname#2indfile\endcsname
+ \expandafter\let\csname donesynindex#2\endcsname = 1
+ \fi
+ % redefine \fooindfile:
+ \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
+ \expandafter\let\csname#2indfile\endcsname=\temp
+ % redefine \fooindex:
+ \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
+}
+
+% Define \doindex, the driver for all \fooindex macros.
+% Argument #1 is generated by the calling \fooindex macro,
+% and it is "foo", the name of the index.
+
+% \doindex just uses \parsearg; it calls \doind for the actual work.
+% This is because \doind is more useful to call from other macros.
+
+% There is also \dosubind {index}{topic}{subtopic}
+% which makes an entry in a two-level index such as the operation index.
+
+\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
+\def\singleindexer #1{\doind{\indexname}{#1}}
+
+% like the previous two, but they put @code around the argument.
+\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
+\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
+
+% Take care of Texinfo commands that can appear in an index entry.
+% Since there are some commands we want to expand, and others we don't,
+% we have to laboriously prevent expansion for those that we don't.
+%
+\def\indexdummies{%
+ \escapechar = `\\ % use backslash in output files.
+ address@hidden@}% change to @@ when we switch to @ as escape char in index
files.
+ \def\ {\realbackslash\space }%
+ %
+ % Need these unexpandable (because we define \tt as a dummy)
+ % definitions when @{ or @} appear in index entry text. Also, more
+ % complicated, when \tex is in effect and \{ is a \delimiter again.
+ % We can't use \lbracecmd and \rbracecmd because texindex assumes
+ % braces and backslashes are used only as delimiters. Perhaps we
+ % should define @lbrace and @rbrace commands a la @comma.
+ \def\{{{\tt\char123}}%
+ \def\}{{\tt\char125}}%
+ %
+ % I don't entirely understand this, but when an index entry is
+ % generated from a macro call, the \endinput which \scanmacro inserts
+ % causes processing to be prematurely terminated. This is,
+ % apparently, because \indexsorttmp is fully expanded, and \endinput
+ % is an expandable command. The redefinition below makes \endinput
+ % disappear altogether for that purpose -- although logging shows that
+ % processing continues to some further point. On the other hand, it
+ % seems \endinput does not hurt in the printed index arg, since that
+ % is still getting written without apparent harm.
+ %
+ % Sample source (mac-idx3.tex, reported by Graham Percival to
+ % help-texinfo, 22may06):
+ % @macro funindex {WORD}
+ % @findex xyz
+ % @end macro
+ % ...
+ % @funindex commtest
+ %
+ % The above is not enough to reproduce the bug, but it gives the flavor.
+ %
+ % Sample whatsit resulting:
+ % address@hidden@folio address@hidden address@hidden }}}
+ %
+ % So:
+ \let\endinput = \empty
+ %
+ % Do the redefinitions.
+ \commondummies
+}
+
+% For the aux and toc files, @ is the escape character. So we want to
+% redefine everything using @ as the escape character (instead of
+% \realbackslash, still used for index files). When everything uses @,
+% this will be simpler.
+%
+\def\atdummies{%
+ address@hidden@@}%
+ \def\ {@ }%
+ \let\{ = \lbraceatcmd
+ \let\} = \rbraceatcmd
+ %
+ % Do the redefinitions.
+ \commondummies
+ \otherbackslash
+}
+
+% Called from \indexdummies and \atdummies.
+%
+\def\commondummies{%
+ %
+ % \definedummyword defines \#1 as \string\#1\space, thus effectively
+ % preventing its expansion. This is used only for control words,
+ % not control letters, because the \space would be incorrect for
+ % control characters, but is needed to separate the control word
+ % from whatever follows.
+ %
+ % For control letters, we have \definedummyletter, which omits the
+ % space.
+ %
+ % These can be used both for control words that take an argument and
+ % those that do not. If it is followed by {arg} in the input, then
+ % that will dutifully get written to the index (or wherever).
+ %
+ \def\definedummyword ##1{\def##1{\string##1\space}}%
+ \def\definedummyletter##1{\def##1{\string##1}}%
+ \let\definedummyaccent\definedummyletter
+ %
+ \commondummiesnofonts
+ %
+ \definedummyletter\_%
+ \definedummyletter\-%
+ %
+ % Non-English letters.
+ \definedummyword\AA
+ \definedummyword\AE
+ \definedummyword\DH
+ \definedummyword\L
+ \definedummyword\O
+ \definedummyword\OE
+ \definedummyword\TH
+ \definedummyword\aa
+ \definedummyword\ae
+ \definedummyword\dh
+ \definedummyword\exclamdown
+ \definedummyword\l
+ \definedummyword\o
+ \definedummyword\oe
+ \definedummyword\ordf
+ \definedummyword\ordm
+ \definedummyword\questiondown
+ \definedummyword\ss
+ \definedummyword\th
+ %
+ % Although these internal commands shouldn't show up, sometimes they do.
+ \definedummyword\bf
+ \definedummyword\gtr
+ \definedummyword\hat
+ \definedummyword\less
+ \definedummyword\sf
+ \definedummyword\sl
+ \definedummyword\tclose
+ \definedummyword\tt
+ %
+ \definedummyword\LaTeX
+ \definedummyword\TeX
+ %
+ % Assorted special characters.
+ \definedummyword\arrow
+ \definedummyword\bullet
+ \definedummyword\comma
+ \definedummyword\copyright
+ \definedummyword\registeredsymbol
+ \definedummyword\dots
+ \definedummyword\enddots
+ \definedummyword\entrybreak
+ \definedummyword\equiv
+ \definedummyword\error
+ \definedummyword\euro
+ \definedummyword\expansion
+ \definedummyword\geq
+ \definedummyword\guillemetleft
+ \definedummyword\guillemetright
+ \definedummyword\guilsinglleft
+ \definedummyword\guilsinglright
+ \definedummyword\lbracechar
+ \definedummyword\leq
+ \definedummyword\minus
+ \definedummyword\ogonek
+ \definedummyword\pounds
+ \definedummyword\point
+ \definedummyword\print
+ \definedummyword\quotedblbase
+ \definedummyword\quotedblleft
+ \definedummyword\quotedblright
+ \definedummyword\quoteleft
+ \definedummyword\quoteright
+ \definedummyword\quotesinglbase
+ \definedummyword\rbracechar
+ \definedummyword\result
+ \definedummyword\textdegree
+ %
+ % We want to disable all macros so that they are not expanded by \write.
+ \macrolist
+ %
+ \normalturnoffactive
+ %
+ % Handle some cases of @value -- where it does not contain any
+ % (non-fully-expandable) commands.
+ \makevalueexpandable
+}
+
+% \commondummiesnofonts: common to \commondummies and \indexnofonts.
+%
+\def\commondummiesnofonts{%
+ % Control letters and accents.
+ \definedummyletter\!%
+ \definedummyaccent\"%
+ \definedummyaccent\'%
+ \definedummyletter\*%
+ \definedummyaccent\,%
+ \definedummyletter\.%
+ \definedummyletter\/%
+ \definedummyletter\:%
+ \definedummyaccent\=%
+ \definedummyletter\?%
+ \definedummyaccent\^%
+ \definedummyaccent\`%
+ \definedummyaccent\~%
+ \definedummyword\u
+ \definedummyword\v
+ \definedummyword\H
+ \definedummyword\dotaccent
+ \definedummyword\ogonek
+ \definedummyword\ringaccent
+ \definedummyword\tieaccent
+ \definedummyword\ubaraccent
+ \definedummyword\udotaccent
+ \definedummyword\dotless
+ %
+ % Texinfo font commands.
+ \definedummyword\b
+ \definedummyword\i
+ \definedummyword\r
+ \definedummyword\sansserif
+ \definedummyword\sc
+ \definedummyword\slanted
+ \definedummyword\t
+ %
+ % Commands that take arguments.
+ \definedummyword\abbr
+ \definedummyword\acronym
+ \definedummyword\anchor
+ \definedummyword\cite
+ \definedummyword\code
+ \definedummyword\command
+ \definedummyword\dfn
+ \definedummyword\dmn
+ \definedummyword\email
+ \definedummyword\emph
+ \definedummyword\env
+ \definedummyword\file
+ \definedummyword\image
+ \definedummyword\indicateurl
+ \definedummyword\inforef
+ \definedummyword\kbd
+ \definedummyword\key
+ \definedummyword\math
+ \definedummyword\option
+ \definedummyword\pxref
+ \definedummyword\ref
+ \definedummyword\samp
+ \definedummyword\strong
+ \definedummyword\tie
+ \definedummyword\uref
+ \definedummyword\url
+ \definedummyword\var
+ \definedummyword\verb
+ \definedummyword\w
+ \definedummyword\xref
+}
+
+% \indexnofonts is used when outputting the strings to sort the index
+% by, and when constructing control sequence names. It eliminates all
+% control sequences and just writes whatever the best ASCII sort string
+% would be for a given command (usually its argument).
+%
+\def\indexnofonts{%
+ % Accent commands should become @asis.
+ \def\definedummyaccent##1{\let##1\asis}%
+ % We can just ignore other control letters.
+ \def\definedummyletter##1{\let##1\empty}%
+ % All control words become @asis by default; overrides below.
+ \let\definedummyword\definedummyaccent
+ %
+ \commondummiesnofonts
+ %
+ % Don't no-op \tt, since it isn't a user-level command
+ % and is used in the definitions of the active chars like <, >, |, etc.
+ % Likewise with the other plain tex font commands.
+ %\let\tt=\asis
+ %
+ \def\ { }%
+ address@hidden@}%
+ \def\_{\normalunderscore}%
+ \def\-{}% @- shouldn't affect sorting
+ %
+ % Unfortunately, texindex is not prepared to handle braces in the
+ % content at all. So for index sorting, we map @{ and @} to strings
+ % starting with |, since that ASCII character is between ASCII { and }.
+ \def\{{|a}%
+ \def\lbracechar{|a}%
+ %
+ \def\}{|b}%
+ \def\rbracechar{|b}%
+ %
+ % Non-English letters.
+ \def\AA{AA}%
+ \def\AE{AE}%
+ \def\DH{DZZ}%
+ \def\L{L}%
+ \def\OE{OE}%
+ \def\O{O}%
+ \def\TH{ZZZ}%
+ \def\aa{aa}%
+ \def\ae{ae}%
+ \def\dh{dzz}%
+ \def\exclamdown{!}%
+ \def\l{l}%
+ \def\oe{oe}%
+ \def\ordf{a}%
+ \def\ordm{o}%
+ \def\o{o}%
+ \def\questiondown{?}%
+ \def\ss{ss}%
+ \def\th{zzz}%
+ %
+ \def\LaTeX{LaTeX}%
+ \def\TeX{TeX}%
+ %
+ % Assorted special characters.
+ % (The following {} will end up in the sort string, but that's ok.)
+ \def\arrow{->}%
+ \def\bullet{bullet}%
+ \def\comma{,}%
+ \def\copyright{copyright}%
+ \def\dots{...}%
+ \def\enddots{...}%
+ \def\equiv{==}%
+ \def\error{error}%
+ \def\euro{euro}%
+ \def\expansion{==>}%
+ \def\geq{>=}%
+ \def\guillemetleft{<<}%
+ \def\guillemetright{>>}%
+ \def\guilsinglleft{<}%
+ \def\guilsinglright{>}%
+ \def\leq{<=}%
+ \def\minus{-}%
+ \def\point{.}%
+ \def\pounds{pounds}%
+ \def\print{-|}%
+ \def\quotedblbase{"}%
+ \def\quotedblleft{"}%
+ \def\quotedblright{"}%
+ \def\quoteleft{`}%
+ \def\quoteright{'}%
+ \def\quotesinglbase{,}%
+ \def\registeredsymbol{R}%
+ \def\result{=>}%
+ \def\textdegree{o}%
+ %
+ \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax
+ \else \indexlquoteignore \fi
+ %
+ % We need to get rid of all macros, leaving only the arguments (if present).
+ % Of course this is not nearly correct, but it is the best we can do for now.
+ % makeinfo does not expand macros in the argument to @deffn, which ends up
+ % writing an index entry, and texindex isn't prepared for an index sort entry
+ % that starts with \.
+ %
+ % Since macro invocations are followed by braces, we can just redefine them
+ % to take a single TeX argument. The case of a macro invocation that
+ % goes to end-of-line is not handled.
+ %
+ \macrolist
+}
+
+% Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us
+% ignore left quotes in the sort term.
+{\catcode`\`=\active
+ \gdef\indexlquoteignore{\let`=\empty}}
+
+\let\indexbackslash=0 %overridden during \printindex.
+\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
+
+% Most index entries go through here, but \dosubind is the general case.
+% #1 is the index name, #2 is the entry text.
+\def\doind#1#2{\dosubind{#1}{#2}{}}
+
+% Workhorse for all \fooindexes.
+% #1 is name of index, #2 is stuff to put there, #3 is subentry --
+% empty if called from \doind, as we usually are (the main exception
+% is with most defuns, which call us directly).
+%
+\def\dosubind#1#2#3{%
+ \iflinks
+ {%
+ % Store the main index entry text (including the third arg).
+ \toks0 = {#2}%
+ % If third arg is present, precede it with a space.
+ \def\thirdarg{#3}%
+ \ifx\thirdarg\empty \else
+ \toks0 = \expandafter{\the\toks0 \space #3}%
+ \fi
+ %
+ \edef\writeto{\csname#1indfile\endcsname}%
+ %
+ \safewhatsit\dosubindwrite
+ }%
+ \fi
+}
+
+% Write the entry in \toks0 to the index file:
+%
+\def\dosubindwrite{%
+ % Put the index entry in the margin if desired.
+ \ifx\SETmarginindex\relax\else
+ \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
+ \fi
+ %
+ % Remember, we are within a group.
+ \indexdummies % Must do this here, since \bf, etc expand at this stage
+ \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
+ % so it will be output as is; and it will print as backslash.
+ %
+ % Process the index entry with all font commands turned off, to
+ % get the string to sort by.
+ {\indexnofonts
+ \edef\temp{\the\toks0}% need full expansion
+ \xdef\indexsorttmp{\temp}%
+ }%
+ %
+ % Set up the complete index entry, with both the sort key and
+ % the original text, including any font commands. We write
+ % three arguments to \entry to the .?? file (four in the
+ % subentry case), texindex reduces to two when writing the .??s
+ % sorted result.
+ \edef\temp{%
+ \write\writeto{%
+ \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
+ }%
+ \temp
+}
+
+% Take care of unwanted page breaks/skips around a whatsit:
+%
+% If a skip is the last thing on the list now, preserve it
+% by backing up by \lastskip, doing the \write, then inserting
+% the skip again. Otherwise, the whatsit generated by the
+% \write or \pdfdest will make \lastskip zero. The result is that
+% sequences like this:
+% @end defun
+% @tindex whatever
+% @defun ...
+% will have extra space inserted, because the \medbreak in the
+% start of the @defun won't see the skip inserted by the @end of
+% the previous defun.
+%
+% But don't do any of this if we're not in vertical mode. We
+% don't want to do a \vskip and prematurely end a paragraph.
+%
+% Avoid page breaks due to these extra skips, too.
+%
+% But wait, there is a catch there:
+% We'll have to check whether \lastskip is zero skip. \ifdim is not
+% sufficient for this purpose, as it ignores stretch and shrink parts
+% of the skip. The only way seems to be to check the textual
+% representation of the skip.
+%
+% The following is almost like \def\zeroskipmacro{0.0pt} except that
+% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
+%
+\edef\zeroskipmacro{\expandafter\the\csname address@hidden
+%
+\newskip\whatsitskip
+\newcount\whatsitpenalty
+%
+% ..., ready, GO:
+%
+\def\safewhatsit#1{\ifhmode
+ #1%
+ \else
+ % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
+ \whatsitskip = \lastskip
+ \edef\lastskipmacro{\the\lastskip}%
+ \whatsitpenalty = \lastpenalty
+ %
+ % If \lastskip is nonzero, that means the last item was a
+ % skip. And since a skip is discardable, that means this
+ % -\whatsitskip glue we're inserting is preceded by a
+ % non-discardable item, therefore it is not a potential
+ % breakpoint, therefore no \nobreak needed.
+ \ifx\lastskipmacro\zeroskipmacro
+ \else
+ \vskip-\whatsitskip
+ \fi
+ %
+ #1%
+ %
+ \ifx\lastskipmacro\zeroskipmacro
+ % If \lastskip was zero, perhaps the last item was a penalty, and
+ % perhaps it was >=10000, e.g., a \nobreak. In that case, we want
+ % to re-insert the same penalty (values >10000 are used for various
+ % signals); since we just inserted a non-discardable item, any
+ % following glue (such as a \parskip) would be a breakpoint. For example:
+ % @deffn deffn-whatever
+ % @vindex index-whatever
+ % Description.
+ % would allow a break between the index-whatever whatsit
+ % and the "Description." paragraph.
+ \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
+ \else
+ % On the other hand, if we had a nonzero \lastskip,
+ % this make-up glue would be preceded by a non-discardable item
+ % (the whatsit from the \write), so we must insert a \nobreak.
+ \nobreak\vskip\whatsitskip
+ \fi
+\fi}
+
+% The index entry written in the file actually looks like
+% \entry {sortstring}{page}{topic}
+% or
+% \entry {sortstring}{page}{topic}{subtopic}
+% The texindex program reads in these files and writes files
+% containing these kinds of lines:
+% \initial {c}
+% before the first topic whose initial is c
+% \entry {topic}{pagelist}
+% for a topic that is used without subtopics
+% \primary {topic}
+% for the beginning of a topic that is used with subtopics
+% \secondary {subtopic}{pagelist}
+% for each subtopic.
+
+% Define the user-accessible indexing commands
+% @findex, @vindex, @kindex, @cindex.
+
+\def\findex {\fnindex}
+\def\kindex {\kyindex}
+\def\cindex {\cpindex}
+\def\vindex {\vrindex}
+\def\tindex {\tpindex}
+\def\pindex {\pgindex}
+
+\def\cindexsub {\begingroup\obeylines\cindexsub}
+{\obeylines %
+\gdef\cindexsub "#1" #2^^M{\endgroup %
+\dosubind{cp}{#2}{#1}}}
+
+% Define the macros used in formatting output of the sorted index material.
+
+% @printindex causes a particular index (the ??s file) to get printed.
+% It does not print any chapter heading (usually an @unnumbered).
+%
+\parseargdef\printindex{\begingroup
+ \dobreak \chapheadingskip{10000}%
+ %
+ \smallfonts \rm
+ \tolerance = 9500
+ \plainfrenchspacing
+ \everypar = {}% don't want the \kern\-parindent from indentation suppression.
+ %
+ % See if the index file exists and is nonempty.
+ % Change catcode of @ here so that if the index file contains
+ % \initial address@hidden
+ % as its first line, TeX doesn't complain about mismatched braces
+ % (because it thinks @} is a control sequence).
+ \catcode`\@ = 11
+ \openin 1 \jobname.#1s
+ \ifeof 1
+ % \enddoublecolumns gets confused if there is no text in the index,
+ % and it loses the chapter title and the aux file entries for the
+ % index. The easiest way to prevent this problem is to make sure
+ % there is some text.
+ \putwordIndexNonexistent
+ \else
+ %
+ % If the index file exists but is empty, then \openin leaves \ifeof
+ % false. We have to make TeX try to read something from the file, so
+ % it can discover if there is anything in it.
+ \read 1 to \temp
+ \ifeof 1
+ \putwordIndexIsEmpty
+ \else
+ % Index files are almost Texinfo source, but we use \ as the escape
+ % character. It would be better to use @, but that's too big a change
+ % to make right now.
+ \def\indexbackslash{\backslashcurfont}%
+ \catcode`\\ = 0
+ \escapechar = `\\
+ \begindoublecolumns
+ \input \jobname.#1s
+ \enddoublecolumns
+ \fi
+ \fi
+ \closein 1
+\endgroup}
+
+% These macros are used by the sorted index file itself.
+% Change them to control the appearance of the index.
+
+\def\initial#1{{%
+ % Some minor font changes for the special characters.
+ \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
+ %
+ % Remove any glue we may have, we'll be inserting our own.
+ \removelastskip
+ %
+ % We like breaks before the index initials, so insert a bonus.
+ \nobreak
+ \vskip 0pt plus 3\baselineskip
+ \penalty 0
+ \vskip 0pt plus -3\baselineskip
+ %
+ % Typeset the initial. Making this add up to a whole number of
+ % baselineskips increases the chance of the dots lining up from column
+ % to column. It still won't often be perfect, because of the stretch
+ % we need before each entry, but it's better.
+ %
+ % No shrink because it confuses \balancecolumns.
+ \vskip 1.67\baselineskip plus .5\baselineskip
+ \leftline{\secbf #1}%
+ % Do our best not to break after the initial.
+ \nobreak
+ \vskip .33\baselineskip plus .1\baselineskip
+}}
+
+% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
+% then page number (#2) flushed to the right margin. It is used for index
+% and table of contents entries. The paragraph is indented by \leftskip.
+%
+% A straightforward implementation would start like this:
+% \def\entry#1#2{...
+% But this freezes the catcodes in the argument, and can cause problems to
+% @code, which sets - active. This problem was fixed by a kludge---
+% ``-'' was active throughout whole index, but this isn't really right.
+% The right solution is to prevent \entry from swallowing the whole text.
+% --kasal, 21nov03
+\def\entry{%
+ \begingroup
+ %
+ % Start a new paragraph if necessary, so our assignments below can't
+ % affect previous text.
+ \par
+ %
+ % Do not fill out the last line with white space.
+ \parfillskip = 0in
+ %
+ % No extra space above this paragraph.
+ \parskip = 0in
+ %
+ % Do not prefer a separate line ending with a hyphen to fewer lines.
+ \finalhyphendemerits = 0
+ %
+ % \hangindent is only relevant when the entry text and page number
+ % don't both fit on one line. In that case, bob suggests starting the
+ % dots pretty far over on the line. Unfortunately, a large
+ % indentation looks wrong when the entry text itself is broken across
+ % lines. So we use a small indentation and put up with long leaders.
+ %
+ % \hangafter is reset to 1 (which is the value we want) at the start
+ % of each paragraph, so we need not do anything with that.
+ \hangindent = 2em
+ %
+ % When the entry text needs to be broken, just fill out the first line
+ % with blank space.
+ \rightskip = 0pt plus1fil
+ %
+ % A bit of stretch before each entry for the benefit of balancing
+ % columns.
+ \vskip 0pt plus1pt
+ %
+ % When reading the text of entry, convert explicit line breaks
+ % from @* into spaces. The user might give these in long section
+ % titles, for instance.
+ \def\*{\unskip\space\ignorespaces}%
+ \def\entrybreak{\hfil\break}%
+ %
+ % Swallow the left brace of the text (first parameter):
+ \afterassignment\doentry
+ \let\temp =
+}
+\def\entrybreak{\unskip\space\ignorespaces}%
+\def\doentry{%
+ \bgroup % Instead of the swallowed brace.
+ \noindent
+ \aftergroup\finishentry
+ % And now comes the text of the entry.
+}
+\def\finishentry#1{%
+ % #1 is the page number.
+ %
+ % The following is kludged to not output a line of dots in the index if
+ % there are no page numbers. The next person who breaks this will be
+ % cursed by a Unix daemon.
+ \setbox\boxA = \hbox{#1}%
+ \ifdim\wd\boxA = 0pt
+ \ %
+ \else
+ %
+ % If we must, put the page number on a line of its own, and fill out
+ % this line with blank space. (The \hfil is overwhelmed with the
+ % fill leaders glue in \indexdotfill if the page number does fit.)
+ \hfil\penalty50
+ \null\nobreak\indexdotfill % Have leaders before the page number.
+ %
+ % The `\ ' here is removed by the implicit \unskip that TeX does as
+ % part of (the primitive) \par. Without it, a spurious underfull
+ % \hbox ensues.
+ \ifpdf
+ \pdfgettoks#1.%
+ \ \the\toksA
+ \else
+ \ #1%
+ \fi
+ \fi
+ \par
+ \endgroup
+}
+
+% Like plain.tex's \dotfill, except uses up at least 1 em.
+\def\indexdotfill{\cleaders
+ \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}
+
+\def\primary #1{\line{#1\hfil}}
+
+\newskip\secondaryindent \secondaryindent=0.5cm
+\def\secondary#1#2{{%
+ \parfillskip=0in
+ \parskip=0in
+ \hangindent=1in
+ \hangafter=1
+ \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
+ \ifpdf
+ \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+ \else
+ #2
+ \fi
+ \par
+}}
+
+% Define two-column mode, which we use to typeset indexes.
+% Adapted from the TeXbook, page 416, which is to say,
+% the manmac.tex format used to print the TeXbook itself.
address@hidden
+
+\newbox\partialpage
+\newdimen\doublecolumnhsize
+
+\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+ % Grab any single-column material above us.
+ \output = {%
+ %
+ % Here is a possibility not foreseen in manmac: if we accumulate a
+ % whole lot of material, we might end up calling this \output
+ % routine twice in a row (see the doublecol-lose test, which is
+ % essentially a couple of indexes with @setchapternewpage off). In
+ % that case we just ship out what is in \partialpage with the normal
+ % output routine. Generally, \partialpage will be empty when this
+ % runs and this will be a no-op. See the indexspread.tex test case.
+ \ifvoid\partialpage \else
+ \onepageout{\pagecontents\partialpage}%
+ \fi
+ %
+ \global\setbox\partialpage = \vbox{%
+ % Unvbox the main output page.
+ \unvbox\PAGE
+ \kern-\topskip \kern\baselineskip
+ }%
+ }%
+ \eject % run that output routine to set \partialpage
+ %
+ % Use the double-column output routine for subsequent pages.
+ \output = {\doublecolumnout}%
+ %
+ % Change the page size parameters. We could do this once outside this
+ % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
+ % format, but then we repeat the same computation. Repeating a couple
+ % of assignments once per index is clearly meaningless for the
+ % execution time, so we may as well do it in one place.
+ %
+ % First we halve the line length, less a little for the gutter between
+ % the columns. We compute the gutter based on the line length, so it
+ % changes automatically with the paper format. The magic constant
+ % below is chosen so that the gutter has the same value (well, +-<1pt)
+ % as it did when we hard-coded it.
+ %
+ % We put the result in a separate register, \doublecolumhsize, so we
+ % can restore it in \pagesofar, after \hsize itself has (potentially)
+ % been clobbered.
+ %
+ \doublecolumnhsize = \hsize
+ \advance\doublecolumnhsize by -.04154\hsize
+ \divide\doublecolumnhsize by 2
+ \hsize = \doublecolumnhsize
+ %
+ % Double the \vsize as well. (We don't need a separate register here,
+ % since nobody clobbers \vsize.)
+ \vsize = 2\vsize
+}
+
+% The double-column output routine for all double-column pages except
+% the last.
+%
+\def\doublecolumnout{%
+ \splittopskip=\topskip \splitmaxdepth=\maxdepth
+ % Get the available space for the double columns -- the normal
+ % (undoubled) page height minus any material left over from the
+ % previous page.
+ \dimen@ = \vsize
+ \divide\dimen@ by 2
+ \advance\dimen@ by -\ht\partialpage
+ %
+ % box0 will be the left-hand column, box2 the right.
+ \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+ \onepageout\pagesofar
+ \unvbox255
+ \penalty\outputpenalty
+}
+%
+% Re-output the contents of the output page -- any previous material,
+% followed by the two boxes we just split, in box0 and box2.
+\def\pagesofar{%
+ \unvbox\partialpage
+ %
+ \hsize = \doublecolumnhsize
+ \wd0=\hsize \wd2=\hsize
+ \hbox to\pagewidth{\box0\hfil\box2}%
+}
+%
+% All done with double columns.
+\def\enddoublecolumns{%
+ % The following penalty ensures that the page builder is exercised
+ % _before_ we change the output routine. This is necessary in the
+ % following situation:
+ %
+ % The last section of the index consists only of a single entry.
+ % Before this section, \pagetotal is less than \pagegoal, so no
+ % break occurs before the last section starts. However, the last
+ % section, consisting of \initial and the single \entry, does not
+ % fit on the page and has to be broken off. Without the following
+ % penalty the page builder will not be exercised until \eject
+ % below, and by that time we'll already have changed the output
+ % routine to the \balancecolumns version, so the next-to-last
+ % double-column page will be processed with \balancecolumns, which
+ % is wrong: The two columns will go to the main vertical list, with
+ % the broken-off section in the recent contributions. As soon as
+ % the output routine finishes, TeX starts reconsidering the page
+ % break. The two columns and the broken-off section both fit on the
+ % page, because the two columns now take up only half of the page
+ % goal. When TeX sees \eject from below which follows the final
+ % section, it invokes the new output routine that we've set after
+ % \balancecolumns below; \onepageout will try to fit the two columns
+ % and the final section into the vbox of \pageheight (see
+ % \pagebody), causing an overfull box.
+ %
+ % Note that glue won't work here, because glue does not exercise the
+ % page builder, unlike penalties (see The TeXbook, pp. 280-281).
+ \penalty0
+ %
+ \output = {%
+ % Split the last of the double-column material. Leave it on the
+ % current page, no automatic page break.
+ \balancecolumns
+ %
+ % If we end up splitting too much material for the current page,
+ % though, there will be another page break right after this \output
+ % invocation ends. Having called \balancecolumns once, we do not
+ % want to call it again. Therefore, reset \output to its normal
+ % definition right away. (We hope \balancecolumns will never be
+ % called on to balance too much material, but if it is, this makes
+ % the output somewhat more palatable.)
+ \global\output = {\onepageout{\pagecontents\PAGE}}%
+ }%
+ \eject
+ \endgroup % started in \begindoublecolumns
+ %
+ % \pagegoal was set to the doubled \vsize above, since we restarted
+ % the current page. We're now back to normal single-column
+ % typesetting, so reset \pagegoal to the normal \vsize (after the
+ % \endgroup where \vsize got restored).
+ \pagegoal = \vsize
+}
+%
+% Called at the end of the double column material.
+\def\balancecolumns{%
+ \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
+ \dimen@ = \ht0
+ \advance\dimen@ by \topskip
+ \advance\dimen@ by-\baselineskip
+ \divide\dimen@ by 2 % target to split to
+ %debug\message{final 2-column material height=\the\ht0, address@hidden
+ \splittopskip = \topskip
+ % Loop until we get a decent breakpoint.
+ {%
+ \vbadness = 10000
+ \loop
+ \global\setbox3 = \copy0
+ \global\setbox1 = \vsplit3 to \dimen@
+ \ifdim\ht3>\dimen@
+ \global\advance\dimen@ by 1pt
+ \repeat
+ }%
+ %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
+ \setbox0=\vbox address@hidden
+ \setbox2=\vbox address@hidden
+ %
+ \pagesofar
+}
+\catcode`\@ = \other
+
+
+\message{sectioning,}
+% Chapters, sections, etc.
+
+% Let's start with @part.
+\outer\parseargdef\part{\partzzz{#1}}
+\def\partzzz#1{%
+ \chapoddpage
+ \null
+ \vskip.3\vsize % move it down on the page a bit
+ \begingroup
+ \noindent \titlefonts\rmisbold #1\par % the text
+ \let\lastnode=\empty % no node to associate with
+ \writetocentry{part}{#1}{}% but put it in the toc
+ \headingsoff % no headline or footline on the part page
+ \chapoddpage
+ \endgroup
+}
+
+% \unnumberedno is an oxymoron. But we count the unnumbered
+% sections so that we can refer to them unambiguously in the pdf
+% outlines by their "section number". We avoid collisions with chapter
+% numbers by starting them at 10000. (If a document ever has 10000
+% chapters, we're in trouble anyway, I'm sure.)
+\newcount\unnumberedno \unnumberedno = 10000
+\newcount\chapno
+\newcount\secno \secno=0
+\newcount\subsecno \subsecno=0
+\newcount\subsubsecno \subsubsecno=0
+
+% This counter is funny since it counts through charcodes of letters A, B, ...
+\newcount\appendixno \appendixno = `\@
+%
+% \def\appendixletter{\char\the\appendixno}
+% We do the following ugly conditional instead of the above simple
+% construct for the sake of pdftex, which needs the actual
+% letter in the expansion, not just typeset.
+%
+\def\appendixletter{%
+ \ifnum\appendixno=`A A%
+ \else\ifnum\appendixno=`B B%
+ \else\ifnum\appendixno=`C C%
+ \else\ifnum\appendixno=`D D%
+ \else\ifnum\appendixno=`E E%
+ \else\ifnum\appendixno=`F F%
+ \else\ifnum\appendixno=`G G%
+ \else\ifnum\appendixno=`H H%
+ \else\ifnum\appendixno=`I I%
+ \else\ifnum\appendixno=`J J%
+ \else\ifnum\appendixno=`K K%
+ \else\ifnum\appendixno=`L L%
+ \else\ifnum\appendixno=`M M%
+ \else\ifnum\appendixno=`N N%
+ \else\ifnum\appendixno=`O O%
+ \else\ifnum\appendixno=`P P%
+ \else\ifnum\appendixno=`Q Q%
+ \else\ifnum\appendixno=`R R%
+ \else\ifnum\appendixno=`S S%
+ \else\ifnum\appendixno=`T T%
+ \else\ifnum\appendixno=`U U%
+ \else\ifnum\appendixno=`V V%
+ \else\ifnum\appendixno=`W W%
+ \else\ifnum\appendixno=`X X%
+ \else\ifnum\appendixno=`Y Y%
+ \else\ifnum\appendixno=`Z Z%
+ % The \the is necessary, despite appearances, because \appendixletter is
+ % expanded while writing the .toc file. \char\appendixno is not
+ % expandable, thus it is written literally, thus all appendixes come out
+ % with the same letter (or @) in the toc without it.
+ \else\char\the\appendixno
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+% Each @chapter defines these (using marks) as the number+name, number
+% and name of the chapter. Page headings and footings can use
+% these. @section does likewise.
+\def\thischapter{}
+\def\thischapternum{}
+\def\thischaptername{}
+\def\thissection{}
+\def\thissectionnum{}
+\def\thissectionname{}
+
+\newcount\absseclevel % used to calculate proper heading level
+\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
+
+% @raisesections: treat @section as chapter, @subsection as section, etc.
+\def\raisesections{\global\advance\secbase by -1}
+\let\up=\raisesections % original BFox name
+
+% @lowersections: treat @chapter as section, @section as subsection, etc.
+\def\lowersections{\global\advance\secbase by 1}
+\let\down=\lowersections % original BFox name
+
+% we only have subsub.
+\chardef\maxseclevel = 3
+%
+% A numbered section within an unnumbered changes to unnumbered too.
+% To achieve this, remember the "biggest" unnum. sec. we are currently in:
+\chardef\unnlevel = \maxseclevel
+%
+% Trace whether the current chapter is an appendix or not:
+% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
+\def\chapheadtype{N}
+
+% Choose a heading macro
+% #1 is heading type
+% #2 is heading level
+% #3 is text for heading
+\def\genhead#1#2#3{%
+ % Compute the abs. sec. level:
+ \absseclevel=#2
+ \advance\absseclevel by \secbase
+ % Make sure \absseclevel doesn't fall outside the range:
+ \ifnum \absseclevel < 0
+ \absseclevel = 0
+ \else
+ \ifnum \absseclevel > 3
+ \absseclevel = 3
+ \fi
+ \fi
+ % The heading type:
+ \def\headtype{#1}%
+ \if \headtype U%
+ \ifnum \absseclevel < \unnlevel
+ \chardef\unnlevel = \absseclevel
+ \fi
+ \else
+ % Check for appendix sections:
+ \ifnum \absseclevel = 0
+ \edef\chapheadtype{\headtype}%
+ \else
+ \if \headtype A\if \chapheadtype N%
+ address@hidden within a non-appendix chapter}%
+ \fi\fi
+ \fi
+ % Check for numbered within unnumbered:
+ \ifnum \absseclevel > \unnlevel
+ \def\headtype{U}%
+ \else
+ \chardef\unnlevel = 3
+ \fi
+ \fi
+ % Now print the heading:
+ \if \headtype U%
+ \ifcase\absseclevel
+ \unnumberedzzz{#3}%
+ \or \unnumberedseczzz{#3}%
+ \or \unnumberedsubseczzz{#3}%
+ \or \unnumberedsubsubseczzz{#3}%
+ \fi
+ \else
+ \if \headtype A%
+ \ifcase\absseclevel
+ \appendixzzz{#3}%
+ \or \appendixsectionzzz{#3}%
+ \or \appendixsubseczzz{#3}%
+ \or \appendixsubsubseczzz{#3}%
+ \fi
+ \else
+ \ifcase\absseclevel
+ \chapterzzz{#3}%
+ \or \seczzz{#3}%
+ \or \numberedsubseczzz{#3}%
+ \or \numberedsubsubseczzz{#3}%
+ \fi
+ \fi
+ \fi
+ \suppressfirstparagraphindent
+}
+
+% an interface:
+\def\numhead{\genhead N}
+\def\apphead{\genhead A}
+\def\unnmhead{\genhead U}
+
+% @chapter, @appendix, @unnumbered. Increment top-level counter, reset
+% all lower-level sectioning counters to zero.
+%
+% Also set \chaplevelprefix, which we prepend to @float sequence numbers
+% (e.g., figures), q.v. By default (before any chapter), that is empty.
+\let\chaplevelprefix = \empty
+%
+\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
+\def\chapterzzz#1{%
+ % section resetting is \global in case the chapter is in a group, such
+ % as an @include file.
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\chapno by 1
+ %
+ % Used for \float.
+ \gdef\chaplevelprefix{\the\chapno.}%
+ \resetallfloatnos
+ %
+ % \putwordChapter can contain complex things in translations.
+ \toks0=\expandafter{\putwordChapter}%
+ \message{\the\toks0 \space \the\chapno}%
+ %
+ % Write the actual heading.
+ \chapmacro{#1}{Ynumbered}{\the\chapno}%
+ %
+ % So @section and the like are numbered underneath this chapter.
+ \global\let\section = \numberedsec
+ \global\let\subsection = \numberedsubsec
+ \global\let\subsubsection = \numberedsubsubsec
+}
+
+\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
+%
+\def\appendixzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\appendixno by 1
+ \gdef\chaplevelprefix{\appendixletter.}%
+ \resetallfloatnos
+ %
+ % \putwordAppendix can contain complex things in translations.
+ \toks0=\expandafter{\putwordAppendix}%
+ \message{\the\toks0 \space \appendixletter}%
+ %
+ \chapmacro{#1}{Yappendix}{\appendixletter}%
+ %
+ \global\let\section = \appendixsec
+ \global\let\subsection = \appendixsubsec
+ \global\let\subsubsection = \appendixsubsubsec
+}
+
+% normally unnmhead0 calls unnumberedzzz:
+\outer\parseargdef\unnumbered{\unnmhead0{#1}}
+\def\unnumberedzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\unnumberedno by 1
+ %
+ % Since an unnumbered has no number, no prefix for figures.
+ \global\let\chaplevelprefix = \empty
+ \resetallfloatnos
+ %
+ % This used to be simply \message{#1}, but TeX fully expands the
+ % argument to \message. Therefore, if #1 contained @-commands, TeX
+ % expanded them. For example, in address@hidden The @cite{Book}', TeX
+ % expanded @cite (which turns out to cause errors because \cite is meant
+ % to be executed, not expanded).
+ %
+ % Anyway, we don't want the fully-expanded definition of @cite to appear
+ % as a result of the \message, we just want address@hidden' itself. We use
+ % \the<toks register> to achieve this: TeX expands \the<toks> only once,
+ % simply yielding the contents of <toks register>. (We also do this for
+ % the toc entries.)
+ \toks0 = {#1}%
+ \message{(\the\toks0)}%
+ %
+ \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
+ %
+ \global\let\section = \unnumberedsec
+ \global\let\subsection = \unnumberedsubsec
+ \global\let\subsubsection = \unnumberedsubsubsec
+}
+
+% @centerchap is like @unnumbered, but the heading is centered.
+\outer\parseargdef\centerchap{%
+ % Well, we could do the following in a group, but that would break
+ % an assumption that \chapmacro is called at the outermost level.
+ % Thus we are safer this way: --kasal, 24feb04
+ \let\centerparametersmaybe = \centerparameters
+ \unnmhead0{#1}%
+ \let\centerparametersmaybe = \relax
+}
+
+% @top is like @unnumbered.
+\let\top\unnumbered
+
+% Sections.
+%
+\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
+\def\seczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
+}
+
+% normally calls appendixsectionzzz:
+\outer\parseargdef\appendixsection{\apphead1{#1}}
+\def\appendixsectionzzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
+}
+\let\appendixsec\appendixsection
+
+% normally calls unnumberedseczzz:
+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}}
+\def\unnumberedseczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
+}
+
+% Subsections.
+%
+% normally calls numberedsubseczzz:
+\outer\parseargdef\numberedsubsec{\numhead2{#1}}
+\def\numberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
+}
+
+% normally calls appendixsubseczzz:
+\outer\parseargdef\appendixsubsec{\apphead2{#1}}
+\def\appendixsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno}%
+}
+
+% normally calls unnumberedsubseczzz:
+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}}
+\def\unnumberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno}%
+}
+
+% Subsubsections.
+%
+% normally numberedsubsubseczzz:
+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
+\def\numberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynumbered}%
+ {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% normally appendixsubsubseczzz:
+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}}
+\def\appendixsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% normally unnumberedsubsubseczzz:
+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}}
+\def\unnumberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% These macros control what the section commands do, according
+% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
+% Define them by default for a numbered chapter.
+\let\section = \numberedsec
+\let\subsection = \numberedsubsec
+\let\subsubsection = \numberedsubsubsec
+
+% Define @majorheading, @heading and @subheading
+
+\def\majorheading{%
+ {\advance\chapheadingskip by 10pt \chapbreak }%
+ \parsearg\chapheadingzzz
+}
+
+\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
+\def\chapheadingzzz#1{%
+ \vbox{\chapfonts \raggedtitlesettings #1\par}%
+ \nobreak\bigskip \nobreak
+ \suppressfirstparagraphindent
+}
+
+% @heading, @subheading, @subsubheading.
+\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+
+% These macros generate a chapter, section, etc. heading only
+% (including whitespace, linebreaking, etc. around it),
+% given all the information in convenient, parsed form.
+
+% Args are the skip and penalty (usually negative)
+\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+
+% Parameter controlling skip before chapter headings (if needed)
+\newskip\chapheadingskip
+
+% Define plain chapter starts, and page on/off switching for it.
+\def\chapbreak{\dobreak \chapheadingskip {-4000}}
+\def\chappager{\par\vfill\supereject}
+% Because \domark is called before \chapoddpage, the filler page will
+% get the headings for the next chapter, which is wrong. But we don't
+% care -- we just disable all headings on the filler page.
+\def\chapoddpage{%
+ \chappager
+ \ifodd\pageno \else
+ \begingroup
+ \headingsoff
+ \null
+ \chappager
+ \endgroup
+ \fi
+}
+
+\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
+
+\def\CHAPPAGoff{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chapbreak
+\global\let\pagealignmacro=\chappager}
+
+\def\CHAPPAGon{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chappager
+\global\let\pagealignmacro=\chappager
+\global\def\HEADINGSon{\HEADINGSsingle}}
+
+\def\CHAPPAGodd{%
+\global\let\contentsalignmacro = \chapoddpage
+\global\let\pchapsepmacro=\chapoddpage
+\global\let\pagealignmacro=\chapoddpage
+\global\def\HEADINGSon{\HEADINGSdouble}}
+
+\CHAPPAGon
+
+% Chapter opening.
+%
+% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
+% Yappendix, Yomitfromtoc), #3 the chapter number.
+%
+% To test against our argument.
+\def\Ynothingkeyword{Ynothing}
+\def\Yomitfromtockeyword{Yomitfromtoc}
+\def\Yappendixkeyword{Yappendix}
+%
+\def\chapmacro#1#2#3{%
+ % Insert the first mark before the heading break (see notes for \domark).
+ \let\prevchapterdefs=\lastchapterdefs
+ \let\prevsectiondefs=\lastsectiondefs
+ \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
+ \gdef\thissection{}}%
+ %
+ \def\temptype{#2}%
+ \ifx\temptype\Ynothingkeyword
+ \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+ \gdef\thischapter{\thischaptername}}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
+ \gdef\thischapter{}}%
+ \else\ifx\temptype\Yappendixkeyword
+ \toks0={#1}%
+ \xdef\lastchapterdefs{%
+ \gdef\noexpand\thischaptername{\the\toks0}%
+ \gdef\noexpand\thischapternum{\appendixletter}%
+ % \noexpand\putwordAppendix avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
+ \noexpand\thischapternum:
+ \noexpand\thischaptername}%
+ }%
+ \else
+ \toks0={#1}%
+ \xdef\lastchapterdefs{%
+ \gdef\noexpand\thischaptername{\the\toks0}%
+ \gdef\noexpand\thischapternum{\the\chapno}%
+ % \noexpand\putwordChapter avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
+ \noexpand\thischapternum:
+ \noexpand\thischaptername}%
+ }%
+ \fi\fi\fi
+ %
+ % Output the mark. Pass it through \safewhatsit, to take care of
+ % the preceding space.
+ \safewhatsit\domark
+ %
+ % Insert the chapter heading break.
+ \pchapsepmacro
+ %
+ % Now the second mark, after the heading break. No break points
+ % between here and the heading.
+ \let\prevchapterdefs=\lastchapterdefs
+ \let\prevsectiondefs=\lastsectiondefs
+ \domark
+ %
+ {%
+ \chapfonts \rmisbold
+ %
+ % Have to define \lastsection before calling \donoderef, because the
+ % xref code eventually uses it. On the other hand, it has to be called
+ % after \pchapsepmacro, or the headline will change too soon.
+ \gdef\lastsection{#1}%
+ %
+ % Only insert the separating space if we have a chapter/appendix
+ % number, and don't print the unnumbered ``number''.
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unnchap}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
+ \def\toctype{omit}%
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
+ \def\toctype{app}%
+ \else
+ \setbox0 = \hbox{#3\enspace}%
+ \def\toctype{numchap}%
+ \fi\fi\fi
+ %
+ % Write the toc entry for this chapter. Must come before the
+ % \donoderef, because we include the current node name in the toc
+ % entry, and \donoderef resets it to empty.
+ \writetocentry{\toctype}{#1}{#3}%
+ %
+ % For pdftex, we have to write out the node definition (aka, make
+ % the pdfdest) after any page break, but before the actual text has
+ % been typeset. If the destination for the pdf outline is after the
+ % text, then jumping from the outline may wind up with the text not
+ % being visible, for instance under high magnification.
+ \donoderef{#2}%
+ %
+ % Typeset the actual heading.
+ \nobreak % Avoid page breaks at the interline glue.
+ \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe
+ \unhbox0 #1\par}%
+ }%
+ \nobreak\bigskip % no page break after a chapter title
+ \nobreak
+}
+
+% @centerchap -- centered and unnumbered.
+\let\centerparametersmaybe = \relax
+\def\centerparameters{%
+ \advance\rightskip by 3\rightskip
+ \leftskip = \rightskip
+ \parfillskip = 0pt
+}
+
+
+% I don't think this chapter style is supported any more, so I'm not
+% updating it with the new noderef stuff. We'll see. --karl, 11aug03.
+%
+\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
+%
+\def\unnchfopen #1{%
+ \chapoddpage
+ \vbox{\chapfonts \raggedtitlesettings #1\par}%
+ \nobreak\bigskip\nobreak
+}
+\def\chfopen #1#2{\chapoddpage {\chapfonts
+\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
+\par\penalty 5000 %
+}
+\def\centerchfopen #1{%
+ \chapoddpage
+ \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}%
+ \nobreak\bigskip \nobreak
+}
+\def\CHAPFopen{%
+ \global\let\chapmacro=\chfopen
+ \global\let\centerchapmacro=\centerchfopen}
+
+
+% Section titles. These macros combine the section number parts and
+% call the generic \sectionheading to do the printing.
+%
+\newskip\secheadingskip
+\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
+
+% Subsection titles.
+\newskip\subsecheadingskip
+\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
+
+% Subsubsection titles.
+\def\subsubsecheadingskip{\subsecheadingskip}
+\def\subsubsecheadingbreak{\subsecheadingbreak}
+
+
+% Print any size, any type, section title.
+%
+% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
+% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
+% section number.
+%
+\def\seckeyword{sec}
+%
+\def\sectionheading#1#2#3#4{%
+ {%
+ \checkenv{}% should not be in an environment.
+ %
+ % Switch to the right set of fonts.
+ \csname #2fonts\endcsname \rmisbold
+ %
+ \def\sectionlevel{#2}%
+ \def\temptype{#3}%
+ %
+ % Insert first mark before the heading break (see notes for \domark).
+ \let\prevsectiondefs=\lastsectiondefs
+ \ifx\temptype\Ynothingkeyword
+ \ifx\sectionlevel\seckeyword
+ \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
+ \gdef\thissection{\thissectionname}}%
+ \fi
+ \else\ifx\temptype\Yomitfromtockeyword
+ % Don't redefine \thissection.
+ \else\ifx\temptype\Yappendixkeyword
+ \ifx\sectionlevel\seckeyword
+ \toks0={#1}%
+ \xdef\lastsectiondefs{%
+ \gdef\noexpand\thissectionname{\the\toks0}%
+ \gdef\noexpand\thissectionnum{#4}%
+ % \noexpand\putwordSection avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thissection{\noexpand\putwordSection{}
+ \noexpand\thissectionnum:
+ \noexpand\thissectionname}%
+ }%
+ \fi
+ \else
+ \ifx\sectionlevel\seckeyword
+ \toks0={#1}%
+ \xdef\lastsectiondefs{%
+ \gdef\noexpand\thissectionname{\the\toks0}%
+ \gdef\noexpand\thissectionnum{#4}%
+ % \noexpand\putwordSection avoids expanding indigestible
+ % commands in some of the translations.
+ \gdef\noexpand\thissection{\noexpand\putwordSection{}
+ \noexpand\thissectionnum:
+ \noexpand\thissectionname}%
+ }%
+ \fi
+ \fi\fi\fi
+ %
+ % Go into vertical mode. Usually we'll already be there, but we
+ % don't want the following whatsit to end up in a preceding paragraph
+ % if the document didn't happen to have a blank line.
+ \par
+ %
+ % Output the mark. Pass it through \safewhatsit, to take care of
+ % the preceding space.
+ \safewhatsit\domark
+ %
+ % Insert space above the heading.
+ \csname #2headingbreak\endcsname
+ %
+ % Now the second mark, after the heading break. No break points
+ % between here and the heading.
+ \let\prevsectiondefs=\lastsectiondefs
+ \domark
+ %
+ % Only insert the space after the number if we have a section number.
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unn}%
+ \gdef\lastsection{#1}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ % for @headings -- no section number, don't include in toc,
+ % and don't redefine \lastsection.
+ \setbox0 = \hbox{}%
+ \def\toctype{omit}%
+ \let\sectionlevel=\empty
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{app}%
+ \gdef\lastsection{#1}%
+ \else
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{num}%
+ \gdef\lastsection{#1}%
+ \fi\fi\fi
+ %
+ % Write the toc entry (before \donoderef). See comments in \chapmacro.
+ \writetocentry{\toctype\sectionlevel}{#1}{#4}%
+ %
+ % Write the node reference (= pdf destination for pdftex).
+ % Again, see comments in \chapmacro.
+ \donoderef{#3}%
+ %
+ % Interline glue will be inserted when the vbox is completed.
+ % That glue will be a valid breakpoint for the page, since it'll be
+ % preceded by a whatsit (usually from the \donoderef, or from the
+ % \writetocentry if there was no node). We don't want to allow that
+ % break, since then the whatsits could end up on page n while the
+ % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000.
+ \nobreak
+ %
+ % Output the actual section heading.
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
+ \hangindent=\wd0 % zero if no section number
+ \unhbox0 #1}%
+ }%
+ % Add extra space after the heading -- half of whatever came above it.
+ % Don't allow stretch, though.
+ \kern .5 \csname #2headingskip\endcsname
+ %
+ % Do not let the kern be a potential breakpoint, as it would be if it
+ % was followed by glue.
+ \nobreak
+ %
+ % We'll almost certainly start a paragraph next, so don't let that
+ % glue accumulate. (Not a breakpoint because it's preceded by a
+ % discardable item.) However, when a paragraph is not started next
+ % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out
+ % or the negative glue will cause weirdly wrong output, typically
+ % obscuring the section heading with something else.
+ \vskip-\parskip
+ %
+ % This is so the last item on the main vertical list is a known
+ % \penalty > 10000, so \startdefun, etc., can recognize the situation
+ % and do the needful.
+ \penalty 10001
+}
+
+
+\message{toc,}
+% Table of contents.
+\newwrite\tocfile
+
+% Write an entry to the toc file, opening it if necessary.
+% Called from @chapter, etc.
+%
+% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
+% We append the current node name (if any) and page number as additional
+% arguments for the \{chap,sec,...}entry macros which will eventually
+% read this. The node name is used in the pdf outlines as the
+% destination to jump to.
+%
+% We open the .toc file for writing here instead of at @setfilename (or
+% any other fixed time) so that @contents can be anywhere in the document.
+% But if #1 is `omit', then we don't do anything. This is used for the
+% table of contents chapter openings themselves.
+%
+\newif\iftocfileopened
+\def\omitkeyword{omit}%
+%
+\def\writetocentry#1#2#3{%
+ \edef\writetoctype{#1}%
+ \ifx\writetoctype\omitkeyword \else
+ \iftocfileopened\else
+ \immediate\openout\tocfile = \jobname.toc
+ \global\tocfileopenedtrue
+ \fi
+ %
+ \iflinks
+ {\atdummies
+ \edef\temp{%
+ address@hidden
+ \temp
+ }%
+ \fi
+ \fi
+ %
+ % Tell \shipout to create a pdf destination on each page, if we're
+ % writing pdf. These are used in the table of contents. We can't
+ % just write one on every page because the title pages are numbered
+ % 1 and 2 (the page numbers aren't printed), and so are the first
+ % two pages of the document. Thus, we'd have two destinations named
+ % `1', and two named `2'.
+ \ifpdf \global\pdfmakepagedesttrue \fi
+}
+
+
+% These characters do not print properly in the Computer Modern roman
+% fonts, so we must take special care. This is more or less redundant
+% with the Texinfo input format setup at the end of this file.
+%
+\def\activecatcodes{%
+ \catcode`\"=\active
+ \catcode`\$=\active
+ \catcode`\<=\active
+ \catcode`\>=\active
+ \catcode`\\=\active
+ \catcode`\^=\active
+ \catcode`\_=\active
+ \catcode`\|=\active
+ \catcode`\~=\active
+}
+
+
+% Read the toc file, which is essentially Texinfo input.
+\def\readtocfile{%
+ \setupdatafile
+ \activecatcodes
+ \input \tocreadfilename
+}
+
+\newskip\contentsrightmargin \contentsrightmargin=1in
+\newcount\savepageno
+\newcount\lastnegativepageno \lastnegativepageno = -1
+
+% Prepare to read what we've written to \tocfile.
+%
+\def\startcontents#1{%
+ % If @setchapternewpage on, and @headings double, the contents should
+ % start on an odd page, unlike chapters. Thus, we maintain
+ % \contentsalignmacro in parallel with \pagealignmacro.
+ % From: Torbjorn Granlund <address@hidden>
+ \contentsalignmacro
+ \immediate\closeout\tocfile
+ %
+ % Don't need to put `Contents' or `Short Contents' in the headline.
+ % It is abundantly clear what they are.
+ \chapmacro{#1}{Yomitfromtoc}{}%
+ %
+ \savepageno = \pageno
+ \begingroup % Set up to handle contents files properly.
+ \raggedbottom % Worry more about breakpoints than the bottom.
+ \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+ %
+ % Roman numerals for page numbers.
+ \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
+}
+
+% redefined for the two-volume lispref. We always output on
+% \jobname.toc even if this is redefined.
+%
+\def\tocreadfilename{\jobname.toc}
+
+% Normal (long) toc.
+%
+\def\contents{%
+ \startcontents{\putwordTOC}%
+ \openin 1 \tocreadfilename\space
+ \ifeof 1 \else
+ \readtocfile
+ \fi
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \ifeof 1 \else
+ \pdfmakeoutlines
+ \fi
+ \closein 1
+ \endgroup
+ \lastnegativepageno = \pageno
+ \global\pageno = \savepageno
+}
+
+% And just the chapters.
+\def\summarycontents{%
+ \startcontents{\putwordShortTOC}%
+ %
+ \let\partentry = \shortpartentry
+ \let\numchapentry = \shortchapentry
+ \let\appentry = \shortchapentry
+ \let\unnchapentry = \shortunnchapentry
+ % We want a true roman here for the page numbers.
+ \secfonts
+ \let\rm=\shortcontrm \let\bf=\shortcontbf
+ \let\sl=\shortcontsl \let\tt=\shortconttt
+ \rm
+ \hyphenpenalty = 10000
+ \advance\baselineskip by 1pt % Open it up a little.
+ \def\numsecentry##1##2##3##4{}
+ \let\appsecentry = \numsecentry
+ \let\unnsecentry = \numsecentry
+ \let\numsubsecentry = \numsecentry
+ \let\appsubsecentry = \numsecentry
+ \let\unnsubsecentry = \numsecentry
+ \let\numsubsubsecentry = \numsecentry
+ \let\appsubsubsecentry = \numsecentry
+ \let\unnsubsubsecentry = \numsecentry
+ \openin 1 \tocreadfilename\space
+ \ifeof 1 \else
+ \readtocfile
+ \fi
+ \closein 1
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \endgroup
+ \lastnegativepageno = \pageno
+ \global\pageno = \savepageno
+}
+\let\shortcontents = \summarycontents
+
+% Typeset the label for a chapter or appendix for the short contents.
+% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
+%
+\def\shortchaplabel#1{%
+ % This space should be enough, since a single number is .5em, and the
+ % widest letter (M) is 1em, at least in the Computer Modern fonts.
+ % But use \hss just in case.
+ % (This space doesn't include the extra space that gets added after
+ % the label; that gets put in by \shortchapentry above.)
+ %
+ % We'd like to right-justify chapter numbers, but that looks strange
+ % with appendix letters. And right-justifying numbers and
+ % left-justifying letters looks strange when there is less than 10
+ % chapters. Have to read the whole toc once to know how many chapters
+ % there are before deciding ...
+ \hbox to 1em{#1\hss}%
+}
+
+% These macros generate individual entries in the table of contents.
+% The first argument is the chapter or section name.
+% The last argument is the page number.
+% The arguments in between are the chapter number, section number, ...
+
+% Parts, in the main contents. Replace the part number, which doesn't
+% exist, with an empty box. Let's hope all the numbers have the same width.
+% Also ignore the page number, which is conventionally not printed.
+\def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}}
+\def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}}
+%
+% Parts, in the short toc.
+\def\shortpartentry#1#2#3#4{%
+ \penalty-300
+ \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip
+ \shortchapentry{{\bf #1}}{\numeralbox}{}{}%
+}
+
+% Chapters, in the main contents.
+\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
+%
+% Chapters, in the short toc.
+% See comments in \dochapentry re vbox and related settings.
+\def\shortchapentry#1#2#3#4{%
+ \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
+}
+
+% Appendices, in the main contents.
+% Need the word Appendix, and a fixed-size box.
+%
+\def\appendixbox#1{%
+ % We use M since it's probably the widest letter.
+ \setbox0 = \hbox{\putwordAppendix{} M}%
+ \hbox to \wd0{\putwordAppendix{} #1\hss}}
+%
+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
+
+% Unnumbered chapters.
+\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
+\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
+
+% Sections.
+\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
+\let\appsecentry=\numsecentry
+\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
+
+% Subsections.
+\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsecentry=\numsubsecentry
+\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
+
+% And subsubsections.
+\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsubsecentry=\numsubsubsecentry
+\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
+
+% This parameter controls the indentation of the various levels.
+% Same as \defaultparindent.
+\newdimen\tocindent \tocindent = 15pt
+
+% Now for the actual typesetting. In all these, #1 is the text and #2 is the
+% page number.
+%
+% If the toc has to be broken over pages, we want it to be at chapters
+% if at all possible; hence the \penalty.
+\def\dochapentry#1#2{%
+ \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
+ \begingroup
+ \chapentryfonts
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+ \endgroup
+ \nobreak\vskip .25\baselineskip plus.1\baselineskip
+}
+
+\def\dosecentry#1#2{\begingroup
+ \secentryfonts \leftskip=\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsecentry#1#2{\begingroup
+ \subsecentryfonts \leftskip=2\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsubsecentry#1#2{\begingroup
+ \subsubsecentryfonts \leftskip=3\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+% We use the same \entry macro as for the index entries.
+\let\tocentry = \entry
+
+% Space between chapter (or whatever) number and the title.
+\def\labelspace{\hskip1em \relax}
+
+\def\dopageno#1{{\rm #1}}
+\def\doshortpageno#1{{\rm #1}}
+
+\def\chapentryfonts{\secfonts \rm}
+\def\secentryfonts{\textfonts}
+\def\subsecentryfonts{\textfonts}
+\def\subsubsecentryfonts{\textfonts}
+
+
+\message{environments,}
+% @foo ... @end foo.
+
+% @tex ... @end tex escapes into raw TeX temporarily.
+% One exception: @ is still an escape character, so that @end tex works.
+% But \@ or @@ will get a plain @ character.
+
+\envdef\tex{%
+ \setupmarkupstyle{tex}%
+ \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+ \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
+ \catcode `\%=14
+ \catcode `\+=\other
+ \catcode `\"=\other
+ \catcode `\|=\other
+ \catcode `\<=\other
+ \catcode `\>=\other
+ \catcode`\`=\other
+ \catcode`\'=\other
+ \escapechar=`\\
+ %
+ % ' is active in math mode (mathcode"8000). So reset it, and all our
+ % other math active characters (just in case), to plain's definitions.
+ \mathactive
+ %
+ \let\b=\ptexb
+ \let\bullet=\ptexbullet
+ \let\c=\ptexc
+ \let\,=\ptexcomma
+ \let\.=\ptexdot
+ \let\dots=\ptexdots
+ \let\equiv=\ptexequiv
+ \let\!=\ptexexclam
+ \let\i=\ptexi
+ \let\indent=\ptexindent
+ \let\noindent=\ptexnoindent
+ \let\{=\ptexlbrace
+ \let\+=\tabalign
+ \let\}=\ptexrbrace
+ \let\/=\ptexslash
+ \let\*=\ptexstar
+ \let\t=\ptext
+ \expandafter \let\csname top\endcsname=\ptextop % outer
+ \let\frenchspacing=\plainfrenchspacing
+ %
+ \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
+ \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
+ address@hidden@}%
+}
+% There is no need to define \Etex.
+
+% Define @lisp ... @end lisp.
+% @lisp environment forms a group so it can rebind things,
+% including the definition of @end lisp (which normally is erroneous).
+
+% Amount to narrow the margins by for @lisp.
+\newskip\lispnarrowing \lispnarrowing=0.4in
+
+% This is the definition that ^^M gets inside @lisp, @example, and other
+% such environments. \null is better than a space, since it doesn't
+% have any width.
+\def\lisppar{\null\endgraf}
+
+% This space is always present above and below environments.
+\newskip\envskipamount \envskipamount = 0pt
+
+% Make spacing and below environment symmetrical. We use \parskip here
+% to help in doing that, since in @example-like environments \parskip
+% is reset to zero; thus the \afterenvbreak inserts no space -- but the
+% start of the next paragraph will insert \parskip.
+%
+\def\aboveenvbreak{{%
+ % =10000 instead of <10000 because of a special case in \itemzzz and
+ % \sectionheading, q.v.
+ \ifnum \lastpenalty=10000 \else
+ \advance\envskipamount by \parskip
+ \endgraf
+ \ifdim\lastskip<\envskipamount
+ \removelastskip
+ % it's not a good place to break if the last penalty was \nobreak
+ % or better ...
+ \ifnum\lastpenalty<10000 \penalty-50 \fi
+ \vskip\envskipamount
+ \fi
+ \fi
+}}
+
+\let\afterenvbreak = \aboveenvbreak
+
+% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will
+% also clear it, so that its embedded environments do the narrowing again.
+\let\nonarrowing=\relax
+
+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+% environment contents.
+\font\circle=lcircle10
+\newdimen\circthick
+\newdimen\cartouter\newdimen\cartinner
+\newskip\normbskip\newskip\normpskip\newskip\normlskip
+\circthick=\fontdimen8\circle
+%
+\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
+\def\ctr{{\hskip 6pt\circle\char'010}}
+\def\cbl{{\circle\char'012\hskip -6pt}}
+\def\cbr{{\hskip 6pt\circle\char'011}}
+\def\carttop{\hbox to \cartouter{\hskip\lskip
+ \ctl\leaders\hrule height\circthick\hfil\ctr
+ \hskip\rskip}}
+\def\cartbot{\hbox to \cartouter{\hskip\lskip
+ \cbl\leaders\hrule height\circthick\hfil\cbr
+ \hskip\rskip}}
+%
+\newskip\lskip\newskip\rskip
+
+\envdef\cartouche{%
+ \ifhmode\par\fi % can't be in the midst of a paragraph.
+ \startsavinginserts
+ \lskip=\leftskip \rskip=\rightskip
+ \leftskip=0pt\rightskip=0pt % we want these *outside*.
+ \cartinner=\hsize \advance\cartinner by-\lskip
+ \advance\cartinner by-\rskip
+ \cartouter=\hsize
+ \advance\cartouter by 18.4pt % allow for 3pt kerns on either
+ % side, and for 6pt waste from
+ % each corner char, and rule thickness
+ \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+ % Flag to tell @lisp, etc., not to narrow margin.
+ \let\nonarrowing = t%
+ %
+ % If this cartouche directly follows a sectioning command, we need the
+ % \parskip glue (backspaced over by default) or the cartouche can
+ % collide with the section heading.
+ \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi
+ %
+ \vbox\bgroup
+ \baselineskip=0pt\parskip=0pt\lineskip=0pt
+ \carttop
+ \hbox\bgroup
+ \hskip\lskip
+ \vrule\kern3pt
+ \vbox\bgroup
+ \kern3pt
+ \hsize=\cartinner
+ \baselineskip=\normbskip
+ \lineskip=\normlskip
+ \parskip=\normpskip
+ \vskip -\parskip
+ \comment % For explanation, see the end of def\group.
+}
+\def\Ecartouche{%
+ \ifhmode\par\fi
+ \kern3pt
+ \egroup
+ \kern3pt\vrule
+ \hskip\rskip
+ \egroup
+ \cartbot
+ \egroup
+ \checkinserts
+}
+
+
+% This macro is called at the beginning of all the @example variants,
+% inside a group.
+\newdimen\nonfillparindent
+\def\nonfillstart{%
+ \aboveenvbreak
+ \hfuzz = 12pt % Don't be fussy
+ \sepspaces % Make spaces be word-separators rather than space tokens.
+ \let\par = \lisppar % don't ignore blank lines
+ \obeylines % each line of input is a line of output
+ \parskip = 0pt
+ % Turn off paragraph indentation but redefine \indent to emulate
+ % the normal \indent.
+ \nonfillparindent=\parindent
+ \parindent = 0pt
+ \let\indent\nonfillindent
+ %
+ \emergencystretch = 0pt % don't try to avoid overfull boxes
+ \ifx\nonarrowing\relax
+ \advance \leftskip by \lispnarrowing
+ \exdentamount=\lispnarrowing
+ \else
+ \let\nonarrowing = \relax
+ \fi
+ \let\exdent=\nofillexdent
+}
+
+\begingroup
+\obeyspaces
+% We want to swallow spaces (but not other tokens) after the fake
+% @indent in our nonfill-environments, where spaces are normally
+% active and set to @tie, resulting in them not being ignored after
+% @indent.
+\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}%
+\gdef\nonfillindentcheck{%
+\ifx\temp %
+\expandafter\nonfillindentgobble%
+\else%
+\leavevmode\nonfillindentbox%
+\fi%
+}%
+\endgroup
+\def\nonfillindentgobble#1{\nonfillindent}
+\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}}
+
+% If you want all examples etc. small: @set dispenvsize small.
+% If you want even small examples the full size: @set dispenvsize nosmall.
+% This affects the following displayed environments:
+% @example, @display, @format, @lisp
+%
+\def\smallword{small}
+\def\nosmallword{nosmall}
+\let\SETdispenvsize\relax
+\def\setnormaldispenv{%
+ \ifx\SETdispenvsize\smallword
+ % end paragraph for sake of leading, in case document has no blank
+ % line. This is redundant with what happens in \aboveenvbreak, but
+ % we need to do it before changing the fonts, and it's inconvenient
+ % to change the fonts afterward.
+ \ifnum \lastpenalty=10000 \else \endgraf \fi
+ \smallexamplefonts \rm
+ \fi
+}
+\def\setsmalldispenv{%
+ \ifx\SETdispenvsize\nosmallword
+ \else
+ \ifnum \lastpenalty=10000 \else \endgraf \fi
+ \smallexamplefonts \rm
+ \fi
+}
+
+% We often define two environments, @foo and @smallfoo.
+% Let's do it in one command. #1 is the env name, #2 the definition.
+\def\makedispenvdef#1#2{%
+ \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}%
+ \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}%
+ \expandafter\let\csname E#1\endcsname \afterenvbreak
+ \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
+}
+
+% Define two environment synonyms (#1 and #2) for an environment.
+\def\maketwodispenvdef#1#2#3{%
+ \makedispenvdef{#1}{#3}%
+ \makedispenvdef{#2}{#3}%
+}
+%
+% @lisp: indented, narrowed, typewriter font;
+% @example: same as @lisp.
+%
+% @smallexample and @smalllisp: use smaller fonts.
+% Originally contributed by address@hidden
+%
+\maketwodispenvdef{lisp}{example}{%
+ \nonfillstart
+ \tt\setupmarkupstyle{example}%
+ \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+ \gobble % eat return
+}
+% @display/@smalldisplay: same as @lisp except keep current font.
+%
+\makedispenvdef{display}{%
+ \nonfillstart
+ \gobble
+}
+
+% @format/@smallformat: same as @display except don't narrow margins.
+%
+\makedispenvdef{format}{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \gobble
+}
+
+% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
+\envdef\flushleft{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \gobble
+}
+\let\Eflushleft = \afterenvbreak
+
+% @flushright.
+%
+\envdef\flushright{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \advance\leftskip by 0pt plus 1fill\relax
+ \gobble
+}
+\let\Eflushright = \afterenvbreak
+
+
+% @raggedright does more-or-less normal line breaking but no right
+% justification. From plain.tex.
+\envdef\raggedright{%
+ \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax
+}
+\let\Eraggedright\par
+
+\envdef\raggedleft{%
+ \parindent=0pt \leftskip0pt plus2em
+ \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
+ \hbadness=10000 % Last line will usually be underfull, so turn off
+ % badness reporting.
+}
+\let\Eraggedleft\par
+
+\envdef\raggedcenter{%
+ \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em
+ \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
+ \hbadness=10000 % Last line will usually be underfull, so turn off
+ % badness reporting.
+}
+\let\Eraggedcenter\par
+
+
+% @quotation does normal linebreaking (hence we can't use \nonfillstart)
+% and narrows the margins. We keep \parskip nonzero in general, since
+% we're doing normal filling. So, when using \aboveenvbreak and
+% \afterenvbreak, temporarily make \parskip 0.
+%
+\makedispenvdef{quotation}{\quotationstart}
+%
+\def\quotationstart{%
+ \indentedblockstart % same as \indentedblock, but increase right margin too.
+ \ifx\nonarrowing\relax
+ \advance\rightskip by \lispnarrowing
+ \fi
+ \parsearg\quotationlabel
+}
+
+% We have retained a nonzero parskip for the environment, since we're
+% doing normal filling.
+%
+\def\Equotation{%
+ \par
+ \ifx\quotationauthor\thisisundefined\else
+ % indent a bit.
+ \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
+ \fi
+ {\parskip=0pt \afterenvbreak}%
+}
+\def\Esmallquotation{\Equotation}
+
+% If we're given an argument, typeset it in bold with a colon after.
+\def\quotationlabel#1{%
+ \def\temp{#1}%
+ \ifx\temp\empty \else
+ {\bf #1: }%
+ \fi
+}
+
+% @indentedblock is like @quotation, but indents only on the left and
+% has no optional argument.
+%
+\makedispenvdef{indentedblock}{\indentedblockstart}
+%
+\def\indentedblockstart{%
+ {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
+ \parindent=0pt
+ %
+ % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
+ \ifx\nonarrowing\relax
+ \advance\leftskip by \lispnarrowing
+ \exdentamount = \lispnarrowing
+ \else
+ \let\nonarrowing = \relax
+ \fi
+}
+
+% Keep a nonzero parskip for the environment, since we're doing normal filling.
+%
+\def\Eindentedblock{%
+ \par
+ {\parskip=0pt \afterenvbreak}%
+}
+\def\Esmallindentedblock{\Eindentedblock}
+
+
+% LaTeX-like @address@hidden verbatim and @verb{<char>...<char>}
+% If we want to allow any <char> as delimiter,
+% we need the curly braces so that makeinfo sees the @verb command, eg:
+% address@hidden' would look like the '@verbx' command. address@hidden
+%
+% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook.
+%
+% [Knuth] p.344; only we need to do the other characters Texinfo sets
+% active too. Otherwise, they get lost as the first character on a
+% verbatim line.
+\def\dospecials{%
+ \do\ \do\\\do\{\do\}\do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
+ \do\<\do\>\do\|address@hidden"%
+ % Don't do the quotes -- if we do, @set txicodequoteundirected and
+ % @set txicodequotebacktick will not have effect on @verb and
+ % @verbatim, and ?` and !` ligatures won't get disabled.
+ %\do\`\do\'%
+}
+%
+% [Knuth] p. 380
+\def\uncatcodespecials{%
+ \def\do##1{\catcode`##1=\other}\dospecials}
+%
+% Setup for the @verb command.
+%
+% Eight spaces for a tab
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
+\endgroup
+%
+\def\setupverb{%
+ \tt % easiest (and conventionally used) font for verbatim
+ \def\par{\leavevmode\endgraf}%
+ \setupmarkupstyle{verb}%
+ \tabeightspaces
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count
+ % must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+}
+
+% Setup for the @verbatim environment
+%
+% Real tab expansion.
+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
+%
+% We typeset each line of the verbatim in an \hbox, so we can handle
+% tabs. The \global is in case the verbatim line starts with an accent,
+% or some other command that starts with a begin-group. Otherwise, the
+% entire \verbbox would disappear at the corresponding end-group, before
+% it is typeset. Meanwhile, we can't have nested verbatim commands
+% (can we?), so the \global won't be overwriting itself.
+\newbox\verbbox
+\def\starttabbox{\global\setbox\verbbox=\hbox\bgroup}
+%
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabexpand{%
+ \catcode`\^^I=\active
+ \def^^I{\leavevmode\egroup
+ \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab
+ \divide\dimen\verbbox by\tabw
+ \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw
+ \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw
+ \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox
+ }%
+ }
+\endgroup
+
+% start the verbatim environment.
+\def\setupverbatim{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \tt % easiest (and conventionally used) font for verbatim
+ % The \leavevmode here is for blank lines. Otherwise, we would
+ % never \starttabox and the \egroup would end verbatim mode.
+ \def\par{\leavevmode\egroup\box\verbbox\endgraf}%
+ \tabexpand
+ \setupmarkupstyle{verbatim}%
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count.
+ % Must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+ \everypar{\starttabbox}%
+}
+
+% Do the @verb magic: verbatim text is quoted by unique
+% delimiter characters. Before first delimiter expect a
+% right brace, after last delimiter expect closing brace:
+%
+% \def\doverb'{'<char>#1<char>'}'{#1}
+%
+% [Knuth] p. 382; only eat outer {}
+\begingroup
+ \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
+ \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
+\endgroup
+%
+\def\verb{\begingroup\setupverb\doverb}
+%
+%
+% Do the @verbatim magic: define the macro \doverbatim so that
+% the (first) argument ends when '@end verbatim' is reached, ie:
+%
+% address@hidden verbatim{#1}
+%
+% For Texinfo it's a lot easier than for LaTeX,
+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
+% we need not redefine '\', '{' and '}'.
+%
+% Inspired by LaTeX's verbatim command set [latex.ltx]
+%
+\begingroup
+ \catcode`\ =\active
+ \obeylines %
+ % ignore everything up to the first ^^M, that's the newline at the end
+ % of the @verbatim input line itself. Otherwise we get an extra blank
+ % line in the output.
+ address@hidden verbatim{#2\noexpand\end\gobble verbatim}%
+ % We really want {...\end verbatim} in the body of the macro, but
+ % without the active space; thus we have to use \xdef and \gobble.
+\endgroup
+%
+\envdef\verbatim{%
+ \setupverbatim\doverbatim
+}
+\let\Everbatim = \afterenvbreak
+
+
+% @verbatiminclude FILE - insert text of file in verbatim environment.
+%
+\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
+%
+\def\doverbatiminclude#1{%
+ {%
+ \makevalueexpandable
+ \setupverbatim
+ \indexnofonts % Allow `@@' and other weird things in file names.
+ \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}%
+ \input #1
+ \afterenvbreak
+ }%
+}
+
+% @copying ... @end copying.
+% Save the text away for @insertcopying later.
+%
+% We save the uninterpreted tokens, rather than creating a box.
+% Saving the text in a box would be much easier, but then all the
+% typesetting commands (@smallbook, font changes, etc.) have to be done
+% beforehand -- and a) we want @copying to be done first in the source
+% file; b) letting users define the frontmatter in as flexible order as
+% possible is very desirable.
+%
+\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
address@hidden copying{\endgroup\def\copyingtext{#1}}
+%
+\def\insertcopying{%
+ \begingroup
+ \parindent = 0pt % paragraph indentation looks wrong on title page
+ \scanexp\copyingtext
+ \endgroup
+}
+
+
+\message{defuns,}
+% @defun etc.
+
+\newskip\defbodyindent \defbodyindent=.4in
+\newskip\defargsindent \defargsindent=50pt
+\newskip\deflastargmargin \deflastargmargin=18pt
+\newcount\defunpenalty
+
+% Start the processing of @deffn:
+\def\startdefun{%
+ \ifnum\lastpenalty<10000
+ \medbreak
+ \defunpenalty=10003 % Will keep this @deffn together with the
+ % following @def command, see below.
+ \else
+ % If there are two @def commands in a row, we'll have a \nobreak,
+ % which is there to keep the function description together with its
+ % header. But if there's nothing but headers, we need to allow a
+ % break somewhere. Check specifically for penalty 10002, inserted
+ % by \printdefunline, instead of 10000, since the sectioning
+ % commands also insert a nobreak penalty, and we don't want to allow
+ % a break between a section heading and a defun.
+ %
+ % As a further refinement, we avoid "club" headers by signalling
+ % with penalty of 10003 after the very first @deffn in the
+ % sequence (see above), and penalty of 10002 after any following
+ % @def command.
+ \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
+ %
+ % Similarly, after a section heading, do not allow a break.
+ % But do insert the glue.
+ \medskip % preceded by discardable penalty, so not a breakpoint
+ \fi
+ %
+ \parindent=0in
+ \advance\leftskip by \defbodyindent
+ \exdentamount=\defbodyindent
+}
+
+\def\dodefunx#1{%
+ % First, check whether we are in the right environment:
+ \checkenv#1%
+ %
+ % As above, allow line break if we have multiple x headers in a row.
+ % It's not a great place, though.
+ \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
+ %
+ % And now, it's time to reuse the body of the original defun:
+ \expandafter\gobbledefun#1%
+}
+\def\gobbledefun#1\startdefun{}
+
+% \printdefunline \deffnheader{text}
+%
+\def\printdefunline#1#2{%
+ \begingroup
+ % call \deffnheader:
+ #1#2 \endheader
+ % common ending:
+ \interlinepenalty = 10000
+ \advance\rightskip by 0pt plus 1fil\relax
+ \endgraf
+ \nobreak\vskip -\parskip
+ \penalty\defunpenalty % signal to \startdefun and \dodefunx
+ % Some of the @defun-type tags do not enable magic parentheses,
+ % rendering the following check redundant. But we don't optimize.
+ \checkparencounts
+ \endgroup
+}
+
+\def\Edefun{\endgraf\medbreak}
+
+% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
+% the only thing remaining is to define \deffnheader.
+%
+\def\makedefun#1{%
+ \expandafter\let\csname E#1\endcsname = \Edefun
+ \edef\temp{\noexpand\domakedefun
+ \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
+ \temp
+}
+
+% \domakedefun \deffn \deffnx \deffnheader
+%
+% Define \deffn and \deffnx, without parameters.
+% \deffnheader has to be defined explicitly.
+%
+\def\domakedefun#1#2#3{%
+ \envdef#1{%
+ \startdefun
+ \doingtypefnfalse % distinguish typed functions from all else
+ \parseargusing\activeparens{\printdefunline#3}%
+ }%
+ \def#2{\dodefunx#1}%
+ \def#3%
+}
+
+\newif\ifdoingtypefn % doing typed function?
+\newif\ifrettypeownline % typeset return type on its own line?
+
+% @deftypefnnewline on|off says whether the return type of typed functions
+% are printed on their own line. This affects @deftypefn, @deftypefun,
+% @deftypeop, and @deftypemethod.
+%
+\parseargdef\deftypefnnewline{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETtxideftypefnnl\endcsname
+ = \empty
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETtxideftypefnnl\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @txideftypefnnl value `\temp',
+ must be on|off}%
+ \fi\fi
+}
+
+% Untyped functions:
+
+% @deffn category name args
+\makedefun{deffn}{\deffngeneral{}}
+
+% @deffn category class name args
+\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
+
+% \defopon {category on}class name args
+\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deffngeneral {subind}category name args
+%
+\def\deffngeneral#1#2 #3 #4\endheader{%
+ % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
+ \dosubind{fn}{\code{#3}}{#1}%
+ \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
+}
+
+% Typed functions:
+
+% @deftypefn category type name args
+\makedefun{deftypefn}{\deftypefngeneral{}}
+
+% @deftypeop category class type name args
+\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
+
+% \deftypeopon {category on}class type name args
+\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypefngeneral {subind}category type name args
+%
+\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
+ \dosubind{fn}{\code{#4}}{#1}%
+ \doingtypefntrue
+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+% Typed variables:
+
+% @deftypevr category type var args
+\makedefun{deftypevr}{\deftypecvgeneral{}}
+
+% @deftypecv category class type var args
+\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
+
+% \deftypecvof {category of}class type var args
+\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypecvgeneral {subind}category type var args
+%
+\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
+ \dosubind{vr}{\code{#4}}{#1}%
+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+% Untyped variables:
+
+% @defvr category var args
+\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
+
+% @defcv category class var args
+\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
+
+% \defcvof {category of}class var args
+\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
+
+% Types:
+
+% @deftp category name args
+\makedefun{deftp}#1 #2 #3\endheader{%
+ \doind{tp}{\code{#2}}%
+ \defname{#1}{}{#2}\defunargs{#3\unskip}%
+}
+
+% Remaining @defun-like shortcuts:
+\makedefun{defun}{\deffnheader{\putwordDeffunc} }
+\makedefun{defmac}{\deffnheader{\putwordDefmac} }
+\makedefun{defspec}{\deffnheader{\putwordDefspec} }
+\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
+\makedefun{defvar}{\defvrheader{\putwordDefvar} }
+\makedefun{defopt}{\defvrheader{\putwordDefopt} }
+\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
+\makedefun{defmethod}{\defopon\putwordMethodon}
+\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
+\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
+\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
+
+% \defname, which formats the name of the @def (not the args).
+% #1 is the category, such as "Function".
+% #2 is the return type, if any.
+% #3 is the function name.
+%
+% We are followed by (but not passed) the arguments, if any.
+%
+\def\defname#1#2#3{%
+ \par
+ % Get the values of \leftskip and \rightskip as they were outside the @def...
+ \advance\leftskip by -\defbodyindent
+ %
+ % Determine if we are typesetting the return type of a typed function
+ % on a line by itself.
+ \rettypeownlinefalse
+ \ifdoingtypefn % doing a typed function specifically?
+ % then check user option for putting return type on its own line:
+ \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else
+ \rettypeownlinetrue
+ \fi
+ \fi
+ %
+ % How we'll format the category name. Putting it in brackets helps
+ % distinguish it from the body text that may end up on the next line
+ % just below it.
+ \def\temp{#1}%
+ \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
+ %
+ % Figure out line sizes for the paragraph shape. We'll always have at
+ % least two.
+ \tempnum = 2
+ %
+ % The first line needs space for \box0; but if \rightskip is nonzero,
+ % we need only space for the part of \box0 which exceeds it:
+ \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip
+ %
+ % If doing a return type on its own line, we'll have another line.
+ \ifrettypeownline
+ \advance\tempnum by 1
+ \def\maybeshapeline{0in \hsize}%
+ \else
+ \def\maybeshapeline{}%
+ \fi
+ %
+ % The continuations:
+ \dimen2=\hsize \advance\dimen2 by -\defargsindent
+ %
+ % The final paragraph shape:
+ \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2
+ %
+ % Put the category name at the right margin.
+ \noindent
+ \hbox to 0pt{%
+ \hfil\box0 \kern-\hsize
+ % \hsize has to be shortened this way:
+ \kern\leftskip
+ % Intentionally do not respect \rightskip, since we need the space.
+ }%
+ %
+ % Allow all lines to be underfull without complaint:
+ \tolerance=10000 \hbadness=10000
+ \exdentamount=\defbodyindent
+ {%
+ % defun fonts. We use typewriter by default (used to be bold) because:
+ % . we're printing identifiers, they should be in tt in principle.
+ % . in languages with many accents, such as Czech or French, it's
+ % common to leave accents off identifiers. The result looks ok in
+ % tt, but exceedingly strange in rm.
+ % . we don't want -- and --- to be treated as ligatures.
+ % . this still does not fix the ?` and !` ligatures, but so far no
+ % one has made identifiers using them :).
+ \df \tt
+ \def\temp{#2}% text of the return type
+ \ifx\temp\empty\else
+ \tclose{\temp}% typeset the return type
+ \ifrettypeownline
+ % put return type on its own line; prohibit line break following:
+ \hfil\vadjust{\nobreak}\break
+ \else
+ \space % type on same line, so just followed by a space
+ \fi
+ \fi % no return type
+ #3% output function name
+ }%
+ {\rm\enskip}% hskip 0.5 em of \tenrm
+ %
+ \boldbrax
+ % arguments will be output next, if any.
+}
+
+% Print arguments in slanted roman (not ttsl), inconsistently with using
+% tt for the name. This is because literal text is sometimes needed in
+% the argument list (groff manual), and ttsl and tt are not very
+% distinguishable. Prevent hyphenation at `-' chars.
+%
+\def\defunargs#1{%
+ % use sl by default (not ttsl),
+ % tt for the names.
+ \df \sl \hyphenchar\font=0
+ %
+ % On the other hand, if an argument has two dashes (for instance), we
+ % want a way to get ttsl. We used to recommend @var for that, so
+ % leave the code in, but it's strange for @var to lead to typewriter.
+ % Nowadays we recommend @code, since the difference between a ttsl hyphen
+ % and a tt hyphen is pretty tiny. @code also disables ?` !`.
+ \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
+ #1%
+ \sl\hyphenchar\font=45
+}
+
+% We want ()&[] to print specially on the defun line.
+%
+\def\activeparens{%
+ \catcode`\(=\active \catcode`\)=\active
+ \catcode`\[=\active \catcode`\]=\active
+ \catcode`\&=\active
+}
+
+% Make control sequences which act like normal parenthesis chars.
+\let\lparen = ( \let\rparen = )
+
+% Be sure that we always have a definition for `(', etc. For example,
+% if the fn name has parens in it, \boldbrax will not be in effect yet,
+% so TeX would otherwise complain about undefined control sequence.
+{
+ \activeparens
+ \global\let(=\lparen \global\let)=\rparen
+ \global\let[=\lbrack \global\let]=\rbrack
+ \global\let& = \&
+
+ \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+ \gdef\magicamp{\let&=\amprm}
+}
+
+\newcount\parencount
+
+% If we encounter &foo, then turn on ()-hacking afterwards
+\newif\ifampseen
+\def\amprm#1 {\ampseentrue{\bf\ }}
+
+\def\parenfont{%
+ \ifampseen
+ % At the first level, print parens in roman,
+ % otherwise use the default font.
+ \ifnum \parencount=1 \rm \fi
+ \else
+ % The \sf parens (in \boldbrax) actually are a little bolder than
+ % the contained text. This is especially needed for [ and ] .
+ \sf
+ \fi
+}
+\def\infirstlevel#1{%
+ \ifampseen
+ \ifnum\parencount=1
+ #1%
+ \fi
+ \fi
+}
+\def\bfafterword#1 {#1 \bf}
+
+\def\opnr{%
+ \global\advance\parencount by 1
+ {\parenfont(}%
+ \infirstlevel \bfafterword
+}
+\def\clnr{%
+ {\parenfont)}%
+ \infirstlevel \sl
+ \global\advance\parencount by -1
+}
+
+\newcount\brackcount
+\def\lbrb{%
+ \global\advance\brackcount by 1
+ {\bf[}%
+}
+\def\rbrb{%
+ {\bf]}%
+ \global\advance\brackcount by -1
+}
+
+\def\checkparencounts{%
+ \ifnum\parencount=0 \else \badparencount \fi
+ \ifnum\brackcount=0 \else \badbrackcount \fi
+}
+% these should not use \errmessage; the glibc manual, at least, actually
+% has such constructs (when documenting function pointers).
+\def\badparencount{%
+ \message{Warning: unbalanced parentheses in @def...}%
+ \global\parencount=0
+}
+\def\badbrackcount{%
+ \message{Warning: unbalanced square brackets in @def...}%
+ \global\brackcount=0
+}
+
+
+\message{macros,}
+% @macro.
+
+% To do this right we need a feature of e-TeX, \scantokens,
+% which we arrange to emulate with a temporary file in ordinary TeX.
+\ifx\eTeXversion\thisisundefined
+ \newwrite\macscribble
+ \def\scantokens#1{%
+ \toks0={#1}%
+ \immediate\openout\macscribble=\jobname.tmp
+ \immediate\write\macscribble{\the\toks0}%
+ \immediate\closeout\macscribble
+ \input \jobname.tmp
+ }
+\fi
+
+\def\scanmacro#1{\begingroup
+ \newlinechar`\^^M
+ \let\xeatspaces\eatspaces
+ %
+ % Undo catcode changes of \startcontents and \doprintindex
+ % When called from @insertcopying or (short)caption, we need active
+ % backslash to get it printed correctly. Previously, we had
+ % \catcode`\\=\other instead. We'll see whether a problem appears
+ % with macro expansion. --kasal, 19aug04
+ address@hidden \catcode`\\=\active \escapechar=`\@
+ %
+ % ... and for \example:
+ \spaceisspace
+ %
+ % The \empty here causes a following catcode 5 newline to be eaten as
+ % part of reading whitespace after a control sequence. It does not
+ % eat a catcode 13 newline. There's no good way to handle the two
+ % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX
+ % would then have different behavior). See the Macro Details node in
+ % the manual for the workaround we recommend for macros and
+ % line-oriented commands.
+ %
+ \scantokens{#1\empty}%
+\endgroup}
+
+\def\scanexp#1{%
+ \edef\temp{\noexpand\scanmacro{#1}}%
+ \temp
+}
+
+\newcount\paramno % Count of parameters
+\newtoks\macname % Macro name
+\newif\ifrecursive % Is it recursive?
+
+% List of all defined macros in the form
+% \definedummyword\macro1\definedummyword\macro2...
+% Currently is also contains all @aliases; the list can be split
+% if there is a need.
+\def\macrolist{}
+
+% Add the macro to \macrolist
+\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
+\def\addtomacrolistxxx#1{%
+ \toks0 = \expandafter{\macrolist\definedummyword#1}%
+ \xdef\macrolist{\the\toks0}%
+}
+
+% Utility routines.
+% This does \let #1 = #2, with \csnames; that is,
+% \let \csname#1\endcsname = \csname#2\endcsname
+% (except of course we have to play expansion games).
+%
+\def\cslet#1#2{%
+ \expandafter\let
+ \csname#1\expandafter\endcsname
+ \csname#2\endcsname
+}
+
+% Trim leading and trailing spaces off a string.
+% Concepts from aro-bend problem 15 (see CTAN).
address@hidden
+\gdef\eatspaces address@hidden }}
+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
+\def\unbrace#1{#1}
+\unbrace{\gdef\trim@@@ #1 } address@hidden
+}
+
+% Trim a single trailing ^^M off a string.
+{\catcode`\^^M=\other \catcode`\Q=3%
+\gdef\eatcr #1{\eatcra #1Q^^MQ}%
+\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
+\gdef\eatcrb#1Q#2Q{#1}%
+}
+
+% Macro bodies are absorbed as an argument in a context where
+% all characters are catcode 10, 11 or 12, except \ which is active
+% (as in normal texinfo). It is necessary to change the definition of \
+% to recognize macro arguments; this is the job of \mbodybackslash.
+%
+% Non-ASCII encodings make 8-bit characters active, so un-activate
+% them to avoid their expansion. Must do this non-globally, to
+% confine the change to the current group.
+%
+% It's necessary to have hard CRs when the macro is executed. This is
+% done by making ^^M (\endlinechar) catcode 12 when reading the macro
+% body, and then making it the \newlinechar in \scanmacro.
+%
+\def\scanctxt{% used as subroutine
+ \catcode`\"=\other
+ \catcode`\+=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ address@hidden
+ \catcode`\^=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\~=\other
+ \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
+}
+
+\def\scanargctxt{% used for copying and captions, not macros.
+ \scanctxt
+ \catcode`\\=\other
+ \catcode`\^^M=\other
+}
+
+\def\macrobodyctxt{% used for @macro definitions
+ \scanctxt
+ \catcode`\{=\other
+ \catcode`\}=\other
+ \catcode`\^^M=\other
+ \usembodybackslash
+}
+
+\def\macroargctxt{% used when scanning invocations
+ \scanctxt
+ \catcode`\\=0
+}
+% why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes"
+% for the single characters \ { }. Thus, we end up with the "commands"
+% that would be written @\ @{ @} in a Texinfo document.
+%
+% We already have @{ and @}. For @\, we define it here, and only for
+% this purpose, to produce a typewriter backslash (so, the @\ that we
+% define for @math can't be used with @macro calls):
+%
+\def\\{\normalbackslash}%
+%
+% We would like to do this for \, too, since that is what makeinfo does.
+% But it is not possible, because Texinfo already has a command @, for a
+% cedilla accent. Documents must use @comma{} instead.
+%
+% \anythingelse will almost certainly be an error of some kind.
+
+
+% \mbodybackslash is the definition of \ in @macro bodies.
+% It maps \foo\ => \csname macarg.foo\endcsname => #N
+% where N is the macro parameter number.
+% We define \csname macarg.\endcsname to be \realbackslash, so
+% \\ in macro replacement text gets you a backslash.
+%
address@hidden @address@hidden@active
+ @address@hidden@address@hidden
+ @address@hidden@csname address@hidden
+}
+\expandafter\def\csname macarg.\endcsname{\realbackslash}
+
+\def\margbackslash#1{\char`\#1 }
+
+\def\macro{\recursivefalse\parsearg\macroxxx}
+\def\rmacro{\recursivetrue\parsearg\macroxxx}
+
+\def\macroxxx#1{%
+ \getargs{#1}% now \macname is the macname and \argl the arglist
+ \ifx\argl\empty % no arguments
+ \paramno=0\relax
+ \else
+ \expandafter\parsemargdef \argl;%
+ \if\paramno>256\relax
+ \ifx\eTeXversion\thisisundefined
+ \errhelp = \EMsimple
+ \errmessage{You need eTeX to compile a file with macros with more
than 256 arguments}
+ \fi
+ \fi
+ \fi
+ \if1\csname ismacro.\the\macname\endcsname
+ \message{Warning: redefining \the\macname}%
+ \else
+ \expandafter\ifx\csname \the\macname\endcsname \relax
+ \else \errmessage{Macro name \the\macname\space already defined}\fi
+ \global\cslet{macsave.\the\macname}{\the\macname}%
+ \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
+ \addtomacrolist{\the\macname}%
+ \fi
+ \begingroup \macrobodyctxt
+ \ifrecursive \expandafter\parsermacbody
+ \else \expandafter\parsemacbody
+ \fi}
+
+\parseargdef\unmacro{%
+ \if1\csname ismacro.#1\endcsname
+ \global\cslet{#1}{macsave.#1}%
+ \global\expandafter\let \csname ismacro.#1\endcsname=0%
+ % Remove the macro name from \macrolist:
+ \begingroup
+ \expandafter\let\csname#1\endcsname \relax
+ \let\definedummyword\unmacrodo
+ \xdef\macrolist{\macrolist}%
+ \endgroup
+ \else
+ \errmessage{Macro #1 not defined}%
+ \fi
+}
+
+% Called by \do from \dounmacro on each macro. The idea is to omit any
+% macro definitions that have been changed to \relax.
+%
+\def\unmacrodo#1{%
+ \ifx #1\relax
+ % remove this
+ \else
+ \noexpand\definedummyword \noexpand#1%
+ \fi
+}
+
+% This makes use of the obscure feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
+\def\getargs#1{\getargsxxx#1{}}
+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
+\def\getmacname#1 #2\relax{\macname={#1}}
+\def\getmacargs#1{\def\argl{#1}}
+
+% For macro processing make @ a letter so that we can make Texinfo private
macro names.
address@hidden
+\catcode address@hidden
+
+% Parse the optional {params} list. Set up \paramno and \paramlist
+% so \defmacro knows what to do. Define \macarg.BLAH for each BLAH
+% in the params list to some hook where the argument si to be expanded. If
+% there are less than 10 arguments that hook is to be replaced by ##N where N
+% is the position in that list, that is to say the macro arguments are to be
+% defined `a la TeX in the macro body.
+%
+% That gets used by \mbodybackslash (above).
+%
+% We need to get `macro parameter char #' into several definitions.
+% The technique used is stolen from LaTeX: let \hash be something
+% unexpandable, insert that wherever you need a #, and then redefine
+% it to # just before using the token list produced.
+%
+% The same technique is used to protect \eatspaces till just before
+% the macro is used.
+%
+% If there are 10 or more arguments, a different technique is used, where the
+% hook remains in the body, and when macro is to be expanded the body is
+% processed again to replace the arguments.
+%
+% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
+% argument N value and then \edef the body (nothing else will expand because
of
+% the catcode regime underwhich the body was input).
+%
+% If you compile with TeX (not eTeX), and you have macros with 10 or more
+% arguments, you need that no macro has more than 256 arguments, otherwise an
+% error is produced.
+\def\parsemargdef#1;{%
+ \paramno=0\def\paramlist{}%
+ \let\hash\relax
+ \let\xeatspaces\relax
+ \parsemargdefxxx#1,;,%
+ % In case that there are 10 or more arguments we parse again the arguments
+ % list to set new definitions for the \macarg.BLAH macros corresponding to
+ % each BLAH argument. It was anyhow needed to parse already once this list
+ % in order to count the arguments, and as macros with at most 9 arguments
+ % are by far more frequent than macro with 10 or more arguments, defining
+ % twice the \macarg.BLAH macros does not cost too much processing power.
+ \ifnum\paramno<10\relax\else
+ \paramno0\relax
+ \parsemmanyargdef@@#1,;,% 10 or more arguments
+ \fi
+}
+\def\parsemargdefxxx#1,{%
+ \if#1;\let\next=\relax
+ \else \let\next=\parsemargdefxxx
+ \advance\paramno by 1
+ \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
+ {\xeatspaces{\hash\the\paramno}}%
+ \edef\paramlist{\paramlist\hash\the\paramno,}%
+ \fi\next}
+
+\def\parsemmanyargdef@@#1,{%
+ \if#1;\let\next=\relax
+ \else
+ \let\next=\parsemmanyargdef@@
+ \edef\tempb{\eatspaces{#1}}%
+ \expandafter\def\expandafter\tempa
+ \expandafter{\csname macarg.\tempb\endcsname}%
+ % Note that we need some extra \noexpand\noexpand, this is because we
+ % don't want \the to be expanded in the \parsermacbody as it uses an
+ % \xdef .
+ \expandafter\edef\tempa
+ {\noexpand\noexpand\noexpand\the\toks\the\paramno}%
+ \advance\paramno by 1\relax
+ \fi\next}
+
+% These two commands read recursive and nonrecursive macro bodies.
+% (They're different since rec and nonrec macros end differently.)
+%
+
+\catcode address@hidden
address@hidden macro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
address@hidden rmacro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+\catcode address@hidden
+
address@hidden
address@hidden
address@hidden@}%
address@hidden@}%
+
+% This macro is expanded during the Texinfo macro expansion, not during its
+% definition. It gets all the arguments values and assigns them to macros
+% macarg.ARGNAME
+%
+% #1 is the macro name
+% #2 is the list of argument names
+% #3 is the list of argument values
address@hidden
+ address@hidden
+ address@hidden Need to keep a copy for parameter expansion.
+ \def\paramlist{#2,address@hidden
+ \def\macroname{#1}%
+ \begingroup
+ \macroargctxt
+ \def\argvaluelist{#3,address@hidden
+ address@hidden
+ address@hidden
+ \setemptyargvalues@
+ \else
+ \getargvals@@
+ \fi
+}
+
+%
+\def\getargvals@@{%
+ \ifx\paramlist\nilm@
+ % Some sanity check needed here that \argvaluelist is also empty.
+ \ifx\argvaluelist\nillm@
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Too many arguments in macro `\macroname'!}%
+ \fi
+ \let\next\macargexpandinbody@
+ \else
+ \ifx\argvaluelist\nillm@
+ % No more arguments values passed to macro. Set remaining named-arg
+ % macros to empty.
+ \let\next\setemptyargvalues@
+ \else
+ % pop current arg name into address@hidden
+ address@hidden@address@hidden@}%
+ address@hidden
+ % pop current argument value into address@hidden
+ address@hidden@address@hidden@}%
+ address@hidden
+ % Here address@hidden is the current arg name and address@hidden is the
current arg value.
+ % First place the new argument macro definition into address@hidden
+ address@hidden
+ \expandafter\let\csname address@hidden
+ address@hidden
+ \csname address@hidden
+ address@hidden@tempe{\the\macname}}%
+ address@hidden@tempd\macargdeflist@
+ \let\next\getargvals@@
+ \fi
+ \fi
+ \next
+}
+
address@hidden
+ \expandafter\expandafter\expandafter\def
+ \expandafter\expandafter\expandafter#2%
+ \expandafter\expandafter\expandafter{%
+ \expandafter#1#2}%
+}
+
+% Replace arguments by their values in the macro body, and place the result
+% in macro address@hidden
address@hidden
+ % To do this we use the property that token registers that are \the'ed
+ % within an \edef expand only once. So we are going to place all argument
+ % values into respective token registers.
+ %
+ % First we save the token context, and initialize argument numbering.
+ \begingroup
+ \paramno0\relax
+ % Then, for each argument number #N, we place the corresponding argument
+ % value into a new token list register \toks#N
+ address@hidden@,;,%
+ % Then, we expand the body so that argument are replaced by their
+ % values. The trick for values not to be expanded themselves is that they
+ % are within tokens and that tokens expand only once in an \edef .
+ address@hidden mac.\macroname .body\endcsname}%
+ % Now we restore the token stack pointer to free the token list registers
+ % which we have used, but we make sure that expanded body is saved after
+ % group.
+ \expandafter
+ \endgroup
+ address@hidden@tempc}%
+ }
+
address@hidden
+ %% Define the named-macro outside of this group and then close this group.
+ \expandafter
+ \endgroup
+ \macargdeflist@
+ % First the replace in body the macro arguments by their values, the result
+ % is in address@hidden .
+ \macvalstoargs@
+ % Then we point at the \norecurse or \gobble (for recursive) macro value
+ % with address@hidden .
+ address@hidden mac.\macroname .recurse\endcsname
+ % Depending on whether it is recursive or not, we need some tailing
+ % \egroup .
+ address@hidden
+ address@hidden
+ \else
+ address@hidden
+ \fi
+ % And now we do the real job:
+ address@hidden@address@hidden@tempc}%
+ address@hidden
+}
+
address@hidden,{%
+ \if#1;\let\next\relax
+ \else
+ \let\next\putargsintokens@
+ % First we allocate the new token list register, and give it a temporary
+ % alias address@hidden .
+ address@hidden
+ % Then we place the argument value into that token list register.
+ address@hidden macarg.#1\endcsname
+ address@hidden@tempa}%
+ \advance\paramno by 1\relax
+ \fi
+ \next
+}
+
+% Save the token stack pointer into macro #1
address@hidden
+% Restore the token stack pointer from number in macro #1
address@hidden
+% newtoks that can be used non \outer .
+\def\texinonouternewtoks{\alloc@ 5\toks \toksdef address@hidden
+
+% Tailing missing arguments are set to empty
address@hidden
+ \ifx\paramlist\nilm@
+ \let\next\macargexpandinbody@
+ \else
+ address@hidden@
+ \let\next\setemptyargvalues@
+ \fi
+ \next
+}
+
address@hidden,address@hidden
+ address@hidden
+ \expandafter\def\csname macarg.#1\endcsname{}}%
+ address@hidden@tempa\macargdeflist@
+ \def\paramlist{#2}%
+}
+
+% #1 is the element target macro
+% #2 is the list macro
+% #3,#4\endargs@ is the list value
address@hidden,address@hidden
+ \def#1{#3}%
+ \def#2{#4}%
+}
address@hidden,address@hidden
+ \long\def#1{#3}%
+ \long\def#2{#4}%
+}
+
+% This defines a Texinfo @macro. There are eight cases: recursive and
+% nonrecursive macros of zero, one, up to nine, and many arguments.
+% Much magic with \expandafter here.
+% \xdef is used so that macro definitions will survive the file
+% they're defined in; @include reads the file inside a group.
+%
+\def\defmacro{%
+ \let\hash=##% convert placeholders to macro parameter chars
+ \ifrecursive
+ \ifcase\paramno
+ % 0
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\scanmacro{\temp}}%
+ \or % 1
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\braceorline
+ \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+ \egroup\noexpand\scanmacro{\temp}}%
+ \else
+ \ifnum\paramno<10\relax % at most 9
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\csname\the\macname xx\endcsname}%
+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname xxx\endcsname
+ \paramlist{\egroup\noexpand\scanmacro{\temp}}%
+ \else % 10 or more
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ address@hidden
+ }%
+ \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
+ \global\expandafter\let\csname mac.\the\macname
.recurse\endcsname\gobble
+ \fi
+ \fi
+ \else
+ \ifcase\paramno
+ % 0
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \or % 1
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\braceorline
+ \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+ \egroup
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \else % at most 9
+ \ifnum\paramno<10\relax
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \expandafter\noexpand\csname\the\macname xx\endcsname}%
+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname xxx\endcsname
+ \paramlist{%
+ \egroup
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \else % 10 or more:
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ address@hidden
+ }%
+ \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
+ \global\expandafter\let\csname mac.\the\macname
.recurse\endcsname\norecurse
+ \fi
+ \fi
+ \fi}
+
+\catcode address@hidden
+
+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
+
+% \braceorline decides whether the next nonwhitespace character is a
+% {. If so it reads up to the closing }, if not, it reads the whole
+% line. Whatever was read is then fed to the next control sequence
+% as an argument (by \parsebrace or \parsearg).
+%
+\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
+\def\braceorlinexxx{%
+ \ifx\nchar\bgroup\else
+ \expandafter\parsearg
+ \fi \macnamexxx}
+
+
+% @alias.
+% We need some trickery to remove the optional spaces around the equal
+% sign. Make them active and then expand them all to nothing.
+%
+\def\alias{\parseargusing\obeyspaces\aliasxxx}
+\def\aliasxxx #1{\aliasyyy#1\relax}
+\def\aliasyyy #1=#2\relax{%
+ {%
+ \expandafter\let\obeyedspace=\empty
+ \addtomacrolist{#1}%
+ \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
+ }%
+ \next
+}
+
+
+\message{cross references,}
+
+\newwrite\auxfile
+\newif\ifhavexrefs % True if xref values are known.
+\newif\ifwarnedxrefs % True if we warned once that they aren't known.
+
+% @inforef is relatively simple.
+\def\inforef #1{\inforefzzz #1,,,,**}
+\def\inforefzzz #1,#2,#3,#4**{%
+ \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+ node \samp{\ignorespaces#1{}}}
+
+% @node's only job in TeX is to define \lastnode, which is used in
+% cross-references. The @node line might or might not have commas, and
+% might or might not have spaces before the first comma, like:
+% @node foo , bar , ...
+% We don't want such trailing spaces in the node name.
+%
+\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
+%
+% also remove a trailing comma, in case of something like this:
+% @node Help-Cross, , , Cross-refs
+\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
+\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
+
+\let\nwnode=\node
+\let\lastnode=\empty
+
+% Write a cross-reference definition for the current node. #1 is the
+% type (Ynumbered, Yappendix, Ynothing).
+%
+\def\donoderef#1{%
+ \ifx\lastnode\empty\else
+ \setref{\lastnode}{#1}%
+ \global\let\lastnode=\empty
+ \fi
+}
+
+% @anchor{NAME} -- define xref target at arbitrary point.
+%
+\newcount\savesfregister
+%
+\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
+
+% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
+% anchor), which consists of three parts:
+% 1) NAME-title - the current sectioning name taken from \lastsection,
+% or the anchor name.
+% 2) NAME-snt - section number and type, passed as the SNT arg, or
+% empty for anchors.
+% 3) NAME-pg - the page number.
+%
+% This is called from \donoderef, \anchor, and \dofloat. In the case of
+% floats, there is an additional part, which is not written here:
+% 4) NAME-lof - the text as it should appear in a @listoffloats.
+%
+\def\setref#1#2{%
+ \pdfmkdest{#1}%
+ \iflinks
+ {%
+ \atdummies % preserve commands, but don't expand them
+ \edef\writexrdef##1##2{%
+ address@hidden #1 of \setref, expanded by the \edef
+ ##1}{##2}}% these are parameters of \writexrdef
+ }%
+ \toks0 = \expandafter{\lastsection}%
+ \immediate \writexrdef{title}{\the\toks0 }%
+ \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
+ \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout
+ }%
+ \fi
+}
+
+% @xrefautosectiontitle on|off says whether @section(ing) names are used
+% automatically in xrefs, if the third arg is not explicitly specified.
+% This was provided as a "secret" @set xref-automatic-section-title
+% variable, now it's official.
+%
+\parseargdef\xrefautomaticsectiontitle{%
+ \def\temp{#1}%
+ \ifx\temp\onword
+ \expandafter\let\csname SETxref-automatic-section-title\endcsname
+ = \empty
+ \else\ifx\temp\offword
+ \expandafter\let\csname SETxref-automatic-section-title\endcsname
+ = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @xrefautomaticsectiontitle value `\temp',
+ must be on|off}%
+ \fi\fi
+}
+
+%
+% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
+% the node name, #2 the name of the Info cross-reference, #3 the printed
+% node name, #4 the name of the Info file, #5 the name of the printed
+% manual. All but the node name can be omitted.
+%
+\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
+\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
+\def\ref#1{\xrefX[#1,,,,,,,]}
+%
+\newbox\toprefbox
+\newbox\printedrefnamebox
+\newbox\infofilenamebox
+\newbox\printedmanualbox
+%
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+ \unsepspaces
+ %
+ % Get args without leading/trailing spaces.
+ \def\printedrefname{\ignorespaces #3}%
+ \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}%
+ %
+ \def\infofilename{\ignorespaces #4}%
+ \setbox\infofilenamebox = \hbox{\infofilename\unskip}%
+ %
+ \def\printedmanual{\ignorespaces #5}%
+ \setbox\printedmanualbox = \hbox{\printedmanual\unskip}%
+ %
+ % If the printed reference name (arg #3) was not explicitly given in
+ % the @xref, figure out what we want to use.
+ \ifdim \wd\printedrefnamebox = 0pt
+ % No printed node name was explicitly given.
+ \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax
+ % Not auto section-title: use node name inside the square brackets.
+ \def\printedrefname{\ignorespaces #1}%
+ \else
+ % Auto section-title: use chapter/section title inside
+ % the square brackets if we have it.
+ \ifdim \wd\printedmanualbox > 0pt
+ % It is in another manual, so we don't have it; use node name.
+ \def\printedrefname{\ignorespaces #1}%
+ \else
+ \ifhavexrefs
+ % We (should) know the real title if we have the xref values.
+ \def\printedrefname{\refx{#1-title}{}}%
+ \else
+ % Otherwise just copy the Info node name.
+ \def\printedrefname{\ignorespaces #1}%
+ \fi%
+ \fi
+ \fi
+ \fi
+ %
+ % Make link in pdf output.
+ \ifpdf
+ {\indexnofonts
+ \turnoffactive
+ \makevalueexpandable
+ % This expands tokens, so do it after making catcode changes, so _
+ % etc. don't get their TeX definitions. This ignores all spaces in
+ % #4, including (wrongly) those in the middle of the filename.
+ \getfilename{#4}%
+ %
+ % This (wrongly) does not take account of leading or trailing
+ % spaces in #1, which should be ignored.
+ \edef\pdfxrefdest{#1}%
+ \ifx\pdfxrefdest\empty
+ \def\pdfxrefdest{Top}% no empty targets
+ \else
+ \txiescapepdf\pdfxrefdest % escape PDF special chars
+ \fi
+ %
+ \leavevmode
+ \startlink attr{/Border [0 0 0]}%
+ \ifnum\filenamelength>0
+ goto file{\the\filename.pdf} name{\pdfxrefdest}%
+ \else
+ goto name{\pdfmkpgn{\pdfxrefdest}}%
+ \fi
+ }%
+ \setcolor{\linkcolor}%
+ \fi
+ %
+ % Float references are printed completely differently: "Figure 1.2"
+ % instead of "[somenode], p.3". We distinguish them by the
+ % LABEL-title being set to a magic string.
+ {%
+ % Have to otherify everything special to allow the \csname to
+ % include an _ in the xref name, etc.
+ \indexnofonts
+ \turnoffactive
+ \expandafter\global\expandafter\let\expandafter\Xthisreftitle
+ \csname XR#1-title\endcsname
+ }%
+ \iffloat\Xthisreftitle
+ % If the user specified the print name (third arg) to the ref,
+ % print it instead of our usual "Figure 1.2".
+ \ifdim\wd\printedrefnamebox = 0pt
+ \refx{#1-snt}{}%
+ \else
+ \printedrefname
+ \fi
+ %
+ % If the user also gave the printed manual name (fifth arg), append
+ % "in MANUALNAME".
+ \ifdim \wd\printedmanualbox > 0pt
+ \space \putwordin{} \cite{\printedmanual}%
+ \fi
+ \else
+ % node/anchor (non-float) references.
+ %
+ % If we use \unhbox to print the node names, TeX does not insert
+ % empty discretionaries after hyphens, which means that it will not
+ % find a line break at a hyphen in a node names. Since some manuals
+ % are best written with fairly long node names, containing hyphens,
+ % this is a loss. Therefore, we give the text of the node name
+ % again, so it is as if TeX is seeing it for the first time.
+ %
+ \ifdim \wd\printedmanualbox > 0pt
+ % Cross-manual reference with a printed manual name.
+ %
+ \crossmanualxref{\cite{\printedmanual\unskip}}%
+ %
+ \else\ifdim \wd\infofilenamebox > 0pt
+ % Cross-manual reference with only an info filename (arg 4), no
+ % printed manual name (arg 5). This is essentially the same as
+ % the case above; we output the filename, since we have nothing else.
+ %
+ \crossmanualxref{\code{\infofilename\unskip}}%
+ %
+ \else
+ % Reference within this manual.
+ %
+ % _ (for example) has to be the character _ for the purposes of the
+ % control sequence corresponding to the node, but it has to expand
+ % into the usual \leavevmode...\vrule stuff for purposes of
+ % printing. So we \turnoffactive for the \refx-snt, back on for the
+ % printing, back off for the \refx-pg.
+ {\turnoffactive
+ % Only output a following space if the -snt ref is nonempty; for
+ % @unnumbered and @anchor, it won't be.
+ \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
+ \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+ }%
+ % output the `[mynode]' via the macro below so it can be overridden.
+ \xrefprintnodename\printedrefname
+ %
+ % But we always want a comma and a space:
+ ,\space
+ %
+ % output the `page 3'.
+ \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+ \fi\fi
+ \fi
+ \endlink
+\endgroup}
+
+% Output a cross-manual xref to #1. Used just above (twice).
+%
+% Only include the text "Section ``foo'' in" if the foo is neither
+% missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply
+% "see The Foo Manual", the idea being to refer to the whole manual.
+%
+% But, this being TeX, we can't easily compare our node name against the
+% string "Top" while ignoring the possible spaces before and after in
+% the input. By adding the arbitrary 7sp below, we make it much less
+% likely that a real node name would have the same width as "Top" (e.g.,
+% in a monospaced font). Hopefully it will never happen in practice.
+%
+% For the same basic reason, we retypeset the "Top" at every
+% reference, since the current font is indeterminate.
+%
+\def\crossmanualxref#1{%
+ \setbox\toprefbox = \hbox{Top\kern7sp}%
+ \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
+ \ifdim \wd2 > 7sp % nonempty?
+ \ifdim \wd2 = \wd\toprefbox \else % same as Top?
+ \putwordSection{} ``\printedrefname'' \putwordin{}\space
+ \fi
+ \fi
+ #1%
+}
+
+% This macro is called from \xrefX for the `[nodename]' part of xref
+% output. It's a separate macro only so it can be changed more easily,
+% since square brackets don't work well in some documents. Particularly
+% one that Bob is working on :).
+%
+\def\xrefprintnodename#1{[#1]}
+
+% Things referred to by \setref.
+%
+\def\Ynothing{}
+\def\Yomitfromtoc{}
+\def\Ynumbered{%
+ \ifnum\secno=0
+ address@hidden \the\chapno
+ \else \ifnum\subsecno=0
+ address@hidden \the\chapno.\the\secno
+ \else \ifnum\subsubsecno=0
+ address@hidden \the\chapno.\the\secno.\the\subsecno
+ \else
+ address@hidden \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+\def\Yappendix{%
+ \ifnum\secno=0
+ address@hidden @char\the\appendixno{}%
+ \else \ifnum\subsecno=0
+ address@hidden @char\the\appendixno.\the\secno
+ \else \ifnum\subsubsecno=0
+ address@hidden @char\the\appendixno.\the\secno.\the\subsecno
+ \else
+ address@hidden
+ @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+
+% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
+% If its value is nonempty, SUFFIX is output afterward.
+%
+\def\refx#1#2{%
+ {%
+ \indexnofonts
+ \otherbackslash
+ \expandafter\global\expandafter\let\expandafter\thisrefX
+ \csname XR#1\endcsname
+ }%
+ \ifx\thisrefX\relax
+ % If not defined, say something at least.
+ \angleleft un\-de\-fined\angleright
+ \iflinks
+ \ifhavexrefs
+ {\toks0 = {#1}% avoid expansion of possibly-complex value
+ \message{\linenumber Undefined cross reference `\the\toks0'.}}%
+ \else
+ \ifwarnedxrefs\else
+ \global\warnedxrefstrue
+ \message{Cross reference values unknown; you must run TeX again.}%
+ \fi
+ \fi
+ \fi
+ \else
+ % It's defined, so just use it.
+ \thisrefX
+ \fi
+ #2% Output the suffix in any case.
+}
+
+% This is the macro invoked by entries in the aux file. Usually it's
+% just a \def (we prepend XR to the control sequence name to avoid
+% collisions). But if this is a float type, we have more work to do.
+%
+\def\xrdef#1#2{%
+ {% The node name might contain 8-bit characters, which in our current
+ % implementation are changed to commands like @'e. Don't let these
+ % mess up the control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safexrefname{#1}%
+ }%
+ %
+ \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref
+ %
+ % Was that xref control sequence that we just defined for a float?
+ \expandafter\iffloat\csname XR\safexrefname\endcsname
+ % it was a float, and we have the (safe) float type in \iffloattype.
+ \expandafter\let\expandafter\floatlist
+ \csname floatlist\iffloattype\endcsname
+ %
+ % Is this the first time we've seen this float type?
+ \expandafter\ifx\floatlist\relax
+ \toks0 = {\do}% yes, so just \do
+ \else
+ % had it before, so preserve previous elements in list.
+ \toks0 = \expandafter{\floatlist\do}%
+ \fi
+ %
+ % Remember this xref in the control sequence \floatlistFLOATTYPE,
+ % for later use in \listoffloats.
+ \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
+ {\safexrefname}}%
+ \fi
+}
+
+% Read the last existing aux file, if any. No error if none exists.
+%
+\def\tryauxfile{%
+ \openin 1 \jobname.aux
+ \ifeof 1 \else
+ \readdatafile{aux}%
+ \global\havexrefstrue
+ \fi
+ \closein 1
+}
+
+\def\setupdatafile{%
+ address@hidden
+ \catcode`\^^A=\other
+ \catcode`\^^B=\other
+ \catcode`\^^C=\other
+ \catcode`\^^D=\other
+ \catcode`\^^E=\other
+ \catcode`\^^F=\other
+ \catcode`\^^G=\other
+ \catcode`\^^H=\other
+ \catcode`\^^K=\other
+ \catcode`\^^L=\other
+ \catcode`\^^N=\other
+ \catcode`\^^P=\other
+ \catcode`\^^Q=\other
+ \catcode`\^^R=\other
+ \catcode`\^^S=\other
+ \catcode`\^^T=\other
+ \catcode`\^^U=\other
+ \catcode`\^^V=\other
+ \catcode`\^^W=\other
+ \catcode`\^^X=\other
+ \catcode`\^^Z=\other
+ \catcode`\^^[=\other
+ \catcode`\^^\=\other
+ \catcode`\^^]=\other
+ \catcode`\^^^=\other
+ \catcode`\^^_=\other
+ % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
+ % in xref tags, i.e., node names. But since ^^e4 notation isn't
+ % supported in the main text, it doesn't seem desirable. Furthermore,
+ % that is not enough: for node names that actually contain a ^
+ % character, we would end up writing a line like this: 'xrdef {'hat
+ % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
+ % argument, and \hat is not an expandable control sequence. It could
+ % all be worked out, but why? Either we support ^^ or we don't.
+ %
+ % The other change necessary for this was to define \auxhat:
+ % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
+ % and then to call \auxhat in \setq.
+ %
+ \catcode`\^=\other
+ %
+ % Special characters. Should be turned off anyway, but...
+ \catcode`\~=\other
+ \catcode`\[=\other
+ \catcode`\]=\other
+ \catcode`\"=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\$=\other
+ \catcode`\#=\other
+ \catcode`\&=\other
+ \catcode`\%=\other
+ \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
+ %
+ % This is to support \ in node names and titles, since the \
+ % characters end up in a \csname. It's easier than
+ % leaving it active and making its active definition an actual \
+ % character. What I don't understand is why it works in the *value*
+ % of the xrdef. Seems like it should be a catcode12 \, and that
+ % should not typeset properly. But it works, so I'm moving on for
+ % now. --karl, 15jan04.
+ \catcode`\\=\other
+ %
+ % Make the characters 128-255 be printing characters.
+ {%
+ \count1=128
+ \def\loop{%
+ \catcode\count1=\other
+ \advance\count1 by 1
+ \ifnum \count1<256 \loop \fi
+ }%
+ }%
+ %
+ % @ is our escape character in .aux files, and we need braces.
+ \catcode`\{=1
+ \catcode`\}=2
+ address@hidden
+}
+
+\def\readdatafile#1{%
+\begingroup
+ \setupdatafile
+ \input\jobname.#1
+\endgroup}
+
+
+\message{insertions,}
+% including footnotes.
+
+\newcount \footnoteno
+
+% The trailing space in the following definition for supereject is
+% vital for proper filling; pages come out unaligned when you do a
+% pagealignmacro call if that space before the closing brace is
+% removed. (Generally, numeric constants should always be followed by a
+% space to prevent strange expansion errors.)
+\def\supereject{\par\penalty -20000\footnoteno =0 }
+
+% @footnotestyle is meaningful for Info output only.
+\let\footnotestyle=\comment
+
+{\catcode address@hidden
+%
+% Auto-number footnotes. Otherwise like plain.
+\gdef\footnote{%
+ \let\indent=\ptexindent
+ \let\noindent=\ptexnoindent
+ \global\advance\footnoteno by address@hidden
+ \edef\thisfootno{$^{\the\footnoteno}$}%
+ %
+ % In case the footnote comes at the end of a sentence, preserve the
+ % extra spacing after we do the footnote number.
+ address@hidden
+ address@hidden
+ %
+ % Remove inadvertent blank space before typesetting the footnote number.
+ \unskip
+ address@hidden
+ \dofootnote
+}%
+
+% Don't bother with the trickery in plain.tex to not require the
+% footnote text as a parameter. Our footnotes don't need to be so general.
+%
+% Oh yes, they do; otherwise, @ifset (and anything else that uses
+% \parseargline) fails inside footnotes because the tokens are fixed when
+% the footnote is read. --karl, 16nov96.
+%
+\gdef\dofootnote{%
+ \insert\footins\bgroup
+ % We want to typeset this text as a normal paragraph, even if the
+ % footnote reference occurs in (for example) a display environment.
+ % So reset some parameters.
+ \hsize=\pagewidth
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \splitmaxdepth\dp\strutbox
+ address@hidden
+ address@hidden
+ address@hidden
+ address@hidden
+ address@hidden
+ \parindent\defaultparindent
+ %
+ \smallfonts \rm
+ %
+ % Because we use hanging indentation in footnotes, a @noindent appears
+ % to exdent this text, so make it be a no-op. makeinfo does not use
+ % hanging indentation so @noindent can still be needed within footnote
+ % text after an @example or the like (not that this is good style).
+ \let\noindent = \relax
+ %
+ % Hang the footnote text off the number. Use \everypar in case the
+ % footnote extends for more than one paragraph.
+ \everypar = {\hang}%
+ \textindent{\thisfootno}%
+ %
+ % Don't crash into the line above the footnote text. Since this
+ % expands into a box, it must come within the paragraph, lest it
+ % provide a place where TeX can split the footnote.
+ \footstrut
+ %
+ % Invoke rest of plain TeX footnote routine.
+ address@hidden
+}
+}%end \catcode address@hidden
+
+% In case a @footnote appears in a vbox, save the footnote text and create
+% the real \insert just after the vbox finished. Otherwise, the insertion
+% would be lost.
+% Similarly, if a @footnote appears inside an alignment, save the footnote
+% text to a box and make the \insert when a row of the table is finished.
+% And the same can be done for other insert classes. --kasal, 16nov03.
+
+% Replace the \insert primitive by a cheating macro.
+% Deeper inside, just make sure that the saved insertions are not spilled
+% out prematurely.
+%
+\def\startsavinginserts{%
+ \ifx \insert\ptexinsert
+ \let\insert\saveinsert
+ \else
+ \let\checkinserts\relax
+ \fi
+}
+
+% This \insert replacement works for both \insert\footins{foo} and
+% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
+%
+\def\saveinsert#1{%
+ \edef\next{\noexpand\savetobox \makeSAVEname#1}%
+ \afterassignment\next
+ % swallow the left brace
+ \let\temp =
+}
+\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
+\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
+
+\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
+
+\def\placesaveins#1{%
+ \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
+ {\box#1}%
+}
+
+% eat @SAVE -- beware, all of them have catcode \other:
+{
+ \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-)
+ \gdef\gobblesave @SAVE{}
+}
+
+% initialization:
+\def\newsaveins #1{%
+ \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
+ \next
+}
+\def\newsaveinsX #1{%
+ \csname newbox\endcsname #1%
+ \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
+ \checksaveins #1}%
+}
+
+% initialize:
+\let\checkinserts\empty
+\newsaveins\footins
+\newsaveins\margin
+
+
+% @image. We use the macros from epsf.tex to support this.
+% If epsf.tex is not installed and @image is used, we complain.
+%
+% Check for and read epsf.tex up front. If we read it only at @image
+% time, we might be inside a group, and then its definitions would get
+% undone and the next image would fail.
+\openin 1 = epsf.tex
+\ifeof 1 \else
+ % Do not bother showing banner with epsf.tex v2.7k (available in
+ % doc/epsf.tex and on ctan).
+ \def\epsfannounce{\toks0 = }%
+ \input epsf.tex
+\fi
+\closein 1
+%
+% We will only complain once about lack of epsf.tex.
+\newif\ifwarnednoepsf
+\newhelp\noepsfhelp{epsf.tex must be installed for images to
+ work. It is also included in the Texinfo distribution, or you can get
+ it from ftp://tug.org/tex/epsf.tex.}
+%
+\def\image#1{%
+ \ifx\epsfbox\thisisundefined
+ \ifwarnednoepsf \else
+ \errhelp = \noepsfhelp
+ \errmessage{epsf.tex not found, images will be ignored}%
+ \global\warnednoepsftrue
+ \fi
+ \else
+ \imagexxx #1,,,,,\finish
+ \fi
+}
+%
+% Arguments to @image:
+% #1 is (mandatory) image filename; we tack on .eps extension.
+% #2 is (optional) width, #3 is (optional) height.
+% #4 is (ignored optional) html alt text.
+% #5 is (ignored optional) extension.
+% #6 is just the usual extra ignored arg for parsing stuff.
+\newif\ifimagevmode
+\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
+ \catcode`\^^M = 5 % in case we're inside an example
+ \normalturnoffactive % allow _ et al. in names
+ % If the image is by itself, center it.
+ \ifvmode
+ \imagevmodetrue
+ \else \ifx\centersub\centerV
+ % for @center @image, we need a vbox so we can have our vertical space
+ \imagevmodetrue
+ \vbox\bgroup % vbox has better behavior than vtop herev
+ \fi\fi
+ %
+ \ifimagevmode
+ \nobreak\medskip
+ % Usually we'll have text after the image which will insert
+ % \parskip glue, so insert it here too to equalize the space
+ % above and below.
+ \nobreak\vskip\parskip
+ \nobreak
+ \fi
+ %
+ % Leave vertical mode so that indentation from an enclosing
+ % environment such as @quotation is respected.
+ % However, if we're at the top level, we don't want the
+ % normal paragraph indentation.
+ % On the other hand, if we are in the case of @center @image, we don't
+ % want to start a paragraph, which will create a hsize-width box and
+ % eradicate the centering.
+ \ifx\centersub\centerV\else \noindent \fi
+ %
+ % Output the image.
+ \ifpdf
+ \dopdfimage{#1}{#2}{#3}%
+ \else
+ % \epsfbox itself resets \epsf?size at each figure.
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+ \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+ \epsfbox{#1.eps}%
+ \fi
+ %
+ \ifimagevmode
+ \medskip % space after a standalone image
+ \fi
+ \ifx\centersub\centerV \egroup \fi
+\endgroup}
+
+
+% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
+% etc. We don't actually implement floating yet, we always include the
+% float "here". But it seemed the best name for the future.
+%
+\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
+
+% There may be a space before second and/or third parameter; delete it.
+\def\eatcommaspace#1, {#1,}
+
+% #1 is the optional FLOATTYPE, the text label for this float, typically
+% "Figure", "Table", "Example", etc. Can't contain commas. If omitted,
+% this float will not be numbered and cannot be referred to.
+%
+% #2 is the optional xref label. Also must be present for the float to
+% be referable.
+%
+% #3 is the optional positioning argument; for now, it is ignored. It
+% will somehow specify the positions allowed to float to (here, top, bottom).
+%
+% We keep a separate counter for each FLOATTYPE, which we reset at each
+% chapter-level command.
+\let\resetallfloatnos=\empty
+%
+\def\dofloat#1,#2,#3,#4\finish{%
+ \let\thiscaption=\empty
+ \let\thisshortcaption=\empty
+ %
+ % don't lose footnotes inside @float.
+ %
+ % BEWARE: when the floats start float, we have to issue warning whenever an
+ % insert appears inside a float which could possibly float. --kasal, 26may04
+ %
+ \startsavinginserts
+ %
+ % We can't be used inside a paragraph.
+ \par
+ %
+ \vtop\bgroup
+ \def\floattype{#1}%
+ \def\floatlabel{#2}%
+ \def\floatloc{#3}% we do nothing with this yet.
+ %
+ \ifx\floattype\empty
+ \let\safefloattype=\empty
+ \else
+ {%
+ % the floattype might have accents or other special characters,
+ % but we need to use it in a control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safefloattype{\floattype}%
+ }%
+ \fi
+ %
+ % If label is given but no type, we handle that as the empty type.
+ \ifx\floatlabel\empty \else
+ % We want each FLOATTYPE to be numbered separately (Figure 1,
+ % Table 1, Figure 2, ...). (And if no label, no number.)
+ %
+ \expandafter\getfloatno\csname\safefloattype floatno\endcsname
+ \global\advance\floatno by 1
+ %
+ {%
+ % This magic value for \lastsection is output by \setref as the
+ % XREFLABEL-title value. \xrefX uses it to distinguish float
+ % labels (which have a completely different output format) from
+ % node and anchor labels. And \xrdef uses it to construct the
+ % lists of floats.
+ %
+ \edef\lastsection{\floatmagic=\safefloattype}%
+ \setref{\floatlabel}{Yfloat}%
+ }%
+ \fi
+ %
+ % start with \parskip glue, I guess.
+ \vskip\parskip
+ %
+ % Don't suppress indentation if a float happens to start a section.
+ \restorefirstparagraphindent
+}
+
+% we have these possibilities:
+% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
+% @float Foo,lbl & no caption: Foo 1.1
+% @float Foo & @caption{Cap}: Foo: Cap
+% @float Foo & no caption: Foo
+% @float ,lbl & Caption{Cap}: 1.1: Cap
+% @float ,lbl & no caption: 1.1
+% @float & @caption{Cap}: Cap
+% @float & no caption:
+%
+\def\Efloat{%
+ \let\floatident = \empty
+ %
+ % In all cases, if we have a float type, it comes first.
+ \ifx\floattype\empty \else \def\floatident{\floattype}\fi
+ %
+ % If we have an xref label, the number comes next.
+ \ifx\floatlabel\empty \else
+ \ifx\floattype\empty \else % if also had float type, need tie first.
+ \appendtomacro\floatident{\tie}%
+ \fi
+ % the number.
+ \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
+ \fi
+ %
+ % Start the printed caption with what we've constructed in
+ % \floatident, but keep it separate; we need \floatident again.
+ \let\captionline = \floatident
+ %
+ \ifx\thiscaption\empty \else
+ \ifx\floatident\empty \else
+ \appendtomacro\captionline{: }% had ident, so need a colon between
+ \fi
+ %
+ % caption text.
+ \appendtomacro\captionline{\scanexp\thiscaption}%
+ \fi
+ %
+ % If we have anything to print, print it, with space before.
+ % Eventually this needs to become an \insert.
+ \ifx\captionline\empty \else
+ \vskip.5\parskip
+ \captionline
+ %
+ % Space below caption.
+ \vskip\parskip
+ \fi
+ %
+ % If have an xref label, write the list of floats info. Do this
+ % after the caption, to avoid chance of it being a breakpoint.
+ \ifx\floatlabel\empty \else
+ % Write the text that goes in the lof to the aux file as
+ % \floatlabel-lof. Besides \floatident, we include the short
+ % caption if specified, else the full caption if specified, else nothing.
+ {%
+ \atdummies
+ %
+ % since we read the caption text in the macro world, where ^^M
+ % is turned into a normal character, we have to scan it back, so
+ % we don't write the literal three characters "^^M" into the aux file.
+ \scanexp{%
+ \xdef\noexpand\gtemp{%
+ \ifx\thisshortcaption\empty
+ \thiscaption
+ \else
+ \thisshortcaption
+ \fi
+ }%
+ }%
+ address@hidden
+ \ifx\gtemp\empty \else : \gtemp \fi}}%
+ }%
+ \fi
+ \egroup % end of \vtop
+ %
+ % place the captured inserts
+ %
+ % BEWARE: when the floats start floating, we have to issue warning
+ % whenever an insert appears inside a float which could possibly
+ % float. --kasal, 26may04
+ %
+ \checkinserts
+}
+
+% Append the tokens #2 to the definition of macro #1, not expanding either.
+%
+\def\appendtomacro#1#2{%
+ \expandafter\def\expandafter#1\expandafter{#1#2}%
+}
+
+% @caption, @shortcaption
+%
+\def\caption{\docaption\thiscaption}
+\def\shortcaption{\docaption\thisshortcaption}
+\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
+\def\defcaption#1#2{\egroup \def#1{#2}}
+
+% The parameter is the control sequence identifying the counter we are
+% going to use. Create it if it doesn't exist and assign it to \floatno.
+\def\getfloatno#1{%
+ \ifx#1\relax
+ % Haven't seen this figure type before.
+ \csname newcount\endcsname #1%
+ %
+ % Remember to reset this floatno at the next chap.
+ \expandafter\gdef\expandafter\resetallfloatnos
+ \expandafter{\resetallfloatnos #1=0 }%
+ \fi
+ \let\floatno#1%
+}
+
+% \setref calls this to get the XREFLABEL-snt value. We want an @xref
+% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we
+% first read the @float command.
+%
address@hidden \chaplevelprefix\the\floatno}%
+
+% Magic string used for the XREFLABEL-title value, so \xrefX can
+% distinguish floats from other xref types.
+\def\floatmagic{!!float!!}
+
+% #1 is the control sequence we are passed; we expand into a conditional
+% which is true if #1 represents a float ref. That is, the magic
+% \lastsection value which we \setref above.
+%
+\def\iffloat#1{\expandafter\doiffloat#1==\finish}
+%
+% #1 is (maybe) the \floatmagic string. If so, #2 will be the
+% (safe) float type for this float. We set \iffloattype to #2.
+%
+\def\doiffloat#1=#2=#3\finish{%
+ \def\temp{#1}%
+ \def\iffloattype{#2}%
+ \ifx\temp\floatmagic
+}
+
+% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
+%
+\parseargdef\listoffloats{%
+ \def\floattype{#1}% floattype
+ {%
+ % the floattype might have accents or other special characters,
+ % but we need to use it in a control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safefloattype{\floattype}%
+ }%
+ %
+ % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
+ \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
+ \ifhavexrefs
+ % if the user said @listoffloats foo but never @float foo.
+ \message{\linenumber No `\safefloattype' floats to list.}%
+ \fi
+ \else
+ \begingroup
+ \leftskip=\tocindent % indent these entries like a toc
+ \let\do=\listoffloatsdo
+ \csname floatlist\safefloattype\endcsname
+ \endgroup
+ \fi
+}
+
+% This is called on each entry in a list of floats. We're passed the
+% xref label, in the form LABEL-title, which is how we save it in the
+% aux file. We strip off the -title and look up \XRLABEL-lof, which
+% has the text we're supposed to typeset here.
+%
+% Figures without xref labels will not be included in the list (since
+% they won't appear in the aux file).
+%
+\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
+\def\listoffloatsdoentry#1-title\finish{{%
+ % Can't fully expand XR#1-lof because it can contain anything. Just
+ % pass the control sequence. On the other hand, XR#1-pg is just the
+ % page number, and we want to fully expand that so we can get a link
+ % in pdf output.
+ \toksA = \expandafter{\csname XR#1-lof\endcsname}%
+ %
+ % use the same \entry macro we use to generate the TOC and index.
+ \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
+ \writeentry
+}}
+
+
+\message{localization,}
+
+% For single-language documents, @documentlanguage is usually given very
+% early, just after @documentencoding. Single argument is the language
+% (de) or locale (de_DE) abbreviation.
+%
+{
+ \catcode`\_ = \active
+ \globaldefs=1
+\parseargdef\documentlanguage{\begingroup
+ \let_=\normalunderscore % normal _ character for filenames
+ \tex % read txi-??.tex file in plain TeX.
+ % Read the file by the name they passed if it exists.
+ \openin 1 txi-#1.tex
+ \ifeof 1
+ \documentlanguagetrywithoutunderscore{#1_\finish}%
+ \else
+ \globaldefs = 1 % everything in the txi-LL files needs to persist
+ \input txi-#1.tex
+ \fi
+ \closein 1
+ \endgroup % end raw TeX
+\endgroup}
+%
+% If they passed de_DE, and txi-de_DE.tex doesn't exist,
+% try txi-de.tex.
+%
+\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
+ \openin 1 txi-#1.tex
+ \ifeof 1
+ \errhelp = \nolanghelp
+ \errmessage{Cannot read language file txi-#1.tex}%
+ \else
+ \globaldefs = 1 % everything in the txi-LL files needs to persist
+ \input txi-#1.tex
+ \fi
+ \closein 1
+}
+}% end of special _ catcode
+%
+\newhelp\nolanghelp{The given language definition file cannot be found or
+is empty. Maybe you need to install it? Putting it in the current
+directory should work if nowhere else does.}
+
+% This macro is called from txi-??.tex files; the first argument is the
+% \language name to set (without the "\lang@" prefix), the second and
+% third args are \{left,right}hyphenmin.
+%
+% The language names to pass are determined when the format is built.
+% See the etex.log file created at that time, e.g.,
+% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
+%
+% With TeX Live 2008, etex now includes hyphenation patterns for all
+% available languages. This means we can support hyphenation in
+% Texinfo, at least to some extent. (This still doesn't solve the
+% accented characters problem.)
+%
address@hidden
+\def\txisetlanguage#1#2#3{%
+ % do not set the language if the name is undefined in the current TeX.
+ \expandafter\ifx\csname address@hidden \relax
+ \message{no patterns for #1}%
+ \else
+ \global\language = \csname address@hidden
+ \fi
+ % but there is no harm in adjusting the hyphenmin values regardless.
+ \global\lefthyphenmin = #2\relax
+ \global\righthyphenmin = #3\relax
+}
+
+% Helpers for encodings.
+% Set the catcode of characters 128 through 255 to the specified number.
+%
+\def\setnonasciicharscatcode#1{%
+ \count255=128
+ \loop\ifnum\count255<256
+ \global\catcode\count255=#1\relax
+ \advance\count255 by 1
+ \repeat
+}
+
+\def\setnonasciicharscatcodenonglobal#1{%
+ \count255=128
+ \loop\ifnum\count255<256
+ \catcode\count255=#1\relax
+ \advance\count255 by 1
+ \repeat
+}
+
+% @documentencoding sets the definition of non-ASCII characters
+% according to the specified encoding.
+%
+\parseargdef\documentencoding{%
+ % Encoding being declared for the document.
+ \def\declaredencoding{\csname #1.enc\endcsname}%
+ %
+ % Supported encodings: names converted to tokens in order to be able
+ % to compare them with \ifx.
+ \def\ascii{\csname US-ASCII.enc\endcsname}%
+ \def\latnine{\csname ISO-8859-15.enc\endcsname}%
+ \def\latone{\csname ISO-8859-1.enc\endcsname}%
+ \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
+ \def\utfeight{\csname UTF-8.enc\endcsname}%
+ %
+ \ifx \declaredencoding \ascii
+ \asciichardefs
+ %
+ \else \ifx \declaredencoding \lattwo
+ \setnonasciicharscatcode\active
+ \lattwochardefs
+ %
+ \else \ifx \declaredencoding \latone
+ \setnonasciicharscatcode\active
+ \latonechardefs
+ %
+ \else \ifx \declaredencoding \latnine
+ \setnonasciicharscatcode\active
+ \latninechardefs
+ %
+ \else \ifx \declaredencoding \utfeight
+ \setnonasciicharscatcode\active
+ \utfeightchardefs
+ %
+ \else
+ \message{Unknown document encoding #1, ignoring.}%
+ %
+ \fi % utfeight
+ \fi % latnine
+ \fi % latone
+ \fi % lattwo
+ \fi % ascii
+}
+
+% A message to be logged when using a character that isn't available
+% the default font encoding (OT1).
+%
+\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}}
+
+% Take account of \c (plain) vs. \, (Texinfo) difference.
+\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
+
+% First, make active non-ASCII characters in order for them to be
+% correctly categorized when TeX reads the replacement text of
+% macros containing the character definitions.
+\setnonasciicharscatcode\active
+%
+% Latin1 (ISO-8859-1) character definitions.
+\def\latonechardefs{%
+ \gdef^^a0{\tie}
+ \gdef^^a1{\exclamdown}
+ \gdef^^a2{\missingcharmsg{CENT SIGN}}
+ \gdef^^a3{{\pounds}}
+ \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
+ \gdef^^a5{\missingcharmsg{YEN SIGN}}
+ \gdef^^a6{\missingcharmsg{BROKEN BAR}}
+ \gdef^^a7{\S}
+ \gdef^^a8{\"{}}
+ \gdef^^a9{\copyright}
+ \gdef^^aa{\ordf}
+ \gdef^^ab{\guillemetleft}
+ \gdef^^ac{$\lnot$}
+ \gdef^^ad{\-}
+ \gdef^^ae{\registeredsymbol}
+ \gdef^^af{\={}}
+ %
+ \gdef^^b0{\textdegree}
+ \gdef^^b1{$\pm$}
+ \gdef^^b2{$^2$}
+ \gdef^^b3{$^3$}
+ \gdef^^b4{\'{}}
+ \gdef^^b5{$\mu$}
+ \gdef^^b6{\P}
+ %
+ \gdef^^b7{$^.$}
+ \gdef^^b8{\cedilla\ }
+ \gdef^^b9{$^1$}
+ \gdef^^ba{\ordm}
+ %
+ \gdef^^bb{\guillemetright}
+ \gdef^^bc{$1\over4$}
+ \gdef^^bd{$1\over2$}
+ \gdef^^be{$3\over4$}
+ \gdef^^bf{\questiondown}
+ %
+ \gdef^^c0{\`A}
+ \gdef^^c1{\'A}
+ \gdef^^c2{\^A}
+ \gdef^^c3{\~A}
+ \gdef^^c4{\"A}
+ \gdef^^c5{\ringaccent A}
+ \gdef^^c6{\AE}
+ \gdef^^c7{\cedilla C}
+ \gdef^^c8{\`E}
+ \gdef^^c9{\'E}
+ \gdef^^ca{\^E}
+ \gdef^^cb{\"E}
+ \gdef^^cc{\`I}
+ \gdef^^cd{\'I}
+ \gdef^^ce{\^I}
+ \gdef^^cf{\"I}
+ %
+ \gdef^^d0{\DH}
+ \gdef^^d1{\~N}
+ \gdef^^d2{\`O}
+ \gdef^^d3{\'O}
+ \gdef^^d4{\^O}
+ \gdef^^d5{\~O}
+ \gdef^^d6{\"O}
+ \gdef^^d7{$\times$}
+ \gdef^^d8{\O}
+ \gdef^^d9{\`U}
+ \gdef^^da{\'U}
+ \gdef^^db{\^U}
+ \gdef^^dc{\"U}
+ \gdef^^dd{\'Y}
+ \gdef^^de{\TH}
+ \gdef^^df{\ss}
+ %
+ \gdef^^e0{\`a}
+ \gdef^^e1{\'a}
+ \gdef^^e2{\^a}
+ \gdef^^e3{\~a}
+ \gdef^^e4{\"a}
+ \gdef^^e5{\ringaccent a}
+ \gdef^^e6{\ae}
+ \gdef^^e7{\cedilla c}
+ \gdef^^e8{\`e}
+ \gdef^^e9{\'e}
+ \gdef^^ea{\^e}
+ \gdef^^eb{\"e}
+ \gdef^^ec{\`{\dotless i}}
+ \gdef^^ed{\'{\dotless i}}
+ \gdef^^ee{\^{\dotless i}}
+ \gdef^^ef{\"{\dotless i}}
+ %
+ \gdef^^f0{\dh}
+ \gdef^^f1{\~n}
+ \gdef^^f2{\`o}
+ \gdef^^f3{\'o}
+ \gdef^^f4{\^o}
+ \gdef^^f5{\~o}
+ \gdef^^f6{\"o}
+ \gdef^^f7{$\div$}
+ \gdef^^f8{\o}
+ \gdef^^f9{\`u}
+ \gdef^^fa{\'u}
+ \gdef^^fb{\^u}
+ \gdef^^fc{\"u}
+ \gdef^^fd{\'y}
+ \gdef^^fe{\th}
+ \gdef^^ff{\"y}
+}
+
+% Latin9 (ISO-8859-15) encoding character definitions.
+\def\latninechardefs{%
+ % Encoding is almost identical to Latin1.
+ \latonechardefs
+ %
+ \gdef^^a4{\euro}
+ \gdef^^a6{\v S}
+ \gdef^^a8{\v s}
+ \gdef^^b4{\v Z}
+ \gdef^^b8{\v z}
+ \gdef^^bc{\OE}
+ \gdef^^bd{\oe}
+ \gdef^^be{\"Y}
+}
+
+% Latin2 (ISO-8859-2) character definitions.
+\def\lattwochardefs{%
+ \gdef^^a0{\tie}
+ \gdef^^a1{\ogonek{A}}
+ \gdef^^a2{\u{}}
+ \gdef^^a3{\L}
+ \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
+ \gdef^^a5{\v L}
+ \gdef^^a6{\'S}
+ \gdef^^a7{\S}
+ \gdef^^a8{\"{}}
+ \gdef^^a9{\v S}
+ \gdef^^aa{\cedilla S}
+ \gdef^^ab{\v T}
+ \gdef^^ac{\'Z}
+ \gdef^^ad{\-}
+ \gdef^^ae{\v Z}
+ \gdef^^af{\dotaccent Z}
+ %
+ \gdef^^b0{\textdegree}
+ \gdef^^b1{\ogonek{a}}
+ \gdef^^b2{\ogonek{ }}
+ \gdef^^b3{\l}
+ \gdef^^b4{\'{}}
+ \gdef^^b5{\v l}
+ \gdef^^b6{\'s}
+ \gdef^^b7{\v{}}
+ \gdef^^b8{\cedilla\ }
+ \gdef^^b9{\v s}
+ \gdef^^ba{\cedilla s}
+ \gdef^^bb{\v t}
+ \gdef^^bc{\'z}
+ \gdef^^bd{\H{}}
+ \gdef^^be{\v z}
+ \gdef^^bf{\dotaccent z}
+ %
+ \gdef^^c0{\'R}
+ \gdef^^c1{\'A}
+ \gdef^^c2{\^A}
+ \gdef^^c3{\u A}
+ \gdef^^c4{\"A}
+ \gdef^^c5{\'L}
+ \gdef^^c6{\'C}
+ \gdef^^c7{\cedilla C}
+ \gdef^^c8{\v C}
+ \gdef^^c9{\'E}
+ \gdef^^ca{\ogonek{E}}
+ \gdef^^cb{\"E}
+ \gdef^^cc{\v E}
+ \gdef^^cd{\'I}
+ \gdef^^ce{\^I}
+ \gdef^^cf{\v D}
+ %
+ \gdef^^d0{\DH}
+ \gdef^^d1{\'N}
+ \gdef^^d2{\v N}
+ \gdef^^d3{\'O}
+ \gdef^^d4{\^O}
+ \gdef^^d5{\H O}
+ \gdef^^d6{\"O}
+ \gdef^^d7{$\times$}
+ \gdef^^d8{\v R}
+ \gdef^^d9{\ringaccent U}
+ \gdef^^da{\'U}
+ \gdef^^db{\H U}
+ \gdef^^dc{\"U}
+ \gdef^^dd{\'Y}
+ \gdef^^de{\cedilla T}
+ \gdef^^df{\ss}
+ %
+ \gdef^^e0{\'r}
+ \gdef^^e1{\'a}
+ \gdef^^e2{\^a}
+ \gdef^^e3{\u a}
+ \gdef^^e4{\"a}
+ \gdef^^e5{\'l}
+ \gdef^^e6{\'c}
+ \gdef^^e7{\cedilla c}
+ \gdef^^e8{\v c}
+ \gdef^^e9{\'e}
+ \gdef^^ea{\ogonek{e}}
+ \gdef^^eb{\"e}
+ \gdef^^ec{\v e}
+ \gdef^^ed{\'{\dotless{i}}}
+ \gdef^^ee{\^{\dotless{i}}}
+ \gdef^^ef{\v d}
+ %
+ \gdef^^f0{\dh}
+ \gdef^^f1{\'n}
+ \gdef^^f2{\v n}
+ \gdef^^f3{\'o}
+ \gdef^^f4{\^o}
+ \gdef^^f5{\H o}
+ \gdef^^f6{\"o}
+ \gdef^^f7{$\div$}
+ \gdef^^f8{\v r}
+ \gdef^^f9{\ringaccent u}
+ \gdef^^fa{\'u}
+ \gdef^^fb{\H u}
+ \gdef^^fc{\"u}
+ \gdef^^fd{\'y}
+ \gdef^^fe{\cedilla t}
+ \gdef^^ff{\dotaccent{}}
+}
+
+% UTF-8 character definitions.
+%
+% This code to support UTF-8 is based on LaTeX's utf8.def, with some
+% changes for Texinfo conventions. It is included here under the GPL by
+% permission from Frank Mittelbach and the LaTeX team.
+%
+\newcount\countUTFx
+\newcount\countUTFy
+\newcount\countUTFz
+
+\gdef\UTFviiiTwoOctets#1#2{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\endcsname}
+%
+\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
+%
+\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
+ \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
+
+\gdef\UTFviiiDefined#1{%
+ \ifx #1\relax
+ \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
+ \else
+ \expandafter #1%
+ \fi
+}
+
+\begingroup
+ \catcode`\~13
+ \catcode`\"12
+
+ \def\UTFviiiLoop{%
+ \global\catcode\countUTFx\active
+ \uccode`\~\countUTFx
+ \uppercase\expandafter{\UTFviiiTmp}%
+ \advance\countUTFx by 1
+ \ifnum\countUTFx < \countUTFy
+ \expandafter\UTFviiiLoop
+ \fi}
+
+ \countUTFx = "C2
+ \countUTFy = "E0
+ \def\UTFviiiTmp{%
+ \xdef~{\noexpand\UTFviiiTwoOctets\string~}}
+ \UTFviiiLoop
+
+ \countUTFx = "E0
+ \countUTFy = "F0
+ \def\UTFviiiTmp{%
+ \xdef~{\noexpand\UTFviiiThreeOctets\string~}}
+ \UTFviiiLoop
+
+ \countUTFx = "F0
+ \countUTFy = "F4
+ \def\UTFviiiTmp{%
+ \xdef~{\noexpand\UTFviiiFourOctets\string~}}
+ \UTFviiiLoop
+\endgroup
+
+\begingroup
+ \catcode`\"=12
+ \catcode`\<=12
+ \catcode`\.=12
+ \catcode`\,=12
+ \catcode`\;=12
+ \catcode`\!=12
+ \catcode`\~=13
+
+ \gdef\DeclareUnicodeCharacter#1#2{%
+ \countUTFz = "#1\relax
+ %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
+ \begingroup
+ \parseXMLCharref
+ \def\UTFviiiTwoOctets##1##2{%
+ \csname u8:##1\string ##2\endcsname}%
+ \def\UTFviiiThreeOctets##1##2##3{%
+ \csname u8:##1\string ##2\string ##3\endcsname}%
+ \def\UTFviiiFourOctets##1##2##3##4{%
+ \csname u8:##1\string ##2\string ##3\string ##4\endcsname}%
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter
+ \gdef\UTFviiiTmp{#2}%
+ \endgroup}
+
+ \gdef\parseXMLCharref{%
+ \ifnum\countUTFz < "A0\relax
+ \errhelp = \EMsimple
+ \errmessage{Cannot define Unicode char value < 00A0}%
+ \else\ifnum\countUTFz < "800\relax
+ \parseUTFviiiA,%
+ \parseUTFviiiB C\UTFviiiTwoOctets.,%
+ \else\ifnum\countUTFz < "10000\relax
+ \parseUTFviiiA;%
+ \parseUTFviiiA,%
+ \parseUTFviiiB E\UTFviiiThreeOctets.{,;}%
+ \else
+ \parseUTFviiiA;%
+ \parseUTFviiiA,%
+ \parseUTFviiiA!%
+ \parseUTFviiiB F\UTFviiiFourOctets.{!,;}%
+ \fi\fi\fi
+ }
+
+ \gdef\parseUTFviiiA#1{%
+ \countUTFx = \countUTFz
+ \divide\countUTFz by 64
+ \countUTFy = \countUTFz
+ \multiply\countUTFz by 64
+ \advance\countUTFx by -\countUTFz
+ \advance\countUTFx by 128
+ \uccode `#1\countUTFx
+ \countUTFz = \countUTFy}
+
+ \gdef\parseUTFviiiB#1#2#3#4{%
+ \advance\countUTFz by "#10\relax
+ \uccode `#3\countUTFz
+ \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
+\endgroup
+
+\def\utfeightchardefs{%
+ \DeclareUnicodeCharacter{00A0}{\tie}
+ \DeclareUnicodeCharacter{00A1}{\exclamdown}
+ \DeclareUnicodeCharacter{00A3}{\pounds}
+ \DeclareUnicodeCharacter{00A8}{\"{ }}
+ \DeclareUnicodeCharacter{00A9}{\copyright}
+ \DeclareUnicodeCharacter{00AA}{\ordf}
+ \DeclareUnicodeCharacter{00AB}{\guillemetleft}
+ \DeclareUnicodeCharacter{00AD}{\-}
+ \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
+ \DeclareUnicodeCharacter{00AF}{\={ }}
+
+ \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
+ \DeclareUnicodeCharacter{00B4}{\'{ }}
+ \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
+ \DeclareUnicodeCharacter{00BA}{\ordm}
+ \DeclareUnicodeCharacter{00BB}{\guillemetright}
+ \DeclareUnicodeCharacter{00BF}{\questiondown}
+
+ \DeclareUnicodeCharacter{00C0}{\`A}
+ \DeclareUnicodeCharacter{00C1}{\'A}
+ \DeclareUnicodeCharacter{00C2}{\^A}
+ \DeclareUnicodeCharacter{00C3}{\~A}
+ \DeclareUnicodeCharacter{00C4}{\"A}
+ \DeclareUnicodeCharacter{00C5}{\AA}
+ \DeclareUnicodeCharacter{00C6}{\AE}
+ \DeclareUnicodeCharacter{00C7}{\cedilla{C}}
+ \DeclareUnicodeCharacter{00C8}{\`E}
+ \DeclareUnicodeCharacter{00C9}{\'E}
+ \DeclareUnicodeCharacter{00CA}{\^E}
+ \DeclareUnicodeCharacter{00CB}{\"E}
+ \DeclareUnicodeCharacter{00CC}{\`I}
+ \DeclareUnicodeCharacter{00CD}{\'I}
+ \DeclareUnicodeCharacter{00CE}{\^I}
+ \DeclareUnicodeCharacter{00CF}{\"I}
+
+ \DeclareUnicodeCharacter{00D0}{\DH}
+ \DeclareUnicodeCharacter{00D1}{\~N}
+ \DeclareUnicodeCharacter{00D2}{\`O}
+ \DeclareUnicodeCharacter{00D3}{\'O}
+ \DeclareUnicodeCharacter{00D4}{\^O}
+ \DeclareUnicodeCharacter{00D5}{\~O}
+ \DeclareUnicodeCharacter{00D6}{\"O}
+ \DeclareUnicodeCharacter{00D8}{\O}
+ \DeclareUnicodeCharacter{00D9}{\`U}
+ \DeclareUnicodeCharacter{00DA}{\'U}
+ \DeclareUnicodeCharacter{00DB}{\^U}
+ \DeclareUnicodeCharacter{00DC}{\"U}
+ \DeclareUnicodeCharacter{00DD}{\'Y}
+ \DeclareUnicodeCharacter{00DE}{\TH}
+ \DeclareUnicodeCharacter{00DF}{\ss}
+
+ \DeclareUnicodeCharacter{00E0}{\`a}
+ \DeclareUnicodeCharacter{00E1}{\'a}
+ \DeclareUnicodeCharacter{00E2}{\^a}
+ \DeclareUnicodeCharacter{00E3}{\~a}
+ \DeclareUnicodeCharacter{00E4}{\"a}
+ \DeclareUnicodeCharacter{00E5}{\aa}
+ \DeclareUnicodeCharacter{00E6}{\ae}
+ \DeclareUnicodeCharacter{00E7}{\cedilla{c}}
+ \DeclareUnicodeCharacter{00E8}{\`e}
+ \DeclareUnicodeCharacter{00E9}{\'e}
+ \DeclareUnicodeCharacter{00EA}{\^e}
+ \DeclareUnicodeCharacter{00EB}{\"e}
+ \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}
+ \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}
+ \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
+ \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
+
+ \DeclareUnicodeCharacter{00F0}{\dh}
+ \DeclareUnicodeCharacter{00F1}{\~n}
+ \DeclareUnicodeCharacter{00F2}{\`o}
+ \DeclareUnicodeCharacter{00F3}{\'o}
+ \DeclareUnicodeCharacter{00F4}{\^o}
+ \DeclareUnicodeCharacter{00F5}{\~o}
+ \DeclareUnicodeCharacter{00F6}{\"o}
+ \DeclareUnicodeCharacter{00F8}{\o}
+ \DeclareUnicodeCharacter{00F9}{\`u}
+ \DeclareUnicodeCharacter{00FA}{\'u}
+ \DeclareUnicodeCharacter{00FB}{\^u}
+ \DeclareUnicodeCharacter{00FC}{\"u}
+ \DeclareUnicodeCharacter{00FD}{\'y}
+ \DeclareUnicodeCharacter{00FE}{\th}
+ \DeclareUnicodeCharacter{00FF}{\"y}
+
+ \DeclareUnicodeCharacter{0100}{\=A}
+ \DeclareUnicodeCharacter{0101}{\=a}
+ \DeclareUnicodeCharacter{0102}{\u{A}}
+ \DeclareUnicodeCharacter{0103}{\u{a}}
+ \DeclareUnicodeCharacter{0104}{\ogonek{A}}
+ \DeclareUnicodeCharacter{0105}{\ogonek{a}}
+ \DeclareUnicodeCharacter{0106}{\'C}
+ \DeclareUnicodeCharacter{0107}{\'c}
+ \DeclareUnicodeCharacter{0108}{\^C}
+ \DeclareUnicodeCharacter{0109}{\^c}
+ \DeclareUnicodeCharacter{0118}{\ogonek{E}}
+ \DeclareUnicodeCharacter{0119}{\ogonek{e}}
+ \DeclareUnicodeCharacter{010A}{\dotaccent{C}}
+ \DeclareUnicodeCharacter{010B}{\dotaccent{c}}
+ \DeclareUnicodeCharacter{010C}{\v{C}}
+ \DeclareUnicodeCharacter{010D}{\v{c}}
+ \DeclareUnicodeCharacter{010E}{\v{D}}
+
+ \DeclareUnicodeCharacter{0112}{\=E}
+ \DeclareUnicodeCharacter{0113}{\=e}
+ \DeclareUnicodeCharacter{0114}{\u{E}}
+ \DeclareUnicodeCharacter{0115}{\u{e}}
+ \DeclareUnicodeCharacter{0116}{\dotaccent{E}}
+ \DeclareUnicodeCharacter{0117}{\dotaccent{e}}
+ \DeclareUnicodeCharacter{011A}{\v{E}}
+ \DeclareUnicodeCharacter{011B}{\v{e}}
+ \DeclareUnicodeCharacter{011C}{\^G}
+ \DeclareUnicodeCharacter{011D}{\^g}
+ \DeclareUnicodeCharacter{011E}{\u{G}}
+ \DeclareUnicodeCharacter{011F}{\u{g}}
+
+ \DeclareUnicodeCharacter{0120}{\dotaccent{G}}
+ \DeclareUnicodeCharacter{0121}{\dotaccent{g}}
+ \DeclareUnicodeCharacter{0124}{\^H}
+ \DeclareUnicodeCharacter{0125}{\^h}
+ \DeclareUnicodeCharacter{0128}{\~I}
+ \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
+ \DeclareUnicodeCharacter{012A}{\=I}
+ \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
+ \DeclareUnicodeCharacter{012C}{\u{I}}
+ \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
+
+ \DeclareUnicodeCharacter{0130}{\dotaccent{I}}
+ \DeclareUnicodeCharacter{0131}{\dotless{i}}
+ \DeclareUnicodeCharacter{0132}{IJ}
+ \DeclareUnicodeCharacter{0133}{ij}
+ \DeclareUnicodeCharacter{0134}{\^J}
+ \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
+ \DeclareUnicodeCharacter{0139}{\'L}
+ \DeclareUnicodeCharacter{013A}{\'l}
+
+ \DeclareUnicodeCharacter{0141}{\L}
+ \DeclareUnicodeCharacter{0142}{\l}
+ \DeclareUnicodeCharacter{0143}{\'N}
+ \DeclareUnicodeCharacter{0144}{\'n}
+ \DeclareUnicodeCharacter{0147}{\v{N}}
+ \DeclareUnicodeCharacter{0148}{\v{n}}
+ \DeclareUnicodeCharacter{014C}{\=O}
+ \DeclareUnicodeCharacter{014D}{\=o}
+ \DeclareUnicodeCharacter{014E}{\u{O}}
+ \DeclareUnicodeCharacter{014F}{\u{o}}
+
+ \DeclareUnicodeCharacter{0150}{\H{O}}
+ \DeclareUnicodeCharacter{0151}{\H{o}}
+ \DeclareUnicodeCharacter{0152}{\OE}
+ \DeclareUnicodeCharacter{0153}{\oe}
+ \DeclareUnicodeCharacter{0154}{\'R}
+ \DeclareUnicodeCharacter{0155}{\'r}
+ \DeclareUnicodeCharacter{0158}{\v{R}}
+ \DeclareUnicodeCharacter{0159}{\v{r}}
+ \DeclareUnicodeCharacter{015A}{\'S}
+ \DeclareUnicodeCharacter{015B}{\'s}
+ \DeclareUnicodeCharacter{015C}{\^S}
+ \DeclareUnicodeCharacter{015D}{\^s}
+ \DeclareUnicodeCharacter{015E}{\cedilla{S}}
+ \DeclareUnicodeCharacter{015F}{\cedilla{s}}
+
+ \DeclareUnicodeCharacter{0160}{\v{S}}
+ \DeclareUnicodeCharacter{0161}{\v{s}}
+ \DeclareUnicodeCharacter{0162}{\cedilla{t}}
+ \DeclareUnicodeCharacter{0163}{\cedilla{T}}
+ \DeclareUnicodeCharacter{0164}{\v{T}}
+
+ \DeclareUnicodeCharacter{0168}{\~U}
+ \DeclareUnicodeCharacter{0169}{\~u}
+ \DeclareUnicodeCharacter{016A}{\=U}
+ \DeclareUnicodeCharacter{016B}{\=u}
+ \DeclareUnicodeCharacter{016C}{\u{U}}
+ \DeclareUnicodeCharacter{016D}{\u{u}}
+ \DeclareUnicodeCharacter{016E}{\ringaccent{U}}
+ \DeclareUnicodeCharacter{016F}{\ringaccent{u}}
+
+ \DeclareUnicodeCharacter{0170}{\H{U}}
+ \DeclareUnicodeCharacter{0171}{\H{u}}
+ \DeclareUnicodeCharacter{0174}{\^W}
+ \DeclareUnicodeCharacter{0175}{\^w}
+ \DeclareUnicodeCharacter{0176}{\^Y}
+ \DeclareUnicodeCharacter{0177}{\^y}
+ \DeclareUnicodeCharacter{0178}{\"Y}
+ \DeclareUnicodeCharacter{0179}{\'Z}
+ \DeclareUnicodeCharacter{017A}{\'z}
+ \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}
+ \DeclareUnicodeCharacter{017C}{\dotaccent{z}}
+ \DeclareUnicodeCharacter{017D}{\v{Z}}
+ \DeclareUnicodeCharacter{017E}{\v{z}}
+
+ \DeclareUnicodeCharacter{01C4}{D\v{Z}}
+ \DeclareUnicodeCharacter{01C5}{D\v{z}}
+ \DeclareUnicodeCharacter{01C6}{d\v{z}}
+ \DeclareUnicodeCharacter{01C7}{LJ}
+ \DeclareUnicodeCharacter{01C8}{Lj}
+ \DeclareUnicodeCharacter{01C9}{lj}
+ \DeclareUnicodeCharacter{01CA}{NJ}
+ \DeclareUnicodeCharacter{01CB}{Nj}
+ \DeclareUnicodeCharacter{01CC}{nj}
+ \DeclareUnicodeCharacter{01CD}{\v{A}}
+ \DeclareUnicodeCharacter{01CE}{\v{a}}
+ \DeclareUnicodeCharacter{01CF}{\v{I}}
+
+ \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}
+ \DeclareUnicodeCharacter{01D1}{\v{O}}
+ \DeclareUnicodeCharacter{01D2}{\v{o}}
+ \DeclareUnicodeCharacter{01D3}{\v{U}}
+ \DeclareUnicodeCharacter{01D4}{\v{u}}
+
+ \DeclareUnicodeCharacter{01E2}{\={\AE}}
+ \DeclareUnicodeCharacter{01E3}{\={\ae}}
+ \DeclareUnicodeCharacter{01E6}{\v{G}}
+ \DeclareUnicodeCharacter{01E7}{\v{g}}
+ \DeclareUnicodeCharacter{01E8}{\v{K}}
+ \DeclareUnicodeCharacter{01E9}{\v{k}}
+
+ \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}
+ \DeclareUnicodeCharacter{01F1}{DZ}
+ \DeclareUnicodeCharacter{01F2}{Dz}
+ \DeclareUnicodeCharacter{01F3}{dz}
+ \DeclareUnicodeCharacter{01F4}{\'G}
+ \DeclareUnicodeCharacter{01F5}{\'g}
+ \DeclareUnicodeCharacter{01F8}{\`N}
+ \DeclareUnicodeCharacter{01F9}{\`n}
+ \DeclareUnicodeCharacter{01FC}{\'{\AE}}
+ \DeclareUnicodeCharacter{01FD}{\'{\ae}}
+ \DeclareUnicodeCharacter{01FE}{\'{\O}}
+ \DeclareUnicodeCharacter{01FF}{\'{\o}}
+
+ \DeclareUnicodeCharacter{021E}{\v{H}}
+ \DeclareUnicodeCharacter{021F}{\v{h}}
+
+ \DeclareUnicodeCharacter{0226}{\dotaccent{A}}
+ \DeclareUnicodeCharacter{0227}{\dotaccent{a}}
+ \DeclareUnicodeCharacter{0228}{\cedilla{E}}
+ \DeclareUnicodeCharacter{0229}{\cedilla{e}}
+ \DeclareUnicodeCharacter{022E}{\dotaccent{O}}
+ \DeclareUnicodeCharacter{022F}{\dotaccent{o}}
+
+ \DeclareUnicodeCharacter{0232}{\=Y}
+ \DeclareUnicodeCharacter{0233}{\=y}
+ \DeclareUnicodeCharacter{0237}{\dotless{j}}
+
+ \DeclareUnicodeCharacter{02DB}{\ogonek{ }}
+
+ \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
+ \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
+ \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
+ \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}
+ \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}
+ \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}
+ \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}
+ \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}
+ \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}
+ \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}
+ \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}
+ \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}
+
+ \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}
+ \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}
+
+ \DeclareUnicodeCharacter{1E20}{\=G}
+ \DeclareUnicodeCharacter{1E21}{\=g}
+ \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}
+ \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}
+ \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}
+ \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}
+ \DeclareUnicodeCharacter{1E26}{\"H}
+ \DeclareUnicodeCharacter{1E27}{\"h}
+
+ \DeclareUnicodeCharacter{1E30}{\'K}
+ \DeclareUnicodeCharacter{1E31}{\'k}
+ \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}
+ \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}
+ \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}
+ \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}
+ \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}
+ \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}
+ \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}
+ \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}
+ \DeclareUnicodeCharacter{1E3E}{\'M}
+ \DeclareUnicodeCharacter{1E3F}{\'m}
+
+ \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}
+ \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}
+ \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}
+ \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}
+ \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}
+ \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}
+ \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}
+ \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}
+ \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}
+ \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}
+
+ \DeclareUnicodeCharacter{1E54}{\'P}
+ \DeclareUnicodeCharacter{1E55}{\'p}
+ \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}
+ \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}
+ \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}
+ \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}
+ \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}
+ \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}
+ \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}
+ \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}
+
+ \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}
+ \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}
+ \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}
+ \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}
+ \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}
+ \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}
+ \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}
+ \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}
+ \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}
+ \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}
+
+ \DeclareUnicodeCharacter{1E7C}{\~V}
+ \DeclareUnicodeCharacter{1E7D}{\~v}
+ \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}
+ \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}
+
+ \DeclareUnicodeCharacter{1E80}{\`W}
+ \DeclareUnicodeCharacter{1E81}{\`w}
+ \DeclareUnicodeCharacter{1E82}{\'W}
+ \DeclareUnicodeCharacter{1E83}{\'w}
+ \DeclareUnicodeCharacter{1E84}{\"W}
+ \DeclareUnicodeCharacter{1E85}{\"w}
+ \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}
+ \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}
+ \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}
+ \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}
+ \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}
+ \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}
+ \DeclareUnicodeCharacter{1E8C}{\"X}
+ \DeclareUnicodeCharacter{1E8D}{\"x}
+ \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}
+ \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}
+
+ \DeclareUnicodeCharacter{1E90}{\^Z}
+ \DeclareUnicodeCharacter{1E91}{\^z}
+ \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}
+ \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}
+ \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}
+ \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}
+ \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}
+ \DeclareUnicodeCharacter{1E97}{\"t}
+ \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}
+ \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}
+
+ \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}
+ \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}
+
+ \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}
+ \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}
+ \DeclareUnicodeCharacter{1EBC}{\~E}
+ \DeclareUnicodeCharacter{1EBD}{\~e}
+
+ \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}
+ \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}
+ \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}
+ \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}
+
+ \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}
+ \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}
+
+ \DeclareUnicodeCharacter{1EF2}{\`Y}
+ \DeclareUnicodeCharacter{1EF3}{\`y}
+ \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}
+
+ \DeclareUnicodeCharacter{1EF8}{\~Y}
+ \DeclareUnicodeCharacter{1EF9}{\~y}
+
+ \DeclareUnicodeCharacter{2013}{--}
+ \DeclareUnicodeCharacter{2014}{---}
+ \DeclareUnicodeCharacter{2018}{\quoteleft}
+ \DeclareUnicodeCharacter{2019}{\quoteright}
+ \DeclareUnicodeCharacter{201A}{\quotesinglbase}
+ \DeclareUnicodeCharacter{201C}{\quotedblleft}
+ \DeclareUnicodeCharacter{201D}{\quotedblright}
+ \DeclareUnicodeCharacter{201E}{\quotedblbase}
+ \DeclareUnicodeCharacter{2022}{\bullet}
+ \DeclareUnicodeCharacter{2026}{\dots}
+ \DeclareUnicodeCharacter{2039}{\guilsinglleft}
+ \DeclareUnicodeCharacter{203A}{\guilsinglright}
+ \DeclareUnicodeCharacter{20AC}{\euro}
+
+ \DeclareUnicodeCharacter{2192}{\expansion}
+ \DeclareUnicodeCharacter{21D2}{\result}
+
+ \DeclareUnicodeCharacter{2212}{\minus}
+ \DeclareUnicodeCharacter{2217}{\point}
+ \DeclareUnicodeCharacter{2261}{\equiv}
+}% end of \utfeightchardefs
+
+
+% US-ASCII character definitions.
+\def\asciichardefs{% nothing need be done
+ \relax
+}
+
+% Make non-ASCII characters printable again for compatibility with
+% existing Texinfo documents that may use them, even without declaring a
+% document encoding.
+%
+\setnonasciicharscatcode \other
+
+
+\message{formatting,}
+
+\newdimen\defaultparindent \defaultparindent = 15pt
+
+\chapheadingskip = 15pt plus 4pt minus 2pt
+\secheadingskip = 12pt plus 3pt minus 2pt
+\subsecheadingskip = 9pt plus 2pt minus 2pt
+
+% Prevent underfull vbox error messages.
+\vbadness = 10000
+
+% Don't be very finicky about underfull hboxes, either.
+\hbadness = 6666
+
+% Following George Bush, get rid of widows and orphans.
+\widowpenalty=10000
+\clubpenalty=10000
+
+% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
+% using an old version of TeX, don't do anything. We want the amount of
+% stretch added to depend on the line length, hence the dependence on
+% \hsize. We call this whenever the paper size is set.
+%
+\def\setemergencystretch{%
+ \ifx\emergencystretch\thisisundefined
+ % Allow us to assign to \emergencystretch anyway.
+ \def\emergencystretch{\dimen0}%
+ \else
+ \emergencystretch = .15\hsize
+ \fi
+}
+
+% Parameters in order: 1) textheight; 2) textwidth;
+% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
+% 7) physical page height; 8) physical page width.
+%
+% We also call \setleading{\textleading}, so the caller should define
+% \textleading. The caller should also set \parskip.
+%
+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
+ \voffset = #3\relax
+ \topskip = #6\relax
+ \splittopskip = \topskip
+ %
+ \vsize = #1\relax
+ \advance\vsize by \topskip
+ \outervsize = \vsize
+ \advance\outervsize by 2\topandbottommargin
+ \pageheight = \vsize
+ %
+ \hsize = #2\relax
+ \outerhsize = \hsize
+ \advance\outerhsize by 0.5in
+ \pagewidth = \hsize
+ %
+ \normaloffset = #4\relax
+ \bindingoffset = #5\relax
+ %
+ \ifpdf
+ \pdfpageheight #7\relax
+ \pdfpagewidth #8\relax
+ % if we don't reset these, they will remain at "1 true in" of
+ % whatever layout pdftex was dumped with.
+ \pdfhorigin = 1 true in
+ \pdfvorigin = 1 true in
+ \fi
+ %
+ \setleading{\textleading}
+ %
+ \parindent = \defaultparindent
+ \setemergencystretch
+}
+
+% @letterpaper (the default).
+\def\letterpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
+ %
+ % If page is nothing but text, make it come out even.
+ \internalpagesizes{607.2pt}{6in}% that's 46 lines
+ {\voffset}{.25in}%
+ {\bindingoffset}{36pt}%
+ {11in}{8.5in}%
+}}
+
+% Use @smallbook to reset parameters for 7x9.25 trim size.
+\def\smallbook{{\globaldefs = 1
+ \parskip = 2pt plus 1pt
+ \textleading = 12pt
+ %
+ \internalpagesizes{7.5in}{5in}%
+ {-.2in}{0in}%
+ {\bindingoffset}{16pt}%
+ {9.25in}{7in}%
+ %
+ \lispnarrowing = 0.3in
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = .5cm
+}}
+
+% Use @smallerbook to reset parameters for 6x9 trim size.
+% (Just testing, parameters still in flux.)
+\def\smallerbook{{\globaldefs = 1
+ \parskip = 1.5pt plus 1pt
+ \textleading = 12pt
+ %
+ \internalpagesizes{7.4in}{4.8in}%
+ {-.2in}{-.4in}%
+ {0pt}{14pt}%
+ {9in}{6in}%
+ %
+ \lispnarrowing = 0.25in
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = .4cm
+}}
+
+% Use @afourpaper to print on European A4 paper.
+\def\afourpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
+ %
+ % Double-side printing via postscript on Laserjet 4050
+ % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
+ % To change the settings for a different printer or situation, adjust
+ % \normaloffset until the front-side and back-side texts align. Then
+ % do the same for \bindingoffset. You can set these for testing in
+ % your texinfo source file like this:
+ % @tex
+ % \global\normaloffset = -6mm
+ % \global\bindingoffset = 10mm
+ % @end tex
+ \internalpagesizes{673.2pt}{160mm}% that's 51 lines
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{44pt}%
+ {297mm}{210mm}%
+ %
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = 5mm
+}}
+
+% Use @afivepaper to print on European A5 paper.
+% From address@hidden, 2 July 2000.
+% He also recommends making @example and @lisp be small.
+\def\afivepaper{{\globaldefs = 1
+ \parskip = 2pt plus 1pt minus 0.1pt
+ \textleading = 12.5pt
+ %
+ \internalpagesizes{160mm}{120mm}%
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{8pt}%
+ {210mm}{148mm}%
+ %
+ \lispnarrowing = 0.2in
+ \tolerance = 800
+ \hfuzz = 1.2pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = 2mm
+ \tableindent = 12mm
+}}
+
+% A specific text layout, 24x15cm overall, intended for A4 paper.
+\def\afourlatex{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{237mm}{150mm}%
+ {\voffset}{4.6mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ %
+ % Must explicitly reset to 0 because we call \afourpaper.
+ \globaldefs = 0
+}}
+
+% Use @afourwide to print on A4 paper in landscape format.
+\def\afourwide{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{241mm}{165mm}%
+ {\voffset}{-2.95mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ \globaldefs = 0
+}}
+
+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
+% Perhaps we should allow setting the margins, \topskip, \parskip,
+% and/or leading, also. Or perhaps we should compute them somehow.
+%
+\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
+\def\pagesizesyyy#1,#2,#3\finish{{%
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
+ \globaldefs = 1
+ %
+ \parskip = 3pt plus 2pt minus 1pt
+ \setleading{\textleading}%
+ %
+ \dimen0 = #1\relax
+ \advance\dimen0 by \voffset
+ %
+ \dimen2 = \hsize
+ \advance\dimen2 by \normaloffset
+ %
+ \internalpagesizes{#1}{\hsize}%
+ {\voffset}{\normaloffset}%
+ {\bindingoffset}{44pt}%
+ {\dimen0}{\dimen2}%
+}}
+
+% Set default to letter.
+%
+\letterpaper
+
+
+\message{and turning on texinfo input format.}
+
+\def^^L{\par} % remove \outer, so ^L can appear in an @comment
+
+% DEL is a comment character, in case @c does not suffice.
+\catcode`\^^? = 14
+
+% Define macros to output various characters with catcode for normal text.
+\catcode`\"=\other \def\normaldoublequote{"}
+\catcode`\$=\other \def\normaldollar{$}%$ font-lock fix
+\catcode`\+=\other \def\normalplus{+}
+\catcode`\<=\other \def\normalless{<}
+\catcode`\>=\other \def\normalgreater{>}
+\catcode`\^=\other \def\normalcaret{^}
+\catcode`\_=\other \def\normalunderscore{_}
+\catcode`\|=\other \def\normalverticalbar{|}
+\catcode`\~=\other \def\normaltilde{~}
+
+% This macro is used to make a character print one way in \tt
+% (where it can probably be output as-is), and another way in other fonts,
+% where something hairier probably needs to be done.
+%
+% #1 is what to print if we are indeed using \tt; #2 is what to print
+% otherwise. Since all the Computer Modern typewriter fonts have zero
+% interword stretch (and shrink), and it is reasonable to expect all
+% typewriter fonts to have this, we can check that font parameter.
+%
+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
+
+% Same as above, but check for italic font. Actually this also catches
+% non-italic slanted fonts since it is impossible to distinguish them from
+% italic fonts. But since this is only used by $ and it uses \sl anyway
+% this is not a problem.
+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
+
+% Turn off all special characters except @
+% (and those which the user can use as if they were ordinary).
+% Most of these we simply print from the \tt font, but for some, we can
+% use math or other variants that look better in normal text.
+
+\catcode`\"=\active
+\def\activedoublequote{{\tt\char34}}
+\let"=\activedoublequote
+\catcode`\~=\active
+\def~{{\tt\char126}}
+\chardef\hat=`\^
+\catcode`\^=\active
+\def^{{\tt \hat}}
+
+\catcode`\_=\active
+\def_{\ifusingtt\normalunderscore\_}
+\let\realunder=_
+% Subroutine for the previous macro.
+\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
+
+\catcode`\|=\active
+\def|{{\tt\char124}}
+\chardef \less=`\<
+\catcode`\<=\active
+\def<{{\tt \less}}
+\chardef \gtr=`\>
+\catcode`\>=\active
+\def>{{\tt \gtr}}
+\catcode`\+=\active
+\def+{{\tt \char 43}}
+\catcode`\$=\active
+\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+
+% If a .fmt file is being used, characters that might appear in a file
+% name cannot be active until we have parsed the command line.
+% So turn them off again, and have \everyjob (or @setfilename) turn them on.
+% \otherifyactive is called near the end of this file.
+\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
+
+% Used sometimes to turn off (effectively) the active characters even after
+% parsing them.
+\def\turnoffactive{%
+ \normalturnoffactive
+ \otherbackslash
+}
+
address@hidden
+
+% \backslashcurfont outputs one backslash character in current font,
+% as in \char`\\.
+\global\chardef\backslashcurfont=`\\
+\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work
+
+% \realbackslash is an actual character `\' with catcode other, and
+% \doublebackslash is two of them (for the pdf outlines).
+{\catcode`\\=\other @address@hidden @address@hidden
+
+% In texinfo, backslash is an active character; it prints the backslash
+% in fixed width font.
+\catcode`\\=\active % @ for escape char from now on.
+
+% The story here is that in math mode, the \char of \backslashcurfont
+% ends up printing the roman \ from the math symbol font (because \char
+% in math mode uses the \mathcode, and plain.tex sets
+% \mathcode`\\="026E). It seems better for @backslashchar{} to always
+% print a typewriter backslash, hence we use an explicit \mathchar,
+% which is the decimal equivalent of "715c (class 7, e.g., use \fam;
+% ignored family value; char position "5C). We can't use " for the
+% usual hex value because it has already been made active.
address@hidden@address@hidden @ifmmode @mathchar29020 @else @backslashcurfont
@fi}}
address@hidden@backslashchar = @normalbackslash % @backslashchar{} is for user
documents.
+
+% On startup, @fixbackslash assigns:
+% @let \ = @normalbackslash
+% \rawbackslash defines an active \ to do \backslashcurfont.
+% \otherbackslash defines an active \ to be a literal `\' character with
+% catcode other. We switch back and forth between these.
address@hidden@address@hidden@backslashcurfont}
address@hidden@address@hidden@realbackslash}
+
+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
+% the literal character `\'. Also revert - to its normal character, in
+% case the active - from code has slipped in.
+%
address@hidden = @active
+ @address@hidden
+ @address@hidden
+ @let"address@hidden
+ @address@hidden %$ font-lock fix
+ @address@hidden
+ @let<address@hidden
+ @let>address@hidden
+ @address@hidden
+ @address@hidden
+ @address@hidden
+ @let|address@hidden
+ @address@hidden
+ @markupsetuplqdefault
+ @markupsetuprqdefault
+ @unsepspaces
+ }
+}
+
+% Make _ and + \other characters, temporarily.
+% This is canceled by @fixbackslash.
address@hidden
+
+% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
+% That is what \eatinput is for; after that, the `\' should revert to printing
+% a backslash.
+%
address@hidden@eatinput input address@hidden
address@hidden@let\ = @eatinput
+
+% On the other hand, perhaps the file did not have a `\input texinfo'. Then
+% the first `\' in the file would cause an error. This macro tries to fix
+% that, assuming it is called before the first `\' could plausibly occur.
+% Also turn back on active characters that might appear in the input
+% file name, in case not using a pre-dumped format.
+%
address@hidden@fixbackslash{%
+ @address@hidden @let\ = @normalbackslash @fi
+ @address@hidden
+ @address@hidden@active
+}
+
+% Say @foo, not \foo, in error messages.
address@hidden = `@@
+
+% These (along with & and #) are made active for url-breaking, so need
+% active definitions as the normal characters.
address@hidden@normaldot{.}
address@hidden@normalquest{?}
address@hidden@normalslash{/}
+
+% These look ok in all fonts, so just make them not special.
+% @hashchar{} gets its own user-level command, because of #line.
address@hidden@& = @other @address@hidden&}
address@hidden@# = @other @address@hidden
address@hidden@% = @other @address@hidden
+
address@hidden @hashchar = @normalhash
+
address@hidden Finally, make ` and ' active, so that txicodequoteundirected and
address@hidden txicodequotebacktick work right in, e.g., @address@hidden'}}.
If we
address@hidden don't make ` and ' active, @code will not get them as active
chars.
address@hidden Do this last of all since we use ` in the previous @catcode
assignments.
address@hidden@'address@hidden
address@hidden@address@hidden
address@hidden
address@hidden
+
address@hidden Local variables:
address@hidden eval: (add-hook 'write-file-hooks 'time-stamp)
address@hidden page-delimiter: "^\\\\message"
address@hidden time-stamp-start: "def\\\\texinfoversion{"
address@hidden time-stamp-format: "%:y-%02m-%02d.%02H"
address@hidden time-stamp-end: "}"
address@hidden End:
+
address@hidden vim:sw=2:
+
address@hidden
+ arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
address@hidden ignore
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..1a04572
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,576 @@
+/* config.h.in. Generated from configure.ac by autoheader. */
+
+/* AT386 */
+#undef AT386
+
+/* BOOTSTRAP_SYMBOLS */
+#undef BOOTSTRAP_SYMBOLS
+
+/* CMU */
+#undef CMU
+
+/* option 3c515: Linux device driver for Ethernet controller 3Com 515 ISA Fast
+ EtherLink; on ix86-at enabled by default */
+#undef CONFIG_3C515
+
+/* option 3c574_cs: Linux device driver for 3Com 3c574 ``RoadRunner'' PCMCIA
+ Ethernet; on ix86-at enabled by default */
+#undef CONFIG_3C574_CS
+
+/* option 3c589_cs: Linux device driver for 3Com 3c589 PCMCIA Ethernet card;
+ on ix86-at enabled by default */
+#undef CONFIG_3C589_CS
+
+/* option ac3200: Linux device driver for Ethernet controller Ansel
+ Communications EISA 3200; on ix86-at enabled by default */
+#undef CONFIG_AC3200
+
+/* option apricot: Linux device driver for Ethernet controller Apricot XEN-II
+ on board ethernet; on ix86-at enabled by default */
+#undef CONFIG_APRICOT
+
+/* option at1700: Linux device driver for Ethernet controller AT1700 (Fujitsu
+ 86965); on ix86-at enabled by default */
+#undef CONFIG_AT1700
+
+/* option atp: Linux device driver for Ethernet controller AT-LAN-TEC/RealTek
+ pocket adaptor */
+#undef CONFIG_ATP
+
+/* option axnet_cs: Linux device driver for Asix AX88190-based PCMCIA Ethernet
+ adapters; on ix86-at enabled by default */
+#undef CONFIG_AXNET_CS
+
+/* option floppy: Linux device driver for PC floppy; on ix86-at enabled by
+ default and for qemu */
+#undef CONFIG_BLK_DEV_FD
+
+/* Force DMA on IDE block devices */
+#undef CONFIG_BLK_DEV_FORCE_DMA
+
+/* option ide: Linux device driver for IDE disk controllers; on ix86-at
+ enabled by default and for qemu */
+#undef CONFIG_BLK_DEV_IDE
+
+/* option de4x5: Linux device driver for Ethernet controller DE4x5 (de4x5,
+ de425, de434, de435, de450, de500); on ix86-at enabled by default */
+#undef CONFIG_DE4X5
+
+/* option de600: Linux device driver for Ethernet controller D-Link DE-600; on
+ ix86-at enabled by default */
+#undef CONFIG_DE600
+
+/* option de620: Linux device driver for Ethernet controller D-Link DE-620; on
+ ix86-at enabled by default */
+#undef CONFIG_DE620
+
+/* option tulip: Linux device driver for Ethernet controller DECchip Tulip
+ (dc21x4x) PCI (elcp, tulip); on ix86-at enabled by default */
+#undef CONFIG_DEC_ELCP
+
+/* option depca: Linux device driver for Ethernet controller DEPCA (de100,
+ de101, de200, de201, de202, de210, de422); on ix86-at enabled by default */
+#undef CONFIG_DEPCA
+
+/* option e2100: Linux device driver for Ethernet controller Cabletron E21xx;
+ on ix86-at enabled by default */
+#undef CONFIG_E2100
+
+/* option eexpress: Linux device driver for Ethernet controller EtherExpress
+ 16; on ix86-at enabled by default */
+#undef CONFIG_EEXPRESS
+
+/* option eepro: Linux device driver for Ethernet controller EtherExpressPro;
+ on ix86-at enabled by default */
+#undef CONFIG_EEXPRESS_PRO
+
+/* option eepro100: Linux device driver for Ethernet controller Intel
+ EtherExpressPro PCI 10+/100B/100+; on ix86-at enabled by default */
+#undef CONFIG_EEXPRESS_PRO100B
+
+/* option 3c501: Linux device driver for Ethernet controller 3COM 501 (3c501)
+ / Etherlink I; on ix86-at enabled by default */
+#undef CONFIG_EL1
+
+/* option 3c507: Linux device driver for Ethernet controller 3Com 507 (3c507,
+ el16); on ix86-at enabled by default */
+#undef CONFIG_EL16
+
+/* option 3c503: Linux device driver for Ethernet controller 3Com 503 (3c503)
+ / Etherlink II; on ix86-at enabled by default */
+#undef CONFIG_EL2
+
+/* option 3c509: Linux device driver for Ethernet controller 3Com 509/579
+ (3c509, 3c579) / Etherlink III; on ix86-at enabled by default */
+#undef CONFIG_EL3
+
+/* option 3c505: Linux device driver for Ethernet controller 3Com 505 (3c505,
+ elplus); on ix86-at enabled by default */
+#undef CONFIG_ELPLUS
+
+/* option epic100: Linux device driver for Ethernet controller SMC 83c170/175
+ EPIC/100 (epic, epic100) / EtherPower II; on ix86-at enabled by default */
+#undef CONFIG_EPIC
+
+/* option eth16i: Linux device driver for Ethernet controller ICL EtherTeam
+ 16i/32 (eth16i, eth32); on ix86-at enabled by default */
+#undef CONFIG_ETH16I
+
+/* option ewrk3: Linux device driver for Ethernet controller EtherWORKS 3
+ (ewrk3, de203, de204, de205); on ix86-at enabled by default */
+#undef CONFIG_EWRK3
+
+/* option fmv18x: Linux device driver for Ethernet controller
+ FMV-181/182/183/184; on ix86-at enabled by default */
+#undef CONFIG_FMV18X
+
+/* option fmvj18x_cs: Linux device driver for fmvj18x chipset based PCMCIA
+ Ethernet cards; on ix86-at enabled by default */
+#undef CONFIG_FMVJ18X_CS
+
+/* option hamachi: Linux device driver for Ethernet controller Packet Engines
+ "Hamachi" GNIC-2 Gigabit Ethernet; on ix86-at enabled by default */
+#undef CONFIG_HAMACHI
+
+/* option hp100: Linux device driver for Ethernet controller HP 10/100VG PCLAN
+ (ISA, EISA, PCI) (hp100, hpj2577, hpj2573, hpj2585, hp27248b); on ix86-at
+ enabled by default */
+#undef CONFIG_HP100
+
+/* option hp: Linux device driver for Ethernet controller HP PCLAN (27245 and
+ other 27xxx series); on ix86-at enabled by default */
+#undef CONFIG_HPLAN
+
+/* option hp-plus: Linux device driver for Ethernet controller HP PCLAN+
+ (27247B and 27252A); on ix86-at enabled by default */
+#undef CONFIG_HPLAN_PLUS
+
+/* option i82365: Linux device driver for Intel 82365 PC Card controller; on
+ ix86-at enabled by default */
+#undef CONFIG_I82365
+
+/* CONFIG_INET */
+#undef CONFIG_INET
+
+/* option intel-gige: Linux device driver for Ethernet controller Intel PCI
+ Gigabit Ethernet; on ix86-at enabled by default */
+#undef CONFIG_INTEL_GIGE
+
+/* option pcmcia-isa: isa bus support in the pcmcia core; on ix86-at enabled
+ by default */
+#undef CONFIG_ISA
+
+/* option lance: Linux device driver for Ethernet controller AMD LANCE and
+ PCnet (at1500, ne2100); on ix86-at enabled by default */
+#undef CONFIG_LANCE
+
+/* 386 */
+#undef CONFIG_M386
+
+/* 486 */
+#undef CONFIG_M486
+
+/* 586 */
+#undef CONFIG_M586
+
+/* 686 */
+#undef CONFIG_M686
+
+/* option myson803: Linux device driver for Ethernet controller Myson MTD803
+ Ethernet adapter series; on ix86-at enabled by default */
+#undef CONFIG_MYSON803
+
+/* option natsemi: Linux device driver for Ethernet controller National
+ Semiconductor DP8381x series PCI Ethernet; on ix86-at enabled by default */
+#undef CONFIG_NATSEMI
+
+/* option ne: Linux device driver for Ethernet controller NE2000/NE1000 ISA
+ (ne, ne1000, ne2000); on ix86-at enabled by default and for qemu */
+#undef CONFIG_NE2000
+
+/* option ne2k-pci: Linux device driver for Ethernet controller PCI NE2000; on
+ ix86-at enabled by default */
+#undef CONFIG_NE2K_PCI
+
+/* option ni52: Linux device driver for Ethernet controller NI5210; on ix86-at
+ enabled by default */
+#undef CONFIG_NI52
+
+/* option ni65: Linux device driver for Ethernet controller NI6510; on ix86-at
+ enabled by default */
+#undef CONFIG_NI65
+
+/* option nmclan_cs: Linux device driver for New Media Ethernet LAN PCMCIA
+ cards; on ix86-at enabled by default */
+#undef CONFIG_NMCLAN_CS
+
+/* option ns820: Linux device driver for Ethernet controller National
+ Semiconductor DP8382x series PCI Ethernet; on ix86-at enabled by default */
+#undef CONFIG_NS820
+
+/* option orinoco_cs: Linux device driver for Hermes or Prism 2 PCMCIA
+ Wireless adapters (Orinoco); on ix86-at enabled by default */
+#undef CONFIG_ORINOCO_CS
+
+/* CONFIG_PCMCIA */
+#undef CONFIG_PCMCIA
+
+/* option pcnet32: Linux device driver for Ethernet controller AMD PCI PCnet32
+ (PCI bus NE2100 cards); on ix86-at enabled by default */
+#undef CONFIG_PCNET32
+
+/* option pcnet_cs: Linux device driver for NS8390-based PCMCIA cards; on
+ ix86-at enabled by default */
+#undef CONFIG_PCNET_CS
+
+/* option rtl8139: Linux device driver for Ethernet controller RealTek
+ 8129/8139 (rtl8129, rtl8139) (not 8019/8029!); on ix86-at enabled by
+ default */
+#undef CONFIG_RTL8139
+
+/* CONFIG_SCSI */
+#undef CONFIG_SCSI
+
+/* option wd7000: Linux device driver for SCSI controller WD 7000; on ix86-at
+ enabled by default */
+#undef CONFIG_SCSI_7000FASST
+
+/* option advansys: Linux device driver for SCSI controller AdvanSys; on
+ ix86-at enabled by default */
+#undef CONFIG_SCSI_ADVANSYS
+
+/* option aha152x: Linux device driver for SCSI controller Adaptec
+ AHA-152x/2825 (aha152x, aha2825); on ix86-at enabled by default */
+#undef CONFIG_SCSI_AHA152X
+
+/* option aha1542: Linux device driver for SCSI controller Adaptec AHA-1542;
+ on ix86-at enabled by default */
+#undef CONFIG_SCSI_AHA1542
+
+/* option aha1740: Linux device driver for SCSI controller Adaptec AHA-1740;
+ on ix86-at enabled by default */
+#undef CONFIG_SCSI_AHA1740
+
+/* option aic7xxx: Linux device driver for SCSI controller Adaptec AIC7xxx */
+#undef CONFIG_SCSI_AIC7XXX
+
+/* option AM53C974: Linux device driver for SCSI controller AM53/79C974
+ (am53c974, am79c974); on ix86-at enabled by default */
+#undef CONFIG_SCSI_AM53C974
+
+/* option BusLogic: Linux device driver for SCSI controller BusLogic; on
+ ix86-at enabled by default */
+#undef CONFIG_SCSI_BUSLOGIC
+
+/* option tmscsim: Linux device driver for SCSI controller Tekram DC-390(T)
+ (dc390, dc390t); on ix86-at enabled by default */
+#undef CONFIG_SCSI_DC390T
+
+/* option dtc: Linux device driver for SCSI controller DTC3180/3280 (dtc3180,
+ dtc3280); on ix86-at enabled by default */
+#undef CONFIG_SCSI_DTC3280
+
+/* option eata: Linux device driver for SCSI controller EATA ISA/EISA/PCI (DPT
+ and generic EATA/DMA-compliant boards); on ix86-at enabled by default */
+#undef CONFIG_SCSI_EATA
+
+/* option eata_dma: Linux device driver for SCSI controller EATA-DMA (DPT,
+ NEC, AT&T, SNI, AST, Olivetti, Alphatronix) */
+#undef CONFIG_SCSI_EATA_DMA
+
+/* option eata_pio: Linux device driver for SCSI controller EATA-PIO (old DPT
+ PM2001, PM2012A); on ix86-at enabled by default */
+#undef CONFIG_SCSI_EATA_PIO
+
+/* option fdomain: Linux device driver for SCSI controller Future Domain 16xx;
+ on ix86-at enabled by default */
+#undef CONFIG_SCSI_FUTURE_DOMAIN
+
+/* option gdth: Linux device driver for GDT SCSI Disk Array Controller */
+#undef CONFIG_SCSI_GDTH
+
+/* option g_NCR5380: Linux device driver for SCSI controller Generic
+ NCR5380/53c400 (ncr5380, ncr53c400) */
+#undef CONFIG_SCSI_GENERIC_NCR5380
+
+/* option in2000: Linux device driver for SCSI controller Always IN 2000; on
+ ix86-at enabled by default */
+#undef CONFIG_SCSI_IN2000
+
+/* option NCR53c406a: Linux device driver for SCSI controller NCR53c406a chip
+ */
+#undef CONFIG_SCSI_NCR53C406A
+
+/* option 53c78xx: Linux device driver for SCSI controller NCR 53C7,8xx */
+#undef CONFIG_SCSI_NCR53C7xx
+
+/* option ncr53c8xx: Linux device driver for SCSI controller NCR53C8XX
+ (ncr53c8xx, dc390f, dc390u, dc390w); on ix86-at enabled by default */
+#undef CONFIG_SCSI_NCR53C8XX
+
+/* scsi omit flashpoint */
+#undef CONFIG_SCSI_OMIT_FLASHPOINT
+
+/* option pas16: Linux device driver for SCSI controller PAS16; on ix86-at
+ enabled by default */
+#undef CONFIG_SCSI_PASS16
+
+/* option ppa: Linux device driver for IOMEGA Parallel Port ZIP drive; on
+ ix86-at enabled by default */
+#undef CONFIG_SCSI_PPA
+
+/* option qlogicfas: Linux device driver for SCSI controller Qlogic FAS; on
+ ix86-at enabled by default */
+#undef CONFIG_SCSI_QLOGIC_FAS
+
+/* option qlogicisp: Linux device driver for SCSI controller Qlogic ISP; on
+ ix86-at enabled by default */
+#undef CONFIG_SCSI_QLOGIC_ISP
+
+/* option seagate: Linux device driver for SCSI controller Seagate ST02,
+ Future Domain TMC-8xx; on ix86-at enabled by default */
+#undef CONFIG_SCSI_SEAGATE
+
+/* option sym53c8xx: Linux device driver for SCSI controller Symbios 53C8XX;
+ on ix86-at enabled by default */
+#undef CONFIG_SCSI_SYM53C8XX
+
+/* option t128: Linux device driver for SCSI controller Trantor
+ T128/T128F/T228 (t128, t128f, t228); on ix86-at enabled by default */
+#undef CONFIG_SCSI_T128
+
+/* option u14-34f: Linux device driver for SCSI controller UltraStor 14F/34F;
+ on ix86-at enabled by default */
+#undef CONFIG_SCSI_U14_34F
+
+/* option ultrastor: Linux device driver for SCSI controller UltraStor; on
+ ix86-at enabled by default */
+#undef CONFIG_SCSI_ULTRASTOR
+
+/* option seeq8005: Linux device driver for Ethernet controller Seeq8005; on
+ ix86-at enabled by default */
+#undef CONFIG_SEEQ8005
+
+/* option sis900: Linux device driver for Ethernet controller SiS 900; on
+ ix86-at enabled by default */
+#undef CONFIG_SIS900
+
+/* option sk_g16: Linux device driver for Ethernet controller Schneider & Koch
+ G16; on ix86-at enabled by default */
+#undef CONFIG_SK_G16
+
+/* option smc91c92_cs: Linux device driver for SMC91c92-based PCMCIA cards; on
+ ix86-at enabled by default */
+#undef CONFIG_SMC91C92_CS
+
+/* option starfire: Linux device driver for Ethernet controller Adaptec
+ Starfire network adapter; on ix86-at enabled by default */
+#undef CONFIG_STARFIRE
+
+/* option sundance: Linux device driver for Ethernet controller Sundance ST201
+ "Alta" PCI Ethernet; on ix86-at enabled by default */
+#undef CONFIG_SUNDANCE
+
+/* option tlan: Linux device driver for Ethernet controller TI ThunderLAN; on
+ ix86-at enabled by default */
+#undef CONFIG_TLAN
+
+/* option smc-ultra: Linux device driver for Ethernet controller SMC Ultra; on
+ ix86-at enabled by default */
+#undef CONFIG_ULTRA
+
+/* option smc-ultra32: Linux device driver for Ethernet controller SMC
+ Ultra32; on ix86-at enabled by default */
+#undef CONFIG_ULTRA32
+
+/* option via-rhine: Linux device driver for Ethernet controller VIA Rhine; on
+ ix86-at enabled by default */
+#undef CONFIG_VIA_RHINE
+
+/* option 3c59x: Linux device driver for Ethernet controller 3Com 59x/90x
+ (3c59x, 3c590, 3c592, 3c595, 3c597, 3c90x, 3c900, 3c905)
+ "Vortex/Boomerang"; on ix86-at enabled by default */
+#undef CONFIG_VORTEX
+
+/* option wavelan: Linux device driver for Ethernet controller AT&T WaveLAN &
+ DEC RoamAbout DS */
+#undef CONFIG_WAVELAN
+
+/* option wd: Linux device driver for Ethernet controller WD80x3; on ix86-at
+ enabled by default */
+#undef CONFIG_WD80x3
+
+/* option winbond-840: Linux device driver for Ethernet controller Winbond
+ W89c840 PCI Ethernet; on ix86-at enabled by default */
+#undef CONFIG_WINBOND840
+
+/* CONFIG_WIRELESS */
+#undef CONFIG_WIRELESS
+
+/* option xirc2ps_cs: Linux device driver for Xircom CreditCard and Realport
+ PCMCIA ethernet; on ix86-at enabled by default */
+#undef CONFIG_XIRC2PS_CS
+
+/* option yellowfin: Linux device driver for Ethernet controller Packet
+ Engines Yellowfin Gigabit-NIC; on ix86-at enabled by default */
+#undef CONFIG_YELLOWFIN
+
+/* option znet: Linux device driver for Ethernet controller Zenith Z-Note
+ (znet, znote); on ix86-at enabled by default */
+#undef CONFIG_ZNET
+
+/* CPU */
+#undef CPU
+
+/* CPU_L1_SHIFT */
+#undef CPU_L1_SHIFT
+
+/* FAST_TAS */
+#undef FAST_TAS
+
+/* HW_FOOTPRINT */
+#undef HW_FOOTPRINT
+
+/* KERNEL */
+#undef KERNEL
+
+/* Linux device drivers. */
+#undef LINUX_DEV
+
+/* MACH */
+#undef MACH
+
+/* MACH_COUNTERS */
+#undef MACH_COUNTERS
+
+/* MACH_DEBUG */
+#undef MACH_DEBUG
+
+/* MACH_FIXPRI */
+#undef MACH_FIXPRI
+
+/* MACH_HOST */
+#undef MACH_HOST
+
+/* be a hypervisor guest */
+#undef MACH_HYP
+
+/* MACH_IPC_DEBUG */
+#undef MACH_IPC_DEBUG
+
+/* MACH_IPC_TEST */
+#undef MACH_IPC_TEST
+
+/* Use the in-kernel debugger? */
+#undef MACH_KDB
+
+/* Standalone MACH kernel */
+#undef MACH_KERNEL
+
+/* enable use of kmsg device */
+#undef MACH_KMSG
+
+/* MACH_LDEBUG */
+#undef MACH_LDEBUG
+
+/* MACH_LOCK_MON */
+#undef MACH_LOCK_MON
+
+/* lpr device */
+#undef MACH_LPR
+
+/* MACH_MACHINE_ROUTINES */
+#undef MACH_MACHINE_ROUTINES
+
+/* MACH_MP_DEBUG */
+#undef MACH_MP_DEBUG
+
+/* MACH_PAGEMAP */
+#undef MACH_PAGEMAP
+
+/* MACH_PCSAMPLE */
+#undef MACH_PCSAMPLE
+
+/* Enable pseudo physical memory support */
+#undef MACH_PSEUDO_PHYS
+
+/* Enable paravirtualized segment descriptors support */
+#undef MACH_PV_DESCRIPTORS
+
+/* Enable paravirtualized page tables support */
+#undef MACH_PV_PAGETABLES
+
+/* Enable ring1 kernel support */
+#undef MACH_RING1
+
+/* MACH_TTD */
+#undef MACH_TTD
+
+/* MACH_VM_DEBUG */
+#undef MACH_VM_DEBUG
+
+/* build a MachXen kernel */
+#undef MACH_XEN
+
+/* set things up for a multiprocessor */
+#undef MULTIPROCESSOR
+
+/* NCOM */
+#undef NCOM
+
+/* number of CPUs */
+#undef NCPUS
+
+/* NLPR */
+#undef NLPR
+
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the home page for this package. */
+#undef PACKAGE_URL
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* PAE support */
+#undef PAE
+
+/* POWER_SAVE */
+#undef POWER_SAVE
+
+/* SIMPLE_CLOCK */
+#undef SIMPLE_CLOCK
+
+/* SLAB_USE_CPU_POOLS */
+#undef SLAB_USE_CPU_POOLS
+
+/* SLAB_VERIFY */
+#undef SLAB_VERIFY
+
+/* STAT_TIME */
+#undef STAT_TIME
+
+/* XPR_DEBUG */
+#undef XPR_DEBUG
+
+/* __ELF__ */
+#undef __ELF__
+
+/* __KERNEL__ */
+#undef __KERNEL__
+
+/* __SMP__ */
+#undef __SMP__
diff --git a/configure b/configure
new file mode 100755
index 0000000..f90be76
--- /dev/null
+++ b/configure
@@ -0,0 +1,13055 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.69 for GNU Mach 1.4.
+#
+# Report bugs to <address@hidden>.
+#
+#
+# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+#
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo";
then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file
name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+# Use a proper internal environment variable to ensure we don't fall
+ # into an infinite loop, continuously re-executing ourselves.
+ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+ _as_can_reexec=no; export _as_can_reexec;
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+as_fn_exit 255
+ fi
+ # We don't want this to propagate to other subprocesses.
+ { _as_can_reexec=; unset _as_can_reexec;}
+if test "x$CONFIG_SHELL" = x; then
+ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh)
>/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on \${1+\"address@hidden"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '\${1+\"address@hidden"}'='\"address@hidden"'
+ setopt NO_GLOB_SUBST
+else
+ case \`(set -o) 2>/dev/null\` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+"
+ as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
+
+exitcode=0
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+ exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1
+test -x / || exit 1"
+ as_suggested="
as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested"
as_lineno_1a=\$LINENO
+ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested"
as_lineno_2a=\$LINENO
+ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" =
\"x\$as_lineno_2'\$as_run'\"' || exit 1"
+ if (eval "$as_required") 2>/dev/null; then :
+ as_have_required=yes
+else
+ as_have_required=no
+fi
+ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null;
then :
+
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ as_found=:
+ case $as_dir in #(
+ /*)
+ for as_base in sh bash ksh sh5; do
+ # Try only shells that exist, to save several forks.
+ as_shell=$as_dir/$as_base
+ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a
"$as_shell"; } 2>/dev/null; then :
+ CONFIG_SHELL=$as_shell as_have_required=yes
+ if { $as_echo "$as_bourne_compatible""$as_suggested" |
as_run=a "$as_shell"; } 2>/dev/null; then :
+ break 2
+fi
+fi
+ done;;
+ esac
+ as_found=false
+done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a
"$SHELL"; } 2>/dev/null; then :
+ CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
+IFS=$as_save_IFS
+
+
+ if test "x$CONFIG_SHELL" != x; then :
+ export CONFIG_SHELL
+ # We cannot yet assume a decent shell, so we have to provide a
+# neutralization value for shells without unset; and this also
+# works around shells that cannot unset nonexistent variables.
+# Preserve -v and -x to the replacement shell.
+BASH_ENV=/dev/null
+ENV=/dev/null
+(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+case $- in # ((((
+ *v*x* | *x*v* ) as_opts=-vx ;;
+ *v* ) as_opts=-v ;;
+ *x* ) as_opts=-x ;;
+ * ) as_opts= ;;
+esac
+exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+# Admittedly, this is quite paranoid, since all the known shells bail
+# out after a failed `exec'.
+$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
+fi
+
+ if test x$as_have_required = xno; then :
+ $as_echo "$0: This script requires a shell more modern than all"
+ $as_echo "$0: the shells that I found on your system."
+ if test x${ZSH_VERSION+set} = xset ; then
+ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+ else
+ $as_echo "$0: Please tell address@hidden and address@hidden
+$0: about your system, including any error possibly output
+$0: before this message. Then install a modern shell, or
+$0: manually run the script under such a shell if you do
+$0: have one."
+ fi
+ exit 1
+fi
+fi
+fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
+
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"}
as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+
+ as_lineno_1=$LINENO as_lineno_1a=$LINENO
+ as_lineno_2=$LINENO as_lineno_2a=$LINENO
+ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
+ sed -n '
+ p
+ /[$]LINENO/=
+ ' <$as_myself |
+ sed '
+ s/[$]LINENO.*/&-/
+ t lineno
+ b
+ :lineno
+ N
+ :loop
+ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+ t loop
+ s/-\n.*//
+ ' >$as_me.lineno &&
+ chmod +x "$as_me.lineno" ||
+ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX
shell" >&2; as_fn_exit 1; }
+
+ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+ # already done that, so ensure we don't try to do so again and fall
+ # in an infinite loop. This has already happened in practice.
+ _as_can_reexec=no; export _as_can_reexec
+ # Don't try to exec as it changes $[0], causing all sort of problems
+ # (the dirname of $[0] is not the place where we might find the
+ # original and so on. Autoconf is especially sensitive to this).
+ . "./$as_me.lineno"
+ # Exit status is that of the last command.
+ exit
+}
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed
'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+test -n "$DJDIR" || exec 7<&0 </dev/null
+exec 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+
+# Identity of this package.
+PACKAGE_NAME='GNU Mach'
+PACKAGE_TARNAME='gnumach'
+PACKAGE_VERSION='1.4'
+PACKAGE_STRING='GNU Mach 1.4'
+PACKAGE_BUGREPORT='address@hidden'
+PACKAGE_URL=''
+
+ac_unique_file="kern/ipc_kobject.c"
+ac_subst_vars='am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+LIBOBJS
+disable_smashing_stack_protector_FALSE
+disable_smashing_stack_protector_TRUE
+CODE_linux_FALSE
+CODE_linux_TRUE
+device_driver_group_scsi_FALSE
+device_driver_group_scsi_TRUE
+device_driver_group_pcmcia_FALSE
+device_driver_group_pcmcia_TRUE
+device_driver_group_net_FALSE
+device_driver_group_net_TRUE
+device_driver_orinoco_cs_FALSE
+device_driver_orinoco_cs_TRUE
+device_driver_xirc2ps_cs_FALSE
+device_driver_xirc2ps_cs_TRUE
+device_driver_smc91c92_cs_FALSE
+device_driver_smc91c92_cs_TRUE
+device_driver_pcnet_cs_FALSE
+device_driver_pcnet_cs_TRUE
+device_driver_nmclan_cs_FALSE
+device_driver_nmclan_cs_TRUE
+device_driver_fmvj18x_cs_FALSE
+device_driver_fmvj18x_cs_TRUE
+device_driver_axnet_cs_FALSE
+device_driver_axnet_cs_TRUE
+device_driver_3c589_cs_FALSE
+device_driver_3c589_cs_TRUE
+device_driver_3c574_cs_FALSE
+device_driver_3c574_cs_TRUE
+device_driver_pcmcia_isa_FALSE
+device_driver_pcmcia_isa_TRUE
+device_driver_i82365_FALSE
+device_driver_i82365_TRUE
+device_driver_znet_FALSE
+device_driver_znet_TRUE
+device_driver_yellowfin_FALSE
+device_driver_yellowfin_TRUE
+device_driver_winbond_840_FALSE
+device_driver_winbond_840_TRUE
+device_driver_wd_FALSE
+device_driver_wd_TRUE
+device_driver_wavelan_FALSE
+device_driver_wavelan_TRUE
+device_driver_via_rhine_FALSE
+device_driver_via_rhine_TRUE
+device_driver_tulip_FALSE
+device_driver_tulip_TRUE
+device_driver_tlan_FALSE
+device_driver_tlan_TRUE
+device_driver_sundance_FALSE
+device_driver_sundance_TRUE
+device_driver_starfire_FALSE
+device_driver_starfire_TRUE
+device_driver_smc_ultra32_FALSE
+device_driver_smc_ultra32_TRUE
+device_driver_smc_ultra_FALSE
+device_driver_smc_ultra_TRUE
+device_driver_sk_g16_FALSE
+device_driver_sk_g16_TRUE
+device_driver_sis900_FALSE
+device_driver_sis900_TRUE
+device_driver_seeq8005_FALSE
+device_driver_seeq8005_TRUE
+device_driver_rtl8139_FALSE
+device_driver_rtl8139_TRUE
+device_driver_pcnet32_FALSE
+device_driver_pcnet32_TRUE
+device_driver_ns820_FALSE
+device_driver_ns820_TRUE
+device_driver_ni65_FALSE
+device_driver_ni65_TRUE
+device_driver_ni52_FALSE
+device_driver_ni52_TRUE
+device_driver_ne2k_pci_FALSE
+device_driver_ne2k_pci_TRUE
+device_driver_ne_FALSE
+device_driver_ne_TRUE
+device_driver_natsemi_FALSE
+device_driver_natsemi_TRUE
+device_driver_myson803_FALSE
+device_driver_myson803_TRUE
+device_driver_lance_FALSE
+device_driver_lance_TRUE
+device_driver_intel_gige_FALSE
+device_driver_intel_gige_TRUE
+device_driver_hp100_FALSE
+device_driver_hp100_TRUE
+device_driver_hp_FALSE
+device_driver_hp_TRUE
+device_driver_hp_plus_FALSE
+device_driver_hp_plus_TRUE
+device_driver_hamachi_FALSE
+device_driver_hamachi_TRUE
+device_driver_fmv18x_FALSE
+device_driver_fmv18x_TRUE
+device_driver_ewrk3_FALSE
+device_driver_ewrk3_TRUE
+device_driver_eth16i_FALSE
+device_driver_eth16i_TRUE
+device_driver_epic100_FALSE
+device_driver_epic100_TRUE
+device_driver_eexpress_FALSE
+device_driver_eexpress_TRUE
+device_driver_eepro100_FALSE
+device_driver_eepro100_TRUE
+device_driver_eepro_FALSE
+device_driver_eepro_TRUE
+device_driver_e2100_FALSE
+device_driver_e2100_TRUE
+device_driver_depca_FALSE
+device_driver_depca_TRUE
+device_driver_de620_FALSE
+device_driver_de620_TRUE
+device_driver_de600_FALSE
+device_driver_de600_TRUE
+device_driver_de4x5_FALSE
+device_driver_de4x5_TRUE
+device_driver_atp_FALSE
+device_driver_atp_TRUE
+device_driver_at1700_FALSE
+device_driver_at1700_TRUE
+device_driver_apricot_FALSE
+device_driver_apricot_TRUE
+device_driver_ac3200_FALSE
+device_driver_ac3200_TRUE
+device_driver_3c515_FALSE
+device_driver_3c515_TRUE
+device_driver_3c59x_FALSE
+device_driver_3c59x_TRUE
+device_driver_3c509_FALSE
+device_driver_3c509_TRUE
+device_driver_3c507_FALSE
+device_driver_3c507_TRUE
+device_driver_3c505_FALSE
+device_driver_3c505_TRUE
+device_driver_3c503_FALSE
+device_driver_3c503_TRUE
+device_driver_3c501_FALSE
+device_driver_3c501_TRUE
+device_driver_wd7000_FALSE
+device_driver_wd7000_TRUE
+device_driver_ultrastor_FALSE
+device_driver_ultrastor_TRUE
+device_driver_u14_34f_FALSE
+device_driver_u14_34f_TRUE
+device_driver_tmscsim_FALSE
+device_driver_tmscsim_TRUE
+device_driver_t128_FALSE
+device_driver_t128_TRUE
+device_driver_sym53c8xx_FALSE
+device_driver_sym53c8xx_TRUE
+device_driver_seagate_FALSE
+device_driver_seagate_TRUE
+device_driver_qlogicisp_FALSE
+device_driver_qlogicisp_TRUE
+device_driver_qlogicfas_FALSE
+device_driver_qlogicfas_TRUE
+device_driver_ppa_FALSE
+device_driver_ppa_TRUE
+device_driver_pas16_FALSE
+device_driver_pas16_TRUE
+device_driver_ncr53c8xx_FALSE
+device_driver_ncr53c8xx_TRUE
+device_driver_in2000_FALSE
+device_driver_in2000_TRUE
+device_driver_gdth_FALSE
+device_driver_gdth_TRUE
+device_driver_g_NCR5380_FALSE
+device_driver_g_NCR5380_TRUE
+device_driver_fdomain_FALSE
+device_driver_fdomain_TRUE
+device_driver_eata_pio_FALSE
+device_driver_eata_pio_TRUE
+device_driver_eata_dma_FALSE
+device_driver_eata_dma_TRUE
+device_driver_eata_FALSE
+device_driver_eata_TRUE
+device_driver_dtc_FALSE
+device_driver_dtc_TRUE
+device_driver_aic7xxx_FALSE
+device_driver_aic7xxx_TRUE
+device_driver_aha1740_FALSE
+device_driver_aha1740_TRUE
+device_driver_aha1542_FALSE
+device_driver_aha1542_TRUE
+device_driver_aha152x_FALSE
+device_driver_aha152x_TRUE
+device_driver_advansys_FALSE
+device_driver_advansys_TRUE
+device_driver_NCR53c406a_FALSE
+device_driver_NCR53c406a_TRUE
+device_driver_BusLogic_FALSE
+device_driver_BusLogic_TRUE
+device_driver_AM53C974_FALSE
+device_driver_AM53C974_TRUE
+device_driver_53c78xx_FALSE
+device_driver_53c78xx_TRUE
+device_driver_ide_FALSE
+device_driver_ide_TRUE
+device_driver_floppy_FALSE
+device_driver_floppy_TRUE
+enable_kmsg_FALSE
+enable_kmsg_TRUE
+enable_kdb_FALSE
+enable_kdb_TRUE
+enable_pae_FALSE
+enable_pae_TRUE
+enable_lpr_FALSE
+enable_lpr_TRUE
+PLATFORM_at_FALSE
+PLATFORM_at_TRUE
+HOST_ix86_FALSE
+HOST_ix86_TRUE
+enable_ring1_FALSE
+enable_ring1_TRUE
+enable_pv_descriptors_FALSE
+enable_pv_descriptors_TRUE
+enable_pv_pagetables_FALSE
+enable_pv_pagetables_TRUE
+enable_pseudo_phys_FALSE
+enable_pseudo_phys_TRUE
+PLATFORM_xen_FALSE
+PLATFORM_xen_TRUE
+PATCH
+GZIP
+MIG
+NM
+LD
+AR
+RANLIB
+CPP
+am__fastdepCCAS_FALSE
+am__fastdepCCAS_TRUE
+CCASDEPMODE
+CCASFLAGS
+CCAS
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__quote
+am__include
+DEPDIR
+OBJEXT
+EXEEXT
+ac_ct_CC
+CPPFLAGS
+LDFLAGS
+CFLAGS
+CC
+systype
+host_platform
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
+target_alias
+host_alias
+build_alias
+LIBS
+ECHO_T
+ECHO_N
+ECHO_C
+DEFS
+mandir
+localedir
+libdir
+psdir
+pdfdir
+dvidir
+htmldir
+infodir
+docdir
+oldincludedir
+includedir
+localstatedir
+sharedstatedir
+sysconfdir
+datadir
+datarootdir
+libexecdir
+sbindir
+bindir
+program_transform_name
+prefix
+exec_prefix
+PACKAGE_URL
+PACKAGE_BUGREPORT
+PACKAGE_STRING
+PACKAGE_VERSION
+PACKAGE_TARNAME
+PACKAGE_NAME
+PATH_SEPARATOR
+SHELL'
+ac_subst_files=''
+ac_user_opts='
+enable_option_checking
+enable_silent_rules
+enable_platform
+enable_dependency_tracking
+enable_device_drivers
+enable_pseudo_phys
+enable_pv_pagetables
+enable_pv_descriptors
+enable_ring1
+enable_lpr
+enable_pae
+enable_kdb
+enable_kmsg
+enable_floppy
+enable_ide
+enable_ide_forcedma
+enable_scsi_group
+enable_53c78xx
+enable_AM53C974
+enable_BusLogic
+enable_flashpoint
+enable_NCR53c406a
+enable_advansys
+enable_aha152x
+enable_aha1542
+enable_aha1740
+enable_aic7xxx
+enable_dtc
+enable_eata
+enable_eata_dma
+enable_eata_pio
+enable_fdomain
+enable_g_NCR5380
+enable_gdth
+enable_in2000
+enable_ncr53c8xx
+enable_pas16
+enable_ppa
+enable_qlogicfas
+enable_qlogicisp
+enable_seagate
+enable_sym53c8xx
+enable_t128
+enable_tmscsim
+enable_u14_34f
+enable_ultrastor
+enable_wd7000
+enable_net_group
+enable_3c501
+enable_3c503
+enable_3c505
+enable_3c507
+enable_3c509
+enable_3c59x
+enable_3c515
+enable_ac3200
+enable_apricot
+enable_at1700
+enable_atp
+enable_de4x5
+enable_de600
+enable_de620
+enable_depca
+enable_e2100
+enable_eepro
+enable_eepro100
+enable_eexpress
+enable_epic100
+enable_eth16i
+enable_ewrk3
+enable_fmv18x
+enable_hamachi
+enable_hp_plus
+enable_hp
+enable_hp100
+enable_intel_gige
+enable_lance
+enable_myson803
+enable_natsemi
+enable_ne
+enable_ne2k_pci
+enable_ni52
+enable_ni65
+enable_ns820
+enable_pcnet32
+enable_rtl8139
+enable_seeq8005
+enable_sis900
+enable_sk_g16
+enable_smc_ultra
+enable_smc_ultra32
+enable_starfire
+enable_sundance
+enable_tlan
+enable_tulip
+enable_via_rhine
+enable_wavelan
+enable_wd
+enable_winbond_840
+enable_yellowfin
+enable_znet
+enable_pcmcia_group
+enable_i82365
+enable_pcmcia_isa
+enable_3c574_cs
+enable_3c589_cs
+enable_axnet_cs
+enable_fmvj18x_cs
+enable_nmclan_cs
+enable_pcnet_cs
+enable_smc91c92_cs
+enable_xirc2ps_cs
+enable_wireless_group
+enable_orinoco_cs
+'
+ ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CCAS
+CCASFLAGS
+CPP'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+ac_unrecognized_opts=
+ac_unrecognized_sep=
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval $ac_prev=\$ac_option
+ ac_prev=
+ continue
+ fi
+
+ case $ac_option in
+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+ *=) ac_optarg= ;;
+ *) ac_optarg=yes ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case $ac_dashdash$ac_option in
+ --)
+ ac_dashdash=yes ;;
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir=$ac_optarg ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build_alias ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build_alias=$ac_optarg ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
+
+ -datadir | --datadir | --datadi | --datad)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=*)
+ datadir=$ac_optarg ;;
+
+ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+ | --dataroo | --dataro | --datar)
+ ac_prev=datarootdir ;;
+ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+ datarootdir=$ac_optarg ;;
+
+ -disable-* | --disable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *)
ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=no ;;
+
+ -docdir | --docdir | --docdi | --doc | --do)
+ ac_prev=docdir ;;
+ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+ docdir=$ac_optarg ;;
+
+ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+ ac_prev=dvidir ;;
+ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+ dvidir=$ac_optarg ;;
+
+ -enable-* | --enable-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid feature name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"enable_$ac_useropt"
+"*) ;;
+ *)
ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval enable_$ac_useropt=\$ac_optarg ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix=$ac_optarg ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host_alias ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host_alias=$ac_optarg ;;
+
+ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+ ac_prev=htmldir ;;
+ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+ | --ht=*)
+ htmldir=$ac_optarg ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir=$ac_optarg ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir=$ac_optarg ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir=$ac_optarg ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir=$ac_optarg ;;
+
+ -localedir | --localedir | --localedi | --localed | --locale)
+ ac_prev=localedir ;;
+ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+ localedir=$ac_optarg ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst | --locals)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+ localstatedir=$ac_optarg ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir=$ac_optarg ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c | -n)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir=$ac_optarg ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix=$ac_optarg ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix=$ac_optarg ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix=$ac_optarg ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name=$ac_optarg ;;
+
+ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+ ac_prev=pdfdir ;;
+ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+ pdfdir=$ac_optarg ;;
+
+ -psdir | --psdir | --psdi | --psd | --ps)
+ ac_prev=psdir ;;
+ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+ psdir=$ac_optarg ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir=$ac_optarg ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir=$ac_optarg ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site=$ac_optarg ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir=$ac_optarg ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir=$ac_optarg ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target_alias ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target_alias=$ac_optarg ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
+
+ -with-* | --with-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *)
ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=\$ac_optarg ;;
+
+ -without-* | --without-*)
+ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
+ as_fn_error $? "invalid package name: $ac_useropt"
+ ac_useropt_orig=$ac_useropt
+ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+ case $ac_user_opts in
+ *"
+"with_$ac_useropt"
+"*) ;;
+ *)
ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
+ ac_unrecognized_sep=', ';;
+ esac
+ eval with_$ac_useropt=no ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes=$ac_optarg ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries=$ac_optarg ;;
+
+ -*) as_fn_error $? "unrecognized option: \`$ac_option'
+Try \`$0 --help' for more information"
+ ;;
+
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ case $ac_envvar in #(
+ '' | [0-9]* | *[!_$as_cr_alnum]* )
+ as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
+ esac
+ eval $ac_envvar=\$ac_optarg
+ export $ac_envvar ;;
+
+ *)
+ # FIXME: should be removed in autoconf 3.0.
+ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : "${build_alias=$ac_option} ${host_alias=$ac_option}
${target_alias=$ac_option}"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ as_fn_error $? "missing argument to $ac_option"
+fi
+
+if test -n "$ac_unrecognized_opts"; then
+ case $enable_option_checking in
+ no) ;;
+ fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
+ *) $as_echo "$as_me: WARNING: unrecognized options:
$ac_unrecognized_opts" >&2 ;;
+ esac
+fi
+
+# Check all directory arguments for consistency.
+for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
+ datadir sysconfdir sharedstatedir localstatedir includedir \
+ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+ libdir localedir mandir
+do
+ eval ac_val=\$$ac_var
+ # Remove trailing slashes.
+ case $ac_val in
+ */ )
+ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
+ eval $ac_var=\$ac_val;;
+ esac
+ # Be sure to have absolute directory names.
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) continue;;
+ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+ esac
+ as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+ as_fn_error $? "working directory cannot be determined"
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+ as_fn_error $? "pwd does not report name of working directory"
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then the parent directory.
+ ac_confdir=`$as_dirname -- "$as_myself" ||
+$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_myself" : 'X\(//\)[^/]' \| \
+ X"$as_myself" : 'X\(//\)$' \| \
+ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_myself" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ srcdir=$ac_confdir
+ if test ! -r "$srcdir/$ac_unique_file"; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+ as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
+ pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+ srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+ eval ac_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_env_${ac_var}_value=\$${ac_var}
+ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+ eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat <<_ACEOF
+\`configure' configures GNU Mach 1.4 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking ...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
+ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
+ --infodir=DIR info documentation [DATAROOTDIR/info]
+ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
+ --mandir=DIR man documentation [DATAROOTDIR/man]
+ --docdir=DIR documentation root [DATAROOTDIR/doc/gnumach]
+ --htmldir=DIR html documentation [DOCDIR]
+ --dvidir=DIR dvi documentation [DOCDIR]
+ --pdfdir=DIR pdf documentation [DOCDIR]
+ --psdir=DIR ps documentation [DOCDIR]
+_ACEOF
+
+ cat <<\_ACEOF
+
+Program names:
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of GNU Mach 1.4:";;
+ esac
+ cat <<\_ACEOF
+
+Optional Features:
+ --disable-option-checking ignore unrecognized --enable/--with options
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --enable-silent-rules less verbose build output (undo: "make V=1")
+ --disable-silent-rules verbose build output (undo: "make V=0")
+ --enable-platform=PLATFORM
+ specify the platform to build a kernel for. Defaults
+ to `at' for `i?86'. The other possibility is `xen'.
+ --enable-dependency-tracking
+ do not reject slow dependency extractors
+ --disable-dependency-tracking
+ speeds up one-time build
+ --enable-device-drivers=WHICH
+ specify WHICH (on `ix86-at' one of `default',
+ `qemu', `none') to preset a certain subset of all
+ available device drivers, as indicated by the
+ below-metioned ``enabled ...'' comments; you can
+ then still use further `--enable-*' or `--disable-*'
+ options to refine the selection of drivers to
+ include in order to choose only those you actually
+ want to have enabled
+ --disable-pseudo-phys Pseudo physical pages support
+ --disable-pv-pagetables Paravirtualized page tables support
+ --disable-pv-descriptors
+ Paravirtualized segment descriptors support
+ --disable-ring1 ring1 kernel support
+ --enable-lpr lpr device; on ix86-at enabled by default
+ --enable-pae PAE support (ix86-only); on ix86-at disabled by
+ default, on ix86-xen enabled by default
+ --enable-kdb enable use of in-kernel debugger
+ --disable-kmsg disable use of kmsg device
+ --enable-floppy Linux device driver for PC floppy; on ix86-at
+ enabled by default and for qemu
+ --enable-ide Linux device driver for IDE disk controllers; on
+ ix86-at enabled by default and for qemu
+ --enable-ide-forcedma enable forced use of DMA on IDE
+ --enable-scsi-group SCSI drivers
+ --enable-53c78xx Linux device driver for SCSI controller NCR 53C7,8xx
+ --enable-AM53C974 Linux device driver for SCSI controller AM53/79C974
+ (am53c974, am79c974); on ix86-at enabled by default
+ --enable-BusLogic Linux device driver for SCSI controller BusLogic; on
+ ix86-at enabled by default
+ --enable-flashpoint SCSI flashpoint
+ --enable-NCR53c406a Linux device driver for SCSI controller NCR53c406a
+ chip
+ --enable-advansys Linux device driver for SCSI controller AdvanSys; on
+ ix86-at enabled by default
+ --enable-aha152x Linux device driver for SCSI controller Adaptec
+ AHA-152x/2825 (aha152x, aha2825); on ix86-at enabled
+ by default
+ --enable-aha1542 Linux device driver for SCSI controller Adaptec
+ AHA-1542; on ix86-at enabled by default
+ --enable-aha1740 Linux device driver for SCSI controller Adaptec
+ AHA-1740; on ix86-at enabled by default
+ --enable-aic7xxx Linux device driver for SCSI controller Adaptec
+ AIC7xxx
+ --enable-dtc Linux device driver for SCSI controller DTC3180/3280
+ (dtc3180, dtc3280); on ix86-at enabled by default
+ --enable-eata Linux device driver for SCSI controller EATA
+ ISA/EISA/PCI (DPT and generic EATA/DMA-compliant
+ boards); on ix86-at enabled by default
+ --enable-eata_dma Linux device driver for SCSI controller EATA-DMA
+ (DPT, NEC, AT&T, SNI, AST, Olivetti, Alphatronix)
+ --enable-eata_pio Linux device driver for SCSI controller EATA-PIO
+ (old DPT PM2001, PM2012A); on ix86-at enabled by
+ default
+ --enable-fdomain Linux device driver for SCSI controller Future
+ Domain 16xx; on ix86-at enabled by default
+ --enable-g_NCR5380 Linux device driver for SCSI controller Generic
+ NCR5380/53c400 (ncr5380, ncr53c400)
+ --enable-gdth Linux device driver for GDT SCSI Disk Array
+ Controller
+ --enable-in2000 Linux device driver for SCSI controller Always IN
+ 2000; on ix86-at enabled by default
+ --enable-ncr53c8xx Linux device driver for SCSI controller NCR53C8XX
+ (ncr53c8xx, dc390f, dc390u, dc390w); on ix86-at
+ enabled by default
+ --enable-pas16 Linux device driver for SCSI controller PAS16; on
+ ix86-at enabled by default
+ --enable-ppa Linux device driver for IOMEGA Parallel Port ZIP
+ drive; on ix86-at enabled by default
+ --enable-qlogicfas Linux device driver for SCSI controller Qlogic FAS;
+ on ix86-at enabled by default
+ --enable-qlogicisp Linux device driver for SCSI controller Qlogic ISP;
+ on ix86-at enabled by default
+ --enable-seagate Linux device driver for SCSI controller Seagate
+ ST02, Future Domain TMC-8xx; on ix86-at enabled by
+ default
+ --enable-sym53c8xx Linux device driver for SCSI controller Symbios
+ 53C8XX; on ix86-at enabled by default
+ --enable-t128 Linux device driver for SCSI controller Trantor
+ T128/T128F/T228 (t128, t128f, t228); on ix86-at
+ enabled by default
+ --enable-tmscsim Linux device driver for SCSI controller Tekram
+ DC-390(T) (dc390, dc390t); on ix86-at enabled by
+ default
+ --enable-u14-34f Linux device driver for SCSI controller UltraStor
+ 14F/34F; on ix86-at enabled by default
+ --enable-ultrastor Linux device driver for SCSI controller UltraStor;
+ on ix86-at enabled by default
+ --enable-wd7000 Linux device driver for SCSI controller WD 7000; on
+ ix86-at enabled by default
+ --enable-net-group Network drivers
+ --enable-3c501 Linux device driver for Ethernet controller 3COM 501
+ (3c501) / Etherlink I; on ix86-at enabled by default
+ --enable-3c503 Linux device driver for Ethernet controller 3Com 503
+ (3c503) / Etherlink II; on ix86-at enabled by
+ default
+ --enable-3c505 Linux device driver for Ethernet controller 3Com 505
+ (3c505, elplus); on ix86-at enabled by default
+ --enable-3c507 Linux device driver for Ethernet controller 3Com 507
+ (3c507, el16); on ix86-at enabled by default
+ --enable-3c509 Linux device driver for Ethernet controller 3Com
+ 509/579 (3c509, 3c579) / Etherlink III; on ix86-at
+ enabled by default
+ --enable-3c59x Linux device driver for Ethernet controller 3Com
+ 59x/90x (3c59x, 3c590, 3c592, 3c595, 3c597, 3c90x,
+ 3c900, 3c905) "Vortex/Boomerang"; on ix86-at enabled
+ by default
+ --enable-3c515 Linux device driver for Ethernet controller 3Com 515
+ ISA Fast EtherLink; on ix86-at enabled by default
+ --enable-ac3200 Linux device driver for Ethernet controller Ansel
+ Communications EISA 3200; on ix86-at enabled by
+ default
+ --enable-apricot Linux device driver for Ethernet controller Apricot
+ XEN-II on board ethernet; on ix86-at enabled by
+ default
+ --enable-at1700 Linux device driver for Ethernet controller AT1700
+ (Fujitsu 86965); on ix86-at enabled by default
+ --enable-atp Linux device driver for Ethernet controller
+ AT-LAN-TEC/RealTek pocket adaptor
+ --enable-de4x5 Linux device driver for Ethernet controller DE4x5
+ (de4x5, de425, de434, de435, de450, de500); on
+ ix86-at enabled by default
+ --enable-de600 Linux device driver for Ethernet controller D-Link
+ DE-600; on ix86-at enabled by default
+ --enable-de620 Linux device driver for Ethernet controller D-Link
+ DE-620; on ix86-at enabled by default
+ --enable-depca Linux device driver for Ethernet controller DEPCA
+ (de100, de101, de200, de201, de202, de210, de422);
+ on ix86-at enabled by default
+ --enable-e2100 Linux device driver for Ethernet controller
+ Cabletron E21xx; on ix86-at enabled by default
+ --enable-eepro Linux device driver for Ethernet controller
+ EtherExpressPro; on ix86-at enabled by default
+ --enable-eepro100 Linux device driver for Ethernet controller Intel
+ EtherExpressPro PCI 10+/100B/100+; on ix86-at
+ enabled by default
+ --enable-eexpress Linux device driver for Ethernet controller
+ EtherExpress 16; on ix86-at enabled by default
+ --enable-epic100 Linux device driver for Ethernet controller SMC
+ 83c170/175 EPIC/100 (epic, epic100) / EtherPower II;
+ on ix86-at enabled by default
+ --enable-eth16i Linux device driver for Ethernet controller ICL
+ EtherTeam 16i/32 (eth16i, eth32); on ix86-at enabled
+ by default
+ --enable-ewrk3 Linux device driver for Ethernet controller
+ EtherWORKS 3 (ewrk3, de203, de204, de205); on
+ ix86-at enabled by default
+ --enable-fmv18x Linux device driver for Ethernet controller
+ FMV-181/182/183/184; on ix86-at enabled by default
+ --enable-hamachi Linux device driver for Ethernet controller Packet
+ Engines "Hamachi" GNIC-2 Gigabit Ethernet; on
+ ix86-at enabled by default
+ --enable-hp-plus Linux device driver for Ethernet controller HP
+ PCLAN+ (27247B and 27252A); on ix86-at enabled by
+ default
+ --enable-hp Linux device driver for Ethernet controller HP PCLAN
+ (27245 and other 27xxx series); on ix86-at enabled
+ by default
+ --enable-hp100 Linux device driver for Ethernet controller HP
+ 10/100VG PCLAN (ISA, EISA, PCI) (hp100, hpj2577,
+ hpj2573, hpj2585, hp27248b); on ix86-at enabled by
+ default
+ --enable-intel-gige Linux device driver for Ethernet controller Intel
+ PCI Gigabit Ethernet; on ix86-at enabled by default
+ --enable-lance Linux device driver for Ethernet controller AMD
+ LANCE and PCnet (at1500, ne2100); on ix86-at enabled
+ by default
+ --enable-myson803 Linux device driver for Ethernet controller Myson
+ MTD803 Ethernet adapter series; on ix86-at enabled
+ by default
+ --enable-natsemi Linux device driver for Ethernet controller National
+ Semiconductor DP8381x series PCI Ethernet; on
+ ix86-at enabled by default
+ --enable-ne Linux device driver for Ethernet controller
+ NE2000/NE1000 ISA (ne, ne1000, ne2000); on ix86-at
+ enabled by default and for qemu
+ --enable-ne2k-pci Linux device driver for Ethernet controller PCI
+ NE2000; on ix86-at enabled by default
+ --enable-ni52 Linux device driver for Ethernet controller NI5210;
+ on ix86-at enabled by default
+ --enable-ni65 Linux device driver for Ethernet controller NI6510;
+ on ix86-at enabled by default
+ --enable-ns820 Linux device driver for Ethernet controller National
+ Semiconductor DP8382x series PCI Ethernet; on
+ ix86-at enabled by default
+ --enable-pcnet32 Linux device driver for Ethernet controller AMD PCI
+ PCnet32 (PCI bus NE2100 cards); on ix86-at enabled
+ by default
+ --enable-rtl8139 Linux device driver for Ethernet controller RealTek
+ 8129/8139 (rtl8129, rtl8139) (not 8019/8029!); on
+ ix86-at enabled by default
+ --enable-seeq8005 Linux device driver for Ethernet controller
+ Seeq8005; on ix86-at enabled by default
+ --enable-sis900 Linux device driver for Ethernet controller SiS 900;
+ on ix86-at enabled by default
+ --enable-sk_g16 Linux device driver for Ethernet controller
+ Schneider & Koch G16; on ix86-at enabled by default
+ --enable-smc-ultra Linux device driver for Ethernet controller SMC
+ Ultra; on ix86-at enabled by default
+ --enable-smc-ultra32 Linux device driver for Ethernet controller SMC
+ Ultra32; on ix86-at enabled by default
+ --enable-starfire Linux device driver for Ethernet controller Adaptec
+ Starfire network adapter; on ix86-at enabled by
+ default
+ --enable-sundance Linux device driver for Ethernet controller Sundance
+ ST201 "Alta" PCI Ethernet; on ix86-at enabled by
+ default
+ --enable-tlan Linux device driver for Ethernet controller TI
+ ThunderLAN; on ix86-at enabled by default
+ --enable-tulip Linux device driver for Ethernet controller DECchip
+ Tulip (dc21x4x) PCI (elcp, tulip); on ix86-at
+ enabled by default
+ --enable-via-rhine Linux device driver for Ethernet controller VIA
+ Rhine; on ix86-at enabled by default
+ --enable-wavelan Linux device driver for Ethernet controller AT&T
+ WaveLAN & DEC RoamAbout DS
+ --enable-wd Linux device driver for Ethernet controller WD80x3;
+ on ix86-at enabled by default
+ --enable-winbond-840 Linux device driver for Ethernet controller Winbond
+ W89c840 PCI Ethernet; on ix86-at enabled by default
+ --enable-yellowfin Linux device driver for Ethernet controller Packet
+ Engines Yellowfin Gigabit-NIC; on ix86-at enabled by
+ default
+ --enable-znet Linux device driver for Ethernet controller Zenith
+ Z-Note (znet, znote); on ix86-at enabled by default
+ --enable-pcmcia-group PCMCIA drivers
+ --enable-i82365 Linux device driver for Intel 82365 PC Card
+ controller; on ix86-at enabled by default
+ --enable-pcmcia-isa isa bus support in the pcmcia core; on ix86-at
+ enabled by default
+ --enable-3c574_cs Linux device driver for 3Com 3c574 ``RoadRunner''
+ PCMCIA Ethernet; on ix86-at enabled by default
+ --enable-3c589_cs Linux device driver for 3Com 3c589 PCMCIA Ethernet
+ card; on ix86-at enabled by default
+ --enable-axnet_cs Linux device driver for Asix AX88190-based PCMCIA
+ Ethernet adapters; on ix86-at enabled by default
+ --enable-fmvj18x_cs Linux device driver for fmvj18x chipset based PCMCIA
+ Ethernet cards; on ix86-at enabled by default
+ --enable-nmclan_cs Linux device driver for New Media Ethernet LAN
+ PCMCIA cards; on ix86-at enabled by default
+ --enable-pcnet_cs Linux device driver for NS8390-based PCMCIA cards;
+ on ix86-at enabled by default
+ --enable-smc91c92_cs Linux device driver for SMC91c92-based PCMCIA cards;
+ on ix86-at enabled by default
+ --enable-xirc2ps_cs Linux device driver for Xircom CreditCard and
+ Realport PCMCIA ethernet; on ix86-at enabled by
+ default
+ --enable-wireless-group Wireless drivers
+ --enable-orinoco_cs Linux device driver for Hermes or Prism 2 PCMCIA
+ Wireless adapters (Orinoco); on ix86-at enabled by
+ default
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ LIBS libraries to pass to the linker, e.g. -l<library>
+ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
+ you have headers in a nonstandard directory <include dir>
+ CCAS assembler compiler command (defaults to CC)
+ CCASFLAGS assembler compiler flags (defaults to CFLAGS)
+ CPP C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <address@hidden>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+ test -d "$ac_dir" ||
+ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
+ continue
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed
's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+ cd "$ac_dir" || { ac_status=$?; continue; }
+ # Check for guested configure.
+ if test -f "$ac_srcdir/configure.gnu"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+ elif test -f "$ac_srcdir/configure"; then
+ echo &&
+ $SHELL "$ac_srcdir/configure" --help=recursive
+ else
+ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir"
>&2
+ fi || ac_status=$?
+ cd "$ac_pwd" || { ac_status=$?; break; }
+ done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+ cat <<\_ACEOF
+GNU Mach configure 1.4
+generated by GNU Autoconf 2.69
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+ exit
+fi
+
+## ------------------------ ##
+## Autoconf initialization. ##
+## ------------------------ ##
+
+# ac_fn_c_try_compile LINENO
+# --------------------------
+# Try to compile conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_compile ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ rm -f conftest.$ac_objext
+ if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_compile
+
+# ac_fn_c_try_cpp LINENO
+# ----------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_cpp ()
+{
+ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ grep -v '^ *+' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ mv -f conftest.er1 conftest.err
+ fi
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } > conftest.i && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then :
+ ac_retval=0
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_retval=1
+fi
+ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+ as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_cpp
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by GNU Mach $as_me 1.4, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ $as_echo "PATH: $as_dir"
+ done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+ for ac_arg
+ do
+ case $ac_arg in
+ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ continue ;;
+ *\'*)
+ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ case $ac_pass in
+ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
+ 2)
+ as_fn_append ac_configure_args1 " '$ac_arg'"
+ if test $ac_must_keep_next = true; then
+ ac_must_keep_next=false # Got value, back to normal.
+ else
+ case $ac_arg in
+ *=* | --config-cache | -C | -disable-* | --disable-* \
+ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+ | -with-* | --with-* | -without-* | --without-* | --x)
+ case "$ac_configure_args0 " in
+ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+ esac
+ ;;
+ -* ) ac_must_keep_next=true ;;
+ esac
+ fi
+ as_fn_append ac_configure_args " '$ac_arg'"
+ ;;
+ esac
+ done
+done
+{ ac_configure_args0=; unset ac_configure_args0;}
+{ ac_configure_args1=; unset ac_configure_args1;}
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ {
+ echo
+
+ $as_echo "## ---------------- ##
+## Cache variables. ##
+## ---------------- ##"
+ echo
+ # The following way of writing the cache mishandles newlines in values,
+(
+ for ac_var in `(set) 2>&1 | sed -n
'\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable
$ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+ (set) 2>&1 |
+ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ sed -n \
+ "s/'\''/'\''\\\\'\'''\''/g;
+
s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+ ;; #(
+ *)
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+)
+ echo
+
+ $as_echo "## ----------------- ##
+## Output variables. ##
+## ----------------- ##"
+ echo
+ for ac_var in $ac_subst_vars
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed
"s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+
+ if test -n "$ac_subst_files"; then
+ $as_echo "## ------------------- ##
+## File substitutions. ##
+## ------------------- ##"
+ echo
+ for ac_var in $ac_subst_files
+ do
+ eval ac_val=\$$ac_var
+ case $ac_val in
+ *\'\''*) ac_val=`$as_echo "$ac_val" | sed
"s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+ esac
+ $as_echo "$ac_var='\''$ac_val'\''"
+ done | sort
+ echo
+ fi
+
+ if test -s confdefs.h; then
+ $as_echo "## ----------- ##
+## confdefs.h. ##
+## ----------- ##"
+ echo
+ cat confdefs.h
+ echo
+ fi
+ test "$ac_signal" != 0 &&
+ $as_echo "$as_me: caught signal $ac_signal"
+ $as_echo "$as_me: exit $exit_status"
+ } >&5
+ rm -f core *.core core.conftest.* &&
+ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+ exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+$as_echo "/* confdefs.h */" > confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_URL "$PACKAGE_URL"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer an explicitly selected file to automatically selected ones.
+ac_site_file1=NONE
+ac_site_file2=NONE
+if test -n "$CONFIG_SITE"; then
+ # We do not want a PATH search for config.site.
+ case $CONFIG_SITE in #((
+ -*) ac_site_file1=./$CONFIG_SITE;;
+ */*) ac_site_file1=$CONFIG_SITE;;
+ *) ac_site_file1=./$CONFIG_SITE;;
+ esac
+elif test "x$prefix" != xNONE; then
+ ac_site_file1=$prefix/share/config.site
+ ac_site_file2=$prefix/etc/config.site
+else
+ ac_site_file1=$ac_default_prefix/share/config.site
+ ac_site_file2=$ac_default_prefix/etc/config.site
+fi
+for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+do
+ test "x$ac_site_file" = xNONE && continue
+ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script
$ac_site_file" >&5
+$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+ sed 's/^/| /' "$ac_site_file" >&5
+ . "$ac_site_file" \
+ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "failed to load site script $ac_site_file
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+done
+
+if test -r "$cache_file"; then
+ # Some versions of bash will fail to source /dev/null (special files
+ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
+ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+$as_echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . "$cache_file";;
+ *) . "./$cache_file";;
+ esac
+ fi
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+$as_echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val=\$ac_cv_env_${ac_var}_value
+ eval ac_new_val=\$ac_env_${ac_var}_value
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to
\`$ac_old_val' in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous
run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set
in the previous run" >&5
+$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ # differences in whitespace do not lead to failure.
+ ac_old_val_w=`echo x $ac_old_val`
+ ac_new_val_w=`echo x $ac_new_val`
+ if test "$ac_old_val_w" != "$ac_new_val_w"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has
changed since the previous run:" >&5
+$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ ac_cache_corrupted=:
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace
changes in \`$ac_var' since the previous run:" >&5
+$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the
previous run:" >&2;}
+ eval $ac_var=\$ac_old_val
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: former value:
\`$ac_old_val'" >&5
+$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: current value:
\`$ac_new_val'" >&5
+$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
+ fi;;
+ esac
+ # Pass precious variables to config.status.
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+ *) ac_arg=$ac_var=$ac_new_val ;;
+ esac
+ case " $ac_configure_args " in
+ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
+ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment
can compromise the build" >&5
+$as_echo "$as_me: error: changes in the environment can compromise the build"
>&2;}
+ as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start
over" "$LINENO" 5
+fi
+## -------------------- ##
+## Main body of script. ##
+## -------------------- ##
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext
$LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+ac_aux_dir=
+for ac_dir in build-aux "$srcdir"/build-aux; do
+ if test -f "$ac_dir/install-sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f "$ac_dir/install.sh"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ elif test -f "$ac_dir/shtool"; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux
\"$srcdir\"/build-aux" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+
+
+
+am__api_version='1.13'
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible
install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+ ./ | .// | /[cC]/* | \
+ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+ /usr/ucb/* ) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+ if test $ac_prog = install &&
+ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ elif test $ac_prog = install &&
+ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
+ else
+ rm -rf conftest.one conftest.two conftest.dir
+ echo one > conftest.one
+ echo two > conftest.two
+ mkdir conftest.dir
+ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two
"`pwd`/conftest.dir" &&
+ test -s conftest.one && test -s conftest.two &&
+ test -s conftest.dir/conftest.one &&
+ test -s conftest.dir/conftest.two
+ then
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+ break 3
+ fi
+ fi
+ fi
+ done
+ done
+ ;;
+esac
+
+ done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL=$ac_cv_path_install
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ INSTALL=$ac_install_sh
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is
sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name. Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+ *[\\\"\#\$\&\'\`$am_lf]*)
+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
+ as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ am_has_slept=no
+ for am_try in 1 2; do
+ echo "timestamp, slept: $am_has_slept" > conftest.file
+ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t "$srcdir/configure" conftest.file`
+ fi
+ if test "$*" != "X $srcdir/configure conftest.file" \
+ && test "$*" != "X conftest.file $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ as_fn_error $? "ls -t appears to fail. Make sure there is not a broken
+ alias in your environment" "$LINENO" 5
+ fi
+ if test "$2" = conftest.file || test $am_try -eq 2; then
+ break
+ fi
+ # Just in case.
+ sleep 1
+ am_has_slept=yes
+ done
+ test "$2" = conftest.file
+ )
+then
+ # Ok.
+ :
+else
+ as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+ ( sleep 1 ) &
+ am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+ program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+if test x"${MISSING+set}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+ *)
+ MISSING="\${SHELL} $am_aux_dir/missing" ;;
+ esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+ am_missing_run="$MISSING "
+else
+ am_missing_run=
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too
old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh}" != xset; then
+ case $am_aux_dir in
+ *\ * | *\ *)
+ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+ *)
+ install_sh="\${SHELL} $am_aux_dir/install-sh"
+ esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip". However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program
name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not
prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet"
>&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p"
>&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+ if ${ac_cv_path_mkdir+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_prog in mkdir gmkdir; do
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+ 'mkdir (GNU coreutils) '* | \
+ 'mkdir (coreutils) '* | \
+ 'mkdir (fileutils) '4.1*)
+ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+ break 3;;
+ esac
+ done
+ done
+ done
+IFS=$as_save_IFS
+
+fi
+
+ test -d ./--version && rmdir ./--version
+ if test "${ac_cv_path_mkdir+set}" = set; then
+ MKDIR_P="$ac_cv_path_mkdir -p"
+ else
+ # As a last resort, use the slow shell script. Don't cache a
+ # value for MKDIR_P within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the value is a relative name.
+ MKDIR_P="$ac_install_sh -d"
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with
args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets
\$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+ @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+ *@@@%%%=?*=@@@%%%*)
+ eval ac_cv_prog_make_${ac_make}_set=yes;;
+ *)
+ eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ SET_MAKE=
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+ am__leading_dot=.
+else
+ am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+ enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports
nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result:
$am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+ # is not polluted with repeated "-I."
+ am__isrc=' -I$(srcdir)'
+ # test to see if srcdir already configured
+ if test -f $srcdir/config.status; then
+ as_fn_error $? "source directory already configured; run \"make
distclean\" there first" "$LINENO" 5
+ fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+ if (cygpath --version) >/dev/null 2>/dev/null; then
+ CYGPATH_W='cygpath -w'
+ else
+ CYGPATH_W=echo
+ fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='gnumach'
+ VERSION='1.4'
+
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# For better backward compatibility. To be removed once Automake 1.9.x
+# dies out for good. For more background, see:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target. The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+ enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+ yes) AM_DEFAULT_VERBOSITY=0;;
+ no) AM_DEFAULT_VERBOSITY=1;;
+ *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports
nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+ @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+ am_cv_make_support_nested_variables=yes
+else
+ am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result:
$am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+ AM_V='$(V)'
+ AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+ AM_V=$AM_DEFAULT_VERBOSITY
+ AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+
+#
+# Deduce the architecture we're building for.
+#
+# TODO: Should we also support constructs like `i686_xen-pc-gnu' or
+# `i686-pc_xen-gnu'?
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+ as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+ as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed"
"$LINENO" 5
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test "x$host_alias" = x; then
+ ac_cv_host=$ac_cv_build
+else
+ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+ as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed"
"$LINENO" 5
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+
+# Check whether --enable-platform was given.
+if test "${enable_platform+set}" = set; then :
+ enableval=$enable_platform; host_platform=$enable_platform
+else
+ host_platform=default
+fi
+
+# Supported configurations.
+case $host_platform:$host_cpu in
+ default:i?86)
+ host_platform=at;;
+ at:i?86 | xen:i?86)
+ :;;
+ *)
+ as_fn_error $? "unsupported combination of cpu type \`$host_cpu' and
platform
+ \`$host_platform'." "$LINENO" 5;;
+esac
+
+
+# This is used in a few places.
+case $host_cpu in
+ i?86)
+ systype=i386;;
+ *)
+ systype=$host_cpu;;
+esac
+
+
+#
+# Programs.
+#
+
+for ac_prog in gawk mawk nawk awk
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with
args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AWK+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AWK="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$AWK" && break
+done
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+ @echo this is the am__doit target
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by
$am_make" >&5
+$as_echo_n "checking for style of include used by $am_make... " >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# Ignore all kinds of additional output from 'make'.
+case `$am_make -s -f confmf 2> /dev/null` in #(
+*the\ am__doit\ target*)
+ am__include=include
+ am__quote=
+ _am_result=GNU
+ ;;
+esac
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+ echo '.include "confinc"' > confmf
+ case `$am_make -s -f confmf 2> /dev/null` in #(
+ *the\ am__doit\ target*)
+ am__include=.include
+ am__quote="\""
+ _am_result=BSD
+ ;;
+ esac
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
+$as_echo "$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+ enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+ am_depcomp="$ac_aux_dir/depcomp"
+ AMDEPBACKSLASH='\'
+ am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+ AMDEP_TRUE=
+ AMDEP_FALSE='#'
+else
+ AMDEP_TRUE='#'
+ AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext
$LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program
name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not
prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet"
>&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program
name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a
program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with
args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not
prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet"
>&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in
\`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler
works" >&5
+$as_echo_n "checking whether the C compiler works... " >&6; }
+ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+
+# The possible output files:
+ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
+
+ac_rmfiles=
+for ac_file in $ac_files
+do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map
| *.inf | *.dSYM | *.o | *.obj ) ;;
+ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+ esac
+done
+rm -f $ac_rmfiles
+
+if { { ac_try="$ac_link_default"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link_default") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile. We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map
| *.inf | *.dSYM | *.o | *.obj )
+ ;;
+ [ab].out )
+ # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* )
+ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+ then :; else
+ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ fi
+ # We set ac_cv_exeext here because the later test for it is not
+ # safe: cross compilers may not add the suffix if given an `-o'
+ # argument, so we may need to know it at that point already.
+ # Even if this section looks crufty: it has the advantage of
+ # actually working.
+ break;;
+ * )
+ break;;
+ esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+ ac_file=''
+fi
+if test -z "$ac_file"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+$as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "C compiler cannot create executables
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default
output file name" >&5
+$as_echo_n "checking for C compiler default output file name... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+$as_echo "$ac_file" >&6; }
+ac_exeext=$ac_cv_exeext
+
+rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables"
>&5
+$as_echo_n "checking for suffix of executables... " >&6; }
+if { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+ test -f "$ac_file" || continue
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map
| *.inf | *.dSYM | *.o | *.obj ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ break;;
+ * ) break;;
+ esac
+done
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest conftest$ac_cv_exeext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+$as_echo "$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdio.h>
+int
+main ()
+{
+FILE *f = fopen ("conftest.out", "w");
+ return ferror (f) || fclose (f) != 0;
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files="$ac_clean_files conftest.out"
+# Check that the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross
compiling" >&5
+$as_echo_n "checking whether we are cross compiling... " >&6; }
+if test "$cross_compiling" != yes; then
+ { { ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_link") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ if { ac_try='./conftest$ac_cv_exeext'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ cross_compiling=no
+ else
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details" "$LINENO" 5; }
+ fi
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+$as_echo "$cross_compiling" >&6; }
+
+rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+ac_clean_files=$ac_clean_files_save
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files"
>&5
+$as_echo_n "checking for suffix of object files... " >&6; }
+if ${ac_cv_objext+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { { ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compile") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then :
+ for ac_file in conftest.o conftest.obj conftest.*; do
+ test -f "$ac_file" || continue;
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map
| *.inf | *.dSYM ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot compute suffix of object files: cannot compile
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+$as_echo "$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU
C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO
C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int,
int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext
$LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc"
>&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result:
$am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+# By default we simply use the C compiler to build assembly code.
+
+test "${CCAS+set}" = set || CCAS=$CC
+test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS
+
+
+
+depcc="$CCAS" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc"
>&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CCAS_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CCAS_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CCAS_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CCAS_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result:
$am_cv_CCAS_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; }
+CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then
+ am__fastdepCCAS_TRUE=
+ am__fastdepCCAS_FALSE='#'
+else
+ am__fastdepCCAS_TRUE='#'
+ am__fastdepCCAS_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext
$LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program
name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="gcc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not
prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet"
>&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program
name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="${ac_tool_prefix}cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ fi
+fi
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# != 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+ fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl.exe
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a
program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl.exe
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with
args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_CC="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$ac_ct_CC" && break
+done
+
+ if test "x$ac_ct_CC" = x; then
+ CC=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not
prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet"
>&2;}
+ac_tool_warned=yes ;;
+esac
+ CC=$ac_ct_CC
+ fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in
\`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "no acceptable C compiler found in \$PATH
+See \`config.log' for more details" "$LINENO" 5; }
+
+# Provide some information about the compiler.
+$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+set X $ac_compile
+ac_compiler=$2
+for ac_option in --version -v -V -qversion; do
+ { { ac_try="$ac_compiler $ac_option >&5"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
+ ac_status=$?
+ if test -s conftest.err; then
+ sed '10a\
+... rest of stderr output deleted ...
+ 10q' conftest.err >conftest.er1
+ cat conftest.er1 >&5
+ fi
+ rm -f conftest.er1 conftest.err
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU
C compiler" >&5
+$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
+if ${ac_cv_c_compiler_gnu+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_compiler_gnu=yes
+else
+ ac_compiler_gnu=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+if test $ac_compiler_gnu = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+$as_echo_n "checking whether $CC accepts -g... " >&6; }
+if ${ac_cv_prog_cc_g+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ ac_c_werror_flag=yes
+ ac_cv_prog_cc_g=no
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+else
+ CFLAGS=""
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+ ac_c_werror_flag=$ac_save_c_werror_flag
+ CFLAGS="-g"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_g=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+$as_echo "$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO
C89" >&5
+$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
+if ${ac_cv_prog_cc_c89+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <stdarg.h>
+#include <stdio.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
+ function prototypes and stuff, but not '\xHH' hex character constants.
+ These don't provoke an error unfortunately, instead are silently treated
+ as 'x'. The following induces an error, until -std is added to get
+ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
+ array size at least. It's necessary to write '\x00'==0 to get something
+ that's true only with -std. */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+ inside strings and character constants. */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int,
int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ if ac_fn_c_try_compile "$LINENO"; then :
+ ac_cv_prog_cc_c89=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext
+ test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+ x)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+$as_echo "none needed" >&6; } ;;
+ xno)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+$as_echo "unsupported" >&6; } ;;
+ *)
+ CC="$CC $ac_cv_prog_cc_c89"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+if test "x$ac_cv_prog_cc_c89" != xno; then :
+
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext
$LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC" am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc"
>&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+ # We make a subdir and do the tests there. Otherwise we can end up
+ # making bogus files that we don't know about and never remove. For
+ # instance it was reported that on HP-UX the gcc test will end up
+ # making a dummy file named 'D' -- because '-MD' means "put the output
+ # in D".
+ rm -rf conftest.dir
+ mkdir conftest.dir
+ # Copy depcomp to subdir because otherwise we won't find it if we're
+ # using a relative directory.
+ cp "$am_depcomp" conftest.dir
+ cd conftest.dir
+ # We will build objects and dependencies in a subdirectory because
+ # it helps to detect inapplicable dependency modes. For instance
+ # both Tru64's cc and ICC support -MD to output dependencies as a
+ # side effect of compilation, but ICC will put the dependencies in
+ # the current directory while Tru64 will put them in the object
+ # directory.
+ mkdir sub
+
+ am_cv_CC_dependencies_compiler_type=none
+ if test "$am_compiler_list" = ""; then
+ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+ fi
+ am__universal=false
+ case " $depcc " in #(
+ *\ -arch\ *\ -arch\ *) am__universal=true ;;
+ esac
+
+ for depmode in $am_compiler_list; do
+ # Setup a source with many dependencies, because some compilers
+ # like to wrap large dependency lists on column 80 (with \), and
+ # we should not choose a depcomp mode which is confused by this.
+ #
+ # We need to recreate these files for each test, as the compiler may
+ # overwrite some of them when testing with obscure command lines.
+ # This happens at least with the AIX C compiler.
+ : > sub/conftest.c
+ for i in 1 2 3 4 5 6; do
+ echo '#include "conftst'$i'.h"' >> sub/conftest.c
+ # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+ # Solaris 10 /bin/sh.
+ echo '/* dummy */' > sub/conftst$i.h
+ done
+ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+ # We check with '-c' and '-o' for the sake of the "dashmstdout"
+ # mode. It turns out that the SunPro C++ compiler does not properly
+ # handle '-M -o', and we need to detect this. Also, some Intel
+ # versions had trouble with output in subdirs.
+ am__obj=sub/conftest.${OBJEXT-o}
+ am__minus_obj="-o $am__obj"
+ case $depmode in
+ gcc)
+ # This depmode causes a compiler race in universal mode.
+ test "$am__universal" = false || continue
+ ;;
+ nosideeffect)
+ # After this tag, mechanisms are not by side-effect, so they'll
+ # only be used when explicitly requested.
+ if test "x$enable_dependency_tracking" = xyes; then
+ continue
+ else
+ break
+ fi
+ ;;
+ msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+ # This compiler won't grok '-c -o', but also, the minuso test has
+ # not run yet. These depmodes are late enough in the game, and
+ # so weak that their functioning should not be impacted.
+ am__obj=conftest.${OBJEXT-o}
+ am__minus_obj=
+ ;;
+ none) break ;;
+ esac
+ if depmode=$depmode \
+ source=sub/conftest.c object=$am__obj \
+ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+ >/dev/null 2>conftest.err &&
+ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+ # icc doesn't choke on unknown options, it will just issue warnings
+ # or remarks (even with -Werror). So we grep stderr for any message
+ # that says an option was ignored or not supported.
+ # When given -MP, icc 7.0 and 7.1 complain thusly:
+ # icc: Command line warning: ignoring option '-M'; no argument required
+ # The diagnosis changed in icc 8.0:
+ # icc: Command line remark: option '-MP' not supported
+ if (grep 'ignoring option' conftest.err ||
+ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+ am_cv_CC_dependencies_compiler_type=$depmode
+ break
+ fi
+ fi
+ done
+
+ cd ..
+ rm -rf conftest.dir
+else
+ am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result:
$am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+ test "x$enable_dependency_tracking" != xno \
+ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+ am__fastdepCC_TRUE=
+ am__fastdepCC_FALSE='#'
+else
+ am__fastdepCC_TRUE='#'
+ am__fastdepCC_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext
$LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C
preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+ if ${ac_cv_prog_CPP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+$as_echo "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ # <limits.h> exists even on freestanding compilers.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+ Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+
+else
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether nonexistent headers
+ # can be detected and how.
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+ # Broken: success on invalid input.
+continue
+else
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then :
+
+else
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext
$LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a
program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$RANLIB"; then
+ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_RANLIB="ranlib"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_RANLIB" = x; then
+ RANLIB=":"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not
prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet"
>&2;}
+ac_tool_warned=yes ;;
+esac
+ RANLIB=$ac_ct_RANLIB
+ fi
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program
name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$AR"; then
+ ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_AR="${ac_tool_prefix}ar"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_AR"; then
+ ac_ct_AR=$AR
+ # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_AR"; then
+ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_AR="ar"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_AR" = x; then
+ AR=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not
prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet"
>&2;}
+ac_tool_warned=yes ;;
+esac
+ AR=$ac_ct_AR
+ fi
+else
+ AR="$ac_cv_prog_AR"
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ld", so it can be a program
name with args.
+set dummy ${ac_tool_prefix}ld; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$LD"; then
+ ac_cv_prog_LD="$LD" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_LD="${ac_tool_prefix}ld"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+LD=$ac_cv_prog_LD
+if test -n "$LD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+$as_echo "$LD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_LD"; then
+ ac_ct_LD=$LD
+ # Extract the first word of "ld", so it can be a program name with args.
+set dummy ld; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_LD+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_LD"; then
+ ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_LD="ld"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_LD=$ac_cv_prog_ac_ct_LD
+if test -n "$ac_ct_LD"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5
+$as_echo "$ac_ct_LD" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_LD" = x; then
+ LD=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not
prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet"
>&2;}
+ac_tool_warned=yes ;;
+esac
+ LD=$ac_ct_LD
+ fi
+else
+ LD="$ac_cv_prog_LD"
+fi
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}nm", so it can be a program
name with args.
+set dummy ${ac_tool_prefix}nm; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_NM+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$NM"; then
+ ac_cv_prog_NM="$NM" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_NM="${ac_tool_prefix}nm"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+NM=$ac_cv_prog_NM
+if test -n "$NM"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5
+$as_echo "$NM" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_NM"; then
+ ac_ct_NM=$NM
+ # Extract the first word of "nm", so it can be a program name with args.
+set dummy nm; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_NM+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_NM"; then
+ ac_cv_prog_ac_ct_NM="$ac_ct_NM" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_NM="nm"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_NM=$ac_cv_prog_ac_ct_NM
+if test -n "$ac_ct_NM"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NM" >&5
+$as_echo "$ac_ct_NM" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_NM" = x; then
+ NM=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not
prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet"
>&2;}
+ac_tool_warned=yes ;;
+esac
+ NM=$ac_ct_NM
+ fi
+else
+ NM="$ac_cv_prog_NM"
+fi
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}mig", so it can be a program
name with args.
+set dummy ${ac_tool_prefix}mig; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_MIG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$MIG"; then
+ ac_cv_prog_MIG="$MIG" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_MIG="${ac_tool_prefix}mig"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+MIG=$ac_cv_prog_MIG
+if test -n "$MIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MIG" >&5
+$as_echo "$MIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_MIG"; then
+ ac_ct_MIG=$MIG
+ # Extract the first word of "mig", so it can be a program name with args.
+set dummy mig; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_MIG+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_MIG"; then
+ ac_cv_prog_ac_ct_MIG="$ac_ct_MIG" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_MIG="mig"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_MIG=$ac_cv_prog_ac_ct_MIG
+if test -n "$ac_ct_MIG"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MIG" >&5
+$as_echo "$ac_ct_MIG" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_MIG" = x; then
+ MIG="mig"
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not
prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet"
>&2;}
+ac_tool_warned=yes ;;
+esac
+ MIG=$ac_ct_MIG
+ fi
+else
+ MIG="$ac_cv_prog_MIG"
+fi
+
+
+if test "x$CC" != xcc; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc
understand -c and -o together" >&5
+$as_echo_n "checking whether $CC and cc understand -c and -o together... "
>&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c
and -o together" >&5
+$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
+fi
+set dummy $CC; ac_cc=`$as_echo "$2" |
+ sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+# Make sure it works both with $CC and with simple cc.
+# We do the test twice because some compilers refuse to overwrite an
+# existing .o file with -o, though they will create one.
+ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+rm -f conftest2.*
+if { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } &&
+ test -f conftest2.$ac_objext && { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; };
+then
+ eval ac_cv_prog_cc_${ac_cc}_c_o=yes
+ if test "x$CC" != xcc; then
+ # Test first that cc exists at all.
+ if { ac_try='cc -c conftest.$ac_ext >&5'
+ { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; }; then
+ ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
+ rm -f conftest2.*
+ if { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; } &&
+ test -f conftest2.$ac_objext && { { case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+ (eval "$ac_try") 2>&5
+ ac_status=$?
+ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; };
+ then
+ # cc works too.
+ :
+ else
+ # cc exists but doesn't like -o.
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
+ fi
+ fi
+ fi
+else
+ eval ac_cv_prog_cc_${ac_cc}_c_o=no
+fi
+rm -f core conftest*
+
+fi
+if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
+
+fi
+
+# FIXME: we rely on the cache variable name because
+# there is no other way.
+set dummy $CC
+am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
+eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o
+if test "$am_t" != yes; then
+ # Losing compiler, so override with the script.
+ # FIXME: It is wrong to rewrite CC.
+ # But if we don't then we get into trouble of one sort or another.
+ # A longer-term fix would be to have automake use am__CC in this case,
+ # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+ CC="$am_aux_dir/compile $CC"
+fi
+
+
+
+# Extract the first word of "gzip", so it can be a program name with args.
+set dummy gzip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GZIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$GZIP"; then
+ ac_cv_prog_GZIP="$GZIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_GZIP="gzip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_prog_GZIP" && ac_cv_prog_GZIP="gzip-not-found"
+fi
+fi
+GZIP=$ac_cv_prog_GZIP
+if test -n "$GZIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GZIP" >&5
+$as_echo "$GZIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program
name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$STRIP"; then
+ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+ ac_ct_STRIP=$STRIP
+ # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$ac_ct_STRIP"; then
+ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_ac_ct_STRIP="strip"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+ if test "x$ac_ct_STRIP" = x; then
+ STRIP=""
+ else
+ case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not
prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet"
>&2;}
+ac_tool_warned=yes ;;
+esac
+ STRIP=$ac_ct_STRIP
+ fi
+else
+ STRIP="$ac_cv_prog_STRIP"
+fi
+
+
+# Extract the first word of "patch", so it can be a program name with args.
+set dummy patch; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_PATCH+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$PATCH"; then
+ ac_cv_prog_PATCH="$PATCH" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_PATCH="patch"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext"
>&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+ test -z "$ac_cv_prog_PATCH" && ac_cv_prog_PATCH="patch-not-found"
+fi
+fi
+PATCH=$ac_cv_prog_PATCH
+if test -n "$PATCH"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PATCH" >&5
+$as_echo "$PATCH" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+
+#
+# configure fragments.
+#
+
+# The test suite.
+
+
+
+#
+# Tests.
+#
+
+ac_config_files="$ac_config_files tests/test-mbchk"
+
+
+
+
+# Default set of device drivers.
+# Check whether --enable-device-drivers was given.
+if test "${enable_device_drivers+set}" = set; then :
+ enableval=$enable_device_drivers;
+fi
+
+case $enable_device_drivers in
+ '')
+ enable_device_drivers=default;;
+ no)
+ enable_device_drivers=none;;
+ default | none | qemu)
+ :;;
+ *)
+ as_fn_error $? "invalid choice of
+ \`--enable-device-drivers=$enable_device_drivers'." "$LINENO" 5
+ ;;
+esac
+
+# Platform-specific configuration.
+
+# PC AT.
+# TODO. Currently handled in `i386/configfrag.ac'.
+
+# Xen.
+
+
+
+#
+# Xen platform.
+#
+
+if [ "$host_platform" = xen ]; then
+
+$as_echo "#define MACH_XEN /**/" >>confdefs.h
+
+
+$as_echo "#define MACH_HYP /**/" >>confdefs.h
+
+ if true; then
+ PLATFORM_xen_TRUE=
+ PLATFORM_xen_FALSE='#'
+else
+ PLATFORM_xen_TRUE='#'
+ PLATFORM_xen_FALSE=
+fi
+
+
+
+ # Check whether --enable-pseudo-phys was given.
+if test "${enable_pseudo_phys+set}" = set; then :
+ enableval=$enable_pseudo_phys;
+fi
+
+ if [ x"$enable_pseudo_phys" = xno ]; then
+ if false; then
+ enable_pseudo_phys_TRUE=
+ enable_pseudo_phys_FALSE='#'
+else
+ enable_pseudo_phys_TRUE='#'
+ enable_pseudo_phys_FALSE=
+fi
+
+ else
+
+$as_echo "#define MACH_PSEUDO_PHYS /**/" >>confdefs.h
+
+ if true; then
+ enable_pseudo_phys_TRUE=
+ enable_pseudo_phys_FALSE='#'
+else
+ enable_pseudo_phys_TRUE='#'
+ enable_pseudo_phys_FALSE=
+fi
+
+ fi
+
+ # Check whether --enable-pv-pagetables was given.
+if test "${enable_pv_pagetables+set}" = set; then :
+ enableval=$enable_pv_pagetables;
+fi
+
+ if [ x"$enable_pv_pagetables" = xno ]; then
+ if false; then
+ enable_pv_pagetables_TRUE=
+ enable_pv_pagetables_FALSE='#'
+else
+ enable_pv_pagetables_TRUE='#'
+ enable_pv_pagetables_FALSE=
+fi
+
+ else
+
+$as_echo "#define MACH_PV_PAGETABLES /**/" >>confdefs.h
+
+ if true; then
+ enable_pv_pagetables_TRUE=
+ enable_pv_pagetables_FALSE='#'
+else
+ enable_pv_pagetables_TRUE='#'
+ enable_pv_pagetables_FALSE=
+fi
+
+ fi
+
+ # Check whether --enable-pv-descriptors was given.
+if test "${enable_pv_descriptors+set}" = set; then :
+ enableval=$enable_pv_descriptors;
+fi
+
+ if [ x"$enable_pv_descriptors" = xno ]; then
+ if false; then
+ enable_pv_descriptors_TRUE=
+ enable_pv_descriptors_FALSE='#'
+else
+ enable_pv_descriptors_TRUE='#'
+ enable_pv_descriptors_FALSE=
+fi
+
+ else
+
+$as_echo "#define MACH_PV_DESCRIPTORS /**/" >>confdefs.h
+
+ if true; then
+ enable_pv_descriptors_TRUE=
+ enable_pv_descriptors_FALSE='#'
+else
+ enable_pv_descriptors_TRUE='#'
+ enable_pv_descriptors_FALSE=
+fi
+
+ fi
+
+ # Check whether --enable-ring1 was given.
+if test "${enable_ring1+set}" = set; then :
+ enableval=$enable_ring1;
+fi
+
+ if [ x"$enable_ring1" = xno ]; then
+ if false; then
+ enable_ring1_TRUE=
+ enable_ring1_FALSE='#'
+else
+ enable_ring1_TRUE='#'
+ enable_ring1_FALSE=
+fi
+
+ else
+
+$as_echo "#define MACH_RING1 /**/" >>confdefs.h
+
+ if true; then
+ enable_ring1_TRUE=
+ enable_ring1_FALSE='#'
+else
+ enable_ring1_TRUE='#'
+ enable_ring1_FALSE=
+fi
+
+ fi
+
+else
+ if false; then
+ PLATFORM_xen_TRUE=
+ PLATFORM_xen_FALSE='#'
+else
+ PLATFORM_xen_TRUE='#'
+ PLATFORM_xen_FALSE=
+fi
+
+ if false; then
+ enable_pseudo_phys_TRUE=
+ enable_pseudo_phys_FALSE='#'
+else
+ enable_pseudo_phys_TRUE='#'
+ enable_pseudo_phys_FALSE=
+fi
+
+ if false; then
+ enable_pv_pagetables_TRUE=
+ enable_pv_pagetables_FALSE='#'
+else
+ enable_pv_pagetables_TRUE='#'
+ enable_pv_pagetables_FALSE=
+fi
+
+ if false; then
+ enable_pv_descriptors_TRUE=
+ enable_pv_descriptors_FALSE='#'
+else
+ enable_pv_descriptors_TRUE='#'
+ enable_pv_descriptors_FALSE=
+fi
+
+ if false; then
+ enable_ring1_TRUE=
+ enable_ring1_FALSE='#'
+else
+ enable_ring1_TRUE='#'
+ enable_ring1_FALSE=
+fi
+
+fi
+
+
+
+# Machine-specific configuration.
+
+# ix86.
+
+
+
+#
+# Definitions.
+#
+
+case $host_cpu in
+ i?86)
+ if true; then
+ HOST_ix86_TRUE=
+ HOST_ix86_FALSE='#'
+else
+ HOST_ix86_TRUE='#'
+ HOST_ix86_FALSE=
+fi
+
+
+ # Some of the i386-specific code checks for these.
+
+$as_echo "#define __ELF__ 1" >>confdefs.h
+
+
+ # Determines the size of the CPU cache line.
+
+$as_echo "#define CPU_L1_SHIFT 6" >>confdefs.h
+
+
+ # Does the architecture provide machine-specific interfaces?
+ mach_machine_routines=1;;
+ *)
+ if false; then
+ HOST_ix86_TRUE=
+ HOST_ix86_FALSE='#'
+else
+ HOST_ix86_TRUE='#'
+ HOST_ix86_FALSE=
+fi
+;;
+esac
+
+case $host_platform in
+ at)
+ if true; then
+ PLATFORM_at_TRUE=
+ PLATFORM_at_FALSE='#'
+else
+ PLATFORM_at_TRUE='#'
+ PLATFORM_at_FALSE=
+fi
+;;
+ *)
+ if false; then
+ PLATFORM_at_TRUE=
+ PLATFORM_at_FALSE='#'
+else
+ PLATFORM_at_TRUE='#'
+ PLATFORM_at_FALSE=
+fi
+;;
+esac
+
+#
+# Formerly in `i386/bogus/'.
+#
+
+ncom=0
+nlpr=0
+case $host_platform:$host_cpu in
+ at:i?86)
+ ncom=4
+ nlpr=1
+
+ # i386/bogus/platforms.h
+
+$as_echo "#define AT386 1" >>confdefs.h
+;;
+ xen:i?86)
+ # TODO. That should probably not be needed.
+ ncom=1
+ # TODO. That should probably not be needed.
+ # i386/bogus/platforms.h
+
+$as_echo "#define AT386 1" >>confdefs.h
+;;
+ *)
+ :;;
+esac
+
+# i386/bogus/com.h
+
+cat >>confdefs.h <<_ACEOF
+#define NCOM $ncom
+_ACEOF
+
+
+# i386/bogus/lpr.h
+
+cat >>confdefs.h <<_ACEOF
+#define NLPR $nlpr
+_ACEOF
+
+
+#
+# Options.
+#
+
+# Check whether --enable-lpr was given.
+if test "${enable_lpr+set}" = set; then :
+ enableval=$enable_lpr;
+fi
+
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers in
+ default)
+ enable_lpr=${enable_lpr-yes};;
+ *)
+ enable_lpr=${enable_lpr-no};;
+ esac;;
+ *)
+ if [ x"$enable_lpr" = xyes ]; then
+ as_fn_error $? "cannot enable \`lpr' in this configuration." "$LINENO" 5
+ fi;;
+esac
+if [ x"$enable_lpr" = xyes ]; then
+
+$as_echo "#define MACH_LPR /**/" >>confdefs.h
+
+ if true; then
+ enable_lpr_TRUE=
+ enable_lpr_FALSE='#'
+else
+ enable_lpr_TRUE='#'
+ enable_lpr_FALSE=
+fi
+
+else
+ if false; then
+ enable_lpr_TRUE=
+ enable_lpr_FALSE='#'
+else
+ enable_lpr_TRUE='#'
+ enable_lpr_FALSE=
+fi
+
+fi
+
+
+# Check whether --enable-pae was given.
+if test "${enable_pae+set}" = set; then :
+ enableval=$enable_pae;
+fi
+
+case $host_platform:$host_cpu in
+ xen:i?86)
+ enable_pae=${enable_pae-yes};;
+ *:i?86)
+ :;;
+ *)
+ if [ x"$enable_pae" = xyes ]; then
+ as_fn_error $? "can only enable the \`PAE' feature on ix86." "$LINENO" 5
+ fi;;
+esac
+if [ x"$enable_pae" = xyes ]; then
+
+$as_echo "#define PAE 1" >>confdefs.h
+
+ if true; then
+ enable_pae_TRUE=
+ enable_pae_FALSE='#'
+else
+ enable_pae_TRUE='#'
+ enable_pae_FALSE=
+fi
+
+else
+ if false; then
+ enable_pae_TRUE=
+ enable_pae_FALSE='#'
+else
+ enable_pae_TRUE='#'
+ enable_pae_FALSE=
+fi
+
+fi
+
+
+
+# General options.
+
+
+
+#
+# Definitions.
+#
+
+
+$as_echo "#define MACH 1" >>confdefs.h
+
+
+$as_echo "#define CMU 1" >>confdefs.h
+
+
+$as_echo "#define MACH_KERNEL 1" >>confdefs.h
+
+
+$as_echo "#define KERNEL 1" >>confdefs.h
+
+
+#
+# Formerly in `bogus/'.
+#
+
+# When set, the bootstrap task symbols are preserved by the kernel debugger.
+# Used in `kern/bootstrap.c'.
+
+$as_echo "#define BOOTSTRAP_SYMBOLS 0" >>confdefs.h
+
+
+# Multiprocessor support is still broken.
+
+mach_ncpus=1
+
+cat >>confdefs.h <<_ACEOF
+#define NCPUS $mach_ncpus
+_ACEOF
+
+if [ $mach_ncpus -gt 1 ]; then
+
+$as_echo "#define MULTIPROCESSOR 1" >>confdefs.h
+
+fi
+
+# Restartable Atomic Sequences to get a really fast test-n-set. Can't be
+# enabled, as the `void recover_ras()' function is missing.
+
+$as_echo "#define FAST_TAS 0" >>confdefs.h
+
+
+# Cache footprint support.
+
+$as_echo "#define HW_FOOTPRINT 0" >>confdefs.h
+
+
+# Counters.
+
+$as_echo "#define MACH_COUNTERS 0" >>confdefs.h
+
+
+# IPC debugging interface.
+
+$as_echo "#define MACH_DEBUG 1" >>confdefs.h
+
+
+# Fixed priority threads.
+
+$as_echo "#define MACH_FIXPRI 1" >>confdefs.h
+
+
+# Mach host (resource alloc.).
+
+$as_echo "#define MACH_HOST 0" >>confdefs.h
+
+
+# IPC debugging calls.
+
+$as_echo "#define MACH_IPC_DEBUG 1" >>confdefs.h
+
+
+# Testing code/printfs.
+
+$as_echo "#define MACH_IPC_TEST 0" >>confdefs.h
+
+
+# Sanity-check simple locking.
+
+$as_echo "#define MACH_LDEBUG 0" >>confdefs.h
+
+
+# MP lock monitoring. Registers use of locks, contention. Depending on
+# hardware also records time spent with locks held. Used in `kern/lock_mon.c'.
+
+$as_echo "#define MACH_LOCK_MON 0" >>confdefs.h
+
+
+# Does the architecture provide machine-specific interfaces?
+mach_machine_routines=${mach_machine_routines-0}
+
+cat >>confdefs.h <<_ACEOF
+#define MACH_MACHINE_ROUTINES $mach_machine_routines
+_ACEOF
+
+
+# MP debugging. Use alternate locking routines to detect deadlocks. Used in
+# `kern/lock_mon.c'.
+
+$as_echo "#define MACH_MP_DEBUG 0" >>confdefs.h
+
+
+# Paged-out page map hints.
+
+$as_echo "#define MACH_PAGEMAP 1" >>confdefs.h
+
+
+# Do pc sample histogram.
+
+$as_echo "#define MACH_PCSAMPLE 1" >>confdefs.h
+
+
+# TTD Remote Kernel Debugging.
+
+$as_echo "#define MACH_TTD 0" >>confdefs.h
+
+
+# VM debugging calls.
+
+$as_echo "#define MACH_VM_DEBUG 1" >>confdefs.h
+
+
+# Mach-dep power conservation.
+
+$as_echo "#define POWER_SAVE 1" >>confdefs.h
+
+
+# No hardware clock rollover.
+
+$as_echo "#define SIMPLE_CLOCK 0" >>confdefs.h
+
+
+# Use statistical timing.
+
+$as_echo "#define STAT_TIME 1" >>confdefs.h
+
+
+# Kernel tracing.
+
+$as_echo "#define XPR_DEBUG 1" >>confdefs.h
+
+
+# Slab allocator debugging facilities.
+
+$as_echo "#define SLAB_VERIFY 0" >>confdefs.h
+
+
+# Enable the CPU pool layer in the slab allocator.
+
+$as_echo "#define SLAB_USE_CPU_POOLS 0" >>confdefs.h
+
+
+#
+# Options.
+#
+
+# Check whether --enable-kdb was given.
+if test "${enable_kdb+set}" = set; then :
+ enableval=$enable_kdb;
+fi
+
+if [ x"$enable_kdb" = xyes ]; then
+
+$as_echo "#define MACH_KDB 1" >>confdefs.h
+
+ if true; then
+ enable_kdb_TRUE=
+ enable_kdb_FALSE='#'
+else
+ enable_kdb_TRUE='#'
+ enable_kdb_FALSE=
+fi
+
+else
+ # We need to be long winded here: bogus/mach_kdb.h made it default to zero,
+ # unless overridden.
+
+$as_echo "#define MACH_KDB 0" >>confdefs.h
+
+ if false; then
+ enable_kdb_TRUE=
+ enable_kdb_FALSE='#'
+else
+ enable_kdb_TRUE='#'
+ enable_kdb_FALSE=
+fi
+
+fi
+
+
+# Check whether --enable-kmsg was given.
+if test "${enable_kmsg+set}" = set; then :
+ enableval=$enable_kmsg;
+fi
+
+if [ x"$enable_kmsg" != xno ]; then
+
+$as_echo "#define MACH_KMSG /**/" >>confdefs.h
+
+ if true; then
+ enable_kmsg_TRUE=
+ enable_kmsg_FALSE='#'
+else
+ enable_kmsg_TRUE='#'
+ enable_kmsg_FALSE=
+fi
+
+else
+ if false; then
+ enable_kmsg_TRUE=
+ enable_kmsg_FALSE='#'
+else
+ enable_kmsg_TRUE='#'
+ enable_kmsg_FALSE=
+fi
+
+fi
+
+#
+# Set up `SYSTYPE/SYSTYPE' and `SYSTYPE/include/mach/SYSTYPE' links.
+#
+
+# `${file}' and `$file' have different meanings here with respect to having the
+# files in the referenced directory considered for `make dist' or not. See
+# <http://lists.gnu.org/archive/html/bug-automake/2006-11/msg00027.html>.
+ac_config_links="$ac_config_links machine:$systype/$systype
mach/machine:$systype/include/mach/$systype"
+
+
+
+
+# Linux code snarfed into GNU Mach.
+
+
+
+#
+# Internals.
+#
+
+have_linux_code=no
+
+#
+# Helper functions.
+#
+
+#
+# Calling `device_driver_group group' makes sure that the infrastructure needed
+# for the group `group' will be set-up.
+#
+
+device_driver_group() {
+ case $1 in
+ '')
+ # No group.
+ :;;
+ net)
+ device_driver_group_net=selected;;
+ pcmcia)
+ # Pull in group `net'.
+ device_driver_group net
+ device_driver_group_pcmcia=selected;;
+ scsi)
+ device_driver_group_scsi=selected;;
+ wireless)
+ # Pull in group `pcmcia'.
+ device_driver_group pcmcia
+ device_driver_group_wireless=selected;;
+ *)
+ as_fn_error $? "invalid device driver group \`$1'" "$LINENO" 5;;
+ esac
+}
+
+
+
+#
+# AC_OPTION_Linux_ix86_at(name,description,option[,class]). Process
+# configuration option --enable-`name' (with description `description'). If
+# it's set, then `option' is defined with AC_DEFINE. The option optionally
+# pulls in group `group'; see the comments on device_driver_group for more
+# information. For ix86-at, the value from $enable_default_device_drivers is
+# considered when deciding whether to activate the option by default or not.
+#
+
+
+#
+# AC_OPTION_Linux_ix86_at_nodef() is like AC_OPTION_Linux_ix86_at(), but
+# doesn't consider $enable_default_device_drivers.
+#
+
+
+#
+# AC_Linux_DRIVER(machname, description, definition, [group]). Convenience.
+# TODO. The naming of those is nearly everything but reasonable.
+#
+
+
+
+
+
+#
+# Configuration options.
+#
+
+
+
+unset enableval
+# Check whether --enable-floppy was given.
+if test "${enable_floppy+set}" = set; then :
+ enableval=$enable_floppy;
+fi
+
+if test x$enable__group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for PC floppy; on ix86-at
enabled
+ by default and for qemu' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`floppy' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_floppy_TRUE=
+ device_driver_floppy_FALSE='#'
+else
+ device_driver_floppy_TRUE='#'
+ device_driver_floppy_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_BLK_DEV_FD 1" >>confdefs.h
+
+ device_driver_group
+fi
+
+
+
+
+unset enableval
+# Check whether --enable-ide was given.
+if test "${enable_ide+set}" = set; then :
+ enableval=$enable_ide;
+fi
+
+if test x$enable__group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for IDE disk controllers;
on ix86-at enabled
+ by default and for qemu' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`ide' in this configuration." "$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_ide_TRUE=
+ device_driver_ide_FALSE='#'
+else
+ device_driver_ide_TRUE='#'
+ device_driver_ide_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_BLK_DEV_IDE 1" >>confdefs.h
+
+ device_driver_group
+fi
+
+
+# Check whether --enable-ide-forcedma was given.
+if test "${enable_ide_forcedma+set}" = set; then :
+ enableval=$enable_ide_forcedma; test x"$enableval" = xno ||
+
+$as_echo "#define CONFIG_BLK_DEV_FORCE_DMA 1" >>confdefs.h
+
+fi
+
+
+
+# Check whether --enable-scsi-group was given.
+if test "${enable_scsi_group+set}" = set; then :
+ enableval=$enable_scsi_group;
+fi
+
+
+
+# Disabled by default.
+
+
+unset enableval
+# Check whether --enable-53c78xx was given.
+if test "${enable_53c78xx+set}" = set; then :
+ enableval=$enable_53c78xx;
+fi
+
+#TODO.
+case $host_platform:$host_cpu in
+ at:i?86)
+ :;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`53c78xx' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_53c78xx_TRUE=
+ device_driver_53c78xx_FALSE='#'
+else
+ device_driver_53c78xx_TRUE='#'
+ device_driver_53c78xx_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_NCR53C7xx 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-AM53C974 was given.
+if test "${enable_AM53C974+set}" = set; then :
+ enableval=$enable_AM53C974;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
AM53/79C974 (am53c974, am79c974); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`AM53C974' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_AM53C974_TRUE=
+ device_driver_AM53C974_FALSE='#'
+else
+ device_driver_AM53C974_TRUE='#'
+ device_driver_AM53C974_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_AM53C974 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-BusLogic was given.
+if test "${enable_BusLogic+set}" = set; then :
+ enableval=$enable_BusLogic;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
BusLogic; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`BusLogic' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_BusLogic_TRUE=
+ device_driver_BusLogic_FALSE='#'
+else
+ device_driver_BusLogic_TRUE='#'
+ device_driver_BusLogic_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_BUSLOGIC 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+# TODO. What's that? And what about FlashPoint.c?
+# Check whether --enable-flashpoint was given.
+if test "${enable_flashpoint+set}" = set; then :
+ enableval=$enable_flashpoint; test x"$enableval" = xno &&
+
+$as_echo "#define CONFIG_SCSI_OMIT_FLASHPOINT /**/" >>confdefs.h
+
+fi
+
+# Disabled by default.
+
+
+unset enableval
+# Check whether --enable-NCR53c406a was given.
+if test "${enable_NCR53c406a+set}" = set; then :
+ enableval=$enable_NCR53c406a;
+fi
+
+#TODO.
+case $host_platform:$host_cpu in
+ at:i?86)
+ :;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`NCR53c406a' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_NCR53c406a_TRUE=
+ device_driver_NCR53c406a_FALSE='#'
+else
+ device_driver_NCR53c406a_TRUE='#'
+ device_driver_NCR53c406a_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_NCR53C406A 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-advansys was given.
+if test "${enable_advansys+set}" = set; then :
+ enableval=$enable_advansys;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
AdvanSys; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`advansys' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_advansys_TRUE=
+ device_driver_advansys_FALSE='#'
+else
+ device_driver_advansys_TRUE='#'
+ device_driver_advansys_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_ADVANSYS 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-aha152x was given.
+if test "${enable_aha152x+set}" = set; then :
+ enableval=$enable_aha152x;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
Adaptec AHA-152x/2825 (aha152x, aha2825); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`aha152x' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_aha152x_TRUE=
+ device_driver_aha152x_FALSE='#'
+else
+ device_driver_aha152x_TRUE='#'
+ device_driver_aha152x_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_AHA152X 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-aha1542 was given.
+if test "${enable_aha1542+set}" = set; then :
+ enableval=$enable_aha1542;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
Adaptec AHA-1542; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`aha1542' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_aha1542_TRUE=
+ device_driver_aha1542_FALSE='#'
+else
+ device_driver_aha1542_TRUE='#'
+ device_driver_aha1542_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_AHA1542 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-aha1740 was given.
+if test "${enable_aha1740+set}" = set; then :
+ enableval=$enable_aha1740;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
Adaptec AHA-1740; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`aha1740' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_aha1740_TRUE=
+ device_driver_aha1740_FALSE='#'
+else
+ device_driver_aha1740_TRUE='#'
+ device_driver_aha1740_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_AHA1740 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+# Disabled by default.
+
+
+unset enableval
+# Check whether --enable-aic7xxx was given.
+if test "${enable_aic7xxx+set}" = set; then :
+ enableval=$enable_aic7xxx;
+fi
+
+#TODO.
+case $host_platform:$host_cpu in
+ at:i?86)
+ :;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`aic7xxx' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_aic7xxx_TRUE=
+ device_driver_aic7xxx_FALSE='#'
+else
+ device_driver_aic7xxx_TRUE='#'
+ device_driver_aic7xxx_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_AIC7XXX 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-dtc was given.
+if test "${enable_dtc+set}" = set; then :
+ enableval=$enable_dtc;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
DTC3180/3280 (dtc3180, dtc3280); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`dtc' in this configuration." "$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_dtc_TRUE=
+ device_driver_dtc_FALSE='#'
+else
+ device_driver_dtc_TRUE='#'
+ device_driver_dtc_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_DTC3280 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-eata was given.
+if test "${enable_eata+set}" = set; then :
+ enableval=$enable_eata;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller EATA
ISA/EISA/PCI
+ (DPT and generic EATA/DMA-compliant boards); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`eata' in this configuration." "$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_eata_TRUE=
+ device_driver_eata_FALSE='#'
+else
+ device_driver_eata_TRUE='#'
+ device_driver_eata_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_EATA 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+# Disabled by default.
+
+
+unset enableval
+# Check whether --enable-eata_dma was given.
+if test "${enable_eata_dma+set}" = set; then :
+ enableval=$enable_eata_dma;
+fi
+
+#TODO.
+case $host_platform:$host_cpu in
+ at:i?86)
+ :;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`eata_dma' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_eata_dma_TRUE=
+ device_driver_eata_dma_FALSE='#'
+else
+ device_driver_eata_dma_TRUE='#'
+ device_driver_eata_dma_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_EATA_DMA 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-eata_pio was given.
+if test "${enable_eata_pio+set}" = set; then :
+ enableval=$enable_eata_pio;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
EATA-PIO (old DPT PM2001, PM2012A); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`eata_pio' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_eata_pio_TRUE=
+ device_driver_eata_pio_FALSE='#'
+else
+ device_driver_eata_pio_TRUE='#'
+ device_driver_eata_pio_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_EATA_PIO 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-fdomain was given.
+if test "${enable_fdomain+set}" = set; then :
+ enableval=$enable_fdomain;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
Future Domain 16xx; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`fdomain' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_fdomain_TRUE=
+ device_driver_fdomain_FALSE='#'
+else
+ device_driver_fdomain_TRUE='#'
+ device_driver_fdomain_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_FUTURE_DOMAIN 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+# Disabled by default.
+
+
+unset enableval
+# Check whether --enable-g_NCR5380 was given.
+if test "${enable_g_NCR5380+set}" = set; then :
+ enableval=$enable_g_NCR5380;
+fi
+
+#TODO.
+case $host_platform:$host_cpu in
+ at:i?86)
+ :;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`g_NCR5380' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_g_NCR5380_TRUE=
+ device_driver_g_NCR5380_FALSE='#'
+else
+ device_driver_g_NCR5380_TRUE='#'
+ device_driver_g_NCR5380_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_GENERIC_NCR5380 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+# Disabled by default.
+
+
+unset enableval
+# Check whether --enable-gdth was given.
+if test "${enable_gdth+set}" = set; then :
+ enableval=$enable_gdth;
+fi
+
+#TODO.
+case $host_platform:$host_cpu in
+ at:i?86)
+ :;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`gdth' in this configuration." "$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_gdth_TRUE=
+ device_driver_gdth_FALSE='#'
+else
+ device_driver_gdth_TRUE='#'
+ device_driver_gdth_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_GDTH 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-in2000 was given.
+if test "${enable_in2000+set}" = set; then :
+ enableval=$enable_in2000;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
Always IN 2000; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`in2000' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_in2000_TRUE=
+ device_driver_in2000_FALSE='#'
+else
+ device_driver_in2000_TRUE='#'
+ device_driver_in2000_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_IN2000 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-ncr53c8xx was given.
+if test "${enable_ncr53c8xx+set}" = set; then :
+ enableval=$enable_ncr53c8xx;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
NCR53C8XX (ncr53c8xx, dc390f, dc390u, dc390w); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`ncr53c8xx' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_ncr53c8xx_TRUE=
+ device_driver_ncr53c8xx_FALSE='#'
+else
+ device_driver_ncr53c8xx_TRUE='#'
+ device_driver_ncr53c8xx_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_NCR53C8XX 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-pas16 was given.
+if test "${enable_pas16+set}" = set; then :
+ enableval=$enable_pas16;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
PAS16; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`pas16' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_pas16_TRUE=
+ device_driver_pas16_FALSE='#'
+else
+ device_driver_pas16_TRUE='#'
+ device_driver_pas16_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_PASS16 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-ppa was given.
+if test "${enable_ppa+set}" = set; then :
+ enableval=$enable_ppa;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for IOMEGA Parallel Port
ZIP drive; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`ppa' in this configuration." "$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_ppa_TRUE=
+ device_driver_ppa_FALSE='#'
+else
+ device_driver_ppa_TRUE='#'
+ device_driver_ppa_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_PPA 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-qlogicfas was given.
+if test "${enable_qlogicfas+set}" = set; then :
+ enableval=$enable_qlogicfas;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
Qlogic FAS; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`qlogicfas' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_qlogicfas_TRUE=
+ device_driver_qlogicfas_FALSE='#'
+else
+ device_driver_qlogicfas_TRUE='#'
+ device_driver_qlogicfas_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_QLOGIC_FAS 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-qlogicisp was given.
+if test "${enable_qlogicisp+set}" = set; then :
+ enableval=$enable_qlogicisp;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
Qlogic ISP; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`qlogicisp' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_qlogicisp_TRUE=
+ device_driver_qlogicisp_FALSE='#'
+else
+ device_driver_qlogicisp_TRUE='#'
+ device_driver_qlogicisp_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_QLOGIC_ISP 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-seagate was given.
+if test "${enable_seagate+set}" = set; then :
+ enableval=$enable_seagate;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
Seagate ST02, Future Domain TMC-8xx; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`seagate' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_seagate_TRUE=
+ device_driver_seagate_FALSE='#'
+else
+ device_driver_seagate_TRUE='#'
+ device_driver_seagate_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_SEAGATE 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-sym53c8xx was given.
+if test "${enable_sym53c8xx+set}" = set; then :
+ enableval=$enable_sym53c8xx;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
Symbios 53C8XX; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`sym53c8xx' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_sym53c8xx_TRUE=
+ device_driver_sym53c8xx_FALSE='#'
+else
+ device_driver_sym53c8xx_TRUE='#'
+ device_driver_sym53c8xx_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_SYM53C8XX 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-t128 was given.
+if test "${enable_t128+set}" = set; then :
+ enableval=$enable_t128;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
Trantor T128/T128F/T228 (t128, t128f, t228); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`t128' in this configuration." "$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_t128_TRUE=
+ device_driver_t128_FALSE='#'
+else
+ device_driver_t128_TRUE='#'
+ device_driver_t128_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_T128 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-tmscsim was given.
+if test "${enable_tmscsim+set}" = set; then :
+ enableval=$enable_tmscsim;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
Tekram DC-390(T) (dc390, dc390t); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`tmscsim' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_tmscsim_TRUE=
+ device_driver_tmscsim_FALSE='#'
+else
+ device_driver_tmscsim_TRUE='#'
+ device_driver_tmscsim_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_DC390T 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-u14-34f was given.
+if test "${enable_u14_34f+set}" = set; then :
+ enableval=$enable_u14_34f;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
UltraStor 14F/34F; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`u14-34f' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_u14_34f_TRUE=
+ device_driver_u14_34f_FALSE='#'
+else
+ device_driver_u14_34f_TRUE='#'
+ device_driver_u14_34f_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_U14_34F 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-ultrastor was given.
+if test "${enable_ultrastor+set}" = set; then :
+ enableval=$enable_ultrastor;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller
UltraStor; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`ultrastor' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_ultrastor_TRUE=
+ device_driver_ultrastor_FALSE='#'
+else
+ device_driver_ultrastor_TRUE='#'
+ device_driver_ultrastor_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_ULTRASTOR 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+unset enableval
+# Check whether --enable-wd7000 was given.
+if test "${enable_wd7000+set}" = set; then :
+ enableval=$enable_wd7000;
+fi
+
+if test x$enable_scsi_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SCSI controller WD
7000; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`wd7000' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_wd7000_TRUE=
+ device_driver_wd7000_FALSE='#'
+else
+ device_driver_wd7000_TRUE='#'
+ device_driver_wd7000_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SCSI_7000FASST 1" >>confdefs.h
+
+ device_driver_group scsi
+fi
+
+
+
+# Check whether --enable-net-group was given.
+if test "${enable_net_group+set}" = set; then :
+ enableval=$enable_net_group;
+fi
+
+
+
+
+
+unset enableval
+# Check whether --enable-3c501 was given.
+if test "${enable_3c501+set}" = set; then :
+ enableval=$enable_3c501;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
3COM 501 (3c501) / Etherlink I; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`3c501' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_3c501_TRUE=
+ device_driver_3c501_FALSE='#'
+else
+ device_driver_3c501_TRUE='#'
+ device_driver_3c501_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_EL1 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-3c503 was given.
+if test "${enable_3c503+set}" = set; then :
+ enableval=$enable_3c503;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
3Com 503 (3c503) / Etherlink II; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`3c503' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_3c503_TRUE=
+ device_driver_3c503_FALSE='#'
+else
+ device_driver_3c503_TRUE='#'
+ device_driver_3c503_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_EL2 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-3c505 was given.
+if test "${enable_3c505+set}" = set; then :
+ enableval=$enable_3c505;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
3Com 505 (3c505, elplus); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`3c505' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_3c505_TRUE=
+ device_driver_3c505_FALSE='#'
+else
+ device_driver_3c505_TRUE='#'
+ device_driver_3c505_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_ELPLUS 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-3c507 was given.
+if test "${enable_3c507+set}" = set; then :
+ enableval=$enable_3c507;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
3Com 507 (3c507, el16); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`3c507' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_3c507_TRUE=
+ device_driver_3c507_FALSE='#'
+else
+ device_driver_3c507_TRUE='#'
+ device_driver_3c507_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_EL16 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-3c509 was given.
+if test "${enable_3c509+set}" = set; then :
+ enableval=$enable_3c509;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
3Com 509/579 (3c509, 3c579) / Etherlink III; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`3c509' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_3c509_TRUE=
+ device_driver_3c509_FALSE='#'
+else
+ device_driver_3c509_TRUE='#'
+ device_driver_3c509_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_EL3 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-3c59x was given.
+if test "${enable_3c59x+set}" = set; then :
+ enableval=$enable_3c59x;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
3Com 59x/90x
+ (3c59x, 3c590, 3c592, 3c595, 3c597, 3c90x, 3c900, 3c905)
+ "Vortex/Boomerang"; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`3c59x' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_3c59x_TRUE=
+ device_driver_3c59x_FALSE='#'
+else
+ device_driver_3c59x_TRUE='#'
+ device_driver_3c59x_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_VORTEX 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-3c515 was given.
+if test "${enable_3c515+set}" = set; then :
+ enableval=$enable_3c515;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
3Com 515 ISA Fast EtherLink; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`3c515' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_3c515_TRUE=
+ device_driver_3c515_FALSE='#'
+else
+ device_driver_3c515_TRUE='#'
+ device_driver_3c515_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_3C515 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-ac3200 was given.
+if test "${enable_ac3200+set}" = set; then :
+ enableval=$enable_ac3200;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
Ansel Communications EISA 3200; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`ac3200' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_ac3200_TRUE=
+ device_driver_ac3200_FALSE='#'
+else
+ device_driver_ac3200_TRUE='#'
+ device_driver_ac3200_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_AC3200 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-apricot was given.
+if test "${enable_apricot+set}" = set; then :
+ enableval=$enable_apricot;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
Apricot XEN-II on board ethernet; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`apricot' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_apricot_TRUE=
+ device_driver_apricot_FALSE='#'
+else
+ device_driver_apricot_TRUE='#'
+ device_driver_apricot_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_APRICOT 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-at1700 was given.
+if test "${enable_at1700+set}" = set; then :
+ enableval=$enable_at1700;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
AT1700 (Fujitsu 86965); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`at1700' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_at1700_TRUE=
+ device_driver_at1700_FALSE='#'
+else
+ device_driver_at1700_TRUE='#'
+ device_driver_at1700_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_AT1700 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+# Disabled by default.
+
+
+unset enableval
+# Check whether --enable-atp was given.
+if test "${enable_atp+set}" = set; then :
+ enableval=$enable_atp;
+fi
+
+#TODO.
+case $host_platform:$host_cpu in
+ at:i?86)
+ :;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`atp' in this configuration." "$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_atp_TRUE=
+ device_driver_atp_FALSE='#'
+else
+ device_driver_atp_TRUE='#'
+ device_driver_atp_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_ATP 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-de4x5 was given.
+if test "${enable_de4x5+set}" = set; then :
+ enableval=$enable_de4x5;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
DE4x5 (de4x5, de425, de434, de435, de450, de500); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`de4x5' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_de4x5_TRUE=
+ device_driver_de4x5_FALSE='#'
+else
+ device_driver_de4x5_TRUE='#'
+ device_driver_de4x5_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_DE4X5 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-de600 was given.
+if test "${enable_de600+set}" = set; then :
+ enableval=$enable_de600;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
D-Link DE-600; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`de600' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_de600_TRUE=
+ device_driver_de600_FALSE='#'
+else
+ device_driver_de600_TRUE='#'
+ device_driver_de600_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_DE600 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-de620 was given.
+if test "${enable_de620+set}" = set; then :
+ enableval=$enable_de620;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
D-Link DE-620; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`de620' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_de620_TRUE=
+ device_driver_de620_FALSE='#'
+else
+ device_driver_de620_TRUE='#'
+ device_driver_de620_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_DE620 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-depca was given.
+if test "${enable_depca+set}" = set; then :
+ enableval=$enable_depca;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
DEPCA
+ (de100, de101, de200, de201, de202, de210, de422); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`depca' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_depca_TRUE=
+ device_driver_depca_FALSE='#'
+else
+ device_driver_depca_TRUE='#'
+ device_driver_depca_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_DEPCA 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-e2100 was given.
+if test "${enable_e2100+set}" = set; then :
+ enableval=$enable_e2100;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
Cabletron E21xx; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`e2100' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_e2100_TRUE=
+ device_driver_e2100_FALSE='#'
+else
+ device_driver_e2100_TRUE='#'
+ device_driver_e2100_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_E2100 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-eepro was given.
+if test "${enable_eepro+set}" = set; then :
+ enableval=$enable_eepro;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
EtherExpressPro; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`eepro' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_eepro_TRUE=
+ device_driver_eepro_FALSE='#'
+else
+ device_driver_eepro_TRUE='#'
+ device_driver_eepro_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_EEXPRESS_PRO 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-eepro100 was given.
+if test "${enable_eepro100+set}" = set; then :
+ enableval=$enable_eepro100;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
Intel EtherExpressPro PCI 10+/100B/100+; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`eepro100' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_eepro100_TRUE=
+ device_driver_eepro100_FALSE='#'
+else
+ device_driver_eepro100_TRUE='#'
+ device_driver_eepro100_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_EEXPRESS_PRO100B 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-eexpress was given.
+if test "${enable_eexpress+set}" = set; then :
+ enableval=$enable_eexpress;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
EtherExpress 16; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`eexpress' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_eexpress_TRUE=
+ device_driver_eexpress_FALSE='#'
+else
+ device_driver_eexpress_TRUE='#'
+ device_driver_eexpress_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_EEXPRESS 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-epic100 was given.
+if test "${enable_epic100+set}" = set; then :
+ enableval=$enable_epic100;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
SMC 83c170/175 EPIC/100 (epic, epic100) / EtherPower II; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`epic100' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_epic100_TRUE=
+ device_driver_epic100_FALSE='#'
+else
+ device_driver_epic100_TRUE='#'
+ device_driver_epic100_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_EPIC 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-eth16i was given.
+if test "${enable_eth16i+set}" = set; then :
+ enableval=$enable_eth16i;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
ICL EtherTeam 16i/32 (eth16i, eth32); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`eth16i' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_eth16i_TRUE=
+ device_driver_eth16i_FALSE='#'
+else
+ device_driver_eth16i_TRUE='#'
+ device_driver_eth16i_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_ETH16I 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-ewrk3 was given.
+if test "${enable_ewrk3+set}" = set; then :
+ enableval=$enable_ewrk3;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
EtherWORKS 3 (ewrk3, de203, de204, de205); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`ewrk3' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_ewrk3_TRUE=
+ device_driver_ewrk3_FALSE='#'
+else
+ device_driver_ewrk3_TRUE='#'
+ device_driver_ewrk3_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_EWRK3 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-fmv18x was given.
+if test "${enable_fmv18x+set}" = set; then :
+ enableval=$enable_fmv18x;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
FMV-181/182/183/184; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`fmv18x' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_fmv18x_TRUE=
+ device_driver_fmv18x_FALSE='#'
+else
+ device_driver_fmv18x_TRUE='#'
+ device_driver_fmv18x_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_FMV18X 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-hamachi was given.
+if test "${enable_hamachi+set}" = set; then :
+ enableval=$enable_hamachi;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
Packet Engines "Hamachi" GNIC-2 Gigabit Ethernet; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`hamachi' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_hamachi_TRUE=
+ device_driver_hamachi_FALSE='#'
+else
+ device_driver_hamachi_TRUE='#'
+ device_driver_hamachi_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_HAMACHI 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-hp-plus was given.
+if test "${enable_hp_plus+set}" = set; then :
+ enableval=$enable_hp_plus;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
HP PCLAN+ (27247B and 27252A); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`hp-plus' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_hp_plus_TRUE=
+ device_driver_hp_plus_FALSE='#'
+else
+ device_driver_hp_plus_TRUE='#'
+ device_driver_hp_plus_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_HPLAN_PLUS 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-hp was given.
+if test "${enable_hp+set}" = set; then :
+ enableval=$enable_hp;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
HP PCLAN (27245 and other 27xxx series); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`hp' in this configuration." "$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_hp_TRUE=
+ device_driver_hp_FALSE='#'
+else
+ device_driver_hp_TRUE='#'
+ device_driver_hp_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_HPLAN 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-hp100 was given.
+if test "${enable_hp100+set}" = set; then :
+ enableval=$enable_hp100;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
HP 10/100VG PCLAN (ISA, EISA, PCI)
+ (hp100, hpj2577, hpj2573, hpj2585, hp27248b); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`hp100' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_hp100_TRUE=
+ device_driver_hp100_FALSE='#'
+else
+ device_driver_hp100_TRUE='#'
+ device_driver_hp100_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_HP100 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-intel-gige was given.
+if test "${enable_intel_gige+set}" = set; then :
+ enableval=$enable_intel_gige;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
Intel PCI Gigabit Ethernet; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`intel-gige' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_intel_gige_TRUE=
+ device_driver_intel_gige_FALSE='#'
+else
+ device_driver_intel_gige_TRUE='#'
+ device_driver_intel_gige_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_INTEL_GIGE 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-lance was given.
+if test "${enable_lance+set}" = set; then :
+ enableval=$enable_lance;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
AMD LANCE and PCnet (at1500, ne2100); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`lance' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_lance_TRUE=
+ device_driver_lance_FALSE='#'
+else
+ device_driver_lance_TRUE='#'
+ device_driver_lance_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_LANCE 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-myson803 was given.
+if test "${enable_myson803+set}" = set; then :
+ enableval=$enable_myson803;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
Myson MTD803 Ethernet adapter series; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`myson803' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_myson803_TRUE=
+ device_driver_myson803_FALSE='#'
+else
+ device_driver_myson803_TRUE='#'
+ device_driver_myson803_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_MYSON803 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-natsemi was given.
+if test "${enable_natsemi+set}" = set; then :
+ enableval=$enable_natsemi;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
National Semiconductor DP8381x series PCI Ethernet; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`natsemi' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_natsemi_TRUE=
+ device_driver_natsemi_FALSE='#'
+else
+ device_driver_natsemi_TRUE='#'
+ device_driver_natsemi_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_NATSEMI 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-ne was given.
+if test "${enable_ne+set}" = set; then :
+ enableval=$enable_ne;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
NE2000/NE1000 ISA (ne, ne1000, ne2000); on ix86-at enabled
+ by default and for qemu' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`ne' in this configuration." "$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_ne_TRUE=
+ device_driver_ne_FALSE='#'
+else
+ device_driver_ne_TRUE='#'
+ device_driver_ne_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_NE2000 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-ne2k-pci was given.
+if test "${enable_ne2k_pci+set}" = set; then :
+ enableval=$enable_ne2k_pci;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
PCI NE2000; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`ne2k-pci' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_ne2k_pci_TRUE=
+ device_driver_ne2k_pci_FALSE='#'
+else
+ device_driver_ne2k_pci_TRUE='#'
+ device_driver_ne2k_pci_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_NE2K_PCI 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-ni52 was given.
+if test "${enable_ni52+set}" = set; then :
+ enableval=$enable_ni52;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
NI5210; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`ni52' in this configuration." "$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_ni52_TRUE=
+ device_driver_ni52_FALSE='#'
+else
+ device_driver_ni52_TRUE='#'
+ device_driver_ni52_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_NI52 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-ni65 was given.
+if test "${enable_ni65+set}" = set; then :
+ enableval=$enable_ni65;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
NI6510; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`ni65' in this configuration." "$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_ni65_TRUE=
+ device_driver_ni65_FALSE='#'
+else
+ device_driver_ni65_TRUE='#'
+ device_driver_ni65_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_NI65 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-ns820 was given.
+if test "${enable_ns820+set}" = set; then :
+ enableval=$enable_ns820;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
National Semiconductor DP8382x series PCI Ethernet; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`ns820' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_ns820_TRUE=
+ device_driver_ns820_FALSE='#'
+else
+ device_driver_ns820_TRUE='#'
+ device_driver_ns820_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_NS820 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-pcnet32 was given.
+if test "${enable_pcnet32+set}" = set; then :
+ enableval=$enable_pcnet32;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
AMD PCI PCnet32 (PCI bus NE2100 cards); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`pcnet32' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_pcnet32_TRUE=
+ device_driver_pcnet32_FALSE='#'
+else
+ device_driver_pcnet32_TRUE='#'
+ device_driver_pcnet32_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_PCNET32 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-rtl8139 was given.
+if test "${enable_rtl8139+set}" = set; then :
+ enableval=$enable_rtl8139;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
RealTek 8129/8139 (rtl8129, rtl8139) (not 8019/8029!); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`rtl8139' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_rtl8139_TRUE=
+ device_driver_rtl8139_FALSE='#'
+else
+ device_driver_rtl8139_TRUE='#'
+ device_driver_rtl8139_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_RTL8139 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-seeq8005 was given.
+if test "${enable_seeq8005+set}" = set; then :
+ enableval=$enable_seeq8005;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
Seeq8005; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`seeq8005' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_seeq8005_TRUE=
+ device_driver_seeq8005_FALSE='#'
+else
+ device_driver_seeq8005_TRUE='#'
+ device_driver_seeq8005_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SEEQ8005 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-sis900 was given.
+if test "${enable_sis900+set}" = set; then :
+ enableval=$enable_sis900;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
SiS 900; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`sis900' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_sis900_TRUE=
+ device_driver_sis900_FALSE='#'
+else
+ device_driver_sis900_TRUE='#'
+ device_driver_sis900_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SIS900 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-sk_g16 was given.
+if test "${enable_sk_g16+set}" = set; then :
+ enableval=$enable_sk_g16;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
Schneider & Koch G16; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`sk_g16' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_sk_g16_TRUE=
+ device_driver_sk_g16_FALSE='#'
+else
+ device_driver_sk_g16_TRUE='#'
+ device_driver_sk_g16_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SK_G16 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-smc-ultra was given.
+if test "${enable_smc_ultra+set}" = set; then :
+ enableval=$enable_smc_ultra;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
SMC Ultra; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`smc-ultra' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_smc_ultra_TRUE=
+ device_driver_smc_ultra_FALSE='#'
+else
+ device_driver_smc_ultra_TRUE='#'
+ device_driver_smc_ultra_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_ULTRA 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-smc-ultra32 was given.
+if test "${enable_smc_ultra32+set}" = set; then :
+ enableval=$enable_smc_ultra32;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
SMC Ultra32; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`smc-ultra32' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_smc_ultra32_TRUE=
+ device_driver_smc_ultra32_FALSE='#'
+else
+ device_driver_smc_ultra32_TRUE='#'
+ device_driver_smc_ultra32_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_ULTRA32 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-starfire was given.
+if test "${enable_starfire+set}" = set; then :
+ enableval=$enable_starfire;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
Adaptec Starfire network adapter; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`starfire' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_starfire_TRUE=
+ device_driver_starfire_FALSE='#'
+else
+ device_driver_starfire_TRUE='#'
+ device_driver_starfire_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_STARFIRE 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-sundance was given.
+if test "${enable_sundance+set}" = set; then :
+ enableval=$enable_sundance;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
Sundance ST201 "Alta" PCI Ethernet; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`sundance' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_sundance_TRUE=
+ device_driver_sundance_FALSE='#'
+else
+ device_driver_sundance_TRUE='#'
+ device_driver_sundance_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SUNDANCE 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-tlan was given.
+if test "${enable_tlan+set}" = set; then :
+ enableval=$enable_tlan;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
TI ThunderLAN; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`tlan' in this configuration." "$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_tlan_TRUE=
+ device_driver_tlan_FALSE='#'
+else
+ device_driver_tlan_TRUE='#'
+ device_driver_tlan_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_TLAN 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-tulip was given.
+if test "${enable_tulip+set}" = set; then :
+ enableval=$enable_tulip;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
DECchip Tulip (dc21x4x) PCI (elcp, tulip); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`tulip' in this configuration." "$LINENO"
5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_tulip_TRUE=
+ device_driver_tulip_FALSE='#'
+else
+ device_driver_tulip_TRUE='#'
+ device_driver_tulip_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_DEC_ELCP 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-via-rhine was given.
+if test "${enable_via_rhine+set}" = set; then :
+ enableval=$enable_via_rhine;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
VIA Rhine; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`via-rhine' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_via_rhine_TRUE=
+ device_driver_via_rhine_FALSE='#'
+else
+ device_driver_via_rhine_TRUE='#'
+ device_driver_via_rhine_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_VIA_RHINE 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+# Disabled by default.
+
+
+unset enableval
+# Check whether --enable-wavelan was given.
+if test "${enable_wavelan+set}" = set; then :
+ enableval=$enable_wavelan;
+fi
+
+#TODO.
+case $host_platform:$host_cpu in
+ at:i?86)
+ :;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`wavelan' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_wavelan_TRUE=
+ device_driver_wavelan_FALSE='#'
+else
+ device_driver_wavelan_TRUE='#'
+ device_driver_wavelan_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_WAVELAN 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-wd was given.
+if test "${enable_wd+set}" = set; then :
+ enableval=$enable_wd;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
WD80x3; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`wd' in this configuration." "$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_wd_TRUE=
+ device_driver_wd_FALSE='#'
+else
+ device_driver_wd_TRUE='#'
+ device_driver_wd_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_WD80x3 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-winbond-840 was given.
+if test "${enable_winbond_840+set}" = set; then :
+ enableval=$enable_winbond_840;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
Winbond W89c840 PCI Ethernet; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`winbond-840' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_winbond_840_TRUE=
+ device_driver_winbond_840_FALSE='#'
+else
+ device_driver_winbond_840_TRUE='#'
+ device_driver_winbond_840_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_WINBOND840 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-yellowfin was given.
+if test "${enable_yellowfin+set}" = set; then :
+ enableval=$enable_yellowfin;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
Packet Engines Yellowfin Gigabit-NIC; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`yellowfin' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_yellowfin_TRUE=
+ device_driver_yellowfin_FALSE='#'
+else
+ device_driver_yellowfin_TRUE='#'
+ device_driver_yellowfin_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_YELLOWFIN 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+unset enableval
+# Check whether --enable-znet was given.
+if test "${enable_znet+set}" = set; then :
+ enableval=$enable_znet;
+fi
+
+if test x$enable_net_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Ethernet controller
Zenith Z-Note (znet, znote); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`znet' in this configuration." "$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_znet_TRUE=
+ device_driver_znet_FALSE='#'
+else
+ device_driver_znet_TRUE='#'
+ device_driver_znet_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_ZNET 1" >>confdefs.h
+
+ device_driver_group net
+fi
+
+
+
+# Check whether --enable-pcmcia-group was given.
+if test "${enable_pcmcia_group+set}" = set; then :
+ enableval=$enable_pcmcia_group;
+fi
+
+
+
+
+
+unset enableval
+# Check whether --enable-i82365 was given.
+if test "${enable_i82365+set}" = set; then :
+ enableval=$enable_i82365;
+fi
+
+if test x$enable_pcmcia_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Intel 82365 PC Card
controller; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`i82365' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_i82365_TRUE=
+ device_driver_i82365_FALSE='#'
+else
+ device_driver_i82365_TRUE='#'
+ device_driver_i82365_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_I82365 1" >>confdefs.h
+
+ device_driver_group pcmcia
+fi
+
+
+
+unset enableval
+# Check whether --enable-pcmcia-isa was given.
+if test "${enable_pcmcia_isa+set}" = set; then :
+ enableval=$enable_pcmcia_isa;
+fi
+
+if test x$enable_pcmcia_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'isa bus support in the pcmcia core; on
ix86-at enabled by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`pcmcia-isa' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_pcmcia_isa_TRUE=
+ device_driver_pcmcia_isa_FALSE='#'
+else
+ device_driver_pcmcia_isa_TRUE='#'
+ device_driver_pcmcia_isa_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_ISA 1" >>confdefs.h
+
+ device_driver_group pcmcia
+fi
+
+
+
+
+unset enableval
+# Check whether --enable-3c574_cs was given.
+if test "${enable_3c574_cs+set}" = set; then :
+ enableval=$enable_3c574_cs;
+fi
+
+if test x$enable_pcmcia_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for 3Com 3c574
``RoadRunner'' PCMCIA Ethernet; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`3c574_cs' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_3c574_cs_TRUE=
+ device_driver_3c574_cs_FALSE='#'
+else
+ device_driver_3c574_cs_TRUE='#'
+ device_driver_3c574_cs_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_3C574_CS 1" >>confdefs.h
+
+ device_driver_group pcmcia
+fi
+
+
+
+unset enableval
+# Check whether --enable-3c589_cs was given.
+if test "${enable_3c589_cs+set}" = set; then :
+ enableval=$enable_3c589_cs;
+fi
+
+if test x$enable_pcmcia_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for 3Com 3c589 PCMCIA
Ethernet card; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`3c589_cs' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_3c589_cs_TRUE=
+ device_driver_3c589_cs_FALSE='#'
+else
+ device_driver_3c589_cs_TRUE='#'
+ device_driver_3c589_cs_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_3C589_CS 1" >>confdefs.h
+
+ device_driver_group pcmcia
+fi
+
+
+
+unset enableval
+# Check whether --enable-axnet_cs was given.
+if test "${enable_axnet_cs+set}" = set; then :
+ enableval=$enable_axnet_cs;
+fi
+
+if test x$enable_pcmcia_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Asix AX88190-based
PCMCIA Ethernet adapters; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`axnet_cs' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_axnet_cs_TRUE=
+ device_driver_axnet_cs_FALSE='#'
+else
+ device_driver_axnet_cs_TRUE='#'
+ device_driver_axnet_cs_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_AXNET_CS 1" >>confdefs.h
+
+ device_driver_group pcmcia
+fi
+
+
+
+unset enableval
+# Check whether --enable-fmvj18x_cs was given.
+if test "${enable_fmvj18x_cs+set}" = set; then :
+ enableval=$enable_fmvj18x_cs;
+fi
+
+if test x$enable_pcmcia_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for fmvj18x chipset based
PCMCIA Ethernet cards; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`fmvj18x_cs' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_fmvj18x_cs_TRUE=
+ device_driver_fmvj18x_cs_FALSE='#'
+else
+ device_driver_fmvj18x_cs_TRUE='#'
+ device_driver_fmvj18x_cs_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_FMVJ18X_CS 1" >>confdefs.h
+
+ device_driver_group pcmcia
+fi
+
+
+
+unset enableval
+# Check whether --enable-nmclan_cs was given.
+if test "${enable_nmclan_cs+set}" = set; then :
+ enableval=$enable_nmclan_cs;
+fi
+
+if test x$enable_pcmcia_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for New Media Ethernet
LAN PCMCIA cards; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`nmclan_cs' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_nmclan_cs_TRUE=
+ device_driver_nmclan_cs_FALSE='#'
+else
+ device_driver_nmclan_cs_TRUE='#'
+ device_driver_nmclan_cs_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_NMCLAN_CS 1" >>confdefs.h
+
+ device_driver_group pcmcia
+fi
+
+
+
+unset enableval
+# Check whether --enable-pcnet_cs was given.
+if test "${enable_pcnet_cs+set}" = set; then :
+ enableval=$enable_pcnet_cs;
+fi
+
+if test x$enable_pcmcia_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for NS8390-based PCMCIA
cards; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`pcnet_cs' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_pcnet_cs_TRUE=
+ device_driver_pcnet_cs_FALSE='#'
+else
+ device_driver_pcnet_cs_TRUE='#'
+ device_driver_pcnet_cs_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_PCNET_CS 1" >>confdefs.h
+
+ device_driver_group pcmcia
+fi
+
+
+
+unset enableval
+# Check whether --enable-smc91c92_cs was given.
+if test "${enable_smc91c92_cs+set}" = set; then :
+ enableval=$enable_smc91c92_cs;
+fi
+
+if test x$enable_pcmcia_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for SMC91c92-based PCMCIA
cards; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`smc91c92_cs' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_smc91c92_cs_TRUE=
+ device_driver_smc91c92_cs_FALSE='#'
+else
+ device_driver_smc91c92_cs_TRUE='#'
+ device_driver_smc91c92_cs_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_SMC91C92_CS 1" >>confdefs.h
+
+ device_driver_group pcmcia
+fi
+
+
+
+unset enableval
+# Check whether --enable-xirc2ps_cs was given.
+if test "${enable_xirc2ps_cs+set}" = set; then :
+ enableval=$enable_xirc2ps_cs;
+fi
+
+if test x$enable_pcmcia_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Xircom CreditCard and
Realport PCMCIA ethernet; on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`xirc2ps_cs' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_xirc2ps_cs_TRUE=
+ device_driver_xirc2ps_cs_FALSE='#'
+else
+ device_driver_xirc2ps_cs_TRUE='#'
+ device_driver_xirc2ps_cs_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_XIRC2PS_CS 1" >>confdefs.h
+
+ device_driver_group pcmcia
+fi
+
+
+
+# Check whether --enable-wireless-group was given.
+if test "${enable_wireless_group+set}" = set; then :
+ enableval=$enable_wireless_group;
+fi
+
+
+
+
+
+unset enableval
+# Check whether --enable-orinoco_cs was given.
+if test "${enable_orinoco_cs+set}" = set; then :
+ enableval=$enable_orinoco_cs;
+fi
+
+if test x$enable_wireless_group = xno;
+then
+ enableval=${enableval-no}
+fi
+#TODO. Could use some M4 magic to avoid a lot of shell code.
+case $host_platform:$host_cpu in
+ at:i?86)
+ case $enable_device_drivers:'Linux device driver for Hermes or Prism 2
PCMCIA Wireless adapters (Orinoco); on ix86-at enabled
+ by default' in
+ default:*by\ default* | qemu:*for\ qemu*)
+ enableval=${enableval-yes};;
+ *)
+ enableval=${enableval-no};;
+ esac;;
+ *)
+ if [ x"$enableval" = xyes ]; then
+ # TODO. That might not always be true.
+ as_fn_error $? "cannot enable \`orinoco_cs' in this configuration."
"$LINENO" 5
+ fi;;
+esac
+ if [ x"$enableval" = xyes ]; then
+ device_driver_orinoco_cs_TRUE=
+ device_driver_orinoco_cs_FALSE='#'
+else
+ device_driver_orinoco_cs_TRUE='#'
+ device_driver_orinoco_cs_FALSE=
+fi
+
+if [ x"$enableval" = xyes ]; then
+ have_linux_code=yes
+
+$as_echo "#define CONFIG_ORINOCO_CS 1" >>confdefs.h
+
+ device_driver_group wireless
+fi
+
+
+#
+# Process device driver groups: kinds of drivers that have gobs of source files
+# that get brought in, need special symbols defined, etc.
+#
+
+if [ x"$device_driver_group_net" = xselected ]; then
+
+$as_echo "#define CONFIG_INET 1" >>confdefs.h
+
+ if true; then
+ device_driver_group_net_TRUE=
+ device_driver_group_net_FALSE='#'
+else
+ device_driver_group_net_TRUE='#'
+ device_driver_group_net_FALSE=
+fi
+
+else if false; then
+ device_driver_group_net_TRUE=
+ device_driver_group_net_FALSE='#'
+else
+ device_driver_group_net_TRUE='#'
+ device_driver_group_net_FALSE=
+fi
+
+fi
+
+if [ x"$device_driver_group_pcmcia" = xselected ]; then
+
+$as_echo "#define CONFIG_PCMCIA 1" >>confdefs.h
+
+ if true; then
+ device_driver_group_pcmcia_TRUE=
+ device_driver_group_pcmcia_FALSE='#'
+else
+ device_driver_group_pcmcia_TRUE='#'
+ device_driver_group_pcmcia_FALSE=
+fi
+
+else if false; then
+ device_driver_group_pcmcia_TRUE=
+ device_driver_group_pcmcia_FALSE='#'
+else
+ device_driver_group_pcmcia_TRUE='#'
+ device_driver_group_pcmcia_FALSE=
+fi
+
+fi
+
+if [ x"$device_driver_group_scsi" = xselected ]; then
+
+$as_echo "#define CONFIG_SCSI 1" >>confdefs.h
+
+ if true; then
+ device_driver_group_scsi_TRUE=
+ device_driver_group_scsi_FALSE='#'
+else
+ device_driver_group_scsi_TRUE='#'
+ device_driver_group_scsi_FALSE=
+fi
+
+else if false; then
+ device_driver_group_scsi_TRUE=
+ device_driver_group_scsi_FALSE='#'
+else
+ device_driver_group_scsi_TRUE='#'
+ device_driver_group_scsi_FALSE=
+fi
+
+fi
+
+if [ x"$device_driver_group_wireless" = xselected ]; then
+
+$as_echo "#define CONFIG_WIRELESS 1" >>confdefs.h
+
+fi
+
+#
+# Internals.
+#
+
+
+
+if [ "$have_linux_code" = yes ]; then
+ if true; then
+ CODE_linux_TRUE=
+ CODE_linux_FALSE='#'
+else
+ CODE_linux_TRUE='#'
+ CODE_linux_FALSE=
+fi
+
+
+ case $host_cpu in
+ i386)
+
+
+$as_echo "#define CONFIG_M386 1" >>confdefs.h
+
+
+$as_echo "#define CPU 386" >>confdefs.h
+;;
+ i486)
+
+
+$as_echo "#define CONFIG_M486 1" >>confdefs.h
+
+
+$as_echo "#define CPU 486" >>confdefs.h
+;;
+ i586)
+
+
+$as_echo "#define CONFIG_M586 1" >>confdefs.h
+
+
+$as_echo "#define CPU 586" >>confdefs.h
+;;
+ i686)
+
+
+$as_echo "#define CONFIG_M686 1" >>confdefs.h
+
+
+$as_echo "#define CPU 686" >>confdefs.h
+;;
+ *)
+ # TODO. Warn here?
+
+
+$as_echo "#define CONFIG_M486 1" >>confdefs.h
+
+
+$as_echo "#define CPU 486" >>confdefs.h
+;;
+ esac
+
+ # The glue code dependend code checks for this.
+
+$as_echo "#define LINUX_DEV 1" >>confdefs.h
+
+ # Instead of Mach's KERNEL, Linux uses __KERNEL__. Whee.
+
+$as_echo "#define __KERNEL__ 1" >>confdefs.h
+
+ if [ $mach_ncpus -gt 1 ]; then
+
+$as_echo "#define __SMP__ 1" >>confdefs.h
+
+ fi
+
+ # Set up `asm-SYSTYPE' links.
+ ac_config_links="$ac_config_links
linux/src/include/asm:linux/src/include/asm-$systype
linux/dev/include/asm:linux/dev/include/asm-$systype"
+
+else if false; then
+ CODE_linux_TRUE=
+ CODE_linux_FALSE='#'
+else
+ CODE_linux_TRUE='#'
+ CODE_linux_FALSE=
+fi
+
+fi
+
+
+
+#
+# Compiler features.
+#
+
+# Smashing stack protector.
+ssp_possible=yes
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler accepts
\`-fstack-protector'" >&5
+$as_echo_n "checking whether the compiler accepts \`-fstack-protector'... "
>&6; }
+# Is this a reliable test case?
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+void foo (void) { volatile char a[8]; a[3]; }
+_ACEOF
+# `$CC -c -o ...' might not be portable. But, oh, well... Is calling
+# `ac_compile' like this correct, after all?
+if eval "$ac_compile -S -fstack-protector -o conftest.s" 2> /dev/null; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ # Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
+ rm -f conftest.s
+else
+ ssp_possible=no
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+# Need that, because some distributions ship compilers that include
+# `-fstack-protector' in the default specs.
+ if [ x"$ssp_possible" = xyes ]; then
+ disable_smashing_stack_protector_TRUE=
+ disable_smashing_stack_protector_FALSE='#'
+else
+ disable_smashing_stack_protector_TRUE='#'
+ disable_smashing_stack_protector_FALSE=
+fi
+
+
+#
+# Output.
+#
+
+ac_config_headers="$ac_config_headers config.h"
+
+ac_config_files="$ac_config_files Makefile version.c"
+
+
+#
+# The remaining ugly, dark corners...
+#
+# Attention, parents: don't show this to your children...
+#
+
+#
+# config.status.dep.patch
+#
+# This is a (ugly --- I admit) bootstrap hack to get to-be-generated files
+# created before any other source files are compiled.
+#
+# See <http://lists.gnu.org/archive/html/automake/2006-05/msg00038.html>.
+#
+# We don't use `BUILT_SOURCES' (as it was suggested in the follow-up message),
+# as we also want things like `make SPECIFIC_TARGET' to work.
+#
+# This affair is especially ugly because internals are used (the `# dummy'
+# tag): internals that may be subject to changes. That's the reason why a
+# real patch is being used here and not some `sed' magic: to make it fail
+# loudly in case.
+#
+# For all shipped source files a dependency file is tried to be created where
+# it is simply stated that the respective source file depends on _all_
+# to-be-generated files. Depending on all of them doesn't do any harm, as they
+# will nevertheless have to be created, sooner or later. The problem is, that
+# `config.status' doesn't know about the source file of the file it is
+# currently creating the dependency file for. So we have it do an educated
+# guess... Later, when compiling the source files, these dependency files will
+# be rewritten to contain the files's actual dependencies. From then on this
+# bootstrap hack will be forgotten.
+#
+
+
+
+#
+# Fire.
+#
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`;
do
+ eval ac_val=\$$ac_var
+ case $ac_val in #(
+ *${as_nl}*)
+ case $ac_var in #(
+ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable
$ac_var contains a newline" >&5
+$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+ esac
+ case $ac_var in #(
+ _ | IFS | as_nl) ;; #(
+ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
+ *) { eval $ac_var=; unset $ac_var;} ;;
+ esac ;;
+ esac
+ done
+
+ (set) 2>&1 |
+ case $as_nl`(ac_space=' '; set) 2>&1` in #(
+ *${as_nl}ac_space=\ *)
+ # `set' does not quote correctly, so add quotes: double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \.
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;; #(
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+ ;;
+ esac |
+ sort
+) |
+ sed '
+ /^ac_cv_env_/b end
+ t clear
+ :clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+ if test -w "$cache_file"; then
+ if test "x$cache_file" != "x/dev/null"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+$as_echo "$as_me: updating cache $cache_file" >&6;}
+ if test ! -f "$cache_file" || test -h "$cache_file"; then
+ cat confcache >"$cache_file"
+ else
+ case $cache_file in #(
+ */* | ?:*)
+ mv -f confcache "$cache_file"$$ &&
+ mv -f "$cache_file"$$ "$cache_file" ;; #(
+ *)
+ mv -f confcache "$cache_file" ;;
+ esac
+ fi
+ fi
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache
$cache_file" >&5
+$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+ fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+U=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+ # 1. Remove the extension, and $U if already installed.
+ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
+ # will be set to the directory where LIBOBJS objects are built.
+ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are
newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+ if test -n "$am_sleep_pid"; then
+ # Hide warnings about reused PIDs.
+ wait $am_sleep_pid 2>/dev/null
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+ if test -n "$EXEEXT"; then
+ am__EXEEXT_TRUE=
+ am__EXEEXT_FALSE='#'
+else
+ am__EXEEXT_TRUE='#'
+ am__EXEEXT_FALSE=
+fi
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+ as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}";
then
+ as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+ as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${PLATFORM_xen_TRUE}" && test -z "${PLATFORM_xen_FALSE}"; then
+ as_fn_error $? "conditional \"PLATFORM_xen\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_pseudo_phys_TRUE}" && test -z
"${enable_pseudo_phys_FALSE}"; then
+ as_fn_error $? "conditional \"enable_pseudo_phys\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_pseudo_phys_TRUE}" && test -z
"${enable_pseudo_phys_FALSE}"; then
+ as_fn_error $? "conditional \"enable_pseudo_phys\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_pv_pagetables_TRUE}" && test -z
"${enable_pv_pagetables_FALSE}"; then
+ as_fn_error $? "conditional \"enable_pv_pagetables\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_pv_pagetables_TRUE}" && test -z
"${enable_pv_pagetables_FALSE}"; then
+ as_fn_error $? "conditional \"enable_pv_pagetables\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_pv_descriptors_TRUE}" && test -z
"${enable_pv_descriptors_FALSE}"; then
+ as_fn_error $? "conditional \"enable_pv_descriptors\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_pv_descriptors_TRUE}" && test -z
"${enable_pv_descriptors_FALSE}"; then
+ as_fn_error $? "conditional \"enable_pv_descriptors\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_ring1_TRUE}" && test -z "${enable_ring1_FALSE}"; then
+ as_fn_error $? "conditional \"enable_ring1\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_ring1_TRUE}" && test -z "${enable_ring1_FALSE}"; then
+ as_fn_error $? "conditional \"enable_ring1\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${PLATFORM_xen_TRUE}" && test -z "${PLATFORM_xen_FALSE}"; then
+ as_fn_error $? "conditional \"PLATFORM_xen\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_pseudo_phys_TRUE}" && test -z
"${enable_pseudo_phys_FALSE}"; then
+ as_fn_error $? "conditional \"enable_pseudo_phys\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_pv_pagetables_TRUE}" && test -z
"${enable_pv_pagetables_FALSE}"; then
+ as_fn_error $? "conditional \"enable_pv_pagetables\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_pv_descriptors_TRUE}" && test -z
"${enable_pv_descriptors_FALSE}"; then
+ as_fn_error $? "conditional \"enable_pv_descriptors\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_ring1_TRUE}" && test -z "${enable_ring1_FALSE}"; then
+ as_fn_error $? "conditional \"enable_ring1\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HOST_ix86_TRUE}" && test -z "${HOST_ix86_FALSE}"; then
+ as_fn_error $? "conditional \"HOST_ix86\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HOST_ix86_TRUE}" && test -z "${HOST_ix86_FALSE}"; then
+ as_fn_error $? "conditional \"HOST_ix86\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${PLATFORM_at_TRUE}" && test -z "${PLATFORM_at_FALSE}"; then
+ as_fn_error $? "conditional \"PLATFORM_at\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${PLATFORM_at_TRUE}" && test -z "${PLATFORM_at_FALSE}"; then
+ as_fn_error $? "conditional \"PLATFORM_at\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_lpr_TRUE}" && test -z "${enable_lpr_FALSE}"; then
+ as_fn_error $? "conditional \"enable_lpr\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_lpr_TRUE}" && test -z "${enable_lpr_FALSE}"; then
+ as_fn_error $? "conditional \"enable_lpr\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_pae_TRUE}" && test -z "${enable_pae_FALSE}"; then
+ as_fn_error $? "conditional \"enable_pae\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_pae_TRUE}" && test -z "${enable_pae_FALSE}"; then
+ as_fn_error $? "conditional \"enable_pae\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_kdb_TRUE}" && test -z "${enable_kdb_FALSE}"; then
+ as_fn_error $? "conditional \"enable_kdb\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_kdb_TRUE}" && test -z "${enable_kdb_FALSE}"; then
+ as_fn_error $? "conditional \"enable_kdb\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_kmsg_TRUE}" && test -z "${enable_kmsg_FALSE}"; then
+ as_fn_error $? "conditional \"enable_kmsg\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${enable_kmsg_TRUE}" && test -z "${enable_kmsg_FALSE}"; then
+ as_fn_error $? "conditional \"enable_kmsg\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_floppy_TRUE}" && test -z
"${device_driver_floppy_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_floppy\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_ide_TRUE}" && test -z
"${device_driver_ide_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_ide\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_53c78xx_TRUE}" && test -z
"${device_driver_53c78xx_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_53c78xx\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_AM53C974_TRUE}" && test -z
"${device_driver_AM53C974_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_AM53C974\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_BusLogic_TRUE}" && test -z
"${device_driver_BusLogic_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_BusLogic\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_NCR53c406a_TRUE}" && test -z
"${device_driver_NCR53c406a_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_NCR53c406a\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_advansys_TRUE}" && test -z
"${device_driver_advansys_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_advansys\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_aha152x_TRUE}" && test -z
"${device_driver_aha152x_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_aha152x\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_aha1542_TRUE}" && test -z
"${device_driver_aha1542_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_aha1542\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_aha1740_TRUE}" && test -z
"${device_driver_aha1740_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_aha1740\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_aic7xxx_TRUE}" && test -z
"${device_driver_aic7xxx_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_aic7xxx\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_dtc_TRUE}" && test -z
"${device_driver_dtc_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_dtc\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_eata_TRUE}" && test -z
"${device_driver_eata_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_eata\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_eata_dma_TRUE}" && test -z
"${device_driver_eata_dma_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_eata_dma\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_eata_pio_TRUE}" && test -z
"${device_driver_eata_pio_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_eata_pio\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_fdomain_TRUE}" && test -z
"${device_driver_fdomain_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_fdomain\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_g_NCR5380_TRUE}" && test -z
"${device_driver_g_NCR5380_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_g_NCR5380\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_gdth_TRUE}" && test -z
"${device_driver_gdth_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_gdth\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_in2000_TRUE}" && test -z
"${device_driver_in2000_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_in2000\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_ncr53c8xx_TRUE}" && test -z
"${device_driver_ncr53c8xx_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_ncr53c8xx\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_pas16_TRUE}" && test -z
"${device_driver_pas16_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_pas16\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_ppa_TRUE}" && test -z
"${device_driver_ppa_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_ppa\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_qlogicfas_TRUE}" && test -z
"${device_driver_qlogicfas_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_qlogicfas\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_qlogicisp_TRUE}" && test -z
"${device_driver_qlogicisp_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_qlogicisp\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_seagate_TRUE}" && test -z
"${device_driver_seagate_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_seagate\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_sym53c8xx_TRUE}" && test -z
"${device_driver_sym53c8xx_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_sym53c8xx\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_t128_TRUE}" && test -z
"${device_driver_t128_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_t128\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_tmscsim_TRUE}" && test -z
"${device_driver_tmscsim_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_tmscsim\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_u14_34f_TRUE}" && test -z
"${device_driver_u14_34f_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_u14_34f\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_ultrastor_TRUE}" && test -z
"${device_driver_ultrastor_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_ultrastor\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_wd7000_TRUE}" && test -z
"${device_driver_wd7000_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_wd7000\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_3c501_TRUE}" && test -z
"${device_driver_3c501_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_3c501\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_3c503_TRUE}" && test -z
"${device_driver_3c503_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_3c503\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_3c505_TRUE}" && test -z
"${device_driver_3c505_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_3c505\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_3c507_TRUE}" && test -z
"${device_driver_3c507_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_3c507\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_3c509_TRUE}" && test -z
"${device_driver_3c509_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_3c509\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_3c59x_TRUE}" && test -z
"${device_driver_3c59x_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_3c59x\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_3c515_TRUE}" && test -z
"${device_driver_3c515_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_3c515\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_ac3200_TRUE}" && test -z
"${device_driver_ac3200_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_ac3200\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_apricot_TRUE}" && test -z
"${device_driver_apricot_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_apricot\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_at1700_TRUE}" && test -z
"${device_driver_at1700_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_at1700\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_atp_TRUE}" && test -z
"${device_driver_atp_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_atp\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_de4x5_TRUE}" && test -z
"${device_driver_de4x5_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_de4x5\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_de600_TRUE}" && test -z
"${device_driver_de600_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_de600\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_de620_TRUE}" && test -z
"${device_driver_de620_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_de620\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_depca_TRUE}" && test -z
"${device_driver_depca_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_depca\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_e2100_TRUE}" && test -z
"${device_driver_e2100_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_e2100\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_eepro_TRUE}" && test -z
"${device_driver_eepro_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_eepro\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_eepro100_TRUE}" && test -z
"${device_driver_eepro100_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_eepro100\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_eexpress_TRUE}" && test -z
"${device_driver_eexpress_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_eexpress\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_epic100_TRUE}" && test -z
"${device_driver_epic100_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_epic100\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_eth16i_TRUE}" && test -z
"${device_driver_eth16i_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_eth16i\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_ewrk3_TRUE}" && test -z
"${device_driver_ewrk3_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_ewrk3\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_fmv18x_TRUE}" && test -z
"${device_driver_fmv18x_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_fmv18x\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_hamachi_TRUE}" && test -z
"${device_driver_hamachi_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_hamachi\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_hp_plus_TRUE}" && test -z
"${device_driver_hp_plus_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_hp_plus\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_hp_TRUE}" && test -z "${device_driver_hp_FALSE}";
then
+ as_fn_error $? "conditional \"device_driver_hp\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_hp100_TRUE}" && test -z
"${device_driver_hp100_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_hp100\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_intel_gige_TRUE}" && test -z
"${device_driver_intel_gige_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_intel_gige\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_lance_TRUE}" && test -z
"${device_driver_lance_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_lance\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_myson803_TRUE}" && test -z
"${device_driver_myson803_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_myson803\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_natsemi_TRUE}" && test -z
"${device_driver_natsemi_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_natsemi\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_ne_TRUE}" && test -z "${device_driver_ne_FALSE}";
then
+ as_fn_error $? "conditional \"device_driver_ne\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_ne2k_pci_TRUE}" && test -z
"${device_driver_ne2k_pci_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_ne2k_pci\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_ni52_TRUE}" && test -z
"${device_driver_ni52_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_ni52\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_ni65_TRUE}" && test -z
"${device_driver_ni65_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_ni65\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_ns820_TRUE}" && test -z
"${device_driver_ns820_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_ns820\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_pcnet32_TRUE}" && test -z
"${device_driver_pcnet32_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_pcnet32\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_rtl8139_TRUE}" && test -z
"${device_driver_rtl8139_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_rtl8139\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_seeq8005_TRUE}" && test -z
"${device_driver_seeq8005_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_seeq8005\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_sis900_TRUE}" && test -z
"${device_driver_sis900_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_sis900\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_sk_g16_TRUE}" && test -z
"${device_driver_sk_g16_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_sk_g16\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_smc_ultra_TRUE}" && test -z
"${device_driver_smc_ultra_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_smc_ultra\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_smc_ultra32_TRUE}" && test -z
"${device_driver_smc_ultra32_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_smc_ultra32\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_starfire_TRUE}" && test -z
"${device_driver_starfire_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_starfire\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_sundance_TRUE}" && test -z
"${device_driver_sundance_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_sundance\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_tlan_TRUE}" && test -z
"${device_driver_tlan_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_tlan\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_tulip_TRUE}" && test -z
"${device_driver_tulip_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_tulip\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_via_rhine_TRUE}" && test -z
"${device_driver_via_rhine_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_via_rhine\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_wavelan_TRUE}" && test -z
"${device_driver_wavelan_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_wavelan\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_wd_TRUE}" && test -z "${device_driver_wd_FALSE}";
then
+ as_fn_error $? "conditional \"device_driver_wd\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_winbond_840_TRUE}" && test -z
"${device_driver_winbond_840_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_winbond_840\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_yellowfin_TRUE}" && test -z
"${device_driver_yellowfin_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_yellowfin\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_znet_TRUE}" && test -z
"${device_driver_znet_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_znet\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_i82365_TRUE}" && test -z
"${device_driver_i82365_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_i82365\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_pcmcia_isa_TRUE}" && test -z
"${device_driver_pcmcia_isa_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_pcmcia_isa\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_3c574_cs_TRUE}" && test -z
"${device_driver_3c574_cs_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_3c574_cs\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_3c589_cs_TRUE}" && test -z
"${device_driver_3c589_cs_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_3c589_cs\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_axnet_cs_TRUE}" && test -z
"${device_driver_axnet_cs_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_axnet_cs\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_fmvj18x_cs_TRUE}" && test -z
"${device_driver_fmvj18x_cs_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_fmvj18x_cs\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_nmclan_cs_TRUE}" && test -z
"${device_driver_nmclan_cs_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_nmclan_cs\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_pcnet_cs_TRUE}" && test -z
"${device_driver_pcnet_cs_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_pcnet_cs\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_smc91c92_cs_TRUE}" && test -z
"${device_driver_smc91c92_cs_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_smc91c92_cs\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_xirc2ps_cs_TRUE}" && test -z
"${device_driver_xirc2ps_cs_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_xirc2ps_cs\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_orinoco_cs_TRUE}" && test -z
"${device_driver_orinoco_cs_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_orinoco_cs\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_group_net_TRUE}" && test -z
"${device_driver_group_net_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_group_net\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_group_net_TRUE}" && test -z
"${device_driver_group_net_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_group_net\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_group_pcmcia_TRUE}" && test -z
"${device_driver_group_pcmcia_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_group_pcmcia\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_group_pcmcia_TRUE}" && test -z
"${device_driver_group_pcmcia_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_group_pcmcia\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_group_scsi_TRUE}" && test -z
"${device_driver_group_scsi_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_group_scsi\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${device_driver_group_scsi_TRUE}" && test -z
"${device_driver_group_scsi_FALSE}"; then
+ as_fn_error $? "conditional \"device_driver_group_scsi\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CODE_linux_TRUE}" && test -z "${CODE_linux_FALSE}"; then
+ as_fn_error $? "conditional \"CODE_linux\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${CODE_linux_TRUE}" && test -z "${CODE_linux_FALSE}"; then
+ as_fn_error $? "conditional \"CODE_linux\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${disable_smashing_stack_protector_TRUE}" && test -z
"${disable_smashing_stack_protector_FALSE}"; then
+ as_fn_error $? "conditional \"disable_smashing_stack_protector\" was never
defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+: "${CONFIG_STATUS=./config.status}"
+ac_write_fail=0
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+as_write_fail=0
+cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+
+SHELL=\${CONFIG_SHELL-$SHELL}
+export SHELL
+_ASEOF
+cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+ emulate sh
+ NULLCMD=:
+ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in #(
+ *posix*) :
+ set -o posix ;; #(
+ *) :
+ ;;
+esac
+fi
+
+
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='print -r --'
+ as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+ as_echo='printf %s\n'
+ as_echo_n='printf %s'
+else
+ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo";
then
+ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+ as_echo_n='/usr/ucb/echo -n'
+ else
+ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+ as_echo_n_body='eval
+ arg=$1;
+ case $arg in #(
+ *"$as_nl"*)
+ expr "X$arg" : "X\\(.*\\)$as_nl";
+ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+ esac;
+ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+ '
+ export as_echo_n_body
+ as_echo_n='sh -c $as_echo_n_body as_echo'
+ fi
+ export as_echo_body
+ as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+ PATH_SEPARATOR=:
+ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+ PATH_SEPARATOR=';'
+ }
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order. Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+IFS=" "" $as_nl"
+
+# Find who we are. Look in the path if we contain no directory separator.
+as_myself=
+case $0 in #((
+ *[\\/]* ) as_myself=$0 ;;
+ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+ done
+IFS=$as_save_IFS
+
+ ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+ as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file
name" >&2
+ exit 1
+fi
+
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there. '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+
+# as_fn_error STATUS ERROR [LINENO LOG_FD]
+# ----------------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with STATUS, using 1 if that was 0.
+as_fn_error ()
+{
+ as_status=$1; test $as_status -eq 0 && as_status=1
+ if test "$4"; then
+ as_lineno=${as_lineno-"$3"}
as_lineno_stack=as_lineno_stack=$as_lineno_stack
+ $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+ fi
+ $as_echo "$as_me: error: $2" >&2
+ as_fn_exit $as_status
+} # as_fn_error
+
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+ return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+ set +e
+ as_fn_set_status $1
+ exit $1
+} # as_fn_exit
+
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+ { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+ eval 'as_fn_append ()
+ {
+ eval $1+=\$2
+ }'
+else
+ as_fn_append ()
+ {
+ eval $1=\$$1\$2
+ }
+fi # as_fn_append
+
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+ eval 'as_fn_arith ()
+ {
+ as_val=$(( $* ))
+ }'
+else
+ as_fn_arith ()
+ {
+ as_val=`expr "$@" || test $? -eq 1`
+ }
+fi # as_fn_arith
+
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+ test "X`expr 00001 : '.*\(...\)'`" = X001; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+ as_basename=basename
+else
+ as_basename=false
+fi
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+ as_dirname=dirname
+else
+ as_dirname=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+ X"$0" : 'X\(//\)$' \| \
+ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+ sed '/^.*\/\([^/][^/]*\)\/*$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\/\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in #(((((
+-n*)
+ case `echo 'xy\c'` in
+ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
+ xy) ECHO_C='\c';;
+ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
+ ECHO_T=' ';;
+ esac;;
+*)
+ ECHO_N='-n';;
+esac
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+ rm -f conf$$.dir/conf$$.file
+else
+ rm -f conf$$.dir
+ mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+ if ln -s conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s='ln -s'
+ # ... but there are two gotchas:
+ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+ # In both cases, we have to default to `cp -pR'.
+ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+ as_ln_s='cp -pR'
+ elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+ else
+ as_ln_s='cp -pR'
+ fi
+else
+ as_ln_s='cp -pR'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
+
+ case $as_dir in #(
+ -*) as_dir=./$as_dir;;
+ esac
+ test -d "$as_dir" || eval $as_mkdir_p || {
+ as_dirs=
+ while :; do
+ case $as_dir in #(
+ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+ *) as_qdir=$as_dir;;
+ esac
+ as_dirs="'$as_qdir' $as_dirs"
+ as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$as_dir" : 'X\(//\)[^/]' \| \
+ X"$as_dir" : 'X\(//\)$' \| \
+ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ test -d "$as_dir" && break
+ done
+ test -z "$as_dirs" || eval "mkdir $as_dirs"
+ } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
+
+
+} # as_fn_mkdir_p
+if mkdir -p . 2>/dev/null; then
+ as_mkdir_p='mkdir -p "$as_dir"'
+else
+ test -d ./-p && rmdir ./-p
+ as_mkdir_p=false
+fi
+
+
+# as_fn_executable_p FILE
+# -----------------------
+# Test if FILE is an executable regular file.
+as_fn_executable_p ()
+{
+ test -f "$1" && test -x "$1"
+} # as_fn_executable_p
+as_test_x='test -x'
+as_executable_p=as_fn_executable_p
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed
'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+## ----------------------------------- ##
+## Main body of $CONFIG_STATUS script. ##
+## ----------------------------------- ##
+_ASEOF
+test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# Save the log message, to keep $0 and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by GNU Mach $as_me 1.4, which was
+generated by GNU Autoconf 2.69. Invocation command line was
+
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+case $ac_config_files in *"
+"*) set x $ac_config_files; shift; ac_config_files=$*;;
+esac
+
+case $ac_config_headers in *"
+"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
+esac
+
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_links="$ac_config_links"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ac_cs_usage="\
+\`$as_me' instantiates files and other configuration actions
+from templates according to the current configuration. Unless the files
+and actions are specified as TAGs, all are instantiated by default.
+
+Usage: $0 [OPTION]... [TAG]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number and configuration settings, then exit
+ --config print configuration, then exit
+ -q, --quiet, --silent
+ do not print progress messages
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration links:
+$config_links
+
+Configuration commands:
+$config_commands
+
+Report bugs to <address@hidden>.
+General help using GNU software: <http://www.gnu.org/gethelp/>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //;
s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_version="\\
+GNU Mach config.status 1.4
+configured by $0, generated by GNU Autoconf 2.69,
+ with options \\"\$ac_cs_config\\"
+
+Copyright (C) 2012 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+AWK='$AWK'
+test -n "\$AWK" || AWK=awk
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# The default lists apply if the user does not specify any file.
+ac_need_defaults=:
+while test $# != 0
+do
+ case $1 in
+ --*=?*)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+ ac_shift=:
+ ;;
+ --*=)
+ ac_option=`expr "X$1" : 'X\([^=]*\)='`
+ ac_optarg=
+ ac_shift=:
+ ;;
+ *)
+ ac_option=$1
+ ac_optarg=$2
+ ac_shift=shift
+ ;;
+ esac
+
+ case $ac_option in
+ # Handling of the options.
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ ac_cs_recheck=: ;;
+ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+ $as_echo "$ac_cs_version"; exit ;;
+ --config | --confi | --conf | --con | --co | --c )
+ $as_echo "$ac_cs_config"; exit ;;
+ --debug | --debu | --deb | --de | --d | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ '') as_fn_error $? "missing file argument" ;;
+ esac
+ as_fn_append CONFIG_FILES " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ $ac_shift
+ case $ac_optarg in
+ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+ esac
+ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
+ ac_need_defaults=false;;
+ --he | --h)
+ # Conflict between --help and --header
+ as_fn_error $? "ambiguous option: \`$1'
+Try \`$0 --help' for more information.";;
+ --help | --hel | -h )
+ $as_echo "$ac_cs_usage"; exit ;;
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil | --si | --s)
+ ac_cs_silent=: ;;
+
+ # This is an error.
+ -*) as_fn_error $? "unrecognized option: \`$1'
+Try \`$0 --help' for more information." ;;
+
+ *) as_fn_append ac_config_targets " $1"
+ ac_need_defaults=false ;;
+
+ esac
+ shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+ exec 6>/dev/null
+ ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+if \$ac_cs_recheck; then
+ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create
--no-recursion
+ shift
+ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+ CONFIG_SHELL='$SHELL'
+ export CONFIG_SHELL
+ exec "\$@"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+exec 5>>config.log
+{
+ echo
+ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+ $as_echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+ case $ac_config_target in
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "tests/test-mbchk") CONFIG_FILES="$CONFIG_FILES tests/test-mbchk" ;;
+ "machine") CONFIG_LINKS="$CONFIG_LINKS machine:$systype/$systype" ;;
+ "mach/machine") CONFIG_LINKS="$CONFIG_LINKS
mach/machine:$systype/include/mach/$systype" ;;
+ "linux/src/include/asm") CONFIG_LINKS="$CONFIG_LINKS
linux/src/include/asm:linux/src/include/asm-$systype" ;;
+ "linux/dev/include/asm") CONFIG_LINKS="$CONFIG_LINKS
linux/dev/include/asm:linux/dev/include/asm-$systype" ;;
+ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "version.c") CONFIG_FILES="$CONFIG_FILES version.c" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+ esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience. Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+ tmp= ac_tmp=
+ trap 'exit_status=$?
+ : "${ac_tmp:=$tmp}"
+ { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
+' 0
+ trap 'as_fn_exit 1' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+ test -d "$tmp"
+} ||
+{
+ tmp=./conf$$-$RANDOM
+ (umask 077 && mkdir "$tmp")
+} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
+
+# Set up the scripts for CONFIG_FILES section.
+# No need to generate them if there are no CONFIG_FILES.
+# This happens for instance with `./config.status config.h'.
+if test -n "$CONFIG_FILES"; then
+
+
+ac_cr=`echo X | tr X '\015'`
+# On cygwin, bash can eat \r inside `` if the user requested igncr.
+# But we know of no other shell where ac_cr would be empty at this
+# point, so we can use a bashism as a fallback.
+if test "x$ac_cr" = x; then
+ eval ac_cr=\$\'\\r\'
+fi
+ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
+if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
+ ac_cs_awk_cr='\\r'
+else
+ ac_cs_awk_cr=$ac_cr
+fi
+
+echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
+_ACEOF
+
+
+{
+ echo "cat >conf$$subs.awk <<_ACEOF" &&
+ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
+ echo "_ACEOF"
+} >conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+ . ./conf$$subs.sh ||
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+
+ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
+ if test $ac_delim_n = $ac_delim_num; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+rm -f conf$$subs.sh
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
+_ACEOF
+sed -n '
+h
+s/^/S["/; s/!.*/"]=/
+p
+g
+s/^[^!]*!//
+:repl
+t repl
+s/'"$ac_delim"'$//
+t delim
+:nl
+h
+s/\(.\{148\}\)..*/\1/
+t more1
+s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
+p
+n
+b repl
+:more1
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t nl
+:delim
+h
+s/\(.\{148\}\)..*/\1/
+t more2
+s/["\\]/\\&/g; s/^/"/; s/$/"/
+p
+b
+:more2
+s/["\\]/\\&/g; s/^/"/; s/$/"\\/
+p
+g
+s/.\{148\}//
+t delim
+' <conf$$subs.awk | sed '
+/^[^""]/{
+ N
+ s/\n//
+}
+' >>$CONFIG_STATUS || ac_write_fail=1
+rm -f conf$$subs.awk
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+_ACAWK
+cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
+ for (key in S) S_is_set[key] = 1
+ FS = ""
+
+}
+{
+ line = $ 0
+ nfields = split(line, field, "@")
+ substed = 0
+ len = length(field[1])
+ for (i = 2; i < nfields; i++) {
+ key = field[i]
+ keylen = length(key)
+ if (S_is_set[key]) {
+ value = S[key]
+ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
+ len += length(value) + length(field[++i])
+ substed = 1
+ } else
+ len += 1 + keylen
+ }
+
+ print line
+}
+
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
+ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
+else
+ cat
+fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
+_ACEOF
+
+# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{
+h
+s///
+s/^/:/
+s/[ ]*$/:/
+s/:\$(srcdir):/:/g
+s/:\${srcdir}:/:/g
+s/:@srcdir@:/:/g
+s/^:*//
+s/:*$//
+x
+s/\(=[ ]*\).*/\1/
+G
+s/\n//
+s/^[^=]*=[ ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+fi # test -n "$CONFIG_FILES"
+
+# Set up the scripts for CONFIG_HEADERS section.
+# No need to generate them if there are no CONFIG_HEADERS.
+# This happens for instance with `./config.status Makefile'.
+if test -n "$CONFIG_HEADERS"; then
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
+BEGIN {
+_ACEOF
+
+# Transform confdefs.h into an awk script `defines.awk', embedded as
+# here-document in config.status, that substitutes the proper values into
+# config.h.in to produce config.h.
+
+# Create a delimiter string that does not exist in confdefs.h, to ease
+# handling of long lines.
+ac_delim='%!_!# '
+for ac_last_try in false false :; do
+ ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+ if test -z "$ac_tt"; then
+ break
+ elif $ac_last_try; then
+ as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
+ else
+ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+ fi
+done
+
+# For the awk script, D is an array of macro values keyed by name,
+# likewise P contains macro parameters if any. Preserve backslash
+# newline sequences.
+
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+sed -n '
+s/.\{148\}/&'"$ac_delim"'/g
+t rset
+:rset
+s/^[ ]*#[ ]*define[ ][ ]*/ /
+t def
+d
+:def
+s/\\$//
+t bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3"/p
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
+d
+:bsnl
+s/["\\]/\\&/g
+s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
+D["\1"]=" \3\\\\\\n"\\/p
+t cont
+s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
+t cont
+d
+:cont
+n
+s/.\{148\}/&'"$ac_delim"'/g
+t clear
+:clear
+s/\\$//
+t bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/"/p
+d
+:bsnlc
+s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
+b cont
+' <confdefs.h | sed '
+s/'"$ac_delim"'/"\\\
+"/g' >>$CONFIG_STATUS || ac_write_fail=1
+
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ for (key in D) D_is_set[key] = 1
+ FS = ""
+}
+/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
+ line = \$ 0
+ split(line, arg, " ")
+ if (arg[1] == "#") {
+ defundef = arg[2]
+ mac1 = arg[3]
+ } else {
+ defundef = substr(arg[1], 2)
+ mac1 = arg[2]
+ }
+ split(mac1, mac2, "(") #)
+ macro = mac2[1]
+ prefix = substr(line, 1, index(line, defundef) - 1)
+ if (D_is_set[macro]) {
+ # Preserve the white space surrounding the "#".
+ print prefix "define", macro P[macro] D[macro]
+ next
+ } else {
+ # Replace #undef with comments. This is necessary, for example,
+ # in the case of _POSIX_SOURCE, which is predefined and required
+ # on some systems where configure will not decide to define it.
+ if (defundef == "undef") {
+ print "/*", prefix defundef, macro, "*/"
+ next
+ }
+ }
+}
+{ print }
+_ACAWK
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+ as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
+fi # test -n "$CONFIG_HEADERS"
+
+
+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C
$CONFIG_COMMANDS"
+shift
+for ac_tag
+do
+ case $ac_tag in
+ :[FHLC]) ac_mode=$ac_tag; continue;;
+ esac
+ case $ac_mode$ac_tag in
+ :[FHL]*:*);;
+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
+ :[FH]-) ac_tag=-:-;;
+ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+ esac
+ ac_save_IFS=$IFS
+ IFS=:
+ set x $ac_tag
+ IFS=$ac_save_IFS
+ shift
+ ac_file=$1
+ shift
+
+ case $ac_mode in
+ :L) ac_source=$1;;
+ :[FH])
+ ac_file_inputs=
+ for ac_f
+ do
+ case $ac_f in
+ -) ac_f="$ac_tmp/stdin";;
+ *) # Look for the file first in the build tree, then in the source tree
+ # (if the path is not absolute). The absolute path cannot be
DOS-style,
+ # because $ac_f cannot contain `:'.
+ test -f "$ac_f" ||
+ case $ac_f in
+ [\\/$]*) false;;
+ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+ esac ||
+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+ esac
+ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;;
esac
+ as_fn_append ac_file_inputs " '$ac_f'"
+ done
+
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated by config.status. */
+ configure_input='Generated from '`
+ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+ `' by configure.'
+ if test x"$ac_file" != x-; then
+ configure_input="$ac_file. $configure_input"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+$as_echo "$as_me: creating $ac_file" >&6;}
+ fi
+ # Neutralize special characters interpreted by sed in replacement strings.
+ case $configure_input in #(
+ *\&* | *\|* | *\\* )
+ ac_sed_conf_input=`$as_echo "$configure_input" |
+ sed 's/[\\\\&|]/\\\\&/g'`;; #(
+ *) ac_sed_conf_input=$configure_input;;
+ esac
+
+ case $ac_tag in
+ *:-:* | *:-) cat >"$ac_tmp/stdin" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
+ esac
+ ;;
+ esac
+
+ ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir="$ac_dir"; as_fn_mkdir_p
+ ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+ # A ".." for each directory in $ac_dir_suffix.
+ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed
's|/[^\\/]*|/..|g;s|/||'`
+ case $ac_top_builddir_sub in
+ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+ esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+ .) # We are building in place.
+ ac_srcdir=.
+ ac_top_srcdir=$ac_top_builddir_sub
+ ac_abs_top_srcdir=$ac_pwd ;;
+ [\\/]* | ?:[\\/]* ) # Absolute name.
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir
+ ac_abs_top_srcdir=$srcdir ;;
+ *) # Relative name.
+ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_top_build_prefix$srcdir
+ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+ case $ac_mode in
+ :F)
+ #
+ # CONFIG_FILE
+ #
+
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+ esac
+ ac_MKDIR_P=$MKDIR_P
+ case $MKDIR_P in
+ [\\/$]* | ?:[\\/]* ) ;;
+ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+ esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+ac_sed_dataroot='
+/datarootdir/ {
+ p
+ q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p'
+case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
+*datarootdir*) ac_datarootdir_seen=yes;;
address@hidden@*|address@hidden@*|address@hidden@*|address@hidden@*|address@hidden@*)
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to
ignore the --datarootdir setting" >&5
+$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir
setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ ac_datarootdir_hack='
+ s&@datadir@&$datadir&g
+ s&@docdir@&$docdir&g
+ s&@infodir@&$infodir&g
+ s&@localedir@&$localedir&g
+ s&@mandir@&$mandir&g
+ s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+ac_sed_extra="$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s|@configure_input@|$ac_sed_conf_input|;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@top_build_prefix@&$ac_top_build_prefix&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+"
+eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+ { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
+ "$ac_tmp/out"`; test -z "$ac_out"; } &&
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a
reference to the variable \`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&5
+$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable
\`datarootdir'
+which seems to be undefined. Please make sure it is defined" >&2;}
+
+ rm -f "$ac_tmp/stdin"
+ case $ac_file in
+ -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+ *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
+ esac \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ ;;
+ :H)
+ #
+ # CONFIG_HEADER
+ #
+ if test x"$ac_file" != x-; then
+ {
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+ } >"$ac_tmp/config.h" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+$as_echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ rm -f "$ac_file"
+ mv "$ac_tmp/config.h" "$ac_file" \
+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+ fi
+ else
+ $as_echo "/* $configure_input */" \
+ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+ || as_fn_error $? "could not create -" "$LINENO" 5
+ fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+ case $_am_header in
+ $_am_arg | $_am_arg:* )
+ break ;;
+ * )
+ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+ esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$_am_arg" : 'X\(//\)[^/]' \| \
+ X"$_am_arg" : 'X\(//\)$' \| \
+ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+ :L)
+ #
+ # CONFIG_LINK
+ #
+
+ if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then
+ :
+ else
+ # Prefer the file from the source tree if names are identical.
+ if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then
+ ac_source=$srcdir/$ac_source
+ fi
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file"
>&5
+$as_echo "$as_me: linking $ac_source to $ac_file" >&6;}
+
+ if test ! -r "$ac_source"; then
+ as_fn_error $? "$ac_source: file not found" "$LINENO" 5
+ fi
+ rm -f "$ac_file"
+
+ # Try a relative symlink, then a hard link, then a copy.
+ case $ac_source in
+ [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;;
+ *) ac_rel_source=$ac_top_build_prefix$ac_source ;;
+ esac
+ ln -s "$ac_rel_source" "$ac_file" 2>/dev/null ||
+ ln "$ac_source" "$ac_file" 2>/dev/null ||
+ cp -p "$ac_source" "$ac_file" ||
+ as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5
+ fi
+ ;;
+ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands"
>&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+ esac
+
+
+ case $ac_file$ac_mode in
+ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+ # Older Autoconf quotes --file arguments for eval, but not when files
+ # are listed without --file. Let's play safe and only enable the eval
+ # if we detect the quoting.
+ case $CONFIG_FILES in
+ *\'*) eval set x "$CONFIG_FILES" ;;
+ *) set x $CONFIG_FILES ;;
+ esac
+ shift
+ for mf
+ do
+ # Strip MF so we end up with the name of the file.
+ mf=`echo "$mf" | sed -e 's/:.*$//'`
+ # Check whether this is an Automake generated Makefile or not.
+ # We used to match only the files named 'Makefile.in', but
+ # some people rename them; so instead we look at the file content.
+ # Grep'ing the first line is not enough: some people post-process
+ # each Makefile.in and add a new line on top of each file to say so.
+ # Grep'ing the whole file is not good either: AIX grep has a line
+ # limit of 2048, but all sed's we know have understand at least 4000.
+ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null
2>&1; then
+ dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$mf" : 'X\(//\)[^/]' \| \
+ X"$mf" : 'X\(//\)$' \| \
+ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$mf" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ else
+ continue
+ fi
+ # Extract the definition of DEPDIR, am__include, and am__quote
+ # from the Makefile without running 'make'.
+ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+ test -z "$DEPDIR" && continue
+ am__include=`sed -n 's/^am__include = //p' < "$mf"`
+ test -z "$am__include" && continue
+ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+ # Find all dependency output files, they are included files with
+ # $(DEPDIR) in their names. We invoke sed twice because it is the
+ # simplest approach to changing $(DEPDIR) to its actual value in the
+ # expansion.
+ for file in `sed -n "
+ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
+ # Make sure the directory exists.
+ test -f "$dirpart/$file" && continue
+ fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$file" : 'X\(//\)[^/]' \| \
+ X"$file" : 'X\(//\)$' \| \
+ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)[^/].*/{
+ s//\1/
+ q
+ }
+ /^X\(\/\/\)$/{
+ s//\1/
+ q
+ }
+ /^X\(\/\).*/{
+ s//\1/
+ q
+ }
+ s/.*/./; q'`
+ as_dir=$dirpart/$fdir; as_fn_mkdir_p
+ # echo "creating $dirpart/$file"
+ echo '# dummy' > "$dirpart/$file"
+ done
+ done
+}
+ ;;
+ "tests/test-mbchk":F) chmod +x tests/test-mbchk ;;
+
+ esac
+done # for ac_tag
+
+
+as_fn_exit 0
+_ACEOF
+ac_clean_files=$ac_clean_files_save
+
+test $ac_write_fail = 0 ||
+ as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
+
+
+ if "$PATCH" -f < "$srcdir"/config.status.dep.patch
+ then { $as_echo "$as_me:${as_lineno-$LINENO}: Applied a patch to work around
a deficiency in
+ Automake. See \`configure.ac' for details." >&5
+$as_echo "$as_me: Applied a patch to work around a deficiency in
+ Automake. See \`configure.ac' for details." >&6;}
+ else as_fn_error $? "failed to patch using \`config.status.dep.patch'.
+ You have a serious problem. Please contact <$PACKAGE_BUGREPORT>."
"$LINENO" 5
+ fi
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ ac_config_status_args=
+ test "$silent" = yes &&
+ ac_config_status_args="$ac_config_status_args --quiet"
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || as_fn_exit 1
+fi
+if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no;
then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options:
$ac_unrecognized_opts" >&5
+$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+fi
+
diff --git a/ddb/db_write_cmd.h b/ddb/db_write_cmd.h
deleted file mode 100644
index 74bac54..0000000
--- a/ddb/db_write_cmd.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef _DDB_DB_WRITE_CMD_H_
-#define _DDB_DB_WRITE_CMD_H_
-
-#include <mach/boolean.h>
-#include <machine/db_machdep.h>
-
-/* Prototypes for functions exported by this module.
- */
-
-void db_write_cmd(
- db_expr_t address,
- boolean_t have_addr,
- db_expr_t count,
- char * modif);
-
-#endif /* !_DDB_DB_WRITE_CMD_H_ */
diff --git a/device/dev_forward.defs b/device/dev_forward.defs
deleted file mode 100644
index a237bb8..0000000
--- a/device/dev_forward.defs
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1991,1990 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or address@hidden
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- */
-/*
- * Author: Joseph S. Barrera, Carnegie Mellon University
- * Date: 12/90
- */
-
-subsystem KernelUser dev_forward 2800;
-
-#include <mach/std_types.defs>
-#include <mach/mach_types.defs>
-#include <device/device_types.defs>
-
-type reply_port_t = MACH_MSG_TYPE_MOVE_SEND_ONCE | polymorphic
- ctype: mach_port_t;
-
-simpleroutine forward_device_open_send(
- master_port : mach_port_t;
- ureplyport reply_port : reply_port_t;
- mode : dev_mode_t;
- name : dev_name_t);
diff --git a/doc/.gitignore b/doc/.gitignore
deleted file mode 100644
index 829355b..0000000
--- a/doc/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-/*.info
-/*.info-*
-/stamp-vti
-/version.texi
diff --git a/doc/mach.info b/doc/mach.info
new file mode 100644
index 0000000..19fab2e
--- /dev/null
+++ b/doc/mach.info
@@ -0,0 +1,163 @@
+This is mach.info, produced by makeinfo version 5.1 from mach.texi.
+
+This file documents the GNU Mach microkernel.
+
+ This is edition 0.4, last updated on 27 September 2013, of 'The GNU
+Mach Reference Manual', for version 1.4.
+
+ Copyright (C) 2001, 2002, 2006, 2007, 2008 Free Software Foundation,
+Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.2 or any later version published by the Free Software
+ Foundation; with no Invariant Section, with no Front-Cover Texts,
+ and with no Back-Cover Texts. A copy of the license is included in
+ the section entitled "GNU Free Documentation License".
+
+ This work is based on manual pages under the following copyright
+ and license:
+
+ Mach Operating System
+ Copyright (C) 1991,1990 Carnegie Mellon University
+ All Rights Reserved.
+
+ Permission to use, copy, modify and distribute this software and
+ its documentation is hereby granted, provided that both the
+ copyright notice and this permission notice appear in all copies of
+ the software, derivative works or modified versions, and any
+ portions thereof, and that both notices appear in supporting
+ documentation.
+
+ CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+ CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
+ ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+INFO-DIR-SECTION Kernel
+START-INFO-DIR-ENTRY
+* GNUMach: (mach). Using and programming the GNU Mach microkernel.
+END-INFO-DIR-ENTRY
+
+
+Indirect:
+mach.info-1: 1631
+mach.info-2: 304236
+
+Tag Table:
+(Indirect)
+Node: Top1631
+Node: Introduction11181
+Node: Audience12012
+Node: Features13047
+Node: Overview14874
+Node: History16067
+Node: Installing16212
+Node: Binary Distributions17437
+Node: Compilation18245
+Node: Configuration19478
+Node: Cross-Compilation35889
+Node: Bootstrap36670
+Ref: Bootstrap-Footnote-137113
+Node: Bootloader37350
+Ref: Bootloader-Footnote-138630
+Node: Modules38716
+Node: Inter Process Communication39543
+Node: Major Concepts40166
+Node: Messaging Interface43971
+Node: Mach Message Call44701
+Node: Message Format48016
+Node: Exchanging Port Rights58499
+Ref: Exchanging Port Rights-Footnote-164061
+Node: Memory64233
+Ref: Memory-Footnote-167327
+Node: Message Send67669
+Ref: Message Send-Footnote-174691
+Node: Message Receive74974
+Ref: Message Receive-Footnote-183612
+Node: Atomicity83893
+Node: Port Manipulation Interface86667
+Node: Port Creation88143
+Node: Port Destruction92932
+Node: Port Names96075
+Node: Port Rights100322
+Node: Ports and other Tasks104111
+Node: Receive Rights108204
+Node: Port Sets113383
+Node: Request Notifications115786
+Node: Virtual Memory Interface120566
+Node: Memory Allocation121819
+Node: Memory Deallocation124344
+Node: Data Transfer125808
+Node: Memory Attributes129334
+Node: Mapping Memory Objects138753
+Node: Memory Statistics142045
+Node: External Memory Management143619
+Node: Memory Object Server144324
+Node: Memory Object Creation147033
+Node: Memory Object Termination151039
+Node: Memory Objects and Data153978
+Node: Memory Object Locking171124
+Node: Memory Object Attributes177019
+Node: Default Memory Manager182856
+Node: Threads and Tasks188578
+Node: Thread Interface188915
+Node: Thread Creation189911
+Node: Thread Termination191028
+Node: Thread Information191499
+Node: Thread Settings197598
+Node: Thread Execution198832
+Node: Scheduling206125
+Node: Thread Priority206480
+Node: Hand-Off Scheduling209114
+Node: Scheduling Policy214239
+Node: Thread Special Ports215571
+Node: Exceptions218017
+Node: Task Interface218887
+Node: Task Creation219899
+Node: Task Termination221234
+Node: Task Information221836
+Node: Task Execution228367
+Node: Task Special Ports232780
+Node: Syscall Emulation236634
+Node: Profiling237865
+Node: Host Interface241628
+Node: Host Ports242613
+Node: Host Information244686
+Node: Host Time250069
+Node: Host Reboot252736
+Node: Processors and Processor Sets253288
+Node: Processor Set Interface254266
+Node: Processor Set Ports255033
+Node: Processor Set Access255863
+Node: Processor Set Creation258123
+Node: Processor Set Destruction259150
+Node: Tasks and Threads on Sets260071
+Node: Processor Set Priority265238
+Node: Processor Set Policy266528
+Node: Processor Set Info268142
+Node: Processor Interface271955
+Node: Hosted Processors272680
+Node: Processor Control273671
+Node: Processors and Sets275137
+Node: Processor Info277015
+Node: Device Interface279757
+Node: Device Reply Server281372
+Node: Device Open282664
+Node: Device Close284787
+Node: Device Read285366
+Node: Device Write288285
+Node: Device Map291090
+Node: Device Status291981
+Node: Device Filter293154
+Node: Kernel Debugger298901
+Node: Operation299628
+Node: Commands304236
+Node: Variables317950
+Node: Expressions319338
+Node: Copying320687
+Node: Documentation License339914
+Node: GNU Free Documentation License340503
+Node: CMU License362901
+Node: Concept Index364136
+Node: Function and Data Index367982
+
+End Tag Table
diff --git a/doc/mach.info-1 b/doc/mach.info-1
new file mode 100644
index 0000000..a24394a
--- /dev/null
+++ b/doc/mach.info-1
@@ -0,0 +1,6735 @@
+This is mach.info, produced by makeinfo version 5.1 from mach.texi.
+
+This file documents the GNU Mach microkernel.
+
+ This is edition 0.4, last updated on 27 September 2013, of 'The GNU
+Mach Reference Manual', for version 1.4.
+
+ Copyright (C) 2001, 2002, 2006, 2007, 2008 Free Software Foundation,
+Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.2 or any later version published by the Free Software
+ Foundation; with no Invariant Section, with no Front-Cover Texts,
+ and with no Back-Cover Texts. A copy of the license is included in
+ the section entitled "GNU Free Documentation License".
+
+ This work is based on manual pages under the following copyright
+ and license:
+
+ Mach Operating System
+ Copyright (C) 1991,1990 Carnegie Mellon University
+ All Rights Reserved.
+
+ Permission to use, copy, modify and distribute this software and
+ its documentation is hereby granted, provided that both the
+ copyright notice and this permission notice appear in all copies of
+ the software, derivative works or modified versions, and any
+ portions thereof, and that both notices appear in supporting
+ documentation.
+
+ CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+ CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
+ ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+INFO-DIR-SECTION Kernel
+START-INFO-DIR-ENTRY
+* GNUMach: (mach). Using and programming the GNU Mach microkernel.
+END-INFO-DIR-ENTRY
+
+
+File: mach.info, Node: Top, Next: Introduction, Up: (dir)
+
+Main Menu
+*********
+
+This file documents the GNU Mach microkernel.
+
+ This is edition 0.4, last updated on 27 September 2013, of 'The GNU
+Mach Reference Manual', for version 1.4.
+
+ Copyright (C) 2001, 2002, 2006, 2007, 2008 Free Software Foundation,
+Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.2 or any later version published by the Free Software
+ Foundation; with no Invariant Section, with no Front-Cover Texts,
+ and with no Back-Cover Texts. A copy of the license is included in
+ the section entitled "GNU Free Documentation License".
+
+ This work is based on manual pages under the following copyright
+ and license:
+
+ Mach Operating System
+ Copyright (C) 1991,1990 Carnegie Mellon University
+ All Rights Reserved.
+
+ Permission to use, copy, modify and distribute this software and
+ its documentation is hereby granted, provided that both the
+ copyright notice and this permission notice appear in all copies of
+ the software, derivative works or modified versions, and any
+ portions thereof, and that both notices appear in supporting
+ documentation.
+
+ CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+ CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
+ ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+
+* Menu:
+
+* Introduction:: How to use this manual.
+* Installing:: Setting up GNU Mach on your computer.
+* Bootstrap:: Running GNU Mach on your machine.
+* Inter Process Communication:: Communication between process.
+* Virtual Memory Interface:: Allocating and deallocating virtual memory.
+* External Memory Management:: Handling memory pages in user space.
+* Threads and Tasks:: Handling of threads and tasks.
+* Host Interface:: Interface to a Mach host.
+* Processors and Processor Sets:: Handling processors and sets of processors.
+* Device Interface:: Accessing kernel devices.
+* Kernel Debugger:: How to use the built-in kernel debugger.
+
+Appendices
+
+* Copying:: The GNU General Public License says how you
+ can copy and share the GNU Mach microkernel.
+* Documentation License:: This manual is under the GNU Free
+ Documentation License.
+
+Indices
+
+* Concept Index:: Index of concepts and programs.
+* Function and Data Index:: Index of functions, variables and data types.
+
+
+ -- The Detailed Node Listing --
+
+Introduction
+
+* Audience:: The people for whom this manual is written.
+* Features:: Reasons to install and use GNU Mach.
+* Overview:: Basic architecture of the Mach microkernel.
+* History:: The story about Mach.
+
+Installing
+
+* Binary Distributions:: Obtaining ready-to-run GNU distributions.
+* Compilation:: Building GNU Mach from its source code.
+* Configuration:: Configuration options at compilation time.
+* Cross-Compilation:: Building GNU Mach from another system.
+
+Bootstrap
+
+* Bootloader:: Starting the microkernel, or other OSes.
+* Modules:: Starting the first task of the OS.
+
+Inter Process Communication
+
+* Major Concepts:: The concepts behind the Mach IPC system.
+* Messaging Interface:: Composing, sending and receiving messages.
+* Port Manipulation Interface:: Manipulating ports, port rights, port sets.
+
+Messaging Interface
+
+* Mach Message Call:: Sending and receiving messages.
+* Message Format:: The format of Mach messages.
+* Exchanging Port Rights:: Sending and receiving port rights.
+* Memory:: Passing memory regions in messages.
+* Message Send:: Sending messages.
+* Message Receive:: Receiving messages.
+* Atomicity:: Atomicity of port rights.
+
+Port Manipulation Interface
+
+* Port Creation:: How to create new ports and port sets.
+* Port Destruction:: How to destroy ports and port sets.
+* Port Names:: How to query and manipulate port names.
+* Port Rights:: How to work with port rights.
+* Ports and other Tasks:: How to move rights between tasks.
+* Receive Rights:: How to work with receive rights.
+* Port Sets:: How to work with port sets.
+* Request Notifications:: How to request notifications for events.
+
+Virtual Memory Interface
+
+* Memory Allocation:: Allocation of new virtual memory.
+* Memory Deallocation:: Freeing unused virtual memory.
+* Data Transfer:: Reading, writing and copying memory.
+* Memory Attributes:: Tweaking memory regions.
+* Mapping Memory Objects:: How to map memory objects.
+* Memory Statistics:: How to get statistics about memory usage.
+
+External Memory Management
+
+* Memory Object Server:: The basics of external memory management.
+* Memory Object Creation:: How new memory objects are created.
+* Memory Object Termination:: How memory objects are terminated.
+* Memory Objects and Data:: Data transfer to and from memory objects.
+* Memory Object Locking:: How memory objects are locked.
+* Memory Object Attributes:: Manipulating attributes of memory objects.
+* Default Memory Manager:: Setting and using the default memory manager.
+
+Threads and Tasks
+
+* Thread Interface:: Manipulating threads.
+* Task Interface:: Manipulating tasks.
+* Profiling:: Profiling threads and tasks.
+
+Thread Interface
+
+* Thread Creation:: Creating threads.
+* Thread Termination:: Terminating threads.
+* Thread Information:: How to get informations on threads.
+* Thread Settings:: How to set threads related informations.
+* Thread Execution:: How to control the thread's machine state.
+* Scheduling:: Operations on thread scheduling.
+* Thread Special Ports:: How to handle the thread's special ports.
+* Exceptions:: Managing exceptions.
+
+Scheduling
+
+* Thread Priority:: Changing the priority of a thread.
+* Hand-Off Scheduling:: Switch to a new thread.
+* Scheduling Policy:: Setting the scheduling policy.
+
+Task Interface
+
+* Task Creation:: Creating tasks.
+* Task Termination:: Terminating tasks.
+* Task Information:: Informations on tasks.
+* Task Execution:: Thread scheduling in a task.
+* Task Special Ports:: How to get and set the task's special ports.
+* Syscall Emulation:: How to emulate system calls.
+
+Host Interface
+
+* Host Ports:: Ports representing a host.
+* Host Information:: Query information about a host.
+* Host Time:: Functions to query manipulate the host time.
+* Host Reboot:: Rebooting the system.
+
+Processors and Processor Sets
+
+* Processor Set Interface:: How to work with processor sets.
+* Processor Interface:: How to work with individual processors.
+
+Processor Set Interface
+
+* Processor Set Ports:: Ports representing a processor set.
+* Processor Set Access:: How the processor sets are accessed.
+* Processor Set Creation:: How new processor sets are created.
+* Processor Set Destruction:: How processor sets are destroyed.
+* Tasks and Threads on Sets:: Assigning tasks or threads to processor sets.
+* Processor Set Priority:: Specifying the priority of a processor set.
+* Processor Set Policy:: Changing the processor set policies.
+* Processor Set Info:: Obtaining information about a processor set.
+
+Processor Interface
+
+* Hosted Processors:: Getting a list of all processors on a host.
+* Processor Control:: Starting, stopping, controlling processors.
+* Processors and Sets:: Combining processors into processor sets.
+* Processor Info:: Obtaining information on processors.
+
+Device Interface
+
+* Device Open:: Opening hardware devices.
+* Device Close:: Closing hardware devices.
+* Device Read:: Reading data from the device.
+* Device Write:: Writing data to the device.
+* Device Map:: Mapping devices into virtual memory.
+* Device Status:: Querying and manipulating a device.
+* Device Filter:: Filtering packets arriving on a device.
+
+Kernel Debugger
+
+* Operation:: Basic architecture of the kernel debugger.
+* Commands:: Available commands in the kernel debugger.
+* Variables:: Access of variables from the kernel debugger.
+* Expressions:: Usage of expressions in the kernel debugger.
+
+Documentation License
+
+* GNU Free Documentation License:: The GNU Free Documentation License.
+* CMU License:: The CMU license applies to the original Mach
+ kernel and its documentation.
+
+
+
+File: mach.info, Node: Introduction, Next: Installing, Prev: Top, Up: Top
+
+1 Introduction
+**************
+
+GNU Mach is the microkernel of the GNU Project. It is the base of the
+operating system, and provides its functionality to the Hurd servers,
+the GNU C Library and all user applications. The microkernel itself
+does not provide much functionality of the system, just enough to make
+it possible for the Hurd servers and the C library to implement the
+missing features you would expect from a POSIX compatible operating
+system.
+
+* Menu:
+
+* Audience:: The people for whom this manual is written.
+* Features:: Reasons to install and use GNU Mach.
+* Overview:: Basic architecture of the Mach microkernel.
+* History:: The story about Mach.
+
+
+File: mach.info, Node: Audience, Next: Features, Up: Introduction
+
+1.1 Audience
+============
+
+This manual is designed to be useful to everybody who is interested in
+using, administering, or programming the Mach microkernel.
+
+ If you are an end-user and you are looking for help on running the
+Mach kernel, the first few chapters of this manual describe the
+essential parts of installing and using the kernel in the GNU operating
+system.
+
+ The rest of this manual is a technical discussion of the Mach
+programming interface and its implementation, and would not be helpful
+until you want to learn how to extend the system or modify the kernel.
+
+ This manual is organized according to the subsystems of Mach, and
+each chapter begins with descriptions of conceptual ideas that are
+related to that subsystem. If you are a programmer and want to learn
+more about, say, the Mach IPC subsystem, you can skip to the IPC chapter
+(*note Inter Process Communication::), and read about the related
+concepts and interface definitions.
+
+
+File: mach.info, Node: Features, Next: Overview, Prev: Audience, Up:
Introduction
+
+1.2 Features
+============
+
+GNU Mach is not the most advanced microkernel known to the planet, nor
+is it the fastest or smallest, but it has a rich set of interfaces and
+some features which make it useful as the base of the Hurd system.
+
+it's free software
+ Anybody can use, modify, and redistribute it under the terms of the
+ GNU General Public License (*note Copying::). GNU Mach is part of
+ the GNU system, which is a complete operating system licensed under
+ the GPL.
+
+it's built to survive
+ As a microkernel, GNU Mach doesn't implement a lot of the features
+ commonly found in an operating system, but only the bare minimum
+ that is required to implement a full operating system on top of it.
+ This means that a lot of the operating system code is maintained
+ outside of GNU Mach, and while this code may go through a complete
+ redesign, the code of the microkernel can remain comparatively
+ stable.
+
+it's scalable
+ Mach is particularly well suited for SMP and network cluster
+ techniques. Thread support is provided at the kernel level, and
+ the kernel itself takes advantage of that. Network transparency at
+ the IPC level makes resources of the system available across
+ machine boundaries (with NORMA IPC, currently not available in GNU
+ Mach).
+
+it exists
+ The Mach microkernel is real software that works Right Now. It is
+ not a research or a proposal. You don't have to wait at all before
+ you can start using and developing it. Mach has been used in many
+ operating systems in the past, usually as the base for a single
+ UNIX server. In the GNU system, Mach is the base of a functional
+ multi-server operating system, the Hurd.
+
+
+File: mach.info, Node: Overview, Next: History, Prev: Features, Up:
Introduction
+
+1.3 Overview
+============
+
+An operating system kernel provides a framework for programs to share a
+computer's hardware resources securely and efficiently. This requires
+that the programs are separated and protected from each other. To make
+running multiple programs in parallel useful, there also needs to be a
+facility for programs to exchange information by communication.
+
+ The Mach microkernel provides abstractions of the underlying hardware
+resources like devices and memory. It organizes the running programs
+into tasks and threads (points of execution in the tasks). In addition,
+Mach provides a rich interface for inter-process communication.
+
+ What Mach does not provide is a POSIX compatible programming
+interface. In fact, it has no understanding of file systems, POSIX
+process semantics, network protocols and many more. All this is
+implemented in tasks running on top of the microkernel. In the GNU
+operating system, the Hurd servers and the C library share the
+responsibility to implement the POSIX interface, and the additional
+interfaces which are specific to the GNU system.
+
+
+File: mach.info, Node: History, Prev: Overview, Up: Introduction
+
+1.4 History
+===========
+
+XXX A few lines about the history of Mach here.
+
+
+File: mach.info, Node: Installing, Next: Bootstrap, Prev: Introduction,
Up: Top
+
+2 Installing
+************
+
+Before you can use the Mach microkernel in your system you'll need to
+install it and all components you want to use with it, e.g. the rest of
+the operating system. You also need a bootloader to load the kernel
+from the storage medium and run it when the computer is started.
+
+ GNU Mach is only available for Intel i386-compatible architectures
+(such as the Pentium) currently. If you have a different architecture
+and want to run the GNU Mach microkernel, you will need to port the
+kernel and all other software of the system to your machine's
+architecture. Porting is an involved process which requires
+considerable programming skills, and it is not recommended for the
+faint-of-heart. If you have the talent and desire to do a port, contact
+<address@hidden> in order to coordinate the effort.
+
+* Menu:
+
+* Binary Distributions:: Obtaining ready-to-run GNU distributions.
+* Compilation:: Building GNU Mach from its source code.
+* Configuration:: Configuration options at compile time.
+* Cross-Compilation:: Building GNU Mach from another system.
+
+
+File: mach.info, Node: Binary Distributions, Next: Compilation, Up:
Installing
+
+2.1 Binary Distributions
+========================
+
+By far the easiest and best way to install GNU Mach and the operating
+system is to obtain a GNU binary distribution. The GNU operating system
+consists of GNU Mach, the Hurd, the C library and many applications.
+Without the GNU operating system, you will only have a microkernel,
+which is not very useful by itself, without the other programs.
+
+ Building the whole operating system takes a huge effort, and you are
+well advised to not do it yourself, but to get a binary distribution of
+the GNU operating system. The distribution also includes a binary of
+the GNU Mach microkernel.
+
+ Information on how to obtain the GNU system can be found in the Hurd
+info manual.
+
+
+File: mach.info, Node: Compilation, Next: Configuration, Prev: Binary
Distributions, Up: Installing
+
+2.2 Compilation
+===============
+
+If you already have a running GNU system, and only want to recompile the
+kernel, for example to select a different set of included hardware
+drivers, you can easily do this. You need the GNU C compiler and MIG,
+the Mach interface generator, which both come in their own packages.
+
+ Building and installing the kernel is as easy as with any other GNU
+software package. The configure script is used to configure the source
+and set the compile time options. The compilation is done by running:
+
+ make
+
+ To install the kernel and its header files, just enter the command:
+
+ make install
+
+ This will install the kernel as 'EXEC_PREFIX/boot/gnumach', the
+header files into 'PREFIX/include/', the list of message ids as
+'PREFIX/share/msgids/gnumach.msgids' and the documentation into
+'PREFIX/share/info/'.
+
+ Note that there is also a way to only install the header and
+documentation files without having to actually build the whole package:
+run 'make install-data' after having ran 'configure' to do so. (This is
+needed for bootstrapping a cross compiler and similar procedures.)
+
+
+File: mach.info, Node: Configuration, Next: Cross-Compilation, Prev:
Compilation, Up: Installing
+
+2.3 Configuration
+=================
+
+See the following tables for the options can be passed to the
+'configure' script as command line arguments to control what components
+are built into the kernel, how certain things are configured and so on.
+
+ See the top-level 'INSTALL' file for information about generic
+'configure' options, like under which paths to install the package's
+components. It also describes how to control the process by setting
+environment variables.
+
+ The file 'i386/README-Drivers' has some i386-specific information for
+device drivers. You should only need to consult this file in case a
+device driver is not working for you.
+
+2.3.1 Table of configure switches not related to device drivers
+---------------------------------------------------------------
+
+'--enable-kdb'
+ In-kernel debugger. This is only useful if you actually anticipate
+ debugging the kernel. It is not enabled by default because it adds
+ considerably to the unpageable memory footprint of the kernel.
+ *Note Kernel Debugger::.
+
+'--enable-pae'
+ PAE (Physical Address Extension) feature ('ix86'-only), which is
+ available on modern 'ix86' processors; on 'ix86-at' disabled by
+ default, on 'ix86-xen' enabled by default.
+
+2.3.2 Turning device drivers on or off
+--------------------------------------
+
+Each device driver has an associated configure switch. The following
+table indicates whether a device driver is enabled by default or not.
+It also gives -- if possible at all -- the configure switches to use for
+disabling or enabling device drivers, in case you're not satisfied with
+the default choices. You can specify '--enable-device-drivers=WHICH'
+(where WHICH on 'ix86-at' must be one of 'default', 'qemu', 'none') to
+preset a certain subset of all available device drivers.
+'--enable-device-drivers' is sugar for '--enable-device-drivers=default'
+(and is the implicit default nevertheless) and
+'--disable-device-drivers' is short for '--enable-device-drivers=none'.
+'qemu' will include only the set of device drivers that is useful when
+using the resulting kernel binary to drive a Hurd system in the QEMU
+system emulator. This is only useful for reducing the kernel build time
+and the kernel image size.
+
+2.3.3 What the configure switches do
+------------------------------------
+
+Each configure switch has two effects. First, it defines a CPP symbol
+that turns on or off the hooks that autoconfigure the device and add it
+to the list of available devices. Second, it adds the source code for
+the driver to a make variable so that the code for the driver is
+compiled and linked into the kernel. Also follow this route to find the
+file(s) which are implementing a certain device driver.
+
+2.3.4 Table of configure switches related to device drivers
+-----------------------------------------------------------
+
+('%d' in the following denotes a unit number, starting with '0'.)
+
+'--disable-kmsg'
+ Kernel message device 'kmsg'.
+
+'--enable-lpr'
+ Parallel port device driver for the 'lpr%d' devices. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-floppy'
+ PC floppy disk controller device driver for the 'fd%d' devices. On
+ 'ix86-at' enabled by 'default' and for 'qemu'.
+
+'--enable-ide'
+ IDE controller device driver for the 'hd%d' and 'hd%ds%d' (disks
+ and their partitions) devices. On 'ix86-at' enabled by 'default'
+ and for 'qemu'.
+
+ The following options control drivers for various SCSI controller.
+SCSI devices are named 'sd%d' and 'sd%ds$d' (disks and their partitions)
+or 'cd%d' (CD ROMs).
+
+'--enable-advansys'
+ AdvanSys SCSI controller device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-buslogic'
+ BusLogic SCSI controller device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-flashpoint'
+ Only meaningful in conjunction with the above BusLogic SCSI
+ controller device driver. Enable the FlashPoint support.
+
+'--enable-u14-34f'
+ UltraStor 14F/34F SCSI controller device driver. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-ultrastor'
+ UltraStor SCSI controller device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-aha152x'
+ Adaptec AHA-152x/2825 SCSI controller device driver. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-aha1542'
+ Adaptec AHA-1542 SCSI controller device driver. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-aha1740'
+ Adaptec AHA-1740 SCSI controller device driver. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-aic7xxx'
+ Adaptec AIC7xxx SCSI controller device driver. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-fdomain'
+ Future Domain 16xx SCSI controller device driver. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-in2000'
+ Always IN 2000 SCSI controller device driver. On 'ix86-at' enabled
+ by 'default'.
+
+'--enable-g_NCR5380'
+ Generic NCR5380/53c400 SCSI controller device driver.
+
+'--enable-NCR53c406a'
+ NCR53c406a SCSI controller device driver.
+
+'--enable-pas16'
+ PAS16 SCSI controller device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-seagate'
+ Seagate ST02 and Future Domain TMC-8xx SCSI controller device
+ driver. On 'ix86-at' enabled by 'default'.
+
+'--enable-t128'
+ Trantor T128/T128F/T228 SCSI controller device driver. On
+ 'ix86-at' enabled by 'default'.
+
+'--enable-53c78xx'
+ NCR53C7,8xx SCSI controller device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-eata_dma'
+ EATA-DMA (DPT, NEC, AT&T, SNI, AST, Olivetti, Alphatronix) SCSI
+ controller device driver.
+
+'--enable-eata_pio'
+ EATA-PIO (old DPT PM2001, PM2012A) SCSI controller device driver.
+ On 'ix86-at' enabled by 'default'.
+
+'--enable-wd7000'
+ WD 7000 SCSI controller device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-eata'
+ EATA ISA/EISA/PCI (DPT and generic EATA/DMA-compliant boards) SCSI
+ controller device driver. On 'ix86-at' enabled by 'default'.
+
+'--enable-am53c974'
+ AM53/79C974 SCSI controller device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-dtc'
+ DTC3180/3280 SCSI controller device driver. On 'ix86-at' enabled
+ by 'default'.
+
+'--enable-ncr53c8xx'
+ NCR53C8XX, dc390w, dc390u, dc390f SCSI controller device driver.
+ On 'ix86-at' enabled by 'default'.
+
+'--enable-tmscsim'
+ Tekram DC-390(T) SCSI controller device driver. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-ppa'
+ IOMEGA Parallel Port ZIP drive device driver. On 'ix86-at' enabled
+ by 'default'.
+
+'--enable-qlogicfas'
+ Qlogic FAS SCSI controller device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-qlogicisp'
+ Qlogic ISP SCSI controller device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-gdth'
+ GDT SCSI Disk Array controller device driver. On 'ix86-at' enabled
+ by 'default'.
+
+ The following options enable drivers for various ethernet cards. NIC
+devices are usually named 'eth%d', except for the pocket adaptors.
+
+'--enable-ne'
+ NE2000/NE1000 ISA network card device driver. On 'ix86-at' enabled
+ by 'default' and for 'qemu'.
+
+'--enable-3c503'
+ 3Com 503 (Etherlink II) network card device driver. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-3c509'
+ 3Com 509/579 (Etherlink III) network card device driver. On
+ 'ix86-at' enabled by 'default'.
+
+'--enable-wd'
+ WD80X3 network card device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-3c501'
+ 3COM 501/Etherlink I network card device driver. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-smc-ultra'
+ SMC Ultra network card device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-smc-ultra32'
+ SMC Ultra 32 network card device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-hp-plus'
+ HP PCLAN+ (27247B and 27252A) network card device driver. On
+ 'ix86-at' enabled by 'default'.
+
+'--enable-hp'
+ HP PCLAN (27245 and other 27xxx series) network card device driver.
+ On 'ix86-at' enabled by 'default'.
+
+'--enable-3c59x'
+ 3Com 590/900 series (592/595/597/900/905) "Vortex/Boomerang"
+ network card device driver. On 'ix86-at' enabled by 'default'.
+
+'--enable-seeq8005'
+ Seeq8005 network card device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-hp100'
+ HP 10/100VG PCLAN (ISA, EISA, PCI) network card device driver. On
+ 'ix86-at' enabled by 'default'.
+
+'--enable-ac3200'
+ Ansel Communications EISA 3200 network card device driver. On
+ 'ix86-at' enabled by 'default'.
+
+'--enable-e2100'
+ Cabletron E21xx network card device driver. On 'ix86-at' enabled
+ by 'default'.
+
+'--enable-at1700'
+ AT1700 (Fujitsu 86965) network card device driver. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-eth16i'
+ ICL EtherTeam 16i/32 network card device driver. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-znet'
+ Zenith Z-Note network card device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-eexpress'
+ EtherExpress 16 network card device driver. On 'ix86-at' enabled
+ by 'default'.
+
+'--enable-eepro'
+ EtherExpressPro network card device driver. On 'ix86-at' enabled
+ by 'default'.
+
+'--enable-eepro100'
+ Intel EtherExpressPro PCI 10+/100B/100+ network card device driver.
+ On 'ix86-at' enabled by 'default'.
+
+'--enable-depca'
+ DEPCA, DE10x, DE200, DE201, DE202, DE210, DE422 network card device
+ driver. On 'ix86-at' enabled by 'default'.
+
+'--enable-ewrk3'
+ EtherWORKS 3 (DE203, DE204, DE205) network card device driver. On
+ 'ix86-at' enabled by 'default'.
+
+'--enable-de4x5'
+ DE425, DE434, DE435, DE450, DE500 network card device driver. On
+ 'ix86-at' enabled by 'default'.
+
+'--enable-apricot'
+ Apricot XEN-II on board ethernet network card device driver. On
+ 'ix86-at' enabled by 'default'.
+
+'--enable-wavelan'
+ AT&T WaveLAN & DEC RoamAbout DS network card device driver.
+
+'--enable-3c507'
+ 3Com 507 network card device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-3c505'
+ 3Com 505/Etherlink II network card device driver. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-de600'
+ D-Link DE-600 network card device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-de620'
+ D-Link DE-620 network card device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-sk_g16'
+ Schneider & Koch G16 network card device driver. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-ni52'
+ NI5210 network card device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-ni65'
+ NI6510 network card device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-atp'
+ AT-LAN-TEC/RealTek pocket adaptor network card device driver for
+ the 'atp%d' devices.
+
+'--enable-lance'
+ AMD LANCE and PCnet (AT1500 and NE2100) network card device driver.
+ On 'ix86-at' enabled by 'default'.
+
+'--enable-tulip'
+ DECchip Tulip (dc21x4x) PCI network card device driver. On
+ 'ix86-at' enabled by 'default'.
+
+'--enable-fmv18x'
+ FMV-181/182/183/184 network card device driver. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-3c515'
+ 3Com 515 ISA Fast EtherLink network card device driver. On
+ 'ix86-at' enabled by 'default'.
+
+'--enable-pcnet32'
+ AMD PCI PCnet32 (PCI bus NE2100 cards) network card device driver.
+ On 'ix86-at' enabled by 'default'.
+
+'--enable-ne2k-pci'
+ PCI NE2000 network card device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-yellowfin'
+ Packet Engines Yellowfin Gigabit-NIC network card device driver.
+ On 'ix86-at' enabled by 'default'.
+
+'--enable-rtl8139'
+ RealTek 8129/8139 (not 8019/8029!) network card device driver. On
+ 'ix86-at' enabled by 'default'.
+
+'--enable-epic100'
+ SMC 83c170/175 EPIC/100 (EtherPower II) network card device driver.
+ On 'ix86-at' enabled by 'default'.
+
+'--enable-tlan'
+ TI ThunderLAN network card device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-via-rhine'
+ VIA Rhine network card device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-hamachi'
+ Packet Engines "Hamachi" GNIC-2 Gigabit Ethernet device driver. On
+ 'ix86-at' enabled by 'default'.
+
+'--enable-intel-gige'
+ Intel PCI Gigabit Ethernet device driver. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-myson803'
+ Myson MTD803 Ethernet adapter series device driver. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-natsemi'
+ National Semiconductor DP8381x series PCI Ethernet device driver.
+ On 'ix86-at' enabled by 'default'.
+
+'--enable-ns820'
+ National Semiconductor DP8382x series PCI Ethernet device driver.
+ On 'ix86-at' enabled by 'default'.
+
+'--enable-starfire'
+ Adaptec Starfire network adapter device driver. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-sundance'
+ Sundance ST201 "Alta" PCI Ethernet device driver. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-winbond-840'
+ Winbond W89c840 PCI Ethernet device driver. On 'ix86-at' enabled
+ by 'default'.
+
+ The following options either control device drivers for supported
+PCMCIA bridges or control the overall behaviour of the GNU Mach PCMCIA
+core. To make use of GNU Mach PCMCIA support you need to have the
+corresponding userland applications (GNU Mach Card Services) installed.
+
+'--enable-i82365'
+ Device driver for the Intel 82365 and compatible PC Card
+ controllers, and Yenta-compatible PCI-to-CardBus controllers. On
+ 'ix86-at' enabled by 'default'.
+
+'--enable-pcmcia-isa'
+ ISA bus related bits in the GNU Mach PCMCIA core. Keeping it
+ enabled is generally a good idea, since it does not only have
+ effect if your PC Card bridge is attached to the ISA bus, but
+ provides more (ISA) interrupts to the Card Services for it to
+ assign to the cards in turn. On 'ix86-at' enabled by 'default'.
+
+ The following options control device drivers for supported PCMCIA
+Ethernet controllers. NIC devices are usually named 'eth%d'.
+
+'--enable-3c574_cs'
+ PCMCIA ethernet driver for the 3Com 3c574 "RoadRunner". On
+ 'ix86-at' enabled by 'default'.
+
+'--enable-3c589_cs'
+ Driver for the 3Com 3c589 PCMCIA card. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-axnet_cs'
+ Driver for the Asix AX88190-based PCMCIA cards. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-fmvj18x_cs'
+ Driver for PCMCIA cards with the fmvj18x chipset. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-nmclan_cs'
+ Driver for the New Media Ethernet LAN PCMCIA cards. On 'ix86-at'
+ enabled by 'default'.
+
+'--enable-pcnet_cs'
+ Driver for NS8390-based PCMCIA cards. This driver supports the
+ D-Link DE-650 and Linksys EthernetCard cards, the newer D-Link and
+ Linksys combo cards, Accton EN2212 cards, the RPTI EP400, and the
+ PreMax PE-200 in non-shared-memory mode, and the IBM Credit Card
+ Adapter, the NE4100, the Thomas Conrad ethernet card, and the
+ Kingston KNE-PCM/x in shared-memory mode. It will also handle the
+ Socket EA card in either mode. On 'ix86-at' enabled by 'default'.
+
+'--enable-smc91c92_cs'
+ Driver for SMC91c92-based PCMCIA cards. On 'ix86-at' enabled by
+ 'default'.
+
+'--enable-xirc2ps_cs'
+ Driver for Xircom CreditCard and Realport PCMCIA ethernet adapters.
+ On 'ix86-at' enabled by 'default'.
+
+ The following options control device drivers for supported PCMCIA
+Wireless LAN network controllers. NIC devices are usually named
+'eth%d'.
+
+ Please mind, that you need to have some userland applications (the
+GNU Mach Wireless Tools) installed, in order to make use of these
+devices.
+
+'--enable-orinoco_cs'
+ Driver for the Hermes or Prism 2 chipset based PCMCIA wireless
+ adapters, with Lucent/Agere, Intersil or Symbol firmware. This
+ driver is suitable for PCMCIA wireless adapters, such as the Lucent
+ WavelanIEEE/Orinoco cards and their OEM (Cabletron/EnteraSys
+ RoamAbout 802.11, ELSA Airlancer, Melco Buffalo and others). It
+ should also be usable on various Prism II based cards such as the
+ Linksys, D-Link and Farallon Skyline. It should also work on
+ Symbol cards such as the 3Com AirConnect and Ericsson WLAN. On
+ 'ix86-at' enabled by 'default'.
+
+
+File: mach.info, Node: Cross-Compilation, Prev: Configuration, Up:
Installing
+
+2.4 Cross-Compilation
+=====================
+
+Another way to install the kernel is to use an existing operating system
+in order to compile the kernel binary. This is called
+"cross-compiling", because it is done between two different platforms.
+If the pre-built kernels are not working for you, and you can't ask
+someone to compile a custom kernel for your machine, this is your last
+chance to get a kernel that boots on your hardware.
+
+ Luckily, the kernel does have light dependencies. You don't even
+need a cross compiler if your build machine has a compiler and is the
+same architecture as the system you want to run GNU Mach on.
+
+ You need a cross-mig, though.
+
+ XXX More info needed.
+
+
+File: mach.info, Node: Bootstrap, Next: Inter Process Communication, Prev:
Installing, Up: Top
+
+3 Bootstrap
+***********
+
+Bootstrapping(1) is the procedure by which your machine loads the
+microkernel and transfers control to the operating system.
+
+* Menu:
+
+* Bootloader:: Starting the microkernel, or other OSes.
+* Modules:: Starting the first task of the OS.
+
+ ---------- Footnotes ----------
+
+ (1) The term "bootstrapping" refers to a Dutch legend about a boy who
+was able to fly by pulling himself up by his bootstraps. In computers,
+this term refers to any process where a simple system activates a more
+complicated system.
+
+
+File: mach.info, Node: Bootloader, Next: Modules, Up: Bootstrap
+
+3.1 Bootloader
+==============
+
+The "bootloader" is the first software that runs on your machine. Many
+hardware architectures have a very simple startup routine which reads a
+very simple bootloader from the beginning of the internal hard disk,
+then transfers control to it. Other architectures have startup routines
+which are able to understand more of the contents of the hard disk, and
+directly start a more advanced bootloader.
+
+ "GRUB"(1) is the GNU bootloader. GRUB provides advanced
+functionality, and is capable of loading several different kernels (such
+as Mach, Linux, DOS, and the *BSD family). *Note Introduction:
+(grub)Top.
+
+ GNU Mach conforms to the Multiboot specification which defines an
+interface between the bootloader and the components that run very early
+at startup. GNU Mach can be started by any bootloader which supports
+the multiboot standard. After the bootloader loaded the kernel image to
+a designated address in the system memory, it jumps into the startup
+code of the kernel. This code initializes the kernel and detects the
+available hardware devices. Afterwards, the first system task is
+started. *Note Overview: (multiboot)Top.
+
+ ---------- Footnotes ----------
+
+ (1) The GRand Unified Bootloader, available from
+<http://gnu.org/software/grub/>.
+
+
+File: mach.info, Node: Modules, Prev: Bootloader, Up: Bootstrap
+
+3.2 Modules
+===========
+
+This is outdated.
+
+ Because the microkernel does not provide filesystem support and other
+features necessary to load the first system task from a storage medium,
+the first task is loaded by the bootloader as a module to a specified
+address. In the GNU system, this first program is the 'serverboot'
+executable. GNU Mach inserts the host control port and the device
+master port into this task and appends the port numbers to the command
+line before executing it.
+
+ The 'serverboot' program is responsible for loading and executing the
+rest of the Hurd servers. Rather than containing specific instructions
+for starting the Hurd, it follows general steps given in a user-supplied
+boot script.
+
+ XXX More about boot scripts.
+
+
+File: mach.info, Node: Inter Process Communication, Next: Virtual Memory
Interface, Prev: Bootstrap, Up: Top
+
+4 Inter Process Communication
+*****************************
+
+This chapter describes the details of the Mach IPC system. First the
+actual calls concerned with sending and receiving messages are
+discussed, then the details of the port system are described in detail.
+
+* Menu:
+
+* Major Concepts:: The concepts behind the Mach IPC system.
+* Messaging Interface:: Composing, sending and receiving messages.
+* Port Manipulation Interface:: Manipulating ports, port rights, port sets.
+
+
+File: mach.info, Node: Major Concepts, Next: Messaging Interface, Up: Inter
Process Communication
+
+4.1 Major Concepts
+==================
+
+The Mach kernel provides message-oriented, capability-based interprocess
+communication. The interprocess communication (IPC) primitives
+efficiently support many different styles of interaction, including
+remote procedure calls (RPC), object-oriented distributed programming,
+streaming of data, and sending very large amounts of data.
+
+ The IPC primitives operate on three abstractions: messages, ports,
+and port sets. User tasks access all other kernel services and
+abstractions via the IPC primitives.
+
+ The message primitives let tasks send and receive messages. Tasks
+send messages to ports. Messages sent to a port are delivered reliably
+(messages may not be lost) and are received in the order in which they
+were sent. Messages contain a fixed-size header and a variable amount
+of typed data following the header. The header describes the
+destination and size of the message.
+
+ The IPC implementation makes use of the VM system to efficiently
+transfer large amounts of data. The message body can contain the
+address of a region in the sender's address space which should be
+transferred as part of the message. When a task receives a message
+containing an out-of-line region of data, the data appears in an unused
+portion of the receiver's address space. This transmission of
+out-of-line data is optimized so that sender and receiver share the
+physical pages of data copy-on-write, and no actual data copy occurs
+unless the pages are written. Regions of memory up to the size of a
+full address space may be sent in this manner.
+
+ Ports hold a queue of messages. Tasks operate on a port to send and
+receive messages by exercising capabilities for the port. Multiple
+tasks can hold send capabilities, or rights, for a port. Tasks can also
+hold send-once rights, which grant the ability to send a single message.
+Only one task can hold the receive capability, or receive right, for a
+port. Port rights can be transferred between tasks via messages. The
+sender of a message can specify in the message body that the message
+contains a port right. If a message contains a receive right for a
+port, then the receive right is removed from the sender of the message
+and the right is transferred to the receiver of the message. While the
+receive right is in transit, tasks holding send rights can still send
+messages to the port, and they are queued until a task acquires the
+receive right and uses it to receive the messages.
+
+ Tasks can receive messages from ports and port sets. The port set
+abstraction allows a single thread to wait for a message from any of
+several ports. Tasks manipulate port sets with a capability, or
+port-set right, which is taken from the same space as the port
+capabilities. The port-set right may not be transferred in a message.
+A port set holds receive rights, and a receive operation on a port set
+blocks waiting for a message sent to any of the constituent ports. A
+port may not belong to more than one port set, and if a port is a member
+of a port set, the holder of the receive right can't receive directly
+from the port.
+
+ Port rights are a secure, location-independent way of naming ports.
+The port queue is a protected data structure, only accessible via the
+kernel's exported message primitives. Rights are also protected by the
+kernel; there is no way for a malicious user task to guess a port name
+and send a message to a port to which it shouldn't have access. Port
+rights do not carry any location information. When a receive right for
+a port moves from task to task, and even between tasks on different
+machines, the send rights for the port remain unchanged and continue to
+function.
+
+
+File: mach.info, Node: Messaging Interface, Next: Port Manipulation
Interface, Prev: Major Concepts, Up: Inter Process Communication
+
+4.2 Messaging Interface
+=======================
+
+This section describes how messages are composed, sent and received
+within the Mach IPC system.
+
+* Menu:
+
+* Mach Message Call:: Sending and receiving messages.
+* Message Format:: The format of Mach messages.
+* Exchanging Port Rights:: Sending and receiving port rights.
+* Memory:: Passing memory regions in messages.
+* Message Send:: Sending messages.
+* Message Receive:: Receiving messages.
+* Atomicity:: Atomicity of port rights.
+
+
+File: mach.info, Node: Mach Message Call, Next: Message Format, Up:
Messaging Interface
+
+4.2.1 Mach Message Call
+-----------------------
+
+To use the 'mach_msg' call, you can include the header files
+'mach/port.h' and 'mach/message.h'.
+
+ -- Function: mach_msg_return_t mach_msg (mach_msg_header_t *MSG,
+ mach_msg_option_t OPTION, mach_msg_size_t SEND_SIZE,
+ mach_msg_size_t RCV_SIZE, mach_port_t RCV_NAME,
+ mach_msg_timeout_t TIMEOUT, mach_port_t NOTIFY)
+ The 'mach_msg' function is used to send and receive messages. Mach
+ messages contain typed data, which can include port rights and
+ references to large regions of memory.
+
+ MSG is the address of a buffer in the caller's address space.
+ Message buffers should be aligned on long-word boundaries. The
+ message options OPTION are bit values, combined with bitwise-or.
+ One or both of 'MACH_SEND_MSG' and 'MACH_RCV_MSG' should be used.
+ Other options act as modifiers. When sending a message, SEND_SIZE
+ specifies the size of the message buffer. Otherwise zero should be
+ supplied. When receiving a message, RCV_SIZE specifies the size of
+ the message buffer. Otherwise zero should be supplied. When
+ receiving a message, RCV_NAME specifies the port or port set.
+ Otherwise 'MACH_PORT_NULL' should be supplied. When using the
+ 'MACH_SEND_TIMEOUT' and 'MACH_RCV_TIMEOUT' options, TIMEOUT
+ specifies the time in milliseconds to wait before giving up.
+ Otherwise 'MACH_MSG_TIMEOUT_NONE' should be supplied. When using
+ the 'MACH_SEND_NOTIFY', 'MACH_SEND_CANCEL', and 'MACH_RCV_NOTIFY'
+ options, NOTIFY specifies the port used for the notification.
+ Otherwise 'MACH_PORT_NULL' should be supplied.
+
+ If the option argument is 'MACH_SEND_MSG', it sends a message. The
+ SEND_SIZE argument specifies the size of the message to send. The
+ 'msgh_remote_port' field of the message header specifies the
+ destination of the message.
+
+ If the option argument is 'MACH_RCV_MSG', it receives a message.
+ The RCV_SIZE argument specifies the size of the message buffer that
+ will receive the message; messages larger than RCV_SIZE are not
+ received. The RCV_NAME argument specifies the port or port set
+ from which to receive.
+
+ If the option argument is 'MACH_SEND_MSG|MACH_RCV_MSG', then
+ 'mach_msg' does both send and receive operations. If the send
+ operation encounters an error (any return code other than
+ 'MACH_MSG_SUCCESS'), then the call returns immediately without
+ attempting the receive operation. Semantically the combined call
+ is equivalent to separate send and receive calls, but it saves a
+ system call and enables other internal optimizations.
+
+ If the option argument specifies neither 'MACH_SEND_MSG' nor
+ 'MACH_RCV_MSG', then 'mach_msg' does nothing.
+
+ Some options, like 'MACH_SEND_TIMEOUT' and 'MACH_RCV_TIMEOUT',
+ share a supporting argument. If these options are used together,
+ they make independent use of the supporting argument's value.
+
+ -- Data type: mach_msg_timeout_t
+ This is a 'natural_t' used by the timeout mechanism. The units are
+ milliseconds. The value to be used when there is no timeout is
+ 'MACH_MSG_TIMEOUT_NONE'.
+
+
+File: mach.info, Node: Message Format, Next: Exchanging Port Rights, Prev:
Mach Message Call, Up: Messaging Interface
+
+4.2.2 Message Format
+--------------------
+
+A Mach message consists of a fixed size message header, a
+'mach_msg_header_t', followed by zero or more data items. Data items
+are typed. Each item has a type descriptor followed by the actual data
+(or the address of the data, for out-of-line memory regions).
+
+ The following data types are related to Mach ports:
+
+ -- Data type: mach_port_t
+ The 'mach_port_t' data type is an unsigned integer type which
+ represents a port name in the task's port name space. In GNU Mach,
+ this is an 'unsigned int'.
+
+ The following data types are related to Mach messages:
+
+ -- Data type: mach_msg_bits_t
+ The 'mach_msg_bits_t' data type is an 'unsigned int' used to store
+ various flags for a message.
+
+ -- Data type: mach_msg_size_t
+ The 'mach_msg_size_t' data type is an 'unsigned int' used to store
+ the size of a message.
+
+ -- Data type: mach_msg_id_t
+ The 'mach_msg_id_t' data type is an 'integer_t' typically used to
+ convey a function or operation id for the receiver.
+
+ -- Data type: mach_msg_header_t
+ This structure is the start of every message in the Mach IPC
+ system. It has the following members:
+
+ 'mach_msg_bits_t msgh_bits'
+ The 'msgh_bits' field has the following bits defined, all
+ other bits should be zero:
+
+ 'MACH_MSGH_BITS_REMOTE_MASK'
+ 'MACH_MSGH_BITS_LOCAL_MASK'
+ The remote and local bits encode 'mach_msg_type_name_t'
+ values that specify the port rights in the
+ 'msgh_remote_port' and 'msgh_local_port' fields. The
+ remote value must specify a send or send-once right for
+ the destination of the message. If the local value
+ doesn't specify a send or send-once right for the
+ message's reply port, it must be zero and msgh_local_port
+ must be 'MACH_PORT_NULL'.
+
+ 'MACH_MSGH_BITS_COMPLEX'
+ The complex bit must be specified if the message body
+ contains port rights or out-of-line memory regions. If
+ it is not specified, then the message body carries no
+ port rights or memory, no matter what the type
+ descriptors may seem to indicate.
+
+ 'MACH_MSGH_BITS_REMOTE' and 'MACH_MSGH_BITS_LOCAL' macros
+ return the appropriate 'mach_msg_type_name_t' values, given a
+ 'msgh_bits' value. The 'MACH_MSGH_BITS' macro constructs a
+ value for 'msgh_bits', given two 'mach_msg_type_name_t'
+ values.
+
+ 'mach_msg_size_t msgh_size'
+ The 'msgh_size' field in the header of a received message
+ contains the message's size. The message size, a byte
+ quantity, includes the message header, type descriptors, and
+ in-line data. For out-of-line memory regions, the message
+ size includes the size of the in-line address, not the size of
+ the actual memory region. There are no arbitrary limits on
+ the size of a Mach message, the number of data items in a
+ message, or the size of the data items.
+
+ 'mach_port_t msgh_remote_port'
+ The 'msgh_remote_port' field specifies the destination port of
+ the message. The field must carry a legitimate send or
+ send-once right for a port.
+
+ 'mach_port_t msgh_local_port'
+ The 'msgh_local_port' field specifies an auxiliary port right,
+ which is conventionally used as a reply port by the recipient
+ of the message. The field must carry a send right, a
+ send-once right, 'MACH_PORT_NULL', or 'MACH_PORT_DEAD'.
+
+ 'mach_port_seqno_t msgh_seqno'
+ The 'msgh_seqno' field provides a sequence number for the
+ message. It is only valid in received messages; its value in
+ sent messages is overwritten.
+
+ 'mach_msg_id_t msgh_id'
+ The 'mach_msg' call doesn't use the 'msgh_id' field, but it
+ conventionally conveys an operation or function id.
+
+ -- Macro: mach_msg_bits_t MACH_MSGH_BITS (mach_msg_type_name_t REMOTE,
+ mach_msg_type_name_t LOCAL)
+ This macro composes two 'mach_msg_type_name_t' values that specify
+ the port rights in the 'msgh_remote_port' and 'msgh_local_port'
+ fields of a 'mach_msg' call into an appropriate 'mach_msg_bits_t'
+ value.
+
+ -- Macro: mach_msg_type_name_t MACH_MSGH_BITS_REMOTE
+ (mach_msg_bits_t BITS)
+ This macro extracts the 'mach_msg_type_name_t' value for the remote
+ port right in a 'mach_msg_bits_t' value.
+
+ -- Macro: mach_msg_type_name_t MACH_MSGH_BITS_LOCAL
+ (mach_msg_bits_t BITS)
+ This macro extracts the 'mach_msg_type_name_t' value for the local
+ port right in a 'mach_msg_bits_t' value.
+
+ -- Macro: mach_msg_bits_t MACH_MSGH_BITS_PORTS (mach_msg_bits_t BITS)
+ This macro extracts the 'mach_msg_bits_t' component consisting of
+ the 'mach_msg_type_name_t' values for the remote and local port
+ right in a 'mach_msg_bits_t' value.
+
+ -- Macro: mach_msg_bits_t MACH_MSGH_BITS_OTHER (mach_msg_bits_t BITS)
+ This macro extracts the 'mach_msg_bits_t' component consisting of
+ everything except the 'mach_msg_type_name_t' values for the remote
+ and local port right in a 'mach_msg_bits_t' value.
+
+ Each data item has a type descriptor, a 'mach_msg_type_t' or a
+'mach_msg_type_long_t'. The 'mach_msg_type_long_t' type descriptor
+allows larger values for some fields. The 'msgtl_header' field in the
+long descriptor is only used for its inline, longform, and deallocate
+bits.
+
+ -- Data type: mach_msg_type_name_t
+ This is an 'unsigned int' and can be used to hold the 'msgt_name'
+ component of the 'mach_msg_type_t' and 'mach_msg_type_long_t'
+ structure.
+
+ -- Data type: mach_msg_type_size_t
+ This is an 'unsigned int' and can be used to hold the 'msgt_size'
+ component of the 'mach_msg_type_t' and 'mach_msg_type_long_t'
+ structure.
+
+ -- Data type: mach_msg_type_number_t
+ This is an 'natural_t' and can be used to hold the 'msgt_number'
+ component of the 'mach_msg_type_t' and 'mach_msg_type_long_t'
+ structure.
+
+ -- Data type: mach_msg_type_t
+ This structure has the following members:
+
+ 'unsigned int msgt_name : 8'
+ The 'msgt_name' field specifies the data's type. The
+ following types are predefined:
+
+ 'MACH_MSG_TYPE_UNSTRUCTURED'
+ 'MACH_MSG_TYPE_BIT'
+ 'MACH_MSG_TYPE_BOOLEAN'
+ 'MACH_MSG_TYPE_INTEGER_16'
+ 'MACH_MSG_TYPE_INTEGER_32'
+ 'MACH_MSG_TYPE_CHAR'
+ 'MACH_MSG_TYPE_BYTE'
+ 'MACH_MSG_TYPE_INTEGER_8'
+ 'MACH_MSG_TYPE_REAL'
+ 'MACH_MSG_TYPE_STRING'
+ 'MACH_MSG_TYPE_STRING_C'
+ 'MACH_MSG_TYPE_PORT_NAME'
+
+ The following predefined types specify port rights, and
+ receive special treatment. The next section discusses these
+ types in detail. The type 'MACH_MSG_TYPE_PORT_NAME' describes
+ port right names, when no rights are being transferred, but
+ just names. For this purpose, it should be used in preference
+ to 'MACH_MSG_TYPE_INTEGER_32'.
+
+ 'MACH_MSG_TYPE_MOVE_RECEIVE'
+ 'MACH_MSG_TYPE_MOVE_SEND'
+ 'MACH_MSG_TYPE_MOVE_SEND_ONCE'
+ 'MACH_MSG_TYPE_COPY_SEND'
+ 'MACH_MSG_TYPE_MAKE_SEND'
+ 'MACH_MSG_TYPE_MAKE_SEND_ONCE'
+
+ 'msgt_size : 8'
+ The 'msgt_size' field specifies the size of each datum, in
+ bits. For example, the msgt_size of
+ 'MACH_MSG_TYPE_INTEGER_32' data is 32.
+
+ 'msgt_number : 12'
+ The 'msgt_number' field specifies how many data elements
+ comprise the data item. Zero is a legitimate number.
+
+ The total length specified by a type descriptor is
+ '(msgt_size * msgt_number)', rounded up to an integral number
+ of bytes. In-line data is then padded to an integral number
+ of long-words. This ensures that type descriptors always
+ start on long-word boundaries. It implies that message sizes
+ are always an integral multiple of a long-word's size.
+
+ 'msgt_inline : 1'
+ The 'msgt_inline' bit specifies, when 'FALSE', that the data
+ actually resides in an out-of-line region. The address of the
+ memory region (a 'vm_offset_t' or 'vm_address_t') follows the
+ type descriptor in the message body. The 'msgt_name',
+ 'msgt_size', and 'msgt_number' fields describe the memory
+ region, not the address.
+
+ 'msgt_longform : 1'
+ The 'msgt_longform' bit specifies, when 'TRUE', that this type
+ descriptor is a 'mach_msg_type_long_t' instead of a
+ 'mach_msg_type_t'. The 'msgt_name', 'msgt_size', and
+ 'msgt_number' fields should be zero. Instead, 'mach_msg' uses
+ the following 'msgtl_name', 'msgtl_size', and 'msgtl_number'
+ fields.
+
+ 'msgt_deallocate : 1'
+ The 'msgt_deallocate' bit is used with out-of-line regions.
+ When 'TRUE', it specifies that the memory region should be
+ deallocated from the sender's address space (as if with
+ 'vm_deallocate') when the message is sent.
+
+ 'msgt_unused : 1'
+ The 'msgt_unused' bit should be zero.
+
+ -- Macro: boolean_t MACH_MSG_TYPE_PORT_ANY (mach_msg_type_name_t type)
+ This macro returns 'TRUE' if the given type name specifies a port
+ type, otherwise it returns 'FALSE'.
+
+ -- Macro: boolean_t MACH_MSG_TYPE_PORT_ANY_SEND (mach_msg_type_name_t
+ type)
+ This macro returns 'TRUE' if the given type name specifies a port
+ type with a send or send-once right, otherwise it returns 'FALSE'.
+
+ -- Macro: boolean_t MACH_MSG_TYPE_PORT_ANY_RIGHT (mach_msg_type_name_t
+ type)
+ This macro returns 'TRUE' if the given type name specifies a port
+ right type which is moved, otherwise it returns 'FALSE'.
+
+ -- Data type: mach_msg_type_long_t
+ This structure has the following members:
+
+ 'mach_msg_type_t msgtl_header'
+ Same meaning as 'msgt_header'.
+
+ 'unsigned short msgtl_name'
+ Same meaning as 'msgt_name'.
+
+ 'unsigned short msgtl_size'
+ Same meaning as 'msgt_size'.
+
+ 'unsigned int msgtl_number'
+ Same meaning as 'msgt_number'.
+
+
+File: mach.info, Node: Exchanging Port Rights, Next: Memory, Prev: Message
Format, Up: Messaging Interface
+
+4.2.3 Exchanging Port Rights
+----------------------------
+
+Each task has its own space of port rights. Port rights are named with
+positive integers. Except for the reserved values 'MACH_PORT_NULL (0)'(1)
+and 'MACH_PORT_DEAD (~0)', this is a full 32-bit name space. When the
+kernel chooses a name for a new right, it is free to pick any unused
+name (one which denotes no right) in the space.
+
+ There are five basic kinds of rights: receive rights, send rights,
+send-once rights, port-set rights, and dead names. Dead names are not
+capabilities. They act as place-holders to prevent a name from being
+otherwise used.
+
+ A port is destroyed, or dies, when its receive right is deallocated.
+When a port dies, send and send-once rights for the port turn into dead
+names. Any messages queued at the port are destroyed, which deallocates
+the port rights and out-of-line memory in the messages.
+
+ Tasks may hold multiple user-references for send rights and dead
+names. When a task receives a send right which it already holds, the
+kernel increments the right's user-reference count. When a task
+deallocates a send right, the kernel decrements its user-reference
+count, and the task only loses the send right when the count goes to
+zero.
+
+ Send-once rights always have a user-reference count of one, although
+a port can have multiple send-once rights, because each send-once right
+held by a task has a different name. In contrast, when a task holds
+send rights or a receive right for a port, the rights share a single
+name.
+
+ A message body can carry port rights; the 'msgt_name' ('msgtl_name')
+field in a type descriptor specifies the type of port right and how the
+port right is to be extracted from the caller. The values
+'MACH_PORT_NULL' and 'MACH_PORT_DEAD' are always valid in place of a
+port right in a message body. In a sent message, the following
+'msgt_name' values denote port rights:
+
+'MACH_MSG_TYPE_MAKE_SEND'
+ The message will carry a send right, but the caller must supply a
+ receive right. The send right is created from the receive right,
+ and the receive right's make-send count is incremented.
+
+'MACH_MSG_TYPE_COPY_SEND'
+ The message will carry a send right, and the caller should supply a
+ send right. The user reference count for the supplied send right
+ is not changed. The caller may also supply a dead name and the
+ receiving task will get 'MACH_PORT_DEAD'.
+
+'MACH_MSG_TYPE_MOVE_SEND'
+ The message will carry a send right, and the caller should supply a
+ send right. The user reference count for the supplied send right
+ is decremented, and the right is destroyed if the count becomes
+ zero. Unless a receive right remains, the name becomes available
+ for recycling. The caller may also supply a dead name, which loses
+ a user reference, and the receiving task will get 'MACH_PORT_DEAD'.
+
+'MACH_MSG_TYPE_MAKE_SEND_ONCE'
+ The message will carry a send-once right, but the caller must
+ supply a receive right. The send-once right is created from the
+ receive right.
+
+'MACH_MSG_TYPE_MOVE_SEND_ONCE'
+ The message will carry a send-once right, and the caller should
+ supply a send-once right. The caller loses the supplied send-once
+ right. The caller may also supply a dead name, which loses a user
+ reference, and the receiving task will get 'MACH_PORT_DEAD'.
+
+'MACH_MSG_TYPE_MOVE_RECEIVE'
+ The message will carry a receive right, and the caller should
+ supply a receive right. The caller loses the supplied receive
+ right, but retains any send rights with the same name.
+
+ If a message carries a send or send-once right, and the port dies
+while the message is in transit, then the receiving task will get
+'MACH_PORT_DEAD' instead of a right. The following 'msgt_name' values
+in a received message indicate that it carries port rights:
+
+'MACH_MSG_TYPE_PORT_SEND'
+ This name is an alias for 'MACH_MSG_TYPE_MOVE_SEND'. The message
+ carried a send right. If the receiving task already has send
+ and/or receive rights for the port, then that name for the port
+ will be reused. Otherwise, the new right will have a new name. If
+ the task already has send rights, it gains a user reference for the
+ right (unless this would cause the user-reference count to
+ overflow). Otherwise, it acquires the send right, with a
+ user-reference count of one.
+
+'MACH_MSG_TYPE_PORT_SEND_ONCE'
+ This name is an alias for 'MACH_MSG_TYPE_MOVE_SEND_ONCE'. The
+ message carried a send-once right. The right will have a new name.
+
+'MACH_MSG_TYPE_PORT_RECEIVE'
+ This name is an alias for 'MACH_MSG_TYPE_MOVE_RECEIVE'. The
+ message carried a receive right. If the receiving task already has
+ send rights for the port, then that name for the port will be
+ reused. Otherwise, the right will have a new name. The make-send
+ count of the receive right is reset to zero, but the port retains
+ other attributes like queued messages, extant send and send-once
+ rights, and requests for port-destroyed and no-senders
+ notifications.
+
+ When the kernel chooses a new name for a port right, it can choose
+any name, other than 'MACH_PORT_NULL' and 'MACH_PORT_DEAD', which is not
+currently being used for a port right or dead name. It might choose a
+name which at some previous time denoted a port right, but is currently
+unused.
+
+ ---------- Footnotes ----------
+
+ (1) In the Hurd system, we don't make the assumption that
+'MACH_PORT_NULL' is zero and evaluates to false, but rather compare port
+names to 'MACH_PORT_NULL' explicitly
+
+
+File: mach.info, Node: Memory, Next: Message Send, Prev: Exchanging Port
Rights, Up: Messaging Interface
+
+4.2.4 Memory
+------------
+
+A message body can contain the address of a region in the sender's
+address space which should be transferred as part of the message. The
+message carries a logical copy of the memory, but the kernel uses VM
+techniques to defer any actual page copies. Unless the sender or the
+receiver modifies the data, the physical pages remain shared.
+
+ An out-of-line transfer occurs when the data's type descriptor
+specifies 'msgt_inline' as 'FALSE'. The address of the memory region (a
+'vm_offset_t' or 'vm_address_t') should follow the type descriptor in
+the message body. The type descriptor and the address contribute to the
+message's size ('send_size', 'msgh_size'). The out-of-line data does
+not contribute to the message's size.
+
+ The name, size, and number fields in the type descriptor describe the
+type and length of the out-of-line data, not the in-line address.
+Out-of-line memory frequently requires long type descriptors
+('mach_msg_type_long_t'), because the 'msgt_number' field is too small
+to describe a page of 4K bytes.
+
+ Out-of-line memory arrives somewhere in the receiver's address space
+as new memory. It has the same inheritance and protection attributes as
+newly 'vm_allocate''d memory. The receiver has the responsibility of
+deallocating (with 'vm_deallocate') the memory when it is no longer
+needed. Security-conscious receivers should exercise caution when using
+out-of-line memory from untrustworthy sources, because the memory may be
+backed by an unreliable memory manager.
+
+ Null out-of-line memory is legal. If the out-of-line region size is
+zero (for example, because 'msgtl_number' is zero), then the region's
+specified address is ignored. A received null out-of-line memory region
+always has a zero address.
+
+ Unaligned addresses and region sizes that are not page multiples are
+legal. A received message can also contain memory with unaligned
+addresses and funny sizes. In the general case, the first and last
+pages in the new memory region in the receiver do not contain only data
+from the sender, but are partly zero.(1) The received address points to
+the start of the data in the first page. This possibility doesn't
+complicate deallocation, because 'vm_deallocate' does the right thing,
+rounding the start address down and the end address up to deallocate all
+arrived pages.
+
+ Out-of-line memory has a deallocate option, controlled by the
+'msgt_deallocate' bit. If it is 'TRUE' and the out-of-line memory
+region is not null, then the region is implicitly deallocated from the
+sender, as if by 'vm_deallocate'. In particular, the start and end
+addresses are rounded so that every page overlapped by the memory region
+is deallocated. The use of 'msgt_deallocate' effectively changes the
+memory copy into a memory movement. In a received message,
+'msgt_deallocate' is 'TRUE' in type descriptors for out-of-line memory.
+
+ Out-of-line memory can carry port rights.
+
+ ---------- Footnotes ----------
+
+ (1) Sending out-of-line memory with a non-page-aligned address, or a
+size which is not a page multiple, works but with a caveat. The extra
+bytes in the first and last page of the received memory are not zeroed,
+so the receiver can peek at more data than the sender intended to
+transfer. This might be a security problem for the sender.
+
+
+File: mach.info, Node: Message Send, Next: Message Receive, Prev: Memory,
Up: Messaging Interface
+
+4.2.5 Message Send
+------------------
+
+The send operation queues a message to a port. The message carries a
+copy of the caller's data. After the send, the caller can freely modify
+the message buffer or the out-of-line memory regions and the message
+contents will remain unchanged.
+
+ Message delivery is reliable and sequenced. Messages are not lost,
+and messages sent to a port, from a single thread, are received in the
+order in which they were sent.
+
+ If the destination port's queue is full, then several things can
+happen. If the message is sent to a send-once right ('msgh_remote_port'
+carries a send-once right), then the kernel ignores the queue limit and
+delivers the message. Otherwise the caller blocks until there is room
+in the queue, unless the 'MACH_SEND_TIMEOUT' or 'MACH_SEND_NOTIFY'
+options are used. If a port has several blocked senders, then any of
+them may queue the next message when space in the queue becomes
+available, with the proviso that a blocked sender will not be
+indefinitely starved.
+
+ These options modify 'MACH_SEND_MSG'. If 'MACH_SEND_MSG' is not also
+specified, they are ignored.
+
+'MACH_SEND_TIMEOUT'
+ The timeout argument should specify a maximum time (in
+ milliseconds) for the call to block before giving up.(1) If the
+ message can't be queued before the timeout interval elapses, then
+ the call returns 'MACH_SEND_TIMED_OUT'. A zero timeout is
+ legitimate.
+
+'MACH_SEND_NOTIFY'
+ The notify argument should specify a receive right for a notify
+ port. If the send were to block, then instead the message is
+ queued, 'MACH_SEND_WILL_NOTIFY' is returned, and a msg-accepted
+ notification is requested. If 'MACH_SEND_TIMEOUT' is also
+ specified, then 'MACH_SEND_NOTIFY' doesn't take effect until the
+ timeout interval elapses.
+
+ With 'MACH_SEND_NOTIFY', a task can forcibly queue to a send right
+ one message at a time. A msg-accepted notification is sent to the
+ notify port when another message can be forcibly queued. If an
+ attempt is made to use 'MACH_SEND_NOTIFY' before then, the call
+ returns a 'MACH_SEND_NOTIFY_IN_PROGRESS' error.
+
+ The msg-accepted notification carries the name of the send right.
+ If the send right is deallocated before the msg-accepted
+ notification is generated, then the msg-accepted notification
+ carries the value 'MACH_PORT_NULL'. If the destination port is
+ destroyed before the notification is generated, then a send-once
+ notification is generated instead.
+
+'MACH_SEND_INTERRUPT'
+ If specified, the 'mach_msg' call will return
+ 'MACH_SEND_INTERRUPTED' if a software interrupt aborts the call.
+ Otherwise, the send operation will be retried.
+
+'MACH_SEND_CANCEL'
+ The notify argument should specify a receive right for a notify
+ port. If the send operation removes the destination port right
+ from the caller, and the removed right had a dead-name request
+ registered for it, and notify is the notify port for the dead-name
+ request, then the dead-name request may be silently canceled
+ (instead of resulting in a port-deleted notification).
+
+ This option is typically used to cancel a dead-name request made
+ with the 'MACH_RCV_NOTIFY' option. It should only be used as an
+ optimization.
+
+ The send operation can generate the following return codes. These
+return codes imply that the call did nothing:
+
+'MACH_SEND_MSG_TOO_SMALL'
+ The specified send_size was smaller than the minimum size for a
+ message.
+
+'MACH_SEND_NO_BUFFER'
+ A resource shortage prevented the kernel from allocating a message
+ buffer.
+
+'MACH_SEND_INVALID_DATA'
+ The supplied message buffer was not readable.
+
+'MACH_SEND_INVALID_HEADER'
+ The 'msgh_bits' value was invalid.
+
+'MACH_SEND_INVALID_DEST'
+ The 'msgh_remote_port' value was invalid.
+
+'MACH_SEND_INVALID_REPLY'
+ The 'msgh_local_port' value was invalid.
+
+'MACH_SEND_INVALID_NOTIFY'
+ When using 'MACH_SEND_CANCEL', the notify argument did not denote a
+ valid receive right.
+
+ These return codes imply that some or all of the message was
+destroyed:
+
+'MACH_SEND_INVALID_MEMORY'
+ The message body specified out-of-line data that was not readable.
+
+'MACH_SEND_INVALID_RIGHT'
+ The message body specified a port right which the caller didn't
+ possess.
+
+'MACH_SEND_INVALID_TYPE'
+ A type descriptor was invalid.
+
+'MACH_SEND_MSG_TOO_SMALL'
+ The last data item in the message ran over the end of the message.
+
+ These return codes imply that the message was returned to the caller
+with a pseudo-receive operation:
+
+'MACH_SEND_TIMED_OUT'
+ The timeout interval expired.
+
+'MACH_SEND_INTERRUPTED'
+ A software interrupt occurred.
+
+'MACH_SEND_INVALID_NOTIFY'
+ When using 'MACH_SEND_NOTIFY', the notify argument did not denote a
+ valid receive right.
+
+'MACH_SEND_NO_NOTIFY'
+ A resource shortage prevented the kernel from setting up a
+ msg-accepted notification.
+
+'MACH_SEND_NOTIFY_IN_PROGRESS'
+ A msg-accepted notification was already requested, and hasn't yet
+ been generated.
+
+ These return codes imply that the message was queued:
+
+'MACH_SEND_WILL_NOTIFY'
+ The message was forcibly queued, and a msg-accepted notification
+ was requested.
+
+'MACH_MSG_SUCCESS'
+ The message was queued.
+
+ Some return codes, like 'MACH_SEND_TIMED_OUT', imply that the message
+was almost sent, but could not be queued. In these situations, the
+kernel tries to return the message contents to the caller with a
+pseudo-receive operation. This prevents the loss of port rights or
+memory which only exist in the message. For example, a receive right
+which was moved into the message, or out-of-line memory sent with the
+deallocate bit.
+
+ The pseudo-receive operation is very similar to a normal receive
+operation. The pseudo-receive handles the port rights in the message
+header as if they were in the message body. They are not reversed.
+After the pseudo-receive, the message is ready to be resent. If the
+message is not resent, note that out-of-line memory regions may have
+moved and some port rights may have changed names.
+
+ The pseudo-receive operation may encounter resource shortages. This
+is similar to a 'MACH_RCV_BODY_ERROR' return code from a receive
+operation. When this happens, the normal send return codes are
+augmented with the 'MACH_MSG_IPC_SPACE', 'MACH_MSG_VM_SPACE',
+'MACH_MSG_IPC_KERNEL', and 'MACH_MSG_VM_KERNEL' bits to indicate the
+nature of the resource shortage.
+
+ The queueing of a message carrying receive rights may create a
+circular loop of receive rights and messages, which can never be
+received. For example, a message carrying a receive right can be sent
+to that receive right. This situation is not an error, but the kernel
+will garbage-collect such loops, destroying the messages and ports
+involved.
+
+ ---------- Footnotes ----------
+
+ (1) If MACH_SEND_TIMEOUT is used without MACH_SEND_INTERRUPT, then
+the timeout duration might not be accurate. When the call is
+interrupted and automatically retried, the original timeout is used. If
+interrupts occur frequently enough, the timeout interval might never
+expire.
+
+
+File: mach.info, Node: Message Receive, Next: Atomicity, Prev: Message
Send, Up: Messaging Interface
+
+4.2.6 Message Receive
+---------------------
+
+The receive operation dequeues a message from a port. The receiving
+task acquires the port rights and out-of-line memory regions carried in
+the message.
+
+ The 'rcv_name' argument specifies a port or port set from which to
+receive. If a port is specified, the caller must possess the receive
+right for the port and the port must not be a member of a port set. If
+no message is present, then the call blocks, subject to the
+'MACH_RCV_TIMEOUT' option.
+
+ If a port set is specified, the call will receive a message sent to
+any of the member ports. It is permissible for the port set to have no
+member ports, and ports may be added and removed while a receive from
+the port set is in progress. The received message can come from any of
+the member ports which have messages, with the proviso that a member
+port with messages will not be indefinitely starved. The
+'msgh_local_port' field in the received message header specifies from
+which port in the port set the message came.
+
+ The 'rcv_size' argument specifies the size of the caller's message
+buffer. The 'mach_msg' call will not receive a message larger than
+'rcv_size'. Messages that are too large are destroyed, unless the
+'MACH_RCV_LARGE' option is used.
+
+ The destination and reply ports are reversed in a received message
+header. The 'msgh_local_port' field names the destination port, from
+which the message was received, and the 'msgh_remote_port' field names
+the reply port right. The bits in 'msgh_bits' are also reversed. The
+'MACH_MSGH_BITS_LOCAL' bits have the value 'MACH_MSG_TYPE_PORT_SEND' if
+the message was sent to a send right, and the value
+'MACH_MSG_TYPE_PORT_SEND_ONCE' if was sent to a send-once right. The
+'MACH_MSGH_BITS_REMOTE' bits describe the reply port right.
+
+ A received message can contain port rights and out-of-line memory.
+The 'msgh_local_port' field does not receive a port right; the act of
+receiving the message destroys the send or send-once right for the
+destination port. The msgh_remote_port field does name a received port
+right, the reply port right, and the message body can carry port rights
+and memory if 'MACH_MSGH_BITS_COMPLEX' is present in msgh_bits.
+Received port rights and memory should be consumed or deallocated in
+some fashion.
+
+ In almost all cases, 'msgh_local_port' will specify the name of a
+receive right, either 'rcv_name' or if 'rcv_name' is a port set, a
+member of 'rcv_name'. If other threads are concurrently manipulating
+the receive right, the situation is more complicated. If the receive
+right is renamed during the call, then 'msgh_local_port' specifies the
+right's new name. If the caller loses the receive right after the
+message was dequeued from it, then 'mach_msg' will proceed instead of
+returning 'MACH_RCV_PORT_DIED'. If the receive right was destroyed,
+then 'msgh_local_port' specifies 'MACH_PORT_DEAD'. If the receive right
+still exists, but isn't held by the caller, then 'msgh_local_port'
+specifies 'MACH_PORT_NULL'.
+
+ Received messages are stamped with a sequence number, taken from the
+port from which the message was received. (Messages received from a
+port set are stamped with a sequence number from the appropriate member
+port.) Newly created ports start with a zero sequence number, and the
+sequence number is reset to zero whenever the port's receive right moves
+between tasks. When a message is dequeued from the port, it is stamped
+with the port's sequence number and the port's sequence number is then
+incremented. The dequeue and increment operations are atomic, so that
+multiple threads receiving messages from a port can use the 'msgh_seqno'
+field to reconstruct the original order of the messages.
+
+ These options modify 'MACH_RCV_MSG'. If 'MACH_RCV_MSG' is not also
+specified, they are ignored.
+
+'MACH_RCV_TIMEOUT'
+ The timeout argument should specify a maximum time (in
+ milliseconds) for the call to block before giving up.(1) If no
+ message arrives before the timeout interval elapses, then the call
+ returns 'MACH_RCV_TIMED_OUT'. A zero timeout is legitimate.
+
+'MACH_RCV_NOTIFY'
+ The notify argument should specify a receive right for a notify
+ port. If receiving the reply port creates a new port right in the
+ caller, then the notify port is used to request a dead-name
+ notification for the new port right.
+
+'MACH_RCV_INTERRUPT'
+ If specified, the 'mach_msg' call will return
+ 'MACH_RCV_INTERRUPTED' if a software interrupt aborts the call.
+ Otherwise, the receive operation will be retried.
+
+'MACH_RCV_LARGE'
+ If the message is larger than 'rcv_size', then the message remains
+ queued instead of being destroyed. The call returns
+ 'MACH_RCV_TOO_LARGE' and the actual size of the message is returned
+ in the 'msgh_size' field of the message header.
+
+ The receive operation can generate the following return codes. These
+return codes imply that the call did not dequeue a message:
+
+'MACH_RCV_INVALID_NAME'
+ The specified 'rcv_name' was invalid.
+
+'MACH_RCV_IN_SET'
+ The specified port was a member of a port set.
+
+'MACH_RCV_TIMED_OUT'
+ The timeout interval expired.
+
+'MACH_RCV_INTERRUPTED'
+ A software interrupt occurred.
+
+'MACH_RCV_PORT_DIED'
+ The caller lost the rights specified by 'rcv_name'.
+
+'MACH_RCV_PORT_CHANGED'
+ 'rcv_name' specified a receive right which was moved into a port
+ set during the call.
+
+'MACH_RCV_TOO_LARGE'
+ When using 'MACH_RCV_LARGE', and the message was larger than
+ 'rcv_size'. The message is left queued, and its actual size is
+ returned in the 'msgh_size' field of the message buffer.
+
+ These return codes imply that a message was dequeued and destroyed:
+
+'MACH_RCV_HEADER_ERROR'
+ A resource shortage prevented the reception of the port rights in
+ the message header.
+
+'MACH_RCV_INVALID_NOTIFY'
+ When using 'MACH_RCV_NOTIFY', the notify argument did not denote a
+ valid receive right.
+
+'MACH_RCV_TOO_LARGE'
+ When not using 'MACH_RCV_LARGE', a message larger than 'rcv_size'
+ was dequeued and destroyed.
+
+ In these situations, when a message is dequeued and then destroyed,
+the reply port and all port rights and memory in the message body are
+destroyed. However, the caller receives the message's header, with all
+fields correct, including the destination port but excepting the reply
+port, which is 'MACH_PORT_NULL'.
+
+ These return codes imply that a message was received:
+
+'MACH_RCV_BODY_ERROR'
+ A resource shortage prevented the reception of a port right or
+ out-of-line memory region in the message body. The message header,
+ including the reply port, is correct. The kernel attempts to
+ transfer all port rights and memory regions in the body, and only
+ destroys those that can't be transferred.
+
+'MACH_RCV_INVALID_DATA'
+ The specified message buffer was not writable. The calling task
+ did successfully receive the port rights and out-of-line memory
+ regions in the message.
+
+'MACH_MSG_SUCCESS'
+ A message was received.
+
+ Resource shortages can occur after a message is dequeued, while
+transferring port rights and out-of-line memory regions to the receiving
+task. The 'mach_msg' call returns 'MACH_RCV_HEADER_ERROR' or
+'MACH_RCV_BODY_ERROR' in this situation. These return codes always
+carry extra bits (bitwise-ored) that indicate the nature of the resource
+shortage:
+
+'MACH_MSG_IPC_SPACE'
+ There was no room in the task's IPC name space for another port
+ name.
+
+'MACH_MSG_VM_SPACE'
+ There was no room in the task's VM address space for an out-of-line
+ memory region.
+
+'MACH_MSG_IPC_KERNEL'
+ A kernel resource shortage prevented the reception of a port right.
+
+'MACH_MSG_VM_KERNEL'
+ A kernel resource shortage prevented the reception of an
+ out-of-line memory region.
+
+ If a resource shortage prevents the reception of a port right, the
+port right is destroyed and the caller sees the name 'MACH_PORT_NULL'.
+If a resource shortage prevents the reception of an out-of-line memory
+region, the region is destroyed and the caller receives a zero address.
+In addition, the 'msgt_size' ('msgtl_size') field in the data's type
+descriptor is changed to zero. If a resource shortage prevents the
+reception of out-of-line memory carrying port rights, then the port
+rights are always destroyed if the memory region can not be received. A
+task never receives port rights or memory regions that it isn't told
+about.
+
+ ---------- Footnotes ----------
+
+ (1) If MACH_RCV_TIMEOUT is used without MACH_RCV_INTERRUPT, then the
+timeout duration might not be accurate. When the call is interrupted
+and automatically retried, the original timeout is used. If interrupts
+occur frequently enough, the timeout interval might never expire.
+
+
+File: mach.info, Node: Atomicity, Prev: Message Receive, Up: Messaging
Interface
+
+4.2.7 Atomicity
+---------------
+
+The 'mach_msg' call handles port rights in a message header atomically.
+Port rights and out-of-line memory in a message body do not enjoy this
+atomicity guarantee. The message body may be processed front-to-back,
+back-to-front, first out-of-line memory then port rights, in some random
+order, or even atomically.
+
+ For example, consider sending a message with the destination port
+specified as 'MACH_MSG_TYPE_MOVE_SEND' and the reply port specified as
+'MACH_MSG_TYPE_COPY_SEND'. The same send right, with one
+user-reference, is supplied for both the 'msgh_remote_port' and
+'msgh_local_port' fields. Because 'mach_msg' processes the message
+header atomically, this succeeds. If 'msgh_remote_port' were processed
+before 'msgh_local_port', then 'mach_msg' would return
+'MACH_SEND_INVALID_REPLY' in this situation.
+
+ On the other hand, suppose the destination and reply port are both
+specified as 'MACH_MSG_TYPE_MOVE_SEND', and again the same send right
+with one user-reference is supplied for both. Now the send operation
+fails, but because it processes the header atomically, mach_msg can
+return either 'MACH_SEND_INVALID_DEST' or 'MACH_SEND_INVALID_REPLY'.
+
+ For example, consider receiving a message at the same time another
+thread is deallocating the destination receive right. Suppose the reply
+port field carries a send right for the destination port. If the
+deallocation happens before the dequeuing, then the receiver gets
+'MACH_RCV_PORT_DIED'. If the deallocation happens after the receive,
+then the 'msgh_local_port' and the 'msgh_remote_port' fields both
+specify the same right, which becomes a dead name when the receive right
+is deallocated. If the deallocation happens between the dequeue and the
+receive, then the 'msgh_local_port' and 'msgh_remote_port' fields both
+specify 'MACH_PORT_DEAD'. Because the header is processed atomically,
+it is not possible for just one of the two fields to hold
+'MACH_PORT_DEAD'.
+
+ The 'MACH_RCV_NOTIFY' option provides a more likely example. Suppose
+a message carrying a send-once right reply port is received with
+'MACH_RCV_NOTIFY' at the same time the reply port is destroyed. If the
+reply port is destroyed first, then 'msgh_remote_port' specifies
+'MACH_PORT_DEAD' and the kernel does not generate a dead-name
+notification. If the reply port is destroyed after it is received, then
+'msgh_remote_port' specifies a dead name for which the kernel generates
+a dead-name notification. It is not possible to receive the reply port
+right and have it turn into a dead name before the dead-name
+notification is requested; as part of the message header the reply port
+is received atomically.
+
+
+File: mach.info, Node: Port Manipulation Interface, Prev: Messaging
Interface, Up: Inter Process Communication
+
+4.3 Port Manipulation Interface
+===============================
+
+This section describes the interface to create, destroy and manipulate
+ports, port rights and port sets.
+
+ -- Data type: ipc_space_t
+ This is a 'task_t' (and as such a 'mach_port_t'), which holds a
+ port name associated with a port that represents an IPC space in
+ the kernel. An IPC space is used by the kernel to manage the port
+ names and rights available to a task. The IPC space doesn't get a
+ port name of its own. Instead the port name of the task containing
+ the IPC space is used to name the IPC space of the task (as is
+ indicated by the fact that the type of 'ipc_space_t' is actually
+ 'task_t').
+
+ The IPC spaces of tasks are the only ones accessible outside of the
+ kernel.
+
+* Menu:
+
+* Port Creation:: How to create new ports and port sets.
+* Port Destruction:: How to destroy ports and port sets.
+* Port Names:: How to query and manipulate port names.
+* Port Rights:: How to work with port rights.
+* Ports and other Tasks:: How to move rights between tasks.
+* Receive Rights:: How to work with receive rights.
+* Port Sets:: How to work with port sets.
+* Request Notifications:: How to request notifications for events.
+
+
+File: mach.info, Node: Port Creation, Next: Port Destruction, Up: Port
Manipulation Interface
+
+4.3.1 Port Creation
+-------------------
+
+ -- Function: kern_return_t mach_port_allocate (ipc_space_t TASK,
+ mach_port_right_t RIGHT, mach_port_t *NAME)
+ The 'mach_port_allocate' function creates a new right in the
+ specified task. The new right's name is returned in NAME, which
+ may be any name that wasn't in use.
+
+ The RIGHT argument takes the following values:
+
+ 'MACH_PORT_RIGHT_RECEIVE'
+ 'mach_port_allocate' creates a port. The new port is not a
+ member of any port set. It doesn't have any extant send or
+ send-once rights. Its make-send count is zero, its sequence
+ number is zero, its queue limit is 'MACH_PORT_QLIMIT_DEFAULT',
+ and it has no queued messages. NAME denotes the receive right
+ for the new port.
+
+ TASK does not hold send rights for the new port, only the
+ receive right. 'mach_port_insert_right' and
+ 'mach_port_extract_right' can be used to convert the receive
+ right into a combined send/receive right.
+
+ 'MACH_PORT_RIGHT_PORT_SET'
+ 'mach_port_allocate' creates a port set. The new port set has
+ no members.
+
+ 'MACH_PORT_RIGHT_DEAD_NAME'
+ 'mach_port_allocate' creates a dead name. The new dead name
+ has one user reference.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_TASK' if TASK was invalid, 'KERN_INVALID_VALUE' if
+ RIGHT was invalid, 'KERN_NO_SPACE' if there was no room in TASK's
+ IPC name space for another right and 'KERN_RESOURCE_SHORTAGE' if
+ the kernel ran out of memory.
+
+ The 'mach_port_allocate' call is actually an RPC to TASK, normally
+ a send right for a task port, but potentially any send right. In
+ addition to the normal diagnostic return codes from the call's
+ server (normally the kernel), the call may return 'mach_msg' return
+ codes.
+
+ -- Function: mach_port_t mach_reply_port ()
+ The 'mach_reply_port' system call creates a reply port in the
+ calling task.
+
+ 'mach_reply_port' creates a port, giving the calling task the
+ receive right for the port. The call returns the name of the new
+ receive right.
+
+ This is very much like creating a receive right with the
+ 'mach_port_allocate' call, with two differences. First,
+ 'mach_reply_port' is a system call and not an RPC (which requires a
+ reply port). Second, the port created by 'mach_reply_port' may be
+ optimized for use as a reply port.
+
+ The function returns 'MACH_PORT_NULL' if a resource shortage
+ prevented the creation of the receive right.
+
+ -- Function: kern_return_t mach_port_allocate_name (ipc_space_t TASK,
+ mach_port_right_t RIGHT, mach_port_t NAME)
+ The function 'mach_port_allocate_name' creates a new right in the
+ specified task, with a specified name for the new right. NAME must
+ not already be in use for some right, and it can't be the reserved
+ values 'MACH_PORT_NULL' and 'MACH_PORT_DEAD'.
+
+ The RIGHT argument takes the following values:
+
+ 'MACH_PORT_RIGHT_RECEIVE'
+ 'mach_port_allocate_name' creates a port. The new port is not
+ a member of any port set. It doesn't have any extant send or
+ send-once rights. Its make-send count is zero, its sequence
+ number is zero, its queue limit is 'MACH_PORT_QLIMIT_DEFAULT',
+ and it has no queued messages. NAME denotes the receive right
+ for the new port.
+
+ TASK does not hold send rights for the new port, only the
+ receive right. 'mach_port_insert_right' and
+ 'mach_port_extract_right' can be used to convert the receive
+ right into a combined send/receive right.
+
+ 'MACH_PORT_RIGHT_PORT_SET'
+ 'mach_port_allocate_name' creates a port set. The new port
+ set has no members.
+
+ 'MACH_PORT_RIGHT_DEAD_NAME'
+ 'mach_port_allocate_name' creates a new dead name. The new
+ dead name has one user reference.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_TASK' if TASK was invalid, 'KERN_INVALID_VALUE' if
+ RIGHT was invalid or NAME was 'MACH_PORT_NULL' or 'MACH_PORT_DEAD',
+ 'KERN_NAME_EXISTS' if NAME was already in use for a port right and
+ 'KERN_RESOURCE_SHORTAGE' if the kernel ran out of memory.
+
+ The 'mach_port_allocate_name' call is actually an RPC to TASK,
+ normally a send right for a task port, but potentially any send
+ right. In addition to the normal diagnostic return codes from the
+ call's server (normally the kernel), the call may return 'mach_msg'
+ return codes.
+
+
+File: mach.info, Node: Port Destruction, Next: Port Names, Prev: Port
Creation, Up: Port Manipulation Interface
+
+4.3.2 Port Destruction
+----------------------
+
+ -- Function: kern_return_t mach_port_deallocate (ipc_space_t TASK,
+ mach_port_t NAME)
+ The function 'mach_port_deallocate' releases a user reference for a
+ right in TASK's IPC name space. It allows a task to release a user
+ reference for a send or send-once right without failing if the port
+ has died and the right is now actually a dead name.
+
+ If NAME denotes a dead name, send right, or send-once right, then
+ the right loses one user reference. If it only had one user
+ reference, then the right is destroyed.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_TASK' if TASK was invalid, 'KERN_INVALID_NAME' if
+ NAME did not denote a right and 'KERN_INVALID_RIGHT' if NAME
+ denoted an invalid right.
+
+ The 'mach_port_deallocate' call is actually an RPC to TASK,
+ normally a send right for a task port, but potentially any send
+ right. In addition to the normal diagnostic return codes from the
+ call's server (normally the kernel), the call may return 'mach_msg'
+ return codes.
+
+ -- Function: kern_return_t mach_port_destroy (ipc_space_t TASK,
+ mach_port_t NAME)
+ The function 'mach_port_destroy' deallocates all rights denoted by
+ a name. The name becomes immediately available for reuse.
+
+ For most purposes, 'mach_port_mod_refs' and 'mach_port_deallocate'
+ are preferable.
+
+ If NAME denotes a port set, then all members of the port set are
+ implicitly removed from the port set.
+
+ If NAME denotes a receive right that is a member of a port set, the
+ receive right is implicitly removed from the port set. If there is
+ a port-destroyed request registered for the port, then the receive
+ right is not actually destroyed, but instead is sent in a
+ port-destroyed notification to the backup port. If there is no
+ registered port-destroyed request, remaining messages queued to the
+ port are destroyed and extant send and send-once rights turn into
+ dead names. If those send and send-once rights have dead-name
+ requests registered, then dead-name notifications are generated for
+ them.
+
+ If NAME denotes a send-once right, then the send-once right is used
+ to produce a send-once notification for the port.
+
+ If NAME denotes a send-once, send, and/or receive right, and it has
+ a dead-name request registered, then the registered send-once right
+ is used to produce a port-deleted notification for the name.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_TASK' if TASK was invalid, 'KERN_INVALID_NAME' if
+ NAME did not denote a right.
+
+ The 'mach_port_destroy' call is actually an RPC to TASK, normally a
+ send right for a task port, but potentially any send right. In
+ addition to the normal diagnostic return codes from the call's
+ server (normally the kernel), the call may return 'mach_msg' return
+ codes.
+
+
+File: mach.info, Node: Port Names, Next: Port Rights, Prev: Port
Destruction, Up: Port Manipulation Interface
+
+4.3.3 Port Names
+----------------
+
+ -- Function: kern_return_t mach_port_names (ipc_space_t TASK,
+ mach_port_array_t *NAMES, mach_msg_type_number_t *NCOUNT,
+ mach_port_type_array_t *TYPES, mach_msg_type_number_t *TCOUNT)
+ The function 'mach_port_names' returns information about TASK's
+ port name space. For each name, it also returns what type of
+ rights TASK holds. (The same information returned by
+ 'mach_port_type'.) NAMES and TYPES are arrays that are
+ automatically allocated when the reply message is received. The
+ user should 'vm_deallocate' them when the data is no longer needed.
+
+ 'mach_port_names' will return in NAMES the names of the ports, port
+ sets, and dead names in the task's port name space, in no
+ particular order and in NCOUNT the number of names returned. It
+ will return in TYPES the type of each corresponding name, which
+ indicates what kind of rights the task holds with that name.
+ TCOUNT should be the same as NCOUNT.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_TASK' if TASK was invalid, 'KERN_RESOURCE_SHORTAGE'
+ if the kernel ran out of memory.
+
+ The 'mach_port_names' call is actually an RPC to TASK, normally a
+ send right for a task port, but potentially any send right. In
+ addition to the normal diagnostic return codes from the call's
+ server (normally the kernel), the call may return 'mach_msg' return
+ codes.
+
+ -- Function: kern_return_t mach_port_type (ipc_space_t TASK,
+ mach_port_t NAME, mach_port_type_t *PTYPE)
+ The function 'mach_port_type' returns information about TASK's
+ rights for a specific name in its port name space. The returned
+ PTYPE is a bitmask indicating what rights TASK holds for the port,
+ port set or dead name. The bitmask is composed of the following
+ bits:
+
+ 'MACH_PORT_TYPE_SEND'
+ The name denotes a send right.
+
+ 'MACH_PORT_TYPE_RECEIVE'
+ The name denotes a receive right.
+
+ 'MACH_PORT_TYPE_SEND_ONCE'
+ The name denotes a send-once right.
+
+ 'MACH_PORT_TYPE_PORT_SET'
+ The name denotes a port set.
+
+ 'MACH_PORT_TYPE_DEAD_NAME'
+ The name is a dead name.
+
+ 'MACH_PORT_TYPE_DNREQUEST'
+ A dead-name request has been registered for the right.
+
+ 'MACH_PORT_TYPE_MAREQUEST'
+ A msg-accepted request for the right is pending.
+
+ 'MACH_PORT_TYPE_COMPAT'
+ The port right was created in the compatibility mode.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_TASK' if TASK was invalid and 'KERN_INVALID_NAME' if
+ NAME did not denote a right.
+
+ The 'mach_port_type' call is actually an RPC to TASK, normally a
+ send right for a task port, but potentially any send right. In
+ addition to the normal diagnostic return codes from the call's
+ server (normally the kernel), the call may return 'mach_msg' return
+ codes.
+
+ -- Function: kern_return_t mach_port_rename (ipc_space_t TASK,
+ mach_port_t OLD_NAME, mach_port_t NEW_NAME)
+ The function 'mach_port_rename' changes the name by which a port,
+ port set, or dead name is known to TASK. OLD_NAME is the original
+ name and NEW_NAME the new name for the port right. NEW_NAME must
+ not already be in use, and it can't be the distinguished values
+ 'MACH_PORT_NULL' and 'MACH_PORT_DEAD'.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_TASK' if TASK was invalid, 'KERN_INVALID_NAME' if
+ OLD_NAME did not denote a right, 'KERN_INVALID_VALUE' if NEW_NAME
+ was 'MACH_PORT_NULL' or 'MACH_PORT_DEAD', 'KERN_NAME_EXISTS' if
+ 'new_name' already denoted a right and 'KERN_RESOURCE_SHORTAGE' if
+ the kernel ran out of memory.
+
+ The 'mach_port_rename' call is actually an RPC to TASK, normally a
+ send right for a task port, but potentially any send right. In
+ addition to the normal diagnostic return codes from the call's
+ server (normally the kernel), the call may return 'mach_msg' return
+ codes.
+
+
+File: mach.info, Node: Port Rights, Next: Ports and other Tasks, Prev: Port
Names, Up: Port Manipulation Interface
+
+4.3.4 Port Rights
+-----------------
+
+ -- Function: kern_return_t mach_port_get_refs (ipc_space_t TASK,
+ mach_port_t NAME, mach_port_right_t RIGHT,
+ mach_port_urefs_t *REFS)
+ The function 'mach_port_get_refs' returns the number of user
+ references a task has for a right.
+
+ The RIGHT argument takes the following values:
+ * 'MACH_PORT_RIGHT_SEND'
+ * 'MACH_PORT_RIGHT_RECEIVE'
+ * 'MACH_PORT_RIGHT_SEND_ONCE'
+ * 'MACH_PORT_RIGHT_PORT_SET'
+ * 'MACH_PORT_RIGHT_DEAD_NAME'
+
+ If NAME denotes a right, but not the type of right specified, then
+ zero is returned. Otherwise a positive number of user references
+ is returned. Note that a name may simultaneously denote send and
+ receive rights.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_TASK' if TASK was invalid, 'KERN_INVALID_VALUE' if
+ RIGHT was invalid and 'KERN_INVALID_NAME' if NAME did not denote a
+ right.
+
+ The 'mach_port_get_refs' call is actually an RPC to TASK, normally
+ a send right for a task port, but potentially any send right. In
+ addition to the normal diagnostic return codes from the call's
+ server (normally the kernel), the call may return 'mach_msg' return
+ codes.
+
+ -- Function: kern_return_t mach_port_mod_refs (ipc_space_t TASK,
+ mach_port_t NAME, mach_port_right_t RIGHT,
+ mach_port_delta_t DELTA)
+ The function 'mach_port_mod_refs' requests that the number of user
+ references a task has for a right be changed. This results in the
+ right being destroyed, if the number of user references is changed
+ to zero. The task holding the right is TASK, NAME should denote
+ the specified right. RIGHT denotes the type of right being
+ modified. DELTA is the signed change to the number of user
+ references.
+
+ The RIGHT argument takes the following values:
+ * 'MACH_PORT_RIGHT_SEND'
+ * 'MACH_PORT_RIGHT_RECEIVE'
+ * 'MACH_PORT_RIGHT_SEND_ONCE'
+ * 'MACH_PORT_RIGHT_PORT_SET'
+ * 'MACH_PORT_RIGHT_DEAD_NAME'
+
+ The number of user references for the right is changed by the
+ amount DELTA, subject to the following restrictions: port sets,
+ receive rights, and send-once rights may only have one user
+ reference. The resulting number of user references can't be
+ negative. If the resulting number of user references is zero, the
+ effect is to deallocate the right. For dead names and send rights,
+ there is an implementation-defined maximum number of user
+ references.
+
+ If the call destroys the right, then the effect is as described for
+ 'mach_port_destroy', with the exception that 'mach_port_destroy'
+ simultaneously destroys all the rights denoted by a name, while
+ 'mach_port_mod_refs' can only destroy one right. The name will be
+ available for reuse if it only denoted the one right.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_TASK' if TASK was invalid, 'KERN_INVALID_VALUE' if
+ RIGHT was invalid or the user-reference count would become
+ negative, 'KERN_INVALID_NAME' if NAME did not denote a right,
+ 'KERN_INVALID_RIGHT' if NAME denoted a right, but not the specified
+ right and 'KERN_UREFS_OVERFLOW' if the user-reference count would
+ overflow.
+
+ The 'mach_port_mod_refs' call is actually an RPC to TASK, normally
+ a send right for a task port, but potentially any send right. In
+ addition to the normal diagnostic return codes from the call's
+ server (normally the kernel), the call may return 'mach_msg' return
+ codes.
+
+
+File: mach.info, Node: Ports and other Tasks, Next: Receive Rights, Prev:
Port Rights, Up: Port Manipulation Interface
+
+4.3.5 Ports and other Tasks
+---------------------------
+
+ -- Function: kern_return_t mach_port_insert_right (ipc_space_t TASK,
+ mach_port_t NAME, mach_port_t RIGHT,
+ mach_msg_type_name_t RIGHT_TYPE)
+ The function MACH_PORT_INSERT_RIGHT inserts into TASK the caller's
+ right for a port, using a specified name for the right in the
+ target task.
+
+ The specified NAME can't be one of the reserved values
+ 'MACH_PORT_NULL' or 'MACH_PORT_DEAD'. The RIGHT can't be
+ 'MACH_PORT_NULL' or 'MACH_PORT_DEAD'.
+
+ The argument RIGHT_TYPE specifies a right to be inserted and how
+ that right should be extracted from the caller. It should be a
+ value appropriate for MSGT_NAME; see 'mach_msg'.
+
+ If RIGHT_TYPE is 'MACH_MSG_TYPE_MAKE_SEND',
+ 'MACH_MSG_TYPE_MOVE_SEND', or 'MACH_MSG_TYPE_COPY_SEND', then a
+ send right is inserted. If the target already holds send or
+ receive rights for the port, then NAME should denote those rights
+ in the target. Otherwise, NAME should be unused in the target. If
+ the target already has send rights, then those send rights gain an
+ additional user reference. Otherwise, the target gains a send
+ right, with a user reference count of one.
+
+ If RIGHT_TYPE is 'MACH_MSG_TYPE_MAKE_SEND_ONCE' or
+ 'MACH_MSG_TYPE_MOVE_SEND_ONCE', then a send-once right is inserted.
+ The name should be unused in the target. The target gains a
+ send-once right.
+
+ If RIGHT_TYPE is 'MACH_MSG_TYPE_MOVE_RECEIVE', then a receive right
+ is inserted. If the target already holds send rights for the port,
+ then name should denote those rights in the target. Otherwise,
+ name should be unused in the target. The receive right is moved
+ into the target task.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_TASK' if TASK was invalid, 'KERN_INVALID_VALUE' if
+ RIGHT was not a port right or NAME was 'MACH_PORT_NULL' or
+ 'MACH_PORT_DEAD', 'KERN_NAME_EXISTS' if NAME already denoted a
+ right, 'KERN_INVALID_CAPABILITY' if RIGHT was 'MACH_PORT_NULL' or
+ 'MACH_PORT_DEAD' 'KERN_RIGHT_EXISTS' if TASK already had rights for
+ the port, with a different name, 'KERN_UREFS_OVERFLOW' if the
+ user-reference count would overflow and 'KERN_RESOURCE_SHORTAGE' if
+ the kernel ran out of memory.
+
+ The 'mach_port_insert_right' call is actually an RPC to TASK,
+ normally a send right for a task port, but potentially any send
+ right. In addition to the normal diagnostic return codes from the
+ call's server (normally the kernel), the call may return 'mach_msg'
+ return codes.
+
+ -- Function: kern_return_t mach_port_extract_right (ipc_space_t TASK,
+ mach_port_t NAME, mach_msg_type_name_t DESIRED_TYPE,
+ mach_port_t *RIGHT, mach_msg_type_name_t *ACQUIRED_TYPE)
+ The function MACH_PORT_EXTRACT_RIGHT extracts a port right from the
+ target TASK and returns it to the caller as if the task sent the
+ right voluntarily, using DESIRED_TYPE as the value of MSGT_NAME.
+ *Note Mach Message Call::.
+
+ The returned value of ACQUIRED_TYPE will be
+ 'MACH_MSG_TYPE_PORT_SEND' if a send right is extracted,
+ 'MACH_MSG_TYPE_PORT_RECEIVE' if a receive right is extracted, and
+ 'MACH_MSG_TYPE_PORT_SEND_ONCE' if a send-once right is extracted.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_TASK' if TASK was invalid, 'KERN_INVALID_NAME' if
+ NAME did not denote a right, 'KERN_INVALID_RIGHT' if NAME denoted a
+ right, but an invalid one, 'KERN_INVALID_VALUE' if DESIRED_TYPE was
+ invalid.
+
+ The 'mach_port_extract_right' call is actually an RPC to TASK,
+ normally a send right for a task port, but potentially any send
+ right. In addition to the normal diagnostic return codes from the
+ call's server (normally the kernel), the call may return 'mach_msg'
+ return codes.
+
+
+File: mach.info, Node: Receive Rights, Next: Port Sets, Prev: Ports and
other Tasks, Up: Port Manipulation Interface
+
+4.3.6 Receive Rights
+--------------------
+
+ -- Data type: mach_port_seqno_t
+ The 'mach_port_seqno_t' data type is an 'unsigned int' which
+ contains the sequence number of a port.
+
+ -- Data type: mach_port_mscount_t
+ The 'mach_port_mscount_t' data type is an 'unsigned int' which
+ contains the make-send count for a port.
+
+ -- Data type: mach_port_msgcount_t
+ The 'mach_port_msgcount_t' data type is an 'unsigned int' which
+ contains a number of messages.
+
+ -- Data type: mach_port_rights_t
+ The 'mach_port_rights_t' data type is an 'unsigned int' which
+ contains a number of rights for a port.
+
+ -- Data type: mach_port_status_t
+ This structure contains some status information about a port, which
+ can be queried with 'mach_port_get_receive_status'. It has the
+ following members:
+
+ 'mach_port_t mps_pset'
+ The containing port set.
+
+ 'mach_port_seqno_t mps_seqno'
+ The sequence number.
+
+ 'mach_port_mscount_t mps_mscount'
+ The make-send count.
+
+ 'mach_port_msgcount_t mps_qlimit'
+ The maximum number of messages in the queue.
+
+ 'mach_port_msgcount_t mps_msgcount'
+ The current number of messages in the queue.
+
+ 'mach_port_rights_t mps_sorights'
+ The number of send-once rights that exist.
+
+ 'boolean_t mps_srights'
+ 'TRUE' if send rights exist.
+
+ 'boolean_t mps_pdrequest'
+ 'TRUE' if port-deleted notification is requested.
+
+ 'boolean_t mps_nsrequest'
+ 'TRUE' if no-senders notification is requested.
+
+ -- Function: kern_return_t mach_port_get_receive_status
+ (ipc_space_t TASK, mach_port_t NAME,
+ mach_port_status_t *STATUS)
+ The function 'mach_port_get_receive_status' returns the current
+ status of the specified receive right.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_TASK' if TASK was invalid, 'KERN_INVALID_NAME' if
+ NAME did not denote a right and 'KERN_INVALID_RIGHT' if NAME
+ denoted a right, but not a receive right.
+
+ The 'mach_port_get_receive_status' call is actually an RPC to TASK,
+ normally a send right for a task port, but potentially any send
+ right. In addition to the normal diagnostic return codes from the
+ call's server (normally the kernel), the call may return 'mach_msg'
+ return codes.
+
+ -- Function: kern_return_t mach_port_set_mscount (ipc_space_t TASK,
+ mach_port_t NAME, mach_port_mscount_t MSCOUNT)
+ The function 'mach_port_set_mscount' changes the make-send count of
+ TASK's receive right named NAME to MSCOUNT. All values for MSCOUNT
+ are valid.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_TASK' if TASK was invalid, 'KERN_INVALID_NAME' if
+ NAME did not denote a right and 'KERN_INVALID_RIGHT' if NAME
+ denoted a right, but not a receive right.
+
+ The 'mach_port_set_mscount' call is actually an RPC to TASK,
+ normally a send right for a task port, but potentially any send
+ right. In addition to the normal diagnostic return codes from the
+ call's server (normally the kernel), the call may return 'mach_msg'
+ return codes.
+
+ -- Function: kern_return_t mach_port_set_qlimit (ipc_space_t TASK,
+ mach_port_t NAME, mach_port_msgcount_t QLIMIT)
+ The function 'mach_port_set_qlimit' changes the queue limit TASK's
+ receive right named NAME to QLIMIT. Valid values for QLIMIT are
+ between zero and 'MACH_PORT_QLIMIT_MAX', inclusive.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_TASK' if TASK was invalid, 'KERN_INVALID_NAME' if
+ NAME did not denote a right, 'KERN_INVALID_RIGHT' if NAME denoted a
+ right, but not a receive right and 'KERN_INVALID_VALUE' if QLIMIT
+ was invalid.
+
+ The 'mach_port_set_qlimit' call is actually an RPC to TASK,
+ normally a send right for a task port, but potentially any send
+ right. In addition to the normal diagnostic return codes from the
+ call's server (normally the kernel), the call may return 'mach_msg'
+ return codes.
+
+ -- Function: kern_return_t mach_port_set_seqno (ipc_space_t TASK,
+ mach_port_t NAME, mach_port_seqno_t SEQNO)
+ The function 'mach_port_set_seqno' changes the sequence number
+ TASK's receive right named NAME to SEQNO. All sequence number
+ values are valid. The next message received from the port will be
+ stamped with the specified sequence number.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_TASK' if TASK was invalid, 'KERN_INVALID_NAME' if
+ NAME did not denote a right and 'KERN_INVALID_RIGHT' if NAME
+ denoted a right, but not a receive right.
+
+ The 'mach_port_set_seqno' call is actually an RPC to TASK, normally
+ a send right for a task port, but potentially any send right. In
+ addition to the normal diagnostic return codes from the call's
+ server (normally the kernel), the call may return 'mach_msg' return
+ codes.
+
+
+File: mach.info, Node: Port Sets, Next: Request Notifications, Prev:
Receive Rights, Up: Port Manipulation Interface
+
+4.3.7 Port Sets
+---------------
+
+ -- Function: kern_return_t mach_port_get_set_status (ipc_space_t TASK,
+ mach_port_t NAME, mach_port_array_t *MEMBERS,
+ mach_msg_type_number_t *COUNT)
+ The function 'mach_port_get_set_status' returns the members of a
+ port set. MEMBERS is an array that is automatically allocated when
+ the reply message is received. The user should 'vm_deallocate' it
+ when the data is no longer needed.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_TASK' if TASK was invalid, 'KERN_INVALID_NAME' if
+ NAME did not denote a right, 'KERN_INVALID_RIGHT' if NAME denoted a
+ right, but not a receive right and 'KERN_RESOURCE_SHORTAGE' if the
+ kernel ran out of memory.
+
+ The 'mach_port_get_set_status' call is actually an RPC to TASK,
+ normally a send right for a task port, but potentially any send
+ right. In addition to the normal diagnostic return codes from the
+ call's server (normally the kernel), the call may return 'mach_msg'
+ return codes.
+
+ -- Function: kern_return_t mach_port_move_member (ipc_space_t TASK,
+ mach_port_t MEMBER, mach_port_t AFTER)
+ The function MACH_PORT_MOVE_MEMBER moves the receive right MEMBER
+ into the port set AFTER. If the receive right is already a member
+ of another port set, it is removed from that set first (the whole
+ operation is atomic). If the port set is 'MACH_PORT_NULL', then
+ the receive right is not put into a port set, but removed from its
+ current port set.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_TASK' if TASK was invalid, 'KERN_INVALID_NAME' if
+ MEMBER or AFTER did not denote a right, 'KERN_INVALID_RIGHT' if
+ MEMBER denoted a right, but not a receive right or AFTER denoted a
+ right, but not a port set, and 'KERN_NOT_IN_SET' if AFTER was
+ 'MACH_PORT_NULL', but 'member' wasn't currently in a port set.
+
+ The 'mach_port_move_member' call is actually an RPC to TASK,
+ normally a send right for a task port, but potentially any send
+ right. In addition to the normal diagnostic return codes from the
+ call's server (normally the kernel), the call may return 'mach_msg'
+ return codes.
+
+
+File: mach.info, Node: Request Notifications, Prev: Port Sets, Up: Port
Manipulation Interface
+
+4.3.8 Request Notifications
+---------------------------
+
+ -- Function: kern_return_t mach_port_request_notification
+ (ipc_space_t TASK, mach_port_t NAME, mach_msg_id_t VARIANT,
+ mach_port_mscount_t SYNC, mach_port_t NOTIFY,
+ mach_msg_type_name_t NOTIFY_TYPE, mach_port_t *PREVIOUS)
+ The function 'mach_port_request_notification' registers a request
+ for a notification and supplies the send-once right NOTIFY to which
+ the notification will be sent. The NOTIFY_TYPE denotes the IPC
+ type for the send-once right, which can be
+ 'MACH_MSG_TYPE_MAKE_SEND_ONCE' or 'MACH_MSG_TYPE_MOVE_SEND_ONCE'.
+ It is an atomic swap, returning the previously registered send-once
+ right (or 'MACH_PORT_NULL' for none) in PREVIOUS. A previous
+ notification request may be cancelled by providing 'MACH_PORT_NULL'
+ for NOTIFY.
+
+ The VARIANT argument takes the following values:
+
+ 'MACH_NOTIFY_PORT_DESTROYED'
+ SYNC must be zero. The NAME must specify a receive right, and
+ the call requests a port-destroyed notification for the
+ receive right. If the receive right were to have been
+ destroyed, say by 'mach_port_destroy', then instead the
+ receive right will be sent in a port-destroyed notification to
+ the registered send-once right.
+
+ 'MACH_NOTIFY_DEAD_NAME'
+ The call requests a dead-name notification. NAME specifies
+ send, receive, or send-once rights for a port. If the port is
+ destroyed (and the right remains, becoming a dead name), then
+ a dead-name notification which carries the name of the right
+ will be sent to the registered send-once right. If NOTIFY is
+ not null and sync is non-zero, the name may specify a dead
+ name, and a dead-name notification is immediately generated.
+
+ Whenever a dead-name notification is generated, the user
+ reference count of the dead name is incremented. For example,
+ a send right with two user refs has a registered dead-name
+ request. If the port is destroyed, the send right turns into
+ a dead name with three user refs (instead of two), and a
+ dead-name notification is generated.
+
+ If the name is made available for reuse, perhaps because of
+ 'mach_port_destroy' or 'mach_port_mod_refs', or the name
+ denotes a send-once right which has a message sent to it, then
+ the registered send-once right is used to generate a
+ port-deleted notification.
+
+ 'MACH_NOTIFY_NO_SENDERS'
+ The call requests a no-senders notification. NAME must
+ specify a receive right. If NOTIFY is not null, and the
+ receive right's make-send count is greater than or equal to
+ the sync value, and it has no extant send rights, than an
+ immediate no-senders notification is generated. Otherwise the
+ notification is generated when the receive right next loses
+ its last extant send right. In either case, any previously
+ registered send-once right is returned.
+
+ The no-senders notification carries the value the port's
+ make-send count had when it was generated. The make-send
+ count is incremented whenever 'MACH_MSG_TYPE_MAKE_SEND' is
+ used to create a new send right from the receive right. The
+ make-send count is reset to zero when the receive right is
+ carried in a message.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_TASK' if TASK was invalid, 'KERN_INVALID_VALUE' if
+ VARIANT was invalid, 'KERN_INVALID_NAME' if NAME did not denote a
+ right, 'KERN_INVALID_RIGHT' if NAME denoted an invalid right and
+ 'KERN_INVALID_CAPABILITY' if NOTIFY was invalid.
+
+ When using 'MACH_NOTIFY_PORT_DESTROYED', the function returns
+ 'KERN_INVALID_VALUE' if SYNC wasn't zero.
+
+ When using 'MACH_NOTIFY_DEAD_NAME', the function returns
+ 'KERN_RESOURCE_SHORTAGE' if the kernel ran out of memory,
+ 'KERN_INVALID_ARGUMENT' if NAME denotes a dead name, but SYNC is
+ zero or NOTIFY is 'MACH_PORT_NULL', and 'KERN_UREFS_OVERFLOW' if
+ NAME denotes a dead name, but generating an immediate dead-name
+ notification would overflow the name's user-reference count.
+
+ The 'mach_port_request_notification' call is actually an RPC to
+ TASK, normally a send right for a task port, but potentially any
+ send right. In addition to the normal diagnostic return codes from
+ the call's server (normally the kernel), the call may return
+ 'mach_msg' return codes.
+
+
+File: mach.info, Node: Virtual Memory Interface, Next: External Memory
Management, Prev: Inter Process Communication, Up: Top
+
+5 Virtual Memory Interface
+**************************
+
+ -- Data type: vm_task_t
+ This is a 'task_t' (and as such a 'mach_port_t'), which holds a
+ port name associated with a port that represents a virtual memory
+ map in the kernel. An virtual memory map is used by the kernel to
+ manage the address space of a task. The virtual memory map doesn't
+ get a port name of its own. Instead the port name of the task
+ provided with the virtual memory is used to name the virtual memory
+ map of the task (as is indicated by the fact that the type of
+ 'vm_task_t' is actually 'task_t').
+
+ The virtual memory maps of tasks are the only ones accessible
+ outside of the kernel.
+
+* Menu:
+
+* Memory Allocation:: Allocation of new virtual memory.
+* Memory Deallocation:: Freeing unused virtual memory.
+* Data Transfer:: Reading, writing and copying memory.
+* Memory Attributes:: Tweaking memory regions.
+* Mapping Memory Objects:: How to map memory objects.
+* Memory Statistics:: How to get statistics about memory usage.
+
+
+File: mach.info, Node: Memory Allocation, Next: Memory Deallocation, Up:
Virtual Memory Interface
+
+5.1 Memory Allocation
+=====================
+
+ -- Function: kern_return_t vm_allocate (vm_task_t TARGET_TASK,
+ vm_address_t *ADDRESS, vm_size_t SIZE, boolean_t ANYWHERE)
+ The function 'vm_allocate' allocates a region of virtual memory,
+ placing it in the specified TASK's address space.
+
+ The starting address is ADDRESS. If the ANYWHERE option is false,
+ an attempt is made to allocate virtual memory starting at this
+ virtual address. If this address is not at the beginning of a
+ virtual page, it will be rounded down to one. If there is not
+ enough space at this address, no memory will be allocated. If the
+ ANYWHERE option is true, the input value of this address will be
+ ignored, and the space will be allocated wherever it is available.
+ In either case, the address at which memory was actually allocated
+ will be returned in ADDRESS.
+
+ SIZE is the number of bytes to allocate (rounded by the system in a
+ machine dependent way to an integral number of virtual pages).
+
+ If ANYWHERE is true, the kernel should find and allocate any region
+ of the specified size, and return the address of the resulting
+ region in address address, rounded to a virtual page boundary if
+ there is sufficient space.
+
+ The physical memory is not actually allocated until the new virtual
+ memory is referenced. By default, the kernel rounds all addresses
+ down to the nearest page boundary and all memory sizes up to the
+ nearest page size. The global variable 'vm_page_size' contains the
+ page size. 'mach_task_self' returns the value of the current task
+ port which should be used as the TARGET_TASK argument in order to
+ allocate memory in the caller's address space. For languages other
+ than C, these values can be obtained by the calls 'vm_statistics'
+ and 'mach_task_self'. Initially, the pages of allocated memory
+ will be protected to allow all forms of access, and will be
+ inherited in child tasks as a copy. Subsequent calls to
+ 'vm_protect' and 'vm_inherit' may be used to change these
+ properties. The allocated region is always zero-filled.
+
+ The function returns 'KERN_SUCCESS' if the memory was successfully
+ allocated, 'KERN_INVALID_ADDRESS' if an invalid address was
+ specified and 'KERN_NO_SPACE' if there was not enough space left to
+ satisfy the request.
+
+
+File: mach.info, Node: Memory Deallocation, Next: Data Transfer, Prev:
Memory Allocation, Up: Virtual Memory Interface
+
+5.2 Memory Deallocation
+=======================
+
+ -- Function: kern_return_t vm_deallocate (vm_task_t TARGET_TASK,
+ vm_address_t ADDRESS, vm_size_t SIZE)
+ 'vm_deallocate' relinquishes access to a region of a TASK's address
+ space, causing further access to that memory to fail. This address
+ range will be available for reallocation. ADDRESS is the starting
+ address, which will be rounded down to a page boundary. SIZE is
+ the number of bytes to deallocate, which will be rounded up to give
+ a page boundary. Note, that because of the rounding to virtual
+ page boundaries, more than SIZE bytes may be deallocated. Use
+ 'vm_page_size' or 'vm_statistics' to find out the current virtual
+ page size.
+
+ This call may be used to deallocate memory that was passed to a
+ task in a message (via out of line data). In that case, the
+ rounding should cause no trouble, since the region of memory was
+ allocated as a set of pages.
+
+ The 'vm_deallocate' call affects only the task specified by the
+ TARGET_TASK. Other tasks which may have access to this memory may
+ continue to reference it.
+
+ The function returns 'KERN_SUCCESS' if the memory was successfully
+ deallocated and 'KERN_INVALID_ADDRESS' if an invalid or
+ non-allocated address was specified.
+
+
+File: mach.info, Node: Data Transfer, Next: Memory Attributes, Prev: Memory
Deallocation, Up: Virtual Memory Interface
+
+5.3 Data Transfer
+=================
+
+ -- Function: kern_return_t vm_read (vm_task_t TARGET_TASK,
+ vm_address_t ADDRESS, vm_size_t SIZE, vm_offset_t *DATA,
+ mach_msg_type_number_t *DATA_COUNT)
+ The function 'vm_read' allows one task's virtual memory to be read
+ by another task. The TARGET_TASK is the task whose memory is to be
+ read. ADDRESS is the first address to be read and must be on a
+ page boundary. SIZE is the number of bytes of data to be read and
+ must be an integral number of pages. DATA is the array of data
+ copied from the given task, and DATA_COUNT is the size of the data
+ array in bytes (will be an integral number of pages).
+
+ Note that the data array is returned in a newly allocated region;
+ the task reading the data should 'vm_deallocate' this region when
+ it is done with the data.
+
+ The function returns 'KERN_SUCCESS' if the memory was successfully
+ read, 'KERN_INVALID_ADDRESS' if an invalid or non-allocated address
+ was specified or there was not SIZE bytes of data following the
+ address, 'KERN_INVALID_ARGUMENT' if the address does not start on a
+ page boundary or the size is not an integral number of pages,
+ 'KERN_PROTECTION_FAILURE' if the address region in the target task
+ is protected against reading and 'KERN_NO_SPACE' if there was not
+ enough room in the callers virtual memory to allocate space for the
+ data to be returned.
+
+ -- Function: kern_return_t vm_write (vm_task_t TARGET_TASK,
+ vm_address_t ADDRESS, vm_offset_t DATA,
+ mach_msg_type_number_t DATA_COUNT)
+ The function 'vm_write' allows a task to write to the virtual
+ memory of TARGET_TASK. ADDRESS is the starting address in task to
+ be affected. DATA is an array of bytes to be written, and
+ DATA_COUNT the size of the DATA array.
+
+ The current implementation requires that ADDRESS, DATA and
+ DATA_COUNT all be page-aligned. Otherwise, 'KERN_INVALID_ARGUMENT'
+ is returned.
+
+ The function returns 'KERN_SUCCESS' if the memory was successfully
+ written, 'KERN_INVALID_ADDRESS' if an invalid or non-allocated
+ address was specified or there was not DATA_COUNT bytes of
+ allocated memory starting at ADDRESS and 'KERN_PROTECTION_FAILURE'
+ if the address region in the target task is protected against
+ writing.
+
+ -- Function: kern_return_t vm_copy (vm_task_t TARGET_TASK,
+ vm_address_t SOURCE_ADDRESS, vm_size_t COUNT,
+ vm_offset_t DEST_ADDRESS)
+ The function 'vm_copy' causes the source memory range to be copied
+ to the destination address. The source and destination memory
+ ranges may overlap. The destination address range must already be
+ allocated and writable; the source range must be readable.
+
+ 'vm_copy' is equivalent to 'vm_read' followed by 'vm_write'.
+
+ The current implementation requires that ADDRESS, DATA and
+ DATA_COUNT all be page-aligned. Otherwise, 'KERN_INVALID_ARGUMENT'
+ is returned.
+
+ The function returns 'KERN_SUCCESS' if the memory was successfully
+ written, 'KERN_INVALID_ADDRESS' if an invalid or non-allocated
+ address was specified or there was insufficient memory allocated at
+ one of the addresses and 'KERN_PROTECTION_FAILURE' if the
+ destination region was not writable or the source region was not
+ readable.
+
+
+File: mach.info, Node: Memory Attributes, Next: Mapping Memory Objects,
Prev: Data Transfer, Up: Virtual Memory Interface
+
+5.4 Memory Attributes
+=====================
+
+ -- Function: kern_return_t vm_region (vm_task_t TARGET_TASK,
+ vm_address_t *ADDRESS, vm_size_t *SIZE, vm_prot_t *PROTECTION,
+ vm_prot_t *MAX_PROTECTION, vm_inherit_t *INHERITANCE,
+ boolean_t *SHARED, memory_object_name_t *OBJECT_NAME,
+ vm_offset_t *OFFSET)
+ The function 'vm_region' returns a description of the specified
+ region of TARGET_TASK's virtual address space. 'vm_region' begins
+ at ADDRESS and looks forward through memory until it comes to an
+ allocated region. If address is within a region, then that region
+ is used. Various bits of information about the region are
+ returned. If ADDRESS was not within a region, then ADDRESS is set
+ to the start of the first region which follows the incoming value.
+ In this way an entire address space can be scanned.
+
+ The SIZE returned is the size of the located region in bytes.
+ PROTECTION is the current protection of the region, MAX_PROTECTION
+ is the maximum allowable protection for this region. INHERITANCE
+ is the inheritance attribute for this region. SHARED tells if the
+ region is shared or not. The port OBJECT_NAME identifies the
+ memory object associated with this region, and OFFSET is the offset
+ into the pager object that this region begins at.
+
+ The function returns 'KERN_SUCCESS' if the memory region was
+ successfully located and the information returned and
+ 'KERN_NO_SPACE' if there is no region at or above ADDRESS in the
+ specified task.
+
+ -- Function: kern_return_t vm_protect (vm_task_t TARGET_TASK,
+ vm_address_t ADDRESS, vm_size_t SIZE, boolean_t SET_MAXIMUM,
+ vm_prot_t NEW_PROTECTION)
+ The function 'vm_protect' sets the virtual memory access privileges
+ for a range of allocated addresses in TARGET_TASK's virtual address
+ space. The protection argument describes a combination of read,
+ write, and execute accesses that should be _permitted_.
+
+ ADDRESS is the starting address, which will be rounded down to a
+ page boundary. SIZE is the size in bytes of the region for which
+ protection is to change, and will be rounded up to give a page
+ boundary. If SET_MAXIMUM is set, make the protection change apply
+ to the maximum protection associated with this address range;
+ otherwise, the current protection on this range is changed. If the
+ maximum protection is reduced below the current protection, both
+ will be changed to reflect the new maximum. NEW_PROTECTION is the
+ new protection value for this region; a set of: 'VM_PROT_READ',
+ 'VM_PROT_WRITE', 'VM_PROT_EXECUTE'.
+
+ The enforcement of virtual memory protection is machine-dependent.
+ Nominally read access requires 'VM_PROT_READ' permission, write
+ access requires 'VM_PROT_WRITE' permission, and execute access
+ requires 'VM_PROT_EXECUTE' permission. However, some combinations
+ of access rights may not be supported. In particular, the kernel
+ interface allows write access to require 'VM_PROT_READ' and
+ 'VM_PROT_WRITE' permission and execute access to require
+ 'VM_PROT_READ' permission.
+
+ The function returns 'KERN_SUCCESS' if the memory was successfully
+ protected, 'KERN_INVALID_ADDRESS' if an invalid or non-allocated
+ address was specified and 'KERN_PROTECTION_FAILURE' if an attempt
+ was made to increase the current or maximum protection beyond the
+ existing maximum protection value.
+
+ -- Function: kern_return_t vm_inherit (vm_task_t TARGET_TASK,
+ vm_address_t ADDRESS, vm_size_t SIZE,
+ vm_inherit_t NEW_INHERITANCE)
+ The function 'vm_inherit' specifies how a region of TARGET_TASK's
+ address space is to be passed to child tasks at the time of task
+ creation. Inheritance is an attribute of virtual pages, so ADDRESS
+ to start from will be rounded down to a page boundary and SIZE, the
+ size in bytes of the region for which inheritance is to change,
+ will be rounded up to give a page boundary. How this memory is to
+ be inherited in child tasks is specified by NEW_INHERITANCE.
+ Inheritance is specified by using one of these following three
+ values:
+
+ 'VM_INHERIT_SHARE'
+ Child tasks will share this memory with this task.
+
+ 'VM_INHERIT_COPY'
+ Child tasks will receive a copy of this region.
+
+ 'VM_INHERIT_NONE'
+ This region will be absent from child tasks.
+
+ Setting 'vm_inherit' to 'VM_INHERIT_SHARE' and forking a child task
+ is the only way two Mach tasks can share physical memory. Remember
+ that all the threads of a given task share all the same memory.
+
+ The function returns 'KERN_SUCCESS' if the memory inheritance was
+ successfully set and 'KERN_INVALID_ADDRESS' if an invalid or
+ non-allocated address was specified.
+
+ -- Function: kern_return_t vm_wire (host_priv_t HOST_PRIV,
+ vm_task_t TARGET_TASK, vm_address_t ADDRESS, vm_size_t SIZE,
+ vm_prot_t ACCESS)
+ The function 'vm_wire' allows privileged applications to control
+ memory pageability. HOST_PRIV is the privileged host port for the
+ host on which TARGET_TASK resides. ADDRESS is the starting
+ address, which will be rounded down to a page boundary. SIZE is
+ the size in bytes of the region for which protection is to change,
+ and will be rounded up to give a page boundary. ACCESS specifies
+ the types of accesses that must not cause page faults.
+
+ The semantics of a successful 'vm_wire' operation are that memory
+ in the specified range will not cause page faults for any accesses
+ included in access. Data memory can be made non-pageable (wired)
+ with a access argument of 'VM_PROT_READ | VM_PROT_WRITE'. A
+ special case is that 'VM_PROT_NONE' makes the memory pageable.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_HOST' if HOST_PRIV was not the privileged host port,
+ 'KERN_INVALID_TASK' if TASK was not a valid task,
+ 'KERN_INVALID_VALUE' if ACCESS specified an invalid access mode,
+ 'KERN_FAILURE' if some memory in the specified range is not present
+ or has an inappropriate protection value, and
+ 'KERN_INVALID_ARGUMENT' if unwiring (ACCESS is 'VM_PROT_NONE') and
+ the memory is not already wired.
+
+ The 'vm_wire' call is actually an RPC to HOST_PRIV, normally a send
+ right for a privileged host port, but potentially any send right.
+ In addition to the normal diagnostic return codes from the call's
+ server (normally the kernel), the call may return 'mach_msg' return
+ codes.
+
+ -- Function: kern_return_t vm_machine_attribute (vm_task_t TASK,
+ vm_address_t ADDRESS, vm_size_t SIZE, vm_prot_t ACCESS,
+ vm_machine_attribute_t ATTRIBUTE,
+ vm_machine_attribute_val_t VALUE)
+ The function 'vm_machine_attribute' specifies machine-specific
+ attributes for a VM mapping, such as cachability, migrability,
+ replicability. This is used on machines that allow the user
+ control over the cache (this is the case for MIPS architectures) or
+ placement of memory pages as in NUMA architectures (Non-Uniform
+ Memory Access time) such as the IBM ACE multiprocessor.
+
+ Machine-specific attributes can be consider additions to the
+ machine-independent ones such as protection and inheritance, but
+ they are not guaranteed to be supported by any given machine.
+ Moreover, implementations of Mach on new architectures might find
+ the need for new attribute types and or values besides the ones
+ defined in the initial implementation.
+
+ The types currently defined are
+ 'MATTR_CACHE'
+ Controls caching of memory pages
+
+ 'MATTR_MIGRATE'
+ Controls migrability of memory pages
+
+ 'MATTR_REPLICATE'
+ Controls replication of memory pages
+
+ Corresponding values, and meaning of a specific call to
+ 'vm_machine_attribute'
+ 'MATTR_VAL_ON'
+ Enables the attribute. Being enabled is the default value for
+ any applicable attribute.
+
+ 'MATTR_VAL_OFF'
+ Disables the attribute, making memory non-cached, or
+ non-migratable, or non-replicatable.
+
+ 'MATTR_VAL_GET'
+ Returns the current value of the attribute for the memory
+ segment. If the attribute does not apply uniformly to the
+ given range the value returned applies to the initial portion
+ of the segment only.
+
+ 'MATTR_VAL_CACHE_FLUSH'
+ Flush the memory pages from the Cache. The size value in this
+ case might be meaningful even if not a multiple of the page
+ size, depending on the implementation.
+
+ 'MATTR_VAL_ICACHE_FLUSH'
+ Same as above, applied to the Instruction Cache alone.
+
+ 'MATTR_VAL_DCACHE_FLUSH'
+ Same as above, applied to the Data Cache alone.
+
+ The function returns 'KERN_SUCCESS' if call succeeded, and
+ 'KERN_INVALID_ARGUMENT' if TASK is not a task, or ADDRESS and SIZE
+ do not define a valid address range in task, or ATTRIBUTE is not a
+ valid attribute type, or it is not implemented, or VALUE is not a
+ permissible value for attribute.
+
+
+File: mach.info, Node: Mapping Memory Objects, Next: Memory Statistics,
Prev: Memory Attributes, Up: Virtual Memory Interface
+
+5.5 Mapping Memory Objects
+==========================
+
+ -- Function: kern_return_t vm_map (vm_task_t TARGET_TASK,
+ vm_address_t *ADDRESS, vm_size_t SIZE, vm_address_t MASK,
+ boolean_t ANYWHERE, memory_object_t MEMORY_OBJECT,
+ vm_offset_t OFFSET, boolean_t COPY, vm_prot_t CUR_PROTECTION,
+ vm_prot_t MAX_PROTECTION, vm_inherit_t INHERITANCE)
+ The function 'vm_map' maps a region of virtual memory at the
+ specified address, for which data is to be supplied by the given
+ memory object, starting at the given offset within that object. In
+ addition to the arguments used in 'vm_allocate', the 'vm_map' call
+ allows the specification of an address alignment parameter, and of
+ the initial protection and inheritance values.
+
+ If the memory object in question is not currently in use, the
+ kernel will perform a 'memory_object_init' call at this time. If
+ the copy parameter is asserted, the specified region of the memory
+ object will be copied to this address space; changes made to this
+ object by other tasks will not be visible in this mapping, and
+ changes made in this mapping will not be visible to others (or
+ returned to the memory object).
+
+ The 'vm_map' call returns once the mapping is established.
+ Completion of the call does not require any action on the part of
+ the memory manager.
+
+ Warning: Only memory objects that are provided by bona fide memory
+ managers should be used in the 'vm_map' call. A memory manager
+ must implement the memory object interface described elsewhere in
+ this manual. If other ports are used, a thread that accesses the
+ mapped virtual memory may become permanently hung or may receive a
+ memory exception.
+
+ TARGET_TASK is the task to be affected. The starting address is
+ ADDRESS. If the ANYWHERE option is used, this address is ignored.
+ The address actually allocated will be returned in ADDRESS. SIZE
+ is the number of bytes to allocate (rounded by the system in a
+ machine dependent way). The alignment restriction is specified by
+ MASK. Bits asserted in this mask must not be asserted in the
+ address returned. If ANYWHERE is set, the kernel should find and
+ allocate any region of the specified size, and return the address
+ of the resulting region in ADDRESS.
+
+ MEMORY_OBJECT is the port that represents the memory object: used
+ by user tasks in 'vm_map'; used by the make requests for data or
+ other management actions. If this port is 'MEMORY_OBJECT_NULL',
+ then zero-filled memory is allocated instead. Within a memory
+ object, OFFSET specifies an offset in bytes. This must be page
+ aligned. If COPY is set, the range of the memory object should be
+ copied to the target task, rather than mapped read-write.
+
+ The function returns 'KERN_SUCCESS' if the object is mapped,
+ 'KERN_NO_SPACE' if no unused region of the task's virtual address
+ space that meets the address, size, and alignment criteria could be
+ found, and 'KERN_INVALID_ARGUMENT' if an invalid argument was
+ provided.
+
+
+File: mach.info, Node: Memory Statistics, Prev: Mapping Memory Objects, Up:
Virtual Memory Interface
+
+5.6 Memory Statistics
+=====================
+
+ -- Data type: vm_statistics_data_t
+ This structure is returned in VM_STATS by the 'vm_statistics'
+ function and provides virtual memory statistics for the system. It
+ has the following members:
+
+ 'long pagesize'
+ The page size in bytes.
+
+ 'long free_count'
+ The number of free pages.
+
+ 'long active_count'
+ The umber of active pages.
+
+ 'long inactive_count'
+ The number of inactive pages.
+
+ 'long wire_count'
+ The number of pages wired down.
+
+ 'long zero_fill_count'
+ The number of zero filled pages.
+
+ 'long reactivations'
+ The number of reactivated pages.
+
+ 'long pageins'
+ The number of pageins.
+
+ 'long pageouts'
+ The number of pageouts.
+
+ 'long faults'
+ The number of faults.
+
+ 'long cow_faults'
+ The number of copy-on-writes.
+
+ 'long lookups'
+ The number of object cache lookups.
+
+ 'long hits'
+ The number of object cache hits.
+
+ -- Function: kern_return_t vm_statistics (vm_task_t TARGET_TASK,
+ vm_statistics_data_t *VM_STATS)
+ The function 'vm_statistics' returns the statistics about the
+ kernel's use of virtual memory since the kernel was booted.
+ 'pagesize' can also be found as a global variable 'vm_page_size'
+ which is set at task initialization and remains constant for the
+ life of the task.
+
+
+File: mach.info, Node: External Memory Management, Next: Threads and Tasks,
Prev: Virtual Memory Interface, Up: Top
+
+6 External Memory Management
+****************************
+
+* Menu:
+
+* Memory Object Server:: The basics of external memory management.
+* Memory Object Creation:: How new memory objects are created.
+* Memory Object Termination:: How memory objects are terminated.
+* Memory Objects and Data:: Data transfer to and from memory objects.
+* Memory Object Locking:: How memory objects are locked.
+* Memory Object Attributes:: Manipulating attributes of memory objects.
+* Default Memory Manager:: Setting and using the default memory manager.
+
+
+File: mach.info, Node: Memory Object Server, Next: Memory Object Creation,
Up: External Memory Management
+
+6.1 Memory Object Server
+========================
+
+ -- Function: boolean_t memory_object_server (msg_header_t *IN_MSG,
+ msg_header_t *OUT_MSG)
+ -- Function: boolean_t memory_object_default_server
+ (msg_header_t *IN_MSG, msg_header_t *OUT_MSG)
+ -- Function: boolean_t seqnos_memory_object_server
+ (msg_header_t *IN_MSG, msg_header_t *OUT_MSG)
+ -- Function: boolean_t seqnos_memory_object_default_server
+ (msg_header_t *IN_MSG, msg_header_t *OUT_MSG)
+ A memory manager is a server task that responds to specific
+ messages from the kernel in order to handle memory management
+ functions for the kernel.
+
+ In order to isolate the memory manager from the specifics of
+ message formatting, the remote procedure call generator produces a
+ procedure, 'memory_object_server', to handle a received message.
+ This function does all necessary argument handling, and actually
+ calls one of the following functions: 'memory_object_init',
+ 'memory_object_data_write', 'memory_object_data_return',
+ 'memory_object_data_request', 'memory_object_data_unlock',
+ 'memory_object_lock_completed', 'memory_object_copy',
+ 'memory_object_terminate'. The *default memory manager* may get
+ two additional requests from the kernel: 'memory_object_create' and
+ 'memory_object_data_initialize'. The remote procedure call
+ generator produces a procedure 'memory_object_default_server' to
+ handle those functions specific to the default memory manager.
+
+ The 'seqnos_memory_object_server' and
+ 'seqnos_memory_object_default_server' differ from
+ 'memory_object_server' and 'memory_object_default_server' in that
+ they supply message sequence numbers to the server interfaces.
+ They call the 'seqnos_memory_object_*' functions, which complement
+ the 'memory_object_*' set of functions.
+
+ The return value from the 'memory_object_server' function indicates
+ that the message was appropriate to the memory management interface
+ (returning 'TRUE'), or that it could not handle this message
+ (returning 'FALSE').
+
+ The IN_MSG argument is the message that has been received from the
+ kernel. The OUT_MSG is a reply message, but this is not used for
+ this server.
+
+ The function returns 'TRUE' to indicate that the message in
+ question was applicable to this interface, and that the appropriate
+ routine was called to interpret the message. It returns 'FALSE' to
+ indicate that the message did not apply to this interface, and that
+ no other action was taken.
+
+
+File: mach.info, Node: Memory Object Creation, Next: Memory Object
Termination, Prev: Memory Object Server, Up: External Memory Management
+
+6.2 Memory Object Creation
+==========================
+
+ -- Function: kern_return_t memory_object_init
+ (memory_object_t MEMORY_OBJECT,
+ memory_object_control_t MEMORY_CONTROL,
+ memory_object_name_t MEMORY_OBJECT_NAME,
+ vm_size_t MEMORY_OBJECT_PAGE_SIZE)
+ -- Function: kern_return_t seqnos_memory_object_init
+ (memory_object_t MEMORY_OBJECT, mach_port_seqno_t SEQNO,
+ memory_object_control_t MEMORY_CONTROL,
+ memory_object_name_t MEMORY_OBJECT_NAME,
+ vm_size_t MEMORY_OBJECT_PAGE_SIZE)
+ The function 'memory_object_init' serves as a notification that the
+ kernel has been asked to map the given memory object into a task's
+ virtual address space. Additionally, it provides a port on which
+ the memory manager may issue cache management requests, and a port
+ which the kernel will use to name this data region. In the event
+ that different each will perform a 'memory_object_init' call with
+ new request and name ports. The virtual page size that is used by
+ the calling kernel is included for planning purposes.
+
+ When the memory manager is prepared to accept requests for data for
+ this object, it must call 'memory_object_ready' with the attribute.
+ Otherwise the kernel will not process requests on this object. To
+ reject all mappings of this object, the memory manager may use
+ 'memory_object_destroy'.
+
+ The argument MEMORY_OBJECT is the port that represents the memory
+ object data, as supplied to the kernel in a 'vm_map' call.
+ MEMORY_CONTROL is the request port to which a response is
+ requested. (In the event that a memory object has been supplied to
+ more than one the kernel that has made the request.)
+ MEMORY_OBJECT_NAME is a port used by the kernel to refer to the
+ memory object data in response to 'vm_region' calls.
+ 'memory_object_page_size' is the page size to be used by this
+ kernel. All data sizes in calls involving this kernel must be an
+ integral multiple of the page size. Note that different kernels,
+ indicated by a different 'memory_control', may have different page
+ sizes.
+
+ The function should return 'KERN_SUCCESS', but since this routine
+ is called by the kernel, which does not wait for a reply message,
+ this value is ignored.
+
+ -- Function: kern_return_t memory_object_ready
+ (memory_object_control_t MEMORY_CONTROL,
+ boolean_t MAY_CACHE_OBJECT,
+ memory_object_copy_strategy_t COPY_STRATEGY)
+ The function 'memory_object_ready' informs the kernel that the
+ memory manager is ready to receive data or unlock requests on
+ behalf of the clients. The argument MEMORY_CONTROL is the port,
+ provided by the kernel in a 'memory_object_init' call, to which
+ cache management requests may be issued. If MAY_CACHE_OBJECT is
+ set, the kernel may keep data associated with this memory object,
+ even after virtual memory references to it are gone.
+
+ COPY_STRATEGY tells how the kernel should copy regions of the
+ associated memory object. There are three possible caching
+ strategies: 'MEMORY_OBJECT_COPY_NONE' which specifies that nothing
+ special should be done when data in the object is copied;
+ 'MEMORY_OBJECT_COPY_CALL' which specifies that the memory manager
+ should be notified via a 'memory_object_copy' call before any part
+ of the object is copied; and 'MEMORY_OBJECT_COPY_DELAY' which
+ guarantees that the memory manager does not externally modify the
+ data so that the kernel can use its normal copy-on-write
+ algorithms. 'MEMORY_OBJECT_COPY_DELAY' is the strategy most
+ commonly used.
+
+ This routine does not receive a reply message (and consequently has
+ no return value), so only message transmission errors apply.
+
+
+File: mach.info, Node: Memory Object Termination, Next: Memory Objects and
Data, Prev: Memory Object Creation, Up: External Memory Management
+
+6.3 Memory Object Termination
+=============================
+
+ -- Function: kern_return_t memory_object_terminate
+ (memory_object_t MEMORY_OBJECT,
+ memory_object_control_t MEMORY_CONTROL,
+ memory_object_name_t MEMORY_OBJECT_NAME)
+ -- Function: kern_return_t seqnos_memory_object_terminate
+ (memory_object_t MEMORY_OBJECT, mach_port_seqno_t SEQNO,
+ memory_object_control_t MEMORY_CONTROL,
+ memory_object_name_t MEMORY_OBJECT_NAME)
+ The function 'memory_object_terminate' indicates that the kernel
+ has completed its use of the given memory object. All rights to
+ the memory object control and name ports are included, so that the
+ memory manager can destroy them (using 'mach_port_deallocate')
+ after doing appropriate bookkeeping. The kernel will terminate a
+ memory object only after all address space mappings of that memory
+ object have been deallocated, or upon explicit request by the
+ memory manager.
+
+ The argument MEMORY_OBJECT is the port that represents the memory
+ object data, as supplied to the kernel in a 'vm_map' call.
+ MEMORY_CONTROL is the request port to which a response is
+ requested. (In the event that a memory object has been supplied to
+ more than one the kernel that has made the request.)
+ MEMORY_OBJECT_NAME is a port used by the kernel to refer to the
+ memory object data in response to 'vm_region' calls.
+
+ The function should return 'KERN_SUCCESS', but since this routine
+ is called by the kernel, which does not wait for a reply message,
+ this value is ignored.
+
+ -- Function: kern_return_t memory_object_destroy
+ (memory_object_control_t MEMORY_CONTROL, kern_return_t REASON)
+ The function 'memory_object_destroy' tells the kernel to shut down
+ the memory object. As a result of this call the kernel will no
+ longer support paging activity or any 'memory_object' calls on this
+ object, and all rights to the memory object port, the memory
+ control port and the memory name port will be returned to the
+ memory manager in a memory_object_terminate call. If the memory
+ manager is concerned that any modified cached data be returned to
+ it before the object is terminated, it should call
+ 'memory_object_lock_request' with SHOULD_FLUSH set and a lock value
+ of 'VM_PROT_WRITE' before making this call.
+
+ The argument MEMORY_CONTROL is the port, provided by the kernel in
+ a 'memory_object_init' call, to which cache management requests may
+ be issued. REASON is an error code indicating why the object must
+ be destroyed.
+
+ This routine does not receive a reply message (and consequently has
+ no return value), so only message transmission errors apply.
+
+
+File: mach.info, Node: Memory Objects and Data, Next: Memory Object Locking,
Prev: Memory Object Termination, Up: External Memory Management
+
+6.4 Memory Objects and Data
+===========================
+
+ -- Function: kern_return_t memory_object_data_return
+ (memory_object_t MEMORY_OBJECT,
+ memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_offset_t DATA, vm_size_t DATA_COUNT, boolean_t DIRTY,
+ boolean_t KERNEL_COPY)
+ -- Function: kern_return_t seqnos_memory_object_data_return
+ (memory_object_t MEMORY_OBJECT, mach_port_seqno_t SEQNO,
+ memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_offset_t DATA, vm_size_t DATA_COUNT, boolean_t DIRTY,
+ boolean_t KERNEL_COPY)
+ The function 'memory_object_data_return' provides the memory
+ manager with data that has been modified while cached in physical
+ memory. Once the memory manager no longer needs this data (e.g.,
+ it has been written to another storage medium), it should be
+ deallocated using 'vm_deallocate'.
+
+ The argument MEMORY_OBJECT is the port that represents the memory
+ object data, as supplied to the kernel in a 'vm_map' call.
+ MEMORY_CONTROL is the request port to which a response is
+ requested. (In the event that a memory object has been supplied to
+ more than one the kernel that has made the request.) OFFSET is the
+ offset within a memory object to which this call refers. This will
+ be page aligned. DATA is the data which has been modified while
+ cached in physical memory. DATA_COUNT is the amount of data to be
+ written, in bytes. This will be an integral number of memory
+ object pages.
+
+ The kernel will also use this call to return precious pages. If an
+ unmodified precious age is returned, DIRTY is set to 'FALSE',
+ otherwise it is 'TRUE'. If KERNEL_COPY is 'TRUE', the kernel kept
+ a copy of the page. Precious data remains precious if the kernel
+ keeps a copy. The indication that the kernel kept a copy is only a
+ hint if the data is not precious; the cleaned copy may be discarded
+ without further notifying the manager.
+
+ The function should return 'KERN_SUCCESS', but since this routine
+ is called by the kernel, which does not wait for a reply message,
+ this value is ignored.
+
+ -- Function: kern_return_t memory_object_data_request
+ (memory_object_t MEMORY_OBJECT,
+ memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_offset_t LENGTH, vm_prot_t DESIRED_ACCESS)
+ -- Function: kern_return_t seqnos_memory_object_data_request
+ (memory_object_t MEMORY_OBJECT, mach_port_seqno_t SEQNO,
+ memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_offset_t LENGTH, vm_prot_t DESIRED_ACCESS)
+ The function 'memory_object_data_request' is a request for data
+ from the specified memory object, for at least the access
+ specified. The memory manager is expected to return at least the
+ specified data, with as much access as it can allow, using
+ 'memory_object_data_supply'. If the memory manager is unable to
+ provide the data (for example, because of a hardware error), it may
+ use the 'memory_object_data_error' call. The
+ 'memory_object_data_unavailable' call may be used to tell the
+ kernel to supply zero-filled memory for this region.
+
+ The argument MEMORY_OBJECT is the port that represents the memory
+ object data, as supplied to the kernel in a 'vm_map' call.
+ MEMORY_CONTROL is the request port to which a response is
+ requested. (In the event that a memory object has been supplied to
+ more than one the kernel that has made the request.) OFFSET is the
+ offset within a memory object to which this call refers. This will
+ be page aligned. LENGTH is the number of bytes of data, starting
+ at OFFSET, to which this call refers. This will be an integral
+ number of memory object pages. DESIRED_ACCESS is a protection
+ value describing the memory access modes which must be permitted on
+ the specified cached data. One or more of: 'VM_PROT_READ',
+ 'VM_PROT_WRITE' or 'VM_PROT_EXECUTE'.
+
+ The function should return 'KERN_SUCCESS', but since this routine
+ is called by the kernel, which does not wait for a reply message,
+ this value is ignored.
+
+ -- Function: kern_return_t memory_object_data_supply
+ (memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_offset_t DATA, vm_size_t DATA_COUNT, vm_prot_t LOCK_VALUE,
+ boolean_t PRECIOUS, mach_port_t REPLY)
+ The function 'memory_object_data_supply' supplies the kernel with
+ data for the specified memory object. Ordinarily, memory managers
+ should only provide data in response to
+ 'memory_object_data_request' calls from the kernel (but they may
+ provide data in advance as desired). When data already held by
+ this kernel is provided again, the new data is ignored. The kernel
+ may not provide any data (or protection) consistency among pages
+ with different virtual page alignments within the same object.
+
+ The argument MEMORY_CONTROL is the port, provided by the kernel in
+ a 'memory_object_init' call, to which cache management requests may
+ be issued. OFFSET is an offset within a memory object in bytes.
+ This must be page aligned. DATA is the data that is being provided
+ to the kernel. This is a pointer to the data. DATA_COUNT is the
+ amount of data to be provided. Only whole virtual pages of data
+ can be accepted; partial pages will be discarded.
+
+ LOCK_VALUE is a protection value indicating those forms of access
+ that should *not* be permitted to the specified cached data. The
+ lock values must be one or more of the set: 'VM_PROT_NONE',
+ 'VM_PROT_READ', 'VM_PROT_WRITE', 'VM_PROT_EXECUTE' and
+ 'VM_PROT_ALL' as defined in 'mach/vm_prot.h'.
+
+ If PRECIOUS is 'FALSE', the kernel treats the data as a temporary
+ and may throw it away if it hasn't been changed. If the PRECIOUS
+ value is 'TRUE', the kernel treats its copy as a data repository
+ and promises to return it to the manager; the manager may tell the
+ kernel to throw it away instead by flushing and not cleaning the
+ data (see 'memory_object_lock_request').
+
+ If REPLY_TO is not 'MACH_PORT_NULL', the kernel will send a
+ completion message to the provided port (see
+ 'memory_object_supply_completed').
+
+ This routine does not receive a reply message (and consequently has
+ no return value), so only message transmission errors apply.
+
+ -- Function: kern_return_t memory_object_supply_completed
+ (memory_object_t MEMORY_OBJECT,
+ memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_size_t LENGTH, kern_return_t RESULT,
+ vm_offset_t ERROR_OFFSET)
+ -- Function: kern_return_t seqnos_memory_object_supply_completed
+ (memory_object_t MEMORY_OBJECT, mach_port_seqno_t SEQNO,
+ memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_size_t LENGTH, kern_return_t RESULT,
+ vm_offset_t ERROR_OFFSET)
+ The function 'memory_object_supply_completed' indicates that a
+ previous 'memory_object_data_supply' has been completed. Note that
+ this call is made on whatever port was specified in the
+ 'memory_object_data_supply' call; that port need not be the memory
+ object port itself. No reply is expected after this call.
+
+ The argument MEMORY_OBJECT is the port that represents the memory
+ object data, as supplied to the kernel in a 'vm_map' call.
+ MEMORY_CONTROL is the request port to which a response is
+ requested. (In the event that a memory object has been supplied to
+ more than one the kernel that has made the request.) OFFSET is the
+ offset within a memory object to which this call refers. LENGTH is
+ the length of the data covered by the lock request. The RESULT
+ parameter indicates what happened during the supply. If it is not
+ 'KERN_SUCCESS', then ERROR_OFFSET identifies the first offset at
+ which a problem occurred. The pagein operation stopped at this
+ point. Note that the only failures reported by this mechanism are
+ 'KERN_MEMORY_PRESENT'. All other failures (invalid argument, error
+ on pagein of supplied data in manager's address space) cause the
+ entire operation to fail.
+
+ -- Function: kern_return_t memory_object_data_error
+ (memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_size_t SIZE, kern_return_t REASON)
+ The function 'memory_object_data_error' indicates that the memory
+ manager cannot return the data requested for the given region,
+ specifying a reason for the error. This is typically used when a
+ hardware error is encountered.
+
+ The argument MEMORY_CONTROL is the port, provided by the kernel in
+ a 'memory_object_init' call, to which cache management requests may
+ be issued. OFFSET is an offset within a memory object in bytes.
+ This must be page aligned. DATA is the data that is being provided
+ to the kernel. This is a pointer to the data. SIZE is the amount
+ of cached data (starting at OFFSET) to be handled. This must be an
+ integral number of the memory object page size. REASON is an error
+ code indicating what type of error occurred.
+
+ This routine does not receive a reply message (and consequently has
+ no return value), so only message transmission errors apply.
+
+ -- Function: kern_return_t memory_object_data_unavailable
+ (memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_size_t SIZE, kern_return_t REASON)
+ The function 'memory_object_data_unavailable' indicates that the
+ memory object does not have data for the given region and that the
+ kernel should provide the data for this range. The memory manager
+ may use this call in three different situations.
+
+ 1. The object was created by 'memory_object_create' and the
+ kernel has not yet provided data for this range (either via a
+ 'memory_object_data_initialize', 'memory_object_data_write' or
+ a 'memory_object_data_return' for the object.
+
+ 2. The object was created by an 'memory_object_data_copy' and the
+ kernel should copy this region from the original memory
+ object.
+
+ 3. The object is a normal user-created memory object and the
+ kernel should supply unlocked zero-filled pages for the range.
+
+ The argument MEMORY_CONTROL is the port, provided by the kernel in
+ a 'memory_object_init' call, to which cache management requests may
+ be issued. OFFSET is an offset within a memory object, in bytes.
+ This must be page aligned. SIZE is the amount of cached data
+ (starting at OFFSET) to be handled. This must be an integral
+ number of the memory object page size.
+
+ This routine does not receive a reply message (and consequently has
+ no return value), so only message transmission errors apply.
+
+ -- Function: kern_return_t memory_object_copy
+ (memory_object_t OLD_MEMORY_OBJECT,
+ memory_object_control_t OLD_MEMORY_CONTROL,
+ vm_offset_t OFFSET, vm_size_t LENGTH,
+ memory_object_t NEW_MEMORY_OBJECT)
+ -- Function: kern_return_t seqnos_memory_object_copy
+ (memory_object_t OLD_MEMORY_OBJECT, mach_port_seqno_t SEQNO,
+ memory_object_control_t OLD_MEMORY_CONTROL,
+ vm_offset_t OFFSET, vm_size_t LENGTH,
+ memory_object_t NEW_MEMORY_OBJECT)
+ The function 'memory_object_copy' indicates that a copy has been
+ made of the specified range of the given original memory object.
+ This call includes only the new memory object itself; a
+ 'memory_object_init' call will be made on the new memory object
+ after the currently cached pages of the original object are
+ prepared. After the memory manager receives the init call, it must
+ reply with the 'memory_object_ready' call to assert the "ready"
+ attribute. The kernel will use the new memory object, control and
+ name ports to refer to the new copy.
+
+ This call is made when the original memory object had the caching
+ parameter set to 'MEMORY_OBJECT_COPY_CALL' and a user of the object
+ has asked the kernel to copy it.
+
+ Cached pages from the original memory object at the time of the
+ copy operation are handled as follows: Readable pages may be
+ silently copied to the new memory object (with all access
+ permissions). Pages not copied are locked to prevent write access.
+
+ The new memory object is *temporary*, meaning that the memory
+ manager should not change its contents or allow the memory object
+ to be mapped in another client. The memory manager may use the
+ 'memory_object_data_unavailable' call to indicate that the
+ appropriate pages of the original memory object may be used to
+ fulfill the data request.
+
+ The argument OLD_MEMORY_OBJECT is the port that represents the old
+ memory object data. OLD_MEMORY_CONTROL is the kernel port for the
+ old object. OFFSET is the offset within a memory object to which
+ this call refers. This will be page aligned. LENGTH is the number
+ of bytes of data, starting at OFFSET, to which this call refers.
+ This will be an integral number of memory object pages.
+ NEW_MEMORY_OBJECT is a new memory object created by the kernel; see
+ synopsis for further description. Note that all port rights
+ (including receive rights) are included for the new memory object.
+
+ The function should return 'KERN_SUCCESS', but since this routine
+ is called by the kernel, which does not wait for a reply message,
+ this value is ignored.
+
+ The remaining interfaces in this section are obsolete.
+
+ -- Function: kern_return_t memory_object_data_write
+ (memory_object_t MEMORY_OBJECT,
+ memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_offset_t DATA, vm_size_t DATA_COUNT)
+ -- Function: kern_return_t seqnos_memory_object_data_write
+ (memory_object_t MEMORY_OBJECT, mach_port_seqno_t SEQNO,
+ memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_offset_t DATA, vm_size_t DATA_COUNT)
+ The function 'memory_object_data_write' provides the memory manager
+ with data that has been modified while cached in physical memory.
+ It is the old form of 'memory_object_data_return'. Once the memory
+ manager no longer needs this data (e.g., it has been written to
+ another storage medium), it should be deallocated using
+ 'vm_deallocate'.
+
+ The argument MEMORY_OBJECT is the port that represents the memory
+ object data, as supplied to the kernel in a 'vm_map' call.
+ MEMORY_CONTROL is the request port to which a response is
+ requested. (In the event that a memory object has been supplied to
+ more than one the kernel that has made the request.) OFFSET is the
+ offset within a memory object to which this call refers. This will
+ be page aligned. DATA is the data which has been modified while
+ cached in physical memory. DATA_COUNT is the amount of data to be
+ written, in bytes. This will be an integral number of memory
+ object pages.
+
+ The function should return 'KERN_SUCCESS', but since this routine
+ is called by the kernel, which does not wait for a reply message,
+ this value is ignored.
+
+ -- Function: kern_return_t memory_object_data_provided
+ (memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_offset_t DATA, vm_size_t DATA_COUNT, vm_prot_t LOCK_VALUE)
+ The function 'memory_object_data_provided' supplies the kernel with
+ data for the specified memory object. It is the old form of
+ 'memory_object_data_supply'. Ordinarily, memory managers should
+ only provide data in response to 'memory_object_data_request' calls
+ from the kernel. The LOCK_VALUE specifies what type of access will
+ not be allowed to the data range. The lock values must be one or
+ more of the set: 'VM_PROT_NONE', 'VM_PROT_READ', 'VM_PROT_WRITE',
+ 'VM_PROT_EXECUTE' and 'VM_PROT_ALL' as defined in 'mach/vm_prot.h'.
+
+ The argument MEMORY_CONTROL is the port, provided by the kernel in
+ a 'memory_object_init' call, to which cache management requests may
+ be issued. OFFSET is an offset within a memory object in bytes.
+ This must be page aligned. DATA is the data that is being provided
+ to the kernel. This is a pointer to the data. DATA_COUNT is the
+ amount of data to be provided. This must be an integral number of
+ memory object pages. LOCK_VALUE is a protection value indicating
+ those forms of access that should *not* be permitted to the
+ specified cached data.
+
+ This routine does not receive a reply message (and consequently has
+ no return value), so only message transmission errors apply.
+
+
+File: mach.info, Node: Memory Object Locking, Next: Memory Object
Attributes, Prev: Memory Objects and Data, Up: External Memory Management
+
+6.5 Memory Object Locking
+=========================
+
+ -- Function: kern_return_t memory_object_lock_request
+ (memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_size_t SIZE, memory_object_return_t SHOULD_CLEAN,
+ boolean_t SHOULD_FLUSH, vm_prot_t LOCK_VALUE,
+ mach_port_t REPLY_TO)
+ The function 'memory_object_lock_request' allows a memory manager
+ to make cache management requests. As specified in arguments to
+ the call, the kernel will:
+ * clean (i.e., write back using 'memory_object_data_supply' or
+ 'memory_object_data_write') any cached data which has been
+ modified since the last time it was written
+
+ * flush (i.e., remove any uses of) that data from memory
+
+ * lock (i.e., prohibit the specified uses of) the cached data
+
+ Locks applied to cached data are not cumulative; new lock values
+ override previous ones. Thus, data may also be unlocked using this
+ primitive. The lock values must be one or more of the following
+ values: 'VM_PROT_NONE', 'VM_PROT_READ', 'VM_PROT_WRITE',
+ 'VM_PROT_EXECUTE' and 'VM_PROT_ALL' as defined in 'mach/vm_prot.h'.
+
+ Only data which is cached at the time of this call is affected.
+ When a running thread requires a prohibited access to cached data,
+ the kernel will issue a 'memory_object_data_unlock' call specifying
+ the forms of access required.
+
+ Once all of the actions requested by this call have been completed,
+ the kernel issues a 'memory_object_lock_completed' call on the
+ specified reply port.
+
+ The argument MEMORY_CONTROL is the port, provided by the kernel in
+ a 'memory_object_init' call, to which cache management requests may
+ be issued. OFFSET is an offset within a memory object, in bytes.
+ This must be page aligned. SIZE is the amount of cached data
+ (starting at OFFSET) to be handled. This must be an integral
+ number of the memory object page size. If SHOULD_CLEAN is set,
+ modified data should be written back to the memory manager. If
+ SHOULD_FLUSH is set, the specified cached data should be
+ invalidated, and all uses of that data should be revoked.
+ LOCK_VALUE is a protection value indicating those forms of access
+ that should *not* be permitted to the specified cached data.
+ REPLY_TO is a port on which a 'memory_object_lock_completed' call
+ should be issued, or 'MACH_PORT_NULL' if no acknowledgement is
+ desired.
+
+ This routine does not receive a reply message (and consequently has
+ no return value), so only message transmission errors apply.
+
+ -- Function: kern_return_t memory_object_lock_completed
+ (memory_object_t MEMORY_OBJECT,
+ memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_size_t LENGTH)
+ -- Function: kern_return_t seqnos_memory_object_lock_completed
+ (memory_object_t MEMORY_OBJECT, mach_port_seqno_t SEQNO,
+ memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_size_t LENGTH)
+ The function 'memory_object_lock_completed' indicates that a
+ previous 'memory_object_lock_request' has been completed. Note
+ that this call is made on whatever port was specified in the
+ 'memory_object_lock_request' call; that port need not be the memory
+ object port itself. No reply is expected after this call.
+
+ The argument MEMORY_OBJECT is the port that represents the memory
+ object data, as supplied to the kernel in a 'vm_map' call.
+ MEMORY_CONTROL is the request port to which a response is
+ requested. (In the event that a memory object has been supplied to
+ more than one the kernel that has made the request.) OFFSET is the
+ offset within a memory object to which this call refers. LENGTH is
+ the length of the data covered by the lock request.
+
+ The function should return 'KERN_SUCCESS', but since this routine
+ is called by the kernel, which does not wait for a reply message,
+ this value is ignored.
+
+ -- Function: kern_return_t memory_object_data_unlock
+ (memory_object_t MEMORY_OBJECT,
+ memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_size_t LENGTH, vm_prot_t DESIRED_ACCESS)
+ -- Function: kern_return_t seqnos_memory_object_data_unlock
+ (memory_object_t MEMORY_OBJECT, mach_port_seqno_t SEQNO,
+ memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_size_t LENGTH, vm_prot_t DESIRED_ACCESS)
+ The function 'memory_object_data_unlock' is a request that the
+ memory manager permit at least the desired access to the specified
+ data cached by the kernel. A call to 'memory_object_lock_request'
+ is expected in response.
+
+ The argument MEMORY_OBJECT is the port that represents the memory
+ object data, as supplied to the kernel in a 'vm_map' call.
+ MEMORY_CONTROL is the request port to which a response is
+ requested. (In the event that a memory object has been supplied to
+ more than one the kernel that has made the request.) OFFSET is the
+ offset within a memory object to which this call refers. This will
+ be page aligned. LENGTH is the number of bytes of data, starting
+ at OFFSET, to which this call refers. This will be an integral
+ number of memory object pages. DESIRED_ACCESS a protection value
+ describing the memory access modes which must be permitted on the
+ specified cached data. One or more of: 'VM_PROT_READ',
+ 'VM_PROT_WRITE' or 'VM_PROT_EXECUTE'.
+
+ The function should return 'KERN_SUCCESS', but since this routine
+ is called by the kernel, which does not wait for a reply message,
+ this value is ignored.
+
+
+File: mach.info, Node: Memory Object Attributes, Next: Default Memory
Manager, Prev: Memory Object Locking, Up: External Memory Management
+
+6.6 Memory Object Attributes
+============================
+
+ -- Function: kern_return_t memory_object_get_attributes
+ (memory_object_control_t MEMORY_CONTROL,
+ boolean_t *OBJECT_READY, boolean_t *MAY_CACHE_OBJECT,
+ memory_object_copy_strategy_t *COPY_STRATEGY)
+ The function 'memory_object_get_attribute' retrieves the current
+ attributes associated with the memory object.
+
+ The argument MEMORY_CONTROL is the port, provided by the kernel in
+ a 'memory_object_init' call, to which cache management requests may
+ be issued. If OBJECT_READY is set, the kernel may issue new data
+ and unlock requests on the associated memory object. If
+ MAY_CACHE_OBJECT is set, the kernel may keep data associated with
+ this memory object, even after virtual memory references to it are
+ gone. COPY_STRATEGY tells how the kernel should copy regions of
+ the associated memory object.
+
+ This routine does not receive a reply message (and consequently has
+ no return value), so only message transmission errors apply.
+
+ -- Function: kern_return_t memory_object_change_attributes
+ (memory_object_control_t MEMORY_CONTROL,
+ boolean_t MAY_CACHE_OBJECT,
+ memory_object_copy_strategy_t COPY_STRATEGY,
+ mach_port_t REPLY_TO)
+ The function 'memory_object_change_attribute' sets
+ performance-related attributes for the specified memory object. If
+ the caching attribute is asserted, the kernel is permitted (and
+ encouraged) to maintain cached data for this memory object even
+ after no virtual address space contains this data.
+
+ There are three possible caching strategies:
+ 'MEMORY_OBJECT_COPY_NONE' which specifies that nothing special
+ should be done when data in the object is copied;
+ 'MEMORY_OBJECT_COPY_CALL' which specifies that the memory manager
+ should be notified via a 'memory_object_copy' call before any part
+ of the object is copied; and 'MEMORY_OBJECT_COPY_DELAY' which
+ guarantees that the memory manager does not externally modify the
+ data so that the kernel can use its normal copy-on-write
+ algorithms. 'MEMORY_OBJECT_COPY_DELAY' is the strategy most
+ commonly used.
+
+ The argument MEMORY_CONTROL is the port, provided by the kernel in
+ a 'memory_object_init' call, to which cache management requests may
+ be issued. If MAY_CACHE_OBJECT is set, the kernel may keep data
+ associated with this memory object, even after virtual memory
+ references to it are gone. COPY_STRATEGY tells how the kernel
+ should copy regions of the associated memory object. REPLY_TO is a
+ port on which a 'memory_object_change_completed' call will be
+ issued upon completion of the attribute change, or 'MACH_PORT_NULL'
+ if no acknowledgement is desired.
+
+ This routine does not receive a reply message (and consequently has
+ no return value), so only message transmission errors apply.
+
+ -- Function: kern_return_t memory_object_change_completed
+ (memory_object_t MEMORY_OBJECT, boolean_t MAY_CACHE_OBJECT,
+ memory_object_copy_strategy_t COPY_STRATEGY)
+ -- Function: kern_return_t seqnos_memory_object_change_completed
+ (memory_object_t MEMORY_OBJECT, mach_port_seqno_t SEQNO,
+ boolean_t MAY_CACHE_OBJECT,
+ memory_object_copy_strategy_t COPY_STRATEGY)
+ The function 'memory_object_change_completed' indicates the
+ completion of an attribute change call.
+
+ The following interface is obsoleted by 'memory_object_ready' and
+'memory_object_change_attributes'. If the old form
+'memory_object_set_attributes' is used to make a memory object ready,
+the kernel will write back data using the old 'memory_object_data_write'
+interface rather than 'memory_object_data_return'..
+
+ -- Function: kern_return_t memory_object_set_attributes
+ (memory_object_control_t MEMORY_CONTROL, boolean OBJECT_READY,
+ boolean_t MAY_CACHE_OBJECT,
+ memory_object_copy_strategy_t COPY_STRATEGY)
+ The function 'memory_object_set_attribute' controls how the memory
+ object. The kernel will only make data or unlock requests when the
+ ready attribute is asserted. If the caching attribute is asserted,
+ the kernel is permitted (and encouraged) to maintain cached data
+ for this memory object even after no virtual address space contains
+ this data.
+
+ There are three possible caching strategies:
+ 'MEMORY_OBJECT_COPY_NONE' which specifies that nothing special
+ should be done when data in the object is copied;
+ 'MEMORY_OBJECT_COPY_CALL' which specifies that the memory manager
+ should be notified via a 'memory_object_copy' call before any part
+ of the object is copied; and 'MEMORY_OBJECT_COPY_DELAY' which
+ guarantees that the memory manager does not externally modify the
+ data so that the kernel can use its normal copy-on-write
+ algorithms. 'MEMORY_OBJECT_COPY_DELAY' is the strategy most
+ commonly used.
+
+ The argument MEMORY_CONTROL is the port, provided by the kernel in
+ a 'memory_object_init' call, to which cache management requests may
+ be issued. If OBJECT_READY is set, the kernel may issue new data
+ and unlock requests on the associated memory object. If
+ MAY_CACHE_OBJECT is set, the kernel may keep data associated with
+ this memory object, even after virtual memory references to it are
+ gone. COPY_STRATEGY tells how the kernel should copy regions of
+ the associated memory object.
+
+ This routine does not receive a reply message (and consequently has
+ no return value), so only message transmission errors apply.
+
+
+File: mach.info, Node: Default Memory Manager, Prev: Memory Object
Attributes, Up: External Memory Management
+
+6.7 Default Memory Manager
+==========================
+
+ -- Function: kern_return_t vm_set_default_memory_manager (host_t HOST,
+ mach_port_t *DEFAULT_MANAGER)
+ The function 'vm_set_default_memory_manager' sets the kernel's
+ default memory manager. It sets the port to which newly-created
+ temporary memory objects are delivered by 'memory_object_create' to
+ the host. The old memory manager port is returned. If
+ DEFAULT_MANAGER is 'MACH_PORT_NULL' then this routine just returns
+ the current default manager port without changing it.
+
+ The argument HOST is a task port to the kernel whose default memory
+ manager is to be changed. DEFAULT_MANAGER is an in/out parameter.
+ As input, DEFAULT_MANAGER is the port that the new memory manager
+ is listening on for 'memory_object_create' calls. As output, it is
+ the old default memory manager's port.
+
+ The function returns 'KERN_SUCCESS' if the new memory manager is
+ installed, and 'KERN_INVALID_ARGUMENT' if this task does not have
+ the privileges required for this call.
+
+ -- Function: kern_return_t memory_object_create
+ (memory_object_t OLD_MEMORY_OBJECT,
+ memory_object_t NEW_MEMORY_OBJECT, vm_size_t NEW_OBJECT_SIZE,
+ memory_object_control_t NEW_CONTROL,
+ memory_object_name_t NEW_NAME, vm_size_t NEW_PAGE_SIZE)
+ -- Function: kern_return_t seqnos_memory_object_create
+ (memory_object_t OLD_MEMORY_OBJECT, mach_port_seqno_t SEQNO,
+ memory_object_t NEW_MEMORY_OBJECT, vm_size_t NEW_OBJECT_SIZE,
+ memory_object_control_t NEW_CONTROL,
+ memory_object_name_t NEW_NAME, vm_size_t NEW_PAGE_SIZE)
+ The function 'memory_object_create' is a request that the given
+ memory manager accept responsibility for the given memory object
+ created by the kernel. This call will only be made to the system
+ *default memory manager*. The memory object in question initially
+ consists of zero-filled memory; only memory pages that are actually
+ written will ever be provided to 'memory_object_data_request'
+ calls, the default memory manager must use
+ 'memory_object_data_unavailable' for any pages that have not
+ previously been written.
+
+ No reply is expected after this call. Since this call is directed
+ to the default memory manager, the kernel assumes that it will be
+ ready to handle data requests to this object and does not need the
+ confirmation of a 'memory_object_set_attributes' call.
+
+ The argument OLD_MEMORY_OBJECT is a memory object provided by the
+ default memory manager on which the kernel can make
+ 'memory_object_create' calls. NEW_MEMORY_OBJECT is a new memory
+ object created by the kernel; see synopsis for further description.
+ Note that all port rights (including receive rights) are included
+ for the new memory object. NEW_OBJECT_SIZE is the maximum size of
+ the new object. NEW_CONTROL is a port, created by the kernel, on
+ which a memory manager may issue cache management requests for the
+ new object. NEW_NAME a port used by the kernel to refer to the new
+ memory object data in response to 'vm_region' calls. NEW_PAGE_SIZE
+ is the page size to be used by this kernel. All data sizes in
+ calls involving this kernel must be an integral multiple of the
+ page size. Note that different kernels, indicated by different a
+ 'memory_control', may have different page sizes.
+
+ The function should return 'KERN_SUCCESS', but since this routine
+ is called by the kernel, which does not wait for a reply message,
+ this value is ignored.
+
+ -- Function: kern_return_t memory_object_data_initialize
+ (memory_object_t MEMORY_OBJECT,
+ memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_offset_t DATA, vm_size_t DATA_COUNT)
+ -- Function: kern_return_t seqnos_memory_object_data_initialize
+ (memory_object_t MEMORY_OBJECT, mach_port_seqno_t SEQNO,
+ memory_object_control_t MEMORY_CONTROL, vm_offset_t OFFSET,
+ vm_offset_t DATA, vm_size_t DATA_COUNT)
+ The function 'memory_object_data_initialize' provides the memory
+ manager with initial data for a kernel-created memory object. If
+ the memory manager already has been supplied data (by a previous
+ 'memory_object_data_initialize', 'memory_object_data_write' or
+ 'memory_object_data_return'), then this data should be ignored.
+ Otherwise, this call behaves exactly as does
+ 'memory_object_data_return' on memory objects created by the kernel
+ via 'memory_object_create' and thus will only be made to default
+ memory managers. This call will not be made on objects created via
+ 'memory_object_copy'.
+
+ The argument MEMORY_OBJECT the port that represents the memory
+ object data, as supplied by the kernel in a 'memory_object_create'
+ call. MEMORY_CONTROL is the request port to which a response is
+ requested. (In the event that a memory object has been supplied to
+ more than one the kernel that has made the request.) OFFSET is the
+ offset within a memory object to which this call refers. This will
+ be page aligned. DATA is the data which has been modified while
+ cached in physical memory. DATA_COUNT is the amount of data to be
+ written, in bytes. This will be an integral number of memory
+ object pages.
+
+ The function should return 'KERN_SUCCESS', but since this routine
+ is called by the kernel, which does not wait for a reply message,
+ this value is ignored.
+
+
+File: mach.info, Node: Threads and Tasks, Next: Host Interface, Prev:
External Memory Management, Up: Top
+
+7 Threads and Tasks
+*******************
+
+* Menu:
+
+* Thread Interface:: Manipulating threads.
+* Task Interface:: Manipulating tasks.
+* Profiling:: Profiling threads and tasks.
+
+
+File: mach.info, Node: Thread Interface, Next: Task Interface, Up: Threads
and Tasks
+
+7.1 Thread Interface
+====================
+
+ -- Data type: thread_t
+ This is a 'mach_port_t' and used to hold the port name of a thread
+ port that represents the thread. Manipulations of the thread are
+ implemented as remote procedure calls to the thread port. A thread
+ can get a port to itself with the 'mach_thread_self' system call.
+
+* Menu:
+
+* Thread Creation:: Creating new threads.
+* Thread Termination:: Terminating existing threads.
+* Thread Information:: How to get informations on threads.
+* Thread Settings:: How to set threads related informations.
+* Thread Execution:: How to control the thread's machine state.
+* Scheduling:: Operations on thread scheduling.
+* Thread Special Ports:: How to handle the thread's special ports.
+* Exceptions:: Managing exceptions.
+
+
+File: mach.info, Node: Thread Creation, Next: Thread Termination, Up:
Thread Interface
+
+7.1.1 Thread Creation
+---------------------
+
+ -- Function: kern_return_t thread_create (task_t PARENT_TASK,
+ thread_t *CHILD_THREAD)
+ The function 'thread_create' creates a new thread within the task
+ specified by PARENT_TASK. The new thread has no processor state,
+ and has a suspend count of 1. To get a new thread to run, first
+ 'thread_create' is called to get the new thread's identifier,
+ (CHILD_THREAD). Then 'thread_set_state' is called to set a
+ processor state, and finally 'thread_resume' is called to get the
+ thread scheduled to execute.
+
+ When the thread is created send rights to its thread kernel port
+ are given to it and returned to the caller in CHILD_THREAD. The
+ new thread's exception port is set to 'MACH_PORT_NULL'.
+
+ The function returns 'KERN_SUCCESS' if a new thread has been
+ created, 'KERN_INVALID_ARGUMENT' if PARENT_TASK is not a valid task
+ and 'KERN_RESOURCE_SHORTAGE' if some critical kernel resource is
+ not available.
+
+
+File: mach.info, Node: Thread Termination, Next: Thread Information, Prev:
Thread Creation, Up: Thread Interface
+
+7.1.2 Thread Termination
+------------------------
+
+ -- Function: kern_return_t thread_terminate (thread_t TARGET_THREAD)
+ The function 'thread_terminate' destroys the thread specified by
+ TARGET_THREAD.
+
+ The function returns 'KERN_SUCCESS' if the thread has been killed
+ and 'KERN_INVALID_ARGUMENT' if TARGET_THREAD is not a thread.
+
+
+File: mach.info, Node: Thread Information, Next: Thread Settings, Prev:
Thread Termination, Up: Thread Interface
+
+7.1.3 Thread Information
+------------------------
+
+ -- Function: thread_t mach_thread_self ()
+ The 'mach_thread_self' system call returns the calling thread's
+ thread port.
+
+ 'mach_thread_self' has an effect equivalent to receiving a send
+ right for the thread port. 'mach_thread_self' returns the name of
+ the send right. In particular, successive calls will increase the
+ calling task's user-reference count for the send right.
+
+ As a special exception, the kernel will overrun the user reference
+ count of the thread name port, so that this function can not fail
+ for that reason. Because of this, the user should not deallocate
+ the port right if an overrun might have happened. Otherwise the
+ reference count could drop to zero and the send right be destroyed
+ while the user still expects to be able to use it. As the kernel
+ does not make use of the number of extant send rights anyway, this
+ is safe to do (the thread port itself is not destroyed, even when
+ there are no send rights anymore).
+
+ The function returns 'MACH_PORT_NULL' if a resource shortage
+ prevented the reception of the send right or if the thread port is
+ currently null and 'MACH_PORT_DEAD' if the thread port is currently
+ dead.
+
+ -- Function: kern_return_t thread_info (thread_t TARGET_THREAD,
+ int FLAVOR, thread_info_t THREAD_INFO,
+ mach_msg_type_number_t *THREAD_INFOCNT)
+ The function 'thread_info' returns the selected information array
+ for a thread, as specified by FLAVOR.
+
+ THREAD_INFO is an array of integers that is supplied by the caller
+ and returned filled with specified information. THREAD_INFOCNT is
+ supplied as the maximum number of integers in THREAD_INFO. On
+ return, it contains the actual number of integers in THREAD_INFO.
+ The maximum number of integers returned by any flavor is
+ 'THREAD_INFO_MAX'.
+
+ The type of information returned is defined by FLAVOR, which can be
+ one of the following:
+
+ 'THREAD_BASIC_INFO'
+ The function returns basic information about the thread, as
+ defined by 'thread_basic_info_t'. This includes the user and
+ system time, the run state, and scheduling priority. The
+ number of integers returned is 'THREAD_BASIC_INFO_COUNT'.
+
+ 'THREAD_SCHED_INFO'
+ The function returns information about the scheduling policy
+ for the thread as defined by 'thread_sched_info_t'. The
+ number of integers returned is 'THREAD_SCHED_INFO_COUNT'.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded and
+ 'KERN_INVALID_ARGUMENT' if TARGET_THREAD is not a thread or FLAVOR
+ is not recognized. The function returns 'MIG_ARRAY_TOO_LARGE' if
+ the returned info array is too large for THREAD_INFO. In this
+ case, THREAD_INFO is filled as much as possible and THREAD_INFOCNT
+ is set to the number of elements that would have been returned if
+ there were enough room.
+
+ -- Data type: struct thread_basic_info
+ This structure is returned in THREAD_INFO by the 'thread_info'
+ function and provides basic information about the thread. You can
+ cast a variable of type 'thread_info_t' to a pointer of this type
+ if you provided it as the THREAD_INFO parameter for the
+ 'THREAD_BASIC_INFO' flavor of 'thread_info'. It has the following
+ members:
+
+ 'time_value_t user_time'
+ user run time
+
+ 'time_value_t system_time'
+ system run time
+ 'int cpu_usage'
+ Scaled cpu usage percentage. The scale factor is
+ 'TH_USAGE_SCALE'.
+
+ 'int base_priority'
+ The base scheduling priority of the thread.
+
+ 'int cur_priority'
+ The current scheduling priority of the thread.
+
+ 'integer_t run_state'
+ The run state of the thread. The possible values of this
+ field are:
+ 'TH_STATE_RUNNING'
+ The thread is running normally.
+
+ 'TH_STATE_STOPPED'
+ The thread is suspended.
+
+ 'TH_STATE_WAITING'
+ The thread is waiting normally.
+
+ 'TH_STATE_UNINTERRUPTIBLE'
+ The thread is in an uninterruptible wait.
+
+ 'TH_STATE_HALTED'
+ The thread is halted at a clean point.
+
+ 'flags'
+ Various flags. The possible values of this field are:
+ 'TH_FLAGS_SWAPPED'
+ The thread is swapped out.
+
+ 'TH_FLAGS_IDLE'
+ The thread is an idle thread.
+
+ 'int suspend_count'
+ The suspend count for the thread.
+
+ 'int sleep_time'
+ The number of seconds that the thread has been sleeping.
+
+ 'time_value_t creation_time'
+ The time stamp of creation.
+
+ -- Data type: thread_basic_info_t
+ This is a pointer to a 'struct thread_basic_info'.
+
+ -- Data type: struct thread_sched_info
+ This structure is returned in THREAD_INFO by the 'thread_info'
+ function and provides schedule information about the thread. You
+ can cast a variable of type 'thread_info_t' to a pointer of this
+ type if you provided it as the THREAD_INFO parameter for the
+ 'THREAD_SCHED_INFO' flavor of 'thread_info'. It has the following
+ members:
+
+ 'int policy'
+ The scheduling policy of the thread, *note Scheduling
+ Policy::.
+
+ 'integer_t data'
+ Policy-dependent scheduling information, *note Scheduling
+ Policy::.
+
+ 'int base_priority'
+ The base scheduling priority of the thread.
+
+ 'int max_priority'
+ The maximum scheduling priority of the thread.
+
+ 'int cur_priority'
+ The current scheduling priority of the thread.
+
+ 'int depressed'
+ 'TRUE' if the thread is depressed.
+
+ 'int depress_priority'
+ The priority the thread was depressed from.
+
+ -- Data type: thread_sched_info_t
+ This is a pointer to a 'struct thread_sched_info'.
+
+
+File: mach.info, Node: Thread Settings, Next: Thread Execution, Prev:
Thread Information, Up: Thread Interface
+
+7.1.4 Thread Settings
+---------------------
+
+ -- Function: kern_return_t thread_wire (host_priv_t HOST_PRIV,
+ thread_t THREAD, boolean_t WIRED)
+ The function 'thread_wire' controls the VM privilege level of the
+ thread THREAD. A VM-privileged thread never waits inside the
+ kernel for memory allocation from the kernel's free list of pages
+ or for allocation of a kernel stack.
+
+ Threads that are part of the default pageout path should be
+ VM-privileged, to prevent system deadlocks. Threads that are not
+ part of the default pageout path should not be VM-privileged, to
+ prevent the kernel's free list of pages from being exhausted.
+
+ The functions returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_ARGUMENT' if HOST_PRIV or THREAD was invalid.
+
+ The 'thread_wire' call is actually an RPC to HOST_PRIV, normally a
+ send right for a privileged host port, but potentially any send
+ right. In addition to the normal diagnostic return codes from the
+ call's server (normally the kernel), the call may return 'mach_msg'
+ return codes.
+
+
+File: mach.info, Node: Thread Execution, Next: Scheduling, Prev: Thread
Settings, Up: Thread Interface
+
+7.1.5 Thread Execution
+----------------------
+
+ -- Function: kern_return_t thread_suspend (thread_t TARGET_THREAD)
+ Increments the thread's suspend count and prevents the thread from
+ executing any more user level instructions. In this context a user
+ level instruction is either a machine instruction executed in user
+ mode or a system trap instruction including page faults. Thus if a
+ thread is currently executing within a system trap the kernel code
+ may continue to execute until it reaches the system return code or
+ it may suspend within the kernel code. In either case, when the
+ thread is resumed the system trap will return. This could cause
+ unpredictable results if the user did a suspend and then altered
+ the user state of the thread in order to change its direction upon
+ a resume. The call 'thread_abort' is provided to allow the user to
+ abort any system call that is in progress in a predictable way.
+
+ The suspend count may become greater than one with the effect that
+ it will take more than one resume call to restart the thread.
+
+ The function returns 'KERN_SUCCESS' if the thread has been
+ suspended and 'KERN_INVALID_ARGUMENT' if TARGET_THREAD is not a
+ thread.
+
+ -- Function: kern_return_t thread_resume (thread_t TARGET_THREAD)
+ Decrements the thread's suspend count. If the count becomes zero
+ the thread is resumed. If it is still positive, the thread is left
+ suspended. The suspend count may not become negative.
+
+ The function returns 'KERN_SUCCESS' if the thread has been resumed,
+ 'KERN_FAILURE' if the suspend count is already zero and
+ 'KERN_INVALID_ARGUMENT' if TARGET_THREAD is not a thread.
+
+ -- Function: kern_return_t thread_abort (thread_t TARGET_THREAD)
+ The function 'thread_abort' aborts the kernel primitives:
+ 'mach_msg', 'msg_send', 'msg_receive' and 'msg_rpc' and
+ page-faults, making the call return a code indicating that it was
+ interrupted. The call is interrupted whether or not the thread (or
+ task containing it) is currently suspended. If it is suspended,
+ the thread receives the interrupt when it is resumed.
+
+ A thread will retry an aborted page-fault if its state is not
+ modified before it is resumed. 'msg_send' returns
+ 'SEND_INTERRUPTED'; 'msg_receive' returns 'RCV_INTERRUPTED';
+ 'msg_rpc' returns either 'SEND_INTERRUPTED' or 'RCV_INTERRUPTED',
+ depending on which half of the RPC was interrupted.
+
+ The main reason for this primitive is to allow one thread to
+ cleanly stop another thread in a manner that will allow the future
+ execution of the target thread to be controlled in a predictable
+ way. 'thread_suspend' keeps the target thread from executing any
+ further instructions at the user level, including the return from a
+ system call. 'thread_get_state'/'thread_set_state' allows the
+ examination or modification of the user state of a target thread.
+ However, if a suspended thread was executing within a system call,
+ it also has associated with it a kernel state. This kernel state
+ can not be modified by 'thread_set_state' with the result that when
+ the thread is resumed the system call may return changing the user
+ state and possibly user memory. 'thread_abort' aborts the kernel
+ call from the target thread's point of view by resetting the kernel
+ state so that the thread will resume execution at the system call
+ return with the return code value set to one of the interrupted
+ codes. The system call itself will either be entirely completed or
+ entirely aborted, depending on the precise moment at which the
+ abort was received. Thus if the thread's user state has been
+ changed by 'thread_set_state', it will not be modified by any
+ unexpected system call side effects.
+
+ For example to simulate a Unix signal, the following sequence of
+ calls may be used:
+
+ 1. 'thread_suspend': Stops the thread.
+
+ 2. 'thread_abort': Interrupts any system call in progress,
+ setting the return value to 'interrupted'. Since the thread
+ is stopped, it will not return to user code.
+
+ 3. 'thread_set_state': Alters thread's state to simulate a
+ procedure call to the signal handler
+
+ 4. 'thread_resume': Resumes execution at the signal handler. If
+ the thread's stack has been correctly set up, the thread may
+ return to the interrupted system call. (Of course, the code
+ to push an extra stack frame and change the registers is VERY
+ machine-dependent.)
+
+ Calling 'thread_abort' on a non-suspended thread is pretty risky,
+ since it is very difficult to know exactly what system trap, if
+ any, the thread might be executing and whether an interrupt return
+ would cause the thread to do something useful.
+
+ The function returns 'KERN_SUCCESS' if the thread received an
+ interrupt and 'KERN_INVALID_ARGUMENT' if TARGET_THREAD is not a
+ thread.
+
+ -- Function: kern_return_t thread_get_state (thread_t TARGET_THREAD,
+ int FLAVOR, thread_state_t OLD_STATE,
+ mach_msg_type_number_t *OLD_STATECNT)
+ The function 'thread_get_state' returns the execution state (e.g.
+ the machine registers) of TARGET_THREAD as specified by FLAVOR.
+ The OLD_STATE is an array of integers that is provided by the
+ caller and returned filled with the specified information.
+ OLD_STATECNT is input set to the maximum number of integers in
+ OLD_STATE and returned equal to the actual number of integers in
+ OLD_STATE.
+
+ TARGET_THREAD may not be 'mach_thread_self()'.
+
+ The definition of the state structures can be found in
+ 'machine/thread_status.h'.
+
+ The function returns 'KERN_SUCCESS' if the state has been returned,
+ 'KERN_INVALID_ARGUMENT' if TARGET_THREAD is not a thread or is
+ 'mach_thread_self' or FLAVOR is unrecognized for this machine. The
+ function returns 'MIG_ARRAY_TOO_LARGE' if the returned state is too
+ large for OLD_STATE. In this case, OLD_STATE is filled as much as
+ possible and OLD_STATECNT is set to the number of elements that
+ would have been returned if there were enough room.
+
+ -- Function: kern_return_t thread_set_state (thread_t TARGET_THREAD,
+ int FLAVOR, thread_state_t NEW_STATE,
+ mach_msg_type_number_t NEW_STATE_COUNT)
+ The function 'thread_set_state' sets the execution state (e.g. the
+ machine registers) of TARGET_THREAD as specified by FLAVOR. The
+ NEW_STATE is an array of integers. NEW_STATE_COUNT is the number
+ of elements in NEW_STATE. The entire set of registers is reset.
+ This will do unpredictable things if TARGET_THREAD is not
+ suspended.
+
+ TARGET_THREAD may not be 'mach_thread_self'.
+
+ The definition of the state structures can be found in
+ 'machine/thread_status.h'.
+
+ The function returns 'KERN_SUCCESS' if the state has been set and
+ 'KERN_INVALID_ARGUMENT' if TARGET_THREAD is not a thread or is
+ 'mach_thread_self' or FLAVOR is unrecognized for this machine.
+
+
+File: mach.info, Node: Scheduling, Next: Thread Special Ports, Prev: Thread
Execution, Up: Thread Interface
+
+7.1.6 Scheduling
+----------------
+
+* Menu:
+
+* Thread Priority:: Changing the priority of a thread.
+* Hand-Off Scheduling:: Switching to a new thread.
+* Scheduling Policy:: Setting the scheduling policy.
+
+
+File: mach.info, Node: Thread Priority, Next: Hand-Off Scheduling, Up:
Scheduling
+
+7.1.6.1 Thread Priority
+.......................
+
+Threads have three priorities associated with them by the system, a
+priority, a maximum priority, and a scheduled priority. The scheduled
+priority is used to make scheduling decisions about the thread. It is
+determined from the priority by the policy (for timesharing, this means
+adding an increment derived from cpu usage). The priority can be set
+under user control, but may never exceed the maximum priority. Changing
+the maximum priority requires presentation of the control port for the
+thread's processor set; since the control port for the default processor
+set is privileged, users cannot raise their maximum priority to unfairly
+compete with other users on that set. Newly created threads obtain
+their priority from their task and their max priority from the thread.
+
+ -- Function: kern_return_t thread_priority (thread_t THREAD,
+ int PRORITY, boolean_t SET_MAX)
+ The function 'thread_priority' changes the priority and optionally
+ the maximum priority of THREAD. Priorities range from 0 to 31,
+ where lower numbers denote higher priorities. If the new priority
+ is higher than the priority of the current thread, preemption may
+ occur as a result of this call. The maximum priority of the thread
+ is also set if SET_MAX is 'TRUE'. This call will fail if PRIORITY
+ is greater than the current maximum priority of the thread. As a
+ result, this call can only lower the value of a thread's maximum
+ priority.
+
+ The functions returns 'KERN_SUCCESS' if the operation completed
+ successfully, 'KERN_INVALID_ARGUMENT' if THREAD is not a thread or
+ PRIORITY is out of range (not in 0..31), and 'KERN_FAILURE' if the
+ requested operation would violate the thread's maximum priority
+ (thread_priority).
+
+ -- Function: kern_return_t thread_max_priority (thread_t THREAD,
+ processor_set_t PROCESSOR_SET, int PRIORITY)
+ The function 'thread_max_priority' changes the maximum priority of
+ the thread. Because it requires presentation of the corresponding
+ processor set port, this call can reset the maximum priority to any
+ legal value.
+
+ The functions returns 'KERN_SUCCESS' if the operation completed
+ successfully, 'KERN_INVALID_ARGUMENT' if THREAD is not a thread or
+ PROCESSOR_SET is not a control port for a processor set or PRIORITY
+ is out of range (not in 0..31), and 'KERN_FAILURE' if the thread is
+ not assigned to the processor set whose control port was presented.
+
+
+File: mach.info, Node: Hand-Off Scheduling, Next: Scheduling Policy, Prev:
Thread Priority, Up: Scheduling
+
+7.1.6.2 Hand-Off Scheduling
+...........................
+
+ -- Function: kern_return_t thread_switch (thread_t NEW_THREAD,
+ int OPTION, int TIME)
+ The function 'thread_switch' provides low-level access to the
+ scheduler's context switching code. NEW_THREAD is a hint that
+ implements hand-off scheduling. The operating system will attempt
+ to switch directly to the new thread (bypassing the normal logic
+ that selects the next thread to run) if possible. Since this is a
+ hint, it may be incorrect; it is ignored if it doesn't specify a
+ thread on the same host as the current thread or if that thread
+ can't be switched to (i.e., not runnable or already running on
+ another processor or giving a plainly invalid hint, such as
+ 'MACH_PORT_NULL'). In this case, the normal logic to select the
+ next thread to run is used; the current thread may continue running
+ if there is no other appropriate thread to run.
+
+ Options for OPTION are defined in 'mach/thread_switch.h' and
+ specify the interpretation of TIME. The possible values for OPTION
+ are:
+
+ 'SWITCH_OPTION_NONE'
+ No options, the time argument is ignored.
+
+ 'SWITCH_OPTION_WAIT'
+ The thread is blocked for the specified time (in milliseconds;
+ specifying '0' will wait for the next tick). This can be
+ aborted by 'thread_abort'.
+
+ 'SWITCH_OPTION_DEPRESS'
+ The thread's priority is depressed to the lowest possible
+ value for the specified time. This can be aborted by
+ 'thread_depress_abort'. This depression is independent of
+ operations that change the thread's priority (e.g.
+ 'thread_priority' will not abort the depression). The minimum
+ time and units of time can be obtained as the 'min_timeout'
+ value from 'host_info'. The depression is also aborted when
+ the current thread is next run (either via hand-off scheduling
+ or because the processor set has nothing better to do).
+
+ 'thread_switch' is often called when the current thread can proceed
+ no further for some reason; the various options and arguments allow
+ information about this reason to be transmitted to the kernel. The
+ NEW_THREAD argument (handoff scheduling) is useful when the
+ identity of the thread that must make progress before the current
+ thread runs again is known. The 'WAIT' option is used when the
+ amount of time that the current thread must wait before it can do
+ anything useful can be estimated and is fairly long. The 'DEPRESS'
+ option is used when the amount of time that must be waited is
+ fairly short, especially when the identity of the thread that is
+ being waited for is not known.
+
+ Users should beware of calling 'thread_switch' with an invalid hint
+ (e.g. 'MACH_PORT_NULL') and no option. Because the time-sharing
+ scheduler varies the priority of threads based on usage, this may
+ result in a waste of cpu time if the thread that must be run is of
+ lower priority. The use of the 'DEPRESS' option in this situation
+ is highly recommended.
+
+ 'thread_switch' ignores policies. Users relying on the preemption
+ semantics of a fixed time policy should be aware that
+ 'thread_switch' ignores these semantics; it will run the specified
+ NEW_THREAD independent of its priority and the priority of any
+ other threads that could be run instead.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_ARGUMENT' if THREAD is not a thread or OPTION is not
+ a recognized option, and 'KERN_FAILURE' if 'kern_depress_abort'
+ failed because the thread was not depressed.
+
+ -- Function: kern_return_t thread_depress_abort (thread_t THREAD)
+ The function 'thread_depress_abort' cancels any priority depression
+ for THREAD caused by a 'swtch_pri' or 'thread_switch' call.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded and
+ 'KERN_INVALID_ARGUMENT' if THREAD is not a valid thread.
+
+ -- Function: boolean_t swtch ()
+ The system trap 'swtch' attempts to switch the current thread off
+ the processor. The return value indicates if more than the current
+ thread is running in the processor set. This is useful for lock
+ management routines.
+
+ The call returns 'FALSE' if the thread is justified in becoming a
+ resource hog by continuing to spin because there's nothing else
+ useful that the processor could do. 'TRUE' is returned if the
+ thread should make one more check on the lock and then be a good
+ citizen and really suspend.
+
+ -- Function: boolean_t swtch_pri (int PRIORITY)
+ The system trap 'swtch_pri' attempts to switch the current thread
+ off the processor as 'swtch' does, but depressing the priority of
+ the thread to the minimum possible value during the time. PRIORITY
+ is not used currently.
+
+ The return value is as for 'swtch'.
+
+
+File: mach.info, Node: Scheduling Policy, Prev: Hand-Off Scheduling, Up:
Scheduling
+
+7.1.6.3 Scheduling Policy
+.........................
+
+ -- Function: kern_return_t thread_policy (thread_t THREAD, int POLICY,
+ int DATA)
+ The function 'thread_policy' changes the scheduling policy for
+ THREAD to POLICY.
+
+ DATA is policy-dependent scheduling information. There are
+ currently two supported policies: 'POLICY_TIMESHARE' and
+ 'POLICY_FIXEDPRI' defined in 'mach/policy.h'; this file is included
+ by 'mach.h'. DATA is meaningless for timesharing, but is the
+ quantum to be used (in milliseconds) for the fixed priority policy.
+ To be meaningful, this quantum must be a multiple of the basic
+ system quantum (min_quantum) which can be obtained from
+ 'host_info'. The system will always round up to the next multiple
+ of the quantum.
+
+ Processor sets may restrict the allowed policies, so this call will
+ fail if the processor set to which THREAD is currently assigned
+ does not permit POLICY.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded.
+ 'KERN_INVALID_ARGUMENT' if THREAD is not a thread or POLICY is not
+ a recognized policy, and 'KERN_FAILURE' if the processor set to
+ which THREAD is currently assigned does not permit POLICY.
+
+
+File: mach.info, Node: Thread Special Ports, Next: Exceptions, Prev:
Scheduling, Up: Thread Interface
+
+7.1.7 Thread Special Ports
+--------------------------
+
+ -- Function: kern_return_t thread_get_special_port (thread_t THREAD,
+ int WHICH_PORT, mach_port_t *SPECIAL_PORT)
+ The function 'thread_get_special_port' returns send rights to one
+ of a set of special ports for the thread specified by THREAD.
+
+ The possible values for WHICH_PORT are 'THREAD_KERNEL_PORT' and
+ 'THREAD_EXCEPTION_PORT'. A thread also has access to its task's
+ special ports.
+
+ The function returns 'KERN_SUCCESS' if the port was returned and
+ 'KERN_INVALID_ARGUMENT' if THREAD is not a thread or WHICH_PORT is
+ an invalid port selector.
+
+ -- Function: kern_return_t thread_get_kernel_port (thread_t THREAD,
+ mach_port_t *KERNEL_PORT)
+ The function 'thread_get_kernel_port' is equivalent to the function
+ 'thread_get_special_port' with the WHICH_PORT argument set to
+ 'THREAD_KERNEL_PORT'.
+
+ -- Function: kern_return_t thread_get_exception_port (thread_t THREAD,
+ mach_port_t *EXCEPTION_PORT)
+ The function 'thread_get_exception_port' is equivalent to the
+ function 'thread_get_special_port' with the WHICH_PORT argument set
+ to 'THREAD_EXCEPTION_PORT'.
+
+ -- Function: kern_return_t thread_set_special_port (thread_t THREAD,
+ int WHICH_PORT, mach_port_t SPECIAL_PORT)
+ The function 'thread_set_special_port' sets one of a set of special
+ ports for the thread specified by THREAD.
+
+ The possible values for WHICH_PORT are 'THREAD_KERNEL_PORT' and
+ 'THREAD_EXCEPTION_PORT'. A thread also has access to its task's
+ special ports.
+
+ The function returns 'KERN_SUCCESS' if the port was set and
+ 'KERN_INVALID_ARGUMENT' if THREAD is not a thread or WHICH_PORT is
+ an invalid port selector.
+
+ -- Function: kern_return_t thread_set_kernel_port (thread_t THREAD,
+ mach_port_t KERNEL_PORT)
+ The function 'thread_set_kernel_port' is equivalent to the function
+ 'thread_set_special_port' with the WHICH_PORT argument set to
+ 'THREAD_KERNEL_PORT'.
+
+ -- Function: kern_return_t thread_set_exception_port (thread_t THREAD,
+ mach_port_t EXCEPTION_PORT)
+ The function 'thread_set_exception_port' is equivalent to the
+ function 'thread_set_special_port' with the WHICH_PORT argument set
+ to 'THREAD_EXCEPTION_PORT'.
+
+
+File: mach.info, Node: Exceptions, Prev: Thread Special Ports, Up: Thread
Interface
+
+7.1.8 Exceptions
+----------------
+
+ -- Function: kern_return_t catch_exception_raise
+ (mach_port_t EXCEPTION_PORT, thread_t THREAD, task_t TASK,
+ int EXCEPTION, int CODE, int SUBCODE)
+ XXX Fixme
+
+ -- Function: kern_return_t exception_raise (mach_port_t EXCEPTION_PORT,
+ mach_port_t THREAD, mach_port_t TASK, integer_t EXCEPTION,
+ integer_t CODE, integer_t SUBCODE)
+ XXX Fixme
+
+ -- Function: kern_return_t evc_wait (unsigned int EVENT)
+ The system trap 'evc_wait' makes the calling thread wait for the
+ event specified by EVENT.
+
+ The call returns 'KERN_SUCCESS' if the event has occurred,
+ 'KERN_NO_SPACE' if another thread is waiting for the same event and
+ 'KERN_INVALID_ARGUMENT' if the event object is invalid.
+
+
+File: mach.info, Node: Task Interface, Next: Profiling, Prev: Thread
Interface, Up: Threads and Tasks
+
+7.2 Task Interface
+==================
+
+ -- Data type: task_t
+ This is a 'mach_port_t' and used to hold the port name of a task
+ port that represents the thread. Manipulations of the task are
+ implemented as remote procedure calls to the task port. A task can
+ get a port to itself with the 'mach_task_self' system call.
+
+ The task port name is also used to identify the task's IPC space
+ (*note Port Manipulation Interface::) and the task's virtual memory
+ map (*note Virtual Memory Interface::).
+
+* Menu:
+
+* Task Creation:: Creating tasks.
+* Task Termination:: Terminating tasks.
+* Task Information:: Informations on tasks.
+* Task Execution:: Thread scheduling in a task.
+* Task Special Ports:: How to get and set the task's special ports.
+* Syscall Emulation:: How to emulate system calls.
+
+
+File: mach.info, Node: Task Creation, Next: Task Termination, Up: Task
Interface
+
+7.2.1 Task Creation
+-------------------
+
+ -- Function: kern_return_t task_create (task_t PARENT_TASK,
+ boolean_t INHERIT_MEMORY, task_t *CHILD_TASK)
+ The function 'task_create' creates a new task from PARENT_TASK; the
+ resulting task (CHILD_TASK) acquires shared or copied parts of the
+ parent's address space (see 'vm_inherit'). The child task
+ initially contains no threads.
+
+ If INHERIT_MEMORY is set, the child task's address space is built
+ from the parent task according to its memory inheritance values;
+ otherwise, the child task is given an empty address space.
+
+ The child task gets the three special ports created or copied for
+ it at task creation. The 'TASK_KERNEL_PORT' is created and send
+ rights for it are given to the child and returned to the caller.
+ The 'TASK_BOOTSTRAP_PORT' and the 'TASK_EXCEPTION_PORT' are
+ inherited from the parent task. The new task can get send rights
+ to these ports with the call 'task_get_special_port'.
+
+ The function returns 'KERN_SUCCESS' if a new task has been created,
+ 'KERN_INVALID_ARGUMENT' if PARENT_TASK is not a valid task port and
+ 'KERN_RESOURCE_SHORTAGE' if some critical kernel resource is
+ unavailable.
+
+
+File: mach.info, Node: Task Termination, Next: Task Information, Prev: Task
Creation, Up: Task Interface
+
+7.2.2 Task Termination
+----------------------
+
+ -- Function: kern_return_t task_terminate (task_t TARGET_TASK)
+ The function 'task_terminate' destroys the task specified by
+ TARGET_TASK and all its threads. All resources that are used only
+ by this task are freed. Any port to which this task has receive
+ and ownership rights is destroyed.
+
+ The function returns 'KERN_SUCCESS' if the task has been killed,
+ 'KERN_INVALID_ARGUMENT' if TARGET_TASK is not a task.
+
+
+File: mach.info, Node: Task Information, Next: Task Execution, Prev: Task
Termination, Up: Task Interface
+
+7.2.3 Task Information
+----------------------
+
+ -- Function: task_t mach_task_self ()
+ The 'mach_task_self' system call returns the calling thread's task
+ port.
+
+ 'mach_task_self' has an effect equivalent to receiving a send right
+ for the task port. 'mach_task_self' returns the name of the send
+ right. In particular, successive calls will increase the calling
+ task's user-reference count for the send right.
+
+ As a special exception, the kernel will overrun the user reference
+ count of the task name port, so that this function can not fail for
+ that reason. Because of this, the user should not deallocate the
+ port right if an overrun might have happened. Otherwise the
+ reference count could drop to zero and the send right be destroyed
+ while the user still expects to be able to use it. As the kernel
+ does not make use of the number of extant send rights anyway, this
+ is safe to do (the task port itself is not destroyed, even when
+ there are no send rights anymore).
+
+ The function returns 'MACH_PORT_NULL' if a resource shortage
+ prevented the reception of the send right, 'MACH_PORT_NULL' if the
+ task port is currently null, 'MACH_PORT_DEAD' if the task port is
+ currently dead.
+
+ -- Function: kern_return_t task_threads (task_t TARGET_TASK,
+ thread_array_t *THREAD_LIST,
+ mach_msg_type_number_t *THREAD_COUNT)
+ The function 'task_threads' gets send rights to the kernel port for
+ each thread contained in TARGET_TASK. THREAD_LIST is an array that
+ is created as a result of this call. The caller may wish to
+ 'vm_deallocate' this array when the data is no longer needed.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded and
+ 'KERN_INVALID_ARGUMENT' if TARGET_TASK is not a task.
+
+ -- Function: kern_return_t task_info (task_t TARGET_TASK, int FLAVOR,
+ task_info_t TASK_INFO,
+ mach_msg_type_number_t *TASK_INFO_COUNT)
+ The function 'task_info' returns the selected information array for
+ a task, as specified by FLAVOR. TASK_INFO is an array of integers
+ that is supplied by the caller, and filled with specified
+ information. TASK_INFO_COUNT is supplied as the maximum number of
+ integers in TASK_INFO. On return, it contains the actual number of
+ integers in TASK_INFO. The maximum number of integers returned by
+ any flavor is 'TASK_INFO_MAX'.
+
+ The type of information returned is defined by FLAVOR, which can be
+ one of the following:
+
+ 'TASK_BASIC_INFO'
+ The function returns basic information about the task, as
+ defined by 'task_basic_info_t'. This includes the user and
+ system time and memory consumption. The number of integers
+ returned is 'TASK_BASIC_INFO_COUNT'.
+
+ 'TASK_EVENTS_INFO'
+ The function returns information about events for the task as
+ defined by 'thread_sched_info_t'. This includes statistics
+ about virtual memory and IPC events like pageouts, pageins and
+ messages sent and received. The number of integers returned
+ is 'TASK_EVENTS_INFO_COUNT'.
+
+ 'TASK_THREAD_TIMES_INFO'
+ The function returns information about the total time for live
+ threads as defined by 'task_thread_times_info_t'. The number
+ of integers returned is 'TASK_THREAD_TIMES_INFO_COUNT'.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded and
+ 'KERN_INVALID_ARGUMENT' if TARGET_TASK is not a thread or FLAVOR is
+ not recognized. The function returns 'MIG_ARRAY_TOO_LARGE' if the
+ returned info array is too large for TASK_INFO. In this case,
+ TASK_INFO is filled as much as possible and TASK_INFOCNT is set to
+ the number of elements that would have been returned if there were
+ enough room.
+
+ -- Data type: struct task_basic_info
+ This structure is returned in TASK_INFO by the 'task_info' function
+ and provides basic information about the task. You can cast a
+ variable of type 'task_info_t' to a pointer of this type if you
+ provided it as the TASK_INFO parameter for the 'TASK_BASIC_INFO'
+ flavor of 'task_info'. It has the following members:
+
+ 'integer_t suspend_count'
+ suspend count for task
+
+ 'integer_t base_priority'
+ base scheduling priority
+
+ 'vm_size_t virtual_size'
+ number of virtual pages
+
+ 'vm_size_t resident_size'
+ number of resident pages
+
+ 'time_value_t user_time'
+ total user run time for terminated threads
+
+ 'time_value_t system_time'
+ total system run time for terminated threads
+
+ 'time_value_t creation_time'
+ creation time stamp
+
+ -- Data type: task_basic_info_t
+ This is a pointer to a 'struct task_basic_info'.
+
+ -- Data type: struct task_events_info
+ This structure is returned in TASK_INFO by the 'task_info' function
+ and provides event statistics for the task. You can cast a
+ variable of type 'task_info_t' to a pointer of this type if you
+ provided it as the TASK_INFO parameter for the 'TASK_EVENTS_INFO'
+ flavor of 'task_info'. It has the following members:
+
+ 'natural_t faults'
+ number of page faults
+
+ 'natural_t zero_fills'
+ number of zero fill pages
+
+ 'natural_t reactivations'
+ number of reactivated pages
+
+ 'natural_t pageins'
+ number of actual pageins
+
+ 'natural_t cow_faults'
+ number of copy-on-write faults
+
+ 'natural_t messages_sent'
+ number of messages sent
+
+ 'natural_t messages_received'
+ number of messages received
+
+ -- Data type: task_events_info_t
+ This is a pointer to a 'struct task_events_info'.
+
+ -- Data type: struct task_thread_times_info
+ This structure is returned in TASK_INFO by the 'task_info' function
+ and provides event statistics for the task. You can cast a
+ variable of type 'task_info_t' to a pointer of this type if you
+ provided it as the TASK_INFO parameter for the
+ 'TASK_THREAD_TIMES_INFO' flavor of 'task_info'. It has the
+ following members:
+
+ 'time_value_t user_time'
+ total user run time for live threads
+
+ 'time_value_t system_time'
+ total system run time for live threads
+
+ -- Data type: task_thread_times_info_t
+ This is a pointer to a 'struct task_thread_times_info'.
+
+
+File: mach.info, Node: Task Execution, Next: Task Special Ports, Prev: Task
Information, Up: Task Interface
+
+7.2.4 Task Execution
+--------------------
+
+ -- Function: kern_return_t task_suspend (task_t TARGET_TASK)
+ The function 'task_suspend' increments the task's suspend count and
+ stops all threads in the task. As long as the suspend count is
+ positive newly created threads will not run. This call does not
+ return until all threads are suspended.
+
+ The count may become greater than one, with the effect that it will
+ take more than one resume call to restart the task.
+
+ The function returns 'KERN_SUCCESS' if the task has been suspended
+ and 'KERN_INVALID_ARGUMENT' if TARGET_TASK is not a task.
+
+ -- Function: kern_return_t task_resume (task_t TARGET_TASK)
+ The function 'task_resume' decrements the task's suspend count. If
+ it becomes zero, all threads with zero suspend counts in the task
+ are resumed. The count may not become negative.
+
+ The function returns 'KERN_SUCCESS' if the task has been resumed,
+ 'KERN_FAILURE' if the suspend count is already at zero and
+ 'KERN_INVALID_ARGUMENT' if TARGET_TASK is not a task.
+
+ -- Function: kern_return_t task_priority (task_t TASK, int PRIORITY,
+ boolean_t CHANGE_THREADS)
+ The priority of a task is used only for creation of new threads; a
+ new thread's priority is set to the enclosing task's priority.
+ 'task_priority' changes this task priority. It also sets the
+ priorities of all threads in the task to this new priority if
+ CHANGE_THREADS is 'TRUE'. Existing threads are not affected
+ otherwise. If this priority change violates the maximum priority
+ of some threads, as many threads as possible will be changed and an
+ error code will be returned.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_ARGUMENT' if TASK is not a task, or PRIORITY is not a
+ valid priority and 'KERN_FAILURE' if CHANGE_THREADS was 'TRUE' and
+ the attempt to change the priority of at least one existing thread
+ failed because the new priority would have exceeded that thread's
+ maximum priority.
+
+ -- Function: kern_return_t task_ras_control (task_t TARGET_TASK,
+ vm_address_t START_PC, vm_address_t END_PC, int FLAVOR)
+ The function 'task_ras_control' manipulates a task's set of
+ restartable atomic sequences. If a sequence is installed, and any
+ thread in the task is preempted within the range [START_PC,END_PC],
+ then the thread is resumed at START_PC. This enables applications
+ to build atomic sequences which, when executed to completion, will
+ have executed atomically. Restartable atomic sequences are
+ intended to be used on systems that do not have hardware support
+ for low-overhead atomic primitives.
+
+ As a thread can be rolled-back, the code in the sequence should
+ have no side effects other than a final store at END_PC. The
+ kernel does not guarantee that the sequence is restartable. It
+ assumes the application knows what it's doing.
+
+ A task may have a finite number of atomic sequences that is defined
+ at compile time.
+
+ The flavor specifies the particular operation that should be
+ applied to this restartable atomic sequence. Possible values for
+ flavor can be:
+
+ 'TASK_RAS_CONTROL_PURGE_ALL'
+ Remove all registered sequences for this task.
+
+ 'TASK_RAS_CONTROL_PURGE_ONE'
+ Remove the named registered sequence for this task.
+
+ 'TASK_RAS_CONTROL_PURGE_ALL_AND_INSTALL_ONE'
+ Atomically remove all registered sequences and install the
+ named sequence.
+
+ 'TASK_RAS_CONTROL_INSTALL_ONE'
+ Install this sequence.
+
+ The function returns 'KERN_SUCCESS' if the operation has been
+ performed, 'KERN_INVALID_ADDRESS' if the START_PC or END_PC values
+ are not a valid address for the requested operation (for example,
+ it is invalid to purge a sequence that has not been registered),
+ 'KERN_RESOURCE_SHORTAGE' if an attempt was made to install more
+ restartable atomic sequences for a task than can be supported by
+ the kernel, 'KERN_INVALID_VALUE' if a bad flavor was specified,
+ 'KERN_INVALID_ARGUMENT' if TARGET_TASK is not a task and
+ 'KERN_FAILURE' if the call is not not supported on this
+ configuration.
+
+
+File: mach.info, Node: Task Special Ports, Next: Syscall Emulation, Prev:
Task Execution, Up: Task Interface
+
+7.2.5 Task Special Ports
+------------------------
+
+ -- Function: kern_return_t task_get_special_port (task_t TASK,
+ int WHICH_PORT, mach_port_t *SPECIAL_PORT)
+ The function 'task_get_special_port' returns send rights to one of
+ a set of special ports for the task specified by TASK.
+
+ The special ports associated with a task are the kernel port
+ ('TASK_KERNEL_PORT'), the bootstrap port ('TASK_BOOTSTRAP_PORT')
+ and the exception port ('TASK_EXCEPTION_PORT'). The bootstrap port
+ is a port to which a task may send a message requesting other
+ system service ports. This port is not used by the kernel. The
+ task's exception port is the port to which messages are sent by the
+ kernel when an exception occurs and the thread causing the
+ exception has no exception port of its own.
+
+ The following macros to call 'task_get_special_port' for a specific
+ port are defined in 'mach/task_special_ports.h':
+ 'task_get_exception_port' and 'task_get_bootstrap_port'.
+
+ The function returns 'KERN_SUCCESS' if the port was returned and
+ 'KERN_INVALID_ARGUMENT' if TASK is not a task or WHICH_PORT is an
+ invalid port selector.
+
+ -- Function: kern_return_t task_get_kernel_port (task_t TASK,
+ mach_port_t *KERNEL_PORT)
+ The function 'task_get_kernel_port' is equivalent to the function
+ 'task_get_special_port' with the WHICH_PORT argument set to
+ 'TASK_KERNEL_PORT'.
+
+ -- Function: kern_return_t task_get_exception_port (task_t TASK,
+ mach_port_t *EXCEPTION_PORT)
+ The function 'task_get_exception_port' is equivalent to the
+ function 'task_get_special_port' with the WHICH_PORT argument set
+ to 'TASK_EXCEPTION_PORT'.
+
+ -- Function: kern_return_t task_get_bootstrap_port (task_t TASK,
+ mach_port_t *BOOTSTRAP_PORT)
+ The function 'task_get_bootstrap_port' is equivalent to the
+ function 'task_get_special_port' with the WHICH_PORT argument set
+ to 'TASK_BOOTSTRAP_PORT'.
+
+ -- Function: kern_return_t task_set_special_port (task_t TASK,
+ int WHICH_PORT, mach_port_t SPECIAL_PORT)
+ The function 'thread_set_special_port' sets one of a set of special
+ ports for the task specified by TASK.
+
+ The special ports associated with a task are the kernel port
+ ('TASK_KERNEL_PORT'), the bootstrap port ('TASK_BOOTSTRAP_PORT')
+ and the exception port ('TASK_EXCEPTION_PORT'). The bootstrap port
+ is a port to which a thread may send a message requesting other
+ system service ports. This port is not used by the kernel. The
+ task's exception port is the port to which messages are sent by the
+ kernel when an exception occurs and the thread causing the
+ exception has no exception port of its own.
+
+ The function returns 'KERN_SUCCESS' if the port was set and
+ 'KERN_INVALID_ARGUMENT' if TASK is not a task or WHICH_PORT is an
+ invalid port selector.
+
+ -- Function: kern_return_t task_set_kernel_port (task_t TASK,
+ mach_port_t KERNEL_PORT)
+ The function 'task_set_kernel_port' is equivalent to the function
+ 'task_set_special_port' with the WHICH_PORT argument set to
+ 'TASK_KERNEL_PORT'.
+
+ -- Function: kern_return_t task_set_exception_port (task_t TASK,
+ mach_port_t EXCEPTION_PORT)
+ The function 'task_set_exception_port' is equivalent to the
+ function 'task_set_special_port' with the WHICH_PORT argument set
+ to 'TASK_EXCEPTION_PORT'.
+
+ -- Function: kern_return_t task_set_bootstrap_port (task_t TASK,
+ mach_port_t BOOTSTRAP_PORT)
+ The function 'task_set_bootstrap_port' is equivalent to the
+ function 'task_set_special_port' with the WHICH_PORT argument set
+ to 'TASK_BOOTSTRAP_PORT'.
+
+
+File: mach.info, Node: Syscall Emulation, Prev: Task Special Ports, Up:
Task Interface
+
+7.2.6 Syscall Emulation
+-----------------------
+
+ -- Function: kern_return_t task_get_emulation_vector (task_t TASK,
+ int *VECTOR_START, emulation_vector_t *EMULATION_VECTOR,
+ mach_msg_type_number_t *EMULATION_VECTOR_COUNT)
+ The function 'task_get_emulation_vector' gets the user-level
+ handler entry points for all emulated system calls.
+
+ -- Function: kern_return_t task_set_emulation_vector (task_t TASK,
+ int VECTOR_START, emulation_vector_t EMULATION_VECTOR,
+ mach_msg_type_number_t EMULATION_VECTOR_COUNT)
+ The function 'task_set_emulation_vector' establishes user-level
+ handlers for the specified system calls. Non-emulated system calls
+ are specified with an entry of 'EML_ROUTINE_NULL'. System call
+ emulation handlers are inherited by the children of TASK.
+
+ -- Function: kern_return_t task_set_emulation (task_t TASK,
+ vm_address_t ROUTINE_ENTRY_PT, int ROUTINE_NUMBER)
+ The function 'task_set_emulation' establishes a user-level handler
+ for the specified system call. System call emulation handlers are
+ inherited by the children of TASK.
+
+
+File: mach.info, Node: Profiling, Prev: Task Interface, Up: Threads and
Tasks
+
+7.3 Profiling
+=============
+
+ -- Function: kern_return_t task_enable_pc_sampling (task_t TASK,
+ int *TICKS, sampled_pc_flavor_t FLAVOR)
+ -- Function: kern_return_t thread_enable_pc_sampling (thread_t THREAD,
+ int *TICKS, sampled_pc_flavor_t FLAVOR)
+ The function 'task_enable_pc_sampling' enables PC sampling for
+ TASK, the function 'thread_enable_pc_sampling' enables PC sampling
+ for THREAD. The kernel's idea of clock granularity is returned in
+ TICKS in usecs. (this value should not be trusted). The sampling
+ flavor is specified by FLAVOR.
+
+ The function returns 'KERN_SUCCESS' if the operation is completed
+ successfully and 'KERN_INVALID_ARGUMENT' if THREAD is not a valid
+ thread.
+
+ -- Function: kern_return_t task_disable_pc_sampling (task_t TASK,
+ int *SAMPLE_COUNT)
+ -- Function: kern_return_t thread_disable_pc_sampling (thread_t THREAD,
+ int *SAMPLE_COUNT)
+ The function 'task_disable_pc_sampling' disables PC sampling for
+ TASK, the function 'thread_disable_pc_sampling' disables PC
+ sampling for THREAD. The number of sample elements in the kernel
+ for the thread is returned in SAMPLE_COUNT.
+
+ The function returns 'KERN_SUCCESS' if the operation is completed
+ successfully and 'KERN_INVALID_ARGUMENT' if THREAD is not a valid
+ thread.
+
+ -- Function: kern_return_t task_get_sampled_pcs (task_t TASK,
+ sampled_pc_seqno_t *SEQNO, sampled_pc_array_t SAMPLED_PCS,
+ mach_msg_type_number_t *SAMPLE_COUNT)
+ -- Function: kern_return_t thread_get_sampled_pcs (thread_t THREAD,
+ sampled_pc_seqno_t *SEQNO, sampled_pc_array_t SAMPLED_PCS,
+ int *SAMPLE_COUNT)
+ The function 'task_get_sampled_pcs' extracts the PC samples for
+ TASK, the function 'thread_get_sampled_pcs' extracts the PC samples
+ for THREAD. SEQNO is the sequence number of the sampled PCs. This
+ is useful for determining when a collector thread has missed a
+ sample. The sampled PCs for the thread are returned in
+ SAMPLED_PCS. SAMPLE_COUNT contains the number of sample elements
+ returned.
+
+ The function returns 'KERN_SUCCESS' if the operation is completed
+ successfully, 'KERN_INVALID_ARGUMENT' if THREAD is not a valid
+ thread and 'KERN_FAILURE' if THREAD is not sampled.
+
+ -- Data type: sampled_pc_t
+ This structure is returned in SAMPLED_PCS by the
+ 'thread_get_sampled_pcs' and 'task_get_sampled_pcs' functions and
+ provides pc samples for threads or tasks. It has the following
+ members:
+
+ 'natural_t id'
+ A thread-specific unique identifier.
+
+ 'vm_offset_t pc'
+ A pc value.
+
+ 'sampled_pc_flavor_t sampletype'
+ The type of the sample as per flavor.
+
+ -- Data type: sampled_pc_flavor_t
+ This data type specifies a pc sample flavor, either as argument
+ passed in FLAVOR to the 'thread_enable_pc_sample' and
+ 'thread_disable_pc_sample' functions, or as member 'sampletype' in
+ the 'sample_pc_t' data type. The flavor is a bitwise-or of the
+ possible flavors defined in 'mach/pc_sample.h':
+
+ 'SAMPLED_PC_PERIODIC'
+ default
+ 'SAMPLED_PC_VM_ZFILL_FAULTS'
+ zero filled fault
+ 'SAMPLED_PC_VM_REACTIVATION_FAULTS'
+ reactivation fault
+ 'SAMPLED_PC_VM_PAGEIN_FAULTS'
+ pagein fault
+ 'SAMPLED_PC_VM_COW_FAULTS'
+ copy-on-write fault
+ 'SAMPLED_PC_VM_FAULTS_ANY'
+ any fault
+ 'SAMPLED_PC_VM_FAULTS'
+ the bitwise-or of 'SAMPLED_PC_VM_ZFILL_FAULTS',
+ 'SAMPLED_PC_VM_REACTIVATION_FAULTS',
+ 'SAMPLED_PC_VM_PAGEIN_FAULTS' and 'SAMPLED_PC_VM_COW_FAULTS'.
+
+
+File: mach.info, Node: Host Interface, Next: Processors and Processor Sets,
Prev: Threads and Tasks, Up: Top
+
+8 Host Interface
+****************
+
+This section describes the Mach interface to a host executing a Mach
+kernel. The interface allows to query statistics about a host and
+control its behaviour.
+
+ A host is represented by two ports, a name port HOST used to query
+information about the host accessible to everyone, and a control port
+HOST_PRIV used to manipulate it. For example, you can query the current
+time using the name port, but to change the time you need to send a
+message to the host control port.
+
+ Everything described in this section is declared in the header file
+'mach.h'.
+
+* Menu:
+
+* Host Ports:: Ports representing a host.
+* Host Information:: Retrieval of information about a host.
+* Host Time:: Operations on the time as seen by a host.
+* Host Reboot:: Rebooting the system.
+
+
+File: mach.info, Node: Host Ports, Next: Host Information, Up: Host
Interface
+
+8.1 Host Ports
+==============
+
+ -- Data type: host_t
+ This is a 'mach_port_t' and used to hold the port name of a host
+ name port (or short: host port). Any task can get a send right to
+ the name port of the host running the task using the
+ 'mach_host_self' system call. The name port can be used query
+ information about the host, for example the current time.
+
+ -- Function: host_t mach_host_self ()
+ The 'mach_host_self' system call returns the calling thread's host
+ name port. It has an effect equivalent to receiving a send right
+ for the host port. 'mach_host_self' returns the name of the send
+ right. In particular, successive calls will increase the calling
+ task's user-reference count for the send right.
+
+ As a special exception, the kernel will overrun the user reference
+ count of the host name port, so that this function can not fail for
+ that reason. Because of this, the user should not deallocate the
+ port right if an overrun might have happened. Otherwise the
+ reference count could drop to zero and the send right be destroyed
+ while the user still expects to be able to use it. As the kernel
+ does not make use of the number of extant send rights anyway, this
+ is safe to do (the host port itself is never destroyed).
+
+ The function returns 'MACH_PORT_NULL' if a resource shortage
+ prevented the reception of the send right.
+
+ This function is also available in 'mach/mach_traps.h'.
+
+ -- Data type: host_priv_t
+ This is a 'mach_port_t' and used to hold the port name of a
+ privileged host control port. A send right to the host control
+ port is inserted into the first task at bootstrap (*note
+ Modules::). This is the only way to get access to the host control
+ port in Mach, so the initial task has to preserve the send right
+ carefully, moving a copy of it to other privileged tasks if
+ necessary and denying access to unprivileged tasks.
+
+
+File: mach.info, Node: Host Information, Next: Host Time, Prev: Host Ports,
Up: Host Interface
+
+8.2 Host Information
+====================
+
+ -- Function: kern_return_t host_info (host_t HOST, int FLAVOR,
+ host_info_t HOST_INFO,
+ mach_msg_type_number_t *HOST_INFO_COUNT)
+ The 'host_info' function returns various information about HOST.
+ HOST_INFO is an array of integers that is supplied by the caller.
+ It will be filled with the requested information. HOST_INFO_COUNT
+ is supplied as the maximum number of integers in HOST_INFO. On
+ return, it contains the actual number of integers in HOST_INFO.
+ The maximum number of integers returned by any flavor is
+ 'HOST_INFO_MAX'.
+
+ The type of information returned is defined by FLAVOR, which can be
+ one of the following:
+
+ 'HOST_BASIC_INFO'
+ The function returns basic information about the host, as
+ defined by 'host_basic_info_t'. This includes the number of
+ processors, their type, and the amount of memory installed in
+ the system. The number of integers returned is
+ 'HOST_BASIC_INFO_COUNT'. For how to get more information
+ about the processor, see *note Processor Interface::.
+
+ 'HOST_PROCESSOR_SLOTS'
+ The function returns the numbers of the slots with active
+ processors in them. The number of integers returned can be up
+ to 'max_cpus', as returned by the 'HOST_BASIC_INFO' flavor of
+ 'host_info'.
+
+ 'HOST_SCHED_INFO'
+ The function returns information of interest to schedulers as
+ defined by 'host_sched_info_t'. The number of integers
+ returned is 'HOST_SCHED_INFO_COUNT'.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded and
+ 'KERN_INVALID_ARGUMENT' if HOST is not a host or FLAVOR is not
+ recognized. The function returns 'MIG_ARRAY_TOO_LARGE' if the
+ returned info array is too large for HOST_INFO. In this case,
+ HOST_INFO is filled as much as possible and HOST_INFO_COUNT is set
+ to the number of elements that would be returned if there were
+ enough room.
+
+ -- Data type: struct host_basic_info
+ A pointer to this structure is returned in HOST_INFO by the
+ 'host_info' function and provides basic information about the host.
+ You can cast a variable of type 'host_info_t' to a pointer of this
+ type if you provided it as the HOST_INFO parameter for the
+ 'HOST_BASIC_INFO' flavor of 'host_info'. It has the following
+ members:
+
+ 'int max_cpus'
+ The maximum number of possible processors for which the kernel
+ is configured.
+
+ 'int avail_cpus'
+ The number of cpus currently available.
+
+ 'vm_size_t memory_size'
+ The size of physical memory in bytes.
+
+ 'cpu_type_t cpu_type'
+ The type of the master processor.
+
+ 'cpu_subtype_t cpu_subtype'
+ The subtype of the master processor.
+
+ The type and subtype of the individual processors are also
+ available by 'processor_info', see *note Processor Interface::.
+
+ -- Data type: host_basic_info_t
+ This is a pointer to a 'struct host_basic_info'.
+
+ -- Data type: struct host_sched_info
+ A pointer to this structure is returned in HOST_INFO by the
+ 'host_info' function and provides information of interest to
+ schedulers. You can cast a variable of type 'host_info_t' to a
+ pointer of this type if you provided it as the HOST_INFO parameter
+ for the 'HOST_SCHED_INFO' flavor of 'host_info'. It has the
+ following members:
+
+ 'int min_timeout'
+ The minimum timeout and unit of time in milliseconds.
+
+ 'int min_quantum'
+ The minimum quantum and unit of quantum in milliseconds.
+
+ -- Data type: host_sched_info_t
+ This is a pointer to a 'struct host_sched_info'.
+
+ -- Function: kern_return_t host_kernel_version (host_t HOST,
+ kernel_version_t *VERSION)
+ The 'host_kernel_version' function returns the version string
+ compiled into the kernel executing on HOST at the time it was built
+ in the character string VERSION. This string describes the version
+ of the kernel. The constant 'KERNEL_VERSION_MAX' should be used to
+ dimension storage for the returned string if the 'kernel_version_t'
+ declaration is not used.
+
+ If the version string compiled into the kernel is longer than
+ 'KERNEL_VERSION_MAX', the result is truncated and not necessarily
+ null-terminated.
+
+ If HOST is not a valid send right to a host port, the function
+ returns 'KERN_INVALID_ARGUMENT'. If VERSION points to inaccessible
+ memory, it returns 'KERN_INVALID_ADDRESS', and 'KERN_SUCCESS'
+ otherwise.
+
+ -- Function: kern_return_t host_get_boot_info (host_priv_t HOST_PRIV,
+ kernel_boot_info_t BOOT_INFO)
+ The 'host_get_boot_info' function returns the boot-time information
+ string supplied by the operator to the kernel executing on
+ HOST_PRIV in the character string BOOT_INFO. The constant
+ 'KERNEL_BOOT_INFO_MAX' should be used to dimension storage for the
+ returned string if the 'kernel_boot_info_t' declaration is not
+ used.
+
+ If the boot-time information string supplied by the operator is
+ longer than 'KERNEL_BOOT_INFO_MAX', the result is truncated and not
+ necessarily null-terminated.
+
+
+File: mach.info, Node: Host Time, Next: Host Reboot, Prev: Host
Information, Up: Host Interface
+
+8.3 Host Time
+=============
+
+ -- Data type: time_value_t
+ This is the representation of a time in Mach. It is a 'struct
+ time_value' and consists of the following members:
+
+ 'integer_t seconds'
+ The number of seconds.
+ 'integer_t microseconds'
+ The number of microseconds.
+
+ The number of microseconds should always be smaller than
+'TIME_MICROS_MAX' (100000). A time with this property is "normalized".
+Normalized time values can be manipulated with the following macros:
+
+ -- Macro: time_value_add_usec (time_value_t *VAL, integer_t *MICROS)
+ Add MICROS microseconds to VAL. If VAL is normalized and MICROS
+ smaller than 'TIME_MICROS_MAX', VAL will be normalized afterwards.
+
+ -- Macro: time_value_add (time_value_t *RESULT, time_value_t *ADDEND)
+ Add the values in ADDEND to RESULT. If both are normalized, RESULT
+ will be normalized afterwards.
+
+ A variable of type 'time_value_t' can either represent a duration or
+a fixed point in time. In the latter case, it shall be interpreted as
+the number of seconds and microseconds after the epoch 1. Jan 1970.
+
+ -- Function: kern_return_t host_get_time (host_t HOST,
+ time_value_t *CURRENT_TIME)
+ Get the current time as seen by HOST. On success, the time passed
+ since the epoch is returned in CURRENT_TIME.
+
+ -- Function: kern_return_t host_set_time (host_priv_t HOST_PRIV,
+ time_value_t NEW_TIME)
+ Set the time of HOST_PRIV to NEW_TIME.
+
+ -- Function: kern_return_t host_adjust_time (host_priv_t HOST_PRIV,
+ time_value_t NEW_ADJUSTMENT, time_value_t *OLD_ADJUSTMENT)
+ Arrange for the current time as seen by HOST_PRIV to be gradually
+ changed by the adjustment value NEW_ADJUSTMENT, and return the old
+ adjustment value in OLD_ADJUSTMENT.
+
+ For efficiency, the current time is available through a mapped-time
+interface.
+
+ -- Data type: mapped_time_value_t
+ This structure defines the mapped-time interface. It has the
+ following members:
+
+ 'integer_t seconds'
+ The number of seconds.
+
+ 'integer_t microseconds'
+ The number of microseconds.
+
+ 'integer_t check_seconds'
+ This is a copy of the seconds value, which must be checked to
+ protect against a race condition when reading out the two time
+ values.
+
+ Here is an example how to read out the current time using the
+mapped-time interface:
+
+ do
+ {
+ secs = mtime->seconds;
+ usecs = mtime->microseconds;
+ }
+ while (secs != mtime->check_seconds);
+
+
+File: mach.info, Node: Host Reboot, Prev: Host Time, Up: Host Interface
+
+8.4 Host Reboot
+===============
+
+ -- Function: kern_return_t host_reboot (host_priv_t HOST_PRIV,
+ int OPTIONS)
+ Reboot the host specified by HOST_PRIV. The argument OPTIONS
+ specifies the flags. The available flags are defined in
+ 'sys/reboot.h':
+
+ 'RB_HALT'
+ Do not reboot, but halt the machine.
+
+ 'RB_DEBUGGER'
+ Do not reboot, but enter kernel debugger from user space.
+
+ If successful, the function might not return.
+
+
+File: mach.info, Node: Processors and Processor Sets, Next: Device
Interface, Prev: Host Interface, Up: Top
+
+9 Processors and Processor Sets
+*******************************
+
+This section describes the Mach interface to processor sets and
+individual processors. The interface allows to group processors into
+sets and control the processors and processor sets.
+
+ A processor is not a central part of the interface. It is mostly of
+relevance as a part of a processor set. Threads are always assigned to
+processor sets, and all processors in a set are equally involved in
+executing all threads assigned to that set.
+
+ The processor set is represented by two ports, a name port
+PROCESSOR_SET_NAME used to query information about the host accessible
+to everyone, and a control port PROCESSOR_SET used to manipulate it.
+
+* Menu:
+
+* Processor Set Interface:: How to work with processor sets.
+* Processor Interface:: How to work with individual processors.
+
+
+File: mach.info, Node: Processor Set Interface, Next: Processor Interface,
Up: Processors and Processor Sets
+
+9.1 Processor Set Interface
+===========================
+
+* Menu:
+
+* Processor Set Ports:: Ports representing a processor set.
+* Processor Set Access:: How the processor sets are accessed.
+* Processor Set Creation:: How new processor sets are created.
+* Processor Set Destruction:: How processor sets are destroyed.
+* Tasks and Threads on Sets:: Assigning tasks, threads to processor sets.
+* Processor Set Priority:: Specifying the priority of a processor set.
+* Processor Set Policy:: Changing the processor set policies.
+* Processor Set Info:: Obtaining information about a processor set.
+
+
+File: mach.info, Node: Processor Set Ports, Next: Processor Set Access, Up:
Processor Set Interface
+
+9.1.1 Processor Set Ports
+-------------------------
+
+ -- Data type: processor_set_name_t
+ This is a 'mach_port_t' and used to hold the port name of a
+ processor set name port that names the processor set. Any task can
+ get a send right to name port of a processor set. The processor
+ set name port allows to get information about the processor set.
+
+ -- Data type: processor_set_t
+ This is a 'mach_port_t' and used to hold the port name of a
+ privileged processor set control port that represents the processor
+ set. Operations on the processor set are implemented as remote
+ procedure calls to the processor set port. The processor set port
+ allows to manipulate the processor set.
+
+
+File: mach.info, Node: Processor Set Access, Next: Processor Set Creation,
Prev: Processor Set Ports, Up: Processor Set Interface
+
+9.1.2 Processor Set Access
+--------------------------
+
+ -- Function: kern_return_t host_processor_sets (host_t HOST,
+ processor_set_name_array_t *PROCESSOR_SETS,
+ mach_msg_type_number_t *PROCESSOR_SETS_COUNT)
+ The function 'host_processor_sets' gets send rights to the name
+ port for each processor set currently assigned to HOST.
+
+ 'host_processor_set_priv' can be used to obtain the control ports
+ from these if desired. PROCESSOR_SETS is an array that is created
+ as a result of this call. The caller may wish to 'vm_deallocate'
+ this array when the data is no longer needed. PROCESSOR_SETS_COUNT
+ is set to the number of processor sets in the PROCESSOR_SETS.
+
+ This function returns 'KERN_SUCCESS' if the call succeeded and
+ 'KERN_INVALID_ARGUMENT' if HOST is not a host.
+
+ -- Function: kern_return_t host_processor_set_priv
+ (host_priv_t HOST_PRIV, processor_set_name_t SET_NAME,
+ processor_set_t *SET)
+ The function 'host_processor_set_priv' allows a privileged
+ application to obtain the control port SET for an existing
+ processor set from its name port SET_NAME. The privileged host
+ port HOST_PRIV is required.
+
+ This function returns 'KERN_SUCCESS' if the call succeeded and
+ 'KERN_INVALID_ARGUMENT' if HOST_PRIV is not a valid host control
+ port.
+
+ -- Function: kern_return_t processor_set_default (host_t HOST,
+ processor_set_name_t *DEFAULT_SET)
+ The function 'processor_set_default' returns the default processor
+ set of HOST in DEFAULT_SET. The default processor set is used by
+ all threads, tasks, and processors that are not explicitly assigned
+ to other sets. processor_set_default returns a port that can be
+ used to obtain information about this set (e.g. how many threads
+ are assigned to it). This port cannot be used to perform
+ operations on that set.
+
+ This function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_ARGUMENT' if HOST is not a host and
+ 'KERN_INVALID_ADDRESS' if DEFAULT_SET points to inaccessible
+ memory.
+
+
+File: mach.info, Node: Processor Set Creation, Next: Processor Set
Destruction, Prev: Processor Set Access, Up: Processor Set Interface
+
+9.1.3 Processor Set Creation
+----------------------------
+
+ -- Function: kern_return_t processor_set_create (host_t HOST,
+ processor_set_t *NEW_SET, processor_set_name_t *NEW_NAME)
+ The function 'processor_set_create' creates a new processor set on
+ HOST and returns the two ports associated with it. The port
+ returned in NEW_SET is the actual port representing the set. It is
+ used to perform operations such as assigning processors, tasks, or
+ threads. The port returned in NEW_NAME identifies the set, and is
+ used to obtain information about the set.
+
+ This function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_ARGUMENT' if HOST is not a host,
+ 'KERN_INVALID_ADDRESS' if NEW_SET or NEW_NAME points to
+ inaccessible memory and 'KERN_FAILURE' is the operating system does
+ not support processor allocation.
+
+
+File: mach.info, Node: Processor Set Destruction, Next: Tasks and Threads on
Sets, Prev: Processor Set Creation, Up: Processor Set Interface
+
+9.1.4 Processor Set Destruction
+-------------------------------
+
+ -- Function: kern_return_t processor_set_destroy
+ (processor_set_t PROCESSOR_SET)
+ The function 'processor_set_destroy' destroys the specified
+ processor set. Any assigned processors, tasks, or threads are
+ reassigned to the default set. The object port for the processor
+ set is required (not the name port). The default processor set
+ cannot be destroyed.
+
+ This function returns 'KERN_SUCCESS' if the set was destroyed,
+ 'KERN_FAILURE' if an attempt was made to destroy the default
+ processor set, or the operating system does not support processor
+ allocation, and 'KERN_INVALID_ARGUMENT' if PROCESSOR_SET is not a
+ valid processor set control port.
+
+
+File: mach.info, Node: Tasks and Threads on Sets, Next: Processor Set
Priority, Prev: Processor Set Destruction, Up: Processor Set Interface
+
+9.1.5 Tasks and Threads on Sets
+-------------------------------
+
+ -- Function: kern_return_t processor_set_tasks
+ (processor_set_t PROCESSOR_SET, task_array_t *TASK_LIST,
+ mach_msg_type_number_t *TASK_COUNT)
+ The function 'processor_set_tasks' gets send rights to the kernel
+ port for each task currently assigned to PROCESSOR_SET.
+
+ TASK_LIST is an array that is created as a result of this call.
+ The caller may wish to 'vm_deallocate' this array when the data is
+ no longer needed. TASK_COUNT is set to the number of tasks in the
+ TASK_LIST.
+
+ This function returns 'KERN_SUCCESS' if the call succeeded and
+ 'KERN_INVALID_ARGUMENT' if PROCESSOR_SET is not a processor set.
+
+ -- Function: kern_return_t processor_set_threads
+ (processor_set_t PROCESSOR_SET, thread_array_t *THREAD_LIST,
+ mach_msg_type_number_t *THREAD_COUNT)
+ The function 'processor_set_thread' gets send rights to the kernel
+ port for each thread currently assigned to PROCESSOR_SET.
+
+ THREAD_LIST is an array that is created as a result of this call.
+ The caller may wish to 'vm_deallocate' this array when the data is
+ no longer needed. THREAD_COUNT is set to the number of threads in
+ the THREAD_LIST.
+
+ This function returns 'KERN_SUCCESS' if the call succeeded and
+ 'KERN_INVALID_ARGUMENT' if PROCESSOR_SET is not a processor set.
+
+ -- Function: kern_return_t task_assign (task_t TASK,
+ processor_set_t PROCESSOR_SET, boolean_t ASSIGN_THREADS)
+ The function 'task_assign' assigns TASK the set PROCESSOR_SET.
+ This assignment is for the purposes of determining the initial
+ assignment of newly created threads in task. Any previous
+ assignment of the task is nullified. Existing threads within the
+ task are also reassigned if ASSIGN_THREADS is 'TRUE'. They are not
+ affected if it is 'FALSE'.
+
+ This function returns 'KERN_SUCCESS' if the assignment has been
+ performed and 'KERN_INVALID_ARGUMENT' if TASK is not a task, or
+ PROCESSOR_SET is not a processor set on the same host as TASK.
+
+ -- Function: kern_return_t task_assign_default (task_t TASK,
+ boolean_t ASSIGN_THREADS)
+ The function 'task_assign_default' is a variant of 'task_assign'
+ that assigns the task to the default processor set on that task's
+ host. This variant exists because the control port for the default
+ processor set is privileged and not usually available to users.
+
+ This function returns 'KERN_SUCCESS' if the assignment has been
+ performed and 'KERN_INVALID_ARGUMENT' if TASK is not a task.
+
+ -- Function: kern_return_t task_get_assignment (task_t TASK,
+ processor_set_name_t *ASSIGNED_SET)
+ The function 'task_get_assignment' returns the name of the
+ processor set to which the thread is currently assigned in
+ ASSIGNED_SET. This port can only be used to obtain information
+ about the processor set.
+
+ This function returns 'KERN_SUCCESS' if the assignment has been
+ performed, 'KERN_INVALID_ADDRESS' if PROCESSOR_SET points to
+ inaccessible memory, and 'KERN_INVALID_ARGUMENT' if TASK is not a
+ task.
+
+ -- Function: kern_return_t thread_assign (thread_t THREAD,
+ processor_set_t PROCESSOR_SET)
+ The function 'thread_assign' assigns THREAD the set PROCESSOR_SET.
+ After the assignment is completed, the thread only executes on
+ processors assigned to the designated processor set. If there are
+ no such processors, then the thread is unable to execute. Any
+ previous assignment of the thread is nullified. Unix system call
+ compatibility code may temporarily force threads to execute on the
+ master processor.
+
+ This function returns 'KERN_SUCCESS' if the assignment has been
+ performed and 'KERN_INVALID_ARGUMENT' if THREAD is not a thread, or
+ PROCESSOR_SET is not a processor set on the same host as THREAD.
+
+ -- Function: kern_return_t thread_assign_default (thread_t THREAD)
+ The function 'thread_assign_default' is a variant of
+ 'thread_assign' that assigns the thread to the default processor
+ set on that thread's host. This variant exists because the control
+ port for the default processor set is privileged and not usually
+ available to users.
+
+ This function returns 'KERN_SUCCESS' if the assignment has been
+ performed and 'KERN_INVALID_ARGUMENT' if THREAD is not a thread.
+
+ -- Function: kern_return_t thread_get_assignment (thread_t THREAD,
+ processor_set_name_t *ASSIGNED_SET)
+ The function 'thread_get_assignment' returns the name of the
+ processor set to which the thread is currently assigned in
+ ASSIGNED_SET. This port can only be used to obtain information
+ about the processor set.
+
+ This function returns 'KERN_SUCCESS' if the assignment has been
+ performed, 'KERN_INVALID_ADDRESS' if PROCESSOR_SET points to
+ inaccessible memory, and 'KERN_INVALID_ARGUMENT' if THREAD is not a
+ thread.
+
+
+File: mach.info, Node: Processor Set Priority, Next: Processor Set Policy,
Prev: Tasks and Threads on Sets, Up: Processor Set Interface
+
+9.1.6 Processor Set Priority
+----------------------------
+
+ -- Function: kern_return_t processor_set_max_priority
+ (processor_set_t PROCESSOR_SET, int MAX_PRIORITY,
+ boolean_t CHANGE_THREADS)
+ The function 'processor_set_max_priority' is used to set the
+ maximum priority for a processor set. The priority of a processor
+ set is used only for newly created threads (thread's maximum
+ priority is set to processor set's) and the assignment of threads
+ to the set (thread's maximum priority is reduced if it exceeds the
+ set's maximum priority, thread's priority is similarly reduced).
+ 'processor_set_max_priority' changes this priority. It also sets
+ the maximum priority of all threads assigned to the processor set
+ to this new priority if CHANGE_THREADS is 'TRUE'. If this maximum
+ priority is less than the priorities of any of these threads, their
+ priorities will also be set to this new value.
+
+ This function returns 'KERN_SUCCESS' if the call succeeded and
+ 'KERN_INVALID_ARGUMENT' if PROCESSOR_SET is not a processor set or
+ PRIORITY is not a valid priority.
+
+
+File: mach.info, Node: Processor Set Policy, Next: Processor Set Info,
Prev: Processor Set Priority, Up: Processor Set Interface
+
+9.1.7 Processor Set Policy
+--------------------------
+
+ -- Function: kern_return_t processor_set_policy_enable
+ (processor_set_t PROCESSOR_SET, int POLICY)
+ -- Function: kern_return_t processor_set_policy_disable
+ (processor_set_t PROCESSOR_SET, int POLICY,
+ boolean_t CHANGE_THREADS)
+ Processor sets may restrict the scheduling policies to be used for
+ threads assigned to them. These two calls provide the mechanism
+ for designating permitted and forbidden policies. The current set
+ of permitted policies can be obtained from 'processor_set_info'.
+ Timesharing may not be forbidden by any processor set. This is a
+ compromise to reduce the complexity of the assign operation; any
+ thread whose policy is forbidden by the target processor set has
+ its policy reset to timesharing. If the CHANGE_THREADS argument to
+ 'processor_set_policy_disable' is true, threads currently assigned
+ to this processor set and using the newly disabled policy will have
+ their policy reset to timesharing.
+
+ 'mach/policy.h' contains the allowed policies; it is included by
+ 'mach.h'. Not all policies (e.g. fixed priority) are supported by
+ all systems.
+
+ This function returns 'KERN_SUCCESS' if the operation was completed
+ successfully and 'KERN_INVALID_ARGUMENT' if PROCESSOR_SET is not a
+ processor set or POLICY is not a valid policy, or an attempt was
+ made to disable timesharing.
+
+
+File: mach.info, Node: Processor Set Info, Prev: Processor Set Policy, Up:
Processor Set Interface
+
+9.1.8 Processor Set Info
+------------------------
+
+ -- Function: kern_return_t processor_set_info
+ (processor_set_name_t SET_NAME, int FLAVOR, host_t *HOST,
+ processor_set_info_t PROCESSOR_SET_INFO,
+ mach_msg_type_number_t *PROCESSOR_SET_INFO_COUNT)
+ The function 'processor_set_info' returns the selected information
+ array for a processor set, as specified by FLAVOR.
+
+ HOST is set to the host on which the processor set resides. This
+ is the non-privileged host port.
+
+ PROCESSOR_SET_INFO is an array of integers that is supplied by the
+ caller and returned filled with specified information.
+ PROCESSOR_SET_INFO_COUNT is supplied as the maximum number of
+ integers in PROCESSOR_SET_INFO. On return, it contains the actual
+ number of integers in PROCESSOR_SET_INFO. The maximum number of
+ integers returned by any flavor is 'PROCESSOR_SET_INFO_MAX'.
+
+ The type of information returned is defined by FLAVOR, which can be
+ one of the following:
+
+ 'PROCESSOR_SET_BASIC_INFO'
+ The function returns basic information about the processor
+ set, as defined by 'processor_set_basic_info_t'. This
+ includes the number of tasks and threads assigned to the
+ processor set. The number of integers returned is
+ 'PROCESSOR_SET_BASIC_INFO_COUNT'.
+
+ 'PROCESSOR_SET_SCHED_INFO'
+ The function returns information about the scheduling policy
+ for the processor set as defined by
+ 'processor_set_sched_info_t'. The number of integers returned
+ is 'PROCESSOR_SET_SCHED_INFO_COUNT'.
+
+ Some machines may define additional (machine-dependent) flavors.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded and
+ 'KERN_INVALID_ARGUMENT' if PROCESSOR_SET is not a processor set or
+ FLAVOR is not recognized. The function returns
+ 'MIG_ARRAY_TOO_LARGE' if the returned info array is too large for
+ PROCESSOR_SET_INFO. In this case, PROCESSOR_SET_INFO is filled as
+ much as possible and PROCESSOR_SET_INFO_COUNT is set to the number
+ of elements that would have been returned if there were enough
+ room.
+
+ -- Data type: struct processor_set_basic_info
+ This structure is returned in PROCESSOR_SET_INFO by the
+ 'processor_set_info' function and provides basic information about
+ the processor set. You can cast a variable of type
+ 'processor_set_info_t' to a pointer of this type if you provided it
+ as the PROCESSOR_SET_INFO parameter for the
+ 'PROCESSOR_SET_BASIC_INFO' flavor of 'processor_set_info'. It has
+ the following members:
+
+ 'int processor_count'
+ number of processors
+
+ 'int task_count'
+ number of tasks
+
+ 'int thread_count'
+ number of threads
+
+ 'int load_average'
+ scaled load average
+
+ 'int mach_factor'
+ scaled mach factor
+
+ -- Data type: processor_set_basic_info_t
+ This is a pointer to a 'struct processor_set_basic_info'.
+
+ -- Data type: struct processor_set_sched_info
+ This structure is returned in PROCESSOR_SET_INFO by the
+ 'processor_set_info' function and provides schedule information
+ about the processor set. You can cast a variable of type
+ 'processor_set_info_t' to a pointer of this type if you provided it
+ as the PROCESSOR_SET_INFO parameter for the
+ 'PROCESSOR_SET_SCHED_INFO' flavor of 'processor_set_info'. It has
+ the following members:
+
+ 'int policies'
+ allowed policies
+
+ 'int max_priority'
+ max priority for new threads
+
+ -- Data type: processor_set_sched_info_t
+ This is a pointer to a 'struct processor_set_sched_info'.
+
+
+File: mach.info, Node: Processor Interface, Prev: Processor Set Interface,
Up: Processors and Processor Sets
+
+9.2 Processor Interface
+=======================
+
+ -- Data type: processor_t
+ This is a 'mach_port_t' and used to hold the port name of a
+ processor port that represents the processor. Operations on the
+ processor are implemented as remote procedure calls to the
+ processor port.
+
+* Menu:
+
+* Hosted Processors:: Getting a list of all processors on a host.
+* Processor Control:: Starting, stopping, controlling processors.
+* Processors and Sets:: Combining processors into processor sets.
+* Processor Info:: Obtaining information on processors.
+
+
+File: mach.info, Node: Hosted Processors, Next: Processor Control, Up:
Processor Interface
+
+9.2.1 Hosted Processors
+-----------------------
+
+ -- Function: kern_return_t host_processors (host_priv_t HOST_PRIV,
+ processor_array_t *PROCESSOR_LIST,
+ mach_msg_type_number_t *PROCESSOR_COUNT)
+ The function 'host_processors' gets send rights to the processor
+ port for each processor existing on HOST_PRIV. This is the
+ privileged port that allows its holder to control a processor.
+
+ PROCESSOR_LIST is an array that is created as a result of this
+ call. The caller may wish to 'vm_deallocate' this array when the
+ data is no longer needed. PROCESSOR_COUNT is set to the number of
+ processors in the PROCESSOR_LIST.
+
+ This function returns 'KERN_SUCCESS' if the call succeeded,
+ 'KERN_INVALID_ARGUMENT' if HOST_PRIV is not a privileged host port,
+ and 'KERN_INVALID_ADDRESS' if PROCESSOR_COUNT points to
+ inaccessible memory.
+
+
+File: mach.info, Node: Processor Control, Next: Processors and Sets, Prev:
Hosted Processors, Up: Processor Interface
+
+9.2.2 Processor Control
+-----------------------
+
+ -- Function: kern_return_t processor_start (processor_t PROCESSOR)
+ -- Function: kern_return_t processor_exit (processor_t PROCESSOR)
+ -- Function: kern_return_t processor_control (processor_t PROCESSOR,
+ processor_info_t *CMD, mach_msg_type_number_t COUNT)
+ Some multiprocessors may allow privileged software to control
+ processors. The 'processor_start', 'processor_exit', and
+ 'processor_control' operations implement this. The interpretation
+ of the command in CMD is machine dependent. A newly started
+ processor is assigned to the default processor set. An exited
+ processor is removed from the processor set to which it was
+ assigned and ceases to be active.
+
+ COUNT contains the length of the command CMD as a number of ints.
+
+ Availability limited. All of these operations are
+ machine-dependent. They may do nothing. The ability to restart an
+ exited processor is also machine-dependent.
+
+ This function returns 'KERN_SUCCESS' if the operation was
+ performed, 'KERN_FAILURE' if the operation was not performed (a
+ likely reason is that it is not supported on this processor),
+ 'KERN_INVALID_ARGUMENT' if PROCESSOR is not a processor, and
+ 'KERN_INVALID_ADDRESS' if CMD points to inaccessible memory.
+
+
+File: mach.info, Node: Processors and Sets, Next: Processor Info, Prev:
Processor Control, Up: Processor Interface
+
+9.2.3 Processors and Sets
+-------------------------
+
+ -- Function: kern_return_t processor_assign (processor_t PROCESSOR,
+ processor_set_t PROCESSOR_SET, boolean_t WAIT)
+ The function 'processor_assign' assigns PROCESSOR to the set
+ PROCESSOR_SET. After the assignment is completed, the processor
+ only executes threads that are assigned to that processor set. Any
+ previous assignment of the processor is nullified. The master
+ processor cannot be reassigned. All processors take clock
+ interrupts at all times. The WAIT argument indicates whether the
+ caller should wait for the assignment to be completed or should
+ return immediately. Dedicated kernel threads are used to perform
+ processor assignment, so setting wait to 'FALSE' allows assignment
+ requests to be queued and performed faster, especially if the
+ kernel has more than one dedicated internal thread for processor
+ assignment. Redirection of other device interrupts away from
+ processors assigned to other than the default processor set is
+ machine-dependent. Intermediaries that interpose on ports must be
+ sure to interpose on both ports involved in this call if they
+ interpose on either.
+
+ This function returns 'KERN_SUCCESS' if the assignment has been
+ performed, 'KERN_INVALID_ARGUMENT' if PROCESSOR is not a processor,
+ or PROCESSOR_SET is not a processor set on the same host as
+ PROCESSOR.
+
+ -- Function: kern_return_t processor_get_assignment
+ (processor_t PROCESSOR, processor_set_name_t *ASSIGNED_SET)
+ The function 'processor_get_assignment' obtains the current
+ assignment of a processor. The name port of the processor set is
+ returned in ASSIGNED_SET.
+
+
+File: mach.info, Node: Processor Info, Prev: Processors and Sets, Up:
Processor Interface
+
+9.2.4 Processor Info
+--------------------
+
+ -- Function: kern_return_t processor_info (processor_t PROCESSOR,
+ int FLAVOR, host_t *HOST, processor_info_t PROCESSOR_INFO,
+ mach_msg_type_number_t *PROCESSOR_INFO_COUNT)
+ The function 'processor_info' returns the selected information
+ array for a processor, as specified by FLAVOR.
+
+ HOST is set to the host on which the processor set resides. This
+ is the non-privileged host port.
+
+ PROCESSOR_INFO is an array of integers that is supplied by the
+ caller and returned filled with specified information.
+ PROCESSOR_INFO_COUNT is supplied as the maximum number of integers
+ in PROCESSOR_INFO. On return, it contains the actual number of
+ integers in PROCESSOR_INFO. The maximum number of integers
+ returned by any flavor is 'PROCESSOR_INFO_MAX'.
+
+ The type of information returned is defined by FLAVOR, which can be
+ one of the following:
+
+ 'PROCESSOR_BASIC_INFO'
+ The function returns basic information about the processor, as
+ defined by 'processor_basic_info_t'. This includes the slot
+ number of the processor. The number of integers returned is
+ 'PROCESSOR_BASIC_INFO_COUNT'.
+
+ Machines which require more configuration information beyond the
+ slot number are expected to define additional (machine-dependent)
+ flavors.
+
+ The function returns 'KERN_SUCCESS' if the call succeeded and
+ 'KERN_INVALID_ARGUMENT' if PROCESSOR is not a processor or FLAVOR
+ is not recognized. The function returns 'MIG_ARRAY_TOO_LARGE' if
+ the returned info array is too large for PROCESSOR_INFO. In this
+ case, PROCESSOR_INFO is filled as much as possible and
+ PROCESSOR_INFOCNT is set to the number of elements that would have
+ been returned if there were enough room.
+
+ -- Data type: struct processor_basic_info
+ This structure is returned in PROCESSOR_INFO by the
+ 'processor_info' function and provides basic information about the
+ processor. You can cast a variable of type 'processor_info_t' to a
+ pointer of this type if you provided it as the PROCESSOR_INFO
+ parameter for the 'PROCESSOR_BASIC_INFO' flavor of
+ 'processor_info'. It has the following members:
+
+ 'cpu_type_t cpu_type'
+ cpu type
+
+ 'cpu_subtype_t cpu_subtype'
+ cpu subtype
+
+ 'boolean_t running'
+ is processor running?
+
+ 'int slot_num'
+ slot number
+
+ 'boolean_t is_master'
+ is this the master processor
+
+ -- Data type: processor_basic_info_t
+ This is a pointer to a 'struct processor_basic_info'.
+
+
+File: mach.info, Node: Device Interface, Next: Kernel Debugger, Prev:
Processors and Processor Sets, Up: Top
+
+10 Device Interface
+*******************
+
+The GNU Mach microkernel provides a simple device interface that allows
+the user space programs to access the underlying hardware devices. Each
+device has a unique name, which is a string up to 127 characters long.
+To open a device, the device master port has to be supplied. The device
+master port is only available through the bootstrap port. Anyone who
+has control over the device master port can use all hardware devices.
+
+ -- Data type: device_t
+ This is a 'mach_port_t' and used to hold the port name of a device
+ port that represents the device. Operations on the device are
+ implemented as remote procedure calls to the device port. Each
+ device provides a sequence of records. The length of a record is
+ specific to the device. Data can be transferred "out-of-line" or
+ "in-line" (*note Memory::).
+
+ All constants and functions in this chapter are defined in
+'device/device.h'.
+
+* Menu:
+
+* Device Reply Server:: Handling device reply messages.
+* Device Open:: Opening hardware devices.
+* Device Close:: Closing hardware devices.
+* Device Read:: Reading data from the device.
+* Device Write:: Writing data to the device.
+* Device Map:: Mapping devices into virtual memory.
+* Device Status:: Querying and manipulating a device.
+* Device Filter:: Filtering packets arriving on a device.
+
+
+File: mach.info, Node: Device Reply Server, Next: Device Open, Up: Device
Interface
+
+10.1 Device Reply Server
+========================
+
+Beside the usual synchronous interface, an asynchronous interface is
+provided. For this, the caller has to receive and handle the reply
+messages separately from the function call.
+
+ -- Function: boolean_t device_reply_server (msg_header_t *IN_MSG,
+ msg_header_t *OUT_MSG)
+ The function 'device_reply_server' is produced by the remote
+ procedure call generator to handle a received message. This
+ function does all necessary argument handling, and actually calls
+ one of the following functions: 'ds_device_open_reply',
+ 'ds_device_read_reply', 'ds_device_read_reply_inband',
+ 'ds_device_write_reply' and 'ds_device_write_reply_inband'.
+
+ The IN_MSG argument is the message that has been received from the
+ kernel. The OUT_MSG is a reply message, but this is not used for
+ this server.
+
+ The function returns 'TRUE' to indicate that the message in
+ question was applicable to this interface, and that the appropriate
+ routine was called to interpret the message. It returns 'FALSE' to
+ indicate that the message did not apply to this interface, and that
+ no other action was taken.
+
+
+File: mach.info, Node: Device Open, Next: Device Close, Prev: Device Reply
Server, Up: Device Interface
+
+10.2 Device Open
+================
+
+ -- Function: kern_return_t device_open (mach_port_t MASTER_PORT,
+ dev_mode_t MODE, dev_name_t NAME, device_t *DEVICE)
+ The function 'device_open' opens the device NAME and returns a port
+ to it in DEVICE. The open count for the device is incremented by
+ one. If the open count was 0, the open handler for the device is
+ invoked.
+
+ MASTER_PORT must hold the master device port. NAME specifies the
+ device to open, and is a string up to 128 characters long. MODE is
+ the open mode. It is a bitwise-or of the following constants:
+
+ 'D_READ'
+ Request read access for the device.
+
+ 'D_WRITE'
+ Request write access for the device.
+
+ 'D_NODELAY'
+ Do not delay an open.
+
+ The function returns 'D_SUCCESS' if the device was successfully
+ opened, 'D_INVALID_OPERATION' if MASTER_PORT is not the master
+ device port, 'D_WOULD_BLOCK' is the device is busy and 'D_NOWAIT'
+ was specified in mode, 'D_ALREADY_OPEN' if the device is already
+ open in an incompatible mode and 'D_NO_SUCH_DEVICE' if NAME does
+ not denote a know device.
+
+ -- Function: kern_return_t device_open_request
+ (mach_port_t MASTER_PORT, mach_port_t REPLY_PORT,
+ dev_mode_t MODE, dev_name_t NAME)
+ -- Function: kern_return_t ds_device_open_reply
+ (mach_port_t REPLY_PORT, kern_return_t RETURN,
+ device_t *DEVICE)
+ This is the asynchronous form of the 'device_open' function.
+ 'device_open_request' performs the open request. The meaning for
+ the parameters is as in 'device_open'. Additionally, the caller
+ has to supply a reply port to which the 'ds_device_open_reply'
+ message is sent by the kernel when the open has been performed.
+ The return value of the open operation is stored in RETURN_CODE.
+
+ As neither function receives a reply message, only message
+ transmission errors apply. If no error occurs, 'KERN_SUCCESS' is
+ returned.
+
+
+File: mach.info, Node: Device Close, Next: Device Read, Prev: Device Open,
Up: Device Interface
+
+10.3 Device Close
+=================
+
+ -- Function: kern_return_t device_close (device_t DEVICE)
+ The function 'device_close' decrements the open count of the device
+ by one. If the open count drops to zero, the close handler for the
+ device is called. The device to close is specified by its port
+ DEVICE.
+
+ The function returns 'D_SUCCESS' if the device was successfully
+ closed and 'D_NO_SUCH_DEVICE' if DEVICE does not denote a device
+ port.
+
+
+File: mach.info, Node: Device Read, Next: Device Write, Prev: Device Close,
Up: Device Interface
+
+10.4 Device Read
+================
+
+ -- Function: kern_return_t device_read (device_t DEVICE,
+ dev_mode_t MODE, recnum_t RECNUM, int BYTES_WANTED,
+ io_buf_ptr_t *DATA, mach_msg_type_number_t *DATA_COUNT)
+ The function 'device_read' reads BYTES_WANTED bytes from DEVICE,
+ and stores them in a buffer allocated with 'vm_allocate', which
+ address is returned in DATA. The caller must deallocated it if it
+ is no longer needed. The number of bytes actually returned is
+ stored in DATA_COUNT.
+
+ If MODE is 'D_NOWAIT', the operation does not block. Otherwise
+ MODE should be 0. RECNUM is the record number to be read, its
+ meaning is device specific.
+
+ The function returns 'D_SUCCESS' if some data was successfully
+ read, 'D_WOULD_BLOCK' if no data is currently available and
+ 'D_NOWAIT' is specified, and 'D_NO_SUCH_DEVICE' if DEVICE does not
+ denote a device port.
+
+ -- Function: kern_return_t device_read_inband (device_t DEVICE,
+ dev_mode_t MODE, recnum_t RECNUM, int BYTES_WANTED,
+ io_buf_ptr_inband_t *DATA, mach_msg_type_number_t *DATA_COUNT)
+ The 'device_read_inband' function works as the 'device_read'
+ function, except that the data is returned "in-line" in the reply
+ IPC message (*note Memory::).
+
+ -- Function: kern_return_t device_read_request (device_t DEVICE,
+ mach_port_t REPLY_PORT, dev_mode_t MODE, recnum_t RECNUM,
+ int BYTES_WANTED)
+ -- Function: kern_return_t ds_device_read_reply
+ (mach_port_t REPLY_PORT, kern_return_t RETURN_CODE,
+ io_buf_ptr_t DATA, mach_msg_type_number_t DATA_COUNT)
+ This is the asynchronous form of the 'device_read' function.
+ 'device_read_request' performs the read request. The meaning for
+ the parameters is as in 'device_read'. Additionally, the caller
+ has to supply a reply port to which the 'ds_device_read_reply'
+ message is sent by the kernel when the read has been performed.
+ The return value of the read operation is stored in RETURN_CODE.
+
+ As neither function receives a reply message, only message
+ transmission errors apply. If no error occurs, 'KERN_SUCCESS' is
+ returned.
+
+ -- Function: kern_return_t device_read_request_inband (device_t DEVICE,
+ mach_port_t REPLY_PORT, dev_mode_t MODE, recnum_t RECNUM,
+ int BYTES_WANTED)
+ -- Function: kern_return_t ds_device_read_reply_inband
+ (mach_port_t REPLY_PORT, kern_return_t RETURN_CODE,
+ io_buf_ptr_t DATA, mach_msg_type_number_t DATA_COUNT)
+ The 'device_read_request_inband' and 'ds_device_read_reply_inband'
+ functions work as the 'device_read_request' and
+ 'ds_device_read_reply' functions, except that the data is returned
+ "in-line" in the reply IPC message (*note Memory::).
+
+
+File: mach.info, Node: Device Write, Next: Device Map, Prev: Device Read,
Up: Device Interface
+
+10.5 Device Write
+=================
+
+ -- Function: kern_return_t device_write (device_t DEVICE,
+ dev_mode_t MODE, recnum_t RECNUM, io_buf_ptr_t DATA,
+ mach_msg_type_number_t DATA_COUNT, int *BYTES_WRITTEN)
+ The function 'device_write' writes DATA_COUNT bytes from the buffer
+ DATA to DEVICE. The number of bytes actually written is returned
+ in BYTES_WRITTEN.
+
+ If MODE is 'D_NOWAIT', the function returns without waiting for I/O
+ completion. Otherwise MODE should be 0. RECNUM is the record
+ number to be written, its meaning is device specific.
+
+ The function returns 'D_SUCCESS' if some data was successfully
+ written and 'D_NO_SUCH_DEVICE' if DEVICE does not denote a device
+ port or the device is dead or not completely open.
+
+ -- Function: kern_return_t device_write_inband (device_t DEVICE,
+ dev_mode_t MODE, recnum_t RECNUM, int BYTES_WANTED,
+ io_buf_ptr_inband_t *DATA, mach_msg_type_number_t *DATA_COUNT)
+ The 'device_write_inband' function works as the 'device_write'
+ function, except that the data is sent "in-line" in the request IPC
+ message (*note Memory::).
+
+ -- Function: kern_return_t device_write_request (device_t DEVICE,
+ mach_port_t REPLY_PORT, dev_mode_t MODE, recnum_t RECNUM,
+ io_buf_ptr_t DATA, mach_msg_type_number_t DATA_COUNT)
+ -- Function: kern_return_t ds_device_write_reply
+ (mach_port_t REPLY_PORT, kern_return_t RETURN_CODE,
+ int BYTES_WRITTEN)
+ This is the asynchronous form of the 'device_write' function.
+ 'device_write_request' performs the write request. The meaning for
+ the parameters is as in 'device_write'. Additionally, the caller
+ has to supply a reply port to which the 'ds_device_write_reply'
+ message is sent by the kernel when the write has been performed.
+ The return value of the write operation is stored in RETURN_CODE.
+
+ As neither function receives a reply message, only message
+ transmission errors apply. If no error occurs, 'KERN_SUCCESS' is
+ returned.
+
+ -- Function: kern_return_t device_write_request_inband
+ (device_t DEVICE, mach_port_t REPLY_PORT, dev_mode_t MODE,
+ recnum_t RECNUM, io_buf_ptr_t DATA,
+ mach_msg_type_number_t DATA_COUNT)
+ -- Function: kern_return_t ds_device_write_reply_inband
+ (mach_port_t REPLY_PORT, kern_return_t RETURN_CODE,
+ int BYTES_WRITTEN)
+ The 'device_write_request_inband' and
+ 'ds_device_write_reply_inband' functions work as the
+ 'device_write_request' and 'ds_device_write_reply' functions,
+ except that the data is sent "in-line" in the request IPC message
+ (*note Memory::).
+
+
+File: mach.info, Node: Device Map, Next: Device Status, Prev: Device Write,
Up: Device Interface
+
+10.6 Device Map
+===============
+
+ -- Function: kern_return_t device_map (device_t DEVICE, vm_prot_t PROT,
+ vm_offset_t OFFSET, vm_size_t SIZE, mach_port_t *PAGER,
+ int UNMAP)
+ The function 'device_map' creates a new memory manager for DEVICE
+ and returns a port to it in PAGER. The memory manager is usable as
+ a memory object in a 'vm_map' call. The call is device dependent.
+
+ The protection for the memory object is specified by PROT. The
+ memory object starts at OFFSET within the device and extends SIZE
+ bytes. UNMAP is currently unused.
+
+ The function returns 'D_SUCCESS' if some data was successfully
+ written and 'D_NO_SUCH_DEVICE' if DEVICE does not denote a device
+ port or the device is dead or not completely open.
+
+
+File: mach.info, Node: Device Status, Next: Device Filter, Prev: Device
Map, Up: Device Interface
+
+10.7 Device Status
+==================
+
+ -- Function: kern_return_t device_set_status (device_t DEVICE,
+ dev_flavor_t FLAVOR, dev_status_t STATUS,
+ mach_msg_type_number_t STATUS_COUNT)
+ The function 'device_set_status' sets the status of a device. The
+ possible values for FLAVOR and their interpretation is device
+ specific.
+
+ The function returns 'D_SUCCESS' if some data was successfully
+ written and 'D_NO_SUCH_DEVICE' if DEVICE does not denote a device
+ port or the device is dead or not completely open.
+
+ -- Function: kern_return_t device_get_status (device_t DEVICE,
+ dev_flavor_t FLAVOR, dev_status_t STATUS,
+ mach_msg_type_number_t *STATUS_COUNT)
+ The function 'device_get_status' gets the status of a device. The
+ possible values for FLAVOR and their interpretation is device
+ specific.
+
+ The function returns 'D_SUCCESS' if some data was successfully
+ written and 'D_NO_SUCH_DEVICE' if DEVICE does not denote a device
+ port or the device is dead or not completely open.
+
+
+File: mach.info, Node: Device Filter, Prev: Device Status, Up: Device
Interface
+
+10.8 Device Filter
+==================
+
+ -- Function: kern_return_t device_set_filter (device_t DEVICE,
+ mach_port_t RECEIVE_PORT,
+ mach_msg_type_name_t RECEIVE_PORT_TYPE, int PRIORITY,
+ filter_array_t FILTER, mach_msg_type_number_t FILTER_COUNT)
+ The function 'device_set_filter' makes it possible to filter out
+ selected data arriving at or leaving the device and forward it to a
+ port. FILTER is a list of filter commands, which are applied to
+ incoming data to determine if the data should be sent to
+ RECEIVE_PORT. The IPC type of the send right is specified by
+ RECEIVE_PORT_RIGHT, it is either 'MACH_MSG_TYPE_MAKE_SEND' or
+ 'MACH_MSG_TYPE_MOVE_SEND'. The PRIORITY value is used to order
+ multiple filters.
+
+ There can be up to 'NET_MAX_FILTER' commands in FILTER. The actual
+ number of commands is passed in FILTER_COUNT. For the purpose of
+ the filter test, an internal stack is provided. After all commands
+ have been processed, the value on the top of the stack determines
+ if the data is forwarded or the next filter is tried.
+
+ The first command is a header which contains two fields: one for
+ flags and the other for the type of interpreter used to run the
+ rest of the commands.
+
+ Any combination of the following flags is allowed but at least one
+ of them must be specified.
+
+ 'NETF_IN'
+ The filter will be applied to data received by the device.
+
+ 'NETF_OUT'
+ The filter will be applied to data transmitted by the device.
+
+ Unless the type is given explicitly the native NETF interpreter
+ will be used. To select an alternative implementation use one of
+ the following types:
+
+ 'NETF_BPF'
+ Use Berkeley Packet Filter.
+
+ For the listener to know what kind of packet is being received,
+ when the filter code accepts a packet the message sent to
+ RECEIVE_PORT is tagged with either NETF_IN or NETF_OUT.
+
+ Each word of the command list specifies a data (push) operation
+ (high order NETF_NBPO bits) as well as a binary operator (low order
+ NETF_NBPA bits). The value to be pushed onto the stack is chosen
+ as follows.
+
+ 'NETF_PUSHLIT'
+ Use the next short word of the filter as the value.
+
+ 'NETF_PUSHZERO'
+ Use 0 as the value.
+
+ 'NETF_PUSHWORD+N'
+ Use short word N of the "data" portion of the message as the
+ value.
+
+ 'NETF_PUSHHDR+N'
+ Use short word N of the "header" portion of the message as the
+ value.
+
+ 'NETF_PUSHIND+N'
+ Pops the top long word from the stack and then uses short word
+ N of the "data" portion of the message as the value.
+
+ 'NETF_PUSHHDRIND+N'
+ Pops the top long word from the stack and then uses short word
+ N of the "header" portion of the message as the value.
+
+ 'NETF_PUSHSTK+N'
+ Use long word N of the stack (where the top of stack is long
+ word 0) as the value.
+
+ 'NETF_NOPUSH'
+ Don't push a value.
+
+ The unsigned value so chosen is promoted to a long word before
+ being pushed. Once a value is pushed (except for the case of
+ 'NETF_NOPUSH'), the top two long words of the stack are popped and
+ a binary operator applied to them (with the old top of stack as the
+ second operand). The result of the operator is pushed on the
+ stack. These operators are:
+
+ 'NETF_NOP'
+ Don't pop off any values and do no operation.
+
+ 'NETF_EQ'
+ Perform an equal comparison.
+
+ 'NETF_LT'
+ Perform a less than comparison.
+
+ 'NETF_LE'
+ Perform a less than or equal comparison.
+
+ 'NETF_GT'
+ Perform a greater than comparison.
+
+ 'NETF_GE'
+ Perform a greater than or equal comparison.
+
+ 'NETF_AND'
+ Perform a bitise boolean AND operation.
+
+ 'NETF_OR'
+ Perform a bitise boolean inclusive OR operation.
+
+ 'NETF_XOR'
+ Perform a bitise boolean exclusive OR operation.
+
+ 'NETF_NEQ'
+ Perform a not equal comparison.
+
+ 'NETF_LSH'
+ Perform a left shift operation.
+
+ 'NETF_RSH'
+ Perform a right shift operation.
+
+ 'NETF_ADD'
+ Perform an addition.
+
+ 'NETF_SUB'
+ Perform a subtraction.
+
+ 'NETF_COR'
+ Perform an equal comparison. If the comparison is 'TRUE',
+ terminate the filter list. Otherwise, pop the result of the
+ comparison off the stack.
+
+ 'NETF_CAND'
+ Perform an equal comparison. If the comparison is 'FALSE',
+ terminate the filter list. Otherwise, pop the result of the
+ comparison off the stack.
+
+ 'NETF_CNOR'
+ Perform a not equal comparison. If the comparison is 'FALSE',
+ terminate the filter list. Otherwise, pop the result of the
+ comparison off the stack.
+
+ 'NETF_CNAND'
+ Perform a not equal comparison. If the comparison is 'TRUE',
+ terminate the filter list. Otherwise, pop the result of the
+ comparison off the stack. The scan of the filter list
+ terminates when the filter list is emptied, or a 'NETF_C...'
+ operation terminates the list. At this time, if the final
+ value of the top of the stack is 'TRUE', then the message is
+ accepted for the filter.
+
+ The function returns 'D_SUCCESS' if some data was successfully
+ written, 'D_INVALID_OPERATION' if RECEIVE_PORT is not a valid send
+ right, and 'D_NO_SUCH_DEVICE' if DEVICE does not denote a device
+ port or the device is dead or not completely open.
+
+
+File: mach.info, Node: Kernel Debugger, Next: Copying, Prev: Device
Interface, Up: Top
+
+11 Kernel Debugger
+******************
+
+The GNU Mach kernel debugger 'ddb' is a powerful built-in debugger with
+a gdb like syntax. It is enabled at compile time using the
+'--enable-kdb' option. Whenever you want to enter the debugger while
+running the kernel, you can press the key combination <Ctrl-Alt-D>.
+
+* Menu:
+
+* Operation:: Basic architecture of the kernel debugger.
+* Commands:: Available commands in the kernel debugger.
+* Variables:: Access of variables from the kernel debugger.
+* Expressions:: Usage of expressions in the kernel debugger.
+
+
+File: mach.info, Node: Operation, Next: Commands, Up: Kernel Debugger
+
+11.1 Operation
+==============
+
+The current location is called "dot". The dot is displayed with a
+hexadecimal format at a prompt. Examine and write commands update dot
+to the address of the last line examined or the last location modified,
+and set "next" to the address of the next location to be examined or
+changed. Other commands don't change dot, and set next to be the same
+as dot.
+
+ The general command syntax is:
+
+ COMMAND[/MODIFIER] ADDRESS [,COUNT]
+
+ '!!' repeats the previous command, and a blank line repeats from the
+address next with count 1 and no modifiers. Specifying ADDRESS sets dot
+to the address. Omitting ADDRESS uses dot. A missing COUNT is taken to
+be 1 for printing commands or infinity for stack traces.
+
+ Current 'ddb' is enhanced to support multi-thread debugging. A break
+point can be set only for a specific thread, and the address space or
+registers of non current thread can be examined or modified if supported
+by machine dependent routines. For example,
+
+ break/t mach_msg_trap $task11.0
+
+ sets a break point at 'mach_msg_trap' for the first thread of task 11
+listed by a 'show all threads' command.
+
+ In the above example, '$task11.0' is translated to the corresponding
+thread structure's address by variable translation mechanism described
+later. If a default target thread is set in a variable '$thread', the
+'$task11.0' can be omitted. In general, if 't' is specified in a
+modifier of a command line, a specified thread or a default target
+thread is used as a target thread instead of the current one. The 't'
+modifier in a command line is not valid in evaluating expressions in a
+command line. If you want to get a value indirectly from a specific
+thread's address space or access to its registers within an expression,
+you have to specify a default target thread in advance, and to use ':t'
+modifier immediately after the indirect access or the register reference
+like as follows:
+
+ set $thread $task11.0
+ print $eax:t *(0x100):tuh
+
+ No sign extension and indirection 'size(long, half word, byte)' can
+be specified with 'u', 'l', 'h' and 'b' respectively for the indirect
+access.
+
+ Note: Support of non current space/register access and user space
+break point depend on the machines. If not supported, attempts of such
+operation may provide incorrect information or may cause strange
+behavior. Even if supported, the user space access is limited to the
+pages resident in the main memory at that time. If a target page is not
+in the main memory, an error will be reported.
+
+ 'ddb' has a feature like a command 'more' for the output. If an
+output line exceeds the number set in the '$lines' variable, it displays
+'--db_more--' and waits for a response. The valid responses for it are:
+
+'<SPC>'
+ one more page
+
+'<RET>'
+ one more line
+
+'q'
+ abort the current command, and return to the command input mode
+
diff --git a/doc/mach.info-2 b/doc/mach.info-2
new file mode 100644
index 0000000..2ca87f1
--- /dev/null
+++ b/doc/mach.info-2
@@ -0,0 +1,1700 @@
+This is mach.info, produced by makeinfo version 5.1 from mach.texi.
+
+This file documents the GNU Mach microkernel.
+
+ This is edition 0.4, last updated on 27 September 2013, of 'The GNU
+Mach Reference Manual', for version 1.4.
+
+ Copyright (C) 2001, 2002, 2006, 2007, 2008 Free Software Foundation,
+Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.2 or any later version published by the Free Software
+ Foundation; with no Invariant Section, with no Front-Cover Texts,
+ and with no Back-Cover Texts. A copy of the license is included in
+ the section entitled "GNU Free Documentation License".
+
+ This work is based on manual pages under the following copyright
+ and license:
+
+ Mach Operating System
+ Copyright (C) 1991,1990 Carnegie Mellon University
+ All Rights Reserved.
+
+ Permission to use, copy, modify and distribute this software and
+ its documentation is hereby granted, provided that both the
+ copyright notice and this permission notice appear in all copies of
+ the software, derivative works or modified versions, and any
+ portions thereof, and that both notices appear in supporting
+ documentation.
+
+ CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+ CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
+ ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+INFO-DIR-SECTION Kernel
+START-INFO-DIR-ENTRY
+* GNUMach: (mach). Using and programming the GNU Mach microkernel.
+END-INFO-DIR-ENTRY
+
+
+File: mach.info, Node: Commands, Next: Variables, Prev: Operation, Up:
Kernel Debugger
+
+11.2 Commands
+=============
+
+'examine(x) [/MODIFIER] ADDR[,COUNT] [ THREAD ]'
+ Display the addressed locations according to the formats in the
+ modifier. Multiple modifier formats display multiple locations.
+ If no format is specified, the last formats specified for this
+ command is used. Address space other than that of the current
+ thread can be specified with 't' option in the modifier and THREAD
+ parameter. The format characters are
+
+ 'b'
+ look at by bytes(8 bits)
+
+ 'h'
+ look at by half words(16 bits)
+
+ 'l'
+ look at by long words(32 bits)
+
+ 'a'
+ print the location being displayed
+
+ ','
+ skip one unit producing no output
+
+ 'A'
+ print the location with a line number if possible
+
+ 'x'
+ display in unsigned hex
+
+ 'z'
+ display in signed hex
+
+ 'o'
+ display in unsigned octal
+
+ 'd'
+ display in signed decimal
+
+ 'u'
+ display in unsigned decimal
+
+ 'r'
+ display in current radix, signed
+
+ 'c'
+ display low 8 bits as a character. Non-printing characters
+ are displayed as an octal escape code (e.g. '\000').
+
+ 's'
+ display the null-terminated string at the location.
+ Non-printing characters are displayed as octal escapes.
+
+ 'm'
+ display in unsigned hex with character dump at the end of each
+ line. The location is also displayed in hex at the beginning
+ of each line.
+
+ 'i'
+ display as an instruction
+
+ 'I'
+ display as an instruction with possible alternate formats
+ depending on the machine:
+
+ 'vax'
+ don't assume that each external label is a procedure
+ entry mask
+
+ 'i386'
+ don't round to the next long word boundary
+
+ 'mips'
+ print register contents
+
+'xf'
+ Examine forward. It executes an examine command with the last
+ specified parameters to it except that the next address displayed
+ by it is used as the start address.
+
+'xb'
+ Examine backward. It executes an examine command with the last
+ specified parameters to it except that the last start address
+ subtracted by the size displayed by it is used as the start
+ address.
+
+'print[/axzodurc] ADDR1 [ ADDR2 ... ]'
+ Print ADDR's according to the modifier character. Valid formats
+ are: 'a' 'x' 'z' 'o' 'd' 'u' 'r' 'c'. If no modifier is specified,
+ the last one specified to it is used. ADDR can be a string, and it
+ is printed as it is. For example,
+
+ print/x "eax = " $eax "\necx = " $ecx "\n"
+
+ will print like
+
+ eax = xxxxxx
+ ecx = yyyyyy
+
+'write[/bhlt] ADDR [ THREAD ] EXPR1 [ EXPR2 ... ]'
+ Write the expressions at succeeding locations. The write unit size
+ can be specified in the modifier with a letter b (byte), h (half
+ word) or l(long word) respectively. If omitted, long word is
+ assumed. Target address space can also be specified with 't'
+ option in the modifier and THREAD parameter. Warning: since there
+ is no delimiter between expressions, strange things may happen.
+ It's best to enclose each expression in parentheses.
+
+'set $VARIABLE [=] EXPR'
+ Set the named variable or register with the value of EXPR. Valid
+ variable names are described below.
+
+'break[/tuTU] ADDR[,COUNT] [ THREAD1 ... ]'
+ Set a break point at ADDR. If count is supplied, continues
+ (COUNT-1) times before stopping at the break point. If the break
+ point is set, a break point number is printed with '#'. This
+ number can be used in deleting the break point or adding conditions
+ to it.
+
+ 't'
+ Set a break point only for a specific thread. The thread is
+ specified by THREAD parameter, or default one is used if the
+ parameter is omitted.
+
+ 'u'
+ Set a break point in user space address. It may be combined
+ with 't' or 'T' option to specify the non-current target user
+ space. Without 'u' option, the address is considered in the
+ kernel space, and wrong space address is rejected with an
+ error message. This option can be used only if it is
+ supported by machine dependent routines.
+
+ 'T'
+ Set a break point only for threads in a specific task. It is
+ like 't' option except that the break point is valid for all
+ threads which belong to the same task as the specified target
+ thread.
+
+ 'U'
+ Set a break point in shared user space address. It is like
+ 'u' option, except that the break point is valid for all
+ threads which share the same address space even if 't' option
+ is specified. 't' option is used only to specify the target
+ shared space. Without 't' option, 'u' and 'U' have the same
+ meanings. 'U' is useful for setting a user space break point
+ in non-current address space with 't' option such as in an
+ emulation library space. This option can be used only if it
+ is supported by machine dependent routines.
+
+ Warning: if a user text is shadowed by a normal user space
+ debugger, user space break points may not work correctly. Setting
+ a break point at the low-level code paths may also cause strange
+ behavior.
+
+'delete[/tuTU] ADDR|#NUMBER [ THREAD1 ... ]'
+ Delete the break point. The target break point can be specified by
+ a break point number with '#', or by ADDR like specified in 'break'
+ command.
+
+'cond #NUMBER [ CONDITION COMMANDS ]'
+ Set or delete a condition for the break point specified by the
+ NUMBER. If the CONDITION and COMMANDS are null, the condition is
+ deleted. Otherwise the condition is set for it. When the break
+ point is hit, the CONDITION is evaluated. The COMMANDS will be
+ executed if the condition is true and the break point count set by
+ a break point command becomes zero. COMMANDS is a list of commands
+ separated by semicolons. Each command in the list is executed in
+ that order, but if a 'continue' command is executed, the command
+ execution stops there, and the stopped thread resumes execution.
+ If the command execution reaches the end of the list, and it enters
+ into a command input mode. For example,
+
+ set $work0 0
+ break/Tu xxx_start $task7.0
+ cond #1 (1) set $work0 1; set $work1 0; cont
+ break/T vm_fault $task7.0
+ cond #2 ($work0) set $work1 ($work1+1); cont
+ break/Tu xxx_end $task7.0
+ cond #3 ($work0) print $work1 " faults\n"; set $work0 0
+ cont
+
+ will print page fault counts from 'xxx_start' to 'xxx_end' in
+ 'task7'.
+
+'step[/p] [,COUNT]'
+ Single step COUNT times. If 'p' option is specified, print each
+ instruction at each step. Otherwise, only print the last
+ instruction.
+
+ Warning: depending on machine type, it may not be possible to
+ single-step through some low-level code paths or user space code.
+ On machines with software-emulated single-stepping (e.g., pmax),
+ stepping through code executed by interrupt handlers will probably
+ do the wrong thing.
+
+'continue[/c]'
+ Continue execution until a breakpoint or watchpoint. If '/c',
+ count instructions while executing. Some machines (e.g., pmax)
+ also count loads and stores.
+
+ Warning: when counting, the debugger is really silently
+ single-stepping. This means that single-stepping on low-level code
+ may cause strange behavior.
+
+'until'
+ Stop at the next call or return instruction.
+
+'next[/p]'
+ Stop at the matching return instruction. If 'p' option is
+ specified, print the call nesting depth and the cumulative
+ instruction count at each call or return. Otherwise, only print
+ when the matching return is hit.
+
+'match[/p]'
+ A synonym for 'next'.
+
+'trace[/tu] [ FRAME_ADDR|THREAD ][,COUNT]'
+ Stack trace. 'u' option traces user space; if omitted, only traces
+ kernel space. If 't' option is specified, it shows the stack trace
+ of the specified thread or a default target thread. Otherwise, it
+ shows the stack trace of the current thread from the frame address
+ specified by a parameter or from the current frame. COUNT is the
+ number of frames to be traced. If the COUNT is omitted, all frames
+ are printed.
+
+ Warning: If the target thread's stack is not in the main memory at
+ that time, the stack trace will fail. User space stack trace is
+ valid only if the machine dependent code supports it.
+
+'search[/bhl] ADDR VALUE [MASK] [,COUNT]'
+ Search memory for a value. This command might fail in interesting
+ ways if it doesn't find the searched-for value. This is because
+ 'ddb' doesn't always recover from touching bad memory. The
+ optional count argument limits the search.
+
+'macro NAME COMMANDS'
+ Define a debugger macro as NAME. COMMANDS is a list of commands to
+ be associated with the macro. In the expressions of the command
+ list, a variable '$argxx' can be used to get a parameter passed to
+ the macro. When a macro is called, each argument is evaluated as
+ an expression, and the value is assigned to each parameter,
+ '$arg1', '$arg2', ... respectively. 10 '$arg' variables are
+ reserved to each level of macros, and they can be used as local
+ variables. The nesting of macro can be allowed up to 5 levels.
+ For example,
+
+ macro xinit set $work0 $arg1
+ macro xlist examine/m $work0,4; set $work0 *($work0)
+ xinit *(xxx_list)
+ xlist
+ ...
+
+ will print the contents of a list starting from 'xxx_list' by each
+ 'xlist' command.
+
+'dmacro NAME'
+ Delete the macro named NAME.
+
+'show all threads[/ul]'
+ Display all tasks and threads information. This version of 'ddb'
+ prints more information than previous one. It shows UNIX process
+ information like 'ps' for each task. The UNIX process information
+ may not be shown if it is not supported in the machine, or the
+ bottom of the stack of the target task is not in the main memory at
+ that time. It also shows task and thread identification numbers.
+ These numbers can be used to specify a task or a thread
+ symbolically in various commands. The numbers are valid only in
+ the same debugger session. If the execution is resumed again, the
+ numbers may change. The current thread can be distinguished from
+ others by a '#' after the thread id instead of ':'. Without 'l'
+ option, it only shows thread id, thread structure address and the
+ status for each thread. The status consists of 5 letters, R(run),
+ W(wait), S(suspended), O(swapped out) and N(interruptible), and if
+ corresponding status bit is off, '.' is printed instead. If 'l'
+ option is specified, more detail information is printed for each
+ thread.
+
+'show task [ ADDR ]'
+ Display the information of a task specified by ADDR. If ADDR is
+ omitted, current task information is displayed.
+
+'show thread [ ADDR ]'
+ Display the information of a thread specified by ADDR. If ADDR is
+ omitted, current thread information is displayed.
+
+'show registers[/tu [ THREAD ]]'
+ Display the register set. Target thread can be specified with 't'
+ option and THREAD parameter. If 'u' option is specified, it
+ displays user registers instead of kernel or currently saved one.
+
+ Warning: The support of 't' and 'u' option depends on the machine.
+ If not supported, incorrect information will be displayed.
+
+'show map ADDR'
+ Prints the 'vm_map' at ADDR.
+
+'show object ADDR'
+ Prints the 'vm_object' at ADDR.
+
+'show page ADDR'
+ Prints the 'vm_page' structure at ADDR.
+
+'show port ADDR'
+ Prints the 'ipc_port' structure at ADDR.
+
+'show ipc_port[/t [ THREAD ]]'
+ Prints all 'ipc_port' structure's addresses the target thread has.
+ The target thread is a current thread or that specified by a
+ parameter.
+
+'show macro [ NAME ]'
+ Show the definitions of macros. If NAME is specified, only the
+ definition of it is displayed. Otherwise, definitions of all
+ macros are displayed.
+
+'show watches'
+ Displays all watchpoints.
+
+'watch[/T] ADDR,SIZE [ TASK ]'
+ Set a watchpoint for a region. Execution stops when an attempt to
+ modify the region occurs. The SIZE argument defaults to 4.
+ Without 'T' option, ADDR is assumed to be a kernel address. If you
+ want to set a watch point in user space, specify 'T' and TASK
+ parameter where the address belongs to. If the TASK parameter is
+ omitted, a task of the default target thread or a current task is
+ assumed. If you specify a wrong space address, the request is
+ rejected with an error message.
+
+ Warning: Attempts to watch wired kernel memory may cause
+ unrecoverable error in some systems such as i386. Watchpoints on
+ user addresses work best.
+
+'dwatch[/T] ADDR [ TASK ]'
+ Clears a watchpoint previously set for a region. Without 'T'
+ option, ADDR is assumed to be a kernel address. If you want to
+ clear a watch point in user space, specify 'T' and TASK parameter
+ where the address belongs to. If the TASK parameter is omitted, a
+ task of the default target thread or a current task is assumed. If
+ you specify a wrong space address, the request is rejected with an
+ error message.
+
+
+File: mach.info, Node: Variables, Next: Expressions, Prev: Commands, Up:
Kernel Debugger
+
+11.3 Variables
+==============
+
+The debugger accesses registers and variables as $NAME. Register names
+are as in the 'show registers' command. Some variables are suffixed
+with numbers, and may have some modifier following a colon immediately
+after the variable name. For example, register variables can have 'u'
+and 't' modifier to indicate user register and that of a default target
+thread instead of that of the current thread (e.g. '$eax:tu').
+
+ Built-in variables currently supported are:
+
+'taskXX[.YY]'
+ Task or thread structure address. XX and YY are task and thread
+ identification numbers printed by a 'show all threads' command
+ respectively. This variable is read only.
+
+'thread'
+ The default target thread. The value is used when 't' option is
+ specified without explicit thread structure address parameter in
+ command lines or expression evaluation.
+
+'radix'
+ Input and output radix
+
+'maxoff'
+ Addresses are printed as SYMBOL+OFFSET unless offset is greater
+ than maxoff.
+
+'maxwidth'
+ The width of the displayed line.
+
+'lines'
+ The number of lines. It is used by 'more' feature.
+
+'tabstops'
+ Tab stop width.
+
+'argXX'
+ Parameters passed to a macro. XX can be 1 to 10.
+
+'workXX'
+ Work variable. XX can be 0 to 31.
+
+
+File: mach.info, Node: Expressions, Prev: Variables, Up: Kernel Debugger
+
+11.4 Expressions
+================
+
+Almost all expression operators in C are supported except '~', '^', and
+unary '&'. Special rules in 'ddb' are:
+
+'IDENTIFIER'
+ name of a symbol. It is translated to the address(or value) of it.
+ '.' and ':' can be used in the identifier. If supported by an
+ object format dependent routine, [FILE_NAME:]FUNC[:LINE_NUMBER]
+ [FILE_NAME:]VARIABLE, and FILE_NAME[:LINE_NUMBER] can be accepted
+ as a symbol. The symbol may be prefixed with 'SYMBOL_TABLE_NAME::'
+ like 'emulator::mach_msg_trap' to specify other than kernel
+ symbols.
+
+'NUMBER'
+ radix is determined by the first two letters:
+ '0x'
+ hex
+ '0o'
+ octal
+ '0t'
+ decimal
+
+ otherwise, follow current radix.
+
+'.'
+ dot
+
+'+'
+ next
+
+'..'
+ address of the start of the last line examined. Unlike dot or
+ next, this is only changed by 'examine' or 'write' command.
+
+'�'
+ last address explicitly specified.
+
+'$VARIABLE'
+ register name or variable. It is translated to the value of it.
+ It may be followed by a ':' and modifiers as described above.
+
+'a'
+ multiple of right hand side.
+
+'*EXPR'
+ indirection. It may be followed by a ':' and modifiers as
+ described above.
+
+
+File: mach.info, Node: Copying, Next: Documentation License, Prev: Kernel
Debugger, Up: Top
+
+GNU General Public License
+**************************
+
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+Preamble
+========
+
+The licenses for most software are designed to take away your freedom to
+share and change it. By contrast, the GNU General Public License is
+intended to guarantee your freedom to share and change free software--to
+make sure the software is free for all its users. This General Public
+License applies to most of the Free Software Foundation's software and
+to any other program whose authors commit to using it. (Some other Free
+Software Foundation software is covered by the GNU Lesser General Public
+License instead.) You can apply it to your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it if
+you want it, that you can change the software or use pieces of it in new
+free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software,
+and (2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+===============================================================
+
+ 0. This License applies to any program or other work which contains a
+ notice placed by the copyright holder saying it may be distributed
+ under the terms of this General Public License. The "Program",
+ below, refers to any such program or work, and a "work based on the
+ Program" means either the Program or any derivative work under
+ copyright law: that is to say, a work containing the Program or a
+ portion of it, either verbatim or with modifications and/or
+ translated into another language. (Hereinafter, translation is
+ included without limitation in the term "modification".) Each
+ licensee is addressed as "you".
+
+ Activities other than copying, distribution and modification are
+ not covered by this License; they are outside its scope. The act
+ of running the Program is not restricted, and the output from the
+ Program is covered only if its contents constitute a work based on
+ the Program (independent of having been made by running the
+ Program). Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's source
+ code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an appropriate
+ copyright notice and disclaimer of warranty; keep intact all the
+ notices that refer to this License and to the absence of any
+ warranty; and give any other recipients of the Program a copy of
+ this License along with the Program.
+
+ You may charge a fee for the physical act of transferring a copy,
+ and you may at your option offer warranty protection in exchange
+ for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion of
+ it, thus forming a work based on the Program, and copy and
+ distribute such modifications or work under the terms of Section 1
+ above, provided that you also meet all of these conditions:
+
+ a. You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b. You must cause any work that you distribute or publish, that
+ in whole or in part contains or is derived from the Program or
+ any part thereof, to be licensed as a whole at no charge to
+ all third parties under the terms of this License.
+
+ c. If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display
+ an announcement including an appropriate copyright notice and
+ a notice that there is no warranty (or else, saying that you
+ provide a warranty) and that users may redistribute the
+ program under these conditions, and telling the user how to
+ view a copy of this License. (Exception: if the Program
+ itself is interactive but does not normally print such an
+ announcement, your work based on the Program is not required
+ to print an announcement.)
+
+ These requirements apply to the modified work as a whole. If
+ identifiable sections of that work are not derived from the
+ Program, and can be reasonably considered independent and separate
+ works in themselves, then this License, and its terms, do not apply
+ to those sections when you distribute them as separate works. But
+ when you distribute the same sections as part of a whole which is a
+ work based on the Program, the distribution of the whole must be on
+ the terms of this License, whose permissions for other licensees
+ extend to the entire whole, and thus to each and every part
+ regardless of who wrote it.
+
+ Thus, it is not the intent of this section to claim rights or
+ contest your rights to work written entirely by you; rather, the
+ intent is to exercise the right to control the distribution of
+ derivative or collective works based on the Program.
+
+ In addition, mere aggregation of another work not based on the
+ Program with the Program (or with a work based on the Program) on a
+ volume of a storage or distribution medium does not bring the other
+ work under the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+ under Section 2) in object code or executable form under the terms
+ of Sections 1 and 2 above provided that you also do one of the
+ following:
+
+ a. Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Sections 1 and 2 above on a medium customarily used for
+ software interchange; or,
+
+ b. Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a
+ medium customarily used for software interchange; or,
+
+ c. Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with
+ such an offer, in accord with Subsection b above.)
+
+ The source code for a work means the preferred form of the work for
+ making modifications to it. For an executable work, complete
+ source code means all the source code for all modules it contains,
+ plus any associated interface definition files, plus the scripts
+ used to control compilation and installation of the executable.
+ However, as a special exception, the source code distributed need
+ not include anything that is normally distributed (in either source
+ or binary form) with the major components (compiler, kernel, and so
+ on) of the operating system on which the executable runs, unless
+ that component itself accompanies the executable.
+
+ If distribution of executable or object code is made by offering
+ access to copy from a designated place, then offering equivalent
+ access to copy the source code from the same place counts as
+ distribution of the source code, even though third parties are not
+ compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense or distribute the Program is
+ void, and will automatically terminate your rights under this
+ License. However, parties who have received copies, or rights,
+ from you under this License will not have their licenses terminated
+ so long as such parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+ signed it. However, nothing else grants you permission to modify
+ or distribute the Program or its derivative works. These actions
+ are prohibited by law if you do not accept this License.
+ Therefore, by modifying or distributing the Program (or any work
+ based on the Program), you indicate your acceptance of this License
+ to do so, and all its terms and conditions for copying,
+ distributing or modifying the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+ Program), the recipient automatically receives a license from the
+ original licensor to copy, distribute or modify the Program subject
+ to these terms and conditions. You may not impose any further
+ restrictions on the recipients' exercise of the rights granted
+ herein. You are not responsible for enforcing compliance by third
+ parties to this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+ infringement or for any other reason (not limited to patent
+ issues), conditions are imposed on you (whether by court order,
+ agreement or otherwise) that contradict the conditions of this
+ License, they do not excuse you from the conditions of this
+ License. If you cannot distribute so as to satisfy simultaneously
+ your obligations under this License and any other pertinent
+ obligations, then as a consequence you may not distribute the
+ Program at all. For example, if a patent license would not permit
+ royalty-free redistribution of the Program by all those who receive
+ copies directly or indirectly through you, then the only way you
+ could satisfy both it and this License would be to refrain entirely
+ from distribution of the Program.
+
+ If any portion of this section is held invalid or unenforceable
+ under any particular circumstance, the balance of the section is
+ intended to apply and the section as a whole is intended to apply
+ in other circumstances.
+
+ It is not the purpose of this section to induce you to infringe any
+ patents or other property right claims or to contest validity of
+ any such claims; this section has the sole purpose of protecting
+ the integrity of the free software distribution system, which is
+ implemented by public license practices. Many people have made
+ generous contributions to the wide range of software distributed
+ through that system in reliance on consistent application of that
+ system; it is up to the author/donor to decide if he or she is
+ willing to distribute software through any other system and a
+ licensee cannot impose that choice.
+
+ This section is intended to make thoroughly clear what is believed
+ to be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+ certain countries either by patents or by copyrighted interfaces,
+ the original copyright holder who places the Program under this
+ License may add an explicit geographical distribution limitation
+ excluding those countries, so that distribution is permitted only
+ in or among countries not thus excluded. In such case, this
+ License incorporates the limitation as if written in the body of
+ this License.
+
+ 9. The Free Software Foundation may publish revised and/or new
+ versions of the General Public License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+ Program specifies a version number of this License which applies to
+ it and "any later version", you have the option of following the
+ terms and conditions either of that version or of any later version
+ published by the Free Software Foundation. If the Program does not
+ specify a version number of this License, you may choose any
+ version ever published by the Free Software Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+ programs whose distribution conditions are different, write to the
+ author to ask for permission. For software which is copyrighted by
+ the Free Software Foundation, write to the Free Software
+ Foundation; we sometimes make exceptions for this. Our decision
+ will be guided by the two goals of preserving the free status of
+ all derivatives of our free software and of promoting the sharing
+ and reuse of software generally.
+
+ 11. NO WARRANTY
+
+ BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
+ WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
+ LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS
+ AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+ OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
+ PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
+ DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR
+ OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
+ MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
+ LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
+ INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+ INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
+ OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
+ OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+Appendix: How to Apply These Terms to Your New Programs
+=======================================================
+
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
+ Copyright (C) YYYY NAME OF AUTHOR
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
+
+ Also add information on how to contact you by electronic and paper
+mail.
+
+ If the program is interactive, make it output a short notice like
+this when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+ The hypothetical commands 'show w' and 'show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than 'show w' and 'show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+ You should also get your employer (if you work as a programmer) or
+your school, if any, to sign a "copyright disclaimer" for the program,
+if necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ SIGNATURE OF TY COON, 1 April 1989
+ Ty Coon, President of Vice
+
+ This General Public License does not permit incorporating your
+program into proprietary programs. If your program is a subroutine
+library, you may consider it more useful to permit linking proprietary
+applications with the library. If this is what you want to do, use the
+GNU Lesser General Public License instead of this License.
+
+
+File: mach.info, Node: Documentation License, Next: Concept Index, Prev:
Copying, Up: Top
+
+Appendix A Documentation License
+********************************
+
+This manual is copyrighted and licensed under the GNU Free Documentation
+license.
+
+ Parts of this manual are derived from the Mach manual packages
+originally provided by Carnegie Mellon University.
+
+* Menu:
+
+* GNU Free Documentation License:: The GNU Free Documentation License.
+* CMU License:: The CMU license applies to the original Mach
+ kernel and its documentation.
+
+
+File: mach.info, Node: GNU Free Documentation License, Next: CMU License,
Up: Documentation License
+
+A.1 GNU Free Documentation License
+==================================
+
+ Version 1.2, November 2002
+
+ Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document "free" in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book. We
+ recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it can
+ be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ "Document", below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as "you". You accept
+ the license if you copy, modify or distribute the work in a way
+ requiring permission under copyright law.
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in the
+ notice that says that the Document is released under this License.
+ If a section does not fit the above definition of Secondary then it
+ is not allowed to be designated as Invariant. The Document may
+ contain zero Invariant Sections. If the Document does not identify
+ any Invariant Sections then there are none.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images composed
+ of pixels) generic paint programs or (for drawings) some widely
+ available drawing editor, and that is suitable for input to text
+ formatters or for automatic translation to a variety of formats
+ suitable for input to text formatters. A copy made in an otherwise
+ Transparent file format whose markup, or absence of markup, has
+ been arranged to thwart or discourage subsequent modification by
+ readers is not Transparent. An image format is not Transparent if
+ used for any substantial amount of text. A copy that is not
+ "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and standard-conforming
+ simple HTML, PostScript or PDF designed for human modification.
+ Examples of transparent image formats include PNG, XCF and JPG.
+ Opaque formats include proprietary formats that can be read and
+ edited only by proprietary word processors, SGML or XML for which
+ the DTD and/or processing tools are not generally available, and
+ the machine-generated HTML, PostScript or PDF produced by some word
+ processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ A section "Entitled XYZ" means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ "Acknowledgements", "Dedications", "Endorsements", or "History".)
+ To "Preserve the Title" of such a section when you modify the
+ Document means that it remains a section "Entitled XYZ" according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow the
+ conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document's license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the title
+ equally prominent and visible. You may add other material on the
+ covers in addition. Copying with changes limited to the covers, as
+ long as they preserve the title of the Document and satisfy these
+ conditions, can be treated as verbatim copying in other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a machine-readable
+ Transparent copy along with each Opaque copy, or state in or with
+ each Opaque copy a computer-network location from which the general
+ network-using public has access to download using public-standard
+ network protocols a complete Transparent copy of the Document, free
+ of added material. If you use the latter option, you must take
+ reasonably prudent steps, when you begin distribution of Opaque
+ copies in quantity, to ensure that this Transparent copy will
+ remain thus accessible at the stated location until at least one
+ year after the last time you distribute an Opaque copy (directly or
+ through your agents or retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of copies,
+ to give them a chance to provide you with an updated version of the
+ Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with the
+ Modified Version filling the role of the Document, thus licensing
+ distribution and modification of the Modified Version to whoever
+ possesses a copy of it. In addition, you must do these things in
+ the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of previous
+ versions (which should, if there were any, be listed in the
+ History section of the Document). You may use the same title
+ as a previous version if the original publisher of that
+ version gives permission.
+
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in
+ the Modified Version, together with at least five of the
+ principal authors of the Document (all of its principal
+ authors, if it has fewer than five), unless they release you
+ from this requirement.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified
+ Version under the terms of this License, in the form shown in
+ the Addendum below.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. Preserve the section Entitled "History", Preserve its Title,
+ and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on the
+ Title Page. If there is no section Entitled "History" in the
+ Document, create one stating the title, year, authors, and
+ publisher of the Document as given on its Title Page, then add
+ an item describing the Modified Version as stated in the
+ previous sentence.
+
+ J. Preserve the network location, if any, given in the Document
+ for public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in the
+ "History" section. You may omit a network location for a work
+ that was published at least four years before the Document
+ itself, or if the original publisher of the version it refers
+ to gives permission.
+
+ K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the section
+ all the substance and tone of each of the contributor
+ acknowledgements and/or dedications given therein.
+
+ L. Preserve all the Invariant Sections of the Document, unaltered
+ in their text and in their titles. Section numbers or the
+ equivalent are not considered part of the section titles.
+
+ M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ "Endorsements" or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option designate
+ some or all of these sections as invariant. To do this, add their
+ titles to the list of Invariant Sections in the Modified Version's
+ license notice. These titles must be distinct from any other
+ section titles.
+
+ You may add a section Entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative
+ definition of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end of
+ the list of Cover Texts in the Modified Version. Only one passage
+ of Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity. If the Document
+ already includes a cover text for the same cover, previously added
+ by you or by arrangement made by the same entity you are acting on
+ behalf of, you may not add another; but you may replace the old
+ one, on explicit permission from the previous publisher that added
+ the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination all
+ of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ "History" in the various original documents, forming one section
+ Entitled "History"; likewise combine any sections Entitled
+ "Acknowledgements", and any sections Entitled "Dedications". You
+ must delete all sections Entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the documents
+ in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow this
+ License in all other respects regarding verbatim copying of that
+ document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of a
+ storage or distribution medium, is called an "aggregate" if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation's users beyond what the individual
+ works permit. When the Document is included in an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document's Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled "Acknowledgements",
+ "Dedications", or "History", the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided for under this License. Any other
+ attempt to copy, modify, sublicense or distribute the Document is
+ void, and will automatically terminate your rights under this
+ License. However, parties who have received copies, or rights,
+ from you under this License will not have their licenses terminated
+ so long as such parties remain in full compliance.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ <http://www.gnu.org/copyleft/>.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If the
+ Document does not specify a version number of this License, you may
+ choose any version ever published (not as a draft) by the Free
+ Software Foundation.
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.2
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of free
+software license, such as the GNU General Public License, to permit
+their use in free software.
+
+
+File: mach.info, Node: CMU License, Prev: GNU Free Documentation License,
Up: Documentation License
+
+A.2 CMU License
+===============
+
+ Mach Operating System
+ Copyright (C) 1991,1990,1989 Carnegie Mellon University
+ All Rights Reserved.
+
+ Permission to use, copy, modify and distribute this software and
+ its documentation is hereby granted, provided that both the
+ copyright notice and this permission notice appear in all copies of
+ the software, derivative works or modified versions, and any
+ portions thereof, and that both notices appear in supporting
+ documentation.
+
+ CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+ CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
+ ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
+
+ Carnegie Mellon requests users of this software to return to
+
+ Software Distribution Coordinator
+ School of Computer Science
+ Carnegie Mellon University
+ Pittsburgh PA 15213-3890
+
+ or <address@hidden> any improvements or
+ extensions that they make and grant Carnegie Mellon the rights to
+ redistribute these changes.
+
+
+File: mach.info, Node: Concept Index, Next: Function and Data Index, Prev:
Documentation License, Up: Top
+
+Concept Index
+*************
+
+ [index ]
+* Menu:
+
+* communication between tasks: Major Concepts. (line 6)
+* composing messages: Message Format. (line 6)
+* device port: Device Interface. (line 13)
+* FDL, GNU Free Documentation License: GNU Free Documentation License.
+ (line 6)
+* format of a message: Message Format. (line 6)
+* GPL, GNU General Public License: Copying. (line 6)
+* GRand Unified Bootloader: Bootloader. (line 13)
+* GRUB: Bootloader. (line 13)
+* host control port: Host Ports. (line 34)
+* host interface: Host Interface. (line 6)
+* host name port: Host Ports. (line 6)
+* host ports: Host Ports. (line 6)
+* interprocess communication (IPC): Major Concepts. (line 6)
+* IPC (interprocess communication): Major Concepts. (line 6)
+* IPC space port: Port Manipulation Interface.
+ (line 9)
+* message composition: Message Format. (line 6)
+* message format: Message Format. (line 6)
+* messages: Major Concepts. (line 6)
+* moving port rights: Exchanging Port Rights.
+ (line 6)
+* port representing a device: Device Interface. (line 13)
+* port representing a processor: Processor Interface. (line 6)
+* port representing a processor set name: Processor Set Ports. (line 6)
+* port representing a task: Task Interface. (line 6)
+* port representing a thread: Thread Interface. (line 6)
+* port representing a virtual memory map: Virtual Memory Interface.
+ (line 6)
+* port representing an IPC space: Port Manipulation Interface.
+ (line 9)
+* ports representing a host: Host Ports. (line 6)
+* ports representing a processor set: Processor Set Ports. (line 6)
+* processor port: Processor Interface. (line 6)
+* processor set name port: Processor Set Ports. (line 6)
+* processor set port: Processor Set Ports. (line 12)
+* processor set ports: Processor Set Ports. (line 6)
+* receiving memory: Memory. (line 6)
+* receiving port rights: Exchanging Port Rights.
+ (line 6)
+* remote procedure calls (RPC): Major Concepts. (line 6)
+* RPC (remote procedure calls): Major Concepts. (line 6)
+* sending memory: Memory. (line 6)
+* sending messages: Message Send. (line 6)
+* sending port rights: Exchanging Port Rights.
+ (line 6)
+* serverboot: Modules. (line 6)
+* task port: Task Interface. (line 6)
+* thread port: Thread Interface. (line 6)
+* virtual memory map port: Virtual Memory Interface.
+ (line 6)
+
+
+File: mach.info, Node: Function and Data Index, Prev: Concept Index, Up: Top
+
+Function and Data Index
+***********************
+
+ [index ]
+* Menu:
+
+* catch_exception_raise: Exceptions. (line 6)
+* device_close: Device Close. (line 6)
+* device_get_status: Device Status. (line 17)
+* device_map: Device Map. (line 6)
+* device_open: Device Open. (line 6)
+* device_open_request: Device Open. (line 33)
+* device_read: Device Read. (line 6)
+* device_read_inband: Device Read. (line 24)
+* device_read_request: Device Read. (line 31)
+* device_read_request_inband: Device Read. (line 48)
+* device_reply_server: Device Reply Server. (line 10)
+* device_set_filter: Device Filter. (line 6)
+* device_set_status: Device Status. (line 6)
+* device_t: Device Interface. (line 13)
+* device_write: Device Write. (line 6)
+* device_write_inband: Device Write. (line 21)
+* device_write_request: Device Write. (line 28)
+* device_write_request_inband: Device Write. (line 45)
+* ds_device_open_reply: Device Open. (line 36)
+* ds_device_read_reply: Device Read. (line 34)
+* ds_device_read_reply_inband: Device Read. (line 52)
+* ds_device_write_reply: Device Write. (line 31)
+* ds_device_write_reply_inband: Device Write. (line 49)
+* evc_wait: Exceptions. (line 17)
+* exception_raise: Exceptions. (line 11)
+* host_adjust_time: Host Time. (line 40)
+* host_basic_info_t: Host Information. (line 74)
+* host_get_boot_info: Host Information. (line 112)
+* host_get_time: Host Time. (line 31)
+* host_info: Host Information. (line 6)
+* host_kernel_version: Host Information. (line 94)
+* host_priv_t: Host Ports. (line 34)
+* host_processors: Hosted Processors. (line 6)
+* host_processor_sets: Processor Set Access.
+ (line 6)
+* host_processor_set_priv: Processor Set Access.
+ (line 21)
+* host_reboot: Host Reboot. (line 6)
+* host_sched_info_t: Host Information. (line 91)
+* host_set_time: Host Time. (line 36)
+* host_t: Host Ports. (line 6)
+* ipc_space_t: Port Manipulation Interface.
+ (line 9)
+* mach_host_self: Host Ports. (line 13)
+* mach_msg: Mach Message Call. (line 9)
+* MACH_MSGH_BITS: Message Format. (line 94)
+* MACH_MSGH_BITS_LOCAL: Message Format. (line 106)
+* MACH_MSGH_BITS_OTHER: Message Format. (line 116)
+* MACH_MSGH_BITS_PORTS: Message Format. (line 111)
+* MACH_MSGH_BITS_REMOTE: Message Format. (line 101)
+* mach_msg_bits_t: Message Format. (line 20)
+* mach_msg_header_t: Message Format. (line 32)
+* mach_msg_id_t: Message Format. (line 28)
+* mach_msg_size_t: Message Format. (line 24)
+* mach_msg_timeout_t: Mach Message Call. (line 60)
+* mach_msg_type_long_t: Message Format. (line 231)
+* mach_msg_type_name_t: Message Format. (line 127)
+* mach_msg_type_number_t: Message Format. (line 137)
+* MACH_MSG_TYPE_PORT_ANY: Message Format. (line 217)
+* MACH_MSG_TYPE_PORT_ANY_RIGHT: Message Format. (line 226)
+* MACH_MSG_TYPE_PORT_ANY_SEND: Message Format. (line 221)
+* mach_msg_type_size_t: Message Format. (line 132)
+* mach_msg_type_t: Message Format. (line 142)
+* mach_port_allocate: Port Creation. (line 6)
+* mach_port_allocate_name: Port Creation. (line 64)
+* mach_port_deallocate: Port Destruction. (line 6)
+* mach_port_destroy: Port Destruction. (line 28)
+* mach_port_extract_right: Ports and other Tasks.
+ (line 57)
+* mach_port_get_receive_status: Receive Rights. (line 54)
+* mach_port_get_refs: Port Rights. (line 6)
+* mach_port_get_set_status: Port Sets. (line 6)
+* mach_port_insert_right: Ports and other Tasks.
+ (line 6)
+* mach_port_mod_refs: Port Rights. (line 35)
+* mach_port_move_member: Port Sets. (line 26)
+* mach_port_mscount_t: Receive Rights. (line 10)
+* mach_port_msgcount_t: Receive Rights. (line 14)
+* mach_port_names: Port Names. (line 6)
+* mach_port_rename: Port Names. (line 75)
+* mach_port_request_notification: Request Notifications.
+ (line 6)
+* mach_port_rights_t: Receive Rights. (line 18)
+* mach_port_seqno_t: Receive Rights. (line 6)
+* mach_port_set_mscount: Receive Rights. (line 71)
+* mach_port_set_qlimit: Receive Rights. (line 88)
+* mach_port_set_seqno: Receive Rights. (line 106)
+* mach_port_status_t: Receive Rights. (line 22)
+* mach_port_t: Message Format. (line 13)
+* mach_port_type: Port Names. (line 33)
+* mach_reply_port: Port Creation. (line 47)
+* mach_task_self: Task Information. (line 6)
+* mach_thread_self: Thread Information. (line 6)
+* mapped_time_value_t: Host Time. (line 49)
+* memory_object_change_attributes: Memory Object Attributes.
+ (line 25)
+* memory_object_change_completed: Memory Object Attributes.
+ (line 60)
+* memory_object_copy: Memory Objects and Data.
+ (line 202)
+* memory_object_create: Default Memory Manager.
+ (line 25)
+* memory_object_data_error: Memory Objects and Data.
+ (line 152)
+* memory_object_data_initialize: Default Memory Manager.
+ (line 69)
+* memory_object_data_provided: Memory Objects and Data.
+ (line 284)
+* memory_object_data_request: Memory Objects and Data.
+ (line 45)
+* memory_object_data_return: Memory Objects and Data.
+ (line 6)
+* memory_object_data_supply: Memory Objects and Data.
+ (line 80)
+* memory_object_data_unavailable: Memory Objects and Data.
+ (line 172)
+* memory_object_data_unlock: Memory Object Locking.
+ (line 81)
+* memory_object_data_write: Memory Objects and Data.
+ (line 254)
+* memory_object_default_server: Memory Object Server.
+ (line 8)
+* memory_object_destroy: Memory Object Termination.
+ (line 35)
+* memory_object_get_attributes: Memory Object Attributes.
+ (line 6)
+* memory_object_init: Memory Object Creation.
+ (line 6)
+* memory_object_lock_completed: Memory Object Locking.
+ (line 55)
+* memory_object_lock_request: Memory Object Locking.
+ (line 6)
+* memory_object_ready: Memory Object Creation.
+ (line 48)
+* memory_object_server: Memory Object Server.
+ (line 6)
+* memory_object_set_attributes: Memory Object Attributes.
+ (line 76)
+* memory_object_supply_completed: Memory Objects and Data.
+ (line 121)
+* memory_object_terminate: Memory Object Termination.
+ (line 6)
+* processor_assign: Processors and Sets. (line 6)
+* processor_basic_info_t: Processor Info. (line 66)
+* processor_control: Processor Control. (line 8)
+* processor_exit: Processor Control. (line 7)
+* processor_get_assignment: Processors and Sets. (line 30)
+* processor_info: Processor Info. (line 6)
+* processor_set_basic_info_t: Processor Set Info. (line 74)
+* processor_set_create: Processor Set Creation.
+ (line 6)
+* processor_set_default: Processor Set Access.
+ (line 33)
+* processor_set_destroy: Processor Set Destruction.
+ (line 6)
+* processor_set_info: Processor Set Info. (line 6)
+* processor_set_max_priority: Processor Set Priority.
+ (line 6)
+* processor_set_name_t: Processor Set Ports. (line 6)
+* processor_set_policy_disable: Processor Set Policy.
+ (line 8)
+* processor_set_policy_enable: Processor Set Policy.
+ (line 6)
+* processor_set_sched_info_t: Processor Set Info. (line 92)
+* processor_set_t: Processor Set Ports. (line 12)
+* processor_set_tasks: Tasks and Threads on Sets.
+ (line 6)
+* processor_set_threads: Tasks and Threads on Sets.
+ (line 20)
+* processor_start: Processor Control. (line 6)
+* processor_t: Processor Interface. (line 6)
+* sampled_pc_flavor_t: Profiling. (line 67)
+* sampled_pc_t: Profiling. (line 52)
+* seqnos_memory_object_change_completed: Memory Object Attributes.
+ (line 63)
+* seqnos_memory_object_copy: Memory Objects and Data.
+ (line 207)
+* seqnos_memory_object_create: Default Memory Manager.
+ (line 30)
+* seqnos_memory_object_data_initialize: Default Memory Manager.
+ (line 73)
+* seqnos_memory_object_data_request: Memory Objects and Data.
+ (line 49)
+* seqnos_memory_object_data_return: Memory Objects and Data.
+ (line 11)
+* seqnos_memory_object_data_unlock: Memory Object Locking.
+ (line 85)
+* seqnos_memory_object_data_write: Memory Objects and Data.
+ (line 258)
+* seqnos_memory_object_default_server: Memory Object Server.
+ (line 12)
+* seqnos_memory_object_init: Memory Object Creation.
+ (line 11)
+* seqnos_memory_object_lock_completed: Memory Object Locking.
+ (line 59)
+* seqnos_memory_object_server: Memory Object Server.
+ (line 10)
+* seqnos_memory_object_supply_completed: Memory Objects and Data.
+ (line 126)
+* seqnos_memory_object_terminate: Memory Object Termination.
+ (line 10)
+* struct host_basic_info: Host Information. (line 47)
+* struct host_sched_info: Host Information. (line 77)
+* struct processor_basic_info: Processor Info. (line 43)
+* struct processor_set_basic_info: Processor Set Info. (line 50)
+* struct processor_set_sched_info: Processor Set Info. (line 77)
+* struct task_basic_info: Task Information. (line 81)
+* struct task_events_info: Task Information. (line 112)
+* struct task_thread_times_info: Task Information. (line 143)
+* struct thread_basic_info: Thread Information. (line 65)
+* struct thread_sched_info: Thread Information. (line 126)
+* swtch: Hand-Off Scheduling. (line 81)
+* swtch_pri: Hand-Off Scheduling. (line 93)
+* task_assign: Tasks and Threads on Sets.
+ (line 34)
+* task_assign_default: Tasks and Threads on Sets.
+ (line 47)
+* task_basic_info_t: Task Information. (line 109)
+* task_create: Task Creation. (line 6)
+* task_disable_pc_sampling: Profiling. (line 20)
+* task_enable_pc_sampling: Profiling. (line 6)
+* task_events_info_t: Task Information. (line 140)
+* task_get_assignment: Tasks and Threads on Sets.
+ (line 57)
+* task_get_bootstrap_port: Task Special Ports. (line 40)
+* task_get_emulation_vector: Syscall Emulation. (line 6)
+* task_get_exception_port: Task Special Ports. (line 34)
+* task_get_kernel_port: Task Special Ports. (line 28)
+* task_get_sampled_pcs: Profiling. (line 34)
+* task_get_special_port: Task Special Ports. (line 6)
+* task_info: Task Information. (line 41)
+* task_priority: Task Execution. (line 27)
+* task_ras_control: Task Execution. (line 45)
+* task_resume: Task Execution. (line 18)
+* task_set_bootstrap_port: Task Special Ports. (line 76)
+* task_set_emulation: Syscall Emulation. (line 20)
+* task_set_emulation_vector: Syscall Emulation. (line 12)
+* task_set_exception_port: Task Special Ports. (line 70)
+* task_set_kernel_port: Task Special Ports. (line 64)
+* task_set_special_port: Task Special Ports. (line 46)
+* task_suspend: Task Execution. (line 6)
+* task_t: Task Interface. (line 6)
+* task_terminate: Task Termination. (line 6)
+* task_threads: Task Information. (line 30)
+* task_thread_times_info_t: Task Information. (line 157)
+* thread_abort: Thread Execution. (line 36)
+* thread_assign: Tasks and Threads on Sets.
+ (line 69)
+* thread_assign_default: Tasks and Threads on Sets.
+ (line 83)
+* thread_basic_info_t: Thread Information. (line 123)
+* thread_create: Thread Creation. (line 6)
+* thread_depress_abort: Hand-Off Scheduling. (line 74)
+* thread_disable_pc_sampling: Profiling. (line 22)
+* thread_enable_pc_sampling: Profiling. (line 8)
+* thread_get_assignment: Tasks and Threads on Sets.
+ (line 93)
+* thread_get_exception_port: Thread Special Ports.
+ (line 25)
+* thread_get_kernel_port: Thread Special Ports.
+ (line 19)
+* thread_get_sampled_pcs: Profiling. (line 37)
+* thread_get_special_port: Thread Special Ports.
+ (line 6)
+* thread_get_state: Thread Execution. (line 98)
+* thread_info: Thread Information. (line 30)
+* thread_max_priority: Thread Priority. (line 36)
+* thread_policy: Scheduling Policy. (line 6)
+* thread_priority: Thread Priority. (line 18)
+* thread_resume: Thread Execution. (line 27)
+* thread_sched_info_t: Thread Information. (line 157)
+* thread_set_exception_port: Thread Special Ports.
+ (line 50)
+* thread_set_kernel_port: Thread Special Ports.
+ (line 44)
+* thread_set_special_port: Thread Special Ports.
+ (line 31)
+* thread_set_state: Thread Execution. (line 122)
+* thread_suspend: Thread Execution. (line 6)
+* thread_switch: Hand-Off Scheduling. (line 6)
+* thread_t: Thread Interface. (line 6)
+* thread_terminate: Thread Termination. (line 6)
+* thread_wire: Thread Settings. (line 6)
+* time_value_add: Host Time. (line 23)
+* time_value_add_usec: Host Time. (line 19)
+* time_value_t: Host Time. (line 6)
+* vm_allocate: Memory Allocation. (line 6)
+* vm_copy: Data Transfer. (line 50)
+* vm_deallocate: Memory Deallocation. (line 6)
+* vm_inherit: Memory Attributes. (line 68)
+* vm_machine_attribute: Memory Attributes. (line 130)
+* vm_map: Mapping Memory Objects.
+ (line 6)
+* vm_protect: Memory Attributes. (line 34)
+* vm_read: Data Transfer. (line 6)
+* vm_region: Memory Attributes. (line 6)
+* vm_set_default_memory_manager: Default Memory Manager.
+ (line 6)
+* vm_statistics: Memory Statistics. (line 50)
+* vm_statistics_data_t: Memory Statistics. (line 6)
+* vm_task_t: Virtual Memory Interface.
+ (line 6)
+* vm_wire: Memory Attributes. (line 98)
+* vm_write: Data Transfer. (line 31)
+
diff --git a/doc/stamp-vti b/doc/stamp-vti
new file mode 100644
index 0000000..5517e3f
--- /dev/null
+++ b/doc/stamp-vti
@@ -0,0 +1,4 @@
address@hidden UPDATED 27 September 2013
address@hidden UPDATED-MONTH September 2013
address@hidden EDITION 1.4
address@hidden VERSION 1.4
diff --git a/doc/version.texi b/doc/version.texi
new file mode 100644
index 0000000..5517e3f
--- /dev/null
+++ b/doc/version.texi
@@ -0,0 +1,4 @@
address@hidden UPDATED 27 September 2013
address@hidden UPDATED-MONTH September 2013
address@hidden EDITION 1.4
address@hidden VERSION 1.4
diff --git a/gitlog-to-changelog b/gitlog-to-changelog
deleted file mode 100755
index e02d34c..0000000
--- a/gitlog-to-changelog
+++ /dev/null
@@ -1,432 +0,0 @@
-eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
- & eval 'exec perl -wS "$0" $argv:q'
- if 0;
-# Convert git log output to ChangeLog format.
-
-my $VERSION = '2012-07-29 06:11'; # UTC
-# The definition above must lie within the first 8 lines in order
-# for the Emacs time-stamp write hook (at end) to update it.
-# If you change this file with Emacs, please let the write hook
-# do its job. Otherwise, update this string manually.
-
-# Copyright (C) 2008-2013 Free Software Foundation, Inc.
-
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-# Written by Jim Meyering
-
-use strict;
-use warnings;
-use Getopt::Long;
-use POSIX qw(strftime);
-
-(my $ME = $0) =~ s|.*/||;
-
-# use File::Coda; # http://meyering.net/code/Coda/
-END {
- defined fileno STDOUT or return;
- close STDOUT and return;
- warn "$ME: failed to close standard output: $!\n";
- $? ||= 1;
-}
-
-sub usage ($)
-{
- my ($exit_code) = @_;
- my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
- if ($exit_code != 0)
- {
- print $STREAM "Try '$ME --help' for more information.\n";
- }
- else
- {
- print $STREAM <<EOF;
-Usage: $ME [OPTIONS] [ARGS]
-
-Convert git log output to ChangeLog format. If present, any ARGS
-are passed to "git log". To avoid ARGS being parsed as options to
-$ME, they may be preceded by '--'.
-
-OPTIONS:
-
- --amend=FILE FILE maps from an SHA1 to perl code (i.e., s/old/new/) that
- makes a change to SHA1's commit log text or metadata.
- --append-dot append a dot to the first line of each commit message if
- there is no other punctuation or blank at the end.
- --no-cluster never cluster commit messages under the same date/author
- header; the default is to cluster adjacent commit messages
- if their headers are the same and neither commit message
- contains multiple paragraphs.
- --srcdir=DIR the root of the source tree, from which the .git/
- directory can be derived.
- --since=DATE convert only the logs since DATE;
- the default is to convert all log entries.
- --format=FMT set format string for commit subject and body;
- see 'man git-log' for the list of format metacharacters;
- the default is '%s%n%b%n'
- --strip-tab remove one additional leading TAB from commit message lines.
- --strip-cherry-pick remove data inserted by "git cherry-pick";
- this includes the "cherry picked from commit ..." line,
- and the possible final "Conflicts:" paragraph.
- --help display this help and exit
- --version output version information and exit
-
-EXAMPLE:
-
- $ME --since=2008-01-01 > ChangeLog
- $ME -- -n 5 foo > last-5-commits-to-branch-foo
-
-SPECIAL SYNTAX:
-
-The following types of strings are interpreted specially when they appear
-at the beginning of a log message line. They are not copied to the output.
-
- Copyright-paperwork-exempt: Yes
- Append the "(tiny change)" notation to the usual "date name email"
- ChangeLog header to mark a change that does not require a copyright
- assignment.
- Co-authored-by: Joe User <address@hidden>
- List the specified name and email address on a second
- ChangeLog header, denoting a co-author.
- Signed-off-by: Joe User <address@hidden>
- These lines are simply elided.
-
-In a FILE specified via --amend, comment lines (starting with "#") are ignored.
-FILE must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 (alone on
-a line) referring to a commit in the current project, and CODE refers to one
-or more consecutive lines of Perl code. Pairs must be separated by one or
-more blank line.
-
-Here is sample input for use with --amend=FILE, from coreutils:
-
-3a169f4c5d9159283548178668d2fae6fced3030
-# fix typo in title:
-s/all tile types/all file types/
-
-1379ed974f1fa39b12e2ffab18b3f7a607082202
-# Due to a bug in vc-dwim, I mis-attributed a patch by Paul to myself.
-# Change the author to be Paul. Note the escaped "@":
-s,Jim .*>,Paul Eggert <address@hidden>,
-
-EOF
- }
- exit $exit_code;
-}
-
-# If the string $S is a well-behaved file name, simply return it.
-# If it contains white space, quotes, etc., quote it, and return the new
string.
-sub shell_quote($)
-{
- my ($s) = @_;
- if ($s =~ m![^\w+/.,-]!)
- {
- # Convert each single quote to '\''
- $s =~ s/\'/\'\\\'\'/g;
- # Then single quote the string.
- $s = "'$s'";
- }
- return $s;
-}
-
-sub quoted_cmd(@)
-{
- return join (' ', map {shell_quote $_} @_);
-}
-
-# Parse file F.
-# Comment lines (starting with "#") are ignored.
-# F must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1
-# (alone on a line) referring to a commit in the current project, and
-# CODE refers to one or more consecutive lines of Perl code.
-# Pairs must be separated by one or more blank line.
-sub parse_amend_file($)
-{
- my ($f) = @_;
-
- open F, '<', $f
- or die "$ME: $f: failed to open for reading: $!\n";
-
- my $fail;
- my $h = {};
- my $in_code = 0;
- my $sha;
- while (defined (my $line = <F>))
- {
- $line =~ /^\#/
- and next;
- chomp $line;
- $line eq ''
- and $in_code = 0, next;
-
- if (!$in_code)
- {
- $line =~ /^([0-9a-fA-F]{40})$/
- or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"),
- $fail = 1, next;
- $sha = lc $1;
- $in_code = 1;
- exists $h->{$sha}
- and (warn "$ME: $f:$.: duplicate SHA1\n"),
- $fail = 1, next;
- }
- else
- {
- $h->{$sha} ||= '';
- $h->{$sha} .= "$line\n";
- }
- }
- close F;
-
- $fail
- and exit 1;
-
- return $h;
-}
-
-# git_dir_option $SRCDIR
-#
-# From $SRCDIR, the --git-dir option to pass to git (none if $SRCDIR
-# is undef). Return as a list (0 or 1 element).
-sub git_dir_option($)
-{
- my ($srcdir) = @_;
- my @res = ();
- if (defined $srcdir)
- {
- my $qdir = shell_quote $srcdir;
- my $cmd = "cd $qdir && git rev-parse --show-toplevel";
- my $qcmd = shell_quote $cmd;
- my $git_dir = qx($cmd);
- defined $git_dir
- or die "$ME: cannot run $qcmd: $!\n";
- $? == 0
- or die "$ME: $qcmd had unexpected exit code or signal ($?)\n";
- chomp $git_dir;
- push @res, "--git-dir=$git_dir/.git";
- }
- @res;
-}
-
-{
- my $since_date;
- my $format_string = '%s%n%b%n';
- my $amend_file;
- my $append_dot = 0;
- my $cluster = 1;
- my $strip_tab = 0;
- my $strip_cherry_pick = 0;
- my $srcdir;
- GetOptions
- (
- help => sub { usage 0 },
- version => sub { print "$ME version $VERSION\n"; exit },
- 'since=s' => \$since_date,
- 'format=s' => \$format_string,
- 'amend=s' => \$amend_file,
- 'append-dot' => \$append_dot,
- 'cluster!' => \$cluster,
- 'strip-tab' => \$strip_tab,
- 'strip-cherry-pick' => \$strip_cherry_pick,
- 'srcdir=s' => \$srcdir,
- ) or usage 1;
-
- defined $since_date
- and unshift @ARGV, "--since=$since_date";
-
- # This is a hash that maps an SHA1 to perl code (i.e., s/old/new/)
- # that makes a correction in the log or attribution of that commit.
- my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {};
-
- my @cmd = ('git',
- git_dir_option $srcdir,
- qw(log --log-size),
- '--pretty=format:%H:%ct %an <%ae>%n%n'.$format_string, @ARGV);
- open PIPE, '-|', @cmd
- or die ("$ME: failed to run '". quoted_cmd (@cmd) ."': $!\n"
- . "(Is your Git too old? Version 1.5.1 or later is required.)\n");
-
- my $prev_multi_paragraph;
- my $prev_date_line = '';
- my @prev_coauthors = ();
- while (1)
- {
- defined (my $in = <PIPE>)
- or last;
- $in =~ /^log size (\d+)$/
- or die "$ME:$.: Invalid line (expected log size):\n$in";
- my $log_nbytes = $1;
-
- my $log;
- my $n_read = read PIPE, $log, $log_nbytes;
- $n_read == $log_nbytes
- or die "$ME:$.: unexpected EOF\n";
-
- # Extract leading hash.
- my ($sha, $rest) = split ':', $log, 2;
- defined $sha
- or die "$ME:$.: malformed log entry\n";
- $sha =~ /^[0-9a-fA-F]{40}$/
- or die "$ME:$.: invalid SHA1: $sha\n";
-
- # If this commit's log requires any transformation, do it now.
- my $code = $amend_code->{$sha};
- if (defined $code)
- {
- eval 'use Safe';
- my $s = new Safe;
- # Put the unpreprocessed entry into "$_".
- $_ = $rest;
-
- # Let $code operate on it, safely.
- my $r = $s->reval("$code")
- or die "$ME:$.:$sha: failed to eval \"$code\":address@hidden";
-
- # Note that we've used this entry.
- delete $amend_code->{$sha};
-
- # Update $rest upon success.
- $rest = $_;
- }
-
- # Remove lines inserted by "git cherry-pick".
- if ($strip_cherry_pick)
- {
- $rest =~ s/^\s*Conflicts:\n.*//sm;
- $rest =~ s/^\s*\(cherry picked from commit [\da-f]+\)\n//m;
- }
-
- my @line = split "\n", $rest;
- my $author_line = shift @line;
- defined $author_line
- or die "$ME:$.: unexpected EOF\n";
- $author_line =~ /^(\d+) (.*>)$/
- or die "$ME:$.: Invalid line "
- . "(expected date/author/email):\n$author_line\n";
-
- # Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog
- # `(tiny change)' annotation.
- my $tiny = (grep (/^Copyright-paperwork-exempt:\s+[Yy]es$/, @line)
- ? ' (tiny change)' : '');
-
- my $date_line = sprintf "%s %s$tiny\n",
- strftime ("%F", localtime ($1)), $2;
-
- my @coauthors = grep /^Co-authored-by:.*$/, @line;
- # Omit meta-data lines we've already interpreted.
- @line = grep !/^(?:Signed-off-by:[ ].*>$
- |Co-authored-by:[ ]
- |Copyright-paperwork-exempt:[ ]
- )/x, @line;
-
- # Remove leading and trailing blank lines.
- if (@line)
- {
- while ($line[0] =~ /^\s*$/) { shift @line; }
- while ($line[$#line] =~ /^\s*$/) { pop @line; }
- }
-
- # Record whether there are two or more paragraphs.
- my $multi_paragraph = grep /^\s*$/, @line;
-
- # Format 'Co-authored-by: A U Thor <address@hidden>' lines in
- # standard multi-author ChangeLog format.
- for (@coauthors)
- {
- s/^Co-authored-by:\s*/\t /;
- s/\s*</ </;
-
- /<address@hidden>/
- or warn "$ME: warning: missing email address for "
- . substr ($_, 5) . "\n";
- }
-
- # If clustering of commit messages has been disabled, if this header
- # would be different from the previous date/name/email/coauthors header,
- # or if this or the previous entry consists of two or more paragraphs,
- # then print the header.
- if ( ! $cluster
- || $date_line ne $prev_date_line
- || "@coauthors" ne "@prev_coauthors"
- || $multi_paragraph
- || $prev_multi_paragraph)
- {
- $prev_date_line eq ''
- or print "\n";
- print $date_line;
- @coauthors
- and print join ("\n", @coauthors), "\n";
- }
- $prev_date_line = $date_line;
- @prev_coauthors = @coauthors;
- $prev_multi_paragraph = $multi_paragraph;
-
- # If there were any lines
- if (@line == 0)
- {
- warn "$ME: warning: empty commit message:\n $date_line\n";
- }
- else
- {
- if ($append_dot)
- {
- # If the first line of the message has enough room, then
- if (length $line[0] < 72)
- {
- # append a dot if there is no other punctuation or blank
- # at the end.
- $line[0] =~ /[[:punct:]\s]$/
- or $line[0] .= '.';
- }
- }
-
- # Remove one additional leading TAB from each line.
- $strip_tab
- and map { s/^\t// } @line;
-
- # Prefix each non-empty line with a TAB.
- @line = map { length $_ ? "\t$_" : '' } @line;
-
- print "\n", join ("\n", @line), "\n";
- }
-
- defined ($in = <PIPE>)
- or last;
- $in ne "\n"
- and die "$ME:$.: unexpected line:\n$in";
- }
-
- close PIPE
- or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n";
- # FIXME-someday: include $PROCESS_STATUS in the diagnostic
-
- # Complain about any unused entry in the --amend=F specified file.
- my $fail = 0;
- foreach my $sha (keys %$amend_code)
- {
- warn "$ME:$amend_file: unused entry: $sha\n";
- $fail = 1;
- }
-
- exit $fail;
-}
-
-# Local Variables:
-# mode: perl
-# indent-tabs-mode: nil
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "my $VERSION = '"
-# time-stamp-format: "%:y-%02m-%02d %02H:%02M"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "'; # UTC"
-# End:
diff --git a/i386/i386/.gitignore b/i386/i386/.gitignore
deleted file mode 100644
index 4520a2a..0000000
--- a/i386/i386/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/i386asm.h
diff --git a/ipc/ipc_print.h b/ipc/ipc_print.h
deleted file mode 100644
index ef676a7..0000000
--- a/ipc/ipc_print.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef _IPC_PRINT_H_
-#define _IPC_PRINT_H_
-
-#if MACH_KDB
-
-#include <mach/mach_types.h>
-#include <mach/message.h>
-#include <ipc/ipc_types.h>
-
-extern void ipc_port_print(ipc_port_t);
-
-extern void ipc_pset_print(ipc_pset_t);
-
-extern void ipc_kmsg_print(ipc_kmsg_t);
-
-extern void ipc_msg_print(mach_msg_header_t*);
-
-#endif /* MACH_KDB */
-
-#endif /* IPC_PRINT_H */
diff --git a/kern/server_loop.ch b/kern/server_loop.ch
deleted file mode 100644
index 409e013..0000000
--- a/kern/server_loop.ch
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- * Software Distribution Coordinator or address@hidden
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- */
-/*
- * File: kern/server_loop.c
- *
- * A common server loop for builtin tasks.
- */
-
-/*
- * Must define symbols for:
- * SERVER_NAME String name of this module
- * SERVER_LOOP Routine name for the loop
- * SERVER_DISPATCH MiG function(s) to handle message
- *
- * Must redefine symbols for pager_server functions.
- */
-
-#include <kern/debug.h>
-#include <kern/kalloc.h>
-#include <mach/port.h>
-#include <mach/message.h>
-#include <vm/vm_kern.h> /* for kernel_map */
-
-void SERVER_LOOP(rcv_set, max_size)
-{
- register mach_msg_header_t *in_msg;
- register mach_msg_header_t *out_msg;
- register mach_msg_header_t *tmp_msg;
- vm_offset_t messages;
- mach_msg_return_t r;
-
- /*
- * Allocate our message buffers.
- */
-
- messages = kalloc(2 * max_size);
- if (messages == 0)
- panic(SERVER_NAME);
- in_msg = (mach_msg_header_t *) messages;
- out_msg = (mach_msg_header_t *) (messages + max_size);
-
- /*
- * Service loop... receive messages and process them.
- */
-
- for (;;) {
- /* receive first message */
-
- receive_msg:
- r = mach_msg(in_msg, MACH_RCV_MSG, 0, max_size, rcv_set,
- MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
- if (r == MACH_MSG_SUCCESS)
- break;
-
- printf("%s: receive failed, 0x%x.\n", SERVER_NAME, r);
- }
-
- for (;;) {
- /* process request message */
-
- (void) SERVER_DISPATCH(in_msg, out_msg);
-
- /* send reply and receive next request */
-
- if (out_msg->msgh_remote_port == MACH_PORT_NULL)
- goto receive_msg;
-
- r = mach_msg(out_msg, MACH_SEND_MSG|MACH_RCV_MSG,
- out_msg->msgh_size, max_size, rcv_set,
- MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
- if (r != MACH_MSG_SUCCESS) {
- printf("%s: send/receive failed, 0x%x.\n",
- SERVER_NAME, r);
- goto receive_msg;
- }
-
- /* swap message buffers */
-
- tmp_msg = in_msg; in_msg = out_msg; out_msg = tmp_msg;
- }
-}
diff --git a/linux/src/arch/i386/kernel/irq.c b/linux/src/arch/i386/kernel/irq.c
deleted file mode 100644
index 6db6115..0000000
--- a/linux/src/arch/i386/kernel/irq.c
+++ /dev/null
@@ -1,582 +0,0 @@
-/*
- * linux/arch/i386/kernel/irq.c
- *
- * Copyright (C) 1992 Linus Torvalds
- *
- * This file contains the code used by various IRQ handling routines:
- * asking for different IRQ's should be done through these routines
- * instead of just grabbing them. Thus setups with different IRQ numbers
- * shouldn't result in any weird surprises, and installing new handlers
- * should be easier.
- */
-
-/*
- * IRQ's are in fact implemented a bit like signal handlers for the kernel.
- * Naturally it's not a 1:1 relation, but there are similarities.
- */
-
-#include <linux/ptrace.h>
-#include <linux/errno.h>
-#include <linux/kernel_stat.h>
-#include <linux/signal.h>
-#include <linux/sched.h>
-#include <linux/ioport.h>
-#include <linux/interrupt.h>
-#include <linux/timex.h>
-#include <linux/malloc.h>
-#include <linux/random.h>
-
-#include <asm/system.h>
-#include <asm/io.h>
-#include <asm/irq.h>
-#include <asm/bitops.h>
-#include <asm/smp.h>
-
-#define CR0_NE 32
-
-static unsigned char cache_21 = 0xff;
-static unsigned char cache_A1 = 0xff;
-
-#ifdef __SMP_PROF__
-static unsigned int int_count[NR_CPUS][NR_IRQS] = {{0},};
-#endif
-
-static inline void mask_irq(unsigned int irq_nr)
-{
- unsigned char mask;
-
- mask = 1 << (irq_nr & 7);
- if (irq_nr < 8) {
- cache_21 |= mask;
- outb(cache_21,0x21);
- } else {
- cache_A1 |= mask;
- outb(cache_A1,0xA1);
- }
-}
-
-static inline void unmask_irq(unsigned int irq_nr)
-{
- unsigned char mask;
-
- mask = ~(1 << (irq_nr & 7));
- if (irq_nr < 8) {
- cache_21 &= mask;
- outb(cache_21,0x21);
- } else {
- cache_A1 &= mask;
- outb(cache_A1,0xA1);
- }
-}
-
-void disable_irq(unsigned int irq_nr)
-{
- unsigned long flags;
-
- save_flags(flags);
- cli();
- mask_irq(irq_nr);
- restore_flags(flags);
-}
-
-void enable_irq(unsigned int irq_nr)
-{
- unsigned long flags;
- save_flags(flags);
- cli();
- unmask_irq(irq_nr);
- restore_flags(flags);
-}
-
-/*
- * This builds up the IRQ handler stubs using some ugly macros in irq.h
- *
- * These macros create the low-level assembly IRQ routines that do all
- * the operations that are needed to keep the AT interrupt-controller
- * happy. They are also written to be fast - and to disable interrupts
- * as little as humanly possible.
- *
- * NOTE! These macros expand to three different handlers for each line: one
- * complete handler that does all the fancy stuff (including signal handling),
- * and one fast handler that is meant for simple IRQ's that want to be
- * atomic. The specific handler is chosen depending on the SA_INTERRUPT
- * flag when installing a handler. Finally, one "bad interrupt" handler, that
- * is used when no handler is present.
- *
- * The timer interrupt is handled specially to insure that the jiffies
- * variable is updated at all times. Specifically, the timer interrupt is
- * just like the complete handlers except that it is invoked with interrupts
- * disabled and should never re-enable them. If other interrupts were
- * allowed to be processed while the timer interrupt is active, then the
- * other interrupts would have to avoid using the jiffies variable for delay
- * and interval timing operations to avoid hanging the system.
- */
-BUILD_TIMER_IRQ(FIRST,0,0x01)
-BUILD_IRQ(FIRST,1,0x02)
-BUILD_IRQ(FIRST,2,0x04)
-BUILD_IRQ(FIRST,3,0x08)
-BUILD_IRQ(FIRST,4,0x10)
-BUILD_IRQ(FIRST,5,0x20)
-BUILD_IRQ(FIRST,6,0x40)
-BUILD_IRQ(FIRST,7,0x80)
-BUILD_IRQ(SECOND,8,0x01)
-BUILD_IRQ(SECOND,9,0x02)
-BUILD_IRQ(SECOND,10,0x04)
-BUILD_IRQ(SECOND,11,0x08)
-BUILD_IRQ(SECOND,12,0x10)
-#ifdef __SMP__
-BUILD_MSGIRQ(SECOND,13,0x20)
-#else
-BUILD_IRQ(SECOND,13,0x20)
-#endif
-BUILD_IRQ(SECOND,14,0x40)
-BUILD_IRQ(SECOND,15,0x80)
-#ifdef __SMP__
-BUILD_RESCHEDIRQ(16)
-#endif
-
-/*
- * Pointers to the low-level handlers: first the general ones, then the
- * fast ones, then the bad ones.
- */
-static void (*interrupt[17])(void) = {
- IRQ0_interrupt, IRQ1_interrupt, IRQ2_interrupt, IRQ3_interrupt,
- IRQ4_interrupt, IRQ5_interrupt, IRQ6_interrupt, IRQ7_interrupt,
- IRQ8_interrupt, IRQ9_interrupt, IRQ10_interrupt, IRQ11_interrupt,
- IRQ12_interrupt, IRQ13_interrupt, IRQ14_interrupt, IRQ15_interrupt
-#ifdef __SMP__
- ,IRQ16_interrupt
-#endif
-};
-
-static void (*fast_interrupt[16])(void) = {
- fast_IRQ0_interrupt, fast_IRQ1_interrupt,
- fast_IRQ2_interrupt, fast_IRQ3_interrupt,
- fast_IRQ4_interrupt, fast_IRQ5_interrupt,
- fast_IRQ6_interrupt, fast_IRQ7_interrupt,
- fast_IRQ8_interrupt, fast_IRQ9_interrupt,
- fast_IRQ10_interrupt, fast_IRQ11_interrupt,
- fast_IRQ12_interrupt, fast_IRQ13_interrupt,
- fast_IRQ14_interrupt, fast_IRQ15_interrupt
-};
-
-static void (*bad_interrupt[16])(void) = {
- bad_IRQ0_interrupt, bad_IRQ1_interrupt,
- bad_IRQ2_interrupt, bad_IRQ3_interrupt,
- bad_IRQ4_interrupt, bad_IRQ5_interrupt,
- bad_IRQ6_interrupt, bad_IRQ7_interrupt,
- bad_IRQ8_interrupt, bad_IRQ9_interrupt,
- bad_IRQ10_interrupt, bad_IRQ11_interrupt,
- bad_IRQ12_interrupt, bad_IRQ13_interrupt,
- bad_IRQ14_interrupt, bad_IRQ15_interrupt
-};
-
-/*
- * Initial irq handlers.
- */
-
-static void no_action(int cpl, void *dev_id, struct pt_regs *regs) { }
-
-#ifdef __SMP__
-
-/*
- * On SMP boards, irq13 is used for interprocessor interrupts (IPI's).
- */
-static struct irqaction irq13 = { smp_message_irq, SA_INTERRUPT, 0, "IPI",
NULL, NULL };
-
-#else
-
-/*
- * Note that on a 486, we don't want to do a SIGFPE on a irq13
- * as the irq is unreliable, and exception 16 works correctly
- * (ie as explained in the intel literature). On a 386, you
- * can't use exception 16 due to bad IBM design, so we have to
- * rely on the less exact irq13.
- *
- * Careful.. Not only is IRQ13 unreliable, but it is also
- * leads to races. IBM designers who came up with it should
- * be shot.
- */
-
-
-static void math_error_irq(int cpl, void *dev_id, struct pt_regs *regs)
-{
- outb(0,0xF0);
- if (ignore_irq13 || !hard_math)
- return;
- math_error();
-}
-
-static struct irqaction irq13 = { math_error_irq, 0, 0, "math error", NULL,
NULL };
-
-#endif
-
-/*
- * IRQ2 is cascade interrupt to second interrupt controller
- */
-static struct irqaction irq2 = { no_action, 0, 0, "cascade", NULL, NULL};
-
-static struct irqaction *irq_action[16] = {
- NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL
-};
-
-int get_irq_list(char *buf)
-{
- int i, len = 0;
- struct irqaction * action;
-
- for (i = 0 ; i < 16 ; i++) {
- action = irq_action[i];
- if (!action)
- continue;
- len += sprintf(buf+len, "%2d: %10u %c %s",
- i, kstat.interrupts[i],
- (action->flags & SA_INTERRUPT) ? '+' : ' ',
- action->name);
- for (action=action->next; action; action = action->next) {
- len += sprintf(buf+len, ",%s %s",
- (action->flags & SA_INTERRUPT) ? " +" : "",
- action->name);
- }
- len += sprintf(buf+len, "\n");
- }
-/*
- * Linus - should you add NMI counts here ?????
- */
-#ifdef __SMP_PROF__
- len+=sprintf(buf+len, "IPI: %8lu received\n",
- ipi_count);
-#endif
- return len;
-}
-
-#ifdef __SMP_PROF__
-
-int get_smp_prof_list(char *buf) {
- int i,j, len = 0;
- struct irqaction * action;
- unsigned long sum_spins = 0;
- unsigned long sum_spins_syscall = 0;
- unsigned long sum_spins_sys_idle = 0;
- unsigned long sum_smp_idle_count = 0;
-
- for (i=0;i<smp_num_cpus;i++) {
- int cpunum = cpu_logical_map[i];
- sum_spins+=smp_spins[cpunum];
- sum_spins_syscall+=smp_spins_syscall[cpunum];
- sum_spins_sys_idle+=smp_spins_sys_idle[cpunum];
- sum_smp_idle_count+=smp_idle_count[cpunum];
- }
-
- len += sprintf(buf+len,"CPUS: %10i \n", smp_num_cpus);
- len += sprintf(buf+len," SUM ");
- for (i=0;i<smp_num_cpus;i++)
- len += sprintf(buf+len," P%1d ",cpu_logical_map[i]);
- len += sprintf(buf+len,"\n");
- for (i = 0 ; i < NR_IRQS ; i++) {
- action = *(i + irq_action);
- if (!action || !action->handler)
- continue;
- len += sprintf(buf+len, "%3d: %10d ",
- i, kstat.interrupts[i]);
- for (j=0;j<smp_num_cpus;j++)
- len+=sprintf(buf+len, "%10d ",
- int_count[cpu_logical_map[j]][i]);
- len += sprintf(buf+len, "%c %s",
- (action->flags & SA_INTERRUPT) ? '+' : ' ',
- action->name);
- for (action=action->next; action; action = action->next) {
- len += sprintf(buf+len, ",%s %s",
- (action->flags & SA_INTERRUPT) ? " +" : "",
- action->name);
- }
- len += sprintf(buf+len, "\n");
- }
- len+=sprintf(buf+len, "LCK: %10lu",
- sum_spins);
-
- for (i=0;i<smp_num_cpus;i++)
- len+=sprintf(buf+len," %10lu",smp_spins[cpu_logical_map[i]]);
-
- len +=sprintf(buf+len," spins from int\n");
-
- len+=sprintf(buf+len, "LCK: %10lu",
- sum_spins_syscall);
-
- for (i=0;i<smp_num_cpus;i++)
- len+=sprintf(buf+len,"
%10lu",smp_spins_syscall[cpu_logical_map[i]]);
-
- len +=sprintf(buf+len," spins from syscall\n");
-
- len+=sprintf(buf+len, "LCK: %10lu",
- sum_spins_sys_idle);
-
- for (i=0;i<smp_num_cpus;i++)
- len+=sprintf(buf+len,"
%10lu",smp_spins_sys_idle[cpu_logical_map[i]]);
-
- len +=sprintf(buf+len," spins from sysidle\n");
- len+=sprintf(buf+len,"IDLE %10lu",sum_smp_idle_count);
-
- for (i=0;i<smp_num_cpus;i++)
- len+=sprintf(buf+len,"
%10lu",smp_idle_count[cpu_logical_map[i]]);
-
- len +=sprintf(buf+len," idle ticks\n");
-
- len+=sprintf(buf+len, "IPI: %10lu received\n",
- ipi_count);
-
- return len;
-}
-#endif
-
-
-
-/*
- * do_IRQ handles IRQ's that have been installed without the
- * SA_INTERRUPT flag: it uses the full signal-handling return
- * and runs with other interrupts enabled. All relatively slow
- * IRQ's should use this format: notably the keyboard/timer
- * routines.
- */
-asmlinkage void do_IRQ(int irq, struct pt_regs * regs)
-{
- struct irqaction * action = *(irq + irq_action);
- int do_random = 0;
- int c,intm,mask;
-#ifdef IRQ_DEBUG
- static int count;
- if (smp_processor_id() != 0 && count++ < 1000)
- printk("IRQ %d: done by CPU %d\n",irq,smp_processor_id());
-#endif
- if (irq >= 8) {
- c = cache_A1;
- intm = inb(0xA1);
- mask = 1 << (irq - 8);
- } else {
- c = cache_21;
- intm = inb(0x21);
- mask = 1 << irq;
- }
- if (!(c & mask) || !(intm & mask)) {
-#ifdef IRQ_DEBUG
- printk("IRQ %d (proc %d):cache_x1=0x%x,INT mask=0x%x\n", irq,
smp_processor_id(),c,intm);
-#endif
- /* better to return because the interrupt may be asserted again,
- the bad thing is that we may loose some interrupts */
- return;
- }
-#ifdef __SMP__
- if(smp_threads_ready && active_kernel_processor!=smp_processor_id())
- panic("IRQ %d: active processor set wrongly(%d not %d).\n",
irq, active_kernel_processor, smp_processor_id());
-#endif
-
- kstat.interrupts[irq]++;
-#ifdef __SMP_PROF__
- int_count[smp_processor_id()][irq]++;
-#endif
- while (action) {
- do_random |= action->flags;
- action->handler(irq, action->dev_id, regs);
- action = action->next;
- }
- if (do_random & SA_SAMPLE_RANDOM)
- add_interrupt_randomness(irq);
-}
-
-/*
- * do_fast_IRQ handles IRQ's that don't need the fancy interrupt return
- * stuff - the handler is also running with interrupts disabled unless
- * it explicitly enables them later.
- */
-asmlinkage void do_fast_IRQ(int irq)
-{
- struct irqaction * action = *(irq + irq_action);
- int do_random = 0;
-
-#ifdef __SMP__
- /* IRQ 13 is allowed - that's a flush tlb */
- if(smp_threads_ready && active_kernel_processor!=smp_processor_id() &&
irq!=13)
- panic("fast_IRQ %d: active processor set wrongly(%d not
%d).\n", irq, active_kernel_processor, smp_processor_id());
-#endif
-
- kstat.interrupts[irq]++;
-#ifdef __SMP_PROF__
- int_count[smp_processor_id()][irq]++;
-#endif
- while (action) {
- do_random |= action->flags;
- action->handler(irq, action->dev_id, NULL);
- action = action->next;
- }
- if (do_random & SA_SAMPLE_RANDOM)
- add_interrupt_randomness(irq);
-}
-
-int setup_x86_irq(int irq, struct irqaction * new)
-{
- int shared = 0;
- struct irqaction *old, **p;
- unsigned long flags;
-
- p = irq_action + irq;
- if ((old = *p) != NULL) {
- /* Can't share interrupts unless both agree to */
- if (!(old->flags & new->flags & SA_SHIRQ))
- return -EBUSY;
-
- /* Can't share interrupts unless both are same type */
- if ((old->flags ^ new->flags) & SA_INTERRUPT)
- return -EBUSY;
-
- /* add new interrupt at end of irq queue */
- do {
- p = &old->next;
- old = *p;
- } while (old);
- shared = 1;
- }
-
- if (new->flags & SA_SAMPLE_RANDOM)
- rand_initialize_irq(irq);
-
- save_flags(flags);
- cli();
- *p = new;
-
- if (!shared) {
- if (new->flags & SA_INTERRUPT)
- set_intr_gate(0x20+irq,fast_interrupt[irq]);
- else
- set_intr_gate(0x20+irq,interrupt[irq]);
- unmask_irq(irq);
- }
- restore_flags(flags);
- return 0;
-}
-
-int request_irq(unsigned int irq,
- void (*handler)(int, void *, struct pt_regs *),
- unsigned long irqflags,
- const char * devname,
- void *dev_id)
-{
- int retval;
- struct irqaction * action;
-
- if (irq > 15)
- return -EINVAL;
- if (!handler)
- return -EINVAL;
-
- action = (struct irqaction *)kmalloc(sizeof(struct irqaction),
GFP_KERNEL);
- if (!action)
- return -ENOMEM;
-
- action->handler = handler;
- action->flags = irqflags;
- action->mask = 0;
- action->name = devname;
- action->next = NULL;
- action->dev_id = dev_id;
-
- retval = setup_x86_irq(irq, action);
-
- if (retval)
- kfree(action);
- return retval;
-}
-
-void free_irq(unsigned int irq, void *dev_id)
-{
- struct irqaction * action, **p;
- unsigned long flags;
-
- if (irq > 15) {
- printk("Trying to free IRQ%d\n",irq);
- return;
- }
- for (p = irq + irq_action; (action = *p) != NULL; p = &action->next) {
- if (action->dev_id != dev_id)
- continue;
-
- /* Found it - now free it */
- save_flags(flags);
- cli();
- *p = action->next;
- if (!irq[irq_action]) {
- mask_irq(irq);
- set_intr_gate(0x20+irq,bad_interrupt[irq]);
- }
- restore_flags(flags);
- kfree(action);
- return;
- }
- printk("Trying to free free IRQ%d\n",irq);
-}
-
-unsigned long probe_irq_on (void)
-{
- unsigned int i, irqs = 0, irqmask;
- unsigned long delay;
-
- /* first, enable any unassigned irqs */
- for (i = 15; i > 0; i--) {
- if (!irq_action[i]) {
- enable_irq(i);
- irqs |= (1 << i);
- }
- }
-
- /* wait for spurious interrupts to mask themselves out again */
- for (delay = jiffies + HZ/10; delay > jiffies; )
- /* about 100ms delay */;
-
- /* now filter out any obviously spurious interrupts */
- irqmask = (((unsigned int)cache_A1)<<8) | (unsigned int)cache_21;
- return irqs & ~irqmask;
-}
-
-int probe_irq_off (unsigned long irqs)
-{
- unsigned int i, irqmask;
-
- irqmask = (((unsigned int)cache_A1)<<8) | (unsigned int)cache_21;
-#ifdef DEBUG
- printk("probe_irq_off: irqs=0x%04lx irqmask=0x%04x\n", irqs, irqmask);
-#endif
- irqs &= irqmask;
- if (!irqs)
- return 0;
- i = ffz(~irqs);
- if (irqs != (irqs & (1 << i)))
- i = -i;
- return i;
-}
-
-void init_IRQ(void)
-{
- int i;
- static unsigned char smptrap=0;
- if(smptrap)
- return;
- smptrap=1;
-
- /* set the clock to 100 Hz */
- outb_p(0x34,0x43); /* binary, mode 2, LSB/MSB, ch 0 */
- outb_p(LATCH & 0xff , 0x40); /* LSB */
- outb(LATCH >> 8 , 0x40); /* MSB */
- for (i = 0; i < 16 ; i++)
- set_intr_gate(0x20+i,bad_interrupt[i]);
- /* This bit is a hack because we don't send timer messages to all
processors yet */
- /* It has to be here .. it doesn't work if you put it down the bottom -
assembler explodes 8) */
-#ifdef __SMP__
- set_intr_gate(0x20+i, interrupt[i]); /* IRQ '16' - IPI for
rescheduling */
-#endif
- request_region(0x20,0x20,"pic1");
- request_region(0xa0,0x20,"pic2");
- setup_x86_irq(2, &irq2);
- setup_x86_irq(13, &irq13);
-}
diff --git a/linux/src/drivers/block/floppy.c b/linux/src/drivers/block/floppy.c
deleted file mode 100644
index 1b96c44..0000000
--- a/linux/src/drivers/block/floppy.c
+++ /dev/null
@@ -1,4284 +0,0 @@
-/*
- * linux/kernel/floppy.c
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- * Copyright (C) 1993, 1994 Alain Knaff
- */
-/*
- * 02.12.91 - Changed to static variables to indicate need for reset
- * and recalibrate. This makes some things easier (output_byte reset
- * checking etc), and means less interrupt jumping in case of errors,
- * so the code is hopefully easier to understand.
- */
-
-/*
- * This file is certainly a mess. I've tried my best to get it working,
- * but I don't like programming floppies, and I have only one anyway.
- * Urgel. I should check for more errors, and do more graceful error
- * recovery. Seems there are problems with several drives. I've tried to
- * correct them. No promises.
- */
-
-/*
- * As with hd.c, all routines within this file can (and will) be called
- * by interrupts, so extreme caution is needed. A hardware interrupt
- * handler may not sleep, or a kernel panic will happen. Thus I cannot
- * call "floppy-on" directly, but have to set a special timer interrupt
- * etc.
- */
-
-/*
- * 28.02.92 - made track-buffering routines, based on the routines written
- * by address@hidden (Lawrence Foard). Linus.
- */
-
-/*
- * Automatic floppy-detection and formatting written by Werner Almesberger
- * (address@hidden), who also corrected some problems with
- * the floppy-change signal detection.
- */
-
-/*
- * 1992/7/22 -- Hennus Bergman: Added better error reporting, fixed
- * FDC data overrun bug, added some preliminary stuff for vertical
- * recording support.
- *
- * 1992/9/17: Added DMA allocation & DMA functions. -- hhb.
- *
- * TODO: Errors are still not counted properly.
- */
-
-/* 1992/9/20
- * Modifications for ``Sector Shifting'' by Rob Hooft (address@hidden)
- * modeled after the freeware MS-DOS program fdformat/88 V1.8 by
- * Christoph H. Hochst\"atter.
- * I have fixed the shift values to the ones I always use. Maybe a new
- * ioctl() should be created to be able to modify them.
- * There is a bug in the driver that makes it impossible to format a
- * floppy as the first thing after bootup.
- */
-
-/*
- * 1993/4/29 -- Linus -- cleaned up the timer handling in the kernel, and
- * this helped the floppy driver as well. Much cleaner, and still seems to
- * work.
- */
-
-/* 1994/6/24 --bbroad-- added the floppy table entries and made
- * minor modifications to allow 2.88 floppies to be run.
- */
-
-/* 1994/7/13 -- Paul Vojta -- modified the probing code to allow three or more
- * disk types.
- */
-
-/*
- * 1994/8/8 -- Alain Knaff -- Switched to fdpatch driver: Support for bigger
- * format bug fixes, but unfortunately some new bugs too...
- */
-
-/* 1994/9/17 -- Koen Holtman -- added logging of physical floppy write
- * errors to allow safe writing by specialized programs.
- */
-
-/* 1995/4/24 -- Dan Fandrich -- added support for Commodore 1581 3.5" disks
- * by defining bit 1 of the "stretch" parameter to mean put sectors on the
- * opposite side of the disk, leaving the sector IDs alone (i.e. Commodore's
- * drives are "upside-down").
- */
-
-/*
- * 1995/8/26 -- Andreas Busse -- added Mips support.
- */
-
-/*
- * 1995/10/18 -- Ralf Baechle -- Portability cleanup; move machine dependent
- * features to asm/floppy.h.
- */
-
-
-#define FLOPPY_SANITY_CHECK
-#undef FLOPPY_SILENT_DCL_CLEAR
-
-#define REALLY_SLOW_IO
-
-#define DEBUGT 2
-#define DCL_DEBUG /* debug disk change line */
-
-/* do print messages for unexpected interrupts */
-static int print_unex=1;
-#include <linux/utsname.h>
-#include <linux/module.h>
-
-/* the following is the mask of allowed drives. By default units 2 and
- * 3 of both floppy controllers are disabled, because switching on the
- * motor of these drives causes system hangs on some PCI computers. drive
- * 0 is the low bit (0x1), and drive 7 is the high bit (0x80). Bits are on if
- * a drive is allowed. */
-static int FLOPPY_IRQ=6;
-static int FLOPPY_DMA=2;
-static int allowed_drive_mask = 0x33;
-
-static int irqdma_allocated = 0;
-
-#include <linux/sched.h>
-#include <linux/fs.h>
-#include <linux/kernel.h>
-#include <linux/timer.h>
-#include <linux/tqueue.h>
-#define FDPATCHES
-#include <linux/fdreg.h>
-
-
-#include <linux/fd.h>
-
-
-#define OLDFDRAWCMD 0x020d /* send a raw command to the FDC */
-
-struct old_floppy_raw_cmd {
- void *data;
- long length;
-
- unsigned char rate;
- unsigned char flags;
- unsigned char cmd_count;
- unsigned char cmd[9];
- unsigned char reply_count;
- unsigned char reply[7];
- int track;
-};
-
-#include <linux/errno.h>
-#include <linux/malloc.h>
-#include <linux/mm.h>
-#include <linux/string.h>
-#include <linux/fcntl.h>
-#include <linux/delay.h>
-#include <linux/mc146818rtc.h> /* CMOS defines */
-#include <linux/ioport.h>
-#include <linux/interrupt.h>
-
-#include <asm/dma.h>
-#include <asm/irq.h>
-#include <asm/system.h>
-#include <asm/io.h>
-#include <asm/segment.h>
-
-static int use_virtual_dma=0; /* virtual DMA for Intel */
-static unsigned short virtual_dma_port=0x3f0;
-void floppy_interrupt(int irq, void *dev_id, struct pt_regs * regs);
-static int set_dor(int fdc, char mask, char data);
-static inline int __get_order(unsigned long size);
-#include <asm/floppy.h>
-
-
-#define MAJOR_NR FLOPPY_MAJOR
-
-#include <linux/blk.h>
-#include <linux/cdrom.h> /* for the compatibility eject ioctl */
-
-#include <linux/dev/glue/glue.h>
-
-
-#ifndef FLOPPY_MOTOR_MASK
-#define FLOPPY_MOTOR_MASK 0xf0
-#endif
-
-#ifndef fd_get_dma_residue
-#define fd_get_dma_residue() get_dma_residue(FLOPPY_DMA)
-#endif
-
-/* Dma Memory related stuff */
-
-/* Pure 2^n version of get_order */
-static inline int __get_order(unsigned long size)
-{
- int order;
-
- size = (size-1) >> (PAGE_SHIFT-1);
- order = -1;
- do {
- size >>= 1;
- order++;
- } while (size);
- return order;
-}
-
-#ifndef fd_dma_mem_free
-#define fd_dma_mem_free(addr, size) free_pages(addr, __get_order(size))
-#endif
-
-#ifndef fd_dma_mem_alloc
-#define fd_dma_mem_alloc(size) __get_dma_pages(GFP_KERNEL,__get_order(size))
-#endif
-
-/* End dma memory related stuff */
-
-static unsigned int fake_change = 0;
-static int initialising=1;
-
-static inline int TYPE(kdev_t x) {
- return (MINOR(x)>>2) & 0x1f;
-}
-static inline int DRIVE(kdev_t x) {
- return (MINOR(x)&0x03) | ((MINOR(x)&0x80) >> 5);
-}
-#define ITYPE(x) (((x)>>2) & 0x1f)
-#define TOMINOR(x) ((x & 3) | ((x & 4) << 5))
-#define UNIT(x) ((x) & 0x03) /* drive on fdc */
-#define FDC(x) (((x) & 0x04) >> 2) /* fdc of drive */
-#define REVDRIVE(fdc, unit) ((unit) + ((fdc) << 2))
- /* reverse mapping from unit and fdc to drive */
-#define DP (&drive_params[current_drive])
-#define DRS (&drive_state[current_drive])
-#define DRWE (&write_errors[current_drive])
-#define FDCS (&fdc_state[fdc])
-#define CLEARF(x) (clear_bit(x##_BIT, &DRS->flags))
-#define SETF(x) (set_bit(x##_BIT, &DRS->flags))
-#define TESTF(x) (test_bit(x##_BIT, &DRS->flags))
-
-#define UDP (&drive_params[drive])
-#define UDRS (&drive_state[drive])
-#define UDRWE (&write_errors[drive])
-#define UFDCS (&fdc_state[FDC(drive)])
-#define UCLEARF(x) (clear_bit(x##_BIT, &UDRS->flags))
-#define USETF(x) (set_bit(x##_BIT, &UDRS->flags))
-#define UTESTF(x) (test_bit(x##_BIT, &UDRS->flags))
-
-#define DPRINT(format, args...) printk(DEVICE_NAME "%d: " format,
current_drive , ## args)
-
-#define PH_HEAD(floppy,head) (((((floppy)->stretch & 2) >>1) ^ head) << 2)
-#define STRETCH(floppy) ((floppy)->stretch & FD_STRETCH)
-
-#define CLEARSTRUCT(x) memset((x), 0, sizeof(*(x)))
-
-#define INT_OFF save_flags(flags); cli()
-#define INT_ON restore_flags(flags)
-
-/* read/write */
-#define COMMAND raw_cmd->cmd[0]
-#define DR_SELECT raw_cmd->cmd[1]
-#define TRACK raw_cmd->cmd[2]
-#define HEAD raw_cmd->cmd[3]
-#define SECTOR raw_cmd->cmd[4]
-#define SIZECODE raw_cmd->cmd[5]
-#define SECT_PER_TRACK raw_cmd->cmd[6]
-#define GAP raw_cmd->cmd[7]
-#define SIZECODE2 raw_cmd->cmd[8]
-#define NR_RW 9
-
-/* format */
-#define F_SIZECODE raw_cmd->cmd[2]
-#define F_SECT_PER_TRACK raw_cmd->cmd[3]
-#define F_GAP raw_cmd->cmd[4]
-#define F_FILL raw_cmd->cmd[5]
-#define NR_F 6
-
-/*
- * Maximum disk size (in kilobytes). This default is used whenever the
- * current disk size is unknown.
- * [Now it is rather a minimum]
- */
-#define MAX_DISK_SIZE 4 /* 3984*/
-
-#define K_64 0x10000 /* 64KB */
-
-/*
- * globals used by 'result()'
- */
-#define MAX_REPLIES 16
-static unsigned char reply_buffer[MAX_REPLIES];
-static int inr; /* size of reply buffer, when called from interrupt */
-#define ST0 (reply_buffer[0])
-#define ST1 (reply_buffer[1])
-#define ST2 (reply_buffer[2])
-#define ST3 (reply_buffer[0]) /* result of GETSTATUS */
-#define R_TRACK (reply_buffer[3])
-#define R_HEAD (reply_buffer[4])
-#define R_SECTOR (reply_buffer[5])
-#define R_SIZECODE (reply_buffer[6])
-
-#define SEL_DLY (2*HZ/100)
-
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
-/*
- * this struct defines the different floppy drive types.
- */
-static struct {
- struct floppy_drive_params params;
- const char *name; /* name printed while booting */
-} default_drive_params[]= {
-/* NOTE: the time values in jiffies should be in msec!
- CMOS drive type
- | Maximum data rate supported by drive type
- | | Head load time, msec
- | | | Head unload time, msec (not used)
- | | | | Step rate interval, usec
- | | | | | Time needed for spinup time (jiffies)
- | | | | | | Timeout for spinning down (jiffies)
- | | | | | | | Spindown offset (where disk stops)
- | | | | | | | | Select delay
- | | | | | | | | | RPS
- | | | | | | | | | | Max number of tracks
- | | | | | | | | | | | Interrupt
timeout
- | | | | | | | | | | | | Max
nonintlv. sectors
- | | | | | | | | | | | | | -Max
Errors- flags */
-{{0, 500, 16, 16, 8000, 1*HZ, 3*HZ, 0, SEL_DLY, 5, 80, 3*HZ, 20,
{3,1,2,0,2}, 0,
- 0, { 7, 4, 8, 2, 1, 5, 3,10}, 3*HZ/2, 0 }, "unknown" },
-
-{{1, 300, 16, 16, 8000, 1*HZ, 3*HZ, 0, SEL_DLY, 5, 40, 3*HZ, 17,
{3,1,2,0,2}, 0,
- 0, { 1, 0, 0, 0, 0, 0, 0, 0}, 3*HZ/2, 1 }, "360K PC" }, /*5 1/4 360 KB
PC*/
-
-{{2, 500, 16, 16, 6000, 4*HZ/10, 3*HZ, 14, SEL_DLY, 6, 83, 3*HZ, 17,
{3,1,2,0,2}, 0,
- 0, { 2, 5, 6,23,10,20,12, 0}, 3*HZ/2, 2 }, "1.2M" }, /*5 1/4 HD AT*/
-
-{{3, 250, 16, 16, 3000, 1*HZ, 3*HZ, 0, SEL_DLY, 5, 83, 3*HZ, 20,
{3,1,2,0,2}, 0,
- 0, { 4,22,21,30, 3, 0, 0, 0}, 3*HZ/2, 4 }, "720k" }, /*3 1/2 DD*/
-
-{{4, 500, 16, 16, 4000, 4*HZ/10, 3*HZ, 10, SEL_DLY, 5, 83, 3*HZ, 20,
{3,1,2,0,2}, 0,
- 0, { 7, 4,25,22,31,21,29,11}, 3*HZ/2, 7 }, "1.44M" }, /*3 1/2 HD*/
-
-{{5, 1000, 15, 8, 3000, 4*HZ/10, 3*HZ, 10, SEL_DLY, 5, 83, 3*HZ, 40,
{3,1,2,0,2}, 0,
- 0, { 7, 8, 4,25,28,22,31,21}, 3*HZ/2, 8 }, "2.88M AMI BIOS" }, /*3 1/2
ED*/
-
-{{6, 1000, 15, 8, 3000, 4*HZ/10, 3*HZ, 10, SEL_DLY, 5, 83, 3*HZ, 40,
{3,1,2,0,2}, 0,
- 0, { 7, 8, 4,25,28,22,31,21}, 3*HZ/2, 8 }, "2.88M" } /*3 1/2 ED*/
-/* | --autodetected formats--- | | |
- * read_track | | Name printed when booting
- * | Native format
- * Frequency of disk change checks */
-};
-
-static struct floppy_drive_params drive_params[N_DRIVE];
-static struct floppy_drive_struct drive_state[N_DRIVE];
-static struct floppy_write_errors write_errors[N_DRIVE];
-static struct floppy_raw_cmd *raw_cmd, default_raw_cmd;
-
-/*
- * This struct defines the different floppy types.
- *
- * Bit 0 of 'stretch' tells if the tracks need to be doubled for some
- * types (e.g. 360kB diskette in 1.2MB drive, etc.). Bit 1 of 'stretch'
- * tells if the disk is in Commodore 1581 format, which means side 0 sectors
- * are located on side 1 of the disk but with a side 0 ID, and vice-versa.
- * This is the same as the Sharp MZ-80 5.25" CP/M disk format, except that the
- * 1581's logical side 0 is on physical side 1, whereas the Sharp's logical
- * side 0 is on physical side 0 (but with the misnamed sector IDs).
- * 'stretch' should probably be renamed to something more general, like
- * 'options'. Other parameters should be self-explanatory (see also
- * setfdprm(8)).
- */
-static struct floppy_struct floppy_type[32] = {
- { 0, 0,0, 0,0,0x00,0x00,0x00,0x00,NULL }, /* 0 no testing */
- { 720, 9,2,40,0,0x2A,0x02,0xDF,0x50,"d360" }, /* 1 360KB PC */
- { 2400,15,2,80,0,0x1B,0x00,0xDF,0x54,"h1200" }, /* 2 1.2MB AT */
- { 720, 9,1,80,0,0x2A,0x02,0xDF,0x50,"D360" }, /* 3 360KB SS 3.5" */
- { 1440, 9,2,80,0,0x2A,0x02,0xDF,0x50,"D720" }, /* 4 720KB 3.5" */
- { 720, 9,2,40,1,0x23,0x01,0xDF,0x50,"h360" }, /* 5 360KB AT */
- { 1440, 9,2,80,0,0x23,0x01,0xDF,0x50,"h720" }, /* 6 720KB AT */
- { 2880,18,2,80,0,0x1B,0x00,0xCF,0x6C,"H1440" }, /* 7 1.44MB 3.5" */
- { 5760,36,2,80,0,0x1B,0x43,0xAF,0x54,"E2880" }, /* 8 2.88MB 3.5" */
- { 6240,39,2,80,0,0x1B,0x43,0xAF,0x28,"E3120"}, /* 9 3.12MB 3.5" */
-
- { 2880,18,2,80,0,0x25,0x00,0xDF,0x02,"h1440" }, /* 10 1.44MB 5.25" */
- { 3360,21,2,80,0,0x1C,0x00,0xCF,0x0C,"H1680" }, /* 11 1.68MB 3.5" */
- { 820,10,2,41,1,0x25,0x01,0xDF,0x2E,"h410" }, /* 12 410KB 5.25" */
- { 1640,10,2,82,0,0x25,0x02,0xDF,0x2E,"H820" }, /* 13 820KB 3.5" */
- { 2952,18,2,82,0,0x25,0x00,0xDF,0x02,"h1476" }, /* 14 1.48MB 5.25" */
- { 3444,21,2,82,0,0x25,0x00,0xDF,0x0C,"H1722" }, /* 15 1.72MB 3.5" */
- { 840,10,2,42,1,0x25,0x01,0xDF,0x2E,"h420" }, /* 16 420KB 5.25" */
- { 1660,10,2,83,0,0x25,0x02,0xDF,0x2E,"H830" }, /* 17 830KB 3.5" */
- { 2988,18,2,83,0,0x25,0x00,0xDF,0x02,"h1494" }, /* 18 1.49MB 5.25" */
- { 3486,21,2,83,0,0x25,0x00,0xDF,0x0C,"H1743" }, /* 19 1.74 MB 3.5" */
-
- { 1760,11,2,80,0,0x1C,0x09,0xCF,0x00,"h880" }, /* 20 880KB 5.25" */
- { 2080,13,2,80,0,0x1C,0x01,0xCF,0x00,"D1040" }, /* 21 1.04MB 3.5" */
- { 2240,14,2,80,0,0x1C,0x19,0xCF,0x00,"D1120" }, /* 22 1.12MB 3.5" */
- { 3200,20,2,80,0,0x1C,0x20,0xCF,0x2C,"h1600" }, /* 23 1.6MB 5.25" */
- { 3520,22,2,80,0,0x1C,0x08,0xCF,0x2e,"H1760" }, /* 24 1.76MB 3.5" */
- { 3840,24,2,80,0,0x1C,0x20,0xCF,0x00,"H1920" }, /* 25 1.92MB 3.5" */
- { 6400,40,2,80,0,0x25,0x5B,0xCF,0x00,"E3200" }, /* 26 3.20MB 3.5" */
- { 7040,44,2,80,0,0x25,0x5B,0xCF,0x00,"E3520" }, /* 27 3.52MB 3.5" */
- { 7680,48,2,80,0,0x25,0x63,0xCF,0x00,"E3840" }, /* 28 3.84MB 3.5" */
-
- { 3680,23,2,80,0,0x1C,0x10,0xCF,0x00,"H1840" }, /* 29 1.84MB 3.5" */
- { 1600,10,2,80,0,0x25,0x02,0xDF,0x2E,"D800" }, /* 30 800KB 3.5" */
- { 3200,20,2,80,0,0x1C,0x00,0xCF,0x2C,"H1600" }, /* 31 1.6MB 3.5" */
-};
-
-#define NUMBER(x) (sizeof(x) / sizeof(*(x)))
-#define SECTSIZE (_FD_SECTSIZE(*floppy))
-
-/* Auto-detection: Disk type used until the next media change occurs. */
-static struct floppy_struct *current_type[N_DRIVE] = {
- NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL
-};
-
-/*
- * User-provided type information. current_type points to
- * the respective entry of this array.
- */
-static struct floppy_struct user_params[N_DRIVE];
-
-static int floppy_sizes[256];
-static int floppy_blocksizes[256] = { 0, };
-
-/*
- * The driver is trying to determine the correct media format
- * while probing is set. rw_interrupt() clears it after a
- * successful access.
- */
-static int probing = 0;
-
-/* Synchronization of FDC access. */
-#define FD_COMMAND_NONE -1
-#define FD_COMMAND_ERROR 2
-#define FD_COMMAND_OKAY 3
-
-static volatile int command_status = FD_COMMAND_NONE, fdc_busy = 0;
-static struct wait_queue *fdc_wait = NULL, *command_done = NULL;
-#define NO_SIGNAL (!(current->signal & ~current->blocked) || !interruptible)
-#define CALL(x) if ((x) == -EINTR) return -EINTR
-#define ECALL(x) if ((ret = (x))) return ret;
-#define _WAIT(x,i) CALL(ret=wait_til_done((x),i))
-#define WAIT(x) _WAIT((x),interruptible)
-#define IWAIT(x) _WAIT((x),1)
-
-/* Errors during formatting are counted here. */
-static int format_errors;
-
-/* Format request descriptor. */
-static struct format_descr format_req;
-
-/*
- * Rate is 0 for 500kb/s, 1 for 300kbps, 2 for 250kbps
- * Spec1 is 0xSH, where S is stepping rate (F=1ms, E=2ms, D=3ms etc),
- * H is head unload time (1=16ms, 2=32ms, etc)
- */
-
-/*
- * Track buffer
- * Because these are written to by the DMA controller, they must
- * not contain a 64k byte boundary crossing, or data will be
- * corrupted/lost.
- */
-static char *floppy_track_buffer=0;
-static int max_buffer_sectors=0;
-
-static int *errors;
-typedef void (*done_f)(int);
-static struct cont_t {
- void (*interrupt)(void); /* this is called after the interrupt of the
- * main command */
- void (*redo)(void); /* this is called to retry the operation */
- void (*error)(void); /* this is called to tally an error */
- done_f done; /* this is called to say if the operation has
- * succeeded/failed */
-} *cont=NULL;
-
-static void floppy_ready(void);
-static void floppy_start(void);
-static void process_fd_request(void);
-static void recalibrate_floppy(void);
-static void floppy_shutdown(void);
-
-static int floppy_grab_irq_and_dma(void);
-static void floppy_release_irq_and_dma(void);
-
-/*
- * The "reset" variable should be tested whenever an interrupt is scheduled,
- * after the commands have been sent. This is to ensure that the driver doesn't
- * get wedged when the interrupt doesn't come because of a failed command.
- * reset doesn't need to be tested before sending commands, because
- * output_byte is automatically disabled when reset is set.
- */
-#define CHECK_RESET { if (FDCS->reset){ reset_fdc(); return; } }
-static void reset_fdc(void);
-
-/*
- * These are global variables, as that's the easiest way to give
- * information to interrupts. They are the data used for the current
- * request.
- */
-#define NO_TRACK -1
-#define NEED_1_RECAL -2
-#define NEED_2_RECAL -3
-
-/* */
-static int usage_count = 0;
-
-
-/* buffer related variables */
-static int buffer_track = -1;
-static int buffer_drive = -1;
-static int buffer_min = -1;
-static int buffer_max = -1;
-
-/* fdc related variables, should end up in a struct */
-static struct floppy_fdc_state fdc_state[N_FDC];
-static int fdc; /* current fdc */
-
-static struct floppy_struct *_floppy = floppy_type;
-static unsigned char current_drive = 0;
-static long current_count_sectors = 0;
-static unsigned char sector_t; /* sector in track */
-
-#ifndef fd_eject
-#define fd_eject(x) -EINVAL
-#endif
-
-
-#ifdef DEBUGT
-static long unsigned debugtimer;
-#endif
-
-/*
- * Debugging
- * =========
- */
-static inline void set_debugt(void)
-{
-#ifdef DEBUGT
- debugtimer = jiffies;
-#endif
-}
-
-static inline void debugt(const char *message)
-{
-#ifdef DEBUGT
- if (DP->flags & DEBUGT)
- printk("%s dtime=%lu\n", message, jiffies-debugtimer);
-#endif
-}
-
-typedef void (*timeout_fn)(unsigned long);
-static struct timer_list fd_timeout ={ NULL, NULL, 0, 0,
- (timeout_fn) floppy_shutdown };
-
-static const char *timeout_message;
-
-#ifdef FLOPPY_SANITY_CHECK
-static void is_alive(const char *message)
-{
- /* this routine checks whether the floppy driver is "alive" */
- if (fdc_busy && command_status < 2 && !fd_timeout.prev){
- DPRINT("timeout handler died: %s\n",message);
- }
-}
-#endif
-
-#ifdef FLOPPY_SANITY_CHECK
-
-#define OLOGSIZE 20
-
-static void (*lasthandler)(void) = NULL;
-static int interruptjiffies=0;
-static int resultjiffies=0;
-static int resultsize=0;
-static int lastredo=0;
-
-static struct output_log {
- unsigned char data;
- unsigned char status;
- unsigned long jiffies;
-} output_log[OLOGSIZE];
-
-static int output_log_pos=0;
-#endif
-
-#define CURRENTD -1
-#define MAXTIMEOUT -2
-
-static void reschedule_timeout(int drive, const char *message, int marg)
-{
- if (drive == CURRENTD)
- drive = current_drive;
- del_timer(&fd_timeout);
- if (drive < 0 || drive > N_DRIVE) {
- fd_timeout.expires = jiffies + 20*HZ;
- drive=0;
- } else
- fd_timeout.expires = jiffies + UDP->timeout;
- add_timer(&fd_timeout);
- if (UDP->flags & FD_DEBUG){
- DPRINT("reschedule timeout ");
- printk(message, marg);
- printk("\n");
- }
- timeout_message = message;
-}
-
-static int maximum(int a, int b)
-{
- if(a > b)
- return a;
- else
- return b;
-}
-#define INFBOUND(a,b) (a)=maximum((a),(b));
-
-static int minimum(int a, int b)
-{
- if(a < b)
- return a;
- else
- return b;
-}
-#define SUPBOUND(a,b) (a)=minimum((a),(b));
-
-
-/*
- * Bottom half floppy driver.
- * ==========================
- *
- * This part of the file contains the code talking directly to the hardware,
- * and also the main service loop (seek-configure-spinup-command)
- */
-
-/*
- * disk change.
- * This routine is responsible for maintaining the FD_DISK_CHANGE flag,
- * and the last_checked date.
- *
- * last_checked is the date of the last check which showed 'no disk change'
- * FD_DISK_CHANGE is set under two conditions:
- * 1. The floppy has been changed after some i/o to that floppy already
- * took place.
- * 2. No floppy disk is in the drive. This is done in order to ensure that
- * requests are quickly flushed in case there is no disk in the drive. It
- * follows that FD_DISK_CHANGE can only be cleared if there is a disk in
- * the drive.
- *
- * For 1., maxblock is observed. Maxblock is 0 if no i/o has taken place yet.
- * For 2., FD_DISK_NEWCHANGE is watched. FD_DISK_NEWCHANGE is cleared on
- * each seek. If a disk is present, the disk change line should also be
- * cleared on each seek. Thus, if FD_DISK_NEWCHANGE is clear, but the disk
- * change line is set, this means either that no disk is in the drive, or
- * that it has been removed since the last seek.
- *
- * This means that we really have a third possibility too:
- * The floppy has been changed after the last seek.
- */
-
-static int disk_change(int drive)
-{
- int fdc=FDC(drive);
-#ifdef FLOPPY_SANITY_CHECK
- if (jiffies - UDRS->select_date < UDP->select_delay)
- DPRINT("WARNING disk change called early\n");
- if (!(FDCS->dor & (0x10 << UNIT(drive))) ||
- (FDCS->dor & 3) != UNIT(drive) ||
- fdc != FDC(drive)){
- DPRINT("probing disk change on unselected drive\n");
- DPRINT("drive=%d fdc=%d dor=%x\n",drive, FDC(drive),
- FDCS->dor);
- }
-#endif
-
-#ifdef DCL_DEBUG
- if (UDP->flags & FD_DEBUG){
- DPRINT("checking disk change line for drive %d\n",drive);
- DPRINT("jiffies=%ld\n", jiffies);
- DPRINT("disk change line=%x\n",fd_inb(FD_DIR)&0x80);
- DPRINT("flags=%x\n",UDRS->flags);
- }
-#endif
- if (UDP->flags & FD_BROKEN_DCL)
- return UTESTF(FD_DISK_CHANGED);
- if ((fd_inb(FD_DIR) ^ UDP->flags) & 0x80){
- USETF(FD_VERIFY); /* verify write protection */
- if (UDRS->maxblock){
- /* mark it changed */
- USETF(FD_DISK_CHANGED);
- }
-
- /* invalidate its geometry */
- if (UDRS->keep_data >= 0) {
- if ((UDP->flags & FTD_MSG) &&
- current_type[drive] != NULL)
- DPRINT("Disk type is undefined after "
- "disk change\n");
- current_type[drive] = NULL;
- floppy_sizes[TOMINOR(drive)] = MAX_DISK_SIZE;
- }
-
- /*USETF(FD_DISK_NEWCHANGE);*/
- return 1;
- } else {
- UDRS->last_checked=jiffies;
- UCLEARF(FD_DISK_NEWCHANGE);
- }
- return 0;
-}
-
-static inline int is_selected(int dor, int unit)
-{
- return ((dor & (0x10 << unit)) && (dor &3) == unit);
-}
-
-static int set_dor(int fdc, char mask, char data)
-{
- register unsigned char drive, unit, newdor,olddor;
-
- if (FDCS->address == -1)
- return -1;
-
- olddor = FDCS->dor;
- newdor = (olddor & mask) | data;
- if (newdor != olddor){
- unit = olddor & 0x3;
- if (is_selected(olddor, unit) && !is_selected(newdor,unit)){
- drive = REVDRIVE(fdc,unit);
-#ifdef DCL_DEBUG
- if (UDP->flags & FD_DEBUG){
- DPRINT("calling disk change from set_dor\n");
- }
-#endif
- disk_change(drive);
- }
- FDCS->dor = newdor;
- fd_outb(newdor, FD_DOR);
-
- unit = newdor & 0x3;
- if (!is_selected(olddor, unit) && is_selected(newdor,unit)){
- drive = REVDRIVE(fdc,unit);
- UDRS->select_date = jiffies;
- }
- }
-
- /* FIXME: we should be more graceful here */
-
- if (newdor & FLOPPY_MOTOR_MASK)
- floppy_grab_irq_and_dma();
- if (olddor & FLOPPY_MOTOR_MASK)
- floppy_release_irq_and_dma();
- return olddor;
-}
-
-static void twaddle(void)
-{
- if (DP->select_delay)
- return;
- fd_outb(FDCS->dor & ~(0x10<<UNIT(current_drive)),FD_DOR);
- fd_outb(FDCS->dor, FD_DOR);
- DRS->select_date = jiffies;
-}
-
-/* reset all driver information about the current fdc. This is needed after
- * a reset, and after a raw command. */
-static void reset_fdc_info(int mode)
-{
- int drive;
-
- FDCS->spec1 = FDCS->spec2 = -1;
- FDCS->need_configure = 1;
- FDCS->perp_mode = 1;
- FDCS->rawcmd = 0;
- for (drive = 0; drive < N_DRIVE; drive++)
- if (FDC(drive) == fdc &&
- (mode || UDRS->track != NEED_1_RECAL))
- UDRS->track = NEED_2_RECAL;
-}
-
-/* selects the fdc and drive, and enables the fdc's input/dma. */
-static void set_fdc(int drive)
-{
- if (drive >= 0 && drive < N_DRIVE){
- fdc = FDC(drive);
- current_drive = drive;
- }
- if (fdc != 1 && fdc != 0) {
- printk("bad fdc value\n");
- return;
- }
- set_dor(fdc,~0,8);
-#if N_FDC > 1
- set_dor(1-fdc, ~8, 0);
-#endif
- if (FDCS->rawcmd == 2)
- reset_fdc_info(1);
- if (fd_inb(FD_STATUS) != STATUS_READY)
- FDCS->reset = 1;
-}
-
-/* locks the driver */
-static int lock_fdc(int drive, int interruptible)
-{
- unsigned long flags;
-
- if (!usage_count){
- printk(KERN_ERR "trying to lock fdc while usage count=0\n");
- return -1;
- }
- if(floppy_grab_irq_and_dma()==-1)
- return -EBUSY;
- INT_OFF;
- while (fdc_busy && NO_SIGNAL)
- interruptible_sleep_on(&fdc_wait);
- if (fdc_busy){
- INT_ON;
- return -EINTR;
- }
- fdc_busy = 1;
- INT_ON;
- command_status = FD_COMMAND_NONE;
- reschedule_timeout(drive, "lock fdc", 0);
- set_fdc(drive);
- return 0;
-}
-
-#define LOCK_FDC(drive,interruptible) \
-if (lock_fdc(drive,interruptible)) return -EINTR;
-
-
-/* unlocks the driver */
-static inline void unlock_fdc(void)
-{
- raw_cmd = 0;
- if (!fdc_busy)
- DPRINT("FDC access conflict!\n");
-
- if (DEVICE_INTR)
- DPRINT("device interrupt still active at FDC release: %p!\n",
- DEVICE_INTR);
- command_status = FD_COMMAND_NONE;
- del_timer(&fd_timeout);
- cont = NULL;
- fdc_busy = 0;
- floppy_release_irq_and_dma();
- wake_up(&fdc_wait);
-}
-
-/* switches the motor off after a given timeout */
-static void motor_off_callback(unsigned long nr)
-{
- unsigned char mask = ~(0x10 << UNIT(nr));
-
- set_dor(FDC(nr), mask, 0);
-}
-
-static struct timer_list motor_off_timer[N_DRIVE] = {
- { NULL, NULL, 0, 0, motor_off_callback },
- { NULL, NULL, 0, 1, motor_off_callback },
- { NULL, NULL, 0, 2, motor_off_callback },
- { NULL, NULL, 0, 3, motor_off_callback },
- { NULL, NULL, 0, 4, motor_off_callback },
- { NULL, NULL, 0, 5, motor_off_callback },
- { NULL, NULL, 0, 6, motor_off_callback },
- { NULL, NULL, 0, 7, motor_off_callback }
-};
-
-/* schedules motor off */
-static void floppy_off(unsigned int drive)
-{
- unsigned long volatile delta;
- register int fdc=FDC(drive);
-
- if (!(FDCS->dor & (0x10 << UNIT(drive))))
- return;
-
- del_timer(motor_off_timer+drive);
-
- /* make spindle stop in a position which minimizes spinup time
- * next time */
- if (UDP->rps){
- delta = jiffies - UDRS->first_read_date + HZ -
- UDP->spindown_offset;
- delta = ((delta * UDP->rps) % HZ) / UDP->rps;
- motor_off_timer[drive].expires = jiffies + UDP->spindown -
delta;
- }
- add_timer(motor_off_timer+drive);
-}
-
-/*
- * cycle through all N_DRIVE floppy drives, for disk change testing.
- * stopping at current drive. This is done before any long operation, to
- * be sure to have up to date disk change information.
- */
-static void scandrives(void)
-{
- int i, drive, saved_drive;
-
- if (DP->select_delay)
- return;
-
- saved_drive = current_drive;
- for (i=0; i < N_DRIVE; i++){
- drive = (saved_drive + i + 1) % N_DRIVE;
- if (UDRS->fd_ref == 0 || UDP->select_delay != 0)
- continue; /* skip closed drives */
- set_fdc(drive);
- if (!(set_dor(fdc, ~3, UNIT(drive) | (0x10 << UNIT(drive))) &
- (0x10 << UNIT(drive))))
- /* switch the motor off again, if it was off to
- * begin with */
- set_dor(fdc, ~(0x10 << UNIT(drive)), 0);
- }
- set_fdc(saved_drive);
-}
-
-static void empty(void)
-{
-}
-
-static struct tq_struct floppy_tq =
-{ 0, 0, 0, 0 };
-
-static struct timer_list fd_timer ={ NULL, NULL, 0, 0, 0 };
-
-static void cancel_activity(void)
-{
- CLEAR_INTR;
- floppy_tq.routine = (void *)(void *) empty;
- del_timer(&fd_timer);
-}
-
-/* this function makes sure that the disk stays in the drive during the
- * transfer */
-static void fd_watchdog(void)
-{
-#ifdef DCL_DEBUG
- if (DP->flags & FD_DEBUG){
- DPRINT("calling disk change from watchdog\n");
- }
-#endif
-
- if (disk_change(current_drive)){
- DPRINT("disk removed during i/o\n");
- cancel_activity();
- cont->done(0);
- reset_fdc();
- } else {
- del_timer(&fd_timer);
- fd_timer.function = (timeout_fn) fd_watchdog;
- fd_timer.expires = jiffies + HZ / 10;
- add_timer(&fd_timer);
- }
-}
-
-static void main_command_interrupt(void)
-{
- del_timer(&fd_timer);
- cont->interrupt();
-}
-
-/* waits for a delay (spinup or select) to pass */
-static int wait_for_completion(int delay, timeout_fn function)
-{
- if (FDCS->reset){
- reset_fdc(); /* do the reset during sleep to win time
- * if we don't need to sleep, it's a good
- * occasion anyways */
- return 1;
- }
-
- if ((signed) (jiffies - delay) < 0){
- del_timer(&fd_timer);
- fd_timer.function = function;
- fd_timer.expires = delay;
- add_timer(&fd_timer);
- return 1;
- }
- return 0;
-}
-
-static int hlt_disabled=0;
-static void floppy_disable_hlt(void)
-{
- unsigned long flags;
-
- INT_OFF;
- if (!hlt_disabled){
- hlt_disabled=1;
-#ifdef HAVE_DISABLE_HLT
- disable_hlt();
-#endif
- }
- INT_ON;
-}
-
-static void floppy_enable_hlt(void)
-{
- unsigned long flags;
-
- INT_OFF;
- if (hlt_disabled){
- hlt_disabled=0;
-#ifdef HAVE_DISABLE_HLT
- enable_hlt();
-#endif
- }
- INT_ON;
-}
-
-
-static void setup_DMA(void)
-{
- unsigned long flags;
-
-#ifdef FLOPPY_SANITY_CHECK
- if (raw_cmd->length == 0){
- int i;
-
- printk("zero dma transfer size:");
- for (i=0; i < raw_cmd->cmd_count; i++)
- printk("%x,", raw_cmd->cmd[i]);
- printk("\n");
- cont->done(0);
- FDCS->reset = 1;
- return;
- }
- if ((long) raw_cmd->kernel_data % 512){
- printk("non aligned address: %p\n", raw_cmd->kernel_data);
- cont->done(0);
- FDCS->reset=1;
- return;
- }
- if (CROSS_64KB(raw_cmd->kernel_data, raw_cmd->length)) {
- printk("DMA crossing 64-K boundary %p-%p\n",
- raw_cmd->kernel_data,
- raw_cmd->kernel_data + raw_cmd->length);
- cont->done(0);
- FDCS->reset=1;
- return;
- }
-#endif
- INT_OFF;
- fd_disable_dma();
- fd_clear_dma_ff();
- fd_cacheflush(raw_cmd->kernel_data, raw_cmd->length);
- fd_set_dma_mode((raw_cmd->flags & FD_RAW_READ)?
- DMA_MODE_READ : DMA_MODE_WRITE);
- fd_set_dma_addr(virt_to_bus(raw_cmd->kernel_data));
- fd_set_dma_count(raw_cmd->length);
- virtual_dma_port = FDCS->address;
- fd_enable_dma();
- INT_ON;
- floppy_disable_hlt();
-}
-
-void show_floppy(void);
-
-/* waits until the fdc becomes ready */
-static int wait_til_ready(void)
-{
- int counter, status;
- if(FDCS->reset)
- return -1;
- for (counter = 0; counter < 10000; counter++) {
- status = fd_inb(FD_STATUS);
- if (status & STATUS_READY)
- return status;
- }
- if (!initialising) {
- DPRINT("Getstatus times out (%x) on fdc %d\n",
- status, fdc);
- show_floppy();
- }
- FDCS->reset = 1;
- return -1;
-}
-
-/* sends a command byte to the fdc */
-static int output_byte(char byte)
-{
- int status;
-
- if ((status = wait_til_ready()) < 0)
- return -1;
- if ((status & (STATUS_READY|STATUS_DIR|STATUS_DMA)) == STATUS_READY){
- fd_outb(byte,FD_DATA);
-#ifdef FLOPPY_SANITY_CHECK
- output_log[output_log_pos].data = byte;
- output_log[output_log_pos].status = status;
- output_log[output_log_pos].jiffies = jiffies;
- output_log_pos = (output_log_pos + 1) % OLOGSIZE;
-#endif
- return 0;
- }
- FDCS->reset = 1;
- if (!initialising) {
- DPRINT("Unable to send byte %x to FDC. Fdc=%x Status=%x\n",
- byte, fdc, status);
- show_floppy();
- }
- return -1;
-}
-#define LAST_OUT(x) if (output_byte(x)<0){ reset_fdc();return;}
-
-/* gets the response from the fdc */
-static int result(void)
-{
- int i, status;
-
- for(i=0; i < MAX_REPLIES; i++) {
- if ((status = wait_til_ready()) < 0)
- break;
- status &= STATUS_DIR|STATUS_READY|STATUS_BUSY|STATUS_DMA;
- if ((status & ~STATUS_BUSY) == STATUS_READY){
-#ifdef FLOPPY_SANITY_CHECK
- resultjiffies = jiffies;
- resultsize = i;
-#endif
- return i;
- }
- if (status == (STATUS_DIR|STATUS_READY|STATUS_BUSY))
- reply_buffer[i] = fd_inb(FD_DATA);
- else
- break;
- }
- if(!initialising) {
- DPRINT("get result error. Fdc=%d Last status=%x Read
bytes=%d\n",
- fdc, status, i);
- show_floppy();
- }
- FDCS->reset = 1;
- return -1;
-}
-
-#define MORE_OUTPUT -2
-/* does the fdc need more output? */
-static int need_more_output(void)
-{
- int status;
- if( (status = wait_til_ready()) < 0)
- return -1;
- if ((status & (STATUS_READY|STATUS_DIR|STATUS_DMA)) == STATUS_READY)
- return MORE_OUTPUT;
- return result();
-}
-
-/* Set perpendicular mode as required, based on data rate, if supported.
- * 82077 Now tested. 1Mbps data rate only possible with 82077-1.
- */
-static inline void perpendicular_mode(void)
-{
- unsigned char perp_mode;
-
- if (raw_cmd->rate & 0x40){
- switch(raw_cmd->rate & 3){
- case 0:
- perp_mode=2;
- break;
- case 3:
- perp_mode=3;
- break;
- default:
- DPRINT("Invalid data rate for perpendicular
mode!\n");
- cont->done(0);
- FDCS->reset = 1; /* convenient way to return to
- * redo without to much hassle
(deep
- * stack et al. */
- return;
- }
- } else
- perp_mode = 0;
-
- if (FDCS->perp_mode == perp_mode)
- return;
- if (FDCS->version >= FDC_82077_ORIG) {
- output_byte(FD_PERPENDICULAR);
- output_byte(perp_mode);
- FDCS->perp_mode = perp_mode;
- } else if (perp_mode) {
- DPRINT("perpendicular mode not supported by this FDC.\n");
- }
-} /* perpendicular_mode */
-
-static int fifo_depth = 0xa;
-static int no_fifo = 0;
-
-static int fdc_configure(void)
-{
- /* Turn on FIFO */
- output_byte(FD_CONFIGURE);
- if(need_more_output() != MORE_OUTPUT)
- return 0;
- output_byte(0);
- output_byte(0x10 | (no_fifo & 0x20) | (fifo_depth & 0xf));
- output_byte(0); /* pre-compensation from track
- 0 upwards */
- return 1;
-}
-
-#define NOMINAL_DTR 500
-
-/* Issue a "SPECIFY" command to set the step rate time, head unload time,
- * head load time, and DMA disable flag to values needed by floppy.
- *
- * The value "dtr" is the data transfer rate in Kbps. It is needed
- * to account for the data rate-based scaling done by the 82072 and 82077
- * FDC types. This parameter is ignored for other types of FDCs (i.e.
- * 8272a).
- *
- * Note that changing the data transfer rate has a (probably deleterious)
- * effect on the parameters subject to scaling for 82072/82077 FDCs, so
- * fdc_specify is called again after each data transfer rate
- * change.
- *
- * srt: 1000 to 16000 in microseconds
- * hut: 16 to 240 milliseconds
- * hlt: 2 to 254 milliseconds
- *
- * These values are rounded up to the next highest available delay time.
- */
-static void fdc_specify(void)
-{
- unsigned char spec1, spec2;
- int srt, hlt, hut;
- unsigned long dtr = NOMINAL_DTR;
- unsigned long scale_dtr = NOMINAL_DTR;
- int hlt_max_code = 0x7f;
- int hut_max_code = 0xf;
-
- if (FDCS->need_configure && FDCS->version >= FDC_82072A) {
- fdc_configure();
- FDCS->need_configure = 0;
- /*DPRINT("FIFO enabled\n");*/
- }
-
- switch (raw_cmd->rate & 0x03) {
- case 3:
- dtr = 1000;
- break;
- case 1:
- dtr = 300;
- if (FDCS->version >= FDC_82078) {
- /* chose the default rate table, not the one
- * where 1 = 2 Mbps */
- output_byte(FD_DRIVESPEC);
- if(need_more_output() == MORE_OUTPUT) {
- output_byte(UNIT(current_drive));
- output_byte(0xc0);
- }
- }
- break;
- case 2:
- dtr = 250;
- break;
- }
-
- if (FDCS->version >= FDC_82072) {
- scale_dtr = dtr;
- hlt_max_code = 0x00; /* 0==256msec*dtr0/dtr (not linear!) */
- hut_max_code = 0x0; /* 0==256msec*dtr0/dtr (not linear!) */
- }
-
- /* Convert step rate from microseconds to milliseconds and 4 bits */
- srt = 16 - (DP->srt*scale_dtr/1000 + NOMINAL_DTR - 1)/NOMINAL_DTR;
- SUPBOUND(srt, 0xf);
- INFBOUND(srt, 0);
-
- hlt = (DP->hlt*scale_dtr/2 + NOMINAL_DTR - 1)/NOMINAL_DTR;
- if (hlt < 0x01)
- hlt = 0x01;
- else if (hlt > 0x7f)
- hlt = hlt_max_code;
-
- hut = (DP->hut*scale_dtr/16 + NOMINAL_DTR - 1)/NOMINAL_DTR;
- if (hut < 0x1)
- hut = 0x1;
- else if (hut > 0xf)
- hut = hut_max_code;
-
- spec1 = (srt << 4) | hut;
- spec2 = (hlt << 1) | (use_virtual_dma & 1);
-
- /* If these parameters did not change, just return with success */
- if (FDCS->spec1 != spec1 || FDCS->spec2 != spec2) {
- /* Go ahead and set spec1 and spec2 */
- output_byte(FD_SPECIFY);
- output_byte(FDCS->spec1 = spec1);
- output_byte(FDCS->spec2 = spec2);
- }
-} /* fdc_specify */
-
-/* Set the FDC's data transfer rate on behalf of the specified drive.
- * NOTE: with 82072/82077 FDCs, changing the data rate requires a reissue
- * of the specify command (i.e. using the fdc_specify function).
- */
-static int fdc_dtr(void)
-{
- /* If data rate not already set to desired value, set it. */
- if ((raw_cmd->rate & 3) == FDCS->dtr)
- return 0;
-
- /* Set dtr */
- fd_outb(raw_cmd->rate & 3, FD_DCR);
-
- /* TODO: some FDC/drive combinations (C&T 82C711 with TEAC 1.2MB)
- * need a stabilization period of several milliseconds to be
- * enforced after data rate changes before R/W operations.
- * Pause 5 msec to avoid trouble. (Needs to be 2 jiffies)
- */
- FDCS->dtr = raw_cmd->rate & 3;
- return(wait_for_completion(jiffies+2*HZ/100,
- (timeout_fn) floppy_ready));
-} /* fdc_dtr */
-
-static void tell_sector(void)
-{
- printk(": track %d, head %d, sector %d, size %d",
- R_TRACK, R_HEAD, R_SECTOR, R_SIZECODE);
-} /* tell_sector */
-
-
-/*
- * OK, this error interpreting routine is called after a
- * DMA read/write has succeeded
- * or failed, so we check the results, and copy any buffers.
- * hhb: Added better error reporting.
- * ak: Made this into a separate routine.
- */
-static int interpret_errors(void)
-{
- char bad;
-
- if (inr!=7) {
- DPRINT("-- FDC reply error");
- FDCS->reset = 1;
- return 1;
- }
-
- /* check IC to find cause of interrupt */
- switch (ST0 & ST0_INTR) {
- case 0x40: /* error occurred during command execution */
- if (ST1 & ST1_EOC)
- return 0; /* occurs with pseudo-DMA */
- bad = 1;
- if (ST1 & ST1_WP) {
- DPRINT("Drive is write protected\n");
- CLEARF(FD_DISK_WRITABLE);
- cont->done(0);
- bad = 2;
- } else if (ST1 & ST1_ND) {
- SETF(FD_NEED_TWADDLE);
- } else if (ST1 & ST1_OR) {
- if (DP->flags & FTD_MSG)
- DPRINT("Over/Underrun - retrying\n");
- bad = 0;
- }else if (*errors >= DP->max_errors.reporting){
- DPRINT("");
- if (ST0 & ST0_ECE) {
- printk("Recalibrate failed!");
- } else if (ST2 & ST2_CRC) {
- printk("data CRC error");
- tell_sector();
- } else if (ST1 & ST1_CRC) {
- printk("CRC error");
- tell_sector();
- } else if ((ST1 & (ST1_MAM|ST1_ND)) || (ST2 &
ST2_MAM)) {
- if (!probing) {
- printk("sector not found");
- tell_sector();
- } else
- printk("probe failed...");
- } else if (ST2 & ST2_WC) { /* seek error */
- printk("wrong cylinder");
- } else if (ST2 & ST2_BC) { /* cylinder
marked as bad */
- printk("bad cylinder");
- } else {
- printk("unknown error. ST[0..2] are:
0x%x 0x%x 0x%x", ST0, ST1, ST2);
- tell_sector();
- }
- printk("\n");
-
- }
- if (ST2 & ST2_WC || ST2 & ST2_BC)
- /* wrong cylinder => recal */
- DRS->track = NEED_2_RECAL;
- return bad;
- case 0x80: /* invalid command given */
- DPRINT("Invalid FDC command given!\n");
- cont->done(0);
- return 2;
- case 0xc0:
- DPRINT("Abnormal termination caused by polling\n");
- cont->error();
- return 2;
- default: /* (0) Normal command termination */
- return 0;
- }
-}
-
-/*
- * This routine is called when everything should be correctly set up
- * for the transfer (i.e. floppy motor is on, the correct floppy is
- * selected, and the head is sitting on the right track).
- */
-static void setup_rw_floppy(void)
-{
- int i,ready_date,r, flags,dflags;
- timeout_fn function;
-
- flags = raw_cmd->flags;
- if (flags & (FD_RAW_READ | FD_RAW_WRITE))
- flags |= FD_RAW_INTR;
-
- if ((flags & FD_RAW_SPIN) && !(flags & FD_RAW_NO_MOTOR)){
- ready_date = DRS->spinup_date + DP->spinup;
- /* If spinup will take a long time, rerun scandrives
- * again just before spinup completion. Beware that
- * after scandrives, we must again wait for selection.
- */
- if ((signed) (ready_date - jiffies) > DP->select_delay){
- ready_date -= DP->select_delay;
- function = (timeout_fn) floppy_start;
- } else
- function = (timeout_fn) setup_rw_floppy;
-
- /* wait until the floppy is spinning fast enough */
- if (wait_for_completion(ready_date,function))
- return;
- }
- dflags = DRS->flags;
-
- if ((flags & FD_RAW_READ) || (flags & FD_RAW_WRITE))
- setup_DMA();
-
- if (flags & FD_RAW_INTR)
- SET_INTR(main_command_interrupt);
-
- r=0;
- for (i=0; i< raw_cmd->cmd_count; i++)
- r|=output_byte(raw_cmd->cmd[i]);
-
-#ifdef DEBUGT
- debugt("rw_command: ");
-#endif
- if (r){
- cont->error();
- reset_fdc();
- return;
- }
-
- if (!(flags & FD_RAW_INTR)){
- inr = result();
- cont->interrupt();
- } else if (flags & FD_RAW_NEED_DISK)
- fd_watchdog();
-}
-
-static int blind_seek;
-
-/*
- * This is the routine called after every seek (or recalibrate) interrupt
- * from the floppy controller.
- */
-static void seek_interrupt(void)
-{
-#ifdef DEBUGT
- debugt("seek interrupt:");
-#endif
- if (inr != 2 || (ST0 & 0xF8) != 0x20) {
- DPRINT("seek failed\n");
- DRS->track = NEED_2_RECAL;
- cont->error();
- cont->redo();
- return;
- }
- if (DRS->track >= 0 && DRS->track != ST1 && !blind_seek){
-#ifdef DCL_DEBUG
- if (DP->flags & FD_DEBUG){
- DPRINT("clearing NEWCHANGE flag because of effective
seek\n");
- DPRINT("jiffies=%ld\n", jiffies);
- }
-#endif
- CLEARF(FD_DISK_NEWCHANGE); /* effective seek */
- DRS->select_date = jiffies;
- }
- DRS->track = ST1;
- floppy_ready();
-}
-
-static void check_wp(void)
-{
- if (TESTF(FD_VERIFY)) {
- /* check write protection */
- output_byte(FD_GETSTATUS);
- output_byte(UNIT(current_drive));
- if (result() != 1){
- FDCS->reset = 1;
- return;
- }
- CLEARF(FD_VERIFY);
- CLEARF(FD_NEED_TWADDLE);
-#ifdef DCL_DEBUG
- if (DP->flags & FD_DEBUG){
- DPRINT("checking whether disk is write protected\n");
- DPRINT("wp=%x\n",ST3 & 0x40);
- }
-#endif
- if (!(ST3 & 0x40))
- SETF(FD_DISK_WRITABLE);
- else
- CLEARF(FD_DISK_WRITABLE);
- }
-}
-
-static void seek_floppy(void)
-{
- int track;
-
- blind_seek=0;
-
-#ifdef DCL_DEBUG
- if (DP->flags & FD_DEBUG){
- DPRINT("calling disk change from seek\n");
- }
-#endif
-
- if (!TESTF(FD_DISK_NEWCHANGE) &&
- disk_change(current_drive) &&
- (raw_cmd->flags & FD_RAW_NEED_DISK)){
- /* the media changed flag should be cleared after the seek.
- * If it isn't, this means that there is really no disk in
- * the drive.
- */
- SETF(FD_DISK_CHANGED);
- cont->done(0);
- cont->redo();
- return;
- }
- if (DRS->track <= NEED_1_RECAL){
- recalibrate_floppy();
- return;
- } else if (TESTF(FD_DISK_NEWCHANGE) &&
- (raw_cmd->flags & FD_RAW_NEED_DISK) &&
- (DRS->track <= NO_TRACK || DRS->track == raw_cmd->track)) {
- /* we seek to clear the media-changed condition. Does anybody
- * know a more elegant way, which works on all drives? */
- if (raw_cmd->track)
- track = raw_cmd->track - 1;
- else {
- if (DP->flags & FD_SILENT_DCL_CLEAR){
- set_dor(fdc, ~(0x10 << UNIT(current_drive)), 0);
- blind_seek = 1;
- raw_cmd->flags |= FD_RAW_NEED_SEEK;
- }
- track = 1;
- }
- } else {
- check_wp();
- if (raw_cmd->track != DRS->track &&
- (raw_cmd->flags & FD_RAW_NEED_SEEK))
- track = raw_cmd->track;
- else {
- setup_rw_floppy();
- return;
- }
- }
-
- SET_INTR(seek_interrupt);
- output_byte(FD_SEEK);
- output_byte(UNIT(current_drive));
- LAST_OUT(track);
-#ifdef DEBUGT
- debugt("seek command:");
-#endif
-}
-
-static void recal_interrupt(void)
-{
-#ifdef DEBUGT
- debugt("recal interrupt:");
-#endif
- if (inr !=2)
- FDCS->reset = 1;
- else if (ST0 & ST0_ECE) {
- switch(DRS->track){
- case NEED_1_RECAL:
-#ifdef DEBUGT
- debugt("recal interrupt need 1 recal:");
-#endif
- /* after a second recalibrate, we still haven't
- * reached track 0. Probably no drive. Raise an
- * error, as failing immediately might upset
- * computers possessed by the Devil :-) */
- cont->error();
- cont->redo();
- return;
- case NEED_2_RECAL:
-#ifdef DEBUGT
- debugt("recal interrupt need 2 recal:");
-#endif
- /* If we already did a recalibrate,
- * and we are not at track 0, this
- * means we have moved. (The only way
- * not to move at recalibration is to
- * be already at track 0.) Clear the
- * new change flag */
-#ifdef DCL_DEBUG
- if (DP->flags & FD_DEBUG){
- DPRINT("clearing NEWCHANGE flag because
of second recalibrate\n");
- }
-#endif
-
- CLEARF(FD_DISK_NEWCHANGE);
- DRS->select_date = jiffies;
- /* fall through */
- default:
-#ifdef DEBUGT
- debugt("recal interrupt default:");
-#endif
- /* Recalibrate moves the head by at
- * most 80 steps. If after one
- * recalibrate we don't have reached
- * track 0, this might mean that we
- * started beyond track 80. Try
- * again. */
- DRS->track = NEED_1_RECAL;
- break;
- }
- } else
- DRS->track = ST1;
- floppy_ready();
-}
-
-static void print_result(char *message, int inr)
-{
- int i;
-
- DPRINT("%s ", message);
- if (inr >= 0)
- for (i=0; i<inr; i++)
- printk("repl[%d]=%x ", i, reply_buffer[i]);
- printk("\n");
-}
-
-/* interrupt handler */
-void floppy_interrupt(int irq, void *dev_id, struct pt_regs * regs)
-{
- void (*handler)(void) = DEVICE_INTR;
- int do_print;
-
- lasthandler = handler;
- interruptjiffies = jiffies;
-
- fd_disable_dma();
- floppy_enable_hlt();
- CLEAR_INTR;
- if (fdc >= N_FDC || FDCS->address == -1){
- /* we don't even know which FDC is the culprit */
- printk("DOR0=%x\n", fdc_state[0].dor);
- printk("floppy interrupt on bizarre fdc %d\n",fdc);
- printk("handler=%p\n", handler);
- is_alive("bizarre fdc");
- return;
- }
-
- FDCS->reset = 0;
- /* We have to clear the reset flag here, because apparently on boxes
- * with level triggered interrupts (PS/2, Sparc, ...), it is needed to
- * emit SENSEI's to clear the interrupt line. And FDCS->reset blocks the
- * emission of the SENSEI's.
- * It is OK to emit floppy commands because we are in an interrupt
- * handler here, and thus we have to fear no interference of other
- * activity.
- */
-
- do_print = !handler && print_unex && !initialising;
-
- inr = result();
- if(do_print)
- print_result("unexpected interrupt", inr);
- if (inr == 0){
- int max_sensei = 4;
- do {
- output_byte(FD_SENSEI);
- inr = result();
- if(do_print)
- print_result("sensei", inr);
- max_sensei--;
- } while ((ST0 & 0x83) != UNIT(current_drive) && inr == 2 &&
max_sensei);
- }
- if (handler) {
- if(intr_count >= 2) {
- /* expected interrupt */
- floppy_tq.routine = (void *)(void *) handler;
- queue_task_irq(&floppy_tq, &tq_immediate);
- mark_bh(IMMEDIATE_BH);
- } else
- handler();
- } else
- FDCS->reset = 1;
- is_alive("normal interrupt end");
-}
-
-static void recalibrate_floppy(void)
-{
-#ifdef DEBUGT
- debugt("recalibrate floppy:");
-#endif
- SET_INTR(recal_interrupt);
- output_byte(FD_RECALIBRATE);
- LAST_OUT(UNIT(current_drive));
-}
-
-/*
- * Must do 4 FD_SENSEIs after reset because of ``drive polling''.
- */
-static void reset_interrupt(void)
-{
-#ifdef DEBUGT
- debugt("reset interrupt:");
-#endif
- result(); /* get the status ready for set_fdc */
- if (FDCS->reset) {
- printk("reset set in interrupt, calling %p\n", cont->error);
- cont->error(); /* a reset just after a reset. BAD! */
- }
- cont->redo();
-}
-
-/*
- * reset is done by pulling bit 2 of DOR low for a while (old FDCs),
- * or by setting the self clearing bit 7 of STATUS (newer FDCs)
- */
-static void reset_fdc(void)
-{
- SET_INTR(reset_interrupt);
- FDCS->reset = 0;
- reset_fdc_info(0);
-
- /* Pseudo-DMA may intercept 'reset finished' interrupt. */
- /* Irrelevant for systems with true DMA (i386). */
- fd_disable_dma();
-
- if (FDCS->version >= FDC_82072A)
- fd_outb(0x80 | (FDCS->dtr &3), FD_STATUS);
- else {
- fd_outb(FDCS->dor & ~0x04, FD_DOR);
- udelay(FD_RESET_DELAY);
- fd_outb(FDCS->dor, FD_DOR);
- }
-}
-
-void show_floppy(void)
-{
- int i;
-
- printk("\n");
- printk("floppy driver state\n");
- printk("-------------------\n");
- printk("now=%ld last interrupt=%d last called handler=%p\n",
- jiffies, interruptjiffies, lasthandler);
-
-
-#ifdef FLOPPY_SANITY_CHECK
- printk("timeout_message=%s\n", timeout_message);
- printk("last output bytes:\n");
- for (i=0; i < OLOGSIZE; i++)
- printk("%2x %2x %ld\n",
- output_log[(i+output_log_pos) % OLOGSIZE].data,
- output_log[(i+output_log_pos) % OLOGSIZE].status,
- output_log[(i+output_log_pos) % OLOGSIZE].jiffies);
- printk("last result at %d\n", resultjiffies);
- printk("last redo_fd_request at %d\n", lastredo);
- for (i=0; i<resultsize; i++){
- printk("%2x ", reply_buffer[i]);
- }
- printk("\n");
-#endif
-
- printk("status=%x\n", fd_inb(FD_STATUS));
- printk("fdc_busy=%d\n", fdc_busy);
- if (DEVICE_INTR)
- printk("DEVICE_INTR=%p\n", DEVICE_INTR);
- if (floppy_tq.sync)
- printk("floppy_tq.routine=%p\n", floppy_tq.routine);
- if (fd_timer.prev)
- printk("fd_timer.function=%p\n", fd_timer.function);
- if (fd_timeout.prev){
- printk("timer_table=%p\n",fd_timeout.function);
- printk("expires=%ld\n",fd_timeout.expires-jiffies);
- printk("now=%ld\n",jiffies);
- }
- printk("cont=%p\n", cont);
- printk("CURRENT=%p\n", CURRENT);
- printk("command_status=%d\n", command_status);
- printk("\n");
-}
-
-static void floppy_shutdown(void)
-{
- if (!initialising)
- show_floppy();
- cancel_activity();
- sti();
-
- floppy_enable_hlt();
- fd_disable_dma();
- /* avoid dma going to a random drive after shutdown */
-
- if (!initialising)
- DPRINT("floppy timeout called\n");
- FDCS->reset = 1;
- if (cont){
- cont->done(0);
- cont->redo(); /* this will recall reset when needed */
- } else {
- printk("no cont in shutdown!\n");
- process_fd_request();
- }
- is_alive("floppy shutdown");
-}
-/*typedef void (*timeout_fn)(unsigned long);*/
-
-/* start motor, check media-changed condition and write protection */
-static int start_motor(void (*function)(void) )
-{
- int mask, data;
-
- mask = 0xfc;
- data = UNIT(current_drive);
- if (!(raw_cmd->flags & FD_RAW_NO_MOTOR)){
- if (!(FDCS->dor & (0x10 << UNIT(current_drive)))){
- set_debugt();
- /* no read since this drive is running */
- DRS->first_read_date = 0;
- /* note motor start time if motor is not yet running */
- DRS->spinup_date = jiffies;
- data |= (0x10 << UNIT(current_drive));
- }
- } else
- if (FDCS->dor & (0x10 << UNIT(current_drive)))
- mask &= ~(0x10 << UNIT(current_drive));
-
- /* starts motor and selects floppy */
- del_timer(motor_off_timer + current_drive);
- set_dor(fdc, mask, data);
-
- /* wait_for_completion also schedules reset if needed. */
- return(wait_for_completion(DRS->select_date+DP->select_delay,
- (timeout_fn) function));
-}
-
-static void floppy_ready(void)
-{
- CHECK_RESET;
- if (start_motor(floppy_ready)) return;
- if (fdc_dtr()) return;
-
-#ifdef DCL_DEBUG
- if (DP->flags & FD_DEBUG){
- DPRINT("calling disk change from floppy_ready\n");
- }
-#endif
-
- if (!(raw_cmd->flags & FD_RAW_NO_MOTOR) &&
- disk_change(current_drive) &&
- !DP->select_delay)
- twaddle(); /* this clears the dcl on certain drive/controller
- * combinations */
-
- if (raw_cmd->flags & (FD_RAW_NEED_SEEK | FD_RAW_NEED_DISK)){
- perpendicular_mode();
- fdc_specify(); /* must be done here because of hut, hlt ... */
- seek_floppy();
- } else
- setup_rw_floppy();
-}
-
-static void floppy_start(void)
-{
- reschedule_timeout(CURRENTD, "floppy start", 0);
-
- scandrives();
-#ifdef DCL_DEBUG
- if (DP->flags & FD_DEBUG){
- DPRINT("setting NEWCHANGE in floppy_start\n");
- }
-#endif
- SETF(FD_DISK_NEWCHANGE);
- floppy_ready();
-}
-
-/*
- * ========================================================================
- * here ends the bottom half. Exported routines are:
- * floppy_start, floppy_off, floppy_ready, lock_fdc, unlock_fdc, set_fdc,
- * start_motor, reset_fdc, reset_fdc_info, interpret_errors.
- * Initialization also uses output_byte, result, set_dor, floppy_interrupt
- * and set_dor.
- * ========================================================================
- */
-/*
- * General purpose continuations.
- * ==============================
- */
-
-static void do_wakeup(void)
-{
- reschedule_timeout(MAXTIMEOUT, "do wakeup", 0);
- cont = 0;
- command_status += 2;
- wake_up(&command_done);
-}
-
-static struct cont_t wakeup_cont={
- empty,
- do_wakeup,
- empty,
- (done_f)empty
-};
-
-
-static struct cont_t intr_cont={
- empty,
- process_fd_request,
- empty,
- (done_f) empty
-};
-
-static int wait_til_done(void (*handler)(void), int interruptible)
-{
- int ret;
- unsigned long flags;
-
- floppy_tq.routine = (void *)(void *) handler;
- queue_task(&floppy_tq, &tq_immediate);
- mark_bh(IMMEDIATE_BH);
- INT_OFF;
- while(command_status < 2 && NO_SIGNAL){
- is_alive("wait_til_done");
- if (interruptible)
- interruptible_sleep_on(&command_done);
- else
- sleep_on(&command_done);
- }
- if (command_status < 2){
- cancel_activity();
- cont = &intr_cont;
- reset_fdc();
- INT_ON;
- return -EINTR;
- }
- INT_ON;
-
- if (FDCS->reset)
- command_status = FD_COMMAND_ERROR;
- if (command_status == FD_COMMAND_OKAY)
- ret=0;
- else
- ret=-EIO;
- command_status = FD_COMMAND_NONE;
- return ret;
-}
-
-static void generic_done(int result)
-{
- command_status = result;
- cont = &wakeup_cont;
-}
-
-static void generic_success(void)
-{
- cont->done(1);
-}
-
-static void generic_failure(void)
-{
- cont->done(0);
-}
-
-static void success_and_wakeup(void)
-{
- generic_success();
- cont->redo();
-}
-
-
-/*
- * formatting and rw support.
- * ==========================
- */
-
-static int next_valid_format(void)
-{
- int probed_format;
-
- probed_format = DRS->probed_format;
- while(1){
- if (probed_format >= 8 ||
- !DP->autodetect[probed_format]){
- DRS->probed_format = 0;
- return 1;
- }
- if (floppy_type[DP->autodetect[probed_format]].sect){
- DRS->probed_format = probed_format;
- return 0;
- }
- probed_format++;
- }
-}
-
-static void bad_flp_intr(void)
-{
- if (probing){
- DRS->probed_format++;
- if (!next_valid_format())
- return;
- }
- (*errors)++;
- INFBOUND(DRWE->badness, *errors);
- if (*errors > DP->max_errors.abort)
- cont->done(0);
- if (*errors > DP->max_errors.reset)
- FDCS->reset = 1;
- else if (*errors > DP->max_errors.recal)
- DRS->track = NEED_2_RECAL;
-}
-
-static void set_floppy(kdev_t device)
-{
- if (TYPE(device))
- _floppy = TYPE(device) + floppy_type;
- else
- _floppy = current_type[ DRIVE(device) ];
-}
-
-/*
- * formatting support.
- * ===================
- */
-static void format_interrupt(void)
-{
- switch (interpret_errors()){
- case 1:
- cont->error();
- case 2:
- break;
- case 0:
- cont->done(1);
- }
- cont->redo();
-}
-
-#define CODE2SIZE (ssize = ((1 << SIZECODE) + 3) >> 2)
-#define FM_MODE(x,y) ((y) & ~(((x)->rate & 0x80) >>1))
-#define CT(x) ((x) | 0x40)
-static void setup_format_params(int track)
-{
- struct fparm {
- unsigned char track,head,sect,size;
- } *here = (struct fparm *)floppy_track_buffer;
- int il,n;
- int count,head_shift,track_shift;
-
- raw_cmd = &default_raw_cmd;
- raw_cmd->track = track;
-
- raw_cmd->flags = FD_RAW_WRITE | FD_RAW_INTR | FD_RAW_SPIN |
- FD_RAW_NEED_DISK | FD_RAW_NEED_SEEK;
- raw_cmd->rate = _floppy->rate & 0x43;
- raw_cmd->cmd_count = NR_F;
- COMMAND = FM_MODE(_floppy,FD_FORMAT);
- DR_SELECT = UNIT(current_drive) + PH_HEAD(_floppy,format_req.head);
- F_SIZECODE = FD_SIZECODE(_floppy);
- F_SECT_PER_TRACK = _floppy->sect << 2 >> F_SIZECODE;
- F_GAP = _floppy->fmt_gap;
- F_FILL = FD_FILL_BYTE;
-
- raw_cmd->kernel_data = floppy_track_buffer;
- raw_cmd->length = 4 * F_SECT_PER_TRACK;
-
- /* allow for about 30ms for data transport per track */
- head_shift = (F_SECT_PER_TRACK + 5) / 6;
-
- /* a ``cylinder'' is two tracks plus a little stepping time */
- track_shift = 2 * head_shift + 3;
-
- /* position of logical sector 1 on this track */
- n = (track_shift * format_req.track + head_shift * format_req.head)
- % F_SECT_PER_TRACK;
-
- /* determine interleave */
- il = 1;
- if (_floppy->fmt_gap < 0x22)
- il++;
-
- /* initialize field */
- for (count = 0; count < F_SECT_PER_TRACK; ++count) {
- here[count].track = format_req.track;
- here[count].head = format_req.head;
- here[count].sect = 0;
- here[count].size = F_SIZECODE;
- }
- /* place logical sectors */
- for (count = 1; count <= F_SECT_PER_TRACK; ++count) {
- here[n].sect = count;
- n = (n+il) % F_SECT_PER_TRACK;
- if (here[n].sect) { /* sector busy, find next free sector */
- ++n;
- if (n>= F_SECT_PER_TRACK) {
- n-=F_SECT_PER_TRACK;
- while (here[n].sect) ++n;
- }
- }
- }
-}
-
-static void redo_format(void)
-{
- buffer_track = -1;
- setup_format_params(format_req.track << STRETCH(_floppy));
- floppy_start();
-#ifdef DEBUGT
- debugt("queue format request");
-#endif
-}
-
-static struct cont_t format_cont={
- format_interrupt,
- redo_format,
- bad_flp_intr,
- generic_done };
-
-static int do_format(kdev_t device, struct format_descr *tmp_format_req)
-{
- int ret;
- int drive=DRIVE(device);
-
- LOCK_FDC(drive,1);
- set_floppy(device);
- if (!_floppy ||
- _floppy->track > DP->tracks ||
- tmp_format_req->track >= _floppy->track ||
- tmp_format_req->head >= _floppy->head ||
- (_floppy->sect << 2) % (1 << FD_SIZECODE(_floppy)) ||
- !_floppy->fmt_gap) {
- process_fd_request();
- return -EINVAL;
- }
- format_req = *tmp_format_req;
- format_errors = 0;
- cont = &format_cont;
- errors = &format_errors;
- IWAIT(redo_format);
- process_fd_request();
- return ret;
-}
-
-/*
- * Buffer read/write and support
- * =============================
- */
-
-/* new request_done. Can handle physical sectors which are smaller than a
- * logical buffer */
-static void request_done(int uptodate)
-{
- int block;
-
- probing = 0;
- reschedule_timeout(MAXTIMEOUT, "request done %d", uptodate);
-
- if (!CURRENT){
- DPRINT("request list destroyed in floppy request done\n");
- return;
- }
-
- if (uptodate){
- /* maintain values for invalidation on geometry
- * change */
- block = current_count_sectors + CURRENT->sector;
- INFBOUND(DRS->maxblock, block);
- if (block > _floppy->sect)
- DRS->maxtrack = 1;
-
- /* unlock chained buffers */
- while (current_count_sectors && CURRENT &&
- current_count_sectors >= CURRENT->current_nr_sectors){
- current_count_sectors -= CURRENT->current_nr_sectors;
- CURRENT->nr_sectors -= CURRENT->current_nr_sectors;
- CURRENT->sector += CURRENT->current_nr_sectors;
- end_request(1);
- }
- if (current_count_sectors && CURRENT){
- /* "unlock" last subsector */
- CURRENT->buffer += current_count_sectors <<9;
- CURRENT->current_nr_sectors -= current_count_sectors;
- CURRENT->nr_sectors -= current_count_sectors;
- CURRENT->sector += current_count_sectors;
- return;
- }
-
- if (current_count_sectors && !CURRENT)
- DPRINT("request list destroyed in floppy request
done\n");
-
- } else {
- if (CURRENT->cmd == WRITE) {
- /* record write error information */
- DRWE->write_errors++;
- if (DRWE->write_errors == 1) {
- DRWE->first_error_sector = CURRENT->sector;
- DRWE->first_error_generation = DRS->generation;
- }
- DRWE->last_error_sector = CURRENT->sector;
- DRWE->last_error_generation = DRS->generation;
- }
- end_request(0);
- }
-}
-
-/* Interrupt handler evaluating the result of the r/w operation */
-static void rw_interrupt(void)
-{
- int nr_sectors, ssize, eoc;
-
- if (!DRS->first_read_date)
- DRS->first_read_date = jiffies;
-
- nr_sectors = 0;
- CODE2SIZE;
-
- if(ST1 & ST1_EOC)
- eoc = 1;
- else
- eoc = 0;
- nr_sectors = ((R_TRACK-TRACK)*_floppy->head+R_HEAD-HEAD) *
- _floppy->sect + ((R_SECTOR-SECTOR+eoc) << SIZECODE >> 2) -
- (sector_t % _floppy->sect) % ssize;
-
-#ifdef FLOPPY_SANITY_CHECK
- if (nr_sectors > current_count_sectors + ssize -
- (current_count_sectors + sector_t) % ssize +
- sector_t % ssize){
- DPRINT("long rw: %x instead of %lx\n",
- nr_sectors, current_count_sectors);
- printk("rs=%d s=%d\n", R_SECTOR, SECTOR);
- printk("rh=%d h=%d\n", R_HEAD, HEAD);
- printk("rt=%d t=%d\n", R_TRACK, TRACK);
- printk("spt=%d st=%d ss=%d\n", SECT_PER_TRACK,
- sector_t, ssize);
- }
-#endif
- INFBOUND(nr_sectors,0);
- SUPBOUND(current_count_sectors, nr_sectors);
-
- switch (interpret_errors()){
- case 2:
- cont->redo();
- return;
- case 1:
- if (!current_count_sectors){
- cont->error();
- cont->redo();
- return;
- }
- break;
- case 0:
- if (!current_count_sectors){
- cont->redo();
- return;
- }
- current_type[current_drive] = _floppy;
- floppy_sizes[TOMINOR(current_drive) ]= _floppy->size>>1;
- break;
- }
-
- if (probing) {
- if (DP->flags & FTD_MSG)
- DPRINT("Auto-detected floppy type %s in fd%d\n",
- _floppy->name,current_drive);
- current_type[current_drive] = _floppy;
- floppy_sizes[TOMINOR(current_drive)] = _floppy->size >> 1;
- probing = 0;
- }
-
- if (CT(COMMAND) != FD_READ ||
- raw_cmd->kernel_data == CURRENT->buffer){
- /* transfer directly from buffer */
- cont->done(1);
- } else if (CT(COMMAND) == FD_READ){
- buffer_track = raw_cmd->track;
- buffer_drive = current_drive;
- INFBOUND(buffer_max, nr_sectors + sector_t);
- }
- cont->redo();
-}
-
-/* Compute maximal contiguous buffer size. */
-static int buffer_chain_size(void)
-{
- struct buffer_head *bh;
- int size;
- char *base;
-
- base = CURRENT->buffer;
- size = CURRENT->current_nr_sectors << 9;
- bh = CURRENT->bh;
-
- if (bh){
- bh = bh->b_reqnext;
- while (bh && bh->b_data == base + size){
- size += bh->b_size;
- bh = bh->b_reqnext;
- }
- }
- return size >> 9;
-}
-
-/* Compute the maximal transfer size */
-static int transfer_size(int ssize, int max_sector, int max_size)
-{
- SUPBOUND(max_sector, sector_t + max_size);
-
- /* alignment */
- max_sector -= (max_sector % _floppy->sect) % ssize;
-
- /* transfer size, beginning not aligned */
- current_count_sectors = max_sector - sector_t ;
-
- return max_sector;
-}
-
-/*
- * Move data from/to the track buffer to/from the buffer cache.
- */
-static void copy_buffer(int ssize, int max_sector, int max_sector_2)
-{
- int remaining; /* number of transferred 512-byte sectors */
- struct buffer_head *bh;
- char *buffer, *dma_buffer;
- int size;
-
- max_sector = transfer_size(ssize,
- minimum(max_sector, max_sector_2),
- CURRENT->nr_sectors);
-
- if (current_count_sectors <= 0 && CT(COMMAND) == FD_WRITE &&
- buffer_max > sector_t + CURRENT->nr_sectors)
- current_count_sectors = minimum(buffer_max - sector_t,
- CURRENT->nr_sectors);
-
- remaining = current_count_sectors << 9;
-#ifdef FLOPPY_SANITY_CHECK
- if ((remaining >> 9) > CURRENT->nr_sectors &&
- CT(COMMAND) == FD_WRITE){
- DPRINT("in copy buffer\n");
- printk("current_count_sectors=%ld\n", current_count_sectors);
- printk("remaining=%d\n", remaining >> 9);
- printk("CURRENT->nr_sectors=%ld\n",CURRENT->nr_sectors);
- printk("CURRENT->current_nr_sectors=%ld\n",
- CURRENT->current_nr_sectors);
- printk("max_sector=%d\n", max_sector);
- printk("ssize=%d\n", ssize);
- }
-#endif
-
- buffer_max = maximum(max_sector, buffer_max);
-
- dma_buffer = floppy_track_buffer + ((sector_t - buffer_min) << 9);
-
- bh = CURRENT->bh;
- size = CURRENT->current_nr_sectors << 9;
- buffer = CURRENT->buffer;
-
- while (remaining > 0){
- SUPBOUND(size, remaining);
-#ifdef FLOPPY_SANITY_CHECK
- if (dma_buffer + size >
- floppy_track_buffer + (max_buffer_sectors << 10) ||
- dma_buffer < floppy_track_buffer){
- DPRINT("buffer overrun in copy buffer %d\n",
- (int) ((floppy_track_buffer - dma_buffer) >>9));
- printk("sector_t=%d buffer_min=%d\n",
- sector_t, buffer_min);
- printk("current_count_sectors=%ld\n",
- current_count_sectors);
- if (CT(COMMAND) == FD_READ)
- printk("read\n");
- if (CT(COMMAND) == FD_READ)
- printk("write\n");
- break;
- }
- if (((unsigned long)buffer) % 512)
- DPRINT("%p buffer not aligned\n", buffer);
-#endif
- if (CT(COMMAND) == FD_READ)
- memcpy(buffer, dma_buffer, size);
- else
- memcpy(dma_buffer, buffer, size);
- remaining -= size;
- if (!remaining)
- break;
-
- dma_buffer += size;
- bh = bh->b_reqnext;
-#ifdef FLOPPY_SANITY_CHECK
- if (!bh){
- DPRINT("bh=null in copy buffer after copy\n");
- break;
- }
-#endif
- size = bh->b_size;
- buffer = bh->b_data;
- }
-#ifdef FLOPPY_SANITY_CHECK
- if (remaining){
- if (remaining > 0)
- max_sector -= remaining >> 9;
- DPRINT("weirdness: remaining %d\n", remaining>>9);
- }
-#endif
-}
-
-/*
- * Formulate a read/write request.
- * this routine decides where to load the data (directly to buffer, or to
- * tmp floppy area), how much data to load (the size of the buffer, the whole
- * track, or a single sector)
- * All floppy_track_buffer handling goes in here. If we ever add track buffer
- * allocation on the fly, it should be done here. No other part should need
- * modification.
- */
-
-static int make_raw_rw_request(void)
-{
- int aligned_sector_t;
- int max_sector, max_size, tracksize, ssize;
-
- set_fdc(DRIVE(CURRENT->rq_dev));
-
- raw_cmd = &default_raw_cmd;
- raw_cmd->flags = FD_RAW_SPIN | FD_RAW_NEED_DISK | FD_RAW_NEED_DISK |
- FD_RAW_NEED_SEEK;
- raw_cmd->cmd_count = NR_RW;
- if (CURRENT->cmd == READ){
- raw_cmd->flags |= FD_RAW_READ;
- COMMAND = FM_MODE(_floppy,FD_READ);
- } else if (CURRENT->cmd == WRITE){
- raw_cmd->flags |= FD_RAW_WRITE;
- COMMAND = FM_MODE(_floppy,FD_WRITE);
- } else {
- DPRINT("make_raw_rw_request: unknown command\n");
- return 0;
- }
-
- max_sector = _floppy->sect * _floppy->head;
-
- TRACK = CURRENT->sector / max_sector;
- sector_t = CURRENT->sector % max_sector;
- if (_floppy->track && TRACK >= _floppy->track)
- return 0;
- HEAD = sector_t / _floppy->sect;
-
- if (((_floppy->stretch & FD_SWAPSIDES) || TESTF(FD_NEED_TWADDLE)) &&
- sector_t < _floppy->sect)
- max_sector = _floppy->sect;
-
- /* 2M disks have phantom sectors on the first track */
- if ((_floppy->rate & FD_2M) && (!TRACK) && (!HEAD)){
- max_sector = 2 * _floppy->sect / 3;
- if (sector_t >= max_sector){
- current_count_sectors = minimum(_floppy->sect -
sector_t,
- CURRENT->nr_sectors);
- return 1;
- }
- SIZECODE = 2;
- } else
- SIZECODE = FD_SIZECODE(_floppy);
- raw_cmd->rate = _floppy->rate & 0x43;
- if ((_floppy->rate & FD_2M) &&
- (TRACK || HEAD) &&
- raw_cmd->rate == 2)
- raw_cmd->rate = 1;
-
- if (SIZECODE)
- SIZECODE2 = 0xff;
- else
- SIZECODE2 = 0x80;
- raw_cmd->track = TRACK << STRETCH(_floppy);
- DR_SELECT = UNIT(current_drive) + PH_HEAD(_floppy,HEAD);
- GAP = _floppy->gap;
- CODE2SIZE;
- SECT_PER_TRACK = _floppy->sect << 2 >> SIZECODE;
- SECTOR = ((sector_t % _floppy->sect) << 2 >> SIZECODE) + 1;
- tracksize = _floppy->sect - _floppy->sect % ssize;
- if (tracksize < _floppy->sect){
- SECT_PER_TRACK ++;
- if (tracksize <= sector_t % _floppy->sect)
- SECTOR--;
- while (tracksize <= sector_t % _floppy->sect){
- while(tracksize + ssize > _floppy->sect){
- SIZECODE--;
- ssize >>= 1;
- }
- SECTOR++; SECT_PER_TRACK ++;
- tracksize += ssize;
- }
- max_sector = HEAD * _floppy->sect + tracksize;
- } else if (!TRACK && !HEAD && !(_floppy->rate & FD_2M) && probing)
- max_sector = _floppy->sect;
-
- aligned_sector_t = sector_t - (sector_t % _floppy->sect) % ssize;
- max_size = CURRENT->nr_sectors;
- if ((raw_cmd->track == buffer_track) &&
- (current_drive == buffer_drive) &&
- (sector_t >= buffer_min) && (sector_t < buffer_max)) {
- /* data already in track buffer */
- if (CT(COMMAND) == FD_READ) {
- copy_buffer(1, max_sector, buffer_max);
- return 1;
- }
- } else if (aligned_sector_t != sector_t || CURRENT->nr_sectors < ssize){
- if (CT(COMMAND) == FD_WRITE){
- if (sector_t + CURRENT->nr_sectors > ssize &&
- sector_t + CURRENT->nr_sectors < ssize + ssize)
- max_size = ssize + ssize;
- else
- max_size = ssize;
- }
- raw_cmd->flags &= ~FD_RAW_WRITE;
- raw_cmd->flags |= FD_RAW_READ;
- COMMAND = FM_MODE(_floppy,FD_READ);
- } else if ((unsigned long)CURRENT->buffer < MAX_DMA_ADDRESS) {
- unsigned long dma_limit;
- int direct, indirect;
-
- indirect= transfer_size(ssize,max_sector,max_buffer_sectors*2) -
- sector_t;
-
- /*
- * Do NOT use minimum() here---MAX_DMA_ADDRESS is 64 bits wide
- * on a 64 bit machine!
- */
- max_size = buffer_chain_size();
- dma_limit = (MAX_DMA_ADDRESS - ((unsigned long)
CURRENT->buffer)) >> 9;
- if ((unsigned long) max_size > dma_limit) {
- max_size = dma_limit;
- }
- /* 64 kb boundaries */
- if (CROSS_64KB(CURRENT->buffer, max_size << 9))
- max_size = (K_64 - ((long) CURRENT->buffer) % K_64)>>9;
- direct = transfer_size(ssize,max_sector,max_size) - sector_t;
- /*
- * We try to read tracks, but if we get too many errors, we
- * go back to reading just one sector at a time.
- *
- * This means we should be able to read a sector even if there
- * are other bad sectors on this track.
- */
- if (!direct ||
- (indirect * 2 > direct * 3 &&
- *errors < DP->max_errors.read_track &&
- /*!TESTF(FD_NEED_TWADDLE) &&*/
- ((!probing || (DP->read_track&(1<<DRS->probed_format)))))){
- max_size = CURRENT->nr_sectors;
- } else {
- raw_cmd->kernel_data = CURRENT->buffer;
- raw_cmd->length = current_count_sectors << 9;
- if (raw_cmd->length == 0){
- DPRINT("zero dma transfer attempted from
make_raw_request\n");
- DPRINT("indirect=%d direct=%d sector_t=%d",
- indirect, direct, sector_t);
- return 0;
- }
- return 2;
- }
- }
-
- if (CT(COMMAND) == FD_READ)
- max_size = max_sector; /* unbounded */
-
- /* claim buffer track if needed */
- if (buffer_track != raw_cmd->track || /* bad track */
- buffer_drive !=current_drive || /* bad drive */
- sector_t > buffer_max ||
- sector_t < buffer_min ||
- ((CT(COMMAND) == FD_READ ||
- (aligned_sector_t == sector_t && CURRENT->nr_sectors >= ssize))&&
- max_sector > 2 * max_buffer_sectors + buffer_min &&
- max_size + sector_t > 2 * max_buffer_sectors + buffer_min)
- /* not enough space */){
- buffer_track = -1;
- buffer_drive = current_drive;
- buffer_max = buffer_min = aligned_sector_t;
- }
- raw_cmd->kernel_data = floppy_track_buffer +
- ((aligned_sector_t-buffer_min)<<9);
-
- if (CT(COMMAND) == FD_WRITE){
- /* copy write buffer to track buffer.
- * if we get here, we know that the write
- * is either aligned or the data already in the buffer
- * (buffer will be overwritten) */
-#ifdef FLOPPY_SANITY_CHECK
- if (sector_t != aligned_sector_t && buffer_track == -1)
- DPRINT("internal error offset !=0 on write\n");
-#endif
- buffer_track = raw_cmd->track;
- buffer_drive = current_drive;
- copy_buffer(ssize, max_sector, 2*max_buffer_sectors+buffer_min);
- } else
- transfer_size(ssize, max_sector,
- 2*max_buffer_sectors+buffer_min-aligned_sector_t);
-
- /* round up current_count_sectors to get dma xfer size */
- raw_cmd->length = sector_t+current_count_sectors-aligned_sector_t;
- raw_cmd->length = ((raw_cmd->length -1)|(ssize-1))+1;
- raw_cmd->length <<= 9;
-#ifdef FLOPPY_SANITY_CHECK
- if ((raw_cmd->length < current_count_sectors << 9) ||
- (raw_cmd->kernel_data != CURRENT->buffer &&
- CT(COMMAND) == FD_WRITE &&
- (aligned_sector_t + (raw_cmd->length >> 9) > buffer_max ||
- aligned_sector_t < buffer_min)) ||
- raw_cmd->length % (128 << SIZECODE) ||
- raw_cmd->length <= 0 || current_count_sectors <= 0){
- DPRINT("fractionary current count b=%lx s=%lx\n",
- raw_cmd->length, current_count_sectors);
- if (raw_cmd->kernel_data != CURRENT->buffer)
- printk("addr=%d, length=%ld\n",
- (int) ((raw_cmd->kernel_data -
- floppy_track_buffer) >> 9),
- current_count_sectors);
- printk("st=%d ast=%d mse=%d msi=%d\n",
- sector_t, aligned_sector_t, max_sector, max_size);
- printk("ssize=%x SIZECODE=%d\n", ssize, SIZECODE);
- printk("command=%x SECTOR=%d HEAD=%d, TRACK=%d\n",
- COMMAND, SECTOR, HEAD, TRACK);
- printk("buffer drive=%d\n", buffer_drive);
- printk("buffer track=%d\n", buffer_track);
- printk("buffer_min=%d\n", buffer_min);
- printk("buffer_max=%d\n", buffer_max);
- return 0;
- }
-
- if (raw_cmd->kernel_data != CURRENT->buffer){
- if (raw_cmd->kernel_data < floppy_track_buffer ||
- current_count_sectors < 0 ||
- raw_cmd->length < 0 ||
- raw_cmd->kernel_data + raw_cmd->length >
- floppy_track_buffer + (max_buffer_sectors << 10)){
- DPRINT("buffer overrun in schedule dma\n");
- printk("sector_t=%d buffer_min=%d current_count=%ld\n",
- sector_t, buffer_min,
- raw_cmd->length >> 9);
- printk("current_count_sectors=%ld\n",
- current_count_sectors);
- if (CT(COMMAND) == FD_READ)
- printk("read\n");
- if (CT(COMMAND) == FD_READ)
- printk("write\n");
- return 0;
- }
- } else if (raw_cmd->length > CURRENT->nr_sectors << 9 ||
- current_count_sectors > CURRENT->nr_sectors){
- DPRINT("buffer overrun in direct transfer\n");
- return 0;
- } else if (raw_cmd->length < current_count_sectors << 9){
- DPRINT("more sectors than bytes\n");
- printk("bytes=%ld\n", raw_cmd->length >> 9);
- printk("sectors=%ld\n", current_count_sectors);
- }
- if (raw_cmd->length == 0){
- DPRINT("zero dma transfer attempted from make_raw_request\n");
- return 0;
- }
-#endif
- return 2;
-}
-
-static void redo_fd_request(void)
-{
-#define REPEAT {request_done(0); continue; }
- kdev_t device;
- int tmp;
-
- lastredo = jiffies;
- if (current_drive < N_DRIVE)
- floppy_off(current_drive);
-
- if (CURRENT && CURRENT->rq_status == RQ_INACTIVE){
- CLEAR_INTR;
- unlock_fdc();
- return;
- }
-
- while(1){
- if (!CURRENT) {
- CLEAR_INTR;
- unlock_fdc();
- return;
- }
- if (MAJOR(CURRENT->rq_dev) != MAJOR_NR)
- panic(DEVICE_NAME ": request list destroyed");
- if (CURRENT->bh && !buffer_locked(CURRENT->bh))
- panic(DEVICE_NAME ": block not locked");
-
- device = CURRENT->rq_dev;
- set_fdc(DRIVE(device));
- reschedule_timeout(CURRENTD, "redo fd request", 0);
-
- set_floppy(device);
- raw_cmd = & default_raw_cmd;
- raw_cmd->flags = 0;
- if (start_motor(redo_fd_request)) return;
- disk_change(current_drive);
- if (test_bit(current_drive, &fake_change) ||
- TESTF(FD_DISK_CHANGED)){
- DPRINT("disk absent or changed during operation\n");
- REPEAT;
- }
- if (!_floppy) { /* Autodetection */
- if (!probing){
- DRS->probed_format = 0;
- if (next_valid_format()){
- DPRINT("no autodetectable formats\n");
- _floppy = NULL;
- REPEAT;
- }
- }
- probing = 1;
- _floppy =
floppy_type+DP->autodetect[DRS->probed_format];
- } else
- probing = 0;
- errors = & (CURRENT->errors);
- tmp = make_raw_rw_request();
- if (tmp < 2){
- request_done(tmp);
- continue;
- }
-
- if (TESTF(FD_NEED_TWADDLE))
- twaddle();
- floppy_tq.routine = (void *)(void *) floppy_start;
- queue_task(&floppy_tq, &tq_immediate);
- mark_bh(IMMEDIATE_BH);
-#ifdef DEBUGT
- debugt("queue fd request");
-#endif
- return;
- }
-#undef REPEAT
-}
-
-static struct cont_t rw_cont={
- rw_interrupt,
- redo_fd_request,
- bad_flp_intr,
- request_done };
-
-static struct tq_struct request_tq =
-{ 0, 0, (void *) (void *) redo_fd_request, 0 };
-
-static void process_fd_request(void)
-{
- cont = &rw_cont;
- queue_task(&request_tq, &tq_immediate);
- mark_bh(IMMEDIATE_BH);
-}
-
-static void do_fd_request(void)
-{
- sti();
- if (fdc_busy){
- /* fdc busy, this new request will be treated when the
- current one is done */
- is_alive("do fd request, old request running");
- return;
- }
- lock_fdc(MAXTIMEOUT,0);
- process_fd_request();
- is_alive("do fd request");
-}
-
-static struct cont_t poll_cont={
- success_and_wakeup,
- floppy_ready,
- generic_failure,
- generic_done };
-
-static int poll_drive(int interruptible, int flag)
-{
- int ret;
- /* no auto-sense, just clear dcl */
- raw_cmd = &default_raw_cmd;
- raw_cmd->flags= flag;
- raw_cmd->track=0;
- raw_cmd->cmd_count=0;
- cont = &poll_cont;
-#ifdef DCL_DEBUG
- if (DP->flags & FD_DEBUG){
- DPRINT("setting NEWCHANGE in poll_drive\n");
- }
-#endif
- SETF(FD_DISK_NEWCHANGE);
- WAIT(floppy_ready);
- return ret;
-}
-
-/*
- * User triggered reset
- * ====================
- */
-
-static void reset_intr(void)
-{
- printk("weird, reset interrupt called\n");
-}
-
-static struct cont_t reset_cont={
- reset_intr,
- success_and_wakeup,
- generic_failure,
- generic_done };
-
-static int user_reset_fdc(int drive, int arg, int interruptible)
-{
- int ret;
-
- ret=0;
- LOCK_FDC(drive,interruptible);
- if (arg == FD_RESET_ALWAYS)
- FDCS->reset=1;
- if (FDCS->reset){
- cont = &reset_cont;
- WAIT(reset_fdc);
- }
- process_fd_request();
- return ret;
-}
-
-/*
- * Misc Ioctl's and support
- * ========================
- */
-static int fd_copyout(void *param, const void *address, int size)
-{
- int ret;
-
- ECALL(verify_area(VERIFY_WRITE,param,size));
- memcpy_tofs(param,(void *) address, size);
- return 0;
-}
-
-static int fd_copyin(void *param, void *address, int size)
-{
- int ret;
-
- ECALL(verify_area(VERIFY_READ,param,size));
- memcpy_fromfs((void *) address, param, size);
- return 0;
-}
-
-#define COPYOUT(x) ECALL(fd_copyout((void *)param, &(x), sizeof(x)))
-#define COPYIN(x) ECALL(fd_copyin((void *)param, &(x), sizeof(x)))
-
-static inline const char *drive_name(int type, int drive)
-{
- struct floppy_struct *floppy;
-
- if (type)
- floppy = floppy_type + type;
- else {
- if (UDP->native_format)
- floppy = floppy_type + UDP->native_format;
- else
- return "(null)";
- }
- if (floppy->name)
- return floppy->name;
- else
- return "(null)";
-}
-
-
-/* raw commands */
-static void raw_cmd_done(int flag)
-{
- int i;
-
- if (!flag) {
- raw_cmd->flags |= FD_RAW_FAILURE;
- raw_cmd->flags |= FD_RAW_HARDFAILURE;
- } else {
- raw_cmd->reply_count = inr;
- for (i=0; i< raw_cmd->reply_count; i++)
- raw_cmd->reply[i] = reply_buffer[i];
-
- if (raw_cmd->flags & (FD_RAW_READ | FD_RAW_WRITE))
- raw_cmd->length = fd_get_dma_residue();
-
- if ((raw_cmd->flags & FD_RAW_SOFTFAILURE) &&
- (!raw_cmd->reply_count || (raw_cmd->reply[0] & 0xc0)))
- raw_cmd->flags |= FD_RAW_FAILURE;
-
- if (disk_change(current_drive))
- raw_cmd->flags |= FD_RAW_DISK_CHANGE;
- else
- raw_cmd->flags &= ~FD_RAW_DISK_CHANGE;
- if (raw_cmd->flags & FD_RAW_NO_MOTOR_AFTER)
- motor_off_callback(current_drive);
-
- if (raw_cmd->next &&
- (!(raw_cmd->flags & FD_RAW_FAILURE) ||
- !(raw_cmd->flags & FD_RAW_STOP_IF_FAILURE)) &&
- ((raw_cmd->flags & FD_RAW_FAILURE) ||
- !(raw_cmd->flags &FD_RAW_STOP_IF_SUCCESS))) {
- raw_cmd = raw_cmd->next;
- return;
- }
- }
- generic_done(flag);
-}
-
-
-static struct cont_t raw_cmd_cont={
- success_and_wakeup,
- floppy_start,
- generic_failure,
- raw_cmd_done
-};
-
-static inline int raw_cmd_copyout(int cmd, char *param,
- struct floppy_raw_cmd *ptr)
-{
- struct old_floppy_raw_cmd old_raw_cmd;
- int ret;
-
- while(ptr) {
- if (cmd == OLDFDRAWCMD) {
- old_raw_cmd.flags = ptr->flags;
- old_raw_cmd.data = ptr->data;
- old_raw_cmd.length = ptr->length;
- old_raw_cmd.rate = ptr->rate;
- old_raw_cmd.reply_count = ptr->reply_count;
- memcpy(old_raw_cmd.reply, ptr->reply, 7);
- COPYOUT(old_raw_cmd);
- param += sizeof(old_raw_cmd);
- } else {
- COPYOUT(*ptr);
- param += sizeof(struct floppy_raw_cmd);
- }
-
- if ((ptr->flags & FD_RAW_READ) && ptr->buffer_length){
- if (ptr->length>=0 && ptr->length<=ptr->buffer_length)
- ECALL(fd_copyout(ptr->data,
- ptr->kernel_data,
- ptr->buffer_length -
- ptr->length));
- }
- ptr = ptr->next;
- }
- return 0;
-}
-
-
-static void raw_cmd_free(struct floppy_raw_cmd **ptr)
-{
- struct floppy_raw_cmd *next,*this;
-
- this = *ptr;
- *ptr = 0;
- while(this) {
- if (this->buffer_length) {
- fd_dma_mem_free((unsigned long)this->kernel_data,
- this->buffer_length);
- this->buffer_length = 0;
- }
- next = this->next;
- kfree(this);
- this = next;
- }
-}
-
-
-static inline int raw_cmd_copyin(int cmd, char *param,
- struct floppy_raw_cmd **rcmd)
-{
- struct floppy_raw_cmd *ptr;
- struct old_floppy_raw_cmd old_raw_cmd;
- int ret;
- int i;
-
- *rcmd = 0;
- while(1) {
- ptr = (struct floppy_raw_cmd *)
- kmalloc(sizeof(struct floppy_raw_cmd), GFP_USER);
- if (!ptr)
- return -ENOMEM;
- *rcmd = ptr;
- if (cmd == OLDFDRAWCMD){
- COPYIN(old_raw_cmd);
- ptr->flags = old_raw_cmd.flags;
- ptr->data = old_raw_cmd.data;
- ptr->length = old_raw_cmd.length;
- ptr->rate = old_raw_cmd.rate;
- ptr->cmd_count = old_raw_cmd.cmd_count;
- ptr->track = old_raw_cmd.track;
- ptr->phys_length = 0;
- ptr->next = 0;
- ptr->buffer_length = 0;
- memcpy(ptr->cmd, old_raw_cmd.cmd, 9);
- param += sizeof(struct old_floppy_raw_cmd);
- if (ptr->cmd_count > 9)
- return -EINVAL;
- } else {
- COPYIN(*ptr);
- ptr->next = 0;
- ptr->buffer_length = 0;
- param += sizeof(struct floppy_raw_cmd);
- if (ptr->cmd_count > 33)
- /* the command may now also take up the space
- * initially intended for the reply & the
- * reply count. Needed for long 82078 commands
- * such as RESTORE, which takes ... 17 command
- * bytes. Murphy's law #137: When you reserve
- * 16 bytes for a structure, you'll one day
- * discover that you really need 17...
- */
- return -EINVAL;
- }
-
- for (i=0; i< 16; i++)
- ptr->reply[i] = 0;
- ptr->resultcode = 0;
- ptr->kernel_data = 0;
-
- if (ptr->flags & (FD_RAW_READ | FD_RAW_WRITE)) {
- if (ptr->length <= 0)
- return -EINVAL;
- ptr->kernel_data =(char*)fd_dma_mem_alloc(ptr->length);
- if (!ptr->kernel_data)
- return -ENOMEM;
- ptr->buffer_length = ptr->length;
- }
- if ( ptr->flags & FD_RAW_READ )
- ECALL( verify_area( VERIFY_WRITE, ptr->data,
- ptr->length ));
- if (ptr->flags & FD_RAW_WRITE)
- ECALL(fd_copyin(ptr->data, ptr->kernel_data,
- ptr->length));
- rcmd = & (ptr->next);
- if (!(ptr->flags & FD_RAW_MORE))
- return 0;
- ptr->rate &= 0x43;
- }
-}
-
-
-static int raw_cmd_ioctl(int cmd, void *param)
-{
- int drive, ret, ret2;
- struct floppy_raw_cmd *my_raw_cmd;
-
- if (FDCS->rawcmd <= 1)
- FDCS->rawcmd = 1;
- for (drive= 0; drive < N_DRIVE; drive++){
- if (FDC(drive) != fdc)
- continue;
- if (drive == current_drive){
- if (UDRS->fd_ref > 1){
- FDCS->rawcmd = 2;
- break;
- }
- } else if (UDRS->fd_ref){
- FDCS->rawcmd = 2;
- break;
- }
- }
-
- if (FDCS->reset)
- return -EIO;
-
- ret = raw_cmd_copyin(cmd, param, &my_raw_cmd);
- if (ret) {
- raw_cmd_free(&my_raw_cmd);
- return ret;
- }
-
- raw_cmd = my_raw_cmd;
- cont = &raw_cmd_cont;
- ret=wait_til_done(floppy_start,1);
-#ifdef DCL_DEBUG
- if (DP->flags & FD_DEBUG){
- DPRINT("calling disk change from raw_cmd ioctl\n");
- }
-#endif
-
- if (ret != -EINTR && FDCS->reset)
- ret = -EIO;
-
- DRS->track = NO_TRACK;
-
- ret2 = raw_cmd_copyout(cmd, param, my_raw_cmd);
- if (!ret)
- ret = ret2;
- raw_cmd_free(&my_raw_cmd);
- return ret;
-}
-
-static int invalidate_drive(kdev_t rdev)
-{
- /* invalidate the buffer track to force a reread */
- set_bit(DRIVE(rdev), &fake_change);
- process_fd_request();
- check_disk_change(rdev);
- return 0;
-}
-
-
-static inline void clear_write_error(int drive)
-{
- CLEARSTRUCT(UDRWE);
-}
-
-static inline int set_geometry(unsigned int cmd, struct floppy_struct *g,
- int drive, int type, kdev_t device)
-{
- int cnt;
-
- /* sanity checking for parameters.*/
- if (g->sect <= 0 ||
- g->head <= 0 ||
- g->track <= 0 ||
- g->track > UDP->tracks>>STRETCH(g) ||
- /* check if reserved bits are set */
- (g->stretch&~(FD_STRETCH|FD_SWAPSIDES)) != 0)
- return -EINVAL;
- if (type){
- if (!suser())
- return -EPERM;
- LOCK_FDC(drive,1);
- for (cnt = 0; cnt < N_DRIVE; cnt++){
- if (ITYPE(drive_state[cnt].fd_device) == type &&
- drive_state[cnt].fd_ref)
- set_bit(drive, &fake_change);
- }
- floppy_type[type] = *g;
- floppy_type[type].name="user format";
- for (cnt = type << 2; cnt < (type << 2) + 4; cnt++)
- floppy_sizes[cnt]= floppy_sizes[cnt+0x80]=
- floppy_type[type].size>>1;
- process_fd_request();
- for (cnt = 0; cnt < N_DRIVE; cnt++){
- if (ITYPE(drive_state[cnt].fd_device) == type &&
- drive_state[cnt].fd_ref)
- check_disk_change(
- MKDEV(FLOPPY_MAJOR,
- drive_state[cnt].fd_device));
- }
- } else {
- LOCK_FDC(drive,1);
- if (cmd != FDDEFPRM)
- /* notice a disk change immediately, else
- * we loose our settings immediately*/
- CALL(poll_drive(1, FD_RAW_NEED_DISK));
- user_params[drive] = *g;
- if (buffer_drive == drive)
- SUPBOUND(buffer_max, user_params[drive].sect);
- current_type[drive] = &user_params[drive];
- floppy_sizes[drive] = user_params[drive].size >> 1;
- if (cmd == FDDEFPRM)
- DRS->keep_data = -1;
- else
- DRS->keep_data = 1;
- /* invalidation. Invalidate only when needed, i.e.
- * when there are already sectors in the buffer cache
- * whose number will change. This is useful, because
- * mtools often changes the geometry of the disk after
- * looking at the boot block */
- if (DRS->maxblock > user_params[drive].sect || DRS->maxtrack)
- invalidate_drive(device);
- else
- process_fd_request();
- }
- return 0;
-}
-
-/* handle obsolete ioctl's */
-static struct translation_entry {
- int newcmd;
- int oldcmd;
- int oldsize; /* size of 0x00xx-style ioctl. Reflects old structures, thus
- * use numeric values. NO SIZEOFS */
-} translation_table[]= {
- {FDCLRPRM, 0, 0},
- {FDSETPRM, 1, 28},
- {FDDEFPRM, 2, 28},
- {FDGETPRM, 3, 28},
- {FDMSGON, 4, 0},
- {FDMSGOFF, 5, 0},
- {FDFMTBEG, 6, 0},
- {FDFMTTRK, 7, 12},
- {FDFMTEND, 8, 0},
- {FDSETEMSGTRESH, 10, 0},
- {FDFLUSH, 11, 0},
- {FDSETMAXERRS, 12, 20},
- {OLDFDRAWCMD, 30, 0},
- {FDGETMAXERRS, 14, 20},
- {FDGETDRVTYP, 16, 16},
- {FDSETDRVPRM, 20, 88},
- {FDGETDRVPRM, 21, 88},
- {FDGETDRVSTAT, 22, 52},
- {FDPOLLDRVSTAT, 23, 52},
- {FDRESET, 24, 0},
- {FDGETFDCSTAT, 25, 40},
- {FDWERRORCLR, 27, 0},
- {FDWERRORGET, 28, 24},
- {FDRAWCMD, 0, 0},
- {FDEJECT, 0, 0},
- {FDTWADDLE, 40, 0} };
-
-static inline int normalize_0x02xx_ioctl(int *cmd, int *size)
-{
- int i;
-
- for (i=0; i < ARRAY_SIZE(translation_table); i++) {
- if ((*cmd & 0xffff) == (translation_table[i].newcmd & 0xffff)){
- *size = _IOC_SIZE(*cmd);
- *cmd = translation_table[i].newcmd;
- if (*size > _IOC_SIZE(*cmd)) {
- printk("ioctl not yet supported\n");
- return -EFAULT;
- }
- return 0;
- }
- }
- return -EINVAL;
-}
-
-static inline int xlate_0x00xx_ioctl(int *cmd, int *size)
-{
- int i;
- /* old ioctls' for kernels <= 1.3.33 */
- /* When the next even release will come around, we'll start
- * warning against these.
- * When the next odd release will come around, we'll fail with
- * -EINVAL */
- if(strcmp(system_utsname.version, "1.4.0") >= 0)
- printk("obsolete floppy ioctl %x\n", *cmd);
- if((system_utsname.version[0] == '1' &&
- strcmp(system_utsname.version, "1.5.0") >= 0) ||
- (system_utsname.version[0] >= '2' &&
- strcmp(system_utsname.version, "2.1.0") >= 0))
- return -EINVAL;
- for (i=0; i < ARRAY_SIZE(translation_table); i++) {
- if (*cmd == translation_table[i].oldcmd) {
- *size = translation_table[i].oldsize;
- *cmd = translation_table[i].newcmd;
- return 0;
- }
- }
- return -EINVAL;
-}
-
-static int fd_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
- unsigned long param)
-{
-#define IOCTL_MODE_BIT 8
-#define OPEN_WRITE_BIT 16
-#define IOCTL_ALLOWED (filp && (filp->f_mode & IOCTL_MODE_BIT))
-#define OUT(c,x) case c: outparam = (const char *) (x); break
-#define IN(c,x,tag) case c: *(x) = inparam. tag ; return 0
-
- int i,drive,type;
- kdev_t device;
- int ret;
- int size;
- union inparam {
- struct floppy_struct g; /* geometry */
- struct format_descr f;
- struct floppy_max_errors max_errors;
- struct floppy_drive_params dp;
- } inparam; /* parameters coming from user space */
- const char *outparam; /* parameters passed back to user space */
-
- device = inode->i_rdev;
- switch (cmd) {
- RO_IOCTLS(device,param);
- }
- type = TYPE(device);
- drive = DRIVE(device);
-
- /* convert compatibility eject ioctls into floppy eject ioctl.
- * We do this in order to provide a means to eject floppy disks before
- * installing the new fdutils package */
- if(cmd == CDROMEJECT || /* CD-ROM eject */
- cmd == 0x6470 /* SunOS floppy eject */) {
- DPRINT("obsolete eject ioctl\n");
- DPRINT("please use floppycontrol --eject\n");
- cmd = FDEJECT;
- }
-
- /* convert the old style command into a new style command */
- if ((cmd & 0xff00) == 0x0200) {
- ECALL(normalize_0x02xx_ioctl(&cmd, &size));
- } else if ((cmd & 0xff00) == 0x0000) {
- ECALL(xlate_0x00xx_ioctl(&cmd, &size));
- } else
- return -EINVAL;
-
- /* permission checks */
- if (((cmd & 0x80) && !suser()) ||
- ((cmd & 0x40) && !IOCTL_ALLOWED))
- return -EPERM;
-
- /* verify writability of result, and fail early */
- if (_IOC_DIR(cmd) & _IOC_READ)
- ECALL(verify_area(VERIFY_WRITE,(void *) param, size));
-
- /* copyin */
- CLEARSTRUCT(&inparam);
- if (_IOC_DIR(cmd) & _IOC_WRITE)
- ECALL(fd_copyin((void *)param, &inparam, size))
-
- switch (cmd) {
- case FDEJECT:
- if(UDRS->fd_ref != 1)
- /* somebody else has this drive open */
- return -EBUSY;
- LOCK_FDC(drive,1);
-
- /* do the actual eject. Fails on
- * non-Sparc architectures */
- ret=fd_eject(UNIT(drive));
-
- USETF(FD_DISK_CHANGED);
- USETF(FD_VERIFY);
- process_fd_request();
- return ret;
- case FDCLRPRM:
- LOCK_FDC(drive,1);
- current_type[drive] = NULL;
- floppy_sizes[drive] = MAX_DISK_SIZE;
- UDRS->keep_data = 0;
- return invalidate_drive(device);
- case FDSETPRM:
- case FDDEFPRM:
- return set_geometry(cmd, & inparam.g,
- drive, type, device);
- case FDGETPRM:
- LOCK_FDC(drive,1);
- CALL(poll_drive(1,0));
- process_fd_request();
- if (type)
- outparam = (char *) &floppy_type[type];
- else
- outparam = (char *) current_type[drive];
- if(!outparam)
- return -ENODEV;
- break;
-
- case FDMSGON:
- UDP->flags |= FTD_MSG;
- return 0;
- case FDMSGOFF:
- UDP->flags &= ~FTD_MSG;
- return 0;
-
- case FDFMTBEG:
- LOCK_FDC(drive,1);
- CALL(poll_drive(1, FD_RAW_NEED_DISK));
- ret = UDRS->flags;
- process_fd_request();
- if(ret & FD_VERIFY)
- return -ENODEV;
- if(!(ret & FD_DISK_WRITABLE))
- return -EROFS;
- return 0;
- case FDFMTTRK:
- if (UDRS->fd_ref != 1)
- return -EBUSY;
- return do_format(device, &inparam.f);
- case FDFMTEND:
- case FDFLUSH:
- LOCK_FDC(drive,1);
- return invalidate_drive(device);
-
- case FDSETEMSGTRESH:
- UDP->max_errors.reporting =
- (unsigned short) (param & 0x0f);
- return 0;
- OUT(FDGETMAXERRS, &UDP->max_errors);
- IN(FDSETMAXERRS, &UDP->max_errors, max_errors);
-
- case FDGETDRVTYP:
- outparam = drive_name(type,drive);
- SUPBOUND(size,strlen(outparam)+1);
- break;
-
- IN(FDSETDRVPRM, UDP, dp);
- OUT(FDGETDRVPRM, UDP);
-
- case FDPOLLDRVSTAT:
- LOCK_FDC(drive,1);
- CALL(poll_drive(1, FD_RAW_NEED_DISK));
- process_fd_request();
- /* fall through */
- OUT(FDGETDRVSTAT, UDRS);
-
- case FDRESET:
- return user_reset_fdc(drive, (int)param, 1);
-
- OUT(FDGETFDCSTAT,UFDCS);
-
- case FDWERRORCLR:
- CLEARSTRUCT(UDRWE);
- return 0;
- OUT(FDWERRORGET,UDRWE);
-
- case OLDFDRAWCMD:
- case FDRAWCMD:
- if (type)
- return -EINVAL;
- LOCK_FDC(drive,1);
- set_floppy(device);
- CALL(i = raw_cmd_ioctl(cmd,(void *) param));
- process_fd_request();
- return i;
-
- case FDTWADDLE:
- LOCK_FDC(drive,1);
- twaddle();
- process_fd_request();
- return 0;
-
- default:
- return -EINVAL;
- }
-
- if (_IOC_DIR(cmd) & _IOC_READ)
- return fd_copyout((void *)param, outparam, size);
- else
- return 0;
-#undef IOCTL_ALLOWED
-#undef OUT
-#undef IN
-}
-
-static void config_types(void)
-{
- int first=1;
- int drive;
-
- /* read drive info out of physical CMOS */
- drive=0;
- if (!UDP->cmos)
- UDP->cmos= FLOPPY0_TYPE;
- drive=1;
- if (!UDP->cmos && FLOPPY1_TYPE)
- UDP->cmos = FLOPPY1_TYPE;
-
- /* XXX */
- /* additional physical CMOS drive detection should go here */
-
- for (drive=0; drive < N_DRIVE; drive++){
- if (UDP->cmos >= 16)
- UDP->cmos = 0;
- if (UDP->cmos >= 0 && UDP->cmos <= NUMBER(default_drive_params))
- memcpy((char *) UDP,
- (char *)
(&default_drive_params[(int)UDP->cmos].params),
- sizeof(struct floppy_drive_params));
- if (UDP->cmos){
- if (first)
- printk(KERN_INFO "Floppy drive(s): ");
- else
- printk(", ");
- first=0;
- if (UDP->cmos > 0){
- allowed_drive_mask |= 1 << drive;
- printk("fd%d is %s", drive,
-
default_drive_params[(int)UDP->cmos].name);
- } else
- printk("fd%d is unknown type %d",drive,
- UDP->cmos);
- }
- }
- if (!first)
- printk("\n");
-}
-
-static int floppy_read(struct inode * inode, struct file * filp,
- char * buf, int count)
-{
- int drive = DRIVE(inode->i_rdev);
-
- check_disk_change(inode->i_rdev);
- if (UTESTF(FD_DISK_CHANGED))
- return -ENXIO;
- return block_read(inode, filp, buf, count);
-}
-
-static int floppy_write(struct inode * inode, struct file * filp,
- const char * buf, int count)
-{
- int block;
- int ret;
- int drive = DRIVE(inode->i_rdev);
-
- if (!UDRS->maxblock)
- UDRS->maxblock=1;/* make change detectable */
- check_disk_change(inode->i_rdev);
- if (UTESTF(FD_DISK_CHANGED))
- return -ENXIO;
- if (!UTESTF(FD_DISK_WRITABLE))
- return -EROFS;
- block = (filp->f_pos + count) >> 9;
- INFBOUND(UDRS->maxblock, block);
- ret= block_write(inode, filp, buf, count);
- return ret;
-}
-
-static void floppy_release(struct inode * inode, struct file * filp)
-{
- int drive;
-
- drive = DRIVE(inode->i_rdev);
-
- if (!filp || (filp->f_mode & (2 | OPEN_WRITE_BIT)))
- /* if the file is mounted OR (writable now AND writable at
- * open time) Linus: Does this cover all cases? */
- block_fsync(inode,filp);
-
- if (UDRS->fd_ref < 0)
- UDRS->fd_ref=0;
- else if (!UDRS->fd_ref--) {
- DPRINT("floppy_release with fd_ref == 0");
- UDRS->fd_ref = 0;
- }
- floppy_release_irq_and_dma();
-}
-
-/*
- * floppy_open check for aliasing (/dev/fd0 can be the same as
- * /dev/PS0 etc), and disallows simultaneous access to the same
- * drive with different device numbers.
- */
-#define RETERR(x) do{floppy_release(inode,filp); return -(x);}while(0)
-
-static int floppy_open(struct inode * inode, struct file * filp)
-{
- int drive;
- int old_dev;
- int try;
- char *tmp;
-
- if (!filp) {
- DPRINT("Weird, open called with filp=0\n");
- return -EIO;
- }
-
- drive = DRIVE(inode->i_rdev);
- if (drive >= N_DRIVE ||
- !(allowed_drive_mask & (1 << drive)) ||
- fdc_state[FDC(drive)].version == FDC_NONE)
- return -ENXIO;
-
- if (TYPE(inode->i_rdev) >= NUMBER(floppy_type))
- return -ENXIO;
- old_dev = UDRS->fd_device;
- if (UDRS->fd_ref && old_dev != MINOR(inode->i_rdev))
- return -EBUSY;
-
- if (!UDRS->fd_ref && (UDP->flags & FD_BROKEN_DCL)){
- USETF(FD_DISK_CHANGED);
- USETF(FD_VERIFY);
- }
-
- if (UDRS->fd_ref == -1 ||
- (UDRS->fd_ref && (filp->f_flags & O_EXCL)))
- return -EBUSY;
-
- if (floppy_grab_irq_and_dma())
- return -EBUSY;
-
- if (filp->f_flags & O_EXCL)
- UDRS->fd_ref = -1;
- else
- UDRS->fd_ref++;
-
- if (!floppy_track_buffer){
- /* if opening an ED drive, reserve a big buffer,
- * else reserve a small one */
- if ((UDP->cmos == 6) || (UDP->cmos == 5))
- try = 64; /* Only 48 actually useful */
- else
- try = 32; /* Only 24 actually useful */
-
- tmp=(char *)fd_dma_mem_alloc(1024 * try);
- if (!tmp) {
- try >>= 1; /* buffer only one side */
- INFBOUND(try, 16);
- tmp= (char *)fd_dma_mem_alloc(1024*try);
- }
- if (!tmp) {
- DPRINT("Unable to allocate DMA memory\n");
- RETERR(ENXIO);
- }
- if (floppy_track_buffer)
- fd_dma_mem_free((unsigned long)tmp,try*1024);
- else {
- buffer_min = buffer_max = -1;
- floppy_track_buffer = tmp;
- max_buffer_sectors = try;
- }
- }
-
- UDRS->fd_device = MINOR(inode->i_rdev);
- if (old_dev != -1 && old_dev != MINOR(inode->i_rdev)) {
- if (buffer_drive == drive)
- buffer_track = -1;
- invalidate_buffers(MKDEV(FLOPPY_MAJOR,old_dev));
- }
-
- /* Allow ioctls if we have write-permissions even if read-only open */
- if ((filp->f_mode & 2) || (permission(inode,2) == 0))
- filp->f_mode |= IOCTL_MODE_BIT;
- if (filp->f_mode & 2)
- filp->f_mode |= OPEN_WRITE_BIT;
-
- if (UFDCS->rawcmd == 1)
- UFDCS->rawcmd = 2;
-
- if (filp->f_flags & O_NDELAY)
- return 0;
- if (filp->f_mode & 3) {
- UDRS->last_checked = 0;
- check_disk_change(inode->i_rdev);
- if (UTESTF(FD_DISK_CHANGED))
- RETERR(ENXIO);
- }
- if ((filp->f_mode & 2) && !(UTESTF(FD_DISK_WRITABLE)))
- RETERR(EROFS);
- return 0;
-#undef RETERR
-}
-
-/*
- * Check if the disk has been changed or if a change has been faked.
- */
-static int check_floppy_change(kdev_t dev)
-{
- int drive = DRIVE(dev);
-
- if (MAJOR(dev) != MAJOR_NR) {
- DPRINT("check_floppy_change: not a floppy\n");
- return 0;
- }
-
- if (UTESTF(FD_DISK_CHANGED) || UTESTF(FD_VERIFY))
- return 1;
-
- if (UDP->checkfreq < jiffies - UDRS->last_checked){
- lock_fdc(drive,0);
- poll_drive(0,0);
- process_fd_request();
- }
-
- if (UTESTF(FD_DISK_CHANGED) ||
- UTESTF(FD_VERIFY) ||
- test_bit(drive, &fake_change) ||
- (!TYPE(dev) && !current_type[drive]))
- return 1;
- return 0;
-}
-
-/* revalidate the floppy disk, i.e. trigger format autodetection by reading
- * the bootblock (block 0). "Autodetection" is also needed to check whether
- * there is a disk in the drive at all... Thus we also do it for fixed
- * geometry formats */
-static int floppy_revalidate(kdev_t dev)
-{
-#define NO_GEOM (!current_type[drive] && !TYPE(dev))
- struct buffer_head * bh;
- int drive=DRIVE(dev);
- int cf;
-
- if (UTESTF(FD_DISK_CHANGED) ||
- UTESTF(FD_VERIFY) ||
- test_bit(drive, &fake_change) ||
- NO_GEOM){
- lock_fdc(drive,0);
- cf = UTESTF(FD_DISK_CHANGED) || UTESTF(FD_VERIFY);
- if (!(cf || test_bit(drive, &fake_change) || NO_GEOM)){
- process_fd_request(); /*already done by another thread*/
- return 0;
- }
- UDRS->maxblock = 0;
- UDRS->maxtrack = 0;
- if (buffer_drive == drive)
- buffer_track = -1;
- clear_bit(drive, &fake_change);
- UCLEARF(FD_DISK_CHANGED);
- if (cf)
- UDRS->generation++;
- if (NO_GEOM){
- /* auto-sensing */
- int size = floppy_blocksizes[MINOR(dev)];
- if (!size)
- size = 1024;
- if (!(bh = getblk(dev,0,size))){
- process_fd_request();
- return 1;
- }
- if (bh && !buffer_uptodate(bh))
- ll_rw_block(READ, 1, &bh);
- process_fd_request();
- wait_on_buffer(bh);
- brelse(bh);
- return 0;
- }
- if (cf)
- poll_drive(0, FD_RAW_NEED_DISK);
- process_fd_request();
- }
- return 0;
-}
-
-static struct file_operations floppy_fops = {
- NULL, /* lseek - default */
- floppy_read, /* read - general block-dev read */
- floppy_write, /* write - general block-dev write */
- NULL, /* readdir - bad */
- NULL, /* select */
- fd_ioctl, /* ioctl */
- NULL, /* mmap */
- floppy_open, /* open */
- floppy_release, /* release */
- block_fsync, /* fsync */
- NULL, /* fasync */
- check_floppy_change, /* media_change */
- floppy_revalidate, /* revalidate */
-};
-
-/*
- * Floppy Driver initialization
- * =============================
- */
-
-/* Determine the floppy disk controller type */
-/* This routine was written by David C. Niemi */
-static char get_fdc_version(void)
-{
- int r;
-
- output_byte(FD_DUMPREGS); /* 82072 and better know DUMPREGS */
- if (FDCS->reset)
- return FDC_NONE;
- if ((r = result()) <= 0x00)
- return FDC_NONE; /* No FDC present ??? */
- if ((r==1) && (reply_buffer[0] == 0x80)){
- printk(KERN_INFO "FDC %d is an 8272A\n",fdc);
- return FDC_8272A; /* 8272a/765 don't know DUMPREGS */
- }
- if (r != 10) {
- printk("FDC %d init: DUMPREGS: unexpected return of %d
bytes.\n",
- fdc, r);
- return FDC_UNKNOWN;
- }
-
- if(!fdc_configure()) {
- printk(KERN_INFO "FDC %d is an 82072\n",fdc);
- return FDC_82072; /* 82072 doesn't know CONFIGURE */
- }
-
- output_byte(FD_PERPENDICULAR);
- if(need_more_output() == MORE_OUTPUT) {
- output_byte(0);
- } else {
- printk(KERN_INFO "FDC %d is an 82072A\n", fdc);
- return FDC_82072A; /* 82072A as found on Sparcs. */
- }
-
- output_byte(FD_UNLOCK);
- r = result();
- if ((r == 1) && (reply_buffer[0] == 0x80)){
- printk(KERN_INFO "FDC %d is a pre-1991 82077\n", fdc);
- return FDC_82077_ORIG; /* Pre-1991 82077, doesn't know
- * LOCK/UNLOCK */
- }
- if ((r != 1) || (reply_buffer[0] != 0x00)) {
- printk("FDC %d init: UNLOCK: unexpected return of %d bytes.\n",
- fdc, r);
- return FDC_UNKNOWN;
- }
- output_byte(FD_PARTID);
- r = result();
- if (r != 1) {
- printk("FDC %d init: PARTID: unexpected return of %d bytes.\n",
- fdc, r);
- return FDC_UNKNOWN;
- }
- if (reply_buffer[0] == 0x80) {
- printk(KERN_INFO "FDC %d is a post-1991 82077\n",fdc);
- return FDC_82077; /* Revised 82077AA passes all the tests
*/
- }
- switch (reply_buffer[0] >> 5) {
- case 0x0:
- /* Either a 82078-1 or a 82078SL running at 5Volt */
- printk(KERN_INFO "FDC %d is an 82078.\n",fdc);
- return FDC_82078;
- case 0x1:
- printk(KERN_INFO "FDC %d is a 44pin 82078\n",fdc);
- return FDC_82078;
- case 0x2:
- printk(KERN_INFO "FDC %d is a S82078B\n", fdc);
- return FDC_S82078B;
- case 0x3:
- printk(KERN_INFO "FDC %d is a National Semiconductor
PC87306\n", fdc);
- return FDC_87306;
- default:
- printk(KERN_INFO "FDC %d init: 82078 variant with
unknown PARTID=%d.\n",
- fdc, reply_buffer[0] >> 5);
- return FDC_82078_UNKN;
- }
-} /* get_fdc_version */
-
-/* lilo configuration */
-
-/* we make the invert_dcl function global. One day, somebody might
- * want to centralize all thinkpad related options into one lilo option,
- * there are just so many thinkpad related quirks! */
-void floppy_invert_dcl(int *ints,int param)
-{
- int i;
-
- for (i=0; i < ARRAY_SIZE(default_drive_params); i++){
- if (param)
- default_drive_params[i].params.flags |= 0x80;
- else
- default_drive_params[i].params.flags &= ~0x80;
- }
- DPRINT("Configuring drives for inverted dcl\n");
-}
-
-static void daring(int *ints,int param)
-{
- int i;
-
- for (i=0; i < ARRAY_SIZE(default_drive_params); i++){
- if (param){
- default_drive_params[i].params.select_delay = 0;
- default_drive_params[i].params.flags |=
FD_SILENT_DCL_CLEAR;
- } else {
- default_drive_params[i].params.select_delay = 2*HZ/100;
- default_drive_params[i].params.flags &=
~FD_SILENT_DCL_CLEAR;
- }
- }
- DPRINT("Assuming %s floppy hardware\n", param ? "standard" : "broken");
-}
-
-static void set_cmos(int *ints, int dummy)
-{
- int current_drive=0;
-
- if (ints[0] != 2){
- DPRINT("wrong number of parameter for cmos\n");
- return;
- }
- current_drive = ints[1];
- if (current_drive < 0 || current_drive >= 8){
- DPRINT("bad drive for set_cmos\n");
- return;
- }
- if (current_drive >= 4 && !FDC2)
- FDC2 = 0x370;
- if (ints[2] <= 0 ||
- (ints[2] >= NUMBER(default_drive_params) && ints[2] != 16)){
- DPRINT("bad cmos code %d\n", ints[2]);
- return;
- }
- DP->cmos = ints[2];
- DPRINT("setting cmos code to %d\n", ints[2]);
-}
-
-static struct param_table {
- const char *name;
- void (*fn)(int *ints, int param);
- int *var;
- int def_param;
-} config_params[]={
- { "allowed_drive_mask", 0, &allowed_drive_mask, 0xff },
- { "all_drives", 0, &allowed_drive_mask, 0xff },
- { "asus_pci", 0, &allowed_drive_mask, 0x33 },
-
- { "daring", daring, 0, 1},
-
- { "two_fdc", 0, &FDC2, 0x370 },
- { "one_fdc", 0, &FDC2, 0 },
-
- { "thinkpad", floppy_invert_dcl, 0, 1 },
-
- { "nodma", 0, &use_virtual_dma, 1 },
- { "omnibook", 0, &use_virtual_dma, 1 },
- { "dma", 0, &use_virtual_dma, 0 },
-
- { "fifo_depth", 0, &fifo_depth, 0xa },
- { "nofifo", 0, &no_fifo, 0x20 },
- { "usefifo", 0, &no_fifo, 0 },
-
- { "cmos", set_cmos, 0, 0 },
-
- { "unexpected_interrupts", 0, &print_unex, 1 },
- { "no_unexpected_interrupts", 0, &print_unex, 0 },
- { "L40SX", 0, &print_unex, 0 } };
-
-#define FLOPPY_SETUP
-void floppy_setup(char *str, int *ints)
-{
- int i;
- int param;
- if (str)
- for (i=0; i< ARRAY_SIZE(config_params); i++){
- if (strcmp(str,config_params[i].name) == 0){
- if (ints[0])
- param = ints[1];
- else
- param = config_params[i].def_param;
- if(config_params[i].fn)
- config_params[i].fn(ints,param);
- if(config_params[i].var) {
- DPRINT("%s=%d\n", str, param);
- *config_params[i].var = param;
- }
- return;
- }
- }
- if (str) {
- DPRINT("unknown floppy option [%s]\n", str);
-
- DPRINT("allowed options are:");
- for (i=0; i< ARRAY_SIZE(config_params); i++)
- printk(" %s",config_params[i].name);
- printk("\n");
- } else
- DPRINT("botched floppy option\n");
- DPRINT("Read linux/drivers/block/README.fd\n");
-}
-
-int floppy_init(void)
-{
- int i,unit,drive;
- int have_no_fdc= -EIO;
-
- raw_cmd = 0;
-
- if (register_blkdev(MAJOR_NR,"fd",&floppy_fops)) {
- printk("Unable to get major %d for floppy\n",MAJOR_NR);
- return -EBUSY;
- }
-
- for (i=0; i<256; i++)
- if (ITYPE(i))
- floppy_sizes[i] = floppy_type[ITYPE(i)].size >> 1;
- else
- floppy_sizes[i] = MAX_DISK_SIZE;
-
- blk_size[MAJOR_NR] = floppy_sizes;
- blksize_size[MAJOR_NR] = floppy_blocksizes;
- blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST;
- reschedule_timeout(MAXTIMEOUT, "floppy init", MAXTIMEOUT);
- config_types();
-
- for (i = 0; i < N_FDC; i++) {
- fdc = i;
- CLEARSTRUCT(FDCS);
- FDCS->dtr = -1;
- FDCS->dor = 0x4;
-#ifdef __sparc__
- /*sparcs don't have a DOR reset which we can fall back on to*/
- FDCS->version = FDC_82072A;
-#endif
- }
-
- fdc_state[0].address = FDC1;
-#if N_FDC > 1
- fdc_state[1].address = FDC2;
-#endif
-
- if (floppy_grab_irq_and_dma()){
- del_timer(&fd_timeout);
- blk_dev[MAJOR_NR].request_fn = NULL;
- unregister_blkdev(MAJOR_NR,"fd");
- return -EBUSY;
- }
-
- /* initialise drive state */
- for (drive = 0; drive < N_DRIVE; drive++) {
- CLEARSTRUCT(UDRS);
- CLEARSTRUCT(UDRWE);
- UDRS->flags = FD_VERIFY | FD_DISK_NEWCHANGE | FD_DISK_CHANGED;
- UDRS->fd_device = -1;
- floppy_track_buffer = NULL;
- max_buffer_sectors = 0;
- }
-
- for (i = 0; i < N_FDC; i++) {
- fdc = i;
- FDCS->driver_version = FD_DRIVER_VERSION;
- for (unit=0; unit<4; unit++)
- FDCS->track[unit] = 0;
- if (FDCS->address == -1)
- continue;
- FDCS->rawcmd = 2;
- if (user_reset_fdc(-1,FD_RESET_ALWAYS,0)){
- FDCS->address = -1;
- FDCS->version = FDC_NONE;
- continue;
- }
- /* Try to determine the floppy controller type */
- FDCS->version = get_fdc_version();
- if (FDCS->version == FDC_NONE){
- FDCS->address = -1;
- continue;
- }
-
- request_region(FDCS->address, 6, "floppy");
- request_region(FDCS->address+7, 1, "floppy DIR");
- /* address + 6 is reserved, and may be taken by IDE.
- * Unfortunately, Adaptec doesn't know this :-(, */
-
- have_no_fdc = 0;
- /* Not all FDCs seem to be able to handle the version command
- * properly, so force a reset for the standard FDC clones,
- * to avoid interrupt garbage.
- */
- user_reset_fdc(-1,FD_RESET_ALWAYS,0);
- }
- fdc=0;
- del_timer(&fd_timeout);
- current_drive = 0;
- floppy_release_irq_and_dma();
- initialising=0;
- if (have_no_fdc) {
- DPRINT("no floppy controllers found\n");
- request_tq.routine = (void *)(void *) empty;
- /*
- * When we return we may be unloaded. This little
- * trick forces the immediate_bh handler to have run
- * before we unload it, lest we cause bad things.
- */
- mark_bh(IMMEDIATE_BH);
- schedule();
- if (usage_count)
- floppy_release_irq_and_dma();
- blk_dev[MAJOR_NR].request_fn = NULL;
- unregister_blkdev(MAJOR_NR,"fd");
- }
- return have_no_fdc;
-}
-
-static int floppy_grab_irq_and_dma(void)
-{
- int i;
- unsigned long flags;
-
- INT_OFF;
- if (usage_count++){
- INT_ON;
- return 0;
- }
- INT_ON;
- MOD_INC_USE_COUNT;
- for (i=0; i< N_FDC; i++){
- if (fdc_state[i].address != -1){
- fdc = i;
- reset_fdc_info(1);
- fd_outb(FDCS->dor, FD_DOR);
- }
- }
- fdc = 0;
- set_dor(0, ~0, 8); /* avoid immediate interrupt */
-
- if (fd_request_irq()) {
- DPRINT("Unable to grab IRQ%d for the floppy driver\n",
- FLOPPY_IRQ);
- MOD_DEC_USE_COUNT;
- usage_count--;
- return -1;
- }
- if (fd_request_dma()) {
- DPRINT("Unable to grab DMA%d for the floppy driver\n",
- FLOPPY_DMA);
- fd_free_irq();
- MOD_DEC_USE_COUNT;
- usage_count--;
- return -1;
- }
- for (fdc = 0; fdc < N_FDC; fdc++)
- if (FDCS->address != -1)
- fd_outb(FDCS->dor, FD_DOR);
- fdc = 0;
- fd_enable_irq();
- irqdma_allocated=1;
- return 0;
-}
-
-static void floppy_release_irq_and_dma(void)
-{
-#ifdef FLOPPY_SANITY_CHECK
- int drive;
-#endif
- long tmpsize;
- unsigned long tmpaddr;
- unsigned long flags;
-
- INT_OFF;
- if (--usage_count){
- INT_ON;
- return;
- }
- INT_ON;
- if(irqdma_allocated)
- {
- fd_disable_dma();
- fd_free_dma();
- fd_disable_irq();
- fd_free_irq();
- irqdma_allocated=0;
- }
-
- set_dor(0, ~0, 8);
-#if N_FDC > 1
- set_dor(1, ~8, 0);
-#endif
- floppy_enable_hlt();
-
- if (floppy_track_buffer && max_buffer_sectors) {
- tmpsize = max_buffer_sectors*1024;
- tmpaddr = (unsigned long)floppy_track_buffer;
- floppy_track_buffer = 0;
- max_buffer_sectors = 0;
- buffer_min = buffer_max = -1;
- fd_dma_mem_free(tmpaddr, tmpsize);
- }
-
-#ifdef FLOPPY_SANITY_CHECK
-#ifndef __sparc__
- for (drive=0; drive < N_FDC * 4; drive++)
- if (motor_off_timer[drive].next)
- printk("motor off timer %d still active\n", drive);
-#endif
-
- if (fd_timeout.next)
- printk("floppy timer still active:%s\n", timeout_message);
- if (fd_timer.next)
- printk("auxiliary floppy timer still active\n");
- if (floppy_tq.sync)
- printk("task queue still active\n");
-#endif
- MOD_DEC_USE_COUNT;
-}
-
-
-#ifdef MODULE
-
-char *floppy=NULL;
-
-static void parse_floppy_cfg_string(char *cfg)
-{
- char *ptr;
- int ints[11];
-
- while(*cfg) {
- for(ptr = cfg;*cfg && *cfg != ' ' && *cfg != '\t'; cfg++);
- if(*cfg) {
- *cfg = '\0';
- cfg++;
- }
- if(*ptr)
- floppy_setup(get_options(ptr,ints),ints);
- }
-}
-
-static void mod_setup(char *pattern, void (*setup)(char *, int *))
-{
- unsigned long i;
- char c;
- int j;
- int match;
- char buffer[100];
- int ints[11];
- int length = strlen(pattern)+1;
-
- match=0;
- j=1;
-
- for (i=current->mm->env_start; i< current->mm->env_end; i ++){
- c= get_fs_byte(i);
- if (match){
- if (j==99)
- c='\0';
- buffer[j] = c;
- if (!c || c == ' ' || c == '\t'){
- if (j){
- buffer[j] = '\0';
- setup(get_options(buffer,ints),ints);
- }
- j=0;
- } else
- j++;
- if (!c)
- break;
- continue;
- }
- if ((!j && !c) || (j && c == pattern[j-1]))
- j++;
- else
- j=0;
- if (j==length){
- match=1;
- j=0;
- }
- }
-}
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-int init_module(void)
-{
- printk(KERN_INFO "inserting floppy driver for %s\n", kernel_version);
-
- if(floppy)
- parse_floppy_cfg_string(floppy);
- else
- mod_setup("floppy=", floppy_setup);
-
- return floppy_init();
-}
-
-void cleanup_module(void)
-{
- int fdc, dummy;
-
- for (fdc=0; fdc<2; fdc++)
- if (FDCS->address != -1){
- release_region(FDCS->address, 6);
- release_region(FDCS->address+7, 1);
- }
-
- unregister_blkdev(MAJOR_NR, "fd");
-
- blk_dev[MAJOR_NR].request_fn = 0;
- /* eject disk, if any */
- dummy = fd_eject(0);
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#else
-/* eject the boot floppy (if we need the drive for a different root floppy) */
-/* This should only be called at boot time when we're sure that there's no
- * resource contention. */
-void floppy_eject(void)
-{
- int dummy;
- if(floppy_grab_irq_and_dma()==0)
- {
- lock_fdc(MAXTIMEOUT,0);
- dummy=fd_eject(0);
- process_fd_request();
- floppy_release_irq_and_dma();
- }
-}
-#endif
diff --git a/linux/src/drivers/block/genhd.c b/linux/src/drivers/block/genhd.c
deleted file mode 100644
index ebee7ff..0000000
--- a/linux/src/drivers/block/genhd.c
+++ /dev/null
@@ -1,761 +0,0 @@
-/*
- * Code extracted from
- * linux/kernel/hd.c
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- *
- *
- * Thanks to Branko Lankester, address@hidden, who found a bug
- * in the early extended-partition checks and added DM partitions
- *
- * Support for DiskManager v6.0x added by Mark Lord,
- * with information provided by OnTrack. This now works for linux fdisk
- * and LILO, as well as loadlin and bootln. Note that disks other than
- * /dev/hda *must* have a "DOS" type 0x51 partition in the first slot (hda1).
- *
- * More flexible handling of extended partitions - aeb, 950831
- *
- * Check partition table on IDE disks for common CHS translations
- */
-
-#include <linux/config.h>
-#include <linux/fs.h>
-#include <linux/genhd.h>
-#include <linux/kernel.h>
-#include <linux/major.h>
-#include <linux/string.h>
-#ifdef CONFIG_BLK_DEV_INITRD
-#include <linux/blk.h>
-#endif
-
-#include <asm/system.h>
-
-/*
- * Many architectures don't like unaligned accesses, which is
- * frequently the case with the nr_sects and start_sect partition
- * table entries.
- */
-#include <asm/unaligned.h>
-
-#define SYS_IND(p) get_unaligned(&p->sys_ind)
-#define NR_SECTS(p) get_unaligned(&p->nr_sects)
-#define START_SECT(p) get_unaligned(&p->start_sect)
-
-
-struct gendisk *gendisk_head = NULL;
-
-static int current_minor = 0;
-extern int *blk_size[];
-extern void rd_load(void);
-extern void initrd_load(void);
-
-extern int chr_dev_init(void);
-extern int blk_dev_init(void);
-extern int scsi_dev_init(void);
-extern int net_dev_init(void);
-
-/*
- * disk_name() is used by genhd.c and md.c.
- * It formats the devicename of the indicated disk
- * into the supplied buffer, and returns a pointer
- * to that same buffer (for convenience).
- */
-char *disk_name (struct gendisk *hd, int minor, char *buf)
-{
- unsigned int part;
- const char *maj = hd->major_name;
- char unit = (minor >> hd->minor_shift) + 'a';
-
-#ifdef CONFIG_BLK_DEV_IDE
- /*
- * IDE devices use multiple major numbers, but the drives
- * are named as: {hda,hdb}, {hdc,hdd}, {hde,hdf}, {hdg,hdh}..
- * This requires special handling here.
- */
- switch (hd->major) {
- case IDE3_MAJOR:
- unit += 2;
- case IDE2_MAJOR:
- unit += 2;
- case IDE1_MAJOR:
- unit += 2;
- case IDE0_MAJOR:
- maj = "hd";
- }
-#endif
- part = minor & ((1 << hd->minor_shift) - 1);
- if (part)
- sprintf(buf, "%s%c%d", maj, unit, part);
- else
- sprintf(buf, "%s%c", maj, unit);
- return buf;
-}
-
-static void add_partition (struct gendisk *hd, int minor, int start, int size)
-{
- char buf[8];
- hd->part[minor].start_sect = start;
- hd->part[minor].nr_sects = size;
- printk(" %s", disk_name(hd, minor, buf));
-}
-
-static inline int is_extended_partition(struct partition *p)
-{
- return (SYS_IND(p) == DOS_EXTENDED_PARTITION ||
- SYS_IND(p) == WIN98_EXTENDED_PARTITION ||
- SYS_IND(p) == LINUX_EXTENDED_PARTITION);
-}
-
-#ifdef CONFIG_MSDOS_PARTITION
-/*
- * Create devices for each logical partition in an extended partition.
- * The logical partitions form a linked list, with each entry being
- * a partition table with two entries. The first entry
- * is the real data partition (with a start relative to the partition
- * table start). The second is a pointer to the next logical partition
- * (with a start relative to the entire extended partition).
- * We do not create a Linux partition for the partition tables, but
- * only for the actual data partitions.
- */
-
-static void extended_partition(struct gendisk *hd, kdev_t dev)
-{
- struct buffer_head *bh;
- struct partition *p;
- unsigned long first_sector, first_size, this_sector, this_size;
- int mask = (1 << hd->minor_shift) - 1;
- int i;
-
- first_sector = hd->part[MINOR(dev)].start_sect;
- first_size = hd->part[MINOR(dev)].nr_sects;
- this_sector = first_sector;
-
- while (1) {
- if ((current_minor & mask) == 0)
- return;
- if (!(bh = bread(dev,0,1024)))
- return;
- /*
- * This block is from a device that we're about to stomp on.
- * So make sure nobody thinks this block is usable.
- */
- bh->b_state = 0;
-
- if (*(unsigned short *) (bh->b_data+510) != 0xAA55)
- goto done;
-
- p = (struct partition *) (0x1BE + bh->b_data);
-
- this_size = hd->part[MINOR(dev)].nr_sects;
-
- /*
- * Usually, the first entry is the real data partition,
- * the 2nd entry is the next extended partition, or empty,
- * and the 3rd and 4th entries are unused.
- * However, DRDOS sometimes has the extended partition as
- * the first entry (when the data partition is empty),
- * and OS/2 seems to use all four entries.
- */
-
- /*
- * First process the data partition(s)
- */
- for (i=0; i<4; i++, p++) {
- if (!NR_SECTS(p) || is_extended_partition(p))
- continue;
-
- /* Check the 3rd and 4th entries -
- these sometimes contain random garbage */
- if (i >= 2
- && START_SECT(p) + NR_SECTS(p) > this_size
- && (this_sector + START_SECT(p) < first_sector ||
- this_sector + START_SECT(p) + NR_SECTS(p) >
- first_sector + first_size))
- continue;
-
- add_partition(hd, current_minor, this_sector+START_SECT(p),
NR_SECTS(p));
- current_minor++;
- if ((current_minor & mask) == 0)
- goto done;
- }
- /*
- * Next, process the (first) extended partition, if present.
- * (So far, there seems to be no reason to make
- * extended_partition() recursive and allow a tree
- * of extended partitions.)
- * It should be a link to the next logical partition.
- * Create a minor for this just long enough to get the next
- * partition table. The minor will be reused for the next
- * data partition.
- */
- p -= 4;
- for (i=0; i<4; i++, p++)
- if(NR_SECTS(p) && is_extended_partition(p))
- break;
- if (i == 4)
- goto done; /* nothing left to do */
-
- hd->part[current_minor].nr_sects = NR_SECTS(p);
- hd->part[current_minor].start_sect = first_sector +
START_SECT(p);
- this_sector = first_sector + START_SECT(p);
- dev = MKDEV(hd->major, current_minor);
- brelse(bh);
- }
-done:
- brelse(bh);
-}
-
-#ifdef CONFIG_BSD_DISKLABEL
-/*
- * Create devices for BSD partitions listed in a disklabel, under a
- * dos-like partition. See extended_partition() for more information.
- */
-static void bsd_disklabel_partition(struct gendisk *hd, kdev_t dev)
-{
- struct buffer_head *bh;
- struct bsd_disklabel *l;
- struct bsd_partition *p;
- int mask = (1 << hd->minor_shift) - 1;
-
- if (!(bh = bread(dev,0,1024)))
- return;
- bh->b_state = 0;
- l = (struct bsd_disklabel *) (bh->b_data+512);
- if (l->d_magic != BSD_DISKMAGIC) {
- brelse(bh);
- return;
- }
-
- p = &l->d_partitions[0];
- while (p - &l->d_partitions[0] <= BSD_MAXPARTITIONS) {
- if ((current_minor & mask) >= (4 + hd->max_p))
- break;
-
- if (p->p_fstype != BSD_FS_UNUSED) {
- add_partition(hd, current_minor, p->p_offset,
p->p_size);
- current_minor++;
- }
- p++;
- }
- brelse(bh);
-
-}
-#endif
-
-static int msdos_partition(struct gendisk *hd, kdev_t dev, unsigned long
first_sector)
-{
- int i, minor = current_minor;
- struct buffer_head *bh;
- struct partition *p;
- unsigned char *data;
- int mask = (1 << hd->minor_shift) - 1;
-#ifdef CONFIG_BLK_DEV_IDE
- int tested_for_xlate = 0;
-
-read_mbr:
-#endif
- if (!(bh = bread(dev,0,1024))) {
- printk(" unable to read partition table\n");
- return -1;
- }
- data = bh->b_data;
- /* In some cases we modify the geometry */
- /* of the drive (below), so ensure that */
- /* nobody else tries to re-use this data. */
- bh->b_state = 0;
-#ifdef CONFIG_BLK_DEV_IDE
-check_table:
-#endif
- if (*(unsigned short *) (0x1fe + data) != 0xAA55) {
- brelse(bh);
- return 0;
- }
- p = (struct partition *) (0x1be + data);
-
-#ifdef CONFIG_BLK_DEV_IDE
- if (!tested_for_xlate++) { /* Do this only once per disk */
- /*
- * Look for various forms of IDE disk geometry translation
- */
- extern int ide_xlate_1024(kdev_t, int, const char *);
- unsigned int sig = *(unsigned short *)(data + 2);
- if (SYS_IND(p) == EZD_PARTITION) {
- /*
- * The remainder of the disk must be accessed using
- * a translated geometry that reduces the number of
- * apparent cylinders to less than 1024 if possible.
- *
- * ide_xlate_1024() will take care of the necessary
- * adjustments to fool fdisk/LILO and partition check.
- */
- if (ide_xlate_1024(dev, -1, " [EZD]")) {
- data += 512;
- goto check_table;
- }
- } else if (SYS_IND(p) == DM6_PARTITION) {
-
- /*
- * Everything on the disk is offset by 63 sectors,
- * including a "new" MBR with its own partition table,
- * and the remainder of the disk must be accessed using
- * a translated geometry that reduces the number of
- * apparent cylinders to less than 1024 if possible.
- *
- * ide_xlate_1024() will take care of the necessary
- * adjustments to fool fdisk/LILO and partition check.
- */
- if (ide_xlate_1024(dev, 1, " [DM6:DDO]")) {
- brelse(bh);
- goto read_mbr; /* start over with new MBR */
- }
- } else if (sig <= 0x1ae && *(unsigned short *)(data + sig) ==
0x55AA
- && (1 & *(unsigned char *)(data + sig + 2)) )
- {
- /*
- * DM6 signature in MBR, courtesy of OnTrack
- */
- (void) ide_xlate_1024 (dev, 0, " [DM6:MBR]");
- } else if (SYS_IND(p) == DM6_AUX1PARTITION || SYS_IND(p) ==
DM6_AUX3PARTITION) {
- /*
- * DM6 on other than the first (boot) drive
- */
- (void) ide_xlate_1024(dev, 0, " [DM6:AUX]");
- } else {
- /*
- * Examine the partition table for common translations.
- * This is necessary for drives for situations where
- * the translated geometry is unavailable from the BIOS.
- */
- for (i = 0; i < 4 ; i++) {
- struct partition *q = &p[i];
- if (NR_SECTS(q)
- && (q->sector & 63) == 1
- && (q->end_sector & 63) == 63) {
- unsigned int heads = q->end_head + 1;
- if (heads == 32 || heads == 64 || heads
== 128 || heads == 255) {
-
- (void) ide_xlate_1024(dev,
heads, " [PTBL]");
- break;
- }
- }
- }
- }
- }
-#endif /* CONFIG_BLK_DEV_IDE */
-
- current_minor += 4; /* first "extra" minor (for extended partitions) */
- for (i=1 ; i<=4 ; minor++,i++,p++) {
- if (!NR_SECTS(p))
- continue;
- add_partition(hd, minor, first_sector+START_SECT(p),
NR_SECTS(p));
- if (is_extended_partition(p)) {
- printk(" <");
- /*
- * If we are rereading the partition table, we need
- * to set the size of the partition so that we will
- * be able to bread the block containing the extended
- * partition info.
- */
- hd->sizes[minor] = hd->part[minor].nr_sects
- >> (BLOCK_SIZE_BITS - 9);
- extended_partition(hd, MKDEV(hd->major, minor));
- printk(" >");
- /* prevent someone doing mkfs or mkswap on an
- extended partition, but leave room for LILO */
- if (hd->part[minor].nr_sects > 2)
- hd->part[minor].nr_sects = 2;
- }
-#ifdef CONFIG_BSD_DISKLABEL
- if (SYS_IND(p) == BSD_PARTITION) {
- printk(" <");
- bsd_disklabel_partition(hd, MKDEV(hd->major, minor));
- printk(" >");
- }
-#endif
- }
- /*
- * Check for old-style Disk Manager partition table
- */
- if (*(unsigned short *) (data+0xfc) == 0x55AA) {
- p = (struct partition *) (0x1be + data);
- for (i = 4 ; i < 16 ; i++, current_minor++) {
- p--;
- if ((current_minor & mask) == 0)
- break;
- if (!(START_SECT(p) && NR_SECTS(p)))
- continue;
- add_partition(hd, current_minor, START_SECT(p),
NR_SECTS(p));
- }
- }
- printk("\n");
- brelse(bh);
- return 1;
-}
-
-#endif /* CONFIG_MSDOS_PARTITION */
-
-#ifdef CONFIG_OSF_PARTITION
-
-static int osf_partition(struct gendisk *hd, unsigned int dev, unsigned long
first_sector)
-{
- int i;
- int mask = (1 << hd->minor_shift) - 1;
- struct buffer_head *bh;
- struct disklabel {
- u32 d_magic;
- u16 d_type,d_subtype;
- u8 d_typename[16];
- u8 d_packname[16];
- u32 d_secsize;
- u32 d_nsectors;
- u32 d_ntracks;
- u32 d_ncylinders;
- u32 d_secpercyl;
- u32 d_secprtunit;
- u16 d_sparespertrack;
- u16 d_sparespercyl;
- u32 d_acylinders;
- u16 d_rpm, d_interleave, d_trackskew, d_cylskew;
- u32 d_headswitch, d_trkseek, d_flags;
- u32 d_drivedata[5];
- u32 d_spare[5];
- u32 d_magic2;
- u16 d_checksum;
- u16 d_npartitions;
- u32 d_bbsize, d_sbsize;
- struct d_partition {
- u32 p_size;
- u32 p_offset;
- u32 p_fsize;
- u8 p_fstype;
- u8 p_frag;
- u16 p_cpg;
- } d_partitions[8];
- } * label;
- struct d_partition * partition;
-#define DISKLABELMAGIC (0x82564557UL)
-
- if (!(bh = bread(dev,0,1024))) {
- printk("unable to read partition table\n");
- return -1;
- }
- label = (struct disklabel *) (bh->b_data+64);
- partition = label->d_partitions;
- if (label->d_magic != DISKLABELMAGIC) {
- printk("magic: %08x\n", label->d_magic);
- brelse(bh);
- return 0;
- }
- if (label->d_magic2 != DISKLABELMAGIC) {
- printk("magic2: %08x\n", label->d_magic2);
- brelse(bh);
- return 0;
- }
- for (i = 0 ; i < label->d_npartitions; i++, partition++) {
- if ((current_minor & mask) == 0)
- break;
- if (partition->p_size)
- add_partition(hd, current_minor,
- first_sector+partition->p_offset,
- partition->p_size);
- current_minor++;
- }
- printk("\n");
- brelse(bh);
- return 1;
-}
-
-#endif /* CONFIG_OSF_PARTITION */
-
-#ifdef CONFIG_SUN_PARTITION
-
-static int sun_partition(struct gendisk *hd, kdev_t dev, unsigned long
first_sector)
-{
- int i, csum;
- unsigned short *ush;
- struct buffer_head *bh;
- struct sun_disklabel {
- unsigned char info[128]; /* Informative text string */
- unsigned char spare[292]; /* Boot information etc. */
- unsigned short rspeed; /* Disk rotational speed */
- unsigned short pcylcount; /* Physical cylinder count */
- unsigned short sparecyl; /* extra sects per cylinder */
- unsigned char spare2[4]; /* More magic... */
- unsigned short ilfact; /* Interleave factor */
- unsigned short ncyl; /* Data cylinder count */
- unsigned short nacyl; /* Alt. cylinder count */
- unsigned short ntrks; /* Tracks per cylinder */
- unsigned short nsect; /* Sectors per track */
- unsigned char spare3[4]; /* Even more magic... */
- struct sun_partition {
- __u32 start_cylinder;
- __u32 num_sectors;
- } partitions[8];
- unsigned short magic; /* Magic number */
- unsigned short csum; /* Label xor'd checksum */
- } * label;
- struct sun_partition *p;
- int other_endian;
- unsigned long spc;
-#define SUN_LABEL_MAGIC 0xDABE
-#define SUN_LABEL_MAGIC_SWAPPED 0xBEDA
-/* No need to optimize these macros since they are called only when reading
- * the partition table. This occurs only at each disk change. */
-#define SWAP16(x) (other_endian ? (((__u16)(x) & 0xFF) << 8) \
- | (((__u16)(x) & 0xFF00) >> 8) \
- : (__u16)(x))
-#define SWAP32(x) (other_endian ? (((__u32)(x) & 0xFF) << 24) \
- | (((__u32)(x) & 0xFF00) << 8) \
- | (((__u32)(x) & 0xFF0000) >> 8) \
- | (((__u32)(x) & 0xFF000000) >> 24) \
- : (__u32)(x))
-
- if(!(bh = bread(dev, 0, 1024))) {
- printk("Dev %s: unable to read partition table\n",
- kdevname(dev));
- return -1;
- }
- label = (struct sun_disklabel *) bh->b_data;
- p = label->partitions;
- if (label->magic != SUN_LABEL_MAGIC && label->magic !=
SUN_LABEL_MAGIC_SWAPPED) {
- printk("Dev %s Sun disklabel: bad magic %04x\n",
- kdevname(dev), label->magic);
- brelse(bh);
- return 0;
- }
- other_endian = (label->magic == SUN_LABEL_MAGIC_SWAPPED);
- /* Look at the checksum */
- ush = ((unsigned short *) (label+1)) - 1;
- for(csum = 0; ush >= ((unsigned short *) label);)
- csum ^= *ush--;
- if(csum) {
- printk("Dev %s Sun disklabel: Csum bad, label corrupted\n",
- kdevname(dev));
- brelse(bh);
- return 0;
- }
- /* All Sun disks have 8 partition entries */
- spc = SWAP16(label->ntrks) * SWAP16(label->nsect);
- for(i=0; i < 8; i++, p++) {
- unsigned long st_sector;
-
- /* We register all partitions, even if zero size, so that
- * the minor numbers end up ok as per SunOS interpretation.
- */
- st_sector = first_sector + SWAP32(p->start_cylinder) * spc;
- add_partition(hd, current_minor, st_sector,
SWAP32(p->num_sectors));
- current_minor++;
- }
- printk("\n");
- brelse(bh);
- return 1;
-#undef SWAP16
-#undef SWAP32
-}
-
-#endif /* CONFIG_SUN_PARTITION */
-
-#ifdef CONFIG_AMIGA_PARTITION
-#include <asm/byteorder.h>
-#include <linux/affs_hardblocks.h>
-
-static __inline__ __u32
-checksum_block(__u32 *m, int size)
-{
- __u32 sum = 0;
-
- while (size--)
- sum += htonl(*m++);
- return sum;
-}
-
-static int
-amiga_partition(struct gendisk *hd, unsigned int dev, unsigned long
first_sector)
-{
- struct buffer_head *bh;
- struct RigidDiskBlock *rdb;
- struct PartitionBlock *pb;
- int start_sect;
- int nr_sects;
- int blk;
- int part, res;
-
- set_blocksize(dev,512);
- res = 0;
-
- for (blk = 0; blk < RDB_ALLOCATION_LIMIT; blk++) {
- if(!(bh = bread(dev,blk,512))) {
- printk("Dev %d: unable to read RDB block %d\n",dev,blk);
- goto rdb_done;
- }
- if (*(__u32 *)bh->b_data == htonl(IDNAME_RIGIDDISK)) {
- rdb = (struct RigidDiskBlock *)bh->b_data;
- if (checksum_block((__u32
*)bh->b_data,htonl(rdb->rdb_SummedLongs) & 0x7F)) {
- printk("Dev %d: RDB in block %d has bad
checksum\n",dev,blk);
- brelse(bh);
- continue;
- }
- printk(" RDSK");
- blk = htonl(rdb->rdb_PartitionList);
- brelse(bh);
- for (part = 1; blk > 0 && part <= 16; part++) {
- if (!(bh = bread(dev,blk,512))) {
- printk("Dev %d: unable to read
partition block %d\n",
- dev,blk);
- goto rdb_done;
- }
- pb = (struct PartitionBlock *)bh->b_data;
- blk = htonl(pb->pb_Next);
- if (pb->pb_ID == htonl(IDNAME_PARTITION) &&
checksum_block(
- (__u32 *)pb,htonl(pb->pb_SummedLongs) &
0x7F) == 0 ) {
-
- /* Tell Kernel about it */
-
- if (!(nr_sects =
(htonl(pb->pb_Environment[10]) + 1 -
-
htonl(pb->pb_Environment[9])) *
-
htonl(pb->pb_Environment[3]) *
-
htonl(pb->pb_Environment[5]))) {
- continue;
- }
- start_sect =
htonl(pb->pb_Environment[9]) *
-
htonl(pb->pb_Environment[3]) *
-
htonl(pb->pb_Environment[5]);
-
add_partition(hd,current_minor,start_sect,nr_sects);
- current_minor++;
- res = 1;
- }
- brelse(bh);
- }
- printk("\n");
- break;
- }
- }
-
-rdb_done:
- set_blocksize(dev,BLOCK_SIZE);
- return res;
-}
-#endif /* CONFIG_AMIGA_PARTITION */
-
-static void check_partition(struct gendisk *hd, kdev_t dev)
-{
- static int first_time = 1;
- unsigned long first_sector;
- char buf[8];
-
- if (first_time)
- printk("Partition check:\n");
- first_time = 0;
- first_sector = hd->part[MINOR(dev)].start_sect;
-
- /*
- * This is a kludge to allow the partition check to be
- * skipped for specific drives (e.g. IDE cd-rom drives)
- */
- if ((int)first_sector == -1) {
- hd->part[MINOR(dev)].start_sect = 0;
- return;
- }
-
- printk(" %s:", disk_name(hd, MINOR(dev), buf));
-#ifdef CONFIG_MSDOS_PARTITION
- if (msdos_partition(hd, dev, first_sector))
- return;
-#endif
-#ifdef CONFIG_OSF_PARTITION
- if (osf_partition(hd, dev, first_sector))
- return;
-#endif
-#ifdef CONFIG_SUN_PARTITION
- if(sun_partition(hd, dev, first_sector))
- return;
-#endif
-#ifdef CONFIG_AMIGA_PARTITION
- if(amiga_partition(hd, dev, first_sector))
- return;
-#endif
- printk(" unknown partition table\n");
-}
-
-/* This function is used to re-read partition tables for removable disks.
- Much of the cleanup from the old partition tables should have already been
- done */
-
-/* This function will re-read the partition tables for a given device,
-and set things back up again. There are some important caveats,
-however. You must ensure that no one is using the device, and no one
-can start using the device while this function is being executed. */
-
-void resetup_one_dev(struct gendisk *dev, int drive)
-{
- int i;
- int first_minor = drive << dev->minor_shift;
- int end_minor = first_minor + dev->max_p;
-
- blk_size[dev->major] = NULL;
- current_minor = 1 + first_minor;
- check_partition(dev, MKDEV(dev->major, first_minor));
-
- /*
- * We need to set the sizes array before we will be able to access
- * any of the partitions on this device.
- */
- if (dev->sizes != NULL) { /* optional safeguard in ll_rw_blk.c */
- for (i = first_minor; i < end_minor; i++)
- dev->sizes[i] = dev->part[i].nr_sects >>
(BLOCK_SIZE_BITS - 9);
- blk_size[dev->major] = dev->sizes;
- }
-}
-
-static void setup_dev(struct gendisk *dev)
-{
- int i, drive;
- int end_minor = dev->max_nr * dev->max_p;
-
- blk_size[dev->major] = NULL;
- for (i = 0 ; i < end_minor; i++) {
- dev->part[i].start_sect = 0;
- dev->part[i].nr_sects = 0;
- }
- dev->init(dev);
- for (drive = 0 ; drive < dev->nr_real ; drive++) {
- int first_minor = drive << dev->minor_shift;
- current_minor = 1 + first_minor;
- check_partition(dev, MKDEV(dev->major, first_minor));
- }
- if (dev->sizes != NULL) { /* optional safeguard in ll_rw_blk.c */
- for (i = 0; i < end_minor; i++)
- dev->sizes[i] = dev->part[i].nr_sects >>
(BLOCK_SIZE_BITS - 9);
- blk_size[dev->major] = dev->sizes;
- }
-}
-
-void device_setup(void)
-{
- extern void console_map_init(void);
- struct gendisk *p;
- int nr=0;
-
- chr_dev_init();
- blk_dev_init();
- sti();
-#ifdef CONFIG_SCSI
- scsi_dev_init();
-#endif
-#ifdef CONFIG_INET
- net_dev_init();
-#endif
- console_map_init();
-
- for (p = gendisk_head ; p ; p=p->next) {
- setup_dev(p);
- nr += p->nr_real;
- }
-#ifdef CONFIG_BLK_DEV_RAM
-#ifdef CONFIG_BLK_DEV_INITRD
- if (initrd_start && mount_initrd) initrd_load();
- else
-#endif
- rd_load();
-#endif
-}
diff --git a/linux/src/drivers/net/Space.c b/linux/src/drivers/net/Space.c
deleted file mode 100644
index 083cdeb..0000000
--- a/linux/src/drivers/net/Space.c
+++ /dev/null
@@ -1,541 +0,0 @@
-/*
- * INET An implementation of the TCP/IP protocol suite for the
LINUX
- * operating system. INET is implemented using the BSD Socket
- * interface as the means of communication with the user level.
- *
- * Holds initial configuration information for devices.
- *
- * NOTE: This file is a nice idea, but its current format does not work
- * well for drivers that support multiple units, like the SLIP
- * driver. We should actually have only one pointer to a driver
- * here, with the driver knowing how many units it supports.
- * Currently, the SLIP driver abuses the "base_addr" integer
- * field of the 'device' structure to store the unit number...
- * -FvK
- *
- * Version: @(#)Space.c 1.0.8 07/31/96
- *
- * Authors: Ross Biro, <address@hidden>
- * Fred N. van Kempen, <address@hidden>
- * Donald J. Becker, <address@hidden>
- *
- * FIXME:
- * Sort the device chain fastest first.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version
- * 2 of the License, or (at your option) any later version.
- */
-#include <linux/config.h>
-#include <linux/netdevice.h>
-#include <linux/errno.h>
-
-#define NEXT_DEV NULL
-
-
-/* A unified ethernet device probe. This is the easiest way to have every
- ethernet adaptor have the name "eth[0123...]".
- */
-
-extern int tulip_probe(struct device *dev);
-extern int hp100_probe(struct device *dev);
-extern int ultra_probe(struct device *dev);
-extern int ultra32_probe(struct device *dev);
-extern int wd_probe(struct device *dev);
-extern int el2_probe(struct device *dev);
-extern int ne_probe(struct device *dev);
-extern int ne2k_pci_probe(struct device *dev);
-extern int hp_probe(struct device *dev);
-extern int hp_plus_probe(struct device *dev);
-extern int znet_probe(struct device *);
-extern int express_probe(struct device *);
-extern int eepro_probe(struct device *);
-extern int el3_probe(struct device *);
-extern int at1500_probe(struct device *);
-extern int at1700_probe(struct device *);
-extern int fmv18x_probe(struct device *);
-extern int eth16i_probe(struct device *);
-extern int depca_probe(struct device *);
-extern int apricot_probe(struct device *);
-extern int ewrk3_probe(struct device *);
-extern int de4x5_probe(struct device *);
-extern int el1_probe(struct device *);
-extern int via_rhine_probe(struct device *);
-#if defined(CONFIG_WAVELAN)
-extern int wavelan_probe(struct device *);
-#endif /* defined(CONFIG_WAVELAN) */
-extern int el16_probe(struct device *);
-extern int elplus_probe(struct device *);
-extern int ac3200_probe(struct device *);
-extern int e2100_probe(struct device *);
-extern int ni52_probe(struct device *);
-extern int ni65_probe(struct device *);
-extern int SK_init(struct device *);
-extern int seeq8005_probe(struct device *);
-extern int tc59x_probe(struct device *);
-extern int dgrs_probe(struct device *);
-extern int smc_init( struct device * );
-extern int sparc_lance_probe(struct device *);
-extern int atarilance_probe(struct device *);
-extern int a2065_probe(struct device *);
-extern int ariadne_probe(struct device *);
-extern int hydra_probe(struct device *);
-extern int yellowfin_probe(struct device *);
-extern int eepro100_probe(struct device *);
-extern int epic100_probe(struct device *);
-extern int rtl8139_probe(struct device *);
-extern int tlan_probe(struct device *);
-extern int isa515_probe(struct device *);
-extern int pcnet32_probe(struct device *);
-extern int lance_probe(struct device *);
-/* Detachable devices ("pocket adaptors") */
-extern int atp_init(struct device *);
-extern int de600_probe(struct device *);
-extern int de620_probe(struct device *);
-/* The shaper hook */
-extern int shaper_probe(struct device *);
-/* Red Creek PCI hook */
-extern int rcpci_probe(struct device *);
-
-static int
-ethif_probe(struct device *dev)
-{
- u_long base_addr = dev->base_addr;
-
- if ((base_addr == 0xffe0) || (base_addr == 1))
- return 1; /* ENXIO */
-
- if (1
- /* All PCI probes are safe, and thus should be first. */
-#ifdef CONFIG_DE4X5 /* DEC DE425, DE434, DE435 adapters */
- && de4x5_probe(dev)
-#endif
-#ifdef CONFIG_DGRS
- && dgrs_probe(dev)
-#endif
-#ifdef CONFIG_EEXPRESS_PRO100B /* Intel EtherExpress Pro100B */
- && eepro100_probe(dev)
-#endif
-#ifdef CONFIG_EPIC
- && epic100_probe(dev)
-#endif
-#if defined(CONFIG_HP100)
- && hp100_probe(dev)
-#endif
-#if defined(CONFIG_NE2K_PCI)
- && ne2k_pci_probe(dev)
-#endif
-#ifdef CONFIG_PCNET32
- && pcnet32_probe(dev)
-#endif
-#ifdef CONFIG_RTL8139
- && rtl8139_probe(dev)
-#endif
-#if defined(CONFIG_VIA_RHINE)
- && via_rhine_probe(dev)
-#endif
-#if defined(CONFIG_VORTEX)
- && tc59x_probe(dev)
-#endif
-#if defined(CONFIG_DEC_ELCP)
- && tulip_probe(dev)
-#endif
-#ifdef CONFIG_YELLOWFIN
- && yellowfin_probe(dev)
-#endif
- /* Next mostly-safe EISA-only drivers. */
-#ifdef CONFIG_AC3200 /* Ansel Communications EISA 3200. */
- && ac3200_probe(dev)
-#endif
-#if defined(CONFIG_ULTRA32)
- && ultra32_probe(dev)
-#endif
- /* Third, sensitive ISA boards. */
-#ifdef CONFIG_AT1700
- && at1700_probe(dev)
-#endif
-#if defined(CONFIG_ULTRA)
- && ultra_probe(dev)
-#endif
-#if defined(CONFIG_SMC9194)
- && smc_init(dev)
-#endif
-#if defined(CONFIG_WD80x3)
- && wd_probe(dev)
-#endif
-#if defined(CONFIG_EL2) /* 3c503 */
- && el2_probe(dev)
-#endif
-#if defined(CONFIG_HPLAN)
- && hp_probe(dev)
-#endif
-#if defined(CONFIG_HPLAN_PLUS)
- && hp_plus_probe(dev)
-#endif
-#if defined(CONFIG_SEEQ8005)
- && seeq8005_probe(dev)
-#endif
-#ifdef CONFIG_E2100 /* Cabletron E21xx series. */
- && e2100_probe(dev)
-#endif
-#if defined(CONFIG_NE2000)
- && ne_probe(dev)
-#endif
-#ifdef CONFIG_AT1500
- && at1500_probe(dev)
-#endif
-#ifdef CONFIG_FMV18X /* Fujitsu FMV-181/182 */
- && fmv18x_probe(dev)
-#endif
-#ifdef CONFIG_ETH16I
- && eth16i_probe(dev) /* ICL EtherTeam 16i/32 */
-#endif
-#ifdef CONFIG_EL3 /* 3c509 */
- && el3_probe(dev)
-#endif
-#ifdef CONFIG_3C515 /* 3c515 */
- && tc515_probe(dev)
-#endif
-#ifdef CONFIG_ZNET /* Zenith Z-Note and some IBM Thinkpads. */
- && znet_probe(dev)
-#endif
-#ifdef CONFIG_EEXPRESS /* Intel EtherExpress */
- && express_probe(dev)
-#endif
-#ifdef CONFIG_EEXPRESS_PRO /* Intel EtherExpress Pro/10 */
- && eepro_probe(dev)
-#endif
-#ifdef CONFIG_DEPCA /* DEC DEPCA */
- && depca_probe(dev)
-#endif
-#ifdef CONFIG_EWRK3 /* DEC EtherWORKS 3 */
- && ewrk3_probe(dev)
-#endif
-#ifdef CONFIG_APRICOT /* Apricot I82596 */
- && apricot_probe(dev)
-#endif
-#ifdef CONFIG_EL1 /* 3c501 */
- && el1_probe(dev)
-#endif
-#if defined(CONFIG_WAVELAN) /* WaveLAN */
- && wavelan_probe(dev)
-#endif /* defined(CONFIG_WAVELAN) */
-#ifdef CONFIG_EL16 /* 3c507 */
- && el16_probe(dev)
-#endif
-#ifdef CONFIG_ELPLUS /* 3c505 */
- && elplus_probe(dev)
-#endif
-#ifdef CONFIG_DE600 /* D-Link DE-600 adapter */
- && de600_probe(dev)
-#endif
-#ifdef CONFIG_DE620 /* D-Link DE-620 adapter */
- && de620_probe(dev)
-#endif
-#if defined(CONFIG_SK_G16)
- && SK_init(dev)
-#endif
-#ifdef CONFIG_NI52
- && ni52_probe(dev)
-#endif
-#ifdef CONFIG_NI65
- && ni65_probe(dev)
-#endif
-#ifdef CONFIG_LANCE /* ISA LANCE boards */
- && lance_probe(dev)
-#endif
-#ifdef CONFIG_ATARILANCE /* Lance-based Atari ethernet boards */
- && atarilance_probe(dev)
-#endif
-#ifdef CONFIG_A2065 /* Commodore/Ameristar A2065 Ethernet Board */
- && a2065_probe(dev)
-#endif
-#ifdef CONFIG_ARIADNE /* Village Tronic Ariadne Ethernet Board */
- && ariadne_probe(dev)
-#endif
-#ifdef CONFIG_HYDRA /* Hydra Systems Amiganet Ethernet board */
- && hydra_probe(dev)
-#endif
-#ifdef CONFIG_SUNLANCE
- && sparc_lance_probe(dev)
-#endif
-#ifdef CONFIG_TLAN
- && tlan_probe(dev)
-#endif
-#ifdef CONFIG_LANCE
- && lance_probe(dev)
-#endif
- && 1 ) {
- return 1; /* -ENODEV or -EAGAIN would be more accurate. */
- }
- return 0;
-}
-
-#ifdef CONFIG_SDLA
- extern int sdla_init(struct device *);
- static struct device sdla0_dev = { "sdla0", 0, 0, 0, 0, 0, 0, 0, 0, 0,
NEXT_DEV, sdla_init, };
-
-# undef NEXT_DEV
-# define NEXT_DEV (&sdla0_dev)
-#endif
-
-/* Run-time ATtachable (Pocket) devices have a different (not "eth#") name. */
-#ifdef CONFIG_ATP /* AT-LAN-TEC (RealTek) pocket adaptor. */
-static struct device atp_dev = {
- "atp0", 0, 0, 0, 0, 0, 0, 0, 0, 0, NEXT_DEV, atp_init, /* ... */ };
-# undef NEXT_DEV
-# define NEXT_DEV (&atp_dev)
-#endif
-
-#ifdef CONFIG_ARCNET
- extern int arcnet_probe(struct device *dev);
- static struct device arcnet_dev = {
- "arc0", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, arcnet_probe, };
-# undef NEXT_DEV
-# define NEXT_DEV (&arcnet_dev)
-#endif
-
-/* The first device defaults to I/O base '0', which means autoprobe. */
-#ifndef ETH0_ADDR
-# define ETH0_ADDR 0
-#endif
-#ifndef ETH0_IRQ
-# define ETH0_IRQ 0
-#endif
-/* "eth0" defaults to autoprobe (== 0), other use a base of 0xffe0 (== -0x20),
- which means "don't probe". These entries exist to only to provide empty
- slots which may be enabled at boot-time. */
-
-static struct device eth7_dev = {
- "eth7", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, NEXT_DEV, ethif_probe };
-static struct device eth6_dev = {
- "eth6", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, ð7_dev, ethif_probe };
-static struct device eth5_dev = {
- "eth5", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, ð6_dev, ethif_probe };
-static struct device eth4_dev = {
- "eth4", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, ð5_dev, ethif_probe };
-static struct device eth3_dev = {
- "eth3", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, ð4_dev, ethif_probe };
-static struct device eth2_dev = {
- "eth2", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, ð3_dev, ethif_probe };
-static struct device eth1_dev = {
- "eth1", 0,0,0,0,0xffe0 /* I/O base*/, 0,0,0,0, ð2_dev, ethif_probe };
-
-static struct device eth0_dev = {
- "eth0", 0, 0, 0, 0, ETH0_ADDR, ETH0_IRQ, 0, 0, 0, ð1_dev, ethif_probe };
-
-# undef NEXT_DEV
-# define NEXT_DEV (ð0_dev)
-
-#if defined(PLIP) || defined(CONFIG_PLIP)
- extern int plip_init(struct device *);
- static struct device plip2_dev = {
- "plip2", 0, 0, 0, 0, 0x278, 2, 0, 0, 0, NEXT_DEV, plip_init, };
- static struct device plip1_dev = {
- "plip1", 0, 0, 0, 0, 0x378, 7, 0, 0, 0, &plip2_dev, plip_init, };
- static struct device plip0_dev = {
- "plip0", 0, 0, 0, 0, 0x3BC, 5, 0, 0, 0, &plip1_dev, plip_init, };
-# undef NEXT_DEV
-# define NEXT_DEV (&plip0_dev)
-#endif /* PLIP */
-
-#if defined(SLIP) || defined(CONFIG_SLIP)
- /* To be exact, this node just hooks the initialization
- routines to the device structures. */
-extern int slip_init_ctrl_dev(struct device *);
-static struct device slip_bootstrap = {
- "slip_proto", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV,
slip_init_ctrl_dev, };
-#undef NEXT_DEV
-#define NEXT_DEV (&slip_bootstrap)
-#endif /* SLIP */
-
-#if defined(CONFIG_MKISS)
- /* To be exact, this node just hooks the initialization
- routines to the device structures. */
-extern int mkiss_init_ctrl_dev(struct device *);
-static struct device mkiss_bootstrap = {
- "mkiss_proto", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV,
mkiss_init_ctrl_dev, };
-#undef NEXT_DEV
-#define NEXT_DEV (&mkiss_bootstrap)
-#endif /* MKISS */
-
-#if defined(CONFIG_STRIP)
-extern int strip_init_ctrl_dev(struct device *);
-static struct device strip_bootstrap = {
- "strip_proto", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV,
strip_init_ctrl_dev, };
-#undef NEXT_DEV
-#define NEXT_DEV (&strip_bootstrap)
-#endif /* STRIP */
-
-#if defined(CONFIG_SHAPER)
-static struct device shaper_bootstrap = {
- "shaper", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, shaper_probe, };
-#undef NEXT_DEV
-#define NEXT_DEV (&shaper_bootstrap)
-#endif /* SHAPER */
-
-#if defined(CONFIG_RCPCI)
-static struct device rcpci_bootstrap = {
- "rcpci", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, rcpci_probe, };
-#undef NEXT_DEV
-#define NEXT_DEV (&rcpci_bootstrap)
-#endif /* RCPCI */
-
-#if defined(CONFIG_PPP)
-extern int ppp_init(struct device *);
-static struct device ppp_bootstrap = {
- "ppp_proto", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, ppp_init, };
-#undef NEXT_DEV
-#define NEXT_DEV (&ppp_bootstrap)
-#endif /* PPP */
-
-#ifdef CONFIG_DUMMY
- extern int dummy_init(struct device *dev);
- static struct device dummy_dev = {
- "dummy", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, dummy_init, };
-# undef NEXT_DEV
-# define NEXT_DEV (&dummy_dev)
-#endif
-
-#ifdef CONFIG_EQUALIZER
-extern int eql_init(struct device *dev);
-struct device eql_dev = {
- "eql", /* Master device for IP traffic load
- balancing */
- 0x0, 0x0, 0x0, 0x0, /* recv end/start; mem end/start */
- 0, /* base I/O address */
- 0, /* IRQ */
- 0, 0, 0, /* flags */
- NEXT_DEV, /* next device */
- eql_init /* set up the rest */
-};
-# undef NEXT_DEV
-# define NEXT_DEV (&eql_dev)
-#endif
-
-#ifdef CONFIG_IBMTR
-
- extern int tok_probe(struct device *dev);
- static struct device ibmtr_dev1 = {
- "tr1", /* IBM Token Ring (Non-DMA) Interface */
- 0x0, /* recv memory end */
- 0x0, /* recv memory start */
- 0x0, /* memory end */
- 0x0, /* memory start */
- 0xa24, /* base I/O address */
- 0, /* IRQ */
- 0, 0, 0, /* flags */
- NEXT_DEV, /* next device */
- tok_probe /* ??? Token_init should set up the rest
*/
- };
-# undef NEXT_DEV
-# define NEXT_DEV (&ibmtr_dev1)
-
-
- static struct device ibmtr_dev0 = {
- "tr0", /* IBM Token Ring (Non-DMA) Interface */
- 0x0, /* recv memory end */
- 0x0, /* recv memory start */
- 0x0, /* memory end */
- 0x0, /* memory start */
- 0xa20, /* base I/O address */
- 0, /* IRQ */
- 0, 0, 0, /* flags */
- NEXT_DEV, /* next device */
- tok_probe /* ??? Token_init should set up the rest
*/
- };
-# undef NEXT_DEV
-# define NEXT_DEV (&ibmtr_dev0)
-
-#endif
-
-#ifdef CONFIG_DEFXX
- extern int dfx_probe(struct device *dev);
- static struct device fddi7_dev =
- {"fddi7", 0, 0, 0, 0, 0, 0, 0, 0, 0, NEXT_DEV, dfx_probe};
- static struct device fddi6_dev =
- {"fddi6", 0, 0, 0, 0, 0, 0, 0, 0, 0, &fddi7_dev, dfx_probe};
- static struct device fddi5_dev =
- {"fddi5", 0, 0, 0, 0, 0, 0, 0, 0, 0, &fddi6_dev, dfx_probe};
- static struct device fddi4_dev =
- {"fddi4", 0, 0, 0, 0, 0, 0, 0, 0, 0, &fddi5_dev, dfx_probe};
- static struct device fddi3_dev =
- {"fddi3", 0, 0, 0, 0, 0, 0, 0, 0, 0, &fddi4_dev, dfx_probe};
- static struct device fddi2_dev =
- {"fddi2", 0, 0, 0, 0, 0, 0, 0, 0, 0, &fddi3_dev, dfx_probe};
- static struct device fddi1_dev =
- {"fddi1", 0, 0, 0, 0, 0, 0, 0, 0, 0, &fddi2_dev, dfx_probe};
- static struct device fddi0_dev =
- {"fddi0", 0, 0, 0, 0, 0, 0, 0, 0, 0, &fddi1_dev, dfx_probe};
-
-#undef NEXT_DEV
-#define NEXT_DEV (&fddi0_dev)
-#endif
-
-#ifdef CONFIG_NET_IPIP
- extern int tunnel_init(struct device *);
-
- static struct device tunnel_dev1 =
- {
- "tunl1", /* IPIP tunnel
*/
- 0x0, /* recv memory end
*/
- 0x0, /* recv memory start
*/
- 0x0, /* memory end
*/
- 0x0, /* memory start
*/
- 0x0, /* base I/O address
*/
- 0, /* IRQ
*/
- 0, 0, 0, /* flags
*/
- NEXT_DEV, /* next device
*/
- tunnel_init /* Fill in the details
*/
- };
-
- static struct device tunnel_dev0 =
- {
- "tunl0", /* IPIP tunnel
*/
- 0x0, /* recv memory end
*/
- 0x0, /* recv memory start
*/
- 0x0, /* memory end
*/
- 0x0, /* memory start
*/
- 0x0, /* base I/O address
*/
- 0, /* IRQ
*/
- 0, 0, 0, /* flags
*/
- &tunnel_dev1, /* next device
*/
- tunnel_init /* Fill in the details
*/
- };
-# undef NEXT_DEV
-# define NEXT_DEV (&tunnel_dev0)
-
-#endif
-
-#ifdef CONFIG_APFDDI
- extern int apfddi_init(struct device *dev);
- static struct device fddi_dev = {
- "fddi", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, apfddi_init };
-# undef NEXT_DEV
-# define NEXT_DEV (&fddi_dev)
-#endif
-
-#ifdef CONFIG_APBIF
- extern int bif_init(struct device *dev);
- static struct device bif_dev = {
- "bif", 0x0, 0x0, 0x0, 0x0, 0, 0, 0, 0, 0, NEXT_DEV, bif_init };
-# undef NEXT_DEV
-# define NEXT_DEV (&bif_dev)
-#endif
-
-extern int loopback_init(struct device *dev);
-struct device loopback_dev = {
- "lo", /* Software Loopback interface */
- 0x0, /* recv memory end */
- 0x0, /* recv memory start */
- 0x0, /* memory end */
- 0x0, /* memory start */
- 0, /* base I/O address */
- 0, /* IRQ */
- 0, 0, 0, /* flags */
- NEXT_DEV, /* next device */
- loopback_init /* loopback_init should set up the rest */
-};
-
-struct device *dev_base = &loopback_dev;
diff --git a/linux/src/drivers/net/auto_irq.c b/linux/src/drivers/net/auto_irq.c
deleted file mode 100644
index 82bc7b1..0000000
--- a/linux/src/drivers/net/auto_irq.c
+++ /dev/null
@@ -1,123 +0,0 @@
-/* auto_irq.c: Auto-configure IRQ lines for linux. */
-/*
- Written 1994 by Donald Becker.
-
- The author may be reached as address@hidden, or C/O
- Center of Excellence in Space Data and Information Sciences
- Code 930.5, Goddard Space Flight Center, Greenbelt MD 20771
-
- This code is a general-purpose IRQ line detector for devices with
- jumpered IRQ lines. If you can make the device raise an IRQ (and
- that IRQ line isn't already being used), these routines will tell
- you what IRQ line it's using -- perfect for those oh-so-cool boot-time
- device probes!
-
- To use this, first call autoirq_setup(timeout). TIMEOUT is how many
- 'jiffies' (1/100 sec.) to detect other devices that have active IRQ lines,
- and can usually be zero at boot. 'autoirq_setup()' returns the bit
- vector of nominally-available IRQ lines (lines may be physically in-use,
- but not yet registered to a device).
- Next, set up your device to trigger an interrupt.
- Finally call autoirq_report(TIMEOUT) to find out which IRQ line was
- most recently active. The TIMEOUT should usually be zero, but may
- be set to the number of jiffies to wait for a slow device to raise an IRQ.
-
- The idea of using the setup timeout to filter out bogus IRQs came from
- the serial driver.
-*/
-
-
-#ifdef version
-static const char *version=
-"auto_irq.c:v1.11 Donald Becker (address@hidden)";
-#endif
-
-#include <linux/sched.h>
-#include <linux/delay.h>
-#include <asm/bitops.h>
-#include <asm/io.h>
-#include <asm/irq.h>
-#include <linux/netdevice.h>
-
-struct device *irq2dev_map[NR_IRQS] = {0, 0, /* ... zeroed */};
-
-unsigned long irqs_busy = 0x2147; /* The set of fixed IRQs
(keyboard, timer, etc) */
-unsigned long irqs_used = 0x0001; /* The set of fixed IRQs
sometimes enabled. */
-unsigned long irqs_reserved = 0x0000; /* An advisory "reserved"
table. */
-unsigned long irqs_shared = 0x0000; /* IRQ lines "shared" among
conforming cards.*/
-
-static volatile unsigned long irq_bitmap; /* The irqs we actually found.
*/
-static unsigned long irq_handled; /* The irq lines we have a
handler on. */
-static volatile int irq_number; /* The latest irq
number we actually found. */
-
-static void autoirq_probe(int irq, void *dev_id, struct pt_regs * regs)
-{
- irq_number = irq;
- set_bit(irq, (void *)&irq_bitmap); /* irq_bitmap |= 1 << irq; */
- /* This code used to disable the irq. However, the interrupt stub
- * would then re-enable the interrupt with (potentially) disastrous
- * consequences
- */
- free_irq(irq, dev_id);
- return;
-}
-
-int autoirq_setup(int waittime)
-{
- int i;
- unsigned long timeout = jiffies + waittime;
- unsigned long boguscount = (waittime*loops_per_sec) / 100;
-
- irq_handled = 0;
- irq_bitmap = 0;
-
- for (i = 0; i < 16; i++) {
- if (test_bit(i, &irqs_busy) == 0
- && request_irq(i, autoirq_probe, SA_INTERRUPT, "irq
probe", NULL) == 0)
- set_bit(i, (void *)&irq_handled); /* irq_handled
|= 1 << i;*/
- }
- /* Update our USED lists. */
- irqs_used |= ~irq_handled;
-
- /* Hang out at least <waittime> jiffies waiting for bogus IRQ hits. */
- while (timeout > jiffies && --boguscount > 0)
- ;
-
- irq_handled &= ~irq_bitmap;
-
- irq_number = 0; /* We are interested in new interrupts from now on */
-
- return irq_handled;
-}
-
-int autoirq_report(int waittime)
-{
- int i;
- unsigned long timeout = jiffies+waittime;
- unsigned long boguscount = (waittime*loops_per_sec) / 100;
-
- /* Hang out at least <waittime> jiffies waiting for the IRQ. */
-
- while (timeout > jiffies && --boguscount > 0)
- if (irq_number)
- break;
-
- irq_handled &= ~irq_bitmap; /* This eliminates the already reset
handlers */
-
- /* Retract the irq handlers that we installed. */
- for (i = 0; i < 16; i++) {
- if (test_bit(i, (void *)&irq_handled))
- free_irq(i, NULL);
- }
- return irq_number;
-}
-
-/*
- * Local variables:
- * compile-command: "gcc -DKERNEL -Wall -O6 -fomit-frame-pointer
-I/usr/src/linux/net/tcp -c auto_irq.c"
- * version-control: t
- * kept-new-versions: 5
- * c-indent-level: 4
- * tab-width: 4
- * End:
- */
diff --git a/linux/src/drivers/net/cb_shim.c b/linux/src/drivers/net/cb_shim.c
deleted file mode 100644
index 599b5bb..0000000
--- a/linux/src/drivers/net/cb_shim.c
+++ /dev/null
@@ -1,296 +0,0 @@
-/* cb_shim.c: Linux CardBus device support code. */
-/*
- Written 1999-2002 by Donald Becker.
-
- This software may be used and distributed according to the terms of
- the GNU General Public License (GPL), incorporated herein by
- reference. This is not a documented interface. Drivers incorporating
- or interacting with these functions are derivative works and thus
- are covered the GPL. They must include an explicit GPL notice.
-
- This code provides a shim to allow newer drivers to interact with the
- older Cardbus driver activation code. The functions supported are
- attach, suspend, power-off, resume and eject.
-
- The author may be reached as address@hidden, or
- Donald Becker
- Scyld Computing Corporation
- 410 Severn Ave., Suite 210
- Annapolis MD 21403
-
- Support and updates available at
- http://www.scyld.com/network/drivers.html
-
- Other contributers: (none yet)
-*/
-
-static const char version1[] =
-"cb_shim.c:v1.03 7/12/2002 Donald Becker <address@hidden>\n";
-static const char version2[] =
-" http://www.scyld.com/linux/drivers.html\n";
-
-/* Module options. */
-static int debug = 1; /* 1 normal messages, 0 quiet .. 7
verbose. */
-
-#ifndef __KERNEL__
-#define __KERNEL__
-#endif
-#include <linux/config.h>
-#if defined(CONFIG_SMP) && ! defined(__SMP__)
-#define __SMP__
-#endif
-#if defined(CONFIG_MODVERSIONS) && ! defined(MODVERSIONS)
-#define MODVERSIONS
-#endif
-
-#include <linux/version.h>
-#if defined(MODVERSIONS)
-#include <linux/modversions.h>
-#endif
-#include <linux/module.h>
-
-#include <linux/kernel.h>
-#if LINUX_VERSION_CODE >= 0x20400
-#include <linux/slab.h>
-#else
-#include <linux/malloc.h>
-#endif
-#include <linux/netdevice.h>
-#include <linux/pci.h>
-#include <asm/io.h>
-
-/* These might be awkward to locate. */
-#include <pcmcia/driver_ops.h>
-#include "pci-scan.h"
-#include "kern_compat.h"
-
-MODULE_AUTHOR("Donald Becker <address@hidden>");
-MODULE_DESCRIPTION("Hot-swap-PCI and Cardbus event dispatch");
-MODULE_LICENSE("GPL");
-MODULE_PARM(debug, "i");
-MODULE_PARM_DESC(debug, "Enable additional status messages (0-7)");
-
-/* Note: this is used in a slightly sleazy manner: it is passed to routines
- that expect and return just dev_node_t. However using the too-simple
- dev_node_t complicates devices management -- older drivers had to
- look up dev_node_t.name in their private list. */
-
-struct registered_pci_device {
- struct dev_node_t node;
- int magic;
- struct registered_pci_device *next;
- struct drv_id_info *drv_info;
- struct pci_dev *pci_loc;
- void *dev_instance;
-} static *root_pci_devs = 0;
-
-struct drv_shim {
- struct drv_id_info *did;
- struct driver_operations drv_ops;
- int magic;
- struct drv_shim *next;
-} static *root_drv_id = 0;
-
-static void drv_power_op(struct dev_node_t *node, enum drv_pwr_action action)
-{
- struct registered_pci_device **devp, **next, *rpin = (void *)node, *rp;
- if (debug > 1)
- printk(KERN_DEBUG "power operation(%s, %d).\n",
- rpin->drv_info->name, action);
- /* With our wrapper structure we can almost do
- rpin->drv_info->pwr_event(rpin->dev_instance, action);
- But the detach operation requires us to remove the object from the
- list, so we check for uncontrolled "ghost" devices. */
- for (devp = &root_pci_devs; *devp; devp = next) {
- rp = *devp;
- next = &rp->next;
- if (rp == rpin) {
- if (rp->drv_info->pwr_event)
- rp->drv_info->pwr_event((*devp)->dev_instance,
action);
- else
- printk(KERN_ERR "No power event hander for
driver %s.\n",
- rpin->drv_info->name);
- if (action == DRV_DETACH) {
- kfree(rp);
- *devp = *next;
- MOD_DEC_USE_COUNT;
- }
- return;
- }
- }
- if (debug)
- printk(KERN_WARNING "power operation(%s, %d) for a ghost
device.\n",
- node->dev_name, action);
-}
-/* Wrappers / static lambdas. */
-static void drv_suspend(struct dev_node_t *node)
-{
- drv_power_op(node, DRV_SUSPEND);
-}
-static void drv_resume(struct dev_node_t *node)
-{
- drv_power_op(node, DRV_RESUME);
-}
-static void drv_detach(struct dev_node_t *node)
-{
- drv_power_op(node, DRV_DETACH);
-}
-
-/* The CardBus interaction does not identify the driver the attach() is
- for, thus we must search for the ID in all PCI device tables.
- While ugly, we likely only have one driver loaded anyway.
-*/
-static dev_node_t *drv_attach(struct dev_locator_t *loc)
-{
- struct drv_shim *dp;
- struct drv_id_info *drv_id = NULL;
- struct pci_id_info *pci_tbl = NULL;
- u32 pci_id, subsys_id, pci_rev, pciaddr;
- u8 irq;
- int chip_idx = 0, pci_flags, bus, devfn;
- long ioaddr;
- void *newdev;
-
- if (debug > 1)
- printk(KERN_INFO "drv_attach()\n");
- if (loc->bus != LOC_PCI) return NULL;
- bus = loc->b.pci.bus; devfn = loc->b.pci.devfn;
- if (debug > 1)
- printk(KERN_DEBUG "drv_attach(bus %d, function %d)\n", bus,
devfn);
-
- pcibios_read_config_dword(bus, devfn, PCI_VENDOR_ID, &pci_id);
- pcibios_read_config_dword(bus, devfn, PCI_SUBSYSTEM_ID, &subsys_id);
- pcibios_read_config_dword(bus, devfn, PCI_REVISION_ID, &pci_rev);
- pcibios_read_config_byte(bus, devfn, PCI_INTERRUPT_LINE, &irq);
- for (dp = root_drv_id; dp; dp = dp->next) {
- drv_id = dp->did;
- pci_tbl = drv_id->pci_dev_tbl;
- for (chip_idx = 0; pci_tbl[chip_idx].name; chip_idx++) {
- struct pci_id_info *chip = &pci_tbl[chip_idx];
- if ((pci_id & chip->id.pci_mask) == chip->id.pci
- && (subsys_id & chip->id.subsystem_mask) ==
chip->id.subsystem
- && (pci_rev & chip->id.revision_mask) ==
chip->id.revision)
- break;
- }
- if (pci_tbl[chip_idx].name) /* Compiled out! */
- break;
- }
- if (dp == 0) {
- printk(KERN_WARNING "No driver match for device %8.8x at
%d/%d.\n",
- pci_id, bus, devfn);
- return 0;
- }
- pci_flags = pci_tbl[chip_idx].pci_flags;
- pcibios_read_config_dword(bus, devfn, ((pci_flags >> 2) & 0x1C) + 0x10,
- &pciaddr);
- if ((pciaddr & PCI_BASE_ADDRESS_SPACE_IO)) {
- ioaddr = pciaddr & PCI_BASE_ADDRESS_IO_MASK;
- } else
- ioaddr = (long)ioremap(pciaddr & PCI_BASE_ADDRESS_MEM_MASK,
-
pci_tbl[chip_idx].io_size);
- if (ioaddr == 0 || irq == 0) {
- printk(KERN_ERR "The %s at %d/%d was not assigned an %s.\n"
- KERN_ERR " It will not be activated.\n",
- pci_tbl[chip_idx].name, bus, devfn,
- ioaddr == 0 ? "address" : "IRQ");
- return NULL;
- }
- printk(KERN_INFO "Found a %s at %d/%d address 0x%x->0x%lx IRQ %d.\n",
- pci_tbl[chip_idx].name, bus, devfn, pciaddr, ioaddr, irq);
- {
- u16 pci_command;
- pcibios_read_config_word(bus, devfn, PCI_COMMAND, &pci_command);
- printk(KERN_INFO "%s at %d/%d command 0x%x.\n",
- pci_tbl[chip_idx].name, bus, devfn, pci_command);
- }
-
- newdev = drv_id->probe1(pci_find_slot(bus, devfn), 0,
- ioaddr, irq, chip_idx,
0);
- if (newdev) {
- struct registered_pci_device *hsdev =
- kmalloc(sizeof(struct registered_pci_device),
GFP_KERNEL);
- if (drv_id->pci_class == PCI_CLASS_NETWORK_ETHERNET<<8)
- strcpy(hsdev->node.dev_name, ((struct net_device
*)newdev)->name);
- hsdev->node.major = hsdev->node.minor = 0;
- hsdev->node.next = NULL;
- hsdev->drv_info = drv_id;
- hsdev->dev_instance = newdev;
- hsdev->next = root_pci_devs;
- root_pci_devs = hsdev;
- drv_id->pwr_event(newdev, DRV_ATTACH);
- MOD_INC_USE_COUNT;
- return &hsdev->node;
- }
- return NULL;
-}
-
-/* Add/remove a driver ID structure to our private list of known drivers. */
-int do_cb_register(struct drv_id_info *did)
-{
- struct driver_operations *dop;
- struct drv_shim *dshim = kmalloc(sizeof(*dshim), GFP_KERNEL);
- if (dshim == 0)
- return 0;
- if (debug > 1)
- printk(KERN_INFO "Registering driver support for '%s'.\n",
- did->name);
- MOD_INC_USE_COUNT;
- dshim->did = did;
- dop = &dshim->drv_ops;
- dop->name = (char *)did->name;
- dop->attach = drv_attach;
- dop->suspend = drv_suspend;
- dop->resume = drv_resume;
- dop->detach = drv_detach;
- dshim->next = root_drv_id;
- root_drv_id = dshim;
- return register_driver(dop);
-}
-
-void do_cb_unregister(struct drv_id_info *did)
-{
- struct drv_shim **dp;
- for (dp = &root_drv_id; *dp; dp = &(*dp)->next)
- if ((*dp)->did == did) {
- struct drv_shim *dshim = *dp;
- unregister_driver(&dshim->drv_ops);
- *dp = dshim->next;
- kfree(dshim);
- MOD_DEC_USE_COUNT;
- return;
- }
-}
-
-extern int (*register_hotswap_hook)(struct drv_id_info *did);
-extern void (*unregister_hotswap_hook)(struct drv_id_info *did);
-
-int (*old_cb_hook)(struct drv_id_info *did);
-void (*old_un_cb_hook)(struct drv_id_info *did);
-
-int init_module(void)
-{
- if (debug)
- printk(KERN_INFO "%s" KERN_INFO "%s", version1, version2);
- old_cb_hook = register_hotswap_hook;
- old_un_cb_hook = unregister_hotswap_hook;
- register_hotswap_hook = do_cb_register;
- unregister_hotswap_hook = do_cb_unregister;
- return 0;
-}
-void cleanup_module(void)
-{
- register_hotswap_hook = old_cb_hook;
- unregister_hotswap_hook = old_un_cb_hook;
- return;
-}
-
-
-/*
- * Local variables:
- * compile-command: "gcc -DMODULE -Wall -Wstrict-prototypes -O6 -c cb_shim.c
-I/usr/include/ -I/usr/src/pcmcia/include/"
- * c-indent-level: 4
- * c-basic-offset: 4
- * tab-width: 4
- * End:
- */
-
diff --git a/linux/src/drivers/net/iow.h b/linux/src/drivers/net/iow.h
deleted file mode 100644
index 6e15688..0000000
--- a/linux/src/drivers/net/iow.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef _ASM_IOW_H
-#define _ASM_IOW_H
-
-/* no longer used */
-
-#endif
diff --git a/linux/src/drivers/net/net_init.c b/linux/src/drivers/net/net_init.c
deleted file mode 100644
index 3d4c42d..0000000
--- a/linux/src/drivers/net/net_init.c
+++ /dev/null
@@ -1,439 +0,0 @@
-/* netdrv_init.c: Initialization for network devices. */
-/*
- Written 1993,1994,1995 by Donald Becker.
-
- The author may be reached as address@hidden or
- C/O Center of Excellence in Space Data and Information Sciences
- Code 930.5, Goddard Space Flight Center, Greenbelt MD 20771
-
- This file contains the initialization for the "pl14+" style ethernet
- drivers. It should eventually replace most of drivers/net/Space.c.
- It's primary advantage is that it's able to allocate low-memory buffers.
- A secondary advantage is that the dangerous NE*000 netcards can reserve
- their I/O port region before the SCSI probes start.
-
- Modifications/additions by Bjorn Ekwall <address@hidden>:
- ethdev_index[MAX_ETH_CARDS]
- register_netdev() / unregister_netdev()
-
- Modifications by Wolfgang Walter
- Use dev_close cleanly so we always shut things down tidily.
-
- Changed 29/10/95, Alan Cox to pass sockaddr's around for mac addresses.
-
- 14/06/96 - Paul Gortmaker: Add generic eth_change_mtu() function.
-
- August 12, 1996 - Lawrence V. Stefani: Added fddi_change_mtu() and
- fddi_setup() functions.
- Sept. 10, 1996 - Lawrence V. Stefani: Increased hard_header_len to
- include 3 pad bytes.
-*/
-
-#include <linux/config.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/types.h>
-#include <linux/fs.h>
-#include <linux/malloc.h>
-#include <linux/if_ether.h>
-#include <linux/string.h>
-#include <linux/netdevice.h>
-#include <linux/etherdevice.h>
-#include <linux/fddidevice.h>
-#include <linux/trdevice.h>
-#include <linux/if_arp.h>
-#ifdef CONFIG_NET_ALIAS
-#include <linux/net_alias.h>
-#endif
-
-/* The network devices currently exist only in the socket namespace, so these
- entries are unused. The only ones that make sense are
- open start the ethercard
- close stop the ethercard
- ioctl To get statistics, perhaps set the interface port (AUI, BNC,
etc.)
- One can also imagine getting raw packets using
- read & write
- but this is probably better handled by a raw packet socket.
-
- Given that almost all of these functions are handled in the current
- socket-based scheme, putting ethercard devices in /dev/ seems pointless.
-
- [Removed all support for /dev network devices. When someone adds
- streams then by magic we get them, but otherwise they are un-needed
- and a space waste]
-*/
-
-/* The list of used and available "eth" slots (for "eth0", "eth1", etc.) */
-#define MAX_ETH_CARDS 16 /* same as the number if irq's in irq2dev[] */
-static struct device *ethdev_index[MAX_ETH_CARDS];
-
-
-/* Fill in the fields of the device structure with ethernet-generic values.
-
- If no device structure is passed, a new one is constructed, complete with
- a SIZEOF_PRIVATE private data area.
-
- If an empty string area is passed as dev->name, or a new structure is made,
- a new name string is constructed. The passed string area should be 8 bytes
- long.
- */
-
-struct device *
-init_etherdev(struct device *dev, int sizeof_priv)
-{
- int new_device = 0;
- int i;
-
- /* Use an existing correctly named device in Space.c:dev_base. */
- if (dev == NULL) {
- int alloc_size = sizeof(struct device) + sizeof("eth%d ")
- + sizeof_priv + 3;
- struct device *cur_dev;
- char pname[8]; /* Putative name for the device. */
-
- for (i = 0; i < MAX_ETH_CARDS; ++i)
- if (ethdev_index[i] == NULL) {
- sprintf(pname, "eth%d", i);
- for (cur_dev = dev_base; cur_dev; cur_dev =
cur_dev->next)
- if (strcmp(pname, cur_dev->name) == 0) {
- dev = cur_dev;
- dev->init = NULL;
- sizeof_priv = (sizeof_priv + 3)
& ~3;
- dev->priv = sizeof_priv
- ?
kmalloc(sizeof_priv, GFP_KERNEL)
- : NULL;
- if (dev->priv)
memset(dev->priv, 0, sizeof_priv);
- goto found;
- }
- }
-
- alloc_size &= ~3; /* Round to dword boundary. */
-
- dev = (struct device *)kmalloc(alloc_size, GFP_KERNEL);
- memset(dev, 0, alloc_size);
- if (sizeof_priv)
- dev->priv = (void *) (dev + 1);
- dev->name = sizeof_priv + (char *)(dev + 1);
- new_device = 1;
- }
-
- found: /* From the double loop
above. */
-
- if (dev->name &&
- ((dev->name[0] == '\0') || (dev->name[0] == ' '))) {
- for (i = 0; i < MAX_ETH_CARDS; ++i)
- if (ethdev_index[i] == NULL) {
- sprintf(dev->name, "eth%d", i);
- ethdev_index[i] = dev;
- break;
- }
- }
-
- ether_setup(dev); /* Hmmm, should this be called here? */
-
- if (new_device) {
- /* Append the device to the device queue. */
- struct device **old_devp = &dev_base;
- while ((*old_devp)->next)
- old_devp = & (*old_devp)->next;
- (*old_devp)->next = dev;
- dev->next = 0;
- }
- return dev;
-}
-
-
-static int eth_mac_addr(struct device *dev, void *p)
-{
- struct sockaddr *addr=p;
- if(dev->start)
- return -EBUSY;
- memcpy(dev->dev_addr, addr->sa_data,dev->addr_len);
- return 0;
-}
-
-static int eth_change_mtu(struct device *dev, int new_mtu)
-{
- if ((new_mtu < 68) || (new_mtu > 1500))
- return -EINVAL;
- dev->mtu = new_mtu;
- return 0;
-}
-
-#ifdef CONFIG_FDDI
-
-static int fddi_change_mtu(struct device *dev, int new_mtu)
-{
- if ((new_mtu < FDDI_K_SNAP_HLEN) || (new_mtu > FDDI_K_SNAP_DLEN))
- return(-EINVAL);
- dev->mtu = new_mtu;
- return(0);
-}
-
-#endif
-
-void ether_setup(struct device *dev)
-{
- int i;
- /* Fill in the fields of the device structure with ethernet-generic
values.
- This should be in a common file instead of per-driver. */
- for (i = 0; i < DEV_NUMBUFFS; i++)
- skb_queue_head_init(&dev->buffs[i]);
-
- /* register boot-defined "eth" devices */
- if (dev->name && (strncmp(dev->name, "eth", 3) == 0)) {
- i = simple_strtoul(dev->name + 3, NULL, 0);
- if (ethdev_index[i] == NULL) {
- ethdev_index[i] = dev;
- }
- else if (dev != ethdev_index[i]) {
- /* Really shouldn't happen! */
- printk("ether_setup: Ouch! Someone else took %s\n",
- dev->name);
- }
- }
-
- dev->change_mtu = eth_change_mtu;
- dev->hard_header = eth_header;
- dev->rebuild_header = eth_rebuild_header;
- dev->set_mac_address = eth_mac_addr;
- dev->header_cache_bind = eth_header_cache_bind;
- dev->header_cache_update= eth_header_cache_update;
-
- dev->type = ARPHRD_ETHER;
- dev->hard_header_len = ETH_HLEN;
- dev->mtu = 1500; /* eth_mtu */
- dev->addr_len = ETH_ALEN;
- dev->tx_queue_len = 100; /* Ethernet wants good queues */
-
- memset(dev->broadcast,0xFF, ETH_ALEN);
-
- /* New-style flags. */
- dev->flags = IFF_BROADCAST|IFF_MULTICAST;
- dev->family = AF_INET;
- dev->pa_addr = 0;
- dev->pa_brdaddr = 0;
- dev->pa_mask = 0;
- dev->pa_alen = 4;
-}
-
-#ifdef CONFIG_TR
-
-void tr_setup(struct device *dev)
-{
- int i;
- /* Fill in the fields of the device structure with ethernet-generic
values.
- This should be in a common file instead of per-driver. */
- for (i = 0; i < DEV_NUMBUFFS; i++)
- skb_queue_head_init(&dev->buffs[i]);
-
- dev->hard_header = tr_header;
- dev->rebuild_header = tr_rebuild_header;
-
- dev->type = ARPHRD_IEEE802;
- dev->hard_header_len = TR_HLEN;
- dev->mtu = 2000; /* bug in fragmenter...*/
- dev->addr_len = TR_ALEN;
- dev->tx_queue_len = 100; /* Long queues on tr */
-
- memset(dev->broadcast,0xFF, TR_ALEN);
-
- /* New-style flags. */
- dev->flags = IFF_BROADCAST;
- dev->family = AF_INET;
- dev->pa_addr = 0;
- dev->pa_brdaddr = 0;
- dev->pa_mask = 0;
- dev->pa_alen = 4;
-}
-
-#endif
-
-#ifdef CONFIG_FDDI
-
-void fddi_setup(struct device *dev)
- {
- int i;
-
- /*
- * Fill in the fields of the device structure with FDDI-generic values.
- * This should be in a common file instead of per-driver.
- */
- for (i=0; i < DEV_NUMBUFFS; i++)
- skb_queue_head_init(&dev->buffs[i]);
-
- dev->change_mtu = fddi_change_mtu;
- dev->hard_header = fddi_header;
- dev->rebuild_header = fddi_rebuild_header;
-
- dev->type = ARPHRD_FDDI;
- dev->hard_header_len = FDDI_K_SNAP_HLEN+3; /* Assume 802.2 SNAP
hdr len + 3 pad bytes */
- dev->mtu = FDDI_K_SNAP_DLEN;
/* Assume max payload of 802.2 SNAP frame */
- dev->addr_len = FDDI_K_ALEN;
- dev->tx_queue_len = 100; /* Long queues on FDDI */
-
- memset(dev->broadcast, 0xFF, FDDI_K_ALEN);
-
- /* New-style flags */
- dev->flags = IFF_BROADCAST | IFF_MULTICAST;
- dev->family = AF_INET;
- dev->pa_addr = 0;
- dev->pa_brdaddr = 0;
- dev->pa_mask = 0;
- dev->pa_alen = 4;
- return;
- }
-
-#endif
-
-int ether_config(struct device *dev, struct ifmap *map)
-{
- if (map->mem_start != (u_long)(-1))
- dev->mem_start = map->mem_start;
- if (map->mem_end != (u_long)(-1))
- dev->mem_end = map->mem_end;
- if (map->base_addr != (u_short)(-1))
- dev->base_addr = map->base_addr;
- if (map->irq != (u_char)(-1))
- dev->irq = map->irq;
- if (map->dma != (u_char)(-1))
- dev->dma = map->dma;
- if (map->port != (u_char)(-1))
- dev->if_port = map->port;
- return 0;
-}
-
-int register_netdev(struct device *dev)
-{
- struct device *d = dev_base;
- unsigned long flags;
- int i=MAX_ETH_CARDS;
-
- save_flags(flags);
- cli();
-
- if (dev && dev->init) {
- if (dev->name &&
- ((dev->name[0] == '\0') || (dev->name[0] == ' '))) {
- for (i = 0; i < MAX_ETH_CARDS; ++i)
- if (ethdev_index[i] == NULL) {
- sprintf(dev->name, "eth%d", i);
-/* printk("loading device '%s'...\n",
dev->name);*/
- ethdev_index[i] = dev;
- break;
- }
- }
-
- sti(); /* device probes assume interrupts enabled */
- if (dev->init(dev) != 0) {
- if (i < MAX_ETH_CARDS) ethdev_index[i] = NULL;
- restore_flags(flags);
- return -EIO;
- }
- cli();
-
- /* Add device to end of chain */
- if (dev_base) {
- while (d->next)
- d = d->next;
- d->next = dev;
- }
- else
- dev_base = dev;
- dev->next = NULL;
- }
- restore_flags(flags);
- return 0;
-}
-
-void unregister_netdev(struct device *dev)
-{
- struct device *d = dev_base;
- unsigned long flags;
- int i;
-
- save_flags(flags);
- cli();
-
- if (dev == NULL)
- {
- printk("was NULL\n");
- restore_flags(flags);
- return;
- }
- /* else */
- if (dev->start)
- printk("ERROR '%s' busy and not MOD_IN_USE.\n", dev->name);
-
- /*
- * must jump over main_device+aliases
- * avoid alias devices unregistration so that only
- * net_alias module manages them
- */
-#ifdef CONFIG_NET_ALIAS
- if (dev_base == dev)
- dev_base = net_alias_nextdev(dev);
- else
- {
- while(d && (net_alias_nextdev(d) != dev)) /* skip aliases */
- d = net_alias_nextdev(d);
-
- if (d && (net_alias_nextdev(d) == dev))
- {
- /*
- * Critical: Bypass by consider devices as blocks
(maindev+aliases)
- */
- net_alias_nextdev_set(d, net_alias_nextdev(dev));
- }
-#else
- if (dev_base == dev)
- dev_base = dev->next;
- else
- {
- while (d && (d->next != dev))
- d = d->next;
-
- if (d && (d->next == dev))
- {
- d->next = dev->next;
- }
-#endif
- else
- {
- printk("unregister_netdev: '%s' not found\n",
dev->name);
- restore_flags(flags);
- return;
- }
- }
- for (i = 0; i < MAX_ETH_CARDS; ++i)
- {
- if (ethdev_index[i] == dev)
- {
- ethdev_index[i] = NULL;
- break;
- }
- }
-
- restore_flags(flags);
-
- /*
- * You can i.e use a interfaces in a route though it is not up.
- * We call close_dev (which is changed: it will down a device even
if
- * dev->flags==0 (but it will not call dev->stop if IFF_UP
- * is not set).
- * This will call notifier_call_chain(&netdev_chain, NETDEV_DOWN,
dev),
- * dev_mc_discard(dev), ....
- */
-
- dev_close(dev);
-}
-
-
-/*
- * Local variables:
- * compile-command: "gcc -D__KERNEL__ -I/usr/src/linux/net/inet -Wall
-Wstrict-prototypes -O6 -m486 -c net_init.c"
- * version-control: t
- * kept-new-versions: 5
- * tab-width: 4
- * End:
- */
diff --git a/linux/src/drivers/net/smc9194.c b/linux/src/drivers/net/smc9194.c
deleted file mode 100644
index e3d648d..0000000
--- a/linux/src/drivers/net/smc9194.c
+++ /dev/null
@@ -1,1779 +0,0 @@
-/*------------------------------------------------------------------------
- . smc9194.c
- . This is a driver for SMC's 9000 series of Ethernet cards.
- .
- . Copyright (C) 1996 by Erik Stahlman
- . This software may be used and distributed according to the terms
- . of the GNU Public License, incorporated herein by reference.
- .
- . "Features" of the SMC chip:
- . 4608 byte packet memory. ( for the 91C92. Others have more )
- . EEPROM for configuration
- . AUI/TP selection ( mine has 10Base2/10BaseT select )
- .
- . Arguments:
- . io = for the base address
- . irq = for the IRQ
- . ifport = 0 for autodetect, 1 for TP, 2 for AUI ( or 10base2 )
- .
- . author:
- . Erik Stahlman ( address@hidden )
- .
- . Hardware multicast code from Peter Cammaert ( address@hidden )
- .
- . Sources:
- . o SMC databook
- . o skeleton.c by Donald Becker ( address@hidden )
- . o ( a LOT of advice from Becker as well )
- .
- . History:
- . 12/07/95 Erik Stahlman written, got receive/xmit handled
- . 01/03/96 Erik Stahlman worked out some bugs, actually usable!!! :-)
- . 01/06/96 Erik Stahlman cleaned up some, better testing, etc
- . 01/29/96 Erik Stahlman fixed autoirq, added multicast
- . 02/01/96 Erik Stahlman 1. disabled all interrupts in smc_reset
- . 2. got rid of post-decrementing bug -- UGH.
- . 02/13/96 Erik Stahlman Tried to fix autoirq failure. Added more
- . descriptive error messages.
- . 02/15/96 Erik Stahlman Fixed typo that caused detection failure
- . 02/23/96 Erik Stahlman Modified it to fit into kernel tree
- . Added support to change hardware address
- . Cleared stats on opens
- . 02/26/96 Erik Stahlman Trial support for Kernel 1.2.13
- . Kludge for automatic IRQ detection
- . 03/04/96 Erik Stahlman Fixed kernel 1.3.70 +
- . Fixed bug reported by Gardner Buchanan in
- . smc_enable, with outw instead of outb
- . 03/06/96 Erik Stahlman Added hardware multicast from Peter Cammaert
- ----------------------------------------------------------------------------*/
-
-static const char *version =
- "smc9194.c:v0.12 03/06/96 by Erik Stahlman (address@hidden)\n";
-
-#ifdef MODULE
-#include <linux/module.h>
-#include <linux/version.h>
-#endif
-
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/types.h>
-#include <linux/fcntl.h>
-#include <linux/interrupt.h>
-#include <linux/ptrace.h>
-#include <linux/ioport.h>
-#include <linux/in.h>
-#include <linux/malloc.h>
-#include <linux/string.h>
-#include <linux/ioport.h>
-#include <asm/bitops.h>
-#include <asm/io.h>
-#include <linux/errno.h>
-
-#include <linux/netdevice.h>
-#include <linux/etherdevice.h>
-#include <linux/skbuff.h>
-
-#include "smc9194.h"
-/*------------------------------------------------------------------------
- .
- . Configuration options, for the experienced user to change.
- .
- -------------------------------------------------------------------------*/
-
-/*
- . this is for kernels > 1.2.70
-*/
-#define REALLY_NEW_KERNEL
-#ifndef REALLY_NEW_KERNEL
-#define free_irq( x, y ) free_irq( x )
-#define request_irq( x, y, z, u, v ) request_irq( x, y, z, u )
-#endif
-
-/*
- . Do you want to use this with old kernels.
- . WARNING: this is not well tested.
-#define SUPPORT_OLD_KERNEL
-*/
-
-
-/*
- . Do you want to use 32 bit xfers? This should work on all chips, as
- . the chipset is designed to accommodate them.
-*/
-#define USE_32_BIT 1
-
-/*
- .the SMC9194 can be at any of the following port addresses. To change,
- .for a slightly different card, you can add it to the array. Keep in
- .mind that the array must end in zero.
-*/
-static unsigned int smc_portlist[] =
- { 0x200, 0x220, 0x240, 0x260, 0x280, 0x2A0, 0x2C0, 0x2E0,
- 0x300, 0x320, 0x340, 0x360, 0x380, 0x3A0, 0x3C0, 0x3E0, 0};
-
-/*
- . Wait time for memory to be free. This probably shouldn't be
- . tuned that much, as waiting for this means nothing else happens
- . in the system
-*/
-#define MEMORY_WAIT_TIME 16
-
-/*
- . DEBUGGING LEVELS
- .
- . 0 for normal operation
- . 1 for slightly more details
- . >2 for various levels of increasingly useless information
- . 2 for interrupt tracking, status flags
- . 3 for packet dumps, etc.
-*/
-#define SMC_DEBUG 0
-
-#if (SMC_DEBUG > 2 )
-#define PRINTK3(x) printk x
-#else
-#define PRINTK3(x)
-#endif
-
-#if SMC_DEBUG > 1
-#define PRINTK2(x) printk x
-#else
-#define PRINTK2(x)
-#endif
-
-#ifdef SMC_DEBUG
-#define PRINTK(x) printk x
-#else
-#define PRINTK(x)
-#endif
-
-
-/* the older versions of the kernel cannot support autoprobing */
-#ifdef SUPPORT_OLD_KERNEL
-#define NO_AUTOPROBE
-#endif
-
-
-/*------------------------------------------------------------------------
- .
- . The internal workings of the driver. If you are changing anything
- . here with the SMC stuff, you should have the datasheet and known
- . what you are doing.
- .
- -------------------------------------------------------------------------*/
-#define CARDNAME "SMC9194"
-
-#ifdef SUPPORT_OLD_KERNEL
-char kernel_version[] = UTS_RELEASE;
-#endif
-
-/* store this information for the driver.. */
-struct smc_local {
- /*
- these are things that the kernel wants me to keep, so users
- can find out semi-useless statistics of how well the card is
- performing
- */
- struct enet_statistics stats;
-
- /*
- If I have to wait until memory is available to send
- a packet, I will store the skbuff here, until I get the
- desired memory. Then, I'll send it out and free it.
- */
- struct sk_buff * saved_skb;
-
- /*
- . This keeps track of how many packets that I have
- . sent out. When an TX_EMPTY interrupt comes, I know
- . that all of these have been sent.
- */
- int packets_waiting;
-};
-
-
-/*-----------------------------------------------------------------
- .
- . The driver can be entered at any of the following entry points.
- .
- .------------------------------------------------------------------ */
-
-/*
- . This is called by register_netdev(). It is responsible for
- . checking the portlist for the SMC9000 series chipset. If it finds
- . one, then it will initialize the device, find the hardware information,
- . and sets up the appropriate device parameters.
- . NOTE: Interrupts are *OFF* when this procedure is called.
- .
- . NB:This shouldn't be static since it is referred to externally.
-*/
-int smc_init(struct device *dev);
-
-/*
- . The kernel calls this function when someone wants to use the device,
- . typically 'ifconfig ethX up'.
-*/
-static int smc_open(struct device *dev);
-
-/*
- . This is called by the kernel to send a packet out into the net. it's
- . responsible for doing a best-effort send, but if it's simply not possible
- . to send it, the packet gets dropped.
-*/
-static int smc_send_packet(struct sk_buff *skb, struct device *dev);
-
-/*
- . This is called by the kernel in response to 'ifconfig ethX down'. It
- . is responsible for cleaning up everything that the open routine
- . does, and maybe putting the card into a powerdown state.
-*/
-static int smc_close(struct device *dev);
-
-/*
- . This routine allows the proc file system to query the driver's
- . statistics.
-*/
-static struct enet_statistics * smc_query_statistics( struct device *dev);
-
-/*
- . Finally, a call to set promiscuous mode ( for TCPDUMP and related
- . programs ) and multicast modes.
-*/
-#ifdef SUPPORT_OLD_KERNEL
-static void smc_set_multicast_list(struct device *dev, int num_addrs,
- void *addrs);
-#else
-static void smc_set_multicast_list(struct device *dev);
-#endif
-
-/*---------------------------------------------------------------
- .
- . Interrupt level calls..
- .
- ----------------------------------------------------------------*/
-
-/*
- . Handles the actual interrupt
-*/
-#ifdef REALLY_NEW_KERNEL
-static void smc_interrupt(int irq, void *, struct pt_regs *regs);
-#else
-static void smc_interrupt(int irq, struct pt_regs *regs);
-#endif
-/*
- . This is a separate procedure to handle the receipt of a packet, to
- . leave the interrupt code looking slightly cleaner
-*/
-inline static void smc_rcv( struct device *dev );
-/*
- . This handles a TX interrupt, which is only called when an error
- . relating to a packet is sent.
-*/
-inline static void smc_tx( struct device * dev );
-
-/*
- ------------------------------------------------------------
- .
- . Internal routines
- .
- ------------------------------------------------------------
-*/
-
-/*
- . Test if a given location contains a chip, trying to cause as
- . little damage as possible if it's not a SMC chip.
-*/
-static int smc_probe( int ioaddr );
-
-/*
- . this routine initializes the cards hardware, prints out the configuration
- . to the system log as well as the vanity message, and handles the setup
- . of a device parameter.
- . It will give an error if it can't initialize the card.
-*/
-static int smc_initcard( struct device *, int ioaddr );
-
-/*
- . A rather simple routine to print out a packet for debugging purposes.
-*/
-#if SMC_DEBUG > 2
-static void print_packet( byte *, int );
-#endif
-
-#define tx_done(dev) 1
-
-/* this is called to actually send the packet to the chip */
-static void smc_hardware_send_packet( struct device * dev );
-
-/* Since I am not sure if I will have enough room in the chip's ram
- . to store the packet, I call this routine, which either sends it
- . now, or generates an interrupt when the card is ready for the
- . packet */
-static int smc_wait_to_send_packet( struct sk_buff * skb, struct device *dev
);
-
-/* this does a soft reset on the device */
-static void smc_reset( int ioaddr );
-
-/* Enable Interrupts, Receive, and Transmit */
-static void smc_enable( int ioaddr );
-
-/* this puts the device in an inactive state */
-static void smc_shutdown( int ioaddr );
-
-#ifndef NO_AUTOPROBE
-/* This routine will find the IRQ of the driver if one is not
- . specified in the input to the device. */
-static int smc_findirq( int ioaddr );
-#endif
-
-/*
- this routine will set the hardware multicast table to the specified
- values given it by the higher level routines
-*/
-#ifndef SUPPORT_OLD_KERNEL
-static void smc_setmulticast( int ioaddr, int count, struct dev_mc_list * );
-static int crc32( char *, int );
-#endif
-
-#ifdef SUPPORT_OLD_KERNEL
-extern struct device *init_etherdev(struct device *dev, int sizeof_private,
- unsigned long *mem_startp );
-#endif
-
-/*
- . Function: smc_reset( int ioaddr )
- . Purpose:
- . This sets the SMC91xx chip to its normal state, hopefully from whatever
- . mess that any other DOS driver has put it in.
- .
- . Maybe I should reset more registers to defaults in here? SOFTRESET should
- . do that for me.
- .
- . Method:
- . 1. send a SOFT RESET
- . 2. wait for it to finish
- . 3. enable autorelease mode
- . 4. reset the memory management unit
- . 5. clear all interrupts
- .
-*/
-static void smc_reset( int ioaddr )
-{
- /* This resets the registers mostly to defaults, but doesn't
- affect EEPROM. That seems unnecessary */
- SMC_SELECT_BANK( 0 );
- outw( RCR_SOFTRESET, ioaddr + RCR );
-
- /* this should pause enough for the chip to be happy */
- SMC_DELAY( );
-
- /* Set the transmit and receive configuration registers to
- default values */
- outw( RCR_CLEAR, ioaddr + RCR );
- outw( TCR_CLEAR, ioaddr + TCR );
-
- /* set the control register to automatically
- release successfully transmitted packets, to make the best
- use out of our limited memory */
- SMC_SELECT_BANK( 1 );
- outw( inw( ioaddr + CONTROL ) | CTL_AUTO_RELEASE , ioaddr + CONTROL );
-
- /* Reset the MMU */
- SMC_SELECT_BANK( 2 );
- outw( MC_RESET, ioaddr + MMU_CMD );
-
- /* Note: It doesn't seem that waiting for the MMU busy is needed here,
- but this is a place where future chipsets _COULD_ break. Be wary
- of issuing another MMU command right after this */
-
- outb( 0, ioaddr + INT_MASK );
-}
-
-/*
- . Function: smc_enable
- . Purpose: let the chip talk to the outside work
- . Method:
- . 1. Enable the transmitter
- . 2. Enable the receiver
- . 3. Enable interrupts
-*/
-static void smc_enable( int ioaddr )
-{
- SMC_SELECT_BANK( 0 );
- /* see the header file for options in TCR/RCR NORMAL*/
- outw( TCR_NORMAL, ioaddr + TCR );
- outw( RCR_NORMAL, ioaddr + RCR );
-
- /* now, enable interrupts */
- SMC_SELECT_BANK( 2 );
- outb( SMC_INTERRUPT_MASK, ioaddr + INT_MASK );
-}
-
-/*
- . Function: smc_shutdown
- . Purpose: closes down the SMC91xxx chip.
- . Method:
- . 1. zero the interrupt mask
- . 2. clear the enable receive flag
- . 3. clear the enable xmit flags
- .
- . TODO:
- . (1) maybe utilize power down mode.
- . Why not yet? Because while the chip will go into power down mode,
- . the manual says that it will wake up in response to any I/O requests
- . in the register space. Empirical results do not show this working.
-*/
-static void smc_shutdown( int ioaddr )
-{
- /* no more interrupts for me */
- SMC_SELECT_BANK( 2 );
- outb( 0, ioaddr + INT_MASK );
-
- /* and tell the card to stay away from that nasty outside world */
- SMC_SELECT_BANK( 0 );
- outb( RCR_CLEAR, ioaddr + RCR );
- outb( TCR_CLEAR, ioaddr + TCR );
-#if 0
- /* finally, shut the chip down */
- SMC_SELECT_BANK( 1 );
- outw( inw( ioaddr + CONTROL ), CTL_POWERDOWN, ioaddr + CONTROL );
-#endif
-}
-
-
-#ifndef SUPPORT_OLD_KERNEL
-/*
- . Function: smc_setmulticast( int ioaddr, int count, dev_mc_list * adds )
- . Purpose:
- . This sets the internal hardware table to filter out unwanted multicast
- . packets before they take up memory.
- .
- . The SMC chip uses a hash table where the high 6 bits of the CRC of
- . address are the offset into the table. If that bit is 1, then the
- . multicast packet is accepted. Otherwise, it's dropped silently.
- .
- . To use the 6 bits as an offset into the table, the high 3 bits are the
- . number of the 8 bit register, while the low 3 bits are the bit within
- . that register.
- .
- . This routine is based very heavily on the one provided by Peter Cammaert.
-*/
-
-
-static void smc_setmulticast( int ioaddr, int count, struct dev_mc_list *
addrs ) {
- int i;
- unsigned char multicast_table[ 8 ];
- struct dev_mc_list * cur_addr;
- /* table for flipping the order of 3 bits */
- unsigned char invert3[] = { 0, 4, 2, 6, 1, 5, 3, 7 };
-
- /* start with a table of all zeros: reject all */
- memset( multicast_table, 0, sizeof( multicast_table ) );
-
- cur_addr = addrs;
- for ( i = 0; i < count ; i ++, cur_addr = cur_addr->next ) {
- int position;
-
- /* do we have a pointer here? */
- if ( !cur_addr )
- break;
- /* make sure this is a multicast address - shouldn't this
- be a given if we have it here ? */
- if ( !( *cur_addr->dmi_addr & 1 ) )
- continue;
-
- /* only use the low order bits */
- position = crc32( cur_addr->dmi_addr, 6 ) & 0x3f;
-
- /* do some messy swapping to put the bit in the right spot */
- multicast_table[invert3[position&7]] |=
- (1<<invert3[(position>>3)&7]);
-
- }
- /* now, the table can be loaded into the chipset */
- SMC_SELECT_BANK( 3 );
-
- for ( i = 0; i < 8 ; i++ ) {
- outb( multicast_table[i], ioaddr + MULTICAST1 + i );
- }
-}
-
-/*
- Finds the CRC32 of a set of bytes.
- Again, from Peter Cammaert's code.
-*/
-static int crc32( char * s, int length ) {
- /* indices */
- int perByte;
- int perBit;
- /* crc polynomial for Ethernet */
- const unsigned long poly = 0xedb88320;
- /* crc value - preinitialized to all 1's */
- unsigned long crc_value = 0xffffffff;
-
- for ( perByte = 0; perByte < length; perByte ++ ) {
- unsigned char c;
-
- c = *(s++);
- for ( perBit = 0; perBit < 8; perBit++ ) {
- crc_value = (crc_value>>1)^
- (((crc_value^c)&0x01)?poly:0);
- c >>= 1;
- }
- }
- return crc_value;
-}
-
-#endif
-
-
-/*
- . Function: smc_wait_to_send_packet( struct sk_buff * skb, struct device * )
- . Purpose:
- . Attempt to allocate memory for a packet, if chip-memory is not
- . available, then tell the card to generate an interrupt when it
- . is available.
- .
- . Algorithm:
- .
- . o if the saved_skb is not currently null, then drop this packet
- . on the floor. This should never happen, because of TBUSY.
- . o if the saved_skb is null, then replace it with the current packet,
- . o See if I can sending it now.
- . o (NO): Enable interrupts and let the interrupt handler deal with it.
- . o (YES):Send it now.
-*/
-static int smc_wait_to_send_packet( struct sk_buff * skb, struct device * dev )
-{
- struct smc_local *lp = (struct smc_local *)dev->priv;
- unsigned short ioaddr = dev->base_addr;
- word length;
- unsigned short numPages;
- word time_out;
-
- if ( lp->saved_skb) {
- /* THIS SHOULD NEVER HAPPEN. */
- lp->stats.tx_aborted_errors++;
- printk(CARDNAME": Bad Craziness - sent packet while busy.\n" );
- return 1;
- }
- lp->saved_skb = skb;
-
- length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
-
- /*
- . the MMU wants the number of pages to be the number of 256 bytes
- . 'pages', minus 1 ( since a packet can't ever have 0 pages :) )
- */
- numPages = length / 256;
-
- if (numPages > 7 ) {
- printk(CARDNAME": Far too big packet error. \n");
- /* freeing the packet is a good thing here... but should
- . any packets of this size get down here? */
- dev_kfree_skb (skb, FREE_WRITE);
- lp->saved_skb = NULL;
- /* this IS an error, but, i don't want the skb saved */
- return 0;
- }
- /* either way, a packet is waiting now */
- lp->packets_waiting++;
-
- /* now, try to allocate the memory */
- SMC_SELECT_BANK( 2 );
- outw( MC_ALLOC | numPages, ioaddr + MMU_CMD );
- /*
- . Performance Hack
- .
- . wait a short amount of time.. if I can send a packet now, I send
- . it now. Otherwise, I enable an interrupt and wait for one to be
- . available.
- .
- . I could have handled this a slightly different way, by checking to
- . see if any memory was available in the FREE MEMORY register. However,
- . either way, I need to generate an allocation, and the allocation works
- . no matter what, so I saw no point in checking free memory.
- */
- time_out = MEMORY_WAIT_TIME;
- do {
- word status;
-
- status = inb( ioaddr + INTERRUPT );
- if ( status & IM_ALLOC_INT ) {
- /* acknowledge the interrupt */
- outb( IM_ALLOC_INT, ioaddr + INTERRUPT );
- break;
- }
- } while ( -- time_out );
-
- if ( !time_out ) {
- /* oh well, wait until the chip finds memory later */
- SMC_ENABLE_INT( IM_ALLOC_INT );
- PRINTK2((CARDNAME": memory allocation deferred. \n"));
- /* it's deferred, but I'll handle it later */
- return 0;
- }
- /* or YES! I can send the packet now.. */
- smc_hardware_send_packet(dev);
-
- return 0;
-}
-
-/*
- . Function: smc_hardware_send_packet(struct device * )
- . Purpose:
- . This sends the actual packet to the SMC9xxx chip.
- .
- . Algorithm:
- . First, see if a saved_skb is available.
- . ( this should NOT be called if there is no 'saved_skb'
- . Now, find the packet number that the chip allocated
- . Point the data pointers at it in memory
- . Set the length word in the chip's memory
- . Dump the packet to chip memory
- . Check if a last byte is needed ( odd length packet )
- . if so, set the control flag right
- . Tell the card to send it
- . Enable the transmit interrupt, so I know if it failed
- . Free the kernel data if I actually sent it.
-*/
-static void smc_hardware_send_packet( struct device * dev )
-{
- struct smc_local *lp = (struct smc_local *)dev->priv;
- byte packet_no;
- struct sk_buff * skb = lp->saved_skb;
- word length;
- unsigned short ioaddr;
- byte * buf;
-
- ioaddr = dev->base_addr;
-
- if ( !skb ) {
- PRINTK((CARDNAME": In XMIT with no packet to send \n"));
- return;
- }
- length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
- buf = skb->data;
-
- /* If I get here, I _know_ there is a packet slot waiting for me */
- packet_no = inb( ioaddr + PNR_ARR + 1 );
- if ( packet_no & 0x80 ) {
- /* or isn't there? BAD CHIP! */
- printk(KERN_DEBUG CARDNAME": Memory allocation failed. \n");
- kfree(skb);
- lp->saved_skb = NULL;
- dev->tbusy = 0;
- return;
- }
-
- /* we have a packet address, so tell the card to use it */
- outb( packet_no, ioaddr + PNR_ARR );
-
- /* point to the beginning of the packet */
- outw( PTR_AUTOINC , ioaddr + POINTER );
-
- PRINTK3((CARDNAME": Trying to xmit packet of length %x\n", length ));
-#if SMC_DEBUG > 2
- print_packet( buf, length );
-#endif
-
- /* send the packet length ( +6 for status, length and ctl byte )
- and the status word ( set to zeros ) */
-#ifdef USE_32_BIT
- outl( (length +6 ) << 16 , ioaddr + DATA_1 );
-#else
- outw( 0, ioaddr + DATA_1 );
- /* send the packet length ( +6 for status words, length, and ctl*/
- outb( (length+6) & 0xFF,ioaddr + DATA_1 );
- outb( (length+6) >> 8 , ioaddr + DATA_1 );
-#endif
-
- /* send the actual data
- . I _think_ it's faster to send the longs first, and then
- . mop up by sending the last word. It depends heavily
- . on alignment, at least on the 486. Maybe it would be
- . a good idea to check which is optimal? But that could take
- . almost as much time as is saved?
- */
-#ifdef USE_32_BIT
- if ( length & 0x2 ) {
- outsl(ioaddr + DATA_1, buf, length >> 2 );
- outw( *((word *)(buf + (length & 0xFFFFFFFC))),ioaddr +DATA_1);
- }
- else
- outsl(ioaddr + DATA_1, buf, length >> 2 );
-#else
- outsw(ioaddr + DATA_1 , buf, (length ) >> 1);
-#endif
- /* Send the last byte, if there is one. */
-
- if ( (length & 1) == 0 ) {
- outw( 0, ioaddr + DATA_1 );
- } else {
- outb( buf[length -1 ], ioaddr + DATA_1 );
- outb( 0x20, ioaddr + DATA_1);
- }
-
- /* enable the interrupts */
- SMC_ENABLE_INT( (IM_TX_INT | IM_TX_EMPTY_INT) );
-
- /* and let the chipset deal with it */
- outw( MC_ENQUEUE , ioaddr + MMU_CMD );
-
- PRINTK2((CARDNAME": Sent packet of length %d \n",length));
-
- lp->saved_skb = NULL;
- dev_kfree_skb (skb, FREE_WRITE);
-
- dev->trans_start = jiffies;
-
- /* we can send another packet */
- dev->tbusy = 0;
-
-
- return;
-}
-
-/*-------------------------------------------------------------------------
- |
- | smc_init( struct device * dev )
- | Input parameters:
- | dev->base_addr == 0, try to find all possible locations
- | dev->base_addr == 1, return failure code
- | dev->base_addr == 2, always allocate space, and return success
- | dev->base_addr == <anything else> this is the address to check
- |
- | Output:
- | 0 --> there is a device
- | anything else, error
- |
- ---------------------------------------------------------------------------
-*/
-int smc_init(struct device *dev)
-{
- int i;
- int base_addr = dev ? dev->base_addr : 0;
-
- /* try a specific location */
- if (base_addr > 0x1ff) {
- int error;
- error = smc_probe(base_addr);
- if ( 0 == error ) {
- return smc_initcard( dev, base_addr );
- }
- return error;
- } else {
- if ( 0 != base_addr ) {
- return -ENXIO;
- }
- }
-
- /* check every ethernet address */
- for (i = 0; smc_portlist[i]; i++) {
- int ioaddr = smc_portlist[i];
-
- /* check if the area is available */
- if (check_region( ioaddr , SMC_IO_EXTENT))
- continue;
-
- /* check this specific address */
- if ( smc_probe( ioaddr ) == 0) {
- return smc_initcard( dev, ioaddr );
- }
- }
-
- /* couldn't find anything */
- return -ENODEV;
-}
-
-#ifndef NO_AUTOPROBE
-/*----------------------------------------------------------------------
- . smc_findirq
- .
- . This routine has a simple purpose -- make the SMC chip generate an
- . interrupt, so an auto-detect routine can detect it, and find the IRQ,
- ------------------------------------------------------------------------
-*/
-int smc_findirq( int ioaddr )
-{
- int timeout = 20;
-
-
- /* I have to do a STI() here, because this is called from
- a routine that does an CLI during this process, making it
- rather difficult to get interrupts for auto detection */
- sti();
-
- autoirq_setup( 0 );
-
- /*
- * What I try to do here is trigger an ALLOC_INT. This is done
- * by allocating a small chunk of memory, which will give an interrupt
- * when done.
- */
-
-
- SMC_SELECT_BANK(2);
- /* enable ALLOCation interrupts ONLY */
- outb( IM_ALLOC_INT, ioaddr + INT_MASK );
-
- /*
- . Allocate 512 bytes of memory. Note that the chip was just
- . reset so all the memory is available
- */
- outw( MC_ALLOC | 1, ioaddr + MMU_CMD );
-
- /*
- . Wait until positive that the interrupt has been generated
- */
- while ( timeout ) {
- byte int_status;
-
- int_status = inb( ioaddr + INTERRUPT );
-
- if ( int_status & IM_ALLOC_INT )
- break; /* got the interrupt */
- timeout--;
- }
- /* there is really nothing that I can do here if timeout fails,
- as autoirq_report will return a 0 anyway, which is what I
- want in this case. Plus, the clean up is needed in both
- cases. */
-
- /* DELAY HERE!
- On a fast machine, the status might change before the interrupt
- is given to the processor. This means that the interrupt was
- never detected, and autoirq_report fails to report anything.
- This should fix autoirq_* problems.
- */
- SMC_DELAY();
- SMC_DELAY();
-
- /* and disable all interrupts again */
- outb( 0, ioaddr + INT_MASK );
-
- /* clear hardware interrupts again, because that's how it
- was when I was called... */
- cli();
-
- /* and return what I found */
- return autoirq_report( 0 );
-}
-#endif
-
-/*----------------------------------------------------------------------
- . Function: smc_probe( int ioaddr )
- .
- . Purpose:
- . Tests to see if a given ioaddr points to an SMC9xxx chip.
- . Returns a 0 on success
- .
- . Algorithm:
- . (1) see if the high byte of BANK_SELECT is 0x33
- . (2) compare the ioaddr with the base register's address
- . (3) see if I recognize the chip ID in the appropriate register
- .
- .---------------------------------------------------------------------
- */
-
-static int smc_probe( int ioaddr )
-{
- unsigned int bank;
- word revision_register;
- word base_address_register;
-
- /* First, see if the high byte is 0x33 */
- bank = inw( ioaddr + BANK_SELECT );
- if ( (bank & 0xFF00) != 0x3300 ) {
- return -ENODEV;
- }
- /* The above MIGHT indicate a device, but I need to write to further
- test this. */
- outw( 0x0, ioaddr + BANK_SELECT );
- bank = inw( ioaddr + BANK_SELECT );
- if ( (bank & 0xFF00 ) != 0x3300 ) {
- return -ENODEV;
- }
- /* well, we've already written once, so hopefully another time won't
- hurt. This time, I need to switch the bank register to bank 1,
- so I can access the base address register */
- SMC_SELECT_BANK(1);
- base_address_register = inw( ioaddr + BASE );
- if ( ioaddr != ( base_address_register >> 3 & 0x3E0 ) ) {
- printk(CARDNAME ": IOADDR %x doesn't match configuration (%x)."
- "Probably not a SMC chip\n",
- ioaddr, base_address_register >> 3 & 0x3E0 );
- /* well, the base address register didn't match. Must not have
- been a SMC chip after all. */
- return -ENODEV;
- }
-
- /* check if the revision register is something that I recognize.
- These might need to be added to later, as future revisions
- could be added. */
- SMC_SELECT_BANK(3);
- revision_register = inw( ioaddr + REVISION );
- if ( !chip_ids[ ( revision_register >> 4 ) & 0xF ] ) {
- /* I don't recognize this chip, so... */
- printk(CARDNAME ": IO %x: Unrecognized revision register:"
- " %x, Contact author. \n", ioaddr, revision_register );
-
- return -ENODEV;
- }
-
- /* at this point I'll assume that the chip is an SMC9xxx.
- It might be prudent to check a listing of MAC addresses
- against the hardware address, or do some other tests. */
- return 0;
-}
-
-/*---------------------------------------------------------------
- . Here I do typical initialization tasks.
- .
- . o Initialize the structure if needed
- . o print out my vanity message if not done so already
- . o print out what type of hardware is detected
- . o print out the ethernet address
- . o find the IRQ
- . o set up my private data
- . o configure the dev structure with my subroutines
- . o actually GRAB the irq.
- . o GRAB the region
- .-----------------------------------------------------------------
-*/
-static int smc_initcard(struct device *dev, int ioaddr)
-{
- int i;
-
- static unsigned version_printed = 0;
-
- /* registers */
- word revision_register;
- word configuration_register;
- word memory_info_register;
- word memory_cfg_register;
-
- const char * version_string;
- const char * if_string;
- int memory;
-
- int irqval;
-
- /* see if I need to initialize the ethernet card structure */
- if (dev == NULL) {
-#ifdef SUPPORT_OLD_KERNEL
-#ifndef MODULE
-/* note: the old module interface does not support this call */
- dev = init_etherdev( 0, sizeof( struct smc_local ), 0 );
-#endif
-#else
- dev = init_etherdev(0, 0);
-#endif
- if (dev == NULL)
- return -ENOMEM;
- }
-
- if (version_printed++ == 0)
- printk("%s", version);
-
- /* fill in some of the fields */
- dev->base_addr = ioaddr;
-
- /*
- . Get the MAC address ( bank 1, regs 4 - 9 )
- */
- SMC_SELECT_BANK( 1 );
- for ( i = 0; i < 6; i += 2 ) {
- word address;
-
- address = inw( ioaddr + ADDR0 + i );
- dev->dev_addr[ i + 1] = address >> 8;
- dev->dev_addr[ i ] = address & 0xFF;
- }
-
- /* get the memory information */
-
- SMC_SELECT_BANK( 0 );
- memory_info_register = inw( ioaddr + MIR );
- memory_cfg_register = inw( ioaddr + MCR );
- memory = ( memory_cfg_register >> 9 ) & 0x7; /* multiplier */
- memory *= 256 * ( memory_info_register & 0xFF );
-
- /*
- Now, I want to find out more about the chip. This is sort of
- redundant, but it's cleaner to have it in both, rather than having
- one VERY long probe procedure.
- */
- SMC_SELECT_BANK(3);
- revision_register = inw( ioaddr + REVISION );
- version_string = chip_ids[ ( revision_register >> 4 ) & 0xF ];
- if ( !version_string ) {
- /* I shouldn't get here because this call was done before....
*/
- return -ENODEV;
- }
-
- /* is it using AUI or 10BaseT ? */
- if ( dev->if_port == 0 ) {
- SMC_SELECT_BANK(1);
- configuration_register = inw( ioaddr + CONFIG );
- if ( configuration_register & CFG_AUI_SELECT )
- dev->if_port = 2;
- else
- dev->if_port = 1;
- }
- if_string = interfaces[ dev->if_port - 1 ];
-
- /* now, reset the chip, and put it into a known state */
- smc_reset( ioaddr );
-
- /*
- . If dev->irq is 0, then the device has to be banged on to see
- . what the IRQ is.
- .
- . This banging doesn't always detect the IRQ, for unknown reasons.
- . a workaround is to reset the chip and try again.
- .
- . Interestingly, the DOS packet driver *SETS* the IRQ on the card to
- . be what is requested on the command line. I don't do that, mostly
- . because the card that I have uses a non-standard method of accessing
- . the IRQs, and because this _should_ work in most configurations.
- .
- . Specifying an IRQ is done with the assumption that the user knows
- . what (s)he is doing. No checking is done!!!!
- .
- */
-#ifndef NO_AUTOPROBE
- if ( dev->irq < 2 ) {
- int trials;
-
- trials = 3;
- while ( trials-- ) {
- dev->irq = smc_findirq( ioaddr );
- if ( dev->irq )
- break;
- /* kick the card and try again */
- smc_reset( ioaddr );
- }
- }
- if (dev->irq == 0 ) {
- printk(CARDNAME": Couldn't autodetect your IRQ. Use irq=xx.\n");
- return -ENODEV;
- }
-#else
- if (dev->irq == 0 ) {
- printk(CARDNAME
- ": Autoprobing IRQs is not supported for old kernels.\n");
- return -ENODEV;
- }
-#endif
- if (dev->irq == 2) {
- /* Fixup for users that don't know that IRQ 2 is really IRQ 9,
- * or don't know which one to set.
- */
- dev->irq = 9;
- }
-
- /* now, print out the card info, in a short format.. */
-
- printk(CARDNAME ": %s(r:%d) at %#3x IRQ:%d INTF:%s MEM:%db ",
- version_string, revision_register & 0xF, ioaddr, dev->irq,
- if_string, memory );
- /*
- . Print the Ethernet address
- */
- printk("ADDR: ");
- for (i = 0; i < 5; i++)
- printk("%2.2x:", dev->dev_addr[i] );
- printk("%2.2x \n", dev->dev_addr[5] );
-
-
- /* Initialize the private structure. */
- if (dev->priv == NULL) {
- dev->priv = kmalloc(sizeof(struct smc_local), GFP_KERNEL);
- if (dev->priv == NULL)
- return -ENOMEM;
- }
- /* set the private data to zero by default */
- memset(dev->priv, 0, sizeof(struct smc_local));
-
- /* Fill in the fields of the device structure with ethernet values. */
- ether_setup(dev);
-
- /* Grab the IRQ */
- irqval = request_irq(dev->irq, &smc_interrupt, 0, CARDNAME, NULL);
- if (irqval) {
- printk(CARDNAME": unable to get IRQ %d (irqval=%d).\n",
- dev->irq, irqval);
- return -EAGAIN;
- }
- irq2dev_map[dev->irq] = dev;
-
- /* Grab the region so that no one else tries to probe our ioports. */
- request_region(ioaddr, SMC_IO_EXTENT, CARDNAME);
-
- dev->open = smc_open;
- dev->stop = smc_close;
- dev->hard_start_xmit = smc_send_packet;
- dev->get_stats = smc_query_statistics;
-#ifdef HAVE_MULTICAST
- dev->set_multicast_list = &smc_set_multicast_list;
-#endif
-
- return 0;
-}
-
-#if SMC_DEBUG > 2
-static void print_packet( byte * buf, int length )
-{
-#if 0
- int i;
- int remainder;
- int lines;
-
- printk("Packet of length %d \n", length );
- lines = length / 16;
- remainder = length % 16;
-
- for ( i = 0; i < lines ; i ++ ) {
- int cur;
-
- for ( cur = 0; cur < 8; cur ++ ) {
- byte a, b;
-
- a = *(buf ++ );
- b = *(buf ++ );
- printk("%02x%02x ", a, b );
- }
- printk("\n");
- }
- for ( i = 0; i < remainder/2 ; i++ ) {
- byte a, b;
-
- a = *(buf ++ );
- b = *(buf ++ );
- printk("%02x%02x ", a, b );
- }
- printk("\n");
-#endif
-}
-#endif
-
-
-/*
- * Open and Initialize the board
- *
- * Set up everything, reset the card, etc ..
- *
- */
-static int smc_open(struct device *dev)
-{
- int ioaddr = dev->base_addr;
-
- int i; /* used to set hw ethernet address */
-
- /* clear out all the junk that was put here before... */
- memset(dev->priv, 0, sizeof(struct smc_local));
-
- dev->tbusy = 0;
- dev->interrupt = 0;
- dev->start = 1;
-#ifdef MODULE
- MOD_INC_USE_COUNT;
-#endif
-
- /* reset the hardware */
-
- smc_reset( ioaddr );
- smc_enable( ioaddr );
-
- /* Select which interface to use */
-
- SMC_SELECT_BANK( 1 );
- if ( dev->if_port == 1 ) {
- outw( inw( ioaddr + CONFIG ) & ~CFG_AUI_SELECT,
- ioaddr + CONFIG );
- }
- else if ( dev->if_port == 2 ) {
- outw( inw( ioaddr + CONFIG ) | CFG_AUI_SELECT,
- ioaddr + CONFIG );
- }
-
- /*
- According to Becker, I have to set the hardware address
- at this point, because the (l)user can set it with an
- ioctl. Easily done...
- */
- SMC_SELECT_BANK( 1 );
- for ( i = 0; i < 6; i += 2 ) {
- word address;
-
- address = dev->dev_addr[ i + 1 ] << 8 ;
- address |= dev->dev_addr[ i ];
- outw( address, ioaddr + ADDR0 + i );
- }
- return 0;
-}
-
-/*--------------------------------------------------------
- . Called by the kernel to send a packet out into the void
- . of the net. This routine is largely based on
- . skeleton.c, from Becker.
- .--------------------------------------------------------
-*/
-static int smc_send_packet(struct sk_buff *skb, struct device *dev)
-{
- if (dev->tbusy) {
- /* If we get here, some higher level has decided we are broken.
- There should really be a "kick me" function call instead. */
- int tickssofar = jiffies - dev->trans_start;
- if (tickssofar < 5)
- return 1;
- printk(KERN_WARNING CARDNAME": transmit timed out, %s?\n",
- tx_done(dev) ? "IRQ conflict" :
- "network cable problem");
- /* "kick" the adaptor */
- smc_reset( dev->base_addr );
- smc_enable( dev->base_addr );
-
- dev->tbusy = 0;
- dev->trans_start = jiffies;
- /* clear anything saved */
- ((struct smc_local *)dev->priv)->saved_skb = NULL;
- }
-
- /* If some higher layer thinks we've missed an tx-done interrupt
- we are passed NULL. Caution: dev_tint() handles the cli()/sti()
- itself. */
- if (skb == NULL) {
- dev_tint(dev);
- return 0;
- }
-
- /* Block a timer-based transmit from overlapping. This could better be
- done with atomic_swap(1, dev->tbusy), but set_bit() works as well. */
- if (set_bit(0, (void*)&dev->tbusy) != 0) {
- printk(KERN_WARNING CARDNAME": Transmitter access conflict.\n");
- dev_kfree_skb (skb, FREE_WRITE);
- } else {
- /* Well, I want to send the packet.. but I don't know
- if I can send it right now... */
- return smc_wait_to_send_packet( skb, dev );
- }
- return 0;
-}
-
-/*--------------------------------------------------------------------
- .
- . This is the main routine of the driver, to handle the device when
- . it needs some attention.
- .
- . So:
- . first, save state of the chipset
- . branch off into routines to handle each case, and acknowledge
- . each to the interrupt register
- . and finally restore state.
- .
- ---------------------------------------------------------------------*/
-#ifdef REALLY_NEW_KERNEL
-static void smc_interrupt(int irq, void * dev_id, struct pt_regs * regs)
-#else
-static void smc_interrupt(int irq, struct pt_regs * regs)
-#endif
-{
- struct device *dev = (struct device *)(irq2dev_map[irq]);
- int ioaddr = dev->base_addr;
- struct smc_local *lp = (struct smc_local *)dev->priv;
-
- byte status;
- word card_stats;
- byte mask;
- int timeout;
- /* state registers */
- word saved_bank;
- word saved_pointer;
-
-
-
- PRINTK3((CARDNAME": SMC interrupt started \n"));
-
- if (dev == NULL) {
- printk(KERN_WARNING CARDNAME": irq %d for unknown device.\n",
- irq);
- return;
- }
-
-/* will Linux let this happen ?? If not, this costs some speed */
- if ( dev->interrupt ) {
- printk(KERN_WARNING CARDNAME": interrupt inside interrupt.\n");
- return;
- }
-
- dev->interrupt = 1;
-
- saved_bank = inw( ioaddr + BANK_SELECT );
-
- SMC_SELECT_BANK(2);
- saved_pointer = inw( ioaddr + POINTER );
-
- mask = inb( ioaddr + INT_MASK );
- /* clear all interrupts */
- outb( 0, ioaddr + INT_MASK );
-
-
- /* set a timeout value, so I don't stay here forever */
- timeout = 4;
-
- PRINTK2((KERN_WARNING CARDNAME ": MASK IS %x \n", mask ));
- do {
- /* read the status flag, and mask it */
- status = inb( ioaddr + INTERRUPT ) & mask;
- if (!status )
- break;
-
- PRINTK3((KERN_WARNING CARDNAME
- ": Handling interrupt status %x \n", status ));
-
- if (status & IM_RCV_INT) {
- /* Got a packet(s). */
- PRINTK2((KERN_WARNING CARDNAME
- ": Receive Interrupt\n"));
- smc_rcv(dev);
- } else if (status & IM_TX_INT ) {
- PRINTK2((KERN_WARNING CARDNAME
- ": TX ERROR handled\n"));
- smc_tx(dev);
- outb(IM_TX_INT, ioaddr + INTERRUPT );
- } else if (status & IM_TX_EMPTY_INT ) {
- /* update stats */
- SMC_SELECT_BANK( 0 );
- card_stats = inw( ioaddr + COUNTER );
- /* single collisions */
- lp->stats.collisions += card_stats & 0xF;
- card_stats >>= 4;
- /* multiple collisions */
- lp->stats.collisions += card_stats & 0xF;
-
- /* these are for when linux supports these statistics */
-#if 0
- card_stats >>= 4;
- /* deferred */
- card_stats >>= 4;
- /* excess deferred */
-#endif
- SMC_SELECT_BANK( 2 );
- PRINTK2((KERN_WARNING CARDNAME
- ": TX_BUFFER_EMPTY handled\n"));
- outb( IM_TX_EMPTY_INT, ioaddr + INTERRUPT );
- mask &= ~IM_TX_EMPTY_INT;
- lp->stats.tx_packets += lp->packets_waiting;
- lp->packets_waiting = 0;
-
- } else if (status & IM_ALLOC_INT ) {
- PRINTK2((KERN_DEBUG CARDNAME
- ": Allocation interrupt \n"));
- /* clear this interrupt so it doesn't happen again */
- mask &= ~IM_ALLOC_INT;
-
- smc_hardware_send_packet( dev );
-
- /* enable xmit interrupts based on this */
- mask |= ( IM_TX_EMPTY_INT | IM_TX_INT );
-
- /* and let the card send more packets to me */
- mark_bh( NET_BH );
-
- PRINTK2((CARDNAME": Handoff done successfully.\n"));
- } else if (status & IM_RX_OVRN_INT ) {
- lp->stats.rx_errors++;
- lp->stats.rx_fifo_errors++;
- outb( IM_RX_OVRN_INT, ioaddr + INTERRUPT );
- } else if (status & IM_EPH_INT ) {
- PRINTK((CARDNAME ": UNSUPPORTED: EPH INTERRUPT \n"));
- } else if (status & IM_ERCV_INT ) {
- PRINTK((CARDNAME ": UNSUPPORTED: ERCV INTERRUPT \n"));
- outb( IM_ERCV_INT, ioaddr + INTERRUPT );
- }
- } while ( timeout -- );
-
-
- /* restore state register */
- SMC_SELECT_BANK( 2 );
- outb( mask, ioaddr + INT_MASK );
-
- PRINTK3(( KERN_WARNING CARDNAME ": MASK is now %x \n", mask ));
- outw( saved_pointer, ioaddr + POINTER );
-
- SMC_SELECT_BANK( saved_bank );
-
- dev->interrupt = 0;
- PRINTK3((CARDNAME ": Interrupt done\n"));
- return;
-}
-
-/*-------------------------------------------------------------
- .
- . smc_rcv - receive a packet from the card
- .
- . There is ( at least ) a packet waiting to be read from
- . chip-memory.
- .
- . o Read the status
- . o If an error, record it
- . o otherwise, read in the packet
- --------------------------------------------------------------
-*/
-static void smc_rcv(struct device *dev)
-{
- struct smc_local *lp = (struct smc_local *)dev->priv;
- int ioaddr = dev->base_addr;
- int packet_number;
- word status;
- word packet_length;
-
- /* assume bank 2 */
-
- packet_number = inw( ioaddr + FIFO_PORTS );
-
- if ( packet_number & FP_RXEMPTY ) {
- /* we got called , but nothing was on the FIFO */
- PRINTK((CARDNAME ": WARNING: smc_rcv with nothing on FIFO.
\n"));
- /* don't need to restore anything */
- return;
- }
-
- /* start reading from the start of the packet */
- outw( PTR_READ | PTR_RCV | PTR_AUTOINC, ioaddr + POINTER );
-
- /* First two words are status and packet_length */
- status = inw( ioaddr + DATA_1 );
- packet_length = inw( ioaddr + DATA_1 );
-
- packet_length &= 0x07ff; /* mask off top bits */
-
- PRINTK2(("RCV: STATUS %4x LENGTH %4x\n", status, packet_length ));
- /*
- . the packet length contains 3 extra words :
- . status, length, and a extra word with an odd byte .
- */
- packet_length -= 6;
-
- if ( !(status & RS_ERRORS ) ){
- /* do stuff to make a new packet */
- struct sk_buff * skb;
- byte * data;
-
- /* read one extra byte */
- if ( status & RS_ODDFRAME )
- packet_length++;
-
- /* set multicast stats */
- if ( status & RS_MULTICAST )
- lp->stats.multicast++;
-
-#ifdef SUPPORT_OLD_KERNEL
- skb = alloc_skb( packet_length + 5, GFP_ATOMIC );
-#else
- skb = dev_alloc_skb( packet_length + 5);
-#endif
-
- if ( skb == NULL ) {
- printk(KERN_NOTICE CARDNAME
- ": Low memory, packet dropped.\n");
- lp->stats.rx_dropped++;
- }
-
- /*
- ! This should work without alignment, but it could be
- ! in the worse case
- */
-#ifndef SUPPORT_OLD_KERNEL
- /* TODO: Should I use 32bit alignment here ? */
- skb_reserve( skb, 2 ); /* 16 bit alignment */
-#endif
-
- skb->dev = dev;
-#ifdef SUPPORT_OLD_KERNEL
- skb->len = packet_length;
- data = skb->data;
-#else
- data = skb_put( skb, packet_length);
-#endif
-#ifdef USE_32_BIT
- /* QUESTION: Like in the TX routine, do I want
- to send the DWORDs or the bytes first, or some
- mixture. A mixture might improve already slow PIO
- performance */
- PRINTK3((" Reading %d dwords (and %d bytes) \n",
- packet_length >> 2, packet_length & 3 ));
- insl(ioaddr + DATA_1 , data, packet_length >> 2 );
- /* read the left over bytes */
- insb( ioaddr + DATA_1, data + (packet_length & 0xFFFFFC),
- packet_length & 0x3 );
-#else
- PRINTK3((" Reading %d words and %d byte(s) \n",
- (packet_length >> 1 ), packet_length & 1 );
- if ( packet_length & 1 )
- *(data++) = inb( ioaddr + DATA_1 );
- insw(ioaddr + DATA_1 , data, (packet_length + 1 ) >> 1);
- if ( packet_length & 1 ) {
- data += packet_length & ~1;
- *((data++) = inb( ioaddr + DATA_1 );
- }
-#endif
-#if SMC_DEBUG > 2
- print_packet( data, packet_length );
-#endif
-
-#ifndef SUPPORT_OLD_KERNEL
- skb->protocol = eth_type_trans(skb, dev );
-#endif
- netif_rx(skb);
- lp->stats.rx_packets++;
- } else {
- /* error ... */
- lp->stats.rx_errors++;
-
- if ( status & RS_ALGNERR ) lp->stats.rx_frame_errors++;
- if ( status & (RS_TOOSHORT | RS_TOOLONG ) )
- lp->stats.rx_length_errors++;
- if ( status & RS_BADCRC) lp->stats.rx_crc_errors++;
- }
- /* error or good, tell the card to get rid of this packet */
- outw( MC_RELEASE, ioaddr + MMU_CMD );
-
-
- return;
-}
-
-
-/*************************************************************************
- . smc_tx
- .
- . Purpose: Handle a transmit error message. This will only be called
- . when an error, because of the AUTO_RELEASE mode.
- .
- . Algorithm:
- . Save pointer and packet no
- . Get the packet no from the top of the queue
- . check if it's valid ( if not, is this an error??? )
- . read the status word
- . record the error
- . ( resend? Not really, since we don't want old packets around )
- . Restore saved values
- ************************************************************************/
-static void smc_tx( struct device * dev )
-{
- int ioaddr = dev->base_addr;
- struct smc_local *lp = (struct smc_local *)dev->priv;
- byte saved_packet;
- byte packet_no;
- word tx_status;
-
-
- /* assume bank 2 */
-
- saved_packet = inb( ioaddr + PNR_ARR );
- packet_no = inw( ioaddr + FIFO_PORTS );
- packet_no &= 0x7F;
-
- /* select this as the packet to read from */
- outb( packet_no, ioaddr + PNR_ARR );
-
- /* read the first word from this packet */
- outw( PTR_AUTOINC | PTR_READ, ioaddr + POINTER );
-
- tx_status = inw( ioaddr + DATA_1 );
- PRINTK3((CARDNAME": TX DONE STATUS: %4x \n", tx_status ));
-
- lp->stats.tx_errors++;
- if ( tx_status & TS_LOSTCAR ) lp->stats.tx_carrier_errors++;
- if ( tx_status & TS_LATCOL ) {
- printk(KERN_DEBUG CARDNAME
- ": Late collision occurred on last xmit.\n");
- lp->stats.tx_window_errors++;
- }
-#if 0
- if ( tx_status & TS_16COL ) { ... }
-#endif
-
- if ( tx_status & TS_SUCCESS ) {
- printk(CARDNAME": Successful packet caused interrupt \n");
- }
- /* re-enable transmit */
- SMC_SELECT_BANK( 0 );
- outw( inw( ioaddr + TCR ) | TCR_ENABLE, ioaddr + TCR );
-
- /* kill the packet */
- SMC_SELECT_BANK( 2 );
- outw( MC_FREEPKT, ioaddr + MMU_CMD );
-
- /* one less packet waiting for me */
- lp->packets_waiting--;
-
- outb( saved_packet, ioaddr + PNR_ARR );
- return;
-}
-
-/*----------------------------------------------------
- . smc_close
- .
- . this makes the board clean up everything that it can
- . and not talk to the outside world. Caused by
- . an 'ifconfig ethX down'
- .
- -----------------------------------------------------*/
-static int smc_close(struct device *dev)
-{
- dev->tbusy = 1;
- dev->start = 0;
-
- /* clear everything */
- smc_shutdown( dev->base_addr );
-
- /* Update the statistics here. */
-#ifdef MODULE
- MOD_DEC_USE_COUNT;
-#endif
-
- return 0;
-}
-
-/*------------------------------------------------------------
- . Get the current statistics.
- . This may be called with the card open or closed.
- .-------------------------------------------------------------*/
-static struct enet_statistics * smc_query_statistics(struct device *dev) {
- struct smc_local *lp = (struct smc_local *)dev->priv;
-
- return &lp->stats;
-}
-
-/*-----------------------------------------------------------
- . smc_set_multicast_list
- .
- . This routine will, depending on the values passed to it,
- . either make it accept multicast packets, go into
- . promiscuous mode ( for TCPDUMP and cousins ) or accept
- . a select set of multicast packets
-*/
-#ifdef SUPPORT_OLD_KERNEL
-static void smc_set_multicast_list( struct device * dev,
- int num_addrs, void * addrs )
-#else
-static void smc_set_multicast_list(struct device *dev)
-#endif
-{
- short ioaddr = dev->base_addr;
-
- SMC_SELECT_BANK(0);
-#ifdef SUPPORT_OLD_KERNEL
- if ( num_addrs < 0 )
-#else
- if ( dev->flags & IFF_PROMISC )
-#endif
- outw( inw(ioaddr + RCR ) | RCR_PROMISC, ioaddr + RCR );
-
-/* BUG? I never disable promiscuous mode if multicasting was turned on.
- Now, I turn off promiscuous mode, but I don't do anything to multicasting
- when promiscuous mode is turned on.
-*/
-
- /* Here, I am setting this to accept all multicast packets.
- I don't need to zero the multicast table, because the flag is
- checked before the table is
- */
-#ifdef SUPPORT_OLD_KERNEL
- else if ( num_addrs > 20 ) /* arbitrary constant */
-#else
- else if (dev->flags & IFF_ALLMULTI)
-#endif
- outw( inw(ioaddr + RCR ) | RCR_ALMUL, ioaddr + RCR );
-
- /* We just get all multicast packets even if we only want them
- . from one source. This will be changed at some future
- . point. */
-#ifdef SUPPORT_OLD_KERNEL
- else if (num_addrs > 0 ) {
-/* the old kernel support will not have hardware multicast support. It would
- involve more kludges, and make the multicast setting code even worse.
- Instead, just use the ALMUL method. This is reasonable, considering that
- it is seldom used
-*/
- outw( inw( ioaddr + RCR ) & ~RCR_PROMISC, ioaddr + RCR );
- outw( inw( ioadddr + RCR ) | RCR_ALMUL, ioadddr + RCR );
- }
-#else
- else if (dev->mc_count ) {
- /* support hardware multicasting */
-
- /* be sure I get rid of flags I might have set */
- outw( inw( ioaddr + RCR ) & ~(RCR_PROMISC | RCR_ALMUL),
- ioaddr + RCR );
- /* NOTE: this has to set the bank, so make sure it is the
- last thing called. The bank is set to zero at the top */
- smc_setmulticast( ioaddr, dev->mc_count, dev->mc_list );
- }
-#endif
- else {
- outw( inw( ioaddr + RCR ) & ~(RCR_PROMISC | RCR_ALMUL),
- ioaddr + RCR );
-
- /*
- since I'm disabling all multicast entirely, I need to
- clear the multicast list
- */
- SMC_SELECT_BANK( 3 );
- outw( 0, ioaddr + MULTICAST1 );
- outw( 0, ioaddr + MULTICAST2 );
- outw( 0, ioaddr + MULTICAST3 );
- outw( 0, ioaddr + MULTICAST4 );
- }
-}
-
-#ifdef MODULE
-
-static char devicename[9] = { 0, };
-static struct device devSMC9194 = {
- devicename, /* device name is inserted by linux/drivers/net/net_init.c
*/
- 0, 0, 0, 0,
- 0, 0, /* I/O address, IRQ */
- 0, 0, 0, NULL, smc_init };
-
-int io = 0;
-int irq = 0;
-int ifport = 0;
-
-int init_module(void)
-{
- int result;
-
- if (io == 0)
- printk(KERN_WARNING
- CARDNAME": You shouldn't use auto-probing with insmod!\n" );
-
- /* copy the parameters from insmod into the device structure */
- devSMC9194.base_addr = io;
- devSMC9194.irq = irq;
- devSMC9194.if_port = ifport;
- if ((result = register_netdev(&devSMC9194)) != 0)
- return result;
-
- return 0;
-}
-
-void cleanup_module(void)
-{
- /* No need to check MOD_IN_USE, as sys_delete_module() checks. */
- unregister_netdev(&devSMC9194);
-
- free_irq(devSMC9194.irq, NULL );
- irq2dev_map[devSMC9194.irq] = NULL;
- release_region(devSMC9194.base_addr, SMC_IO_EXTENT);
-
- if (devSMC9194.priv)
- kfree_s(devSMC9194.priv, sizeof(struct smc_local));
-}
-
-#endif /* MODULE */
-
diff --git a/linux/src/drivers/net/smc9194.h b/linux/src/drivers/net/smc9194.h
deleted file mode 100644
index 66f8b8c..0000000
--- a/linux/src/drivers/net/smc9194.h
+++ /dev/null
@@ -1,240 +0,0 @@
-/*------------------------------------------------------------------------
- . smc9194.h
- . Copyright (C) 1996 by Erik Stahlman
- .
- . This software may be used and distributed according to the terms
- . of the GNU Public License, incorporated herein by reference.
- .
- . This file contains register information and access macros for
- . the SMC91xxx chipset.
- .
- . Information contained in this file was obtained from the SMC91C94
- . manual from SMC. To get a copy, if you really want one, you can find
- . information under www.smc.com in the components division.
- . ( this thanks to advice from Donald Becker ).
- .
- . Authors
- . Erik Stahlman ( address@hidden )
- .
- . History
- . 01/06/96 Erik Stahlman moved definitions here from main .c
file
- . 01/19/96 Erik Stahlman polished this up some, and added
better
- .
error handling
- .
- ---------------------------------------------------------------------------*/
-#ifndef _SMC9194_H_
-#define _SMC9194_H_
-
-/* I want some simple types */
-
-typedef unsigned char byte;
-typedef unsigned short word;
-typedef unsigned long int dword;
-
-
-/* Because of bank switching, the SMC91xxx uses only 16 I/O ports */
-
-#define SMC_IO_EXTENT 16
-
-
-/*---------------------------------------------------------------
- .
- . A description of the SMC registers is probably in order here,
- . although for details, the SMC datasheet is invaluable.
- .
- . Basically, the chip has 4 banks of registers ( 0 to 3 ), which
- . are accessed by writing a number into the BANK_SELECT register
- . ( I also use a SMC_SELECT_BANK macro for this ).
- .
- . The banks are configured so that for most purposes, bank 2 is all
- . that is needed for simple run time tasks.
- -----------------------------------------------------------------------*/
-
-/*
- . Bank Select Register:
- .
- . yyyy yyyy 0000 00xx
- . xx = bank number
- . yyyy yyyy = 0x33, for identification purposes.
-*/
-#define BANK_SELECT 14
-
-/* BANK 0 */
-
-#define TCR 0 /* transmit control register */
-#define TCR_ENABLE 0x0001 /* if this is 1, we can transmit */
-#define TCR_FDUPLX 0x0800 /* receive packets sent out */
-#define TCR_STP_SQET 0x1000 /* stop transmitting if Signal quality error */
-#define TCR_MON_CNS 0x0400 /* monitors the carrier status */
-#define TCR_PAD_ENABLE 0x0080 /* pads short packets to 64 bytes */
-
-#define TCR_CLEAR 0 /* do NOTHING */
-/* the normal settings for the TCR register : */
-/* QUESTION: do I want to enable padding of short packets ? */
-#define TCR_NORMAL TCR_ENABLE
-
-
-#define EPH_STATUS 2
-#define ES_LINK_OK 0x4000 /* is the link integrity ok ? */
-
-#define RCR 4
-#define RCR_SOFTRESET 0x8000 /* resets the chip */
-#define RCR_STRIP_CRC 0x200 /* strips CRC */
-#define RCR_ENABLE 0x100 /* IFF this is set, we can receive packets */
-#define RCR_ALMUL 0x4 /* receive all multicast packets */
-#define RCR_PROMISC 0x2 /* enable promiscuous mode */
-
-/* the normal settings for the RCR register : */
-#define RCR_NORMAL (RCR_STRIP_CRC | RCR_ENABLE)
-#define RCR_CLEAR 0x0 /* set it to a base state */
-
-#define COUNTER 6
-#define MIR 8
-#define MCR 10
-/* 12 is reserved */
-
-/* BANK 1 */
-#define CONFIG 0
-#define CFG_AUI_SELECT 0x100
-#define BASE 2
-#define ADDR0 4
-#define ADDR1 6
-#define ADDR2 8
-#define GENERAL 10
-#define CONTROL 12
-#define CTL_POWERDOWN 0x2000
-#define CTL_LE_ENABLE 0x80
-#define CTL_CR_ENABLE 0x40
-#define CTL_TE_ENABLE 0x0020
-#define CTL_AUTO_RELEASE 0x0800
-#define CTL_EPROM_ACCESS 0x0003 /* high if Eprom is being read */
-
-/* BANK 2 */
-#define MMU_CMD 0
-#define MC_BUSY 1 /* only readable bit in the register */
-#define MC_NOP 0
-#define MC_ALLOC 0x20 /* or with number of 256 byte packets */
-#define MC_RESET 0x40
-#define MC_REMOVE 0x60 /* remove the current rx packet */
-#define MC_RELEASE 0x80 /* remove and release the current rx packet */
-#define MC_FREEPKT 0xA0 /* Release packet in PNR register */
-#define MC_ENQUEUE 0xC0 /* Enqueue the packet for transmit */
-
-#define PNR_ARR 2
-#define FIFO_PORTS 4
-
-#define FP_RXEMPTY 0x8000
-#define FP_TXEMPTY 0x80
-
-#define POINTER 6
-#define PTR_READ 0x2000
-#define PTR_RCV 0x8000
-#define PTR_AUTOINC 0x4000
-#define PTR_AUTO_INC 0x0040
-
-#define DATA_1 8
-#define DATA_2 10
-#define INTERRUPT 12
-
-#define INT_MASK 13
-#define IM_RCV_INT 0x1
-#define IM_TX_INT 0x2
-#define IM_TX_EMPTY_INT 0x4
-#define IM_ALLOC_INT 0x8
-#define IM_RX_OVRN_INT 0x10
-#define IM_EPH_INT 0x20
-#define IM_ERCV_INT 0x40 /* not on SMC9192 */
-
-/* BANK 3 */
-#define MULTICAST1 0
-#define MULTICAST2 2
-#define MULTICAST3 4
-#define MULTICAST4 6
-#define MGMT 8
-#define REVISION 10 /* ( hi: chip id low: rev # ) */
-
-
-/* this is NOT on SMC9192 */
-#define ERCV 12
-
-#define CHIP_9190 3
-#define CHIP_9194 4
-#define CHIP_9195 5
-#define CHIP_91100 7
-
-static const char * chip_ids[ 15 ] = {
- NULL, NULL, NULL,
- /* 3 */ "SMC91C90/91C92",
- /* 4 */ "SMC91C94",
- /* 5 */ "SMC91C95",
- NULL,
- /* 7 */ "SMC91C100",
- NULL, NULL, NULL, NULL,
- NULL, NULL, NULL};
-
-/*
- . Transmit status bits
-*/
-#define TS_SUCCESS 0x0001
-#define TS_LOSTCAR 0x0400
-#define TS_LATCOL 0x0200
-#define TS_16COL 0x0010
-
-/*
- . Receive status bits
-*/
-#define RS_ALGNERR 0x8000
-#define RS_BADCRC 0x2000
-#define RS_ODDFRAME 0x1000
-#define RS_TOOLONG 0x0800
-#define RS_TOOSHORT 0x0400
-#define RS_MULTICAST 0x0001
-#define RS_ERRORS (RS_ALGNERR | RS_BADCRC | RS_TOOLONG | RS_TOOSHORT)
-
-static const char * interfaces[ 2 ] = { "TP", "AUI" };
-
-/*-------------------------------------------------------------------------
- . I define some macros to make it easier to do somewhat common
- . or slightly complicated, repeated tasks.
- --------------------------------------------------------------------------*/
-
-/* select a register bank, 0 to 3 */
-
-#define SMC_SELECT_BANK(x) { outw( x, ioaddr + BANK_SELECT ); }
-
-/* define a small delay for the reset */
-#define SMC_DELAY() { inw( ioaddr + RCR );\
- inw( ioaddr + RCR );\
- inw( ioaddr + RCR ); }
-
-/* this enables an interrupt in the interrupt mask register */
-#define SMC_ENABLE_INT(x) {\
- unsigned char mask;\
- SMC_SELECT_BANK(2);\
- mask = inb( ioaddr + INT_MASK );\
- mask |= (x);\
- outb( mask, ioaddr + INT_MASK ); \
-}
-
-/* this disables an interrupt from the interrupt mask register */
-
-#define SMC_DISABLE_INT(x) {\
- unsigned char mask;\
- SMC_SELECT_BANK(2);\
- mask = inb( ioaddr + INT_MASK );\
- mask &= ~(x);\
- outb( mask, ioaddr + INT_MASK ); \
-}
-
-/*----------------------------------------------------------------------
- . Define the interrupts that I want to receive from the card
- .
- . I want:
- . IM_EPH_INT, for nasty errors
- . IM_RCV_INT, for happy received packets
- . IM_RX_OVRN_INT, because I have to kick the receiver
- --------------------------------------------------------------------------*/
-#define SMC_INTERRUPT_MASK (IM_EPH_INT | IM_RX_OVRN_INT | IM_RCV_INT)
-
-#endif /* _SMC_9194_H_ */
-
diff --git a/linux/src/drivers/net/wavelan.p.h
b/linux/src/drivers/net/wavelan.p.h
deleted file mode 100644
index 3a6124e..0000000
--- a/linux/src/drivers/net/wavelan.p.h
+++ /dev/null
@@ -1,635 +0,0 @@
-/*
- * Wavelan ISA driver
- *
- * Jean II - HPLB '96
- *
- * Reorganisation and extension of the driver.
- *
- * This file contain all definition and declarations necessary for the
- * wavelan isa driver. This file is a private header, so it should
- * be included only on wavelan.c !!!
- */
-
-#ifndef WAVELAN_P_H
-#define WAVELAN_P_H
-
-/************************** DOCUMENTATION **************************/
-/*
- * This driver provide a Linux interface to the Wavelan ISA hardware
- * The Wavelan is a product of Lucent ("http://wavelan.netland.nl/").
- * This division was formerly part of NCR and then AT&T.
- * Wavelan are also distributed by DEC (RoamAbout), Digital Ocean and
- * Aironet (Arlan). If you have one of those product, you will need to
- * make some changes below...
- *
- * This driver is still a beta software. A lot of bugs have been corrected,
- * a lot of functionalities are implemented, the whole appear pretty stable,
- * but there is still some area of improvement (encryption, performance...).
- *
- * To know how to use this driver, read the NET3 HOWTO.
- * If you want to exploit the many other fonctionalities, look comments
- * in the code...
- *
- * This driver is the result of the effort of many peoples (see below).
- */
-
-/* ------------------------ SPECIFIC NOTES ------------------------ */
-/*
- * wavelan.o is darn too big
- * -------------------------
- * That's true ! There is a very simple way to reduce the driver
- * object by 33% (yes !). Comment out the following line :
- * #include <linux/wireless.h>
- *
- * MAC address and hardware detection :
- * ----------------------------------
- * The detection code of the wavelan chech that the first 3
- * octets of the MAC address fit the company code. This type of
- * detection work well for AT&T cards (because the AT&T code is
- * hardcoded in wavelan.h), but of course will fail for other
- * manufacturer.
- *
- * If you are sure that your card is derived from the wavelan,
- * here is the way to configure it :
- * 1) Get your MAC address
- * a) With your card utilities (wfreqsel, instconf, ...)
- * b) With the driver :
- * o compile the kernel with DEBUG_CONFIG_INFO enabled
- * o Boot and look the card messages
- * 2) Set your MAC code (3 octets) in MAC_ADDRESSES[][3] (wavelan.h)
- * 3) Compile & verify
- * 4) Send me the MAC code - I will include it in the next version...
- *
- * "CU Inactive" message at boot up :
- * -----------------------------------
- * It seem that there is some weird timings problems with the
- * Intel microcontroler. In fact, this message is triggered by a
- * bad reading of the on board ram the first time we read the
- * control block. If you ignore this message, all is ok (but in
- * fact, currently, it reset the wavelan hardware).
- *
- * To get rid of that problem, there is two solution. The first
- * is to add a dummy read of the scb at the end of
- * wv_82586_config. The second is to add the timers
- * wv_synchronous_cmd and wv_ack (the udelay just after the
- * waiting loops - seem that the controler is not totally ready
- * when it say it is !).
- *
- * In the current code, I use the second solution (to be
- * consistent with the original solution of Bruce Janson).
- */
-
-/* --------------------- WIRELESS EXTENSIONS --------------------- */
-/*
- * This driver is the first one to support "wireless extensions".
- * This set of extensions provide you some way to control the wireless
- * caracteristics of the hardware in a standard way and support for
- * applications for taking advantage of it (like Mobile IP).
- *
- * You will need to enable the CONFIG_NET_RADIO define in the kernel
- * configuration to enable the wireless extensions (this is the one
- * giving access to the radio network device choice).
- *
- * It might also be a good idea as well to fetch the wireless tools to
- * configure the device and play a bit.
- */
-
-/* ---------------------------- FILES ---------------------------- */
-/*
- * wavelan.c : The actual code for the driver - C functions
- *
- * wavelan.p.h : Private header : local types / vars for the driver
- *
- * wavelan.h : Description of the hardware interface & structs
- *
- * i82586.h : Description if the Ethernet controler
- */
-
-/* --------------------------- HISTORY --------------------------- */
-/*
- * (Made with information in drivers headers. It may not be accurate,
- * and I garantee nothing except my best effort...)
- *
- * The history of the Wavelan drivers is as complicated as history of
- * the Wavelan itself (NCR -> AT&T -> Lucent).
- *
- * All started with Anders Klemets <address@hidden>,
- * writting a Wavelan ISA driver for the MACH microkernel. Girish
- * Welling <address@hidden> had also worked on it.
- * Keith Moore modify this for the Pcmcia hardware.
- *
- * Robert Morris <address@hidden> port these two drivers to BSDI
- * and add specific Pcmcia support (there is currently no equivalent
- * of the PCMCIA package under BSD...).
- *
- * Jim Binkley <address@hidden> port both BSDI drivers to freeBSD.
- *
- * Bruce Janson <address@hidden> port the BSDI ISA driver to Linux.
- *
- * Anthony D. Joseph <address@hidden> started modify Bruce driver
- * (with help of the BSDI PCMCIA driver) for PCMCIA.
- * Yunzhou Li <address@hidden> finished is work.
- * Joe Finney <address@hidden> patched the driver to start
- * correctly 2.00 cards (2.4 GHz with frequency selection).
- * David Hinds <address@hidden> integrated the whole in his
- * Pcmcia package (+ bug corrections).
- *
- * I (Jean Tourrilhes - address@hidden) then started to make some
- * patchs to the Pcmcia driver. After, I added code in the ISA driver
- * for Wireless Extensions and full support of frequency selection
- * cards. Then, I've done the same to the Pcmcia driver + some
- * reorganisation. Finally, I came back to the ISA driver to
- * upgrade it at the same level as the Pcmcia one and reorganise
- * the code
- * Loeke Brederveld <address@hidden> from Lucent has given me
- * much needed informations on the Wavelan hardware.
- */
-
-/* The original copyrights and litteratures mention others names and
- * credits. I don't know what there part in this development was...
- */
-
-/* By the way : for the copyright & legal stuff :
- * Almost everybody wrote code under GNU or BSD license (or alike),
- * and want that their original copyright remain somewhere in the
- * code (for myself, I go with the GPL).
- * Nobody want to take responsibility for anything, except the fame...
- */
-
-/* --------------------------- CREDITS --------------------------- */
-/*
- * This software was developed as a component of the
- * Linux operating system.
- * It is based on other device drivers and information
- * either written or supplied by:
- * Ajay Bakre (address@hidden),
- * Donald Becker (address@hidden),
- * Loeke Brederveld (address@hidden),
- * Brent Elphick <address@hidden>,
- * Anders Klemets (address@hidden),
- * Vladimir V. Kolpakov (address@hidden),
- * Marc Meertens (address@hidden),
- * Pauline Middelink (address@hidden),
- * Robert Morris (address@hidden),
- * Jean Tourrilhes (address@hidden),
- * Girish Welling (address@hidden),
- * Clark Woodworth <address@hidden>
- * Yongguang Zhang <address@hidden>...
- *
- * Thanks go also to:
- * James Ashton (address@hidden),
- * Alan Cox (address@hidden),
- * Allan Creighton (address@hidden),
- * Matthew Geier (address@hidden),
- * Remo di Giovanni (address@hidden),
- * Eckhard Grah (address@hidden),
- * Vipul Gupta (address@hidden),
- * Mark Hagan (address@hidden),
- * Tim Nicholson (address@hidden),
- * Ian Parkin (address@hidden),
- * John Rosenberg (address@hidden),
- * George Rossi (address@hidden),
- * Arthur Scott (address@hidden),
- * Stanislav Sinyagin <address@hidden>
- * Peter Storey,
- * for their assistance and advice.
- *
- * Additional Credits:
- *
- * My developpement has been done under Linux 2.0.x (Debian 1.1) with
- * an HP Vectra XP/60.
- *
- */
-
-/* ------------------------- IMPROVEMENTS ------------------------- */
-/*
- * I proudly present :
- *
- * Changes mades in first pre-release :
- * ----------------------------------
- * - Reorganisation of the code, function name change
- * - Creation of private header (wavelan.p.h)
- * - Reorganised debug messages
- * - More comments, history, ...
- * - mmc_init : configure the PSA if not done
- * - mmc_init : correct default value of level threshold for pcmcia
- * - mmc_init : 2.00 detection better code for 2.00 init
- * - better info at startup
- * - irq setting (note : this setting is permanent...)
- * - Watchdog : change strategy (+ solve module removal problems)
- * - add wireless extensions (ioctl & get_wireless_stats)
- * get/set nwid/frequency on fly, info for /proc/net/wireless
- * - More wireless extension : SETSPY and GETSPY
- * - Make wireless extensions optional
- * - Private ioctl to set/get quality & level threshold, histogram
- * - Remove /proc/net/wavelan
- * - Supress useless stuff from lp (net_local)
- * - kernel 2.1 support (copy_to/from_user instead of memcpy_to/fromfs)
- * - Add message level (debug stuff in /var/adm/debug & errors not
- * displayed at console and still in /var/adm/messages)
- * - multi device support
- * - Start fixing the probe (init code)
- * - More inlines
- * - man page
- * - Lot of others minor details & cleanups
- *
- * Changes made in second pre-release :
- * ----------------------------------
- * - Cleanup init code (probe & module init)
- * - Better multi device support (module)
- * - name assignement (module)
- *
- * Changes made in third pre-release :
- * ---------------------------------
- * - Be more conservative on timers
- * - Preliminary support for multicast (I still lack some details...)
- *
- * Changes made in fourth pre-release :
- * ----------------------------------
- * - multicast (revisited and finished)
- * - Avoid reset in set_multicast_list (a really big hack)
- * if somebody could apply this code for other i82586 based driver...
- * - Share on board memory 75% RU / 25% CU (instead of 50/50)
- *
- * Changes made for release in 2.1.15 :
- * ----------------------------------
- * - Change the detection code for multi manufacturer code support
- *
- * Changes made for release in 2.1.17 :
- * ----------------------------------
- * - Update to wireless extensions changes
- * - Silly bug in card initial configuration (psa_conf_status)
- *
- * Changes made for release in 2.1.27 & 2.0.30 :
- * -------------------------------------------
- * - Small bug in debug code (probably not the last one...)
- * - Remove extern kerword for wavelan_probe()
- * - Level threshold is now a standard wireless extension (version 4 !)
- *
- * Changes made for release in 2.1.36 :
- * ----------------------------------
- * - Encryption setting from Brent Elphick (thanks a lot !)
- * - 'ioaddr' to 'u_long' for the Alpha (thanks to Stanislav Sinyagin)
- *
- * Wishes & dreams :
- * ---------------
- * - Roaming
- */
-
-/***************************** INCLUDES *****************************/
-
-#include <linux/module.h>
-
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/types.h>
-#include <linux/fcntl.h>
-#include <linux/interrupt.h>
-#include <linux/stat.h>
-#include <linux/ptrace.h>
-#include <linux/ioport.h>
-#include <linux/in.h>
-#include <linux/string.h>
-#include <linux/delay.h>
-#include <asm/system.h>
-#include <asm/bitops.h>
-#include <asm/io.h>
-#include <asm/dma.h>
-#include <linux/errno.h>
-#include <linux/netdevice.h>
-#include <linux/etherdevice.h>
-#include <linux/skbuff.h>
-#include <linux/malloc.h>
-#include <linux/timer.h>
-
-#include <linux/wireless.h> /* Wireless extensions */
-
-/* Wavelan declarations */
-#include "i82586.h"
-#include "wavelan.h"
-
-/****************************** DEBUG ******************************/
-
-#undef DEBUG_MODULE_TRACE /* Module insertion/removal */
-#undef DEBUG_CALLBACK_TRACE /* Calls made by Linux */
-#undef DEBUG_INTERRUPT_TRACE /* Calls to handler */
-#undef DEBUG_INTERRUPT_INFO /* type of interrupt & so on */
-#define DEBUG_INTERRUPT_ERROR /* problems */
-#undef DEBUG_CONFIG_TRACE /* Trace the config functions */
-#undef DEBUG_CONFIG_INFO /* What's going on... */
-#define DEBUG_CONFIG_ERRORS /* Errors on configuration */
-#undef DEBUG_TX_TRACE /* Transmission calls */
-#undef DEBUG_TX_INFO /* Header of the transmited packet */
-#define DEBUG_TX_ERROR /* unexpected conditions */
-#undef DEBUG_RX_TRACE /* Transmission calls */
-#undef DEBUG_RX_INFO /* Header of the transmited packet */
-#define DEBUG_RX_ERROR /* unexpected conditions */
-#undef DEBUG_PACKET_DUMP 16 /* Dump packet on the screen */
-#undef DEBUG_IOCTL_TRACE /* Misc call by Linux */
-#undef DEBUG_IOCTL_INFO /* Various debug info */
-#define DEBUG_IOCTL_ERROR /* What's going wrong */
-#define DEBUG_BASIC_SHOW /* Show basic startup info */
-#undef DEBUG_VERSION_SHOW /* Print version info */
-#undef DEBUG_PSA_SHOW /* Dump psa to screen */
-#undef DEBUG_MMC_SHOW /* Dump mmc to screen */
-#undef DEBUG_SHOW_UNUSED /* Show also unused fields */
-#undef DEBUG_I82586_SHOW /* Show i82586 status */
-#undef DEBUG_DEVICE_SHOW /* Show device parameters */
-
-/* Options : */
-#define USE_PSA_CONFIG /* Use info from the PSA */
-#define IGNORE_NORMAL_XMIT_ERRS /* Don't bother with normal conditions
*/
-#undef STRUCT_CHECK /* Verify padding of structures */
-#undef PSA_CRC /* Check CRC in PSA */
-#undef OLDIES /* Old code (to redo) */
-#undef RECORD_SNR /* To redo */
-#undef EEPROM_IS_PROTECTED /* Doesn't seem to be necessary */
-#define MULTICAST_AVOID /* Avoid extra multicast (I'm
sceptical) */
-
-#ifdef WIRELESS_EXT /* If wireless extension exist in the kernel */
-/* Warning : these stuff will slow down the driver... */
-#define WIRELESS_SPY /* Enable spying addresses */
-#undef HISTOGRAM /* Enable histogram of sig level... */
-#endif
-
-/************************ CONSTANTS & MACROS ************************/
-
-#ifdef DEBUG_VERSION_SHOW
-static const char *version = "wavelan.c : v16 (wireless
extensions) 17/4/97\n";
-#endif
-
-/* Watchdog temporisation */
-#define WATCHDOG_JIFFIES 32 /* TODO: express in HZ. */
-
-/* Macro to get the number of elements in an array */
-#define NELS(a) (sizeof(a) / sizeof(a[0]))
-
-/* ------------------------ PRIVATE IOCTL ------------------------ */
-
-#define SIOCSIPQTHR SIOCDEVPRIVATE /* Set quality threshold */
-#define SIOCGIPQTHR SIOCDEVPRIVATE + 1 /* Get quality threshold */
-#define SIOCSIPLTHR SIOCDEVPRIVATE + 2 /* Set level threshold */
-#define SIOCGIPLTHR SIOCDEVPRIVATE + 3 /* Get level threshold */
-
-#define SIOCSIPHISTO SIOCDEVPRIVATE + 6 /* Set histogram ranges */
-#define SIOCGIPHISTO SIOCDEVPRIVATE + 7 /* Get histogram values */
-
-/* ----------------------- VERSION SUPPORT ----------------------- */
-
-/* This ugly patch is needed to cope with old version of the kernel */
-#ifndef copy_from_user
-#define copy_from_user memcpy_fromfs
-#define copy_to_user memcpy_tofs
-#endif
-
-/****************************** TYPES ******************************/
-
-/* Shortcuts */
-typedef struct device device;
-typedef struct enet_statistics en_stats;
-typedef struct iw_statistics iw_stats;
-typedef struct iw_quality iw_qual;
-typedef struct iw_freq iw_freq;
-typedef struct net_local net_local;
-typedef struct timer_list timer_list;
-
-/* Basic types */
-typedef u_char mac_addr[WAVELAN_ADDR_SIZE]; /* Hardware address */
-
-/*
- * Static specific data for the interface.
- *
- * For each network interface, Linux keep data in two structure. "device"
- * keep the generic data (same format for everybody) and "net_local" keep
- * the additional specific data.
- * Note that some of this specific data is in fact generic (en_stats, for
- * example).
- */
-struct net_local
-{
- net_local * next; /* Linked list of the devices */
- device * dev; /* Reverse link... */
- en_stats stats; /* Ethernet interface statistics */
- int nresets; /* Number of hw resets */
- u_char reconfig_82586; /* Need to reconfigure the controler */
- u_char promiscuous; /* Promiscuous mode */
- int mc_count; /* Number of multicast addresses */
- timer_list watchdog; /* To avoid blocking state */
- u_short hacr; /* Current host interface state */
-
- int tx_n_in_use;
- u_short rx_head;
- u_short rx_last;
- u_short tx_first_free;
- u_short tx_first_in_use;
-
-#ifdef WIRELESS_EXT
- iw_stats wstats; /* Wireless specific stats */
-#endif
-
-#ifdef WIRELESS_SPY
- int spy_number; /* Number of addresses to spy */
- mac_addr spy_address[IW_MAX_SPY]; /* The addresses to spy */
- iw_qual spy_stat[IW_MAX_SPY]; /* Statistics gathered */
-#endif /* WIRELESS_SPY */
-#ifdef HISTOGRAM
- int his_number; /* Number of intervals */
- u_char his_range[16]; /* Boundaries of interval ]n-1; n] */
- u_long his_sum[16]; /* Sum in interval */
-#endif /* HISTOGRAM */
-};
-
-/**************************** PROTOTYPES ****************************/
-
-/* ----------------------- MISC SUBROUTINES ------------------------ */
-static inline unsigned long /* flags */
- wv_splhi(void); /* Disable interrupts */
-static inline void
- wv_splx(unsigned long); /* ReEnable interrupts : flags */
-static u_char
- wv_irq_to_psa(int);
-static int
- wv_psa_to_irq(u_char);
-/* ------------------- HOST ADAPTER SUBROUTINES ------------------- */
-static inline u_short /* data */
- hasr_read(u_long); /* Read the host interface : base address */
-static inline void
- hacr_write(u_long, /* Write to host interface : base address */
- u_short), /* data */
- hacr_write_slow(u_long,
- u_short),
- set_chan_attn(u_long, /* ioaddr */
- u_short), /* hacr */
- wv_hacr_reset(u_long), /* ioaddr */
- wv_16_off(u_long, /* ioaddr */
- u_short), /* hacr */
- wv_16_on(u_long, /* ioaddr */
- u_short), /* hacr */
- wv_ints_off(device *),
- wv_ints_on(device *);
-/* ----------------- MODEM MANAGEMENT SUBROUTINES ----------------- */
-static void
- psa_read(u_long, /* Read the Parameter Storage Area */
- u_short, /* hacr */
- int, /* offset in PSA */
- u_char *, /* buffer to fill */
- int), /* size to read */
- psa_write(u_long, /* Write to the PSA */
- u_short, /* hacr */
- int, /* Offset in psa */
- u_char *, /* Buffer in memory */
- int); /* Length of buffer */
-static inline void
- mmc_out(u_long, /* Write 1 byte to the Modem Manag Control */
- u_short,
- u_char),
- mmc_write(u_long, /* Write n bytes to the MMC */
- u_char,
- u_char *,
- int);
-static inline u_char /* Read 1 byte from the MMC */
- mmc_in(u_long,
- u_short);
-static inline void
- mmc_read(u_long, /* Read n bytes from the MMC */
- u_char,
- u_char *,
- int),
- fee_wait(u_long, /* Wait for frequency EEprom : base address */
- int, /* Base delay to wait for */
- int); /* Number of time to wait */
-static void
- fee_read(u_long, /* Read the frequency EEprom : base address */
- u_short, /* destination offset */
- u_short *, /* data buffer */
- int); /* number of registers */
-/* ---------------------- I82586 SUBROUTINES ----------------------- */
-static /*inline*/ void
- obram_read(u_long, /* ioaddr */
- u_short, /* o */
- u_char *, /* b */
- int); /* n */
-static inline void
- obram_write(u_long, /* ioaddr */
- u_short, /* o */
- u_char *, /* b */
- int); /* n */
-static void
- wv_ack(device *);
-static inline int
- wv_synchronous_cmd(device *,
- const char *),
- wv_config_complete(device *,
- u_long,
- net_local *);
-static int
- wv_complete(device *,
- u_long,
- net_local *);
-static inline void
- wv_82586_reconfig(device *);
-/* ------------------- DEBUG & INFO SUBROUTINES ------------------- */
-#ifdef DEBUG_I82586_SHOW
-static void
- wv_scb_show(unsigned short);
-#endif
-static inline void
- wv_init_info(device *); /* display startup info */
-/* ------------------- IOCTL, STATS & RECONFIG ------------------- */
-static en_stats *
- wavelan_get_stats(device *); /* Give stats /proc/net/dev */
-static void
- wavelan_set_multicast_list(device *);
-/* ----------------------- PACKET RECEPTION ----------------------- */
-static inline void
- wv_packet_read(device *, /* Read a packet from a frame */
- u_short,
- int),
- wv_receive(device *); /* Read all packets waiting */
-/* --------------------- PACKET TRANSMISSION --------------------- */
-static inline void
- wv_packet_write(device *, /* Write a packet to the Tx buffer */
- void *,
- short);
-static int
- wavelan_packet_xmit(struct sk_buff *, /* Send a packet */
- device *);
-/* -------------------- HARDWARE CONFIGURATION -------------------- */
-static inline int
- wv_mmc_init(device *), /* Initialize the modem */
- wv_ru_start(device *), /* Start the i82586 receiver unit */
- wv_cu_start(device *), /* Start the i82586 command unit */
- wv_82586_start(device *); /* Start the i82586 */
-static void
- wv_82586_config(device *); /* Configure the i82586 */
-static inline void
- wv_82586_stop(device *);
-static int
- wv_hw_reset(device *), /* Reset the wavelan hardware */
- wv_check_ioaddr(u_long, /* ioaddr */
- u_char *); /* mac address (read) */
-/* ---------------------- INTERRUPT HANDLING ---------------------- */
-static void
- wavelan_interrupt(int, /* Interrupt handler */
- void *,
- struct pt_regs *);
-static void
- wavelan_watchdog(u_long); /* Transmission watchdog */
-/* ------------------- CONFIGURATION CALLBACKS ------------------- */
-static int
- wavelan_open(device *), /* Open the device */
- wavelan_close(device *), /* Close the device */
- wavelan_config(device *); /* Configure one device */
-extern int
- wavelan_probe(device *); /* See Space.c */
-
-/**************************** VARIABLES ****************************/
-
-/*
- * This is the root of the linked list of wavelan drivers
- * It is use to verify that we don't reuse the same base address
- * for two differents drivers and to make the cleanup when
- * removing the module.
- */
-static net_local * wavelan_list = (net_local *) NULL;
-
-/*
- * This table is used to translate the psa value to irq number
- * and vice versa...
- */
-static u_char irqvals[] =
-{
- 0, 0, 0, 0x01,
- 0x02, 0x04, 0, 0x08,
- 0, 0, 0x10, 0x20,
- 0x40, 0, 0, 0x80,
-};
-
-/*
- * Table of the available i/o address (base address) for wavelan
- */
-static unsigned short iobase[] =
-{
-#if 0
- /* Leave out 0x3C0 for now -- seems to clash with some video
- * controllers.
- * Leave out the others too -- we will always use 0x390 and leave
- * 0x300 for the Ethernet device.
- * Jean II : 0x3E0 is really fine as well...
- */
- 0x300, 0x390, 0x3E0, 0x3C0
-#endif /* 0 */
- 0x390, 0x3E0
-};
-
-#ifdef MODULE
-/* Name of the devices (memory allocation) */
-static char devname[4][IFNAMSIZ] = { "", "", "", "" };
-
-/* Parameters set by insmod */
-static int io[4] = { 0, 0, 0, 0 };
-static int irq[4] = { 0, 0, 0, 0 };
-static char * name[4] = { devname[0], devname[1], devname[2], devname[3] };
-#endif /* MODULE */
-
-#endif /* WAVELAN_P_H */
diff --git a/linux/src/drivers/scsi/FlashPoint.c
b/linux/src/drivers/scsi/FlashPoint.c
deleted file mode 100644
index aae35c0..0000000
--- a/linux/src/drivers/scsi/FlashPoint.c
+++ /dev/null
@@ -1,12156 +0,0 @@
-/*
-
- FlashPoint.c -- FlashPoint SCCB Manager for Linux
-
- This file contains the FlashPoint SCCB Manager from BusLogic's FlashPoint
- Driver Developer's Kit, with minor modifications by Leonard N. Zubkoff for
- Linux compatibility. It was provided by BusLogic in the form of 16 separate
- source files, which would have unnecessarily cluttered the scsi directory, so
- the individual files have been combined into this single file.
-
- Copyright 1995-1996 by Mylex Corporation. All Rights Reserved
-
- This file is available under both the GNU General Public License
- and a BSD-style copyright; see LICENSE.FlashPoint for details.
-
-*/
-
-
-#include <linux/config.h>
-
-
-#ifndef CONFIG_SCSI_OMIT_FLASHPOINT
-
-
-#define UNIX
-#define FW_TYPE _SCCB_MGR_
-#define MAX_CARDS 8
-#undef BUSTYPE_PCI
-
-
-#define OS_InPortByte(port) inb(port)
-#define OS_InPortWord(port) inw(port)
-#define OS_InPortLong(port) inl(port)
-#define OS_OutPortByte(port, value) outb(value, port)
-#define OS_OutPortWord(port, value) outw(value, port)
-#define OS_OutPortLong(port, value) outl(value, port)
-#define OS_Lock(x)
-#define OS_UnLock(x)
-
-
-/*
- Define name replacements for compatibility with the Linux BusLogic Driver.
-*/
-
-#define SccbMgr_sense_adapter FlashPoint_ProbeHostAdapter
-#define SccbMgr_config_adapter FlashPoint_HardwareResetHostAdapter
-#define SccbMgr_unload_card FlashPoint_ReleaseHostAdapter
-#define SccbMgr_start_sccb FlashPoint_StartCCB
-#define SccbMgr_abort_sccb FlashPoint_AbortCCB
-#define SccbMgr_my_int FlashPoint_InterruptPending
-#define SccbMgr_isr FlashPoint_HandleInterrupt
-
-
-/*
- Define name replacements to avoid kernel namespace pollution.
-*/
-
-#define BL_Card FPT_BL_Card
-#define BusMasterInit FPT_BusMasterInit
-#define CalcCrc16 FPT_CalcCrc16
-#define CalcLrc FPT_CalcLrc
-#define ChkIfChipInitialized FPT_ChkIfChipInitialized
-#define DiagBusMaster FPT_DiagBusMaster
-#define DiagEEPROM FPT_DiagEEPROM
-#define DiagXbow FPT_DiagXbow
-#define GetTarLun FPT_GetTarLun
-#define RNVRamData FPT_RNVRamData
-#define RdStack FPT_RdStack
-#define SccbMgrTableInitAll FPT_SccbMgrTableInitAll
-#define SccbMgrTableInitCard FPT_SccbMgrTableInitCard
-#define SccbMgrTableInitTarget FPT_SccbMgrTableInitTarget
-#define SccbMgr_bad_isr FPT_SccbMgr_bad_isr
-#define SccbMgr_scsi_reset FPT_SccbMgr_scsi_reset
-#define SccbMgr_timer_expired FPT_SccbMgr_timer_expired
-#define SendMsg FPT_SendMsg
-#define Wait FPT_Wait
-#define Wait1Second FPT_Wait1Second
-#define WrStack FPT_WrStack
-#define XbowInit FPT_XbowInit
-#define autoCmdCmplt FPT_autoCmdCmplt
-#define autoLoadDefaultMap FPT_autoLoadDefaultMap
-#define busMstrDataXferStart FPT_busMstrDataXferStart
-#define busMstrSGDataXferStart FPT_busMstrSGDataXferStart
-#define busMstrTimeOut FPT_busMstrTimeOut
-#define dataXferProcessor FPT_dataXferProcessor
-#define default_intena FPT_default_intena
-#define hostDataXferAbort FPT_hostDataXferAbort
-#define hostDataXferRestart FPT_hostDataXferRestart
-#define inisci FPT_inisci
-#define mbCards FPT_mbCards
-#define nvRamInfo FPT_nvRamInfo
-#define phaseBusFree FPT_phaseBusFree
-#define phaseChkFifo FPT_phaseChkFifo
-#define phaseCommand FPT_phaseCommand
-#define phaseDataIn FPT_phaseDataIn
-#define phaseDataOut FPT_phaseDataOut
-#define phaseDecode FPT_phaseDecode
-#define phaseIllegal FPT_phaseIllegal
-#define phaseMsgIn FPT_phaseMsgIn
-#define phaseMsgOut FPT_phaseMsgOut
-#define phaseStatus FPT_phaseStatus
-#define queueAddSccb FPT_queueAddSccb
-#define queueCmdComplete FPT_queueCmdComplete
-#define queueDisconnect FPT_queueDisconnect
-#define queueFindSccb FPT_queueFindSccb
-#define queueFlushSccb FPT_queueFlushSccb
-#define queueFlushTargSccb FPT_queueFlushTargSccb
-#define queueSearchSelect FPT_queueSearchSelect
-#define queueSelectFail FPT_queueSelectFail
-#define s_PhaseTbl FPT_s_PhaseTbl
-#define scamHAString FPT_scamHAString
-#define scamInfo FPT_scamInfo
-#define scarb FPT_scarb
-#define scasid FPT_scasid
-#define scbusf FPT_scbusf
-#define sccbMgrTbl FPT_sccbMgrTbl
-#define schkdd FPT_schkdd
-#define scini FPT_scini
-#define sciso FPT_sciso
-#define scmachid FPT_scmachid
-#define scsavdi FPT_scsavdi
-#define scsel FPT_scsel
-#define scsell FPT_scsell
-#define scsendi FPT_scsendi
-#define scvalq FPT_scvalq
-#define scwirod FPT_scwirod
-#define scwiros FPT_scwiros
-#define scwtsel FPT_scwtsel
-#define scxferc FPT_scxferc
-#define sdecm FPT_sdecm
-#define sfm FPT_sfm
-#define shandem FPT_shandem
-#define sinits FPT_sinits
-#define sisyncn FPT_sisyncn
-#define sisyncr FPT_sisyncr
-#define siwidn FPT_siwidn
-#define siwidr FPT_siwidr
-#define sres FPT_sres
-#define sresb FPT_sresb
-#define ssel FPT_ssel
-#define ssenss FPT_ssenss
-#define sssyncv FPT_sssyncv
-#define stsyncn FPT_stsyncn
-#define stwidn FPT_stwidn
-#define sxfrp FPT_sxfrp
-#define utilEERead FPT_utilEERead
-#define utilEEReadOrg FPT_utilEEReadOrg
-#define utilEESendCmdAddr FPT_utilEESendCmdAddr
-#define utilEEWrite FPT_utilEEWrite
-#define utilEEWriteOnOff FPT_utilEEWriteOnOff
-#define utilUpdateResidual FPT_utilUpdateResidual
-
-
-/*----------------------------------------------------------------------
- *
- *
- * Copyright 1995-1996 by Mylex Corporation. All Rights Reserved
- *
- * This file is available under both the GNU General Public License
- * and a BSD-style copyright; see LICENSE.FlashPoint for details.
- *
- * $Workfile: globals.h $
- *
- * Description: Common shared global defines.
- *
- * $Date: 1999/04/26 05:53:56 $
- *
- * $Revision: 1.1 $
- *
- *----------------------------------------------------------------------*/
-#ifndef __GLOBALS_H__
-#define __GLOBALS_H__
-
-#define _UCB_MGR_ 1
-#define _SCCB_MGR_ 2
-
-/*#include <osflags.h>*/
-
-#define MAX_CDBLEN 12
-
-#define SCAM_LEV_2 1
-
-#define CRCMASK 0xA001
-
-/* In your osflags.h file, please ENSURE that only ONE OS FLAG
- is on at a time !!! Also, please make sure you turn set the
- variable FW_TYPE to either _UCB_MGR_ or _SCCB_MGR_ !!! */
-
-#if defined(DOS) || defined(WIN95_16) || defined(OS2) || defined(OTHER_16)
- #define COMPILER_16_BIT 1
-#elif defined(NETWARE) || defined(NT) || defined(WIN95_32) || defined(UNIX) ||
defined(OTHER_32) || defined(SOLARIS_REAL_MODE)
- #define COMPILER_32_BIT 1
-#endif
-
-
-#define BL_VENDOR_ID 0x104B
-#define FP_DEVICE_ID 0x8130
-#define MM_DEVICE_ID 0x1040
-
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-#ifndef TRUE
-#define TRUE (!(FALSE))
-#endif
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-#define FAILURE 0xFFFFFFFFL
-
-
-typedef unsigned char UCHAR;
-typedef unsigned short USHORT;
-typedef unsigned int UINT;
-typedef unsigned long ULONG;
-typedef unsigned char * PUCHAR;
-typedef unsigned short* PUSHORT;
-typedef unsigned long * PULONG;
-typedef void * PVOID;
-
-
-#if defined(COMPILER_16_BIT)
-typedef unsigned char far * uchar_ptr;
-typedef unsigned short far * ushort_ptr;
-typedef unsigned long far * ulong_ptr;
-#endif /* 16_BIT_COMPILER */
-
-#if defined(COMPILER_32_BIT)
-typedef unsigned char * uchar_ptr;
-typedef unsigned short * ushort_ptr;
-typedef unsigned long * ulong_ptr;
-#endif /* 32_BIT_COMPILER */
-
-
-/* NEW TYPE DEFINITIONS (shared with Mylex North)
-
-** Use following type defines to avoid confusion in 16 and 32-bit
-** environments. Avoid using 'int' as it denotes 16 bits in 16-bit
-** environment and 32 in 32-bit environments.
-
-*/
-
-#define s08bits char
-#define s16bits short
-#define s32bits long
-
-#define u08bits unsigned s08bits
-#define u16bits unsigned s16bits
-#define u32bits unsigned s32bits
-
-#if defined(COMPILER_16_BIT)
-
-typedef u08bits far * pu08bits;
-typedef u16bits far * pu16bits;
-typedef u32bits far * pu32bits;
-
-#endif /* COMPILER_16_BIT */
-
-#if defined(COMPILER_32_BIT)
-
-typedef u08bits * pu08bits;
-typedef u16bits * pu16bits;
-typedef u32bits * pu32bits;
-
-#endif /* COMPILER_32_BIT */
-
-
-#define BIT(x) ((UCHAR)(1<<(x))) /* single-bit mask in bit
position x */
-#define BITW(x) ((USHORT)(1<<(x))) /* single-bit mask in bit
position x */
-
-
-
-#if defined(DOS)
-/*#include <dos.h>*/
- #undef inportb /* undefine for Borland Lib */
- #undef inport /* they may have define I/O function in LIB */
- #undef outportb
- #undef outport
-
- #define OS_InPortByte(ioport) inportb(ioport)
- #define OS_InPortWord(ioport) inport(ioport)
- #define OS_InPortLong(ioport) inportq(ioport, val)
- #define OS_OutPortByte(ioport, val) outportb(ioport, val)
- #define OS_OutPortWord(ioport, val) outport(ioport, val)
- #define OS_OutPortLong(ioport) outportq(ioport, val)
-#endif /* DOS */
-
-#if defined(NETWARE) || defined(OTHER_32) || defined(OTHER_16)
- extern u08bits OS_InPortByte(u32bits ioport);
- extern u16bits OS_InPortWord(u32bits ioport);
- extern u32bits OS_InPortLong(u32bits ioport);
-
- extern OS_InPortByteBuffer(u32bits ioport, pu08bits buffer, u32bits
count);
- extern OS_InPortWordBuffer(u32bits ioport, pu16bits buffer, u32bits
count);
- extern OS_OutPortByte(u32bits ioport, u08bits val);
- extern OS_OutPortWord(u32bits ioport, u16bits val);
- extern OS_OutPortLong(u32bits ioport, u32bits val);
- extern OS_OutPortByteBuffer(u32bits ioport, pu08bits buffer, u32bits
count);
- extern OS_OutPortWordBuffer(u32bits ioport, pu16bits buffer, u32bits
count);
-#endif /* NETWARE || OTHER_32 || OTHER_16 */
-
-#if defined (NT) || defined(WIN95_32) || defined(WIN95_16)
- #if defined(NT)
-
- extern __declspec(dllimport) u08bits
ScsiPortReadPortUchar(pu08bits ioport);
- extern __declspec(dllimport) u16bits
ScsiPortReadPortUshort(pu16bits ioport);
- extern __declspec(dllimport) u32bits
ScsiPortReadPortUlong(pu32bits ioport);
- extern __declspec(dllimport) void
ScsiPortWritePortUchar(pu08bits ioport, u08bits val);
- extern __declspec(dllimport) void
ScsiPortWritePortUshort(pu16bits port, u16bits val);
- extern __declspec(dllimport) void
ScsiPortWritePortUlong(pu32bits port, u32bits val);
-
- #else
-
- extern u08bits ScsiPortReadPortUchar(pu08bits ioport);
- extern u16bits ScsiPortReadPortUshort(pu16bits ioport);
- extern u32bits ScsiPortReadPortUlong(pu32bits ioport);
- extern void ScsiPortWritePortUchar(pu08bits ioport, u08bits
val);
- extern void ScsiPortWritePortUshort(pu16bits port, u16bits val);
- extern void ScsiPortWritePortUlong(pu32bits port, u32bits val);
- #endif
-
-
- #define OS_InPortByte(ioport) ScsiPortReadPortUchar((pu08bits) ioport)
- #define OS_InPortWord(ioport) ScsiPortReadPortUshort((pu16bits) ioport)
- #define OS_InPortLong(ioport) ScsiPortReadPortUlong((pu32bits) ioport)
-
- #define OS_OutPortByte(ioport, val) ScsiPortWritePortUchar((pu08bits)
ioport, (u08bits) val)
- #define OS_OutPortWord(ioport, val) ScsiPortWritePortUshort((pu16bits)
ioport, (u16bits) val)
- #define OS_OutPortLong(ioport, val) ScsiPortWritePortUlong((pu32bits)
ioport, (u32bits) val)
- #define OS_OutPortByteBuffer(ioport, buffer, count) \
- ScsiPortWritePortBufferUchar((pu08bits)&port, (pu08bits)
buffer, (u32bits) count)
- #define OS_OutPortWordBuffer(ioport, buffer, count) \
- ScsiPortWritePortBufferUshort((pu16bits)&port, (pu16bits)
buffer, (u32bits) count)
-
- #define OS_Lock(x)
- #define OS_UnLock(x)
-#endif /* NT || WIN95_32 || WIN95_16 */
-
-#if defined (UNIX) && !defined(OS_InPortByte)
- #define OS_InPortByte(ioport) inb((u16bits)ioport)
- #define OS_InPortWord(ioport) inw((u16bits)ioport)
- #define OS_InPortLong(ioport) inl((u16bits)ioport)
- #define OS_OutPortByte(ioport,val) outb((u16bits)ioport, (u08bits)val)
- #define OS_OutPortWord(ioport,val) outw((u16bits)ioport, (u16bits)val)
- #define OS_OutPortLong(ioport,val) outl((u16bits)ioport, (u32bits)val)
-
- #define OS_Lock(x)
- #define OS_UnLock(x)
-#endif /* UNIX */
-
-
-#if defined(OS2)
- extern u08bits inb(u32bits ioport);
- extern u16bits inw(u32bits ioport);
- extern void outb(u32bits ioport, u08bits val);
- extern void outw(u32bits ioport, u16bits val);
-
- #define OS_InPortByte(ioport) inb(ioport)
- #define OS_InPortWord(ioport) inw(ioport)
- #define OS_OutPortByte(ioport, val) outb(ioport, val)
- #define OS_OutPortWord(ioport, val) outw(ioport, val)
- extern u32bits OS_InPortLong(u32bits ioport);
- extern void OS_OutPortLong(u32bits ioport, u32bits val);
-
- #define OS_Lock(x)
- #define OS_UnLock(x)
-#endif /* OS2 */
-
-#if defined(SOLARIS_REAL_MODE)
-
-extern unsigned char inb(unsigned long ioport);
-extern unsigned short inw(unsigned long ioport);
-
-#define OS_InPortByte(ioport) inb(ioport)
-#define OS_InPortWord(ioport) inw(ioport)
-
-extern void OS_OutPortByte(unsigned long ioport, unsigned char val);
-extern void OS_OutPortWord(unsigned long ioport, unsigned short val);
-extern unsigned long OS_InPortLong(unsigned long ioport);
-extern void OS_OutPortLong(unsigned long ioport, unsigned long val);
-
-#define OS_Lock(x)
-#define OS_UnLock(x)
-
-#endif /* SOLARIS_REAL_MODE */
-
-#endif /* __GLOBALS_H__ */
-
-/*----------------------------------------------------------------------
- *
- *
- * Copyright 1995-1996 by Mylex Corporation. All Rights Reserved
- *
- * This file is available under both the GNU General Public License
- * and a BSD-style copyright; see LICENSE.FlashPoint for details.
- *
- * $Workfile: sccbmgr.h $
- *
- * Description: Common shared SCCB Interface defines and SCCB
- * Manager specifics defines.
- *
- * $Date: 1999/04/26 05:53:56 $
- *
- * $Revision: 1.1 $
- *
- *----------------------------------------------------------------------*/
-
-#ifndef __SCCB_H__
-#define __SCCB_H__
-
-/*#include <osflags.h>*/
-/*#include <globals.h>*/
-
-#if defined(BUGBUG)
-#define debug_size 32
-#endif
-
-#if defined(DOS)
-
- typedef struct _SCCB near *PSCCB;
- #if (FW_TYPE == _SCCB_MGR_)
- typedef void (*CALL_BK_FN)(PSCCB);
- #endif
-
-#elif defined(OS2)
-
- typedef struct _SCCB far *PSCCB;
- #if (FW_TYPE == _SCCB_MGR_)
- typedef void (far *CALL_BK_FN)(PSCCB);
- #endif
-
-#else
-
- typedef struct _SCCB *PSCCB;
- #if (FW_TYPE == _SCCB_MGR_)
- typedef void (*CALL_BK_FN)(PSCCB);
- #endif
-
-#endif
-
-
-typedef struct SCCBMgr_info {
- ULONG si_baseaddr;
- UCHAR si_present;
- UCHAR si_intvect;
- UCHAR si_id;
- UCHAR si_lun;
- USHORT si_fw_revision;
- USHORT si_per_targ_init_sync;
- USHORT si_per_targ_fast_nego;
- USHORT si_per_targ_ultra_nego;
- USHORT si_per_targ_no_disc;
- USHORT si_per_targ_wide_nego;
- USHORT si_flags;
- UCHAR si_card_family;
- UCHAR si_bustype;
- UCHAR si_card_model[3];
- UCHAR si_relative_cardnum;
- UCHAR si_reserved[4];
- ULONG si_OS_reserved;
- UCHAR si_XlatInfo[4];
- ULONG si_reserved2[5];
- ULONG si_secondary_range;
-} SCCBMGR_INFO;
-
-#if defined(DOS)
- typedef SCCBMGR_INFO * PSCCBMGR_INFO;
-#else
- #if defined (COMPILER_16_BIT)
- typedef SCCBMGR_INFO far * PSCCBMGR_INFO;
- #else
- typedef SCCBMGR_INFO * PSCCBMGR_INFO;
- #endif
-#endif // defined(DOS)
-
-
-
-
-#if (FW_TYPE==_SCCB_MGR_)
- #define SCSI_PARITY_ENA 0x0001
- #define LOW_BYTE_TERM 0x0010
- #define HIGH_BYTE_TERM 0x0020
- #define BUSTYPE_PCI 0x3
-#endif
-
-#define SUPPORT_16TAR_32LUN 0x0002
-#define SOFT_RESET 0x0004
-#define EXTENDED_TRANSLATION 0x0008
-#define POST_ALL_UNDERRRUNS 0x0040
-#define FLAG_SCAM_ENABLED 0x0080
-#define FLAG_SCAM_LEVEL2 0x0100
-
-
-
-
-#define HARPOON_FAMILY 0x02
-
-
-#define ISA_BUS_CARD 0x01
-#define EISA_BUS_CARD 0x02
-#define PCI_BUS_CARD 0x03
-#define VESA_BUS_CARD 0x04
-
-/* SCCB struc used for both SCCB and UCB manager compiles!
- * The UCB Manager treats the SCCB as it's 'native hardware structure'
- */
-
-
-#pragma pack(1)
-typedef struct _SCCB {
- UCHAR OperationCode;
- UCHAR ControlByte;
- UCHAR CdbLength;
- UCHAR RequestSenseLength;
- ULONG DataLength;
- ULONG DataPointer;
- UCHAR CcbRes[2];
- UCHAR HostStatus;
- UCHAR TargetStatus;
- UCHAR TargID;
- UCHAR Lun;
- UCHAR Cdb[12];
- UCHAR CcbRes1;
- UCHAR Reserved1;
- ULONG Reserved2;
- ULONG SensePointer;
-
-
- CALL_BK_FN SccbCallback; /* VOID (*SccbCallback)(); */
- ULONG SccbIOPort; /* Identifies board base port */
- UCHAR SccbStatus;
- UCHAR SCCBRes2;
- USHORT SccbOSFlags;
-
-
- ULONG Sccb_XferCnt; /* actual transfer count */
- ULONG Sccb_ATC;
- ULONG SccbVirtDataPtr; /* virtual addr for OS/2 */
- ULONG Sccb_res1;
- USHORT Sccb_MGRFlags;
- USHORT Sccb_sgseg;
- UCHAR Sccb_scsimsg; /* identify msg for selection */
- UCHAR Sccb_tag;
- UCHAR Sccb_scsistat;
- UCHAR Sccb_idmsg; /* image of last msg in */
- PSCCB Sccb_forwardlink;
- PSCCB Sccb_backlink;
- ULONG Sccb_savedATC;
- UCHAR Save_Cdb[6];
- UCHAR Save_CdbLen;
- UCHAR Sccb_XferState;
- ULONG Sccb_SGoffset;
-#if (FW_TYPE == _UCB_MGR_)
- PUCB Sccb_ucb_ptr;
-#endif
- } SCCB;
-
-#define SCCB_SIZE sizeof(SCCB)
-
-#pragma pack()
-
-
-
-#define SCSI_INITIATOR_COMMAND 0x00
-#define TARGET_MODE_COMMAND 0x01
-#define SCATTER_GATHER_COMMAND 0x02
-#define RESIDUAL_COMMAND 0x03
-#define RESIDUAL_SG_COMMAND 0x04
-#define RESET_COMMAND 0x81
-
-
-#define F_USE_CMD_Q 0x20 /*Inidcates TAGGED command. */
-#define TAG_TYPE_MASK 0xC0 /*Type of tag msg to send. */
-#define TAG_Q_MASK 0xE0
-#define SCCB_DATA_XFER_OUT 0x10 /* Write */
-#define SCCB_DATA_XFER_IN 0x08 /* Read */
-
-
-#define FOURTEEN_BYTES 0x00 /* Request Sense Buffer size */
-#define NO_AUTO_REQUEST_SENSE 0x01 /* No Request Sense Buffer */
-
-
-#define BUS_FREE_ST 0
-#define SELECT_ST 1
-#define SELECT_BDR_ST 2 /* Select w\ Bus Device Reset */
-#define SELECT_SN_ST 3 /* Select w\ Sync Nego */
-#define SELECT_WN_ST 4 /* Select w\ Wide Data Nego */
-#define SELECT_Q_ST 5 /* Select w\ Tagged Q'ing */
-#define COMMAND_ST 6
-#define DATA_OUT_ST 7
-#define DATA_IN_ST 8
-#define DISCONNECT_ST 9
-#define STATUS_ST 10
-#define ABORT_ST 11
-#define MESSAGE_ST 12
-
-
-#define F_HOST_XFER_DIR 0x01
-#define F_ALL_XFERRED 0x02
-#define F_SG_XFER 0x04
-#define F_AUTO_SENSE 0x08
-#define F_ODD_BALL_CNT 0x10
-#define F_NO_DATA_YET 0x80
-
-
-#define F_STATUSLOADED 0x01
-#define F_MSGLOADED 0x02
-#define F_DEV_SELECTED 0x04
-
-
-#define SCCB_COMPLETE 0x00 /* SCCB completed without error */
-#define SCCB_DATA_UNDER_RUN 0x0C
-#define SCCB_SELECTION_TIMEOUT 0x11 /* Set SCSI selection timed out */
-#define SCCB_DATA_OVER_RUN 0x12
-#define SCCB_UNEXPECTED_BUS_FREE 0x13 /* Target dropped SCSI BSY */
-#define SCCB_PHASE_SEQUENCE_FAIL 0x14 /* Target bus phase sequence failure
*/
-
-#define SCCB_INVALID_OP_CODE 0x16 /* SCCB invalid operation code */
-#define SCCB_INVALID_SCCB 0x1A /* Invalid SCCB - bad parameter */
-#define SCCB_GROSS_FW_ERR 0x27 /* Major problem! */
-#define SCCB_BM_ERR 0x30 /* BusMaster error. */
-#define SCCB_PARITY_ERR 0x34 /* SCSI parity error */
-
-
-
-#if (FW_TYPE==_UCB_MGR_)
- #define HBA_AUTO_SENSE_FAIL 0x1B
- #define HBA_TQ_REJECTED 0x1C
- #define HBA_UNSUPORTED_MSG 0x1D
- #define HBA_HW_ERROR 0x20
- #define HBA_ATN_NOT_RESPONDED 0x21
- #define HBA_SCSI_RESET_BY_ADAPTER 0x22
- #define HBA_SCSI_RESET_BY_TARGET 0x23
- #define HBA_WRONG_CONNECTION 0x24
- #define HBA_BUS_DEVICE_RESET 0x25
- #define HBA_ABORT_QUEUE 0x26
-
-#else // these are not defined in BUDI/UCB
-
- #define SCCB_INVALID_DIRECTION 0x18 /* Invalid target direction */
- #define SCCB_DUPLICATE_SCCB 0x19 /* Duplicate SCCB */
- #define SCCB_SCSI_RST 0x35 /* SCSI RESET detected. */
-
-#endif // (FW_TYPE==_UCB_MGR_)
-
-
-#define SCCB_IN_PROCESS 0x00
-#define SCCB_SUCCESS 0x01
-#define SCCB_ABORT 0x02
-#define SCCB_NOT_FOUND 0x03
-#define SCCB_ERROR 0x04
-#define SCCB_INVALID 0x05
-
-#define SCCB_SIZE sizeof(SCCB)
-
-
-
-
-#if (FW_TYPE == _UCB_MGR_)
- void SccbMgr_start_sccb(CARD_HANDLE pCurrCard, PUCB p_ucb);
- s32bits SccbMgr_abort_sccb(CARD_HANDLE pCurrCard, PUCB p_ucb);
- u08bits SccbMgr_my_int(CARD_HANDLE pCurrCard);
- s32bits SccbMgr_isr(CARD_HANDLE pCurrCard);
- void SccbMgr_scsi_reset(CARD_HANDLE pCurrCard);
- void SccbMgr_timer_expired(CARD_HANDLE pCurrCard);
- void SccbMgr_unload_card(CARD_HANDLE pCurrCard);
- void SccbMgr_restore_foreign_state(CARD_HANDLE pCurrCard);
- void SccbMgr_restore_native_state(CARD_HANDLE pCurrCard);
- void SccbMgr_save_foreign_state(PADAPTER_INFO pAdapterInfo);
-
-#endif
-
-
-#if (FW_TYPE == _SCCB_MGR_)
-
- #if defined (DOS)
- int SccbMgr_sense_adapter(PSCCBMGR_INFO pCardInfo);
- USHORT SccbMgr_config_adapter(PSCCBMGR_INFO pCardInfo);
- void SccbMgr_start_sccb(USHORT pCurrCard, PSCCB p_SCCB);
- int SccbMgr_abort_sccb(USHORT pCurrCard, PSCCB p_SCCB);
- UCHAR SccbMgr_my_int(USHORT pCurrCard);
- int SccbMgr_isr(USHORT pCurrCard);
- void SccbMgr_scsi_reset(USHORT pCurrCard);
- void SccbMgr_timer_expired(USHORT pCurrCard);
- USHORT SccbMgr_status(USHORT pCurrCard);
- void SccbMgr_unload_card(USHORT pCurrCard);
-
- #else //non-DOS
-
- int SccbMgr_sense_adapter(PSCCBMGR_INFO pCardInfo);
- ULONG SccbMgr_config_adapter(PSCCBMGR_INFO pCardInfo);
- void SccbMgr_start_sccb(ULONG pCurrCard, PSCCB p_SCCB);
- int SccbMgr_abort_sccb(ULONG pCurrCard, PSCCB p_SCCB);
- UCHAR SccbMgr_my_int(ULONG pCurrCard);
- int SccbMgr_isr(ULONG pCurrCard);
- void SccbMgr_scsi_reset(ULONG pCurrCard);
- void SccbMgr_enable_int(ULONG pCurrCard);
- void SccbMgr_disable_int(ULONG pCurrCard);
- void SccbMgr_timer_expired(ULONG pCurrCard);
- void SccbMgr_unload_card(ULONG pCurrCard);
-
- #endif
-#endif // (FW_TYPE == _SCCB_MGR_)
-
-#endif /* __SCCB_H__ */
-
-/*----------------------------------------------------------------------
- *
- *
- * Copyright 1995-1996 by Mylex Corporation. All Rights Reserved
- *
- * This file is available under both the GNU General Public License
- * and a BSD-style copyright; see LICENSE.FlashPoint for details.
- *
- * $Workfile: blx30.h $
- *
- * Description: This module contains SCCB/UCB Manager implementation
- * specific stuff.
- *
- * $Date: 1999/04/26 05:53:56 $
- *
- * $Revision: 1.1 $
- *
- *----------------------------------------------------------------------*/
-
-
-#ifndef __blx30_H__
-#define __blx30_H__
-
-/*#include <globals.h>*/
-
-#define ORION_FW_REV 3110
-
-
-
-
-#define HARP_REVD 1
-
-
-#if defined(DOS)
-#define QUEUE_DEPTH 8+1 /*1 for Normal disconnect 0 for Q'ing.
*/
-#else
-#define QUEUE_DEPTH 254+1 /*1 for Normal disconnect 32 for
Q'ing. */
-#endif // defined(DOS)
-
-#define MAX_MB_CARDS 4 /* Max.
no of cards suppoerted on Mother Board */
-
-#define WIDE_SCSI 1
-
-#if defined(WIDE_SCSI)
- #if defined(DOS)
- #define MAX_SCSI_TAR 16
- #define MAX_LUN 8
- #define LUN_MASK 0x07
- #else
- #define MAX_SCSI_TAR 16
- #define MAX_LUN 32
- #define LUN_MASK 0x1f
-
- #endif
-#else
- #define MAX_SCSI_TAR 8
- #define MAX_LUN 8
- #define LUN_MASK 0x07
-#endif
-
-#if defined(HARP_REVA)
-#define SG_BUF_CNT 15 /*Number of prefetched elements. */
-#else
-#define SG_BUF_CNT 16 /*Number of prefetched elements. */
-#endif
-
-#define SG_ELEMENT_SIZE 8 /*Eight byte per element. */
-#define SG_LOCAL_MASK 0x00000000L
-#define SG_ELEMENT_MASK 0xFFFFFFFFL
-
-
-#if (FW_TYPE == _UCB_MGR_)
- #define OPC_DECODE_NORMAL 0x0f7f
-#endif // _UCB_MGR_
-
-
-
-#if defined(DOS)
-
-/*#include <dos.h>*/
- #define RD_HARPOON(ioport) (OS_InPortByte(ioport))
- #define RDW_HARPOON(ioport) (OS_InPortWord(ioport))
- #define WR_HARPOON(ioport,val) (OS_OutPortByte(ioport,val))
- #define WRW_HARPOON(ioport,val) (OS_OutPortWord(ioport,val))
-
- #define RD_HARP32(port,offset,data) asm{db 66h; \
- push ax; \
- mov dx,port; \
- add dx, offset; \
- db 66h; \
- in ax,dx; \
- db 66h; \
- mov word ptr data,ax;\
- db 66h; \
- pop ax}
-
- #define WR_HARP32(port,offset,data) asm{db 66h; \
- push ax; \
- mov dx,port; \
- add dx, offset; \
- db 66h; \
- mov ax,word ptr data;\
- db 66h; \
- out dx,ax; \
- db 66h; \
- pop ax}
-#endif /* DOS */
-
-#if defined(NETWARE) || defined(OTHER_32) || defined(OTHER_16)
- #define RD_HARPOON(ioport) OS_InPortByte((unsigned long)ioport)
- #define RDW_HARPOON(ioport) OS_InPortWord((unsigned long)ioport)
- #define RD_HARP32(ioport,offset,data) (data = OS_InPortLong(ioport +
offset))
- #define WR_HARPOON(ioport,val) OS_OutPortByte((ULONG)ioport,(UCHAR) val)
- #define WRW_HARPOON(ioport,val)
OS_OutPortWord((ULONG)ioport,(USHORT)val)
- #define WR_HARP32(ioport,offset,data) OS_OutPortLong((ioport +
offset), data)
-#endif /* NETWARE || OTHER_32 || OTHER_16 */
-
-#if defined(NT) || defined(WIN95_32) || defined(WIN95_16)
- #define RD_HARPOON(ioport) OS_InPortByte((ULONG)ioport)
- #define RDW_HARPOON(ioport) OS_InPortWord((ULONG)ioport)
- #define RD_HARP32(ioport,offset,data) (data =
OS_InPortLong((ULONG)(ioport + offset)))
- #define WR_HARPOON(ioport,val)
OS_OutPortByte((ULONG)ioport,(UCHAR) val)
- #define WRW_HARPOON(ioport,val)
OS_OutPortWord((ULONG)ioport,(USHORT)val)
- #define WR_HARP32(ioport,offset,data) OS_OutPortLong((ULONG)(ioport +
offset), data)
-#endif /* NT || WIN95_32 || WIN95_16 */
-
-#if defined (UNIX)
- #define RD_HARPOON(ioport) OS_InPortByte((u32bits)ioport)
- #define RDW_HARPOON(ioport) OS_InPortWord((u32bits)ioport)
- #define RD_HARP32(ioport,offset,data) (data =
OS_InPortLong((u32bits)(ioport + offset)))
- #define WR_HARPOON(ioport,val)
OS_OutPortByte((u32bits)ioport,(u08bits) val)
- #define WRW_HARPOON(ioport,val)
OS_OutPortWord((u32bits)ioport,(u16bits)val)
- #define WR_HARP32(ioport,offset,data) OS_OutPortLong((u32bits)(ioport
+ offset), data)
-#endif /* UNIX */
-
-#if defined(OS2)
- #define RD_HARPOON(ioport) OS_InPortByte((unsigned long)ioport)
- #define RDW_HARPOON(ioport) OS_InPortWord((unsigned long)ioport)
- #define RD_HARP32(ioport,offset,data) (data =
OS_InPortLong((ULONG)(ioport + offset)))
- #define WR_HARPOON(ioport,val)
OS_OutPortByte((ULONG)ioport,(UCHAR) val)
- #define WRW_HARPOON(ioport,val)
OS_OutPortWord((ULONG)ioport,(USHORT)val)
- #define WR_HARP32(ioport,offset,data) OS_OutPortLong(((ULONG)(ioport +
offset)), data)
-#endif /* OS2 */
-
-#if defined(SOLARIS_REAL_MODE)
-
- #define RD_HARPOON(ioport) OS_InPortByte((unsigned long)ioport)
- #define RDW_HARPOON(ioport) OS_InPortWord((unsigned long)ioport)
- #define RD_HARP32(ioport,offset,data) (data =
OS_InPortLong((ULONG)(ioport + offset)))
- #define WR_HARPOON(ioport,val)
OS_OutPortByte((ULONG)ioport,(UCHAR) val)
- #define WRW_HARPOON(ioport,val)
OS_OutPortWord((ULONG)ioport,(USHORT)val)
- #define WR_HARP32(ioport,offset,data) OS_OutPortLong((ULONG)(ioport +
offset), (ULONG)data)
-
-#endif /* SOLARIS_REAL_MODE */
-
-#endif /* __BLX30_H__ */
-
-
-/*----------------------------------------------------------------------
- *
- *
- * Copyright 1995-1996 by Mylex Corporation. All Rights Reserved
- *
- * This file is available under both the GNU General Public License
- * and a BSD-style copyright; see LICENSE.FlashPoint for details.
- *
- * $Workfile: target.h $
- *
- * Description: Definitions for Target related structures
- *
- * $Date: 1999/04/26 05:53:56 $
- *
- * $Revision: 1.1 $
- *
- *----------------------------------------------------------------------*/
-
-#ifndef __TARGET__
-#define __TARGET__
-
-/*#include <globals.h>*/
-/*#include <blx30.h>*/
-
-
-#define TAR_SYNC_MASK (BIT(7)+BIT(6))
-#define SYNC_UNKNOWN 0x00
-#define SYNC_TRYING BIT(6)
-#define SYNC_SUPPORTED (BIT(7)+BIT(6))
-
-#define TAR_WIDE_MASK (BIT(5)+BIT(4))
-#define WIDE_DISABLED 0x00
-#define WIDE_ENABLED BIT(4)
-#define WIDE_NEGOCIATED BIT(5)
-
-#define TAR_TAG_Q_MASK (BIT(3)+BIT(2))
-#define TAG_Q_UNKNOWN 0x00
-#define TAG_Q_TRYING BIT(2)
-#define TAG_Q_REJECT BIT(3)
-#define TAG_Q_SUPPORTED (BIT(3)+BIT(2))
-
-#define TAR_ALLOW_DISC BIT(0)
-
-
-#define EE_SYNC_MASK (BIT(0)+BIT(1))
-#define EE_SYNC_ASYNC 0x00
-#define EE_SYNC_5MB BIT(0)
-#define EE_SYNC_10MB BIT(1)
-#define EE_SYNC_20MB (BIT(0)+BIT(1))
-
-#define EE_ALLOW_DISC BIT(6)
-#define EE_WIDE_SCSI BIT(7)
-
-
-#if defined(DOS)
- typedef struct SCCBMgr_tar_info near *PSCCBMgr_tar_info;
-
-#elif defined(OS2)
- typedef struct SCCBMgr_tar_info far *PSCCBMgr_tar_info;
-
-#else
- typedef struct SCCBMgr_tar_info *PSCCBMgr_tar_info;
-
-#endif
-
-
-typedef struct SCCBMgr_tar_info {
-
- PSCCB TarSelQ_Head;
- PSCCB TarSelQ_Tail;
- UCHAR TarLUN_CA; /*Contingent Allgiance */
- UCHAR TarTagQ_Cnt;
- UCHAR TarSelQ_Cnt;
- UCHAR TarStatus;
- UCHAR TarEEValue;
- UCHAR TarSyncCtrl;
- UCHAR TarReserved[2]; /* for alignment */
- UCHAR LunDiscQ_Idx[MAX_LUN];
- UCHAR TarLUNBusy[MAX_LUN];
-} SCCBMGR_TAR_INFO;
-
-typedef struct NVRAMInfo {
- UCHAR niModel;
/* Model No. of card */
- UCHAR niCardNo;
/* Card no. */
-#if defined(DOS)
- USHORT niBaseAddr;
/* Port Address of card */
-#else
- ULONG niBaseAddr;
/* Port Address of card */
-#endif
- UCHAR niSysConf;
/* Adapter Configuration byte - Byte 16 of eeprom map */
- UCHAR niScsiConf;
/* SCSI Configuration byte - Byte 17 of eeprom map */
- UCHAR niScamConf;
/* SCAM Configuration byte - Byte 20 of eeprom map */
- UCHAR niAdapId;
/* Host Adapter ID - Byte 24 of eerpom map */
- UCHAR niSyncTbl[MAX_SCSI_TAR / 2]; /* Sync/Wide byte of
targets */
- UCHAR niScamTbl[MAX_SCSI_TAR][4]; /* Compressed Scam name
string of Targets */
-}NVRAMINFO;
-
-#if defined(DOS)
-typedef NVRAMINFO near *PNVRamInfo;
-#elif defined (OS2)
-typedef NVRAMINFO far *PNVRamInfo;
-#else
-typedef NVRAMINFO *PNVRamInfo;
-#endif
-
-#define MODEL_LT 1
-#define MODEL_DL 2
-#define MODEL_LW 3
-#define MODEL_DW 4
-
-
-typedef struct SCCBcard {
- PSCCB currentSCCB;
-#if (FW_TYPE==_SCCB_MGR_)
- PSCCBMGR_INFO cardInfo;
-#else
- PADAPTER_INFO cardInfo;
-#endif
-
-#if defined(DOS)
- USHORT ioPort;
-#else
- ULONG ioPort;
-#endif
-
- USHORT cmdCounter;
- UCHAR discQCount;
- UCHAR tagQ_Lst;
- UCHAR cardIndex;
- UCHAR scanIndex;
- UCHAR globalFlags;
- UCHAR ourId;
- PNVRamInfo pNvRamInfo;
- PSCCB discQ_Tbl[QUEUE_DEPTH];
-
-}SCCBCARD;
-
-#if defined(DOS)
-typedef struct SCCBcard near *PSCCBcard;
-#elif defined (OS2)
-typedef struct SCCBcard far *PSCCBcard;
-#else
-typedef struct SCCBcard *PSCCBcard;
-#endif
-
-
-#define F_TAG_STARTED 0x01
-#define F_CONLUN_IO 0x02
-#define F_DO_RENEGO 0x04
-#define F_NO_FILTER 0x08
-#define F_GREEN_PC 0x10
-#define F_HOST_XFER_ACT 0x20
-#define F_NEW_SCCB_CMD 0x40
-#define F_UPDATE_EEPROM 0x80
-
-
-#define ID_STRING_LENGTH 32
-#define TYPE_CODE0 0x63 /*Level2 Mstr (bits 7-6), */
-
-#define TYPE_CODE1 00 /*No ID yet */
-
-#define SLV_TYPE_CODE0 0xA3 /*Priority Bit set (bits 7-6), */
-
-#define ASSIGN_ID 0x00
-#define SET_P_FLAG 0x01
-#define CFG_CMPLT 0x03
-#define DOM_MSTR 0x0F
-#define SYNC_PTRN 0x1F
-
-#define ID_0_7 0x18
-#define ID_8_F 0x11
-#define ID_10_17 0x12
-#define ID_18_1F 0x0B
-#define MISC_CODE 0x14
-#define CLR_P_FLAG 0x18
-#define LOCATE_ON 0x12
-#define LOCATE_OFF 0x0B
-
-#define LVL_1_MST 0x00
-#define LVL_2_MST 0x40
-#define DOM_LVL_2 0xC0
-
-
-#define INIT_SELTD 0x01
-#define LEVEL2_TAR 0x02
-
-
-enum scam_id_st { ID0,ID1,ID2,ID3,ID4,ID5,ID6,ID7,ID8,ID9,ID10,ID11,ID12,
- ID13,ID14,ID15,ID_UNUSED,ID_UNASSIGNED,ID_ASSIGNED,LEGACY,
- CLR_PRIORITY,NO_ID_AVAIL };
-
-typedef struct SCCBscam_info {
-
- UCHAR id_string[ID_STRING_LENGTH];
- enum scam_id_st state;
-
-} SCCBSCAM_INFO, *PSCCBSCAM_INFO;
-
-#endif
-/*----------------------------------------------------------------------
- *
- *
- * Copyright 1995-1996 by Mylex Corporation. All Rights Reserved
- *
- * This file is available under both the GNU General Public License
- * and a BSD-style copyright; see LICENSE.FlashPoint for details.
- *
- * $Workfile: scsi2.h $
- *
- * Description: Register definitions for HARPOON ASIC.
- *
- * $Date: 1999/04/26 05:53:56 $
- *
- * $Revision: 1.1 $
- *
- *----------------------------------------------------------------------*/
-
-#ifndef __SCSI_H__
-#define __SCSI_H__
-
-
-
-#define SCSI_TEST_UNIT_READY 0x00
-#define SCSI_REZERO_UNIT 0x01
-#define SCSI_REQUEST_SENSE 0x03
-#define SCSI_FORMAT_UNIT 0x04
-#define SCSI_REASSIGN 0x07
-#define SCSI_READ 0x08
-#define SCSI_WRITE 0x0A
-#define SCSI_SEEK 0x0B
-#define SCSI_INQUIRY 0x12
-#define SCSI_MODE_SELECT 0x15
-#define SCSI_RESERVE_UNIT 0x16
-#define SCSI_RELEASE_UNIT 0x17
-#define SCSI_MODE_SENSE 0x1A
-#define SCSI_START_STOP_UNIT 0x1B
-#define SCSI_SEND_DIAGNOSTIC 0x1D
-#define SCSI_READ_CAPACITY 0x25
-#define SCSI_READ_EXTENDED 0x28
-#define SCSI_WRITE_EXTENDED 0x2A
-#define SCSI_SEEK_EXTENDED 0x2B
-#define SCSI_WRITE_AND_VERIFY 0x2E
-#define SCSI_VERIFY 0x2F
-#define SCSI_READ_DEFECT_DATA 0x37
-#define SCSI_WRITE_BUFFER 0x3B
-#define SCSI_READ_BUFFER 0x3C
-#define SCSI_RECV_DIAGNOSTIC 0x1C
-#define SCSI_READ_LONG 0x3E
-#define SCSI_WRITE_LONG 0x3F
-#define SCSI_LAST_SCSI_CMND SCSI_WRITE_LONG
-#define SCSI_INVALID_CMND 0xFF
-
-
-
-#define SSGOOD 0x00
-#define SSCHECK 0x02
-#define SSCOND_MET 0x04
-#define SSBUSY 0x08
-#define SSRESERVATION_CONFLICT 0x18
-#define SSCMD_TERM 0x22
-#define SSQ_FULL 0x28
-
-
-#define SKNO_SEN 0x00
-#define SKRECOV_ERR 0x01
-#define SKNOT_RDY 0x02
-#define SKMED_ERR 0x03
-#define SKHW_ERR 0x04
-#define SKILL_REQ 0x05
-#define SKUNIT_ATTN 0x06
-#define SKDATA_PROTECT 0x07
-#define SKBLNK_CHK 0x08
-#define SKCPY_ABORT 0x0A
-#define SKABORT_CMD 0x0B
-#define SKEQUAL 0x0C
-#define SKVOL_OVF 0x0D
-#define SKMIS_CMP 0x0E
-
-
-#define SMCMD_COMP 0x00
-#define SMEXT 0x01
-#define SMSAVE_DATA_PTR 0x02
-#define SMREST_DATA_PTR 0x03
-#define SMDISC 0x04
-#define SMINIT_DETEC_ERR 0x05
-#define SMABORT 0x06
-#define SMREJECT 0x07
-#define SMNO_OP 0x08
-#define SMPARITY 0x09
-#define SMDEV_RESET 0x0C
-#define SMABORT_TAG 0x0D
-#define SMINIT_RECOVERY 0x0F
-#define SMREL_RECOVERY 0x10
-
-#define SMIDENT 0x80
-#define DISC_PRIV 0x40
-
-
-#define SMSYNC 0x01
-#define SM10MBS 0x19 /* 100ns */
-#define SM5MBS 0x32 /* 200ns */
-#define SMOFFSET 0x0F /* Maxoffset value */
-#define SMWDTR 0x03
-#define SM8BIT 0x00
-#define SM16BIT 0x01
-#define SM32BIT 0x02
-#define SMIGNORWR 0x23 /* Ignore Wide Residue */
-
-
-#define ARBITRATION_DELAY 0x01 /* 2.4us using a 40Mhz clock */
-#define BUS_SETTLE_DELAY 0x01 /* 400ns */
-#define BUS_CLEAR_DELAY 0x01 /* 800ns */
-
-
-
-#define SPHASE_TO 0x0A /* 10 second timeout waiting for */
-#define SCMD_TO 0x0F /* Overall command timeout */
-
-
-
-#define SIX_BYTE_CMD 0x06
-#define TEN_BYTE_CMD 0x0A
-#define TWELVE_BYTE_CMD 0x0C
-
-#define ASYNC 0x00
-#define PERI25NS 0x06 /* 25/4ns to next clock for xbow. */
-#define SYNC10MBS 0x19
-#define SYNC5MBS 0x32
-#define MAX_OFFSET 0x0F /* Maxbyteoffset for Sync Xfers */
-
-#endif
-/*----------------------------------------------------------------------
- *
- *
- * Copyright 1995-1996 by Mylex Corporation. All Rights Reserved
- *
- * This file is available under both the GNU General Public License
- * and a BSD-style copyright; see LICENSE.FlashPoint for details.
- *
- * $Workfile: eeprom.h $
- *
- * Description: Definitions for EEPROM related structures
- *
- * $Date: 1999/04/26 05:53:56 $
- *
- * $Revision: 1.1 $
- *
- *----------------------------------------------------------------------*/
-
-#ifndef __EEPROM__
-#define __EEPROM__
-
-/*#include <globals.h>*/
-
-#define EEPROM_WD_CNT 256
-
-#define EEPROM_CHECK_SUM 0
-#define FW_SIGNATURE 2
-#define MODEL_NUMB_0 4
-#define MODEL_NUMB_1 5
-#define MODEL_NUMB_2 6
-#define MODEL_NUMB_3 7
-#define MODEL_NUMB_4 8
-#define MODEL_NUMB_5 9
-#define IO_BASE_ADDR 10
-#define IRQ_NUMBER 12
-#define PCI_INT_PIN 13
-#define BUS_DELAY 14 /*On time in byte 14 off delay in 15 */
-#define SYSTEM_CONFIG 16
-#define SCSI_CONFIG 17
-#define BIOS_CONFIG 18
-#define SPIN_UP_DELAY 19
-#define SCAM_CONFIG 20
-#define ADAPTER_SCSI_ID 24
-
-
-#define IGNORE_B_SCAN 32
-#define SEND_START_ENA 34
-#define DEVICE_ENABLE 36
-
-#define SYNC_RATE_TBL 38
-#define SYNC_RATE_TBL01 38
-#define SYNC_RATE_TBL23 40
-#define SYNC_RATE_TBL45 42
-#define SYNC_RATE_TBL67 44
-#define SYNC_RATE_TBL89 46
-#define SYNC_RATE_TBLab 48
-#define SYNC_RATE_TBLcd 50
-#define SYNC_RATE_TBLef 52
-
-
-
-#define EE_SCAMBASE 256
-
-
-
- #define DOM_MASTER (BIT(0) + BIT(1))
- #define SCAM_ENABLED BIT(2)
- #define SCAM_LEVEL2 BIT(3)
-
-
- #define RENEGO_ENA BITW(10)
- #define CONNIO_ENA BITW(11)
- #define GREEN_PC_ENA BITW(12)
-
-
- #define AUTO_RATE_00 00
- #define AUTO_RATE_05 01
- #define AUTO_RATE_10 02
- #define AUTO_RATE_20 03
-
- #define WIDE_NEGO_BIT BIT(7)
- #define DISC_ENABLE_BIT BIT(6)
-
-
-#endif
-/*----------------------------------------------------------------------
- *
- *
- * Copyright 1995-1996 by Mylex Corporation. All Rights Reserved
- *
- * This file is available under both the GNU General Public License
- * and a BSD-style copyright; see LICENSE.FlashPoint for details.
- *
- * $Workfile: harpoon.h $
- *
- * Description: Register definitions for HARPOON ASIC.
- *
- * $Date: 1999/04/26 05:53:56 $
- *
- * $Revision: 1.1 $
- *
- *----------------------------------------------------------------------*/
-
-
-/*#include <globals.h>*/
-
-#ifndef __HARPOON__
-#define __HARPOON__
-
-
- #define hp_vendor_id_0 0x00 /* LSB */
- #define ORION_VEND_0 0x4B
-
- #define hp_vendor_id_1 0x01 /* MSB */
- #define ORION_VEND_1 0x10
-
- #define hp_device_id_0 0x02 /* LSB */
- #define ORION_DEV_0 0x30
-
- #define hp_device_id_1 0x03 /* MSB */
- #define ORION_DEV_1 0x81
-
- /* Sub Vendor ID and Sub Device ID only available in
- Harpoon Version 2 and higher */
-
- #define hp_sub_vendor_id_0 0x04 /* LSB */
- #define hp_sub_vendor_id_1 0x05 /* MSB */
- #define hp_sub_device_id_0 0x06 /* LSB */
- #define hp_sub_device_id_1 0x07 /* MSB */
-
-
- #define hp_dual_addr_lo 0x08
- #define hp_dual_addr_lmi 0x09
- #define hp_dual_addr_hmi 0x0A
- #define hp_dual_addr_hi 0x0B
-
- #define hp_semaphore 0x0C
- #define SCCB_MGR_ACTIVE BIT(0)
- #define TICKLE_ME BIT(1)
- #define SCCB_MGR_PRESENT BIT(3)
- #define BIOS_IN_USE BIT(4)
-
- #define hp_user_defined_D 0x0D
-
- #define hp_reserved_E 0x0E
-
- #define hp_sys_ctrl 0x0F
-
- #define STOP_CLK BIT(0) /*Turn off BusMaster Clock */
- #define DRVR_RST BIT(1) /*Firmware Reset to 80C15 chip */
- #define HALT_MACH BIT(3) /*Halt State Machine */
- #define HARD_ABORT BIT(4) /*Hard Abort */
- #define DIAG_MODE BIT(5) /*Diagnostic Mode */
-
- #define BM_ABORT_TMOUT 0x50 /*Halt State machine time out */
-
- #define hp_sys_cfg 0x10
-
- #define DONT_RST_FIFO BIT(7) /*Don't reset FIFO */
-
-
- #define hp_host_ctrl0 0x11
-
- #define DUAL_ADDR_MODE BIT(0) /*Enable 64-bit addresses */
- #define IO_MEM_SPACE BIT(1) /*I/O Memory Space */
- #define RESOURCE_LOCK BIT(2) /*Enable Resource Lock */
- #define IGNOR_ACCESS_ERR BIT(3) /*Ignore Access Error */
- #define HOST_INT_EDGE BIT(4) /*Host interrupt level/edge mode sel
*/
- #define SIX_CLOCKS BIT(5) /*6 Clocks between Strobe */
- #define DMA_EVEN_PARITY BIT(6) /*Enable DMA Enen Parity */
-
-/*
- #define BURST_MODE BIT(0)
-*/
-
- #define hp_reserved_12 0x12
-
- #define hp_host_blk_cnt 0x13
-
- #define XFER_BLK1 0x00 /* 0 0 0 1 byte per block*/
- #define XFER_BLK2 0x01 /* 0 0 1 2 byte per block*/
- #define XFER_BLK4 0x02 /* 0 1 0 4 byte per block*/
- #define XFER_BLK8 0x03 /* 0 1 1 8 byte per block*/
- #define XFER_BLK16 0x04 /* 1 0 0 16 byte per block*/
- #define XFER_BLK32 0x05 /* 1 0 1 32 byte per block*/
- #define XFER_BLK64 0x06 /* 1 1 0 64 byte per block*/
-
- #define BM_THRESHOLD 0x40 /* PCI mode can only xfer 16 bytes*/
-
-
- #define hp_reserved_14 0x14
- #define hp_reserved_15 0x15
- #define hp_reserved_16 0x16
-
- #define hp_int_mask 0x17
-
- #define INT_CMD_COMPL BIT(0) /* DMA command complete */
- #define INT_EXT_STATUS BIT(1) /* Extended Status Set */
- #define INT_SCSI BIT(2) /* Scsi block interrupt */
- #define INT_FIFO_RDY BIT(4) /* FIFO data ready */
-
-
- #define hp_xfer_cnt_lo 0x18
- #define hp_xfer_cnt_mi 0x19
- #define hp_xfer_cnt_hi 0x1A
- #define hp_xfer_cmd 0x1B
-
- #define XFER_HOST_DMA 0x00 /* 0 0 0 Transfer Host -> DMA */
- #define XFER_DMA_HOST 0x01 /* 0 0 1 Transfer DMA -> Host */
- #define XFER_HOST_MPU 0x02 /* 0 1 0 Transfer Host -> MPU */
- #define XFER_MPU_HOST 0x03 /* 0 1 1 Transfer MPU -> Host */
- #define XFER_DMA_MPU 0x04 /* 1 0 0 Transfer DMA -> MPU */
- #define XFER_MPU_DMA 0x05 /* 1 0 1 Transfer MPU -> DMA */
- #define SET_SEMAPHORE 0x06 /* 1 1 0 Set Semaphore */
- #define XFER_NOP 0x07 /* 1 1 1 Transfer NOP */
- #define XFER_MB_MPU 0x06 /* 1 1 0 Transfer MB -> MPU */
- #define XFER_MB_DMA 0x07 /* 1 1 1 Transfer MB -> DMA */
-
-
- #define XFER_HOST_AUTO 0x00 /* 0 0 Auto Transfer Size */
- #define XFER_HOST_8BIT 0x08 /* 0 1 8 BIT Transfer Size */
- #define XFER_HOST_16BIT 0x10 /* 1 0 16 BIT Transfer Size */
- #define XFER_HOST_32BIT 0x18 /* 1 1 32 BIT Transfer Size */
-
- #define XFER_DMA_8BIT 0x20 /* 0 1 8 BIT Transfer Size */
- #define XFER_DMA_16BIT 0x40 /* 1 0 16 BIT Transfer Size */
-
- #define DISABLE_INT BIT(7) /*Do not interrupt at end of cmd. */
-
- #define HOST_WRT_CMD ((DISABLE_INT + XFER_HOST_DMA +
XFER_HOST_AUTO + XFER_DMA_8BIT))
- #define HOST_RD_CMD ((DISABLE_INT + XFER_DMA_HOST +
XFER_HOST_AUTO + XFER_DMA_8BIT))
- #define WIDE_HOST_WRT_CMD ((DISABLE_INT + XFER_HOST_DMA +
XFER_HOST_AUTO + XFER_DMA_16BIT))
- #define WIDE_HOST_RD_CMD ((DISABLE_INT + XFER_DMA_HOST +
XFER_HOST_AUTO + XFER_DMA_16BIT))
-
- #define hp_host_addr_lo 0x1C
- #define hp_host_addr_lmi 0x1D
- #define hp_host_addr_hmi 0x1E
- #define hp_host_addr_hi 0x1F
-
- #define hp_pio_data 0x20
- #define hp_reserved_21 0x21
- #define hp_ee_ctrl 0x22
-
- #define EXT_ARB_ACK BIT(7)
- #define SCSI_TERM_ENA_H BIT(6) /* SCSI high byte terminator */
- #define SEE_MS BIT(5)
- #define SEE_CS BIT(3)
- #define SEE_CLK BIT(2)
- #define SEE_DO BIT(1)
- #define SEE_DI BIT(0)
-
- #define EE_READ 0x06
- #define EE_WRITE 0x05
- #define EWEN 0x04
- #define EWEN_ADDR 0x03C0
- #define EWDS 0x04
- #define EWDS_ADDR 0x0000
-
- #define hp_brdctl 0x23
-
- #define DAT_7 BIT(7)
- #define DAT_6 BIT(6)
- #define DAT_5 BIT(5)
- #define BRD_STB BIT(4)
- #define BRD_CS BIT(3)
- #define BRD_WR BIT(2)
-
- #define hp_reserved_24 0x24
- #define hp_reserved_25 0x25
-
-
-
-
- #define hp_bm_ctrl 0x26
-
- #define SCSI_TERM_ENA_L BIT(0) /*Enable/Disable external
terminators */
- #define FLUSH_XFER_CNTR BIT(1) /*Flush transfer counter */
- #define BM_XFER_MIN_8 BIT(2) /*Enable bus master transfer of 9 */
- #define BIOS_ENA BIT(3) /*Enable BIOS/FLASH Enable */
- #define FORCE1_XFER BIT(5) /*Always xfer one byte in byte mode
*/
- #define FAST_SINGLE BIT(6) /*?? */
-
- #define BMCTRL_DEFAULT (FORCE1_XFER|FAST_SINGLE|SCSI_TERM_ENA_L)
-
- #define hp_reserved_27 0x27
-
- #define hp_sg_addr 0x28
- #define hp_page_ctrl 0x29
-
- #define SCATTER_EN BIT(0)
- #define SGRAM_ARAM BIT(1)
- #define BIOS_SHADOW BIT(2)
- #define G_INT_DISABLE BIT(3) /* Enable/Disable all Interrupts */
- #define NARROW_SCSI_CARD BIT(4) /* NARROW/WIDE SCSI config pin */
-
- #define hp_reserved_2A 0x2A
- #define hp_pci_cmd_cfg 0x2B
-
- #define IO_SPACE_ENA BIT(0) /*enable I/O space */
- #define MEM_SPACE_ENA BIT(1) /*enable memory space */
- #define BUS_MSTR_ENA BIT(2) /*enable bus master operation */
- #define MEM_WI_ENA BIT(4) /*enable Write and Invalidate */
- #define PAR_ERR_RESP BIT(6) /*enable parity error responce. */
-
- #define hp_reserved_2C 0x2C
-
- #define hp_pci_stat_cfg 0x2D
-
- #define DATA_PARITY_ERR BIT(0)
- #define REC_TARGET_ABORT BIT(4) /*received Target abort */
- #define REC_MASTER_ABORT BIT(5) /*received Master abort */
- #define SIG_SYSTEM_ERR BIT(6)
- #define DETECTED_PAR_ERR BIT(7)
-
- #define hp_reserved_2E 0x2E
-
- #define hp_sys_status 0x2F
-
- #define SLV_DATA_RDY BIT(0) /*Slave data ready */
- #define XFER_CNT_ZERO BIT(1) /*Transfer counter = 0 */
- #define BM_FIFO_EMPTY BIT(2) /*FIFO empty */
- #define BM_FIFO_FULL BIT(3) /*FIFO full */
- #define HOST_OP_DONE BIT(4) /*host operation done */
- #define DMA_OP_DONE BIT(5) /*DMA operation done */
- #define SLV_OP_DONE BIT(6) /*Slave operation done */
- #define PWR_ON_FLAG BIT(7) /*Power on flag */
-
- #define hp_reserved_30 0x30
-
- #define hp_host_status0 0x31
-
- #define HOST_TERM BIT(5) /*Host Terminal Count */
- #define HOST_TRSHLD BIT(6) /*Host Threshold */
- #define CONNECTED_2_HOST BIT(7) /*Connected to Host */
-
- #define hp_reserved_32 0x32
-
- #define hp_rev_num 0x33
-
- #define REV_A_CONST 0x0E
- #define REV_B_CONST 0x0E
-
- #define hp_stack_data 0x34
- #define hp_stack_addr 0x35
-
- #define hp_ext_status 0x36
-
- #define BM_FORCE_OFF BIT(0) /*Bus Master is forced to get off */
- #define PCI_TGT_ABORT BIT(0) /*PCI bus master transaction aborted
*/
- #define PCI_DEV_TMOUT BIT(1) /*PCI Device Time out */
- #define FIFO_TC_NOT_ZERO BIT(2) /*FIFO or transfer counter not zero
*/
- #define CHIP_RST_OCCUR BIT(3) /*Chip reset occurs */
- #define CMD_ABORTED BIT(4) /*Command aborted */
- #define BM_PARITY_ERR BIT(5) /*parity error on data received */
- #define PIO_OVERRUN BIT(6) /*Slave data overrun */
- #define BM_CMD_BUSY BIT(7) /*Bus master transfer command busy */
- #define BAD_EXT_STATUS (BM_FORCE_OFF | PCI_DEV_TMOUT | CMD_ABORTED |
\
- BM_PARITY_ERR | PIO_OVERRUN)
-
- #define hp_int_status 0x37
-
- #define BM_CMD_CMPL BIT(0) /*Bus Master command complete */
- #define EXT_STATUS_ON BIT(1) /*Extended status is valid */
- #define SCSI_INTERRUPT BIT(2) /*Global indication of a SCSI int. */
- #define BM_FIFO_RDY BIT(4)
- #define INT_ASSERTED BIT(5) /* */
- #define SRAM_BUSY BIT(6) /*Scatter/Gather RAM busy */
- #define CMD_REG_BUSY BIT(7)
-
-
- #define hp_fifo_cnt 0x38
- #define hp_curr_host_cnt 0x39
- #define hp_reserved_3A 0x3A
- #define hp_fifo_in_addr 0x3B
-
- #define hp_fifo_out_addr 0x3C
- #define hp_reserved_3D 0x3D
- #define hp_reserved_3E 0x3E
- #define hp_reserved_3F 0x3F
-
-
-
- extern USHORT default_intena;
-
- #define hp_intena 0x40
-
- #define RESET BITW(7)
- #define PROG_HLT BITW(6)
- #define PARITY BITW(5)
- #define FIFO BITW(4)
- #define SEL BITW(3)
- #define SCAM_SEL BITW(2)
- #define RSEL BITW(1)
- #define TIMEOUT BITW(0)
- #define BUS_FREE BITW(15)
- #define XFER_CNT_0 BITW(14)
- #define PHASE BITW(13)
- #define IUNKWN BITW(12)
- #define ICMD_COMP BITW(11)
- #define ITICKLE BITW(10)
- #define IDO_STRT BITW(9)
- #define ITAR_DISC BITW(8)
- #define AUTO_INT
(BITW(12)+BITW(11)+BITW(10)+BITW(9)+BITW(8))
- #define CLR_ALL_INT 0xFFFF
- #define CLR_ALL_INT_1 0xFF00
-
- #define hp_intstat 0x42
-
- #define hp_scsisig 0x44
-
- #define SCSI_SEL BIT(7)
- #define SCSI_BSY BIT(6)
- #define SCSI_REQ BIT(5)
- #define SCSI_ACK BIT(4)
- #define SCSI_ATN BIT(3)
- #define SCSI_CD BIT(2)
- #define SCSI_MSG BIT(1)
- #define SCSI_IOBIT BIT(0)
-
- #define S_SCSI_PHZ (BIT(2)+BIT(1)+BIT(0))
- #define S_CMD_PH (BIT(2) )
- #define S_MSGO_PH (BIT(2)+BIT(1) )
- #define S_STAT_PH (BIT(2) +BIT(0))
- #define S_MSGI_PH (BIT(2)+BIT(1)+BIT(0))
- #define S_DATAI_PH ( BIT(0))
- #define S_DATAO_PH 0x00
- #define S_ILL_PH ( BIT(1) )
-
- #define hp_scsictrl_0 0x45
-
- #define NO_ARB BIT(7)
- #define SEL_TAR BIT(6)
- #define ENA_ATN BIT(4)
- #define ENA_RESEL BIT(2)
- #define SCSI_RST BIT(1)
- #define ENA_SCAM_SEL BIT(0)
-
-
-
- #define hp_portctrl_0 0x46
-
- #define SCSI_PORT BIT(7)
- #define SCSI_INBIT BIT(6)
- #define DMA_PORT BIT(5)
- #define DMA_RD BIT(4)
- #define HOST_PORT BIT(3)
- #define HOST_WRT BIT(2)
- #define SCSI_BUS_EN BIT(1)
- #define START_TO BIT(0)
-
- #define hp_scsireset 0x47
-
- #define SCSI_TAR BIT(7)
- #define SCSI_INI BIT(6)
- #define SCAM_EN BIT(5)
- #define ACK_HOLD BIT(4)
- #define DMA_RESET BIT(3)
- #define HPSCSI_RESET BIT(2)
- #define PROG_RESET BIT(1)
- #define FIFO_CLR BIT(0)
-
- #define hp_xfercnt_0 0x48
- #define hp_xfercnt_1 0x49
- #define hp_xfercnt_2 0x4A
- #define hp_xfercnt_3 0x4B
-
- #define hp_fifodata_0 0x4C
- #define hp_fifodata_1 0x4D
- #define hp_addstat 0x4E
-
- #define SCAM_TIMER BIT(7)
- #define AUTO_RUNNING BIT(6)
- #define FAST_SYNC BIT(5)
- #define SCSI_MODE8 BIT(3)
- #define SCSI_PAR_ERR BIT(0)
-
- #define hp_prgmcnt_0 0x4F
-
- #define AUTO_PC_MASK 0x3F
-
- #define hp_selfid_0 0x50
- #define hp_selfid_1 0x51
- #define hp_arb_id 0x52
-
- #define ARB_ID (BIT(3) + BIT(2) + BIT(1) + BIT(0))
-
- #define hp_select_id 0x53
-
- #define RESEL_ID (BIT(7) + BIT(6) + BIT(5) + BIT(4))
- #define SELECT_ID (BIT(3) + BIT(2) + BIT(1) + BIT(0))
-
- #define hp_synctarg_base 0x54
- #define hp_synctarg_12 0x54
- #define hp_synctarg_13 0x55
- #define hp_synctarg_14 0x56
- #define hp_synctarg_15 0x57
-
- #define hp_synctarg_8 0x58
- #define hp_synctarg_9 0x59
- #define hp_synctarg_10 0x5A
- #define hp_synctarg_11 0x5B
-
- #define hp_synctarg_4 0x5C
- #define hp_synctarg_5 0x5D
- #define hp_synctarg_6 0x5E
- #define hp_synctarg_7 0x5F
-
- #define hp_synctarg_0 0x60
- #define hp_synctarg_1 0x61
- #define hp_synctarg_2 0x62
- #define hp_synctarg_3 0x63
-
- #define RATE_20MB 0x00
- #define RATE_10MB ( BIT(5))
- #define RATE_6_6MB ( BIT(6) )
- #define RATE_5MB ( BIT(6)+BIT(5))
- #define RATE_4MB (BIT(7) )
- #define RATE_3_33MB (BIT(7) +BIT(5))
- #define RATE_2_85MB (BIT(7)+BIT(6) )
- #define RATE_2_5MB (BIT(7)+BIT(5)+BIT(6))
- #define NEXT_CLK BIT(5)
- #define SLOWEST_SYNC (BIT(7)+BIT(6)+BIT(5))
- #define NARROW_SCSI BIT(4)
- #define SYNC_OFFSET (BIT(3) + BIT(2) + BIT(1) + BIT(0))
- #define DEFAULT_ASYNC 0x00
- #define DEFAULT_OFFSET 0x0F
-
- #define hp_autostart_0 0x64
- #define hp_autostart_1 0x65
- #define hp_autostart_2 0x66
- #define hp_autostart_3 0x67
-
-
-
- #define DISABLE 0x00
- #define AUTO_IMMED BIT(5)
- #define SELECT BIT(6)
- #define RESELECT (BIT(6)+BIT(5))
- #define BUSFREE BIT(7)
- #define XFER_0 (BIT(7)+BIT(5))
- #define END_DATA (BIT(7)+BIT(6))
- #define MSG_PHZ (BIT(7)+BIT(6)+BIT(5))
-
- #define hp_gp_reg_0 0x68
- #define hp_gp_reg_1 0x69
- #define hp_gp_reg_2 0x6A
- #define hp_gp_reg_3 0x6B
-
- #define hp_seltimeout 0x6C
-
-
- #define TO_2ms 0x54 /* 2.0503ms */
- #define TO_4ms 0x67 /* 3.9959ms */
-
- #define TO_5ms 0x03 /* 4.9152ms */
- #define TO_10ms 0x07 /* 11.xxxms */
- #define TO_250ms 0x99 /* 250.68ms */
- #define TO_290ms 0xB1 /* 289.99ms */
- #define TO_350ms 0xD6 /* 350.62ms */
- #define TO_417ms 0xFF /* 417.79ms */
-
- #define hp_clkctrl_0 0x6D
-
- #define PWR_DWN BIT(6)
- #define ACTdeassert BIT(4)
- #define ATNonErr BIT(3)
- #define CLK_30MHZ BIT(1)
- #define CLK_40MHZ (BIT(1) + BIT(0))
- #define CLK_50MHZ BIT(2)
-
- #define CLKCTRL_DEFAULT (ACTdeassert | CLK_40MHZ)
-
- #define hp_fiforead 0x6E
- #define hp_fifowrite 0x6F
-
- #define hp_offsetctr 0x70
- #define hp_xferstat 0x71
-
- #define FIFO_FULL BIT(7)
- #define FIFO_EMPTY BIT(6)
- #define FIFO_MASK 0x3F /* Mask for the FIFO count value. */
- #define FIFO_LEN 0x20
-
- #define hp_portctrl_1 0x72
-
- #define EVEN_HOST_P BIT(5)
- #define INVT_SCSI BIT(4)
- #define CHK_SCSI_P BIT(3)
- #define HOST_MODE8 BIT(0)
- #define HOST_MODE16 0x00
-
- #define hp_xfer_pad 0x73
-
- #define ID_UNLOCK BIT(3)
- #define XFER_PAD BIT(2)
-
- #define hp_scsidata_0 0x74
- #define hp_scsidata_1 0x75
- #define hp_timer_0 0x76
- #define hp_timer_1 0x77
-
- #define hp_reserved_78 0x78
- #define hp_reserved_79 0x79
- #define hp_reserved_7A 0x7A
- #define hp_reserved_7B 0x7B
-
- #define hp_reserved_7C 0x7C
- #define hp_reserved_7D 0x7D
- #define hp_reserved_7E 0x7E
- #define hp_reserved_7F 0x7F
-
- #define hp_aramBase 0x80
- #define BIOS_DATA_OFFSET 0x60
- #define BIOS_RELATIVE_CARD 0x64
-
-
-
-
- #define AUTO_LEN 0x80
- #define AR0 0x00
- #define AR1 BITW(8)
- #define AR2 BITW(9)
- #define AR3 (BITW(9) + BITW(8))
- #define SDATA BITW(10)
-
- #define NOP_OP 0x00 /* Nop command */
-
- #define CRD_OP BITW(11) /* Cmp Reg. w/ Data */
-
- #define CRR_OP BITW(12) /* Cmp Reg. w. Reg. */
-
- #define CBE_OP (BITW(14)+BITW(12)+BITW(11)) /* Cmp SCSI cmd class &
Branch EQ */
-
- #define CBN_OP (BITW(14)+BITW(13)) /* Cmp SCSI cmd class & Branch
NOT EQ */
-
- #define CPE_OP (BITW(14)+BITW(11)) /* Cmp SCSI phs & Branch EQ */
-
- #define CPN_OP (BITW(14)+BITW(12)) /* Cmp SCSI phs & Branch NOT EQ */
-
-
- #define ADATA_OUT 0x00
- #define ADATA_IN BITW(8)
- #define ACOMMAND BITW(10)
- #define ASTATUS (BITW(10)+BITW(8))
- #define AMSG_OUT (BITW(10)+BITW(9))
- #define AMSG_IN (BITW(10)+BITW(9)+BITW(8))
- #define AILLEGAL (BITW(9)+BITW(8))
-
-
- #define BRH_OP BITW(13) /* Branch */
-
-
- #define ALWAYS 0x00
- #define EQUAL BITW(8)
- #define NOT_EQ BITW(9)
-
- #define TCB_OP (BITW(13)+BITW(11)) /* Test condition & branch */
-
-
- #define ATN_SET BITW(8)
- #define ATN_RESET BITW(9)
- #define XFER_CNT (BITW(9)+BITW(8))
- #define FIFO_0 BITW(10)
- #define FIFO_NOT0 (BITW(10)+BITW(8))
- #define T_USE_SYNC0 (BITW(10)+BITW(9))
-
-
- #define MPM_OP BITW(15) /* Match phase and move data */
-
- #define MDR_OP (BITW(12)+BITW(11)) /* Move data to Reg. */
-
- #define MRR_OP BITW(14) /* Move DReg. to Reg. */
-
-
- #define S_IDREG (BIT(2)+BIT(1)+BIT(0))
-
-
- #define D_AR0 0x00
- #define D_AR1 BIT(0)
- #define D_AR2 BIT(1)
- #define D_AR3 (BIT(1) + BIT(0))
- #define D_SDATA BIT(2)
- #define D_BUCKET (BIT(2) + BIT(1) + BIT(0))
-
-
- #define ADR_OP (BITW(13)+BITW(12)) /* Logical AND Reg. w. Data */
-
- #define ADS_OP (BITW(14)+BITW(13)+BITW(12))
-
- #define ODR_OP (BITW(13)+BITW(12)+BITW(11))
-
- #define ODS_OP (BITW(14)+BITW(13)+BITW(12)+BITW(11))
-
- #define STR_OP (BITW(15)+BITW(14)) /* Store to A_Reg. */
-
- #define AINT_ENA1 0x00
- #define AINT_STAT1 BITW(8)
- #define ASCSI_SIG BITW(9)
- #define ASCSI_CNTL (BITW(9)+BITW(8))
- #define APORT_CNTL BITW(10)
- #define ARST_CNTL (BITW(10)+BITW(8))
- #define AXFERCNT0 (BITW(10)+BITW(9))
- #define AXFERCNT1 (BITW(10)+BITW(9)+BITW(8))
- #define AXFERCNT2 BITW(11)
- #define AFIFO_DATA (BITW(11)+BITW(8))
- #define ASCSISELID (BITW(11)+BITW(9))
- #define ASCSISYNC0 (BITW(11)+BITW(9)+BITW(8))
-
-
- #define RAT_OP (BITW(14)+BITW(13)+BITW(11))
-
- #define SSI_OP (BITW(15)+BITW(11))
-
-
- #define SSI_ITAR_DISC (ITAR_DISC >> 8)
- #define SSI_IDO_STRT (IDO_STRT >> 8)
- #define SSI_IDI_STRT (IDO_STRT >> 8)
-
- #define SSI_ICMD_COMP (ICMD_COMP >> 8)
- #define SSI_ITICKLE (ITICKLE >> 8)
-
- #define SSI_IUNKWN (IUNKWN >> 8)
- #define SSI_INO_CC (IUNKWN >> 8)
- #define SSI_IRFAIL (IUNKWN >> 8)
-
-
- #define NP 0x10 /*Next Phase */
- #define NTCMD 0x02 /*Non- Tagged Command start */
- #define CMDPZ 0x04 /*Command phase */
- #define DINT 0x12 /*Data Out/In interrupt */
- #define DI 0x13 /*Data Out */
- #define MI 0x14 /*Message In */
- #define DC 0x19 /*Disconnect Message */
- #define ST 0x1D /*Status Phase */
- #define UNKNWN 0x24 /*Unknown bus action */
- #define CC 0x25 /*Command Completion failure */
- #define TICK 0x26 /*New target reselected us. */
- #define RFAIL 0x27 /*Reselection failed */
- #define SELCHK 0x28 /*Select & Check SCSI ID latch reg */
-
-
- #define ID_MSG_STRT hp_aramBase + 0x00
- #define NON_TAG_ID_MSG hp_aramBase + 0x06
- #define CMD_STRT hp_aramBase + 0x08
- #define SYNC_MSGS hp_aramBase + 0x08
-
-
-
-
-
- #define TAG_STRT 0x00
- #define SELECTION_START 0x00
- #define DISCONNECT_START 0x10/2
- #define END_DATA_START 0x14/2
- #define NONTAG_STRT 0x02/2
- #define CMD_ONLY_STRT CMDPZ/2
- #define TICKLE_STRT TICK/2
- #define SELCHK_STRT SELCHK/2
-
-
-
-
-#define mEEPROM_CLK_DELAY(port) (RD_HARPOON(port+hp_intstat_1))
-
-#define mWAIT_10MS(port) (RD_HARPOON(port+hp_intstat_1))
-
-
-#define CLR_XFER_CNT(port) (WR_HARPOON(port+hp_xfercnt_0, 0x00))
-
-#define SET_XFER_CNT(port, data) (WR_HARP32(port,hp_xfercnt_0,data))
-
-#define GET_XFER_CNT(port, xfercnt) {RD_HARP32(port,hp_xfercnt_0,xfercnt);
xfercnt &= 0xFFFFFF;}
-/* #define GET_XFER_CNT(port, xfercnt) (xfercnt =
RD_HARPOON(port+hp_xfercnt_2), \
- xfercnt <<= 16,\
- xfercnt |=
RDW_HARPOON((USHORT)(port+hp_xfercnt_0)))
- */
-#if defined(DOS)
-#define HP_SETUP_ADDR_CNT(port,addr,count)
(WRW_HARPOON((USHORT)(port+hp_host_addr_lo), (USHORT)(addr & 0x0000FFFFL)),\
- addr >>= 16,\
- WRW_HARPOON((USHORT)(port+hp_host_addr_hmi), (USHORT)(addr &
0x0000FFFFL)),\
- WR_HARP32(port,hp_xfercnt_0,count),\
- WRW_HARPOON((USHORT)(port+hp_xfer_cnt_lo), (USHORT)(count &
0x0000FFFFL)),\
- count >>= 16,\
- WR_HARPOON(port+hp_xfer_cnt_hi, (count & 0xFF)))
-#else
-#define HP_SETUP_ADDR_CNT(port,addr,count)
(WRW_HARPOON((port+hp_host_addr_lo), (USHORT)(addr & 0x0000FFFFL)),\
- addr >>= 16,\
- WRW_HARPOON((port+hp_host_addr_hmi), (USHORT)(addr & 0x0000FFFFL)),\
- WR_HARP32(port,hp_xfercnt_0,count),\
- WRW_HARPOON((port+hp_xfer_cnt_lo), (USHORT)(count & 0x0000FFFFL)),\
- count >>= 16,\
- WR_HARPOON(port+hp_xfer_cnt_hi, (count & 0xFF)))
-#endif
-
-#define ACCEPT_MSG(port) {while(RD_HARPOON(port+hp_scsisig) & SCSI_REQ){}\
- WR_HARPOON(port+hp_scsisig, S_ILL_PH);}
-
-
-#define ACCEPT_MSG_ATN(port) {while(RD_HARPOON(port+hp_scsisig) & SCSI_REQ){}\
- WR_HARPOON(port+hp_scsisig, (S_ILL_PH|SCSI_ATN));}
-
-#define ACCEPT_STAT(port) {while(RD_HARPOON(port+hp_scsisig) & SCSI_REQ){}\
- WR_HARPOON(port+hp_scsisig, S_ILL_PH);}
-
-#define ACCEPT_STAT_ATN(port) {while(RD_HARPOON(port+hp_scsisig) & SCSI_REQ){}\
- WR_HARPOON(port+hp_scsisig, (S_ILL_PH|SCSI_ATN));}
-
-#define DISABLE_AUTO(port) (WR_HARPOON(port+hp_scsireset, PROG_RESET),\
- WR_HARPOON(port+hp_scsireset, 0x00))
-
-#define ARAM_ACCESS(p_port) (WR_HARPOON(p_port+hp_page_ctrl, \
- (RD_HARPOON(p_port+hp_page_ctrl) | SGRAM_ARAM)))
-
-#define SGRAM_ACCESS(p_port) (WR_HARPOON(p_port+hp_page_ctrl, \
- (RD_HARPOON(p_port+hp_page_ctrl) & ~SGRAM_ARAM)))
-
-#define MDISABLE_INT(p_port) (WR_HARPOON(p_port+hp_page_ctrl, \
- (RD_HARPOON(p_port+hp_page_ctrl) |
G_INT_DISABLE)))
-
-#define MENABLE_INT(p_port) (WR_HARPOON(p_port+hp_page_ctrl, \
- (RD_HARPOON(p_port+hp_page_ctrl) &
~G_INT_DISABLE)))
-
-
-
-#endif
-
-
-#if (FW_TYPE==_UCB_MGR_)
-void ReadNVRam(PSCCBcard pCurrCard,PUCB p_ucb);
-void WriteNVRam(PSCCBcard pCurrCard,PUCB p_ucb);
-void UpdateCheckSum(u32bits baseport);
-#endif // (FW_TYPE==_UCB_MGR_)
-
-#if defined(DOS)
-UCHAR sfm(USHORT port, PSCCB pcurrSCCB);
-void scsiStartAuto(USHORT port);
-UCHAR sisyncn(USHORT port, UCHAR p_card, UCHAR syncFlag);
-void ssel(USHORT port, UCHAR p_card);
-void sres(USHORT port, UCHAR p_card, PSCCBcard pCurrCard);
-void sdecm(UCHAR message, USHORT port, UCHAR p_card);
-void shandem(USHORT port, UCHAR p_card,PSCCB pCurrSCCB);
-void stsyncn(USHORT port, UCHAR p_card);
-void sisyncr(USHORT port,UCHAR sync_pulse, UCHAR offset);
-void sssyncv(USHORT p_port, UCHAR p_id, UCHAR p_sync_value, PSCCBMgr_tar_info
currTar_Info);
-void sresb(USHORT port, UCHAR p_card);
-void sxfrp(USHORT p_port, UCHAR p_card);
-void schkdd(USHORT port, UCHAR p_card);
-UCHAR RdStack(USHORT port, UCHAR index);
-void WrStack(USHORT portBase, UCHAR index, UCHAR data);
-UCHAR ChkIfChipInitialized(USHORT ioPort);
-
-#if defined(V302)
-UCHAR GetTarLun(USHORT port, UCHAR p_card, UCHAR our_target, PSCCBcard
pCurrCard, PUCHAR tag, PUCHAR lun);
-#endif
-
-void SendMsg(USHORT port, UCHAR message);
-void queueFlushTargSccb(UCHAR p_card, UCHAR thisTarg, UCHAR error_code);
-UCHAR scsellDOS(USHORT p_port, UCHAR targ_id);
-#else
-UCHAR sfm(ULONG port, PSCCB pcurrSCCB);
-void scsiStartAuto(ULONG port);
-UCHAR sisyncn(ULONG port, UCHAR p_card, UCHAR syncFlag);
-void ssel(ULONG port, UCHAR p_card);
-void sres(ULONG port, UCHAR p_card, PSCCBcard pCurrCard);
-void sdecm(UCHAR message, ULONG port, UCHAR p_card);
-void shandem(ULONG port, UCHAR p_card,PSCCB pCurrSCCB);
-void stsyncn(ULONG port, UCHAR p_card);
-void sisyncr(ULONG port,UCHAR sync_pulse, UCHAR offset);
-void sssyncv(ULONG p_port, UCHAR p_id, UCHAR p_sync_value, PSCCBMgr_tar_info
currTar_Info);
-void sresb(ULONG port, UCHAR p_card);
-void sxfrp(ULONG p_port, UCHAR p_card);
-void schkdd(ULONG port, UCHAR p_card);
-UCHAR RdStack(ULONG port, UCHAR index);
-void WrStack(ULONG portBase, UCHAR index, UCHAR data);
-UCHAR ChkIfChipInitialized(ULONG ioPort);
-
-#if defined(V302)
-UCHAR GetTarLun(ULONG port, UCHAR p_card, UCHAR our_target, PSCCBcard
pCurrCard, PUCHAR tar, PUCHAR lun);
-#endif
-
-void SendMsg(ULONG port, UCHAR message);
-void queueFlushTargSccb(UCHAR p_card, UCHAR thisTarg, UCHAR error_code);
-#endif
-
-void ssenss(PSCCBcard pCurrCard);
-void sinits(PSCCB p_sccb, UCHAR p_card);
-void RNVRamData(PNVRamInfo pNvRamInfo);
-
-#if defined(WIDE_SCSI)
- #if defined(DOS)
- UCHAR siwidn(USHORT port, UCHAR p_card);
- void stwidn(USHORT port, UCHAR p_card);
- void siwidr(USHORT port, UCHAR width);
- #else
- UCHAR siwidn(ULONG port, UCHAR p_card);
- void stwidn(ULONG port, UCHAR p_card);
- void siwidr(ULONG port, UCHAR width);
- #endif
-#endif
-
-
-void queueSelectFail(PSCCBcard pCurrCard, UCHAR p_card);
-void queueDisconnect(PSCCB p_SCCB, UCHAR p_card);
-void queueCmdComplete(PSCCBcard pCurrCard, PSCCB p_SCCB, UCHAR p_card);
-void queueSearchSelect(PSCCBcard pCurrCard, UCHAR p_card);
-void queueFlushSccb(UCHAR p_card, UCHAR error_code);
-void queueAddSccb(PSCCB p_SCCB, UCHAR card);
-UCHAR queueFindSccb(PSCCB p_SCCB, UCHAR p_card);
-void utilUpdateResidual(PSCCB p_SCCB);
-USHORT CalcCrc16(UCHAR buffer[]);
-UCHAR CalcLrc(UCHAR buffer[]);
-
-
-#if defined(DOS)
-void Wait1Second(USHORT p_port);
-void Wait(USHORT p_port, UCHAR p_delay);
-void utilEEWriteOnOff(USHORT p_port,UCHAR p_mode);
-void utilEEWrite(USHORT p_port, USHORT ee_data, USHORT ee_addr);
-USHORT utilEERead(USHORT p_port, USHORT ee_addr);
-USHORT utilEEReadOrg(USHORT p_port, USHORT ee_addr);
-void utilEESendCmdAddr(USHORT p_port, UCHAR ee_cmd, USHORT ee_addr);
-#else
-void Wait1Second(ULONG p_port);
-void Wait(ULONG p_port, UCHAR p_delay);
-void utilEEWriteOnOff(ULONG p_port,UCHAR p_mode);
-void utilEEWrite(ULONG p_port, USHORT ee_data, USHORT ee_addr);
-USHORT utilEERead(ULONG p_port, USHORT ee_addr);
-USHORT utilEEReadOrg(ULONG p_port, USHORT ee_addr);
-void utilEESendCmdAddr(ULONG p_port, UCHAR ee_cmd, USHORT ee_addr);
-#endif
-
-
-
-#if defined(OS2)
- void far phaseDataOut(ULONG port, UCHAR p_card);
- void far phaseDataIn(ULONG port, UCHAR p_card);
- void far phaseCommand(ULONG port, UCHAR p_card);
- void far phaseStatus(ULONG port, UCHAR p_card);
- void far phaseMsgOut(ULONG port, UCHAR p_card);
- void far phaseMsgIn(ULONG port, UCHAR p_card);
- void far phaseIllegal(ULONG port, UCHAR p_card);
-#else
- #if defined(DOS)
- void phaseDataOut(USHORT port, UCHAR p_card);
- void phaseDataIn(USHORT port, UCHAR p_card);
- void phaseCommand(USHORT port, UCHAR p_card);
- void phaseStatus(USHORT port, UCHAR p_card);
- void phaseMsgOut(USHORT port, UCHAR p_card);
- void phaseMsgIn(USHORT port, UCHAR p_card);
- void phaseIllegal(USHORT port, UCHAR p_card);
- #else
- void phaseDataOut(ULONG port, UCHAR p_card);
- void phaseDataIn(ULONG port, UCHAR p_card);
- void phaseCommand(ULONG port, UCHAR p_card);
- void phaseStatus(ULONG port, UCHAR p_card);
- void phaseMsgOut(ULONG port, UCHAR p_card);
- void phaseMsgIn(ULONG port, UCHAR p_card);
- void phaseIllegal(ULONG port, UCHAR p_card);
- #endif
-#endif
-
-#if defined(DOS)
-void phaseDecode(USHORT port, UCHAR p_card);
-void phaseChkFifo(USHORT port, UCHAR p_card);
-void phaseBusFree(USHORT p_port, UCHAR p_card);
-#else
-void phaseDecode(ULONG port, UCHAR p_card);
-void phaseChkFifo(ULONG port, UCHAR p_card);
-void phaseBusFree(ULONG p_port, UCHAR p_card);
-#endif
-
-
-
-
-#if defined(DOS)
-void XbowInit(USHORT port, UCHAR scamFlg);
-void BusMasterInit(USHORT p_port);
-int DiagXbow(USHORT port);
-int DiagBusMaster(USHORT port);
-void DiagEEPROM(USHORT p_port);
-#else
-void XbowInit(ULONG port, UCHAR scamFlg);
-void BusMasterInit(ULONG p_port);
-int DiagXbow(ULONG port);
-int DiagBusMaster(ULONG port);
-void DiagEEPROM(ULONG p_port);
-#endif
-
-
-
-
-#if defined(DOS)
-void busMstrAbort(USHORT port);
-UCHAR busMstrTimeOut(USHORT port);
-void dataXferProcessor(USHORT port, PSCCBcard pCurrCard);
-void busMstrSGDataXferStart(USHORT port, PSCCB pCurrSCCB);
-void busMstrDataXferStart(USHORT port, PSCCB pCurrSCCB);
-void hostDataXferAbort(USHORT port, UCHAR p_card, PSCCB pCurrSCCB);
-#else
-void busMstrAbort(ULONG port);
-UCHAR busMstrTimeOut(ULONG port);
-void dataXferProcessor(ULONG port, PSCCBcard pCurrCard);
-void busMstrSGDataXferStart(ULONG port, PSCCB pCurrSCCB);
-void busMstrDataXferStart(ULONG port, PSCCB pCurrSCCB);
-void hostDataXferAbort(ULONG port, UCHAR p_card, PSCCB pCurrSCCB);
-#endif
-void hostDataXferRestart(PSCCB currSCCB);
-
-
-#if defined (DOS)
-UCHAR SccbMgr_bad_isr(USHORT p_port, UCHAR p_card, PSCCBcard pCurrCard, USHORT
p_int);
-#else
-UCHAR SccbMgr_bad_isr(ULONG p_port, UCHAR p_card, PSCCBcard pCurrCard, USHORT
p_int);
-
-#endif
-
-void SccbMgrTableInitAll(void);
-void SccbMgrTableInitCard(PSCCBcard pCurrCard, UCHAR p_card);
-void SccbMgrTableInitTarget(UCHAR p_card, UCHAR target);
-
-
-
-void scini(UCHAR p_card, UCHAR p_our_id, UCHAR p_power_up);
-
-#if defined(DOS)
-int scarb(USHORT p_port, UCHAR p_sel_type);
-void scbusf(USHORT p_port);
-void scsel(USHORT p_port);
-void scasid(UCHAR p_card, USHORT p_port);
-UCHAR scxferc(USHORT p_port, UCHAR p_data);
-UCHAR scsendi(USHORT p_port, UCHAR p_id_string[]);
-UCHAR sciso(USHORT p_port, UCHAR p_id_string[]);
-void scwirod(USHORT p_port, UCHAR p_data_bit);
-void scwiros(USHORT p_port, UCHAR p_data_bit);
-UCHAR scvalq(UCHAR p_quintet);
-UCHAR scsell(USHORT p_port, UCHAR targ_id);
-void scwtsel(USHORT p_port);
-void inisci(UCHAR p_card, USHORT p_port, UCHAR p_our_id);
-void scsavdi(UCHAR p_card, USHORT p_port);
-#else
-int scarb(ULONG p_port, UCHAR p_sel_type);
-void scbusf(ULONG p_port);
-void scsel(ULONG p_port);
-void scasid(UCHAR p_card, ULONG p_port);
-UCHAR scxferc(ULONG p_port, UCHAR p_data);
-UCHAR scsendi(ULONG p_port, UCHAR p_id_string[]);
-UCHAR sciso(ULONG p_port, UCHAR p_id_string[]);
-void scwirod(ULONG p_port, UCHAR p_data_bit);
-void scwiros(ULONG p_port, UCHAR p_data_bit);
-UCHAR scvalq(UCHAR p_quintet);
-UCHAR scsell(ULONG p_port, UCHAR targ_id);
-void scwtsel(ULONG p_port);
-void inisci(UCHAR p_card, ULONG p_port, UCHAR p_our_id);
-void scsavdi(UCHAR p_card, ULONG p_port);
-#endif
-UCHAR scmachid(UCHAR p_card, UCHAR p_id_string[]);
-
-
-#if defined(DOS)
-void autoCmdCmplt(USHORT p_port, UCHAR p_card);
-void autoLoadDefaultMap(USHORT p_port);
-#else
-void autoCmdCmplt(ULONG p_port, UCHAR p_card);
-void autoLoadDefaultMap(ULONG p_port);
-#endif
-
-
-
-#if (FW_TYPE==_SCCB_MGR_)
- void OS_start_timer(unsigned long ioport, unsigned long timeout);
- void OS_stop_timer(unsigned long ioport, unsigned long timeout);
- void OS_disable_int(unsigned char intvec);
- void OS_enable_int(unsigned char intvec);
- void OS_delay(unsigned long count);
- int OS_VirtToPhys(u32bits CardHandle, u32bits *physaddr, u32bits
*virtaddr);
- #if !(defined(UNIX) || defined(OS2) || defined(SOLARIS_REAL_MODE))
- void OS_Lock(PSCCBMGR_INFO pCardInfo);
- void OS_UnLock(PSCCBMGR_INFO pCardInfo);
-#endif // if FW_TYPE == ...
-
-#endif
-
-extern SCCBCARD BL_Card[MAX_CARDS];
-extern SCCBMGR_TAR_INFO sccbMgrTbl[MAX_CARDS][MAX_SCSI_TAR];
-
-
-#if defined(OS2)
- extern void (far *s_PhaseTbl[8]) (ULONG, UCHAR);
-#else
- #if defined(DOS)
- extern void (*s_PhaseTbl[8]) (USHORT, UCHAR);
- #else
- extern void (*s_PhaseTbl[8]) (ULONG, UCHAR);
- #endif
-#endif
-
-extern SCCBSCAM_INFO scamInfo[MAX_SCSI_TAR];
-extern NVRAMINFO nvRamInfo[MAX_MB_CARDS];
-#if defined(DOS) || defined(OS2)
-extern UCHAR temp_id_string[ID_STRING_LENGTH];
-#endif
-extern UCHAR scamHAString[];
-
-
-extern UCHAR mbCards;
-#if defined(BUGBUG)
-extern UCHAR debug_int[MAX_CARDS][debug_size];
-extern UCHAR debug_index[MAX_CARDS];
-void Debug_Load(UCHAR p_card, UCHAR p_bug_data);
-#endif
-
-#if (FW_TYPE==_SCCB_MGR_)
-#if defined(DOS)
- extern UCHAR first_time;
-#endif
-#endif /* (FW_TYPE==_SCCB_MGR_) */
-
-#if (FW_TYPE==_UCB_MGR_)
-#if defined(DOS)
- extern u08bits first_time;
-#endif
-#endif /* (FW_TYPE==_UCB_MGR_) */
-
-#if defined(BUGBUG)
-void Debug_Load(UCHAR p_card, UCHAR p_bug_data);
-#endif
-
-extern unsigned int SccbGlobalFlags;
-
-
-/*----------------------------------------------------------------------
- *
- *
- * Copyright 1995-1996 by Mylex Corporation. All Rights Reserved
- *
- * This file is available under both the GNU General Public License
- * and a BSD-style copyright; see LICENSE.FlashPoint for details.
- *
- * $Workfile: sccb.c $
- *
- * Description: Functions relating to handling of the SCCB interface
- * between the device driver and the HARPOON.
- *
- * $Date: 1999/04/26 05:53:56 $
- *
- * $Revision: 1.1 $
- *
- *----------------------------------------------------------------------*/
-
-/*#include <globals.h>*/
-
-#if (FW_TYPE==_UCB_MGR_)
- /*#include <budi.h>*/
- /*#include <budioctl.h>*/
-#endif
-
-/*#include <sccbmgr.h>*/
-/*#include <blx30.h>*/
-/*#include <target.h>*/
-/*#include <eeprom.h>*/
-/*#include <scsi2.h>*/
-/*#include <harpoon.h>*/
-
-
-
-#if (FW_TYPE==_SCCB_MGR_)
-#define mOS_Lock(card) OS_Lock((PSCCBMGR_INFO)(((PSCCBcard)card)->cardInfo))
-#define mOS_UnLock(card)
OS_UnLock((PSCCBMGR_INFO)(((PSCCBcard)card)->cardInfo))
-#else /* FW_TYPE==_UCB_MGR_ */
-#define mOS_Lock(card) OS_Lock((u32bits)(((PSCCBcard)card)->ioPort))
-#define mOS_UnLock(card) OS_UnLock((u32bits)(((PSCCBcard)card)->ioPort))
-#endif
-
-
-/*
-extern SCCBMGR_TAR_INFO sccbMgrTbl[MAX_CARDS][MAX_SCSI_TAR];
-extern SCCBCARD BL_Card[MAX_CARDS];
-
-extern NVRAMINFO nvRamInfo[MAX_MB_CARDS];
-extern UCHAR mbCards;
-
-#if defined (OS2)
- extern void (far *s_PhaseTbl[8]) (ULONG, UCHAR);
-#else
- #if defined(DOS)
- extern void (*s_PhaseTbl[8]) (USHORT, UCHAR);
- #else
- extern void (*s_PhaseTbl[8]) (ULONG, UCHAR);
- #endif
-#endif
-
-
-#if defined(BUGBUG)
-extern UCHAR debug_int[MAX_CARDS][debug_size];
-extern UCHAR debug_index[MAX_CARDS];
-void Debug_Load(UCHAR p_card, UCHAR p_bug_data);
-#endif
-*/
-
-#if (FW_TYPE==_SCCB_MGR_)
-
-/*---------------------------------------------------------------------
- *
- * Function: SccbMgr_sense_adapter
- *
- * Description: Setup and/or Search for cards and return info to caller.
- *
- *---------------------------------------------------------------------*/
-
-int SccbMgr_sense_adapter(PSCCBMGR_INFO pCardInfo)
-{
-#if defined(DOS)
-#else
- static UCHAR first_time = 1;
-#endif
-
- UCHAR i,j,id,ScamFlg;
- USHORT temp,temp2,temp3,temp4,temp5,temp6;
-#if defined(DOS)
- USHORT ioport;
-#else
- ULONG ioport;
-#endif
- PNVRamInfo pCurrNvRam;
-
-#if defined(DOS)
- ioport = (USHORT)pCardInfo->si_baseaddr;
-#else
- ioport = pCardInfo->si_baseaddr;
-#endif
-
-
- if (RD_HARPOON(ioport+hp_vendor_id_0) != ORION_VEND_0)
- return((int)FAILURE);
-
- if ((RD_HARPOON(ioport+hp_vendor_id_1) != ORION_VEND_1))
- return((int)FAILURE);
-
- if ((RD_HARPOON(ioport+hp_device_id_0) != ORION_DEV_0))
- return((int)FAILURE);
-
- if ((RD_HARPOON(ioport+hp_device_id_1) != ORION_DEV_1))
- return((int)FAILURE);
-
-
- if (RD_HARPOON(ioport+hp_rev_num) != 0x0f){
-
-/* For new Harpoon then check for sub_device ID LSB
- the bits(0-3) must be all ZERO for compatible with
- current version of SCCBMgr, else skip this Harpoon
- device. */
-
- if (RD_HARPOON(ioport+hp_sub_device_id_0) & 0x0f)
- return((int)FAILURE);
- }
-
- if (first_time)
- {
- SccbMgrTableInitAll();
- first_time = 0;
- mbCards = 0;
- }
-
- if(RdStack(ioport, 0) != 0x00) {
- if(ChkIfChipInitialized(ioport) == FALSE)
- {
- pCurrNvRam = NULL;
- WR_HARPOON(ioport+hp_semaphore, 0x00);
- XbowInit(ioport, 0); /*Must Init the SCSI
before attempting */
- DiagEEPROM(ioport);
- }
- else
- {
- if(mbCards < MAX_MB_CARDS) {
- pCurrNvRam = &nvRamInfo[mbCards];
- mbCards++;
- pCurrNvRam->niBaseAddr = ioport;
- RNVRamData(pCurrNvRam);
- }else
- return((int) FAILURE);
- }
- }else
- pCurrNvRam = NULL;
-#if defined (NO_BIOS_OPTION)
- pCurrNvRam = NULL;
- XbowInit(ioport, 0); /*Must Init the SCSI before attempting
*/
- DiagEEPROM(ioport);
-#endif /* No BIOS Option */
-
- WR_HARPOON(ioport+hp_clkctrl_0, CLKCTRL_DEFAULT);
- WR_HARPOON(ioport+hp_sys_ctrl, 0x00);
-
- if(pCurrNvRam)
- pCardInfo->si_id = pCurrNvRam->niAdapId;
- else
- pCardInfo->si_id = (UCHAR)(utilEERead(ioport, (ADAPTER_SCSI_ID/2)) &
- (UCHAR)0x0FF);
-
- pCardInfo->si_lun = 0x00;
- pCardInfo->si_fw_revision = ORION_FW_REV;
- temp2 = 0x0000;
- temp3 = 0x0000;
- temp4 = 0x0000;
- temp5 = 0x0000;
- temp6 = 0x0000;
-
- for (id = 0; id < (16/2); id++) {
-
- if(pCurrNvRam){
- temp = (USHORT) pCurrNvRam->niSyncTbl[id];
- temp = ((temp & 0x03) + ((temp << 4) & 0xc0)) +
- (((temp << 4) & 0x0300) + ((temp << 8)
& 0xc000));
- }else
- temp = utilEERead(ioport, (USHORT)((SYNC_RATE_TBL/2)+id));
-
- for (i = 0; i < 2; temp >>=8,i++) {
-
- temp2 >>= 1;
- temp3 >>= 1;
- temp4 >>= 1;
- temp5 >>= 1;
- temp6 >>= 1;
- switch (temp & 0x3)
- {
- case AUTO_RATE_20: /* Synchronous, 20 mega-transfers/second */
- temp6 |= 0x8000; /* Fall through */
- case AUTO_RATE_10: /* Synchronous, 10 mega-transfers/second */
- temp5 |= 0x8000; /* Fall through */
- case AUTO_RATE_05: /* Synchronous, 5 mega-transfers/second */
- temp2 |= 0x8000; /* Fall through */
- case AUTO_RATE_00: /* Asynchronous */
- break;
- }
-
- if (temp & DISC_ENABLE_BIT)
- temp3 |= 0x8000;
-
- if (temp & WIDE_NEGO_BIT)
- temp4 |= 0x8000;
-
- }
- }
-
- pCardInfo->si_per_targ_init_sync = temp2;
- pCardInfo->si_per_targ_no_disc = temp3;
- pCardInfo->si_per_targ_wide_nego = temp4;
- pCardInfo->si_per_targ_fast_nego = temp5;
- pCardInfo->si_per_targ_ultra_nego = temp6;
-
- if(pCurrNvRam)
- i = pCurrNvRam->niSysConf;
- else
- i = (UCHAR)(utilEERead(ioport, (SYSTEM_CONFIG/2)));
-
- if(pCurrNvRam)
- ScamFlg = pCurrNvRam->niScamConf;
- else
- ScamFlg = (UCHAR) utilEERead(ioport, SCAM_CONFIG/2);
-
- pCardInfo->si_flags = 0x0000;
-
- if (i & 0x01)
- pCardInfo->si_flags |= SCSI_PARITY_ENA;
-
- if (!(i & 0x02))
- pCardInfo->si_flags |= SOFT_RESET;
-
- if (i & 0x10)
- pCardInfo->si_flags |= EXTENDED_TRANSLATION;
-
- if (ScamFlg & SCAM_ENABLED)
- pCardInfo->si_flags |= FLAG_SCAM_ENABLED;
-
- if (ScamFlg & SCAM_LEVEL2)
- pCardInfo->si_flags |= FLAG_SCAM_LEVEL2;
-
- j = (RD_HARPOON(ioport+hp_bm_ctrl) & ~SCSI_TERM_ENA_L);
- if (i & 0x04) {
- j |= SCSI_TERM_ENA_L;
- }
- WR_HARPOON(ioport+hp_bm_ctrl, j );
-
- j = (RD_HARPOON(ioport+hp_ee_ctrl) & ~SCSI_TERM_ENA_H);
- if (i & 0x08) {
- j |= SCSI_TERM_ENA_H;
- }
- WR_HARPOON(ioport+hp_ee_ctrl, j );
-
- if (!(RD_HARPOON(ioport+hp_page_ctrl) & NARROW_SCSI_CARD))
-
- pCardInfo->si_flags |= SUPPORT_16TAR_32LUN;
-
- pCardInfo->si_card_family = HARPOON_FAMILY;
- pCardInfo->si_bustype = BUSTYPE_PCI;
-
- if(pCurrNvRam){
- pCardInfo->si_card_model[0] = '9';
- switch(pCurrNvRam->niModel & 0x0f){
- case MODEL_LT:
- pCardInfo->si_card_model[1] = '3';
- pCardInfo->si_card_model[2] = '0';
- break;
- case MODEL_LW:
- pCardInfo->si_card_model[1] = '5';
- pCardInfo->si_card_model[2] = '0';
- break;
- case MODEL_DL:
- pCardInfo->si_card_model[1] = '3';
- pCardInfo->si_card_model[2] = '2';
- break;
- case MODEL_DW:
- pCardInfo->si_card_model[1] = '5';
- pCardInfo->si_card_model[2] = '2';
- break;
- }
- }else{
- temp = utilEERead(ioport, (MODEL_NUMB_0/2));
- pCardInfo->si_card_model[0] = (UCHAR)(temp >> 8);
- temp = utilEERead(ioport, (MODEL_NUMB_2/2));
-
- pCardInfo->si_card_model[1] = (UCHAR)(temp & 0x00FF);
- pCardInfo->si_card_model[2] = (UCHAR)(temp >> 8);
- }
-
- if (pCardInfo->si_card_model[1] == '3')
- {
- if (RD_HARPOON(ioport+hp_ee_ctrl) & BIT(7))
- pCardInfo->si_flags |= LOW_BYTE_TERM;
- }
- else if (pCardInfo->si_card_model[2] == '0')
- {
- temp = RD_HARPOON(ioport+hp_xfer_pad);
- WR_HARPOON(ioport+hp_xfer_pad, (temp & ~BIT(4)));
- if (RD_HARPOON(ioport+hp_ee_ctrl) & BIT(7))
- pCardInfo->si_flags |= LOW_BYTE_TERM;
- WR_HARPOON(ioport+hp_xfer_pad, (temp | BIT(4)));
- if (RD_HARPOON(ioport+hp_ee_ctrl) & BIT(7))
- pCardInfo->si_flags |= HIGH_BYTE_TERM;
- WR_HARPOON(ioport+hp_xfer_pad, temp);
- }
- else
- {
- temp = RD_HARPOON(ioport+hp_ee_ctrl);
- temp2 = RD_HARPOON(ioport+hp_xfer_pad);
- WR_HARPOON(ioport+hp_ee_ctrl, (temp | SEE_CS));
- WR_HARPOON(ioport+hp_xfer_pad, (temp2 | BIT(4)));
- temp3 = 0;
- for (i = 0; i < 8; i++)
- {
- temp3 <<= 1;
- if (!(RD_HARPOON(ioport+hp_ee_ctrl) & BIT(7)))
- temp3 |= 1;
- WR_HARPOON(ioport+hp_xfer_pad, (temp2 & ~BIT(4)));
- WR_HARPOON(ioport+hp_xfer_pad, (temp2 | BIT(4)));
- }
- WR_HARPOON(ioport+hp_ee_ctrl, temp);
- WR_HARPOON(ioport+hp_xfer_pad, temp2);
- if (!(temp3 & BIT(7)))
- pCardInfo->si_flags |= LOW_BYTE_TERM;
- if (!(temp3 & BIT(6)))
- pCardInfo->si_flags |= HIGH_BYTE_TERM;
- }
-
-
- ARAM_ACCESS(ioport);
-
- for ( i = 0; i < 4; i++ ) {
-
- pCardInfo->si_XlatInfo[i] =
- RD_HARPOON(ioport+hp_aramBase+BIOS_DATA_OFFSET+i);
- }
-
- /* return with -1 if no sort, else return with
- logical card number sorted by BIOS (zero-based) */
-
- pCardInfo->si_relative_cardnum =
- (UCHAR)(RD_HARPOON(ioport+hp_aramBase+BIOS_RELATIVE_CARD)-1);
-
- SGRAM_ACCESS(ioport);
-
- s_PhaseTbl[0] = phaseDataOut;
- s_PhaseTbl[1] = phaseDataIn;
- s_PhaseTbl[2] = phaseIllegal;
- s_PhaseTbl[3] = phaseIllegal;
- s_PhaseTbl[4] = phaseCommand;
- s_PhaseTbl[5] = phaseStatus;
- s_PhaseTbl[6] = phaseMsgOut;
- s_PhaseTbl[7] = phaseMsgIn;
-
- pCardInfo->si_present = 0x01;
-
-#if defined(BUGBUG)
-
-
- for (i = 0; i < MAX_CARDS; i++) {
-
- for (id=0; id<debug_size; id++)
- debug_int[i][id] = (UCHAR)0x00;
- debug_index[i] = 0;
- }
-
-#endif
-
- return(0);
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: SccbMgr_config_adapter
- *
- * Description: Setup adapter for normal operation (hard reset).
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-USHORT SccbMgr_config_adapter(PSCCBMGR_INFO pCardInfo)
-#else
-ULONG SccbMgr_config_adapter(PSCCBMGR_INFO pCardInfo)
-#endif
-{
- PSCCBcard CurrCard = NULL;
- PNVRamInfo pCurrNvRam;
- UCHAR i,j,thisCard, ScamFlg;
- USHORT temp,sync_bit_map,id;
-#if defined(DOS)
- USHORT ioport;
-#else
- ULONG ioport;
-#endif
-
-#if defined(DOS)
- ioport = (USHORT)pCardInfo->si_baseaddr;
-#else
- ioport = pCardInfo->si_baseaddr;
-#endif
-
- for(thisCard =0; thisCard <= MAX_CARDS; thisCard++) {
-
- if (thisCard == MAX_CARDS) {
-
- return(FAILURE);
- }
-
- if (BL_Card[thisCard].ioPort == ioport) {
-
- CurrCard = &BL_Card[thisCard];
- SccbMgrTableInitCard(CurrCard,thisCard);
- break;
- }
-
- else if (BL_Card[thisCard].ioPort == 0x00) {
-
- BL_Card[thisCard].ioPort = ioport;
- CurrCard = &BL_Card[thisCard];
-
- if(mbCards)
- for(i = 0; i < mbCards; i++){
- if(CurrCard->ioPort ==
nvRamInfo[i].niBaseAddr)
- CurrCard->pNvRamInfo =
&nvRamInfo[i];
- }
- SccbMgrTableInitCard(CurrCard,thisCard);
- CurrCard->cardIndex = thisCard;
- CurrCard->cardInfo = pCardInfo;
-
- break;
- }
- }
-
- pCurrNvRam = CurrCard->pNvRamInfo;
-
- if(pCurrNvRam){
- ScamFlg = pCurrNvRam->niScamConf;
- }
- else{
- ScamFlg = (UCHAR) utilEERead(ioport, SCAM_CONFIG/2);
- }
-
-
- BusMasterInit(ioport);
- XbowInit(ioport, ScamFlg);
-
-#if defined (NO_BIOS_OPTION)
-
-
- if (DiagXbow(ioport)) return(FAILURE);
- if (DiagBusMaster(ioport)) return(FAILURE);
-
-#endif /* No BIOS Option */
-
- autoLoadDefaultMap(ioport);
-
-
- for (i = 0,id = 0x01; i != pCardInfo->si_id; i++,id <<= 1){}
-
- WR_HARPOON(ioport+hp_selfid_0, id);
- WR_HARPOON(ioport+hp_selfid_1, 0x00);
- WR_HARPOON(ioport+hp_arb_id, pCardInfo->si_id);
- CurrCard->ourId = pCardInfo->si_id;
-
- i = (UCHAR) pCardInfo->si_flags;
- if (i & SCSI_PARITY_ENA)
- WR_HARPOON(ioport+hp_portctrl_1,(HOST_MODE8 | CHK_SCSI_P));
-
- j = (RD_HARPOON(ioport+hp_bm_ctrl) & ~SCSI_TERM_ENA_L);
- if (i & LOW_BYTE_TERM)
- j |= SCSI_TERM_ENA_L;
- WR_HARPOON(ioport+hp_bm_ctrl, j);
-
- j = (RD_HARPOON(ioport+hp_ee_ctrl) & ~SCSI_TERM_ENA_H);
- if (i & HIGH_BYTE_TERM)
- j |= SCSI_TERM_ENA_H;
- WR_HARPOON(ioport+hp_ee_ctrl, j );
-
-
- if (!(pCardInfo->si_flags & SOFT_RESET)) {
-
- sresb(ioport,thisCard);
-
- scini(thisCard, pCardInfo->si_id, 0);
- }
-
-
-
- if (pCardInfo->si_flags & POST_ALL_UNDERRRUNS)
- CurrCard->globalFlags |= F_NO_FILTER;
-
- if(pCurrNvRam){
- if(pCurrNvRam->niSysConf & 0x10)
- CurrCard->globalFlags |= F_GREEN_PC;
- }
- else{
- if (utilEERead(ioport, (SYSTEM_CONFIG/2)) & GREEN_PC_ENA)
- CurrCard->globalFlags |= F_GREEN_PC;
- }
-
- /* Set global flag to indicate Re-Negotiation to be done on all
- ckeck condition */
- if(pCurrNvRam){
- if(pCurrNvRam->niScsiConf & 0x04)
- CurrCard->globalFlags |= F_DO_RENEGO;
- }
- else{
- if (utilEERead(ioport, (SCSI_CONFIG/2)) & RENEGO_ENA)
- CurrCard->globalFlags |= F_DO_RENEGO;
- }
-
- if(pCurrNvRam){
- if(pCurrNvRam->niScsiConf & 0x08)
- CurrCard->globalFlags |= F_CONLUN_IO;
- }
- else{
- if (utilEERead(ioport, (SCSI_CONFIG/2)) & CONNIO_ENA)
- CurrCard->globalFlags |= F_CONLUN_IO;
- }
-
-
- temp = pCardInfo->si_per_targ_no_disc;
-
- for (i = 0,id = 1; i < MAX_SCSI_TAR; i++, id <<= 1) {
-
- if (temp & id)
- sccbMgrTbl[thisCard][i].TarStatus |= TAR_ALLOW_DISC;
- }
-
- sync_bit_map = 0x0001;
-
- for (id = 0; id < (MAX_SCSI_TAR/2); id++) {
-
- if(pCurrNvRam){
- temp = (USHORT) pCurrNvRam->niSyncTbl[id];
- temp = ((temp & 0x03) + ((temp << 4) & 0xc0)) +
- (((temp << 4) & 0x0300) + ((temp << 8)
& 0xc000));
- }else
- temp = utilEERead(ioport, (USHORT)((SYNC_RATE_TBL/2)+id));
-
- for (i = 0; i < 2; temp >>=8,i++) {
-
- if (pCardInfo->si_per_targ_init_sync & sync_bit_map) {
-
- sccbMgrTbl[thisCard][id*2+i].TarEEValue = (UCHAR)temp;
- }
-
- else {
- sccbMgrTbl[thisCard][id*2+i].TarStatus |= SYNC_SUPPORTED;
- sccbMgrTbl[thisCard][id*2+i].TarEEValue =
- (UCHAR)(temp & ~EE_SYNC_MASK);
- }
-
-#if defined(WIDE_SCSI)
-/* if ((pCardInfo->si_per_targ_wide_nego & sync_bit_map) ||
- (id*2+i >= 8)){
-*/
- if (pCardInfo->si_per_targ_wide_nego & sync_bit_map){
-
- sccbMgrTbl[thisCard][id*2+i].TarEEValue |= EE_WIDE_SCSI;
-
- }
-
- else { /* NARROW SCSI */
- sccbMgrTbl[thisCard][id*2+i].TarStatus |= WIDE_NEGOCIATED;
- }
-
-#else
- sccbMgrTbl[thisCard][id*2+i].TarStatus |= WIDE_NEGOCIATED;
-#endif
-
-
- sync_bit_map <<= 1;
-
-
-
- }
- }
-
- WR_HARPOON((ioport+hp_semaphore),
- (UCHAR)(RD_HARPOON((ioport+hp_semaphore)) | SCCB_MGR_PRESENT));
-
-#if defined(DOS)
- return((USHORT)CurrCard);
-#else
- return((ULONG)CurrCard);
-#endif
-}
-
-#else /* end (FW_TYPE==_SCCB_MGR_) */
-
-
-
-STATIC s16bits FP_PresenceCheck(PMGR_INFO pMgrInfo)
-{
- PMGR_ENTRYPNTS pMgr_EntryPnts = &pMgrInfo->mi_Functions;
-
- pMgr_EntryPnts->UCBMgr_probe_adapter = probe_adapter;
- pMgr_EntryPnts->UCBMgr_init_adapter = init_adapter;
- pMgr_EntryPnts->UCBMgr_start_UCB = SccbMgr_start_sccb;
- pMgr_EntryPnts->UCBMgr_build_UCB = build_UCB;
- pMgr_EntryPnts->UCBMgr_abort_UCB = SccbMgr_abort_sccb;
- pMgr_EntryPnts->UCBMgr_my_int = SccbMgr_my_int;
- pMgr_EntryPnts->UCBMgr_isr = SccbMgr_isr;
- pMgr_EntryPnts->UCBMgr_scsi_reset = SccbMgr_scsi_reset;
- pMgr_EntryPnts->UCBMgr_timer_expired = SccbMgr_timer_expired;
-#ifndef NO_IOCTLS
- pMgr_EntryPnts->UCBMgr_unload_card = SccbMgr_unload_card;
- pMgr_EntryPnts->UCBMgr_save_foreign_state =
-
SccbMgr_save_foreign_state;
- pMgr_EntryPnts->UCBMgr_restore_foreign_state =
-
SccbMgr_restore_foreign_state;
- pMgr_EntryPnts->UCBMgr_restore_native_state =
-
SccbMgr_restore_native_state;
-#endif /*NO_IOCTLS*/
-
- pMgrInfo->mi_SGListFormat=0x01;
- pMgrInfo->mi_DataPtrFormat=0x01;
- pMgrInfo->mi_MaxSGElements= (u16bits) 0xffffffff;
- pMgrInfo->mi_MgrPrivateLen=sizeof(SCCB);
- pMgrInfo->mi_PCIVendorID=BL_VENDOR_ID;
- pMgrInfo->mi_PCIDeviceID=FP_DEVICE_ID;
- pMgrInfo->mi_MgrAttributes= ATTR_IO_MAPPED +
-
ATTR_PHYSICAL_ADDRESS +
-
ATTR_VIRTUAL_ADDRESS +
-
ATTR_OVERLAPPED_IO_IOCTLS_OK;
- pMgrInfo->mi_IoRangeLen = 256;
- return(0);
-}
-
-
-
-/*---------------------------------------------------------------------
- *
- * Function: probe_adapter
- *
- * Description: Setup and/or Search for cards and return info to caller.
- *
- *---------------------------------------------------------------------*/
-STATIC s32bits probe_adapter(PADAPTER_INFO pAdapterInfo)
-{
- u16bits temp,temp2,temp3,temp4;
- u08bits i,j,id;
-
-#if defined(DOS)
-#else
- static u08bits first_time = 1;
-#endif
- BASE_PORT ioport;
- PNVRamInfo pCurrNvRam;
-
- ioport = (BASE_PORT)pAdapterInfo->ai_baseaddr;
-
-
-
- if (RD_HARPOON(ioport+hp_vendor_id_0) != ORION_VEND_0)
- return(1);
-
- if ((RD_HARPOON(ioport+hp_vendor_id_1) != ORION_VEND_1))
- return(2);
-
- if ((RD_HARPOON(ioport+hp_device_id_0) != ORION_DEV_0))
- return(3);
-
- if ((RD_HARPOON(ioport+hp_device_id_1) != ORION_DEV_1))
- return(4);
-
-
- if (RD_HARPOON(ioport+hp_rev_num) != 0x0f){
-
-
-/* For new Harpoon then check for sub_device ID LSB
- the bits(0-3) must be all ZERO for compatible with
- current version of SCCBMgr, else skip this Harpoon
- device. */
-
- if (RD_HARPOON(ioport+hp_sub_device_id_0) & 0x0f)
- return(5);
- }
-
- if (first_time) {
-
- SccbMgrTableInitAll();
- first_time = 0;
- mbCards = 0;
- }
-
- if(RdStack(ioport, 0) != 0x00) {
- if(ChkIfChipInitialized(ioport) == FALSE)
- {
- pCurrNvRam = NULL;
- WR_HARPOON(ioport+hp_semaphore, 0x00);
- XbowInit(ioport, 0); /*Must Init the
SCSI before attempting */
- DiagEEPROM(ioport);
- }
- else
- {
- if(mbCards < MAX_MB_CARDS) {
- pCurrNvRam = &nvRamInfo[mbCards];
- mbCards++;
- pCurrNvRam->niBaseAddr = ioport;
- RNVRamData(pCurrNvRam);
- }else
- return((int) FAILURE);
- }
- }else
- pCurrNvRam = NULL;
-
-#if defined (NO_BIOS_OPTION)
- pCurrNvRam = NULL;
- XbowInit(ioport, 0); /*Must Init the SCSI before attempting
*/
- DiagEEPROM(ioport);
-#endif /* No BIOS Option */
-
- WR_HARPOON(ioport+hp_clkctrl_0, CLKCTRL_DEFAULT);
- WR_HARPOON(ioport+hp_sys_ctrl, 0x00);
-
- if(pCurrNvRam)
- pAdapterInfo->ai_id = pCurrNvRam->niAdapId;
- else
- pAdapterInfo->ai_id = (u08bits)(utilEERead(ioport, (ADAPTER_SCSI_ID/2))
&
- (u08bits)0x0FF);
-
- pAdapterInfo->ai_lun = 0x00;
- pAdapterInfo->ai_fw_revision[0] = '3';
- pAdapterInfo->ai_fw_revision[1] = '1';
- pAdapterInfo->ai_fw_revision[2] = '1';
- pAdapterInfo->ai_fw_revision[3] = ' ';
- pAdapterInfo->ai_NumChannels = 1;
-
- temp2 = 0x0000;
- temp3 = 0x0000;
- temp4 = 0x0000;
-
- for (id = 0; id < (16/2); id++) {
-
- if(pCurrNvRam){
- temp = (USHORT) pCurrNvRam->niSyncTbl[id];
- temp = ((temp & 0x03) + ((temp << 4) & 0xc0)) +
- (((temp << 4) & 0x0300) + ((temp << 8)
& 0xc000));
- }else
- temp = utilEERead(ioport, (u16bits)((SYNC_RATE_TBL/2)+id));
-
- for (i = 0; i < 2; temp >>=8,i++) {
-
- if ((temp & 0x03) != AUTO_RATE_00) {
-
- temp2 >>= 0x01;
- temp2 |= 0x8000;
- }
-
- else {
- temp2 >>= 0x01;
- }
-
- if (temp & DISC_ENABLE_BIT) {
-
- temp3 >>= 0x01;
- temp3 |= 0x8000;
- }
-
- else {
- temp3 >>= 0x01;
- }
-
- if (temp & WIDE_NEGO_BIT) {
-
- temp4 >>= 0x01;
- temp4 |= 0x8000;
- }
-
- else {
- temp4 >>= 0x01;
- }
-
- }
- }
-
- pAdapterInfo->ai_per_targ_init_sync = temp2;
- pAdapterInfo->ai_per_targ_no_disc = temp3;
- pAdapterInfo->ai_per_targ_wide_nego = temp4;
- if(pCurrNvRam)
- i = pCurrNvRam->niSysConf;
- else
- i = (u08bits)(utilEERead(ioport, (SYSTEM_CONFIG/2)));
-
- /*
- ** interrupts always level-triggered for FlashPoint
- */
- pAdapterInfo->ai_stateinfo |= LEVEL_TRIG;
-
- if (i & 0x01)
- pAdapterInfo->ai_stateinfo |= SCSI_PARITY_ENA;
-
- if (i & 0x02) /* SCSI Bus reset in AutoSCSI Set ? */
- {
- if(pCurrNvRam)
- {
- j = pCurrNvRam->niScamConf;
- }
- else
- {
- j = (u08bits) utilEERead(ioport, SCAM_CONFIG/2);
- }
- if(j & SCAM_ENABLED)
- {
- if(j & SCAM_LEVEL2)
- {
- pAdapterInfo->ai_stateinfo |= SCAM2_ENA;
- }
- else
- {
- pAdapterInfo->ai_stateinfo |= SCAM1_ENA;
- }
- }
- }
- j = (RD_HARPOON(ioport+hp_bm_ctrl) & ~SCSI_TERM_ENA_L);
- if (i & 0x04) {
- j |= SCSI_TERM_ENA_L;
- pAdapterInfo->ai_stateinfo |= LOW_BYTE_TERM_ENA;
- }
- WR_HARPOON(ioport+hp_bm_ctrl, j );
-
- j = (RD_HARPOON(ioport+hp_ee_ctrl) & ~SCSI_TERM_ENA_H);
- if (i & 0x08) {
- j |= SCSI_TERM_ENA_H;
- pAdapterInfo->ai_stateinfo |= HIGH_BYTE_TERM_ENA;
- }
- WR_HARPOON(ioport+hp_ee_ctrl, j );
-
- if(RD_HARPOON(ioport + hp_page_ctrl) & BIOS_SHADOW)
- {
- pAdapterInfo->ai_FlashRomSize = 64 * 1024; /* 64k ROM */
- }
- else
- {
- pAdapterInfo->ai_FlashRomSize = 32 * 1024; /* 32k ROM */
- }
-
- pAdapterInfo->ai_stateinfo |= (FAST20_ENA | TAG_QUEUE_ENA);
- if (!(RD_HARPOON(ioport+hp_page_ctrl) & NARROW_SCSI_CARD))
- {
- pAdapterInfo->ai_attributes |= (WIDE_CAPABLE | FAST20_CAPABLE
-
| SCAM2_CAPABLE
-
| TAG_QUEUE_CAPABLE
-
| SUPRESS_UNDERRRUNS_CAPABLE
-
| SCSI_PARITY_CAPABLE);
- pAdapterInfo->ai_MaxTarg = 16;
- pAdapterInfo->ai_MaxLun = 32;
- }
- else
- {
- pAdapterInfo->ai_attributes |= (FAST20_CAPABLE | SCAM2_CAPABLE
-
| TAG_QUEUE_CAPABLE
-
| SUPRESS_UNDERRRUNS_CAPABLE
-
| SCSI_PARITY_CAPABLE);
- pAdapterInfo->ai_MaxTarg = 8;
- pAdapterInfo->ai_MaxLun = 8;
- }
-
- pAdapterInfo->ai_product_family = HARPOON_FAMILY;
- pAdapterInfo->ai_HBAbustype = BUSTYPE_PCI;
-
- for (i=0;i<CARD_MODEL_NAMELEN;i++)
- {
- pAdapterInfo->ai_card_model[i]=' '; /* initialize the ai_card_model */
- }
-
- if(pCurrNvRam){
- pAdapterInfo->ai_card_model[0] = '9';
- switch(pCurrNvRam->niModel & 0x0f){
- case MODEL_LT:
- pAdapterInfo->ai_card_model[1] = '3';
- pAdapterInfo->ai_card_model[2] = '0';
- break;
- case MODEL_LW:
- pAdapterInfo->ai_card_model[1] = '5';
- pAdapterInfo->ai_card_model[2] = '0';
- break;
- case MODEL_DL:
- pAdapterInfo->ai_card_model[1] = '3';
- pAdapterInfo->ai_card_model[2] = '2';
- break;
- case MODEL_DW:
- pAdapterInfo->ai_card_model[1] = '5';
- pAdapterInfo->ai_card_model[2] = '2';
- break;
- }
- }else{
- temp = utilEERead(ioport, (MODEL_NUMB_0/2));
- pAdapterInfo->ai_card_model[0] = (u08bits)(temp >> 8);
- temp = utilEERead(ioport, (MODEL_NUMB_2/2));
-
- pAdapterInfo->ai_card_model[1] = (u08bits)(temp & 0x00FF);
- pAdapterInfo->ai_card_model[2] = (u08bits)(temp >> 8);
- }
-
-
-
- pAdapterInfo->ai_FiberProductType = 0;
-
- pAdapterInfo->ai_secondary_range = 0;
-
- for (i=0;i<WORLD_WIDE_NAMELEN;i++)
- {
- pAdapterInfo->ai_worldwidename[i]='\0';
- }
-
- for (i=0;i<VENDOR_NAMELEN;i++)
- {
- pAdapterInfo->ai_vendorstring[i]='\0';
- }
- pAdapterInfo->ai_vendorstring[0]='B';
- pAdapterInfo->ai_vendorstring[1]='U';
- pAdapterInfo->ai_vendorstring[2]='S';
- pAdapterInfo->ai_vendorstring[3]='L';
- pAdapterInfo->ai_vendorstring[4]='O';
- pAdapterInfo->ai_vendorstring[5]='G';
- pAdapterInfo->ai_vendorstring[6]='I';
- pAdapterInfo->ai_vendorstring[7]='C';
-
- for (i=0;i<FAMILY_NAMELEN;i++)
- {
- pAdapterInfo->ai_AdapterFamilyString[i]='\0';
- }
- pAdapterInfo->ai_AdapterFamilyString[0]='F';
- pAdapterInfo->ai_AdapterFamilyString[1]='L';
- pAdapterInfo->ai_AdapterFamilyString[2]='A';
- pAdapterInfo->ai_AdapterFamilyString[3]='S';
- pAdapterInfo->ai_AdapterFamilyString[4]='H';
- pAdapterInfo->ai_AdapterFamilyString[5]='P';
- pAdapterInfo->ai_AdapterFamilyString[6]='O';
- pAdapterInfo->ai_AdapterFamilyString[7]='I';
- pAdapterInfo->ai_AdapterFamilyString[8]='N';
- pAdapterInfo->ai_AdapterFamilyString[9]='T';
-
- ARAM_ACCESS(ioport);
-
- for ( i = 0; i < 4; i++ ) {
-
- pAdapterInfo->ai_XlatInfo[i] =
- RD_HARPOON(ioport+hp_aramBase+BIOS_DATA_OFFSET+i);
- }
-
- /* return with -1 if no sort, else return with
- logical card number sorted by BIOS (zero-based) */
-
-
- pAdapterInfo->ai_relative_cardnum =
- (u08bits)(RD_HARPOON(ioport+hp_aramBase+BIOS_RELATIVE_CARD)-1);
-
- SGRAM_ACCESS(ioport);
-
- s_PhaseTbl[0] = phaseDataOut;
- s_PhaseTbl[1] = phaseDataIn;
- s_PhaseTbl[2] = phaseIllegal;
- s_PhaseTbl[3] = phaseIllegal;
- s_PhaseTbl[4] = phaseCommand;
- s_PhaseTbl[5] = phaseStatus;
- s_PhaseTbl[6] = phaseMsgOut;
- s_PhaseTbl[7] = phaseMsgIn;
-
- pAdapterInfo->ai_present = 0x01;
-
-#if defined(BUGBUG)
-
-
- for (i = 0; i < MAX_CARDS; i++) {
-
- for (id=0; id<debug_size; id++)
- debug_int[i][id] = (u08bits)0x00;
- debug_index[i] = 0;
- }
-
-#endif
-
- return(0);
-}
-
-
-
-
-
-/*---------------------------------------------------------------------
- *
- * Function: init_adapter, exported to BUDI via UCBMgr_init_adapter entry
- *
- *
- * Description: Setup adapter for normal operation (hard reset).
- *
- *---------------------------------------------------------------------*/
-STATIC CARD_HANDLE init_adapter(PADAPTER_INFO pCardInfo)
-{
- PSCCBcard CurrCard;
- PNVRamInfo pCurrNvRam;
- u08bits i,j,thisCard, ScamFlg;
- u16bits temp,sync_bit_map,id;
- BASE_PORT ioport;
-
- ioport = (BASE_PORT)pCardInfo->ai_baseaddr;
-
- for(thisCard =0; thisCard <= MAX_CARDS; thisCard++) {
-
- if (thisCard == MAX_CARDS) {
-
- return(FAILURE);
- }
-
- if (BL_Card[thisCard].ioPort == ioport) {
-
- CurrCard = &BL_Card[thisCard];
- SccbMgrTableInitCard(CurrCard,thisCard);
- break;
- }
-
- else if (BL_Card[thisCard].ioPort == 0x00) {
-
- BL_Card[thisCard].ioPort = ioport;
- CurrCard = &BL_Card[thisCard];
-
- if(mbCards)
- for(i = 0; i < mbCards; i++){
- if(CurrCard->ioPort ==
nvRamInfo[i].niBaseAddr)
- CurrCard->pNvRamInfo =
&nvRamInfo[i];
- }
- SccbMgrTableInitCard(CurrCard,thisCard);
- CurrCard->cardIndex = thisCard;
- CurrCard->cardInfo = pCardInfo;
-
- break;
- }
- }
-
- pCurrNvRam = CurrCard->pNvRamInfo;
-
-
- if(pCurrNvRam){
- ScamFlg = pCurrNvRam->niScamConf;
- }
- else{
- ScamFlg = (UCHAR) utilEERead(ioport, SCAM_CONFIG/2);
- }
-
-
- BusMasterInit(ioport);
- XbowInit(ioport, ScamFlg);
-
-#if defined (NO_BIOS_OPTION)
-
-
- if (DiagXbow(ioport)) return(FAILURE);
- if (DiagBusMaster(ioport)) return(FAILURE);
-
-#endif /* No BIOS Option */
-
- autoLoadDefaultMap(ioport);
-
-
- for (i = 0,id = 0x01; i != pCardInfo->ai_id; i++,id <<= 1){}
-
- WR_HARPOON(ioport+hp_selfid_0, id);
- WR_HARPOON(ioport+hp_selfid_1, 0x00);
- WR_HARPOON(ioport+hp_arb_id, pCardInfo->ai_id);
- CurrCard->ourId = (unsigned char) pCardInfo->ai_id;
-
- i = (u08bits) pCardInfo->ai_stateinfo;
- if (i & SCSI_PARITY_ENA)
- WR_HARPOON(ioport+hp_portctrl_1,(HOST_MODE8 | CHK_SCSI_P));
-
- j = (RD_HARPOON(ioport+hp_bm_ctrl) & ~SCSI_TERM_ENA_L);
- if (i & LOW_BYTE_TERM_ENA)
- j |= SCSI_TERM_ENA_L;
- WR_HARPOON(ioport+hp_bm_ctrl, j);
-
- j = (RD_HARPOON(ioport+hp_ee_ctrl) & ~SCSI_TERM_ENA_H);
- if (i & HIGH_BYTE_TERM_ENA)
- j |= SCSI_TERM_ENA_H;
- WR_HARPOON(ioport+hp_ee_ctrl, j );
-
-
- if (!(pCardInfo->ai_stateinfo & NO_RESET_IN_INIT)) {
-
- sresb(ioport,thisCard);
-
- scini(thisCard, (u08bits) pCardInfo->ai_id, 0);
- }
-
-
-
- if (pCardInfo->ai_stateinfo & SUPRESS_UNDERRRUNS_ENA)
- CurrCard->globalFlags |= F_NO_FILTER;
-
- if(pCurrNvRam){
- if(pCurrNvRam->niSysConf & 0x10)
- CurrCard->globalFlags |= F_GREEN_PC;
- }
- else{
- if (utilEERead(ioport, (SYSTEM_CONFIG/2)) & GREEN_PC_ENA)
- CurrCard->globalFlags |= F_GREEN_PC;
- }
-
- /* Set global flag to indicate Re-Negotiation to be done on all
- ckeck condition */
- if(pCurrNvRam){
- if(pCurrNvRam->niScsiConf & 0x04)
- CurrCard->globalFlags |= F_DO_RENEGO;
- }
- else{
- if (utilEERead(ioport, (SCSI_CONFIG/2)) & RENEGO_ENA)
- CurrCard->globalFlags |= F_DO_RENEGO;
- }
-
- if(pCurrNvRam){
- if(pCurrNvRam->niScsiConf & 0x08)
- CurrCard->globalFlags |= F_CONLUN_IO;
- }
- else{
- if (utilEERead(ioport, (SCSI_CONFIG/2)) & CONNIO_ENA)
- CurrCard->globalFlags |= F_CONLUN_IO;
- }
-
- temp = pCardInfo->ai_per_targ_no_disc;
-
- for (i = 0,id = 1; i < MAX_SCSI_TAR; i++, id <<= 1) {
-
- if (temp & id)
- sccbMgrTbl[thisCard][i].TarStatus |= TAR_ALLOW_DISC;
- }
-
- sync_bit_map = 0x0001;
-
- for (id = 0; id < (MAX_SCSI_TAR/2); id++){
-
- if(pCurrNvRam){
- temp = (USHORT) pCurrNvRam->niSyncTbl[id];
- temp = ((temp & 0x03) + ((temp << 4) & 0xc0)) +
- (((temp << 4) & 0x0300) + ((temp << 8)
& 0xc000));
- }else
- temp = utilEERead(ioport, (u16bits)((SYNC_RATE_TBL/2)+id));
-
- for (i = 0; i < 2; temp >>=8,i++){
-
- if (pCardInfo->ai_per_targ_init_sync & sync_bit_map){
-
- sccbMgrTbl[thisCard][id*2+i].TarEEValue = (u08bits)temp;
- }
-
- else {
- sccbMgrTbl[thisCard][id*2+i].TarStatus |= SYNC_SUPPORTED;
- sccbMgrTbl[thisCard][id*2+i].TarEEValue =
- (u08bits)(temp & ~EE_SYNC_MASK);
- }
-
-#if defined(WIDE_SCSI)
-/* if ((pCardInfo->ai_per_targ_wide_nego & sync_bit_map) ||
- (id*2+i >= 8)){
-*/
- if (pCardInfo->ai_per_targ_wide_nego & sync_bit_map){
-
- sccbMgrTbl[thisCard][id*2+i].TarEEValue |= EE_WIDE_SCSI;
-
- }
-
- else { /* NARROW SCSI */
- sccbMgrTbl[thisCard][id*2+i].TarStatus |= WIDE_NEGOCIATED;
- }
-
-#else
- sccbMgrTbl[thisCard][id*2+i].TarStatus |= WIDE_NEGOCIATED;
-#endif
-
-
- sync_bit_map <<= 1;
- }
- }
-
-
- pCardInfo->ai_SGListFormat=0x01;
- pCardInfo->ai_DataPtrFormat=0x01;
- pCardInfo->ai_AEN_mask &= SCSI_RESET_COMPLETE;
-
- WR_HARPOON((ioport+hp_semaphore),
- (u08bits)(RD_HARPOON((ioport+hp_semaphore)) | SCCB_MGR_PRESENT));
-
- return((u32bits)CurrCard);
-
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: build_ucb, exported to BUDI via UCBMgr_build_ucb entry
- *
- * Description: prepare fw portion of ucb. do not start, resource not
guaranteed
- * so don't manipulate anything that's derived from states which
- * may change
- *
- *---------------------------------------------------------------------*/
-void build_UCB(CARD_HANDLE pCurrCard, PUCB p_ucb)
-{
-
- u08bits thisCard;
- u08bits i,j;
-
- PSCCB p_sccb;
-
-
- thisCard = ((PSCCBcard) pCurrCard)->cardIndex;
-
-
- p_sccb=(PSCCB)p_ucb->UCB_MgrPrivatePtr;
-
-
- p_sccb->Sccb_ucb_ptr=p_ucb;
-
- switch (p_ucb->UCB_opcode & (OPC_DEVICE_RESET+OPC_XFER_SG+OPC_CHK_RESIDUAL))
- {
- case OPC_DEVICE_RESET:
- p_sccb->OperationCode=RESET_COMMAND;
- break;
- case OPC_XFER_SG:
- p_sccb->OperationCode=SCATTER_GATHER_COMMAND;
- break;
- case OPC_XFER_SG+OPC_CHK_RESIDUAL:
- p_sccb->OperationCode=RESIDUAL_SG_COMMAND;
- break;
- case OPC_CHK_RESIDUAL:
-
- p_sccb->OperationCode=RESIDUAL_COMMAND;
- break;
- default:
- p_sccb->OperationCode=SCSI_INITIATOR_COMMAND;
- break;
- }
-
- if (p_ucb->UCB_opcode & OPC_TQ_ENABLE)
- {
- p_sccb->ControlByte = (u08bits)((p_ucb->UCB_opcode & OPC_TQ_MASK)>>2) |
F_USE_CMD_Q;
- }
- else
- {
- p_sccb->ControlByte = 0;
- }
-
-
- p_sccb->CdbLength = (u08bits)p_ucb->UCB_cdblen;
-
- if (p_ucb->UCB_opcode & OPC_NO_AUTO_SENSE)
- {
- p_sccb->RequestSenseLength = 0;
- }
- else
- {
- p_sccb->RequestSenseLength = (unsigned char) p_ucb->UCB_senselen;
- }
-
-
- if (p_ucb->UCB_opcode & OPC_XFER_SG)
- {
- p_sccb->DataPointer=p_ucb->UCB_virt_dataptr;
- p_sccb->DataLength = (((u32bits)p_ucb->UCB_NumSgElements)<<3);
- }
- else
- {
- p_sccb->DataPointer=p_ucb->UCB_phys_dataptr;
- p_sccb->DataLength=p_ucb->UCB_datalen;
- };
-
- p_sccb->HostStatus=0;
- p_sccb->TargetStatus=0;
- p_sccb->TargID=(unsigned char)p_ucb->UCB_targid;
- p_sccb->Lun=(unsigned char) p_ucb->UCB_lun;
- p_sccb->SccbIOPort=((PSCCBcard)pCurrCard)->ioPort;
-
- j=p_ucb->UCB_cdblen;
- for (i=0;i<j;i++)
- {
- p_sccb->Cdb[i] = p_ucb->UCB_cdb[i];
- }
-
- p_sccb->SensePointer=p_ucb->UCB_phys_senseptr;
-
- sinits(p_sccb,thisCard);
-
-}
-#ifndef NO_IOCTLS
-
-/*---------------------------------------------------------------------
- *
- * Function: GetDevSyncRate
- *
- *---------------------------------------------------------------------*/
-STATIC int GetDevSyncRate(PSCCBcard pCurrCard,PUCB p_ucb)
-{
- struct _SYNC_RATE_INFO * pSyncStr;
- PSCCBMgr_tar_info currTar_Info;
- BASE_PORT ioport;
- u08bits scsiID, j;
-
-#if (FW_TYPE != _SCCB_MGR_)
- if( p_ucb->UCB_targid >= pCurrCard->cardInfo->ai_MaxTarg )
- {
- return(1);
- }
-#endif
-
- ioport = pCurrCard->ioPort;
- pSyncStr = (struct _SYNC_RATE_INFO *) p_ucb->UCB_virt_dataptr;
- scsiID = (u08bits) p_ucb->UCB_targid;
- currTar_Info = &sccbMgrTbl[pCurrCard->cardIndex][scsiID];
- j = currTar_Info->TarSyncCtrl;
-
- switch (currTar_Info->TarEEValue & EE_SYNC_MASK)
- {
- case EE_SYNC_ASYNC:
- pSyncStr->RequestMegaXferRate = 0x00;
- break;
- case EE_SYNC_5MB:
- pSyncStr->RequestMegaXferRate = (j & NARROW_SCSI) ? 50
: 100;
- break;
- case EE_SYNC_10MB:
- pSyncStr->RequestMegaXferRate = (j & NARROW_SCSI) ? 100
: 200;
- break;
- case EE_SYNC_20MB:
- pSyncStr->RequestMegaXferRate = (j & NARROW_SCSI) ? 200
: 400;
- break;
- }
-
- switch ((j >> 5) & 0x07)
- {
- case 0x00:
- if((j & 0x07) == 0x00)
- {
- pSyncStr->ActualMegaXferRate = 0x00; /*
Async Mode */
- }
- else
- {
- pSyncStr->ActualMegaXferRate = (j &
NARROW_SCSI) ? 200 : 400;
- }
- break;
- case 0x01:
- pSyncStr->ActualMegaXferRate = (j & NARROW_SCSI) ? 100
: 200;
- break;
- case 0x02:
- pSyncStr->ActualMegaXferRate = (j & NARROW_SCSI) ? 66 :
122;
- break;
- case 0x03:
- pSyncStr->ActualMegaXferRate = (j & NARROW_SCSI) ? 50 :
100;
- break;
- case 0x04:
- pSyncStr->ActualMegaXferRate = (j & NARROW_SCSI) ? 40 :
80;
- break;
- case 0x05:
- pSyncStr->ActualMegaXferRate = (j & NARROW_SCSI) ? 33 :
66;
- break;
- case 0x06:
- pSyncStr->ActualMegaXferRate = (j & NARROW_SCSI) ? 28 :
56;
- break;
- case 0x07:
- pSyncStr->ActualMegaXferRate = (j & NARROW_SCSI) ? 25 :
50;
- break;
- }
- pSyncStr->NegotiatedOffset = j & 0x0f;
-
- return(0);
-}
-
-/*---------------------------------------------------------------------
- *
- * Function: SetDevSyncRate
- *
- *---------------------------------------------------------------------*/
-STATIC int SetDevSyncRate(PSCCBcard pCurrCard, PUCB p_ucb)
-{
- struct _SYNC_RATE_INFO * pSyncStr;
- PSCCBMgr_tar_info currTar_Info;
- BASE_PORT ioPort;
- u08bits scsiID, i, j, syncVal;
- u16bits syncOffset, actualXferRate;
- union {
- u08bits tempb[2];
- u16bits tempw;
- }temp2;
-
-#if (FW_TYPE != _SCCB_MGR_)
- if( p_ucb->UCB_targid >= pCurrCard->cardInfo->ai_MaxTarg )
- {
- return(1);
- }
-#endif
-
- ioPort = pCurrCard->ioPort;
- pSyncStr = (struct _SYNC_RATE_INFO *) p_ucb->UCB_virt_dataptr;
- scsiID = (u08bits) p_ucb->UCB_targid;
- currTar_Info = &sccbMgrTbl[pCurrCard->cardIndex][scsiID];
- i = RD_HARPOON(ioPort+hp_xfer_pad); /* Save current value */
- WR_HARPOON(ioPort+hp_xfer_pad, (i | ID_UNLOCK));
- WR_HARPOON(ioPort+hp_select_id, ((scsiID << 4) | scsiID));
- j = RD_HARPOON(ioPort+hp_synctarg_0);
- WR_HARPOON(ioPort+hp_xfer_pad, i); /* restore value */
-
- actualXferRate = pSyncStr->ActualMegaXferRate;
- if(!(j & NARROW_SCSI))
- {
- actualXferRate <<= 1;
- }
- if(actualXferRate == 0x00)
- {
- syncVal = EE_SYNC_ASYNC; /* Async Mode */
- }
- if(actualXferRate == 0x0200)
- {
- syncVal = EE_SYNC_20MB; /* 20/40 MB
Mode */
- }
- if(actualXferRate > 0x0050 && actualXferRate < 0x0200 )
- {
- syncVal = EE_SYNC_10MB; /* 10/20 MB
Mode */
- }
- else
- {
- syncVal = EE_SYNC_5MB; /* 5/10 MB Mode
*/
- }
- if(currTar_Info->TarEEValue && EE_SYNC_MASK == syncVal)
- return(0);
- currTar_Info->TarEEValue = (currTar_Info->TarEEValue & !EE_SYNC_MASK)
-
| syncVal;
- syncOffset = (SYNC_RATE_TBL + scsiID) / 2;
- temp2.tempw = utilEERead(ioPort, syncOffset);
- if(scsiID & 0x01)
- {
- temp2.tempb[0] = (temp2.tempb[0] & !EE_SYNC_MASK) | syncVal;
- }
- else
- {
- temp2.tempb[1] = (temp2.tempb[1] & !EE_SYNC_MASK) | syncVal;
- }
- utilEEWriteOnOff(ioPort, 1);
- utilEEWrite(ioPort, temp2.tempw, syncOffset);
- utilEEWriteOnOff(ioPort, 0);
- UpdateCheckSum(ioPort);
-
- return(0);
-}
-/*---------------------------------------------------------------------
- *
- * Function: GetDevWideMode
- *
- *---------------------------------------------------------------------*/
-int GetDevWideMode(PSCCBcard pCurrCard,PUCB p_ucb)
-{
- u08bits *pData;
-
- pData = (u08bits *)p_ucb->UCB_virt_dataptr;
- if(sccbMgrTbl[pCurrCard->cardIndex][p_ucb->UCB_targid].TarEEValue
- & EE_WIDE_SCSI)
- {
- *pData = 1;
- }
- else
- {
- *pData = 0;
- }
-
- return(0);
-}
-
-/*---------------------------------------------------------------------
- *
- * Function: SetDevWideMode
- *
- *---------------------------------------------------------------------*/
-int SetDevWideMode(PSCCBcard pCurrCard,PUCB p_ucb)
-{
- u08bits *pData;
- PSCCBMgr_tar_info currTar_Info;
- BASE_PORT ioPort;
- u08bits scsiID, scsiWideMode;
- u16bits syncOffset;
- union {
- u08bits tempb[2];
- u16bits tempw;
- }temp2;
-
-#if (FW_TYPE != _SCCB_MGR_)
- if( !(pCurrCard->cardInfo->ai_attributes & WIDE_CAPABLE) )
- {
- return(1);
- }
-
- if( p_ucb->UCB_targid >= pCurrCard->cardInfo->ai_MaxTarg )
- {
- return(1);
- }
-#endif
-
- ioPort = pCurrCard->ioPort;
- pData = (u08bits *)p_ucb->UCB_virt_dataptr;
- scsiID = (u08bits) p_ucb->UCB_targid;
- currTar_Info = &sccbMgrTbl[pCurrCard->cardIndex][scsiID];
-
- if(*pData)
- {
- if(currTar_Info->TarEEValue & EE_WIDE_SCSI)
- {
- return(0);
- }
- else
- {
- scsiWideMode = EE_WIDE_SCSI;
- }
- }
- else
- {
- if(!currTar_Info->TarEEValue & EE_WIDE_SCSI)
- {
- return(0);
- }
- else
- {
- scsiWideMode = 0;
- }
- }
- currTar_Info->TarEEValue = (currTar_Info->TarEEValue & !EE_WIDE_SCSI)
-
| scsiWideMode;
-
- syncOffset = (SYNC_RATE_TBL + scsiID) / 2;
- temp2.tempw = utilEERead(ioPort, syncOffset);
- if(scsiID & 0x01)
- {
- temp2.tempb[0] = (temp2.tempb[0] & !EE_WIDE_SCSI) |
scsiWideMode;
- }
- else
- {
- temp2.tempb[1] = (temp2.tempb[1] & !EE_WIDE_SCSI) |
scsiWideMode;
- }
- utilEEWriteOnOff(ioPort, 1);
- utilEEWrite(ioPort, temp2.tempw, syncOffset);
- utilEEWriteOnOff(ioPort, 0);
- UpdateCheckSum(ioPort);
-
- return(0);
-}
-
-/*---------------------------------------------------------------------
- *
- * Function: ReadNVRam
- *
- *---------------------------------------------------------------------*/
-void ReadNVRam(PSCCBcard pCurrCard,PUCB p_ucb)
-{
- u08bits *pdata;
- u16bits i,numwrds,numbytes,offset,temp;
- u08bits OneMore = FALSE;
-#if defined(DOS)
- u16bits ioport;
-#else
- u32bits ioport;
-#endif
-
- numbytes = (u16bits) p_ucb->UCB_datalen;
- ioport = pCurrCard->ioPort;
- pdata = (u08bits *) p_ucb->UCB_virt_dataptr;
- offset = (u16bits) (p_ucb->UCB_IOCTLParams[0]);
-
-
-
- if (offset & 0x1)
- {
- *((u16bits*) pdata) = utilEERead(ioport,(u16bits)((offset - 1) /
2)); /* 16 bit read */
- *pdata = *(pdata + 1);
- ++offset;
- ++pdata;
- --numbytes;
- }
-
- numwrds = numbytes / 2;
- if (numbytes & 1)
- OneMore = TRUE;
-
- for (i = 0; i < numwrds; i++)
- {
- *((u16bits*) pdata) = utilEERead(ioport,(u16bits)(offset / 2));
- pdata += 2;
- offset += 2;
- }
- if (OneMore)
- {
- --pdata;
- -- offset;
- temp = utilEERead(ioport,(u16bits)(offset / 2));
- *pdata = (u08bits) (temp);
- }
-
-} /* end proc ReadNVRam */
-
-
-/*---------------------------------------------------------------------
- *
- * Function: WriteNVRam
- *
- *---------------------------------------------------------------------*/
-void WriteNVRam(PSCCBcard pCurrCard,PUCB p_ucb)
-{
- u08bits *pdata;
- u16bits i,numwrds,numbytes,offset, eeprom_end;
- u08bits OneMore = FALSE;
- union {
- u08bits tempb[2];
- u16bits tempw;
- } temp2;
-
-#if defined(DOS)
- u16bits ioport;
-#else
- u32bits ioport;
-#endif
-
- numbytes = (u16bits) p_ucb->UCB_datalen;
- ioport = pCurrCard->ioPort;
- pdata = (u08bits *) p_ucb->UCB_virt_dataptr;
- offset = (u16bits) (p_ucb->UCB_IOCTLParams[0]);
-
- if (RD_HARPOON(ioport+hp_page_ctrl) & NARROW_SCSI_CARD)
- eeprom_end = 512;
- else
- eeprom_end = 768;
-
- if(offset > eeprom_end)
- return;
-
- if((offset + numbytes) > eeprom_end)
- numbytes = eeprom_end - offset;
-
- utilEEWriteOnOff(ioport,1); /* Enable write access to the EEPROM */
-
-
-
- if (offset & 0x1)
- {
- temp2.tempw = utilEERead(ioport,(u16bits)((offset - 1) / 2)); /* 16
bit read */
- temp2.tempb[1] = *pdata;
- utilEEWrite(ioport, temp2.tempw, (u16bits)((offset -1) / 2));
- *pdata = *(pdata + 1);
- ++offset;
- ++pdata;
- --numbytes;
- }
-
- numwrds = numbytes / 2;
- if (numbytes & 1)
- OneMore = TRUE;
-
- for (i = 0; i < numwrds; i++)
- {
- utilEEWrite(ioport, *((pu16bits)pdata),(u16bits)(offset / 2));
- pdata += 2;
- offset += 2;
- }
- if (OneMore)
- {
-
- temp2.tempw = utilEERead(ioport,(u16bits)(offset / 2));
- temp2.tempb[0] = *pdata;
- utilEEWrite(ioport, temp2.tempw, (u16bits)(offset / 2));
- }
- utilEEWriteOnOff(ioport,0); /* Turn off write access */
- UpdateCheckSum((u32bits)ioport);
-
-} /* end proc WriteNVRam */
-
-
-
-/*---------------------------------------------------------------------
- *
- * Function: UpdateCheckSum
- *
- * Description: Update Check Sum in EEPROM
- *
- *---------------------------------------------------------------------*/
-
-
-void UpdateCheckSum(u32bits baseport)
-{
- USHORT i,sum_data, eeprom_end;
-
- sum_data = 0x0000;
-
-
- if (RD_HARPOON(baseport+hp_page_ctrl) & NARROW_SCSI_CARD)
- eeprom_end = 512;
- else
- eeprom_end = 768;
-
- for (i = 1; i < eeprom_end/2; i++)
- {
- sum_data += utilEERead(baseport, i);
- }
-
- utilEEWriteOnOff(baseport,1); /* Enable write access to the EEPROM */
-
- utilEEWrite(baseport, sum_data, EEPROM_CHECK_SUM/2);
- utilEEWriteOnOff(baseport,0); /* Turn off write access */
-}
-
-void SccbMgr_save_foreign_state(PADAPTER_INFO pAdapterInfo)
-{
-}
-
-
-void SccbMgr_restore_foreign_state(CARD_HANDLE pCurrCard)
-{
-}
-
-void SccbMgr_restore_native_state(CARD_HANDLE pCurrCard)
-{
-}
-
-#endif /* NO_IOCTLS */
-
-#endif /* (FW_TYPE==_UCB_MGR_) */
-
-#ifndef NO_IOCTLS
-#if (FW_TYPE==_UCB_MGR_)
-void SccbMgr_unload_card(CARD_HANDLE pCurrCard)
-#else
-#if defined(DOS)
-void SccbMgr_unload_card(USHORT pCurrCard)
-#else
-void SccbMgr_unload_card(ULONG pCurrCard)
-#endif
-#endif
-{
- UCHAR i;
-#if defined(DOS)
- USHORT portBase;
- USHORT regOffset;
-#else
- ULONG portBase;
- ULONG regOffset;
-#endif
- ULONG scamData;
-#if defined(OS2)
- ULONG far *pScamTbl;
-#else
- ULONG *pScamTbl;
-#endif
- PNVRamInfo pCurrNvRam;
-
- pCurrNvRam = ((PSCCBcard)pCurrCard)->pNvRamInfo;
-
- if(pCurrNvRam){
- WrStack(pCurrNvRam->niBaseAddr, 0, pCurrNvRam->niModel);
- WrStack(pCurrNvRam->niBaseAddr, 1, pCurrNvRam->niSysConf);
- WrStack(pCurrNvRam->niBaseAddr, 2, pCurrNvRam->niScsiConf);
- WrStack(pCurrNvRam->niBaseAddr, 3, pCurrNvRam->niScamConf);
- WrStack(pCurrNvRam->niBaseAddr, 4, pCurrNvRam->niAdapId);
-
- for(i = 0; i < MAX_SCSI_TAR / 2; i++)
- WrStack(pCurrNvRam->niBaseAddr, (UCHAR)(i+5),
pCurrNvRam->niSyncTbl[i]);
-
- portBase = pCurrNvRam->niBaseAddr;
-
- for(i = 0; i < MAX_SCSI_TAR; i++){
- regOffset = hp_aramBase + 64 + i*4;
-#if defined(OS2)
- pScamTbl = (ULONG far *) &pCurrNvRam->niScamTbl[i];
-#else
- pScamTbl = (ULONG *) &pCurrNvRam->niScamTbl[i];
-#endif
- scamData = *pScamTbl;
- WR_HARP32(portBase, regOffset, scamData);
- }
-
- }else{
- WrStack(((PSCCBcard)pCurrCard)->ioPort, 0, 0);
- }
-}
-#endif /* NO_IOCTLS */
-
-
-void RNVRamData(PNVRamInfo pNvRamInfo)
-{
- UCHAR i;
-#if defined(DOS)
- USHORT portBase;
- USHORT regOffset;
-#else
- ULONG portBase;
- ULONG regOffset;
-#endif
- ULONG scamData;
-#if defined (OS2)
- ULONG far *pScamTbl;
-#else
- ULONG *pScamTbl;
-#endif
-
- pNvRamInfo->niModel = RdStack(pNvRamInfo->niBaseAddr, 0);
- pNvRamInfo->niSysConf = RdStack(pNvRamInfo->niBaseAddr, 1);
- pNvRamInfo->niScsiConf = RdStack(pNvRamInfo->niBaseAddr, 2);
- pNvRamInfo->niScamConf = RdStack(pNvRamInfo->niBaseAddr, 3);
- pNvRamInfo->niAdapId = RdStack(pNvRamInfo->niBaseAddr, 4);
-
- for(i = 0; i < MAX_SCSI_TAR / 2; i++)
- pNvRamInfo->niSyncTbl[i] = RdStack(pNvRamInfo->niBaseAddr,
(UCHAR)(i+5));
-
- portBase = pNvRamInfo->niBaseAddr;
-
- for(i = 0; i < MAX_SCSI_TAR; i++){
- regOffset = hp_aramBase + 64 + i*4;
- RD_HARP32(portBase, regOffset, scamData);
-#if defined(OS2)
- pScamTbl = (ULONG far *) &pNvRamInfo->niScamTbl[i];
-#else
- pScamTbl = (ULONG *) &pNvRamInfo->niScamTbl[i];
-#endif
- *pScamTbl = scamData;
- }
-
-}
-
-#if defined(DOS)
-UCHAR RdStack(USHORT portBase, UCHAR index)
-#else
-UCHAR RdStack(ULONG portBase, UCHAR index)
-#endif
-{
- WR_HARPOON(portBase + hp_stack_addr, index);
- return(RD_HARPOON(portBase + hp_stack_data));
-}
-
-#if defined(DOS)
-void WrStack(USHORT portBase, UCHAR index, UCHAR data)
-#else
-void WrStack(ULONG portBase, UCHAR index, UCHAR data)
-#endif
-{
- WR_HARPOON(portBase + hp_stack_addr, index);
- WR_HARPOON(portBase + hp_stack_data, data);
-}
-
-
-#if (FW_TYPE==_UCB_MGR_)
-u08bits ChkIfChipInitialized(BASE_PORT ioPort)
-#else
-#if defined(DOS)
-UCHAR ChkIfChipInitialized(USHORT ioPort)
-#else
-UCHAR ChkIfChipInitialized(ULONG ioPort)
-#endif
-#endif
-{
- if((RD_HARPOON(ioPort + hp_arb_id) & 0x0f) != RdStack(ioPort, 4))
- return(FALSE);
- if((RD_HARPOON(ioPort + hp_clkctrl_0) & CLKCTRL_DEFAULT)
- !=
CLKCTRL_DEFAULT)
- return(FALSE);
- if((RD_HARPOON(ioPort + hp_seltimeout) == TO_250ms) ||
- (RD_HARPOON(ioPort + hp_seltimeout) == TO_290ms))
- return(TRUE);
- return(FALSE);
-
-}
-/*---------------------------------------------------------------------
- *
- * Function: SccbMgr_start_sccb
- *
- * Description: Start a command pointed to by p_Sccb. When the
- * command is completed it will be returned via the
- * callback function.
- *
- *---------------------------------------------------------------------*/
-#if (FW_TYPE==_UCB_MGR_)
-void SccbMgr_start_sccb(CARD_HANDLE pCurrCard, PUCB p_ucb)
-#else
-#if defined(DOS)
-void SccbMgr_start_sccb(USHORT pCurrCard, PSCCB p_Sccb)
-#else
-void SccbMgr_start_sccb(ULONG pCurrCard, PSCCB p_Sccb)
-#endif
-#endif
-{
-#if defined(DOS)
- USHORT ioport;
-#else
- ULONG ioport;
-#endif
- UCHAR thisCard, lun;
- PSCCB pSaveSccb;
- CALL_BK_FN callback;
-
-#if (FW_TYPE==_UCB_MGR_)
- PSCCB p_Sccb;
-#endif
-
- mOS_Lock((PSCCBcard)pCurrCard);
- thisCard = ((PSCCBcard) pCurrCard)->cardIndex;
- ioport = ((PSCCBcard) pCurrCard)->ioPort;
-
-#if (FW_TYPE==_UCB_MGR_)
- p_Sccb = (PSCCB)p_ucb->UCB_MgrPrivatePtr;
-#endif
-
- if((p_Sccb->TargID > MAX_SCSI_TAR) || (p_Sccb->Lun > MAX_LUN))
- {
-
-#if (FW_TYPE==_UCB_MGR_)
- p_ucb->UCB_hbastat = SCCB_COMPLETE;
- p_ucb->UCB_status=SCCB_ERROR;
- callback = (CALL_BK_FN)p_ucb->UCB_callback;
- if (callback)
- callback(p_ucb);
-#endif
-
-#if (FW_TYPE==_SCCB_MGR_)
- p_Sccb->HostStatus = SCCB_COMPLETE;
- p_Sccb->SccbStatus = SCCB_ERROR;
- callback = (CALL_BK_FN)p_Sccb->SccbCallback;
- if (callback)
- callback(p_Sccb);
-#endif
-
- mOS_UnLock((PSCCBcard)pCurrCard);
- return;
- }
-
-#if (FW_TYPE==_SCCB_MGR_)
- sinits(p_Sccb,thisCard);
-#endif
-
-
-#if (FW_TYPE==_UCB_MGR_)
-#ifndef NO_IOCTLS
-
- if (p_ucb->UCB_opcode & OPC_IOCTL)
- {
-
- switch (p_ucb->UCB_IOCTLCommand)
- {
- case READ_NVRAM:
- ReadNVRam((PSCCBcard)pCurrCard,p_ucb);
- p_ucb->UCB_status=UCB_SUCCESS;
- callback = (CALL_BK_FN)p_ucb->UCB_callback;
- if (callback)
- callback(p_ucb);
- mOS_UnLock((PSCCBcard)pCurrCard);
- return;
-
- case WRITE_NVRAM:
- WriteNVRam((PSCCBcard)pCurrCard,p_ucb);
- p_ucb->UCB_status=UCB_SUCCESS;
- callback = (CALL_BK_FN)p_ucb->UCB_callback;
- if (callback)
- callback(p_ucb);
- mOS_UnLock((PSCCBcard)pCurrCard);
- return;
-
- case SEND_SCSI_PASSTHRU:
-#if (FW_TYPE != _SCCB_MGR_)
- if( p_ucb->UCB_targid >=
-
((PSCCBcard)pCurrCard)->cardInfo->ai_MaxTarg )
- {
- p_ucb->UCB_status = UCB_ERROR;
- p_ucb->UCB_hbastat = HASTAT_HW_ERROR;
- callback =
(CALL_BK_FN)p_ucb->UCB_callback;
- if (callback)
- callback(p_ucb);
- mOS_UnLock((PSCCBcard)pCurrCard);
- return;
- }
-#endif
- break;
-
- case HARD_RESET:
- p_ucb->UCB_status = UCB_INVALID;
- callback = (CALL_BK_FN)p_ucb->UCB_callback;
- if (callback)
- callback(p_ucb);
- mOS_UnLock((PSCCBcard)pCurrCard);
- return;
- case GET_DEVICE_SYNCRATE:
- if( !GetDevSyncRate((PSCCBcard)pCurrCard,p_ucb)
)
- {
- p_ucb->UCB_status = UCB_SUCCESS;
- }
- else
- {
- p_ucb->UCB_status = UCB_ERROR;
- p_ucb->UCB_hbastat = HASTAT_HW_ERROR;
- }
- callback = (CALL_BK_FN)p_ucb->UCB_callback;
- if (callback)
- callback(p_ucb);
- mOS_UnLock((PSCCBcard)pCurrCard);
- return;
- case SET_DEVICE_SYNCRATE:
- if( !SetDevSyncRate((PSCCBcard)pCurrCard,p_ucb)
)
- {
- p_ucb->UCB_status = UCB_SUCCESS;
- }
- else
- {
- p_ucb->UCB_status = UCB_ERROR;
- p_ucb->UCB_hbastat = HASTAT_HW_ERROR;
- }
- callback = (CALL_BK_FN)p_ucb->UCB_callback;
- if (callback)
- callback(p_ucb);
- mOS_UnLock((PSCCBcard)pCurrCard);
- return;
- case GET_WIDE_MODE:
- if( !GetDevWideMode((PSCCBcard)pCurrCard,p_ucb)
)
- {
- p_ucb->UCB_status = UCB_SUCCESS;
- }
- else
- {
- p_ucb->UCB_status = UCB_ERROR;
- p_ucb->UCB_hbastat = HASTAT_HW_ERROR;
- }
- callback = (CALL_BK_FN)p_ucb->UCB_callback;
- if (callback)
- callback(p_ucb);
- mOS_UnLock((PSCCBcard)pCurrCard);
- return;
- case SET_WIDE_MODE:
- if( !SetDevWideMode((PSCCBcard)pCurrCard,p_ucb)
)
- {
- p_ucb->UCB_status = UCB_SUCCESS;
- }
- else
- {
- p_ucb->UCB_status = UCB_ERROR;
- p_ucb->UCB_hbastat = HASTAT_HW_ERROR;
- }
- callback = (CALL_BK_FN)p_ucb->UCB_callback;
- if (callback)
- callback(p_ucb);
- mOS_UnLock((PSCCBcard)pCurrCard);
- return;
- default:
- p_ucb->UCB_status=UCB_INVALID;
- callback = (CALL_BK_FN)p_ucb->UCB_callback;
- if (callback)
- callback(p_ucb);
- mOS_UnLock((PSCCBcard)pCurrCard);
- return;
- }
- }
-#endif /* NO_IOCTLS */
-#endif /* (FW_TYPE==_UCB_MGR_) */
-
-
- if (!((PSCCBcard) pCurrCard)->cmdCounter)
- {
- WR_HARPOON(ioport+hp_semaphore, (RD_HARPOON(ioport+hp_semaphore)
- | SCCB_MGR_ACTIVE));
-
- if (((PSCCBcard) pCurrCard)->globalFlags & F_GREEN_PC)
- {
- WR_HARPOON(ioport+hp_clkctrl_0, CLKCTRL_DEFAULT);
- WR_HARPOON(ioport+hp_sys_ctrl, 0x00);
- }
- }
-
- ((PSCCBcard)pCurrCard)->cmdCounter++;
-
- if (RD_HARPOON(ioport+hp_semaphore) & BIOS_IN_USE) {
-
- WR_HARPOON(ioport+hp_semaphore, (RD_HARPOON(ioport+hp_semaphore)
- | TICKLE_ME));
- if(p_Sccb->OperationCode == RESET_COMMAND)
- {
- pSaveSccb = ((PSCCBcard)
pCurrCard)->currentSCCB;
- ((PSCCBcard) pCurrCard)->currentSCCB = p_Sccb;
- queueSelectFail(&BL_Card[thisCard], thisCard);
- ((PSCCBcard) pCurrCard)->currentSCCB =
pSaveSccb;
- }
- else
- {
- queueAddSccb(p_Sccb,thisCard);
- }
- }
-
- else if ((RD_HARPOON(ioport+hp_page_ctrl) & G_INT_DISABLE)) {
-
- if(p_Sccb->OperationCode == RESET_COMMAND)
- {
- pSaveSccb = ((PSCCBcard)
pCurrCard)->currentSCCB;
- ((PSCCBcard) pCurrCard)->currentSCCB =
p_Sccb;
- queueSelectFail(&BL_Card[thisCard],
thisCard);
- ((PSCCBcard) pCurrCard)->currentSCCB =
pSaveSccb;
- }
- else
- {
- queueAddSccb(p_Sccb,thisCard);
- }
- }
-
- else {
-
- MDISABLE_INT(ioport);
-
- if((((PSCCBcard) pCurrCard)->globalFlags & F_CONLUN_IO) &&
- ((sccbMgrTbl[thisCard][p_Sccb->TargID].TarStatus &
TAR_TAG_Q_MASK) != TAG_Q_TRYING))
- lun = p_Sccb->Lun;
- else
- lun = 0;
- if ((((PSCCBcard) pCurrCard)->currentSCCB == NULL) &&
- (sccbMgrTbl[thisCard][p_Sccb->TargID].TarSelQ_Cnt == 0) &&
- (sccbMgrTbl[thisCard][p_Sccb->TargID].TarLUNBusy[lun]
- == FALSE)) {
-
- ((PSCCBcard) pCurrCard)->currentSCCB = p_Sccb;
- mOS_UnLock((PSCCBcard)pCurrCard);
-#if defined(DOS)
- ssel((USHORT)p_Sccb->SccbIOPort,thisCard);
-#else
- ssel(p_Sccb->SccbIOPort,thisCard);
-#endif
- mOS_Lock((PSCCBcard)pCurrCard);
- }
-
- else {
-
- if(p_Sccb->OperationCode == RESET_COMMAND)
- {
- pSaveSccb = ((PSCCBcard)
pCurrCard)->currentSCCB;
- ((PSCCBcard) pCurrCard)->currentSCCB =
p_Sccb;
- queueSelectFail(&BL_Card[thisCard],
thisCard);
- ((PSCCBcard) pCurrCard)->currentSCCB =
pSaveSccb;
- }
- else
- {
- queueAddSccb(p_Sccb,thisCard);
- }
- }
-
-
- MENABLE_INT(ioport);
- }
-
- mOS_UnLock((PSCCBcard)pCurrCard);
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: SccbMgr_abort_sccb
- *
- * Description: Abort the command pointed to by p_Sccb. When the
- * command is completed it will be returned via the
- * callback function.
- *
- *---------------------------------------------------------------------*/
-#if (FW_TYPE==_UCB_MGR_)
-s32bits SccbMgr_abort_sccb(CARD_HANDLE pCurrCard, PUCB p_ucb)
-#else
-#if defined(DOS)
-int SccbMgr_abort_sccb(USHORT pCurrCard, PSCCB p_Sccb)
-#else
-int SccbMgr_abort_sccb(ULONG pCurrCard, PSCCB p_Sccb)
-#endif
-#endif
-
-{
-#if defined(DOS)
- USHORT ioport;
-#else
- ULONG ioport;
-#endif
-
- UCHAR thisCard;
- CALL_BK_FN callback;
- UCHAR TID;
- PSCCB pSaveSCCB;
- PSCCBMgr_tar_info currTar_Info;
-
-
-#if (FW_TYPE==_UCB_MGR_)
- PSCCB p_Sccb;
- p_Sccb=(PSCCB)p_ucb->UCB_MgrPrivatePtr;
-#endif
-
- ioport = ((PSCCBcard) pCurrCard)->ioPort;
-
- thisCard = ((PSCCBcard)pCurrCard)->cardIndex;
-
- mOS_Lock((PSCCBcard)pCurrCard);
-
- if (RD_HARPOON(ioport+hp_page_ctrl) & G_INT_DISABLE)
- {
- mOS_UnLock((PSCCBcard)pCurrCard);
- }
-
- else
- {
-
- if (queueFindSccb(p_Sccb,thisCard))
- {
-
- mOS_UnLock((PSCCBcard)pCurrCard);
-
- ((PSCCBcard)pCurrCard)->cmdCounter--;
-
- if (!((PSCCBcard)pCurrCard)->cmdCounter)
-
WR_HARPOON(ioport+hp_semaphore,(RD_HARPOON(ioport+hp_semaphore)
- & (UCHAR)(~(SCCB_MGR_ACTIVE |
TICKLE_ME)) ));
-
-#if (FW_TYPE==_SCCB_MGR_)
- p_Sccb->SccbStatus = SCCB_ABORT;
- callback = p_Sccb->SccbCallback;
- callback(p_Sccb);
-#else
- p_ucb->UCB_status=SCCB_ABORT;
- callback = (CALL_BK_FN)p_ucb->UCB_callback;
- callback(p_ucb);
-#endif
-
- return(0);
- }
-
- else
- {
- mOS_UnLock((PSCCBcard)pCurrCard);
-
- if (((PSCCBcard)pCurrCard)->currentSCCB == p_Sccb)
- {
- p_Sccb->SccbStatus = SCCB_ABORT;
- return(0);
-
- }
-
- else
- {
-
- TID = p_Sccb->TargID;
-
-
- if(p_Sccb->Sccb_tag)
- {
- MDISABLE_INT(ioport);
- if (((PSCCBcard)
pCurrCard)->discQ_Tbl[p_Sccb->Sccb_tag]==p_Sccb)
- {
- p_Sccb->SccbStatus = SCCB_ABORT;
- p_Sccb->Sccb_scsistat =
ABORT_ST;
-#if (FW_TYPE==_UCB_MGR_)
- p_ucb->UCB_status=SCCB_ABORT;
-#endif
- p_Sccb->Sccb_scsimsg =
SMABORT_TAG;
-
- if(((PSCCBcard)
pCurrCard)->currentSCCB == NULL)
- {
- ((PSCCBcard)
pCurrCard)->currentSCCB = p_Sccb;
- ssel(ioport, thisCard);
- }
- else
- {
- pSaveSCCB =
((PSCCBcard) pCurrCard)->currentSCCB;
- ((PSCCBcard)
pCurrCard)->currentSCCB = p_Sccb;
-
queueSelectFail((PSCCBcard) pCurrCard, thisCard);
- ((PSCCBcard)
pCurrCard)->currentSCCB = pSaveSCCB;
- }
- }
- MENABLE_INT(ioport);
- return(0);
- }
- else
- {
- currTar_Info =
&sccbMgrTbl[thisCard][p_Sccb->TargID];
-
-
if(BL_Card[thisCard].discQ_Tbl[currTar_Info->LunDiscQ_Idx[p_Sccb->Lun]]
- == p_Sccb)
- {
- p_Sccb->SccbStatus = SCCB_ABORT;
- return(0);
- }
- }
- }
- }
- }
- return(-1);
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: SccbMgr_my_int
- *
- * Description: Do a quick check to determine if there is a pending
- * interrupt for this card and disable the IRQ Pin if so.
- *
- *---------------------------------------------------------------------*/
-#if (FW_TYPE==_UCB_MGR_)
-u08bits SccbMgr_my_int(CARD_HANDLE pCurrCard)
-#else
-#if defined(DOS)
-UCHAR SccbMgr_my_int(USHORT pCurrCard)
-#else
-UCHAR SccbMgr_my_int(ULONG pCurrCard)
-#endif
-#endif
-{
-#if defined(DOS)
- USHORT ioport;
-#else
- ULONG ioport;
-#endif
-
- ioport = ((PSCCBcard)pCurrCard)->ioPort;
-
- if (RD_HARPOON(ioport+hp_int_status) & INT_ASSERTED)
- {
-
-#if defined(DOS)
- MDISABLE_INT(ioport);
-#endif
-
- return(TRUE);
- }
-
- else
-
- return(FALSE);
-}
-
-
-
-/*---------------------------------------------------------------------
- *
- * Function: SccbMgr_isr
- *
- * Description: This is our entry point when an interrupt is generated
- * by the card and the upper level driver passes it on to
- * us.
- *
- *---------------------------------------------------------------------*/
-#if (FW_TYPE==_UCB_MGR_)
-s32bits SccbMgr_isr(CARD_HANDLE pCurrCard)
-#else
-#if defined(DOS)
-int SccbMgr_isr(USHORT pCurrCard)
-#else
-int SccbMgr_isr(ULONG pCurrCard)
-#endif
-#endif
-{
- PSCCB currSCCB;
- UCHAR thisCard,result,bm_status, bm_int_st;
- USHORT hp_int;
- UCHAR i, target;
-#if defined(DOS)
- USHORT ioport;
-#else
- ULONG ioport;
-#endif
-
- mOS_Lock((PSCCBcard)pCurrCard);
-
- thisCard = ((PSCCBcard)pCurrCard)->cardIndex;
- ioport = ((PSCCBcard)pCurrCard)->ioPort;
-
- MDISABLE_INT(ioport);
-
-#if defined(BUGBUG)
- WR_HARPOON(ioport+hp_user_defined_D, RD_HARPOON(ioport+hp_int_status));
-#endif
-
- if ((bm_int_st=RD_HARPOON(ioport+hp_int_status)) & EXT_STATUS_ON)
- bm_status = RD_HARPOON(ioport+hp_ext_status) &
(UCHAR)BAD_EXT_STATUS;
- else
- bm_status = 0;
-
- WR_HARPOON(ioport+hp_int_mask, (INT_CMD_COMPL | SCSI_INTERRUPT));
-
- mOS_UnLock((PSCCBcard)pCurrCard);
-
- while ((hp_int = RDW_HARPOON((ioport+hp_intstat)) & default_intena) |
- bm_status)
- {
-
- currSCCB = ((PSCCBcard)pCurrCard)->currentSCCB;
-
-#if defined(BUGBUG)
- Debug_Load(thisCard,(UCHAR) 0XFF);
- Debug_Load(thisCard,bm_int_st);
-
- Debug_Load(thisCard,hp_int_0);
- Debug_Load(thisCard,hp_int_1);
-#endif
-
-
- if (hp_int & (FIFO | TIMEOUT | RESET | SCAM_SEL) || bm_status) {
- result =
SccbMgr_bad_isr(ioport,thisCard,((PSCCBcard)pCurrCard),hp_int);
- WRW_HARPOON((ioport+hp_intstat), (FIFO | TIMEOUT | RESET | SCAM_SEL));
- bm_status = 0;
-
- if (result) {
-
- mOS_Lock((PSCCBcard)pCurrCard);
- MENABLE_INT(ioport);
- mOS_UnLock((PSCCBcard)pCurrCard);
- return(result);
- }
- }
-
-
- else if (hp_int & ICMD_COMP) {
-
- if ( !(hp_int & BUS_FREE) ) {
- /* Wait for the BusFree before starting a new command. We
- must also check for being reselected since the BusFree
- may not show up if another device reselects us in 1.5us or
- less. SRR Wednesday, 3/8/1995.
- */
- while (!(RDW_HARPOON((ioport+hp_intstat)) & (BUS_FREE | RSEL))) ;
- }
-
- if (((PSCCBcard)pCurrCard)->globalFlags & F_HOST_XFER_ACT)
-
- phaseChkFifo(ioport, thisCard);
-
-/* WRW_HARPOON((ioport+hp_intstat),
- (BUS_FREE | ICMD_COMP | ITAR_DISC | XFER_CNT_0));
- */
-
- WRW_HARPOON((ioport+hp_intstat), CLR_ALL_INT_1);
-
- autoCmdCmplt(ioport,thisCard);
-
- }
-
-
- else if (hp_int & ITAR_DISC)
- {
-
- if (((PSCCBcard)pCurrCard)->globalFlags & F_HOST_XFER_ACT) {
-
- phaseChkFifo(ioport, thisCard);
-
- }
-
- if (RD_HARPOON(ioport+hp_gp_reg_1) == SMSAVE_DATA_PTR) {
-
- WR_HARPOON(ioport+hp_gp_reg_1, 0x00);
- currSCCB->Sccb_XferState |= F_NO_DATA_YET;
-
- currSCCB->Sccb_savedATC = currSCCB->Sccb_ATC;
- }
-
- currSCCB->Sccb_scsistat = DISCONNECT_ST;
- queueDisconnect(currSCCB,thisCard);
-
- /* Wait for the BusFree before starting a new command. We
- must also check for being reselected since the BusFree
- may not show up if another device reselects us in 1.5us or
- less. SRR Wednesday, 3/8/1995.
- */
- while (!(RDW_HARPOON((ioport+hp_intstat)) & (BUS_FREE | RSEL)) &&
- !((RDW_HARPOON((ioport+hp_intstat)) & PHASE) &&
- RD_HARPOON((ioport+hp_scsisig)) ==
- (SCSI_BSY | SCSI_REQ | SCSI_CD | SCSI_MSG | SCSI_IOBIT))) ;
-
- /*
- The additional loop exit condition above detects a timing problem
- with the revision D/E harpoon chips. The caller should reset the
- host adapter to recover when 0xFE is returned.
- */
- if (!(RDW_HARPOON((ioport+hp_intstat)) & (BUS_FREE | RSEL)))
- {
- mOS_Lock((PSCCBcard)pCurrCard);
- MENABLE_INT(ioport);
- mOS_UnLock((PSCCBcard)pCurrCard);
- return 0xFE;
- }
-
- WRW_HARPOON((ioport+hp_intstat), (BUS_FREE | ITAR_DISC));
-
-
- ((PSCCBcard)pCurrCard)->globalFlags |= F_NEW_SCCB_CMD;
-
- }
-
-
- else if (hp_int & RSEL) {
-
- WRW_HARPOON((ioport+hp_intstat), (PROG_HLT | RSEL | PHASE |
BUS_FREE));
-
- if (RDW_HARPOON((ioport+hp_intstat)) & ITAR_DISC)
- {
- if (((PSCCBcard)pCurrCard)->globalFlags & F_HOST_XFER_ACT)
- {
- phaseChkFifo(ioport, thisCard);
- }
-
- if (RD_HARPOON(ioport+hp_gp_reg_1) == SMSAVE_DATA_PTR)
- {
- WR_HARPOON(ioport+hp_gp_reg_1, 0x00);
- currSCCB->Sccb_XferState |= F_NO_DATA_YET;
- currSCCB->Sccb_savedATC = currSCCB->Sccb_ATC;
- }
-
- WRW_HARPOON((ioport+hp_intstat), (BUS_FREE | ITAR_DISC));
- currSCCB->Sccb_scsistat = DISCONNECT_ST;
- queueDisconnect(currSCCB,thisCard);
- }
-
- sres(ioport,thisCard,((PSCCBcard)pCurrCard));
- phaseDecode(ioport,thisCard);
-
- }
-
-
- else if ((hp_int & IDO_STRT) && (!(hp_int & BUS_FREE)))
- {
-
- WRW_HARPOON((ioport+hp_intstat), (IDO_STRT | XFER_CNT_0));
- phaseDecode(ioport,thisCard);
-
- }
-
-
- else if ( (hp_int & IUNKWN) || (hp_int & PROG_HLT) )
- {
- WRW_HARPOON((ioport+hp_intstat), (PHASE | IUNKWN |
PROG_HLT));
- if ((RD_HARPOON(ioport+hp_prgmcnt_0) & (UCHAR)0x3f)<
(UCHAR)SELCHK)
- {
- phaseDecode(ioport,thisCard);
- }
- else
- {
- /* Harpoon problem some SCSI target device respond to selection
- with short BUSY pulse (<400ns) this will make the Harpoon is not able
- to latch the correct Target ID into reg. x53.
- The work around require to correct this reg. But when write to this
- reg. (0x53) also increment the FIFO write addr reg (0x6f), thus we
- need to read this reg first then restore it later. After update to 0x53 */
-
- i = (UCHAR)(RD_HARPOON(ioport+hp_fifowrite));
- target = (UCHAR)(RD_HARPOON(ioport+hp_gp_reg_3));
- WR_HARPOON(ioport+hp_xfer_pad, (UCHAR) ID_UNLOCK);
- WR_HARPOON(ioport+hp_select_id, (UCHAR)(target |
target<<4));
- WR_HARPOON(ioport+hp_xfer_pad, (UCHAR) 0x00);
- WR_HARPOON(ioport+hp_fifowrite, i);
- WR_HARPOON(ioport+hp_autostart_3,
(AUTO_IMMED+TAG_STRT));
- }
- }
-
- else if (hp_int & XFER_CNT_0) {
-
- WRW_HARPOON((ioport+hp_intstat), XFER_CNT_0);
-
- schkdd(ioport,thisCard);
-
- }
-
-
- else if (hp_int & BUS_FREE) {
-
- WRW_HARPOON((ioport+hp_intstat), BUS_FREE);
-
- if (((PSCCBcard)pCurrCard)->globalFlags & F_HOST_XFER_ACT) {
-
- hostDataXferAbort(ioport,thisCard,currSCCB);
- }
-
- phaseBusFree(ioport,thisCard);
- }
-
-
- else if (hp_int & ITICKLE) {
-
- WRW_HARPOON((ioport+hp_intstat), ITICKLE);
- ((PSCCBcard)pCurrCard)->globalFlags |= F_NEW_SCCB_CMD;
- }
-
-
-
- if (((PSCCBcard)pCurrCard)->globalFlags & F_NEW_SCCB_CMD) {
-
-
- ((PSCCBcard)pCurrCard)->globalFlags &= ~F_NEW_SCCB_CMD;
-
-
- if (((PSCCBcard)pCurrCard)->currentSCCB == NULL) {
-
- queueSearchSelect(((PSCCBcard)pCurrCard),thisCard);
- }
-
- if (((PSCCBcard)pCurrCard)->currentSCCB != NULL) {
- ((PSCCBcard)pCurrCard)->globalFlags &= ~F_NEW_SCCB_CMD;
- ssel(ioport,thisCard);
- }
-
- break;
-
- }
-
- } /*end while */
-
- mOS_Lock((PSCCBcard)pCurrCard);
- MENABLE_INT(ioport);
- mOS_UnLock((PSCCBcard)pCurrCard);
-
- return(0);
-}
-
-/*---------------------------------------------------------------------
- *
- * Function: Sccb_bad_isr
- *
- * Description: Some type of interrupt has occurred which is slightly
- * out of the ordinary. We will now decode it fully, in
- * this routine. This is broken up in an attempt to save
- * processing time.
- *
- *---------------------------------------------------------------------*/
-#if defined(DOS)
-UCHAR SccbMgr_bad_isr(USHORT p_port, UCHAR p_card, PSCCBcard pCurrCard, USHORT
p_int)
-#else
-UCHAR SccbMgr_bad_isr(ULONG p_port, UCHAR p_card, PSCCBcard pCurrCard, USHORT
p_int)
-#endif
-{
-#if defined(HARP_REVX)
- ULONG timer;
-#endif
-UCHAR temp, ScamFlg;
-PSCCBMgr_tar_info currTar_Info;
-PNVRamInfo pCurrNvRam;
-
-
- if (RD_HARPOON(p_port+hp_ext_status) &
- (BM_FORCE_OFF | PCI_DEV_TMOUT | BM_PARITY_ERR | PIO_OVERRUN) )
- {
-
- if (pCurrCard->globalFlags & F_HOST_XFER_ACT)
- {
-
- hostDataXferAbort(p_port,p_card, pCurrCard->currentSCCB);
- }
-
- if (RD_HARPOON(p_port+hp_pci_stat_cfg) & REC_MASTER_ABORT)
-
- {
- WR_HARPOON(p_port+hp_pci_stat_cfg,
- (RD_HARPOON(p_port+hp_pci_stat_cfg) & ~REC_MASTER_ABORT));
-
- WR_HARPOON(p_port+hp_host_blk_cnt, 0x00);
-
- }
-
- if (pCurrCard->currentSCCB != NULL)
- {
-
- if (!pCurrCard->currentSCCB->HostStatus)
- pCurrCard->currentSCCB->HostStatus = SCCB_BM_ERR;
-
- sxfrp(p_port,p_card);
-
- temp = (UCHAR)(RD_HARPOON(p_port+hp_ee_ctrl) &
- (EXT_ARB_ACK |
SCSI_TERM_ENA_H));
- WR_HARPOON(p_port+hp_ee_ctrl, ((UCHAR)temp | SEE_MS | SEE_CS));
- WR_HARPOON(p_port+hp_ee_ctrl, temp);
-
- if (!(RDW_HARPOON((p_port+hp_intstat)) & (BUS_FREE | RESET)))
- {
- phaseDecode(p_port,p_card);
- }
- }
- }
-
-
- else if (p_int & RESET)
- {
-
- WR_HARPOON(p_port+hp_clkctrl_0,
CLKCTRL_DEFAULT);
- WR_HARPOON(p_port+hp_sys_ctrl, 0x00);
- if (pCurrCard->currentSCCB != NULL) {
-
- if (pCurrCard->globalFlags & F_HOST_XFER_ACT)
-
- hostDataXferAbort(p_port,p_card, pCurrCard->currentSCCB);
- }
-
-
- DISABLE_AUTO(p_port);
-
- sresb(p_port,p_card);
-
- while(RD_HARPOON(p_port+hp_scsictrl_0) & SCSI_RST) {}
-
- pCurrNvRam = pCurrCard->pNvRamInfo;
- if(pCurrNvRam){
- ScamFlg = pCurrNvRam->niScamConf;
- }
- else{
- ScamFlg = (UCHAR) utilEERead(p_port,
SCAM_CONFIG/2);
- }
-
- XbowInit(p_port, ScamFlg);
-
- scini(p_card, pCurrCard->ourId, 0);
-
- return(0xFF);
- }
-
-
- else if (p_int & FIFO) {
-
- WRW_HARPOON((p_port+hp_intstat), FIFO);
-
-#if defined(HARP_REVX)
-
- for (timer=0x00FFFFFFL; timer != 0x00000000L; timer--) {
-
- if (RD_HARPOON(p_port+hp_xferstat) & FIFO_EMPTY)
- break;
-
- if (RDW_HARPOON((p_port+hp_intstat)) & BUS_FREE)
- break;
- }
-
-
- if ( (RD_HARPOON(p_port+hp_xferstat) & FIFO_EMPTY) &&
- (RD_HARPOON(p_port+hp_fiforead) !=
- RD_HARPOON(p_port+hp_fifowrite)) &&
- (RD_HARPOON(p_port+hp_xfercnt_0))
- )
-
- WR_HARPOON((p_port+hp_xferstat), 0x01);
-
-/* else
- */
-/* sxfrp(p_port,p_card);
- */
-#else
- if (pCurrCard->currentSCCB != NULL)
- sxfrp(p_port,p_card);
-#endif
- }
-
- else if (p_int & TIMEOUT)
- {
-
- DISABLE_AUTO(p_port);
-
- WRW_HARPOON((p_port+hp_intstat),
- (PROG_HLT | TIMEOUT | SEL |BUS_FREE | PHASE | IUNKWN));
-
- pCurrCard->currentSCCB->HostStatus = SCCB_SELECTION_TIMEOUT;
-
-
- currTar_Info =
&sccbMgrTbl[p_card][pCurrCard->currentSCCB->TargID];
- if((pCurrCard->globalFlags & F_CONLUN_IO) &&
- ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) !=
TAG_Q_TRYING))
- currTar_Info->TarLUNBusy[pCurrCard->currentSCCB->Lun] = FALSE;
- else
- currTar_Info->TarLUNBusy[0] = FALSE;
-
-
- if (currTar_Info->TarEEValue & EE_SYNC_MASK)
- {
- currTar_Info->TarSyncCtrl = 0;
- currTar_Info->TarStatus &= ~TAR_SYNC_MASK;
- }
-
- if (currTar_Info->TarEEValue & EE_WIDE_SCSI)
- {
- currTar_Info->TarStatus &= ~TAR_WIDE_MASK;
- }
-
- sssyncv(p_port, pCurrCard->currentSCCB->TargID,
NARROW_SCSI,currTar_Info);
-
- queueCmdComplete(pCurrCard, pCurrCard->currentSCCB, p_card);
-
- }
-
-#if defined(SCAM_LEV_2)
-
- else if (p_int & SCAM_SEL)
- {
-
- scarb(p_port,LEVEL2_TAR);
- scsel(p_port);
- scasid(p_card, p_port);
-
- scbusf(p_port);
-
- WRW_HARPOON((p_port+hp_intstat), SCAM_SEL);
- }
-#endif
-
- return(0x00);
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: SccbMgr_scsi_reset
- *
- * Description: A SCSI bus reset will be generated and all outstanding
- * Sccbs will be returned via the callback.
- *
- *---------------------------------------------------------------------*/
-#if (FW_TYPE==_UCB_MGR_)
-void SccbMgr_scsi_reset(CARD_HANDLE pCurrCard)
-#else
-#if defined(DOS)
-void SccbMgr_scsi_reset(USHORT pCurrCard)
-#else
-void SccbMgr_scsi_reset(ULONG pCurrCard)
-#endif
-#endif
-{
- UCHAR thisCard;
-
- thisCard = ((PSCCBcard)pCurrCard)->cardIndex;
-
- mOS_Lock((PSCCBcard)pCurrCard);
-
- if (((PSCCBcard) pCurrCard)->globalFlags & F_GREEN_PC)
- {
- WR_HARPOON(((PSCCBcard) pCurrCard)->ioPort+hp_clkctrl_0,
CLKCTRL_DEFAULT);
- WR_HARPOON(((PSCCBcard) pCurrCard)->ioPort+hp_sys_ctrl, 0x00);
- }
-
- sresb(((PSCCBcard)pCurrCard)->ioPort,thisCard);
-
- if (RD_HARPOON(((PSCCBcard)pCurrCard)->ioPort+hp_ext_status) & BM_CMD_BUSY)
- {
- WR_HARPOON(((PSCCBcard) pCurrCard)->ioPort+hp_page_ctrl,
- (RD_HARPOON(((PSCCBcard) pCurrCard)->ioPort+hp_page_ctrl)
- & ~SCATTER_EN));
-
- WR_HARPOON(((PSCCBcard) pCurrCard)->ioPort+hp_sg_addr,0x00);
-
- ((PSCCBcard) pCurrCard)->globalFlags &= ~F_HOST_XFER_ACT;
- busMstrTimeOut(((PSCCBcard) pCurrCard)->ioPort);
-
- WR_HARPOON(((PSCCBcard) pCurrCard)->ioPort+hp_int_mask,
- (INT_CMD_COMPL | SCSI_INTERRUPT));
- }
-
-/*
- if (utilEERead(((PSCCBcard)pCurrCard)->ioPort, (SCAM_CONFIG/2))
- & SCAM_ENABLED)
-*/
- scini(thisCard, ((PSCCBcard)pCurrCard)->ourId, 0);
-
-#if (FW_TYPE==_UCB_MGR_)
- ((PSCCBcard)pCurrCard)->cardInfo->ai_AEN_routine(0x01,pCurrCard,0,0,0,0);
-#endif
-
- mOS_UnLock((PSCCBcard)pCurrCard);
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: SccbMgr_timer_expired
- *
- * Description: This function allow me to kill my own job that has not
- * yet completed, and has cause a timeout to occur. This
- * timeout has caused the upper level driver to call this
- * function.
- *
- *---------------------------------------------------------------------*/
-
-#if (FW_TYPE==_UCB_MGR_)
-void SccbMgr_timer_expired(CARD_HANDLE pCurrCard)
-#else
-#if defined(DOS)
-void SccbMgr_timer_expired(USHORT pCurrCard)
-#else
-void SccbMgr_timer_expired(ULONG pCurrCard)
-#endif
-#endif
-{
-}
-
-#if defined(DOS)
-/*---------------------------------------------------------------------
- *
- * Function: SccbMgr_status
- *
- * Description: This function returns the number of outstanding SCCB's.
- * This is specific to the DOS enviroment, which needs this
- * to help them keep protected and real mode commands staight.
- *
- *---------------------------------------------------------------------*/
-
-USHORT SccbMgr_status(USHORT pCurrCard)
-{
- return(BL_Card[pCurrCard].cmdCounter);
-}
-#endif
-
-/*---------------------------------------------------------------------
- *
- * Function: SccbMgrTableInit
- *
- * Description: Initialize all Sccb manager data structures.
- *
- *---------------------------------------------------------------------*/
-
-void SccbMgrTableInitAll()
-{
- UCHAR thisCard;
-
- for (thisCard = 0; thisCard < MAX_CARDS; thisCard++)
- {
- SccbMgrTableInitCard(&BL_Card[thisCard],thisCard);
-
- BL_Card[thisCard].ioPort = 0x00;
- BL_Card[thisCard].cardInfo = NULL;
- BL_Card[thisCard].cardIndex = 0xFF;
- BL_Card[thisCard].ourId = 0x00;
- BL_Card[thisCard].pNvRamInfo = NULL;
- }
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: SccbMgrTableInit
- *
- * Description: Initialize all Sccb manager data structures.
- *
- *---------------------------------------------------------------------*/
-
-void SccbMgrTableInitCard(PSCCBcard pCurrCard, UCHAR p_card)
-{
- UCHAR scsiID, qtag;
-
- for (qtag = 0; qtag < QUEUE_DEPTH; qtag++)
- {
- BL_Card[p_card].discQ_Tbl[qtag] = NULL;
- }
-
- for (scsiID = 0; scsiID < MAX_SCSI_TAR; scsiID++)
- {
- sccbMgrTbl[p_card][scsiID].TarStatus = 0;
- sccbMgrTbl[p_card][scsiID].TarEEValue = 0;
- SccbMgrTableInitTarget(p_card, scsiID);
- }
-
- pCurrCard->scanIndex = 0x00;
- pCurrCard->currentSCCB = NULL;
- pCurrCard->globalFlags = 0x00;
- pCurrCard->cmdCounter = 0x00;
- pCurrCard->tagQ_Lst = 0x01;
- pCurrCard->discQCount = 0;
-
-
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: SccbMgrTableInit
- *
- * Description: Initialize all Sccb manager data structures.
- *
- *---------------------------------------------------------------------*/
-
-void SccbMgrTableInitTarget(UCHAR p_card, UCHAR target)
-{
-
- UCHAR lun, qtag;
- PSCCBMgr_tar_info currTar_Info;
-
- currTar_Info = &sccbMgrTbl[p_card][target];
-
- currTar_Info->TarSelQ_Cnt = 0;
- currTar_Info->TarSyncCtrl = 0;
-
- currTar_Info->TarSelQ_Head = NULL;
- currTar_Info->TarSelQ_Tail = NULL;
- currTar_Info->TarTagQ_Cnt = 0;
- currTar_Info->TarLUN_CA = FALSE;
-
-
- for (lun = 0; lun < MAX_LUN; lun++)
- {
- currTar_Info->TarLUNBusy[lun] = FALSE;
- currTar_Info->LunDiscQ_Idx[lun] = 0;
- }
-
- for (qtag = 0; qtag < QUEUE_DEPTH; qtag++)
- {
- if(BL_Card[p_card].discQ_Tbl[qtag] != NULL)
- {
- if(BL_Card[p_card].discQ_Tbl[qtag]->TargID == target)
- {
- BL_Card[p_card].discQ_Tbl[qtag] = NULL;
- BL_Card[p_card].discQCount--;
- }
- }
- }
-}
-
-#if defined(BUGBUG)
-
-/*****************************************************************
- * Save the current byte in the debug array
- *****************************************************************/
-
-
-void Debug_Load(UCHAR p_card, UCHAR p_bug_data)
-{
- debug_int[p_card][debug_index[p_card]] = p_bug_data;
- debug_index[p_card]++;
-
- if (debug_index[p_card] == debug_size)
-
- debug_index[p_card] = 0;
-}
-
-#endif
-
-/*----------------------------------------------------------------------
- *
- *
- * Copyright 1995-1996 by Mylex Corporation. All Rights Reserved
- *
- * This file is available under both the GNU General Public License
- * and a BSD-style copyright; see LICENSE.FlashPoint for details.
- *
- * $Workfile: sccb_dat.c $
- *
- * Description: Functions relating to handling of the SCCB interface
- * between the device driver and the HARPOON.
- *
- * $Date: 1999/04/26 05:53:56 $
- *
- * $Revision: 1.1 $
- *
- *----------------------------------------------------------------------*/
-
-/*#include <globals.h>*/
-
-#if (FW_TYPE==_UCB_MGR_)
- /*#include <budi.h>*/
-#endif
-
-/*#include <sccbmgr.h>*/
-/*#include <blx30.h>*/
-/*#include <target.h>*/
-/*#include <harpoon.h>*/
-
-/*
-** IMPORTANT NOTE!!!
-**
-** You MUST preassign all data to a valid value or zero. This is
-** required due to the MS compiler bug under OS/2 and Solaris Real-Mode
-** driver environment.
-*/
-
-
-SCCBMGR_TAR_INFO sccbMgrTbl[MAX_CARDS][MAX_SCSI_TAR] = { { { 0 } } };
-SCCBCARD BL_Card[MAX_CARDS] = { { 0 } };
-SCCBSCAM_INFO scamInfo[MAX_SCSI_TAR] = { { { 0 } } };
-NVRAMINFO nvRamInfo[MAX_MB_CARDS] = { { 0 } };
-
-
-#if defined(OS2)
-void (far *s_PhaseTbl[8]) (ULONG, UCHAR) = { 0 };
-UCHAR temp_id_string[ID_STRING_LENGTH] = { 0 };
-#elif defined(SOLARIS_REAL_MODE) || defined(__STDC__)
-void (*s_PhaseTbl[8]) (ULONG, UCHAR) = { 0 };
-#else
-void (*s_PhaseTbl[8]) ();
-#endif
-
-#if defined(DOS)
-UCHAR first_time = 0;
-#endif
-
-UCHAR mbCards = 0;
-UCHAR scamHAString[] = {0x63, 0x07, 'B', 'U', 'S', 'L', 'O', 'G', 'I', 'C', \
- ' ', 'B', 'T',
'-', '9', '3', '0', \
- 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, \
- 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20};
-
-USHORT default_intena = 0;
-
-#if defined(BUGBUG)
-UCHAR debug_int[MAX_CARDS][debug_size] = { 0 };
-UCHAR debug_index[MAX_CARDS] = { 0 };
-UCHAR reserved_1[3] = { 0 };
-#endif
-
-/*----------------------------------------------------------------------
- *
- *
- * Copyright 1995-1996 by Mylex Corporation. All Rights Reserved
- *
- * This file is available under both the GNU General Public License
- * and a BSD-style copyright; see LICENSE.FlashPoint for details.
- *
- * $Workfile: scsi.c $
- *
- * Description: Functions for handling SCSI bus functions such as
- * selection/reselection, sync negotiation, message-in
- * decoding.
- *
- * $Date: 1999/04/26 05:53:56 $
- *
- * $Revision: 1.1 $
- *
- *----------------------------------------------------------------------*/
-
-/*#include <globals.h>*/
-
-#if (FW_TYPE==_UCB_MGR_)
- /*#include <budi.h>*/
-#endif
-
-/*#include <sccbmgr.h>*/
-/*#include <blx30.h>*/
-/*#include <target.h>*/
-/*#include <scsi2.h>*/
-/*#include <eeprom.h>*/
-/*#include <harpoon.h>*/
-
-
-/*
-extern SCCBCARD BL_Card[MAX_CARDS];
-extern SCCBMGR_TAR_INFO sccbMgrTbl[MAX_CARDS][MAX_SCSI_TAR];
-#if defined(BUGBUG)
-void Debug_Load(UCHAR p_card, UCHAR p_bug_data);
-#endif
-*/
-
-/*---------------------------------------------------------------------
- *
- * Function: sfetm
- *
- * Description: Read in a message byte from the SCSI bus, and check
- * for a parity error.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-UCHAR sfm(USHORT port, PSCCB pCurrSCCB)
-#else
-UCHAR sfm(ULONG port, PSCCB pCurrSCCB)
-#endif
-{
- UCHAR message;
- USHORT TimeOutLoop;
-
- TimeOutLoop = 0;
- while( (!(RD_HARPOON(port+hp_scsisig) & SCSI_REQ)) &&
- (TimeOutLoop++ < 20000) ){}
-
-
- WR_HARPOON(port+hp_portctrl_0, SCSI_PORT);
-
- message = RD_HARPOON(port+hp_scsidata_0);
-
- WR_HARPOON(port+hp_scsisig, SCSI_ACK + S_MSGI_PH);
-
-
- if (TimeOutLoop > 20000)
- message = 0x00; /* force message byte = 0 if Time Out on Req
*/
-
- if ((RDW_HARPOON((port+hp_intstat)) & PARITY) &&
- (RD_HARPOON(port+hp_addstat) & SCSI_PAR_ERR))
- {
- WR_HARPOON(port+hp_scsisig, (SCSI_ACK + S_ILL_PH));
- WR_HARPOON(port+hp_xferstat, 0);
- WR_HARPOON(port+hp_fiforead, 0);
- WR_HARPOON(port+hp_fifowrite, 0);
- if (pCurrSCCB != NULL)
- {
- pCurrSCCB->Sccb_scsimsg = SMPARITY;
- }
- message = 0x00;
- do
- {
- ACCEPT_MSG_ATN(port);
- TimeOutLoop = 0;
- while( (!(RD_HARPOON(port+hp_scsisig) & SCSI_REQ)) &&
- (TimeOutLoop++ < 20000) ){}
- if (TimeOutLoop > 20000)
- {
- WRW_HARPOON((port+hp_intstat), PARITY);
- return(message);
- }
- if ((RD_HARPOON(port+hp_scsisig) & S_SCSI_PHZ) !=
S_MSGI_PH)
- {
- WRW_HARPOON((port+hp_intstat), PARITY);
- return(message);
- }
- WR_HARPOON(port+hp_portctrl_0, SCSI_PORT);
-
- RD_HARPOON(port+hp_scsidata_0);
-
- WR_HARPOON(port+hp_scsisig, (SCSI_ACK + S_ILL_PH));
-
- }while(1);
-
- }
- WR_HARPOON(port+hp_scsisig, (SCSI_ACK + S_ILL_PH));
- WR_HARPOON(port+hp_xferstat, 0);
- WR_HARPOON(port+hp_fiforead, 0);
- WR_HARPOON(port+hp_fifowrite, 0);
- return(message);
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: ssel
- *
- * Description: Load up automation and select target device.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void ssel(USHORT port, UCHAR p_card)
-#else
-void ssel(ULONG port, UCHAR p_card)
-#endif
-{
-
-#if defined(DOS)
- UCHAR auto_loaded, i, target, *theCCB;
-#elif defined(OS2)
- UCHAR auto_loaded, i, target;
- UCHAR far *theCCB;
-#else
- UCHAR auto_loaded, i, target, *theCCB;
-#endif
-
-#if defined(DOS)
- USHORT cdb_reg;
-#else
- ULONG cdb_reg;
-#endif
- PSCCBcard CurrCard;
- PSCCB currSCCB;
- PSCCBMgr_tar_info currTar_Info;
- UCHAR lastTag, lun;
-
- CurrCard = &BL_Card[p_card];
- currSCCB = CurrCard->currentSCCB;
- target = currSCCB->TargID;
- currTar_Info = &sccbMgrTbl[p_card][target];
- lastTag = CurrCard->tagQ_Lst;
-
- ARAM_ACCESS(port);
-
-
- if ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) == TAG_Q_REJECT)
- currSCCB->ControlByte &= ~F_USE_CMD_Q;
-
- if(((CurrCard->globalFlags & F_CONLUN_IO) &&
- ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) != TAG_Q_TRYING)))
-
- lun = currSCCB->Lun;
- else
- lun = 0;
-
-
-#if defined(DOS)
- currTar_Info->TarLUNBusy[lun] = TRUE;
-
-#else
-
- if (CurrCard->globalFlags & F_TAG_STARTED)
- {
- if (!(currSCCB->ControlByte & F_USE_CMD_Q))
- {
- if ((currTar_Info->TarLUN_CA == FALSE)
- && ((currTar_Info->TarStatus & TAR_TAG_Q_MASK)
- == TAG_Q_TRYING))
- {
-
- if (currTar_Info->TarTagQ_Cnt !=0)
- {
- currTar_Info->TarLUNBusy[lun] = TRUE;
- queueSelectFail(CurrCard,p_card);
- SGRAM_ACCESS(port);
- return;
- }
-
- else {
- currTar_Info->TarLUNBusy[lun] = TRUE;
- }
-
- } /*End non-tagged */
-
- else {
- currTar_Info->TarLUNBusy[lun] = TRUE;
- }
-
- } /*!Use cmd Q Tagged */
-
- else {
- if (currTar_Info->TarLUN_CA == TRUE)
- {
- queueSelectFail(CurrCard,p_card);
- SGRAM_ACCESS(port);
- return;
- }
-
- currTar_Info->TarLUNBusy[lun] = TRUE;
-
- } /*else use cmd Q tagged */
-
- } /*if glob tagged started */
-
- else {
- currTar_Info->TarLUNBusy[lun] = TRUE;
- }
-
-#endif /* DOS */
-
-
-
- if((((CurrCard->globalFlags & F_CONLUN_IO) &&
- ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) != TAG_Q_TRYING))
- || (!(currSCCB->ControlByte & F_USE_CMD_Q))))
- {
- if(CurrCard->discQCount >= QUEUE_DEPTH)
- {
- currTar_Info->TarLUNBusy[lun] = TRUE;
- queueSelectFail(CurrCard,p_card);
- SGRAM_ACCESS(port);
- return;
- }
- for (i = 1; i < QUEUE_DEPTH; i++)
- {
- if (++lastTag >= QUEUE_DEPTH) lastTag = 1;
- if (CurrCard->discQ_Tbl[lastTag] == NULL)
- {
- CurrCard->tagQ_Lst = lastTag;
- currTar_Info->LunDiscQ_Idx[lun] = lastTag;
- CurrCard->discQ_Tbl[lastTag] = currSCCB;
- CurrCard->discQCount++;
- break;
- }
- }
- if(i == QUEUE_DEPTH)
- {
- currTar_Info->TarLUNBusy[lun] = TRUE;
- queueSelectFail(CurrCard,p_card);
- SGRAM_ACCESS(port);
- return;
- }
- }
-
-
-
- auto_loaded = FALSE;
-
- WR_HARPOON(port+hp_select_id, target);
- WR_HARPOON(port+hp_gp_reg_3, target); /* Use by new automation logic */
-
- if (currSCCB->OperationCode == RESET_COMMAND) {
- WRW_HARPOON((port+ID_MSG_STRT), (MPM_OP+AMSG_OUT+
- (currSCCB->Sccb_idmsg & ~DISC_PRIV)));
-
- WRW_HARPOON((port+ID_MSG_STRT+2),BRH_OP+ALWAYS+NP);
-
- currSCCB->Sccb_scsimsg = SMDEV_RESET;
-
- WR_HARPOON(port+hp_autostart_3, (SELECT+SELCHK_STRT));
- auto_loaded = TRUE;
- currSCCB->Sccb_scsistat = SELECT_BDR_ST;
-
- if (currTar_Info->TarEEValue & EE_SYNC_MASK)
- {
- currTar_Info->TarSyncCtrl = 0;
- currTar_Info->TarStatus &= ~TAR_SYNC_MASK;
- }
-
-#if defined(WIDE_SCSI)
-
- if (currTar_Info->TarEEValue & EE_WIDE_SCSI)
- {
- currTar_Info->TarStatus &= ~TAR_WIDE_MASK;
- }
-#endif
-
- sssyncv(port, target, NARROW_SCSI,currTar_Info);
- SccbMgrTableInitTarget(p_card, target);
-
- }
-
- else if(currSCCB->Sccb_scsistat == ABORT_ST)
- {
- WRW_HARPOON((port+ID_MSG_STRT), (MPM_OP+AMSG_OUT+
-
(currSCCB->Sccb_idmsg & ~DISC_PRIV)));
-
- WRW_HARPOON((port+ID_MSG_STRT+2),BRH_OP+ALWAYS+CMDPZ);
-
- WRW_HARPOON((port+SYNC_MSGS+0), (MPM_OP+AMSG_OUT+
-
(((UCHAR)(currSCCB->ControlByte & TAG_TYPE_MASK)
- >> 6) |
(UCHAR)0x20)));
- WRW_HARPOON((port+SYNC_MSGS+2),
-
(MPM_OP+AMSG_OUT+currSCCB->Sccb_tag));
- WRW_HARPOON((port+SYNC_MSGS+4), (BRH_OP+ALWAYS+NP ));
-
- WR_HARPOON(port+hp_autostart_3, (SELECT+SELCHK_STRT));
- auto_loaded = TRUE;
-
- }
-
-#if defined(WIDE_SCSI)
-
-
- else if (!(currTar_Info->TarStatus & WIDE_NEGOCIATED)) {
- auto_loaded = siwidn(port,p_card);
- currSCCB->Sccb_scsistat = SELECT_WN_ST;
- }
-
-#endif
-
-
- else if (!((currTar_Info->TarStatus & TAR_SYNC_MASK)
- == SYNC_SUPPORTED)) {
- auto_loaded = sisyncn(port,p_card, FALSE);
- currSCCB->Sccb_scsistat = SELECT_SN_ST;
- }
-
-
- if (!auto_loaded)
- {
-
-#if !defined(DOS)
- if (currSCCB->ControlByte & F_USE_CMD_Q)
- {
-
- CurrCard->globalFlags |= F_TAG_STARTED;
-
- if ((currTar_Info->TarStatus & TAR_TAG_Q_MASK)
- == TAG_Q_REJECT)
- {
- currSCCB->ControlByte &= ~F_USE_CMD_Q;
-
- /* Fix up the start instruction with a jump to
- Non-Tag-CMD handling */
- WRW_HARPOON((port+ID_MSG_STRT),BRH_OP+ALWAYS+NTCMD);
-
- WRW_HARPOON((port+NON_TAG_ID_MSG),
- (MPM_OP+AMSG_OUT+currSCCB->Sccb_idmsg));
-
- WR_HARPOON(port+hp_autostart_3, (SELECT+SELCHK_STRT));
-
- /* Setup our STATE so we know what happend when
- the wheels fall off. */
- currSCCB->Sccb_scsistat = SELECT_ST;
-
- currTar_Info->TarLUNBusy[lun] = TRUE;
- }
-
- else
- {
- WRW_HARPOON((port+ID_MSG_STRT),
(MPM_OP+AMSG_OUT+currSCCB->Sccb_idmsg));
-
- WRW_HARPOON((port+ID_MSG_STRT+2), (MPM_OP+AMSG_OUT+
- (((UCHAR)(currSCCB->ControlByte & TAG_TYPE_MASK)
- >> 6) | (UCHAR)0x20)));
-
- for (i = 1; i < QUEUE_DEPTH; i++)
- {
- if (++lastTag >= QUEUE_DEPTH) lastTag =
1;
- if (CurrCard->discQ_Tbl[lastTag] ==
NULL)
- {
-
WRW_HARPOON((port+ID_MSG_STRT+6),
-
(MPM_OP+AMSG_OUT+lastTag));
- CurrCard->tagQ_Lst = lastTag;
- currSCCB->Sccb_tag = lastTag;
- CurrCard->discQ_Tbl[lastTag] =
currSCCB;
- CurrCard->discQCount++;
- break;
- }
- }
-
-
- if ( i == QUEUE_DEPTH )
- {
- currTar_Info->TarLUNBusy[lun] = TRUE;
- queueSelectFail(CurrCard,p_card);
- SGRAM_ACCESS(port);
- return;
- }
-
- currSCCB->Sccb_scsistat = SELECT_Q_ST;
-
- WR_HARPOON(port+hp_autostart_3, (SELECT+SELCHK_STRT));
- }
- }
-
- else
- {
-#endif /* !DOS */
-
- WRW_HARPOON((port+ID_MSG_STRT),BRH_OP+ALWAYS+NTCMD);
-
- WRW_HARPOON((port+NON_TAG_ID_MSG),
- (MPM_OP+AMSG_OUT+currSCCB->Sccb_idmsg));
-
- currSCCB->Sccb_scsistat = SELECT_ST;
-
- WR_HARPOON(port+hp_autostart_3, (SELECT+SELCHK_STRT));
-#if !defined(DOS)
- }
-#endif
-
-
-#if defined(OS2)
- theCCB = (UCHAR far *)&currSCCB->Cdb[0];
-#else
- theCCB = (UCHAR *)&currSCCB->Cdb[0];
-#endif
-
- cdb_reg = port + CMD_STRT;
-
- for (i=0; i < currSCCB->CdbLength; i++)
- {
- WRW_HARPOON(cdb_reg, (MPM_OP + ACOMMAND + *theCCB));
- cdb_reg +=2;
- theCCB++;
- }
-
- if (currSCCB->CdbLength != TWELVE_BYTE_CMD)
- WRW_HARPOON(cdb_reg, (BRH_OP+ALWAYS+ NP));
-
- } /* auto_loaded */
-
-#if defined(WIDE_SCSI)
- WRW_HARPOON((port+hp_fiforead), (USHORT) 0x00);
- WR_HARPOON(port+hp_xferstat, 0x00);
-#endif
-
- WRW_HARPOON((port+hp_intstat), (PROG_HLT | TIMEOUT | SEL | BUS_FREE));
-
- WR_HARPOON(port+hp_portctrl_0,(SCSI_PORT));
-
-
- if (!(currSCCB->Sccb_MGRFlags & F_DEV_SELECTED))
- {
- WR_HARPOON(port+hp_scsictrl_0, (SEL_TAR | ENA_ATN | ENA_RESEL |
ENA_SCAM_SEL));
- }
- else
- {
-
-/* auto_loaded = (RD_HARPOON(port+hp_autostart_3) & (UCHAR)0x1F);
- auto_loaded |= AUTO_IMMED; */
- auto_loaded = AUTO_IMMED;
-
- DISABLE_AUTO(port);
-
- WR_HARPOON(port+hp_autostart_3, auto_loaded);
- }
-
- SGRAM_ACCESS(port);
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: sres
- *
- * Description: Hookup the correct CCB and handle the incoming messages.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void sres(USHORT port, UCHAR p_card, PSCCBcard pCurrCard)
-#else
-void sres(ULONG port, UCHAR p_card, PSCCBcard pCurrCard)
-#endif
-{
-
-#if defined(V302)
-#ifdef DOS
- UCHAR our_target,message, msgRetryCount;
- extern UCHAR lun, tag;
-#else
- UCHAR our_target,message,lun,tag, msgRetryCount;
-#endif
-
-#else /* V302 */
- UCHAR our_target, message, lun = 0, tag, msgRetryCount;
-#endif /* V302 */
-
-
- PSCCBMgr_tar_info currTar_Info;
- PSCCB currSCCB;
-
-
-
-
- if(pCurrCard->currentSCCB != NULL)
- {
- currTar_Info =
&sccbMgrTbl[p_card][pCurrCard->currentSCCB->TargID];
- DISABLE_AUTO(port);
-
-
- WR_HARPOON((port+hp_scsictrl_0),(ENA_RESEL | ENA_SCAM_SEL));
-
-
- currSCCB = pCurrCard->currentSCCB;
- if(currSCCB->Sccb_scsistat == SELECT_WN_ST)
- {
- currTar_Info->TarStatus &= ~TAR_WIDE_MASK;
- currSCCB->Sccb_scsistat = BUS_FREE_ST;
- }
- if(currSCCB->Sccb_scsistat == SELECT_SN_ST)
- {
- currTar_Info->TarStatus &= ~TAR_SYNC_MASK;
- currSCCB->Sccb_scsistat = BUS_FREE_ST;
- }
- if(((pCurrCard->globalFlags & F_CONLUN_IO) &&
- ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) !=
TAG_Q_TRYING)))
- {
- currTar_Info->TarLUNBusy[currSCCB->Lun] = FALSE;
- if(currSCCB->Sccb_scsistat != ABORT_ST)
- {
- pCurrCard->discQCount--;
-
pCurrCard->discQ_Tbl[currTar_Info->LunDiscQ_Idx[currSCCB->Lun]]
-
= NULL;
- }
- }
- else
- {
- currTar_Info->TarLUNBusy[0] = FALSE;
- if(currSCCB->Sccb_tag)
- {
- if(currSCCB->Sccb_scsistat != ABORT_ST)
- {
- pCurrCard->discQCount--;
-
pCurrCard->discQ_Tbl[currSCCB->Sccb_tag] = NULL;
- }
- }else
- {
- if(currSCCB->Sccb_scsistat != ABORT_ST)
- {
- pCurrCard->discQCount--;
-
pCurrCard->discQ_Tbl[currTar_Info->LunDiscQ_Idx[0]] = NULL;
- }
- }
- }
-
- queueSelectFail(&BL_Card[p_card],p_card);
- }
-
-#if defined(WIDE_SCSI)
- WRW_HARPOON((port+hp_fiforead), (USHORT) 0x00);
-#endif
-
-
- our_target = (UCHAR)(RD_HARPOON(port+hp_select_id) >> 4);
- currTar_Info = &sccbMgrTbl[p_card][our_target];
-
-
- msgRetryCount = 0;
- do
- {
-
-#if defined(V302)
-
- message = GetTarLun(port, p_card, our_target, pCurrCard, &tag,
&lun);
-
-#else /* V302 */
-
- currTar_Info = &sccbMgrTbl[p_card][our_target];
- tag = 0;
-
-
- while(!(RD_HARPOON(port+hp_scsisig) & SCSI_REQ))
- {
- if (! (RD_HARPOON(port+hp_scsisig) & SCSI_BSY))
- {
-
- WRW_HARPOON((port+hp_intstat), PHASE);
- return;
- }
- }
-
- WRW_HARPOON((port+hp_intstat), PHASE);
- if ((RD_HARPOON(port+hp_scsisig) & S_SCSI_PHZ) == S_MSGI_PH)
- {
-
- message = sfm(port,pCurrCard->currentSCCB);
- if (message)
- {
-
- if (message <= (0x80 | LUN_MASK))
- {
- lun = message & (UCHAR)LUN_MASK;
-
-#if !defined(DOS)
- if ((currTar_Info->TarStatus &
TAR_TAG_Q_MASK) == TAG_Q_TRYING)
- {
- if (currTar_Info->TarTagQ_Cnt
!= 0)
- {
-
- if
(!(currTar_Info->TarLUN_CA))
- {
-
ACCEPT_MSG(port); /*Release the ACK for ID msg. */
-
-
- message =
sfm(port,pCurrCard->currentSCCB);
- if (message)
- {
-
ACCEPT_MSG(port);
- }
-
- else
- message = FALSE;
-
- if(message !=
FALSE)
- {
- tag =
sfm(port,pCurrCard->currentSCCB);
-
- if
(!(tag))
-
message = FALSE;
- }
-
- } /*C.A. exists! */
-
- } /*End Q cnt != 0 */
-
- } /*End Tag cmds supported! */
-#endif /* !DOS */
-
- } /*End valid ID message. */
-
- else
- {
-
- ACCEPT_MSG_ATN(port);
- }
-
- } /* End good id message. */
-
- else
- {
-
- message = FALSE;
- }
- }
- else
- {
- ACCEPT_MSG_ATN(port);
-
- while (!(RDW_HARPOON((port+hp_intstat)) & (PHASE | RESET)) &&
- !(RD_HARPOON(port+hp_scsisig) & SCSI_REQ) &&
- (RD_HARPOON(port+hp_scsisig) & SCSI_BSY)) ;
-
- return;
- }
-
-#endif /* V302 */
-
- if(message == FALSE)
- {
- msgRetryCount++;
- if(msgRetryCount == 1)
- {
- SendMsg(port, SMPARITY);
- }
- else
- {
- SendMsg(port, SMDEV_RESET);
-
- sssyncv(port, our_target,
NARROW_SCSI,currTar_Info);
-
- if (sccbMgrTbl[p_card][our_target].TarEEValue &
EE_SYNC_MASK)
- {
-
-
sccbMgrTbl[p_card][our_target].TarStatus &= ~TAR_SYNC_MASK;
-
- }
-
- if (sccbMgrTbl[p_card][our_target].TarEEValue &
EE_WIDE_SCSI)
- {
-
-
sccbMgrTbl[p_card][our_target].TarStatus &= ~TAR_WIDE_MASK;
- }
-
-
- queueFlushTargSccb(p_card, our_target,
SCCB_COMPLETE);
- SccbMgrTableInitTarget(p_card,our_target);
- return;
- }
- }
- }while(message == FALSE);
-
-
-
- if(((pCurrCard->globalFlags & F_CONLUN_IO) &&
- ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) != TAG_Q_TRYING)))
- {
- currTar_Info->TarLUNBusy[lun] = TRUE;
- pCurrCard->currentSCCB =
pCurrCard->discQ_Tbl[currTar_Info->LunDiscQ_Idx[lun]];
- if(pCurrCard->currentSCCB != NULL)
- {
- ACCEPT_MSG(port);
- }
- else
- {
- ACCEPT_MSG_ATN(port);
- }
- }
- else
- {
- currTar_Info->TarLUNBusy[0] = TRUE;
-
-
- if (tag)
- {
- if (pCurrCard->discQ_Tbl[tag] != NULL)
- {
- pCurrCard->currentSCCB =
pCurrCard->discQ_Tbl[tag];
- currTar_Info->TarTagQ_Cnt--;
- ACCEPT_MSG(port);
- }
- else
- {
- ACCEPT_MSG_ATN(port);
- }
- }else
- {
- pCurrCard->currentSCCB =
pCurrCard->discQ_Tbl[currTar_Info->LunDiscQ_Idx[0]];
- if(pCurrCard->currentSCCB != NULL)
- {
- ACCEPT_MSG(port);
- }
- else
- {
- ACCEPT_MSG_ATN(port);
- }
- }
- }
-
- if(pCurrCard->currentSCCB != NULL)
- {
- if(pCurrCard->currentSCCB->Sccb_scsistat == ABORT_ST)
- {
- /* During Abort Tag command, the target could have got
re-selected
- and completed the command. Check the select Q and
remove the CCB
- if it is in the Select Q */
- queueFindSccb(pCurrCard->currentSCCB, p_card);
- }
- }
-
-
- while (!(RDW_HARPOON((port+hp_intstat)) & (PHASE | RESET)) &&
- !(RD_HARPOON(port+hp_scsisig) & SCSI_REQ) &&
- (RD_HARPOON(port+hp_scsisig) & SCSI_BSY)) ;
-}
-
-#if defined(V302)
-
-#if defined(DOS)
-UCHAR GetTarLun(USHORT port, UCHAR p_card, UCHAR our_target, PSCCBcard
pCurrCard, PUCHAR tag, PUCHAR lun)
-#else
-UCHAR GetTarLun(ULONG port, UCHAR p_card, UCHAR our_target, PSCCBcard
pCurrCard, PUCHAR tag, PUCHAR lun)
-#endif
-{
- UCHAR message;
- PSCCBMgr_tar_info currTar_Info;
-
-
- currTar_Info = &sccbMgrTbl[p_card][our_target];
- *tag = 0;
-
-
- while(!(RD_HARPOON(port+hp_scsisig) & SCSI_REQ))
- {
- if (! (RD_HARPOON(port+hp_scsisig) & SCSI_BSY))
- {
-
- WRW_HARPOON((port+hp_intstat), PHASE);
- return(TRUE);
- }
- }
-
- WRW_HARPOON((port+hp_intstat), PHASE);
- if ((RD_HARPOON(port+hp_scsisig) & S_SCSI_PHZ) == S_MSGI_PH)
- {
-
- message = sfm(port,pCurrCard->currentSCCB);
- if (message)
- {
-
- if (message <= (0x80 | LUN_MASK))
- {
- *lun = message & (UCHAR)LUN_MASK;
-
-#if !defined(DOS)
- if ((currTar_Info->TarStatus & TAR_TAG_Q_MASK)
== TAG_Q_TRYING)
- {
- if (currTar_Info->TarTagQ_Cnt != 0)
- {
-
- if (!(currTar_Info->TarLUN_CA))
- {
- ACCEPT_MSG(port);
/*Release the ACK for ID msg. */
-
-
- message =
sfm(port,pCurrCard->currentSCCB);
- if (message)
- {
-
ACCEPT_MSG(port);
- }
-
- else
- return(FALSE);
-
- *tag =
sfm(port,pCurrCard->currentSCCB);
-
- if (!(*tag))
return(FALSE);
-
- } /*C.A. exists! */
-
- } /*End Q cnt != 0 */
-
- } /*End Tag cmds supported! */
-#endif /* !DOS */
-
- } /*End valid ID message. */
-
- else
- {
-
- ACCEPT_MSG_ATN(port);
- }
-
- } /* End good id message. */
-
- else
- {
-
- return(FALSE);
- }
- }
- else
- {
- ACCEPT_MSG_ATN(port);
- return(TRUE);
- }
- return(TRUE);
-}
-
-#endif /* V302 */
-
-#if defined(DOS)
-void SendMsg(USHORT port, UCHAR message)
-#else
-void SendMsg(ULONG port, UCHAR message)
-#endif
-{
- while(!(RD_HARPOON(port+hp_scsisig) & SCSI_REQ))
- {
- if (! (RD_HARPOON(port+hp_scsisig) & SCSI_BSY))
- {
-
- WRW_HARPOON((port+hp_intstat), PHASE);
- return;
- }
- }
-
- WRW_HARPOON((port+hp_intstat), PHASE);
- if ((RD_HARPOON(port+hp_scsisig) & S_SCSI_PHZ) == S_MSGO_PH)
- {
- WRW_HARPOON((port+hp_intstat), (BUS_FREE | PHASE | XFER_CNT_0));
-
-
- WR_HARPOON(port+hp_portctrl_0, SCSI_BUS_EN);
-
- WR_HARPOON(port+hp_scsidata_0,message);
-
- WR_HARPOON(port+hp_scsisig, (SCSI_ACK + S_ILL_PH));
-
- ACCEPT_MSG(port);
-
- WR_HARPOON(port+hp_portctrl_0, 0x00);
-
- if ((message == SMABORT) || (message == SMDEV_RESET) ||
- (message == SMABORT_TAG) )
- {
- while(!(RDW_HARPOON((port+hp_intstat)) & (BUS_FREE |
PHASE))) {}
-
- if (RDW_HARPOON((port+hp_intstat)) & BUS_FREE)
- {
- WRW_HARPOON((port+hp_intstat), BUS_FREE);
- }
- }
- }
-}
-
-/*---------------------------------------------------------------------
- *
- * Function: sdecm
- *
- * Description: Determine the proper responce to the message from the
- * target device.
- *
- *---------------------------------------------------------------------*/
-#if defined(DOS)
-void sdecm(UCHAR message, USHORT port, UCHAR p_card)
-#else
-void sdecm(UCHAR message, ULONG port, UCHAR p_card)
-#endif
-{
- PSCCB currSCCB;
- PSCCBcard CurrCard;
- PSCCBMgr_tar_info currTar_Info;
-
- CurrCard = &BL_Card[p_card];
- currSCCB = CurrCard->currentSCCB;
-
- currTar_Info = &sccbMgrTbl[p_card][currSCCB->TargID];
-
- if (message == SMREST_DATA_PTR)
- {
- if (!(currSCCB->Sccb_XferState & F_NO_DATA_YET))
- {
- currSCCB->Sccb_ATC = currSCCB->Sccb_savedATC;
-
- hostDataXferRestart(currSCCB);
- }
-
- ACCEPT_MSG(port);
- WR_HARPOON(port+hp_autostart_1, (AUTO_IMMED+DISCONNECT_START));
- }
-
- else if (message == SMCMD_COMP)
- {
-
-
- if (currSCCB->Sccb_scsistat == SELECT_Q_ST)
- {
- currTar_Info->TarStatus &= ~(UCHAR)TAR_TAG_Q_MASK;
- currTar_Info->TarStatus |= (UCHAR)TAG_Q_REJECT;
- }
-
- ACCEPT_MSG(port);
-
- }
-
- else if ((message == SMNO_OP) || (message >= SMIDENT)
- || (message == SMINIT_RECOVERY) || (message ==
SMREL_RECOVERY))
- {
-
- ACCEPT_MSG(port);
- WR_HARPOON(port+hp_autostart_1, (AUTO_IMMED+DISCONNECT_START));
- }
-
- else if (message == SMREJECT)
- {
-
- if ((currSCCB->Sccb_scsistat == SELECT_SN_ST) ||
- (currSCCB->Sccb_scsistat == SELECT_WN_ST) ||
- ((currTar_Info->TarStatus & TAR_SYNC_MASK) ==
SYNC_TRYING ) ||
- ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) ==
TAG_Q_TRYING ) )
-
- {
- WRW_HARPOON((port+hp_intstat), BUS_FREE);
-
- ACCEPT_MSG(port);
-
-
- while ((!(RD_HARPOON(port+hp_scsisig) & SCSI_REQ)) &&
- (!(RDW_HARPOON((port+hp_intstat)) & BUS_FREE)))
{}
-
- if(currSCCB->Lun == 0x00)
- {
- if ((currSCCB->Sccb_scsistat == SELECT_SN_ST))
- {
-
- currTar_Info->TarStatus |=
(UCHAR)SYNC_SUPPORTED;
-
- currTar_Info->TarEEValue &=
~EE_SYNC_MASK;
- }
-
-#if defined(WIDE_SCSI)
- else if ((currSCCB->Sccb_scsistat ==
SELECT_WN_ST))
- {
-
-
- currTar_Info->TarStatus =
(currTar_Info->TarStatus &
-
~WIDE_ENABLED) | WIDE_NEGOCIATED;
-
- currTar_Info->TarEEValue &=
~EE_WIDE_SCSI;
-
- }
-#endif
-
- else if ((currTar_Info->TarStatus &
TAR_TAG_Q_MASK) == TAG_Q_TRYING )
- {
- currTar_Info->TarStatus =
(currTar_Info->TarStatus &
-
~(UCHAR)TAR_TAG_Q_MASK) | TAG_Q_REJECT;
-
-
- currSCCB->ControlByte &= ~F_USE_CMD_Q;
- CurrCard->discQCount--;
- CurrCard->discQ_Tbl[currSCCB->Sccb_tag]
= NULL;
- currSCCB->Sccb_tag = 0x00;
-
- }
- }
-
- if (RDW_HARPOON((port+hp_intstat)) & BUS_FREE)
- {
-
-
- if(currSCCB->Lun == 0x00)
- {
- WRW_HARPOON((port+hp_intstat),
BUS_FREE);
- CurrCard->globalFlags |= F_NEW_SCCB_CMD;
- }
- }
-
- else
- {
-
- if((CurrCard->globalFlags & F_CONLUN_IO) &&
- ((currTar_Info->TarStatus &
TAR_TAG_Q_MASK) != TAG_Q_TRYING))
- currTar_Info->TarLUNBusy[currSCCB->Lun]
= TRUE;
- else
- currTar_Info->TarLUNBusy[0] = TRUE;
-
-
- currSCCB->ControlByte &= ~(UCHAR)F_USE_CMD_Q;
-
- WR_HARPOON(port+hp_autostart_1,
(AUTO_IMMED+DISCONNECT_START));
-
- }
- }
-
- else
- {
- ACCEPT_MSG(port);
-
- while ((!(RD_HARPOON(port+hp_scsisig) & SCSI_REQ)) &&
- (!(RDW_HARPOON((port+hp_intstat)) & BUS_FREE)))
{}
-
- if (!(RDW_HARPOON((port+hp_intstat)) & BUS_FREE))
- {
- WR_HARPOON(port+hp_autostart_1,
(AUTO_IMMED+DISCONNECT_START));
- }
- }
- }
-
- else if (message == SMEXT)
- {
-
- ACCEPT_MSG(port);
- shandem(port,p_card,currSCCB);
- }
-
- else if (message == SMIGNORWR)
- {
-
- ACCEPT_MSG(port); /* ACK the RESIDUE MSG */
-
- message = sfm(port,currSCCB);
-
- if(currSCCB->Sccb_scsimsg != SMPARITY)
- ACCEPT_MSG(port);
- WR_HARPOON(port+hp_autostart_1, (AUTO_IMMED+DISCONNECT_START));
- }
-
-
- else
- {
-
- currSCCB->HostStatus = SCCB_PHASE_SEQUENCE_FAIL;
- currSCCB->Sccb_scsimsg = SMREJECT;
-
- ACCEPT_MSG_ATN(port);
- WR_HARPOON(port+hp_autostart_1, (AUTO_IMMED+DISCONNECT_START));
- }
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: shandem
- *
- * Description: Decide what to do with the extended message.
- *
- *---------------------------------------------------------------------*/
-#if defined(DOS)
-void shandem(USHORT port, UCHAR p_card, PSCCB pCurrSCCB)
-#else
-void shandem(ULONG port, UCHAR p_card, PSCCB pCurrSCCB)
-#endif
-{
- UCHAR length,message;
-
- length = sfm(port,pCurrSCCB);
- if (length)
- {
-
- ACCEPT_MSG(port);
- message = sfm(port,pCurrSCCB);
- if (message)
- {
-
- if (message == SMSYNC)
- {
-
- if (length == 0x03)
- {
-
- ACCEPT_MSG(port);
- stsyncn(port,p_card);
- }
- else
- {
-
- pCurrSCCB->Sccb_scsimsg = SMREJECT;
- ACCEPT_MSG_ATN(port);
- }
- }
-#if defined(WIDE_SCSI)
- else if (message == SMWDTR)
- {
-
- if (length == 0x02)
- {
-
- ACCEPT_MSG(port);
- stwidn(port,p_card);
- }
- else
- {
-
- pCurrSCCB->Sccb_scsimsg = SMREJECT;
- ACCEPT_MSG_ATN(port);
-
- WR_HARPOON(port+hp_autostart_1,
(AUTO_IMMED+DISCONNECT_START));
- }
- }
-#endif
- else
- {
-
- pCurrSCCB->Sccb_scsimsg = SMREJECT;
- ACCEPT_MSG_ATN(port);
-
- WR_HARPOON(port+hp_autostart_1,
(AUTO_IMMED+DISCONNECT_START));
- }
- }
- else
- {
- if(pCurrSCCB->Sccb_scsimsg != SMPARITY)
- ACCEPT_MSG(port);
- WR_HARPOON(port+hp_autostart_1,
(AUTO_IMMED+DISCONNECT_START));
- }
- }else
- {
- if(pCurrSCCB->Sccb_scsimsg == SMPARITY)
- WR_HARPOON(port+hp_autostart_1,
(AUTO_IMMED+DISCONNECT_START));
- }
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: sisyncn
- *
- * Description: Read in a message byte from the SCSI bus, and check
- * for a parity error.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-UCHAR sisyncn(USHORT port, UCHAR p_card, UCHAR syncFlag)
-#else
-UCHAR sisyncn(ULONG port, UCHAR p_card, UCHAR syncFlag)
-#endif
-{
- PSCCB currSCCB;
- PSCCBMgr_tar_info currTar_Info;
-
- currSCCB = BL_Card[p_card].currentSCCB;
- currTar_Info = &sccbMgrTbl[p_card][currSCCB->TargID];
-
- if (!((currTar_Info->TarStatus & TAR_SYNC_MASK) == SYNC_TRYING)) {
-
-
- WRW_HARPOON((port+ID_MSG_STRT),
- (MPM_OP+AMSG_OUT+(currSCCB->Sccb_idmsg & ~(UCHAR)DISC_PRIV)));
-
- WRW_HARPOON((port+ID_MSG_STRT+2),BRH_OP+ALWAYS+CMDPZ);
-
- WRW_HARPOON((port+SYNC_MSGS+0), (MPM_OP+AMSG_OUT+SMEXT ));
- WRW_HARPOON((port+SYNC_MSGS+2), (MPM_OP+AMSG_OUT+0x03 ));
- WRW_HARPOON((port+SYNC_MSGS+4), (MPM_OP+AMSG_OUT+SMSYNC));
-
-
- if ((currTar_Info->TarEEValue & EE_SYNC_MASK) == EE_SYNC_20MB)
-
- WRW_HARPOON((port+SYNC_MSGS+6), (MPM_OP+AMSG_OUT+ 12));
-
- else if ((currTar_Info->TarEEValue & EE_SYNC_MASK) == EE_SYNC_10MB)
-
- WRW_HARPOON((port+SYNC_MSGS+6), (MPM_OP+AMSG_OUT+ 25));
-
- else if ((currTar_Info->TarEEValue & EE_SYNC_MASK) == EE_SYNC_5MB)
-
- WRW_HARPOON((port+SYNC_MSGS+6), (MPM_OP+AMSG_OUT+ 50));
-
- else
- WRW_HARPOON((port+SYNC_MSGS+6), (MPM_OP+AMSG_OUT+ 00));
-
-
- WRW_HARPOON((port+SYNC_MSGS+8), (RAT_OP ));
- WRW_HARPOON((port+SYNC_MSGS+10),(MPM_OP+AMSG_OUT+DEFAULT_OFFSET));
- WRW_HARPOON((port+SYNC_MSGS+12),(BRH_OP+ALWAYS+NP ));
-
-
- if(syncFlag == FALSE)
- {
- WR_HARPOON(port+hp_autostart_3, (SELECT+SELCHK_STRT));
- currTar_Info->TarStatus = ((currTar_Info->TarStatus &
- ~(UCHAR)TAR_SYNC_MASK) | (UCHAR)SYNC_TRYING);
- }
- else
- {
- WR_HARPOON(port+hp_autostart_3, (AUTO_IMMED +
CMD_ONLY_STRT));
- }
-
-
- return(TRUE);
- }
-
- else {
-
- currTar_Info->TarStatus |= (UCHAR)SYNC_SUPPORTED;
- currTar_Info->TarEEValue &= ~EE_SYNC_MASK;
- return(FALSE);
- }
-}
-
-
-
-/*---------------------------------------------------------------------
- *
- * Function: stsyncn
- *
- * Description: The has sent us a Sync Nego message so handle it as
- * necessary.
- *
- *---------------------------------------------------------------------*/
-#if defined(DOS)
-void stsyncn(USHORT port, UCHAR p_card)
-#else
-void stsyncn(ULONG port, UCHAR p_card)
-#endif
-{
- UCHAR sync_msg,offset,sync_reg,our_sync_msg;
- PSCCB currSCCB;
- PSCCBMgr_tar_info currTar_Info;
-
- currSCCB = BL_Card[p_card].currentSCCB;
- currTar_Info = &sccbMgrTbl[p_card][currSCCB->TargID];
-
- sync_msg = sfm(port,currSCCB);
-
- if((sync_msg == 0x00) && (currSCCB->Sccb_scsimsg == SMPARITY))
- {
- WR_HARPOON(port+hp_autostart_1, (AUTO_IMMED+DISCONNECT_START));
- return;
- }
-
- ACCEPT_MSG(port);
-
-
- offset = sfm(port,currSCCB);
-
- if((offset == 0x00) && (currSCCB->Sccb_scsimsg == SMPARITY))
- {
- WR_HARPOON(port+hp_autostart_1, (AUTO_IMMED+DISCONNECT_START));
- return;
- }
-
- if ((currTar_Info->TarEEValue & EE_SYNC_MASK) == EE_SYNC_20MB)
-
- our_sync_msg = 12; /* Setup our Message to 20mb/s */
-
- else if ((currTar_Info->TarEEValue & EE_SYNC_MASK) == EE_SYNC_10MB)
-
- our_sync_msg = 25; /* Setup our Message to 10mb/s */
-
- else if ((currTar_Info->TarEEValue & EE_SYNC_MASK) == EE_SYNC_5MB)
-
- our_sync_msg = 50; /* Setup our Message to 5mb/s */
- else
-
- our_sync_msg = 0; /* Message = Async */
-
- if (sync_msg < our_sync_msg) {
- sync_msg = our_sync_msg; /*if faster, then set to max. */
- }
-
- if (offset == ASYNC)
- sync_msg = ASYNC;
-
- if (offset > MAX_OFFSET)
- offset = MAX_OFFSET;
-
- sync_reg = 0x00;
-
- if (sync_msg > 12)
-
- sync_reg = 0x20; /* Use 10MB/s */
-
- if (sync_msg > 25)
-
- sync_reg = 0x40; /* Use 6.6MB/s */
-
- if (sync_msg > 38)
-
- sync_reg = 0x60; /* Use 5MB/s */
-
- if (sync_msg > 50)
-
- sync_reg = 0x80; /* Use 4MB/s */
-
- if (sync_msg > 62)
-
- sync_reg = 0xA0; /* Use 3.33MB/s */
-
- if (sync_msg > 75)
-
- sync_reg = 0xC0; /* Use 2.85MB/s */
-
- if (sync_msg > 87)
-
- sync_reg = 0xE0; /* Use 2.5MB/s */
-
- if (sync_msg > 100) {
-
- sync_reg = 0x00; /* Use ASYNC */
- offset = 0x00;
- }
-
-
-#if defined(WIDE_SCSI)
- if (currTar_Info->TarStatus & WIDE_ENABLED)
-
- sync_reg |= offset;
-
- else
-
- sync_reg |= (offset | NARROW_SCSI);
-
-#else
- sync_reg |= (offset | NARROW_SCSI);
-#endif
-
- sssyncv(port,currSCCB->TargID,sync_reg,currTar_Info);
-
-
- if (currSCCB->Sccb_scsistat == SELECT_SN_ST) {
-
-
- ACCEPT_MSG(port);
-
- currTar_Info->TarStatus = ((currTar_Info->TarStatus &
- ~(UCHAR)TAR_SYNC_MASK) | (UCHAR)SYNC_SUPPORTED);
-
- WR_HARPOON(port+hp_autostart_1, (AUTO_IMMED+DISCONNECT_START));
- }
-
- else {
-
-
- ACCEPT_MSG_ATN(port);
-
- sisyncr(port,sync_msg,offset);
-
- currTar_Info->TarStatus = ((currTar_Info->TarStatus &
- ~(UCHAR)TAR_SYNC_MASK) | (UCHAR)SYNC_SUPPORTED);
- }
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: sisyncr
- *
- * Description: Answer the targets sync message.
- *
- *---------------------------------------------------------------------*/
-#if defined(DOS)
-void sisyncr(USHORT port,UCHAR sync_pulse, UCHAR offset)
-#else
-void sisyncr(ULONG port,UCHAR sync_pulse, UCHAR offset)
-#endif
-{
- ARAM_ACCESS(port);
- WRW_HARPOON((port+SYNC_MSGS+0), (MPM_OP+AMSG_OUT+SMEXT ));
- WRW_HARPOON((port+SYNC_MSGS+2), (MPM_OP+AMSG_OUT+0x03 ));
- WRW_HARPOON((port+SYNC_MSGS+4), (MPM_OP+AMSG_OUT+SMSYNC));
- WRW_HARPOON((port+SYNC_MSGS+6), (MPM_OP+AMSG_OUT+sync_pulse));
- WRW_HARPOON((port+SYNC_MSGS+8), (RAT_OP ));
- WRW_HARPOON((port+SYNC_MSGS+10),(MPM_OP+AMSG_OUT+offset));
- WRW_HARPOON((port+SYNC_MSGS+12),(BRH_OP+ALWAYS+NP ));
- SGRAM_ACCESS(port);
-
- WR_HARPOON(port+hp_portctrl_0, SCSI_PORT);
- WRW_HARPOON((port+hp_intstat), CLR_ALL_INT_1);
-
- WR_HARPOON(port+hp_autostart_3, (AUTO_IMMED+CMD_ONLY_STRT));
-
- while (!(RDW_HARPOON((port+hp_intstat)) & (BUS_FREE | AUTO_INT))) {}
-}
-
-
-
-#if defined(WIDE_SCSI)
-
-/*---------------------------------------------------------------------
- *
- * Function: siwidn
- *
- * Description: Read in a message byte from the SCSI bus, and check
- * for a parity error.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-UCHAR siwidn(USHORT port, UCHAR p_card)
-#else
-UCHAR siwidn(ULONG port, UCHAR p_card)
-#endif
-{
- PSCCB currSCCB;
- PSCCBMgr_tar_info currTar_Info;
-
- currSCCB = BL_Card[p_card].currentSCCB;
- currTar_Info = &sccbMgrTbl[p_card][currSCCB->TargID];
-
- if (!((currTar_Info->TarStatus & TAR_WIDE_MASK) == WIDE_NEGOCIATED)) {
-
-
- WRW_HARPOON((port+ID_MSG_STRT),
- (MPM_OP+AMSG_OUT+(currSCCB->Sccb_idmsg &
~(UCHAR)DISC_PRIV)));
-
- WRW_HARPOON((port+ID_MSG_STRT+2),BRH_OP+ALWAYS+CMDPZ);
-
- WRW_HARPOON((port+SYNC_MSGS+0), (MPM_OP+AMSG_OUT+SMEXT ));
- WRW_HARPOON((port+SYNC_MSGS+2), (MPM_OP+AMSG_OUT+0x02 ));
- WRW_HARPOON((port+SYNC_MSGS+4), (MPM_OP+AMSG_OUT+SMWDTR));
- WRW_HARPOON((port+SYNC_MSGS+6), (RAT_OP ));
- WRW_HARPOON((port+SYNC_MSGS+8), (MPM_OP+AMSG_OUT+ SM16BIT));
- WRW_HARPOON((port+SYNC_MSGS+10),(BRH_OP+ALWAYS+NP ));
-
- WR_HARPOON(port+hp_autostart_3, (SELECT+SELCHK_STRT));
-
-
- currTar_Info->TarStatus = ((currTar_Info->TarStatus &
- ~(UCHAR)TAR_WIDE_MASK) | (UCHAR)WIDE_ENABLED);
-
- return(TRUE);
- }
-
- else {
-
- currTar_Info->TarStatus = ((currTar_Info->TarStatus &
- ~(UCHAR)TAR_WIDE_MASK) | WIDE_NEGOCIATED);
-
- currTar_Info->TarEEValue &= ~EE_WIDE_SCSI;
- return(FALSE);
- }
-}
-
-
-
-/*---------------------------------------------------------------------
- *
- * Function: stwidn
- *
- * Description: The has sent us a Wide Nego message so handle it as
- * necessary.
- *
- *---------------------------------------------------------------------*/
-#if defined(DOS)
-void stwidn(USHORT port, UCHAR p_card)
-#else
-void stwidn(ULONG port, UCHAR p_card)
-#endif
-{
- UCHAR width;
- PSCCB currSCCB;
- PSCCBMgr_tar_info currTar_Info;
-
- currSCCB = BL_Card[p_card].currentSCCB;
- currTar_Info = &sccbMgrTbl[p_card][currSCCB->TargID];
-
- width = sfm(port,currSCCB);
-
- if((width == 0x00) && (currSCCB->Sccb_scsimsg == SMPARITY))
- {
- WR_HARPOON(port+hp_autostart_1, (AUTO_IMMED+DISCONNECT_START));
- return;
- }
-
-
- if (!(currTar_Info->TarEEValue & EE_WIDE_SCSI))
- width = 0;
-
- if (width) {
- currTar_Info->TarStatus |= WIDE_ENABLED;
- width = 0;
- }
- else {
- width = NARROW_SCSI;
- currTar_Info->TarStatus &= ~WIDE_ENABLED;
- }
-
-
- sssyncv(port,currSCCB->TargID,width,currTar_Info);
-
-
- if (currSCCB->Sccb_scsistat == SELECT_WN_ST)
- {
-
-
-
- currTar_Info->TarStatus |= WIDE_NEGOCIATED;
-
- if (!((currTar_Info->TarStatus & TAR_SYNC_MASK) == SYNC_SUPPORTED))
- {
- ACCEPT_MSG_ATN(port);
- ARAM_ACCESS(port);
- sisyncn(port,p_card, TRUE);
- currSCCB->Sccb_scsistat = SELECT_SN_ST;
- SGRAM_ACCESS(port);
- }
- else
- {
- ACCEPT_MSG(port);
- WR_HARPOON(port+hp_autostart_1,
(AUTO_IMMED+DISCONNECT_START));
- }
- }
-
- else {
-
-
- ACCEPT_MSG_ATN(port);
-
- if (currTar_Info->TarEEValue & EE_WIDE_SCSI)
- width = SM16BIT;
- else
- width = SM8BIT;
-
- siwidr(port,width);
-
- currTar_Info->TarStatus |= (WIDE_NEGOCIATED | WIDE_ENABLED);
- }
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: siwidr
- *
- * Description: Answer the targets Wide nego message.
- *
- *---------------------------------------------------------------------*/
-#if defined(DOS)
-void siwidr(USHORT port, UCHAR width)
-#else
-void siwidr(ULONG port, UCHAR width)
-#endif
-{
- ARAM_ACCESS(port);
- WRW_HARPOON((port+SYNC_MSGS+0), (MPM_OP+AMSG_OUT+SMEXT ));
- WRW_HARPOON((port+SYNC_MSGS+2), (MPM_OP+AMSG_OUT+0x02 ));
- WRW_HARPOON((port+SYNC_MSGS+4), (MPM_OP+AMSG_OUT+SMWDTR));
- WRW_HARPOON((port+SYNC_MSGS+6), (RAT_OP ));
- WRW_HARPOON((port+SYNC_MSGS+8),(MPM_OP+AMSG_OUT+width));
- WRW_HARPOON((port+SYNC_MSGS+10),(BRH_OP+ALWAYS+NP ));
- SGRAM_ACCESS(port);
-
- WR_HARPOON(port+hp_portctrl_0, SCSI_PORT);
- WRW_HARPOON((port+hp_intstat), CLR_ALL_INT_1);
-
- WR_HARPOON(port+hp_autostart_3, (AUTO_IMMED+CMD_ONLY_STRT));
-
- while (!(RDW_HARPOON((port+hp_intstat)) & (BUS_FREE | AUTO_INT))) {}
-}
-
-#endif
-
-
-
-/*---------------------------------------------------------------------
- *
- * Function: sssyncv
- *
- * Description: Write the desired value to the Sync Register for the
- * ID specified.
- *
- *---------------------------------------------------------------------*/
-#if defined(DOS)
-void sssyncv(USHORT p_port, UCHAR p_id, UCHAR p_sync_value,PSCCBMgr_tar_info
currTar_Info)
-#else
-void sssyncv(ULONG p_port, UCHAR p_id, UCHAR p_sync_value,PSCCBMgr_tar_info
currTar_Info)
-#endif
-{
- UCHAR index;
-
- index = p_id;
-
- switch (index) {
-
- case 0:
- index = 12; /* hp_synctarg_0 */
- break;
- case 1:
- index = 13; /* hp_synctarg_1 */
- break;
- case 2:
- index = 14; /* hp_synctarg_2 */
- break;
- case 3:
- index = 15; /* hp_synctarg_3 */
- break;
- case 4:
- index = 8; /* hp_synctarg_4 */
- break;
- case 5:
- index = 9; /* hp_synctarg_5 */
- break;
- case 6:
- index = 10; /* hp_synctarg_6 */
- break;
- case 7:
- index = 11; /* hp_synctarg_7 */
- break;
- case 8:
- index = 4; /* hp_synctarg_8 */
- break;
- case 9:
- index = 5; /* hp_synctarg_9 */
- break;
- case 10:
- index = 6; /* hp_synctarg_10 */
- break;
- case 11:
- index = 7; /* hp_synctarg_11 */
- break;
- case 12:
- index = 0; /* hp_synctarg_12 */
- break;
- case 13:
- index = 1; /* hp_synctarg_13 */
- break;
- case 14:
- index = 2; /* hp_synctarg_14 */
- break;
- case 15:
- index = 3; /* hp_synctarg_15 */
-
- }
-
- WR_HARPOON(p_port+hp_synctarg_base+index, p_sync_value);
-
- currTar_Info->TarSyncCtrl = p_sync_value;
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: sresb
- *
- * Description: Reset the desired card's SCSI bus.
- *
- *---------------------------------------------------------------------*/
-#if defined(DOS)
-void sresb(USHORT port, UCHAR p_card)
-#else
-void sresb(ULONG port, UCHAR p_card)
-#endif
-{
- UCHAR scsiID, i;
-
- PSCCBMgr_tar_info currTar_Info;
-
- WR_HARPOON(port+hp_page_ctrl,
- (RD_HARPOON(port+hp_page_ctrl) | G_INT_DISABLE));
- WRW_HARPOON((port+hp_intstat), CLR_ALL_INT);
-
- WR_HARPOON(port+hp_scsictrl_0, SCSI_RST);
-
- scsiID = RD_HARPOON(port+hp_seltimeout);
- WR_HARPOON(port+hp_seltimeout,TO_5ms);
- WRW_HARPOON((port+hp_intstat), TIMEOUT);
-
- WR_HARPOON(port+hp_portctrl_0,(SCSI_PORT | START_TO));
-
- while (!(RDW_HARPOON((port+hp_intstat)) & TIMEOUT)) {}
-
- WR_HARPOON(port+hp_seltimeout,scsiID);
-
- WR_HARPOON(port+hp_scsictrl_0, ENA_SCAM_SEL);
-
- Wait(port, TO_5ms);
-
- WRW_HARPOON((port+hp_intstat), CLR_ALL_INT);
-
- WR_HARPOON(port+hp_int_mask, (RD_HARPOON(port+hp_int_mask) | 0x00));
-
- for (scsiID = 0; scsiID < MAX_SCSI_TAR; scsiID++)
- {
- currTar_Info = &sccbMgrTbl[p_card][scsiID];
-
- if (currTar_Info->TarEEValue & EE_SYNC_MASK)
- {
- currTar_Info->TarSyncCtrl = 0;
- currTar_Info->TarStatus &= ~TAR_SYNC_MASK;
- }
-
- if (currTar_Info->TarEEValue & EE_WIDE_SCSI)
- {
- currTar_Info->TarStatus &= ~TAR_WIDE_MASK;
- }
-
- sssyncv(port, scsiID, NARROW_SCSI,currTar_Info);
-
- SccbMgrTableInitTarget(p_card, scsiID);
- }
-
- BL_Card[p_card].scanIndex = 0x00;
- BL_Card[p_card].currentSCCB = NULL;
- BL_Card[p_card].globalFlags &= ~(F_TAG_STARTED | F_HOST_XFER_ACT
-
| F_NEW_SCCB_CMD);
- BL_Card[p_card].cmdCounter = 0x00;
- BL_Card[p_card].discQCount = 0x00;
- BL_Card[p_card].tagQ_Lst = 0x01;
-
- for(i = 0; i < QUEUE_DEPTH; i++)
- BL_Card[p_card].discQ_Tbl[i] = NULL;
-
- WR_HARPOON(port+hp_page_ctrl,
- (RD_HARPOON(port+hp_page_ctrl) & ~G_INT_DISABLE));
-
-}
-
-/*---------------------------------------------------------------------
- *
- * Function: ssenss
- *
- * Description: Setup for the Auto Sense command.
- *
- *---------------------------------------------------------------------*/
-void ssenss(PSCCBcard pCurrCard)
-{
- UCHAR i;
- PSCCB currSCCB;
-
- currSCCB = pCurrCard->currentSCCB;
-
-
- currSCCB->Save_CdbLen = currSCCB->CdbLength;
-
- for (i = 0; i < 6; i++) {
-
- currSCCB->Save_Cdb[i] = currSCCB->Cdb[i];
- }
-
- currSCCB->CdbLength = SIX_BYTE_CMD;
- currSCCB->Cdb[0] = SCSI_REQUEST_SENSE;
- currSCCB->Cdb[1] = currSCCB->Cdb[1] & (UCHAR)0xE0; /*Keep LUN. */
- currSCCB->Cdb[2] = 0x00;
- currSCCB->Cdb[3] = 0x00;
- currSCCB->Cdb[4] = currSCCB->RequestSenseLength;
- currSCCB->Cdb[5] = 0x00;
-
- currSCCB->Sccb_XferCnt = (unsigned long)currSCCB->RequestSenseLength;
-
- currSCCB->Sccb_ATC = 0x00;
-
- currSCCB->Sccb_XferState |= F_AUTO_SENSE;
-
- currSCCB->Sccb_XferState &= ~F_SG_XFER;
-
- currSCCB->Sccb_idmsg = currSCCB->Sccb_idmsg & ~(UCHAR)DISC_PRIV;
-
- currSCCB->ControlByte = 0x00;
-
- currSCCB->Sccb_MGRFlags &= F_STATUSLOADED;
-}
-
-
-
-/*---------------------------------------------------------------------
- *
- * Function: sxfrp
- *
- * Description: Transfer data into the bit bucket until the device
- * decides to switch phase.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void sxfrp(USHORT p_port, UCHAR p_card)
-#else
-void sxfrp(ULONG p_port, UCHAR p_card)
-#endif
-{
- UCHAR curr_phz;
-
-
- DISABLE_AUTO(p_port);
-
- if (BL_Card[p_card].globalFlags & F_HOST_XFER_ACT) {
-
- hostDataXferAbort(p_port,p_card,BL_Card[p_card].currentSCCB);
-
- }
-
- /* If the Automation handled the end of the transfer then do not
- match the phase or we will get out of sync with the ISR. */
-
- if (RDW_HARPOON((p_port+hp_intstat)) & (BUS_FREE | XFER_CNT_0 | AUTO_INT))
- return;
-
- WR_HARPOON(p_port+hp_xfercnt_0, 0x00);
-
- curr_phz = RD_HARPOON(p_port+hp_scsisig) & (UCHAR)S_SCSI_PHZ;
-
- WRW_HARPOON((p_port+hp_intstat), XFER_CNT_0);
-
-
- WR_HARPOON(p_port+hp_scsisig, curr_phz);
-
- while ( !(RDW_HARPOON((p_port+hp_intstat)) & (BUS_FREE | RESET)) &&
- (curr_phz == (RD_HARPOON(p_port+hp_scsisig) & (UCHAR)S_SCSI_PHZ)) )
- {
- if (curr_phz & (UCHAR)SCSI_IOBIT)
- {
- WR_HARPOON(p_port+hp_portctrl_0, (SCSI_PORT | HOST_PORT | SCSI_INBIT));
-
- if (!(RD_HARPOON(p_port+hp_xferstat) & FIFO_EMPTY))
- {
- RD_HARPOON(p_port+hp_fifodata_0);
- }
- }
- else
- {
- WR_HARPOON(p_port+hp_portctrl_0, (SCSI_PORT | HOST_PORT | HOST_WRT));
- if (RD_HARPOON(p_port+hp_xferstat) & FIFO_EMPTY)
- {
- WR_HARPOON(p_port+hp_fifodata_0,0xFA);
- }
- }
- } /* End of While loop for padding data I/O phase */
-
- while ( !(RDW_HARPOON((p_port+hp_intstat)) & (BUS_FREE | RESET)))
- {
- if (RD_HARPOON(p_port+hp_scsisig) & SCSI_REQ)
- break;
- }
-
- WR_HARPOON(p_port+hp_portctrl_0, (SCSI_PORT | HOST_PORT | SCSI_INBIT));
- while (!(RD_HARPOON(p_port+hp_xferstat) & FIFO_EMPTY))
- {
- RD_HARPOON(p_port+hp_fifodata_0);
- }
-
- if ( !(RDW_HARPOON((p_port+hp_intstat)) & (BUS_FREE | RESET)))
- {
- WR_HARPOON(p_port+hp_autostart_0, (AUTO_IMMED+DISCONNECT_START));
- while (!(RDW_HARPOON((p_port+hp_intstat)) & AUTO_INT)) {}
-
- if (RDW_HARPOON((p_port+hp_intstat)) & (ICMD_COMP | ITAR_DISC))
- while (!(RDW_HARPOON((p_port+hp_intstat)) & (BUS_FREE | RSEL))) ;
- }
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: schkdd
- *
- * Description: Make sure data has been flushed from both FIFOs and abort
- * the operations if necessary.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void schkdd(USHORT port, UCHAR p_card)
-#else
-void schkdd(ULONG port, UCHAR p_card)
-#endif
-{
- USHORT TimeOutLoop;
- UCHAR sPhase;
-
- PSCCB currSCCB;
-
- currSCCB = BL_Card[p_card].currentSCCB;
-
-
- if ((currSCCB->Sccb_scsistat != DATA_OUT_ST) &&
- (currSCCB->Sccb_scsistat != DATA_IN_ST)) {
- return;
- }
-
-
-
- if (currSCCB->Sccb_XferState & F_ODD_BALL_CNT)
- {
-
- currSCCB->Sccb_ATC += (currSCCB->Sccb_XferCnt-1);
-
- currSCCB->Sccb_XferCnt = 1;
-
- currSCCB->Sccb_XferState &= ~F_ODD_BALL_CNT;
- WRW_HARPOON((port+hp_fiforead), (USHORT) 0x00);
- WR_HARPOON(port+hp_xferstat, 0x00);
- }
-
- else
- {
-
- currSCCB->Sccb_ATC += currSCCB->Sccb_XferCnt;
-
- currSCCB->Sccb_XferCnt = 0;
- }
-
- if ((RDW_HARPOON((port+hp_intstat)) & PARITY) &&
- (currSCCB->HostStatus == SCCB_COMPLETE)) {
-
- currSCCB->HostStatus = SCCB_PARITY_ERR;
- WRW_HARPOON((port+hp_intstat), PARITY);
- }
-
-
- hostDataXferAbort(port,p_card,currSCCB);
-
-
- while (RD_HARPOON(port+hp_scsisig) & SCSI_ACK) {}
-
- TimeOutLoop = 0;
-
- while(RD_HARPOON(port+hp_xferstat) & FIFO_EMPTY)
- {
- if (RDW_HARPOON((port+hp_intstat)) & BUS_FREE) {
- return;
- }
- if (RD_HARPOON(port+hp_offsetctr) & (UCHAR)0x1F) {
- break;
- }
- if (RDW_HARPOON((port+hp_intstat)) & RESET) {
- return;
- }
- if ((RD_HARPOON(port+hp_scsisig) & SCSI_REQ) || (TimeOutLoop++>0x3000) )
- break;
- }
-
- sPhase = RD_HARPOON(port+hp_scsisig) & (SCSI_BSY | S_SCSI_PHZ);
- if ((!(RD_HARPOON(port+hp_xferstat) & FIFO_EMPTY)) ||
- (RD_HARPOON(port+hp_offsetctr) & (UCHAR)0x1F) ||
- (sPhase == (SCSI_BSY | S_DATAO_PH)) ||
- (sPhase == (SCSI_BSY | S_DATAI_PH)))
- {
-
- WR_HARPOON(port+hp_portctrl_0, SCSI_PORT);
-
- if (!(currSCCB->Sccb_XferState & F_ALL_XFERRED))
- {
- if (currSCCB->Sccb_XferState & F_HOST_XFER_DIR) {
- phaseDataIn(port,p_card);
- }
-
- else {
- phaseDataOut(port,p_card);
- }
- }
- else
- {
- sxfrp(port,p_card);
- if (!(RDW_HARPOON((port+hp_intstat)) &
- (BUS_FREE | ICMD_COMP | ITAR_DISC | RESET)))
- {
- WRW_HARPOON((port+hp_intstat), AUTO_INT);
- phaseDecode(port,p_card);
- }
- }
-
- }
-
- else {
- WR_HARPOON(port+hp_portctrl_0, 0x00);
- }
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: sinits
- *
- * Description: Setup SCCB manager fields in this SCCB.
- *
- *---------------------------------------------------------------------*/
-
-void sinits(PSCCB p_sccb, UCHAR p_card)
-{
- PSCCBMgr_tar_info currTar_Info;
-
- if((p_sccb->TargID > MAX_SCSI_TAR) || (p_sccb->Lun > MAX_LUN))
- {
- return;
- }
- currTar_Info = &sccbMgrTbl[p_card][p_sccb->TargID];
-
- p_sccb->Sccb_XferState = 0x00;
- p_sccb->Sccb_XferCnt = p_sccb->DataLength;
-
- if ((p_sccb->OperationCode == SCATTER_GATHER_COMMAND) ||
- (p_sccb->OperationCode == RESIDUAL_SG_COMMAND)) {
-
- p_sccb->Sccb_SGoffset = 0;
- p_sccb->Sccb_XferState = F_SG_XFER;
- p_sccb->Sccb_XferCnt = 0x00;
- }
-
- if (p_sccb->DataLength == 0x00)
-
- p_sccb->Sccb_XferState |= F_ALL_XFERRED;
-
- if (p_sccb->ControlByte & F_USE_CMD_Q)
- {
- if ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) == TAG_Q_REJECT)
- p_sccb->ControlByte &= ~F_USE_CMD_Q;
-
- else
- currTar_Info->TarStatus |= TAG_Q_TRYING;
- }
-
-/* For !single SCSI device in system & device allow Disconnect
- or command is tag_q type then send Cmd with Disconnect Enable
- else send Cmd with Disconnect Disable */
-
-/*
- if (((!(BL_Card[p_card].globalFlags & F_SINGLE_DEVICE)) &&
- (currTar_Info->TarStatus & TAR_ALLOW_DISC)) ||
- (currTar_Info->TarStatus & TAG_Q_TRYING)) {
-*/
- if ((currTar_Info->TarStatus & TAR_ALLOW_DISC) ||
- (currTar_Info->TarStatus & TAG_Q_TRYING)) {
- p_sccb->Sccb_idmsg = (UCHAR)(SMIDENT | DISC_PRIV) | p_sccb->Lun;
- }
-
- else {
-
- p_sccb->Sccb_idmsg = (UCHAR)SMIDENT | p_sccb->Lun;
- }
-
- p_sccb->HostStatus = 0x00;
- p_sccb->TargetStatus = 0x00;
- p_sccb->Sccb_tag = 0x00;
- p_sccb->Sccb_MGRFlags = 0x00;
- p_sccb->Sccb_sgseg = 0x00;
- p_sccb->Sccb_ATC = 0x00;
- p_sccb->Sccb_savedATC = 0x00;
-/*
- p_sccb->SccbVirtDataPtr = 0x00;
- p_sccb->Sccb_forwardlink = NULL;
- p_sccb->Sccb_backlink = NULL;
- */
- p_sccb->Sccb_scsistat = BUS_FREE_ST;
- p_sccb->SccbStatus = SCCB_IN_PROCESS;
- p_sccb->Sccb_scsimsg = SMNO_OP;
-
-}
-
-
-/*----------------------------------------------------------------------
- *
- *
- * Copyright 1995-1996 by Mylex Corporation. All Rights Reserved
- *
- * This file is available under both the GNU General Public License
- * and a BSD-style copyright; see LICENSE.FlashPoint for details.
- *
- * $Workfile: phase.c $
- *
- * Description: Functions to intially handle the SCSI bus phase when
- * the target asserts request (and the automation is not
- * enabled to handle the situation).
- *
- * $Date: 1999/04/26 05:53:56 $
- *
- * $Revision: 1.1 $
- *
- *----------------------------------------------------------------------*/
-
-/*#include <globals.h>*/
-
-#if (FW_TYPE==_UCB_MGR_)
- /*#include <budi.h>*/
-#endif
-
-/*#include <sccbmgr.h>*/
-/*#include <blx30.h>*/
-/*#include <target.h>*/
-/*#include <scsi2.h>*/
-/*#include <harpoon.h>*/
-
-
-/*
-extern SCCBCARD BL_Card[MAX_CARDS];
-extern SCCBMGR_TAR_INFO sccbMgrTbl[MAX_CARDS][MAX_SCSI_TAR];
-
-#if defined(OS2)
- extern void (far *s_PhaseTbl[8]) (ULONG, UCHAR);
-#else
- #if defined(DOS)
- extern void (*s_PhaseTbl[8]) (USHORT, UCHAR);
- #else
- extern void (*s_PhaseTbl[8]) (ULONG, UCHAR);
- #endif
-#endif
-*/
-
-/*---------------------------------------------------------------------
- *
- * Function: Phase Decode
- *
- * Description: Determine the phase and call the appropriate function.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void phaseDecode(USHORT p_port, UCHAR p_card)
-#else
-void phaseDecode(ULONG p_port, UCHAR p_card)
-#endif
-{
- unsigned char phase_ref;
-#if defined(OS2)
- void (far *phase) (ULONG, UCHAR);
-#else
- #if defined(DOS)
- void (*phase) (USHORT, UCHAR);
- #else
- void (*phase) (ULONG, UCHAR);
- #endif
-#endif
-
-
- DISABLE_AUTO(p_port);
-
- phase_ref = (UCHAR) (RD_HARPOON(p_port+hp_scsisig) & S_SCSI_PHZ);
-
- phase = s_PhaseTbl[phase_ref];
-
- (*phase)(p_port, p_card); /* Call the correct phase func */
-}
-
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Data Out Phase
- *
- * Description: Start up both the BusMaster and Xbow.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(OS2)
-void far phaseDataOut(ULONG port, UCHAR p_card)
-#else
-#if defined(DOS)
-void phaseDataOut(USHORT port, UCHAR p_card)
-#else
-void phaseDataOut(ULONG port, UCHAR p_card)
-#endif
-#endif
-{
-
- PSCCB currSCCB;
-
- currSCCB = BL_Card[p_card].currentSCCB;
- if (currSCCB == NULL)
- {
- return; /* Exit if No SCCB record */
- }
-
- currSCCB->Sccb_scsistat = DATA_OUT_ST;
- currSCCB->Sccb_XferState &= ~(F_HOST_XFER_DIR | F_NO_DATA_YET);
-
- WR_HARPOON(port+hp_portctrl_0, SCSI_PORT);
-
- WRW_HARPOON((port+hp_intstat), XFER_CNT_0);
-
- WR_HARPOON(port+hp_autostart_0, (END_DATA+END_DATA_START));
-
- dataXferProcessor(port, &BL_Card[p_card]);
-
-#if defined(NOBUGBUG)
- if (RDW_HARPOON((port+hp_intstat)) & XFER_CNT_0)
- WRW_HARPOON((port+hp_intstat), XFER_CNT_0);
-
-#endif
-
-
- if (currSCCB->Sccb_XferCnt == 0) {
-
-
- if ((currSCCB->ControlByte & SCCB_DATA_XFER_OUT) &&
- (currSCCB->HostStatus == SCCB_COMPLETE))
- currSCCB->HostStatus = SCCB_DATA_OVER_RUN;
-
- sxfrp(port,p_card);
- if (!(RDW_HARPOON((port+hp_intstat)) & (BUS_FREE | RESET)))
- phaseDecode(port,p_card);
- }
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Data In Phase
- *
- * Description: Startup the BusMaster and the XBOW.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(OS2)
-void far phaseDataIn(ULONG port, UCHAR p_card)
-#else
-#if defined(DOS)
-void phaseDataIn(USHORT port, UCHAR p_card)
-#else
-void phaseDataIn(ULONG port, UCHAR p_card)
-#endif
-#endif
-{
-
- PSCCB currSCCB;
-
- currSCCB = BL_Card[p_card].currentSCCB;
-
- if (currSCCB == NULL)
- {
- return; /* Exit if No SCCB record */
- }
-
-
- currSCCB->Sccb_scsistat = DATA_IN_ST;
- currSCCB->Sccb_XferState |= F_HOST_XFER_DIR;
- currSCCB->Sccb_XferState &= ~F_NO_DATA_YET;
-
- WR_HARPOON(port+hp_portctrl_0, SCSI_PORT);
-
- WRW_HARPOON((port+hp_intstat), XFER_CNT_0);
-
- WR_HARPOON(port+hp_autostart_0, (END_DATA+END_DATA_START));
-
- dataXferProcessor(port, &BL_Card[p_card]);
-
- if (currSCCB->Sccb_XferCnt == 0) {
-
-
- if ((currSCCB->ControlByte & SCCB_DATA_XFER_IN) &&
- (currSCCB->HostStatus == SCCB_COMPLETE))
- currSCCB->HostStatus = SCCB_DATA_OVER_RUN;
-
- sxfrp(port,p_card);
- if (!(RDW_HARPOON((port+hp_intstat)) & (BUS_FREE | RESET)))
- phaseDecode(port,p_card);
-
- }
-}
-
-/*---------------------------------------------------------------------
- *
- * Function: Command Phase
- *
- * Description: Load the CDB into the automation and start it up.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(OS2)
-void far phaseCommand(ULONG p_port, UCHAR p_card)
-#else
-#if defined(DOS)
-void phaseCommand(USHORT p_port, UCHAR p_card)
-#else
-void phaseCommand(ULONG p_port, UCHAR p_card)
-#endif
-#endif
-{
- PSCCB currSCCB;
-#if defined(DOS)
- USHORT cdb_reg;
-#else
- ULONG cdb_reg;
-#endif
- UCHAR i;
-
- currSCCB = BL_Card[p_card].currentSCCB;
-
- if (currSCCB->OperationCode == RESET_COMMAND) {
-
- currSCCB->HostStatus = SCCB_PHASE_SEQUENCE_FAIL;
- currSCCB->CdbLength = SIX_BYTE_CMD;
- }
-
- WR_HARPOON(p_port+hp_scsisig, 0x00);
-
- ARAM_ACCESS(p_port);
-
-
- cdb_reg = p_port + CMD_STRT;
-
- for (i=0; i < currSCCB->CdbLength; i++) {
-
- if (currSCCB->OperationCode == RESET_COMMAND)
-
- WRW_HARPOON(cdb_reg, (MPM_OP + ACOMMAND + 0x00));
-
- else
- WRW_HARPOON(cdb_reg, (MPM_OP + ACOMMAND + currSCCB->Cdb[i]));
- cdb_reg +=2;
- }
-
- if (currSCCB->CdbLength != TWELVE_BYTE_CMD)
- WRW_HARPOON(cdb_reg, (BRH_OP+ALWAYS+ NP));
-
- WR_HARPOON(p_port+hp_portctrl_0,(SCSI_PORT));
-
- currSCCB->Sccb_scsistat = COMMAND_ST;
-
- WR_HARPOON(p_port+hp_autostart_3, (AUTO_IMMED | CMD_ONLY_STRT));
- SGRAM_ACCESS(p_port);
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Status phase
- *
- * Description: Bring in the status and command complete message bytes
- *
- *---------------------------------------------------------------------*/
-
-#if defined(OS2)
-void far phaseStatus(ULONG port, UCHAR p_card)
-#else
-#if defined(DOS)
-void phaseStatus(USHORT port, UCHAR p_card)
-#else
-void phaseStatus(ULONG port, UCHAR p_card)
-#endif
-#endif
-{
- /* Start-up the automation to finish off this command and let the
- isr handle the interrupt for command complete when it comes in.
- We could wait here for the interrupt to be generated?
- */
-
- WR_HARPOON(port+hp_scsisig, 0x00);
-
- WR_HARPOON(port+hp_autostart_0, (AUTO_IMMED+END_DATA_START));
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Phase Message Out
- *
- * Description: Send out our message (if we have one) and handle whatever
- * else is involed.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(OS2)
-void far phaseMsgOut(ULONG port, UCHAR p_card)
-#else
-#if defined(DOS)
-void phaseMsgOut(USHORT port, UCHAR p_card)
-#else
-void phaseMsgOut(ULONG port, UCHAR p_card)
-#endif
-#endif
-{
- UCHAR message,scsiID;
- PSCCB currSCCB;
- PSCCBMgr_tar_info currTar_Info;
-
- currSCCB = BL_Card[p_card].currentSCCB;
-
- if (currSCCB != NULL) {
-
- message = currSCCB->Sccb_scsimsg;
- scsiID = currSCCB->TargID;
-
- if (message == SMDEV_RESET)
- {
-
-
- currTar_Info = &sccbMgrTbl[p_card][scsiID];
- currTar_Info->TarSyncCtrl = 0;
- sssyncv(port, scsiID, NARROW_SCSI,currTar_Info);
-
- if (sccbMgrTbl[p_card][scsiID].TarEEValue &
EE_SYNC_MASK)
- {
-
- sccbMgrTbl[p_card][scsiID].TarStatus &=
~TAR_SYNC_MASK;
-
- }
-
- if (sccbMgrTbl[p_card][scsiID].TarEEValue &
EE_WIDE_SCSI)
- {
-
- sccbMgrTbl[p_card][scsiID].TarStatus &=
~TAR_WIDE_MASK;
- }
-
-
- queueFlushSccb(p_card,SCCB_COMPLETE);
- SccbMgrTableInitTarget(p_card,scsiID);
- }
- else if (currSCCB->Sccb_scsistat == ABORT_ST)
- {
- currSCCB->HostStatus = SCCB_COMPLETE;
- if(BL_Card[p_card].discQ_Tbl[currSCCB->Sccb_tag] !=
NULL)
- {
- BL_Card[p_card].discQ_Tbl[currSCCB->Sccb_tag] =
NULL;
- sccbMgrTbl[p_card][scsiID].TarTagQ_Cnt--;
- }
-
- }
-
- else if (currSCCB->Sccb_scsistat < COMMAND_ST)
- {
-
-
- if(message == SMNO_OP)
- {
- currSCCB->Sccb_MGRFlags |= F_DEV_SELECTED;
-
- ssel(port,p_card);
- return;
- }
- }
- else
- {
-
-
- if (message == SMABORT)
-
- queueFlushSccb(p_card,SCCB_COMPLETE);
- }
-
- }
- else
- {
- message = SMABORT;
- }
-
- WRW_HARPOON((port+hp_intstat), (BUS_FREE | PHASE | XFER_CNT_0));
-
-
- WR_HARPOON(port+hp_portctrl_0, SCSI_BUS_EN);
-
- WR_HARPOON(port+hp_scsidata_0,message);
-
- WR_HARPOON(port+hp_scsisig, (SCSI_ACK + S_ILL_PH));
-
- ACCEPT_MSG(port);
-
- WR_HARPOON(port+hp_portctrl_0, 0x00);
-
- if ((message == SMABORT) || (message == SMDEV_RESET) ||
- (message == SMABORT_TAG) )
- {
-
- while(!(RDW_HARPOON((port+hp_intstat)) & (BUS_FREE | PHASE))) {}
-
- if (RDW_HARPOON((port+hp_intstat)) & BUS_FREE)
- {
- WRW_HARPOON((port+hp_intstat), BUS_FREE);
-
- if (currSCCB != NULL)
- {
-
- if((BL_Card[p_card].globalFlags & F_CONLUN_IO)
&&
-
((sccbMgrTbl[p_card][currSCCB->TargID].TarStatus & TAR_TAG_Q_MASK) !=
TAG_Q_TRYING))
-
sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[currSCCB->Lun] = FALSE;
- else
-
sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[0] = FALSE;
-
- queueCmdComplete(&BL_Card[p_card],currSCCB,
p_card);
- }
-
- else
- {
- BL_Card[p_card].globalFlags |= F_NEW_SCCB_CMD;
- }
- }
-
- else
- {
-
- sxfrp(port,p_card);
- }
- }
-
- else
- {
-
- if(message == SMPARITY)
- {
- currSCCB->Sccb_scsimsg = SMNO_OP;
- WR_HARPOON(port+hp_autostart_1,
(AUTO_IMMED+DISCONNECT_START));
- }
- else
- {
- sxfrp(port,p_card);
- }
- }
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Message In phase
- *
- * Description: Bring in the message and determine what to do with it.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(OS2)
-void far phaseMsgIn(ULONG port, UCHAR p_card)
-#else
-#if defined(DOS)
-void phaseMsgIn(USHORT port, UCHAR p_card)
-#else
-void phaseMsgIn(ULONG port, UCHAR p_card)
-#endif
-#endif
-{
- UCHAR message;
- PSCCB currSCCB;
-
- currSCCB = BL_Card[p_card].currentSCCB;
-
- if (BL_Card[p_card].globalFlags & F_HOST_XFER_ACT)
- {
-
- phaseChkFifo(port, p_card);
- }
-
- message = RD_HARPOON(port+hp_scsidata_0);
- if ((message == SMDISC) || (message == SMSAVE_DATA_PTR))
- {
-
- WR_HARPOON(port+hp_autostart_1, (AUTO_IMMED+END_DATA_START));
-
- }
-
- else
- {
-
- message = sfm(port,currSCCB);
- if (message)
- {
-
-
- sdecm(message,port,p_card);
-
- }
- else
- {
- if(currSCCB->Sccb_scsimsg != SMPARITY)
- ACCEPT_MSG(port);
- WR_HARPOON(port+hp_autostart_1,
(AUTO_IMMED+DISCONNECT_START));
- }
- }
-
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Illegal phase
- *
- * Description: Target switched to some illegal phase, so all we can do
- * is report an error back to the host (if that is possible)
- * and send an ABORT message to the misbehaving target.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(OS2)
-void far phaseIllegal(ULONG port, UCHAR p_card)
-#else
-#if defined(DOS)
-void phaseIllegal(USHORT port, UCHAR p_card)
-#else
-void phaseIllegal(ULONG port, UCHAR p_card)
-#endif
-#endif
-{
- PSCCB currSCCB;
-
- currSCCB = BL_Card[p_card].currentSCCB;
-
- WR_HARPOON(port+hp_scsisig, RD_HARPOON(port+hp_scsisig));
- if (currSCCB != NULL) {
-
- currSCCB->HostStatus = SCCB_PHASE_SEQUENCE_FAIL;
- currSCCB->Sccb_scsistat = ABORT_ST;
- currSCCB->Sccb_scsimsg = SMABORT;
- }
-
- ACCEPT_MSG_ATN(port);
-}
-
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Phase Check FIFO
- *
- * Description: Make sure data has been flushed from both FIFOs and abort
- * the operations if necessary.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void phaseChkFifo(USHORT port, UCHAR p_card)
-#else
-void phaseChkFifo(ULONG port, UCHAR p_card)
-#endif
-{
- ULONG xfercnt;
- PSCCB currSCCB;
-
- currSCCB = BL_Card[p_card].currentSCCB;
-
- if (currSCCB->Sccb_scsistat == DATA_IN_ST)
- {
-
- while((!(RD_HARPOON(port+hp_xferstat) & FIFO_EMPTY)) &&
- (RD_HARPOON(port+hp_ext_status) & BM_CMD_BUSY)) {}
-
-
- if (!(RD_HARPOON(port+hp_xferstat) & FIFO_EMPTY))
- {
- currSCCB->Sccb_ATC += currSCCB->Sccb_XferCnt;
-
- currSCCB->Sccb_XferCnt = 0;
-
- if ((RDW_HARPOON((port+hp_intstat)) & PARITY) &&
- (currSCCB->HostStatus == SCCB_COMPLETE))
- {
- currSCCB->HostStatus = SCCB_PARITY_ERR;
- WRW_HARPOON((port+hp_intstat), PARITY);
- }
-
- hostDataXferAbort(port,p_card,currSCCB);
-
- dataXferProcessor(port, &BL_Card[p_card]);
-
- while((!(RD_HARPOON(port+hp_xferstat) & FIFO_EMPTY)) &&
- (RD_HARPOON(port+hp_ext_status) & BM_CMD_BUSY)) {}
-
- }
- } /*End Data In specific code. */
-
-
-
-#if defined(DOS)
- asm { mov dx,port;
- add dx,hp_xfercnt_2;
- in al,dx;
- dec dx;
- xor ah,ah;
- mov word ptr xfercnt+2,ax;
- in al,dx;
- dec dx;
- mov ah,al;
- in al,dx;
- mov word ptr xfercnt,ax;
- }
-#else
- GET_XFER_CNT(port,xfercnt);
-#endif
-
-
- WR_HARPOON(port+hp_xfercnt_0, 0x00);
-
-
- WR_HARPOON(port+hp_portctrl_0, 0x00);
-
- currSCCB->Sccb_ATC += (currSCCB->Sccb_XferCnt - xfercnt);
-
- currSCCB->Sccb_XferCnt = xfercnt;
-
- if ((RDW_HARPOON((port+hp_intstat)) & PARITY) &&
- (currSCCB->HostStatus == SCCB_COMPLETE)) {
-
- currSCCB->HostStatus = SCCB_PARITY_ERR;
- WRW_HARPOON((port+hp_intstat), PARITY);
- }
-
-
- hostDataXferAbort(port,p_card,currSCCB);
-
-
- WR_HARPOON(port+hp_fifowrite, 0x00);
- WR_HARPOON(port+hp_fiforead, 0x00);
- WR_HARPOON(port+hp_xferstat, 0x00);
-
- WRW_HARPOON((port+hp_intstat), XFER_CNT_0);
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Phase Bus Free
- *
- * Description: We just went bus free so figure out if it was
- * because of command complete or from a disconnect.
- *
- *---------------------------------------------------------------------*/
-#if defined(DOS)
-void phaseBusFree(USHORT port, UCHAR p_card)
-#else
-void phaseBusFree(ULONG port, UCHAR p_card)
-#endif
-{
- PSCCB currSCCB;
-
- currSCCB = BL_Card[p_card].currentSCCB;
-
- if (currSCCB != NULL)
- {
-
- DISABLE_AUTO(port);
-
-
- if (currSCCB->OperationCode == RESET_COMMAND)
- {
-
- if((BL_Card[p_card].globalFlags & F_CONLUN_IO) &&
-
((sccbMgrTbl[p_card][currSCCB->TargID].TarStatus & TAR_TAG_Q_MASK) !=
TAG_Q_TRYING))
-
sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[currSCCB->Lun] = FALSE;
- else
- sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[0] =
FALSE;
-
- queueCmdComplete(&BL_Card[p_card], currSCCB, p_card);
-
- queueSearchSelect(&BL_Card[p_card],p_card);
-
- }
-
- else if(currSCCB->Sccb_scsistat == SELECT_SN_ST)
- {
- sccbMgrTbl[p_card][currSCCB->TargID].TarStatus |=
- (UCHAR)SYNC_SUPPORTED;
- sccbMgrTbl[p_card][currSCCB->TargID].TarEEValue &= ~EE_SYNC_MASK;
- }
-
- else if(currSCCB->Sccb_scsistat == SELECT_WN_ST)
- {
- sccbMgrTbl[p_card][currSCCB->TargID].TarStatus =
- (sccbMgrTbl[p_card][currSCCB->TargID].
- TarStatus & ~WIDE_ENABLED) | WIDE_NEGOCIATED;
-
- sccbMgrTbl[p_card][currSCCB->TargID].TarEEValue &= ~EE_WIDE_SCSI;
- }
-
-#if !defined(DOS)
- else if(currSCCB->Sccb_scsistat == SELECT_Q_ST)
- {
- /* Make sure this is not a phony BUS_FREE. If we were
- reselected or if BUSY is NOT on then this is a
- valid BUS FREE. SRR Wednesday, 5/10/1995. */
-
- if ((!(RD_HARPOON(port+hp_scsisig) & SCSI_BSY)) ||
- (RDW_HARPOON((port+hp_intstat)) & RSEL))
- {
- sccbMgrTbl[p_card][currSCCB->TargID].TarStatus &=
~TAR_TAG_Q_MASK;
- sccbMgrTbl[p_card][currSCCB->TargID].TarStatus |= TAG_Q_REJECT;
- }
-
- else
- {
- return;
- }
- }
-#endif
-
- else
- {
-
- currSCCB->Sccb_scsistat = BUS_FREE_ST;
-
- if (!currSCCB->HostStatus)
- {
- currSCCB->HostStatus = SCCB_PHASE_SEQUENCE_FAIL;
- }
-
- if((BL_Card[p_card].globalFlags & F_CONLUN_IO) &&
-
((sccbMgrTbl[p_card][currSCCB->TargID].TarStatus & TAR_TAG_Q_MASK) !=
TAG_Q_TRYING))
-
sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[currSCCB->Lun] = FALSE;
- else
- sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[0] =
FALSE;
-
- queueCmdComplete(&BL_Card[p_card], currSCCB, p_card);
- return;
- }
-
-
- BL_Card[p_card].globalFlags |= F_NEW_SCCB_CMD;
-
- } /*end if !=null */
-}
-
-
-
-
-/*----------------------------------------------------------------------
- *
- *
- * Copyright 1995-1996 by Mylex Corporation. All Rights Reserved
- *
- * This file is available under both the GNU General Public License
- * and a BSD-style copyright; see LICENSE.FlashPoint for details.
- *
- * $Workfile: automate.c $
- *
- * Description: Functions relating to programming the automation of
- * the HARPOON.
- *
- * $Date: 1999/04/26 05:53:56 $
- *
- * $Revision: 1.1 $
- *
- *----------------------------------------------------------------------*/
-
-/*#include <globals.h>*/
-
-#if (FW_TYPE==_UCB_MGR_)
- /*#include <budi.h>*/
-#endif
-
-/*#include <sccbmgr.h>*/
-/*#include <blx30.h>*/
-/*#include <target.h>*/
-/*#include <scsi2.h>*/
-/*#include <harpoon.h>*/
-
-/*
-extern SCCBCARD BL_Card[MAX_CARDS];
-extern SCCBMGR_TAR_INFO sccbMgrTbl[MAX_CARDS][MAX_SCSI_TAR];
-extern SCCBCARD BL_Card[MAX_CARDS];
-*/
-
-/*---------------------------------------------------------------------
- *
- * Function: Auto Load Default Map
- *
- * Description: Load the Automation RAM with the defualt map values.
- *
- *---------------------------------------------------------------------*/
-#if defined(DOS)
-void autoLoadDefaultMap(USHORT p_port)
-#else
-void autoLoadDefaultMap(ULONG p_port)
-#endif
-{
-#if defined(DOS)
- USHORT map_addr;
-#else
- ULONG map_addr;
-#endif
-
- ARAM_ACCESS(p_port);
- map_addr = p_port + hp_aramBase;
-
- WRW_HARPOON(map_addr, (MPM_OP+AMSG_OUT+ 0xC0)); /*ID MESSAGE */
- map_addr +=2;
- WRW_HARPOON(map_addr, (MPM_OP+AMSG_OUT+ 0x20)); /*SIMPLE TAG QUEUEING MSG
*/
- map_addr +=2;
- WRW_HARPOON(map_addr, RAT_OP); /*RESET ATTENTION */
- map_addr +=2;
- WRW_HARPOON(map_addr, (MPM_OP+AMSG_OUT+ 0x00)); /*TAG ID MSG */
- map_addr +=2;
- WRW_HARPOON(map_addr, (MPM_OP+ACOMMAND+ 0x00)); /*CDB BYTE 0 */
- map_addr +=2;
- WRW_HARPOON(map_addr, (MPM_OP+ACOMMAND+ 0x00)); /*CDB BYTE 1 */
- map_addr +=2;
- WRW_HARPOON(map_addr, (MPM_OP+ACOMMAND+ 0x00)); /*CDB BYTE 2 */
- map_addr +=2;
- WRW_HARPOON(map_addr, (MPM_OP+ACOMMAND+ 0x00)); /*CDB BYTE 3 */
- map_addr +=2;
- WRW_HARPOON(map_addr, (MPM_OP+ACOMMAND+ 0x00)); /*CDB BYTE 4 */
- map_addr +=2;
- WRW_HARPOON(map_addr, (MPM_OP+ACOMMAND+ 0x00)); /*CDB BYTE 5 */
- map_addr +=2;
- WRW_HARPOON(map_addr, (MPM_OP+ACOMMAND+ 0x00)); /*CDB BYTE 6 */
- map_addr +=2;
- WRW_HARPOON(map_addr, (MPM_OP+ACOMMAND+ 0x00)); /*CDB BYTE 7 */
- map_addr +=2;
- WRW_HARPOON(map_addr, (MPM_OP+ACOMMAND+ 0x00)); /*CDB BYTE 8 */
- map_addr +=2;
- WRW_HARPOON(map_addr, (MPM_OP+ACOMMAND+ 0x00)); /*CDB BYTE 9 */
- map_addr +=2;
- WRW_HARPOON(map_addr, (MPM_OP+ACOMMAND+ 0x00)); /*CDB BYTE 10 */
- map_addr +=2;
- WRW_HARPOON(map_addr, (MPM_OP+ACOMMAND+ 0x00)); /*CDB BYTE 11 */
- map_addr +=2;
- WRW_HARPOON(map_addr, (CPE_OP+ADATA_OUT+ DINT)); /*JUMP IF DATA OUT */
- map_addr +=2;
- WRW_HARPOON(map_addr, (TCB_OP+FIFO_0+ DI)); /*JUMP IF NO DATA IN FIFO */
- map_addr +=2; /*This means AYNC DATA IN */
- WRW_HARPOON(map_addr, (SSI_OP+ SSI_IDO_STRT)); /*STOP AND INTERRUPT */
- map_addr +=2;
- WRW_HARPOON(map_addr, (CPE_OP+ADATA_IN+DINT)); /*JUMP IF NOT DATA IN PHZ
*/
- map_addr +=2;
- WRW_HARPOON(map_addr, (CPN_OP+AMSG_IN+ ST)); /*IF NOT MSG IN CHECK 4
DATA IN */
- map_addr +=2;
- WRW_HARPOON(map_addr, (CRD_OP+SDATA+ 0x02)); /*SAVE DATA PTR MSG? */
- map_addr +=2;
- WRW_HARPOON(map_addr, (BRH_OP+NOT_EQ+ DC)); /*GO CHECK FOR DISCONNECT
MSG */
- map_addr +=2;
- WRW_HARPOON(map_addr, (MRR_OP+SDATA+ D_AR1)); /*SAVE DATA PTRS MSG */
- map_addr +=2;
- WRW_HARPOON(map_addr, (CPN_OP+AMSG_IN+ ST)); /*IF NOT MSG IN CHECK DATA
IN */
- map_addr +=2;
- WRW_HARPOON(map_addr, (CRD_OP+SDATA+ 0x04)); /*DISCONNECT MSG? */
- map_addr +=2;
- WRW_HARPOON(map_addr, (BRH_OP+NOT_EQ+ UNKNWN));/*UKNKNOWN MSG */
- map_addr +=2;
- WRW_HARPOON(map_addr, (MRR_OP+SDATA+ D_BUCKET));/*XFER DISCONNECT MSG */
- map_addr +=2;
- WRW_HARPOON(map_addr, (SSI_OP+ SSI_ITAR_DISC));/*STOP AND
INTERRUPT */
- map_addr +=2;
- WRW_HARPOON(map_addr, (CPN_OP+ASTATUS+ UNKNWN));/*JUMP IF NOT STATUS PHZ.
*/
- map_addr +=2;
- WRW_HARPOON(map_addr, (MRR_OP+SDATA+ D_AR0)); /*GET STATUS BYTE */
- map_addr +=2;
- WRW_HARPOON(map_addr, (CPN_OP+AMSG_IN+ CC)); /*ERROR IF NOT MSG IN PHZ
*/
- map_addr +=2;
- WRW_HARPOON(map_addr, (CRD_OP+SDATA+ 0x00)); /*CHECK FOR CMD COMPLETE
MSG. */
- map_addr +=2;
- WRW_HARPOON(map_addr, (BRH_OP+NOT_EQ+ CC)); /*ERROR IF NOT CMD
COMPLETE MSG. */
- map_addr +=2;
- WRW_HARPOON(map_addr, (MRR_OP+SDATA+ D_BUCKET));/*GET CMD COMPLETE MSG */
- map_addr +=2;
- WRW_HARPOON(map_addr, (SSI_OP+ SSI_ICMD_COMP));/*END OF COMMAND */
- map_addr +=2;
-
- WRW_HARPOON(map_addr, (SSI_OP+ SSI_IUNKWN)); /*RECEIVED UNKNOWN MSG BYTE */
- map_addr +=2;
- WRW_HARPOON(map_addr, (SSI_OP+ SSI_INO_CC)); /*NO COMMAND COMPLETE AFTER
STATUS */
- map_addr +=2;
- WRW_HARPOON(map_addr, (SSI_OP+ SSI_ITICKLE)); /*BIOS Tickled the Mgr */
- map_addr +=2;
- WRW_HARPOON(map_addr, (SSI_OP+ SSI_IRFAIL)); /*EXPECTED ID/TAG MESSAGES
AND */
- map_addr +=2; /* DIDN'T GET ONE */
- WRW_HARPOON(map_addr, (CRR_OP+AR3+ S_IDREG)); /* comp SCSI SEL ID & AR3*/
- map_addr +=2;
- WRW_HARPOON(map_addr, (BRH_OP+EQUAL+ 0x00)); /*SEL ID OK then Conti. */
- map_addr +=2;
- WRW_HARPOON(map_addr, (SSI_OP+ SSI_INO_CC)); /*NO COMMAND COMPLETE AFTER
STATUS */
-
-
-
- SGRAM_ACCESS(p_port);
-}
-
-/*---------------------------------------------------------------------
- *
- * Function: Auto Command Complete
- *
- * Description: Post command back to host and find another command
- * to execute.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void autoCmdCmplt(USHORT p_port, UCHAR p_card)
-#else
-void autoCmdCmplt(ULONG p_port, UCHAR p_card)
-#endif
-{
- PSCCB currSCCB;
- UCHAR status_byte;
-
- currSCCB = BL_Card[p_card].currentSCCB;
-
- status_byte = RD_HARPOON(p_port+hp_gp_reg_0);
-
- sccbMgrTbl[p_card][currSCCB->TargID].TarLUN_CA = FALSE;
-
- if (status_byte != SSGOOD) {
-
- if (status_byte == SSQ_FULL) {
-
-
- if(((BL_Card[p_card].globalFlags & F_CONLUN_IO) &&
-
((sccbMgrTbl[p_card][currSCCB->TargID].TarStatus & TAR_TAG_Q_MASK) !=
TAG_Q_TRYING)))
- {
- sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[currSCCB->Lun]
= TRUE;
- if(BL_Card[p_card].discQCount != 0)
- BL_Card[p_card].discQCount--;
-
BL_Card[p_card].discQ_Tbl[sccbMgrTbl[p_card][currSCCB->TargID].LunDiscQ_Idx[currSCCB->Lun]]
= NULL;
- }
- else
- {
- sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[0] = TRUE;
- if(currSCCB->Sccb_tag)
- {
- if(BL_Card[p_card].discQCount != 0)
- BL_Card[p_card].discQCount--;
-
BL_Card[p_card].discQ_Tbl[currSCCB->Sccb_tag] = NULL;
- }else
- {
- if(BL_Card[p_card].discQCount != 0)
- BL_Card[p_card].discQCount--;
-
BL_Card[p_card].discQ_Tbl[sccbMgrTbl[p_card][currSCCB->TargID].LunDiscQ_Idx[0]]
= NULL;
- }
- }
-
- currSCCB->Sccb_MGRFlags |= F_STATUSLOADED;
-
- queueSelectFail(&BL_Card[p_card],p_card);
-
- return;
- }
-
- if(currSCCB->Sccb_scsistat == SELECT_SN_ST)
- {
- sccbMgrTbl[p_card][currSCCB->TargID].TarStatus |=
- (UCHAR)SYNC_SUPPORTED;
-
- sccbMgrTbl[p_card][currSCCB->TargID].TarEEValue &= ~EE_SYNC_MASK;
- BL_Card[p_card].globalFlags |= F_NEW_SCCB_CMD;
-
- if(((BL_Card[p_card].globalFlags & F_CONLUN_IO) &&
-
((sccbMgrTbl[p_card][currSCCB->TargID].TarStatus & TAR_TAG_Q_MASK) !=
TAG_Q_TRYING)))
- {
- sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[currSCCB->Lun]
= TRUE;
- if(BL_Card[p_card].discQCount != 0)
- BL_Card[p_card].discQCount--;
-
BL_Card[p_card].discQ_Tbl[sccbMgrTbl[p_card][currSCCB->TargID].LunDiscQ_Idx[currSCCB->Lun]]
= NULL;
- }
- else
- {
- sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[0] = TRUE;
- if(currSCCB->Sccb_tag)
- {
- if(BL_Card[p_card].discQCount != 0)
- BL_Card[p_card].discQCount--;
-
BL_Card[p_card].discQ_Tbl[currSCCB->Sccb_tag] = NULL;
- }else
- {
- if(BL_Card[p_card].discQCount != 0)
- BL_Card[p_card].discQCount--;
-
BL_Card[p_card].discQ_Tbl[sccbMgrTbl[p_card][currSCCB->TargID].LunDiscQ_Idx[0]]
= NULL;
- }
- }
- return;
-
- }
-
- if(currSCCB->Sccb_scsistat == SELECT_WN_ST)
- {
-
- sccbMgrTbl[p_card][currSCCB->TargID].TarStatus =
- (sccbMgrTbl[p_card][currSCCB->TargID].
- TarStatus & ~WIDE_ENABLED) | WIDE_NEGOCIATED;
-
- sccbMgrTbl[p_card][currSCCB->TargID].TarEEValue &= ~EE_WIDE_SCSI;
- BL_Card[p_card].globalFlags |= F_NEW_SCCB_CMD;
-
- if(((BL_Card[p_card].globalFlags & F_CONLUN_IO) &&
-
((sccbMgrTbl[p_card][currSCCB->TargID].TarStatus & TAR_TAG_Q_MASK) !=
TAG_Q_TRYING)))
- {
- sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[currSCCB->Lun]
= TRUE;
- if(BL_Card[p_card].discQCount != 0)
- BL_Card[p_card].discQCount--;
-
BL_Card[p_card].discQ_Tbl[sccbMgrTbl[p_card][currSCCB->TargID].LunDiscQ_Idx[currSCCB->Lun]]
= NULL;
- }
- else
- {
- sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[0] = TRUE;
- if(currSCCB->Sccb_tag)
- {
- if(BL_Card[p_card].discQCount != 0)
- BL_Card[p_card].discQCount--;
-
BL_Card[p_card].discQ_Tbl[currSCCB->Sccb_tag] = NULL;
- }else
- {
- if(BL_Card[p_card].discQCount != 0)
- BL_Card[p_card].discQCount--;
-
BL_Card[p_card].discQ_Tbl[sccbMgrTbl[p_card][currSCCB->TargID].LunDiscQ_Idx[0]]
= NULL;
- }
- }
- return;
-
- }
-
- if (status_byte == SSCHECK)
- {
- if(BL_Card[p_card].globalFlags & F_DO_RENEGO)
- {
- if
(sccbMgrTbl[p_card][currSCCB->TargID].TarEEValue & EE_SYNC_MASK)
- {
-
sccbMgrTbl[p_card][currSCCB->TargID].TarStatus &= ~TAR_SYNC_MASK;
- }
- if
(sccbMgrTbl[p_card][currSCCB->TargID].TarEEValue & EE_WIDE_SCSI)
- {
-
sccbMgrTbl[p_card][currSCCB->TargID].TarStatus &= ~TAR_WIDE_MASK;
- }
- }
- }
-
- if (!(currSCCB->Sccb_XferState & F_AUTO_SENSE)) {
-
- currSCCB->SccbStatus = SCCB_ERROR;
- currSCCB->TargetStatus = status_byte;
-
- if (status_byte == SSCHECK) {
-
- sccbMgrTbl[p_card][currSCCB->TargID].TarLUN_CA
- = TRUE;
-
-
-#if (FW_TYPE==_SCCB_MGR_)
- if (currSCCB->RequestSenseLength != NO_AUTO_REQUEST_SENSE) {
-
- if (currSCCB->RequestSenseLength == 0)
- currSCCB->RequestSenseLength = 14;
-
- ssenss(&BL_Card[p_card]);
- BL_Card[p_card].globalFlags |= F_NEW_SCCB_CMD;
-
- if(((BL_Card[p_card].globalFlags &
F_CONLUN_IO) &&
-
((sccbMgrTbl[p_card][currSCCB->TargID].TarStatus & TAR_TAG_Q_MASK) !=
TAG_Q_TRYING)))
- {
-
sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[currSCCB->Lun] = TRUE;
- if(BL_Card[p_card].discQCount
!= 0)
-
BL_Card[p_card].discQCount--;
-
BL_Card[p_card].discQ_Tbl[sccbMgrTbl[p_card][currSCCB->TargID].LunDiscQ_Idx[currSCCB->Lun]]
= NULL;
- }
- else
- {
-
sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[0] = TRUE;
- if(currSCCB->Sccb_tag)
- {
-
if(BL_Card[p_card].discQCount != 0)
-
BL_Card[p_card].discQCount--;
-
BL_Card[p_card].discQ_Tbl[currSCCB->Sccb_tag] = NULL;
- }else
- {
-
if(BL_Card[p_card].discQCount != 0)
-
BL_Card[p_card].discQCount--;
-
BL_Card[p_card].discQ_Tbl[sccbMgrTbl[p_card][currSCCB->TargID].LunDiscQ_Idx[0]]
= NULL;
- }
- }
- return;
- }
-#else
- if ((!(currSCCB->Sccb_ucb_ptr->UCB_opcode &
OPC_NO_AUTO_SENSE)) &&
- (currSCCB->RequestSenseLength))
- {
- ssenss(&BL_Card[p_card]);
- BL_Card[p_card].globalFlags |=
F_NEW_SCCB_CMD;
-
-
if(((BL_Card[p_card].globalFlags & F_CONLUN_IO) &&
-
((sccbMgrTbl[p_card][currSCCB->TargID].TarStatus & TAR_TAG_Q_MASK) !=
TAG_Q_TRYING)))
- {
-
sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[currSCCB->Lun] = TRUE;
-
if(BL_Card[p_card].discQCount != 0)
-
BL_Card[p_card].discQCount--;
-
BL_Card[p_card].discQ_Tbl[sccbMgrTbl[p_card][currSCCB->TargID].LunDiscQ_Idx[currSCCB->Lun]]
= NULL;
- }
- else
- {
-
sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[0] = TRUE;
- if(currSCCB->Sccb_tag)
- {
-
if(BL_Card[p_card].discQCount != 0)
-
BL_Card[p_card].discQCount--;
-
BL_Card[p_card].discQ_Tbl[currSCCB->Sccb_tag] = NULL;
- }else
- {
-
if(BL_Card[p_card].discQCount != 0)
-
BL_Card[p_card].discQCount--;
-
BL_Card[p_card].discQ_Tbl[sccbMgrTbl[p_card][currSCCB->TargID].LunDiscQ_Idx[0]]
= NULL;
- }
- }
- return;
- }
-
-#endif
- }
- }
- }
-
-
- if((BL_Card[p_card].globalFlags & F_CONLUN_IO) &&
- ((sccbMgrTbl[p_card][currSCCB->TargID].TarStatus &
TAR_TAG_Q_MASK) != TAG_Q_TRYING))
- sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[currSCCB->Lun] =
FALSE;
- else
- sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[0] = FALSE;
-
-
- queueCmdComplete(&BL_Card[p_card], currSCCB, p_card);
-}
-
-/*----------------------------------------------------------------------
- *
- *
- * Copyright 1995-1996 by Mylex Corporation. All Rights Reserved
- *
- * This file is available under both the GNU General Public License
- * and a BSD-style copyright; see LICENSE.FlashPoint for details.
- *
- * $Workfile: busmstr.c $
- *
- * Description: Functions to start, stop, and abort BusMaster operations.
- *
- * $Date: 1999/04/26 05:53:56 $
- *
- * $Revision: 1.1 $
- *
- *----------------------------------------------------------------------*/
-
-/*#include <globals.h>*/
-
-#if (FW_TYPE==_UCB_MGR_)
- /*#include <budi.h>*/
-#endif
-
-/*#include <sccbmgr.h>*/
-/*#include <blx30.h>*/
-/*#include <target.h>*/
-/*#include <scsi2.h>*/
-/*#include <harpoon.h>*/
-
-
-/*
-extern SCCBCARD BL_Card[MAX_CARDS];
-extern SCCBMGR_TAR_INFO sccbMgrTbl[MAX_CARDS][MAX_SCSI_TAR];
-*/
-
-#define SHORT_WAIT 0x0000000F
-#define LONG_WAIT 0x0000FFFFL
-
-#if defined(BUGBUG)
-void Debug_Load(UCHAR p_card, UCHAR p_bug_data);
-#endif
-
-/*---------------------------------------------------------------------
- *
- * Function: Data Transfer Processor
- *
- * Description: This routine performs two tasks.
- * (1) Start data transfer by calling HOST_DATA_XFER_START
- * function. Once data transfer is started, (2) Depends
- * on the type of data transfer mode Scatter/Gather mode
- * or NON Scatter/Gather mode. In NON Scatter/Gather mode,
- * this routine checks Sccb_MGRFlag (F_HOST_XFER_ACT bit) for
- * data transfer done. In Scatter/Gather mode, this routine
- * checks bus master command complete and dual rank busy
- * bit to keep chaining SC transfer command. Similarly,
- * in Scatter/Gather mode, it checks Sccb_MGRFlag
- * (F_HOST_XFER_ACT bit) for data transfer done.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void dataXferProcessor(USHORT port, PSCCBcard pCurrCard)
-#else
-void dataXferProcessor(ULONG port, PSCCBcard pCurrCard)
-#endif
-{
- PSCCB currSCCB;
-
- currSCCB = pCurrCard->currentSCCB;
-
- if (currSCCB->Sccb_XferState & F_SG_XFER)
- {
- if (pCurrCard->globalFlags & F_HOST_XFER_ACT)
-
- {
- currSCCB->Sccb_sgseg += (UCHAR)SG_BUF_CNT;
- currSCCB->Sccb_SGoffset = 0x00;
- }
- pCurrCard->globalFlags |= F_HOST_XFER_ACT;
-
- busMstrSGDataXferStart(port, currSCCB);
- }
-
- else
- {
- if (!(pCurrCard->globalFlags & F_HOST_XFER_ACT))
- {
- pCurrCard->globalFlags |= F_HOST_XFER_ACT;
-
- busMstrDataXferStart(port, currSCCB);
- }
- }
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: BusMaster Scatter Gather Data Transfer Start
- *
- * Description:
- *
- *---------------------------------------------------------------------*/
-#if defined(DOS)
-void busMstrSGDataXferStart(USHORT p_port, PSCCB pcurrSCCB)
-#else
-void busMstrSGDataXferStart(ULONG p_port, PSCCB pcurrSCCB)
-#endif
-{
- ULONG count,addr,tmpSGCnt;
- UINT sg_index;
- UCHAR sg_count, i;
-#if defined(DOS)
- USHORT reg_offset;
-#else
- ULONG reg_offset;
-#endif
-
-
- if (pcurrSCCB->Sccb_XferState & F_HOST_XFER_DIR) {
-
- count = ((ULONG) HOST_RD_CMD)<<24;
- }
-
- else {
- count = ((ULONG) HOST_WRT_CMD)<<24;
- }
-
- sg_count = 0;
- tmpSGCnt = 0;
- sg_index = pcurrSCCB->Sccb_sgseg;
- reg_offset = hp_aramBase;
-
-
- i = (UCHAR) (RD_HARPOON(p_port+hp_page_ctrl) &
~(SGRAM_ARAM|SCATTER_EN));
-
-
- WR_HARPOON(p_port+hp_page_ctrl, i);
-
- while ((sg_count < (UCHAR)SG_BUF_CNT) &&
- ((ULONG)(sg_index * (UINT)SG_ELEMENT_SIZE) < pcurrSCCB->DataLength) ) {
-
-#if defined(COMPILER_16_BIT) && !defined(DOS)
- tmpSGCnt += *(((ULONG far *)pcurrSCCB->DataPointer)+
- (sg_index * 2));
-
- count |= *(((ULONG far *)pcurrSCCB->DataPointer)+
- (sg_index * 2));
-
- addr = *(((ULONG far *)pcurrSCCB->DataPointer)+
- ((sg_index * 2) + 1));
-
-#else
- tmpSGCnt += *(((ULONG *)pcurrSCCB->DataPointer)+
- (sg_index * 2));
-
- count |= *(((ULONG *)pcurrSCCB->DataPointer)+
- (sg_index * 2));
-
- addr = *(((ULONG *)pcurrSCCB->DataPointer)+
- ((sg_index * 2) + 1));
-#endif
-
-
- if ((!sg_count) && (pcurrSCCB->Sccb_SGoffset)) {
-
- addr += ((count & 0x00FFFFFFL) - pcurrSCCB->Sccb_SGoffset);
- count = (count & 0xFF000000L) | pcurrSCCB->Sccb_SGoffset;
-
- tmpSGCnt = count & 0x00FFFFFFL;
- }
-
- WR_HARP32(p_port,reg_offset,addr);
- reg_offset +=4;
-
- WR_HARP32(p_port,reg_offset,count);
- reg_offset +=4;
-
- count &= 0xFF000000L;
- sg_index++;
- sg_count++;
-
- } /*End While */
-
- pcurrSCCB->Sccb_XferCnt = tmpSGCnt;
-
- WR_HARPOON(p_port+hp_sg_addr,(sg_count<<4));
-
- if (pcurrSCCB->Sccb_XferState & F_HOST_XFER_DIR) {
-
- WR_HARP32(p_port,hp_xfercnt_0,tmpSGCnt);
-
-
- WR_HARPOON(p_port+hp_portctrl_0,(DMA_PORT | SCSI_PORT | SCSI_INBIT));
- WR_HARPOON(p_port+hp_scsisig, S_DATAI_PH);
- }
-
- else {
-
-
- if ((!(RD_HARPOON(p_port+hp_synctarg_0) & NARROW_SCSI)) &&
- (tmpSGCnt & 0x000000001))
- {
-
- pcurrSCCB->Sccb_XferState |= F_ODD_BALL_CNT;
- tmpSGCnt--;
- }
-
-
- WR_HARP32(p_port,hp_xfercnt_0,tmpSGCnt);
-
- WR_HARPOON(p_port+hp_portctrl_0,(SCSI_PORT | DMA_PORT | DMA_RD));
- WR_HARPOON(p_port+hp_scsisig, S_DATAO_PH);
- }
-
-
- WR_HARPOON(p_port+hp_page_ctrl, (UCHAR) (i | SCATTER_EN));
-
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: BusMaster Data Transfer Start
- *
- * Description:
- *
- *---------------------------------------------------------------------*/
-#if defined(DOS)
-void busMstrDataXferStart(USHORT p_port, PSCCB pcurrSCCB)
-#else
-void busMstrDataXferStart(ULONG p_port, PSCCB pcurrSCCB)
-#endif
-{
- ULONG addr,count;
-
- if (!(pcurrSCCB->Sccb_XferState & F_AUTO_SENSE)) {
-
- count = pcurrSCCB->Sccb_XferCnt;
-
- addr = (ULONG) pcurrSCCB->DataPointer + pcurrSCCB->Sccb_ATC;
- }
-
- else {
- addr = pcurrSCCB->SensePointer;
- count = pcurrSCCB->RequestSenseLength;
-
- }
-
-#if defined(DOS)
- asm { mov dx,p_port;
- mov ax,word ptr count;
- add dx,hp_xfer_cnt_lo;
- out dx,al;
- inc dx;
- xchg ah,al
- out dx,al;
- inc dx;
- mov ax,word ptr count+2;
- out dx,al;
- inc dx;
- inc dx;
- mov ax,word ptr addr;
- out dx,al;
- inc dx;
- xchg ah,al
- out dx,al;
- inc dx;
- mov ax,word ptr addr+2;
- out dx,al;
- inc dx;
- xchg ah,al
- out dx,al;
- }
-
- WR_HARP32(p_port,hp_xfercnt_0,count);
-
-#else
- HP_SETUP_ADDR_CNT(p_port,addr,count);
-#endif
-
-
- if (pcurrSCCB->Sccb_XferState & F_HOST_XFER_DIR) {
-
- WR_HARPOON(p_port+hp_portctrl_0,(DMA_PORT | SCSI_PORT | SCSI_INBIT));
- WR_HARPOON(p_port+hp_scsisig, S_DATAI_PH);
-
- WR_HARPOON(p_port+hp_xfer_cmd,
- (XFER_DMA_HOST | XFER_HOST_AUTO | XFER_DMA_8BIT));
- }
-
- else {
-
- WR_HARPOON(p_port+hp_portctrl_0,(SCSI_PORT | DMA_PORT | DMA_RD));
- WR_HARPOON(p_port+hp_scsisig, S_DATAO_PH);
-
- WR_HARPOON(p_port+hp_xfer_cmd,
- (XFER_HOST_DMA | XFER_HOST_AUTO | XFER_DMA_8BIT));
-
- }
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: BusMaster Timeout Handler
- *
- * Description: This function is called after a bus master command busy time
- * out is detected. This routines issue halt state machine
- * with a software time out for command busy. If command busy
- * is still asserted at the end of the time out, it issues
- * hard abort with another software time out. It hard abort
- * command busy is also time out, it'll just give up.
- *
- *---------------------------------------------------------------------*/
-#if defined(DOS)
-UCHAR busMstrTimeOut(USHORT p_port)
-#else
-UCHAR busMstrTimeOut(ULONG p_port)
-#endif
-{
- ULONG timeout;
-
- timeout = LONG_WAIT;
-
- WR_HARPOON(p_port+hp_sys_ctrl, HALT_MACH);
-
- while ((!(RD_HARPOON(p_port+hp_ext_status) & CMD_ABORTED)) && timeout--) {}
-
-
-
- if (RD_HARPOON(p_port+hp_ext_status) & BM_CMD_BUSY) {
- WR_HARPOON(p_port+hp_sys_ctrl, HARD_ABORT);
-
- timeout = LONG_WAIT;
- while ((RD_HARPOON(p_port+hp_ext_status) & BM_CMD_BUSY) && timeout--) {}
- }
-
- RD_HARPOON(p_port+hp_int_status); /*Clear command complete */
-
- if (RD_HARPOON(p_port+hp_ext_status) & BM_CMD_BUSY) {
- return(TRUE);
- }
-
- else {
- return(FALSE);
- }
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Host Data Transfer Abort
- *
- * Description: Abort any in progress transfer.
- *
- *---------------------------------------------------------------------*/
-#if defined(DOS)
-void hostDataXferAbort(USHORT port, UCHAR p_card, PSCCB pCurrSCCB)
-#else
-void hostDataXferAbort(ULONG port, UCHAR p_card, PSCCB pCurrSCCB)
-#endif
-{
-
- ULONG timeout;
- ULONG remain_cnt;
- UINT sg_ptr;
-
- BL_Card[p_card].globalFlags &= ~F_HOST_XFER_ACT;
-
- if (pCurrSCCB->Sccb_XferState & F_AUTO_SENSE) {
-
-
- if (!(RD_HARPOON(port+hp_int_status) & INT_CMD_COMPL)) {
-
- WR_HARPOON(port+hp_bm_ctrl, (RD_HARPOON(port+hp_bm_ctrl) |
FLUSH_XFER_CNTR));
- timeout = LONG_WAIT;
-
- while ((RD_HARPOON(port+hp_ext_status) & BM_CMD_BUSY) && timeout--) {}
-
- WR_HARPOON(port+hp_bm_ctrl, (RD_HARPOON(port+hp_bm_ctrl) &
~FLUSH_XFER_CNTR));
-
- if (RD_HARPOON(port+hp_ext_status) & BM_CMD_BUSY) {
-
- if (busMstrTimeOut(port)) {
-
- if (pCurrSCCB->HostStatus == 0x00)
-
- pCurrSCCB->HostStatus = SCCB_BM_ERR;
-
- }
-
- if (RD_HARPOON(port+hp_int_status) & INT_EXT_STATUS)
-
- if (RD_HARPOON(port+hp_ext_status) & BAD_EXT_STATUS)
-
- if (pCurrSCCB->HostStatus == 0x00)
-
- {
- pCurrSCCB->HostStatus = SCCB_BM_ERR;
-#if defined(BUGBUG)
- WR_HARPOON(port+hp_dual_addr_lo,
- RD_HARPOON(port+hp_ext_status));
-#endif
- }
- }
- }
- }
-
- else if (pCurrSCCB->Sccb_XferCnt) {
-
- if (pCurrSCCB->Sccb_XferState & F_SG_XFER) {
-
-
- WR_HARPOON(port+hp_page_ctrl, (RD_HARPOON(port+hp_page_ctrl) &
- ~SCATTER_EN));
-
- WR_HARPOON(port+hp_sg_addr,0x00);
-
- sg_ptr = pCurrSCCB->Sccb_sgseg + SG_BUF_CNT;
-
- if (sg_ptr > (UINT)(pCurrSCCB->DataLength / SG_ELEMENT_SIZE)) {
-
- sg_ptr = (UINT)(pCurrSCCB->DataLength / SG_ELEMENT_SIZE);
- }
-
- remain_cnt = pCurrSCCB->Sccb_XferCnt;
-
- while (remain_cnt < 0x01000000L) {
-
- sg_ptr--;
-
-#if defined(COMPILER_16_BIT) && !defined(DOS)
- if (remain_cnt > (ULONG)(*(((ULONG far *)pCurrSCCB->
- DataPointer) + (sg_ptr * 2)))) {
-
- remain_cnt -= (ULONG)(*(((ULONG far *)pCurrSCCB->
- DataPointer) + (sg_ptr * 2)));
- }
-
-#else
- if (remain_cnt > (ULONG)(*(((ULONG *)pCurrSCCB->
- DataPointer) + (sg_ptr * 2)))) {
-
- remain_cnt -= (ULONG)(*(((ULONG *)pCurrSCCB->
- DataPointer) + (sg_ptr * 2)));
- }
-#endif
-
- else {
-
- break;
- }
- }
-
-
-
- if (remain_cnt < 0x01000000L) {
-
-
- pCurrSCCB->Sccb_SGoffset = remain_cnt;
-
- pCurrSCCB->Sccb_sgseg = (USHORT)sg_ptr;
-
-
- if ((ULONG)(sg_ptr * SG_ELEMENT_SIZE) == pCurrSCCB->DataLength
- && (remain_cnt == 0))
-
- pCurrSCCB->Sccb_XferState |= F_ALL_XFERRED;
- }
-
- else {
-
-
- if (pCurrSCCB->HostStatus == 0x00) {
-
- pCurrSCCB->HostStatus = SCCB_GROSS_FW_ERR;
- }
- }
- }
-
-
- if (!(pCurrSCCB->Sccb_XferState & F_HOST_XFER_DIR)) {
-
-
- if (RD_HARPOON(port+hp_ext_status) & BM_CMD_BUSY) {
-
- busMstrTimeOut(port);
- }
-
- else {
-
- if (RD_HARPOON(port+hp_int_status) & INT_EXT_STATUS) {
-
- if (RD_HARPOON(port+hp_ext_status) & BAD_EXT_STATUS) {
-
- if (pCurrSCCB->HostStatus == 0x00) {
-
- pCurrSCCB->HostStatus = SCCB_BM_ERR;
-#if defined(BUGBUG)
- WR_HARPOON(port+hp_dual_addr_lo,
- RD_HARPOON(port+hp_ext_status));
-#endif
- }
- }
- }
-
- }
- }
-
- else {
-
-
- if ((RD_HARPOON(port+hp_fifo_cnt)) >= BM_THRESHOLD) {
-
- timeout = SHORT_WAIT;
-
- while ((RD_HARPOON(port+hp_ext_status) & BM_CMD_BUSY) &&
- ((RD_HARPOON(port+hp_fifo_cnt)) >= BM_THRESHOLD) &&
- timeout--) {}
- }
-
- if (RD_HARPOON(port+hp_ext_status) & BM_CMD_BUSY) {
-
- WR_HARPOON(port+hp_bm_ctrl, (RD_HARPOON(port+hp_bm_ctrl) |
- FLUSH_XFER_CNTR));
-
- timeout = LONG_WAIT;
-
- while ((RD_HARPOON(port+hp_ext_status) & BM_CMD_BUSY) &&
- timeout--) {}
-
- WR_HARPOON(port+hp_bm_ctrl, (RD_HARPOON(port+hp_bm_ctrl) &
- ~FLUSH_XFER_CNTR));
-
-
- if (RD_HARPOON(port+hp_ext_status) & BM_CMD_BUSY) {
-
- if (pCurrSCCB->HostStatus == 0x00) {
-
- pCurrSCCB->HostStatus = SCCB_BM_ERR;
- }
-
- busMstrTimeOut(port);
- }
- }
-
- if (RD_HARPOON(port+hp_int_status) & INT_EXT_STATUS) {
-
- if (RD_HARPOON(port+hp_ext_status) & BAD_EXT_STATUS) {
-
- if (pCurrSCCB->HostStatus == 0x00) {
-
- pCurrSCCB->HostStatus = SCCB_BM_ERR;
-#if defined(BUGBUG)
- WR_HARPOON(port+hp_dual_addr_lo,
- RD_HARPOON(port+hp_ext_status));
-#endif
- }
- }
- }
- }
-
- }
-
- else {
-
-
- if (RD_HARPOON(port+hp_ext_status) & BM_CMD_BUSY) {
-
- timeout = LONG_WAIT;
-
- while ((RD_HARPOON(port+hp_ext_status) & BM_CMD_BUSY) && timeout--) {}
-
- if (RD_HARPOON(port+hp_ext_status) & BM_CMD_BUSY) {
-
- if (pCurrSCCB->HostStatus == 0x00) {
-
- pCurrSCCB->HostStatus = SCCB_BM_ERR;
- }
-
- busMstrTimeOut(port);
- }
- }
-
-
- if (RD_HARPOON(port+hp_int_status) & INT_EXT_STATUS) {
-
- if (RD_HARPOON(port+hp_ext_status) & BAD_EXT_STATUS) {
-
- if (pCurrSCCB->HostStatus == 0x00) {
-
- pCurrSCCB->HostStatus = SCCB_BM_ERR;
-#if defined(BUGBUG)
- WR_HARPOON(port+hp_dual_addr_lo,
- RD_HARPOON(port+hp_ext_status));
-#endif
- }
- }
-
- }
-
- if (pCurrSCCB->Sccb_XferState & F_SG_XFER) {
-
- WR_HARPOON(port+hp_page_ctrl, (RD_HARPOON(port+hp_page_ctrl) &
- ~SCATTER_EN));
-
- WR_HARPOON(port+hp_sg_addr,0x00);
-
- pCurrSCCB->Sccb_sgseg += SG_BUF_CNT;
-
- pCurrSCCB->Sccb_SGoffset = 0x00;
-
-
- if ((ULONG)(pCurrSCCB->Sccb_sgseg * SG_ELEMENT_SIZE) >=
- pCurrSCCB->DataLength) {
-
- pCurrSCCB->Sccb_XferState |= F_ALL_XFERRED;
-
- pCurrSCCB->Sccb_sgseg = (USHORT)(pCurrSCCB->DataLength /
SG_ELEMENT_SIZE);
-
- }
- }
-
- else {
-
- if (!(pCurrSCCB->Sccb_XferState & F_AUTO_SENSE))
-
- pCurrSCCB->Sccb_XferState |= F_ALL_XFERRED;
- }
- }
-
- WR_HARPOON(port+hp_int_mask,(INT_CMD_COMPL | SCSI_INTERRUPT));
-}
-
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Host Data Transfer Restart
- *
- * Description: Reset the available count due to a restore data
- * pointers message.
- *
- *---------------------------------------------------------------------*/
-void hostDataXferRestart(PSCCB currSCCB)
-{
- ULONG data_count;
- UINT sg_index;
-#if defined(COMPILER_16_BIT) && !defined(DOS)
- ULONG far *sg_ptr;
-#else
- ULONG *sg_ptr;
-#endif
-
- if (currSCCB->Sccb_XferState & F_SG_XFER) {
-
- currSCCB->Sccb_XferCnt = 0;
-
- sg_index = 0xffff; /*Index by long words into sg list. */
- data_count = 0; /*Running count of SG xfer counts. */
-
-#if defined(COMPILER_16_BIT) && !defined(DOS)
- sg_ptr = (ULONG far *)currSCCB->DataPointer;
-#else
- sg_ptr = (ULONG *)currSCCB->DataPointer;
-#endif
-
- while (data_count < currSCCB->Sccb_ATC) {
-
- sg_index++;
- data_count += *(sg_ptr+(sg_index * 2));
- }
-
- if (data_count == currSCCB->Sccb_ATC) {
-
- currSCCB->Sccb_SGoffset = 0;
- sg_index++;
- }
-
- else {
- currSCCB->Sccb_SGoffset = data_count - currSCCB->Sccb_ATC;
- }
-
- currSCCB->Sccb_sgseg = (USHORT)sg_index;
- }
-
- else {
- currSCCB->Sccb_XferCnt = currSCCB->DataLength - currSCCB->Sccb_ATC;
- }
-}
-
-/*----------------------------------------------------------------------
- *
- *
- * Copyright 1995-1996 by Mylex Corporation. All Rights Reserved
- *
- * This file is available under both the GNU General Public License
- * and a BSD-style copyright; see LICENSE.FlashPoint for details.
- *
- * $Workfile: scam.c $
- *
- * Description: Functions relating to handling of the SCAM selection
- * and the determination of the SCSI IDs to be assigned
- * to all perspective SCSI targets.
- *
- * $Date: 1999/04/26 05:53:56 $
- *
- * $Revision: 1.1 $
- *
- *----------------------------------------------------------------------*/
-
-/*#include <globals.h>*/
-
-#if (FW_TYPE==_UCB_MGR_)
- /*#include <budi.h>*/
-#endif
-
-/*#include <sccbmgr.h>*/
-/*#include <blx30.h>*/
-/*#include <target.h>*/
-/*#include <scsi2.h>*/
-/*#include <eeprom.h>*/
-/*#include <harpoon.h>*/
-
-
-
-/*
-extern SCCBMGR_TAR_INFO sccbMgrTbl[MAX_CARDS][MAX_SCSI_TAR];
-extern SCCBCARD BL_Card[MAX_CARDS];
-extern SCCBSCAM_INFO scamInfo[MAX_SCSI_TAR];
-extern NVRAMINFO nvRamInfo[MAX_MB_CARDS];
-#if defined(DOS) || defined(OS2)
-extern UCHAR temp_id_string[ID_STRING_LENGTH];
-#endif
-extern UCHAR scamHAString[];
-*/
-/*---------------------------------------------------------------------
- *
- * Function: scini
- *
- * Description: Setup all data structures necessary for SCAM selection.
- *
- *---------------------------------------------------------------------*/
-
-void scini(UCHAR p_card, UCHAR p_our_id, UCHAR p_power_up)
-{
-
-#if defined(SCAM_LEV_2)
- UCHAR loser,assigned_id;
-#endif
-#if defined(DOS)
-
- USHORT p_port;
-#else
- ULONG p_port;
-#endif
-
- UCHAR i,k,ScamFlg ;
- PSCCBcard currCard;
- PNVRamInfo pCurrNvRam;
-
- currCard = &BL_Card[p_card];
- p_port = currCard->ioPort;
- pCurrNvRam = currCard->pNvRamInfo;
-
-
- if(pCurrNvRam){
- ScamFlg = pCurrNvRam->niScamConf;
- i = pCurrNvRam->niSysConf;
- }
- else{
- ScamFlg = (UCHAR) utilEERead(p_port, SCAM_CONFIG/2);
- i = (UCHAR)(utilEERead(p_port, (SYSTEM_CONFIG/2)));
- }
- if(!(i & 0x02)) /* check if reset bus in AutoSCSI parameter set */
- return;
-
- inisci(p_card,p_port, p_our_id);
-
- /* Force to wait 1 sec after SCSI bus reset. Some SCAM device FW
- too slow to return to SCAM selection */
-
- /* if (p_power_up)
- Wait1Second(p_port);
- else
- Wait(p_port, TO_250ms); */
-
- Wait1Second(p_port);
-
-#if defined(SCAM_LEV_2)
-
- if ((ScamFlg & SCAM_ENABLED) && (ScamFlg & SCAM_LEVEL2))
- {
- while (!(scarb(p_port,INIT_SELTD))) {}
-
- scsel(p_port);
-
- do {
- scxferc(p_port,SYNC_PTRN);
- scxferc(p_port,DOM_MSTR);
- loser = scsendi(p_port,&scamInfo[p_our_id].id_string[0]);
- } while ( loser == 0xFF );
-
- scbusf(p_port);
-
- if ((p_power_up) && (!loser))
- {
- sresb(p_port,p_card);
- Wait(p_port, TO_250ms);
-
- while (!(scarb(p_port,INIT_SELTD))) {}
-
- scsel(p_port);
-
- do {
- scxferc(p_port, SYNC_PTRN);
- scxferc(p_port, DOM_MSTR);
- loser = scsendi(p_port,&scamInfo[p_our_id].
- id_string[0]);
- } while ( loser == 0xFF );
-
- scbusf(p_port);
- }
- }
-
- else
- {
- loser = FALSE;
- }
-
-
- if (!loser)
- {
-
-#endif /* SCAM_LEV_2 */
-
- scamInfo[p_our_id].state = ID_ASSIGNED;
-
-
- if (ScamFlg & SCAM_ENABLED)
- {
-
- for (i=0; i < MAX_SCSI_TAR; i++)
- {
- if ((scamInfo[i].state == ID_UNASSIGNED) ||
- (scamInfo[i].state == ID_UNUSED))
- {
- if (scsell(p_port,i))
- {
- scamInfo[i].state = LEGACY;
- if ((scamInfo[i].id_string[0] != 0xFF) ||
- (scamInfo[i].id_string[1] != 0xFA))
- {
-
- scamInfo[i].id_string[0] = 0xFF;
- scamInfo[i].id_string[1] = 0xFA;
- if(pCurrNvRam == NULL)
- currCard->globalFlags |= F_UPDATE_EEPROM;
- }
- }
- }
- }
-
- sresb(p_port,p_card);
- Wait1Second(p_port);
- while (!(scarb(p_port,INIT_SELTD))) {}
- scsel(p_port);
- scasid(p_card, p_port);
- }
-
-#if defined(SCAM_LEV_2)
-
- }
-
- else if ((loser) && (ScamFlg & SCAM_ENABLED))
- {
- scamInfo[p_our_id].id_string[0] = SLV_TYPE_CODE0;
- assigned_id = FALSE;
- scwtsel(p_port);
-
- do {
- while (scxferc(p_port,0x00) != SYNC_PTRN) {}
-
- i = scxferc(p_port,0x00);
- if (i == ASSIGN_ID)
- {
- if (!(scsendi(p_port,&scamInfo[p_our_id].id_string[0])))
- {
- i = scxferc(p_port,0x00);
- if (scvalq(i))
- {
- k = scxferc(p_port,0x00);
-
- if (scvalq(k))
- {
- currCard->ourId =
- ((UCHAR)(i<<3)+(k & (UCHAR)7)) & (UCHAR) 0x3F;
- inisci(p_card, p_port, p_our_id);
- scamInfo[currCard->ourId].state = ID_ASSIGNED;
- scamInfo[currCard->ourId].id_string[0]
- = SLV_TYPE_CODE0;
- assigned_id = TRUE;
- }
- }
- }
- }
-
- else if (i == SET_P_FLAG)
- {
- if (!(scsendi(p_port,
- &scamInfo[p_our_id].id_string[0])))
- scamInfo[p_our_id].id_string[0] |= 0x80;
- }
- }while (!assigned_id);
-
- while (scxferc(p_port,0x00) != CFG_CMPLT) {}
- }
-
-#endif /* SCAM_LEV_2 */
- if (ScamFlg & SCAM_ENABLED)
- {
- scbusf(p_port);
- if (currCard->globalFlags & F_UPDATE_EEPROM)
- {
- scsavdi(p_card, p_port);
- currCard->globalFlags &= ~F_UPDATE_EEPROM;
- }
- }
-
-
-#if defined(DOS)
- for (i=0; i < MAX_SCSI_TAR; i++)
- {
- if (((ScamFlg & SCAM_ENABLED) && (scamInfo[i].state == LEGACY))
- || (i != p_our_id))
- {
- scsellDOS(p_port,i);
- }
- }
-#endif
-
-/*
- for (i=0,k=0; i < MAX_SCSI_TAR; i++)
- {
- if ((scamInfo[i].state == ID_ASSIGNED) ||
- (scamInfo[i].state == LEGACY))
- k++;
- }
-
- if (k==2)
- currCard->globalFlags |= F_SINGLE_DEVICE;
- else
- currCard->globalFlags &= ~F_SINGLE_DEVICE;
-*/
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: scarb
- *
- * Description: Gain control of the bus and wait SCAM select time (250ms)
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-int scarb(USHORT p_port, UCHAR p_sel_type)
-#else
-int scarb(ULONG p_port, UCHAR p_sel_type)
-#endif
-{
- if (p_sel_type == INIT_SELTD)
- {
-
- while (RD_HARPOON(p_port+hp_scsisig) & (SCSI_SEL | SCSI_BSY)) {}
-
-
- if (RD_HARPOON(p_port+hp_scsisig) & SCSI_SEL)
- return(FALSE);
-
- if (RD_HARPOON(p_port+hp_scsidata_0) != 00)
- return(FALSE);
-
- WR_HARPOON(p_port+hp_scsisig, (RD_HARPOON(p_port+hp_scsisig) |
SCSI_BSY));
-
- if (RD_HARPOON(p_port+hp_scsisig) & SCSI_SEL) {
-
- WR_HARPOON(p_port+hp_scsisig, (RD_HARPOON(p_port+hp_scsisig) &
- ~SCSI_BSY));
- return(FALSE);
- }
-
-
- WR_HARPOON(p_port+hp_scsisig, (RD_HARPOON(p_port+hp_scsisig) |
SCSI_SEL));
-
- if (RD_HARPOON(p_port+hp_scsidata_0) != 00) {
-
- WR_HARPOON(p_port+hp_scsisig, (RD_HARPOON(p_port+hp_scsisig) &
- ~(SCSI_BSY | SCSI_SEL)));
- return(FALSE);
- }
- }
-
-
- WR_HARPOON(p_port+hp_clkctrl_0, (RD_HARPOON(p_port+hp_clkctrl_0)
- & ~ACTdeassert));
- WR_HARPOON(p_port+hp_scsireset, SCAM_EN);
- WR_HARPOON(p_port+hp_scsidata_0, 0x00);
-#if defined(WIDE_SCSI)
- WR_HARPOON(p_port+hp_scsidata_1, 0x00);
-#endif
- WR_HARPOON(p_port+hp_portctrl_0, SCSI_BUS_EN);
-
- WR_HARPOON(p_port+hp_scsisig, (RD_HARPOON(p_port+hp_scsisig) | SCSI_MSG));
-
- WR_HARPOON(p_port+hp_scsisig, (RD_HARPOON(p_port+hp_scsisig)
- & ~SCSI_BSY));
-
- Wait(p_port,TO_250ms);
-
- return(TRUE);
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: scbusf
- *
- * Description: Release the SCSI bus and disable SCAM selection.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void scbusf(USHORT p_port)
-#else
-void scbusf(ULONG p_port)
-#endif
-{
- WR_HARPOON(p_port+hp_page_ctrl,
- (RD_HARPOON(p_port+hp_page_ctrl) | G_INT_DISABLE));
-
-
- WR_HARPOON(p_port+hp_scsidata_0, 0x00);
-
- WR_HARPOON(p_port+hp_portctrl_0, (RD_HARPOON(p_port+hp_portctrl_0)
- & ~SCSI_BUS_EN));
-
- WR_HARPOON(p_port+hp_scsisig, 0x00);
-
-
- WR_HARPOON(p_port+hp_scsireset, (RD_HARPOON(p_port+hp_scsireset)
- & ~SCAM_EN));
-
- WR_HARPOON(p_port+hp_clkctrl_0, (RD_HARPOON(p_port+hp_clkctrl_0)
- | ACTdeassert));
-
-#if defined(SCAM_LEV_2)
- WRW_HARPOON((p_port+hp_intstat), (BUS_FREE | AUTO_INT | SCAM_SEL));
-#else
- WRW_HARPOON((p_port+hp_intstat), (BUS_FREE | AUTO_INT));
-#endif
-
- WR_HARPOON(p_port+hp_page_ctrl,
- (RD_HARPOON(p_port+hp_page_ctrl) & ~G_INT_DISABLE));
-}
-
-
-
-/*---------------------------------------------------------------------
- *
- * Function: scasid
- *
- * Description: Assign an ID to all the SCAM devices.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void scasid(UCHAR p_card, USHORT p_port)
-#else
-void scasid(UCHAR p_card, ULONG p_port)
-#endif
-{
-#if defined(DOS) || defined(OS2)
- /* Use external defined in global space area, instead of Stack
- space. WIN/95 DOS doesnot work TINY mode. The OS doesnot intialize
- SS equal to DS. Thus the array allocated on stack doesnot get
- access correctly */
-#else
- UCHAR temp_id_string[ID_STRING_LENGTH];
-#endif
-
- UCHAR i,k,scam_id;
- UCHAR crcBytes[3];
- PNVRamInfo pCurrNvRam;
- ushort_ptr pCrcBytes;
-
- pCurrNvRam = BL_Card[p_card].pNvRamInfo;
-
- i=FALSE;
-
- while (!i)
- {
-
- for (k=0; k < ID_STRING_LENGTH; k++)
- {
- temp_id_string[k] = (UCHAR) 0x00;
- }
-
- scxferc(p_port,SYNC_PTRN);
- scxferc(p_port,ASSIGN_ID);
-
- if (!(sciso(p_port,&temp_id_string[0])))
- {
- if(pCurrNvRam){
- pCrcBytes = (ushort_ptr)&crcBytes[0];
- *pCrcBytes = CalcCrc16(&temp_id_string[0]);
- crcBytes[2] = CalcLrc(&temp_id_string[0]);
- temp_id_string[1] = crcBytes[2];
- temp_id_string[2] = crcBytes[0];
- temp_id_string[3] = crcBytes[1];
- for(k = 4; k < ID_STRING_LENGTH; k++)
- temp_id_string[k] = (UCHAR) 0x00;
- }
- i = scmachid(p_card,temp_id_string);
-
- if (i == CLR_PRIORITY)
- {
- scxferc(p_port,MISC_CODE);
- scxferc(p_port,CLR_P_FLAG);
- i = FALSE; /*Not the last ID yet. */
- }
-
- else if (i != NO_ID_AVAIL)
- {
- if (i < 8 )
- scxferc(p_port,ID_0_7);
- else
- scxferc(p_port,ID_8_F);
-
- scam_id = (i & (UCHAR) 0x07);
-
-
- for (k=1; k < 0x08; k <<= 1)
- if (!( k & i ))
- scam_id += 0x08; /*Count number of zeros in DB0-3. */
-
- scxferc(p_port,scam_id);
-
- i = FALSE; /*Not the last ID yet. */
- }
- }
-
- else
- {
- i = TRUE;
- }
-
- } /*End while */
-
- scxferc(p_port,SYNC_PTRN);
- scxferc(p_port,CFG_CMPLT);
-}
-
-
-
-
-
-/*---------------------------------------------------------------------
- *
- * Function: scsel
- *
- * Description: Select all the SCAM devices.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void scsel(USHORT p_port)
-#else
-void scsel(ULONG p_port)
-#endif
-{
-
- WR_HARPOON(p_port+hp_scsisig, SCSI_SEL);
- scwiros(p_port, SCSI_MSG);
-
- WR_HARPOON(p_port+hp_scsisig, (SCSI_SEL | SCSI_BSY));
-
-
- WR_HARPOON(p_port+hp_scsisig, (SCSI_SEL | SCSI_BSY | SCSI_IOBIT | SCSI_CD));
- WR_HARPOON(p_port+hp_scsidata_0, (UCHAR)(RD_HARPOON(p_port+hp_scsidata_0) |
- (UCHAR)(BIT(7)+BIT(6))));
-
-
- WR_HARPOON(p_port+hp_scsisig, (SCSI_BSY | SCSI_IOBIT | SCSI_CD));
- scwiros(p_port, SCSI_SEL);
-
- WR_HARPOON(p_port+hp_scsidata_0, (UCHAR)(RD_HARPOON(p_port+hp_scsidata_0) &
- ~(UCHAR)BIT(6)));
- scwirod(p_port, BIT(6));
-
- WR_HARPOON(p_port+hp_scsisig, (SCSI_SEL | SCSI_BSY | SCSI_IOBIT | SCSI_CD));
-}
-
-
-
-/*---------------------------------------------------------------------
- *
- * Function: scxferc
- *
- * Description: Handshake the p_data (DB4-0) across the bus.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-UCHAR scxferc(USHORT p_port, UCHAR p_data)
-#else
-UCHAR scxferc(ULONG p_port, UCHAR p_data)
-#endif
-{
- UCHAR curr_data, ret_data;
-
- curr_data = p_data | BIT(7) | BIT(5); /*Start with DB7 & DB5 asserted. */
-
- WR_HARPOON(p_port+hp_scsidata_0, curr_data);
-
- curr_data &= ~BIT(7);
-
- WR_HARPOON(p_port+hp_scsidata_0, curr_data);
-
- scwirod(p_port,BIT(7)); /*Wait for DB7 to be released. */
- while (!(RD_HARPOON(p_port+hp_scsidata_0) & BIT(5)));
-
- ret_data = (RD_HARPOON(p_port+hp_scsidata_0) & (UCHAR) 0x1F);
-
- curr_data |= BIT(6);
-
- WR_HARPOON(p_port+hp_scsidata_0, curr_data);
-
- curr_data &= ~BIT(5);
-
- WR_HARPOON(p_port+hp_scsidata_0, curr_data);
-
- scwirod(p_port,BIT(5)); /*Wait for DB5 to be released. */
-
- curr_data &= ~(BIT(4)|BIT(3)|BIT(2)|BIT(1)|BIT(0)); /*Release data bits */
- curr_data |= BIT(7);
-
- WR_HARPOON(p_port+hp_scsidata_0, curr_data);
-
- curr_data &= ~BIT(6);
-
- WR_HARPOON(p_port+hp_scsidata_0, curr_data);
-
- scwirod(p_port,BIT(6)); /*Wait for DB6 to be released. */
-
- return(ret_data);
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: scsendi
- *
- * Description: Transfer our Identification string to determine if we
- * will be the dominant master.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-UCHAR scsendi(USHORT p_port, UCHAR p_id_string[])
-#else
-UCHAR scsendi(ULONG p_port, UCHAR p_id_string[])
-#endif
-{
- UCHAR ret_data,byte_cnt,bit_cnt,defer;
-
- defer = FALSE;
-
- for (byte_cnt = 0; byte_cnt < ID_STRING_LENGTH; byte_cnt++) {
-
- for (bit_cnt = 0x80; bit_cnt != 0 ; bit_cnt >>= 1) {
-
- if (defer)
- ret_data = scxferc(p_port,00);
-
- else if (p_id_string[byte_cnt] & bit_cnt)
-
- ret_data = scxferc(p_port,02);
-
- else {
-
- ret_data = scxferc(p_port,01);
- if (ret_data & 02)
- defer = TRUE;
- }
-
- if ((ret_data & 0x1C) == 0x10)
- return(0x00); /*End of isolation stage, we won! */
-
- if (ret_data & 0x1C)
- return(0xFF);
-
- if ((defer) && (!(ret_data & 0x1F)))
- return(0x01); /*End of isolation stage, we lost. */
-
- } /*bit loop */
-
- } /*byte loop */
-
- if (defer)
- return(0x01); /*We lost */
- else
- return(0); /*We WON! Yeeessss! */
-}
-
-
-
-/*---------------------------------------------------------------------
- *
- * Function: sciso
- *
- * Description: Transfer the Identification string.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-UCHAR sciso(USHORT p_port, UCHAR p_id_string[])
-#else
-UCHAR sciso(ULONG p_port, UCHAR p_id_string[])
-#endif
-{
- UCHAR ret_data,the_data,byte_cnt,bit_cnt;
-
- the_data = 0;
-
- for (byte_cnt = 0; byte_cnt < ID_STRING_LENGTH; byte_cnt++) {
-
- for (bit_cnt = 0; bit_cnt < 8; bit_cnt++) {
-
- ret_data = scxferc(p_port,0);
-
- if (ret_data & 0xFC)
- return(0xFF);
-
- else {
-
- the_data <<= 1;
- if (ret_data & BIT(1)) {
- the_data |= 1;
- }
- }
-
- if ((ret_data & 0x1F) == 0)
- {
-/*
- if(bit_cnt != 0 || bit_cnt != 8)
- {
- byte_cnt = 0;
- bit_cnt = 0;
- scxferc(p_port, SYNC_PTRN);
- scxferc(p_port, ASSIGN_ID);
- continue;
- }
-*/
- if (byte_cnt)
- return(0x00);
- else
- return(0xFF);
- }
-
- } /*bit loop */
-
- p_id_string[byte_cnt] = the_data;
-
- } /*byte loop */
-
- return(0);
-}
-
-
-
-/*---------------------------------------------------------------------
- *
- * Function: scwirod
- *
- * Description: Sample the SCSI data bus making sure the signal has been
- * deasserted for the correct number of consecutive samples.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void scwirod(USHORT p_port, UCHAR p_data_bit)
-#else
-void scwirod(ULONG p_port, UCHAR p_data_bit)
-#endif
-{
- UCHAR i;
-
- i = 0;
- while ( i < MAX_SCSI_TAR ) {
-
- if (RD_HARPOON(p_port+hp_scsidata_0) & p_data_bit)
-
- i = 0;
-
- else
-
- i++;
-
- }
-}
-
-
-
-/*---------------------------------------------------------------------
- *
- * Function: scwiros
- *
- * Description: Sample the SCSI Signal lines making sure the signal has been
- * deasserted for the correct number of consecutive samples.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void scwiros(USHORT p_port, UCHAR p_data_bit)
-#else
-void scwiros(ULONG p_port, UCHAR p_data_bit)
-#endif
-{
- UCHAR i;
-
- i = 0;
- while ( i < MAX_SCSI_TAR ) {
-
- if (RD_HARPOON(p_port+hp_scsisig) & p_data_bit)
-
- i = 0;
-
- else
-
- i++;
-
- }
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: scvalq
- *
- * Description: Make sure we received a valid data byte.
- *
- *---------------------------------------------------------------------*/
-
-UCHAR scvalq(UCHAR p_quintet)
-{
- UCHAR count;
-
- for (count=1; count < 0x08; count<<=1) {
- if (!(p_quintet & count))
- p_quintet -= 0x80;
- }
-
- if (p_quintet & 0x18)
- return(FALSE);
-
- else
- return(TRUE);
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: scsell
- *
- * Description: Select the specified device ID using a selection timeout
- * less than 4ms. If somebody responds then it is a legacy
- * drive and this ID must be marked as such.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-UCHAR scsell(USHORT p_port, UCHAR targ_id)
-#else
-UCHAR scsell(ULONG p_port, UCHAR targ_id)
-#endif
-{
-#if defined(DOS)
- USHORT i;
-#else
- ULONG i;
-#endif
-
- WR_HARPOON(p_port+hp_page_ctrl,
- (RD_HARPOON(p_port+hp_page_ctrl) | G_INT_DISABLE));
-
- ARAM_ACCESS(p_port);
-
- WR_HARPOON(p_port+hp_addstat,(RD_HARPOON(p_port+hp_addstat) | SCAM_TIMER));
- WR_HARPOON(p_port+hp_seltimeout,TO_4ms);
-
-
- for (i = p_port+CMD_STRT; i < p_port+CMD_STRT+12; i+=2) {
- WRW_HARPOON(i, (MPM_OP+ACOMMAND));
- }
- WRW_HARPOON(i, (BRH_OP+ALWAYS+ NP));
-
- WRW_HARPOON((p_port+hp_intstat),
- (RESET | TIMEOUT | SEL | BUS_FREE | AUTO_INT));
-
- WR_HARPOON(p_port+hp_select_id, targ_id);
-
- WR_HARPOON(p_port+hp_portctrl_0, SCSI_PORT);
- WR_HARPOON(p_port+hp_autostart_3, (SELECT | CMD_ONLY_STRT));
- WR_HARPOON(p_port+hp_scsictrl_0, (SEL_TAR | ENA_RESEL));
-
-
- while (!(RDW_HARPOON((p_port+hp_intstat)) &
- (RESET | PROG_HLT | TIMEOUT | AUTO_INT))) {}
-
- if (RDW_HARPOON((p_port+hp_intstat)) & RESET)
- Wait(p_port, TO_250ms);
-
- DISABLE_AUTO(p_port);
-
- WR_HARPOON(p_port+hp_addstat,(RD_HARPOON(p_port+hp_addstat) & ~SCAM_TIMER));
- WR_HARPOON(p_port+hp_seltimeout,TO_290ms);
-
- SGRAM_ACCESS(p_port);
-
- if (RDW_HARPOON((p_port+hp_intstat)) & (RESET | TIMEOUT) ) {
-
- WRW_HARPOON((p_port+hp_intstat),
- (RESET | TIMEOUT | SEL | BUS_FREE | PHASE));
-
- WR_HARPOON(p_port+hp_page_ctrl,
- (RD_HARPOON(p_port+hp_page_ctrl) & ~G_INT_DISABLE));
-
- return(FALSE); /*No legacy device */
- }
-
- else {
-
- while(!(RDW_HARPOON((p_port+hp_intstat)) & BUS_FREE)) {
- if (RD_HARPOON(p_port+hp_scsisig) & SCSI_REQ)
- {
- WR_HARPOON(p_port+hp_scsisig, (SCSI_ACK
+ S_ILL_PH));
- ACCEPT_MSG(p_port);
- }
- }
-
- WRW_HARPOON((p_port+hp_intstat), CLR_ALL_INT_1);
-
- WR_HARPOON(p_port+hp_page_ctrl,
- (RD_HARPOON(p_port+hp_page_ctrl) & ~G_INT_DISABLE));
-
- return(TRUE); /*Found one of them oldies! */
- }
-}
-
-#if defined(DOS)
-/*---------------------------------------------------------------------
- *
- * Function: scsell for DOS
- *
- * Description: Select the specified device ID using a selection timeout
- * less than 2ms. This was specially required to solve
- * the problem with Plextor 12X CD-ROM drive. This drive
- * was responding the Selection at the
end of 4ms and
- * hanging the system.
- *
- *---------------------------------------------------------------------*/
-
-UCHAR scsellDOS(USHORT p_port, UCHAR targ_id)
-{
- USHORT i;
-
- WR_HARPOON(p_port+hp_page_ctrl,
- (RD_HARPOON(p_port+hp_page_ctrl) | G_INT_DISABLE));
-
- ARAM_ACCESS(p_port);
-
- WR_HARPOON(p_port+hp_addstat,(RD_HARPOON(p_port+hp_addstat) | SCAM_TIMER));
- WR_HARPOON(p_port+hp_seltimeout,TO_2ms);
-
-
- for (i = p_port+CMD_STRT; i < p_port+CMD_STRT+12; i+=2) {
- WRW_HARPOON(i, (MPM_OP+ACOMMAND));
- }
- WRW_HARPOON(i, (BRH_OP+ALWAYS+ NP));
-
- WRW_HARPOON((p_port+hp_intstat),
- (RESET | TIMEOUT | SEL | BUS_FREE | AUTO_INT));
-
- WR_HARPOON(p_port+hp_select_id, targ_id);
-
- WR_HARPOON(p_port+hp_portctrl_0, SCSI_PORT);
- WR_HARPOON(p_port+hp_autostart_3, (SELECT | CMD_ONLY_STRT));
- WR_HARPOON(p_port+hp_scsictrl_0, (SEL_TAR | ENA_RESEL));
-
-
- while (!(RDW_HARPOON((p_port+hp_intstat)) &
- (RESET | PROG_HLT | TIMEOUT | AUTO_INT))) {}
-
- if (RDW_HARPOON((p_port+hp_intstat)) & RESET)
- Wait(p_port, TO_250ms);
-
- DISABLE_AUTO(p_port);
-
- WR_HARPOON(p_port+hp_addstat,(RD_HARPOON(p_port+hp_addstat) & ~SCAM_TIMER));
- WR_HARPOON(p_port+hp_seltimeout,TO_290ms);
-
- SGRAM_ACCESS(p_port);
-
- if (RDW_HARPOON((p_port+hp_intstat)) & (RESET | TIMEOUT) ) {
-
- WRW_HARPOON((p_port+hp_intstat),
- (RESET | TIMEOUT | SEL | BUS_FREE | PHASE));
-
- WR_HARPOON(p_port+hp_page_ctrl,
- (RD_HARPOON(p_port+hp_page_ctrl) & ~G_INT_DISABLE));
-
- return(FALSE); /*No legacy device */
- }
-
- else {
-
- while(!(RDW_HARPOON((p_port+hp_intstat)) & BUS_FREE)) {
- if (RD_HARPOON(p_port+hp_scsisig) & SCSI_REQ)
- {
- WR_HARPOON(p_port+hp_scsisig, (SCSI_ACK
+ S_ILL_PH));
- ACCEPT_MSG(p_port);
- }
- }
-
- WRW_HARPOON((p_port+hp_intstat), CLR_ALL_INT_1);
-
- WR_HARPOON(p_port+hp_page_ctrl,
- (RD_HARPOON(p_port+hp_page_ctrl) & ~G_INT_DISABLE));
-
- return(TRUE); /*Found one of them oldies! */
- }
-}
-#endif /* DOS */
-
-/*---------------------------------------------------------------------
- *
- * Function: scwtsel
- *
- * Description: Wait to be selected by another SCAM initiator.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void scwtsel(USHORT p_port)
-#else
-void scwtsel(ULONG p_port)
-#endif
-{
- while(!(RDW_HARPOON((p_port+hp_intstat)) & SCAM_SEL)) {}
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: inisci
- *
- * Description: Setup the data Structure with the info from the EEPROM.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void inisci(UCHAR p_card, USHORT p_port, UCHAR p_our_id)
-#else
-void inisci(UCHAR p_card, ULONG p_port, UCHAR p_our_id)
-#endif
-{
- UCHAR i,k,max_id;
- USHORT ee_data;
- PNVRamInfo pCurrNvRam;
-
- pCurrNvRam = BL_Card[p_card].pNvRamInfo;
-
- if (RD_HARPOON(p_port+hp_page_ctrl) & NARROW_SCSI_CARD)
- max_id = 0x08;
-
- else
- max_id = 0x10;
-
- if(pCurrNvRam){
- for(i = 0; i < max_id; i++){
-
- for(k = 0; k < 4; k++)
- scamInfo[i].id_string[k] =
pCurrNvRam->niScamTbl[i][k];
- for(k = 4; k < ID_STRING_LENGTH; k++)
- scamInfo[i].id_string[k] = (UCHAR) 0x00;
-
- if(scamInfo[i].id_string[0] == 0x00)
- scamInfo[i].state = ID_UNUSED; /*Default to unused ID. */
- else
- scamInfo[i].state = ID_UNASSIGNED; /*Default to unassigned ID. */
-
- }
- }else {
- for (i=0; i < max_id; i++)
- {
- for (k=0; k < ID_STRING_LENGTH; k+=2)
- {
- ee_data = utilEERead(p_port, (USHORT)((EE_SCAMBASE/2) +
- (USHORT) (i*((USHORT)ID_STRING_LENGTH/2)) + (USHORT)(k/2)));
- scamInfo[i].id_string[k] = (UCHAR) ee_data;
- ee_data >>= 8;
- scamInfo[i].id_string[k+1] = (UCHAR) ee_data;
- }
-
- if ((scamInfo[i].id_string[0] == 0x00) ||
- (scamInfo[i].id_string[0] == 0xFF))
-
- scamInfo[i].state = ID_UNUSED; /*Default to unused ID. */
-
- else
- scamInfo[i].state = ID_UNASSIGNED; /*Default to unassigned ID. */
-
- }
- }
- for(k = 0; k < ID_STRING_LENGTH; k++)
- scamInfo[p_our_id].id_string[k] = scamHAString[k];
-
-}
-
-/*---------------------------------------------------------------------
- *
- * Function: scmachid
- *
- * Description: Match the Device ID string with our values stored in
- * the EEPROM.
- *
- *---------------------------------------------------------------------*/
-
-UCHAR scmachid(UCHAR p_card, UCHAR p_id_string[])
-{
-
- UCHAR i,k,match;
-
-
- for (i=0; i < MAX_SCSI_TAR; i++) {
-
-#if !defined(SCAM_LEV_2)
- if (scamInfo[i].state == ID_UNASSIGNED)
- {
-#endif
- match = TRUE;
-
- for (k=0; k < ID_STRING_LENGTH; k++)
- {
- if (p_id_string[k] != scamInfo[i].id_string[k])
- match = FALSE;
- }
-
- if (match)
- {
- scamInfo[i].state = ID_ASSIGNED;
- return(i);
- }
-
-#if !defined(SCAM_LEV_2)
- }
-#endif
-
- }
-
-
-
- if (p_id_string[0] & BIT(5))
- i = 8;
- else
- i = MAX_SCSI_TAR;
-
- if (((p_id_string[0] & 0x06) == 0x02) || ((p_id_string[0] & 0x06) == 0x04))
- match = p_id_string[1] & (UCHAR) 0x1F;
- else
- match = 7;
-
- while (i > 0)
- {
- i--;
-
- if (scamInfo[match].state == ID_UNUSED)
- {
- for (k=0; k < ID_STRING_LENGTH; k++)
- {
- scamInfo[match].id_string[k] = p_id_string[k];
- }
-
- scamInfo[match].state = ID_ASSIGNED;
-
- if(BL_Card[p_card].pNvRamInfo == NULL)
- BL_Card[p_card].globalFlags |= F_UPDATE_EEPROM;
- return(match);
-
- }
-
-
- match--;
-
- if (match == 0xFF)
- {
- if (p_id_string[0] & BIT(5))
- match = 7;
- else
- match = MAX_SCSI_TAR-1;
- }
- }
-
-
-
- if (p_id_string[0] & BIT(7))
- {
- return(CLR_PRIORITY);
- }
-
-
- if (p_id_string[0] & BIT(5))
- i = 8;
- else
- i = MAX_SCSI_TAR;
-
- if (((p_id_string[0] & 0x06) == 0x02) || ((p_id_string[0] & 0x06) == 0x04))
- match = p_id_string[1] & (UCHAR) 0x1F;
- else
- match = 7;
-
- while (i > 0)
- {
-
- i--;
-
- if (scamInfo[match].state == ID_UNASSIGNED)
- {
- for (k=0; k < ID_STRING_LENGTH; k++)
- {
- scamInfo[match].id_string[k] = p_id_string[k];
- }
-
- scamInfo[match].id_string[0] |= BIT(7);
- scamInfo[match].state = ID_ASSIGNED;
- if(BL_Card[p_card].pNvRamInfo == NULL)
- BL_Card[p_card].globalFlags |= F_UPDATE_EEPROM;
- return(match);
-
- }
-
-
- match--;
-
- if (match == 0xFF)
- {
- if (p_id_string[0] & BIT(5))
- match = 7;
- else
- match = MAX_SCSI_TAR-1;
- }
- }
-
- return(NO_ID_AVAIL);
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: scsavdi
- *
- * Description: Save off the device SCAM ID strings.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void scsavdi(UCHAR p_card, USHORT p_port)
-#else
-void scsavdi(UCHAR p_card, ULONG p_port)
-#endif
-{
- UCHAR i,k,max_id;
- USHORT ee_data,sum_data;
-
-
- sum_data = 0x0000;
-
- for (i = 1; i < EE_SCAMBASE/2; i++)
- {
- sum_data += utilEERead(p_port, i);
- }
-
-
- utilEEWriteOnOff(p_port,1); /* Enable write access to the EEPROM */
-
- if (RD_HARPOON(p_port+hp_page_ctrl) & NARROW_SCSI_CARD)
- max_id = 0x08;
-
- else
- max_id = 0x10;
-
- for (i=0; i < max_id; i++)
- {
-
- for (k=0; k < ID_STRING_LENGTH; k+=2)
- {
- ee_data = scamInfo[i].id_string[k+1];
- ee_data <<= 8;
- ee_data |= scamInfo[i].id_string[k];
- sum_data += ee_data;
- utilEEWrite(p_port, ee_data, (USHORT)((EE_SCAMBASE/2) +
- (USHORT)(i*((USHORT)ID_STRING_LENGTH/2)) + (USHORT)(k/2)));
- }
- }
-
-
- utilEEWrite(p_port, sum_data, EEPROM_CHECK_SUM/2);
- utilEEWriteOnOff(p_port,0); /* Turn off write access */
-}
-
-/*----------------------------------------------------------------------
- *
- *
- * Copyright 1995-1996 by Mylex Corporation. All Rights Reserved
- *
- * This file is available under both the GNU General Public License
- * and a BSD-style copyright; see LICENSE.FlashPoint for details.
- *
- * $Workfile: diagnose.c $
- *
- * Description: Diagnostic funtions for testing the integrity of
- * the HARPOON.
- *
- * $Date: 1999/04/26 05:53:56 $
- *
- * $Revision: 1.1 $
- *
- *----------------------------------------------------------------------*/
-
-/*#include <globals.h>*/
-
-#if (FW_TYPE==_UCB_MGR_)
- /*#include <budi.h>*/
-#endif
-
-/*#include <sccbmgr.h>*/
-/*#include <blx30.h>*/
-/*#include <target.h>*/
-/*#include <eeprom.h>*/
-/*#include <harpoon.h>*/
-
-/*---------------------------------------------------------------------
- *
- * Function: XbowInit
- *
- * Description: Setup the Xbow for normal operation.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void XbowInit(USHORT port, UCHAR ScamFlg)
-#else
-void XbowInit(ULONG port, UCHAR ScamFlg)
-#endif
-{
-UCHAR i;
-
- i = RD_HARPOON(port+hp_page_ctrl);
- WR_HARPOON(port+hp_page_ctrl, (UCHAR) (i | G_INT_DISABLE));
-
- WR_HARPOON(port+hp_scsireset,0x00);
- WR_HARPOON(port+hp_portctrl_1,HOST_MODE8);
-
- WR_HARPOON(port+hp_scsireset,(DMA_RESET | HPSCSI_RESET | PROG_RESET | \
- FIFO_CLR));
-
- WR_HARPOON(port+hp_scsireset,SCSI_INI);
-
- WR_HARPOON(port+hp_clkctrl_0,CLKCTRL_DEFAULT);
-
- WR_HARPOON(port+hp_scsisig,0x00); /* Clear any signals we might */
- WR_HARPOON(port+hp_scsictrl_0,ENA_SCAM_SEL);
-
- WRW_HARPOON((port+hp_intstat), CLR_ALL_INT);
-
-#if defined(SCAM_LEV_2)
- default_intena = RESET | RSEL | PROG_HLT | TIMEOUT |
- BUS_FREE | XFER_CNT_0 | AUTO_INT;
-
- if ((ScamFlg & SCAM_ENABLED) && (ScamFlg & SCAM_LEVEL2))
- default_intena |= SCAM_SEL;
-
-#else
- default_intena = RESET | RSEL | PROG_HLT | TIMEOUT |
- BUS_FREE | XFER_CNT_0 | AUTO_INT;
-#endif
- WRW_HARPOON((port+hp_intena), default_intena);
-
- WR_HARPOON(port+hp_seltimeout,TO_290ms);
-
- /* Turn on SCSI_MODE8 for narrow cards to fix the
- strapping issue with the DUAL CHANNEL card */
- if (RD_HARPOON(port+hp_page_ctrl) & NARROW_SCSI_CARD)
- WR_HARPOON(port+hp_addstat,SCSI_MODE8);
-
-#if defined(NO_BIOS_OPTION)
-
- WR_HARPOON(port+hp_synctarg_0,NARROW_SCSI);
- WR_HARPOON(port+hp_synctarg_1,NARROW_SCSI);
- WR_HARPOON(port+hp_synctarg_2,NARROW_SCSI);
- WR_HARPOON(port+hp_synctarg_3,NARROW_SCSI);
- WR_HARPOON(port+hp_synctarg_4,NARROW_SCSI);
- WR_HARPOON(port+hp_synctarg_5,NARROW_SCSI);
- WR_HARPOON(port+hp_synctarg_6,NARROW_SCSI);
- WR_HARPOON(port+hp_synctarg_7,NARROW_SCSI);
- WR_HARPOON(port+hp_synctarg_8,NARROW_SCSI);
- WR_HARPOON(port+hp_synctarg_9,NARROW_SCSI);
- WR_HARPOON(port+hp_synctarg_10,NARROW_SCSI);
- WR_HARPOON(port+hp_synctarg_11,NARROW_SCSI);
- WR_HARPOON(port+hp_synctarg_12,NARROW_SCSI);
- WR_HARPOON(port+hp_synctarg_13,NARROW_SCSI);
- WR_HARPOON(port+hp_synctarg_14,NARROW_SCSI);
- WR_HARPOON(port+hp_synctarg_15,NARROW_SCSI);
-
-#endif
- WR_HARPOON(port+hp_page_ctrl, i);
-
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: BusMasterInit
- *
- * Description: Initialize the BusMaster for normal operations.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void BusMasterInit(USHORT p_port)
-#else
-void BusMasterInit(ULONG p_port)
-#endif
-{
-
-
- WR_HARPOON(p_port+hp_sys_ctrl, DRVR_RST);
- WR_HARPOON(p_port+hp_sys_ctrl, 0x00);
-
- WR_HARPOON(p_port+hp_host_blk_cnt, XFER_BLK64);
-
-
- WR_HARPOON(p_port+hp_bm_ctrl, (BMCTRL_DEFAULT));
-
- WR_HARPOON(p_port+hp_ee_ctrl, (SCSI_TERM_ENA_H));
-
-
-#if defined(NT)
-
- WR_HARPOON(p_port+hp_pci_cmd_cfg, (RD_HARPOON(p_port+hp_pci_cmd_cfg)
- & ~MEM_SPACE_ENA));
-
-#endif
-
- RD_HARPOON(p_port+hp_int_status); /*Clear interrupts. */
- WR_HARPOON(p_port+hp_int_mask, (INT_CMD_COMPL | SCSI_INTERRUPT));
- WR_HARPOON(p_port+hp_page_ctrl, (RD_HARPOON(p_port+hp_page_ctrl) &
- ~SCATTER_EN));
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: DiagXbow
- *
- * Description: Test Xbow integrity. Non-zero return indicates an error.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-int DiagXbow(USHORT port)
-#else
-int DiagXbow(ULONG port)
-#endif
-{
- unsigned char fifo_cnt,loop_cnt;
-
- unsigned char fifodata[5];
- fifodata[0] = 0x00;
- fifodata[1] = 0xFF;
- fifodata[2] = 0x55;
- fifodata[3] = 0xAA;
- fifodata[4] = 0x00;
-
-
- WRW_HARPOON((port+hp_intstat), CLR_ALL_INT);
- WRW_HARPOON((port+hp_intena), 0x0000);
-
- WR_HARPOON(port+hp_seltimeout,TO_5ms);
-
- WR_HARPOON(port+hp_portctrl_0,START_TO);
-
-
- for(fifodata[4] = 0x01; fifodata[4] != (UCHAR) 0; fifodata[4] = fifodata[4]
<< 1) {
-
- WR_HARPOON(port+hp_selfid_0,fifodata[4]);
- WR_HARPOON(port+hp_selfid_1,fifodata[4]);
-
- if ((RD_HARPOON(port+hp_selfid_0) != fifodata[4]) ||
- (RD_HARPOON(port+hp_selfid_1) != fifodata[4]))
- return(1);
- }
-
-
- for(loop_cnt = 0; loop_cnt < 4; loop_cnt++) {
-
- WR_HARPOON(port+hp_portctrl_0,(HOST_PORT | HOST_WRT | START_TO));
-
-
- for (fifo_cnt = 0; fifo_cnt < FIFO_LEN; fifo_cnt++) {
-
- WR_HARPOON(port+hp_fifodata_0, fifodata[loop_cnt]);
- }
-
-
- if (!(RD_HARPOON(port+hp_xferstat) & FIFO_FULL))
- return(1);
-
-
- WR_HARPOON(port+hp_portctrl_0,(HOST_PORT | START_TO));
-
- for (fifo_cnt = 0; fifo_cnt < FIFO_LEN; fifo_cnt++) {
-
- if (RD_HARPOON(port+hp_fifodata_0) != fifodata[loop_cnt])
- return(1);
- }
-
-
- if (!(RD_HARPOON(port+hp_xferstat) & FIFO_EMPTY))
- return(1);
- }
-
-
- while(!(RDW_HARPOON((port+hp_intstat)) & TIMEOUT)) {}
-
-
- WR_HARPOON(port+hp_seltimeout,TO_290ms);
-
- WRW_HARPOON((port+hp_intstat), CLR_ALL_INT);
-
- WRW_HARPOON((port+hp_intena), default_intena);
-
- return(0);
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: DiagBusMaster
- *
- * Description: Test BusMaster integrity. Non-zero return indicates an
- * error.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-int DiagBusMaster(USHORT port)
-#else
-int DiagBusMaster(ULONG port)
-#endif
-{
- UCHAR testdata;
-
- for(testdata = (UCHAR) 1; testdata != (UCHAR)0; testdata = testdata << 1) {
-
- WR_HARPOON(port+hp_xfer_cnt_lo,testdata);
- WR_HARPOON(port+hp_xfer_cnt_mi,testdata);
- WR_HARPOON(port+hp_xfer_cnt_hi,testdata);
- WR_HARPOON(port+hp_host_addr_lo,testdata);
- WR_HARPOON(port+hp_host_addr_lmi,testdata);
- WR_HARPOON(port+hp_host_addr_hmi,testdata);
- WR_HARPOON(port+hp_host_addr_hi,testdata);
-
- if ((RD_HARPOON(port+hp_xfer_cnt_lo) != testdata) ||
- (RD_HARPOON(port+hp_xfer_cnt_mi) != testdata) ||
- (RD_HARPOON(port+hp_xfer_cnt_hi) != testdata) ||
- (RD_HARPOON(port+hp_host_addr_lo) != testdata) ||
- (RD_HARPOON(port+hp_host_addr_lmi) != testdata) ||
- (RD_HARPOON(port+hp_host_addr_hmi) != testdata) ||
- (RD_HARPOON(port+hp_host_addr_hi) != testdata))
-
- return(1);
- }
- RD_HARPOON(port+hp_int_status); /*Clear interrupts. */
- return(0);
-}
-
-
-
-/*---------------------------------------------------------------------
- *
- * Function: DiagEEPROM
- *
- * Description: Verfiy checksum and 'Key' and initialize the EEPROM if
- * neccessary.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void DiagEEPROM(USHORT p_port)
-#else
-void DiagEEPROM(ULONG p_port)
-#endif
-
-{
- USHORT index,temp,max_wd_cnt;
-
- if (RD_HARPOON(p_port+hp_page_ctrl) & NARROW_SCSI_CARD)
- max_wd_cnt = EEPROM_WD_CNT;
- else
- max_wd_cnt = EEPROM_WD_CNT * 2;
-
- temp = utilEERead(p_port, FW_SIGNATURE/2);
-
- if (temp == 0x4641) {
-
- for (index = 2; index < max_wd_cnt; index++) {
-
- temp += utilEERead(p_port, index);
-
- }
-
- if (temp == utilEERead(p_port, EEPROM_CHECK_SUM/2)) {
-
- return; /*EEPROM is Okay so return now! */
- }
- }
-
-
- utilEEWriteOnOff(p_port,(UCHAR)1);
-
- for (index = 0; index < max_wd_cnt; index++) {
-
- utilEEWrite(p_port, 0x0000, index);
- }
-
- temp = 0;
-
- utilEEWrite(p_port, 0x4641, FW_SIGNATURE/2);
- temp += 0x4641;
- utilEEWrite(p_port, 0x3920, MODEL_NUMB_0/2);
- temp += 0x3920;
- utilEEWrite(p_port, 0x3033, MODEL_NUMB_2/2);
- temp += 0x3033;
- utilEEWrite(p_port, 0x2020, MODEL_NUMB_4/2);
- temp += 0x2020;
- utilEEWrite(p_port, 0x70D3, SYSTEM_CONFIG/2);
- temp += 0x70D3;
- utilEEWrite(p_port, 0x0010, BIOS_CONFIG/2);
- temp += 0x0010;
- utilEEWrite(p_port, 0x0003, SCAM_CONFIG/2);
- temp += 0x0003;
- utilEEWrite(p_port, 0x0007, ADAPTER_SCSI_ID/2);
- temp += 0x0007;
-
- utilEEWrite(p_port, 0x0000, IGNORE_B_SCAN/2);
- temp += 0x0000;
- utilEEWrite(p_port, 0x0000, SEND_START_ENA/2);
- temp += 0x0000;
- utilEEWrite(p_port, 0x0000, DEVICE_ENABLE/2);
- temp += 0x0000;
-
- utilEEWrite(p_port, 0x4242, SYNC_RATE_TBL01/2);
- temp += 0x4242;
- utilEEWrite(p_port, 0x4242, SYNC_RATE_TBL23/2);
- temp += 0x4242;
- utilEEWrite(p_port, 0x4242, SYNC_RATE_TBL45/2);
- temp += 0x4242;
- utilEEWrite(p_port, 0x4242, SYNC_RATE_TBL67/2);
- temp += 0x4242;
- utilEEWrite(p_port, 0x4242, SYNC_RATE_TBL89/2);
- temp += 0x4242;
- utilEEWrite(p_port, 0x4242, SYNC_RATE_TBLab/2);
- temp += 0x4242;
- utilEEWrite(p_port, 0x4242, SYNC_RATE_TBLcd/2);
- temp += 0x4242;
- utilEEWrite(p_port, 0x4242, SYNC_RATE_TBLef/2);
- temp += 0x4242;
-
-
- utilEEWrite(p_port, 0x6C46, 64/2); /*PRODUCT ID */
- temp += 0x6C46;
- utilEEWrite(p_port, 0x7361, 66/2); /* FlashPoint LT */
- temp += 0x7361;
- utilEEWrite(p_port, 0x5068, 68/2);
- temp += 0x5068;
- utilEEWrite(p_port, 0x696F, 70/2);
- temp += 0x696F;
- utilEEWrite(p_port, 0x746E, 72/2);
- temp += 0x746E;
- utilEEWrite(p_port, 0x4C20, 74/2);
- temp += 0x4C20;
- utilEEWrite(p_port, 0x2054, 76/2);
- temp += 0x2054;
- utilEEWrite(p_port, 0x2020, 78/2);
- temp += 0x2020;
-
- index = ((EE_SCAMBASE/2)+(7*16));
- utilEEWrite(p_port, (0x0700+TYPE_CODE0), index);
- temp += (0x0700+TYPE_CODE0);
- index++;
- utilEEWrite(p_port, 0x5542, index); /*Vendor ID code */
- temp += 0x5542; /* BUSLOGIC */
- index++;
- utilEEWrite(p_port, 0x4C53, index);
- temp += 0x4C53;
- index++;
- utilEEWrite(p_port, 0x474F, index);
- temp += 0x474F;
- index++;
- utilEEWrite(p_port, 0x4349, index);
- temp += 0x4349;
- index++;
- utilEEWrite(p_port, 0x5442, index); /*Vendor unique code */
- temp += 0x5442; /* BT- 930 */
- index++;
- utilEEWrite(p_port, 0x202D, index);
- temp += 0x202D;
- index++;
- utilEEWrite(p_port, 0x3339, index);
- temp += 0x3339;
- index++; /*Serial # */
- utilEEWrite(p_port, 0x2030, index); /* 01234567 */
- temp += 0x2030;
- index++;
- utilEEWrite(p_port, 0x5453, index);
- temp += 0x5453;
- index++;
- utilEEWrite(p_port, 0x5645, index);
- temp += 0x5645;
- index++;
- utilEEWrite(p_port, 0x2045, index);
- temp += 0x2045;
- index++;
- utilEEWrite(p_port, 0x202F, index);
- temp += 0x202F;
- index++;
- utilEEWrite(p_port, 0x4F4A, index);
- temp += 0x4F4A;
- index++;
- utilEEWrite(p_port, 0x204E, index);
- temp += 0x204E;
- index++;
- utilEEWrite(p_port, 0x3539, index);
- temp += 0x3539;
-
-
-
- utilEEWrite(p_port, temp, EEPROM_CHECK_SUM/2);
-
- utilEEWriteOnOff(p_port,(UCHAR)0);
-
-}
-
-
-/*----------------------------------------------------------------------
- *
- *
- * Copyright 1995-1996 by Mylex Corporation. All Rights Reserved
- *
- * This file is available under both the GNU General Public License
- * and a BSD-style copyright; see LICENSE.FlashPoint for details.
- *
- * $Workfile: utility.c $
- *
- * Description: Utility functions relating to queueing and EEPROM
- * manipulation and any other garbage functions.
- *
- * $Date: 1999/04/26 05:53:56 $
- *
- * $Revision: 1.1 $
- *
- *----------------------------------------------------------------------*/
-/*#include <globals.h>*/
-
-#if (FW_TYPE==_UCB_MGR_)
- /*#include <budi.h>*/
-#endif
-
-/*#include <sccbmgr.h>*/
-/*#include <blx30.h>*/
-/*#include <target.h>*/
-/*#include <scsi2.h>*/
-/*#include <harpoon.h>*/
-
-
-/*
-extern SCCBCARD BL_Card[MAX_CARDS];
-extern SCCBMGR_TAR_INFO sccbMgrTbl[MAX_CARDS][MAX_SCSI_TAR];
-extern unsigned int SccbGlobalFlags;
-*/
-
-/*---------------------------------------------------------------------
- *
- * Function: Queue Search Select
- *
- * Description: Try to find a new command to execute.
- *
- *---------------------------------------------------------------------*/
-
-void queueSearchSelect(PSCCBcard pCurrCard, UCHAR p_card)
-{
- UCHAR scan_ptr, lun;
- PSCCBMgr_tar_info currTar_Info;
- PSCCB pOldSccb;
-
- scan_ptr = pCurrCard->scanIndex;
- do
- {
- currTar_Info = &sccbMgrTbl[p_card][scan_ptr];
- if((pCurrCard->globalFlags & F_CONLUN_IO) &&
- ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) !=
TAG_Q_TRYING))
- {
- if (currTar_Info->TarSelQ_Cnt != 0)
- {
-
- scan_ptr++;
- if (scan_ptr == MAX_SCSI_TAR)
- scan_ptr = 0;
-
- for(lun=0; lun < MAX_LUN; lun++)
- {
- if(currTar_Info->TarLUNBusy[lun] ==
FALSE)
- {
-
- pCurrCard->currentSCCB =
currTar_Info->TarSelQ_Head;
- pOldSccb = NULL;
-
- while((pCurrCard->currentSCCB
!= NULL) &&
- (lun !=
pCurrCard->currentSCCB->Lun))
- {
- pOldSccb =
pCurrCard->currentSCCB;
- pCurrCard->currentSCCB
= (PSCCB)(pCurrCard->currentSCCB)->
-
Sccb_forwardlink;
- }
- if(pCurrCard->currentSCCB ==
NULL)
- continue;
- if(pOldSccb != NULL)
- {
-
pOldSccb->Sccb_forwardlink = (PSCCB)(pCurrCard->currentSCCB)->
-
Sccb_forwardlink;
- pOldSccb->Sccb_backlink
= (PSCCB)(pCurrCard->currentSCCB)->
-
Sccb_backlink;
-
currTar_Info->TarSelQ_Cnt--;
- }
- else
- {
-
currTar_Info->TarSelQ_Head = (PSCCB)(pCurrCard->currentSCCB)->Sccb_forwardlink;
-
- if
(currTar_Info->TarSelQ_Head == NULL)
- {
-
currTar_Info->TarSelQ_Tail = NULL;
-
currTar_Info->TarSelQ_Cnt = 0;
- }
- else
- {
-
currTar_Info->TarSelQ_Cnt--;
-
currTar_Info->TarSelQ_Head->Sccb_backlink = (PSCCB)NULL;
- }
- }
- pCurrCard->scanIndex = scan_ptr;
-
- pCurrCard->globalFlags |=
F_NEW_SCCB_CMD;
-
- break;
- }
- }
- }
-
- else
- {
- scan_ptr++;
- if (scan_ptr == MAX_SCSI_TAR) {
- scan_ptr = 0;
- }
- }
-
- }
- else
- {
- if ((currTar_Info->TarSelQ_Cnt != 0) &&
- (currTar_Info->TarLUNBusy[0] == FALSE))
- {
-
- pCurrCard->currentSCCB =
currTar_Info->TarSelQ_Head;
-
- currTar_Info->TarSelQ_Head =
(PSCCB)(pCurrCard->currentSCCB)->Sccb_forwardlink;
-
- if (currTar_Info->TarSelQ_Head == NULL)
- {
- currTar_Info->TarSelQ_Tail = NULL;
- currTar_Info->TarSelQ_Cnt = 0;
- }
- else
- {
- currTar_Info->TarSelQ_Cnt--;
-
currTar_Info->TarSelQ_Head->Sccb_backlink = (PSCCB)NULL;
- }
-
- scan_ptr++;
- if (scan_ptr == MAX_SCSI_TAR)
- scan_ptr = 0;
-
- pCurrCard->scanIndex = scan_ptr;
-
- pCurrCard->globalFlags |= F_NEW_SCCB_CMD;
-
- break;
- }
-
- else
- {
- scan_ptr++;
- if (scan_ptr == MAX_SCSI_TAR)
- {
- scan_ptr = 0;
- }
- }
- }
- } while (scan_ptr != pCurrCard->scanIndex);
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Queue Select Fail
- *
- * Description: Add the current SCCB to the head of the Queue.
- *
- *---------------------------------------------------------------------*/
-
-void queueSelectFail(PSCCBcard pCurrCard, UCHAR p_card)
-{
- UCHAR thisTarg;
- PSCCBMgr_tar_info currTar_Info;
-
- if (pCurrCard->currentSCCB != NULL)
- {
- thisTarg = (UCHAR)(((PSCCB)(pCurrCard->currentSCCB))->TargID);
- currTar_Info = &sccbMgrTbl[p_card][thisTarg];
-
- pCurrCard->currentSCCB->Sccb_backlink = (PSCCB)NULL;
-
- pCurrCard->currentSCCB->Sccb_forwardlink = currTar_Info->TarSelQ_Head;
-
- if (currTar_Info->TarSelQ_Cnt == 0)
- {
- currTar_Info->TarSelQ_Tail = pCurrCard->currentSCCB;
- }
-
- else
- {
- currTar_Info->TarSelQ_Head->Sccb_backlink =
pCurrCard->currentSCCB;
- }
-
-
- currTar_Info->TarSelQ_Head = pCurrCard->currentSCCB;
-
- pCurrCard->currentSCCB = NULL;
- currTar_Info->TarSelQ_Cnt++;
- }
-}
-/*---------------------------------------------------------------------
- *
- * Function: Queue Command Complete
- *
- * Description: Call the callback function with the current SCCB.
- *
- *---------------------------------------------------------------------*/
-
-void queueCmdComplete(PSCCBcard pCurrCard, PSCCB p_sccb, UCHAR p_card)
-{
-
-#if (FW_TYPE==_UCB_MGR_)
-
- u08bits SCSIcmd;
- CALL_BK_FN callback;
- PSCCBMgr_tar_info currTar_Info;
-
- PUCB p_ucb;
- p_ucb=p_sccb->Sccb_ucb_ptr;
-
- SCSIcmd = p_sccb->Cdb[0];
-
-
- if (!(p_sccb->Sccb_XferState & F_ALL_XFERRED))
- {
-
- if ((p_ucb->UCB_opcode & OPC_CHK_UNDER_OVER_RUN) &&
- (p_sccb->HostStatus == SCCB_COMPLETE) &&
- (p_sccb->TargetStatus != SSCHECK))
-
- if ((SCSIcmd == SCSI_READ) ||
- (SCSIcmd == SCSI_WRITE) ||
- (SCSIcmd == SCSI_READ_EXTENDED) ||
- (SCSIcmd == SCSI_WRITE_EXTENDED) ||
- (SCSIcmd == SCSI_WRITE_AND_VERIFY) ||
- (SCSIcmd == SCSI_START_STOP_UNIT) ||
- (pCurrCard->globalFlags & F_NO_FILTER)
- )
- p_sccb->HostStatus = SCCB_DATA_UNDER_RUN;
- }
-
- p_ucb->UCB_status=SCCB_SUCCESS;
-
- if ((p_ucb->UCB_hbastat=p_sccb->HostStatus) ||
(p_ucb->UCB_scsistat=p_sccb->TargetStatus))
- {
- p_ucb->UCB_status=SCCB_ERROR;
- }
-
- if ((p_sccb->OperationCode == RESIDUAL_SG_COMMAND) ||
- (p_sccb->OperationCode == RESIDUAL_COMMAND))
- {
-
- utilUpdateResidual(p_sccb);
-
- p_ucb->UCB_datalen=p_sccb->DataLength;
- }
-
- pCurrCard->cmdCounter--;
- if (!pCurrCard->cmdCounter)
- {
-
- if (pCurrCard->globalFlags & F_GREEN_PC)
- {
- WR_HARPOON(pCurrCard->ioPort+hp_clkctrl_0,(PWR_DWN |
CLKCTRL_DEFAULT));
- WR_HARPOON(pCurrCard->ioPort+hp_sys_ctrl, STOP_CLK);
- }
-
- WR_HARPOON(pCurrCard->ioPort+hp_semaphore,
- (RD_HARPOON(pCurrCard->ioPort+hp_semaphore) & ~SCCB_MGR_ACTIVE));
- }
-
- if(pCurrCard->discQCount != 0)
- {
- currTar_Info = &sccbMgrTbl[p_card][p_sccb->TargID];
- if(((pCurrCard->globalFlags & F_CONLUN_IO) &&
- ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) !=
TAG_Q_TRYING)))
- {
- pCurrCard->discQCount--;
-
pCurrCard->discQ_Tbl[currTar_Info->LunDiscQ_Idx[p_sccb->Lun]] = NULL;
- }
- else
- {
- if(p_sccb->Sccb_tag)
- {
- pCurrCard->discQCount--;
- pCurrCard->discQ_Tbl[p_sccb->Sccb_tag] = NULL;
- }else
- {
- pCurrCard->discQCount--;
-
pCurrCard->discQ_Tbl[currTar_Info->LunDiscQ_Idx[0]] = NULL;
- }
- }
-
- }
- callback = (CALL_BK_FN)p_ucb->UCB_callback;
- callback(p_ucb);
- pCurrCard->globalFlags |= F_NEW_SCCB_CMD;
- pCurrCard->currentSCCB = NULL;
-}
-
-
-
-
-#else
-
- UCHAR i, SCSIcmd;
- CALL_BK_FN callback;
- PSCCBMgr_tar_info currTar_Info;
-
- SCSIcmd = p_sccb->Cdb[0];
-
-
- if (!(p_sccb->Sccb_XferState & F_ALL_XFERRED)) {
-
- if ((p_sccb->ControlByte & (SCCB_DATA_XFER_OUT | SCCB_DATA_XFER_IN))
&&
- (p_sccb->HostStatus == SCCB_COMPLETE)
&&
- (p_sccb->TargetStatus != SSCHECK))
-
- if ((SCSIcmd == SCSI_READ) ||
- (SCSIcmd == SCSI_WRITE) ||
- (SCSIcmd == SCSI_READ_EXTENDED) ||
- (SCSIcmd == SCSI_WRITE_EXTENDED) ||
- (SCSIcmd == SCSI_WRITE_AND_VERIFY) ||
- (SCSIcmd == SCSI_START_STOP_UNIT) ||
- (pCurrCard->globalFlags & F_NO_FILTER)
- )
- p_sccb->HostStatus = SCCB_DATA_UNDER_RUN;
- }
-
-
- if(p_sccb->SccbStatus == SCCB_IN_PROCESS)
- {
- if (p_sccb->HostStatus || p_sccb->TargetStatus)
- p_sccb->SccbStatus = SCCB_ERROR;
- else
- p_sccb->SccbStatus = SCCB_SUCCESS;
- }
-
- if (p_sccb->Sccb_XferState & F_AUTO_SENSE) {
-
- p_sccb->CdbLength = p_sccb->Save_CdbLen;
- for (i=0; i < 6; i++) {
- p_sccb->Cdb[i] = p_sccb->Save_Cdb[i];
- }
- }
-
- if ((p_sccb->OperationCode == RESIDUAL_SG_COMMAND) ||
- (p_sccb->OperationCode == RESIDUAL_COMMAND)) {
-
- utilUpdateResidual(p_sccb);
- }
-
- pCurrCard->cmdCounter--;
- if (!pCurrCard->cmdCounter) {
-
- if (pCurrCard->globalFlags & F_GREEN_PC) {
- WR_HARPOON(pCurrCard->ioPort+hp_clkctrl_0,(PWR_DWN |
CLKCTRL_DEFAULT));
- WR_HARPOON(pCurrCard->ioPort+hp_sys_ctrl, STOP_CLK);
- }
-
- WR_HARPOON(pCurrCard->ioPort+hp_semaphore,
- (RD_HARPOON(pCurrCard->ioPort+hp_semaphore) & ~SCCB_MGR_ACTIVE));
-
- }
-
- if(pCurrCard->discQCount != 0)
- {
- currTar_Info = &sccbMgrTbl[p_card][p_sccb->TargID];
- if(((pCurrCard->globalFlags & F_CONLUN_IO) &&
- ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) !=
TAG_Q_TRYING)))
- {
- pCurrCard->discQCount--;
-
pCurrCard->discQ_Tbl[currTar_Info->LunDiscQ_Idx[p_sccb->Lun]] = NULL;
- }
- else
- {
- if(p_sccb->Sccb_tag)
- {
- pCurrCard->discQCount--;
- pCurrCard->discQ_Tbl[p_sccb->Sccb_tag] = NULL;
- }else
- {
- pCurrCard->discQCount--;
-
pCurrCard->discQ_Tbl[currTar_Info->LunDiscQ_Idx[0]] = NULL;
- }
- }
-
- }
-
- callback = (CALL_BK_FN)p_sccb->SccbCallback;
- callback(p_sccb);
- pCurrCard->globalFlags |= F_NEW_SCCB_CMD;
- pCurrCard->currentSCCB = NULL;
-}
-#endif /* ( if FW_TYPE==...) */
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Queue Disconnect
- *
- * Description: Add SCCB to our disconnect array.
- *
- *---------------------------------------------------------------------*/
-void queueDisconnect(PSCCB p_sccb, UCHAR p_card)
-{
- PSCCBMgr_tar_info currTar_Info;
-
- currTar_Info = &sccbMgrTbl[p_card][p_sccb->TargID];
-
- if(((BL_Card[p_card].globalFlags & F_CONLUN_IO) &&
- ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) != TAG_Q_TRYING)))
- {
-
BL_Card[p_card].discQ_Tbl[currTar_Info->LunDiscQ_Idx[p_sccb->Lun]] = p_sccb;
- }
- else
- {
- if (p_sccb->Sccb_tag)
- {
- BL_Card[p_card].discQ_Tbl[p_sccb->Sccb_tag] = p_sccb;
- sccbMgrTbl[p_card][p_sccb->TargID].TarLUNBusy[0] =
FALSE;
- sccbMgrTbl[p_card][p_sccb->TargID].TarTagQ_Cnt++;
- }else
- {
-
BL_Card[p_card].discQ_Tbl[currTar_Info->LunDiscQ_Idx[0]] = p_sccb;
- }
- }
- BL_Card[p_card].currentSCCB = NULL;
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Queue Flush SCCB
- *
- * Description: Flush all SCCB's back to the host driver for this target.
- *
- *---------------------------------------------------------------------*/
-
-void queueFlushSccb(UCHAR p_card, UCHAR error_code)
-{
- UCHAR qtag,thisTarg;
- PSCCB currSCCB;
- PSCCBMgr_tar_info currTar_Info;
-
- currSCCB = BL_Card[p_card].currentSCCB;
- if(currSCCB != NULL)
- {
- thisTarg = (UCHAR)currSCCB->TargID;
- currTar_Info = &sccbMgrTbl[p_card][thisTarg];
-
- for (qtag=0; qtag<QUEUE_DEPTH; qtag++) {
-
- if (BL_Card[p_card].discQ_Tbl[qtag] &&
-
(BL_Card[p_card].discQ_Tbl[qtag]->TargID == thisTarg))
- {
-
- BL_Card[p_card].discQ_Tbl[qtag]->HostStatus =
(UCHAR)error_code;
-
-
queueCmdComplete(&BL_Card[p_card],BL_Card[p_card].discQ_Tbl[qtag], p_card);
-
- BL_Card[p_card].discQ_Tbl[qtag] = NULL;
- currTar_Info->TarTagQ_Cnt--;
-
- }
- }
- }
-
-}
-
-/*---------------------------------------------------------------------
- *
- * Function: Queue Flush Target SCCB
- *
- * Description: Flush all SCCB's back to the host driver for this target.
- *
- *---------------------------------------------------------------------*/
-
-void queueFlushTargSccb(UCHAR p_card, UCHAR thisTarg, UCHAR error_code)
-{
- UCHAR qtag;
- PSCCBMgr_tar_info currTar_Info;
-
- currTar_Info = &sccbMgrTbl[p_card][thisTarg];
-
- for (qtag=0; qtag<QUEUE_DEPTH; qtag++) {
-
- if (BL_Card[p_card].discQ_Tbl[qtag] &&
- (BL_Card[p_card].discQ_Tbl[qtag]->TargID ==
thisTarg))
- {
-
- BL_Card[p_card].discQ_Tbl[qtag]->HostStatus =
(UCHAR)error_code;
-
-
queueCmdComplete(&BL_Card[p_card],BL_Card[p_card].discQ_Tbl[qtag], p_card);
-
- BL_Card[p_card].discQ_Tbl[qtag] = NULL;
- currTar_Info->TarTagQ_Cnt--;
-
- }
- }
-
-}
-
-
-
-
-
-void queueAddSccb(PSCCB p_SCCB, UCHAR p_card)
-{
- PSCCBMgr_tar_info currTar_Info;
- currTar_Info = &sccbMgrTbl[p_card][p_SCCB->TargID];
-
- p_SCCB->Sccb_forwardlink = NULL;
-
- p_SCCB->Sccb_backlink = currTar_Info->TarSelQ_Tail;
-
- if (currTar_Info->TarSelQ_Cnt == 0) {
-
- currTar_Info->TarSelQ_Head = p_SCCB;
- }
-
- else {
-
- currTar_Info->TarSelQ_Tail->Sccb_forwardlink = p_SCCB;
- }
-
-
- currTar_Info->TarSelQ_Tail = p_SCCB;
- currTar_Info->TarSelQ_Cnt++;
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Queue Find SCCB
- *
- * Description: Search the target select Queue for this SCCB, and
- * remove it if found.
- *
- *---------------------------------------------------------------------*/
-
-UCHAR queueFindSccb(PSCCB p_SCCB, UCHAR p_card)
-{
- PSCCB q_ptr;
- PSCCBMgr_tar_info currTar_Info;
-
- currTar_Info = &sccbMgrTbl[p_card][p_SCCB->TargID];
-
- q_ptr = currTar_Info->TarSelQ_Head;
-
- while(q_ptr != NULL) {
-
- if (q_ptr == p_SCCB) {
-
-
- if (currTar_Info->TarSelQ_Head == q_ptr) {
-
- currTar_Info->TarSelQ_Head = q_ptr->Sccb_forwardlink;
- }
-
- if (currTar_Info->TarSelQ_Tail == q_ptr) {
-
- currTar_Info->TarSelQ_Tail = q_ptr->Sccb_backlink;
- }
-
- if (q_ptr->Sccb_forwardlink != NULL) {
- q_ptr->Sccb_forwardlink->Sccb_backlink =
q_ptr->Sccb_backlink;
- }
-
- if (q_ptr->Sccb_backlink != NULL) {
- q_ptr->Sccb_backlink->Sccb_forwardlink =
q_ptr->Sccb_forwardlink;
- }
-
- currTar_Info->TarSelQ_Cnt--;
-
- return(TRUE);
- }
-
- else {
- q_ptr = q_ptr->Sccb_forwardlink;
- }
- }
-
-
- return(FALSE);
-
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Utility Update Residual Count
- *
- * Description: Update the XferCnt to the remaining byte count.
- * If we transferred all the data then just write zero.
- * If Non-SG transfer then report Total Cnt - Actual Transfer
- * Cnt. For SG transfers add the count fields of all
- * remaining SG elements, as well as any partial remaining
- * element.
- *
- *---------------------------------------------------------------------*/
-
-void utilUpdateResidual(PSCCB p_SCCB)
-{
- ULONG partial_cnt;
- UINT sg_index;
-#if defined(COMPILER_16_BIT) && !defined(DOS)
- ULONG far *sg_ptr;
-#else
- ULONG *sg_ptr;
-#endif
-
- if (p_SCCB->Sccb_XferState & F_ALL_XFERRED) {
-
- p_SCCB->DataLength = 0x0000;
- }
-
- else if (p_SCCB->Sccb_XferState & F_SG_XFER) {
-
- partial_cnt = 0x0000;
-
- sg_index = p_SCCB->Sccb_sgseg;
-
-#if defined(COMPILER_16_BIT) && !defined(DOS)
- sg_ptr = (ULONG far *)p_SCCB->DataPointer;
-#else
- sg_ptr = (ULONG *)p_SCCB->DataPointer;
-#endif
-
- if (p_SCCB->Sccb_SGoffset) {
-
- partial_cnt = p_SCCB->Sccb_SGoffset;
- sg_index++;
- }
-
- while ( ((ULONG)sg_index * (ULONG)SG_ELEMENT_SIZE) <
- p_SCCB->DataLength ) {
-
- partial_cnt += *(sg_ptr+(sg_index * 2));
- sg_index++;
- }
-
- p_SCCB->DataLength = partial_cnt;
- }
-
- else {
-
- p_SCCB->DataLength -= p_SCCB->Sccb_ATC;
- }
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Wait 1 Second
- *
- * Description: Wait for 1 second.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void Wait1Second(USHORT p_port)
-#else
-void Wait1Second(ULONG p_port)
-#endif
-{
- UCHAR i;
-
- for(i=0; i < 4; i++) {
-
- Wait(p_port, TO_250ms);
-
- if ((RD_HARPOON(p_port+hp_scsictrl_0) & SCSI_RST))
- break;
-
- if((RDW_HARPOON((p_port+hp_intstat)) & SCAM_SEL))
- break;
- }
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Wait
- *
- * Description: Wait the desired delay.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void Wait(USHORT p_port, UCHAR p_delay)
-#else
-void Wait(ULONG p_port, UCHAR p_delay)
-#endif
-{
- UCHAR old_timer;
- UCHAR green_flag;
-
- old_timer = RD_HARPOON(p_port+hp_seltimeout);
-
- green_flag=RD_HARPOON(p_port+hp_clkctrl_0);
- WR_HARPOON(p_port+hp_clkctrl_0, CLKCTRL_DEFAULT);
-
- WR_HARPOON(p_port+hp_seltimeout,p_delay);
- WRW_HARPOON((p_port+hp_intstat), TIMEOUT);
- WRW_HARPOON((p_port+hp_intena), (default_intena & ~TIMEOUT));
-
-
- WR_HARPOON(p_port+hp_portctrl_0,
- (RD_HARPOON(p_port+hp_portctrl_0) | START_TO));
-
- while (!(RDW_HARPOON((p_port+hp_intstat)) & TIMEOUT)) {
-
- if ((RD_HARPOON(p_port+hp_scsictrl_0) & SCSI_RST))
- break;
-
- if ((RDW_HARPOON((p_port+hp_intstat)) & SCAM_SEL))
- break;
- }
-
- WR_HARPOON(p_port+hp_portctrl_0,
- (RD_HARPOON(p_port+hp_portctrl_0) & ~START_TO));
-
- WRW_HARPOON((p_port+hp_intstat), TIMEOUT);
- WRW_HARPOON((p_port+hp_intena), default_intena);
-
- WR_HARPOON(p_port+hp_clkctrl_0,green_flag);
-
- WR_HARPOON(p_port+hp_seltimeout,old_timer);
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Enable/Disable Write to EEPROM
- *
- * Description: The EEPROM must first be enabled for writes
- * A total of 9 clocks are needed.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void utilEEWriteOnOff(USHORT p_port,UCHAR p_mode)
-#else
-void utilEEWriteOnOff(ULONG p_port,UCHAR p_mode)
-#endif
-{
- UCHAR ee_value;
-
- ee_value = (UCHAR)(RD_HARPOON(p_port+hp_ee_ctrl) & (EXT_ARB_ACK |
SCSI_TERM_ENA_H));
-
- if (p_mode)
-
- utilEESendCmdAddr(p_port, EWEN, EWEN_ADDR);
-
- else
-
-
- utilEESendCmdAddr(p_port, EWDS, EWDS_ADDR);
-
- WR_HARPOON(p_port+hp_ee_ctrl, (ee_value | SEE_MS)); /*Turn off CS */
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value); /*Turn off Master Select */
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Write EEPROM
- *
- * Description: Write a word to the EEPROM at the specified
- * address.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void utilEEWrite(USHORT p_port, USHORT ee_data, USHORT ee_addr)
-#else
-void utilEEWrite(ULONG p_port, USHORT ee_data, USHORT ee_addr)
-#endif
-{
-
- UCHAR ee_value;
- USHORT i;
-
- ee_value = (UCHAR)((RD_HARPOON(p_port+hp_ee_ctrl) & (EXT_ARB_ACK |
SCSI_TERM_ENA_H))|
- (SEE_MS | SEE_CS));
-
-
-
- utilEESendCmdAddr(p_port, EE_WRITE, ee_addr);
-
-
- ee_value |= (SEE_MS + SEE_CS);
-
- for(i = 0x8000; i != 0; i>>=1) {
-
- if (i & ee_data)
- ee_value |= SEE_DO;
- else
- ee_value &= ~SEE_DO;
-
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- ee_value |= SEE_CLK; /* Clock data! */
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- ee_value &= ~SEE_CLK;
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- }
- ee_value &= (EXT_ARB_ACK | SCSI_TERM_ENA_H);
- WR_HARPOON(p_port+hp_ee_ctrl, (ee_value | SEE_MS));
-
- Wait(p_port, TO_10ms);
-
- WR_HARPOON(p_port+hp_ee_ctrl, (ee_value | SEE_MS | SEE_CS)); /* Set CS to
EEPROM */
- WR_HARPOON(p_port+hp_ee_ctrl, (ee_value | SEE_MS)); /* Turn off CS */
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value); /* Turn off Master Select */
-}
-
-/*---------------------------------------------------------------------
- *
- * Function: Read EEPROM
- *
- * Description: Read a word from the EEPROM at the desired
- * address.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-USHORT utilEERead(USHORT p_port, USHORT ee_addr)
-#else
-USHORT utilEERead(ULONG p_port, USHORT ee_addr)
-#endif
-{
- USHORT i, ee_data1, ee_data2;
-
- i = 0;
- ee_data1 = utilEEReadOrg(p_port, ee_addr);
- do
- {
- ee_data2 = utilEEReadOrg(p_port, ee_addr);
-
- if(ee_data1 == ee_data2)
- return(ee_data1);
-
- ee_data1 = ee_data2;
- i++;
-
- }while(i < 4);
-
- return(ee_data1);
-}
-
-/*---------------------------------------------------------------------
- *
- * Function: Read EEPROM Original
- *
- * Description: Read a word from the EEPROM at the desired
- * address.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-USHORT utilEEReadOrg(USHORT p_port, USHORT ee_addr)
-#else
-USHORT utilEEReadOrg(ULONG p_port, USHORT ee_addr)
-#endif
-{
-
- UCHAR ee_value;
- USHORT i, ee_data;
-
- ee_value = (UCHAR)((RD_HARPOON(p_port+hp_ee_ctrl) & (EXT_ARB_ACK |
SCSI_TERM_ENA_H))|
- (SEE_MS | SEE_CS));
-
-
- utilEESendCmdAddr(p_port, EE_READ, ee_addr);
-
-
- ee_value |= (SEE_MS + SEE_CS);
- ee_data = 0;
-
- for(i = 1; i <= 16; i++) {
-
- ee_value |= SEE_CLK; /* Clock data! */
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- ee_value &= ~SEE_CLK;
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
-
- ee_data <<= 1;
-
- if (RD_HARPOON(p_port+hp_ee_ctrl) & SEE_DI)
- ee_data |= 1;
- }
-
- ee_value &= ~(SEE_MS + SEE_CS);
- WR_HARPOON(p_port+hp_ee_ctrl, (ee_value | SEE_MS)); /*Turn off CS */
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value); /*Turn off Master Select */
-
- return(ee_data);
-}
-
-
-/*---------------------------------------------------------------------
- *
- * Function: Send EE command and Address to the EEPROM
- *
- * Description: Transfers the correct command and sends the address
- * to the eeprom.
- *
- *---------------------------------------------------------------------*/
-
-#if defined(DOS)
-void utilEESendCmdAddr(USHORT p_port, UCHAR ee_cmd, USHORT ee_addr)
-#else
-void utilEESendCmdAddr(ULONG p_port, UCHAR ee_cmd, USHORT ee_addr)
-#endif
-{
- UCHAR ee_value;
- UCHAR narrow_flg;
-
- USHORT i;
-
-
- narrow_flg= (UCHAR)(RD_HARPOON(p_port+hp_page_ctrl) & NARROW_SCSI_CARD);
-
-
- ee_value = SEE_MS;
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
-
- ee_value |= SEE_CS; /* Set CS to EEPROM */
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
-
-
- for(i = 0x04; i != 0; i>>=1) {
-
- if (i & ee_cmd)
- ee_value |= SEE_DO;
- else
- ee_value &= ~SEE_DO;
-
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- ee_value |= SEE_CLK; /* Clock data! */
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- ee_value &= ~SEE_CLK;
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- }
-
-
- if (narrow_flg)
- i = 0x0080;
-
- else
- i = 0x0200;
-
-
- while (i != 0) {
-
- if (i & ee_addr)
- ee_value |= SEE_DO;
- else
- ee_value &= ~SEE_DO;
-
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- ee_value |= SEE_CLK; /* Clock data! */
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- ee_value &= ~SEE_CLK;
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
- WR_HARPOON(p_port+hp_ee_ctrl, ee_value);
-
- i >>= 1;
- }
-}
-
-USHORT CalcCrc16(UCHAR buffer[])
-{
- USHORT crc=0;
- int i,j;
- USHORT ch;
- for (i=0; i < ID_STRING_LENGTH; i++)
- {
- ch = (USHORT) buffer[i];
- for(j=0; j < 8; j++)
- {
- if ((crc ^ ch) & 1)
- crc = (crc >> 1) ^ CRCMASK;
- else
- crc >>= 1;
- ch >>= 1;
- }
- }
- return(crc);
-}
-
-UCHAR CalcLrc(UCHAR buffer[])
-{
- int i;
- UCHAR lrc;
- lrc = 0;
- for(i = 0; i < ID_STRING_LENGTH; i++)
- lrc ^= buffer[i];
- return(lrc);
-}
-
-
-
-/*
- The following inline definitions avoid type conflicts.
-*/
-
-static inline unsigned char
-FlashPoint__ProbeHostAdapter(FlashPoint_Info_T *FlashPointInfo)
-{
- return FlashPoint_ProbeHostAdapter((PSCCBMGR_INFO) FlashPointInfo);
-}
-
-
-static inline FlashPoint_CardHandle_T
-FlashPoint__HardwareResetHostAdapter(FlashPoint_Info_T *FlashPointInfo)
-{
- return FlashPoint_HardwareResetHostAdapter((PSCCBMGR_INFO) FlashPointInfo);
-}
-
-static inline void
-FlashPoint__ReleaseHostAdapter(FlashPoint_CardHandle_T CardHandle)
-{
- FlashPoint_ReleaseHostAdapter(CardHandle);
-}
-
-
-static inline void
-FlashPoint__StartCCB(FlashPoint_CardHandle_T CardHandle, BusLogic_CCB_T *CCB)
-{
- FlashPoint_StartCCB(CardHandle, (PSCCB) CCB);
-}
-
-
-static inline void
-FlashPoint__AbortCCB(FlashPoint_CardHandle_T CardHandle, BusLogic_CCB_T *CCB)
-{
- FlashPoint_AbortCCB(CardHandle, (PSCCB) CCB);
-}
-
-
-static inline boolean
-FlashPoint__InterruptPending(FlashPoint_CardHandle_T CardHandle)
-{
- return FlashPoint_InterruptPending(CardHandle);
-}
-
-
-static inline int
-FlashPoint__HandleInterrupt(FlashPoint_CardHandle_T CardHandle)
-{
- return FlashPoint_HandleInterrupt(CardHandle);
-}
-
-
-#define FlashPoint_ProbeHostAdapter FlashPoint__ProbeHostAdapter
-#define FlashPoint_HardwareResetHostAdapter
FlashPoint__HardwareResetHostAdapter
-#define FlashPoint_ReleaseHostAdapter FlashPoint__ReleaseHostAdapter
-#define FlashPoint_StartCCB FlashPoint__StartCCB
-#define FlashPoint_AbortCCB FlashPoint__AbortCCB
-#define FlashPoint_InterruptPending FlashPoint__InterruptPending
-#define FlashPoint_HandleInterrupt FlashPoint__HandleInterrupt
-
-
-/*
- FlashPoint_InquireTargetInfo returns the Synchronous Period, Synchronous
- Offset, and Wide Transfers Active information for TargetID on CardHandle.
-*/
-
-void FlashPoint_InquireTargetInfo(FlashPoint_CardHandle_T CardHandle,
- int TargetID,
- unsigned char *SynchronousPeriod,
- unsigned char *SynchronousOffset,
- unsigned char *WideTransfersActive)
-{
- SCCBMGR_TAR_INFO *TargetInfo =
- &sccbMgrTbl[((SCCBCARD *)CardHandle)->cardIndex][TargetID];
- if ((TargetInfo->TarSyncCtrl & SYNC_OFFSET) > 0)
- {
- *SynchronousPeriod = 5 * ((TargetInfo->TarSyncCtrl >> 5) + 1);
- *SynchronousOffset = TargetInfo->TarSyncCtrl & SYNC_OFFSET;
- }
- else
- {
- *SynchronousPeriod = 0;
- *SynchronousOffset = 0;
- }
- *WideTransfersActive = (TargetInfo->TarSyncCtrl & NARROW_SCSI ? 0 : 1);
-}
-
-
-#else /* CONFIG_SCSI_OMIT_FLASHPOINT */
-
-
-/*
- Define prototypes for the FlashPoint SCCB Manager Functions.
-*/
-
-extern unsigned char FlashPoint_ProbeHostAdapter(FlashPoint_Info_T *);
-extern FlashPoint_CardHandle_T
- FlashPoint_HardwareResetHostAdapter(FlashPoint_Info_T *);
-extern void FlashPoint_StartCCB(FlashPoint_CardHandle_T, BusLogic_CCB_T *);
-extern int FlashPoint_AbortCCB(FlashPoint_CardHandle_T, BusLogic_CCB_T *);
-extern boolean FlashPoint_InterruptPending(FlashPoint_CardHandle_T);
-extern int FlashPoint_HandleInterrupt(FlashPoint_CardHandle_T);
-extern void FlashPoint_ReleaseHostAdapter(FlashPoint_CardHandle_T);
-extern void FlashPoint_InquireTargetInfo(FlashPoint_CardHandle_T,
- int, unsigned char *,
- unsigned char *, unsigned char *);
-
-
-#endif /* CONFIG_SCSI_OMIT_FLASHPOINT */
diff --git a/linux/src/drivers/scsi/aic7xxx_proc.c
b/linux/src/drivers/scsi/aic7xxx_proc.c
deleted file mode 100644
index 87665d0..0000000
--- a/linux/src/drivers/scsi/aic7xxx_proc.c
+++ /dev/null
@@ -1,384 +0,0 @@
-/*+M*************************************************************************
- * Adaptec AIC7xxx device driver proc support for Linux.
- *
- * Copyright (c) 1995, 1996 Dean W. Gehnert
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; see the file COPYING. If not, write to
- * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * ----------------------------------------------------------------
- * o Modified from the EATA-DMA /proc support.
- * o Additional support for device block statistics provided by
- * Matthew Jacob.
- * o Correction of overflow by Heinz Mauelshagen
- * o Adittional corrections by Doug Ledford
- *
- * Dean W. Gehnert, address@hidden, 05/01/96
- *
- * $Id: aic7xxx_proc.c,v 1.1.4.1 2004/01/16 22:41:26 roland Exp $
- *-M*************************************************************************/
-
-#define BLS (&aic7xxx_buffer[size])
-#define HDRB \
-" < 2K 2K+ 4K+ 8K+ 16K+ 32K+ 64K+ 128K+"
-
-#ifdef PROC_DEBUG
-extern int vsprintf(char *, const char *, va_list);
-
-static void
-proc_debug(const char *fmt, ...)
-{
- va_list ap;
- char buf[256];
-
- va_start(ap, fmt);
- vsprintf(buf, fmt, ap);
- printk(buf);
- va_end(ap);
-}
-#else /* PROC_DEBUG */
-# define proc_debug(fmt, args...)
-#endif /* PROC_DEBUG */
-
-static int aic7xxx_buffer_size = 0;
-static char *aic7xxx_buffer = NULL;
-
-
-/*+F*************************************************************************
- * Function:
- * aic7xxx_set_info
- *
- * Description:
- * Set parameters for the driver from the /proc filesystem.
- *-F*************************************************************************/
-int
-aic7xxx_set_info(char *buffer, int length, struct Scsi_Host *HBAptr)
-{
- proc_debug("aic7xxx_set_info(): %s\n", buffer);
- return (-ENOSYS); /* Currently this is a no-op */
-}
-
-
-/*+F*************************************************************************
- * Function:
- * aic7xxx_proc_info
- *
- * Description:
- * Return information to handle /proc support for the driver.
- *-F*************************************************************************/
-int
-aic7xxx_proc_info ( char *buffer, char **start, off_t offset, int length,
- int hostno, int inout)
-{
- struct Scsi_Host *HBAptr;
- struct aic7xxx_host *p;
- int size = 0;
- unsigned char i;
- struct aic7xxx_xferstats *sp;
- unsigned char target;
-
- HBAptr = NULL;
-
- for(p=first_aic7xxx; p->host->host_no != hostno; p=p->next)
- ;
-
- if (!p)
- {
- size += sprintf(buffer, "Can't find adapter for host number %d\n", hostno);
- if (size > length)
- {
- return (size);
- }
- else
- {
- return (length);
- }
- }
-
- HBAptr = p->host;
-
- if (inout == TRUE) /* Has data been written to the file? */
- {
- return (aic7xxx_set_info(buffer, length, HBAptr));
- }
-
- p = (struct aic7xxx_host *) HBAptr->hostdata;
-
- /*
- * It takes roughly 1K of space to hold all relevant card info, not
- * counting any proc stats, so we start out with a 1.5k buffer size and
- * if proc_stats is defined, then we sweep the stats structure to see
- * how many drives we will be printing out for and add 384 bytes per
- * device with active stats.
- *
- * Hmmmm...that 1.5k seems to keep growing as items get added so they
- * can be easily viewed for debugging purposes. So, we bumped that
- * 1.5k to 4k so we can quit having to bump it all the time.
- */
-
- size = 4096;
- for (target = 0; target < MAX_TARGETS; target++)
- {
- if (p->dev_flags[target] & DEVICE_PRESENT)
-#ifdef AIC7XXX_PROC_STATS
- size += 512;
-#else
- size += 256;
-#endif
- }
- if (aic7xxx_buffer_size != size)
- {
- if (aic7xxx_buffer != NULL)
- {
- kfree(aic7xxx_buffer);
- aic7xxx_buffer_size = 0;
- }
- aic7xxx_buffer = kmalloc(size, GFP_KERNEL);
- }
- if (aic7xxx_buffer == NULL)
- {
- size = sprintf(buffer, "AIC7xxx - kmalloc error at line %d\n",
- __LINE__);
- return size;
- }
- aic7xxx_buffer_size = size;
-
- size = 0;
- size += sprintf(BLS, "Adaptec AIC7xxx driver version: ");
- size += sprintf(BLS, "%s/", AIC7XXX_C_VERSION);
- size += sprintf(BLS, "%s", AIC7XXX_H_VERSION);
- size += sprintf(BLS, "\n");
- size += sprintf(BLS, "Compile Options:\n");
-#ifdef CONFIG_AIC7XXX_TCQ_ON_BY_DEFAULT
- size += sprintf(BLS, " TCQ Enabled By Default : Enabled\n");
-#else
- size += sprintf(BLS, " TCQ Enabled By Default : Disabled\n");
-#endif
-#ifdef AIC7XXX_PROC_STATS
- size += sprintf(BLS, " AIC7XXX_PROC_STATS : Enabled\n");
-#else
- size += sprintf(BLS, " AIC7XXX_PROC_STATS : Disabled\n");
-#endif
- size += sprintf(BLS, " AIC7XXX_RESET_DELAY : %d\n", AIC7XXX_RESET_DELAY);
- size += sprintf(BLS, "\n");
- size += sprintf(BLS, "Adapter Configuration:\n");
- size += sprintf(BLS, " SCSI Adapter: %s\n",
- board_names[p->board_name_index]);
- if (p->flags & AHC_TWIN)
- size += sprintf(BLS, " Twin Channel\n");
- else
- {
- char *channel = "";
- char *ultra = "";
- char *wide = "Narrow ";
- if (p->flags & AHC_MULTI_CHANNEL)
- {
- channel = " Channel A";
- if (p->flags & (AHC_CHNLB|AHC_CHNLC))
- channel = (p->flags & AHC_CHNLB) ? " Channel B" : " Channel C";
- }
- if (p->features & AHC_WIDE)
- wide = "Wide ";
- if (p->features & AHC_ULTRA2)
- ultra = "Ultra2-LVD/SE ";
- else if (p->features & AHC_ULTRA)
- ultra = "Ultra ";
- size += sprintf(BLS, " %s%sController%s\n",
- ultra, wide, channel);
- }
- if( !(p->maddr) )
- {
- size += sprintf(BLS, " Programmed I/O Base: %lx\n", p->base);
- }
- else
- {
- size += sprintf(BLS, " PCI MMAPed I/O Base: 0x%lx\n", p->mbase);
- }
- if( (p->chip & (AHC_VL | AHC_EISA)) )
- {
- size += sprintf(BLS, " BIOS Memory Address: 0x%08x\n", p->bios_address);
- }
- size += sprintf(BLS, " Adapter SEEPROM Config: %s\n",
- (p->flags & AHC_SEEPROM_FOUND) ? "SEEPROM found and used." :
- ((p->flags & AHC_USEDEFAULTS) ? "SEEPROM not found, using defaults." :
- "SEEPROM not found, using leftover BIOS values.") );
- size += sprintf(BLS, " Adaptec SCSI BIOS: %s\n",
- (p->flags & AHC_BIOS_ENABLED) ? "Enabled" : "Disabled");
- size += sprintf(BLS, " IRQ: %d\n", HBAptr->irq);
- size += sprintf(BLS, " SCBs: Active %d, Max Active %d,\n",
- p->activescbs, p->max_activescbs);
- size += sprintf(BLS, " Allocated %d, HW %d, "
- "Page %d\n", p->scb_data->numscbs, p->scb_data->maxhscbs,
- p->scb_data->maxscbs);
- if (p->flags & AHC_EXTERNAL_SRAM)
- size += sprintf(BLS, " Using External SCB SRAM\n");
- size += sprintf(BLS, " Interrupts: %ld", p->isr_count);
- if (p->chip & AHC_EISA)
- {
- size += sprintf(BLS, " %s\n",
- (p->pause & IRQMS) ? "(Level Sensitive)" : "(Edge Triggered)");
- }
- else
- {
- size += sprintf(BLS, "\n");
- }
- size += sprintf(BLS, " BIOS Control Word: 0x%04x\n",
- p->bios_control);
- size += sprintf(BLS, " Adapter Control Word: 0x%04x\n",
- p->adapter_control);
- size += sprintf(BLS, " Extended Translation: %sabled\n",
- (p->flags & AHC_EXTEND_TRANS_A) ? "En" : "Dis");
- size += sprintf(BLS, "Disconnect Enable Flags: 0x%04x\n", p->discenable);
- if (p->features & (AHC_ULTRA | AHC_ULTRA2))
- {
- size += sprintf(BLS, " Ultra Enable Flags: 0x%04x\n", p->ultraenb);
- }
- size += sprintf(BLS, " Tag Queue Enable Flags: 0x%04x\n", p->tagenable);
- size += sprintf(BLS, "Ordered Queue Tag Flags: 0x%04x\n", p->orderedtag);
- size += sprintf(BLS, "Default Tag Queue Depth: %d\n",
AIC7XXX_CMDS_PER_DEVICE);
- size += sprintf(BLS, " Tagged Queue By Device array for aic7xxx host "
- "instance %d:\n", p->instance);
- size += sprintf(BLS, " {");
- for(i=0; i < (MAX_TARGETS - 1); i++)
- size += sprintf(BLS, "%d,",aic7xxx_tag_info[p->instance].tag_commands[i]);
- size += sprintf(BLS, "%d}\n",aic7xxx_tag_info[p->instance].tag_commands[i]);
- size += sprintf(BLS, " Actual queue depth per device for aic7xxx host "
- "instance %d:\n", p->instance);
- size += sprintf(BLS, " {");
- for(i=0; i < (MAX_TARGETS - 1); i++)
- size += sprintf(BLS, "%d,", p->dev_max_queue_depth[i]);
- size += sprintf(BLS, "%d}\n", p->dev_max_queue_depth[i]);
-
- size += sprintf(BLS, "\n");
- size += sprintf(BLS, "Statistics:\n\n");
- for (target = 0; target < MAX_TARGETS; target++)
- {
- sp = &p->stats[target];
- if ((p->dev_flags[target] & DEVICE_PRESENT) == 0)
- {
- continue;
- }
- if (p->features & AHC_TWIN)
- {
- size += sprintf(BLS, "(scsi%d:%d:%d:%d)\n",
- p->host_no, (target >> 3), (target & 0x7), 0);
- }
- else
- {
- size += sprintf(BLS, "(scsi%d:%d:%d:%d)\n",
- p->host_no, 0, target, 0);
- }
- size += sprintf(BLS, " Device using %s/%s",
- (p->transinfo[target].cur_width == MSG_EXT_WDTR_BUS_16_BIT) ?
- "Wide" : "Narrow",
- (p->transinfo[target].cur_offset != 0) ?
- "Sync transfers at " : "Async transfers.\n" );
- if (p->transinfo[target].cur_offset != 0)
- {
- struct aic7xxx_syncrate *sync_rate;
- int period = p->transinfo[target].cur_period;
- int rate = (p->transinfo[target].cur_width ==
- MSG_EXT_WDTR_BUS_16_BIT) ? 1 : 0;
-
- sync_rate = aic7xxx_find_syncrate(p, &period, AHC_SYNCRATE_ULTRA2);
- if (sync_rate != NULL)
- {
- size += sprintf(BLS, "%s MByte/sec, offset %d\n",
- sync_rate->rate[rate],
- p->transinfo[target].cur_offset );
- }
- else
- {
- size += sprintf(BLS, "3.3 MByte/sec, offset %d\n",
- p->transinfo[target].cur_offset );
- }
- }
- size += sprintf(BLS, " Transinfo settings: ");
- size += sprintf(BLS, "current(%d/%d/%d), ",
- p->transinfo[target].cur_period,
- p->transinfo[target].cur_offset,
- p->transinfo[target].cur_width);
- size += sprintf(BLS, "goal(%d/%d/%d), ",
- p->transinfo[target].goal_period,
- p->transinfo[target].goal_offset,
- p->transinfo[target].goal_width);
- size += sprintf(BLS, "user(%d/%d/%d)\n",
- p->transinfo[target].user_period,
- p->transinfo[target].user_offset,
- p->transinfo[target].user_width);
-#ifdef AIC7XXX_PROC_STATS
- size += sprintf(BLS, " Total transfers %ld (%ld reads and %ld writes)\n",
- sp->r_total + sp->w_total, sp->r_total, sp->w_total);
- size += sprintf(BLS, "%s\n", HDRB);
- size += sprintf(BLS, " Reads:");
- for (i = 0; i < NUMBER(sp->r_bins); i++)
- {
- size += sprintf(BLS, " %7ld", sp->r_bins[i]);
- }
- size += sprintf(BLS, "\n");
- size += sprintf(BLS, " Writes:");
- for (i = 0; i < NUMBER(sp->w_bins); i++)
- {
- size += sprintf(BLS, " %7ld", sp->w_bins[i]);
- }
- size += sprintf(BLS, "\n");
-#else
- size += sprintf(BLS, " Total transfers %ld (%ld reads and %ld writes)\n",
- sp->r_total + sp->w_total, sp->r_total, sp->w_total);
-#endif /* AIC7XXX_PROC_STATS */
- size += sprintf(BLS, "\n\n");
- }
-
- if (size >= aic7xxx_buffer_size)
- {
- printk(KERN_WARNING "aic7xxx: Overflow in aic7xxx_proc.c\n");
- }
-
- if (offset > size - 1)
- {
- kfree(aic7xxx_buffer);
- aic7xxx_buffer = NULL;
- aic7xxx_buffer_size = length = 0;
- *start = NULL;
- }
- else
- {
- *start = &aic7xxx_buffer[offset]; /* Start of wanted data */
- if (size - offset < length)
- {
- length = size - offset;
- }
- }
-
- return (length);
-}
-
-/*
- * Overrides for Emacs so that we follow Linus's tabbing style.
- * Emacs will notice this stuff at the end of the file and automatically
- * adjust the settings for this buffer only. This must remain at the end
- * of the file.
- * ---------------------------------------------------------------------------
- * Local variables:
- * c-indent-level: 2
- * c-brace-imaginary-offset: 0
- * c-brace-offset: -2
- * c-argdecl-indent: 2
- * c-label-offset: -2
- * c-continued-statement-offset: 2
- * c-continued-brace-offset: 0
- * indent-tabs-mode: nil
- * tab-width: 8
- * End:
- */
diff --git a/linux/src/drivers/scsi/aic7xxx_seq.c
b/linux/src/drivers/scsi/aic7xxx_seq.c
deleted file mode 100644
index 9205cc4..0000000
--- a/linux/src/drivers/scsi/aic7xxx_seq.c
+++ /dev/null
@@ -1,769 +0,0 @@
-/*
- * DO NOT EDIT - This file is automatically generated.
- */
-static unsigned char seqprog[] = {
- 0xff, 0x6a, 0x06, 0x08,
- 0x32, 0x6a, 0x00, 0x00,
- 0x12, 0x6a, 0x00, 0x00,
- 0xff, 0x6a, 0xd6, 0x09,
- 0xff, 0x6a, 0xdc, 0x09,
- 0x00, 0x65, 0x38, 0x59,
- 0xf7, 0x01, 0x02, 0x08,
- 0xff, 0x4e, 0xc8, 0x08,
- 0xbf, 0x60, 0xc0, 0x08,
- 0x60, 0x0b, 0x7c, 0x68,
- 0x40, 0x00, 0x0e, 0x68,
- 0x08, 0x1f, 0x3e, 0x10,
- 0x60, 0x0b, 0x7c, 0x68,
- 0x40, 0x00, 0x0e, 0x68,
- 0x08, 0x1f, 0x3e, 0x10,
- 0xff, 0x3e, 0x3e, 0x60,
- 0x40, 0xfa, 0x10, 0x78,
- 0xff, 0xf6, 0xd4, 0x08,
- 0x01, 0x4e, 0x9c, 0x18,
- 0x40, 0x60, 0xc0, 0x00,
- 0x00, 0x4d, 0x10, 0x70,
- 0x01, 0x4e, 0x9c, 0x18,
- 0xbf, 0x60, 0xc0, 0x08,
- 0x00, 0x6a, 0x72, 0x5c,
- 0xff, 0x4e, 0xc8, 0x18,
- 0x02, 0x6a, 0x88, 0x5b,
- 0xff, 0x52, 0x20, 0x09,
- 0x0d, 0x6a, 0x6a, 0x00,
- 0x00, 0x52, 0xfe, 0x5b,
- 0xff, 0x3e, 0x74, 0x09,
- 0xff, 0x90, 0x7c, 0x08,
- 0xff, 0x3e, 0x20, 0x09,
- 0x00, 0x65, 0x44, 0x58,
- 0x00, 0x65, 0x0e, 0x40,
- 0xf7, 0x1f, 0xca, 0x08,
- 0x08, 0xa1, 0xc8, 0x08,
- 0x00, 0x65, 0xca, 0x00,
- 0xff, 0x65, 0x3e, 0x08,
- 0xf0, 0xa1, 0xc8, 0x08,
- 0x0f, 0x0f, 0x1e, 0x08,
- 0x00, 0x0f, 0x1e, 0x00,
- 0xf0, 0xa1, 0xc8, 0x08,
- 0x0f, 0x05, 0x0a, 0x08,
- 0x00, 0x05, 0x0a, 0x00,
- 0x5a, 0x6a, 0x00, 0x04,
- 0x12, 0x65, 0xc8, 0x00,
- 0x00, 0x01, 0x02, 0x00,
- 0x31, 0x6a, 0xca, 0x00,
- 0x80, 0x37, 0x64, 0x68,
- 0xff, 0x65, 0xca, 0x18,
- 0xff, 0x37, 0xdc, 0x08,
- 0xff, 0x6e, 0xc8, 0x08,
- 0x00, 0x6c, 0x6c, 0x78,
- 0x20, 0x01, 0x02, 0x00,
- 0x4c, 0x37, 0xc8, 0x28,
- 0x08, 0x1f, 0x74, 0x78,
- 0x08, 0x37, 0x6e, 0x00,
- 0x08, 0x64, 0xc8, 0x00,
- 0x70, 0x64, 0xca, 0x18,
- 0xff, 0x6c, 0x0a, 0x08,
- 0x20, 0x64, 0xca, 0x18,
- 0xff, 0x6c, 0x08, 0x0c,
- 0x40, 0x0b, 0x04, 0x69,
- 0x80, 0x0b, 0xf6, 0x78,
- 0xa4, 0x6a, 0x06, 0x00,
- 0x40, 0x6a, 0x16, 0x00,
- 0x10, 0x03, 0xf2, 0x78,
- 0xff, 0x50, 0xc8, 0x08,
- 0x88, 0x6a, 0xcc, 0x00,
- 0x49, 0x6a, 0xee, 0x5b,
- 0x01, 0x6a, 0x26, 0x01,
- 0xff, 0x6a, 0xca, 0x08,
- 0x08, 0x01, 0x02, 0x00,
- 0x02, 0x0b, 0x92, 0x78,
- 0xf7, 0x01, 0x02, 0x08,
- 0xff, 0x06, 0xcc, 0x08,
- 0xff, 0x66, 0x32, 0x09,
- 0x01, 0x65, 0xca, 0x18,
- 0x80, 0x66, 0xa0, 0x78,
- 0xff, 0x66, 0xa2, 0x08,
- 0x10, 0x03, 0x90, 0x68,
- 0xfc, 0x65, 0xc8, 0x18,
- 0x00, 0x65, 0xa8, 0x48,
- 0xff, 0x6a, 0x32, 0x01,
- 0x01, 0x64, 0x18, 0x19,
- 0xff, 0x6a, 0x1a, 0x09,
- 0xff, 0x6a, 0x1c, 0x09,
- 0x84, 0x6a, 0x06, 0x00,
- 0x08, 0x01, 0x02, 0x00,
- 0x02, 0x0b, 0xb2, 0x78,
- 0xff, 0x06, 0xc8, 0x08,
- 0xff, 0x64, 0x32, 0x09,
- 0xff, 0x6a, 0xca, 0x08,
- 0x5b, 0x64, 0xc8, 0x28,
- 0x00, 0x62, 0xc4, 0x18,
- 0xfc, 0x65, 0xca, 0x18,
- 0xff, 0x6a, 0xd4, 0x08,
- 0xfa, 0x65, 0xca, 0x18,
- 0xff, 0x6a, 0xd4, 0x08,
- 0x04, 0x65, 0xca, 0x18,
- 0x0b, 0x65, 0xca, 0x18,
- 0xff, 0x65, 0xc8, 0x08,
- 0x00, 0x8c, 0x18, 0x19,
- 0x02, 0x0b, 0xce, 0x78,
- 0x01, 0x65, 0xd4, 0x60,
- 0xf7, 0x01, 0x02, 0x08,
- 0xff, 0x06, 0x32, 0x09,
- 0xff, 0x65, 0xca, 0x18,
- 0xff, 0x65, 0xce, 0x68,
- 0x0a, 0x93, 0x26, 0x01,
- 0x00, 0x65, 0x64, 0x5c,
- 0x40, 0x51, 0xe6, 0x78,
- 0xe4, 0x6a, 0x06, 0x00,
- 0x08, 0x01, 0x02, 0x00,
- 0x04, 0x6a, 0x18, 0x5b,
- 0x01, 0x50, 0xa0, 0x18,
- 0x00, 0x50, 0xec, 0xe0,
- 0xff, 0x6a, 0xa0, 0x08,
- 0xff, 0x6a, 0x3a, 0x01,
- 0x02, 0x6a, 0x22, 0x01,
- 0x40, 0x51, 0xf2, 0x68,
- 0xff, 0x6a, 0x06, 0x08,
- 0x00, 0x65, 0x0e, 0x40,
- 0x20, 0x6a, 0x16, 0x00,
- 0xf0, 0x19, 0x6e, 0x08,
- 0x08, 0x6a, 0x18, 0x00,
- 0x08, 0x11, 0x22, 0x00,
- 0x08, 0x6a, 0x5a, 0x58,
- 0x08, 0x6a, 0x68, 0x00,
- 0x00, 0x65, 0x18, 0x41,
- 0x12, 0x6a, 0x00, 0x00,
- 0x40, 0x6a, 0x16, 0x00,
- 0xff, 0x3e, 0x20, 0x09,
- 0xff, 0xba, 0x7c, 0x08,
- 0xff, 0xa1, 0x6e, 0x08,
- 0x08, 0x6a, 0x18, 0x00,
- 0x08, 0x11, 0x22, 0x00,
- 0x08, 0x6a, 0x5a, 0x58,
- 0x80, 0x6a, 0x68, 0x00,
- 0x80, 0x36, 0x6c, 0x00,
- 0x00, 0x65, 0xd2, 0x5b,
- 0xff, 0x3d, 0xc8, 0x08,
- 0xbf, 0x64, 0x48, 0x79,
- 0x80, 0x64, 0xf0, 0x71,
- 0xa0, 0x64, 0x0e, 0x72,
- 0xc0, 0x64, 0x08, 0x72,
- 0xe0, 0x64, 0x52, 0x72,
- 0x01, 0x6a, 0x22, 0x01,
- 0x00, 0x65, 0x18, 0x41,
- 0xf7, 0x11, 0x22, 0x08,
- 0x00, 0x65, 0x38, 0x59,
- 0xff, 0x06, 0xd4, 0x08,
- 0xf7, 0x01, 0x02, 0x08,
- 0x09, 0x0c, 0x32, 0x79,
- 0x08, 0x0c, 0x0e, 0x68,
- 0x01, 0x6a, 0x22, 0x01,
- 0xff, 0x6a, 0x26, 0x09,
- 0xff, 0x6a, 0x08, 0x08,
- 0xdf, 0x01, 0x02, 0x08,
- 0x01, 0x6a, 0x7a, 0x00,
- 0x03, 0x36, 0x6c, 0x0c,
- 0x08, 0x6a, 0xcc, 0x00,
- 0xa9, 0x6a, 0xe8, 0x5b,
- 0x00, 0x65, 0x66, 0x41,
- 0xa8, 0x6a, 0x6a, 0x00,
- 0x79, 0x6a, 0x6a, 0x00,
- 0x40, 0x3d, 0x50, 0x69,
- 0x04, 0x35, 0x6a, 0x00,
- 0x00, 0x65, 0x3a, 0x5b,
- 0x80, 0x6a, 0xd4, 0x01,
- 0x10, 0x36, 0x42, 0x69,
- 0x10, 0x36, 0x6c, 0x00,
- 0x07, 0xac, 0x10, 0x31,
- 0x88, 0x6a, 0xcc, 0x00,
- 0xac, 0x6a, 0xe0, 0x5b,
- 0x00, 0x65, 0xda, 0x5b,
- 0xff, 0xa3, 0x70, 0x08,
- 0x39, 0x6a, 0xcc, 0x00,
- 0xa4, 0x6a, 0xe6, 0x5b,
- 0xff, 0x38, 0x74, 0x69,
- 0x80, 0x02, 0x04, 0x00,
- 0xe7, 0x35, 0x6a, 0x08,
- 0x03, 0x69, 0x18, 0x31,
- 0xff, 0x6a, 0x10, 0x00,
- 0xff, 0x6a, 0x12, 0x00,
- 0xff, 0x6a, 0x14, 0x00,
- 0x01, 0x38, 0x7a, 0x61,
- 0x02, 0xfc, 0xf8, 0x01,
- 0xbf, 0x35, 0x6a, 0x08,
- 0xff, 0x69, 0xca, 0x08,
- 0xff, 0x35, 0x26, 0x09,
- 0x04, 0x0b, 0x7e, 0x69,
- 0x04, 0x0b, 0x8a, 0x69,
- 0x10, 0x0c, 0x80, 0x79,
- 0x04, 0x0b, 0x88, 0x69,
- 0xff, 0x6a, 0xca, 0x08,
- 0x00, 0x35, 0x22, 0x5b,
- 0x80, 0x02, 0xd6, 0x69,
- 0xff, 0x65, 0xc8, 0x79,
- 0xff, 0x38, 0x70, 0x18,
- 0xff, 0x38, 0xc8, 0x79,
- 0x80, 0xea, 0xaa, 0x61,
- 0xef, 0x38, 0xc8, 0x18,
- 0x80, 0x6a, 0xc8, 0x00,
- 0x00, 0x65, 0x9c, 0x49,
- 0x33, 0x38, 0xc8, 0x28,
- 0xff, 0x64, 0xd0, 0x09,
- 0x04, 0x39, 0xc0, 0x31,
- 0x09, 0x6a, 0xd6, 0x01,
- 0x80, 0xeb, 0xa2, 0x79,
- 0xf7, 0xeb, 0xd6, 0x09,
- 0x08, 0xeb, 0xa6, 0x69,
- 0x01, 0x6a, 0xd6, 0x01,
- 0x08, 0xe9, 0x10, 0x31,
- 0x88, 0x6a, 0xcc, 0x00,
- 0x39, 0x6a, 0xe6, 0x5b,
- 0x08, 0x6a, 0x18, 0x01,
- 0xff, 0x6a, 0x1a, 0x09,
- 0xff, 0x6a, 0x1c, 0x09,
- 0x0d, 0x93, 0x26, 0x01,
- 0x00, 0x65, 0x64, 0x5c,
- 0x88, 0x6a, 0x54, 0x5c,
- 0x00, 0x65, 0xda, 0x5b,
- 0xff, 0x6a, 0xc8, 0x08,
- 0x08, 0x39, 0x72, 0x18,
- 0x00, 0x3a, 0x74, 0x20,
- 0x10, 0x0c, 0x66, 0x79,
- 0x80, 0x93, 0x26, 0x01,
- 0x00, 0x65, 0xe0, 0x59,
- 0xff, 0x08, 0x52, 0x09,
- 0xff, 0x09, 0x54, 0x09,
- 0xff, 0x0a, 0x56, 0x09,
- 0xff, 0x38, 0x50, 0x09,
- 0x12, 0x01, 0x02, 0x00,
- 0x00, 0x65, 0x18, 0x41,
- 0x00, 0x65, 0xe0, 0x59,
- 0x12, 0x01, 0x02, 0x00,
- 0x7f, 0x02, 0x04, 0x08,
- 0xe1, 0x6a, 0x22, 0x01,
- 0x00, 0x65, 0x18, 0x41,
- 0x04, 0x93, 0xea, 0x69,
- 0xdf, 0x93, 0x26, 0x09,
- 0x20, 0x93, 0xe4, 0x69,
- 0x02, 0x93, 0x26, 0x01,
- 0x01, 0x94, 0xe6, 0x79,
- 0xd7, 0x93, 0x26, 0x09,
- 0x08, 0x93, 0xec, 0x69,
- 0xff, 0x6a, 0xd4, 0x0c,
- 0x00, 0x65, 0x3a, 0x5b,
- 0x02, 0xfc, 0xf8, 0x01,
- 0x05, 0xb4, 0x10, 0x31,
- 0x02, 0x6a, 0x1a, 0x31,
- 0x88, 0x6a, 0xcc, 0x00,
- 0xb4, 0x6a, 0xe4, 0x5b,
- 0xff, 0x6a, 0x1a, 0x09,
- 0xff, 0x6a, 0x1c, 0x09,
- 0x00, 0x65, 0xda, 0x5b,
- 0x3d, 0x6a, 0x22, 0x5b,
- 0xac, 0x6a, 0x22, 0x5b,
- 0x00, 0x65, 0x18, 0x41,
- 0x00, 0x65, 0x3a, 0x5b,
- 0xff, 0x06, 0x44, 0x09,
- 0x00, 0x65, 0x18, 0x41,
- 0xff, 0x34, 0xca, 0x08,
- 0x80, 0x65, 0x32, 0x62,
- 0x0f, 0xa1, 0xca, 0x08,
- 0x07, 0xa1, 0xca, 0x08,
- 0x40, 0xa0, 0xc8, 0x08,
- 0x00, 0x65, 0xca, 0x00,
- 0x80, 0x65, 0xca, 0x00,
- 0x80, 0xa0, 0x22, 0x7a,
- 0xff, 0x65, 0x0c, 0x08,
- 0x00, 0x65, 0x34, 0x42,
- 0x20, 0xa0, 0x3a, 0x7a,
- 0xff, 0x65, 0x0c, 0x08,
- 0x00, 0x65, 0xd2, 0x5b,
- 0xa0, 0x3d, 0x46, 0x62,
- 0x23, 0xa0, 0x0c, 0x08,
- 0x00, 0x65, 0xd2, 0x5b,
- 0xa0, 0x3d, 0x46, 0x62,
- 0x00, 0xb9, 0x3a, 0x42,
- 0xff, 0x65, 0x3a, 0x62,
- 0xa1, 0x6a, 0x22, 0x01,
- 0xff, 0x6a, 0xd4, 0x08,
- 0x10, 0x51, 0x46, 0x72,
- 0x40, 0x6a, 0x18, 0x00,
- 0xff, 0x65, 0x0c, 0x08,
- 0x00, 0x65, 0xd2, 0x5b,
- 0xa0, 0x3d, 0x46, 0x62,
- 0x10, 0x3d, 0x06, 0x00,
- 0x00, 0x65, 0x0e, 0x42,
- 0x40, 0x6a, 0x18, 0x00,
- 0xff, 0x34, 0xa6, 0x08,
- 0x80, 0x34, 0x4e, 0x62,
- 0x7f, 0xa0, 0x40, 0x09,
- 0x08, 0x6a, 0x68, 0x00,
- 0x00, 0x65, 0x18, 0x41,
- 0x64, 0x6a, 0x12, 0x5b,
- 0x80, 0x64, 0xbe, 0x6a,
- 0x04, 0x64, 0xa4, 0x72,
- 0x02, 0x64, 0xaa, 0x72,
- 0x00, 0x6a, 0x6c, 0x72,
- 0x03, 0x64, 0xba, 0x72,
- 0x01, 0x64, 0xa0, 0x72,
- 0x07, 0x64, 0x00, 0x73,
- 0x08, 0x64, 0x68, 0x72,
- 0x11, 0x6a, 0x22, 0x01,
- 0x07, 0x6a, 0x04, 0x5b,
- 0xff, 0x06, 0xd4, 0x08,
- 0x00, 0x65, 0x18, 0x41,
- 0xff, 0xa8, 0x70, 0x6a,
- 0xff, 0xa2, 0x88, 0x7a,
- 0x01, 0x6a, 0x6a, 0x00,
- 0x00, 0xb9, 0xfe, 0x5b,
- 0xff, 0xa2, 0x88, 0x7a,
- 0x71, 0x6a, 0x22, 0x01,
- 0xff, 0x6a, 0xd4, 0x08,
- 0x40, 0x51, 0x88, 0x62,
- 0x0d, 0x6a, 0x6a, 0x00,
- 0x00, 0xb9, 0xfe, 0x5b,
- 0xff, 0x3e, 0x74, 0x09,
- 0xff, 0x90, 0x7c, 0x08,
- 0x00, 0x65, 0x44, 0x58,
- 0x00, 0x65, 0x2a, 0x41,
- 0x20, 0xa0, 0x90, 0x6a,
- 0xff, 0x37, 0xc8, 0x08,
- 0x00, 0x6a, 0xa8, 0x5b,
- 0xff, 0x6a, 0xbe, 0x5b,
- 0xff, 0xf8, 0xc8, 0x08,
- 0xff, 0x4f, 0xc8, 0x08,
- 0x01, 0x6a, 0xa8, 0x5b,
- 0x00, 0xb9, 0xbe, 0x5b,
- 0x01, 0x4f, 0x9e, 0x18,
- 0x02, 0x6a, 0x22, 0x01,
- 0x00, 0x65, 0x6c, 0x5c,
- 0x00, 0x65, 0x2a, 0x41,
- 0x41, 0x6a, 0x22, 0x01,
- 0x00, 0x65, 0x18, 0x41,
- 0x04, 0xa0, 0x40, 0x01,
- 0x00, 0x65, 0x84, 0x5c,
- 0x00, 0x65, 0x2a, 0x41,
- 0x10, 0x36, 0x68, 0x7a,
- 0xff, 0x38, 0x46, 0x09,
- 0xa4, 0x6a, 0xcc, 0x00,
- 0x39, 0x6a, 0xe6, 0x5b,
- 0xac, 0x6a, 0xcc, 0x00,
- 0x14, 0x6a, 0xe6, 0x5b,
- 0xa9, 0x6a, 0xe8, 0x5b,
- 0x00, 0x65, 0x68, 0x42,
- 0xef, 0x36, 0x6c, 0x08,
- 0x00, 0x65, 0x68, 0x42,
- 0x0f, 0x64, 0xc8, 0x08,
- 0x07, 0x64, 0xc8, 0x08,
- 0x00, 0x37, 0x6e, 0x00,
- 0x00, 0x65, 0x78, 0x5b,
- 0xff, 0x51, 0xce, 0x72,
- 0x20, 0x36, 0xde, 0x7a,
- 0x00, 0x90, 0x5c, 0x5b,
- 0x00, 0x65, 0xe0, 0x42,
- 0xff, 0x06, 0xd4, 0x08,
- 0x00, 0x65, 0xd2, 0x5b,
- 0xe0, 0x3d, 0xfa, 0x62,
- 0x20, 0x12, 0xfa, 0x62,
- 0x51, 0x6a, 0x08, 0x5b,
- 0xff, 0x51, 0x20, 0x09,
- 0x20, 0xa0, 0xfa, 0x7a,
- 0x00, 0x90, 0x5c, 0x5b,
- 0x00, 0x65, 0x56, 0x5b,
- 0xff, 0x37, 0xc8, 0x08,
- 0x00, 0xa1, 0xf2, 0x62,
- 0x04, 0xa0, 0xf2, 0x7a,
- 0xfb, 0xa0, 0x40, 0x09,
- 0x80, 0x36, 0x6c, 0x00,
- 0x80, 0xa0, 0x68, 0x7a,
- 0x7f, 0xa0, 0x40, 0x09,
- 0xff, 0x6a, 0x04, 0x5b,
- 0x00, 0x65, 0x68, 0x42,
- 0x04, 0xa0, 0xf8, 0x7a,
- 0x00, 0x65, 0x84, 0x5c,
- 0x00, 0x65, 0xfa, 0x42,
- 0x00, 0x65, 0x6c, 0x5c,
- 0x31, 0x6a, 0x22, 0x01,
- 0x0c, 0x6a, 0x04, 0x5b,
- 0x00, 0x65, 0x68, 0x42,
- 0x61, 0x6a, 0x22, 0x01,
- 0x00, 0x65, 0x68, 0x42,
- 0x10, 0x3d, 0x06, 0x00,
- 0xff, 0x65, 0x68, 0x0c,
- 0xff, 0x06, 0xd4, 0x08,
- 0x01, 0x0c, 0x0a, 0x7b,
- 0x04, 0x0c, 0x0a, 0x6b,
- 0xe0, 0x03, 0x7a, 0x08,
- 0xe0, 0x3d, 0x1e, 0x63,
- 0xff, 0x65, 0xcc, 0x08,
- 0xff, 0x12, 0xda, 0x0c,
- 0xff, 0x06, 0xd4, 0x0c,
- 0xff, 0x65, 0x0c, 0x08,
- 0x02, 0x0b, 0x1a, 0x7b,
- 0xff, 0x6a, 0xd4, 0x0c,
- 0xd1, 0x6a, 0x22, 0x01,
- 0x00, 0x65, 0x18, 0x41,
- 0xff, 0x65, 0x26, 0x09,
- 0x01, 0x0b, 0x32, 0x6b,
- 0x10, 0x0c, 0x24, 0x7b,
- 0x04, 0x0b, 0x2c, 0x6b,
- 0xff, 0x6a, 0xca, 0x08,
- 0x04, 0x93, 0x30, 0x6b,
- 0x01, 0x94, 0x2e, 0x7b,
- 0x10, 0x94, 0x30, 0x6b,
- 0xc7, 0x93, 0x26, 0x09,
- 0xff, 0x99, 0xd4, 0x08,
- 0x08, 0x93, 0x34, 0x6b,
- 0xff, 0x6a, 0xd4, 0x0c,
- 0x80, 0x36, 0x38, 0x6b,
- 0x21, 0x6a, 0x22, 0x05,
- 0xff, 0x65, 0x20, 0x09,
- 0xff, 0x51, 0x46, 0x63,
- 0xff, 0x37, 0xc8, 0x08,
- 0xa1, 0x6a, 0x50, 0x43,
- 0xff, 0x51, 0xc8, 0x08,
- 0xb9, 0x6a, 0x50, 0x43,
- 0xff, 0xba, 0x54, 0x73,
- 0xff, 0xba, 0x20, 0x09,
- 0xff, 0x65, 0xca, 0x18,
- 0x00, 0x6c, 0x4a, 0x63,
- 0xff, 0x90, 0xca, 0x0c,
- 0xff, 0x6a, 0xca, 0x04,
- 0x20, 0x36, 0x72, 0x7b,
- 0x00, 0x90, 0x3e, 0x5b,
- 0xff, 0x65, 0x72, 0x73,
- 0xff, 0xba, 0x66, 0x73,
- 0xff, 0xbb, 0xcc, 0x08,
- 0xff, 0xba, 0x20, 0x09,
- 0xff, 0x66, 0x76, 0x09,
- 0xff, 0x65, 0x20, 0x09,
- 0xff, 0xbb, 0x70, 0x73,
- 0xff, 0xba, 0xcc, 0x08,
- 0xff, 0xbb, 0x20, 0x09,
- 0xff, 0x66, 0x74, 0x09,
- 0xff, 0x65, 0x20, 0x0d,
- 0xff, 0xba, 0x7e, 0x0c,
- 0x00, 0x6a, 0x72, 0x5c,
- 0x0d, 0x6a, 0x6a, 0x00,
- 0x00, 0x51, 0xfe, 0x43,
- 0xff, 0x3f, 0xcc, 0x73,
- 0xff, 0x6a, 0xa2, 0x00,
- 0x00, 0x3f, 0x3e, 0x5b,
- 0xff, 0x65, 0xcc, 0x73,
- 0x20, 0x36, 0x6c, 0x00,
- 0x20, 0xa0, 0x86, 0x6b,
- 0xff, 0xb9, 0xa2, 0x0c,
- 0xff, 0x6a, 0xa2, 0x04,
- 0xff, 0x65, 0xa4, 0x08,
- 0xe0, 0x6a, 0xcc, 0x00,
- 0x45, 0x6a, 0xf2, 0x5b,
- 0x01, 0x6a, 0xd0, 0x01,
- 0x09, 0x6a, 0xd6, 0x01,
- 0x80, 0xeb, 0x92, 0x7b,
- 0x01, 0x6a, 0xd6, 0x01,
- 0x01, 0xe9, 0xa4, 0x34,
- 0x88, 0x6a, 0xcc, 0x00,
- 0x45, 0x6a, 0xf2, 0x5b,
- 0x01, 0x6a, 0x18, 0x01,
- 0xff, 0x6a, 0x1a, 0x09,
- 0xff, 0x6a, 0x1c, 0x09,
- 0x0d, 0x6a, 0x26, 0x01,
- 0x00, 0x65, 0x64, 0x5c,
- 0xff, 0x99, 0xa4, 0x0c,
- 0xff, 0x65, 0xa4, 0x08,
- 0xe0, 0x6a, 0xcc, 0x00,
- 0x45, 0x6a, 0xf2, 0x5b,
- 0x01, 0x6a, 0xd0, 0x01,
- 0x01, 0x6a, 0xdc, 0x05,
- 0x88, 0x6a, 0xcc, 0x00,
- 0x45, 0x6a, 0xf2, 0x5b,
- 0x01, 0x6a, 0x18, 0x01,
- 0xff, 0x6a, 0x1a, 0x09,
- 0xff, 0x6a, 0x1c, 0x09,
- 0x01, 0x6a, 0x26, 0x05,
- 0x01, 0x65, 0xd8, 0x31,
- 0x09, 0xee, 0xdc, 0x01,
- 0x80, 0xee, 0xc2, 0x7b,
- 0xff, 0x6a, 0xdc, 0x0d,
- 0xff, 0x65, 0x32, 0x09,
- 0x0a, 0x93, 0x26, 0x01,
- 0x00, 0x65, 0x64, 0x44,
- 0xff, 0x37, 0xc8, 0x08,
- 0x00, 0x6a, 0x88, 0x5b,
- 0xff, 0x52, 0xa2, 0x0c,
- 0x01, 0x0c, 0xd2, 0x7b,
- 0x04, 0x0c, 0xd2, 0x6b,
- 0xe0, 0x03, 0x7a, 0x08,
- 0xff, 0x3d, 0x06, 0x0c,
- 0xff, 0x8c, 0x10, 0x08,
- 0xff, 0x8d, 0x12, 0x08,
- 0xff, 0x8e, 0x14, 0x0c,
- 0xff, 0x6c, 0xda, 0x08,
- 0xff, 0x6c, 0xda, 0x08,
- 0xff, 0x6c, 0xda, 0x08,
- 0xff, 0x6c, 0xda, 0x08,
- 0xff, 0x6c, 0xda, 0x08,
- 0xff, 0x6c, 0xda, 0x08,
- 0xff, 0x6c, 0xda, 0x0c,
- 0x3d, 0x64, 0xa4, 0x28,
- 0x55, 0x64, 0xc8, 0x28,
- 0x00, 0x6c, 0xda, 0x18,
- 0xff, 0x52, 0xc8, 0x08,
- 0x00, 0x6c, 0xda, 0x20,
- 0xff, 0x6a, 0xc8, 0x08,
- 0x00, 0x6c, 0xda, 0x20,
- 0x00, 0x6c, 0xda, 0x24,
- 0xff, 0x65, 0xc8, 0x08,
- 0xe0, 0x6a, 0xcc, 0x00,
- 0x41, 0x6a, 0xee, 0x5b,
- 0xff, 0x90, 0xe2, 0x09,
- 0x20, 0x6a, 0xd0, 0x01,
- 0x04, 0x35, 0x10, 0x7c,
- 0x1d, 0x6a, 0xdc, 0x01,
- 0xdc, 0xee, 0x0c, 0x64,
- 0x00, 0x65, 0x1c, 0x44,
- 0x01, 0x6a, 0xdc, 0x01,
- 0x20, 0xa0, 0xd8, 0x31,
- 0x09, 0xee, 0xdc, 0x01,
- 0x80, 0xee, 0x16, 0x7c,
- 0x19, 0x6a, 0xdc, 0x01,
- 0xd8, 0xee, 0x1a, 0x64,
- 0xff, 0x6a, 0xdc, 0x09,
- 0x18, 0xee, 0x1e, 0x6c,
- 0xff, 0x6a, 0xd4, 0x0c,
- 0x88, 0x6a, 0xcc, 0x00,
- 0x41, 0x6a, 0xee, 0x5b,
- 0x20, 0x6a, 0x18, 0x01,
- 0xff, 0x6a, 0x1a, 0x09,
- 0xff, 0x6a, 0x1c, 0x09,
- 0xff, 0x35, 0x26, 0x09,
- 0x04, 0x35, 0x48, 0x6c,
- 0xa0, 0x6a, 0xca, 0x00,
- 0x20, 0x65, 0xc8, 0x18,
- 0xff, 0x6c, 0x32, 0x09,
- 0xff, 0x6c, 0x32, 0x09,
- 0xff, 0x6c, 0x32, 0x09,
- 0xff, 0x6c, 0x32, 0x09,
- 0xff, 0x6c, 0x32, 0x09,
- 0xff, 0x6c, 0x32, 0x09,
- 0xff, 0x6c, 0x32, 0x09,
- 0xff, 0x6c, 0x32, 0x09,
- 0x00, 0x65, 0x34, 0x64,
- 0x0a, 0x93, 0x26, 0x01,
- 0x00, 0x65, 0x64, 0x5c,
- 0x04, 0x35, 0x38, 0x7b,
- 0xa0, 0x6a, 0x54, 0x5c,
- 0x00, 0x65, 0x56, 0x5c,
- 0x00, 0x65, 0x56, 0x5c,
- 0x00, 0x65, 0x56, 0x44,
- 0xff, 0x65, 0xcc, 0x08,
- 0xff, 0x99, 0xda, 0x08,
- 0xff, 0x99, 0xda, 0x08,
- 0xff, 0x99, 0xda, 0x08,
- 0xff, 0x99, 0xda, 0x08,
- 0xff, 0x99, 0xda, 0x08,
- 0xff, 0x99, 0xda, 0x08,
- 0xff, 0x99, 0xda, 0x0c,
- 0x08, 0x94, 0x64, 0x7c,
- 0xf7, 0x93, 0x26, 0x09,
- 0x08, 0x93, 0x68, 0x6c,
- 0xff, 0x6a, 0xd4, 0x0c,
- 0xff, 0x40, 0x74, 0x09,
- 0xff, 0x90, 0x80, 0x08,
- 0xff, 0x6a, 0x72, 0x05,
- 0xff, 0x40, 0x80, 0x64,
- 0xff, 0x3f, 0x78, 0x64,
- 0xff, 0x6a, 0xca, 0x04,
- 0xff, 0x3f, 0x20, 0x09,
- 0x01, 0x6a, 0x6a, 0x00,
- 0x00, 0xb9, 0xfe, 0x5b,
- 0x00, 0x90, 0x5c, 0x43,
- 0xff, 0x40, 0x20, 0x09,
- 0xff, 0xba, 0x80, 0x0c,
- 0xff, 0x6a, 0x76, 0x01,
- 0xff, 0x3f, 0x74, 0x09,
- 0xff, 0x90, 0x7e, 0x08,
- 0xff, 0xba, 0x38, 0x73,
- 0xff, 0xba, 0x20, 0x09,
- 0xff, 0x3f, 0x76, 0x09,
- 0xff, 0x3f, 0x20, 0x0d,
-};
-
-static int aic7xxx_patch12_func(struct aic7xxx_host *p);
-
-static int
-aic7xxx_patch12_func(struct aic7xxx_host *p)
-{
- return ((p->chip & AHC_CHIPID_MASK) == AHC_AIC7895);
-}
-
-static int aic7xxx_patch11_func(struct aic7xxx_host *p);
-
-static int
-aic7xxx_patch11_func(struct aic7xxx_host *p)
-{
- return ((p->features & AHC_WIDE) != 0);
-}
-
-static int aic7xxx_patch10_func(struct aic7xxx_host *p);
-
-static int
-aic7xxx_patch10_func(struct aic7xxx_host *p)
-{
- return ((p->features & AHC_ULTRA2) == 0);
-}
-
-static int aic7xxx_patch9_func(struct aic7xxx_host *p);
-
-static int
-aic7xxx_patch9_func(struct aic7xxx_host *p)
-{
- return ((p->features & AHC_ULTRA) != 0);
-}
-
-static int aic7xxx_patch8_func(struct aic7xxx_host *p);
-
-static int
-aic7xxx_patch8_func(struct aic7xxx_host *p)
-{
- return ((p->features & AHC_ULTRA2) != 0);
-}
-
-static int aic7xxx_patch7_func(struct aic7xxx_host *p);
-
-static int
-aic7xxx_patch7_func(struct aic7xxx_host *p)
-{
- return ((p->flags & AHC_PAGESCBS) == 0);
-}
-
-static int aic7xxx_patch6_func(struct aic7xxx_host *p);
-
-static int
-aic7xxx_patch6_func(struct aic7xxx_host *p)
-{
- return ((p->flags & AHC_PAGESCBS) != 0);
-}
-
-static int aic7xxx_patch5_func(struct aic7xxx_host *p);
-
-static int
-aic7xxx_patch5_func(struct aic7xxx_host *p)
-{
- return ((p->features & AHC_QUEUE_REGS) != 0);
-}
-
-static int aic7xxx_patch4_func(struct aic7xxx_host *p);
-
-static int
-aic7xxx_patch4_func(struct aic7xxx_host *p)
-{
- return ((p->features & AHC_TWIN) != 0);
-}
-
-static int aic7xxx_patch3_func(struct aic7xxx_host *p);
-
-static int
-aic7xxx_patch3_func(struct aic7xxx_host *p)
-{
- return ((p->features & AHC_QUEUE_REGS) == 0);
-}
-
-static int aic7xxx_patch2_func(struct aic7xxx_host *p);
-
-static int
-aic7xxx_patch2_func(struct aic7xxx_host *p)
-{
- return ((p->features & AHC_CMD_CHAN) != 0);
-}
-
-static int aic7xxx_patch1_func(struct aic7xxx_host *p);
-
-static int
-aic7xxx_patch1_func(struct aic7xxx_host *p)
-{
- return ((p->flags & AHC_TARGETMODE) != 0);
-}
-
-static int aic7xxx_patch0_func(struct aic7xxx_host *p);
-
-static int
-aic7xxx_patch0_func(struct aic7xxx_host *p)
-{
- return (0);
-}
-
-struct sequencer_patch {
- int (*patch_func)(struct aic7xxx_host *);
- unsigned int begin :10,
- skip_instr :10,
- skip_patch :12;
-} sequencer_patches[] = {
- { aic7xxx_patch1_func, 1, 1, 2 },
- { aic7xxx_patch0_func, 2, 1, 1 },
- { aic7xxx_patch2_func, 3, 2, 1 },
- { aic7xxx_patch3_func, 7, 1, 1 },
- { aic7xxx_patch3_func, 8, 1, 1 },
- { aic7xxx_patch4_func, 11, 4, 1 },
- { aic7xxx_patch5_func, 16, 3, 2 },
- { aic7xxx_patch0_func, 19, 4, 1 },
- { aic7xxx_patch6_func, 23, 1, 1 },
- { aic7xxx_patch7_func, 26, 1, 1 },
- { aic7xxx_patch4_func, 34, 4, 1 },
- { aic7xxx_patch8_func, 38, 3, 2 },
- { aic7xxx_patch0_func, 41, 3, 1 },
- { aic7xxx_patch9_func, 47, 7, 1 },
- { aic7xxx_patch4_func, 55, 3, 1 },
- { aic7xxx_patch8_func, 58, 2, 1 },
- { aic7xxx_patch1_func, 63, 60, 1 },
- { aic7xxx_patch8_func, 164, 1, 2 },
- { aic7xxx_patch0_func, 165, 1, 1 },
- { aic7xxx_patch2_func, 169, 1, 1 },
- { aic7xxx_patch2_func, 172, 1, 2 },
- { aic7xxx_patch0_func, 173, 2, 1 },
- { aic7xxx_patch10_func, 175, 1, 1 },
- { aic7xxx_patch8_func, 182, 1, 2 },
- { aic7xxx_patch0_func, 183, 3, 1 },
- { aic7xxx_patch8_func, 187, 1, 2 },
- { aic7xxx_patch0_func, 188, 1, 1 },
- { aic7xxx_patch8_func, 189, 7, 2 },
- { aic7xxx_patch0_func, 196, 1, 1 },
- { aic7xxx_patch2_func, 201, 13, 2 },
- { aic7xxx_patch0_func, 214, 8, 1 },
- { aic7xxx_patch10_func, 222, 1, 1 },
- { aic7xxx_patch8_func, 227, 1, 1 },
- { aic7xxx_patch8_func, 228, 1, 1 },
- { aic7xxx_patch8_func, 233, 1, 1 },
- { aic7xxx_patch8_func, 235, 2, 1 },
- { aic7xxx_patch8_func, 240, 8, 1 },
- { aic7xxx_patch8_func, 249, 1, 1 },
- { aic7xxx_patch2_func, 250, 2, 2 },
- { aic7xxx_patch0_func, 252, 4, 1 },
- { aic7xxx_patch10_func, 256, 2, 2 },
- { aic7xxx_patch0_func, 258, 1, 1 },
- { aic7xxx_patch11_func, 265, 1, 2 },
- { aic7xxx_patch0_func, 266, 1, 1 },
- { aic7xxx_patch5_func, 328, 1, 2 },
- { aic7xxx_patch0_func, 329, 1, 1 },
- { aic7xxx_patch3_func, 332, 1, 1 },
- { aic7xxx_patch11_func, 351, 1, 2 },
- { aic7xxx_patch0_func, 352, 1, 1 },
- { aic7xxx_patch6_func, 356, 1, 1 },
- { aic7xxx_patch7_func, 364, 3, 2 },
- { aic7xxx_patch0_func, 367, 1, 1 },
- { aic7xxx_patch1_func, 396, 3, 1 },
- { aic7xxx_patch10_func, 410, 1, 1 },
- { aic7xxx_patch2_func, 453, 7, 2 },
- { aic7xxx_patch0_func, 460, 8, 1 },
- { aic7xxx_patch2_func, 469, 4, 2 },
- { aic7xxx_patch0_func, 473, 6, 1 },
- { aic7xxx_patch2_func, 479, 4, 2 },
- { aic7xxx_patch0_func, 483, 3, 1 },
- { aic7xxx_patch2_func, 512, 17, 4 },
- { aic7xxx_patch12_func, 520, 4, 2 },
- { aic7xxx_patch0_func, 524, 2, 1 },
- { aic7xxx_patch0_func, 529, 33, 1 },
- { aic7xxx_patch6_func, 566, 2, 1 },
- { aic7xxx_patch6_func, 569, 9, 1 },
-
-};
diff --git a/linux/src/drivers/scsi/eata_dma.c
b/linux/src/drivers/scsi/eata_dma.c
deleted file mode 100644
index c019813..0000000
--- a/linux/src/drivers/scsi/eata_dma.c
+++ /dev/null
@@ -1,1603 +0,0 @@
-/************************************************************
- * *
- * Linux EATA SCSI driver *
- * *
- * based on the CAM document CAM/89-004 rev. 2.0c, *
- * DPT's driver kit, some internal documents and source, *
- * and several other Linux scsi drivers and kernel docs. *
- * *
- * The driver currently: *
- * -supports all ISA based EATA-DMA boards *
- * like PM2011, PM2021, PM2041, PM3021 *
- * -supports all EISA based EATA-DMA boards *
- * like PM2012B, PM2022, PM2122, PM2322, PM2042, *
- * PM3122, PM3222, PM3332 *
- * -supports all PCI based EATA-DMA boards *
- * like PM2024, PM2124, PM2044, PM2144, PM3224, *
- * PM3334 *
- * -supports the Wide, Ultra Wide and Differential *
- * versions of the boards *
- * -supports multiple HBAs with & without IRQ sharing *
- * -supports all SCSI channels on multi channel boards *
- * -supports ix86 and MIPS, untested on ALPHA *
- * -needs identical IDs on all channels of a HBA *
- * -can be loaded as module *
- * -displays statistical and hardware information *
- * in /proc/scsi/eata_dma *
- * -provides rudimentary latency measurement *
- * possibilities via /proc/scsi/eata_dma/<hostnum> *
- * *
- * (c)1993-96 Michael Neuffer *
- * address@hidden *
- * address@hidden *
- * *
- * This program is free software; you can redistribute it *
- * and/or modify it under the terms of the GNU General *
- * Public License as published by the Free Software *
- * Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be *
- * useful, but WITHOUT ANY WARRANTY; without even the *
- * implied warranty of MERCHANTABILITY or FITNESS FOR A *
- * PARTICULAR PURPOSE. See the GNU General Public License *
- * for more details. *
- * *
- * You should have received a copy of the GNU General *
- * Public License along with this kernel; if not, write to *
- * the Free Software Foundation, Inc., 675 Mass Ave, *
- * Cambridge, MA 02139, USA. *
- * *
- * I have to thank DPT for their excellent support. I took *
- * me almost a year and a stopover at their HQ, on my first *
- * trip to the USA, to get it, but since then they've been *
- * very helpful and tried to give me all the infos and *
- * support I need. *
- * *
- * Thanks also to Simon Shapiro, Greg Hosler and Mike *
- * Jagdis who did a lot of testing and found quite a number *
- * of bugs during the development. *
- ************************************************************
- * last change: 96/10/21 OS: Linux 2.0.23 *
- ************************************************************/
-
-/* Look in eata_dma.h for configuration and revision information */
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/string.h>
-#include <linux/ioport.h>
-#include <linux/malloc.h>
-#include <linux/in.h>
-#include <linux/bios32.h>
-#include <linux/pci.h>
-#include <linux/proc_fs.h>
-#include <linux/delay.h>
-#include <asm/byteorder.h>
-#include <asm/types.h>
-#include <asm/io.h>
-#include <asm/dma.h>
-#include <asm/pgtable.h>
-#ifdef __mips__
-#include <asm/cachectl.h>
-#endif
-#include <linux/blk.h>
-#include "scsi.h"
-#include "sd.h"
-#include "hosts.h"
-#include "eata_dma.h"
-#include "eata_dma_proc.h"
-
-#include <linux/stat.h>
-#include <linux/config.h> /* for CONFIG_PCI */
-
-struct proc_dir_entry proc_scsi_eata_dma = {
- PROC_SCSI_EATA, 8, "eata_dma",
- S_IFDIR | S_IRUGO | S_IXUGO, 2
-};
-
-static u32 ISAbases[] =
-{0x1F0, 0x170, 0x330, 0x230};
-static unchar EISAbases[] =
-{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
-static uint registered_HBAs = 0;
-static struct Scsi_Host *last_HBA = NULL;
-static struct Scsi_Host *first_HBA = NULL;
-static unchar reg_IRQ[] =
-{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-static unchar reg_IRQL[] =
-{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-static struct eata_sp *status = 0; /* Statuspacket array */
-static void *dma_scratch = 0;
-
-static struct eata_register *fake_int_base;
-static int fake_int_result;
-static int fake_int_happened;
-
-static ulong int_counter = 0;
-static ulong queue_counter = 0;
-
-void eata_scsi_done (Scsi_Cmnd * scmd)
-{
- scmd->request.rq_status = RQ_SCSI_DONE;
-
- if (scmd->request.sem != NULL)
- up(scmd->request.sem);
-
- return;
-}
-
-void eata_fake_int_handler(s32 irq, void *dev_id, struct pt_regs * regs)
-{
- fake_int_result = inb((ulong)fake_int_base + HA_RSTATUS);
- fake_int_happened = TRUE;
- DBG(DBG_INTR3, printk("eata_fake_int_handler called irq%d base %p"
- " res %#x\n", irq, fake_int_base, fake_int_result));
- return;
-}
-
-#include "eata_dma_proc.c"
-
-#ifdef MODULE
-int eata_release(struct Scsi_Host *sh)
-{
- uint i;
- if (sh->irq && reg_IRQ[sh->irq] == 1) free_irq(sh->irq, NULL);
- else reg_IRQ[sh->irq]--;
-
- scsi_init_free((void *)status, 512);
- scsi_init_free((void *)dma_scratch - 4, 1024);
- for (i = 0; i < sh->can_queue; i++){ /* Free all SG arrays */
- if(SD(sh)->ccb[i].sg_list != NULL)
- scsi_init_free((void *) SD(sh)->ccb[i].sg_list,
- sh->sg_tablesize * sizeof(struct eata_sg_list));
- }
-
- if (SD(sh)->channel == 0) {
- if (sh->dma_channel != BUSMASTER) free_dma(sh->dma_channel);
- if (sh->io_port && sh->n_io_port)
- release_region(sh->io_port, sh->n_io_port);
- }
- return(TRUE);
-}
-#endif
-
-
-inline void eata_latency_in(struct eata_ccb *cp, hostdata *hd)
-{
- uint time;
- time = jiffies - cp->timestamp;
- if(hd->all_lat[1] > time)
- hd->all_lat[1] = time;
- if(hd->all_lat[2] < time)
- hd->all_lat[2] = time;
- hd->all_lat[3] += time;
- hd->all_lat[0]++;
- if((cp->rw_latency) == WRITE) { /* was WRITE */
- if(hd->writes_lat[cp->sizeindex][1] > time)
- hd->writes_lat[cp->sizeindex][1] = time;
- if(hd->writes_lat[cp->sizeindex][2] < time)
- hd->writes_lat[cp->sizeindex][2] = time;
- hd->writes_lat[cp->sizeindex][3] += time;
- hd->writes_lat[cp->sizeindex][0]++;
- } else if((cp->rw_latency) == READ) {
- if(hd->reads_lat[cp->sizeindex][1] > time)
- hd->reads_lat[cp->sizeindex][1] = time;
- if(hd->reads_lat[cp->sizeindex][2] < time)
- hd->reads_lat[cp->sizeindex][2] = time;
- hd->reads_lat[cp->sizeindex][3] += time;
- hd->reads_lat[cp->sizeindex][0]++;
- }
-}
-
-inline void eata_latency_out(struct eata_ccb *cp, Scsi_Cmnd *cmd)
-{
- int x, z;
- short *sho;
- long *lon;
- x = 0; /* just to keep GCC quiet */
- cp->timestamp = jiffies; /* For latency measurements */
- switch(cmd->cmnd[0]) {
- case WRITE_6:
- x = cmd->cmnd[4]/2;
- cp->rw_latency = WRITE;
- break;
- case READ_6:
- x = cmd->cmnd[4]/2;
- cp->rw_latency = READ;
- break;
- case WRITE_10:
- sho = (short *) &cmd->cmnd[7];
- x = ntohs(*sho)/2;
- cp->rw_latency = WRITE;
- break;
- case READ_10:
- sho = (short *) &cmd->cmnd[7];
- x = ntohs(*sho)/2;
- cp->rw_latency = READ;
- break;
- case WRITE_12:
- lon = (long *) &cmd->cmnd[6];
- x = ntohl(*lon)/2;
- cp->rw_latency = WRITE;
- break;
- case READ_12:
- lon = (long *) &cmd->cmnd[6];
- x = ntohl(*lon)/2;
- cp->rw_latency = READ;
- break;
- default:
- cp->rw_latency = OTHER;
- break;
- }
- if (cmd->cmnd[0] == WRITE_6 || cmd->cmnd[0] == WRITE_10 ||
- cmd->cmnd[0] == WRITE_12 || cmd->cmnd[0] == READ_6 ||
- cmd->cmnd[0] == READ_10 || cmd->cmnd[0] == READ_12) {
- for(z = 0; (x > (1 << z)) && (z <= 11); z++)
- /* nothing */;
- cp->sizeindex = z;
- }
-}
-
-
-void eata_int_handler(int irq, void *dev_id, struct pt_regs * regs)
-{
- uint i, result = 0;
- uint hba_stat, scsi_stat, eata_stat;
- Scsi_Cmnd *cmd;
- struct eata_ccb *ccb;
- struct eata_sp *sp;
- uint base;
- uint x;
- struct Scsi_Host *sh;
-
- for (x = 1, sh = first_HBA; x <= registered_HBAs; x++, sh = SD(sh)->next) {
- if (sh->irq != irq)
- continue;
-
- while(inb((uint)sh->base + HA_RAUXSTAT) & HA_AIRQ) {
-
- int_counter++;
-
- sp = &SD(sh)->sp;
-#ifdef __mips__
- sys_cacheflush(sp, sizeof(struct eata_sp), 2);
-#endif
- ccb = sp->ccb;
-
- if(ccb == NULL) {
- eata_stat = inb((uint)sh->base + HA_RSTATUS);
- printk("eata_dma: int_handler, Spurious IRQ %d "
- "received. CCB pointer not set.\n", irq);
- break;
- }
-
- cmd = ccb->cmd;
- base = (uint) cmd->host->base;
- hba_stat = sp->hba_stat;
-
- scsi_stat = (sp->scsi_stat >> 1) & 0x1f;
-
- if (sp->EOC == FALSE) {
- eata_stat = inb(base + HA_RSTATUS);
- printk(KERN_WARNING "eata_dma: int_handler, board: %x cmd %lx "
- "returned unfinished.\n"
- "EATA: %x HBA: %x SCSI: %x spadr %lx spadrirq %lx, "
- "irq%d\n", base, (long)ccb, eata_stat, hba_stat,
- scsi_stat,(long)&status, (long)&status[irq], irq);
- cmd->result = DID_ERROR << 16;
- ccb->status = FREE;
- cmd->scsi_done(cmd);
- break;
- }
-
- sp->EOC = FALSE; /* Clean out this flag */
-
- if (ccb->status == LOCKED || ccb->status == RESET) {
- printk("eata_dma: int_handler, reseted command pid %ld returned"
- "\n", cmd->pid);
- DBG(DBG_INTR && DBG_DELAY, DELAY(1));
- }
-
- eata_stat = inb(base + HA_RSTATUS);
- DBG(DBG_INTR, printk("IRQ %d received, base %#.4x, pid %ld, "
- "target: %x, lun: %x, ea_s: %#.2x, hba_s: "
- "%#.2x \n", irq, base, cmd->pid, cmd->target,
- cmd->lun, eata_stat, hba_stat));
-
- switch (hba_stat) {
- case HA_NO_ERROR: /* NO Error */
- if(HD(cmd)->do_latency == TRUE && ccb->timestamp)
- eata_latency_in(ccb, HD(cmd));
- result = DID_OK << 16;
- break;
- case HA_ERR_SEL_TO: /* Selection Timeout */
- case HA_ERR_CMD_TO: /* Command Timeout */
- result = DID_TIME_OUT << 16;
- break;
- case HA_BUS_RESET: /* SCSI Bus Reset Received */
- result = DID_RESET << 16;
- DBG(DBG_STATUS, printk(KERN_WARNING "scsi%d: BUS RESET "
- "received on cmd %ld\n",
- HD(cmd)->HBA_number, cmd->pid));
- break;
- case HA_INIT_POWERUP: /* Initial Controller Power-up */
- if (cmd->device->type != TYPE_TAPE)
- result = DID_BUS_BUSY << 16;
- else
- result = DID_ERROR << 16;
-
- for (i = 0; i < MAXTARGET; i++)
- DBG(DBG_STATUS, printk(KERN_DEBUG "scsi%d: cmd pid %ld "
- "returned with INIT_POWERUP\n",
- HD(cmd)->HBA_number, cmd->pid));
- break;
- case HA_CP_ABORT_NA:
- case HA_CP_ABORTED:
- result = DID_ABORT << 16;
- DBG(DBG_STATUS, printk(KERN_WARNING "scsi%d: aborted cmd "
- "returned\n", HD(cmd)->HBA_number));
- break;
- case HA_CP_RESET_NA:
- case HA_CP_RESET:
- HD(cmd)->resetlevel[cmd->channel] = 0;
- result = DID_RESET << 16;
- DBG(DBG_STATUS, printk(KERN_WARNING "scsi%d: reseted cmd "
- "pid %ldreturned\n",
- HD(cmd)->HBA_number, cmd->pid));
- case HA_SCSI_HUNG: /* SCSI Hung */
- printk(KERN_ERR "scsi%d: SCSI hung\n", HD(cmd)->HBA_number);
- result = DID_ERROR << 16;
- break;
- case HA_RSENSE_FAIL: /* Auto Request-Sense Failed */
- DBG(DBG_STATUS, printk(KERN_ERR "scsi%d: Auto Request Sense "
- "Failed\n", HD(cmd)->HBA_number));
- result = DID_ERROR << 16;
- break;
- case HA_UNX_BUSPHASE: /* Unexpected Bus Phase */
- case HA_UNX_BUS_FREE: /* Unexpected Bus Free */
- case HA_BUS_PARITY: /* Bus Parity Error */
- case HA_UNX_MSGRJCT: /* Unexpected Message Reject */
- case HA_RESET_STUCK: /* SCSI Bus Reset Stuck */
- case HA_PARITY_ERR: /* Controller Ram Parity */
- default:
- result = DID_ERROR << 16;
- break;
- }
- cmd->result = result | (scsi_stat << 1);
-
-#if DBG_INTR2
- if (scsi_stat || result || hba_stat || eata_stat != 0x50
- || cmd->scsi_done == NULL || cmd->device->id == 7)
- printk("HBA: %d, channel %d, id: %d, lun %d, pid %ld:\n"
- "eata_stat %#x, hba_stat %#.2x, scsi_stat %#.2x, "
- "sense_key: %#x, result: %#.8x\n", x,
- cmd->device->channel, cmd->device->id, cmd->device->lun,
- cmd->pid, eata_stat, hba_stat, scsi_stat,
- cmd->sense_buffer[2] & 0xf, cmd->result);
- DBG(DBG_INTR&&DBG_DELAY,DELAY(1));
-#endif
-
- ccb->status = FREE; /* now we can release the slot */
- cmd->scsi_done(cmd);
- }
- }
-
- return;
-}
-
-inline int eata_send_command(u32 addr, u32 base, u8 command)
-{
- long loop = R_LIMIT;
-
- while (inb(base + HA_RAUXSTAT) & HA_ABUSY)
- if (--loop == 0)
- return(FALSE);
-
- if(addr != (u32) NULL)
- addr = virt_to_bus((void *)addr);
-
- /*
- * This is overkill.....but the MIPSen seem to need this
- * and it will be optimized away for i86 and ALPHA machines.
- */
- flush_cache_all();
-
- /* And now the address in nice little byte chunks */
-#ifdef __LITTLE_ENDIAN
- outb(addr, base + HA_WDMAADDR);
- outb(addr >> 8, base + HA_WDMAADDR + 1);
- outb(addr >> 16, base + HA_WDMAADDR + 2);
- outb(addr >> 24, base + HA_WDMAADDR + 3);
-#else
- outb(addr >> 24, base + HA_WDMAADDR);
- outb(addr >> 16, base + HA_WDMAADDR + 1);
- outb(addr >> 8, base + HA_WDMAADDR + 2);
- outb(addr, base + HA_WDMAADDR + 3);
-#endif
- outb(command, base + HA_WCOMMAND);
- return(TRUE);
-}
-
-inline int eata_send_immediate(u32 base, u32 addr, u8 ifc, u8 code, u8 code2)
-{
- if(addr != (u32) NULL)
- addr = virt_to_bus((void *)addr);
-
- /*
- * This is overkill.....but the MIPSen seem to need this
- * and it will be optimized away for i86 and ALPHA machines.
- */
- flush_cache_all();
-
- outb(0x0, base + HA_WDMAADDR - 1);
- if(addr){
-#ifdef __LITTLE_ENDIAN
- outb(addr, base + HA_WDMAADDR);
- outb(addr >> 8, base + HA_WDMAADDR + 1);
- outb(addr >> 16, base + HA_WDMAADDR + 2);
- outb(addr >> 24, base + HA_WDMAADDR + 3);
-#else
- outb(addr >> 24, base + HA_WDMAADDR);
- outb(addr >> 16, base + HA_WDMAADDR + 1);
- outb(addr >> 8, base + HA_WDMAADDR + 2);
- outb(addr, base + HA_WDMAADDR + 3);
-#endif
- } else {
- outb(0x0, base + HA_WDMAADDR);
- outb(0x0, base + HA_WDMAADDR + 1);
- outb(code2, base + HA_WCODE2);
- outb(code, base + HA_WCODE);
- }
-
- outb(ifc, base + HA_WIFC);
- outb(EATA_CMD_IMMEDIATE, base + HA_WCOMMAND);
- return(TRUE);
-}
-
-int eata_queue(Scsi_Cmnd * cmd, void (* done) (Scsi_Cmnd *))
-{
- unsigned int i, x, y;
- ulong flags;
- hostdata *hd;
- struct Scsi_Host *sh;
- struct eata_ccb *ccb;
- struct scatterlist *sl;
-
-
- save_flags(flags);
- cli();
-
-#if 0
- for (x = 1, sh = first_HBA; x <= registered_HBAs; x++, sh = SD(sh)->next) {
- if(inb((uint)sh->base + HA_RAUXSTAT) & HA_AIRQ) {
- printk("eata_dma: scsi%d interrupt pending in eata_queue.\n"
- " Calling interrupt handler.\n", sh->host_no);
- eata_int_handler(sh->irq, 0, 0);
- }
- }
-#endif
-
- queue_counter++;
-
- hd = HD(cmd);
- sh = cmd->host;
-
- if (cmd->cmnd[0] == REQUEST_SENSE && cmd->sense_buffer[0] != 0) {
- DBG(DBG_REQSENSE, printk(KERN_DEBUG "Tried to REQUEST SENSE\n"));
- cmd->result = DID_OK << 16;
- done(cmd);
-
- return(0);
- }
-
- /* check for free slot */
- for (y = hd->last_ccb + 1, x = 0; x < sh->can_queue; x++, y++) {
- if (y >= sh->can_queue)
- y = 0;
- if (hd->ccb[y].status == FREE)
- break;
- }
-
- hd->last_ccb = y;
-
- if (x >= sh->can_queue) {
- cmd->result = DID_BUS_BUSY << 16;
- DBG(DBG_QUEUE && DBG_ABNORM,
- printk(KERN_CRIT "eata_queue pid %ld, HBA QUEUE FULL..., "
- "returning DID_BUS_BUSY\n", cmd->pid));
- done(cmd);
- restore_flags(flags);
- return(0);
- }
- ccb = &hd->ccb[y];
-
- memset(ccb, 0, sizeof(struct eata_ccb) - sizeof(struct eata_sg_list *));
-
- ccb->status = USED; /* claim free slot */
-
- restore_flags(flags);
-
- DBG(DBG_QUEUE, printk("eata_queue pid %ld, target: %x, lun: %x, y %d\n",
- cmd->pid, cmd->target, cmd->lun, y));
- DBG(DBG_QUEUE && DBG_DELAY, DELAY(1));
-
- if(hd->do_latency == TRUE)
- eata_latency_out(ccb, cmd);
-
- cmd->scsi_done = (void *)done;
-
- switch (cmd->cmnd[0]) {
- case CHANGE_DEFINITION: case COMPARE: case COPY:
- case COPY_VERIFY: case LOG_SELECT: case MODE_SELECT:
- case MODE_SELECT_10: case SEND_DIAGNOSTIC: case WRITE_BUFFER:
- case FORMAT_UNIT: case REASSIGN_BLOCKS: case RESERVE:
- case SEARCH_EQUAL: case SEARCH_HIGH: case SEARCH_LOW:
- case WRITE_6: case WRITE_10: case WRITE_VERIFY:
- case UPDATE_BLOCK: case WRITE_LONG: case WRITE_SAME:
- case SEARCH_HIGH_12: case SEARCH_EQUAL_12: case SEARCH_LOW_12:
- case WRITE_12: case WRITE_VERIFY_12: case SET_WINDOW:
- case MEDIUM_SCAN: case SEND_VOLUME_TAG:
- case 0xea: /* alternate number for WRITE LONG */
- ccb->DataOut = TRUE; /* Output mode */
- break;
- case TEST_UNIT_READY:
- default:
- ccb->DataIn = TRUE; /* Input mode */
- }
-
- /* FIXME: This will have to be changed once the midlevel driver
- * allows different HBA IDs on every channel.
- */
- if (cmd->target == sh->this_id)
- ccb->Interpret = TRUE; /* Interpret command */
-
- if (cmd->use_sg) {
- ccb->scatter = TRUE; /* SG mode */
- if (ccb->sg_list == NULL) {
- ccb->sg_list = kmalloc(sh->sg_tablesize * sizeof(struct
eata_sg_list),
- GFP_ATOMIC | GFP_DMA);
- }
- if (ccb->sg_list == NULL)
- panic("eata_dma: Run out of DMA memory for SG lists !\n");
- ccb->cp_dataDMA = htonl(virt_to_bus(ccb->sg_list));
-
- ccb->cp_datalen = htonl(cmd->use_sg * sizeof(struct eata_sg_list));
- sl=(struct scatterlist *)cmd->request_buffer;
- for(i = 0; i < cmd->use_sg; i++, sl++){
- ccb->sg_list[i].data = htonl(virt_to_bus(sl->address));
- ccb->sg_list[i].len = htonl((u32) sl->length);
- }
- } else {
- ccb->scatter = FALSE;
- ccb->cp_datalen = htonl(cmd->request_bufflen);
- ccb->cp_dataDMA = htonl(virt_to_bus(cmd->request_buffer));
- }
-
- ccb->Auto_Req_Sen = TRUE;
- ccb->cp_reqDMA = htonl(virt_to_bus(cmd->sense_buffer));
- ccb->reqlen = sizeof(cmd->sense_buffer);
-
- ccb->cp_id = cmd->target;
- ccb->cp_channel = cmd->channel;
- ccb->cp_lun = cmd->lun;
- ccb->cp_dispri = TRUE;
- ccb->cp_identify = TRUE;
- memcpy(ccb->cp_cdb, cmd->cmnd, cmd->cmd_len);
-
- ccb->cp_statDMA = htonl(virt_to_bus(&(hd->sp)));
-
- ccb->cp_viraddr = ccb; /* This will be passed thru, so we don't need to
- * convert it */
- ccb->cmd = cmd;
- cmd->host_scribble = (char *)&hd->ccb[y];
-
- if(eata_send_command((u32) ccb, (u32) sh->base, EATA_CMD_DMA_SEND_CP) ==
FALSE) {
- cmd->result = DID_BUS_BUSY << 16;
- DBG(DBG_QUEUE && DBG_ABNORM,
- printk("eata_queue target %d, pid %ld, HBA busy, "
- "returning DID_BUS_BUSY\n",cmd->target, cmd->pid));
- ccb->status = FREE;
- done(cmd);
- return(0);
- }
- DBG(DBG_QUEUE, printk("Queued base %#.4x pid: %ld target: %x lun: %x "
- "slot %d irq %d\n", (s32)sh->base, cmd->pid,
- cmd->target, cmd->lun, y, sh->irq));
- DBG(DBG_QUEUE && DBG_DELAY, DELAY(1));
-
- return(0);
-}
-
-
-int eata_abort(Scsi_Cmnd * cmd)
-{
- ulong loop = HZ / 2;
- ulong flags;
- int x;
- struct Scsi_Host *sh;
-
- save_flags(flags);
- cli();
-
- DBG(DBG_ABNORM, printk("eata_abort called pid: %ld target: %x lun: %x"
- " reason %x\n", cmd->pid, cmd->target, cmd->lun,
- cmd->abort_reason));
- DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
-
- /* Some interrupt controllers seem to loose interrupts */
- for (x = 1, sh = first_HBA; x <= registered_HBAs; x++, sh = SD(sh)->next) {
- if(inb((uint)sh->base + HA_RAUXSTAT) & HA_AIRQ) {
- printk("eata_dma: scsi%d interrupt pending in eata_abort.\n"
- " Calling interrupt handler.\n", sh->host_no);
- eata_int_handler(sh->irq, 0, 0);
- }
- }
-
- while (inb((u32)(cmd->host->base) + HA_RAUXSTAT) & HA_ABUSY) {
- if (--loop == 0) {
- printk("eata_dma: abort, timeout error.\n");
- DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
- restore_flags(flags);
- return (SCSI_ABORT_ERROR);
- }
- }
- if (CD(cmd)->status == RESET) {
- printk("eata_dma: abort, command reset error.\n");
- DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
- restore_flags(flags);
- return (SCSI_ABORT_ERROR);
- }
- if (CD(cmd)->status == LOCKED) {
- DBG(DBG_ABNORM, printk("eata_dma: abort, queue slot locked.\n"));
- DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
- restore_flags(flags);
- return (SCSI_ABORT_NOT_RUNNING);
- }
- if (CD(cmd)->status == USED) {
- DBG(DBG_ABNORM, printk("Returning: SCSI_ABORT_BUSY\n"));
- restore_flags(flags);
- return (SCSI_ABORT_BUSY); /* SNOOZE */
- }
- if (CD(cmd)->status == FREE) {
- DBG(DBG_ABNORM, printk("Returning: SCSI_ABORT_NOT_RUNNING\n"));
- restore_flags(flags);
- return (SCSI_ABORT_NOT_RUNNING);
- }
- restore_flags(flags);
- panic("eata_dma: abort: invalid slot status\n");
-}
-
-int eata_reset(Scsi_Cmnd * cmd, unsigned int resetflags)
-{
- uint x;
- ulong loop = loops_per_sec / 3;
- ulong flags;
- unchar success = FALSE;
- Scsi_Cmnd *sp;
- struct Scsi_Host *sh;
-
- save_flags(flags);
- cli();
-
- DBG(DBG_ABNORM, printk("eata_reset called pid:%ld target: %x lun: %x"
- " reason %x\n", cmd->pid, cmd->target, cmd->lun,
- cmd->abort_reason));
-
- for (x = 1, sh = first_HBA; x <= registered_HBAs; x++, sh = SD(sh)->next) {
- if(inb((uint)sh->base + HA_RAUXSTAT) & HA_AIRQ) {
- printk("eata_dma: scsi%d interrupt pending in eata_reset.\n"
- " Calling interrupt handler.\n", sh->host_no);
- eata_int_handler(sh->irq, 0, 0);
- }
- }
-
- if (HD(cmd)->state == RESET) {
- printk("eata_reset: exit, already in reset.\n");
- restore_flags(flags);
- DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
- return (SCSI_RESET_ERROR);
- }
-
- while (inb((u32)(cmd->host->base) + HA_RAUXSTAT) & HA_ABUSY)
- if (--loop == 0) {
- printk("eata_reset: exit, timeout error.\n");
- restore_flags(flags);
- DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
- return (SCSI_RESET_ERROR);
- }
-
- for (x = 0; x < cmd->host->can_queue; x++) {
- if (HD(cmd)->ccb[x].status == FREE)
- continue;
-
- if (HD(cmd)->ccb[x].status == LOCKED) {
- HD(cmd)->ccb[x].status = FREE;
- printk("eata_reset: locked slot %d forced free.\n", x);
- DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
- continue;
- }
-
-
- sp = HD(cmd)->ccb[x].cmd;
- HD(cmd)->ccb[x].status = RESET;
-
- if (sp == NULL)
- panic("eata_reset: slot %d, sp==NULL.\n", x);
-
- printk("eata_reset: slot %d in reset, pid %ld.\n", x, sp->pid);
-
- DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
-
- if (sp == cmd)
- success = TRUE;
- }
-
- /* hard reset the HBA */
- inb((u32) (cmd->host->base) + HA_RSTATUS); /* This might cause trouble */
- eata_send_command(0, (u32) cmd->host->base, EATA_CMD_RESET);
-
- HD(cmd)->state = RESET;
-
- DBG(DBG_ABNORM, printk("eata_reset: board reset done, enabling "
- "interrupts.\n"));
-
- DELAY(2); /* In theorie we should get interrupts and set free all
- * used queueslots */
-
- DBG(DBG_ABNORM, printk("eata_reset: interrupts disabled again.\n"));
- DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
-
- for (x = 0; x < cmd->host->can_queue; x++) {
-
- /* Skip slots already set free by interrupt and those that
- * are still LOCKED from the last reset */
- if (HD(cmd)->ccb[x].status != RESET)
- continue;
-
- sp = HD(cmd)->ccb[x].cmd;
- sp->result = DID_RESET << 16;
-
- /* This mailbox is still waiting for its interrupt */
- HD(cmd)->ccb[x].status = LOCKED;
-
- printk("eata_reset: slot %d locked, DID_RESET, pid %ld done.\n",
- x, sp->pid);
- DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
-
- sp->scsi_done(sp);
- }
-
- HD(cmd)->state = FALSE;
- restore_flags(flags);
-
- if (success) {
- DBG(DBG_ABNORM, printk("eata_reset: exit, pending.\n"));
- DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
- return (SCSI_RESET_PENDING);
- } else {
- DBG(DBG_ABNORM, printk("eata_reset: exit, wakeup.\n"));
- DBG(DBG_ABNORM && DBG_DELAY, DELAY(1));
- return (SCSI_RESET_PUNT);
- }
-}
-
-/* Here we try to determine the optimum queue depth for
- * each attached device.
- *
- * At the moment the algorithm is rather simple
- */
-static void eata_select_queue_depths(struct Scsi_Host *host,
- Scsi_Device *devicelist)
-{
- Scsi_Device *device;
- int devcount = 0;
- int factor = 0;
-
-#if CRIPPLE_QUEUE
- for(device = devicelist; device != NULL; device = device->next) {
- if(device->host == host)
- device->queue_depth = 2;
- }
-#else
- /* First we do a sample run go find out what we have */
- for(device = devicelist; device != NULL; device = device->next) {
- if (device->host == host) {
- devcount++;
- switch(device->type) {
- case TYPE_DISK:
- case TYPE_MOD:
- factor += TYPE_DISK_QUEUE;
- break;
- case TYPE_TAPE:
- factor += TYPE_TAPE_QUEUE;
- break;
- case TYPE_WORM:
- case TYPE_ROM:
- factor += TYPE_ROM_QUEUE;
- break;
- case TYPE_PROCESSOR:
- case TYPE_SCANNER:
- default:
- factor += TYPE_OTHER_QUEUE;
- break;
- }
- }
- }
-
- DBG(DBG_REGISTER, printk(KERN_DEBUG "scsi%d: needed queueslots %d\n",
- host->host_no, factor));
-
- if(factor == 0) /* We don't want to get a DIV BY ZERO error */
- factor = 1;
-
- factor = (SD(host)->queuesize * 10) / factor;
-
- DBG(DBG_REGISTER, printk(KERN_DEBUG "scsi%d: using factor %dE-1\n",
- host->host_no, factor));
-
- /* Now that have the factor we can set the individual queuesizes */
- for(device = devicelist; device != NULL; device = device->next) {
- if(device->host == host) {
- if(SD(device->host)->bustype != IS_ISA){
- switch(device->type) {
- case TYPE_DISK:
- case TYPE_MOD:
- device->queue_depth = (TYPE_DISK_QUEUE * factor) / 10;
- break;
- case TYPE_TAPE:
- device->queue_depth = (TYPE_TAPE_QUEUE * factor) / 10;
- break;
- case TYPE_WORM:
- case TYPE_ROM:
- device->queue_depth = (TYPE_ROM_QUEUE * factor) / 10;
- break;
- case TYPE_PROCESSOR:
- case TYPE_SCANNER:
- default:
- device->queue_depth = (TYPE_OTHER_QUEUE * factor) / 10;
- break;
- }
- } else /* ISA forces us to limit the queue depth because of the
- * bounce buffer memory overhead. I know this is cruel */
- device->queue_depth = 2;
-
- /*
- * It showed that we need to set an upper limit of commands
- * we can allow to queue for a single device on the bus.
- * If we get above that limit, the broken midlevel SCSI code
- * will produce bogus timeouts and aborts en masse. :-(
- */
- if(device->queue_depth > UPPER_DEVICE_QUEUE_LIMIT)
- device->queue_depth = UPPER_DEVICE_QUEUE_LIMIT;
- if(device->queue_depth == 0)
- device->queue_depth = 1;
-
- printk(KERN_INFO "scsi%d: queue depth for target %d on channel %d "
- "set to %d\n", host->host_no, device->id, device->channel,
- device->queue_depth);
- }
- }
-#endif
-}
-
-#if CHECK_BLINK
-int check_blink_state(long base)
-{
- ushort loops = 10;
- u32 blinkindicator;
- u32 state = 0x12345678;
- u32 oldstate = 0;
-
- blinkindicator = htonl(0x54504442);
- while ((loops--) && (state != oldstate)) {
- oldstate = state;
- state = inl((uint) base + 1);
- }
-
- DBG(DBG_BLINK, printk("Did Blink check. Status: %d\n",
- (state == oldstate) && (state == blinkindicator)));
-
- if ((state == oldstate) && (state == blinkindicator))
- return(TRUE);
- else
- return (FALSE);
-}
-#endif
-
-char * get_board_data(u32 base, u32 irq, u32 id)
-{
- struct eata_ccb *cp;
- struct eata_sp *sp;
- static char *buff;
- ulong i;
-
- cp = (struct eata_ccb *) scsi_init_malloc(sizeof(struct eata_ccb),
- GFP_ATOMIC | GFP_DMA);
- sp = (struct eata_sp *) scsi_init_malloc(sizeof(struct eata_sp),
- GFP_ATOMIC | GFP_DMA);
-
- buff = dma_scratch;
-
- memset(cp, 0, sizeof(struct eata_ccb));
- memset(sp, 0, sizeof(struct eata_sp));
- memset(buff, 0, 256);
-
- cp->DataIn = TRUE;
- cp->Interpret = TRUE; /* Interpret command */
- cp->cp_dispri = TRUE;
- cp->cp_identify = TRUE;
-
- cp->cp_datalen = htonl(56);
- cp->cp_dataDMA = htonl(virt_to_bus(buff));
- cp->cp_statDMA = htonl(virt_to_bus(sp));
- cp->cp_viraddr = cp;
-
- cp->cp_id = id;
- cp->cp_lun = 0;
-
- cp->cp_cdb[0] = INQUIRY;
- cp->cp_cdb[1] = 0;
- cp->cp_cdb[2] = 0;
- cp->cp_cdb[3] = 0;
- cp->cp_cdb[4] = 56;
- cp->cp_cdb[5] = 0;
-
- fake_int_base = (struct eata_register *) base;
- fake_int_result = FALSE;
- fake_int_happened = FALSE;
-
- eata_send_command((u32) cp, (u32) base, EATA_CMD_DMA_SEND_CP);
-
- i = jiffies + (3 * HZ);
- while (fake_int_happened == FALSE && jiffies <= i)
- barrier();
-
- DBG(DBG_INTR3, printk(KERN_DEBUG "fake_int_result: %#x hbastat %#x "
- "scsistat %#x, buff %p sp %p\n",
- fake_int_result, (u32) (sp->hba_stat /*& 0x7f*/),
- (u32) sp->scsi_stat, buff, sp));
-
- scsi_init_free((void *)cp, sizeof(struct eata_ccb));
- scsi_init_free((void *)sp, sizeof(struct eata_sp));
-
- if ((fake_int_result & HA_SERROR) || jiffies > i){
- printk(KERN_WARNING "eata_dma: trying to reset HBA at %x to clear "
- "possible blink state\n", base);
- /* hard reset the HBA */
- inb((u32) (base) + HA_RSTATUS);
- eata_send_command(0, base, EATA_CMD_RESET);
- DELAY(1);
- return (NULL);
- } else
- return (buff);
-}
-
-
-int get_conf_PIO(u32 base, struct get_conf *buf)
-{
- ulong loop = R_LIMIT;
- u16 *p;
-
- if(check_region(base, 9))
- return (FALSE);
-
- memset(buf, 0, sizeof(struct get_conf));
-
- while (inb(base + HA_RSTATUS) & HA_SBUSY)
- if (--loop == 0)
- return (FALSE);
-
- fake_int_base = (struct eata_register *) base;
- fake_int_result = FALSE;
- fake_int_happened = FALSE;
-
- DBG(DBG_PIO && DBG_PROBE,
- printk("Issuing PIO READ CONFIG to HBA at %#x\n", base));
- eata_send_command(0, base, EATA_CMD_PIO_READ_CONFIG);
-
- loop = R_LIMIT;
- for (p = (u16 *) buf;
- (long)p <= ((long)buf + (sizeof(struct get_conf) / 2)); p++) {
- while (!(inb(base + HA_RSTATUS) & HA_SDRQ))
- if (--loop == 0)
- return (FALSE);
-
- loop = R_LIMIT;
- *p = inw(base + HA_RDATA);
- }
-
- if (!(inb(base + HA_RSTATUS) & HA_SERROR)) { /* Error ? */
- if (htonl(EATA_SIGNATURE) == buf->signature) {
- DBG(DBG_PIO&&DBG_PROBE, printk("EATA Controller found at %x "
- "EATA Level: %x\n", (uint) base,
- (uint) (buf->version)));
-
- while (inb(base + HA_RSTATUS) & HA_SDRQ)
- inw(base + HA_RDATA);
- return (TRUE);
- }
- } else {
- DBG(DBG_PROBE, printk("eata_dma: get_conf_PIO, error during transfer "
- "for HBA at %lx\n", (long)base));
- }
- return (FALSE);
-}
-
-
-void print_config(struct get_conf *gc)
-{
- printk("LEN: %d ver:%d OCS:%d TAR:%d TRNXFR:%d MORES:%d DMAS:%d\n",
- (u32) ntohl(gc->len), gc->version,
- gc->OCS_enabled, gc->TAR_support, gc->TRNXFR, gc->MORE_support,
- gc->DMA_support);
- printk("DMAV:%d HAAV:%d SCSIID0:%d ID1:%d ID2:%d QUEUE:%d SG:%d SEC:%d\n",
- gc->DMA_valid, gc->HAA_valid, gc->scsi_id[3], gc->scsi_id[2],
- gc->scsi_id[1], ntohs(gc->queuesiz), ntohs(gc->SGsiz), gc->SECOND);
- printk("IRQ:%d IRQT:%d DMAC:%d FORCADR:%d SG_64K:%d SG_UAE:%d MID:%d "
- "MCH:%d MLUN:%d\n",
- gc->IRQ, gc->IRQ_TR, (8 - gc->DMA_channel) & 7, gc->FORCADR,
- gc->SG_64K, gc->SG_UAE, gc->MAX_ID, gc->MAX_CHAN, gc->MAX_LUN);
- printk("RIDQ:%d PCI:%d EISA:%d\n",
- gc->ID_qest, gc->is_PCI, gc->is_EISA);
- DBG(DPT_DEBUG, DELAY(14));
-}
-
-short register_HBA(u32 base, struct get_conf *gc, Scsi_Host_Template * tpnt,
- u8 bustype)
-{
- ulong size = 0;
- unchar dma_channel = 0;
- char *buff = 0;
- unchar bugs = 0;
- struct Scsi_Host *sh;
- hostdata *hd;
- int x;
-
-
- DBG(DBG_REGISTER, print_config(gc));
-
- if (gc->DMA_support == FALSE) {
- printk("The EATA HBA at %#.4x does not support DMA.\n"
- "Please use the EATA-PIO driver.\n", base);
- return (FALSE);
- }
- if(gc->HAA_valid == FALSE || ntohl(gc->len) < 0x22)
- gc->MAX_CHAN = 0;
-
- if (reg_IRQ[gc->IRQ] == FALSE) { /* Interrupt already registered ? */
- if (!request_irq(gc->IRQ, (void *) eata_fake_int_handler, SA_INTERRUPT,
- "eata_dma", NULL)){
- reg_IRQ[gc->IRQ]++;
- if (!gc->IRQ_TR)
- reg_IRQL[gc->IRQ] = TRUE; /* IRQ is edge triggered */
- } else {
- printk("Couldn't allocate IRQ %d, Sorry.", gc->IRQ);
- return (FALSE);
- }
- } else { /* More than one HBA on this IRQ */
- if (reg_IRQL[gc->IRQ] == TRUE) {
- printk("Can't support more than one HBA on this IRQ,\n"
- " if the IRQ is edge triggered. Sorry.\n");
- return (FALSE);
- } else
- reg_IRQ[gc->IRQ]++;
- }
-
-
- /* If DMA is supported but DMA_valid isn't set to indicate that
- * the channel number is given we must have pre 2.0 firmware (1.7?)
- * which leaves us to guess since the "newer ones" also don't set the
- * DMA_valid bit.
- */
- if (gc->DMA_support && !gc->DMA_valid && gc->DMA_channel) {
- printk(KERN_WARNING "eata_dma: If you are using a pre 2.0 firmware "
- "please update it !\n"
- " You can get new firmware releases from ftp.dpt.com\n");
- gc->DMA_channel = (base == 0x1f0 ? 3 /* DMA=5 */ : 2 /* DMA=6 */);
- gc->DMA_valid = TRUE;
- }
-
- /* if gc->DMA_valid it must be an ISA HBA and we have to register it */
- dma_channel = BUSMASTER;
- if (gc->DMA_valid) {
- if (request_dma(dma_channel = (8 - gc->DMA_channel) & 7, "eata_dma")) {
- printk(KERN_WARNING "Unable to allocate DMA channel %d for ISA HBA"
- " at %#.4x.\n", dma_channel, base);
- reg_IRQ[gc->IRQ]--;
- if (reg_IRQ[gc->IRQ] == 0)
- free_irq(gc->IRQ, NULL);
- if (gc->IRQ_TR == FALSE)
- reg_IRQL[gc->IRQ] = FALSE;
- return (FALSE);
- }
- }
-
- if (dma_channel != BUSMASTER) {
- disable_dma(dma_channel);
- clear_dma_ff(dma_channel);
- set_dma_mode(dma_channel, DMA_MODE_CASCADE);
- enable_dma(dma_channel);
- }
-
- if (bustype != IS_EISA && bustype != IS_ISA)
- buff = get_board_data(base, gc->IRQ, gc->scsi_id[3]);
-
- if (buff == NULL) {
- if (bustype == IS_EISA || bustype == IS_ISA) {
- bugs = bugs || BROKEN_INQUIRY;
- } else {
- if (gc->DMA_support == FALSE)
- printk(KERN_WARNING "HBA at %#.4x doesn't support DMA. "
- "Sorry\n", base);
- else
- printk(KERN_WARNING "HBA at %#.4x does not react on INQUIRY. "
- "Sorry.\n", base);
- if (gc->DMA_valid)
- free_dma(dma_channel);
- reg_IRQ[gc->IRQ]--;
- if (reg_IRQ[gc->IRQ] == 0)
- free_irq(gc->IRQ, NULL);
- if (gc->IRQ_TR == FALSE)
- reg_IRQL[gc->IRQ] = FALSE;
- return (FALSE);
- }
- }
-
- if (gc->DMA_support == FALSE && buff != NULL)
- printk(KERN_WARNING "HBA %.12sat %#.4x doesn't set the DMA_support "
- "flag correctly.\n", &buff[16], base);
-
- request_region(base, 9, "eata_dma"); /* We already checked the
- * availability, so this
- * should not fail.
- */
-
- if(ntohs(gc->queuesiz) == 0) {
- gc->queuesiz = ntohs(64);
- printk(KERN_WARNING "Warning: Queue size has to be corrected. Assuming"
- " 64 queueslots\n"
- " This might be a PM2012B with a defective Firmware\n"
- " Contact DPT address@hidden for an upgrade\n");
- }
-
- size = sizeof(hostdata) + ((sizeof(struct eata_ccb) + sizeof(long))
- * ntohs(gc->queuesiz));
-
- DBG(DBG_REGISTER, printk("scsi_register size: %ld\n", size));
-
- sh = scsi_register(tpnt, size);
-
- if(sh != NULL) {
-
- hd = SD(sh);
-
- memset(hd->reads, 0, sizeof(u32) * 26);
-
- sh->select_queue_depths = eata_select_queue_depths;
-
- hd->bustype = bustype;
-
- /*
- * If we are using a ISA board, we can't use extended SG,
- * because we would need excessive amounts of memory for
- * bounce buffers.
- */
- if (gc->SG_64K==TRUE && ntohs(gc->SGsiz)==64 && hd->bustype!=IS_ISA){
- sh->sg_tablesize = SG_SIZE_BIG;
- } else {
- sh->sg_tablesize = ntohs(gc->SGsiz);
- if (sh->sg_tablesize > SG_SIZE || sh->sg_tablesize == 0) {
- if (sh->sg_tablesize == 0)
- printk(KERN_WARNING "Warning: SG size had to be fixed.\n"
- "This might be a PM2012 with a defective Firmware"
- "\nContact DPT address@hidden for an upgrade\n");
- sh->sg_tablesize = SG_SIZE;
- }
- }
- hd->sgsize = sh->sg_tablesize;
- }
-
- if(sh != NULL) {
- sh->can_queue = hd->queuesize = ntohs(gc->queuesiz);
- sh->cmd_per_lun = 0;
- }
-
- if(sh == NULL) {
- DBG(DBG_REGISTER, printk(KERN_NOTICE "eata_dma: couldn't register HBA"
- " at%x \n", base));
- scsi_unregister(sh);
- if (gc->DMA_valid)
- free_dma(dma_channel);
-
- reg_IRQ[gc->IRQ]--;
- if (reg_IRQ[gc->IRQ] == 0)
- free_irq(gc->IRQ, NULL);
- if (gc->IRQ_TR == FALSE)
- reg_IRQL[gc->IRQ] = FALSE;
- return (FALSE);
- }
-
-
- hd->broken_INQUIRY = (bugs & BROKEN_INQUIRY);
-
- if(hd->broken_INQUIRY == TRUE) {
- strcpy(hd->vendor, "DPT");
- strcpy(hd->name, "??????????");
- strcpy(hd->revision, "???.?");
- hd->firmware_revision = 0;
- } else {
- strncpy(hd->vendor, &buff[8], 8);
- hd->vendor[8] = 0;
- strncpy(hd->name, &buff[16], 17);
- hd->name[17] = 0;
- hd->revision[0] = buff[32];
- hd->revision[1] = buff[33];
- hd->revision[2] = buff[34];
- hd->revision[3] = '.';
- hd->revision[4] = buff[35];
- hd->revision[5] = 0;
- hd->firmware_revision = (buff[32] << 24) + (buff[33] << 16)
- + (buff[34] << 8) + buff[35];
- }
-
- if (hd->firmware_revision >= (('0'<<24) + ('7'<<16) + ('G'<< 8) + '0'))
- hd->immediate_support = 1;
- else
- hd->immediate_support = 0;
-
- switch (ntohl(gc->len)) {
- case 0x1c:
- hd->EATA_revision = 'a';
- break;
- case 0x1e:
- hd->EATA_revision = 'b';
- break;
- case 0x22:
- hd->EATA_revision = 'c';
- break;
- case 0x24:
- hd->EATA_revision = 'z';
- default:
- hd->EATA_revision = '?';
- }
-
-
- if(ntohl(gc->len) >= 0x22) {
- sh->max_id = gc->MAX_ID + 1;
- sh->max_lun = gc->MAX_LUN + 1;
- } else {
- sh->max_id = 8;
- sh->max_lun = 8;
- }
-
- hd->HBA_number = sh->host_no;
- hd->channel = gc->MAX_CHAN;
- sh->max_channel = gc->MAX_CHAN;
- sh->unique_id = base;
- sh->base = (char *) base;
- sh->io_port = base;
- sh->n_io_port = 9;
- sh->irq = gc->IRQ;
- sh->dma_channel = dma_channel;
-
- /* FIXME:
- * SCSI midlevel code should support different HBA ids on every channel
- */
- sh->this_id = gc->scsi_id[3];
-
- if (gc->SECOND)
- hd->primary = FALSE;
- else
- hd->primary = TRUE;
-
- sh->wish_block = FALSE;
-
- if (hd->bustype != IS_ISA) {
- sh->unchecked_isa_dma = FALSE;
- } else {
- sh->unchecked_isa_dma = TRUE; /* We're doing ISA DMA */
- }
-
- for(x = 0; x <= 11; x++){ /* Initialize min. latency */
- hd->writes_lat[x][1] = 0xffffffff;
- hd->reads_lat[x][1] = 0xffffffff;
- }
- hd->all_lat[1] = 0xffffffff;
-
- hd->next = NULL; /* build a linked list of all HBAs */
- hd->prev = last_HBA;
- if(hd->prev != NULL)
- SD(hd->prev)->next = sh;
- last_HBA = sh;
- if (first_HBA == NULL)
- first_HBA = sh;
- registered_HBAs++;
-
- return (TRUE);
-}
-
-
-
-void find_EISA(struct get_conf *buf, Scsi_Host_Template * tpnt)
-{
- u32 base;
- int i;
-
-#if CHECKPAL
- u8 pal1, pal2, pal3;
-#endif
-
- for (i = 0; i < MAXEISA; i++) {
- if (EISAbases[i] == TRUE) { /* Still a possibility ? */
-
- base = 0x1c88 + (i * 0x1000);
-#if CHECKPAL
- pal1 = inb((u16)base - 8);
- pal2 = inb((u16)base - 7);
- pal3 = inb((u16)base - 6);
-
- if (((pal1 == DPT_ID1) && (pal2 == DPT_ID2)) ||
- ((pal1 == NEC_ID1) && (pal2 == NEC_ID2) && (pal3 == NEC_ID3))||
- ((pal1 == ATT_ID1) && (pal2 == ATT_ID2) && (pal3 == ATT_ID3))){
- DBG(DBG_PROBE, printk("EISA EATA id tags found: %x %x %x \n",
- (int)pal1, (int)pal2, (int)pal3));
-#endif
- if (get_conf_PIO(base, buf) == TRUE) {
- if (buf->IRQ) {
- DBG(DBG_EISA, printk("Registering EISA HBA\n"));
- register_HBA(base, buf, tpnt, IS_EISA);
- } else
- printk("eata_dma: No valid IRQ. HBA removed from
list\n");
- }
-#if CHECK_BLINK
- else {
- if (check_blink_state(base))
- printk("HBA is in BLINK state. Consult your HBAs "
- "Manual to correct this.\n");
- }
-#endif
- /* Nothing found here so we take it from the list */
- EISAbases[i] = 0;
-#if CHECKPAL
- }
-#endif
- }
- }
- return;
-}
-
-void find_ISA(struct get_conf *buf, Scsi_Host_Template * tpnt)
-{
- int i;
-
- for (i = 0; i < MAXISA; i++) {
- if (ISAbases[i]) {
- if (get_conf_PIO(ISAbases[i],buf) == TRUE){
- DBG(DBG_ISA, printk("Registering ISA HBA\n"));
- register_HBA(ISAbases[i], buf, tpnt, IS_ISA);
- }
-#if CHECK_BLINK
- else {
- if (check_blink_state(ISAbases[i]))
- printk("HBA is in BLINK state. Consult your HBAs "
- "Manual to correct this.\n");
- }
-#endif
- ISAbases[i] = 0;
- }
- }
- return;
-}
-
-void find_PCI(struct get_conf *buf, Scsi_Host_Template * tpnt)
-{
-
-#ifndef CONFIG_PCI
- printk("eata_dma: kernel PCI support not enabled. Skipping scan for PCI
HBAs.\n");
-#else
-
- u8 pci_bus, pci_device_fn;
- static s16 pci_index = 0; /* Device index to PCI BIOS calls */
- u32 base = 0;
- u16 com_adr;
- u16 rev_device;
- u32 error, i, x;
- u8 pal1, pal2, pal3;
-
- if (pcibios_present()) {
- for (i = 0; i <= MAXPCI; ++i, ++pci_index) {
- if (pcibios_find_device(PCI_VENDOR_ID_DPT, PCI_DEVICE_ID_DPT,
- pci_index, &pci_bus, &pci_device_fn))
- break;
- DBG(DBG_PROBE && DBG_PCI,
- printk("eata_dma: find_PCI, HBA at bus %d, device %d,"
- " function %d, index %d\n", (s32)pci_bus,
- (s32)((pci_device_fn & 0xf8) >> 3),
- (s32)(pci_device_fn & 7), pci_index));
-
- if (!(error = pcibios_read_config_word(pci_bus, pci_device_fn,
- PCI_CLASS_DEVICE, &rev_device))) {
- if (rev_device == PCI_CLASS_STORAGE_SCSI) {
- if (!(error = pcibios_read_config_word(pci_bus,
- pci_device_fn, PCI_COMMAND,
- (u16 *) & com_adr))) {
- if (!((com_adr & PCI_COMMAND_IO) &&
- (com_adr & PCI_COMMAND_MASTER))) {
- printk("eata_dma: find_PCI, HBA has IO or"
- " BUSMASTER mode disabled\n");
- continue;
- }
- } else
- printk("eata_dma: find_PCI, error %x while reading "
- "PCI_COMMAND\n", error);
- } else
- printk("eata_dma: find_PCI, DEVICECLASSID %x didn't
match\n",
- rev_device);
- } else {
- printk("eata_dma: find_PCI, error %x while reading "
- "PCI_CLASS_BASE\n",
- error);
- continue;
- }
-
- if (!(error = pcibios_read_config_dword(pci_bus, pci_device_fn,
- PCI_BASE_ADDRESS_0, (int *) &base))){
-
- /* Check if the address is valid */
- if (base & 0x01) {
- base &= 0xfffffffe;
- /* EISA tag there ? */
- pal1 = inb(base);
- pal2 = inb(base + 1);
- pal3 = inb(base + 2);
- if (((pal1 == DPT_ID1) && (pal2 == DPT_ID2)) ||
- ((pal1 == NEC_ID1) && (pal2 == NEC_ID2) &&
- (pal3 == NEC_ID3)) ||
- ((pal1 == ATT_ID1) && (pal2 == ATT_ID2) &&
- (pal3 == ATT_ID3)))
- base += 0x08;
- else
- base += 0x10; /* Now, THIS is the real address */
-
- if (base != 0x1f8) {
- /* We didn't find it in the primary search */
- if (get_conf_PIO(base, buf) == TRUE) {
-
- /* OK. We made it till here, so we can go now
- * and register it. We only have to check and
- * eventually remove it from the EISA and ISA list
- */
- DBG(DBG_PCI, printk("Registering PCI HBA\n"));
- register_HBA(base, buf, tpnt, IS_PCI);
-
- if (base < 0x1000) {
- for (x = 0; x < MAXISA; ++x) {
- if (ISAbases[x] == base) {
- ISAbases[x] = 0;
- break;
- }
- }
- } else if ((base & 0x0fff) == 0x0c88)
- EISAbases[(base >> 12) & 0x0f] = 0;
- continue; /* break; */
- }
-#if CHECK_BLINK
- else if (check_blink_state(base) == TRUE) {
- printk("eata_dma: HBA is in BLINK state.\n"
- "Consult your HBAs manual to correct
this.\n");
- }
-#endif
- }
- }
- } else {
- printk("eata_dma: error %x while reading "
- "PCI_BASE_ADDRESS_0\n", error);
- }
- }
- } else {
- printk("eata_dma: No BIOS32 extensions present. This driver release "
- "still depends on it.\n"
- " Skipping scan for PCI HBAs. \n");
- }
-#endif /* #ifndef CONFIG_PCI */
- return;
-}
-
-int eata_detect(Scsi_Host_Template * tpnt)
-{
- struct Scsi_Host *HBA_ptr;
- struct get_conf gc;
- int i;
-
- DBG((DBG_PROBE && DBG_DELAY) || DPT_DEBUG,
- printk("Using lots of delays to let you read the debugging output\n"));
-
- tpnt->proc_dir = &proc_scsi_eata_dma;
-
- status = scsi_init_malloc(512, GFP_ATOMIC | GFP_DMA);
- dma_scratch = scsi_init_malloc(1024, GFP_ATOMIC | GFP_DMA);
-
- if(status == NULL || dma_scratch == NULL) {
- printk("eata_dma: can't allocate enough memory to probe for hosts !\n");
- return(0);
- }
-
- dma_scratch += 4;
-
- find_PCI(&gc, tpnt);
-
- find_EISA(&gc, tpnt);
-
- find_ISA(&gc, tpnt);
-
- for (i = 0; i < MAXIRQ; i++) { /* Now that we know what we have, we */
- if (reg_IRQ[i] >= 1){ /* exchange the interrupt handler which */
- free_irq(i, NULL); /* we used for probing with the real one */
- request_irq(i, (void *)(eata_int_handler), SA_INTERRUPT|SA_SHIRQ,
- "eata_dma", NULL);
- }
- }
-
- HBA_ptr = first_HBA;
-
- if (registered_HBAs != 0) {
- printk("EATA (Extended Attachment) driver version: %d.%d%s"
- "\ndeveloped in co-operation with DPT\n"
- "(c) 1993-96 Michael Neuffer, address@hidden",
- VER_MAJOR, VER_MINOR, VER_SUB);
- printk("Registered HBAs:");
- printk("\nHBA no. Boardtype Revis EATA Bus BaseIO IRQ"
- " DMA Ch ID Pr QS S/G IS\n");
- for (i = 1; i <= registered_HBAs; i++) {
- printk("scsi%-2d: %.12s v%s 2.0%c %s %#.4x %2d",
- HBA_ptr->host_no, SD(HBA_ptr)->name, SD(HBA_ptr)->revision,
- SD(HBA_ptr)->EATA_revision, (SD(HBA_ptr)->bustype == 'P')?
- "PCI ":(SD(HBA_ptr)->bustype == 'E')?"EISA":"ISA ",
- (u32) HBA_ptr->base, HBA_ptr->irq);
- if(HBA_ptr->dma_channel != BUSMASTER)
- printk(" %2x ", HBA_ptr->dma_channel);
- else
- printk(" %s", "BMST");
- printk(" %d %d %c %3d %3d %c\n",
- SD(HBA_ptr)->channel+1, HBA_ptr->this_id,
- (SD(HBA_ptr)->primary == TRUE)?'Y':'N',
- HBA_ptr->can_queue, HBA_ptr->sg_tablesize,
- (SD(HBA_ptr)->immediate_support == TRUE)?'Y':'N');
- HBA_ptr = SD(HBA_ptr)->next;
- }
- } else {
- scsi_init_free((void *)status, 512);
- }
-
- scsi_init_free((void *)dma_scratch - 4, 1024);
-
- DBG(DPT_DEBUG, DELAY(12));
-
- return(registered_HBAs);
-}
-
-#ifdef MODULE
-/* Eventually this will go into an include file, but this will be later */
-Scsi_Host_Template driver_template = EATA_DMA;
-#include "scsi_module.c"
-#endif
-
-/*
- * Overrides for Emacs so that we almost follow Linus's tabbing style.
- * Emacs will notice this stuff at the end of the file and automatically
- * adjust the settings for this buffer only. This must remain at the end
- * of the file.
- * ---------------------------------------------------------------------------
- * Local variables:
- * c-indent-level: 4
- * c-brace-imaginary-offset: 0
- * c-brace-offset: -4
- * c-argdecl-indent: 4
- * c-label-offset: -4
- * c-continued-statement-offset: 4
- * c-continued-brace-offset: 0
- * tab-width: 8
- * End:
- */
diff --git a/linux/src/drivers/scsi/eata_dma_proc.c
b/linux/src/drivers/scsi/eata_dma_proc.c
deleted file mode 100644
index 3a3a19a..0000000
--- a/linux/src/drivers/scsi/eata_dma_proc.c
+++ /dev/null
@@ -1,493 +0,0 @@
-
-void swap_statistics(u8 *p)
-{
- u32 y;
- u32 *lp, h_lp;
- u16 *sp, h_sp;
- u8 *bp;
-
- lp = (u32 *)p;
- sp = ((short *)lp) + 1; /* Convert Header */
- h_sp = *sp = ntohs(*sp);
- lp++;
-
- do {
- sp = (u16 *)lp; /* Convert SubHeader */
- *sp = ntohs(*sp);
- bp = (u8 *) lp;
- y = *(bp + 3);
- lp++;
- for (h_lp = (u32)lp; (u32)lp < h_lp + ((u32)*(bp + 3)); lp++)
- *lp = ntohl(*lp);
- }while ((u32)lp < ((u32)p) + 4 + h_sp);
-
-}
-
-/*
- * eata_set_info
- * buffer : pointer to the data that has been written to the hostfile
- * length : number of bytes written to the hostfile
- * HBA_ptr: pointer to the Scsi_Host struct
- */
-int eata_set_info(char *buffer, int length, struct Scsi_Host *HBA_ptr)
-{
- int orig_length = length;
-
- if (length >= 8 && strncmp(buffer, "eata_dma", 8) == 0) {
- buffer += 9;
- length -= 9;
- if(length >= 8 && strncmp(buffer, "latency", 7) == 0) {
- SD(HBA_ptr)->do_latency = TRUE;
- return(orig_length);
- }
-
- if(length >=10 && strncmp(buffer, "nolatency", 9) == 0) {
- SD(HBA_ptr)->do_latency = FALSE;
- return(orig_length);
- }
-
- printk("Unknown command:%s length: %d\n", buffer, length);
- } else
- printk("Wrong Signature:%10s\n", buffer);
-
- return(-EINVAL);
-}
-
-/*
- * eata_proc_info
- * inout : decides on the direction of the dataflow and the meaning of the
- * variables
- * buffer: If inout==FALSE data is being written to it else read from it
- * *start: If inout==FALSE start of the valid data in the buffer
- * offset: If inout==FALSE offset from the beginning of the imaginary file
- * from which we start writing into the buffer
- * length: If inout==FALSE max number of bytes to be written into the buffer
- * else number of bytes in the buffer
- */
-int eata_proc_info(char *buffer, char **start, off_t offset, int length,
- int hostno, int inout)
-{
-
- Scsi_Device *scd, SDev;
- struct Scsi_Host *HBA_ptr;
- Scsi_Cmnd scmd;
- char cmnd[10];
- static u8 buff[512];
- static u8 buff2[512];
- hst_cmd_stat *rhcs, *whcs;
- coco *cc;
- scsitrans *st;
- scsimod *sm;
- hobu *hb;
- scbu *sb;
- boty *bt;
- memco *mc;
- firm *fm;
- subinf *si;
- pcinf *pi;
- arrlim *al;
- int i, x;
- int size, len = 0;
- off_t begin = 0;
- off_t pos = 0;
- scd = NULL;
-
- HBA_ptr = first_HBA;
- for (i = 1; i <= registered_HBAs; i++) {
- if (HBA_ptr->host_no == hostno)
- break;
- HBA_ptr = SD(HBA_ptr)->next;
- }
-
- if(inout == TRUE) /* Has data been written to the file ? */
- return(eata_set_info(buffer, length, HBA_ptr));
-
- if (offset == 0)
- memset(buff, 0, sizeof(buff));
-
- cc = (coco *) (buff + 0x148);
- st = (scsitrans *)(buff + 0x164);
- sm = (scsimod *) (buff + 0x16c);
- hb = (hobu *) (buff + 0x172);
- sb = (scbu *) (buff + 0x178);
- bt = (boty *) (buff + 0x17e);
- mc = (memco *) (buff + 0x186);
- fm = (firm *) (buff + 0x18e);
- si = (subinf *) (buff + 0x196);
- pi = (pcinf *) (buff + 0x19c);
- al = (arrlim *) (buff + 0x1a2);
-
- size = sprintf(buffer+len, "EATA (Extended Attachment) driver version: "
- "%d.%d%s\n",VER_MAJOR, VER_MINOR, VER_SUB);
- len += size; pos = begin + len;
- size = sprintf(buffer + len, "queued commands: %10ld\n"
- "processed interrupts:%10ld\n", queue_counter, int_counter);
- len += size; pos = begin + len;
-
- size = sprintf(buffer + len, "\nscsi%-2d: HBA %.10s\n",
- HBA_ptr->host_no, SD(HBA_ptr)->name);
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, "Firmware revision: v%s\n",
- SD(HBA_ptr)->revision);
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, "Hardware Configuration:\n");
- len += size;
- pos = begin + len;
-
- if(SD(HBA_ptr)->broken_INQUIRY == TRUE) {
- if (HBA_ptr->dma_channel == BUSMASTER)
- size = sprintf(buffer + len, "DMA: BUSMASTER\n");
- else
- size = sprintf(buffer + len, "DMA: %d\n", HBA_ptr->dma_channel);
- len += size;
- pos = begin + len;
-
- size = sprintf(buffer + len, "Base IO : %#.4x\n", (u32) HBA_ptr->base);
- len += size;
- pos = begin + len;
-
- size = sprintf(buffer + len, "Host Bus: EISA\n");
- len += size;
- pos = begin + len;
-
- } else {
- memset(&SDev, 0, sizeof(Scsi_Device));
- memset(&scmd, 0, sizeof(Scsi_Cmnd));
-
- SDev.host = HBA_ptr;
- SDev.id = HBA_ptr->this_id;
- SDev.lun = 0;
- SDev.channel = 0;
-
- cmnd[0] = LOG_SENSE;
- cmnd[1] = 0;
- cmnd[2] = 0x33 + (3<<6);
- cmnd[3] = 0;
- cmnd[4] = 0;
- cmnd[5] = 0;
- cmnd[6] = 0;
- cmnd[7] = 0x00;
- cmnd[8] = 0x66;
- cmnd[9] = 0;
-
- scmd.cmd_len = 10;
-
- scmd.host = HBA_ptr;
- scmd.device = &SDev;
- scmd.target = HBA_ptr->this_id;
- scmd.lun = 0;
- scmd.channel = 0;
- scmd.use_sg = 0;
-
- /*
- * Do the command and wait for it to finish.
- */
- {
- struct semaphore sem = MUTEX_LOCKED;
- scmd.request.rq_status = RQ_SCSI_BUSY;
- scmd.request.sem = &sem;
- scsi_do_cmd (&scmd, cmnd, buff + 0x144, 0x66,
- eata_scsi_done, 1 * HZ, 1);
- down(&sem);
- }
-
- size = sprintf(buffer + len, "IRQ: %2d, %s triggered\n", cc->interrupt,
- (cc->intt == TRUE)?"level":"edge");
- len += size;
- pos = begin + len;
- if (HBA_ptr->dma_channel == 0xff)
- size = sprintf(buffer + len, "DMA: BUSMASTER\n");
- else
- size = sprintf(buffer + len, "DMA: %d\n", HBA_ptr->dma_channel);
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, "CPU: MC680%02d %dMHz\n", bt->cpu_type,
- bt->cpu_speed);
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, "Base IO : %#.4x\n", (u32) HBA_ptr->base);
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, "Host Bus: %s\n",
- (SD(HBA_ptr)->bustype == IS_PCI)?"PCI ":
- (SD(HBA_ptr)->bustype == IS_EISA)?"EISA":"ISA ");
-
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, "SCSI Bus:%s%s Speed: %sMB/sec. %s\n",
- (sb->wide == TRUE)?" WIDE":"",
- (sb->dif == TRUE)?" DIFFERENTIAL":"",
- (sb->speed == 0)?"5":(sb->speed == 1)?"10":"20",
- (sb->ext == TRUE)?"With external cable detection":"");
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, "SCSI channel expansion Module: %s
present\n",
- (bt->sx1 == TRUE)?"SX1 (one channel)":
- ((bt->sx2 == TRUE)?"SX2 (two channels)":"not"));
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, "SmartRAID hardware: %spresent.\n",
- (cc->srs == TRUE)?"":"not ");
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, " Type: %s\n",
- ((cc->key == TRUE)?((bt->dmi == TRUE)?"integrated"
- :((bt->dm4 == TRUE)?"DM401X"
- :(bt->dm4k == TRUE)?"DM4000"
- :"-"))
- :"-"));
- len += size;
- pos = begin + len;
-
- size = sprintf(buffer + len, " Max array groups: %d\n",
- (al->code == 0x0e)?al->max_groups:7);
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, " Max drives per RAID 0 array: %d\n",
- (al->code == 0x0e)?al->raid0_drv:7);
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, " Max drives per RAID 3/5 array: %d\n",
- (al->code == 0x0e)?al->raid35_drv:7);
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, "Cache Module: %spresent.\n",
- (cc->csh)?"":"not ");
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, " Type: %s\n",
- ((cc->csh == TRUE)?((bt->cmi == TRUE)?"integrated"
- :((bt->cm4 == TRUE)?"CM401X"
- :((bt->cm4k == TRUE)?"CM4000"
- :"-")))
- :"-"));
- len += size;
- pos = begin + len;
- for (x = 0; x <= 3; x++) {
- size = sprintf(buffer + len, " Bank%d: %dMB with%s ECC\n",x,
- mc->banksize[x] & 0x7f,
- (mc->banksize[x] & 0x80)?"":"out");
- len += size;
- pos = begin + len;
- }
- size = sprintf(buffer + len, "Timer Mod.: %spresent\n",
- (cc->tmr == TRUE)?"":"not ");
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, "NVRAM : %spresent\n",
- (cc->nvr == TRUE)?"":"not ");
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, "SmartROM : %sabled\n",
- (bt->srom == TRUE)?"dis":"en");
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, "Alarm : %s\n",
- (bt->alrm == TRUE)?"on":"off");
- len += size;
- pos = begin + len;
-
- if (pos < offset) {
- len = 0;
- begin = pos;
- }
- if (pos > offset + length)
- goto stop_output;
-
- if(SD(HBA_ptr)->do_latency == FALSE) {
-
- cmnd[0] = LOG_SENSE;
- cmnd[1] = 0;
- cmnd[2] = 0x32 + (3<<6);
- cmnd[3] = 0;
- cmnd[4] = 0;
- cmnd[5] = 0;
- cmnd[6] = 0;
- cmnd[7] = 0x01;
- cmnd[8] = 0x44;
- cmnd[9] = 0;
-
- scmd.cmd_len = 10;
-
- /*
- * Do the command and wait for it to finish.
- */
- {
- struct semaphore sem = MUTEX_LOCKED;
- scmd.request.rq_status = RQ_SCSI_BUSY;
- scmd.request.sem = &sem;
- scsi_do_cmd (&scmd, cmnd, buff2, 0x144,
- eata_scsi_done, 1 * HZ, 1);
- down(&sem);
- }
-
- swap_statistics(buff2);
- rhcs = (hst_cmd_stat *)(buff2 + 0x2c);
- whcs = (hst_cmd_stat *)(buff2 + 0x8c);
-
- for (x = 0; x <= 11; x++) {
- SD(HBA_ptr)->reads[x] += rhcs->sizes[x];
- SD(HBA_ptr)->writes[x] += whcs->sizes[x];
- SD(HBA_ptr)->reads[12] += rhcs->sizes[x];
- SD(HBA_ptr)->writes[12] += whcs->sizes[x];
- }
- size = sprintf(buffer + len, "Host<->Disk command statistics:\n"
- " Reads: Writes:\n");
- len += size;
- pos = begin + len;
- for (x = 0; x <= 10; x++) {
- size = sprintf(buffer+len,"%5dk:%12u %12u\n", 1 << x,
- SD(HBA_ptr)->reads[x],
- SD(HBA_ptr)->writes[x]);
- len += size;
- pos = begin + len;
- }
- size = sprintf(buffer+len,">1024k:%12u %12u\n",
- SD(HBA_ptr)->reads[11],
- SD(HBA_ptr)->writes[11]);
- len += size;
- pos = begin + len;
- size = sprintf(buffer+len,"Sum :%12u %12u\n",
- SD(HBA_ptr)->reads[12],
- SD(HBA_ptr)->writes[12]);
- len += size;
- pos = begin + len;
- }
- }
-
- if (pos < offset) {
- len = 0;
- begin = pos;
- }
- if (pos > offset + length)
- goto stop_output;
-
- if(SD(HBA_ptr)->do_latency == TRUE) {
- int factor = 1024/HZ;
- size = sprintf(buffer + len, "Host Latency Command Statistics:\n"
- "Current timer resolution: %2dms\n"
- " Reads: Min:(ms) Max:(ms)
Ave:(ms)\n",
- factor);
- len += size;
- pos = begin + len;
- for (x = 0; x <= 10; x++) {
- size = sprintf(buffer+len,"%5dk:%12u %12u %12u %12u\n",
- 1 << x,
- SD(HBA_ptr)->reads_lat[x][0],
- (SD(HBA_ptr)->reads_lat[x][1] == 0xffffffff)
- ? 0:(SD(HBA_ptr)->reads_lat[x][1] * factor),
- SD(HBA_ptr)->reads_lat[x][2] * factor,
- SD(HBA_ptr)->reads_lat[x][3] * factor /
- ((SD(HBA_ptr)->reads_lat[x][0])
- ? SD(HBA_ptr)->reads_lat[x][0]:1));
- len += size;
- pos = begin + len;
- }
- size = sprintf(buffer+len,">1024k:%12u %12u %12u %12u\n",
- SD(HBA_ptr)->reads_lat[11][0],
- (SD(HBA_ptr)->reads_lat[11][1] == 0xffffffff)
- ? 0:(SD(HBA_ptr)->reads_lat[11][1] * factor),
- SD(HBA_ptr)->reads_lat[11][2] * factor,
- SD(HBA_ptr)->reads_lat[11][3] * factor /
- ((SD(HBA_ptr)->reads_lat[x][0])
- ? SD(HBA_ptr)->reads_lat[x][0]:1));
- len += size;
- pos = begin + len;
-
- if (pos < offset) {
- len = 0;
- begin = pos;
- }
- if (pos > offset + length)
- goto stop_output;
-
- size = sprintf(buffer + len,
- " Writes: Min:(ms) Max:(ms)
Ave:(ms)\n");
- len += size;
- pos = begin + len;
- for (x = 0; x <= 10; x++) {
- size = sprintf(buffer+len,"%5dk:%12u %12u %12u %12u\n",
- 1 << x,
- SD(HBA_ptr)->writes_lat[x][0],
- (SD(HBA_ptr)->writes_lat[x][1] == 0xffffffff)
- ? 0:(SD(HBA_ptr)->writes_lat[x][1] * factor),
- SD(HBA_ptr)->writes_lat[x][2] * factor,
- SD(HBA_ptr)->writes_lat[x][3] * factor /
- ((SD(HBA_ptr)->writes_lat[x][0])
- ? SD(HBA_ptr)->writes_lat[x][0]:1));
- len += size;
- pos = begin + len;
- }
- size = sprintf(buffer+len,">1024k:%12u %12u %12u %12u\n",
- SD(HBA_ptr)->writes_lat[11][0],
- (SD(HBA_ptr)->writes_lat[11][1] == 0xffffffff)
- ? 0:(SD(HBA_ptr)->writes_lat[x][1] * factor),
- SD(HBA_ptr)->writes_lat[11][2] * factor,
- SD(HBA_ptr)->writes_lat[11][3] * factor /
- ((SD(HBA_ptr)->writes_lat[x][0])
- ? SD(HBA_ptr)->writes_lat[x][0]:1));
- len += size;
- pos = begin + len;
-
- if (pos < offset) {
- len = 0;
- begin = pos;
- }
- if (pos > offset + length)
- goto stop_output;
- }
-
-#if 0
- scd = scsi_devices;
-
- size = sprintf(buffer+len,"Attached devices: %s\n", (scd)?"":"none");
- len += size;
- pos = begin + len;
-
- while (scd) {
- if (scd->host == HBA_ptr) {
- proc_print_scsidevice(scd, buffer, &size, len);
- len += size;
- pos = begin + len;
-
- if (pos < offset) {
- len = 0;
- begin = pos;
- }
- if (pos > offset + length)
- goto stop_output;
- }
- scd = scd->next;
- }
-#endif
-
- stop_output:
- DBG(DBG_PROC, printk("2pos: %ld offset: %ld len: %d\n", pos, offset, len));
- *start=buffer+(offset-begin); /* Start of wanted data */
- len-=(offset-begin); /* Start slop */
- if(len>length)
- len = length; /* Ending slop */
- DBG(DBG_PROC, printk("3pos: %ld offset: %ld len: %d\n", pos, offset, len));
-
- return (len);
-}
-
-/*
- * Overrides for Emacs so that we follow Linus's tabbing style.
- * Emacs will notice this stuff at the end of the file and automatically
- * adjust the settings for this buffer only. This must remain at the end
- * of the file.
- * ---------------------------------------------------------------------------
- * Local variables:
- * c-indent-level: 4
- * c-brace-imaginary-offset: 0
- * c-brace-offset: -4
- * c-argdecl-indent: 4
- * c-label-offset: -4
- * c-continued-statement-offset: 4
- * c-continued-brace-offset: 0
- * tab-width: 8
- * End:
- */
diff --git a/linux/src/drivers/scsi/eata_pio_proc.c
b/linux/src/drivers/scsi/eata_pio_proc.c
deleted file mode 100644
index 54783f2..0000000
--- a/linux/src/drivers/scsi/eata_pio_proc.c
+++ /dev/null
@@ -1,135 +0,0 @@
-
-/*
- * eata_set_info
- * buffer : pointer to the data that has been written to the hostfile
- * length : number of bytes written to the hostfile
- * HBA_ptr: pointer to the Scsi_Host struct
- */
-int eata_pio_set_info(char *buffer, int length, struct Scsi_Host *HBA_ptr)
-{
- DBG(DBG_PROC_WRITE, printk("%s\n", buffer));
- return(-ENOSYS); /* Currently this is a no-op */
-}
-
-/*
- * eata_proc_info
- * inout : decides on the direction of the dataflow and the meaning of the
- * variables
- * buffer: If inout==FALSE data is being written to it else read from it
- * *start: If inout==FALSE start of the valid data in the buffer
- * offset: If inout==FALSE offset from the beginning of the imaginary file
- * from which we start writing into the buffer
- * length: If inout==FALSE max number of bytes to be written into the buffer
- * else number of bytes in the buffer
- */
-int eata_pio_proc_info(char *buffer, char **start, off_t offset, int length,
- int hostno, int inout)
-{
-
- Scsi_Device *scd;
- struct Scsi_Host *HBA_ptr;
- static u8 buff[512];
- int i;
- int size, len = 0;
- off_t begin = 0;
- off_t pos = 0;
-
- HBA_ptr = first_HBA;
- for (i = 1; i <= registered_HBAs; i++) {
- if (HBA_ptr->host_no == hostno)
- break;
- HBA_ptr = SD(HBA_ptr)->next;
- }
-
- if(inout == TRUE) /* Has data been written to the file ? */
- return(eata_pio_set_info(buffer, length, HBA_ptr));
-
- if (offset == 0)
- memset(buff, 0, sizeof(buff));
-
- size = sprintf(buffer+len, "EATA (Extended Attachment) PIO driver version:
"
- "%d.%d%s\n",VER_MAJOR, VER_MINOR, VER_SUB);
- len += size; pos = begin + len;
- size = sprintf(buffer + len, "queued commands: %10ld\n"
- "processed interrupts:%10ld\n", queue_counter, int_counter);
- len += size; pos = begin + len;
-
- size = sprintf(buffer + len, "\nscsi%-2d: HBA %.10s\n",
- HBA_ptr->host_no, SD(HBA_ptr)->name);
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, "Firmware revision: v%s\n",
- SD(HBA_ptr)->revision);
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, "IO: PIO\n");
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, "Base IO : %#.4x\n", (u32) HBA_ptr->base);
- len += size;
- pos = begin + len;
- size = sprintf(buffer + len, "Host Bus: %s\n",
- (SD(HBA_ptr)->bustype == 'P')?"PCI ":
- (SD(HBA_ptr)->bustype == 'E')?"EISA":"ISA ");
-
- len += size;
- pos = begin + len;
-
- if (pos < offset) {
- len = 0;
- begin = pos;
- }
- if (pos > offset + length)
- goto stop_output;
-
- scd = scsi_devices;
-
- size = sprintf(buffer+len,"Attached devices: %s\n", (scd)?"":"none");
- len += size;
- pos = begin + len;
-
- while (scd) {
- if (scd->host == HBA_ptr) {
- proc_print_scsidevice(scd, buffer, &size, len);
- len += size;
- pos = begin + len;
-
- if (pos < offset) {
- len = 0;
- begin = pos;
- }
- if (pos > offset + length)
- goto stop_output;
- }
- scd = scd->next;
- }
-
- stop_output:
- DBG(DBG_PROC, printk("2pos: %ld offset: %ld len: %d\n", pos, offset, len));
- *start=buffer+(offset-begin); /* Start of wanted data */
- len-=(offset-begin); /* Start slop */
- if(len>length)
- len = length; /* Ending slop */
- DBG(DBG_PROC, printk("3pos: %ld offset: %ld len: %d\n", pos, offset, len));
-
- return (len);
-}
-
-/*
- * Overrides for Emacs so that we follow Linus's tabbing style.
- * Emacs will notice this stuff at the end of the file and automatically
- * adjust the settings for this buffer only. This must remain at the end
- * of the file.
- * ---------------------------------------------------------------------------
- * Local variables:
- * c-indent-level: 4
- * c-brace-imaginary-offset: 0
- * c-brace-offset: -4
- * c-argdecl-indent: 4
- * c-label-offset: -4
- * c-continued-statement-offset: 4
- * c-continued-brace-offset: 0
- * tab-width: 8
- * End:
- */
-
diff --git a/linux/src/drivers/scsi/g_NCR5380.c
b/linux/src/drivers/scsi/g_NCR5380.c
deleted file mode 100644
index a141b93..0000000
--- a/linux/src/drivers/scsi/g_NCR5380.c
+++ /dev/null
@@ -1,729 +0,0 @@
-/*
- * Generic Generic NCR5380 driver
- *
- * Copyright 1993, Drew Eckhardt
- * Visionary Computing
- * (Unix and Linux consulting and custom programming)
- * address@hidden
- * +1 (303) 440-4894
- *
- * NCR53C400 extensions (c) 1994,1995,1996, Kevin Lentin
- * address@hidden
- *
- * ALPHA RELEASE 1.
- *
- * For more information, please consult
- *
- * NCR 5380 Family
- * SCSI Protocol Controller
- * Databook
- *
- * NCR Microelectronics
- * 1635 Aeroplaza Drive
- * Colorado Springs, CO 80916
- * 1+ (719) 578-3400
- * 1+ (800) 334-5454
- */
-
-/*
- * TODO : flesh out DMA support, find some one actually using this (I have
- * a memory mapped Trantor board that works fine)
- */
-
-/*
- * Options :
- *
- * PARITY - enable parity checking. Not supported.
- *
- * SCSI2 - enable support for SCSI-II tagged queueing. Untested.
- *
- * USLEEP - enable support for devices that don't disconnect. Untested.
- *
- * The card is detected and initialized in one of several ways :
- * 1. With command line overrides - NCR5380=port,irq may be
- * used on the LILO command line to override the defaults.
- *
- * 2. With the GENERIC_NCR5380_OVERRIDE compile time define. This is
- * specified as an array of address, irq, dma, board tuples. Ie, for
- * one board at 0x350, IRQ5, no dma, I could say
- * -DGENERIC_NCR5380_OVERRIDE={{0xcc000, 5, DMA_NONE, BOARD_NCR5380}}
- *
- * -1 should be specified for no or DMA interrupt, -2 to autoprobe for an
- * IRQ line if overridden on the command line.
- *
- * 3. When included as a module, with arguments passed on the command line:
- * ncr_irq=xx the interrupt
- * ncr_addr=xx the port or base address (for port or memory
- * mapped, resp.)
- * ncr_dma=xx the DMA
- * ncr_5380=1 to set up for a NCR5380 board
- * ncr_53c400=1 to set up for a NCR53C400 board
- * e.g.
- * modprobe g_NCR5380 ncr_irq=5 ncr_addr=0x350 ncr_5380=1
- * for a port mapped NCR5380 board or
- * modprobe g_NCR5380 ncr_irq=255 ncr_addr=0xc8000 ncr_53c400=1
- * for a memory mapped NCR53C400 board with interrupts disabled.
- *
- * 255 should be specified for no or DMA interrupt, 254 to autoprobe for an
- * IRQ line if overridden on the command line.
- *
- */
-
-#define AUTOPROBE_IRQ
-#define AUTOSENSE
-
-#include <linux/config.h>
-
-#ifdef CONFIG_SCSI_GENERIC_NCR53C400
-#define NCR53C400_PSEUDO_DMA 1
-#define PSEUDO_DMA
-#define NCR53C400
-#define NCR5380_STATS
-#undef NCR5380_STAT_LIMIT
-#endif
-#if defined(CONFIG_SCSI_G_NCR5380_PORT) && defined(CONFIG_SCSI_G_NCR5380_MEM)
-#error You can not configure the Generic NCR 5380 SCSI Driver for memory
mapped I/O and port mapped I/O at the same time (yet)
-#endif
-#if !defined(CONFIG_SCSI_G_NCR5380_PORT) && !defined(CONFIG_SCSI_G_NCR5380_MEM)
-#error You must configure the Generic NCR 5380 SCSI Driver for one of memory
mapped I/O and port mapped I/O.
-#endif
-
-#include <asm/system.h>
-#include <asm/io.h>
-#include <linux/signal.h>
-#include <linux/sched.h>
-#include <linux/blk.h>
-#include "scsi.h"
-#include "hosts.h"
-#include "g_NCR5380.h"
-#include "NCR5380.h"
-#include "constants.h"
-#include "sd.h"
-#include<linux/stat.h>
-
-struct proc_dir_entry proc_scsi_g_ncr5380 = {
- PROC_SCSI_GENERIC_NCR5380, 9, "g_NCR5380",
- S_IFDIR | S_IRUGO | S_IXUGO, 2
-};
-
-#define NCR_NOT_SET 0
-static int ncr_irq=NCR_NOT_SET;
-static int ncr_dma=NCR_NOT_SET;
-static int ncr_addr=NCR_NOT_SET;
-static int ncr_5380=NCR_NOT_SET;
-static int ncr_53c400=NCR_NOT_SET;
-
-static struct override {
- NCR5380_implementation_fields;
- int irq;
- int dma;
- int board; /* Use NCR53c400, Ricoh, etc. extensions ? */
-} overrides
-#ifdef GENERIC_NCR5380_OVERRIDE
- [] = GENERIC_NCR5380_OVERRIDE
-#else
- [1] = {{0,},};
-#endif
-
-#define NO_OVERRIDES (sizeof(overrides) / sizeof(struct override))
-
-/*
- * Function : static internal_setup(int board, char *str, int *ints)
- *
- * Purpose : LILO command line initialization of the overrides array,
- *
- * Inputs : board - either BOARD_NCR5380 for a normal NCR5380 board,
- * or BOARD_NCR53C400 for a NCR53C400 board. str - unused, ints -
- * array of integer parameters with ints[0] equal to the number of ints.
- *
- */
-
-static void internal_setup(int board, char *str, int *ints) {
- static int commandline_current = 0;
- switch (board) {
- case BOARD_NCR5380:
- if (ints[0] != 2 && ints[0] != 3) {
- printk("generic_NCR5380_setup : usage ncr5380="
STRVAL(NCR5380_map_name) ",irq,dma\n");
- return;
- }
- case BOARD_NCR53C400:
- if (ints[0] != 2) {
- printk("generic_NCR53C400_setup : usage ncr53c400="
STRVAL(NCR5380_map_name) ",irq\n");
- return;
- }
- }
-
- if (commandline_current < NO_OVERRIDES) {
- overrides[commandline_current].NCR5380_map_name =
(NCR5380_map_type)ints[1];
- overrides[commandline_current].irq = ints[2];
- if (ints[0] == 3)
- overrides[commandline_current].dma = ints[3];
- else
- overrides[commandline_current].dma = DMA_NONE;
- overrides[commandline_current].board = board;
- ++commandline_current;
- }
-}
-
-/*
- * Function : generic_NCR5380_setup (char *str, int *ints)
- *
- * Purpose : LILO command line initialization of the overrides array,
- *
- * Inputs : str - unused, ints - array of integer parameters with ints[0]
- * equal to the number of ints.
- */
-
-void generic_NCR5380_setup (char *str, int *ints) {
- internal_setup (BOARD_NCR5380, str, ints);
-}
-
-/*
- * Function : generic_NCR53C400_setup (char *str, int *ints)
- *
- * Purpose : LILO command line initialization of the overrides array,
- *
- * Inputs : str - unused, ints - array of integer parameters with ints[0]
- * equal to the number of ints.
- */
-
-void generic_NCR53C400_setup (char *str, int *ints) {
- internal_setup (BOARD_NCR53C400, str, ints);
-}
-
-/*
- * Function : int generic_NCR5380_detect(Scsi_Host_Template * tpnt)
- *
- * Purpose : initializes generic NCR5380 driver based on the
- * command line / compile time port and irq definitions.
- *
- * Inputs : tpnt - template for this SCSI adapter.
- *
- * Returns : 1 if a host adapter was found, 0 if not.
- *
- */
-
-int generic_NCR5380_detect(Scsi_Host_Template * tpnt) {
- static int current_override = 0;
- int count;
- int flags = 0;
- struct Scsi_Host *instance;
-
- if (ncr_irq != NCR_NOT_SET)
- overrides[0].irq=ncr_irq;
- if (ncr_dma != NCR_NOT_SET)
- overrides[0].dma=ncr_dma;
- if (ncr_addr != NCR_NOT_SET)
- overrides[0].NCR5380_map_name=(NCR5380_map_type)ncr_addr;
- if (ncr_5380 != NCR_NOT_SET)
- overrides[0].board=BOARD_NCR5380;
- else if (ncr_53c400 != NCR_NOT_SET)
- overrides[0].board=BOARD_NCR53C400;
-
- tpnt->proc_dir = &proc_scsi_g_ncr5380;
-
- for (count = 0; current_override < NO_OVERRIDES; ++current_override) {
- if (!(overrides[current_override].NCR5380_map_name))
- continue;
-
- switch (overrides[current_override].board) {
- case BOARD_NCR5380:
- flags = FLAG_NO_PSEUDO_DMA;
- break;
- case BOARD_NCR53C400:
- flags = FLAG_NCR53C400;
- break;
- }
-
- instance = scsi_register (tpnt, sizeof(struct NCR5380_hostdata));
- instance->NCR5380_instance_name =
overrides[current_override].NCR5380_map_name;
-
- NCR5380_init(instance, flags);
-
- if (overrides[current_override].irq != IRQ_AUTO)
- instance->irq = overrides[current_override].irq;
- else
- instance->irq = NCR5380_probe_irq(instance, 0xffff);
-
- if (instance->irq != IRQ_NONE)
- if (request_irq(instance->irq, generic_NCR5380_intr, SA_INTERRUPT,
"NCR5380", NULL)) {
- printk("scsi%d : IRQ%d not free, interrupts disabled\n",
- instance->host_no, instance->irq);
- instance->irq = IRQ_NONE;
- }
-
- if (instance->irq == IRQ_NONE) {
- printk("scsi%d : interrupts not enabled. for better interactive
performance,\n", instance->host_no);
- printk("scsi%d : please jumper the board for a free IRQ.\n",
instance->host_no);
- }
-
- printk("scsi%d : at " STRVAL(NCR5380_map_name) " 0x%x",
instance->host_no, (unsigned int)instance->NCR5380_instance_name);
- if (instance->irq == IRQ_NONE)
- printk (" interrupts disabled");
- else
- printk (" irq %d", instance->irq);
- printk(" options CAN_QUEUE=%d CMD_PER_LUN=%d release=%d",
- CAN_QUEUE, CMD_PER_LUN, GENERIC_NCR5380_PUBLIC_RELEASE);
- NCR5380_print_options(instance);
- printk("\n");
-
- ++current_override;
- ++count;
- }
- return count;
-}
-
-const char * generic_NCR5380_info (struct Scsi_Host* host) {
- static const char string[]="Generic NCR5380/53C400 Driver";
- return string;
-}
-
-int generic_NCR5380_release_resources(struct Scsi_Host * instance)
-{
- NCR5380_local_declare();
-
- NCR5380_setup(instance);
-
- if (instance->irq != IRQ_NONE)
- free_irq(instance->irq, NULL);
-
- return 0;
-}
-
-#ifdef BIOSPARAM
-/*
- * Function : int generic_NCR5380_biosparam(Disk * disk, kdev_t dev, int *ip)
- *
- * Purpose : Generates a BIOS / DOS compatible H-C-S mapping for
- * the specified device / size.
- *
- * Inputs : size = size of device in sectors (512 bytes), dev = block device
- * major / minor, ip[] = {heads, sectors, cylinders}
- *
- * Returns : always 0 (success), initializes ip
- *
- */
-
-/*
- * XXX Most SCSI boards use this mapping, I could be incorrect. Some one
- * using hard disks on a trantor should verify that this mapping corresponds
- * to that used by the BIOS / ASPI driver by running the linux fdisk program
- * and matching the H_C_S coordinates to what DOS uses.
- */
-
-int generic_NCR5380_biosparam(Disk * disk, kdev_t dev, int *ip)
-{
- int size = disk->capacity;
- ip[0] = 64;
- ip[1] = 32;
- ip[2] = size >> 11;
- return 0;
-}
-#endif
-
-#if NCR53C400_PSEUDO_DMA
-static inline int NCR5380_pread (struct Scsi_Host *instance, unsigned char
*dst, int len)
-{
- int blocks = len / 128;
- int start = 0;
- int i;
- int bl;
- NCR5380_local_declare();
-
- NCR5380_setup(instance);
-
-#if (NDEBUG & NDEBUG_C400_PREAD)
- printk("53C400r: About to read %d blocks for %d bytes\n", blocks, len);
-#endif
-
- NCR5380_write(C400_CONTROL_STATUS_REG, CSR_BASE | CSR_TRANS_DIR);
- NCR5380_write(C400_BLOCK_COUNTER_REG, blocks);
- while (1) {
-
-#if (NDEBUG & NDEBUG_C400_PREAD)
- printk("53C400r: %d blocks left\n", blocks);
-#endif
-
- if ((bl=NCR5380_read(C400_BLOCK_COUNTER_REG)) == 0) {
-#if (NDEBUG & NDEBUG_C400_PREAD)
- if (blocks)
- printk("53C400r: blocks still == %d\n", blocks);
- else
- printk("53C400r: Exiting loop\n");
-#endif
- break;
- }
-
-#if 1
- if (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_GATED_53C80_IRQ) {
- printk("53C400r: Got 53C80_IRQ start=%d, blocks=%d\n", start,
blocks);
- return -1;
- }
-#endif
-
-#if (NDEBUG & NDEBUG_C400_PREAD)
- printk("53C400r: Waiting for buffer, bl=%d\n", bl);
-#endif
-
- while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY)
- ;
-#if (NDEBUG & NDEBUG_C400_PREAD)
- printk("53C400r: Transferring 128 bytes\n");
-#endif
-
-#ifdef CONFIG_SCSI_G_NCR5380_PORT
- for (i=0; i<128; i++)
- dst[start+i] = NCR5380_read(C400_HOST_BUFFER);
-#else
- /* implies CONFIG_SCSI_G_NCR5380_MEM */
- memmove(dst+start,NCR53C400_host_buffer+NCR5380_map_name,128);
-#endif
- start+=128;
- blocks--;
- }
-
- if (blocks) {
-#if (NDEBUG & NDEBUG_C400_PREAD)
- printk("53C400r: EXTRA: Waiting for buffer\n");
-#endif
- while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY)
- ;
-
-#if (NDEBUG & NDEBUG_C400_PREAD)
- printk("53C400r: Transferring EXTRA 128 bytes\n");
-#endif
-#ifdef CONFIG_SCSI_G_NCR5380_PORT
- for (i=0; i<128; i++)
- dst[start+i] = NCR5380_read(C400_HOST_BUFFER);
-#else
- /* implies CONFIG_SCSI_G_NCR5380_MEM */
- memmove(dst+start,NCR53C400_host_buffer+NCR5380_map_name,128);
-#endif
- start+=128;
- blocks--;
- }
-#if (NDEBUG & NDEBUG_C400_PREAD)
- else
- printk("53C400r: No EXTRA required\n");
-#endif
-
-#if (NDEBUG & NDEBUG_C400_PREAD)
- printk("53C400r: Final values: blocks=%d start=%d\n", blocks, start);
-#endif
-
- if (!(NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_GATED_53C80_IRQ))
- printk("53C400r: no 53C80 gated irq after transfer");
-#if (NDEBUG & NDEBUG_C400_PREAD)
- else
- printk("53C400r: Got 53C80 interrupt and tried to clear it\n");
-#endif
-
-/* DON'T DO THIS - THEY NEVER ARRIVE!
- printk("53C400r: Waiting for 53C80 registers\n");
- while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_53C80_REG)
- ;
-*/
-
- if (!(NCR5380_read(BUS_AND_STATUS_REG) & BASR_END_DMA_TRANSFER))
- printk("53C400r: no end dma signal\n");
-#if (NDEBUG & NDEBUG_C400_PREAD)
- else
- printk("53C400r: end dma as expected\n");
-#endif
-
- NCR5380_write(MODE_REG, MR_BASE);
- NCR5380_read(RESET_PARITY_INTERRUPT_REG);
- return 0;
-}
-
-static inline int NCR5380_pwrite (struct Scsi_Host *instance, unsigned char
*src, int len)
-{
- int blocks = len / 128;
- int start = 0;
- int i;
- int bl;
- NCR5380_local_declare();
-
- NCR5380_setup(instance);
-
-#if (NDEBUG & NDEBUG_C400_PWRITE)
- printk("53C400w: About to write %d blocks for %d bytes\n", blocks, len);
-#endif
-
- NCR5380_write(C400_CONTROL_STATUS_REG, CSR_BASE);
- NCR5380_write(C400_BLOCK_COUNTER_REG, blocks);
- while (1) {
- if (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_GATED_53C80_IRQ) {
- printk("53C400w: Got 53C80_IRQ start=%d, blocks=%d\n", start,
blocks);
- return -1;
- }
-
- if ((bl=NCR5380_read(C400_BLOCK_COUNTER_REG)) == 0) {
-#if (NDEBUG & NDEBUG_C400_PWRITE)
- if (blocks)
- printk("53C400w: exiting loop, blocks still == %d\n", blocks);
- else
- printk("53C400w: exiting loop\n");
-#endif
- break;
- }
-
-#if (NDEBUG & NDEBUG_C400_PWRITE)
- printk("53C400w: %d blocks left\n", blocks);
-
- printk("53C400w: waiting for buffer, bl=%d\n", bl);
-#endif
- while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY)
- ;
-
-#if (NDEBUG & NDEBUG_C400_PWRITE)
- printk("53C400w: transferring 128 bytes\n");
-#endif
-#ifdef CONFIG_SCSI_G_NCR5380_PORT
- for (i=0; i<128; i++)
- NCR5380_write(C400_HOST_BUFFER, src[start+i]);
-#else
- /* implies CONFIG_SCSI_G_NCR5380_MEM */
- memmove(NCR53C400_host_buffer+NCR5380_map_name,src+start,128);
-#endif
- start+=128;
- blocks--;
- }
- if (blocks) {
-#if (NDEBUG & NDEBUG_C400_PWRITE)
- printk("53C400w: EXTRA waiting for buffer\n");
-#endif
- while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_HOST_BUF_NOT_RDY)
- ;
-
-#if (NDEBUG & NDEBUG_C400_PWRITE)
- printk("53C400w: transferring EXTRA 128 bytes\n");
-#endif
-#ifdef CONFIG_SCSI_G_NCR5380_PORT
- for (i=0; i<128; i++)
- NCR5380_write(C400_HOST_BUFFER, src[start+i]);
-#else
- /* implies CONFIG_SCSI_G_NCR5380_MEM */
- memmove(NCR53C400_host_buffer+NCR5380_map_name,src+start,128);
-#endif
- start+=128;
- blocks--;
- }
-#if (NDEBUG & NDEBUG_C400_PWRITE)
- else
- printk("53C400w: No EXTRA required\n");
-#endif
-
-#if (NDEBUG & NDEBUG_C400_PWRITE)
- printk("53C400w: Final values: blocks=%d start=%d\n", blocks, start);
-#endif
-
-#if 0
- printk("53C400w: waiting for registers to be available\n");
- THEY NEVER DO!
- while (NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_53C80_REG)
- ;
- printk("53C400w: Got em\n");
-#endif
-
- /* Let's wait for this instead - could be ugly */
- /* All documentation says to check for this. Maybe my hardware is too
- * fast. Waiting for it seems to work fine! KLL
- */
- while (!(i = NCR5380_read(C400_CONTROL_STATUS_REG) & CSR_GATED_53C80_IRQ))
- ;
-
- /*
- * I know. i is certainly != 0 here but the loop is new. See previous
- * comment.
- */
- if (i) {
-#if (NDEBUG & NDEBUG_C400_PWRITE)
- printk("53C400w: got 53C80 gated irq (last block)\n");
-#endif
- if (!((i=NCR5380_read(BUS_AND_STATUS_REG)) & BASR_END_DMA_TRANSFER))
- printk("53C400w: No END OF DMA bit - WHOOPS! BASR=%0x\n",i);
-#if (NDEBUG & NDEBUG_C400_PWRITE)
- else
- printk("53C400w: Got END OF DMA\n");
-#endif
- }
- else
- printk("53C400w: no 53C80 gated irq after transfer (last block)\n");
-
-#if 0
- if (!(NCR5380_read(BUS_AND_STATUS_REG) & BASR_END_DMA_TRANSFER)) {
- printk("53C400w: no end dma signal\n");
- }
-#endif
-
-#if (NDEBUG & NDEBUG_C400_PWRITE)
- printk("53C400w: waiting for last byte...\n");
-#endif
- while (!(NCR5380_read(TARGET_COMMAND_REG) & TCR_LAST_BYTE_SENT))
- ;
-
-#if (NDEBUG & NDEBUG_C400_PWRITE)
- printk("53C400w: got last byte.\n");
- printk("53C400w: pwrite exiting with status 0, whoopee!\n");
-#endif
- return 0;
-}
-#endif /* PSEUDO_DMA */
-
-#include "NCR5380.c"
-
-#define PRINTP(x) len += sprintf(buffer+len, x)
-#define ANDP ,
-
-static int sprint_opcode(char* buffer, int len, int opcode) {
- int start = len;
- PRINTP("0x%02x " ANDP opcode);
- return len-start;
-}
-
-static int sprint_command (char* buffer, int len, unsigned char *command) {
- int i,s,start=len;
- len += sprint_opcode(buffer, len, command[0]);
- for ( i = 1, s = COMMAND_SIZE(command[0]); i < s; ++i)
- PRINTP("%02x " ANDP command[i]);
- PRINTP("\n");
- return len-start;
-}
-
-static int sprint_Scsi_Cmnd (char* buffer, int len, Scsi_Cmnd *cmd) {
- int start = len;
- PRINTP("host number %d destination target %d, lun %d\n" ANDP
- cmd->host->host_no ANDP
- cmd->target ANDP
- cmd->lun);
- PRINTP(" command = ");
- len += sprint_command (buffer, len, cmd->cmnd);
- return len-start;
-}
-
-int generic_NCR5380_proc_info(char* buffer, char** start, off_t offset, int
length, int hostno, int inout)
-{
- int len = 0;
- NCR5380_local_declare();
- unsigned char status;
- int i;
- struct Scsi_Host *scsi_ptr;
- Scsi_Cmnd *ptr;
- Scsi_Device *dev;
- struct NCR5380_hostdata *hostdata;
-
- cli();
-
- for (scsi_ptr = first_instance; scsi_ptr; scsi_ptr=scsi_ptr->next)
- if (scsi_ptr->host_no == hostno)
- break;
- NCR5380_setup(scsi_ptr);
- hostdata = (struct NCR5380_hostdata *)scsi_ptr->hostdata;
-
- PRINTP("SCSI host number %d : %s\n" ANDP scsi_ptr->host_no ANDP
scsi_ptr->hostt->name);
- PRINTP("Generic NCR5380 driver version %d\n" ANDP
GENERIC_NCR5380_PUBLIC_RELEASE);
- PRINTP("NCR5380 core version %d\n" ANDP NCR5380_PUBLIC_RELEASE);
-#ifdef NCR53C400
- PRINTP("NCR53C400 extension version %d\n" ANDP NCR53C400_PUBLIC_RELEASE);
- PRINTP("NCR53C400 card%s detected\n" ANDP (((struct NCR5380_hostdata
*)scsi_ptr->hostdata)->flags & FLAG_NCR53C400)?"":" not");
-# if NCR53C400_PSEUDO_DMA
- PRINTP("NCR53C400 pseudo DMA used\n");
-# endif
-#else
- PRINTP("NO NCR53C400 driver extensions\n");
-#endif
- PRINTP("Using %s mapping at %s 0x%x, " ANDP STRVAL(NCR5380_map_config)
ANDP STRVAL(NCR5380_map_name) ANDP scsi_ptr->NCR5380_instance_name);
- if (scsi_ptr->irq == IRQ_NONE)
- PRINTP("no interrupt\n");
- else
- PRINTP("on interrupt %d\n" ANDP scsi_ptr->irq);
-
-#ifdef NCR5380_STATS
- if (hostdata->connected || hostdata->issue_queue ||
hostdata->disconnected_queue)
- PRINTP("There are commands pending, transfer rates may be crud\n");
- if (hostdata->pendingr)
- PRINTP(" %d pending reads" ANDP hostdata->pendingr);
- if (hostdata->pendingw)
- PRINTP(" %d pending writes" ANDP hostdata->pendingw);
- if (hostdata->pendingr || hostdata->pendingw)
- PRINTP("\n");
- for (dev = scsi_devices; dev; dev=dev->next) {
- if (dev->host == scsi_ptr) {
- unsigned long br = hostdata->bytes_read[dev->id];
- unsigned long bw = hostdata->bytes_write[dev->id];
- long tr = hostdata->time_read[dev->id] / HZ;
- long tw = hostdata->time_write[dev->id] / HZ;
-
- PRINTP(" T:%d %s " ANDP dev->id ANDP (dev->type <
MAX_SCSI_DEVICE_CODE) ? scsi_device_types[(int)dev->type] : "Unknown");
- for (i=0; i<8; i++)
- if (dev->vendor[i] >= 0x20)
- *(buffer+(len++)) = dev->vendor[i];
- *(buffer+(len++)) = ' ';
- for (i=0; i<16; i++)
- if (dev->model[i] >= 0x20)
- *(buffer+(len++)) = dev->model[i];
- *(buffer+(len++)) = ' ';
- for (i=0; i<4; i++)
- if (dev->rev[i] >= 0x20)
- *(buffer+(len++)) = dev->rev[i];
- *(buffer+(len++)) = ' ';
-
- PRINTP("\n%10ld kb read in %5ld secs" ANDP br/1024 ANDP tr);
- if (tr)
- PRINTP(" @ %5ld bps" ANDP br / tr);
-
- PRINTP("\n%10ld kb written in %5ld secs" ANDP bw/1024 ANDP tw);
- if (tw)
- PRINTP(" @ %5ld bps" ANDP bw / tw);
- PRINTP("\n");
- }
- }
-#endif
-
- status = NCR5380_read(STATUS_REG);
- if (!(status & SR_REQ))
- PRINTP("REQ not asserted, phase unknown.\n");
- else {
- for (i = 0; (phases[i].value != PHASE_UNKNOWN) &&
- (phases[i].value != (status & PHASE_MASK)); ++i)
- ;
- PRINTP("Phase %s\n" ANDP phases[i].name);
- }
-
- if (!hostdata->connected) {
- PRINTP("No currently connected command\n");
- } else {
- len += sprint_Scsi_Cmnd (buffer, len, (Scsi_Cmnd *)
hostdata->connected);
- }
-
- PRINTP("issue_queue\n");
-
- for (ptr = (Scsi_Cmnd *) hostdata->issue_queue; ptr;
- ptr = (Scsi_Cmnd *) ptr->host_scribble)
- len += sprint_Scsi_Cmnd (buffer, len, ptr);
-
- PRINTP("disconnected_queue\n");
-
- for (ptr = (Scsi_Cmnd *) hostdata->disconnected_queue; ptr;
- ptr = (Scsi_Cmnd *) ptr->host_scribble)
- len += sprint_Scsi_Cmnd (buffer, len, ptr);
-
- *start = buffer + offset;
- len -= offset;
- if (len > length)
- len = length;
- sti();
- return len;
-}
-
-#undef PRINTP
-#undef ANDP
-
-#ifdef MODULE
-/* Eventually this will go into an include file, but this will be later */
-Scsi_Host_Template driver_template = GENERIC_NCR5380;
-
-#include <linux/module.h>
-#include "scsi_module.c"
-#endif
diff --git a/linux/src/drivers/scsi/gdth_proc.c
b/linux/src/drivers/scsi/gdth_proc.c
deleted file mode 100644
index 8764d55..0000000
--- a/linux/src/drivers/scsi/gdth_proc.c
+++ /dev/null
@@ -1,656 +0,0 @@
-/* gdth_proc.c
- * $Id: gdth_proc.c,v 1.1 1999/04/26 05:54:38 tb Exp $
- */
-
-#include "gdth_ioctl.h"
-
-int gdth_proc_info(char *buffer,char **start,off_t offset,int length,
- int hostno,int inout)
-{
- int hanum,busnum,i;
-
- TRACE2(("gdth_proc_info() length %d ha %d offs %d inout %d\n",
- length,hostno,(int)offset,inout));
-
- for (i=0; i<gdth_ctr_vcount; ++i) {
- if (gdth_ctr_vtab[i]->host_no == hostno)
- break;
- }
- if (i==gdth_ctr_vcount)
- return(-EINVAL);
-
- hanum = NUMDATA(gdth_ctr_vtab[i])->hanum;
- busnum= NUMDATA(gdth_ctr_vtab[i])->busnum;
-
- if (inout)
- return(gdth_set_info(buffer,length,i,hanum,busnum));
- else
- return(gdth_get_info(buffer,start,offset,length,i,hanum,busnum));
-}
-
-static int gdth_set_info(char *buffer,int length,int vh,int hanum,int busnum)
-{
- int ret_val;
- Scsi_Cmnd scp;
- Scsi_Device sdev;
- gdth_iowr_str *piowr;
-
- TRACE2(("gdth_set_info() ha %d bus %d\n",hanum,busnum));
- piowr = (gdth_iowr_str *)buffer;
-
- memset(&sdev,0,sizeof(Scsi_Device));
- memset(&scp, 0,sizeof(Scsi_Cmnd));
- sdev.host = gdth_ctr_vtab[vh];
- sdev.id = sdev.host->this_id;
- scp.cmd_len = 12;
- scp.host = gdth_ctr_vtab[vh];
- scp.target = sdev.host->this_id;
- scp.device = &sdev;
- scp.use_sg = 0;
-
- if (length >= 4) {
- if (strncmp(buffer,"gdth",4) == 0) {
- buffer += 5;
- length -= 5;
- ret_val = gdth_set_asc_info( buffer, length, hanum, scp );
- } else if (piowr->magic == GDTIOCTL_MAGIC) {
- ret_val = gdth_set_bin_info( buffer, length, hanum, scp );
- } else {
- printk("GDT: Wrong signature: %6s\n",buffer);
- ret_val = -EINVAL;
- }
- } else {
- ret_val = -EINVAL;
- }
- return ret_val;
-}
-
-static int gdth_set_asc_info(char *buffer,int length,int hanum,Scsi_Cmnd scp)
-{
- int orig_length, drive, wb_mode;
- char cmnd[12];
- int i, j, found;
- gdth_ha_str *ha;
- gdth_cmd_str gdtcmd;
- gdth_cpar_str *pcpar;
-
- TRACE2(("gdth_set_asc_info() ha %d\n",hanum));
- ha = HADATA(gdth_ctr_tab[hanum]);
- memset(cmnd, 0,10);
- orig_length = length + 5;
- drive = -1;
- wb_mode = 0;
- found = FALSE;
-
- if (length >= 5 && strncmp(buffer,"flush",5)==0) {
- buffer += 6;
- length -= 6;
- if (length && *buffer>='0' && *buffer<='9') {
- drive = (int)(*buffer-'0');
- ++buffer; --length;
- if (length && *buffer>='0' && *buffer<='9') {
- drive = drive*10 + (int)(*buffer-'0');
- ++buffer; --length;
- }
- printk("GDT: Flushing host drive %d .. ",drive);
- } else {
- printk("GDT: Flushing all host drives .. ");
- }
- for (i = 0; i < MAXBUS; ++i) {
- for (j = 0; j < MAXID; ++j) {
- if (ha->id[i][j].type == CACHE_DTYP) {
- if (drive != -1 &&
- ha->id[i][j].hostdrive != (ushort)drive)
- continue;
- found = TRUE;
- gdtcmd.BoardNode = LOCALBOARD;
- gdtcmd.Service = CACHESERVICE;
- gdtcmd.OpCode = GDT_FLUSH;
- gdtcmd.u.cache.DeviceNo = ha->id[i][j].hostdrive;
- gdtcmd.u.cache.BlockNo = 1;
- gdtcmd.u.cache.sg_canz = 0;
- {
- struct semaphore sem = MUTEX_LOCKED;
- scp.request.rq_status = RQ_SCSI_BUSY;
- scp.request.sem = &sem;
- scp.SCp.this_residual = IOCTL_PRI;
- scsi_do_cmd(&scp, cmnd, &gdtcmd,
- sizeof(gdth_cmd_str), gdth_scsi_done,
- 30*HZ, 1);
- down(&sem);
- }
- }
- }
- }
- if (!found)
- printk("\nNo host drive found !\n");
- else
- printk("Done.\n");
- return(orig_length);
- }
-
- if (length >= 7 && strncmp(buffer,"wbp_off",7)==0) {
- buffer += 8;
- length -= 8;
- printk("GDT: Disabling write back permanently .. ");
- wb_mode = 1;
- } else if (length >= 6 && strncmp(buffer,"wbp_on",6)==0) {
- buffer += 7;
- length -= 7;
- printk("GDT: Enabling write back permanently .. ");
- wb_mode = 2;
- } else if (length >= 6 && strncmp(buffer,"wb_off",6)==0) {
- buffer += 7;
- length -= 7;
- printk("GDT: Disabling write back commands .. ");
- if (ha->cache_feat & GDT_WR_THROUGH) {
- gdth_write_through = TRUE;
- printk("Done.\n");
- } else {
- printk("Not supported !\n");
- }
- return(orig_length);
- } else if (length >= 5 && strncmp(buffer,"wb_on",5)==0) {
- buffer += 6;
- length -= 6;
- printk("GDT: Enabling write back commands .. ");
- gdth_write_through = FALSE;
- printk("Done.\n");
- return(orig_length);
- }
-
- if (wb_mode) {
- pcpar = (gdth_cpar_str *)kmalloc( sizeof(gdth_cpar_str),
- GFP_ATOMIC | GFP_DMA );
- if (pcpar == NULL) {
- TRACE2(("gdth_set_info(): Unable to allocate memory.\n"));
- printk("Unable to allocate memory.\n");
- return(-EINVAL);
- }
- memcpy( pcpar, &ha->cpar, sizeof(gdth_cpar_str) );
- gdtcmd.BoardNode = LOCALBOARD;
- gdtcmd.Service = CACHESERVICE;
- gdtcmd.OpCode = GDT_IOCTL;
- gdtcmd.u.ioctl.p_param = virt_to_bus(pcpar);
- gdtcmd.u.ioctl.param_size = sizeof(gdth_cpar_str);
- gdtcmd.u.ioctl.subfunc = CACHE_CONFIG;
- gdtcmd.u.ioctl.channel = INVALID_CHANNEL;
- pcpar->write_back = wb_mode==1 ? 0:1;
- {
- struct semaphore sem = MUTEX_LOCKED;
- scp.request.rq_status = RQ_SCSI_BUSY;
- scp.request.sem = &sem;
- scp.SCp.this_residual = IOCTL_PRI;
- scsi_do_cmd(&scp, cmnd, &gdtcmd, sizeof(gdth_cmd_str),
- gdth_scsi_done, 30*HZ, 1);
- down(&sem);
- }
- kfree( pcpar );
- printk("Done.\n");
- return(orig_length);
- }
-
- printk("GDT: Unknown command: %s Length: %d\n",buffer,length);
- return(-EINVAL);
-}
-
-static int gdth_set_bin_info(char *buffer,int length,int hanum,Scsi_Cmnd scp)
-{
- char cmnd[12];
- int id;
- unchar i, j, k, found;
- gdth_ha_str *ha;
- gdth_iowr_str *piowr;
- gdth_iord_str *piord;
- gdth_cmd_str *pcmd;
- ulong *ppadd;
- ulong add_size, flags;
-
-
- TRACE2(("gdth_set_bin_info() ha %d\n",hanum));
- ha = HADATA(gdth_ctr_tab[hanum]);
- memset(cmnd, 0,10);
- piowr = (gdth_iowr_str *)buffer;
- piord = NULL;
- pcmd = NULL;
-
- if (length < GDTOFFSOF(gdth_iowr_str,iu))
- return(-EINVAL);
-
- switch (piowr->ioctl) {
- case GDTIOCTL_GENERAL:
- if (length < GDTOFFSOF(gdth_iowr_str,iu.general.data[0]))
- return(-EINVAL);
- pcmd = (gdth_cmd_str *)piowr->iu.general.command;
- pcmd->Service = piowr->service;
- if (pcmd->OpCode == GDT_IOCTL) {
- ppadd = &pcmd->u.ioctl.p_param;
- add_size = pcmd->u.ioctl.param_size;
- } else if (piowr->service == CACHESERVICE) {
- add_size = pcmd->u.cache.BlockCnt * SECTOR_SIZE;
- if (ha->cache_feat & SCATTER_GATHER) {
- ppadd = &pcmd->u.cache.sg_lst[0].sg_ptr;
- pcmd->u.cache.DestAddr = -1UL;
- pcmd->u.cache.sg_lst[0].sg_len = add_size;
- pcmd->u.cache.sg_canz = 1;
- } else {
- ppadd = &pcmd->u.cache.DestAddr;
- pcmd->u.cache.sg_canz = 0;
- }
- } else if (piowr->service == SCSIRAWSERVICE) {
- add_size = pcmd->u.raw.sdlen;
- if (ha->raw_feat & SCATTER_GATHER) {
- ppadd = &pcmd->u.raw.sg_lst[0].sg_ptr;
- pcmd->u.raw.sdata = -1UL;
- pcmd->u.raw.sg_lst[0].sg_len = add_size;
- pcmd->u.raw.sg_ranz = 1;
- } else {
- ppadd = &pcmd->u.raw.sdata;
- pcmd->u.raw.sg_ranz = 0;
- }
- } else {
- return(-EINVAL);
- }
- id = gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str) + add_size );
- if (id == -1)
- return(-EBUSY);
- piord = (gdth_iord_str *)gdth_ioctl_tab[id-1][hanum];
-
- piord->size = sizeof(gdth_iord_str) + add_size;
- if (add_size > 0) {
- memcpy(piord->iu.general.data, piowr->iu.general.data, add_size);
- *ppadd = virt_to_bus(piord->iu.general.data);
- }
- /* do IOCTL */
- {
- struct semaphore sem = MUTEX_LOCKED;
- scp.request.rq_status = RQ_SCSI_BUSY;
- scp.request.sem = &sem;
- scp.SCp.this_residual = IOCTL_PRI;
- scsi_do_cmd(&scp, cmnd, pcmd,
- sizeof(gdth_cmd_str), gdth_scsi_done,
- piowr->timeout*HZ, 1);
- down(&sem);
- piord->status = (ulong)scp.SCp.Message;
- }
- break;
-
- case GDTIOCTL_DRVERS:
- id = gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str) );
- if (id == -1)
- return(-EBUSY);
- piord = (gdth_iord_str *)gdth_ioctl_tab[id-1][hanum];
- piord->size = sizeof(gdth_iord_str);
- piord->status = S_OK;
- piord->iu.drvers.version = (GDTH_VERSION<<8) | GDTH_SUBVERSION;
- break;
-
- case GDTIOCTL_CTRTYPE:
- id = gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str) );
- if (id == -1)
- return(-EBUSY);
- piord = (gdth_iord_str *)gdth_ioctl_tab[id-1][hanum];
- piord->size = sizeof(gdth_iord_str);
- piord->status = S_OK;
- if (ha->type == GDT_ISA || ha->type == GDT_EISA) {
- piord->iu.ctrtype.type = (unchar)((ha->stype>>20) - 0x10);
- } else if (ha->type != GDT_PCIMPR) {
- piord->iu.ctrtype.type = (unchar)((ha->stype<<8) + 6);
- } else {
- piord->iu.ctrtype.type = 0xfe;
- piord->iu.ctrtype.ext_type = 0x6000 | ha->stype;
- }
- piord->iu.ctrtype.info = ha->brd_phys;
- piord->iu.ctrtype.oem_id = (ushort)GDT3_ID;
- break;
-
- case GDTIOCTL_CTRCNT:
- id = gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str) );
- if (id == -1)
- return(-EBUSY);
- piord = (gdth_iord_str *)gdth_ioctl_tab[id-1][hanum];
- piord->size = sizeof(gdth_iord_str);
- piord->status = S_OK;
- piord->iu.ctrcnt.count = (ushort)gdth_ctr_count;
- break;
-
- case GDTIOCTL_OSVERS:
- id = gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str) );
- if (id == -1)
- return(-EBUSY);
- piord = (gdth_iord_str *)gdth_ioctl_tab[id-1][hanum];
- piord->size = sizeof(gdth_iord_str);
- piord->status = S_OK;
- piord->iu.osvers.version = (unchar)(LINUX_VERSION_CODE >> 16);
- piord->iu.osvers.subversion = (unchar)(LINUX_VERSION_CODE >> 8);
- piord->iu.osvers.revision = (ushort)(LINUX_VERSION_CODE & 0xff);
- break;
-
- case GDTIOCTL_LOCKDRV:
- id = gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str) );
- if (id == -1)
- return(-EBUSY);
- piord = (gdth_iord_str *)gdth_ioctl_tab[id-1][hanum];
- for (i = k = 0; i < piowr->iu.lockdrv.drive_cnt; ++i) {
- found = FALSE;
- for (j = 0; j < ha->bus_cnt; ++j) {
- for (k = 0; k < MAXID; ++k) {
- if (ha->id[j][k].type == CACHE_DTYP &&
- ha->id[j][k].hostdrive == piowr->iu.lockdrv.drives[i])
{
- found = TRUE;
- break;
- }
- }
- if (found)
- break;
- }
- if (!found)
- continue;
-
- if (piowr->iu.lockdrv.lock) {
- save_flags( flags );
- cli();
- ha->id[j][k].lock = 1;
- restore_flags( flags );
- gdth_wait_completion( hanum, j, k );
- gdth_stop_timeout( hanum, j, k );
- } else {
- save_flags( flags );
- cli();
- ha->id[j][k].lock = 0;
- restore_flags( flags );
- gdth_start_timeout( hanum, j, k );
- gdth_next( hanum );
- }
- }
- piord->size = sizeof(gdth_iord_str);
- piord->status = S_OK;
- break;
-
- case GDTIOCTL_LOCKCHN:
- id = gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str) );
- if (id == -1)
- return(-EBUSY);
- for (k = 0, j = piowr->iu.lockchn.channel; k < MAXID; ++k) {
- if (ha->id[j][k].type != RAW_DTYP)
- continue;
-
- if (piowr->iu.lockchn.lock) {
- save_flags( flags );
- cli();
- ha->id[j][k].lock = 1;
- restore_flags( flags );
- gdth_wait_completion( hanum, j, k );
- gdth_stop_timeout( hanum, j, k );
- } else {
- save_flags( flags );
- cli();
- ha->id[j][k].lock = 0;
- restore_flags( flags );
- gdth_start_timeout( hanum, j, k );
- gdth_next( hanum );
- }
- }
- piord = (gdth_iord_str *)gdth_ioctl_tab[id-1][hanum];
- piord->size = sizeof(gdth_iord_str);
- piord->status = S_OK;
- break;
-
- case GDTIOCTL_EVENT:
- id = gdth_ioctl_alloc( hanum, sizeof(gdth_iord_str) );
- if (id == -1)
- return(-EBUSY);
- piord = (gdth_iord_str *)gdth_ioctl_tab[id-1][hanum];
- if (piowr->iu.event.erase == 0) {
- piord->iu.event.handle = gdth_read_event( piowr->iu.event.handle,
- (gdth_evt_str *)piord->iu.event.evt );
- } else {
- piord->iu.event.handle = piowr->iu.event.handle;
- gdth_readapp_event( (unchar)piowr->iu.event.erase,
- (gdth_evt_str *)piord->iu.event.evt );
- }
- piord->size = sizeof(gdth_iord_str);
- piord->status = S_OK;
- break;
-
- default:
- return(-EINVAL);
- }
- /* we return a buffer ID to detect the right buffer during READ-IOCTL */
- return id;
-}
-
-static int gdth_get_info(char *buffer,char **start,off_t offset,
- int length,int vh,int hanum,int busnum)
-{
- int size = 0,len = 0;
- off_t begin = 0,pos = 0;
- gdth_ha_str *ha;
- gdth_iord_str *piord;
- int id;
-
- TRACE2(("gdth_get_info() ha %d bus %d\n",hanum,busnum));
- ha = HADATA(gdth_ctr_tab[hanum]);
- id = length;
-
- /* look for buffer ID in length */
- if (id > 4) {
-#if LINUX_VERSION_CODE >= 0x020000
- size = sprintf(buffer+len,
- "%s SCSI Disk Array Controller\n",
- ha->ctr_name);
-#else
- size = sprintf(buffer+len,
- "%s SCSI Disk Array Controller (SCSI Bus %d)\n",
- ha->ctr_name,busnum);
-#endif
- len += size; pos = begin + len;
- size = sprintf(buffer+len,
- "Firmware Version: %d.%2d\tDriver Version: %s\n",
- (unchar)(ha->cpar.version>>8),
- (unchar)(ha->cpar.version),GDTH_VERSION_STR);
- len += size; pos = begin + len;
-
- if (pos < offset) {
- len = 0;
- begin = pos;
- }
- if (pos > offset + length)
- goto stop_output;
-
- } else {
- piord = (gdth_iord_str *)gdth_ioctl_tab[id-1][hanum];
- if (piord == NULL)
- goto stop_output;
- length = piord->size;
- memcpy(buffer+len, (char *)piord, length);
- gdth_ioctl_free(hanum, id);
- len += length; pos = begin + len;
-
- if (pos < offset) {
- len = 0;
- begin = pos;
- }
- if (pos > offset + length)
- goto stop_output;
- }
-
-stop_output:
- *start = buffer +(offset-begin);
- len -= (offset-begin);
- if (len > length)
- len = length;
- TRACE2(("get_info() len %d pos %d begin %d offset %d length %d size %d\n",
- len,(int)pos,(int)begin,(int)offset,length,size));
- return(len);
-}
-
-
-void gdth_scsi_done(Scsi_Cmnd *scp)
-{
- TRACE2(("gdth_scsi_done()\n"));
-
- scp->request.rq_status = RQ_SCSI_DONE;
-
- if (scp->request.sem != NULL)
- up(scp->request.sem);
-}
-
-static int gdth_ioctl_alloc(int hanum, ushort size)
-{
- ulong flags;
- int i;
-
- if (size == 0)
- return -1;
-
- save_flags(flags);
- cli();
-
- for (i = 0; i < 4; ++i) {
- if (gdth_ioctl_tab[i][hanum] == NULL) {
- gdth_ioctl_tab[i][hanum] = kmalloc( size, GFP_ATOMIC | GFP_DMA );
- break;
- }
- }
-
- restore_flags(flags);
- if (i == 4 || gdth_ioctl_tab[i][hanum] == NULL)
- return -1;
- return (i+1);
-}
-
-static void gdth_ioctl_free(int hanum, int idx)
-{
- ulong flags;
-
- save_flags(flags);
- cli();
-
- kfree( gdth_ioctl_tab[idx-1][hanum] );
- gdth_ioctl_tab[idx-1][hanum] = NULL;
-
- restore_flags(flags);
-}
-
-static void gdth_wait_completion(int hanum, int busnum, int id)
-{
- ulong flags;
- int i;
- Scsi_Cmnd *scp;
-
- save_flags(flags);
- cli();
-
- for (i = 0; i < GDTH_MAXCMDS; ++i) {
- scp = gdth_cmd_tab[i][hanum].cmnd;
-#if LINUX_VERSION_CODE >= 0x020000
- if (!SPECIAL_SCP(scp) && scp->target == (unchar)id &&
- scp->channel == (unchar)busnum)
-#else
- if (!SPECIAL_SCP(scp) && scp->target == (unchar)id &&
- NUMDATA(scp->host)->busnum == (unchar)busnum)
-#endif
- {
- scp->SCp.have_data_in = 0;
- restore_flags(flags);
- while (!scp->SCp.have_data_in)
- barrier();
- scp->scsi_done(scp);
- save_flags(flags);
- cli();
- }
- }
- restore_flags(flags);
-}
-
-static void gdth_stop_timeout(int hanum, int busnum, int id)
-{
- ulong flags;
- Scsi_Cmnd *scp;
- gdth_ha_str *ha;
-
- save_flags(flags);
- cli();
- ha = HADATA(gdth_ctr_tab[hanum]);
-
- for (scp = ha->req_first; scp; scp = (Scsi_Cmnd *)scp->SCp.ptr) {
-#if LINUX_VERSION_CODE >= 0x020000
- if (scp->target == (unchar)id &&
- scp->channel == (unchar)busnum)
-#else
- if (scp->target == (unchar)id &&
- NUMDATA(scp->host)->busnum == (unchar)busnum)
-#endif
- {
- TRACE2(("gdth_stop_timeout(): update_timeout()\n"));
- scp->SCp.buffers_residual = gdth_update_timeout(hanum, scp, 0);
- }
- }
- restore_flags(flags);
-}
-
-static void gdth_start_timeout(int hanum, int busnum, int id)
-{
- ulong flags;
- Scsi_Cmnd *scp;
- gdth_ha_str *ha;
-
- save_flags(flags);
- cli();
- ha = HADATA(gdth_ctr_tab[hanum]);
-
- for (scp = ha->req_first; scp; scp = (Scsi_Cmnd *)scp->SCp.ptr) {
-#if LINUX_VERSION_CODE >= 0x020000
- if (scp->target == (unchar)id &&
- scp->channel == (unchar)busnum)
-#else
- if (scp->target == (unchar)id &&
- NUMDATA(scp->host)->busnum == (unchar)busnum)
-#endif
- {
- TRACE2(("gdth_start_timeout(): update_timeout()\n"));
- gdth_update_timeout(hanum, scp, scp->SCp.buffers_residual);
- }
- }
- restore_flags(flags);
-}
-
-static int gdth_update_timeout(int hanum, Scsi_Cmnd *scp, int timeout)
-{
- ulong flags;
- int oldto;
-
- save_flags(flags);
- cli();
- oldto = scp->timeout_per_command;
- scp->timeout_per_command = timeout;
-
-#if LINUX_VERSION_CODE >= 0x02014B
- if (timeout == 0) {
- del_timer(&scp->eh_timeout);
- scp->eh_timeout.data = (unsigned long) NULL;
- scp->eh_timeout.expires = 0;
- } else {
- if (scp->eh_timeout.data != (unsigned long) NULL)
- del_timer(&scp->eh_timeout);
- scp->eh_timeout.data = (unsigned long) scp;
- scp->eh_timeout.expires = jiffies + timeout;
- add_timer(&scp->eh_timeout);
- }
-#else
- if (timeout > 0) {
- if (timer_table[SCSI_TIMER].expires == 0) {
- timer_table[SCSI_TIMER].expires = jiffies + timeout;
- timer_active |= 1 << SCSI_TIMER;
- } else {
- if (jiffies + timeout < timer_table[SCSI_TIMER].expires)
- timer_table[SCSI_TIMER].expires = jiffies + timeout;
- }
- }
-#endif
-
- restore_flags(flags);
- return oldto;
-}
-
diff --git a/linux/src/drivers/scsi/scripts.h b/linux/src/drivers/scsi/scripts.h
deleted file mode 100644
index 482b0c2..0000000
--- a/linux/src/drivers/scsi/scripts.h
+++ /dev/null
@@ -1,1357 +0,0 @@
-/***********************************************************************
-;* File Name : SCRIPTS.H *
-;* Description:SCRIPT language for NCR53c825A,875 SCRIPT processor*
-;* *
-;***********************************************************************
-
-;==========================================================
-; NCR 53C810,53C815,53C820,53C825,53C825A,53C860,53C875
-; Script language definition for assembly programming
-;==========================================================
-
-;==========================================================
-; DMA Command
-;==========================================================
-*/
-#define DCMD_BLOCK_MOVE 0
-#define DCMD_IO 0x040000000 /*;BIT30 */
-#define DCMD_RD_WRT 0x040000000 /*;BIT30 */
-#define DCMD_XFER_CTRL 0x080000000 /*;BIT31 */
-#define DCMD_MEM_MOVE 0x0C0000000 /*;(BIT31+BIT30) */
-#define DCMD_LOAD_STORE 0x0E0000000 /*;(BIT31+BIT30+BIT29) */
-/*;==========================================================*/
-#define INDIRECT_ADDR 0x20000000 /*;BIT29 */
-#define TABLE_INDIRECT 0x10000000 /*;BIT28 */
-#define BLOCK_MOVE 0x08000000 /*;BIT27 */
-#define CHAIN_MOVE 0
-/*; SCSI phase definition */
-#define DATA_OUT_ 0x00000000 /*;data out phase */
-#define DATA_IN_ 0x01000000 /*;BIT24 ; data in phase */
-#define COMMAND_ 0x02000000 /*;BIT25 ; command phase */
-#define STATUS_ 0x03000000 /*;(BIT25+BIT24) ; status phase */
-#define RESERVED_OUT 0x04000000 /*;BIT26 */
-#define RESERVED_IN 0x05000000 /*;(BIT26+BIT24) */
-#define MSG_OUT_ 0x06000000 /*;(BIT26+BIT25) ; message in phase
*/
-#define MSG_IN_ 0x07000000 /*;(BIT26+BIT25+BIT24);message out
phase */
-/*;----------------------------------------------------------*/
-#define DCMD_SELECT 0x40000000 /*;DCMD_IO+0 */
-#define DCMD_SELECT_ATN 0x41000000 /*;(DCMD_IO+BIT24) */
-#define DCMD_WAIT_DISC 0x48000000 /*;(DCMD_IO+BIT27) */
-#define DCMD_WAIT_RESEL 0x50000000 /*;(DCMD_IO+BIT28) */
-#define DCMD_SET_CARRY 0x58000400 /*;(DCMD_IO+BIT28+BIT27+BIT10) */
-#define DCMD_SET_ACK 0x58000040 /*;(DCMD_IO+BIT28+BIT27+BIT6) */
-#define DCMD_SET_ATN 0x58000008 /*;(DCMD_IO+BIT28+BIT27+BIT3) */
-#define DCMD_CLR_CARRY 0x60000400 /*;(DCMD_IO+BIT29+BIT10) */
-#define DCMD_CLR_ACK 0x60000040 /*;(DCMD_IO+BIT29+BIT6) */
-#define DCMD_CLR_ATN 0x60000008 /*;(DCMD_IO+BIT29+BIT3) */
-#define RELATIVE_ADDR 0x04000000 /*;BIT26 */
-#define IO_TABLE_INDIR 0x02000000 /*;BIT25 */
-/*;----------------------------------------------------------*/
-#define MOVE_FROM_SFBR 0x68000000 /*;(DCMD_RD_WRT+BIT29+BIT27) */
-#define MOVE_TO_SFBR 0x70000000 /*;(DCMD_RD_WRT+BIT29+BIT28) */
-#define RD_MODIFY_WRT 0x78000000 /*;(DCMD_RD_WRT+BIT29+BIT28+BIT27) */
-#define OP_MOVE_DATA 0
-#define OP_SHIFT_LEFT_C 0x01000000 /*;BIT24 */
-#define OP_OR 0x02000000 /*;BIT25 */
-#define OP_XOR 0x03000000 /*;(BIT25+BIT24) */
-#define OP_AND 0x04000000 /*;BIT26 */
-#define OP_SHIFT_RIGHT_C 0x05000000 /*;(BIT26+BIT24) */
-#define OP_ADD_DATA 0x06000000 /*;(BIT26+BIT25) */
-#define OP_ADD_DATA_C 0x07000000 /*;(BIT26+BIT25+BIT24) */
-#define USE_SFBR 0x00800000 /*;BIT23 */
-/*;----------------------------------------------------------*/
-#define DCMD_JUMP 0x80000000 /*;DCMD_XFER_CTRL+0 */
-#define DCMD_CALL 0x88000000 /*;(DCMD_XFER_CTRL+BIT27) */
-#define DCMD_RETURN 0x90000000 /*;(DCMD_XFER_CTRL+BIT28) */
-#define DCMD_INT 0x98000000 /*;(DCMD_XFER_CTRL+BIT28+BIT27) */
-#define RELATIVE_ 0x00800000 /*;BIT23 */
-#define IF_CARRY 0x00200000 /*;BIT21 */
-#define INT_ON_FLY_ 0x00100000 /*;BIT20 */
-#define IF_TRUE 0x00080000 /*;BIT19 */
-#define IF_NOT 0
-#define DATA_CMP 0x00040000 /*;BIT18 */
-#define PHASE_CMP 0x00020000 /*;BIT17 */
-#define WAIT_PHASE_VALID 0x00010000 /*;BIT16 */
-/*;----------------------------------------------------------*/
-#define DSA_RELATIVE 0x10000000 /*;BIT28 */
-#define FLUSH_PREFETCH 0x02000000 /*;BIT25 */
-#define DCMD_LOAD 0x0E1000000 /*;(DCMD_LOAD_STORE+BIT24) */
-#define DCMD_STORE 0x0E0000000 /*;DCMD_LOAD_STORE */
-/*
-;==========================================================
-; SCSI message EQUATES
-;==========================================================
-*/
-#define CMD_COMPLETE 0
-#define EXT_MSG 1
-#define SAVE_PTR 2
-#define RESTORE_PTR 3
-#define DISCONNECTMSG 4
-#define INITIATOR_ERR 5
-#define ABORTMSG 6
-#define MSG_REJECT 7
-#define NOPMSG 8
-#define MSG_PARITY 9
-#define LINK_CMD_CPL 0x0a
-#define LINK_CMD_FLAG 0x0b
-#define RESET_DEVICE 0x0c
-#define IDENTIFYMSG 0x80
-#define SIMPLE_TAG 0x20
-#define IGNORE_WIDE_RES 0x23
-/*
-;==========================================================
-; Operation assumption
-; 1. If phase mismatch during Xfer PAD ==> do nothing
-; Else compute FIXUP needed
-; 2. After phase mismatch ==> Set to Xfer PAD
-; 3. At disconnection ==> Modify return address
-; 4. 1st restore ptr after reselection is ignored
-; 5. If Xfer PAD is done ==> Error
-;==========================================================
-*/
-/* static start_script
- static reselected
- static reselecttag
- static select0
- static select1
- static check_phase
- static status1_phase
- static command_phase
- static jump_table0
- static jump_tableB
- static din_phase
- static din_phaseB
- static din_pad_0
- static din_pad_addrB
- static dout_phase
- static dout_phaseB
- static dout_pad_0
- static dout_pad_addrB
- static jump_tablew
- static jump_tableW
- static din_phase1
- static din_phaseW
- static din_pad_1
- static din_pad_addrW
- static dout_phase1
- static dout_phaseW
- static dout_pad_1
- static dout_pad_addrW
- static mout_phase
- static status_phase
- static min_phase
- static set_atn
- static clr_atn
- static end_script
- static start_mov
- static SrcPhysAddr
- static DesPhysAddr
-*/
-ULONG start_script[]={
-/*
-;==========================================================
-; Wait for reselection
-;==========================================================
-*/
- DCMD_WAIT_RESEL
- };
-ULONG jmp_select0[]={
- 0 /* offset select0 */
- };
-ULONG reselected[]={
- RD_MODIFY_WRT+OP_OR+0x200+0x340000, /* (2 shl 8) or (__scratcha shl 16)
*/
- 0,
-
- DCMD_INT+WAIT_PHASE_VALID+IF_NOT+PHASE_CMP+MSG_IN_,
- __RESELECTED,
-
- BLOCK_MOVE+MSG_IN_+1 /* ;move in ID byte */
- };
-ULONG ACB_msgin123_1[]={
- 0, /* offset ACB.msgin123,*/
-
- DCMD_INT+IF_TRUE,
- __RESELECTED1
- };
-ULONG reselecttag[]={
- DCMD_CLR_ACK,
- 0,
-
- BLOCK_MOVE+MSG_IN_+2 /* ;move 2 msg bytes */
- };
-ULONG ACB_msgin123_2[]={
- 0, /* offset ACB.msgin123,*/
-
- DCMD_INT+IF_TRUE,
- __RESELECTEDT
- };
-/*
-;==========================================================
-; Select
-; Case 1 : Only identify message is to be sent
-; Case 2 : Synchronous negotiation is requested
-;==========================================================
-*/
-ULONG select0[]={
- DCMD_INT+IF_TRUE,
- __SIGNAL
- };
-ULONG select1[]={ /* ; Select with ATN */
-
- DCMD_SELECT_ATN+IO_TABLE_INDIR /* +offset SRB.__select ;4200h or 0100H
*/
- };
-ULONG jmp_reselected[]={
- 0, /* offset reselected, */
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_NOT+PHASE_CMP+MSG_OUT_
- };
-ULONG jmp_check_phase[]={
- 0, /* offset check_phase, */
-
- TABLE_INDIRECT+BLOCK_MOVE+MSG_OUT_
- };
-ULONG SRB_msgout0[]={
- 0 /* offset SRB.__msgout0 */
- };
-ULONG check_phase[]={
- DCMD_RETURN+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0,
-
- DCMD_RETURN+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0
- };
-ULONG status1_phase[]={
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+STATUS_
- };
-ULONG jmp_status_phase[]={
- 0, /* offset status_phase,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+COMMAND_
- };
-ULONG jmp_command_phase[]={
- 0, /* offset command_phase, */
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+MSG_IN_
- };
-ULONG jmp_min_phase[]={
- 0, /* offset min_phase,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+MSG_OUT_
- };
-ULONG jmp_mout_phase[]={
- 0, /* offset mout_phase,*/
-
- DCMD_INT+IF_TRUE,
- __FATALERROR
- };
-/*
-;==========================================================
-; Command phase
-;==========================================================
-*/
-ULONG command_phase[]={
- DCMD_CLR_ATN,
- 0,
- TABLE_INDIRECT+BLOCK_MOVE+COMMAND_
- };
-ULONG SRB_command[]={
- 0, /* offset SRB.__command,*/
-
- DCMD_JUMP+IF_TRUE
- };
-ULONG jmp_check_phase1[]={
- 0 /* offset check_phase */
- };
-/*
-;==========================================================
-; Data phase jump table for 8 bit operation
-;==========================================================
-*/
-ULONG jmp_dio_phaseB[]={
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 0,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 0,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 8,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 8,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 16,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 16,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 24,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 24,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 32,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 32,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 40,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 40,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 48,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 48,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 56,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 56,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 64,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 64,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 72,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 72,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 80,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 80,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 88,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 88,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 96,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 96,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 104,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 104,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 112,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 112,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 120,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 120,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 0,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 0,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 8,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 8,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 16,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 16,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 24,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 24,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 32,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 32,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 40,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 40,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 48,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 48,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 56,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 56,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 64,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 64,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 72,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 72,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 80,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 80,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 88,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 88,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 96,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 96,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 104,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 104,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 112,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 112,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 120,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseB+ 120,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseB+ 128,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0 /* offset dout_phaseB+ 128 */
- };
-ULONG jump_table0[]={
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_
- };
-ULONG jmp_din_pad_0[]={
- 0, /* offset din_pad_0,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_
- };
-ULONG jmp_dout_pad_0[]={
- 0 /* offset dout_pad_0 */
- };
-
-#define jump_tableB jump_table0
-/*
-;==========================================================
-; Data in phase
-;==========================================================
-*/
-ULONG din_phaseB[]={
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment0,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment1,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment2,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment3,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment4,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment5,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment6,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment7,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment8,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment9,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment10,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment11,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment12,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment13,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment14,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment15,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment0,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment1,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment2,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment3,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment4,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment5,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment6,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment7,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment8,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment9,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment10,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment11,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment12,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment13,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment14,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment15,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment16,*/
-
- RD_MODIFY_WRT+OP_OR+0x100+0x340000, /*;(1 shl 8) or (__scratcha shl
16)*/
- 0,
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_NOT+PHASE_CMP+DATA_IN_
- };
-ULONG jmp_status1_phase[]={
- 0 /* offset status1_phase */
- };
-
-#define din_phase din_phaseB
-
-ULONG din_pad_0[]={
- RD_MODIFY_WRT+OP_OR+0x340000+0x400, /*;(4 shl 8) or (__scratcha shl
16)*/
- 0
- };
-ULONG din_pad_addrB[]={
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_IN_
- };
-ULONG SRB_SegmentPad[]={
- 0, /* offset SRB.SegmentPad,*/
-
- DCMD_JUMP+IF_TRUE
- };
-ULONG jmp_din_pad_addrB[]={
- 0 /* offset din_pad_addrB */
- };
-/*
-;==========================================================
-; Data out phase
-;==========================================================
-*/
-ULONG dout_phaseB[]={
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment0,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment1,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment2,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment3,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment4,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment5,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment6,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment7,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment8,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment9,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment10,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment11,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment12,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment13,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment14,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment15,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment0,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment1,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment2,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment3,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment4,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment5,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment6,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment7,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment8,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment9,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment10,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment11,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment12,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment13,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment14,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment15,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment16,*/
-
- RD_MODIFY_WRT+OP_OR+0x100+0x340000, /*;(1 shl 8) or (__scratcha shl
16)*/
- 0,
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_NOT+PHASE_CMP+DATA_OUT_
- };
-ULONG jmp_status1_phase1[]={
- 0 /* offset status1_phase */
- };
-
-#define dout_phase dout_phaseB
-
-ULONG dout_pad_0[]={
- RD_MODIFY_WRT+OP_OR+0x340000+0x400, /*;(4 shl 8) or (__scratcha shl
16)*/
- 0
- };
-ULONG dout_pad_addrB[]={
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_
- };
-ULONG SRB_SegmentPad1[]={
- 0, /* offset SRB.SegmentPad,*/
-
- DCMD_JUMP+IF_TRUE
- };
-ULONG jmp_dout_pad_addrB[]={
- 0 /* offset dout_pad_addrB */
- };
-/*
-;==========================================================
-; Data phase jump table for WIDE SCSI operation
-;==========================================================
-*/
-ULONG jmp_dio_phaseW[]={
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 0,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 0,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 8,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 8,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 16,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 16,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 24,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 24,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 32,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 32,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 40,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 40,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 48,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 48,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 56,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 56,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 64,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 64,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 72,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 72,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 80,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 80,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 88,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 88,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 96,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 96,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 104,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 104,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 112,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 112,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 120,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 120,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 0,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 0,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 8,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 8,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 16,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 16,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 24,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 24,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 32,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 32,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 40,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 40,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 48,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 48,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 56,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 56,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 64,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 64,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 72,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 72,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 80,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 80,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 88,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 88,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 96,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 96,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 104,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 104,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 112,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 112,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 120,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0, /* offset dout_phaseW+ 120,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_,
- 0, /* offset din_phaseW+ 128,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_,
- 0 /* offset dout_phaseW+ 128 */
- };
-ULONG jump_tablew[]={
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_IN_
- };
-ULONG jmp_din_pad_1[]={
- 0, /* offset din_pad_1,*/
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_TRUE+PHASE_CMP+DATA_OUT_
- };
-ULONG jmp_dout_pad_1[]={
- 0 /* offset dout_pad_1 */
- };
-
-#define jump_tableW jump_tablew
-/*
-;==========================================================
-; Data in phase
-;==========================================================
-*/
-ULONG din_phaseW[]={
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment0,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment1,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment2,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment3,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment4,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment5,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment6,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment7,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment8,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment9,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment10,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment11,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment12,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment13,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment14,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment15,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment0,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment1,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment2,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment3,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment4,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment5,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment6,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment7,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment8,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment9,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment10,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment11,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment12,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment13,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment14,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment15,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_,
- 0, /* offset SRB.Segment16,*/
-
- RD_MODIFY_WRT+OP_OR+0x340000+0x100, /*;(1 shl 8) or (__scratcha shl
16)*/
- 0,
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_NOT+PHASE_CMP+DATA_IN_
- };
-ULONG jmp_status1_phase2[]={
- 0 /* offset status1_phase */
- };
-
-#define din_phase1 din_phaseW
-
-ULONG din_pad_1[]={
- RD_MODIFY_WRT+OP_OR+0x340000+0x400, /*;(4 shl 8) or (__scratcha shl
16)*/
- 0
- };
-ULONG din_pad_addrW[]={
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_IN_
- };
-ULONG SRB_SegmentPad2[]={
- 0, /* offset SRB.SegmentPad,*/
-
- DCMD_JUMP+IF_TRUE
- };
-ULONG jmp_din_pad_addrW[]={
- 0 /* offset din_pad_addrW */
- };
-/*
-;==========================================================
-; Data out phase
-;==========================================================
-*/
-ULONG dout_phaseW[]={
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment0,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment1,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment2,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment3,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment4,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment5,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment6,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment7,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment8,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment9,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment10,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment11,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment12,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment13,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment14,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment15,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment0,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment1,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment2,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment3,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment4,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment5,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment6,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment7,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment8,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment9,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment10,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment11,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment12,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment13,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment14,*/
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+CHAIN_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment15,*/
-/*; 18000000h or DATA_OUT_ */
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_,
- 0, /* offset SRB.Segment16,*/
-
- RD_MODIFY_WRT+OP_OR+0x340000+0x100, /*;(1 shl 8) or (__scratcha shl
16)*/
- 0,
-
- DCMD_JUMP+WAIT_PHASE_VALID+IF_NOT+PHASE_CMP+DATA_OUT_
- };
-ULONG jmp_status1_phase3[]={
- 0 /* offset status1_phase */
- };
-
-#define dout_phase1 dout_phaseW
-
-ULONG dout_pad_1[]={
- RD_MODIFY_WRT+OP_OR+0x340000+0x400, /*;(4 shl 8) or (__scratcha shl
16)*/
- 0
- };
-ULONG dout_pad_addrW[]={
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+DATA_OUT_
- };
-ULONG SRB_SegmentPad3[]={
- 0, /* offset SRB.SegmentPad,*/
-
- DCMD_JUMP+IF_TRUE
- };
-ULONG jmp_dout_pad_addrW[]={
- 0 /* offset dout_pad_addrW */
- };
-/*
-;==========================================================
-; message out phase
-;==========================================================
-*/
-ULONG mout_phase[]={
- DCMD_SET_ATN,
- 0,
-
- DCMD_BLOCK_MOVE+TABLE_INDIRECT+BLOCK_MOVE+MSG_OUT_
- };
-ULONG SRB_msgout01[]={
- 0, /* offset SRB.__msgout0,*/
-
- DCMD_JUMP+IF_TRUE
- };
-ULONG jmp_check_phase2[]={
- 0 /* offset check_phase */
- };
-/*
-;==========================================================
-; Status phase process
-;==========================================================
-*/
-ULONG status_phase[]={
- DCMD_BLOCK_MOVE+BLOCK_MOVE+STATUS_+1
- };
-ULONG ACB_status[]={
- 0 /* offset ACB.status */
- };
-/*
-;==========================================================
-; message in phase
-;==========================================================
-*/
-ULONG min_phase[]={
- DCMD_BLOCK_MOVE+BLOCK_MOVE+MSG_IN_+1
- };
-ULONG ACB_msgin123_3[]={
- 0, /* offset ACB.msgin123,*/
-
- DCMD_JUMP+IF_NOT+DATA_CMP+CMD_COMPLETE
- };
-ULONG jmp_jump_msgok[]={
- 0 /* offset jump_msgok */
- };
-/*
-;==========================================================
-; command complete message
-;==========================================================
-*/
-ULONG msg__0[]={
- RD_MODIFY_WRT+OP_AND+0x20000+0x7F00, /*;(7FH shl 8) or (__scntl2 shl
16)*/
- 0,
-
- DCMD_CLR_ACK,
- 0,
-
- DCMD_WAIT_DISC,
- 0,
-
- DCMD_INT+IF_TRUE,
- __COMPLETE
- };
-/*
-;==========================================================
-; Other message
-;==========================================================
-*/
-ULONG jump_msgok[]={
- DCMD_JUMP+IF_TRUE+DATA_CMP+SAVE_PTR
- };
-ULONG jmp_msg__a[]={
- 0, /* offset msg__a,*/
-
- DCMD_JUMP+IF_TRUE+DATA_CMP+RESTORE_PTR
- };
-ULONG jmp_msg__3[]={
- 0, /* offset msg__3,*/
-
- DCMD_JUMP+IF_TRUE+DATA_CMP+DISCONNECTMSG
- };
-ULONG jmp_msg__4[]={
- 0, /* offset msg__4,*/
-
- DCMD_JUMP+IF_TRUE+DATA_CMP+EXT_MSG
- };
-ULONG jmp_msg__1[]={
- 0, /* offset msg__1,*/
-
- DCMD_INT+IF_TRUE+DATA_CMP+MSG_REJECT,
- __MSGREJECT,
-
- DCMD_JUMP+IF_TRUE+DATA_CMP+LINK_CMD_CPL
- };
-ULONG jmp_msg__a1[]={
- 0, /* offset msg__a,*/
-
- DCMD_JUMP+IF_TRUE+DATA_CMP+LINK_CMD_FLAG
- };
-ULONG jmp_msg__a2[]={
- 0, /* offset msg__a,*/
-
- DCMD_JUMP+IF_TRUE+DATA_CMP+IGNORE_WIDE_RES
- };
-ULONG jmp_msg__23[]={
- 0, /* offset msg__23,*/
-
- DCMD_INT+IF_TRUE,
- __MSGUNKNOWN
- };
-/*
-;==========================================================
-; Extended message
-;==========================================================
-*/
-ULONG msg__1[]={
- DCMD_CLR_ACK,
- 0,
-
- DCMD_BLOCK_MOVE+BLOCK_MOVE+MSG_IN_+1 /* ;ext msg len */
- };
-ULONG ACB_msgin123_4[]={
- 0, /* offset ACB.msgin123,*/
-
- DCMD_JUMP+IF_TRUE+DATA_CMP+3
- };
-ULONG jmp_msg___3[]={
- 0, /* offset msg___3,*/
-
- DCMD_JUMP+IF_TRUE+DATA_CMP+2
- };
-ULONG jmp_msg___2[]={
- 0, /* offset msg___2,*/
-
- DCMD_INT+IF_TRUE,
- __MSGEXTEND
- };
-
-ULONG msg___3[]={
- DCMD_CLR_ACK,
- 0,
-
- DCMD_BLOCK_MOVE+BLOCK_MOVE+MSG_IN_+3
- };
-ULONG ACB_msgin123_5[]={
- 0, /* offset ACB.msgin123,*/
-
- DCMD_INT+IF_TRUE,
- __MSGSYNC
- };
-
-ULONG msg___2[]={
- DCMD_CLR_ACK,
- 0,
-
- DCMD_BLOCK_MOVE+BLOCK_MOVE+MSG_IN_+2
- };
-ULONG ACB_msgin123_6[]={
- 0, /* offset ACB.msgin123,*/
-
- DCMD_INT+IF_TRUE,
- __MSGWIDE
- };
-/*
-;############################################################
-; for synchronous negotiation
-; 1. Active ==> INT3, restart at data__1_2
-; 2. Passive ==> INT3, prepare message out, restart at data__1_1
-; 3. Disable ==> INT3, prepare message out, restart at data__1_1
-;############################################################
-*/
-ULONG set_atn[]={
- DCMD_SET_ATN,
- 0
- };
-ULONG msg__a[]={
- DCMD_CLR_ACK,
- 0,
-
- DCMD_JUMP+IF_TRUE
- };
-ULONG jmp_check_phase3[]={
- 0 /* offset check_phase */
- };
-
-ULONG msg__23[]={ /* ; ignore wide residue */
- DCMD_CLR_ACK,
- 0,
-
- DCMD_BLOCK_MOVE+BLOCK_MOVE+MSG_IN_+1
- };
-ULONG ACB_msgin123_7[]={
- 0, /* offset ACB.msgin123,*/
-
- DCMD_CLR_ACK,
- 0,
-
- DCMD_JUMP+IF_TRUE
- };
-ULONG jmp_check_phase4[]={
- 0 /* offset check_phase */
- };
-
-ULONG msg__3[]={
- DCMD_CLR_ACK,
- 0,
-
- DCMD_JUMP+IF_TRUE
- };
-ULONG jmp_check_phase5[]={
- 0 /* offset check_phase */
- };
-
-ULONG msg__4[]={ /* ; disconnect */
- RD_MODIFY_WRT+OP_AND+0x20000+0x7F00, /*;(7FH shl 8) or (__scntl2 shl
16)*/
- 0,
-
- DCMD_CLR_ACK,
- 0,
-
- DCMD_WAIT_DISC,
- 0,
-
- DCMD_INT+IF_TRUE,
- __DISCONNECTED
- };
-
-ULONG clr_atn[]={
- DCMD_CLR_ATN,
- 0,
-
- DCMD_JUMP+IF_TRUE
- };
-ULONG jmp_check_phase6[]={
- 0 /* offset check_phase */
- };
-/*
-;==========================================================
-; Used for script operation
-;==========================================================
-*/
-ULONG start_mov[]={
-/*; DCMD_MEM_MOVE+(OFFSET DGROUP:end_script - OFFSET DGROUP:start_script)
;Memory move SCRIPTS instruction*/
- DCMD_MEM_MOVE+0x1000 /*;Memory move SCRIPTS instruction ( 4K )*/
- };
-ULONG SrcPhysAddr[]={
- 0 /*; source */
- };
-ULONG DesPhysAddr[]={
- 0, /*; destination */
-
- DCMD_INT+IF_TRUE, /*; script interrupt, */
- 0,
-
- DCMD_INT+IF_NOT, /*; script interrupt */
- 0
- };
-ULONG end_script[]={0};
-/***********************************************************************/
-
diff --git a/linux/src/drivers/scsi/scsiio.c b/linux/src/drivers/scsi/scsiio.c
deleted file mode 100644
index cea68b8..0000000
--- a/linux/src/drivers/scsi/scsiio.c
+++ /dev/null
@@ -1,1537 +0,0 @@
-/***********************************************************************
- * FILE NAME : SCSIIO.C *
- * BY : C.L. Huang *
- * Description: Device Driver for Tekram DC-390W/U/F (T) PCI SCSI *
- * Bus Master Host Adapter *
- ***********************************************************************/
-
-
-static void
-PrepareSG( PACB pACB, PDCB pDCB, PSRB pSRB )
-{
- ULONG retAddr,wlval;
- USHORT wval,i;
- PSGL psgl;
- PSGE psge;
-
-
- retAddr = pACB->jmp_table8;
- if(pDCB->DCBscntl3 & EN_WIDE_SCSI)
- retAddr += jmp_table16;
- wval = (USHORT)(pSRB->SGcount);
- wval <<= 4; /* 16 bytes per entry, datain=8, dataout=8 */
- /* (4 bytes for count, 4 bytes for addr) */
- retAddr -= (ULONG)wval;
- pSRB->ReturnAddr = retAddr; /* return address for SCRIPT */
- if(wval)
- {
- wval >>= 1;
- wlval = (ULONG) pSRB->SegmentPad;
- wlval -= (ULONG)wval;
- wval >>= 3;
- psge = (PSGE) wlval;
- psgl = pSRB->pSegmentList;
- for(i=0; i<wval; i++)
- {
-#ifndef VERSION_ELF_1_2_13
- psge->SGXPtr = virt_to_phys( psgl->address );
-#else
- psge->SGXPtr = (ULONG) psgl->address;
-#endif
- psge->SGXLen = psgl->length;
- psge++;
- psgl++;
- }
- }
-}
-
-
-static void
-DC390W_StartSCSI( PACB pACB, PDCB pDCB, PSRB pSRB )
-{
- USHORT ioport;
- UCHAR bval;
-
- pSRB->TagNumber = 31;
- ioport = pACB->IOPortBase;
- bval = SIGNAL_PROC;
- outb(bval,ioport+ISTAT);
- pACB->pActiveDCB = pDCB;
- pDCB->pActiveSRB = pSRB;
- return;
-}
-
-
-#ifndef VERSION_ELF_1_2_13
-static void
-DC390W_Interrupt( int irq, void *dev_id, struct pt_regs *regs)
-#else
-static void
-DC390W_Interrupt( int irq, struct pt_regs *regs)
-#endif
-{
- PACB pACB;
- PDCB pDCB;
- ULONG wlval;
- USHORT ioport = 0;
- USHORT wval, i;
- void (*stateV)( PACB );
- UCHAR istat = 0;
- UCHAR bval;
-
- pACB = pACB_start;
- if( pACB == NULL )
- return;
- for( i=0; i < adapterCnt; i++ )
- {
- if( pACB->IRQLevel == (UCHAR) irq )
- {
- ioport = pACB->IOPortBase;
- istat = inb( ioport+ISTAT );
- if( istat & (ABORT_OP+SCSI_INT_PENDING+DMA_INT_PENDING) )
- break;
- else
- pACB = pACB->pNextACB;
- }
- else
- {
- pACB = pACB->pNextACB;
- }
- }
-
- if( pACB == (PACB )-1 )
- {
- printk("DC390W_intr: Spurious interrupt detected!\n");
- return;
- }
-
-
-#ifdef DC390W_DEBUG1
- printk("Istate=%2x,",istat);
-#endif
- /* if Abort operation occurred, reset abort bit before reading DMA status
- to prevent further aborted interrupt. */
-
- if(istat & ABORT_OP)
- {
- istat &= ~ABORT_OP;
- outb(istat,ioport+ISTAT);
- }
-
- pDCB = pACB->pActiveDCB;
- bval = inb(ioport+CTEST2); /* Clear Signal Bit */
-
- /* If Scsi Interrupt, then clear Interrupt Status by reading
- Scsi interrupt status register 0. */
-
- wlval = 0;
- if(istat & SCSI_INT_PENDING)
- {
- wlval = (ULONG)inw( ioport+SIST0 );
- wlval <<= 8;
- }
-
- /* If DMA Interrupt, then read the DMA status register to see what happen
*/
-
- if(istat & DMA_INT_PENDING)
- {
- bval = inb(ioport+DSTAT);
- wlval |= (ULONG) bval;
- }
-
-#ifdef DC390W_DEBUG1
- printk("IDstate=%8x,",(UINT) wlval);
-#endif
- if(wlval & ( (SEL_TIMEOUT << 16)+
- ((SCSI_GERROR+UNEXPECT_DISC+SCSI_RESET) << 8)+
- ILLEGAL_INSTRUC+ABORT_) )
- {
- ExceptionHandler( wlval, pACB, pDCB );
- }
- else if( wlval & SCRIPTS_INT )
- {
- wval = inw( ioport+DSPS );
- stateV = (void *) IntVector[wval];
- stateV( pACB );
- }
- else if( wlval & ( PARITY_ERROR << 8) )
- ParityError( pACB, pDCB );
- else if( wlval & ( PHASE_MISMATCH << 8) )
- PhaseMismatch( pACB );
- return;
-}
-
-
-static void
-ExceptionHandler(ULONG wlval, PACB pACB, PDCB pDCB)
-{
- PSRB pSRB;
- UCHAR bval;
- USHORT ioport;
-
-/* disconnect/scsi reset/illegal instruction */
-
- ioport = pACB->IOPortBase;
- if(wlval & ( (SCSI_RESET+SCSI_GERROR) << 8) )
- DC390W_ScsiRstDetect( pACB );
- else if(wlval & ABORT_)
- {
-#ifdef DC390W_DEBUG0
- printk("AboRst,");
-#endif
- if( !InitialTime )
- DC390W_ResetSCSIBus2( pACB );
- }
- else if(wlval & (SEL_TIMEOUT << 16) )
- {
- pACB->status = SCSI_STAT_SEL_TIMEOUT;
-#ifdef DC390W_DEBUG1
- printk("Selto,");
-#endif
- DC390W_CmdCompleted( pACB );
- }
- else if(wlval & (UNEXPECT_DISC << 8) )
- {
- bval = inb(ioport+STEST3);
- bval |= CLR_SCSI_FIFO;
- outb(bval,ioport+STEST3);
- bval = CLR_DMA_FIFO;
- outb(bval,ioport+CTEST3);
- pSRB = pDCB->pActiveSRB;
- if( pSRB->SRBState & DO_SYNC_NEGO )
- {
- pDCB->DevMode &= ~SYNC_NEGO_;
- pACB->status = SCSI_STAT_CHECKCOND;
- DC390W_CmdCompleted( pACB );
- }
- else if( pSRB->SRBState & DO_WIDE_NEGO )
- {
- pDCB->DevMode &= ~WIDE_NEGO_;
- pACB->status = SCSI_STAT_CHECKCOND;
- DC390W_CmdCompleted( pACB );
- }
- else
- {
- pACB->status = SCSI_STAT_UNEXP_BUS_F;
- DC390W_CmdCompleted( pACB );
- }
-#ifdef DC390W_DEBUG0
- printk("Uxpbf,");
-#endif
- }
- else
- {
-#ifdef DC390W_DEBUG0
- printk("Except,");
-#endif
- DC390W_ResetSCSIBus( pACB );
- }
-}
-
-
-static void
-ParityError( PACB pACB, PDCB pDCB )
-{
- ULONG ioport;
- UCHAR bval,msg;
- ULONG wlval;
- PSRB pSRB;
-
- ioport = pACB->IOPortBase;
- bval = inb(ioport+SCRATCHA);
- if(bval & RE_SELECTED_)
- {
-#ifdef DC390W_DEBUG0
- printk("ParityErr,");
-#endif
- DC390W_ResetSCSIBus( pACB );
- return;
- }
- else
- {
- pSRB = pDCB->pActiveSRB;
- bval = inb(ioport+STEST3);
- bval |= CLR_SCSI_FIFO;
- outb(bval,ioport+STEST3);
- bval = CLR_DMA_FIFO;
- outb(bval,ioport+CTEST3);
-
- bval = inb(ioport+DCMD);
- bval &= 0x07; /* get phase bits */
- if(bval == 0x07) /* message in phase */
- {
- msg = MSG_PARITY_ERROR;
- wlval = pACB->jmp_clear_ack;
- }
- else
- {
- msg = MSG_INITIATOR_ERROR;
- wlval = pACB->jmp_next;
- }
- pSRB->__msgout0[0] = 1;
- pSRB->MsgOutBuf[0] = msg;
- outl(wlval,(ioport+DSP));
- return;
- }
-}
-
-
-static void
-DC390W_Signal( PACB pACB )
-{
- PDCB pDCB;
- PSRB pSRB;
- USHORT ioport;
- ULONG wlval, flags;
- UCHAR bval,msgcnt,tagnum;
-
- save_flags(flags);
- cli();
- ioport = pACB->IOPortBase;
- pDCB = pACB->pActiveDCB;
- pSRB = pDCB->pActiveSRB;
-#ifdef DC390W_DEBUG0
- printk("Signal,Cmd=%2x", pSRB->CmdBlock[0]);
-#endif
- wlval = pSRB->PhysSRB;
- outl(wlval,(ioport+DSA));
- wlval = pSRB->ReturnAddr;
- outl(wlval,(ioport+TEMP));
- msgcnt = 1;
- bval = pDCB->IdentifyMsg;
- pSRB->MsgOutBuf[0] = bval;
- if( (pSRB->CmdBlock[0] != INQUIRY) &&
- (pSRB->CmdBlock[0] != REQUEST_SENSE) )
- {
- if(pDCB->MaxCommand > 1)
- {
- wlval = 1;
- tagnum = 0;
- while( wlval & pDCB->TagMask )
- {
- wlval = wlval << 1;
- tagnum++;
- }
- pDCB->TagMask |= wlval;
- pSRB->TagNumber = tagnum;
- pSRB->MsgOutBuf[1] = MSG_SIMPLE_QTAG;
- pSRB->MsgOutBuf[2] = tagnum;
- msgcnt = 3;
- }
- }
- else
- {
- pSRB->MsgOutBuf[0] &= 0xBF; /* Diable Disconnected */
- if(pSRB->CmdBlock[0] == INQUIRY)
- {
- if(bval & 0x07)
- goto type_6_3;
- }
- if(pDCB->DevMode & WIDE_NEGO_)
- {
- msgcnt = 5;
- *((PULONG) &(pSRB->MsgOutBuf[1])) = 0x01030201;
- pSRB->SRBState |= DO_WIDE_NEGO;
- }
- else if(pDCB->DevMode & SYNC_NEGO_)
- {
- msgcnt = 6;
- *((PULONG) &(pSRB->MsgOutBuf[1])) = 0x00010301;
- pSRB->MsgOutBuf[4] = pDCB->NegoPeriod;
- pSRB->MsgOutBuf[5] = SYNC_NEGO_OFFSET;
- pSRB->SRBState |= DO_SYNC_NEGO;
- }
- }
-type_6_3:
- pSRB->__msgout0[0] = (ULONG) msgcnt;
- wlval = 0;
- outl(wlval,(ioport+SCRATCHA));
- bval = pDCB->DCBscntl0;
- outb(bval,ioport+SCNTL0);
- pSRB->__select = *((PULONG) &(pDCB->DCBselect));
-#ifdef DC390W_DEBUG0
- printk("__sel=%8x,", (UINT)(pSRB->__select));
-#endif
- wlval = pACB->jmp_select;
- outl(wlval,(ioport+DSP));
- restore_flags(flags);
- return;
-}
-
-
-static void
-DC390W_MessageWide( PACB pACB )
-{
- PDCB pDCB;
- PSRB pSRB;
- PUCHAR msgoutPtr;
- USHORT ioport;
- ULONG wlval;
- UCHAR bval,msgcnt;
-
-
-#ifdef DC390W_DEBUG0
- printk("MsgWide,");
-#endif
- ioport = pACB->IOPortBase;
- pDCB = pACB->pActiveDCB;
- pSRB = pDCB->pActiveSRB;
- msgcnt = 0;
- pDCB->DCBscntl3 &= ~EN_WIDE_SCSI;
- msgoutPtr = pSRB->MsgOutBuf;
- if( pSRB->SRBState & DO_WIDE_NEGO )
- {
- pSRB->SRBState &= ~DO_WIDE_NEGO;
- if( pACB->msgin123[0] == 3 )
- {
- bval = pACB->msgin123[1];
- if(bval == 1)
- {
- pDCB->DCBscntl3 |= EN_WIDE_SCSI;
- goto x5;
- }
- if(bval < 1)
- goto x5;
- }
- }
-
-/*type_11_1:*/
- msgcnt = 1;
- *msgoutPtr = MSG_REJECT_;
- msgoutPtr++;
-x5:
- bval = pDCB->DCBscntl3;
- outb(bval,ioport+SCNTL3);
- AdjustTemp(pACB,pDCB,pSRB);
- SetXferRate(pACB,pDCB);
- if( pDCB->DevMode & SYNC_NEGO_ )
- {
- *((PULONG)msgoutPtr) = 0x00010301;
- *(msgoutPtr + 3) = pDCB->NegoPeriod;
- *(msgoutPtr + 4) = SYNC_NEGO_OFFSET;
- msgcnt += 5;
- pSRB->SRBState |= DO_SYNC_NEGO;
- }
-
- pSRB->__msgout0[0] = (ULONG) msgcnt;
- wlval = pACB->jmp_clear_ack;
- if(msgcnt)
- wlval = pACB->jmp_set_atn;
- outl(wlval,(ioport+DSP));
- return;
-}
-
-
-static void
-DC390W_MessageSync( PACB pACB )
-{
- PDCB pDCB;
- PSRB pSRB;
- USHORT ioport;
- ULONG wlval;
- USHORT wval,wval1;
- UCHAR bval,bval1;
-
-#ifdef DC390W_DEBUG0
- printk("MsgSync,");
-#endif
- ioport = pACB->IOPortBase;
- pDCB = pACB->pActiveDCB;
- pSRB = pDCB->pActiveSRB;
- if( !(pSRB->SRBState & DO_SYNC_NEGO) )
- goto MessageExtnd;
- pSRB->SRBState &= ~DO_SYNC_NEGO;
- if(pACB->msgin123[0] != 1)
- {
-MessageExtnd:
- pSRB->__msgout0[0] = 1;
- pSRB->MsgOutBuf[0] = MSG_REJECT_;
- wlval = pACB->jmp_set_atn;
- outl(wlval,(ioport+DSP));
- return;
- }
- bval = pACB->msgin123[2]; /* offset */
-asyncx:
- pDCB->DCBsxfer = bval;
- if(bval == 0) /* if offset or period == 0, async */
- {
- if( pACB->AdaptType == DC390W )
- bval = SYNC_CLK_F2+ASYNC_CLK_F2;
- else
- bval = SYNC_CLK_F4+ASYNC_CLK_F4;
- pDCB->DCBscntl3 = bval;
- }
- else
- {
- bval = pACB->msgin123[1];
- if(bval == 0)
- goto asyncx;
- pDCB->SyncPeriod = bval;
- wval = (USHORT)bval;
- wval <<= 3;
- bval = pDCB->DCBscntl3;
- bval &= 0x0f;
- if(wval < 200) /* < 100 ns ==> Fast-20 */
- {
- bval |= 0x90; /* Fast-20 and div 1 */
- bval1 = 25; /* 12.5 ns */
- }
- else if(wval < 400)
- {
- bval |= 0x30; /* 1 cycle = 25ns */
- bval1 = 50;
- }
- else /* Non Fast */
- {
- bval |= 0x50; /* 1 cycle = 50ns */
- bval1 = 100;
- }
- if( pACB->AdaptType == DC390W )
- bval -= 0x20; /* turn down to 40Mhz scsi clock */
- /* assume 390W will not receive fast-20 */
- wval1 = wval;
- wval /= bval1;
- if(wval * bval1 < wval1)
- wval++;
- /* XFERP TP2 TP1 TP0 */
- wval -= 4; /* 4 0 0 0 */
- /* 5 0 0 1 */
- wval <<= 5;
- pDCB->DCBsxfer |= (UCHAR)wval;
- pDCB->DCBscntl3 = bval;
- }
-/*sync_2:*/
- SetXferRate( pACB,pDCB );
- wlval = pACB->jmp_clear_ack;
-/*sync_3:*/
- bval = pDCB->DCBscntl3;
- outb(bval,ioport+SCNTL3);
- bval = pDCB->DCBsxfer;
- outb(bval,ioport+SXFER);
- outl(wlval,(ioport+DSP));
- return;
-}
-
-
-static void
-DC390W_MsgReject( PACB pACB )
-{
- PDCB pDCB;
- PSRB pSRB;
- ULONG wlval;
- USHORT ioport;
- UCHAR bval;
-
-#ifdef DC390W_DEBUG0
- printk("Msgrjt,");
-#endif
- pDCB = pACB->pActiveDCB;
- pSRB = pDCB->pActiveSRB;
- wlval = pACB->jmp_clear_ack;
- if(pSRB->SRBState & DO_WIDE_NEGO)
- {
- pSRB->SRBState &= ~DO_WIDE_NEGO;
- pDCB->DCBscntl3 &= ~EN_WIDE_SCSI;
- AdjustTemp( pACB, pDCB, pSRB );
- SetXferRate( pACB, pDCB );
- if( pDCB->DevMode & SYNC_NEGO_ )
- {
- *((PULONG) &(pSRB->MsgOutBuf[0])) = 0x00010301;
- pSRB->MsgOutBuf[3] = pDCB->NegoPeriod;
- pSRB->MsgOutBuf[4] = SYNC_NEGO_OFFSET;
- pSRB->__msgout0[0] = 5;
- pSRB->SRBState |= DO_SYNC_NEGO;
- wlval = pACB->jmp_set_atn;
- }
- }
- else
- {
- if(pSRB->SRBState & DO_SYNC_NEGO)
- {
- pSRB->SRBState &= ~DO_SYNC_NEGO;
- pDCB->DCBsxfer = 0; /* reject sync msg, set aync */
- if( pACB->AdaptType == DC390W )
- bval = SYNC_CLK_F2+ASYNC_CLK_F2;
- else
- bval = SYNC_CLK_F4+ASYNC_CLK_F4;
- pDCB->DCBscntl3 = bval;
- SetXferRate(pACB,pDCB);
- wlval = pACB->jmp_clear_ack;
- }
- }
- ioport = pACB->IOPortBase;
- bval = pDCB->DCBscntl3;
- outb(bval,ioport+SCNTL3);
- bval = pDCB->DCBsxfer;
- outb(bval,ioport+SXFER);
- outl(wlval,(ioport+DSP));
- return;
-}
-
-
-static void
-AdjustTemp( PACB pACB, PDCB pDCB, PSRB pSRB )
-{
- USHORT ioport;
- ULONG wlval;
-
- wlval = pSRB->ReturnAddr;
- if(wlval <= pACB->jmp_table8)
- {
- if(pDCB->DCBscntl3 & EN_WIDE_SCSI)
- wlval += jmp_table16;
- }
- else
- {
- if((pDCB->DCBscntl3 & EN_WIDE_SCSI) == 0)
- wlval -= jmp_table16;
- }
- pSRB->ReturnAddr = wlval;
- ioport = pACB->IOPortBase;
- outl(wlval,(ioport+TEMP));
- return;
-}
-
-
-static void
-SetXferRate( PACB pACB, PDCB pDCB )
-{
- UCHAR bval;
- USHORT cnt, i;
- PDCB ptr;
-
- if( !(pDCB->IdentifyMsg & 0x07) )
- {
- if( pACB->scan_devices )
- {
- CurrDCBscntl3 = pDCB->DCBscntl3;
- }
- else
- {
- ptr = pACB->pLinkDCB;
- cnt = pACB->DeviceCnt;
- bval = pDCB->UnitSCSIID;
- for(i=0; i<cnt; i++)
- {
- if( ptr->UnitSCSIID == bval )
- {
- ptr->DCBsxfer = pDCB->DCBsxfer;
- ptr->DCBscntl3 = pDCB->DCBscntl3;
- }
- ptr = ptr->pNextDCB;
- }
- }
- }
- return;
-}
-
-
-static void
-DC390W_UnknownMsg( PACB pACB )
-{
- PSRB pSRB;
- ULONG wlval;
- USHORT ioport;
-
- pSRB = pACB->pActiveDCB->pActiveSRB;
- pSRB->__msgout0[0] = 1;
- pSRB->MsgOutBuf[0] = MSG_REJECT_;
- wlval = pACB->jmp_set_atn;
- ioport = pACB->IOPortBase;
- outl(wlval,(ioport+DSP));
- return;
-}
-
-
-static void
-DC390W_MessageExtnd( PACB pACB )
-{
- DC390W_UnknownMsg( pACB );
-}
-
-
-static void
-DC390W_Disconnected( PACB pACB )
-{
- PDCB pDCB;
- PSRB pSRB;
- ULONG wlval, flags;
- USHORT ioport;
- UCHAR bval;
-
-#ifdef DC390W_DEBUG0
- printk("Discnet,");
-#endif
- save_flags(flags);
- cli();
- pDCB = pACB->pActiveDCB;
- if (! pDCB)
- {
-#ifdef DC390W_DEBUG0
- printk("ACB:%08lx->ActiveDCB:%08lx !,", (ULONG)pACB, (ULONG)pDCB);
-#endif
- restore_flags(flags); return;
- }
-
- pSRB = pDCB->pActiveSRB;
-
- ioport = pACB->IOPortBase;
- bval = inb(ioport+SCRATCHA);
- pSRB->ScratchABuf = bval;
- pSRB->SRBState |= SRB_DISCONNECT; /* 1.02 */
- wlval = pACB->jmp_reselect;
- outl(wlval,(ioport+DSP));
- pACB->pActiveDCB = 0;
- DoWaitingSRB( pACB );
- restore_flags(flags);
- return;
-}
-
-
-static void
-DC390W_Reselected( PACB pACB )
-{
-#ifdef DC390W_DEBUG0
- printk("Rsel,");
-#endif
- pACB->msgin123[0] = 0x80; /* set identify byte 80h */
- DC390W_Reselected1(pACB);
- return;
-}
-
-
-static void
-DC390W_Reselected1( PACB pACB )
-{
- PDCB pDCB;
- PSRB pSRB;
- USHORT ioport, wval;
- ULONG wlval, flags;
- UCHAR bval;
-
-
-#ifdef DC390W_DEBUG0
- printk("Rsel1,");
-#endif
- ioport = pACB->IOPortBase;
- pDCB = pACB->pActiveDCB;
- if(pDCB)
- {
- pSRB = pDCB->pActiveSRB;
- RewaitSRB( pDCB, pSRB );
- }
-
- wval = (USHORT) (pACB->msgin123[0]);
- wval = (wval & 7) << 8; /* get LUN */
- wval |= (USHORT) (inb(ioport+SSID) & 0x0f); /* get ID */
- pDCB = pACB->pLinkDCB;
- while( *((PUSHORT) &pDCB->UnitSCSIID) != wval )
- pDCB = pDCB->pNextDCB;
- pACB->pActiveDCB = pDCB;
- bval = pDCB->DCBscntl3;
- outb(bval,ioport+SCNTL3);
- bval = pDCB->DCBsxfer;
- outb(bval,ioport+SXFER);
- bval = pDCB->DCBscntl0;
- outb(bval,ioport+SCNTL0);
- if(pDCB->MaxCommand > 1)
- {
- wlval = pACB->jmp_reselecttag;
- outl(wlval,(ioport+DSP));
- }
- else
- {
- pSRB = pDCB->pActiveSRB;
- if( !pSRB || !(pSRB->SRBState & SRB_DISCONNECT) )
- {
- save_flags(flags);
- cli();
- pSRB = pACB->pFreeSRB;
- pACB->pFreeSRB = pSRB->pNextSRB;
- restore_flags(flags);
- pSRB->SRBState = SRB_UNEXPECT_RESEL;
- pDCB->pActiveSRB = pSRB;
- pSRB->MsgOutBuf[0] = MSG_ABORT;
- pSRB->__msgout0[0] = 1;
- }
- pSRB->SRBState &= ~SRB_DISCONNECT;
- wlval = pSRB->PhysSRB;
- outl(wlval,(ioport+DSA));
- wlval = pSRB->ReturnAddr;
- outl(wlval,(ioport+TEMP));
- bval = pSRB->ScratchABuf;
- outb(bval,ioport+SCRATCHA);
- if( pSRB->SRBState & SRB_UNEXPECT_RESEL )
- wlval = pACB->jmp_set_atn;
- else
- wlval = pACB->jmp_clear_ack;
- outl(wlval,(ioport+DSP));
- }
- return;
-}
-
-
-static void
-DC390W_ReselectedT( PACB pACB )
-{
- PDCB pDCB;
- PSRB pSRB, psrb1;
- USHORT ioport;
- ULONG wlval, flags;
- UCHAR bval;
-
-#ifdef DC390W_DEBUG0
- printk("RselT,");
-#endif
- ioport = pACB->IOPortBase;
- bval = pACB->msgin123[1];
- pDCB = pACB->pActiveDCB;
- pSRB = pDCB->pGoingSRB;
- psrb1 = pDCB->pGoingLast;
- if( !pSRB )
- goto UXP_RSL;
- for(;;)
- {
- if(pSRB->TagNumber != bval)
- {
- if( pSRB != psrb1 )
- pSRB = pSRB->pNextSRB;
- else
- goto UXP_RSL;
- }
- else
- break;
- }
- if( !(pSRB->SRBState & SRB_DISCONNECT) )
- {
-UXP_RSL:
- save_flags(flags);
- cli();
- pSRB = pACB->pFreeSRB;
- pACB->pFreeSRB = pSRB->pNextSRB;
- restore_flags(flags);
- pSRB->SRBState = SRB_UNEXPECT_RESEL;
- pDCB->pActiveSRB = pSRB;
- pSRB->MsgOutBuf[0] = MSG_ABORT_TAG;
- pSRB->__msgout0[0] = 1;
- }
- else
- {
- pSRB->SRBState &= ~SRB_DISCONNECT;
- pDCB->pActiveSRB = pSRB;
- }
- wlval = pSRB->PhysSRB;
- outl(wlval,(ioport+DSA));
- wlval = pSRB->ReturnAddr;
- outl(wlval,(ioport+TEMP));
- bval = pSRB->ScratchABuf;
- outb(bval,ioport+SCRATCHA);
- if( pSRB->SRBState & SRB_UNEXPECT_RESEL )
- wlval = pACB->jmp_set_atn;
- else
- wlval = pACB->jmp_clear_ack;
- outl(wlval,(ioport+DSP));
- return;
-}
-
-
-static void
-DC390W_RestorePtr( PACB pACB )
-{
- PSRB pSRB;
- USHORT ioport;
- ULONG wlval;
-
- pSRB = pACB->pActiveDCB->pActiveSRB;
- wlval = pSRB->ReturnAddr;
- ioport = pACB->IOPortBase;
- outl(wlval,(ioport+TEMP));
- wlval = inl(ioport+DSP);
- outl(wlval,(ioport+DSP));
- return;
-}
-
-
-static void
-PhaseMismatch( PACB pACB )
-{
- USHORT ioport;
- ULONG wlval,swlval;
- USHORT wval;
- UCHAR bval,phase;
- PDCB pDCB;
-
-#ifdef DC390W_DEBUG0
- printk("Mismatch,");
-#endif
- ioport = pACB->IOPortBase;
- bval = inb(ioport+SCRATCHA);
- if(bval & OVER_RUN_) /* xfer PAD */
- {
- bval = inb(ioport+STEST3);
- bval |= CLR_SCSI_FIFO;
- outb(bval,ioport+STEST3);
- bval = CLR_DMA_FIFO;
- outb(bval,ioport+CTEST3);
- wlval = pACB->jmp_next; /* check phase */
- outl(wlval,(ioport+DSP));
- return;
- }
- pDCB = pACB->pActiveDCB;
- wlval = inl(ioport+DBC);
- phase = (UCHAR)((wlval & 0x07000000) >> 24);
- wlval &= 0xffffff; /* bytes not xferred */
- if( phase == SCSI_DATA_IN )
- {
- swlval = pACB->jmp_din8;
- if( pDCB->DCBscntl3 & EN_WIDE_SCSI )
- swlval += jmp_din16;
- DataIOcommon(pACB,swlval,wlval);
- }
- else if( phase == SCSI_DATA_OUT )
- {
- wval = (USHORT)inb(ioport+CTEST5);
- wval <<= 8;
- bval = inb(ioport+DFIFO);
- wval |= (USHORT) bval;
- wval -= ((USHORT)(wlval & 0xffff));
- wval &= 0x3ff;
- wlval += (ULONG)wval; /* # of bytes remains in FIFO */
- bval = inb(ioport+SSTAT0);
- if(bval & SODR_LSB_FULL)
- wlval++; /* data left in Scsi Output Data Buffer */
- if(bval & SODL_LSB_FULL)
- wlval++; /* data left in Scsi Output Data Latch */
- swlval = pACB->jmp_dout8;
- if(pDCB->DCBscntl3 & EN_WIDE_SCSI)
- {
- swlval += jmp_dout16;
- bval = inb(ioport+SSTAT2);
- if(bval & SODR_MSB_FULL)
- wlval++;
- if(bval & SODL_MSB_FULL)
- wlval++;
- }
- bval = inb(ioport+STEST3);
- bval |= CLR_SCSI_FIFO;
- outb(bval,ioport+STEST3);
- bval = CLR_DMA_FIFO;
- outb(bval,ioport+CTEST3);
- DataIOcommon(pACB,swlval,wlval);
- }
- else
- {
- bval = inb(ioport+STEST3);
- bval |= CLR_SCSI_FIFO;
- outb(bval,ioport+STEST3);
- bval = CLR_DMA_FIFO;
- outb(bval,ioport+CTEST3);
- if(phase == SCSI_MSG_OUT)
- wlval = pACB->jmp_clear_atn;
- else
- wlval = pACB->jmp_next; /* check phase */
- outl(wlval,(ioport+DSP));
- }
- return;
-}
-
-
-static void
-DataIOcommon( PACB pACB, ULONG Swlval, ULONG Cwlval )
-{
- /* Swlval - script address */
- /* Cwlval - bytes not xferred */
- PDCB pDCB;
- PSRB pSRB;
- PSGE Segptr;
- USHORT ioport;
- ULONG wlval,swlval,dataXferCnt;
- UCHAR bval,bvald;
-
- ioport = pACB->IOPortBase;
- wlval = inl((ioport+DSP));
- pDCB = pACB->pActiveDCB;
- pSRB = pDCB->pActiveSRB;
- wlval -= Swlval;
- bval = inb(ioport+SBCL);
- bval &= 0x07;
- if(bval == SCSI_MSG_IN)
- {
- bval = pDCB->DCBscntl3;
- bval &= ~EN_WIDE_SCSI;
- outb(bval,ioport+SCNTL3);
- bval = inb(ioport+SBDL);
- bvald = pDCB->DCBscntl3; /* enable WIDE SCSI */
- outb(bvald,ioport+SCNTL3);
- if(bval == MSG_DISCONNECT || bval == MSG_SAVE_PTR)
- {
- Segptr = (PSGE)((ULONG) &(pSRB->Segment0[0][0]) + wlval);
- dataXferCnt = Segptr->SGXLen - Cwlval;
- Segptr->SGXLen = Cwlval; /* modified count */
- Segptr->SGXPtr += dataXferCnt; /* modified address */
- swlval = pACB->jmp_table8;
- if(pDCB->DCBscntl3 & EN_WIDE_SCSI)
- swlval += jmp_table16;
- wlval <<= 1;
- swlval += wlval;
- swlval = swlval - ((MAX_SG_LIST_BUF+1) * 16);
- pSRB->ReturnAddr = swlval;
- }
- }
- else if( Cwlval ) /* Remaining not xferred -- UNDER_RUN */
- {
- Segptr = (PSGE)((ULONG) &(pSRB->Segment0[0][0]) + wlval);
- dataXferCnt = Segptr->SGXLen - Cwlval;
- Segptr->SGXLen = Cwlval; /* modified count */
- Segptr->SGXPtr += dataXferCnt; /* modified address */
- swlval = pACB->jmp_table8;
- if(pDCB->DCBscntl3 & EN_WIDE_SCSI)
- swlval += jmp_table16;
- wlval <<= 1;
- swlval += wlval;
- swlval = swlval - ((MAX_SG_LIST_BUF+1) * 16);
- pSRB->RemainSegPtr = swlval;
- }
-/* pm__1: */
- wlval = pSRB->ReturnAddr;
- outl(wlval,(ioport+TEMP));
- wlval = pACB->jmp_next;
- outl(wlval,(ioport+DSP));
- return;
-}
-
-
-static void
-DC390W_CmdCompleted( PACB pACB )
-{
- PDCB pDCB;
- PSRB pSRB;
- USHORT ioport;
- ULONG wlval, flags;
- UCHAR bval;
-
-#ifdef DC390W_DEBUG0
- printk("Cmplete,");
-#endif
- save_flags(flags);
- cli();
- pDCB = pACB->pActiveDCB;
- pSRB = pDCB->pActiveSRB;
- pDCB->pActiveSRB = NULL;
- ioport = pACB->IOPortBase;
-
- bval = inb(ioport+SCRATCHA);
- pSRB->ScratchABuf = bval; /* save status */
- bval = pSRB->TagNumber;
- if(pDCB->MaxCommand > 1)
- pDCB->TagMask &= (~(1 << bval)); /* free tag mask */
- pACB->pActiveDCB = NULL; /* no active device */
- wlval = pACB->jmp_reselect; /* enable reselection */
- outl(wlval,(ioport+DSP));
- SRBdone( pACB, pDCB, pSRB);
- restore_flags(flags);
- return;
-}
-
-
-static void
-SRBdone( PACB pACB, PDCB pDCB, PSRB pSRB )
-{
- PSRB psrb;
- UCHAR bval, bval1, i, j, status;
- PSCSICMD pcmd;
- PSCSI_INQDATA ptr;
- USHORT disable_tag;
- ULONG flags;
- PSGE ptr1;
- PSGL ptr2;
- ULONG wlval,swlval;
-
- pcmd = pSRB->pcmd;
- status = pACB->status;
- if(pSRB->SRBFlag & AUTO_REQSENSE)
- {
- pSRB->SRBFlag &= ~AUTO_REQSENSE;
- pSRB->AdaptStatus = 0;
- pSRB->TargetStatus = SCSI_STAT_CHECKCOND;
- if(status == SCSI_STAT_CHECKCOND)
- {
- pcmd->result = DID_BAD_TARGET << 16;
- goto ckc_e;
- }
- if(pSRB->RetryCnt == 0)
- {
- *((PULONG) &(pSRB->CmdBlock[0])) = pSRB->Segment0[0][0];
- pSRB->XferredLen = pSRB->Segment0[2][1];
- if( (pSRB->XferredLen) &&
- (pSRB->XferredLen >= pcmd->underflow) )
- {
- pcmd->result |= (DID_OK << 16);
- }
- else
- pcmd->result = (DRIVER_SENSE << 24) | (DRIVER_OK << 16) |
- SCSI_STAT_CHECKCOND;
- goto ckc_e;
- }
- else
- {
- pSRB->RetryCnt--;
- pSRB->TargetStatus = 0;
- *((PULONG) &(pSRB->CmdBlock[0])) = pSRB->Segment0[0][0];
- *((PULONG) &(pSRB->CmdBlock[4])) = pSRB->Segment0[0][1];
- *((PULONG) &(pSRB->CmdBlock[8])) = pSRB->Segment0[1][0];
- pSRB->__command[0] = pSRB->Segment0[1][1] & 0xff;
- pSRB->SGcount = (UCHAR) (pSRB->Segment0[1][1] >>
8);
- *((PULONG) &(pSRB->pSegmentList))= pSRB->Segment0[2][0];
- if( pSRB->CmdBlock[0] == TEST_UNIT_READY )
- {
- pcmd->result = (DRIVER_SENSE << 24) | (DRIVER_OK << 16) |
- SCSI_STAT_CHECKCOND;
- goto ckc_e;
- }
- pcmd->result |= (DRIVER_SENSE << 24);
- PrepareSG(pACB,pDCB,pSRB);
- pSRB->XferredLen = 0;
- DC390W_StartSCSI( pACB, pDCB, pSRB );
- return;
- }
- }
- if( status )
- {
- if( status == SCSI_STAT_CHECKCOND)
- {
- if( !(pSRB->ScratchABuf & SRB_OK) && (pSRB->SGcount) &&
(pSRB->RemainSegPtr) )
- {
- wlval = pSRB->RemainSegPtr;
- swlval = pACB->jmp_table8;
- if(pDCB->DCBscntl3 & EN_WIDE_SCSI)
- swlval += jmp_table16;
- swlval -= wlval;
- swlval >>= 4;
- bval = (UCHAR) swlval;
- wlval = 0;
- ptr1 = (PSGE) &pSRB->Segment0[MAX_SG_LIST_BUF+1][0];
- for( i=0; i< bval; i++)
- {
- wlval += ptr1->SGXLen;
- ptr1--;
- }
-
- bval = pSRB->SGcount;
- swlval = 0;
- ptr2 = pSRB->pSegmentList;
- for( i=0; i< bval; i++)
- {
- swlval += ptr2->length;
- ptr2++;
- }
- pSRB->XferredLen = swlval - wlval;
- pSRB->RemainSegPtr = 0;
-#ifdef DC390W_DEBUG0
- printk("XferredLen=%8x,NotXferLen=%8x,",(UINT)
pSRB->XferredLen,(UINT) wlval);
-#endif
- }
- RequestSense( pACB, pDCB, pSRB );
- return;
- }
- else if( status == SCSI_STAT_QUEUEFULL )
- {
- bval = (UCHAR) pDCB->GoingSRBCnt;
- bval--;
- pDCB->MaxCommand = bval;
- RewaitSRB( pDCB, pSRB );
- pSRB->AdaptStatus = 0;
- pSRB->TargetStatus = 0;
- return;
- }
- else if(status == SCSI_STAT_SEL_TIMEOUT)
- {
- pSRB->AdaptStatus = H_SEL_TIMEOUT;
- pSRB->TargetStatus = 0;
- pcmd->result = DID_BAD_TARGET << 16;
- }
- else if(status == SCSI_STAT_UNEXP_BUS_F)
- {
- pSRB->AdaptStatus = H_UNEXP_BUS_FREE;
- pSRB->TargetStatus = 0;
- pcmd->result |= DID_NO_CONNECT << 16;
- }
- else if(status == SCSI_STAT_BUS_RST_DETECT )
- {
- pSRB->AdaptStatus = H_ABORT;
- pSRB->TargetStatus = 0;
- pcmd->result = DID_RESET << 16;
- }
- else
- {
- pSRB->AdaptStatus = 0;
- pSRB->TargetStatus = status;
- if( pSRB->RetryCnt )
- {
- pSRB->RetryCnt--;
- pSRB->TargetStatus = 0;
- PrepareSG(pACB,pDCB,pSRB);
- pSRB->XferredLen = 0;
- DC390W_StartSCSI( pACB, pDCB, pSRB );
- return;
- }
- else
- {
- pcmd->result |= (DID_ERROR << 16) | (ULONG) (pACB->msgin123[0]
<< 8) |
- (ULONG) status;
- }
- }
- }
- else
- {
- status = pSRB->ScratchABuf;
- if(status & OVER_RUN_)
- {
- pSRB->AdaptStatus = H_OVER_UNDER_RUN;
- pSRB->TargetStatus = 0;
- pcmd->result |= (DID_OK << 16) | (pACB->msgin123[0] << 8);
- }
- else /* No error */
- {
- pSRB->AdaptStatus = 0;
- pSRB->TargetStatus = 0;
- pcmd->result |= (DID_OK << 16);
- }
- }
-ckc_e:
-
- if( pACB->scan_devices )
- {
- if( pSRB->CmdBlock[0] == TEST_UNIT_READY )
- {
- if(pcmd->result != (DID_OK << 16))
- {
- if( pcmd->result & SCSI_STAT_CHECKCOND )
- {
- goto RTN_OK;
- }
- else
- {
- pACB->DCBmap[pcmd->target] &= ~(1 << pcmd->lun);
- pPrevDCB->pNextDCB = pACB->pLinkDCB;
- if( (pcmd->target == pACB->max_id) &&
- ((pcmd->lun == 0) || (pcmd->lun == pACB->max_lun)) )
- {
- pACB->scan_devices = 0;
- }
- }
- }
- else
- {
-RTN_OK:
- pPrevDCB->pNextDCB = pDCB;
- pDCB->pNextDCB = pACB->pLinkDCB;
- if( (pcmd->target == pACB->max_id) && (pcmd->lun ==
pACB->max_lun) )
- pACB->scan_devices = END_SCAN;
- }
- }
- else if( pSRB->CmdBlock[0] == INQUIRY )
- {
- if( (pcmd->target == pACB->max_id) &&
- (pcmd->lun == pACB->max_lun) )
- {
- pACB->scan_devices = 0;
- }
- ptr = (PSCSI_INQDATA) (pcmd->request_buffer);
- if( pcmd->use_sg )
- ptr = (PSCSI_INQDATA) (((PSGL) ptr)->address);
- bval1 = ptr->DevType & SCSI_DEVTYPE;
- if(bval1 == SCSI_NODEV)
- {
- pACB->DCBmap[pcmd->target] &= ~(1 << pcmd->lun);
- pPrevDCB->pNextDCB = pACB->pLinkDCB;
- }
- else
- {
- pACB->DeviceCnt++;
- pPrevDCB = pDCB;
- pACB->pDCB_free = (PDCB) ((ULONG) (pACB->pDCB_free) + sizeof(
DC390W_DCB ));
- pDCB->DevType = bval1;
- if(bval1 == TYPE_DISK || bval1 == TYPE_MOD)
- {
- if( (((ptr->Vers & 0x07) >= 2) || ((ptr->RDF & 0x0F) == 2))
&&
- (ptr->Flags & SCSI_INQ_CMDQUEUE) &&
- (pDCB->DevMode & TAG_QUEUING_) &&
- (pDCB->DevMode & EN_DISCONNECT_) )
- {
- disable_tag = 0;
- for(i=0; i<BADDEVCNT; i++)
- {
- for(j=0; j<28; j++)
- {
- if( ((PUCHAR)ptr)[8+j] != baddevname[i][j])
- break;
- }
- if(j == 28)
- {
- disable_tag = 1;
- break;
- }
- }
-
- if( !disable_tag )
- {
- pDCB->MaxCommand = pACB->TagMaxNum;
- pDCB->TagMask = 0;
- }
- }
- }
- }
- }
- }
-
- save_flags( flags );
- cli();
-/* ReleaseSRB( pDCB, pSRB ); */
-
- if(pSRB == pDCB->pGoingSRB )
- {
- pDCB->pGoingSRB = pSRB->pNextSRB;
- }
- else
- {
- psrb = pDCB->pGoingSRB;
- while( psrb->pNextSRB != pSRB )
- psrb = psrb->pNextSRB;
- psrb->pNextSRB = pSRB->pNextSRB;
- if( pSRB == pDCB->pGoingLast )
- pDCB->pGoingLast = psrb;
- }
- pSRB->pNextSRB = pACB->pFreeSRB;
- pACB->pFreeSRB = pSRB;
- pDCB->GoingSRBCnt--;
-
- DoWaitingSRB( pACB );
- restore_flags(flags);
-
-/* Notify cmd done */
- pcmd->scsi_done( pcmd );
-
- if( pDCB->QIORBCnt )
- DoNextCmd( pACB, pDCB );
- return;
-}
-
-
-static void
-DoingSRB_Done( PACB pACB )
-{
- PDCB pDCB, pdcb;
- PSRB psrb, psrb2;
- USHORT cnt, i;
- PSCSICMD pcmd;
-
- pDCB = pACB->pLinkDCB;
- pdcb = pDCB;
- do
- {
- cnt = pdcb->GoingSRBCnt;
- psrb = pdcb->pGoingSRB;
- for( i=0; i<cnt; i++)
- {
- psrb2 = psrb->pNextSRB;
- pcmd = psrb->pcmd;
- pcmd->result = DID_RESET << 16;
-
-/* ReleaseSRB( pDCB, pSRB ); */
-
- psrb->pNextSRB = pACB->pFreeSRB;
- pACB->pFreeSRB = psrb;
-
- pcmd->scsi_done( pcmd );
- psrb = psrb2;
- }
- pdcb->GoingSRBCnt = 0;;
- pdcb->pGoingSRB = NULL;
- pdcb->TagMask = 0;
- pdcb = pdcb->pNextDCB;
- }
- while( pdcb != pDCB );
-}
-
-
-static void
-DC390W_ResetSCSIBus( PACB pACB )
-{
- USHORT ioport;
- UCHAR bval;
- ULONG flags;
-
- save_flags(flags);
- cli();
- pACB->ACBFlag |= RESET_DEV;
- ioport = pACB->IOPortBase;
- bval = ABORT_OP;
- outb(bval,ioport+ISTAT);
- udelay(25);
- bval = 0;
- outb(bval,ioport+ISTAT);
-
- bval = ASSERT_RST;
- outb(bval,ioport+SCNTL1);
- udelay(25); /* 25 us */
- bval = 0;
- outb(bval,ioport+SCNTL1);
- restore_flags(flags);
- return;
-}
-
-
-
-static void
-DC390W_ResetSCSIBus2( PACB pACB )
-{
- USHORT ioport;
- UCHAR bval;
- ULONG flags;
-
- save_flags(flags);
- cli();
- ioport = pACB->IOPortBase;
- bval = ASSERT_RST;
- outb(bval,ioport+SCNTL1);
- udelay(25); /* 25 us */
- bval = 0;
- outb(bval,ioport+SCNTL1);
- restore_flags(flags);
- return;
-}
-
-
-
-static void
-DC390W_ScsiRstDetect( PACB pACB )
-{
- ULONG wlval, flags;
- USHORT ioport;
- UCHAR bval;
-
- save_flags(flags);
- sti();
-#ifdef DC390W_DEBUG0
- printk("Reset_Detect0,");
-#endif
-/* delay 1 sec */
- wlval = jiffies + HZ;
- while( jiffies < wlval );
-/* USHORT i;
- for( i=0; i<1000; i++ )
- udelay(1000); */
-
- cli();
- ioport = pACB->IOPortBase;
- bval = inb(ioport+STEST3);
- bval |= CLR_SCSI_FIFO;
- outb(bval,ioport+STEST3);
- bval = CLR_DMA_FIFO;
- outb(bval,ioport+CTEST3);
-
- if( pACB->ACBFlag & RESET_DEV )
- pACB->ACBFlag |= RESET_DONE;
- else
- {
- pACB->ACBFlag |= RESET_DETECT;
-
- ResetDevParam( pACB );
-/* DoingSRB_Done( pACB ); ???? */
- RecoverSRB( pACB );
- pACB->pActiveDCB = NULL;
- wlval = pACB->jmp_reselect;
- outl(wlval,(ioport+DSP));
- pACB->ACBFlag = 0;
- DoWaitingSRB( pACB );
- }
- restore_flags(flags);
- return;
-}
-
-
-static void
-RequestSense( PACB pACB, PDCB pDCB, PSRB pSRB )
-{
- PSCSICMD pcmd;
-
- pSRB->SRBFlag |= AUTO_REQSENSE;
- pSRB->Segment0[0][0] = *((PULONG) &(pSRB->CmdBlock[0]));
- pSRB->Segment0[0][1] = *((PULONG) &(pSRB->CmdBlock[4]));
- pSRB->Segment0[1][0] = *((PULONG) &(pSRB->CmdBlock[8]));
- pSRB->Segment0[1][1] = pSRB->__command[0] | (pSRB->SGcount << 8);
- pSRB->Segment0[2][0] = *((PULONG) &(pSRB->pSegmentList));
- pSRB->Segment0[2][1] = pSRB->XferredLen;
- pSRB->AdaptStatus = 0;
- pSRB->TargetStatus = 0;
-
- pcmd = pSRB->pcmd;
-
- pSRB->Segmentx.address = (PUCHAR) &(pcmd->sense_buffer);
- pSRB->Segmentx.length = sizeof(pcmd->sense_buffer);
- pSRB->pSegmentList = &pSRB->Segmentx;
- pSRB->SGcount = 1;
-
- *((PULONG) &(pSRB->CmdBlock[0])) = 0x00000003;
- pSRB->CmdBlock[1] = pDCB->IdentifyMsg << 5;
- *((PUSHORT) &(pSRB->CmdBlock[4])) = sizeof(pcmd->sense_buffer);
- pSRB->__command[0] = 6;
- PrepareSG( pACB, pDCB, pSRB );
- pSRB->XferredLen = 0;
- DC390W_StartSCSI( pACB, pDCB, pSRB );
- return;
-}
-
-
-static void
-DC390W_MessageOut( PACB pACB )
-{
- DC390W_FatalError( pACB );
-}
-
-
-static void
-DC390W_FatalError( PACB pACB )
-{
- PSRB pSRB;
- PDCB pDCB;
- ULONG flags;
-
-#ifdef DC390W_DEBUG0
- printk("DC390W: Fatal Error!!\n");
-#endif
-
- pDCB = pACB->pActiveDCB;
- pSRB = pDCB->pActiveSRB;
- if( pSRB->SRBState & SRB_UNEXPECT_RESEL )
- {
- save_flags(flags);
- cli();
- pSRB->SRBState &= ~SRB_UNEXPECT_RESEL;
- pSRB->pNextSRB = pACB->pFreeSRB;
- pACB->pFreeSRB = pSRB;
- pACB->pActiveDCB = NULL;
- pDCB->pActiveSRB = NULL;
- restore_flags(flags);
- DoWaitingSRB( pACB );
- }
- else
- DC390W_ResetSCSIBus(pACB);
- return;
-}
-
-
-static void
-DC390W_Debug( PACB pACB )
-{
- ULONG wlval;
- USHORT ioport;
-
- ioport = pACB->IOPortBase;
- wlval = inl(ioport+DSP);
- outl(wlval,(ioport+DSP));
- return;
-}
-
-
diff --git a/linux/src/drivers/scsi/scsiiom.c b/linux/src/drivers/scsi/scsiiom.c
deleted file mode 100644
index 97801d7..0000000
--- a/linux/src/drivers/scsi/scsiiom.c
+++ /dev/null
@@ -1,1540 +0,0 @@
-/***********************************************************************
- * FILE NAME : SCSIIOM.C *
- * BY : C.L. Huang, address@hidden *
- * Description: Device Driver for Tekram DC-390 (T) PCI SCSI *
- * Bus Master Host Adapter *
- ***********************************************************************/
-
-
-static USHORT
-DC390_StartSCSI( PACB pACB, PDCB pDCB, PSRB pSRB )
-{
- USHORT ioport, rc;
- UCHAR bval, bval1, i, cnt;
- PUCHAR ptr;
- ULONG wlval;
-
- pSRB->TagNumber = 31;
- ioport = pACB->IOPortBase;
- bval = pDCB->UnitSCSIID;
- outb(bval,ioport+Scsi_Dest_ID);
- bval = pDCB->SyncPeriod;
- outb(bval,ioport+Sync_Period);
- bval = pDCB->SyncOffset;
- outb(bval,ioport+Sync_Offset);
- bval = pDCB->CtrlR1;
- outb(bval,ioport+CtrlReg1);
- bval = pDCB->CtrlR3;
- outb(bval,ioport+CtrlReg3);
- bval = pDCB->CtrlR4;
- outb(bval,ioport+CtrlReg4);
- bval = CLEAR_FIFO_CMD; /* Flush FIFO */
- outb(bval,ioport+ScsiCmd);
-
- pSRB->ScsiPhase = SCSI_NOP0;
- bval = pDCB->IdentifyMsg;
- if( !(pDCB->SyncMode & EN_ATN_STOP) )
- {
- if( (pSRB->CmdBlock[0] == INQUIRY) ||
- (pSRB->CmdBlock[0] == REQUEST_SENSE) ||
- (pSRB->SRBFlag & AUTO_REQSENSE) )
- {
- bval &= 0xBF; /* NO disconnection */
- outb(bval,ioport+ScsiFifo);
- bval1 = SELECT_W_ATN;
- pSRB->SRBState = SRB_START_;
- if( pDCB->SyncMode & SYNC_ENABLE )
- {
- if( !(pDCB->IdentifyMsg & 7) ||
- (pSRB->CmdBlock[0] != INQUIRY) )
- {
- bval1 = SEL_W_ATN_STOP;
- pSRB->SRBState = SRB_MSGOUT;
- }
- }
- }
- else
- {
- if(pDCB->SyncMode & EN_TAG_QUEUING)
- {
- outb(bval,ioport+ScsiFifo);
- bval = MSG_SIMPLE_QTAG;
- outb(bval,ioport+ScsiFifo);
- wlval = 1;
- bval = 0;
- while( wlval & pDCB->TagMask )
- {
- wlval = wlval << 1;
- bval++;
- }
- outb(bval,ioport+ScsiFifo);
- pDCB->TagMask |= wlval;
- pSRB->TagNumber = bval;
- bval1 = SEL_W_ATN2;
- pSRB->SRBState = SRB_START_;
- }
- else
- {
- outb(bval,ioport+ScsiFifo);
- bval1 = SELECT_W_ATN;
- pSRB->SRBState = SRB_START_;
- }
- }
-
- if( pSRB->SRBFlag & AUTO_REQSENSE )
- {
- bval = REQUEST_SENSE;
- outb(bval,ioport+ScsiFifo);
- bval = pDCB->IdentifyMsg << 5;
- outb(bval,ioport+ScsiFifo);
- bval = 0;
- outb(bval,ioport+ScsiFifo);
- outb(bval,ioport+ScsiFifo);
- bval = sizeof(pSRB->pcmd->sense_buffer);
- outb(bval,ioport+ScsiFifo);
- bval = 0;
- outb(bval,ioport+ScsiFifo);
- }
- else
- {
- cnt = pSRB->ScsiCmdLen;
- ptr = (PUCHAR) pSRB->CmdBlock;
- for(i=0; i<cnt; i++)
- {
- bval = *ptr++;
- outb(bval,ioport+ScsiFifo);
- }
- }
- }
- else /* ATN_STOP */
- {
- if( (pSRB->CmdBlock[0] == INQUIRY) ||
- (pSRB->CmdBlock[0] == REQUEST_SENSE) ||
- (pSRB->SRBFlag & AUTO_REQSENSE) )
- {
- bval &= 0xBF;
- outb(bval,ioport+ScsiFifo);
- bval1 = SELECT_W_ATN;
- pSRB->SRBState = SRB_START_;
- if( pDCB->SyncMode & SYNC_ENABLE )
- {
- if( !(pDCB->IdentifyMsg & 7) ||
- (pSRB->CmdBlock[0] != INQUIRY) )
- {
- bval1 = SEL_W_ATN_STOP;
- pSRB->SRBState = SRB_MSGOUT;
- }
- }
- }
- else
- {
- if(pDCB->SyncMode & EN_TAG_QUEUING)
- {
- outb(bval,ioport+ScsiFifo);
- pSRB->MsgOutBuf[0] = MSG_SIMPLE_QTAG;
- wlval = 1;
- bval = 0;
- while( wlval & pDCB->TagMask )
- {
- wlval = wlval << 1;
- bval++;
- }
- pDCB->TagMask |= wlval;
- pSRB->TagNumber = bval;
- pSRB->MsgOutBuf[1] = bval;
- pSRB->MsgCnt = 2;
- bval1 = SEL_W_ATN_STOP;
- pSRB->SRBState = SRB_START_;
- }
- else
- {
- outb(bval,ioport+ScsiFifo);
- pSRB->MsgOutBuf[0] = MSG_NOP;
- pSRB->MsgCnt = 1;
- pSRB->SRBState = SRB_START_;
- bval1 = SEL_W_ATN_STOP;
- }
- }
- }
- bval = inb( ioport+Scsi_Status );
- if( bval & INTERRUPT )
- {
- pSRB->SRBState = SRB_READY;
- pDCB->TagMask &= ~( 1 << pSRB->TagNumber );
- rc = 1;
- }
- else
- {
- pSRB->ScsiPhase = SCSI_NOP1;
- pACB->pActiveDCB = pDCB;
- pDCB->pActiveSRB = pSRB;
- rc = 0;
- outb(bval1,ioport+ScsiCmd);
- }
- return( rc );
-}
-
-
-#ifndef VERSION_ELF_1_2_13
-static void
-DC390_Interrupt( int irq, void *dev_id, struct pt_regs *regs)
-#else
-static void
-DC390_Interrupt( int irq, struct pt_regs *regs)
-#endif
-{
- PACB pACB;
- PDCB pDCB;
- PSRB pSRB;
- USHORT ioport = 0;
- USHORT phase, i;
- void (*stateV)( PACB, PSRB, PUCHAR );
- UCHAR istate = 0;
- UCHAR sstatus=0, istatus;
-
- pACB = pACB_start;
- if( pACB == NULL )
- return;
- for( i=0; i < adapterCnt; i++ )
- {
- if( pACB->IRQLevel == (UCHAR) irq )
- {
- ioport = pACB->IOPortBase;
- sstatus = inb( ioport+Scsi_Status );
- if( sstatus & INTERRUPT )
- break;
- else
- pACB = pACB->pNextACB;
- }
- else
- {
- pACB = pACB->pNextACB;
- }
- }
-
-#ifdef DC390_DEBUG1
- printk("sstatus=%2x,",sstatus);
-#endif
-
- if( pACB == (PACB )-1 )
- {
- printk("DC390: Spurious interrupt detected!\n");
- return;
- }
-
- istate = inb( ioport+Intern_State );
- istatus = inb( ioport+INT_Status );
-
-#ifdef DC390_DEBUG1
- printk("Istatus=%2x,",istatus);
-#endif
-
- if(istatus & DISCONNECTED)
- {
- DC390_Disconnect( pACB );
- return;
- }
-
- if(istatus & RESELECTED)
- {
- DC390_Reselect( pACB );
- return;
- }
-
- if(istatus & INVALID_CMD)
- {
- DC390_InvalidCmd( pACB );
- return;
- }
-
- if(istatus & SCSI_RESET)
- {
- DC390_ScsiRstDetect( pACB );
- return;
- }
-
- if( istatus & (SUCCESSFUL_OP+SERVICE_REQUEST) )
- {
- pDCB = pACB->pActiveDCB;
- pSRB = pDCB->pActiveSRB;
- if( pDCB )
- {
- if( pDCB->DCBFlag & ABORT_DEV_ )
- EnableMsgOut( pACB, pSRB );
- }
-
- phase = (USHORT) pSRB->ScsiPhase;
- stateV = (void *) DC390_phase0[phase];
- stateV( pACB, pSRB, &sstatus );
-
- pSRB->ScsiPhase = sstatus & 7;
- phase = (USHORT) sstatus & 7;
- stateV = (void *) DC390_phase1[phase];
- stateV( pACB, pSRB, &sstatus );
- }
-}
-
-
-static void
-DC390_DataOut_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
-{
- UCHAR sstatus, bval;
- USHORT ioport;
- PSGL psgl;
- ULONG ResidCnt, xferCnt;
-
- ioport = pACB->IOPortBase;
- sstatus = *psstatus;
-
- if( !(pSRB->SRBState & SRB_XFERPAD) )
- {
- if( sstatus & PARITY_ERR )
- pSRB->SRBStatus |= PARITY_ERROR;
-
- if( sstatus & COUNT_2_ZERO )
- {
- bval = inb(ioport+DMA_Status);
- while( !(bval & DMA_XFER_DONE) )
- bval = inb(ioport+DMA_Status);
- pSRB->TotalXferredLen += pSRB->SGToBeXferLen;
- pSRB->SGIndex++;
- if( pSRB->SGIndex < pSRB->SGcount )
- {
- pSRB->pSegmentList++;
- psgl = pSRB->pSegmentList;
-
-#ifndef VERSION_ELF_1_2_13
- pSRB->SGPhysAddr = virt_to_phys( psgl->address );
-#else
- pSRB->SGPhysAddr = (ULONG) psgl->address;
-#endif
- pSRB->SGToBeXferLen = (ULONG) psgl->length;
- }
- else
- pSRB->SGToBeXferLen = 0;
- }
- else
- {
- bval = inb( ioport+Current_Fifo );
- bval &= 0x1f;
- ResidCnt = (ULONG) inb(ioport+CtcReg_High);
- ResidCnt = ResidCnt << 8;
- ResidCnt |= (ULONG) inb(ioport+CtcReg_Mid);
- ResidCnt = ResidCnt << 8;
- ResidCnt |= (ULONG) inb(ioport+CtcReg_Low);
- ResidCnt += (ULONG) bval;
-
- xferCnt = pSRB->SGToBeXferLen - ResidCnt;
- pSRB->SGPhysAddr += xferCnt;
- pSRB->TotalXferredLen += xferCnt;
- pSRB->SGToBeXferLen = ResidCnt;
- }
- }
- bval = WRITE_DIRECTION+DMA_IDLE_CMD;
- outb( bval, ioport+DMA_Cmd);
-}
-
-static void
-DC390_DataIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
-{
- UCHAR sstatus, bval;
- USHORT i, ioport, residual;
- PSGL psgl;
- ULONG ResidCnt, xferCnt;
- PUCHAR ptr;
-
-
- ioport = pACB->IOPortBase;
- sstatus = *psstatus;
-
- if( !(pSRB->SRBState & SRB_XFERPAD) )
- {
- if( sstatus & PARITY_ERR )
- pSRB->SRBStatus |= PARITY_ERROR;
-
- if( sstatus & COUNT_2_ZERO )
- {
- bval = inb(ioport+DMA_Status);
- while( !(bval & DMA_XFER_DONE) )
- bval = inb(ioport+DMA_Status);
-
- bval = READ_DIRECTION+DMA_IDLE_CMD;
- outb( bval, ioport+DMA_Cmd);
-
- pSRB->TotalXferredLen += pSRB->SGToBeXferLen;
- pSRB->SGIndex++;
- if( pSRB->SGIndex < pSRB->SGcount )
- {
- pSRB->pSegmentList++;
- psgl = pSRB->pSegmentList;
-
-#ifndef VERSION_ELF_1_2_13
- pSRB->SGPhysAddr = virt_to_phys( psgl->address );
-#else
- pSRB->SGPhysAddr = (ULONG) psgl->address;
-#endif
- pSRB->SGToBeXferLen = (ULONG) psgl->length;
- }
- else
- pSRB->SGToBeXferLen = 0;
- }
- else /* phase changed */
- {
- residual = 0;
- bval = inb(ioport+Current_Fifo);
- while( bval & 0x1f )
- {
- if( (bval & 0x1f) == 1 )
- {
- for(i=0; i< 0x100; i++)
- {
- bval = inb(ioport+Current_Fifo);
- if( !(bval & 0x1f) )
- goto din_1;
- else if( i == 0x0ff )
- {
- residual = 1; /* ;1 residual byte */
- goto din_1;
- }
- }
- }
- else
- bval = inb(ioport+Current_Fifo);
- }
-din_1:
- bval = READ_DIRECTION+DMA_BLAST_CMD;
- outb(bval, ioport+DMA_Cmd);
- for(i=0; i<0x8000; i++)
- {
- bval = inb(ioport+DMA_Status);
- if(bval & BLAST_COMPLETE)
- break;
- }
- bval = READ_DIRECTION+DMA_IDLE_CMD;
- outb(bval, ioport+DMA_Cmd);
-
- ResidCnt = (ULONG) inb(ioport+CtcReg_High);
- ResidCnt = ResidCnt << 8;
- ResidCnt |= (ULONG) inb(ioport+CtcReg_Mid);
- ResidCnt = ResidCnt << 8;
- ResidCnt |= (ULONG) inb(ioport+CtcReg_Low);
-
- xferCnt = pSRB->SGToBeXferLen - ResidCnt;
- pSRB->SGPhysAddr += xferCnt;
- pSRB->TotalXferredLen += xferCnt;
- pSRB->SGToBeXferLen = ResidCnt;
-
- if( residual )
- {
- bval = inb(ioport+ScsiFifo); /* get residual byte */
-#ifndef VERSION_ELF_1_2_13
- ptr = (PUCHAR) phys_to_virt( pSRB->SGPhysAddr );
-#else
- ptr = (PUCHAR) pSRB->SGPhysAddr;
-#endif
- *ptr = bval;
- pSRB->SGPhysAddr++;
- pSRB->TotalXferredLen++;
- pSRB->SGToBeXferLen--;
- }
- }
- }
-}
-
-static void
-DC390_Command_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
-{
-}
-
-static void
-DC390_Status_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
-{
- UCHAR bval;
- USHORT ioport;
-
- ioport = pACB->IOPortBase;
- bval = inb(ioport+ScsiFifo);
- pSRB->TargetStatus = bval;
- bval++;
- bval = inb(ioport+ScsiFifo); /* get message */
- pSRB->EndMessage = bval;
-
- *psstatus = SCSI_NOP0;
- pSRB->SRBState = SRB_COMPLETED;
- bval = MSG_ACCEPTED_CMD;
- outb(bval, ioport+ScsiCmd);
-}
-
-static void
-DC390_MsgOut_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
-{
- if( pSRB->SRBState & (SRB_UNEXPECT_RESEL+SRB_ABORT_SENT) )
- *psstatus = SCSI_NOP0;
-}
-
-static void
-DC390_MsgIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
-{
- UCHAR bval;
- USHORT ioport, wval, wval1;
- PDCB pDCB;
- PSRB psrb;
-
- ioport = pACB->IOPortBase;
- pDCB = pACB->pActiveDCB;
-
- bval = inb( ioport+ScsiFifo );
- if( !(pSRB->SRBState & SRB_MSGIN_MULTI) )
- {
- if(bval == MSG_DISCONNECT)
- {
- pSRB->SRBState = SRB_DISCONNECT;
- }
- else if( bval == MSG_SAVE_PTR )
- goto min6;
- else if( (bval == MSG_EXTENDED) || ((bval >= MSG_SIMPLE_QTAG) &&
- (bval <= MSG_ORDER_QTAG)) )
- {
- pSRB->SRBState |= SRB_MSGIN_MULTI;
- pSRB->MsgInBuf[0] = bval;
- pSRB->MsgCnt = 1;
- pSRB->pMsgPtr = &pSRB->MsgInBuf[1];
- }
- else if(bval == MSG_REJECT_)
- {
- bval = RESET_ATN_CMD;
- outb(bval, ioport+ScsiCmd);
- if( pSRB->SRBState & DO_SYNC_NEGO)
- goto set_async;
- }
- else if( bval == MSG_RESTORE_PTR)
- goto min6;
- else
- goto min6;
- }
- else
- { /* minx: */
-
- *pSRB->pMsgPtr = bval;
- pSRB->MsgCnt++;
- pSRB->pMsgPtr++;
- if( (pSRB->MsgInBuf[0] >= MSG_SIMPLE_QTAG) &&
- (pSRB->MsgInBuf[0] <= MSG_ORDER_QTAG) )
- {
- if( pSRB->MsgCnt == 2)
- {
- pSRB->SRBState = 0;
- bval = pSRB->MsgInBuf[1];
- pSRB = pDCB->pGoingSRB;
- psrb = pDCB->pGoingLast;
- if( pSRB )
- {
- for( ;; )
- {
- if(pSRB->TagNumber != bval)
- {
- if( pSRB == psrb )
- goto mingx0;
- pSRB = pSRB->pNextSRB;
- }
- else
- break;
- }
- if( pDCB->DCBFlag & ABORT_DEV_ )
- {
- pSRB->SRBState = SRB_ABORT_SENT;
- EnableMsgOut( pACB, pSRB );
- }
- if( !(pSRB->SRBState & SRB_DISCONNECT) )
- goto mingx0;
- pDCB->pActiveSRB = pSRB;
- pSRB->SRBState = SRB_DATA_XFER;
- }
- else
- {
-mingx0:
- pSRB = pACB->pTmpSRB;
- pSRB->SRBState = SRB_UNEXPECT_RESEL;
- pDCB->pActiveSRB = pSRB;
- pSRB->MsgOutBuf[0] = MSG_ABORT_TAG;
- EnableMsgOut2( pACB, pSRB );
- }
- }
- }
- else if( (pSRB->MsgInBuf[0] == MSG_EXTENDED) && (pSRB->MsgCnt == 5) )
- {
- pSRB->SRBState &= ~(SRB_MSGIN_MULTI+DO_SYNC_NEGO);
- if( (pSRB->MsgInBuf[1] != 3) || (pSRB->MsgInBuf[2] != 1) )
- { /* reject_msg: */
- pSRB->MsgCnt = 1;
- pSRB->MsgInBuf[0] = MSG_REJECT_;
- bval = SET_ATN_CMD;
- outb(bval, ioport+ScsiCmd);
- }
- else if( !(pSRB->MsgInBuf[3]) || !(pSRB->MsgInBuf[4]) )
- {
-set_async:
- pDCB = pSRB->pSRBDCB;
- pDCB->SyncMode &= ~(SYNC_ENABLE+SYNC_NEGO_DONE);
- pDCB->SyncPeriod = 0;
- pDCB->SyncOffset = 0;
- pDCB->CtrlR3 = FAST_CLK; /* ;non_fast */
- pDCB->CtrlR4 &= 0x3f;
- pDCB->CtrlR4 |= EATER_25NS; /* ; 25ns glitch eater */
- goto re_prog;
- }
- else
- { /* set_sync: */
-
- pDCB = pSRB->pSRBDCB;
- pDCB->SyncMode |= SYNC_ENABLE+SYNC_NEGO_DONE;
- pDCB->SyncOffset &= 0x0f0;
- pDCB->SyncOffset |= pSRB->MsgInBuf[4];
- pDCB->NegoPeriod = pSRB->MsgInBuf[3];
- wval = (USHORT) pSRB->MsgInBuf[3];
- wval = wval << 2;
- wval--;
- wval1 = wval / 25;
- if( (wval1 * 25) != wval)
- wval1++;
- bval = FAST_CLK+FAST_SCSI;
- pDCB->CtrlR4 &= 0x3f;
- if(wval1 >= 8)
- {
- wval1--;
- bval = FAST_CLK; /* ;fast clock/normal scsi */
- pDCB->CtrlR4 |= EATER_25NS; /* ;25 ns glitch eater */
- }
- pDCB->CtrlR3 = bval;
- pDCB->SyncPeriod = (UCHAR)wval1;
-re_prog:
- bval = pDCB->SyncPeriod;
- outb(bval, ioport+Sync_Period);
- bval = pDCB->SyncOffset;
- outb(bval, ioport+Sync_Offset);
- bval = pDCB->CtrlR3;
- outb(bval, ioport+CtrlReg3);
- bval = pDCB->CtrlR4;
- outb(bval, ioport+CtrlReg4);
- SetXferRate( pACB, pDCB);
- }
- }
- }
-min6:
- *psstatus = SCSI_NOP0;
- bval = MSG_ACCEPTED_CMD;
- outb(bval, ioport+ScsiCmd);
-}
-
-static void
-DataIO_Comm( PACB pACB, PSRB pSRB, UCHAR ioDir)
-{
- PSGL psgl;
- UCHAR bval;
- USHORT ioport;
- ULONG lval;
-
-
- ioport = pACB->IOPortBase;
- if( pSRB->SGIndex < pSRB->SGcount )
- {
- bval = DMA_IDLE_CMD | ioDir; /* ;+EN_DMA_INT */
- outb( bval, ioport+DMA_Cmd);
- if( !pSRB->SGToBeXferLen )
- {
- psgl = pSRB->pSegmentList;
-#ifndef VERSION_ELF_1_2_13
- pSRB->SGPhysAddr = virt_to_phys( psgl->address );
-#else
- pSRB->SGPhysAddr = (ULONG) psgl->address;
-#endif
- pSRB->SGToBeXferLen = (ULONG) psgl->length;
- }
- lval = pSRB->SGToBeXferLen;
- bval = (UCHAR) lval;
- outb(bval,ioport+CtcReg_Low);
- lval = lval >> 8;
- bval = (UCHAR) lval;
- outb(bval,ioport+CtcReg_Mid);
- lval = lval >> 8;
- bval = (UCHAR) lval;
- outb(bval,ioport+CtcReg_High);
-
- lval = pSRB->SGToBeXferLen;
- outl(lval, ioport+DMA_XferCnt);
-
- lval = pSRB->SGPhysAddr;
- outl( lval, ioport+DMA_XferAddr);
-
- bval = DMA_COMMAND+INFO_XFER_CMD;
- outb(bval, ioport+ScsiCmd);
-
- pSRB->SRBState = SRB_DATA_XFER;
-
- bval = DMA_IDLE_CMD | ioDir; /* ;+EN_DMA_INT */
- outb(bval, ioport+DMA_Cmd);
-
- bval = DMA_START_CMD | ioDir; /* ;+EN_DMA_INT */
- outb(bval, ioport+DMA_Cmd);
- }
- else /* xfer pad */
- {
- if( pSRB->SGcount )
- {
- pSRB->AdaptStatus = H_OVER_UNDER_RUN;
- pSRB->SRBStatus |= OVER_RUN;
- }
- bval = 0;
- outb(bval,ioport+CtcReg_Low);
- outb(bval,ioport+CtcReg_Mid);
- outb(bval,ioport+CtcReg_High);
-
- pSRB->SRBState |= SRB_XFERPAD;
- bval = DMA_COMMAND+XFER_PAD_BYTE;
- outb(bval, ioport+ScsiCmd);
-/*
- bval = DMA_IDLE_CMD | ioDir; ;+EN_DMA_INT
- outb(bval, ioport+DMA_Cmd);
- bval = DMA_START_CMD | ioDir; ;+EN_DMA_INT
- outb(bval, ioport+DMA_Cmd);
-*/
- }
-}
-
-
-static void
-DC390_DataOutPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus)
-{
- UCHAR ioDir;
-
- ioDir = WRITE_DIRECTION;
- DataIO_Comm( pACB, pSRB, ioDir);
-}
-
-static void
-DC390_DataInPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus)
-{
- UCHAR ioDir;
-
- ioDir = READ_DIRECTION;
- DataIO_Comm( pACB, pSRB, ioDir);
-}
-
-static void
-DC390_CommandPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus)
-{
- PDCB pDCB;
- UCHAR bval;
- PUCHAR ptr;
- USHORT ioport, i, cnt;
-
-
- ioport = pACB->IOPortBase;
- bval = RESET_ATN_CMD;
- outb(bval, ioport+ScsiCmd);
- bval = CLEAR_FIFO_CMD;
- outb(bval, ioport+ScsiCmd);
- if( !(pSRB->SRBFlag & AUTO_REQSENSE) )
- {
- cnt = (USHORT) pSRB->ScsiCmdLen;
- ptr = (PUCHAR) pSRB->CmdBlock;
- for(i=0; i < cnt; i++)
- {
- outb(*ptr, ioport+ScsiFifo);
- ptr++;
- }
- }
- else
- {
- bval = REQUEST_SENSE;
- outb(bval, ioport+ScsiFifo);
- pDCB = pACB->pActiveDCB;
- bval = pDCB->IdentifyMsg << 5;
- outb(bval, ioport+ScsiFifo);
- bval = 0;
- outb(bval, ioport+ScsiFifo);
- outb(bval, ioport+ScsiFifo);
- bval = sizeof(pSRB->pcmd->sense_buffer);
- outb(bval, ioport+ScsiFifo);
- bval = 0;
- outb(bval, ioport+ScsiFifo);
- }
- pSRB->SRBState = SRB_COMMAND;
- bval = INFO_XFER_CMD;
- outb(bval, ioport+ScsiCmd);
-}
-
-static void
-DC390_StatusPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus)
-{
- UCHAR bval;
- USHORT ioport;
-
- ioport = pACB->IOPortBase;
- bval = CLEAR_FIFO_CMD;
- outb(bval, ioport+ScsiCmd);
- pSRB->SRBState = SRB_STATUS;
- bval = INITIATOR_CMD_CMPLTE;
- outb(bval, ioport+ScsiCmd);
-}
-
-static void
-DC390_MsgOutPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus)
-{
- UCHAR bval;
- USHORT ioport, i, cnt;
- PUCHAR ptr;
- PDCB pDCB;
-
- ioport = pACB->IOPortBase;
- bval = CLEAR_FIFO_CMD;
- outb(bval, ioport+ScsiCmd);
- pDCB = pACB->pActiveDCB;
- if( !(pSRB->SRBState & SRB_MSGOUT) )
- {
- cnt = pSRB->MsgCnt;
- if( cnt )
- {
- ptr = (PUCHAR) pSRB->MsgOutBuf;
- for(i=0; i < cnt; i++)
- {
- outb(*ptr, ioport+ScsiFifo);
- ptr++;
- }
- pSRB->MsgCnt = 0;
- if( (pDCB->DCBFlag & ABORT_DEV_) &&
- (pSRB->MsgOutBuf[0] == MSG_ABORT) )
- pSRB->SRBState = SRB_ABORT_SENT;
- }
- else
- {
- bval = MSG_ABORT; /* ??? MSG_NOP */
- if( (pSRB->CmdBlock[0] == INQUIRY ) ||
- (pSRB->CmdBlock[0] == REQUEST_SENSE) ||
- (pSRB->SRBFlag & AUTO_REQSENSE) )
- {
- if( pDCB->SyncMode & SYNC_ENABLE )
- goto mop1;
- }
- outb(bval, ioport+ScsiFifo);
- }
- bval = INFO_XFER_CMD;
- outb( bval, ioport+ScsiCmd);
- }
- else
- {
-mop1:
- bval = MSG_EXTENDED;
- outb(bval, ioport+ScsiFifo);
- bval = 3; /* ;length of extended msg */
- outb(bval, ioport+ScsiFifo);
- bval = 1; /* ; sync nego */
- outb(bval, ioport+ScsiFifo);
- bval = pDCB->NegoPeriod;
- outb(bval, ioport+ScsiFifo);
- bval = SYNC_NEGO_OFFSET;
- outb(bval, ioport+ScsiFifo);
- pSRB->SRBState |= DO_SYNC_NEGO;
- bval = INFO_XFER_CMD;
- outb(bval, ioport+ScsiCmd);
- }
-}
-
-static void
-DC390_MsgInPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus)
-{
- UCHAR bval;
- USHORT ioport;
-
- ioport = pACB->IOPortBase;
- bval = CLEAR_FIFO_CMD;
- outb(bval, ioport+ScsiCmd);
- if( !(pSRB->SRBState & SRB_MSGIN) )
- {
- pSRB->SRBState &= SRB_DISCONNECT;
- pSRB->SRBState |= SRB_MSGIN;
- }
- bval = INFO_XFER_CMD;
- outb(bval, ioport+ScsiCmd);
-}
-
-static void
-DC390_Nop_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
-{
-}
-
-static void
-DC390_Nop_1( PACB pACB, PSRB pSRB, PUCHAR psstatus)
-{
-}
-
-
-static void
-SetXferRate( PACB pACB, PDCB pDCB )
-{
- UCHAR bval;
- USHORT cnt, i;
- PDCB ptr;
-
- if( !(pDCB->IdentifyMsg & 0x07) )
- {
- if( pACB->scan_devices )
- {
- CurrSyncOffset = pDCB->SyncOffset;
- }
- else
- {
- ptr = pACB->pLinkDCB;
- cnt = pACB->DeviceCnt;
- bval = pDCB->UnitSCSIID;
- for(i=0; i<cnt; i++)
- {
- if( ptr->UnitSCSIID == bval )
- {
- ptr->SyncPeriod = pDCB->SyncPeriod;
- ptr->SyncOffset = pDCB->SyncOffset;
- ptr->CtrlR3 = pDCB->CtrlR3;
- ptr->CtrlR4 = pDCB->CtrlR4;
- ptr->SyncMode = pDCB->SyncMode;
- }
- ptr = ptr->pNextDCB;
- }
- }
- }
- return;
-}
-
-
-static void
-DC390_Disconnect( PACB pACB )
-{
- PDCB pDCB;
- PSRB pSRB, psrb;
- ULONG flags;
- USHORT ioport, i, cnt;
- UCHAR bval;
-
-#ifdef DC390_DEBUG0
- printk("DISC,");
-#endif
-
- save_flags(flags);
- cli();
- ioport = pACB->IOPortBase;
- pDCB = pACB->pActiveDCB;
- if (!pDCB)
- {
-#ifdef DC390_DEBUG0
- printk("ACB:%08lx->ActiveDCB:%08lx !,",(ULONG)pACB,(ULONG)pDCB);
-#endif
- restore_flags(flags); return;
- }
- pSRB = pDCB->pActiveSRB;
- pACB->pActiveDCB = 0;
- pSRB->ScsiPhase = SCSI_NOP0;
- bval = EN_SEL_RESEL;
- outb(bval, ioport+ScsiCmd);
- if( pSRB->SRBState & SRB_UNEXPECT_RESEL )
- {
- pSRB->SRBState = 0;
- DoWaitingSRB( pACB );
- }
- else if( pSRB->SRBState & SRB_ABORT_SENT )
- {
- pDCB->TagMask = 0;
- pDCB->DCBFlag = 0;
- cnt = pDCB->GoingSRBCnt;
- pDCB->GoingSRBCnt = 0;
- pSRB = pDCB->pGoingSRB;
- for( i=0; i < cnt; i++)
- {
- psrb = pSRB->pNextSRB;
- pSRB->pNextSRB = pACB->pFreeSRB;
- pACB->pFreeSRB = pSRB;
- pSRB = psrb;
- }
- pDCB->pGoingSRB = 0;
- DoWaitingSRB( pACB );
- }
- else
- {
- if( (pSRB->SRBState & (SRB_START_+SRB_MSGOUT)) ||
- !(pSRB->SRBState & (SRB_DISCONNECT+SRB_COMPLETED)) )
- { /* Selection time out */
- if( !(pACB->scan_devices) )
- {
- pSRB->SRBState = SRB_READY;
- RewaitSRB( pDCB, pSRB);
- }
- else
- {
- pSRB->TargetStatus = SCSI_STAT_SEL_TIMEOUT;
- goto disc1;
- }
- }
- else if( pSRB->SRBState & SRB_DISCONNECT )
- {
- DoWaitingSRB( pACB );
- }
- else if( pSRB->SRBState & SRB_COMPLETED )
- {
-disc1:
- if(pDCB->MaxCommand > 1)
- {
- bval = pSRB->TagNumber;
- pDCB->TagMask &= (~(1 << bval)); /* free tag mask */
- }
- pDCB->pActiveSRB = 0;
- pSRB->SRBState = SRB_FREE;
- SRBdone( pACB, pDCB, pSRB);
- }
- }
- restore_flags(flags);
- return;
-}
-
-
-static void
-DC390_Reselect( PACB pACB )
-{
- PDCB pDCB, pdcb;
- PSRB pSRB;
- USHORT ioport, wval;
- UCHAR bval, bval1;
-
-
-#ifdef DC390_DEBUG0
- printk("RSEL,");
-#endif
- ioport = pACB->IOPortBase;
- pDCB = pACB->pActiveDCB;
- if( pDCB )
- { /* Arbitration lost but Reselection win */
- pSRB = pDCB->pActiveSRB;
- if( !( pACB->scan_devices ) )
- {
- pSRB->SRBState = SRB_READY;
- RewaitSRB( pDCB, pSRB);
- }
- }
- bval = inb(ioport+ScsiFifo); /* get ID */
- bval = bval ^ pACB->HostID_Bit;
- wval = 0;
- bval1 = 1;
- for(;;)
- {
- if( !(bval & bval1) )
- {
- bval1 = bval1 << 1;
- wval++;
- }
- else
- break;
- }
- wval |= ( (USHORT) inb(ioport+ScsiFifo) & 7) << 8; /* get LUN */
- pDCB = pACB->pLinkDCB;
- pdcb = pDCB;
- while( wval != *((PUSHORT) &pDCB->UnitSCSIID) )
- {
- pDCB = pDCB->pNextDCB;
- if( pDCB == pdcb )
- return;
- }
- pACB->pActiveDCB = pDCB;
- if( pDCB->SyncMode & EN_TAG_QUEUING )
- {
- pSRB = pACB->pTmpSRB;
- pDCB->pActiveSRB = pSRB;
- }
- else
- {
- pSRB = pDCB->pActiveSRB;
- if( !pSRB || !(pSRB->SRBState & SRB_DISCONNECT) )
- {
- pSRB= pACB->pTmpSRB;
- pSRB->SRBState = SRB_UNEXPECT_RESEL;
- pDCB->pActiveSRB = pSRB;
- EnableMsgOut( pACB, pSRB );
- }
- else
- {
- if( pDCB->DCBFlag & ABORT_DEV_ )
- {
- pSRB->SRBState = SRB_ABORT_SENT;
- EnableMsgOut( pACB, pSRB );
- }
- else
- pSRB->SRBState = SRB_DATA_XFER;
- }
- }
- pSRB->ScsiPhase = SCSI_NOP0;
- bval = pDCB->UnitSCSIID;
- outb( bval, ioport+Scsi_Dest_ID);
- bval = pDCB->SyncPeriod;
- outb(bval, ioport+Sync_Period);
- bval = pDCB->SyncOffset;
- outb( bval, ioport+Sync_Offset);
- bval = pDCB->CtrlR1;
- outb(bval, ioport+CtrlReg1);
- bval = pDCB->CtrlR3;
- outb(bval, ioport+CtrlReg3);
- bval = pDCB->CtrlR4; /* ; Glitch eater */
- outb(bval, ioport+CtrlReg4);
- bval = MSG_ACCEPTED_CMD; /* ;to rls the /ACK signal */
- outb(bval, ioport+ScsiCmd);
-}
-
-
-static void
-SRBdone( PACB pACB, PDCB pDCB, PSRB pSRB )
-{
- PSRB psrb;
- UCHAR bval, bval1, i, j, status;
- PSCSICMD pcmd;
- PSCSI_INQDATA ptr;
- USHORT disable_tag;
- ULONG flags;
- PSGL ptr2;
- ULONG swlval;
-
- pcmd = pSRB->pcmd;
- status = pSRB->TargetStatus;
- if(pSRB->SRBFlag & AUTO_REQSENSE)
- {
- pSRB->SRBFlag &= ~AUTO_REQSENSE;
- pSRB->AdaptStatus = 0;
- pSRB->TargetStatus = SCSI_STAT_CHECKCOND;
- if(status == SCSI_STAT_CHECKCOND)
- {
- pcmd->result = DID_BAD_TARGET << 16;
- goto ckc_e;
- }
- if(pSRB->RetryCnt == 0)
- {
- *((PULONG) &(pSRB->CmdBlock[0])) = pSRB->Segment0[0];
- pSRB->TotalXferredLen = pSRB->Segment1[1];
- if( (pSRB->TotalXferredLen) &&
- (pSRB->TotalXferredLen >= pcmd->underflow) )
- pcmd->result |= (DID_OK << 16);
- else
- pcmd->result = (DRIVER_SENSE << 24) | (DRIVER_OK << 16) |
- SCSI_STAT_CHECKCOND;
-#ifdef DC390_DEBUG0
- printk("Cmd=%2x,Result=%8x,XferL=%8x,",pSRB->CmdBlock[0],
- (UINT) pcmd->result, (UINT) pSRB->TotalXferredLen);
-#endif
- goto ckc_e;
- }
- else
- {
- pSRB->RetryCnt--;
- pSRB->AdaptStatus = 0;
- pSRB->TargetStatus = 0;
- *((PULONG) &(pSRB->CmdBlock[0])) = pSRB->Segment0[0];
- *((PULONG) &(pSRB->CmdBlock[4])) = pSRB->Segment0[1];
- if( pSRB->CmdBlock[0] == TEST_UNIT_READY )
- {
- pcmd->result = (DRIVER_SENSE << 24) | (DRIVER_OK << 16) |
- SCSI_STAT_CHECKCOND;
- goto ckc_e;
- }
- pcmd->result |= (DRIVER_SENSE << 24);
- pSRB->SGcount = (UCHAR) pSRB->Segment1[0];
- pSRB->ScsiCmdLen = (UCHAR) (pSRB->Segment1[0] >> 8);
- pSRB->SGIndex = 0;
- pSRB->TotalXferredLen = 0;
- pSRB->SGToBeXferLen = 0;
- if( pcmd->use_sg )
- pSRB->pSegmentList = (PSGL) pcmd->request_buffer;
- else if( pcmd->request_buffer )
- {
- pSRB->pSegmentList = (PSGL) &pSRB->Segmentx;
- pSRB->Segmentx.address = (PUCHAR) pcmd->request_buffer;
- pSRB->Segmentx.length = pcmd->request_bufflen;
- }
- if( DC390_StartSCSI( pACB, pDCB, pSRB ) )
- RewaitSRB( pDCB, pSRB );
- return;
- }
- }
- if( status )
- {
- if( status == SCSI_STAT_CHECKCOND)
- {
- if( (pSRB->SGIndex < pSRB->SGcount) && (pSRB->SGcount) &&
(pSRB->SGToBeXferLen) )
- {
- bval = pSRB->SGcount;
- swlval = 0;
- ptr2 = pSRB->pSegmentList;
- for( i=pSRB->SGIndex; i < bval; i++)
- {
- swlval += ptr2->length;
- ptr2++;
- }
-#ifdef DC390_DEBUG0
- printk("XferredLen=%8x,NotXferLen=%8x,",
- (UINT) pSRB->TotalXferredLen, (UINT) swlval);
-#endif
- }
- RequestSense( pACB, pDCB, pSRB );
- return;
- }
- else if( status == SCSI_STAT_QUEUEFULL )
- {
- bval = (UCHAR) pDCB->GoingSRBCnt;
- bval--;
- pDCB->MaxCommand = bval;
- RewaitSRB( pDCB, pSRB );
- pSRB->AdaptStatus = 0;
- pSRB->TargetStatus = 0;
- return;
- }
- else if(status == SCSI_STAT_SEL_TIMEOUT)
- {
- pSRB->AdaptStatus = H_SEL_TIMEOUT;
- pSRB->TargetStatus = 0;
- pcmd->result = DID_BAD_TARGET << 16;
- }
- else
- {
- pSRB->AdaptStatus = 0;
- if( pSRB->RetryCnt )
- {
- pSRB->RetryCnt--;
- pSRB->TargetStatus = 0;
- pSRB->SGIndex = 0;
- pSRB->TotalXferredLen = 0;
- pSRB->SGToBeXferLen = 0;
- if( pcmd->use_sg )
- pSRB->pSegmentList = (PSGL) pcmd->request_buffer;
- else if( pcmd->request_buffer )
- {
- pSRB->pSegmentList = (PSGL) &pSRB->Segmentx;
- pSRB->Segmentx.address = (PUCHAR) pcmd->request_buffer;
- pSRB->Segmentx.length = pcmd->request_bufflen;
- }
- if( DC390_StartSCSI( pACB, pDCB, pSRB ) )
- RewaitSRB( pDCB, pSRB );
- return;
- }
- else
- {
- pcmd->result |= (DID_ERROR << 16) | (ULONG) (pSRB->EndMessage
<< 8) |
- (ULONG) status;
- }
- }
- }
- else
- {
- status = pSRB->AdaptStatus;
- if(status & H_OVER_UNDER_RUN)
- {
- pSRB->TargetStatus = 0;
- pcmd->result |= (DID_OK << 16) | (pSRB->EndMessage << 8);
- }
- else if( pSRB->SRBStatus & PARITY_ERROR)
- {
- pcmd->result |= (DID_PARITY << 16) | (pSRB->EndMessage << 8);
- }
- else /* No error */
- {
- pSRB->AdaptStatus = 0;
- pSRB->TargetStatus = 0;
- pcmd->result |= (DID_OK << 16);
- }
- }
-
-ckc_e:
- if( pACB->scan_devices )
- {
- if( pSRB->CmdBlock[0] == TEST_UNIT_READY )
- {
- if(pcmd->result != (DID_OK << 16))
- {
- if( pcmd->result & SCSI_STAT_CHECKCOND )
- {
- goto RTN_OK;
- }
- else
- {
- pACB->DCBmap[pcmd->target] &= ~(1 << pcmd->lun);
- pPrevDCB->pNextDCB = pACB->pLinkDCB;
- if( (pcmd->target == pACB->max_id) &&
- ((pcmd->lun == 0) || (pcmd->lun == pACB->max_lun)) )
- {
- pACB->scan_devices = 0;
- }
- }
- }
- else
- {
-RTN_OK:
- pPrevDCB->pNextDCB = pDCB;
- pDCB->pNextDCB = pACB->pLinkDCB;
- if( (pcmd->target == pACB->max_id) && (pcmd->lun ==
pACB->max_lun) )
- pACB->scan_devices = END_SCAN;
- }
- }
- else if( pSRB->CmdBlock[0] == INQUIRY )
- {
- if( (pcmd->target == pACB->max_id) &&
- (pcmd->lun == pACB->max_lun) )
- {
- pACB->scan_devices = 0;
- }
- ptr = (PSCSI_INQDATA) (pcmd->request_buffer);
- if( pcmd->use_sg )
- ptr = (PSCSI_INQDATA) (((PSGL) ptr)->address);
- bval1 = ptr->DevType & SCSI_DEVTYPE;
- if(bval1 == SCSI_NODEV)
- {
- pACB->DCBmap[pcmd->target] &= ~(1 << pcmd->lun);
- pPrevDCB->pNextDCB = pACB->pLinkDCB;
- }
- else
- {
- pACB->DeviceCnt++;
- pPrevDCB = pDCB;
- pACB->pDCB_free = (PDCB) ((ULONG) (pACB->pDCB_free) + sizeof(
DC390_DCB ));
- pDCB->DevType = bval1;
- if(bval1 == TYPE_DISK || bval1 == TYPE_MOD)
- {
- if( (((ptr->Vers & 0x07) >= 2) || ((ptr->RDF & 0x0F) == 2))
&&
- (ptr->Flags & SCSI_INQ_CMDQUEUE) &&
- (pDCB->DevMode & TAG_QUEUING_) &&
- (pDCB->DevMode & EN_DISCONNECT_) )
- {
- disable_tag = 0;
- for(i=0; i<BADDEVCNT; i++)
- {
- for(j=0; j<28; j++)
- {
- if( ((PUCHAR)ptr)[8+j] != baddevname1[i][j])
- break;
- }
- if(j == 28)
- {
- disable_tag = 1;
- break;
- }
- }
-
- if( !disable_tag )
- {
- pDCB->MaxCommand = pACB->TagMaxNum;
- pDCB->SyncMode |= EN_TAG_QUEUING;
- pDCB->TagMask = 0;
- }
- else
- {
- pDCB->SyncMode |= EN_ATN_STOP;
- }
- }
- }
- }
- }
- }
-
- save_flags( flags );
- cli();
-/* ReleaseSRB( pDCB, pSRB ); */
-
- if(pSRB == pDCB->pGoingSRB )
- {
- pDCB->pGoingSRB = pSRB->pNextSRB;
- }
- else
- {
- psrb = pDCB->pGoingSRB;
- while( psrb->pNextSRB != pSRB )
- psrb = psrb->pNextSRB;
- psrb->pNextSRB = pSRB->pNextSRB;
- if( pSRB == pDCB->pGoingLast )
- pDCB->pGoingLast = psrb;
- }
- pSRB->pNextSRB = pACB->pFreeSRB;
- pACB->pFreeSRB = pSRB;
- pDCB->GoingSRBCnt--;
-
- DoWaitingSRB( pACB );
- restore_flags(flags);
-
-/* Notify cmd done */
- pcmd->scsi_done( pcmd );
-
- if( pDCB->QIORBCnt )
- DoNextCmd( pACB, pDCB );
- return;
-}
-
-
-static void
-DoingSRB_Done( PACB pACB )
-{
- PDCB pDCB, pdcb;
- PSRB psrb, psrb2;
- USHORT cnt, i;
- PSCSICMD pcmd;
-
- pDCB = pACB->pLinkDCB;
- pdcb = pDCB;
- do
- {
- cnt = pdcb->GoingSRBCnt;
- psrb = pdcb->pGoingSRB;
- for( i=0; i<cnt; i++)
- {
- psrb2 = psrb->pNextSRB;
- pcmd = psrb->pcmd;
- pcmd->result = DID_RESET << 16;
-
-/* ReleaseSRB( pDCB, pSRB ); */
-
- psrb->pNextSRB = pACB->pFreeSRB;
- pACB->pFreeSRB = psrb;
-
- pcmd->scsi_done( pcmd );
- psrb = psrb2;
- }
- pdcb->GoingSRBCnt = 0;;
- pdcb->pGoingSRB = NULL;
- pdcb->TagMask = 0;
- pdcb = pdcb->pNextDCB;
- }
- while( pdcb != pDCB );
-}
-
-
-static void
-DC390_ResetSCSIBus( PACB pACB )
-{
- USHORT ioport;
- UCHAR bval;
- ULONG flags;
-
- save_flags(flags);
- cli();
- pACB->ACBFlag |= RESET_DEV;
- ioport = pACB->IOPortBase;
-
- bval = DMA_IDLE_CMD;
- outb(bval,ioport+DMA_Cmd);
-
- bval = RST_SCSI_BUS_CMD;
- outb(bval,ioport+ScsiCmd);
-
- restore_flags(flags);
- return;
-}
-
-
-static void
-DC390_ScsiRstDetect( PACB pACB )
-{
- ULONG wlval, flags;
- USHORT ioport;
- UCHAR bval;
-
-#ifdef DC390_DEBUG0
- printk("RST_DETEC");
-#endif
- save_flags(flags);
- sti();
- wlval = jiffies + HZ;
- while( jiffies < wlval ); /* delay 1 sec */
-
- cli();
- ioport = pACB->IOPortBase;
- bval = DMA_IDLE_CMD;
- outb(bval,ioport+DMA_Cmd);
- bval = CLEAR_FIFO_CMD;
- outb(bval,ioport+ScsiCmd);
-
- if( pACB->ACBFlag & RESET_DEV )
- pACB->ACBFlag |= RESET_DONE;
- else
- {
- pACB->ACBFlag |= RESET_DETECT;
-
- ResetDevParam( pACB );
-/* DoingSRB_Done( pACB ); ???? */
- RecoverSRB( pACB );
- pACB->pActiveDCB = NULL;
- pACB->ACBFlag = 0;
- DoWaitingSRB( pACB );
- }
- restore_flags(flags);
- return;
-}
-
-
-static void
-RequestSense( PACB pACB, PDCB pDCB, PSRB pSRB )
-{
- PSCSICMD pcmd;
-
- pSRB->SRBFlag |= AUTO_REQSENSE;
- pSRB->Segment0[0] = *((PULONG) &(pSRB->CmdBlock[0]));
- pSRB->Segment0[1] = *((PULONG) &(pSRB->CmdBlock[4]));
- pSRB->Segment1[0] = (ULONG) ((pSRB->ScsiCmdLen << 8) + pSRB->SGcount);
- pSRB->Segment1[1] = pSRB->TotalXferredLen;
- pSRB->AdaptStatus = 0;
- pSRB->TargetStatus = 0;
-
- pcmd = pSRB->pcmd;
-
- pSRB->Segmentx.address = (PUCHAR) &(pcmd->sense_buffer);
- pSRB->Segmentx.length = sizeof(pcmd->sense_buffer);
- pSRB->pSegmentList = &pSRB->Segmentx;
- pSRB->SGcount = 1;
- pSRB->SGIndex = 0;
-
- *((PULONG) &(pSRB->CmdBlock[0])) = 0x00000003;
- pSRB->CmdBlock[1] = pDCB->IdentifyMsg << 5;
- *((PUSHORT) &(pSRB->CmdBlock[4])) = sizeof(pcmd->sense_buffer);
- pSRB->ScsiCmdLen = 6;
-
- pSRB->TotalXferredLen = 0;
- pSRB->SGToBeXferLen = 0;
- if( DC390_StartSCSI( pACB, pDCB, pSRB ) )
- RewaitSRB( pDCB, pSRB );
-}
-
-
-static void
-EnableMsgOut2( PACB pACB, PSRB pSRB )
-{
- USHORT ioport;
- UCHAR bval;
-
- ioport = pACB->IOPortBase;
- pSRB->MsgCnt = 1;
- bval = SET_ATN_CMD;
- outb(bval, ioport+ScsiCmd);
-}
-
-
-static void
-EnableMsgOut( PACB pACB, PSRB pSRB )
-{
- pSRB->MsgOutBuf[0] = MSG_ABORT;
- EnableMsgOut2( pACB, pSRB );
-}
-
-
-static void
-DC390_InvalidCmd( PACB pACB )
-{
- UCHAR bval;
- USHORT ioport;
- PSRB pSRB;
-
- pSRB = pACB->pActiveDCB->pActiveSRB;
- if( pSRB->SRBState & (SRB_START_+SRB_MSGOUT) )
- {
- ioport = pACB->IOPortBase;
- bval = CLEAR_FIFO_CMD;
- outb(bval,(ioport+ScsiCmd));
- }
-}
-
diff --git a/linux/src/init/main.c b/linux/src/init/main.c
deleted file mode 100644
index 1aa15b9..0000000
--- a/linux/src/init/main.c
+++ /dev/null
@@ -1,1135 +0,0 @@
-/*
- * linux/init/main.c
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- *
- * GK 2/5/95 - Changed to support mounting root fs via NFS
- * Added initrd & change_root: Werner Almesberger & Hans Lermen, Feb '96
- * Moan early if gcc is old, avoiding bogus kernels - Paul Gortmaker, May '96
- */
-
-#define __KERNEL_SYSCALLS__
-#include <stdarg.h>
-
-#include <asm/system.h>
-#include <asm/io.h>
-
-#include <linux/types.h>
-#include <linux/fcntl.h>
-#include <linux/config.h>
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/tty.h>
-#include <linux/head.h>
-#include <linux/unistd.h>
-#include <linux/string.h>
-#include <linux/timer.h>
-#include <linux/fs.h>
-#include <linux/ctype.h>
-#include <linux/delay.h>
-#include <linux/utsname.h>
-#include <linux/ioport.h>
-#include <linux/hdreg.h>
-#include <linux/mm.h>
-#include <linux/major.h>
-#include <linux/blk.h>
-#ifdef CONFIG_ROOT_NFS
-#include <linux/nfs_fs.h>
-#endif
-#ifdef CONFIG_MTRR
-#include <asm/mtrr.h>
-#endif
-
-#include <asm/bugs.h>
-
-#include <linux/dev/glue/glue.h>
-
-/*
- * Versions of gcc older than that listed below may actually compile
- * and link okay, but the end product can have subtle run time bugs.
- * To avoid associated bogus bug reports, we flatly refuse to compile
- * with a gcc that is known to be too old from the very beginning.
- */
-#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6)
-#error sorry, your GCC is too old. It builds incorrect kernels.
-#endif
-
-extern char _stext, _etext;
-extern const char *linux_banner;
-
-static char printbuf[1024];
-
-extern int console_loglevel;
-
-static int init(void *);
-extern int bdflush(void *);
-extern int kswapd(void *);
-extern void kswapd_setup(void);
-
-extern void init_modules(void);
-extern long console_init(long, long);
-extern long kmalloc_init(long,long);
-extern void sock_init(void);
-extern unsigned long pci_init(unsigned long, unsigned long);
-extern void sysctl_init(void);
-
-extern void no_scroll(char *str, int *ints);
-extern void swap_setup(char *str, int *ints);
-extern void buff_setup(char *str, int *ints);
-extern void panic_setup(char *str, int *ints);
-extern void bmouse_setup(char *str, int *ints);
-extern void msmouse_setup(char *str, int *ints);
-extern void lp_setup(char *str, int *ints);
-extern void eth_setup(char *str, int *ints);
-extern void xd_setup(char *str, int *ints);
-extern void xd_manual_geo_init(char *str, int *ints);
-extern void floppy_setup(char *str, int *ints);
-extern void st_setup(char *str, int *ints);
-extern void st0x_setup(char *str, int *ints);
-extern void advansys_setup(char *str, int *ints);
-extern void tmc8xx_setup(char *str, int *ints);
-extern void t128_setup(char *str, int *ints);
-extern void pas16_setup(char *str, int *ints);
-extern void generic_NCR5380_setup(char *str, int *intr);
-extern void generic_NCR53C400_setup(char *str, int *intr);
-extern void aha152x_setup(char *str, int *ints);
-extern void aha1542_setup(char *str, int *ints);
-extern void gdth_setup(char *str, int *ints);
-extern void aic7xxx_setup(char *str, int *ints);
-extern void AM53C974_setup(char *str, int *ints);
-extern void BusLogic_Setup(char *str, int *ints);
-extern void ncr53c8xx_setup(char *str, int *ints);
-extern void eata2x_setup(char *str, int *ints);
-extern void u14_34f_setup(char *str, int *ints);
-extern void fdomain_setup(char *str, int *ints);
-extern void in2000_setup(char *str, int *ints);
-extern void NCR53c406a_setup(char *str, int *ints);
-extern void wd7000_setup(char *str, int *ints);
-extern void ppa_setup(char *str, int *ints);
-extern void scsi_luns_setup(char *str, int *ints);
-extern void sound_setup(char *str, int *ints);
-extern void apm_setup(char *str, int *ints);
-extern void reboot_setup(char *str, int *ints);
-#ifdef CONFIG_CDU31A
-extern void cdu31a_setup(char *str, int *ints);
-#endif CONFIG_CDU31A
-#ifdef CONFIG_MCD
-extern void mcd_setup(char *str, int *ints);
-#endif CONFIG_MCD
-#ifdef CONFIG_MCDX
-extern void mcdx_setup(char *str, int *ints);
-#endif CONFIG_MCDX
-#ifdef CONFIG_SBPCD
-extern void sbpcd_setup(char *str, int *ints);
-#endif CONFIG_SBPCD
-#ifdef CONFIG_AZTCD
-extern void aztcd_setup(char *str, int *ints);
-#endif CONFIG_AZTCD
-#ifdef CONFIG_CDU535
-extern void sonycd535_setup(char *str, int *ints);
-#endif CONFIG_CDU535
-#ifdef CONFIG_GSCD
-extern void gscd_setup(char *str, int *ints);
-#endif CONFIG_GSCD
-#ifdef CONFIG_CM206
-extern void cm206_setup(char *str, int *ints);
-#endif CONFIG_CM206
-#ifdef CONFIG_OPTCD
-extern void optcd_setup(char *str, int *ints);
-#endif CONFIG_OPTCD
-#ifdef CONFIG_SJCD
-extern void sjcd_setup(char *str, int *ints);
-#endif CONFIG_SJCD
-#ifdef CONFIG_ISP16_CDI
-extern void isp16_setup(char *str, int *ints);
-#endif CONFIG_ISP16_CDI
-#ifdef CONFIG_BLK_DEV_RAM
-static void ramdisk_start_setup(char *str, int *ints);
-static void load_ramdisk(char *str, int *ints);
-static void prompt_ramdisk(char *str, int *ints);
-static void ramdisk_size(char *str, int *ints);
-#ifdef CONFIG_BLK_DEV_INITRD
-static void no_initrd(char *s,int *ints);
-#endif
-#endif CONFIG_BLK_DEV_RAM
-#ifdef CONFIG_ISDN_DRV_ICN
-extern void icn_setup(char *str, int *ints);
-#endif
-#ifdef CONFIG_ISDN_DRV_HISAX
-extern void HiSax_setup(char *str, int *ints);
-#endif
-#ifdef CONFIG_ISDN_DRV_PCBIT
-extern void pcbit_setup(char *str, int *ints);
-#endif
-
-#ifdef CONFIG_ATARIMOUSE
-extern void atari_mouse_setup (char *str, int *ints);
-#endif
-#ifdef CONFIG_DMASOUND
-extern void dmasound_setup (char *str, int *ints);
-#endif
-#ifdef CONFIG_ATARI_SCSI
-extern void atari_scsi_setup (char *str, int *ints);
-#endif
-extern void wd33c93_setup (char *str, int *ints);
-extern void gvp11_setup (char *str, int *ints);
-
-#ifdef CONFIG_CYCLADES
-extern void cy_setup(char *str, int *ints);
-#endif
-#ifdef CONFIG_DIGI
-extern void pcxx_setup(char *str, int *ints);
-#endif
-#ifdef CONFIG_RISCOM8
-extern void riscom8_setup(char *str, int *ints);
-#endif
-#ifdef CONFIG_SPECIALIX
-extern void specialix_setup(char *str, int *ints);
-#endif
-#ifdef CONFIG_BAYCOM
-extern void baycom_setup(char *str, int *ints);
-#endif
-
-#ifdef CONFIG_PARIDE_PD
-extern void pd_setup(char *str, int *ints);
-#endif
-#ifdef CONFIG_PARIDE_PF
-extern void pf_setup(char *str, int *ints);
-#endif
-#ifdef CONFIG_PARIDE_PT
-extern void pt_setup(char *str, int *ints);
-#endif
-#ifdef CONFIG_PARIDE_PG
-extern void pg_setup(char *str, int *ints);
-#endif
-#ifdef CONFIG_PARIDE_PCD
-extern void pcd_setup(char *str, int *ints);
-#endif
-
-#if defined(CONFIG_SYSVIPC) || defined(CONFIG_KERNELD)
-extern void ipc_init(void);
-#endif
-
-/*
- * Boot command-line arguments
- */
-#define MAX_INIT_ARGS 8
-#define MAX_INIT_ENVS 8
-
-extern void time_init(void);
-
-static unsigned long memory_start = 0;
-static unsigned long memory_end = 0;
-
-int rows, cols;
-
-#ifdef CONFIG_BLK_DEV_RAM
-extern int rd_doload; /* 1 = load ramdisk, 0 = don't load */
-extern int rd_prompt; /* 1 = prompt for ramdisk, 0 = don't prompt */
-extern int rd_size; /* Size of the ramdisk(s) */
-extern int rd_image_start; /* starting block # of image */
-#ifdef CONFIG_BLK_DEV_INITRD
-kdev_t real_root_dev;
-#endif
-#endif
-
-int root_mountflags = MS_RDONLY;
-char *execute_command = 0;
-
-#ifdef CONFIG_ROOT_NFS
-char nfs_root_name[NFS_ROOT_NAME_LEN] = { "default" };
-char nfs_root_addrs[NFS_ROOT_ADDRS_LEN] = { "" };
-#endif
-
-extern void dquot_init(void);
-
-static char * argv_init[MAX_INIT_ARGS+2] = { "init", NULL, };
-static char * envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, };
-
-static char * argv_rc[] = { "/bin/sh", NULL };
-static char * envp_rc[] = { "HOME=/", "TERM=linux", NULL };
-
-static char * argv[] = { "-/bin/sh",NULL };
-static char * envp[] = { "HOME=/usr/root", "TERM=linux", NULL };
-
-char *get_options(char *str, int *ints)
-{
- char *cur = str;
- int i=1;
-
- while (cur && isdigit(*cur) && i <= 10) {
- ints[i++] = simple_strtoul(cur,NULL,0);
- if ((cur = strchr(cur,',')) != NULL)
- cur++;
- }
- ints[0] = i-1;
- return(cur);
-}
-
-static void profile_setup(char *str, int *ints)
-{
- if (ints[0] > 0)
- prof_shift = (unsigned long) ints[1];
- else
-#ifdef CONFIG_PROFILE_SHIFT
- prof_shift = CONFIG_PROFILE_SHIFT;
-#else
- prof_shift = 2;
-#endif
-}
-
-struct kernel_param {
- const char *str;
- void (*setup_func)(char *, int *);
-} ;
-
-struct kernel_param bootsetups[] = {
- { "reserve=", reserve_setup },
- { "profile=", profile_setup },
-#ifdef CONFIG_BLK_DEV_RAM
- { "ramdisk_start=", ramdisk_start_setup },
- { "load_ramdisk=", load_ramdisk },
- { "prompt_ramdisk=", prompt_ramdisk },
- { "ramdisk=", ramdisk_size },
- { "ramdisk_size=", ramdisk_size },
-#ifdef CONFIG_BLK_DEV_INITRD
- { "noinitrd", no_initrd },
-#endif
-#endif
- { "swap=", swap_setup },
- { "buff=", buff_setup },
- { "panic=", panic_setup },
- { "no-scroll", no_scroll },
-#ifdef CONFIG_BUGi386
- { "no-hlt", no_halt },
- { "no387", no_387 },
- { "reboot=", reboot_setup },
-#endif
-#ifdef CONFIG_INET
- { "ether=", eth_setup },
-#endif
-#ifdef CONFIG_PRINTER
- { "lp=", lp_setup },
-#endif
-#ifdef CONFIG_SCSI
- { "max_scsi_luns=", scsi_luns_setup },
-#endif
-#ifdef CONFIG_SCSI_ADVANSYS
- { "advansys=", advansys_setup },
-#endif
-#if defined(CONFIG_BLK_DEV_HD)
- { "hd=", hd_setup },
-#endif
-#ifdef CONFIG_CHR_DEV_ST
- { "st=", st_setup },
-#endif
-#ifdef CONFIG_BUSMOUSE
- { "bmouse=", bmouse_setup },
-#endif
-#ifdef CONFIG_MS_BUSMOUSE
- { "msmouse=", msmouse_setup },
-#endif
-#ifdef CONFIG_SCSI_SEAGATE
- { "st0x=", st0x_setup },
- { "tmc8xx=", tmc8xx_setup },
-#endif
-#ifdef CONFIG_SCSI_T128
- { "t128=", t128_setup },
-#endif
-#ifdef CONFIG_SCSI_PAS16
- { "pas16=", pas16_setup },
-#endif
-#ifdef CONFIG_SCSI_GENERIC_NCR5380
- { "ncr5380=", generic_NCR5380_setup },
- { "ncr53c400=", generic_NCR53C400_setup },
-#endif
-#ifdef CONFIG_SCSI_AHA152X
- { "aha152x=", aha152x_setup},
-#endif
-#ifdef CONFIG_SCSI_AHA1542
- { "aha1542=", aha1542_setup},
-#endif
-#ifdef CONFIG_SCSI_GDTH
- { "gdth=", gdth_setup},
-#endif
-#ifdef CONFIG_SCSI_AIC7XXX
- { "aic7xxx=", aic7xxx_setup},
-#endif
-#ifdef CONFIG_SCSI_BUSLOGIC
- { "BusLogic=", BusLogic_Setup},
-#endif
-#ifdef CONFIG_SCSI_NCR53C8XX
- { "ncr53c8xx=", ncr53c8xx_setup},
-#endif
-#ifdef CONFIG_SCSI_EATA
- { "eata=", eata2x_setup},
-#endif
-#ifdef CONFIG_SCSI_U14_34F
- { "u14-34f=", u14_34f_setup},
-#endif
-#ifdef CONFIG_SCSI_AM53C974
- { "AM53C974=", AM53C974_setup},
-#endif
-#ifdef CONFIG_SCSI_NCR53C406A
- { "ncr53c406a=", NCR53c406a_setup},
-#endif
-#ifdef CONFIG_SCSI_FUTURE_DOMAIN
- { "fdomain=", fdomain_setup},
-#endif
-#ifdef CONFIG_SCSI_IN2000
- { "in2000=", in2000_setup},
-#endif
-#ifdef CONFIG_SCSI_7000FASST
- { "wd7000=", wd7000_setup},
-#endif
-#ifdef CONFIG_SCSI_PPA
- { "ppa=", ppa_setup },
-#endif
-#ifdef CONFIG_BLK_DEV_XD
- { "xd=", xd_setup },
- { "xd_geo=", xd_manual_geo_init },
-#endif
-#ifdef CONFIG_BLK_DEV_FD
- { "floppy=", floppy_setup },
-#endif
-#ifdef CONFIG_CDU31A
- { "cdu31a=", cdu31a_setup },
-#endif CONFIG_CDU31A
-#ifdef CONFIG_MCD
- { "mcd=", mcd_setup },
-#endif CONFIG_MCD
-#ifdef CONFIG_MCDX
- { "mcdx=", mcdx_setup },
-#endif CONFIG_MCDX
-#ifdef CONFIG_SBPCD
- { "sbpcd=", sbpcd_setup },
-#endif CONFIG_SBPCD
-#ifdef CONFIG_AZTCD
- { "aztcd=", aztcd_setup },
-#endif CONFIG_AZTCD
-#ifdef CONFIG_CDU535
- { "sonycd535=", sonycd535_setup },
-#endif CONFIG_CDU535
-#ifdef CONFIG_GSCD
- { "gscd=", gscd_setup },
-#endif CONFIG_GSCD
-#ifdef CONFIG_CM206
- { "cm206=", cm206_setup },
-#endif CONFIG_CM206
-#ifdef CONFIG_OPTCD
- { "optcd=", optcd_setup },
-#endif CONFIG_OPTCD
-#ifdef CONFIG_SJCD
- { "sjcd=", sjcd_setup },
-#endif CONFIG_SJCD
-#ifdef CONFIG_ISP16_CDI
- { "isp16=", isp16_setup },
-#endif CONFIG_ISP16_CDI
-#ifdef CONFIG_SOUND
- { "sound=", sound_setup },
-#endif
-#ifdef CONFIG_ISDN_DRV_ICN
- { "icn=", icn_setup },
-#endif
-#ifdef CONFIG_ISDN_DRV_HISAX
- { "hisax=", HiSax_setup },
- { "HiSax=", HiSax_setup },
-#endif
-#ifdef CONFIG_ISDN_DRV_PCBIT
- { "pcbit=", pcbit_setup },
-#endif
-#ifdef CONFIG_ATARIMOUSE
- { "atamouse=", atari_mouse_setup },
-#endif
-#ifdef CONFIG_DMASOUND
- { "dmasound=", dmasound_setup },
-#endif
-#ifdef CONFIG_ATARI_SCSI
- { "atascsi=", atari_scsi_setup },
-#endif
-#if defined(CONFIG_A3000_SCSI) || defined(CONFIG_A2091_SCSI) \
- || defined(CONFIG_GVP11_SCSI)
- { "wd33c93=", wd33c93_setup },
-#endif
-#if defined(CONFIG_GVP11_SCSI)
- { "gvp11=", gvp11_setup },
-#endif
-#ifdef CONFIG_CYCLADES
- { "cyclades=", cy_setup },
-#endif
-#ifdef CONFIG_DIGI
- { "digi=", pcxx_setup },
-#endif
-#ifdef CONFIG_RISCOM8
- { "riscom8=", riscom8_setup },
-#endif
-#ifdef CONFIG_SPECIALIX
- { "specialix=", specialix_setup },
-#endif
-#ifdef CONFIG_BAYCOM
- { "baycom=", baycom_setup },
-#endif
-#ifdef CONFIG_APM
- { "apm=", apm_setup },
-#endif
- { 0, 0 }
-};
-
-static struct kernel_param raw_params[] = {
-
-#ifdef CONFIG_PARIDE_PD
- { "pd.", pd_setup },
-#endif
-#ifdef CONFIG_PARIDE_PCD
- { "pcd.", pcd_setup },
-#endif
-#ifdef CONFIG_PARIDE_PF
- { "pf.", pf_setup },
-#endif
-#ifdef CONFIG_PARIDE_PT
- { "pt.", pt_setup },
-#endif
-#ifdef CONFIG_PARIDE_PG
- { "pg.", pg_setup },
-#endif
- { 0, 0 }
-} ;
-
-
-#ifdef CONFIG_BLK_DEV_RAM
-static void ramdisk_start_setup(char *str, int *ints)
-{
- if (ints[0] > 0 && ints[1] >= 0)
- rd_image_start = ints[1];
-}
-
-static void load_ramdisk(char *str, int *ints)
-{
- if (ints[0] > 0 && ints[1] >= 0)
- rd_doload = ints[1] & 3;
-}
-
-static void prompt_ramdisk(char *str, int *ints)
-{
- if (ints[0] > 0 && ints[1] >= 0)
- rd_prompt = ints[1] & 1;
-}
-
-static void ramdisk_size(char *str, int *ints)
-{
- if (ints[0] > 0 && ints[1] >= 0)
- rd_size = ints[1];
-}
-
-#endif
-
-static int checksetup(char *line)
-{
- int i = 0;
- int ints[11];
-
-#ifdef CONFIG_BLK_DEV_IDE
- /* ide driver needs the basic string, rather than pre-processed values
*/
- if (!strncmp(line,"ide",3) || (!strncmp(line,"hd",2) && line[2] !=
'=')) {
- ide_setup(line);
- return 1;
- }
-#endif
- while (bootsetups[i].str) {
- int n = strlen(bootsetups[i].str);
- if (!strncmp(line,bootsetups[i].str,n)) {
- bootsetups[i].setup_func(get_options(line+n,ints),
ints);
- return 1;
- }
- i++;
- }
-
- for (i=0; raw_params[i].str; i++) {
- int n = strlen(raw_params[i].str);
- if (!strncmp(line,raw_params[i].str,n)) {
- raw_params[i].setup_func(line+n, NULL);
- return 1;
- }
- }
-
- return 0;
-}
-
-/* this should be approx 2 Bo*oMips to start (note initial shift), and will
- still work even if initially too large, it will just take slightly longer */
-unsigned long loops_per_sec = (1<<12);
-
-#if defined(__SMP__) && defined(__i386__)
-unsigned long smp_loops_per_tick = 1000000;
-#endif
-
-/* This is the number of bits of precision for the loops_per_second. Each
- bit takes on average 1.5/HZ seconds. This (like the original) is a little
- better than 1% */
-#define LPS_PREC 8
-
-void calibrate_delay(void)
-{
- int ticks;
- int loopbit;
- int lps_precision = LPS_PREC;
-
- loops_per_sec = (1<<12);
-
- printk("Calibrating delay loop.. ");
- while (loops_per_sec <<= 1) {
- /* wait for "start of" clock tick */
- ticks = jiffies;
- while (ticks == jiffies)
- /* nothing */;
- /* Go .. */
- ticks = jiffies;
- __delay(loops_per_sec);
- ticks = jiffies - ticks;
- if (ticks)
- break;
- }
-
-/* Do a binary approximation to get loops_per_second set to equal one clock
- (up to lps_precision bits) */
- loops_per_sec >>= 1;
- loopbit = loops_per_sec;
- while ( lps_precision-- && (loopbit >>= 1) ) {
- loops_per_sec |= loopbit;
- ticks = jiffies;
- while (ticks == jiffies);
- ticks = jiffies;
- __delay(loops_per_sec);
- if (jiffies != ticks) /* longer than 1 tick */
- loops_per_sec &= ~loopbit;
- }
-
-/* finally, adjust loops per second in terms of seconds instead of clocks */
- loops_per_sec *= HZ;
-/* Round the value and print it */
- printk("ok - %lu.%02lu BogoMIPS\n",
- (loops_per_sec+2500)/500000,
- ((loops_per_sec+2500)/5000) % 100);
-
-#if defined(__SMP__) && defined(__i386__)
- smp_loops_per_tick = loops_per_sec / 400;
-#endif
-}
-
-static void parse_root_dev(char * line)
-{
- int base = 0;
- static struct dev_name_struct {
- const char *name;
- const int num;
- } devices[] = {
- { "nfs", 0x00ff },
- { "loop", 0x0700 },
- { "hda", 0x0300 },
- { "hdb", 0x0340 },
- { "hdc", 0x1600 },
- { "hdd", 0x1640 },
- { "hde", 0x2100 },
- { "hdf", 0x2140 },
- { "hdg", 0x2200 },
- { "hdh", 0x2240 },
- { "sda", 0x0800 },
- { "sdb", 0x0810 },
- { "sdc", 0x0820 },
- { "sdd", 0x0830 },
- { "sde", 0x0840 },
- { "sdf", 0x0850 },
- { "sdg", 0x0860 },
- { "sdh", 0x0870 },
- { "sdi", 0x0880 },
- { "sdj", 0x0890 },
- { "sdk", 0x08a0 },
- { "sdl", 0x08b0 },
- { "sdm", 0x08c0 },
- { "sdn", 0x08d0 },
- { "sdo", 0x08e0 },
- { "sdp", 0x08f0 },
- { "fd", 0x0200 },
- { "xda", 0x0d00 },
- { "xdb", 0x0d40 },
- { "ram", 0x0100 },
- { "scd", 0x0b00 },
- { "mcd", 0x1700 },
- { "cdu535", 0x1800 },
- { "aztcd", 0x1d00 },
- { "cm206cd", 0x2000 },
- { "gscd", 0x1000 },
- { "sbpcd", 0x1900 },
- { "sonycd", 0x1800 },
-#ifdef CONFIG_PARIDE_PD
- { "pda", 0x2d00 },
- { "pdb", 0x2d10 },
- { "pdc", 0x2d20 },
- { "pdd", 0x2d30 },
-#endif
-#ifdef CONFIG_PARIDE_PCD
- { "pcd", 0x2e00 },
-#endif
-#ifdef CONFIG_PARIDE_PF
- { "pf", 0x2f00 },
-#endif
- { NULL, 0 }
- };
-
- if (strncmp(line,"/dev/",5) == 0) {
- struct dev_name_struct *dev = devices;
- line += 5;
- do {
- int len = strlen(dev->name);
- if (strncmp(line,dev->name,len) == 0) {
- line += len;
- base = dev->num;
- break;
- }
- dev++;
- } while (dev->name);
- }
- ROOT_DEV = to_kdev_t(base + simple_strtoul(line,NULL,base?10:16));
-}
-
-/*
- * This is a simple kernel command line parsing function: it parses
- * the command line, and fills in the arguments/environment to init
- * as appropriate. Any cmd-line option is taken to be an environment
- * variable if it contains the character '='.
- *
- *
- * This routine also checks for options meant for the kernel.
- * These options are not given to init - they are for internal kernel use only.
- */
-static void parse_options(char *line)
-{
- char *next;
- int args, envs;
-
- if (!*line)
- return;
- args = 0;
- envs = 1; /* TERM is set to 'linux' by default */
- next = line;
- while ((line = next) != NULL) {
- if ((next = strchr(line,' ')) != NULL)
- *next++ = 0;
- /*
- * check for kernel options first..
- */
- if (!strncmp(line,"root=",5)) {
- parse_root_dev(line+5);
- continue;
- }
-#ifdef CONFIG_ROOT_NFS
- if (!strncmp(line, "nfsroot=", 8)) {
- int n;
- line += 8;
- ROOT_DEV = MKDEV(UNNAMED_MAJOR, 255);
- if (line[0] == '/' || line[0] == ',' || (line[0] >= '0'
&& line[0] <= '9')) {
- strncpy(nfs_root_name, line,
sizeof(nfs_root_name));
- nfs_root_name[sizeof(nfs_root_name)-1] = '\0';
- continue;
- }
- n = strlen(line) + strlen(NFS_ROOT);
- if (n >= sizeof(nfs_root_name))
- line[sizeof(nfs_root_name) - strlen(NFS_ROOT) -
1] = '\0';
- sprintf(nfs_root_name, NFS_ROOT, line);
- continue;
- }
- if (!strncmp(line, "nfsaddrs=", 9)) {
- line += 9;
- strncpy(nfs_root_addrs, line, sizeof(nfs_root_addrs));
- nfs_root_addrs[sizeof(nfs_root_addrs)-1] = '\0';
- continue;
- }
-#endif
- if (!strcmp(line,"ro")) {
- root_mountflags |= MS_RDONLY;
- continue;
- }
- if (!strcmp(line,"rw")) {
- root_mountflags &= ~MS_RDONLY;
- continue;
- }
- if (!strcmp(line,"debug")) {
- console_loglevel = 10;
- continue;
- }
- if (!strncmp(line,"init=",5)) {
- line += 5;
- execute_command = line;
- continue;
- }
- if (checksetup(line))
- continue;
- /*
- * Then check if it's an environment variable or
- * an option.
- */
- if (strchr(line,'=')) {
- if (envs >= MAX_INIT_ENVS)
- break;
- envp_init[++envs] = line;
- } else {
- if (args >= MAX_INIT_ARGS)
- break;
- argv_init[++args] = line;
- }
- }
- argv_init[args+1] = NULL;
- envp_init[envs+1] = NULL;
-}
-
-
-extern void setup_arch(char **, unsigned long *, unsigned long *);
-extern void arch_syms_export(void);
-
-#ifndef __SMP__
-
-/*
- * Uniprocessor idle thread
- */
-
-int cpu_idle(void *unused)
-{
- for(;;)
- idle();
-}
-
-#else
-
-/*
- * Multiprocessor idle thread is in arch/...
- */
-
-extern int cpu_idle(void * unused);
-
-/*
- * Activate a secondary processor.
- */
-
-asmlinkage void start_secondary(void)
-{
- trap_init();
- init_IRQ();
- smp_callin();
- cpu_idle(NULL);
-}
-
-
-
-/*
- * Called by CPU#0 to activate the rest.
- */
-
-static void smp_init(void)
-{
- int i, j;
- smp_boot_cpus();
-
- /*
- * Create the slave init tasks as sharing pid 0.
- *
- * This should only happen if we have virtual CPU numbers
- * higher than 0.
- */
-
- for (i=1; i<smp_num_cpus; i++)
- {
- struct task_struct *n, *p;
-
- j = cpu_logical_map[i];
- /*
- * We use kernel_thread for the idlers which are
- * unlocked tasks running in kernel space.
- */
- kernel_thread(cpu_idle, NULL, CLONE_PID);
- /*
- * Don't assume linear processor numbering
- */
- current_set[j]=task[i];
- current_set[j]->processor=j;
- cli();
- n = task[i]->next_run;
- p = task[i]->prev_run;
- nr_running--;
- n->prev_run = p;
- p->next_run = n;
- task[i]->next_run = task[i]->prev_run = task[i];
- sti();
- }
-}
-
-/*
- * The autoprobe routines assume CPU#0 on the i386
- * so we don't actually set the game in motion until
- * they are finished.
- */
-
-static void smp_begin(void)
-{
- smp_threads_ready=1;
- smp_commence();
-}
-
-#endif
-
-/*
- * Activate the first processor.
- */
-
-asmlinkage void start_kernel(void)
-{
- char * command_line;
-
-/*
- * This little check will move.
- */
-
-#ifdef __SMP__
- static int first_cpu=1;
-
- if(!first_cpu)
- start_secondary();
- first_cpu=0;
-
-#endif
-/*
- * Interrupts are still disabled. Do necessary setups, then
- * enable them
- */
- setup_arch(&command_line, &memory_start, &memory_end);
- memory_start = paging_init(memory_start,memory_end);
- trap_init();
- init_IRQ();
- sched_init();
- time_init();
- parse_options(command_line);
-#ifdef CONFIG_MODULES
- init_modules();
-#endif
-#ifdef CONFIG_PROFILE
- if (!prof_shift)
-#ifdef CONFIG_PROFILE_SHIFT
- prof_shift = CONFIG_PROFILE_SHIFT;
-#else
- prof_shift = 2;
-#endif
-#endif
- if (prof_shift) {
- prof_buffer = (unsigned int *) memory_start;
- /* only text is profiled */
- prof_len = (unsigned long) &_etext - (unsigned long) &_stext;
- prof_len >>= prof_shift;
- memory_start += prof_len * sizeof(unsigned int);
- memset(prof_buffer, 0, prof_len * sizeof(unsigned int));
- }
- memory_start = console_init(memory_start,memory_end);
-#ifdef CONFIG_PCI
- memory_start = pci_init(memory_start,memory_end);
-#endif
- memory_start = kmalloc_init(memory_start,memory_end);
- sti();
- calibrate_delay();
- memory_start = inode_init(memory_start,memory_end);
- memory_start = file_table_init(memory_start,memory_end);
- memory_start = name_cache_init(memory_start,memory_end);
-#ifdef CONFIG_BLK_DEV_INITRD
- if (initrd_start && initrd_start < memory_start) {
- printk(KERN_CRIT "initrd overwritten (0x%08lx < 0x%08lx) - "
- "disabling it.\n",initrd_start,memory_start);
- initrd_start = 0;
- }
-#endif
- mem_init(memory_start,memory_end);
- buffer_init();
- sock_init();
-#if defined(CONFIG_SYSVIPC) || defined(CONFIG_KERNELD)
- ipc_init();
-#endif
- dquot_init();
- arch_syms_export();
- sti();
- check_bugs();
-
-#if defined(CONFIG_MTRR) && defined(__SMP__)
- init_mtrr_config();
-#endif
-
-
- printk(linux_banner);
-#ifdef __SMP__
- smp_init();
-#endif
- sysctl_init();
- /*
- * We count on the initial thread going ok
- * Like idlers init is an unlocked kernel thread, which will
- * make syscalls (and thus be locked).
- */
- kernel_thread(init, NULL, 0);
-/*
- * task[0] is meant to be used as an "idle" task: it may not sleep, but
- * it might do some general things like count free pages or it could be
- * used to implement a reasonable LRU algorithm for the paging routines:
- * anything that can be useful, but shouldn't take time from the real
- * processes.
- *
- * Right now task[0] just does a infinite idle loop.
- */
- cpu_idle(NULL);
-}
-
-static int printf(const char *fmt, ...)
-{
- va_list args;
- int i;
-
- va_start(args, fmt);
- write(1,printbuf,i=vsprintf(printbuf, fmt, args));
- va_end(args);
- return i;
-}
-
-static int do_rc(void * rc)
-{
- close(0);
- if (open(rc,O_RDONLY,0))
- return -1;
- return execve("/bin/sh", argv_rc, envp_rc);
-}
-
-static int do_shell(void * shell)
-{
- close(0);close(1);close(2);
- setsid();
- (void) open("/dev/tty1",O_RDWR,0);
- (void) dup(0);
- (void) dup(0);
- return execve(shell, argv, envp);
-}
-
-#ifdef CONFIG_BLK_DEV_INITRD
-static int do_linuxrc(void * shell)
-{
- static char *argv[] = { "linuxrc", NULL, };
-
- close(0);close(1);close(2);
- setsid();
- (void) open("/dev/tty1",O_RDWR,0);
- (void) dup(0);
- (void) dup(0);
- return execve(shell, argv, envp_init);
-}
-
-static void no_initrd(char *s,int *ints)
-{
- mount_initrd = 0;
-}
-#endif
-
-static int init(void * unused)
-{
- int pid,i;
-#ifdef CONFIG_BLK_DEV_INITRD
- int real_root_mountflags;
-#endif
-
- /* Launch bdflush from here, instead of the old syscall way. */
- kernel_thread(bdflush, NULL, 0);
- /* Start the background pageout daemon. */
- kswapd_setup();
- kernel_thread(kswapd, NULL, 0);
-
-#ifdef CONFIG_BLK_DEV_INITRD
- real_root_dev = ROOT_DEV;
- real_root_mountflags = root_mountflags;
- if (initrd_start && mount_initrd) root_mountflags &= ~MS_RDONLY;
- else mount_initrd =0;
-#endif
- setup();
-
-#ifdef __SMP__
- /*
- * With the devices probed and setup we can
- * now enter SMP mode.
- */
-
- smp_begin();
-#endif
-
- #ifdef CONFIG_UMSDOS_FS
- {
- /*
- When mounting a umsdos fs as root, we detect
- the pseudo_root (/linux) and initialise it here.
- pseudo_root is defined in fs/umsdos/inode.c
- */
- extern struct inode *pseudo_root;
- if (pseudo_root != NULL){
- current->fs->root = pseudo_root;
- current->fs->pwd = pseudo_root;
- }
- }
- #endif
-
-#ifdef CONFIG_BLK_DEV_INITRD
- root_mountflags = real_root_mountflags;
- if (mount_initrd && ROOT_DEV != real_root_dev && ROOT_DEV ==
MKDEV(RAMDISK_MAJOR,0)) {
- int error;
-
- pid = kernel_thread(do_linuxrc, "/linuxrc", SIGCHLD);
- if (pid>0)
- while (pid != wait(&i));
- if (real_root_dev != MKDEV(RAMDISK_MAJOR, 0)) {
- error = change_root(real_root_dev,"/initrd");
- if (error)
- printk(KERN_ERR "Change root to /initrd: "
- "error %d\n",error);
- }
- }
-#endif
-
- /*
- * This keeps serial console MUCH cleaner, but does assume
- * the console driver checks there really is a video device
- * attached (Sparc effectively does).
- */
-
- if ((open("/dev/tty1",O_RDWR,0) < 0) &&
- (open("/dev/ttyS0",O_RDWR,0) < 0))
- printk("Unable to open an initial console.\n");
-
- (void) dup(0);
- (void) dup(0);
-
- if (!execute_command) {
- execve("/etc/init",argv_init,envp_init);
- execve("/bin/init",argv_init,envp_init);
- execve("/sbin/init",argv_init,envp_init);
- /* if this fails, fall through to original stuff */
-
- pid = kernel_thread(do_rc, "/etc/rc", SIGCHLD);
- if (pid>0)
- while (pid != wait(&i))
- /* nothing */;
- }
-
- while (1) {
- pid = kernel_thread(do_shell,
- execute_command ? execute_command : "/bin/sh",
- SIGCHLD);
- if (pid < 0) {
- printf("Fork failed in init\n\r");
- continue;
- }
- while (1)
- if (pid == wait(&i))
- break;
- printf("\n\rchild %d died with code %04x\n\r",pid,i);
- sync();
- }
- return -1;
-}
diff --git a/linux/src/init/version.c b/linux/src/init/version.c
deleted file mode 100644
index 0196fdf..0000000
--- a/linux/src/init/version.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * linux/version.c
- *
- * Copyright (C) 1992 Theodore Ts'o
- *
- * May be freely distributed as part of Linux.
- */
-
-#include <linux/config.h>
-#include <linux/utsname.h>
-#include <linux/version.h>
-#include <linux/compile.h>
-
-/* make the "checkconfig" script happy: we really need to include config.h */
-#ifdef CONFIG_BOGUS
-#endif
-
-#define version(a) Version_ ## a
-#define version_string(a) version(a)
-
-int version_string(LINUX_VERSION_CODE) = 0;
-
-struct new_utsname system_utsname = {
- UTS_SYSNAME, UTS_NODENAME, UTS_RELEASE, UTS_VERSION,
- UTS_MACHINE, UTS_DOMAINNAME
-};
-
-const char *linux_banner =
- "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
- LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";
diff --git a/linux/src/kernel/dma.c b/linux/src/kernel/dma.c
deleted file mode 100644
index 724d8ca..0000000
--- a/linux/src/kernel/dma.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/* $Id: dma.c,v 1.1 1999/04/26 05:58:29 tb Exp $
- * linux/kernel/dma.c: A DMA channel allocator. Inspired by linux/kernel/irq.c.
- *
- * Written by Hennus Bergman, 1992.
- *
- * 1994/12/26: Changes by Alex Nash to fix a minor bug in /proc/dma.
- * In the previous version the reported device could end up being wrong,
- * if a device requested a DMA channel that was already in use.
- * [It also happened to remove the sizeof(char *) == sizeof(int)
- * assumption introduced because of those /proc/dma patches. -- Hennus]
- */
-
-#include <linux/kernel.h>
-#include <linux/errno.h>
-#include <asm/dma.h>
-#include <asm/system.h>
-
-
-/* A note on resource allocation:
- *
- * All drivers needing DMA channels, should allocate and release them
- * through the public routines `request_dma()' and `free_dma()'.
- *
- * In order to avoid problems, all processes should allocate resources in
- * the same sequence and release them in the reverse order.
- *
- * So, when allocating DMAs and IRQs, first allocate the IRQ, then the DMA.
- * When releasing them, first release the DMA, then release the IRQ.
- * If you don't, you may cause allocation requests to fail unnecessarily.
- * This doesn't really matter now, but it will once we get real semaphores
- * in the kernel.
- */
-
-
-
-/* Channel n is busy iff dma_chan_busy[n].lock != 0.
- * DMA0 used to be reserved for DRAM refresh, but apparently not any more...
- * DMA4 is reserved for cascading.
- */
-
-struct dma_chan {
- int lock;
- const char *device_id;
-};
-
-static struct dma_chan dma_chan_busy[MAX_DMA_CHANNELS] = {
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 0, 0 },
- { 1, "cascade" },
- { 0, 0 },
- { 0, 0 },
- { 0, 0 }
-};
-
-int get_dma_list(char *buf)
-{
- int i, len = 0;
-
- for (i = 0 ; i < MAX_DMA_CHANNELS ; i++) {
- if (dma_chan_busy[i].lock) {
- len += sprintf(buf+len, "%2d: %s\n",
- i,
- dma_chan_busy[i].device_id);
- }
- }
- return len;
-} /* get_dma_list */
-
-
-int request_dma(unsigned int dmanr, const char * device_id)
-{
- if (dmanr >= MAX_DMA_CHANNELS)
- return -EINVAL;
-
- if (xchg(&dma_chan_busy[dmanr].lock, 1) != 0)
- return -EBUSY;
-
- dma_chan_busy[dmanr].device_id = device_id;
-
- /* old flag was 0, now contains 1 to indicate busy */
- return 0;
-} /* request_dma */
-
-
-void free_dma(unsigned int dmanr)
-{
- if (dmanr >= MAX_DMA_CHANNELS) {
- printk("Trying to free DMA%d\n", dmanr);
- return;
- }
-
- if (xchg(&dma_chan_busy[dmanr].lock, 0) == 0) {
- printk("Trying to free free DMA%d\n", dmanr);
- return;
- }
-
-} /* free_dma */
diff --git a/linux/src/kernel/printk.c b/linux/src/kernel/printk.c
deleted file mode 100644
index da8ffca..0000000
--- a/linux/src/kernel/printk.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * linux/kernel/printk.c
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- *
- * Modified to make sys_syslog() more flexible: added commands to
- * return the last 4k of kernel messages, regardless of whether
- * they've been read or not. Added option to suppress kernel printk's
- * to the console. Added hook for sending the console messages
- * elsewhere, in preparation for a serial line console (someday).
- * Ted Ts'o, 2/11/93.
- */
-
-#include <stdarg.h>
-
-#include <asm/segment.h>
-#include <asm/system.h>
-
-#include <linux/errno.h>
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/mm.h>
-#include <linux/tty.h>
-#include <linux/tty_driver.h>
-
-#define LOG_BUF_LEN 8192
-
-static char buf[1024];
-
-extern void console_print(const char *);
-
-/* printk's without a loglevel use this.. */
-#define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING */
-
-/* We show everything that is MORE important than this.. */
-#define MINIMUM_CONSOLE_LOGLEVEL 1 /* Minimum loglevel we let people use */
-#define DEFAULT_CONSOLE_LOGLEVEL 7 /* anything MORE serious than KERN_DEBUG */
-
-unsigned long log_size = 0;
-struct wait_queue * log_wait = NULL;
-int console_loglevel = DEFAULT_CONSOLE_LOGLEVEL;
-
-static void (*console_print_proc)(const char *) = 0;
-static char log_buf[LOG_BUF_LEN];
-static unsigned long log_start = 0;
-static unsigned long logged_chars = 0;
-
-/*
- * Commands to sys_syslog:
- *
- * 0 -- Close the log. Currently a NOP.
- * 1 -- Open the log. Currently a NOP.
- * 2 -- Read from the log.
- * 3 -- Read up to the last 4k of messages in the ring buffer.
- * 4 -- Read and clear last 4k of messages in the ring buffer
- * 5 -- Clear ring buffer.
- * 6 -- Disable printk's to console
- * 7 -- Enable printk's to console
- * 8 -- Set level of messages printed to console
- */
-asmlinkage int sys_syslog(int type, char * buf, int len)
-{
- unsigned long i, j, count;
- int do_clear = 0;
- char c;
- int error;
-
- if ((type != 3) && !suser())
- return -EPERM;
- switch (type) {
- case 0: /* Close log */
- return 0;
- case 1: /* Open log */
- return 0;
- case 2: /* Read from log */
- if (!buf || len < 0)
- return -EINVAL;
- if (!len)
- return 0;
- error = verify_area(VERIFY_WRITE,buf,len);
- if (error)
- return error;
- cli();
- while (!log_size) {
- if (current->signal & ~current->blocked) {
- sti();
- return -ERESTARTSYS;
- }
- interruptible_sleep_on(&log_wait);
- }
- i = 0;
- while (log_size && i < len) {
- c = *((char *) log_buf+log_start);
- log_start++;
- log_size--;
- log_start &= LOG_BUF_LEN-1;
- sti();
- put_user(c,buf);
- buf++;
- i++;
- cli();
- }
- sti();
- return i;
- case 4: /* Read/clear last kernel messages */
- do_clear = 1;
- /* FALL THRU */
- case 3: /* Read last kernel messages */
- if (!buf || len < 0)
- return -EINVAL;
- if (!len)
- return 0;
- error = verify_area(VERIFY_WRITE,buf,len);
- if (error)
- return error;
- count = len;
- if (count > LOG_BUF_LEN)
- count = LOG_BUF_LEN;
- if (count > logged_chars)
- count = logged_chars;
- j = log_start + log_size - count;
- for (i = 0; i < count; i++) {
- c = *((char *) log_buf+(j++ & (LOG_BUF_LEN-1)));
- put_user(c, buf++);
- }
- if (do_clear)
- logged_chars = 0;
- return i;
- case 5: /* Clear ring buffer */
- logged_chars = 0;
- return 0;
- case 6: /* Disable logging to console */
- console_loglevel = MINIMUM_CONSOLE_LOGLEVEL;
- return 0;
- case 7: /* Enable logging to console */
- console_loglevel = DEFAULT_CONSOLE_LOGLEVEL;
- return 0;
- case 8:
- if (len < 1 || len > 8)
- return -EINVAL;
- if (len < MINIMUM_CONSOLE_LOGLEVEL)
- len = MINIMUM_CONSOLE_LOGLEVEL;
- console_loglevel = len;
- return 0;
- }
- return -EINVAL;
-}
-
-
-asmlinkage int printk(const char *fmt, ...)
-{
- va_list args;
- int i;
- char *msg, *p, *buf_end;
- static char msg_level = -1;
- long flags;
-
- save_flags(flags);
- cli();
- va_start(args, fmt);
- i = vsprintf(buf + 3, fmt, args); /* hopefully i < sizeof(buf)-4 */
- buf_end = buf + 3 + i;
- va_end(args);
- for (p = buf + 3; p < buf_end; p++) {
- msg = p;
- if (msg_level < 0) {
- if (
- p[0] != '<' ||
- p[1] < '0' ||
- p[1] > '7' ||
- p[2] != '>'
- ) {
- p -= 3;
- p[0] = '<';
- p[1] = DEFAULT_MESSAGE_LOGLEVEL + '0';
- p[2] = '>';
- } else
- msg += 3;
- msg_level = p[1] - '0';
- }
- for (; p < buf_end; p++) {
- log_buf[(log_start+log_size) & (LOG_BUF_LEN-1)] = *p;
- if (log_size < LOG_BUF_LEN)
- log_size++;
- else {
- log_start++;
- log_start &= LOG_BUF_LEN-1;
- }
- logged_chars++;
- if (*p == '\n')
- break;
- }
- if (msg_level < console_loglevel && console_print_proc) {
- char tmp = p[1];
- p[1] = '\0';
- (*console_print_proc)(msg);
- p[1] = tmp;
- }
- if (*p == '\n')
- msg_level = -1;
- }
- restore_flags(flags);
- wake_up_interruptible(&log_wait);
- return i;
-}
-
-/*
- * The console driver calls this routine during kernel initialization
- * to register the console printing procedure with printk() and to
- * print any messages that were printed by the kernel before the
- * console driver was initialized.
- */
-void register_console(void (*proc)(const char *))
-{
- int i,j;
- int p = log_start;
- char buf[16];
- char msg_level = -1;
- char *q;
-
- console_print_proc = proc;
-
- for (i=0,j=0; i < log_size; i++) {
- buf[j++] = log_buf[p];
- p++; p &= LOG_BUF_LEN-1;
- if (buf[j-1] != '\n' && i < log_size - 1 && j < sizeof(buf)-1)
- continue;
- buf[j] = 0;
- q = buf;
- if (msg_level < 0) {
- msg_level = buf[1] - '0';
- q = buf + 3;
- }
- if (msg_level < console_loglevel)
- (*proc)(q);
- if (buf[j-1] == '\n')
- msg_level = -1;
- j = 0;
- }
-}
-
-/*
- * Write a message to a certain tty, not just the console. This is used for
- * messages that need to be redirected to a specific tty.
- * We don't put it into the syslog queue right now maybe in the future if
- * really needed.
- */
-void tty_write_message(struct tty_struct *tty, char *msg)
-{
- if (tty && tty->driver.write)
- tty->driver.write(tty, 0, msg, strlen(msg));
- return;
-}
diff --git a/linux/src/kernel/resource.c b/linux/src/kernel/resource.c
deleted file mode 100644
index 7d7a4ad..0000000
--- a/linux/src/kernel/resource.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * linux/kernel/resource.c
- *
- * Copyright (C) 1995 Linus Torvalds
- * David Hinds
- *
- * Kernel io-region resource management
- */
-
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/errno.h>
-#include <linux/types.h>
-#include <linux/ioport.h>
-
-#define IOTABLE_SIZE 128
-
-typedef struct resource_entry_t {
- u_long from, num;
- const char *name;
- struct resource_entry_t *next;
-} resource_entry_t;
-
-static resource_entry_t iolist = { 0, 0, "", NULL };
-
-static resource_entry_t iotable[IOTABLE_SIZE];
-
-/*
- * This generates the report for /proc/ioports
- */
-int get_ioport_list(char *buf)
-{
- resource_entry_t *p;
- int len = 0;
-
- for (p = iolist.next; (p) && (len < 4000); p = p->next)
- len += sprintf(buf+len, "%04lx-%04lx : %s\n",
- p->from, p->from+p->num-1, p->name);
- if (p)
- len += sprintf(buf+len, "4K limit reached!\n");
- return len;
-}
-
-/*
- * The workhorse function: find where to put a new entry
- */
-static resource_entry_t *find_gap(resource_entry_t *root,
- u_long from, u_long num)
-{
- unsigned long flags;
- resource_entry_t *p;
-
- if (from > from+num-1)
- return NULL;
- save_flags(flags);
- cli();
- for (p = root; ; p = p->next) {
- if ((p != root) && (p->from+p->num-1 >= from)) {
- p = NULL;
- break;
- }
- if ((p->next == NULL) || (p->next->from > from+num-1))
- break;
- }
- restore_flags(flags);
- return p;
-}
-
-/*
- * Call this from the device driver to register the ioport region.
- */
-void request_region(unsigned int from, unsigned int num, const char *name)
-{
- resource_entry_t *p;
- int i;
-
- for (i = 0; i < IOTABLE_SIZE; i++)
- if (iotable[i].num == 0)
- break;
- if (i == IOTABLE_SIZE)
- printk("warning: ioport table is full\n");
- else {
- p = find_gap(&iolist, from, num);
- if (p == NULL)
- return;
- iotable[i].name = name;
- iotable[i].from = from;
- iotable[i].num = num;
- iotable[i].next = p->next;
- p->next = &iotable[i];
- return;
- }
-}
-
-/*
- * Call this when the device driver is unloaded
- */
-void release_region(unsigned int from, unsigned int num)
-{
- resource_entry_t *p, *q;
-
- for (p = &iolist; ; p = q) {
- q = p->next;
- if (q == NULL)
- break;
- if ((q->from == from) && (q->num == num)) {
- q->num = 0;
- p->next = q->next;
- return;
- }
- }
-}
-
-/*
- * Call this to check the ioport region before probing
- */
-int check_region(unsigned int from, unsigned int num)
-{
- return (find_gap(&iolist, from, num) == NULL) ? -EBUSY : 0;
-}
-
-/* Called from init/main.c to reserve IO ports. */
-void reserve_setup(char *str, int *ints)
-{
- int i;
-
- for (i = 1; i < ints[0]; i += 2)
- request_region(ints[i], ints[i+1], "reserved");
-}
diff --git a/linux/src/kernel/sched.c b/linux/src/kernel/sched.c
deleted file mode 100644
index 0904f59..0000000
--- a/linux/src/kernel/sched.c
+++ /dev/null
@@ -1,1747 +0,0 @@
-/*
- * linux/kernel/sched.c
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- *
- * 1996-04-21 Modified by Ulrich Windl to make NTP work
- * 1996-12-23 Modified by Dave Grothe to fix bugs in semaphores and
- * make semaphores SMP safe
- * 1997-01-28 Modified by Finn Arne Gangstad to make timers scale better.
- * 1997-09-10 Updated NTP code according to technical memorandum Jan '96
- * "A Kernel Model for Precision Timekeeping" by Dave Mills
- */
-
-/*
- * 'sched.c' is the main kernel file. It contains scheduling primitives
- * (sleep_on, wakeup, schedule etc) as well as a number of simple system
- * call functions (type getpid()), which just extract a field from
- * current-task
- */
-
-#include <linux/signal.h>
-#include <linux/sched.h>
-#include <linux/timer.h>
-#include <linux/kernel.h>
-#include <linux/kernel_stat.h>
-#include <linux/fdreg.h>
-#include <linux/errno.h>
-#include <linux/time.h>
-#include <linux/ptrace.h>
-#include <linux/delay.h>
-#include <linux/interrupt.h>
-#include <linux/tqueue.h>
-#include <linux/resource.h>
-#include <linux/mm.h>
-#include <linux/smp.h>
-
-#include <asm/system.h>
-#include <asm/io.h>
-#include <asm/segment.h>
-#include <asm/pgtable.h>
-#include <asm/mmu_context.h>
-
-#include <linux/timex.h>
-
-/*
- * kernel variables
- */
-
-int securelevel = 0; /* system security level */
-
-long tick = (1000000 + HZ/2) / HZ; /* timer interrupt period */
-volatile struct timeval xtime; /* The current time */
-int tickadj = 500/HZ ? 500/HZ : 1; /* microsecs */
-
-DECLARE_TASK_QUEUE(tq_timer);
-DECLARE_TASK_QUEUE(tq_immediate);
-DECLARE_TASK_QUEUE(tq_scheduler);
-
-/*
- * phase-lock loop variables
- */
-/* TIME_ERROR prevents overwriting the CMOS clock */
-int time_state = TIME_ERROR; /* clock synchronization status */
-int time_status = STA_UNSYNC; /* clock status bits */
-long time_offset = 0; /* time adjustment (us) */
-long time_constant = 2; /* pll time constant */
-long time_tolerance = MAXFREQ; /* frequency tolerance (ppm) */
-long time_precision = 1; /* clock precision (us) */
-long time_maxerror = NTP_PHASE_LIMIT; /* maximum error (us) */
-long time_esterror = NTP_PHASE_LIMIT; /* estimated error (us) */
-long time_phase = 0; /* phase offset (scaled us) */
-long time_freq = ((1000000 + HZ/2) % HZ - HZ/2) << SHIFT_USEC; /* frequency
offset (scaled ppm) */
-long time_adj = 0; /* tick adjust (scaled 1 / HZ) */
-long time_reftime = 0; /* time at last adjustment (s) */
-
-long time_adjust = 0;
-long time_adjust_step = 0;
-
-int need_resched = 0;
-unsigned long event = 0;
-
-extern int _setitimer(int, struct itimerval *, struct itimerval *);
-unsigned int * prof_buffer = NULL;
-unsigned long prof_len = 0;
-unsigned long prof_shift = 0;
-
-#define _S(nr) (1<<((nr)-1))
-
-extern void mem_use(void);
-extern unsigned long get_wchan(struct task_struct *);
-
-static unsigned long init_kernel_stack[1024] = { STACK_MAGIC, };
-unsigned long init_user_stack[1024] = { STACK_MAGIC, };
-static struct vm_area_struct init_mmap = INIT_MMAP;
-static struct fs_struct init_fs = INIT_FS;
-static struct files_struct init_files = INIT_FILES;
-static struct signal_struct init_signals = INIT_SIGNALS;
-
-struct mm_struct init_mm = INIT_MM;
-struct task_struct init_task = INIT_TASK;
-
-unsigned long volatile jiffies=0;
-
-struct task_struct *current_set[NR_CPUS];
-struct task_struct *last_task_used_math = NULL;
-
-struct task_struct * task[NR_TASKS] = {&init_task, };
-
-struct kernel_stat kstat = { 0 };
-
-static inline void add_to_runqueue(struct task_struct * p)
-{
-#ifdef __SMP__
- int cpu=smp_processor_id();
-#endif
-#if 1 /* sanity tests */
- if (p->next_run || p->prev_run) {
- printk("task already on run-queue\n");
- return;
- }
-#endif
- if (p->policy != SCHED_OTHER || p->counter > current->counter + 3)
- need_resched = 1;
- nr_running++;
- (p->prev_run = init_task.prev_run)->next_run = p;
- p->next_run = &init_task;
- init_task.prev_run = p;
-#ifdef __SMP__
- /* this is safe only if called with cli()*/
- while(set_bit(31,&smp_process_available))
- {
- while(test_bit(31,&smp_process_available))
- {
- if(clear_bit(cpu,&smp_invalidate_needed))
- {
- local_flush_tlb();
- set_bit(cpu,&cpu_callin_map[0]);
- }
- }
- }
- smp_process_available++;
- clear_bit(31,&smp_process_available);
- if ((0!=p->pid) && smp_threads_ready)
- {
- int i;
- for (i=0;i<smp_num_cpus;i++)
- {
- if (0==current_set[cpu_logical_map[i]]->pid)
- {
- smp_message_pass(cpu_logical_map[i],
MSG_RESCHEDULE, 0L, 0);
- break;
- }
- }
- }
-#endif
-}
-
-static inline void del_from_runqueue(struct task_struct * p)
-{
- struct task_struct *next = p->next_run;
- struct task_struct *prev = p->prev_run;
-
-#if 1 /* sanity tests */
- if (!next || !prev) {
- printk("task not on run-queue\n");
- return;
- }
-#endif
- if (p == &init_task) {
- static int nr = 0;
- if (nr < 5) {
- nr++;
- printk("idle task may not sleep\n");
- }
- return;
- }
- nr_running--;
- next->prev_run = prev;
- prev->next_run = next;
- p->next_run = NULL;
- p->prev_run = NULL;
-}
-
-static inline void move_last_runqueue(struct task_struct * p)
-{
- struct task_struct *next = p->next_run;
- struct task_struct *prev = p->prev_run;
-
- /* remove from list */
- next->prev_run = prev;
- prev->next_run = next;
- /* add back to list */
- p->next_run = &init_task;
- prev = init_task.prev_run;
- init_task.prev_run = p;
- p->prev_run = prev;
- prev->next_run = p;
-}
-
-/*
- * Wake up a process. Put it on the run-queue if it's not
- * already there. The "current" process is always on the
- * run-queue (except when the actual re-schedule is in
- * progress), and as such you're allowed to do the simpler
- * "current->state = TASK_RUNNING" to mark yourself runnable
- * without the overhead of this.
- */
-inline void wake_up_process(struct task_struct * p)
-{
- unsigned long flags;
-
- save_flags(flags);
- cli();
- p->state = TASK_RUNNING;
- if (!p->next_run)
- add_to_runqueue(p);
- restore_flags(flags);
-}
-
-static void process_timeout(unsigned long __data)
-{
- struct task_struct * p = (struct task_struct *) __data;
-
- p->timeout = 0;
- wake_up_process(p);
-}
-
-/*
- * This is the function that decides how desirable a process is..
- * You can weigh different processes against each other depending
- * on what CPU they've run on lately etc to try to handle cache
- * and TLB miss penalties.
- *
- * Return values:
- * -1000: never select this
- * 0: out of time, recalculate counters (but it might still be
- * selected)
- * +ve: "goodness" value (the larger, the better)
- * +1000: realtime process, select this.
- */
-static inline int goodness(struct task_struct * p, struct task_struct * prev,
int this_cpu)
-{
- int weight;
-
-#ifdef __SMP__
- /* We are not permitted to run a task someone else is running */
- if (p->processor != NO_PROC_ID)
- return -1000;
-#ifdef PAST_2_0
- /* This process is locked to a processor group */
- if (p->processor_mask && !(p->processor_mask & (1<<this_cpu))
- return -1000;
-#endif
-#endif
-
- /*
- * Realtime process, select the first one on the
- * runqueue (taking priorities within processes
- * into account).
- */
- if (p->policy != SCHED_OTHER)
- return 1000 + p->rt_priority;
-
- /*
- * Give the process a first-approximation goodness value
- * according to the number of clock-ticks it has left.
- *
- * Don't do any other calculations if the time slice is
- * over..
- */
- weight = p->counter;
- if (weight) {
-
-#ifdef __SMP__
- /* Give a largish advantage to the same processor... */
- /* (this is equivalent to penalizing other processors) */
- if (p->last_processor == this_cpu)
- weight += PROC_CHANGE_PENALTY;
-#endif
-
- /* .. and a slight advantage to the current process */
- if (p == prev)
- weight += 1;
- }
-
- return weight;
-}
-
-
-/*
- The following allow_interrupts function is used to workaround a rare but
- nasty deadlock situation that is possible for 2.0.x Intel SMP because it uses
- a single kernel lock and interrupts are only routed to the boot CPU. There
- are two deadlock scenarios this code protects against.
-
- The first scenario is that if a CPU other than the boot CPU holds the kernel
- lock and needs to wait for an operation to complete that itself requires an
- interrupt, there is a deadlock since the boot CPU may be able to accept the
- interrupt but will not be able to acquire the kernel lock to process it.
-
- The workaround for this deadlock requires adding calls to allow_interrupts to
- places where this deadlock is possible. These places are known to be present
- in buffer.c and keyboard.c. It is also possible that there are other such
- places which have not been identified yet. In order to break the deadlock,
- the code in allow_interrupts temporarily yields the kernel lock directly to
- the boot CPU to allow the interrupt to be processed. The boot CPU interrupt
- entry code indicates that it is spinning waiting for the kernel lock by
- setting the smp_blocked_interrupt_pending variable. This code notices that
- and manipulates the active_kernel_processor variable to yield the kernel lock
- without ever clearing it. When the interrupt has been processed, the
- saved_active_kernel_processor variable contains the value for the interrupt
- exit code to restore, either the APICID of the CPU that granted it the kernel
- lock, or NO_PROC_ID in the normal case where no yielding occurred. Restoring
- active_kernel_processor from saved_active_kernel_processor returns the kernel
- lock back to the CPU that yielded it.
-
- The second form of deadlock is even more insidious. Suppose the boot CPU
- takes a page fault and then the previous scenario ensues. In this case, the
- boot CPU would spin with interrupts disabled waiting to acquire the kernel
- lock. To resolve this deadlock, the kernel lock acquisition code must enable
- interrupts briefly so that the pending interrupt can be handled as in the
- case above.
-
- An additional form of deadlock is where kernel code running on a non-boot CPU
- waits for the jiffies variable to be incremented. This deadlock is avoided
- by having the spin loops in ENTER_KERNEL increment jiffies approximately
- every 10 milliseconds. Finally, if approximately 60 seconds elapse waiting
- for the kernel lock, a message will be printed if possible to indicate that a
- deadlock has been detected.
-
- Leonard N. Zubkoff
- 4 August 1997
-*/
-
-#if defined(__SMP__) && defined(__i386__)
-
-volatile unsigned char smp_blocked_interrupt_pending = 0;
-
-volatile unsigned char saved_active_kernel_processor = NO_PROC_ID;
-
-void allow_interrupts(void)
-{
- if (smp_processor_id() == boot_cpu_id) return;
- if (smp_blocked_interrupt_pending)
- {
- unsigned long saved_kernel_counter;
- long timeout_counter;
- saved_active_kernel_processor = active_kernel_processor;
- saved_kernel_counter = kernel_counter;
- kernel_counter = 0;
- active_kernel_processor = boot_cpu_id;
- timeout_counter = 6000000;
- while (active_kernel_processor != saved_active_kernel_processor &&
- --timeout_counter >= 0)
- {
- udelay(10);
- barrier();
- }
- if (timeout_counter < 0)
- panic("FORWARDED INTERRUPT TIMEOUT (AKP = %d, Saved AKP = %d)\n",
- active_kernel_processor, saved_active_kernel_processor);
- kernel_counter = saved_kernel_counter;
- saved_active_kernel_processor = NO_PROC_ID;
- }
-}
-
-#else
-
-void allow_interrupts(void) {}
-
-#endif
-
-
-/*
- * 'schedule()' is the scheduler function. It's a very simple and nice
- * scheduler: it's not perfect, but certainly works for most things.
- *
- * The goto is "interesting".
- *
- * NOTE!! Task 0 is the 'idle' task, which gets called when no other
- * tasks can run. It can not be killed, and it cannot sleep. The 'state'
- * information in task[0] is never used.
- */
-asmlinkage void schedule(void)
-{
- int c;
- struct task_struct * p;
- struct task_struct * prev, * next;
- unsigned long timeout = 0;
- int this_cpu=smp_processor_id();
-
-/* check alarm, wake up any interruptible tasks that have got a signal */
-
- allow_interrupts();
-
- if (intr_count)
- goto scheduling_in_interrupt;
-
- if (bh_active & bh_mask) {
- intr_count = 1;
- do_bottom_half();
- intr_count = 0;
- }
-
- run_task_queue(&tq_scheduler);
-
- need_resched = 0;
- prev = current;
- cli();
- /* move an exhausted RR process to be last.. */
- if (!prev->counter && prev->policy == SCHED_RR) {
- prev->counter = prev->priority;
- move_last_runqueue(prev);
- }
- switch (prev->state) {
- case TASK_INTERRUPTIBLE:
- if (prev->signal & ~prev->blocked)
- goto makerunnable;
- timeout = prev->timeout;
- if (timeout && (timeout <= jiffies)) {
- prev->timeout = 0;
- timeout = 0;
- makerunnable:
- prev->state = TASK_RUNNING;
- break;
- }
- default:
- del_from_runqueue(prev);
- case TASK_RUNNING:
- }
- p = init_task.next_run;
- sti();
-
-#ifdef __SMP__
- /*
- * This is safe as we do not permit re-entry of schedule()
- */
- prev->processor = NO_PROC_ID;
-#define idle_task (task[cpu_number_map[this_cpu]])
-#else
-#define idle_task (&init_task)
-#endif
-
-/*
- * Note! there may appear new tasks on the run-queue during this, as
- * interrupts are enabled. However, they will be put on front of the
- * list, so our list starting at "p" is essentially fixed.
- */
-/* this is the scheduler proper: */
- c = -1000;
- next = idle_task;
- while (p != &init_task) {
- int weight = goodness(p, prev, this_cpu);
- if (weight > c)
- c = weight, next = p;
- p = p->next_run;
- }
-
- /* if all runnable processes have "counter == 0", re-calculate counters
*/
- if (!c) {
- for_each_task(p)
- p->counter = (p->counter >> 1) + p->priority;
- }
-#ifdef __SMP__
- /*
- * Allocate process to CPU
- */
-
- next->processor = this_cpu;
- next->last_processor = this_cpu;
-#endif
-#ifdef __SMP_PROF__
- /* mark processor running an idle thread */
- if (0==next->pid)
- set_bit(this_cpu,&smp_idle_map);
- else
- clear_bit(this_cpu,&smp_idle_map);
-#endif
- if (prev != next) {
- struct timer_list timer;
-
- kstat.context_swtch++;
- if (timeout) {
- init_timer(&timer);
- timer.expires = timeout;
- timer.data = (unsigned long) prev;
- timer.function = process_timeout;
- add_timer(&timer);
- }
- get_mmu_context(next);
- switch_to(prev,next);
- if (timeout)
- del_timer(&timer);
- }
- return;
-
-scheduling_in_interrupt:
- printk("Aiee: scheduling in interrupt %p\n",
- __builtin_return_address(0));
-}
-
-#ifndef __alpha__
-
-/*
- * For backwards compatibility? This can be done in libc so Alpha
- * and all newer ports shouldn't need it.
- */
-asmlinkage int sys_pause(void)
-{
- current->state = TASK_INTERRUPTIBLE;
- schedule();
- return -ERESTARTNOHAND;
-}
-
-#endif
-
-/*
- * wake_up doesn't wake up stopped processes - they have to be awakened
- * with signals or similar.
- *
- * Note that this doesn't need cli-sti pairs: interrupts may not change
- * the wait-queue structures directly, but only call wake_up() to wake
- * a process. The process itself must remove the queue once it has woken.
- */
-void wake_up(struct wait_queue **q)
-{
- struct wait_queue *next;
- struct wait_queue *head;
-
- if (!q || !(next = *q))
- return;
- head = WAIT_QUEUE_HEAD(q);
- while (next != head) {
- struct task_struct *p = next->task;
- next = next->next;
- if (p != NULL) {
- if ((p->state == TASK_UNINTERRUPTIBLE) ||
- (p->state == TASK_INTERRUPTIBLE))
- wake_up_process(p);
- }
- if (!next)
- goto bad;
- }
- return;
-bad:
- printk("wait_queue is bad (eip = %p)\n",
- __builtin_return_address(0));
- printk(" q = %p\n",q);
- printk(" *q = %p\n",*q);
-}
-
-void wake_up_interruptible(struct wait_queue **q)
-{
- struct wait_queue *next;
- struct wait_queue *head;
-
- if (!q || !(next = *q))
- return;
- head = WAIT_QUEUE_HEAD(q);
- while (next != head) {
- struct task_struct *p = next->task;
- next = next->next;
- if (p != NULL) {
- if (p->state == TASK_INTERRUPTIBLE)
- wake_up_process(p);
- }
- if (!next)
- goto bad;
- }
- return;
-bad:
- printk("wait_queue is bad (eip = %p)\n",
- __builtin_return_address(0));
- printk(" q = %p\n",q);
- printk(" *q = %p\n",*q);
-}
-
-
-/*
- * Semaphores are implemented using a two-way counter:
- * The "count" variable is decremented for each process
- * that tries to sleep, while the "waking" variable is
- * incremented when the "up()" code goes to wake up waiting
- * processes.
- *
- * Notably, the inline "up()" and "down()" functions can
- * efficiently test if they need to do any extra work (up
- * needs to do something only if count was negative before
- * the increment operation.
- *
- * This routine must execute atomically.
- */
-static inline int waking_non_zero(struct semaphore *sem)
-{
- int ret ;
- long flags ;
-
- get_buzz_lock(&sem->lock) ;
- save_flags(flags) ;
- cli() ;
-
- if ((ret = (sem->waking > 0)))
- sem->waking-- ;
-
- restore_flags(flags) ;
- give_buzz_lock(&sem->lock) ;
- return(ret) ;
-}
-
-/*
- * When __up() is called, the count was negative before
- * incrementing it, and we need to wake up somebody.
- *
- * This routine adds one to the count of processes that need to
- * wake up and exit. ALL waiting processes actually wake up but
- * only the one that gets to the "waking" field first will gate
- * through and acquire the semaphore. The others will go back
- * to sleep.
- *
- * Note that these functions are only called when there is
- * contention on the lock, and as such all this is the
- * "non-critical" part of the whole semaphore business. The
- * critical part is the inline stuff in <asm/semaphore.h>
- * where we want to avoid any extra jumps and calls.
- */
-void __up(struct semaphore *sem)
-{
- atomic_inc(&sem->waking) ;
- wake_up(&sem->wait);
-}
-
-/*
- * Perform the "down" function. Return zero for semaphore acquired,
- * return negative for signalled out of the function.
- *
- * If called from __down, the return is ignored and the wait loop is
- * not interruptible. This means that a task waiting on a semaphore
- * using "down()" cannot be killed until someone does an "up()" on
- * the semaphore.
- *
- * If called from __down_interruptible, the return value gets checked
- * upon return. If the return value is negative then the task continues
- * with the negative value in the return register (it can be tested by
- * the caller).
- *
- * Either form may be used in conjunction with "up()".
- *
- */
-int __do_down(struct semaphore * sem, int task_state)
-{
- struct task_struct *tsk = current;
- struct wait_queue wait = { tsk, NULL };
- int ret = 0 ;
-
- tsk->state = task_state;
- add_wait_queue(&sem->wait, &wait);
-
- /*
- * Ok, we're set up. sem->count is known to be less than zero
- * so we must wait.
- *
- * We can let go the lock for purposes of waiting.
- * We re-acquire it after awaking so as to protect
- * all semaphore operations.
- *
- * If "up()" is called before we call waking_non_zero() then
- * we will catch it right away. If it is called later then
- * we will have to go through a wakeup cycle to catch it.
- *
- * Multiple waiters contend for the semaphore lock to see
- * who gets to gate through and who has to wait some more.
- */
- for (;;)
- {
- if (waking_non_zero(sem)) /* are we waking up? */
- break ; /* yes, exit loop */
-
- if ( task_state == TASK_INTERRUPTIBLE
- && (tsk->signal & ~tsk->blocked) /* signalled */
- )
- {
- ret = -EINTR ; /* interrupted */
- atomic_inc(&sem->count) ; /* give up on down operation */
- break ;
- }
-
- schedule();
- tsk->state = task_state;
- }
-
- tsk->state = TASK_RUNNING;
- remove_wait_queue(&sem->wait, &wait);
- return(ret) ;
-
-} /* __do_down */
-
-void __down(struct semaphore * sem)
-{
- __do_down(sem,TASK_UNINTERRUPTIBLE) ;
-}
-
-int __down_interruptible(struct semaphore * sem)
-{
- return(__do_down(sem,TASK_INTERRUPTIBLE)) ;
-}
-
-
-static inline void __sleep_on(struct wait_queue **p, int state)
-{
- unsigned long flags;
- struct wait_queue wait = { current, NULL };
-
- if (!p)
- return;
- if (current == task[0])
- panic("task[0] trying to sleep");
- current->state = state;
- save_flags(flags);
- cli();
- __add_wait_queue(p, &wait);
- sti();
- schedule();
- cli();
- __remove_wait_queue(p, &wait);
- restore_flags(flags);
-}
-
-void interruptible_sleep_on(struct wait_queue **p)
-{
- __sleep_on(p,TASK_INTERRUPTIBLE);
-}
-
-void sleep_on(struct wait_queue **p)
-{
- __sleep_on(p,TASK_UNINTERRUPTIBLE);
-}
-
-#define TVN_BITS 6
-#define TVR_BITS 8
-#define TVN_SIZE (1 << TVN_BITS)
-#define TVR_SIZE (1 << TVR_BITS)
-#define TVN_MASK (TVN_SIZE - 1)
-#define TVR_MASK (TVR_SIZE - 1)
-
-#define SLOW_BUT_DEBUGGING_TIMERS 0
-
-struct timer_vec {
- int index;
- struct timer_list *vec[TVN_SIZE];
-};
-
-struct timer_vec_root {
- int index;
- struct timer_list *vec[TVR_SIZE];
-};
-
-static struct timer_vec tv5 = { 0 };
-static struct timer_vec tv4 = { 0 };
-static struct timer_vec tv3 = { 0 };
-static struct timer_vec tv2 = { 0 };
-static struct timer_vec_root tv1 = { 0 };
-
-static struct timer_vec * const tvecs[] = {
- (struct timer_vec *)&tv1, &tv2, &tv3, &tv4, &tv5
-};
-
-#define NOOF_TVECS (sizeof(tvecs) / sizeof(tvecs[0]))
-
-static unsigned long timer_jiffies = 0;
-
-static inline void insert_timer(struct timer_list *timer,
- struct timer_list **vec, int idx)
-{
- if ((timer->next = vec[idx]))
- vec[idx]->prev = timer;
- vec[idx] = timer;
- timer->prev = (struct timer_list *)&vec[idx];
-}
-
-static inline void internal_add_timer(struct timer_list *timer)
-{
- /*
- * must be cli-ed when calling this
- */
- unsigned long expires = timer->expires;
- unsigned long idx = expires - timer_jiffies;
-
- if (idx < TVR_SIZE) {
- int i = expires & TVR_MASK;
- insert_timer(timer, tv1.vec, i);
- } else if (idx < 1 << (TVR_BITS + TVN_BITS)) {
- int i = (expires >> TVR_BITS) & TVN_MASK;
- insert_timer(timer, tv2.vec, i);
- } else if (idx < 1 << (TVR_BITS + 2 * TVN_BITS)) {
- int i = (expires >> (TVR_BITS + TVN_BITS)) & TVN_MASK;
- insert_timer(timer, tv3.vec, i);
- } else if (idx < 1 << (TVR_BITS + 3 * TVN_BITS)) {
- int i = (expires >> (TVR_BITS + 2 * TVN_BITS)) & TVN_MASK;
- insert_timer(timer, tv4.vec, i);
- } else if (expires < timer_jiffies) {
- /* can happen if you add a timer with expires == jiffies,
- * or you set a timer to go off in the past
- */
- insert_timer(timer, tv1.vec, tv1.index);
- } else if (idx < 0xffffffffUL) {
- int i = (expires >> (TVR_BITS + 3 * TVN_BITS)) & TVN_MASK;
- insert_timer(timer, tv5.vec, i);
- } else {
- /* Can only get here on architectures with 64-bit jiffies */
- timer->next = timer->prev = timer;
- }
-}
-
-void add_timer(struct timer_list *timer)
-{
- unsigned long flags;
- save_flags(flags);
- cli();
-#if SLOW_BUT_DEBUGGING_TIMERS
- if (timer->next || timer->prev) {
- printk("add_timer() called with non-zero list from %p\n",
- __builtin_return_address(0));
- goto out;
- }
-#endif
- internal_add_timer(timer);
-#if SLOW_BUT_DEBUGGING_TIMERS
-out:
-#endif
- restore_flags(flags);
-}
-
-static inline int detach_timer(struct timer_list *timer)
-{
- int ret = 0;
- struct timer_list *next, *prev;
- next = timer->next;
- prev = timer->prev;
- if (next) {
- next->prev = prev;
- }
- if (prev) {
- ret = 1;
- prev->next = next;
- }
- return ret;
-}
-
-
-int del_timer(struct timer_list * timer)
-{
- int ret;
- unsigned long flags;
- save_flags(flags);
- cli();
- ret = detach_timer(timer);
- timer->next = timer->prev = 0;
- restore_flags(flags);
- return ret;
-}
-
-static inline void cascade_timers(struct timer_vec *tv)
-{
- /* cascade all the timers from tv up one level */
- struct timer_list *timer;
- timer = tv->vec[tv->index];
- /*
- * We are removing _all_ timers from the list, so we don't have to
- * detach them individually, just clear the list afterwards.
- */
- while (timer) {
- struct timer_list *tmp = timer;
- timer = timer->next;
- internal_add_timer(tmp);
- }
- tv->vec[tv->index] = NULL;
- tv->index = (tv->index + 1) & TVN_MASK;
-}
-
-static inline void run_timer_list(void)
-{
- cli();
- while ((long)(jiffies - timer_jiffies) >= 0) {
- struct timer_list *timer;
- if (!tv1.index) {
- int n = 1;
- do {
- cascade_timers(tvecs[n]);
- } while (tvecs[n]->index == 1 && ++n < NOOF_TVECS);
- }
- while ((timer = tv1.vec[tv1.index])) {
- void (*fn)(unsigned long) = timer->function;
- unsigned long data = timer->data;
- detach_timer(timer);
- timer->next = timer->prev = NULL;
- sti();
- fn(data);
- cli();
- }
- ++timer_jiffies;
- tv1.index = (tv1.index + 1) & TVR_MASK;
- }
- sti();
-}
-
-static inline void run_old_timers(void)
-{
- struct timer_struct *tp;
- unsigned long mask;
-
- for (mask = 1, tp = timer_table+0 ; mask ; tp++,mask += mask) {
- if (mask > timer_active)
- break;
- if (!(mask & timer_active))
- continue;
- if (tp->expires > jiffies)
- continue;
- timer_active &= ~mask;
- tp->fn();
- sti();
- }
-}
-
-void tqueue_bh(void)
-{
- run_task_queue(&tq_timer);
-}
-
-void immediate_bh(void)
-{
- run_task_queue(&tq_immediate);
-}
-
-unsigned long timer_active = 0;
-struct timer_struct timer_table[32];
-
-/*
- * Hmm.. Changed this, as the GNU make sources (load.c) seems to
- * imply that avenrun[] is the standard name for this kind of thing.
- * Nothing else seems to be standardized: the fractional size etc
- * all seem to differ on different machines.
- */
-unsigned long avenrun[3] = { 0,0,0 };
-
-/*
- * Nr of active tasks - counted in fixed-point numbers
- */
-static unsigned long count_active_tasks(void)
-{
- struct task_struct **p;
- unsigned long nr = 0;
-
- for(p = &LAST_TASK; p > &FIRST_TASK; --p)
- if (*p && ((*p)->state == TASK_RUNNING ||
- (*p)->state == TASK_UNINTERRUPTIBLE ||
- (*p)->state == TASK_SWAPPING))
- nr += FIXED_1;
-#ifdef __SMP__
- nr-=(smp_num_cpus-1)*FIXED_1;
-#endif
- return nr;
-}
-
-static inline void calc_load(unsigned long ticks)
-{
- unsigned long active_tasks; /* fixed-point */
- static int count = LOAD_FREQ;
-
- count -= ticks;
- if (count < 0) {
- count += LOAD_FREQ;
- active_tasks = count_active_tasks();
- CALC_LOAD(avenrun[0], EXP_1, active_tasks);
- CALC_LOAD(avenrun[1], EXP_5, active_tasks);
- CALC_LOAD(avenrun[2], EXP_15, active_tasks);
- }
-}
-
-/*
- * this routine handles the overflow of the microsecond field
- *
- * The tricky bits of code to handle the accurate clock support
- * were provided by Dave Mills (address@hidden) of NTP fame.
- * They were originally developed for SUN and DEC kernels.
- * All the kudos should go to Dave for this stuff.
- *
- */
-static void second_overflow(void)
-{
- long ltemp;
-
- /* Bump the maxerror field */
- time_maxerror += time_tolerance >> SHIFT_USEC;
- if ( time_maxerror > NTP_PHASE_LIMIT ) {
- time_maxerror = NTP_PHASE_LIMIT;
- time_state = TIME_ERROR; /* p. 17, sect. 4.3, (b) */
- time_status |= STA_UNSYNC;
- }
-
- /*
- * Leap second processing. If in leap-insert state at
- * the end of the day, the system clock is set back one
- * second; if in leap-delete state, the system clock is
- * set ahead one second. The microtime() routine or
- * external clock driver will insure that reported time
- * is always monotonic. The ugly divides should be
- * replaced.
- */
- switch (time_state) {
-
- case TIME_OK:
- if (time_status & STA_INS)
- time_state = TIME_INS;
- else if (time_status & STA_DEL)
- time_state = TIME_DEL;
- break;
-
- case TIME_INS:
- if (xtime.tv_sec % 86400 == 0) {
- xtime.tv_sec--;
- time_state = TIME_OOP;
- printk(KERN_NOTICE "Clock: inserting leap second 23:59:60 UTC\n");
- }
- break;
-
- case TIME_DEL:
- if ((xtime.tv_sec + 1) % 86400 == 0) {
- xtime.tv_sec++;
- time_state = TIME_WAIT;
- printk(KERN_NOTICE "Clock: deleting leap second 23:59:59 UTC\n");
- }
- break;
-
- case TIME_OOP:
- time_state = TIME_WAIT;
- break;
-
- case TIME_WAIT:
- if (!(time_status & (STA_INS | STA_DEL)))
- time_state = TIME_OK;
- }
-
- /*
- * Compute the phase adjustment for the next second. In
- * PLL mode, the offset is reduced by a fixed factor
- * times the time constant. In FLL mode the offset is
- * used directly. In either mode, the maximum phase
- * adjustment for each second is clamped so as to spread
- * the adjustment over not more than the number of
- * seconds between updates.
- */
- if (time_offset < 0) {
- ltemp = -time_offset;
- if (!(time_status & STA_FLL))
- ltemp >>= SHIFT_KG + time_constant;
- if (ltemp > (MAXPHASE / MINSEC) << SHIFT_UPDATE)
- ltemp = (MAXPHASE / MINSEC) << SHIFT_UPDATE;
- time_offset += ltemp;
- time_adj = -ltemp << (SHIFT_SCALE - SHIFT_HZ - SHIFT_UPDATE);
- } else {
- ltemp = time_offset;
- if (!(time_status & STA_FLL))
- ltemp >>= SHIFT_KG + time_constant;
- if (ltemp > (MAXPHASE / MINSEC) << SHIFT_UPDATE)
- ltemp = (MAXPHASE / MINSEC) << SHIFT_UPDATE;
- time_offset -= ltemp;
- time_adj = ltemp << (SHIFT_SCALE - SHIFT_HZ - SHIFT_UPDATE);
- }
-
- /*
- * Compute the frequency estimate and additional phase
- * adjustment due to frequency error for the next
- * second. When the PPS signal is engaged, gnaw on the
- * watchdog counter and update the frequency computed by
- * the pll and the PPS signal.
- */
- pps_valid++;
- if (pps_valid == PPS_VALID) { /* PPS signal lost */
- pps_jitter = MAXTIME;
- pps_stabil = MAXFREQ;
- time_status &= ~(STA_PPSSIGNAL | STA_PPSJITTER |
- STA_PPSWANDER | STA_PPSERROR);
- }
- ltemp = time_freq + pps_freq;
- if (ltemp < 0)
- time_adj -= -ltemp >> (SHIFT_USEC + SHIFT_HZ - SHIFT_SCALE);
- else
- time_adj += ltemp >> (SHIFT_USEC + SHIFT_HZ - SHIFT_SCALE);
-
-#if HZ == 100
- /* Compensate for (HZ==100) != (1 << SHIFT_HZ).
- * Add 25% and 3.125% to get 128.125; => only 0.125% error (p. 14)
- */
- if (time_adj < 0)
- time_adj -= (-time_adj >> 2) + (-time_adj >> 5);
- else
- time_adj += (time_adj >> 2) + (time_adj >> 5);
-#endif
-}
-
-/* in the NTP reference this is called "hardclock()" */
-static void update_wall_time_one_tick(void)
-{
- if ( (time_adjust_step = time_adjust) != 0 ) {
- /* We are doing an adjtime thing.
- *
- * Prepare time_adjust_step to be within bounds.
- * Note that a positive time_adjust means we want the clock
- * to run faster.
- *
- * Limit the amount of the step to be in the range
- * -tickadj .. +tickadj
- */
- if (time_adjust > tickadj)
- time_adjust_step = tickadj;
- else if (time_adjust < -tickadj)
- time_adjust_step = -tickadj;
-
- /* Reduce by this step the amount of time left */
- time_adjust -= time_adjust_step;
- }
- xtime.tv_usec += tick + time_adjust_step;
- /*
- * Advance the phase, once it gets to one microsecond, then
- * advance the tick more.
- */
- time_phase += time_adj;
- if (time_phase <= -FINEUSEC) {
- long ltemp = -time_phase >> SHIFT_SCALE;
- time_phase += ltemp << SHIFT_SCALE;
- xtime.tv_usec -= ltemp;
- }
- else if (time_phase >= FINEUSEC) {
- long ltemp = time_phase >> SHIFT_SCALE;
- time_phase -= ltemp << SHIFT_SCALE;
- xtime.tv_usec += ltemp;
- }
-}
-
-/*
- * Using a loop looks inefficient, but "ticks" is
- * usually just one (we shouldn't be losing ticks,
- * we're doing this this way mainly for interrupt
- * latency reasons, not because we think we'll
- * have lots of lost timer ticks
- */
-static void update_wall_time(unsigned long ticks)
-{
- do {
- ticks--;
- update_wall_time_one_tick();
- } while (ticks);
-
- if (xtime.tv_usec >= 1000000) {
- xtime.tv_usec -= 1000000;
- xtime.tv_sec++;
- second_overflow();
- }
-}
-
-static inline void do_process_times(struct task_struct *p,
- unsigned long user, unsigned long system)
-{
- long psecs;
-
- p->utime += user;
- p->stime += system;
-
- psecs = (p->stime + p->utime) / HZ;
- if (psecs > p->rlim[RLIMIT_CPU].rlim_cur) {
- /* Send SIGXCPU every second.. */
- if (psecs * HZ == p->stime + p->utime)
- send_sig(SIGXCPU, p, 1);
- /* and SIGKILL when we go over max.. */
- if (psecs > p->rlim[RLIMIT_CPU].rlim_max)
- send_sig(SIGKILL, p, 1);
- }
-}
-
-static inline void do_it_virt(struct task_struct * p, unsigned long ticks)
-{
- unsigned long it_virt = p->it_virt_value;
-
- if (it_virt) {
- if (it_virt <= ticks) {
- it_virt = ticks + p->it_virt_incr;
- send_sig(SIGVTALRM, p, 1);
- }
- p->it_virt_value = it_virt - ticks;
- }
-}
-
-static inline void do_it_prof(struct task_struct * p, unsigned long ticks)
-{
- unsigned long it_prof = p->it_prof_value;
-
- if (it_prof) {
- if (it_prof <= ticks) {
- it_prof = ticks + p->it_prof_incr;
- send_sig(SIGPROF, p, 1);
- }
- p->it_prof_value = it_prof - ticks;
- }
-}
-
-static __inline__ void update_one_process(struct task_struct *p,
- unsigned long ticks, unsigned long user, unsigned long system)
-{
- do_process_times(p, user, system);
- do_it_virt(p, user);
- do_it_prof(p, ticks);
-}
-
-static void update_process_times(unsigned long ticks, unsigned long system)
-{
-#ifndef __SMP__
- struct task_struct * p = current;
- unsigned long user = ticks - system;
- if (p->pid) {
- p->counter -= ticks;
- if (p->counter < 0) {
- p->counter = 0;
- need_resched = 1;
- }
- if (p->priority < DEF_PRIORITY)
- kstat.cpu_nice += user;
- else
- kstat.cpu_user += user;
- kstat.cpu_system += system;
- }
- update_one_process(p, ticks, user, system);
-#else
- int cpu,j;
- cpu = smp_processor_id();
- for (j=0;j<smp_num_cpus;j++)
- {
- int i = cpu_logical_map[j];
- struct task_struct *p;
-
-#ifdef __SMP_PROF__
- if (test_bit(i,&smp_idle_map))
- smp_idle_count[i]++;
-#endif
- p = current_set[i];
- /*
- * Do we have a real process?
- */
- if (p->pid) {
- /* assume user-mode process */
- unsigned long utime = ticks;
- unsigned long stime = 0;
- if (cpu == i) {
- utime = ticks-system;
- stime = system;
- } else if (smp_proc_in_lock[j]) {
- utime = 0;
- stime = ticks;
- }
- update_one_process(p, ticks, utime, stime);
-
- if (p->priority < DEF_PRIORITY)
- kstat.cpu_nice += utime;
- else
- kstat.cpu_user += utime;
- kstat.cpu_system += stime;
-
- p->counter -= ticks;
- if (p->counter >= 0)
- continue;
- p->counter = 0;
- } else {
- /*
- * Idle processor found, do we have anything
- * we could run?
- */
- if (!(0x7fffffff & smp_process_available))
- continue;
- }
- /* Ok, we should reschedule, do the magic */
- if (i==cpu)
- need_resched = 1;
- else
- smp_message_pass(i, MSG_RESCHEDULE, 0L, 0);
- }
-#endif
-}
-
-static unsigned long lost_ticks = 0;
-static unsigned long lost_ticks_system = 0;
-
-static inline void update_times(void)
-{
- unsigned long ticks;
-
- ticks = xchg(&lost_ticks, 0);
-
- if (ticks) {
- unsigned long system;
-
- system = xchg(&lost_ticks_system, 0);
- calc_load(ticks);
- update_wall_time(ticks);
- update_process_times(ticks, system);
- }
-}
-
-static void timer_bh(void)
-{
- update_times();
- run_old_timers();
- run_timer_list();
-}
-
-void do_timer(struct pt_regs * regs)
-{
- (*(unsigned long *)&jiffies)++;
- lost_ticks++;
- mark_bh(TIMER_BH);
- if (!user_mode(regs)) {
- lost_ticks_system++;
- if (prof_buffer && current->pid) {
- extern int _stext;
- unsigned long ip = instruction_pointer(regs);
- ip -= (unsigned long) &_stext;
- ip >>= prof_shift;
- if (ip < prof_len)
- prof_buffer[ip]++;
- }
- }
- if (tq_timer)
- mark_bh(TQUEUE_BH);
-}
-
-#ifndef __alpha__
-
-/*
- * For backwards compatibility? This can be done in libc so Alpha
- * and all newer ports shouldn't need it.
- */
-asmlinkage unsigned int sys_alarm(unsigned int seconds)
-{
- struct itimerval it_new, it_old;
- unsigned int oldalarm;
-
- it_new.it_interval.tv_sec = it_new.it_interval.tv_usec = 0;
- it_new.it_value.tv_sec = seconds;
- it_new.it_value.tv_usec = 0;
- _setitimer(ITIMER_REAL, &it_new, &it_old);
- oldalarm = it_old.it_value.tv_sec;
- /* ehhh.. We can't return 0 if we have an alarm pending.. */
- /* And we'd better return too much than too little anyway */
- if (it_old.it_value.tv_usec)
- oldalarm++;
- return oldalarm;
-}
-
-/*
- * The Alpha uses getxpid, getxuid, and getxgid instead. Maybe this
- * should be moved into arch/i386 instead?
- */
-asmlinkage int sys_getpid(void)
-{
- return current->pid;
-}
-
-asmlinkage int sys_getppid(void)
-{
- return current->p_opptr->pid;
-}
-
-asmlinkage int sys_getuid(void)
-{
- return current->uid;
-}
-
-asmlinkage int sys_geteuid(void)
-{
- return current->euid;
-}
-
-asmlinkage int sys_getgid(void)
-{
- return current->gid;
-}
-
-asmlinkage int sys_getegid(void)
-{
- return current->egid;
-}
-
-/*
- * This has been replaced by sys_setpriority. Maybe it should be
- * moved into the arch dependent tree for those ports that require
- * it for backward compatibility?
- */
-asmlinkage int sys_nice(int increment)
-{
- unsigned long newprio;
- int increase = 0;
-
- newprio = increment;
- if (increment < 0) {
- if (!suser())
- return -EPERM;
- newprio = -increment;
- increase = 1;
- }
- if (newprio > 40)
- newprio = 40;
- /*
- * do a "normalization" of the priority (traditionally
- * unix nice values are -20..20, linux doesn't really
- * use that kind of thing, but uses the length of the
- * timeslice instead (default 150 msec). The rounding is
- * why we want to avoid negative values.
- */
- newprio = (newprio * DEF_PRIORITY + 10) / 20;
- increment = newprio;
- if (increase)
- increment = -increment;
- newprio = current->priority - increment;
- if ((signed) newprio < 1)
- newprio = 1;
- if (newprio > DEF_PRIORITY*2)
- newprio = DEF_PRIORITY*2;
- current->priority = newprio;
- return 0;
-}
-
-#endif
-
-static struct task_struct *find_process_by_pid(pid_t pid) {
- struct task_struct *p, *q;
-
- if (pid == 0)
- p = current;
- else {
- p = 0;
- for_each_task(q) {
- if (q && q->pid == pid) {
- p = q;
- break;
- }
- }
- }
- return p;
-}
-
-static int setscheduler(pid_t pid, int policy,
- struct sched_param *param)
-{
- int error;
- struct sched_param lp;
- struct task_struct *p;
-
- if (!param || pid < 0)
- return -EINVAL;
-
- error = verify_area(VERIFY_READ, param, sizeof(struct sched_param));
- if (error)
- return error;
- memcpy_fromfs(&lp, param, sizeof(struct sched_param));
-
- p = find_process_by_pid(pid);
- if (!p)
- return -ESRCH;
-
- if (policy < 0)
- policy = p->policy;
- else if (policy != SCHED_FIFO && policy != SCHED_RR &&
- policy != SCHED_OTHER)
- return -EINVAL;
-
- /*
- * Valid priorities for SCHED_FIFO and SCHED_RR are 1..99, valid
- * priority for SCHED_OTHER is 0.
- */
- if (lp.sched_priority < 0 || lp.sched_priority > 99)
- return -EINVAL;
- if ((policy == SCHED_OTHER) != (lp.sched_priority == 0))
- return -EINVAL;
-
- if ((policy == SCHED_FIFO || policy == SCHED_RR) && !suser())
- return -EPERM;
- if ((current->euid != p->euid) && (current->euid != p->uid) &&
- !suser())
- return -EPERM;
-
- p->policy = policy;
- p->rt_priority = lp.sched_priority;
- cli();
- if (p->next_run)
- move_last_runqueue(p);
- sti();
- need_resched = 1;
- return 0;
-}
-
-asmlinkage int sys_sched_setscheduler(pid_t pid, int policy,
- struct sched_param *param)
-{
- return setscheduler(pid, policy, param);
-}
-
-asmlinkage int sys_sched_setparam(pid_t pid, struct sched_param *param)
-{
- return setscheduler(pid, -1, param);
-}
-
-asmlinkage int sys_sched_getscheduler(pid_t pid)
-{
- struct task_struct *p;
-
- if (pid < 0)
- return -EINVAL;
-
- p = find_process_by_pid(pid);
- if (!p)
- return -ESRCH;
-
- return p->policy;
-}
-
-asmlinkage int sys_sched_getparam(pid_t pid, struct sched_param *param)
-{
- int error;
- struct task_struct *p;
- struct sched_param lp;
-
- if (!param || pid < 0)
- return -EINVAL;
-
- error = verify_area(VERIFY_WRITE, param, sizeof(struct sched_param));
- if (error)
- return error;
-
- p = find_process_by_pid(pid);
- if (!p)
- return -ESRCH;
-
- lp.sched_priority = p->rt_priority;
- memcpy_tofs(param, &lp, sizeof(struct sched_param));
-
- return 0;
-}
-
-asmlinkage int sys_sched_yield(void)
-{
- cli();
- move_last_runqueue(current);
- current->counter = 0;
- need_resched = 1;
- sti();
- return 0;
-}
-
-asmlinkage int sys_sched_get_priority_max(int policy)
-{
- switch (policy) {
- case SCHED_FIFO:
- case SCHED_RR:
- return 99;
- case SCHED_OTHER:
- return 0;
- }
-
- return -EINVAL;
-}
-
-asmlinkage int sys_sched_get_priority_min(int policy)
-{
- switch (policy) {
- case SCHED_FIFO:
- case SCHED_RR:
- return 1;
- case SCHED_OTHER:
- return 0;
- }
-
- return -EINVAL;
-}
-
-asmlinkage int sys_sched_rr_get_interval(pid_t pid, struct timespec *interval)
-{
- int error;
- struct timespec t;
-
- error = verify_area(VERIFY_WRITE, interval, sizeof(struct timespec));
- if (error)
- return error;
-
- /* Values taken from 2.1.38 */
- t.tv_sec = 0;
- t.tv_nsec = 150000; /* is this right for non-intel architecture too?*/
- memcpy_tofs(interval, &t, sizeof(struct timespec));
-
- return 0;
-}
-
-/*
- * change timeval to jiffies, trying to avoid the
- * most obvious overflows..
- */
-static unsigned long timespectojiffies(struct timespec *value)
-{
- unsigned long sec = (unsigned) value->tv_sec;
- long nsec = value->tv_nsec;
-
- if (sec > (LONG_MAX / HZ))
- return LONG_MAX;
- nsec += 1000000000L / HZ - 1;
- nsec /= 1000000000L / HZ;
- return HZ * sec + nsec;
-}
-
-static void jiffiestotimespec(unsigned long jiffies, struct timespec *value)
-{
- value->tv_nsec = (jiffies % HZ) * (1000000000L / HZ);
- value->tv_sec = jiffies / HZ;
- return;
-}
-
-asmlinkage int sys_nanosleep(struct timespec *rqtp, struct timespec *rmtp)
-{
- int error;
- struct timespec t;
- unsigned long expire;
-
- error = verify_area(VERIFY_READ, rqtp, sizeof(struct timespec));
- if (error)
- return error;
- memcpy_fromfs(&t, rqtp, sizeof(struct timespec));
- if (rmtp) {
- error = verify_area(VERIFY_WRITE, rmtp,
- sizeof(struct timespec));
- if (error)
- return error;
- }
-
- if (t.tv_nsec >= 1000000000L || t.tv_nsec < 0 || t.tv_sec < 0)
- return -EINVAL;
-
- if (t.tv_sec == 0 && t.tv_nsec <= 2000000L &&
- current->policy != SCHED_OTHER) {
- /*
- * Short delay requests up to 2 ms will be handled with
- * high precision by a busy wait for all real-time processes.
- */
- udelay((t.tv_nsec + 999) / 1000);
- return 0;
- }
-
- expire = timespectojiffies(&t) + (t.tv_sec || t.tv_nsec) + jiffies;
- current->timeout = expire;
- current->state = TASK_INTERRUPTIBLE;
- schedule();
-
- if (expire > jiffies) {
- if (rmtp) {
- jiffiestotimespec(expire - jiffies -
- (expire > jiffies + 1), &t);
- memcpy_tofs(rmtp, &t, sizeof(struct timespec));
- }
- return -EINTR;
- }
-
- return 0;
-}
-
-static void show_task(int nr,struct task_struct * p)
-{
- unsigned long free;
- static const char * stat_nam[] = { "R", "S", "D", "Z", "T", "W" };
-
- printk("%-8s %3d ", p->comm, (p == current) ? -nr : nr);
- if (((unsigned) p->state) < sizeof(stat_nam)/sizeof(char *))
- printk(stat_nam[p->state]);
- else
- printk(" ");
-#if ((~0UL) == 0xffffffff)
- if (p == current)
- printk(" current ");
- else
- printk(" %08lX ", thread_saved_pc(&p->tss));
- printk("%08lX ", get_wchan(p));
-#else
- if (p == current)
- printk(" current task ");
- else
- printk(" %016lx ", thread_saved_pc(&p->tss));
- printk("%08lX ", get_wchan(p) & 0xffffffffL);
-#endif
- for (free = 1; free < PAGE_SIZE/sizeof(long) ; free++) {
- if (((unsigned long *)p->kernel_stack_page)[free])
- break;
- }
- printk("%5lu %5d %6d ", free*sizeof(long), p->pid, p->p_pptr->pid);
- if (p->p_cptr)
- printk("%5d ", p->p_cptr->pid);
- else
- printk(" ");
- if (p->p_ysptr)
- printk("%7d", p->p_ysptr->pid);
- else
- printk(" ");
- if (p->p_osptr)
- printk(" %5d\n", p->p_osptr->pid);
- else
- printk("\n");
-}
-
-void show_state(void)
-{
- int i;
-
-#if ((~0UL) == 0xffffffff)
- printk("\n"
- " free
sibling\n");
- printk(" task PC wchan stack pid father child
younger older\n");
-#else
- printk("\n"
- " free
sibling\n");
- printk(" task PC wchan stack pid father
child younger older\n");
-#endif
- for (i=0 ; i<NR_TASKS ; i++)
- if (task[i])
- show_task(i,task[i]);
-}
-
-void sched_init(void)
-{
- /*
- * We have to do a little magic to get the first
- * process right in SMP mode.
- */
- int cpu=smp_processor_id();
-#ifndef __SMP__
- current_set[cpu]=&init_task;
-#else
- init_task.processor=cpu;
- for(cpu = 0; cpu < NR_CPUS; cpu++)
- current_set[cpu] = &init_task;
-#endif
- init_bh(TIMER_BH, timer_bh);
- init_bh(TQUEUE_BH, tqueue_bh);
- init_bh(IMMEDIATE_BH, immediate_bh);
-}
diff --git a/linux/src/kernel/softirq.c b/linux/src/kernel/softirq.c
deleted file mode 100644
index 32038b1..0000000
--- a/linux/src/kernel/softirq.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * linux/kernel/softirq.c
- *
- * Copyright (C) 1992 Linus Torvalds
- *
- * do_bottom_half() runs at normal kernel priority: all interrupts
- * enabled. do_bottom_half() is atomic with respect to itself: a
- * bottom_half handler need not be re-entrant.
- */
-
-#include <linux/ptrace.h>
-#include <linux/errno.h>
-#include <linux/kernel_stat.h>
-#include <linux/signal.h>
-#include <linux/sched.h>
-#include <linux/interrupt.h>
-#include <linux/mm.h>
-
-#include <asm/system.h>
-#include <asm/io.h>
-#include <asm/irq.h>
-#include <asm/bitops.h>
-
-unsigned int intr_count = 0;
-
-int bh_mask_count[32];
-unsigned int bh_active = 0;
-unsigned int bh_mask = 0;
-void (*bh_base[32])(void);
-
-
-asmlinkage void do_bottom_half(void)
-{
- unsigned int active;
- unsigned int mask, left;
- void (**bh)(void);
-
- sti();
- bh = bh_base;
- active = bh_active & bh_mask;
- for (mask = 1, left = ~0 ; left & active ; bh++,mask += mask,left +=
left) {
- if (mask & active) {
- void (*fn)(void);
- bh_active &= ~mask;
- fn = *bh;
- if (!fn)
- goto bad_bh;
- fn();
- }
- }
- return;
-bad_bh:
- printk ("irq.c:bad bottom half entry %08lx\n", mask);
-}
diff --git a/linux/src/lib/vsprintf.c b/linux/src/lib/vsprintf.c
deleted file mode 100644
index 8f813c6..0000000
--- a/linux/src/lib/vsprintf.c
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * linux/lib/vsprintf.c
- *
- * Copyright (C) 1991, 1992 Linus Torvalds
- */
-
-/* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */
-/*
- * Wirzenius wrote this portably, Torvalds fucked it up :-)
- */
-
-#include <stdarg.h>
-#include <linux/types.h>
-#include <linux/string.h>
-#include <linux/ctype.h>
-
-unsigned long simple_strtoul(const char *cp,char **endp,unsigned int base)
-{
- unsigned long result = 0,value;
-
- if (!base) {
- base = 10;
- if (*cp == '0') {
- base = 8;
- cp++;
- if ((*cp == 'x') && isxdigit(cp[1])) {
- cp++;
- base = 16;
- }
- }
- }
- while (isxdigit(*cp) && (value = isdigit(*cp) ? *cp-'0' : (islower(*cp)
- ? toupper(*cp) : *cp)-'A'+10) < base) {
- result = result*base + value;
- cp++;
- }
- if (endp)
- *endp = (char *)cp;
- return result;
-}
-
-/* we use this so that we can do without the ctype library */
-#define is_digit(c) ((c) >= '0' && (c) <= '9')
-
-static int skip_atoi(const char **s)
-{
- int i=0;
-
- while (is_digit(**s))
- i = i*10 + *((*s)++) - '0';
- return i;
-}
-
-#define ZEROPAD 1 /* pad with zero */
-#define SIGN 2 /* unsigned/signed long */
-#define PLUS 4 /* show plus */
-#define SPACE 8 /* space if plus */
-#define LEFT 16 /* left justified */
-#define SPECIAL 32 /* 0x */
-#define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */
-
-#define do_div(n,base) ({ \
-int __res; \
-__res = ((unsigned long) n) % (unsigned) base; \
-n = ((unsigned long) n) / (unsigned) base; \
-__res; })
-
-static char * number(char * str, long num, int base, int size, int precision
- ,int type)
-{
- char c,sign,tmp[66];
- const char *digits="0123456789abcdefghijklmnopqrstuvwxyz";
- int i;
-
- if (type & LARGE)
- digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- if (type & LEFT)
- type &= ~ZEROPAD;
- if (base < 2 || base > 36)
- return 0;
- c = (type & ZEROPAD) ? '0' : ' ';
- sign = 0;
- if (type & SIGN) {
- if (num < 0) {
- sign = '-';
- num = -num;
- size--;
- } else if (type & PLUS) {
- sign = '+';
- size--;
- } else if (type & SPACE) {
- sign = ' ';
- size--;
- }
- }
- if (type & SPECIAL) {
- if (base == 16)
- size -= 2;
- else if (base == 8)
- size--;
- }
- i = 0;
- if (num == 0)
- tmp[i++]='0';
- else while (num != 0)
- tmp[i++] = digits[do_div(num,base)];
- if (i > precision)
- precision = i;
- size -= precision;
- if (!(type&(ZEROPAD+LEFT)))
- while(size-->0)
- *str++ = ' ';
- if (sign)
- *str++ = sign;
- if (type & SPECIAL)
- if (base==8)
- *str++ = '0';
- else if (base==16) {
- *str++ = '0';
- *str++ = digits[33];
- }
- if (!(type & LEFT))
- while (size-- > 0)
- *str++ = c;
- while (i < precision--)
- *str++ = '0';
- while (i-- > 0)
- *str++ = tmp[i];
- while (size-- > 0)
- *str++ = ' ';
- return str;
-}
-
-int vsprintf(char *buf, const char *fmt, va_list args)
-{
- int len;
- unsigned long num;
- int i, base;
- char * str;
- const char *s;
-
- int flags; /* flags to number() */
-
- int field_width; /* width of output field */
- int precision; /* min. # of digits for integers; max
- number of chars for from string */
- int qualifier; /* 'h', 'l', or 'L' for integer fields */
-
- for (str=buf ; *fmt ; ++fmt) {
- if (*fmt != '%') {
- *str++ = *fmt;
- continue;
- }
-
- /* process flags */
- flags = 0;
- repeat:
- ++fmt; /* this also skips first '%' */
- switch (*fmt) {
- case '-': flags |= LEFT; goto repeat;
- case '+': flags |= PLUS; goto repeat;
- case ' ': flags |= SPACE; goto repeat;
- case '#': flags |= SPECIAL; goto repeat;
- case '0': flags |= ZEROPAD; goto repeat;
- }
-
- /* get field width */
- field_width = -1;
- if (is_digit(*fmt))
- field_width = skip_atoi(&fmt);
- else if (*fmt == '*') {
- ++fmt;
- /* it's the next argument */
- field_width = va_arg(args, int);
- if (field_width < 0) {
- field_width = -field_width;
- flags |= LEFT;
- }
- }
-
- /* get the precision */
- precision = -1;
- if (*fmt == '.') {
- ++fmt;
- if (is_digit(*fmt))
- precision = skip_atoi(&fmt);
- else if (*fmt == '*') {
- ++fmt;
- /* it's the next argument */
- precision = va_arg(args, int);
- }
- if (precision < 0)
- precision = 0;
- }
-
- /* get the conversion qualifier */
- qualifier = -1;
- if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L') {
- qualifier = *fmt;
- ++fmt;
- }
-
- /* default base */
- base = 10;
-
- switch (*fmt) {
- case 'c':
- if (!(flags & LEFT))
- while (--field_width > 0)
- *str++ = ' ';
- *str++ = (unsigned char) va_arg(args, int);
- while (--field_width > 0)
- *str++ = ' ';
- continue;
-
- case 's':
- s = va_arg(args, char *);
- if (!s)
- s = "<NULL>";
-
- len = strnlen(s, precision);
-
- if (!(flags & LEFT))
- while (len < field_width--)
- *str++ = ' ';
- for (i = 0; i < len; ++i)
- *str++ = *s++;
- while (len < field_width--)
- *str++ = ' ';
- continue;
-
- case 'p':
- if (field_width == -1) {
- field_width = 2*sizeof(void *);
- flags |= ZEROPAD;
- }
- str = number(str,
- (unsigned long) va_arg(args, void *), 16,
- field_width, precision, flags);
- continue;
-
-
- case 'n':
- if (qualifier == 'l') {
- long * ip = va_arg(args, long *);
- *ip = (str - buf);
- } else {
- int * ip = va_arg(args, int *);
- *ip = (str - buf);
- }
- continue;
-
- /* integer number formats - set up the flags and "break" */
- case 'o':
- base = 8;
- break;
-
- case 'X':
- flags |= LARGE;
- case 'x':
- base = 16;
- break;
-
- case 'd':
- case 'i':
- flags |= SIGN;
- case 'u':
- break;
-
- default:
- if (*fmt != '%')
- *str++ = '%';
- if (*fmt)
- *str++ = *fmt;
- else
- --fmt;
- continue;
- }
- if (qualifier == 'l')
- num = va_arg(args, unsigned long);
- else if (qualifier == 'h')
- if (flags & SIGN)
- num = va_arg(args, short);
- else
- num = va_arg(args, unsigned short);
- else if (flags & SIGN)
- num = va_arg(args, int);
- else
- num = va_arg(args, unsigned int);
- str = number(str, num, base, field_width, precision, flags);
- }
- *str = '\0';
- return str-buf;
-}
-
-int sprintf(char * buf, const char *fmt, ...)
-{
- va_list args;
- int i;
-
- va_start(args, fmt);
- i=vsprintf(buf,fmt,args);
- va_end(args);
- return i;
-}
-
diff --git a/linux/src/net/core/dev.c b/linux/src/net/core/dev.c
deleted file mode 100644
index 4e46f9f..0000000
--- a/linux/src/net/core/dev.c
+++ /dev/null
@@ -1,1629 +0,0 @@
-/*
- * NET3 Protocol independent device support routines.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version
- * 2 of the License, or (at your option) any later version.
- *
- * Derived from the non IP parts of dev.c 1.0.19
- * Authors: Ross Biro, <address@hidden>
- * Fred N. van Kempen, <address@hidden>
- * Mark Evans, <address@hidden>
- *
- * Additional Authors:
- * Florian la Roche <address@hidden>
- * Alan Cox <address@hidden>
- * David Hinds <address@hidden>
- *
- * Changes:
- * Alan Cox : device private ioctl copies fields back.
- * Alan Cox : Transmit queue code does relevant
stunts to
- * keep the queue safe.
- * Alan Cox : Fixed double lock.
- * Alan Cox : Fixed promisc NULL pointer trap
- * ???????? : Support the full private ioctl range
- * Alan Cox : Moved ioctl permission check into
drivers
- * Tim Kordas : SIOCADDMULTI/SIOCDELMULTI
- * Alan Cox : 100 backlog just doesn't cut it when
- * you start doing multicast video 8)
- * Alan Cox : Rewrote net_bh and list manager.
- * Alan Cox : Fix ETH_P_ALL echoback lengths.
- * Alan Cox : Took out transmit every packet pass
- * Saved a few bytes in the ioctl handler
- * Alan Cox : Network driver sets packet type before
calling netif_rx. Saves
- * a function call a packet.
- * Alan Cox : Hashed net_bh()
- * Richard Kooijman: Timestamp fixes.
- * Alan Cox : Wrong field in SIOCGIFDSTADDR
- * Alan Cox : Device lock protection.
- * Alan Cox : Fixed nasty side effect of device close
changes.
- * Rudi Cilibrasi : Pass the right thing to
set_mac_address()
- * Dave Miller : 32bit quantity for the device lock to
make it work out
- * on a Sparc.
- * Bjorn Ekwall : Added KERNELD hack.
- * Alan Cox : Cleaned up the backlog initialise.
- * Craig Metz : SIOCGIFCONF fix if space for under
- * 1 device.
- * Thomas Bogendoerfer : Return ENODEV for dev_open, if there
- * is no device open function.
- * Lawrence V. Stefani : Changed set MTU ioctl to not assume
- * min MTU of 68 bytes for devices
- * that have change MTU functions.
- *
- */
-
-#include <asm/segment.h>
-#include <asm/system.h>
-#include <asm/bitops.h>
-#include <linux/config.h>
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/string.h>
-#include <linux/mm.h>
-#include <linux/socket.h>
-#include <linux/sockios.h>
-#include <linux/in.h>
-#include <linux/errno.h>
-#include <linux/interrupt.h>
-#include <linux/if_ether.h>
-#include <linux/inet.h>
-#include <linux/netdevice.h>
-#include <linux/etherdevice.h>
-#include <linux/notifier.h>
-#include <net/ip.h>
-#include <net/route.h>
-#include <linux/skbuff.h>
-#include <net/sock.h>
-#include <net/arp.h>
-#include <net/slhc.h>
-#include <linux/proc_fs.h>
-#include <linux/stat.h>
-#include <net/br.h>
-#ifdef CONFIG_NET_ALIAS
-#include <linux/net_alias.h>
-#endif
-#ifdef CONFIG_KERNELD
-#include <linux/kerneld.h>
-#endif
-#ifdef CONFIG_NET_RADIO
-#include <linux/wireless.h>
-#endif /* CONFIG_NET_RADIO */
-
-/*
- * The list of packet types we will receive (as opposed to discard)
- * and the routines to invoke.
- */
-
-struct packet_type *ptype_base[16];
-struct packet_type *ptype_all = NULL; /* Taps */
-
-/*
- * Device list lock
- */
-
-int dev_lockct=0;
-
-/*
- * Our notifier list
- */
-
-struct notifier_block *netdev_chain=NULL;
-
-/*
- * Device drivers call our routines to queue packets here. We empty the
- * queue in the bottom half handler.
- */
-
-static struct sk_buff_head backlog;
-
-/*
- * We don't overdo the queue or we will thrash memory badly.
- */
-
-static int backlog_size = 0;
-
-/*
- * Return the lesser of the two values.
- */
-
-static __inline__ unsigned long min(unsigned long a, unsigned long b)
-{
- return (a < b)? a : b;
-}
-
-
-/******************************************************************************************
-
- Protocol management and registration routines
-
-*******************************************************************************************/
-
-/*
- * For efficiency
- */
-
-static int dev_nit=0;
-
-/*
- * Add a protocol ID to the list. Now that the input handler is
- * smarter we can dispense with all the messy stuff that used to be
- * here.
- */
-
-void dev_add_pack(struct packet_type *pt)
-{
- int hash;
- if(pt->type==htons(ETH_P_ALL))
- {
- dev_nit++;
- pt->next=ptype_all;
- ptype_all=pt;
- }
- else
- {
- hash=ntohs(pt->type)&15;
- pt->next = ptype_base[hash];
- ptype_base[hash] = pt;
- }
-}
-
-
-/*
- * Remove a protocol ID from the list.
- */
-
-void dev_remove_pack(struct packet_type *pt)
-{
- struct packet_type **pt1;
- if(pt->type==htons(ETH_P_ALL))
- {
- dev_nit--;
- pt1=&ptype_all;
- }
- else
- pt1=&ptype_base[ntohs(pt->type)&15];
- for(; (*pt1)!=NULL; pt1=&((*pt1)->next))
- {
- if(pt==(*pt1))
- {
- *pt1=pt->next;
- return;
- }
- }
- printk(KERN_WARNING "dev_remove_pack: %p not found.\n", pt);
-}
-
-/*****************************************************************************************
-
- Device Interface Subroutines
-
-******************************************************************************************/
-
-/*
- * Find an interface by name.
- */
-
-struct device *dev_get(const char *name)
-{
- struct device *dev;
-
- for (dev = dev_base; dev != NULL; dev = dev->next)
- {
- if (strcmp(dev->name, name) == 0)
- return(dev);
- }
- return NULL;
-}
-
-/*
- * Find and possibly load an interface.
- */
-
-#ifdef CONFIG_KERNELD
-
-extern __inline__ void dev_load(const char *name)
-{
- if(!dev_get(name) && suser()) {
-#ifdef CONFIG_NET_ALIAS
- const char *sptr;
-
- for (sptr=name ; *sptr ; sptr++) if(*sptr==':') break;
- if (!(*sptr && *(sptr+1)))
-#endif
- request_module(name);
- }
-}
-
-#endif
-
-/*
- * Prepare an interface for use.
- */
-
-int dev_open(struct device *dev)
-{
- int ret = -ENODEV;
-
- /*
- * Call device private open method
- */
- if (dev->open)
- ret = dev->open(dev);
-
- /*
- * If it went open OK then set the flags
- */
-
- if (ret == 0)
- {
- dev->flags |= (IFF_UP | IFF_RUNNING);
- /*
- * Initialise multicasting status
- */
- dev_mc_upload(dev);
- notifier_call_chain(&netdev_chain, NETDEV_UP, dev);
- }
- return(ret);
-}
-
-
-/*
- * Completely shutdown an interface.
- */
-
-int dev_close(struct device *dev)
-{
- int ct=0;
-
- /*
- * Call the device specific close. This cannot fail.
- * Only if device is UP
- */
-
- if ((dev->flags & IFF_UP) && dev->stop)
- dev->stop(dev);
-
- /*
- * Device is now down.
- */
-
- dev->flags&=~(IFF_UP|IFF_RUNNING);
-
- /*
- * Tell people we are going down
- */
- notifier_call_chain(&netdev_chain, NETDEV_DOWN, dev);
- /*
- * Flush the multicast chain
- */
- dev_mc_discard(dev);
-
- /*
- * Purge any queued packets when we down the link
- */
- while(ct<DEV_NUMBUFFS)
- {
- struct sk_buff *skb;
- while((skb=skb_dequeue(&dev->buffs[ct]))!=NULL)
- if(skb->free)
- kfree_skb(skb,FREE_WRITE);
- ct++;
- }
- return(0);
-}
-
-
-/*
- * Device change register/unregister. These are not inline or static
- * as we export them to the world.
- */
-
-int register_netdevice_notifier(struct notifier_block *nb)
-{
- return notifier_chain_register(&netdev_chain, nb);
-}
-
-int unregister_netdevice_notifier(struct notifier_block *nb)
-{
- return notifier_chain_unregister(&netdev_chain,nb);
-}
-
-/*
- * Send (or queue for sending) a packet.
- *
- * IMPORTANT: When this is called to resend frames. The caller MUST
- * already have locked the sk_buff. Apart from that we do the
- * rest of the magic.
- */
-
-static void do_dev_queue_xmit(struct sk_buff *skb, struct device *dev, int pri)
-{
- unsigned long flags;
- struct sk_buff_head *list;
- int retransmission = 0; /* used to say if the packet should go */
- /* at the front or the back of the */
- /* queue - front is a retransmit try */
-
- if(pri>=0 && !skb_device_locked(skb))
- skb_device_lock(skb); /* Shove a lock on the frame */
-#if CONFIG_SKB_CHECK
- IS_SKB(skb);
-#endif
- skb->dev = dev;
-
- /*
- * Negative priority is used to flag a frame that is being pulled
from the
- * queue front as a retransmit attempt. It therefore goes back on
the queue
- * start on a failure.
- */
-
- if (pri < 0)
- {
- pri = -pri-1;
- retransmission = 1;
- }
-
-#ifdef CONFIG_NET_DEBUG
- if (pri >= DEV_NUMBUFFS)
- {
- printk(KERN_WARNING "bad priority in dev_queue_xmit.\n");
- pri = 1;
- }
-#endif
-
- /*
- * If the address has not been resolved. Call the device header
rebuilder.
- * This can cover all protocols and technically not just ARP
either.
- */
-
- if (!skb->arp && dev->rebuild_header(skb->data, dev, skb->raddr, skb)) {
- return;
- }
-
- /*
- *
- * If dev is an alias, switch to its main device.
- * "arp" resolution has been made with alias device, so
- * arp entries refer to alias, not main.
- *
- */
-
-#ifdef CONFIG_NET_ALIAS
- if (net_alias_is(dev))
- skb->dev = dev = net_alias_dev_tx(dev);
-#endif
-
- /*
- * If we are bridging and this is directly generated output
- * pass the frame via the bridge.
- */
-
-#ifdef CONFIG_BRIDGE
- if(skb->pkt_bridged!=IS_BRIDGED && br_stats.flags & BR_UP)
- {
- if(br_tx_frame(skb))
- return;
- }
-#endif
-
- list = dev->buffs + pri;
-
- save_flags(flags);
- /* if this isn't a retransmission, use the first packet instead... */
- if (!retransmission) {
- if (skb_queue_len(list)) {
- /* avoid overrunning the device queue.. */
- if (skb_queue_len(list) > dev->tx_queue_len) {
- dev_kfree_skb(skb, FREE_WRITE);
- return;
- }
- }
-
- /* copy outgoing packets to any sniffer packet handlers */
- if (dev_nit) {
- struct packet_type *ptype;
- skb->stamp=xtime;
- for (ptype = ptype_all; ptype!=NULL; ptype =
ptype->next)
- {
- /* Never send packets back to the socket
- * they originated from - MvS (address@hidden)
- */
- if ((ptype->dev == dev || !ptype->dev) &&
- ((struct sock *)ptype->data != skb->sk))
- {
- struct sk_buff *skb2;
- if ((skb2 = skb_clone(skb, GFP_ATOMIC))
== NULL)
- break;
- /* FIXME?: Wrong when the
hard_header_len
- * is an upper bound. Is this even
- * used anywhere?
- */
- skb2->h.raw = skb2->data +
dev->hard_header_len;
- /* On soft header devices we
- * yank the header before mac.raw
- * back off. This is set by
- * dev->hard_header().
- */
- if (dev->flags&IFF_SOFTHEADERS)
-
skb_pull(skb2,skb2->mac.raw-skb2->data);
- skb2->mac.raw = skb2->data;
- ptype->func(skb2, skb->dev, ptype);
- }
- }
- }
-
- if (skb_queue_len(list)) {
- cli();
- skb_device_unlock(skb); /* Buffer is on the
device queue and can be freed safely */
- __skb_queue_tail(list, skb);
- skb = __skb_dequeue(list);
- skb_device_lock(skb); /* New buffer needs
locking down */
- restore_flags(flags);
- }
- }
- if (dev->hard_start_xmit(skb, dev) == 0) {
- /*
- * Packet is now solely the responsibility of the driver
- */
- return;
- }
-
- /*
- * Transmission failed, put skb back into a list. Once on the list
it's safe and
- * no longer device locked (it can be freed safely from the device
queue)
- */
- cli();
- skb_device_unlock(skb);
- __skb_queue_head(list,skb);
- restore_flags(flags);
-}
-
-void dev_queue_xmit(struct sk_buff *skb, struct device *dev, int pri)
-{
- start_bh_atomic();
- do_dev_queue_xmit(skb, dev, pri);
- end_bh_atomic();
-}
-
-/*
- * Receive a packet from a device driver and queue it for the upper
- * (protocol) levels. It always succeeds. This is the recommended
- * interface to use.
- */
-
-void netif_rx(struct sk_buff *skb)
-{
- static int dropping = 0;
-
- /*
- * Any received buffers are un-owned and should be discarded
- * when freed. These will be updated later as the frames get
- * owners.
- */
-
- skb->sk = NULL;
- skb->free = 1;
- if(skb->stamp.tv_sec==0)
- skb->stamp = xtime;
-
- /*
- * Check that we aren't overdoing things.
- */
-
- if (!backlog_size)
- dropping = 0;
- else if (backlog_size > 300)
- dropping = 1;
-
- if (dropping)
- {
- kfree_skb(skb, FREE_READ);
- return;
- }
-
- /*
- * Add it to the "backlog" queue.
- */
-#if CONFIG_SKB_CHECK
- IS_SKB(skb);
-#endif
- skb_queue_tail(&backlog,skb);
- backlog_size++;
-
- /*
- * If any packet arrived, mark it for processing after the
- * hardware interrupt returns.
- */
-
- mark_bh(NET_BH);
- return;
-}
-
-/*
- * This routine causes all interfaces to try to send some data.
- */
-
-static void dev_transmit(void)
-{
- struct device *dev;
-
- for (dev = dev_base; dev != NULL; dev = dev->next)
- {
- if (dev->flags != 0 && !dev->tbusy) {
- /*
- * Kick the device
- */
- dev_tint(dev);
- }
- }
-}
-
-
-/**********************************************************************************
-
- Receive Queue Processor
-
-***********************************************************************************/
-
-/*
- * When we are called the queue is ready to grab, the interrupts are
- * on and hardware can interrupt and queue to the receive queue as we
- * run with no problems.
- * This is run as a bottom half after an interrupt handler that does
- * mark_bh(NET_BH);
- */
-
-void net_bh(void)
-{
- struct packet_type *ptype;
- struct packet_type *pt_prev;
- unsigned short type;
-
- /*
- * Can we send anything now? We want to clear the
- * decks for any more sends that get done as we
- * process the input. This also minimises the
- * latency on a transmit interrupt bh.
- */
-
- dev_transmit();
-
- /*
- * Any data left to process. This may occur because a
- * mark_bh() is done after we empty the queue including
- * that from the device which does a mark_bh() just after
- */
-
- /*
- * While the queue is not empty..
- *
- * Note that the queue never shrinks due to
- * an interrupt, so we can do this test without
- * disabling interrupts.
- */
-
- while (!skb_queue_empty(&backlog)) {
- struct sk_buff * skb = backlog.next;
-
- /*
- * We have a packet. Therefore the queue has shrunk
- */
- cli();
- __skb_unlink(skb, &backlog);
- backlog_size--;
- sti();
-
-
-#ifdef CONFIG_BRIDGE
-
- /*
- * If we are bridging then pass the frame up to the
- * bridging code. If it is bridged then move on
- */
-
- if (br_stats.flags & BR_UP)
- {
- /*
- * We pass the bridge a complete frame. This means
- * recovering the MAC header first.
- */
-
- int offset=skb->data-skb->mac.raw;
- cli();
- skb_push(skb,offset); /* Put header back on for
bridge */
- if(br_receive_frame(skb))
- {
- sti();
- continue;
- }
- /*
- * Pull the MAC header off for the copy going to
- * the upper layers.
- */
- skb_pull(skb,offset);
- sti();
- }
-#endif
-
- /*
- * Bump the pointer to the next structure.
- *
- * On entry to the protocol layer. skb->data and
- * skb->h.raw point to the MAC and encapsulated data
- */
-
- skb->h.raw = skb->data;
-
- /*
- * Fetch the packet protocol ID.
- */
-
- type = skb->protocol;
-
- /*
- * We got a packet ID. Now loop over the "known protocols"
- * list. There are two lists. The ptype_all list of taps
(normally empty)
- * and the main protocol list which is hashed perfectly
for normal protocols.
- */
-
- pt_prev = NULL;
- for (ptype = ptype_all; ptype!=NULL; ptype=ptype->next)
- {
- if(!ptype->dev || ptype->dev == skb->dev) {
- if(pt_prev) {
- struct sk_buff *skb2=skb_clone(skb,
GFP_ATOMIC);
- if(skb2)
- pt_prev->func(skb2,skb->dev,
pt_prev);
- }
- pt_prev=ptype;
- }
- }
-
- for (ptype = ptype_base[ntohs(type)&15]; ptype != NULL; ptype =
ptype->next)
- {
- if (ptype->type == type && (!ptype->dev ||
ptype->dev==skb->dev))
- {
- /*
- * We already have a match queued. Deliver
- * to it and then remember the new match
- */
- if(pt_prev)
- {
- struct sk_buff *skb2;
-
- skb2=skb_clone(skb, GFP_ATOMIC);
-
- /*
- * Kick the protocol handler. This
should be fast
- * and efficient code.
- */
-
- if(skb2)
- pt_prev->func(skb2, skb->dev,
pt_prev);
- }
- /* Remember the current last to do */
- pt_prev=ptype;
- }
- } /* End of protocol list loop */
-
- /*
- * Is there a last item to send to ?
- */
-
- if(pt_prev)
- pt_prev->func(skb, skb->dev, pt_prev);
- /*
- * Has an unknown packet has been received ?
- */
-
- else
- kfree_skb(skb, FREE_WRITE);
- /*
- * Again, see if we can transmit anything now.
- * [Ought to take this out judging by tests it slows
- * us down not speeds us up]
- */
-#ifdef XMIT_EVERY
- dev_transmit();
-#endif
- } /* End of queue loop */
-
- /*
- * We have emptied the queue
- */
-
- /*
- * One last output flush.
- */
-
-#ifdef XMIT_AFTER
- dev_transmit();
-#endif
-}
-
-
-/*
- * This routine is called when an device driver (i.e. an
- * interface) is ready to transmit a packet.
- */
-
-void dev_tint(struct device *dev)
-{
- int i;
- unsigned long flags;
- struct sk_buff_head * head;
-
- /*
- * aliases do not transmit (for now :) )
- */
-
-#ifdef CONFIG_NET_ALIAS
- if (net_alias_is(dev)) return;
-#endif
- head = dev->buffs;
- save_flags(flags);
- cli();
-
- /*
- * Work the queues in priority order
- */
- for(i = 0;i < DEV_NUMBUFFS; i++,head++)
- {
-
- while (!skb_queue_empty(head)) {
- struct sk_buff *skb;
-
- skb = head->next;
- __skb_unlink(skb, head);
- /*
- * Stop anyone freeing the buffer while we
retransmit it
- */
- skb_device_lock(skb);
- restore_flags(flags);
- /*
- * Feed them to the output stage and if it fails
- * indicate they re-queue at the front.
- */
- do_dev_queue_xmit(skb,dev,-i - 1);
- /*
- * If we can take no more then stop here.
- */
- if (dev->tbusy)
- return;
- cli();
- }
- }
- restore_flags(flags);
-}
-
-
-/*
- * Perform a SIOCGIFCONF call. This structure will change
- * size shortly, and there is nothing I can do about it.
- * Thus we will need a 'compatibility mode'.
- */
-
-static int dev_ifconf(char *arg)
-{
- struct ifconf ifc;
- struct ifreq ifr;
- struct device *dev;
- char *pos;
- int len;
- int err;
-
- /*
- * Fetch the caller's info block.
- */
-
- err=verify_area(VERIFY_WRITE, arg, sizeof(struct ifconf));
- if(err)
- return err;
- memcpy_fromfs(&ifc, arg, sizeof(struct ifconf));
- len = ifc.ifc_len;
- pos = ifc.ifc_buf;
-
- /*
- * We now walk the device list filling each active device
- * into the array.
- */
-
- err=verify_area(VERIFY_WRITE,pos,len);
- if(err)
- return err;
-
- /*
- * Loop over the interfaces, and write an info block for each.
- */
-
- for (dev = dev_base; dev != NULL; dev = dev->next)
- {
- if(!(dev->flags & IFF_UP)) /* Downed devices don't count */
- continue;
- /*
- * Have we run out of space here ?
- */
-
- if (len < sizeof(struct ifreq))
- break;
-
- memset(&ifr, 0, sizeof(struct ifreq));
- strcpy(ifr.ifr_name, dev->name);
- (*(struct sockaddr_in *) &ifr.ifr_addr).sin_family =
dev->family;
- (*(struct sockaddr_in *) &ifr.ifr_addr).sin_addr.s_addr =
dev->pa_addr;
-
-
- /*
- * Write this block to the caller's space.
- */
-
- memcpy_tofs(pos, &ifr, sizeof(struct ifreq));
- pos += sizeof(struct ifreq);
- len -= sizeof(struct ifreq);
- }
-
- /*
- * All done. Write the updated control block back to the caller.
- */
-
- ifc.ifc_len = (pos - ifc.ifc_buf);
- ifc.ifc_req = (struct ifreq *) ifc.ifc_buf;
- memcpy_tofs(arg, &ifc, sizeof(struct ifconf));
-
- /*
- * Report how much was filled in
- */
-
- return(pos - arg);
-}
-
-
-/*
- * This is invoked by the /proc filesystem handler to display a device
- * in detail.
- */
-
-#ifdef CONFIG_PROC_FS
-static int sprintf_stats(char *buffer, struct device *dev)
-{
- struct enet_statistics *stats = (dev->get_stats ? dev->get_stats(dev):
NULL);
- int size;
-
- if (stats)
- size = sprintf(buffer, "%6s:%7d %4d %4d %4d %4d %8d %4d %4d %4d
%5d %4d\n",
- dev->name,
- stats->rx_packets, stats->rx_errors,
- stats->rx_dropped + stats->rx_missed_errors,
- stats->rx_fifo_errors,
- stats->rx_length_errors + stats->rx_over_errors
- + stats->rx_crc_errors + stats->rx_frame_errors,
- stats->tx_packets, stats->tx_errors, stats->tx_dropped,
- stats->tx_fifo_errors, stats->collisions,
- stats->tx_carrier_errors + stats->tx_aborted_errors
- + stats->tx_window_errors + stats->tx_heartbeat_errors);
- else
- size = sprintf(buffer, "%6s: No statistics available.\n",
dev->name);
-
- return size;
-}
-
-/*
- * Called from the PROCfs module. This now uses the new arbitrary sized
/proc/net interface
- * to create /proc/net/dev
- */
-
-int dev_get_info(char *buffer, char **start, off_t offset, int length, int
dummy)
-{
- int len=0;
- off_t begin=0;
- off_t pos=0;
- int size;
-
- struct device *dev;
-
-
- size = sprintf(buffer, "Inter-| Receive |
Transmit\n"
- " face |packets errs drop fifo frame|packets errs
drop fifo colls carrier\n");
-
- pos+=size;
- len+=size;
-
-
- for (dev = dev_base; dev != NULL; dev = dev->next)
- {
- size = sprintf_stats(buffer+len, dev);
- len+=size;
- pos=begin+len;
-
- if(pos<offset)
- {
- len=0;
- begin=pos;
- }
- if(pos>offset+length)
- break;
- }
-
- *start=buffer+(offset-begin); /* Start of wanted data */
- len-=(offset-begin); /* Start slop */
- if(len>length)
- len=length; /* Ending slop */
- return len;
-}
-#endif /* CONFIG_PROC_FS */
-
-
-#ifdef CONFIG_NET_RADIO
-#ifdef CONFIG_PROC_FS
-
-/*
- * Print one entry of /proc/net/wireless
- * This is a clone of /proc/net/dev (just above)
- */
-static int
-sprintf_wireless_stats(char * buffer,
- struct device * dev)
-{
- /* Get stats from the driver */
- struct iw_statistics *stats = (dev->get_wireless_stats ?
- dev->get_wireless_stats(dev) :
- (struct iw_statistics *) NULL);
- int size;
-
- if(stats != (struct iw_statistics *) NULL)
- size = sprintf(buffer,
- "%6s: %02x %3d%c %3d%c %3d%c %5d %5d %5d\n",
- dev->name,
- stats->status,
- stats->qual.qual,
- stats->qual.updated & 1 ? '.' : ' ',
- stats->qual.level,
- stats->qual.updated & 2 ? '.' : ' ',
- stats->qual.noise,
- stats->qual.updated & 3 ? '.' : ' ',
- stats->discard.nwid,
- stats->discard.code,
- stats->discard.misc);
- else
- size = 0;
-
- return size;
-}
-
-/*
- * Print info for /proc/net/wireless (print all entries)
- * This is a clone of /proc/net/dev (just above)
- */
-int
-dev_get_wireless_info(char * buffer,
- char ** start,
- off_t offset,
- int length,
- int dummy)
-{
- int len = 0;
- off_t begin = 0;
- off_t pos = 0;
- int size;
-
- struct device * dev;
-
- size = sprintf(buffer,
- "Inter-|sta| Quality | Discarded packets\n"
- " face |tus|link level noise| nwid crypt misc\n");
-
- pos+=size;
- len+=size;
-
-
- for(dev = dev_base; dev != NULL; dev = dev->next)
- {
- size = sprintf_wireless_stats(buffer+len, dev);
- len+=size;
- pos=begin+len;
-
- if(pos < offset)
- {
- len=0;
- begin=pos;
- }
- if(pos > offset + length)
- break;
- }
-
- *start = buffer + (offset - begin); /* Start of wanted data */
- len -= (offset - begin); /* Start slop */
- if(len > length)
- len = length; /* Ending slop */
-
- return len;
-}
-#endif /* CONFIG_PROC_FS */
-#endif /* CONFIG_NET_RADIO */
-
-
-/*
- * This checks bitmasks for the ioctl calls for devices.
- */
-
-static inline int bad_mask(unsigned long mask, unsigned long addr)
-{
- if (addr & (mask = ~mask))
- return 1;
- mask = ntohl(mask);
- if (mask & (mask+1))
- return 1;
- return 0;
-}
-
-/*
- * Perform the SIOCxIFxxx calls.
- *
- * The socket layer has seen an ioctl the address family thinks is
- * for the device. At this point we get invoked to make a decision
- */
-
-static int dev_ifsioc(void *arg, unsigned int getset)
-{
- struct ifreq ifr;
- struct device *dev;
- int ret;
-
- /*
- * Fetch the caller's info block into kernel space
- */
-
- int err=verify_area(VERIFY_WRITE, arg, sizeof(struct ifreq));
- if(err)
- return err;
-
- memcpy_fromfs(&ifr, arg, sizeof(struct ifreq));
-
- /*
- * See which interface the caller is talking about.
- */
-
- /*
- *
- * net_alias_dev_get(): dev_get() with added alias naming magic.
- * only allow alias creation/deletion if (getset==SIOCSIFADDR)
- *
- */
-
-#ifdef CONFIG_KERNELD
- dev_load(ifr.ifr_name);
-#endif
-
-#ifdef CONFIG_NET_ALIAS
- if ((dev = net_alias_dev_get(ifr.ifr_name, getset == SIOCSIFADDR, &err,
NULL, NULL)) == NULL)
- return(err);
-#else
- if ((dev = dev_get(ifr.ifr_name)) == NULL)
- return(-ENODEV);
-#endif
- switch(getset)
- {
- case SIOCGIFFLAGS: /* Get interface flags */
- ifr.ifr_flags = (dev->flags & ~IFF_SOFTHEADERS);
- goto rarok;
-
- case SIOCSIFFLAGS: /* Set interface flags */
- {
- int old_flags = dev->flags;
-
- if(securelevel>0)
- ifr.ifr_flags&=~IFF_PROMISC;
- /*
- * We are not allowed to potentially
close/unload
- * a device until we get this lock.
- */
-
- dev_lock_wait();
-
- /*
- * Set the flags on our device.
- */
-
- dev->flags = (ifr.ifr_flags & (
- IFF_BROADCAST | IFF_DEBUG |
IFF_LOOPBACK |
- IFF_POINTOPOINT | IFF_NOTRAILERS |
IFF_RUNNING |
- IFF_NOARP | IFF_PROMISC | IFF_ALLMULTI
| IFF_SLAVE | IFF_MASTER
- | IFF_MULTICAST)) | (dev->flags &
(IFF_SOFTHEADERS|IFF_UP));
- /*
- * Load in the correct multicast list now
the flags have changed.
- */
-
- dev_mc_upload(dev);
-
- /*
- * Have we downed the interface. We handle
IFF_UP ourselves
- * according to user attempts to set it,
rather than blindly
- * setting it.
- */
-
- if ((old_flags^ifr.ifr_flags)&IFF_UP) /* Bit
is different ? */
- {
- if(old_flags&IFF_UP) /* Gone
down */
- ret=dev_close(dev);
- else /* Come
up */
- {
- ret=dev_open(dev);
- if(ret<0)
- dev->flags&=~IFF_UP;
/* Open failed */
- }
- }
- else
- ret=0;
- /*
- * Load in the correct multicast list now
the flags have changed.
- */
-
- dev_mc_upload(dev);
- }
- break;
-
- case SIOCGIFADDR: /* Get interface address (and family) */
- if(ifr.ifr_addr.sa_family==AF_UNSPEC)
- {
- memcpy(ifr.ifr_hwaddr.sa_data,dev->dev_addr,
MAX_ADDR_LEN);
- ifr.ifr_hwaddr.sa_family=dev->type;
- goto rarok;
- }
- else
- {
- (*(struct sockaddr_in *)
- &ifr.ifr_addr).sin_addr.s_addr =
dev->pa_addr;
- (*(struct sockaddr_in *)
- &ifr.ifr_addr).sin_family =
dev->family;
- (*(struct sockaddr_in *)
- &ifr.ifr_addr).sin_port = 0;
- }
- goto rarok;
-
- case SIOCSIFADDR: /* Set interface address (and family) */
-
- /*
- * BSDism. SIOCSIFADDR family=AF_UNSPEC sets the
- * physical address. We can cope with this now.
- */
-
- if(ifr.ifr_addr.sa_family==AF_UNSPEC)
- {
- if(dev->set_mac_address==NULL)
- return -EOPNOTSUPP;
- if(securelevel>0)
- return -EPERM;
- ret=dev->set_mac_address(dev,&ifr.ifr_addr);
- }
- else
- {
- u32 new_pa_addr = (*(struct sockaddr_in *)
- &ifr.ifr_addr).sin_addr.s_addr;
- u16 new_family = ifr.ifr_addr.sa_family;
-
- if (new_family == dev->family &&
- new_pa_addr == dev->pa_addr) {
- ret =0;
- break;
- }
- if (dev->flags & IFF_UP)
- notifier_call_chain(&netdev_chain,
NETDEV_DOWN, dev);
-
- /*
- * if dev is an alias, must rehash to
update
- * address change
- */
-
-#ifdef CONFIG_NET_ALIAS
- if (net_alias_is(dev))
- net_alias_dev_rehash(dev
,&ifr.ifr_addr);
-#endif
- dev->pa_addr = new_pa_addr;
- dev->family = new_family;
-
-#ifdef CONFIG_INET
- /* This is naughty. When net-032e comes out It
wants moving into the net032
- code not the kernel. Till then it can sit
here (SIGH) */
- if (!dev->pa_mask)
- dev->pa_mask =
ip_get_mask(dev->pa_addr);
-#endif
- if (!dev->pa_brdaddr)
- dev->pa_brdaddr = dev->pa_addr |
~dev->pa_mask;
- if (dev->flags & IFF_UP)
- notifier_call_chain(&netdev_chain,
NETDEV_UP, dev);
- ret = 0;
- }
- break;
-
- case SIOCGIFBRDADDR: /* Get the broadcast address */
- (*(struct sockaddr_in *)
- &ifr.ifr_broadaddr).sin_addr.s_addr =
dev->pa_brdaddr;
- (*(struct sockaddr_in *)
- &ifr.ifr_broadaddr).sin_family = dev->family;
- (*(struct sockaddr_in *)
- &ifr.ifr_broadaddr).sin_port = 0;
- goto rarok;
-
- case SIOCSIFBRDADDR: /* Set the broadcast address */
- dev->pa_brdaddr = (*(struct sockaddr_in *)
- &ifr.ifr_broadaddr).sin_addr.s_addr;
- ret = 0;
- break;
-
- case SIOCGIFDSTADDR: /* Get the destination address (for
point-to-point links) */
- (*(struct sockaddr_in *)
- &ifr.ifr_dstaddr).sin_addr.s_addr =
dev->pa_dstaddr;
- (*(struct sockaddr_in *)
- &ifr.ifr_dstaddr).sin_family = dev->family;
- (*(struct sockaddr_in *)
- &ifr.ifr_dstaddr).sin_port = 0;
- goto rarok;
-
- case SIOCSIFDSTADDR: /* Set the destination address (for
point-to-point links) */
- dev->pa_dstaddr = (*(struct sockaddr_in *)
- &ifr.ifr_dstaddr).sin_addr.s_addr;
- ret = 0;
- break;
-
- case SIOCGIFNETMASK: /* Get the netmask for the interface */
- (*(struct sockaddr_in *)
- &ifr.ifr_netmask).sin_addr.s_addr =
dev->pa_mask;
- (*(struct sockaddr_in *)
- &ifr.ifr_netmask).sin_family = dev->family;
- (*(struct sockaddr_in *)
- &ifr.ifr_netmask).sin_port = 0;
- goto rarok;
-
- case SIOCSIFNETMASK: /* Set the netmask for the interface */
- {
- unsigned long mask = (*(struct sockaddr_in *)
- &ifr.ifr_netmask).sin_addr.s_addr;
- ret = -EINVAL;
- /*
- * The mask we set must be legal.
- */
- if (bad_mask(mask,0))
- break;
- dev->pa_mask = mask;
- ret = 0;
- }
- break;
-
- case SIOCGIFMETRIC: /* Get the metric on the interface
(currently unused) */
-
- ifr.ifr_metric = dev->metric;
- goto rarok;
-
- case SIOCSIFMETRIC: /* Set the metric on the interface
(currently unused) */
- dev->metric = ifr.ifr_metric;
- ret=0;
- break;
-
- case SIOCGIFMTU: /* Get the MTU of a device */
- ifr.ifr_mtu = dev->mtu;
- goto rarok;
-
- case SIOCSIFMTU: /* Set the MTU of a device */
-
- if (dev->change_mtu)
- ret = dev->change_mtu(dev, ifr.ifr_mtu);
- else
- {
- /*
- * MTU must be positive.
- */
-
- if(ifr.ifr_mtu<68)
- return -EINVAL;
-
- dev->mtu = ifr.ifr_mtu;
- ret = 0;
- }
- break;
-
- case SIOCGIFMEM: /* Get the per device memory space. We
can add this but currently
- do not support it */
- ret = -EINVAL;
- break;
-
- case SIOCSIFMEM: /* Set the per device memory buffer
space. Not applicable in our case */
- ret = -EINVAL;
- break;
-
- case SIOCGIFHWADDR:
- memcpy(ifr.ifr_hwaddr.sa_data,dev->dev_addr,
MAX_ADDR_LEN);
- ifr.ifr_hwaddr.sa_family=dev->type;
- goto rarok;
-
- case SIOCSIFHWADDR:
- if(dev->set_mac_address==NULL)
- return -EOPNOTSUPP;
- if(securelevel > 0)
- return -EPERM;
- if(ifr.ifr_hwaddr.sa_family!=dev->type)
- return -EINVAL;
- ret=dev->set_mac_address(dev,&ifr.ifr_hwaddr);
- break;
-
- case SIOCGIFMAP:
- ifr.ifr_map.mem_start=dev->mem_start;
- ifr.ifr_map.mem_end=dev->mem_end;
- ifr.ifr_map.base_addr=dev->base_addr;
- ifr.ifr_map.irq=dev->irq;
- ifr.ifr_map.dma=dev->dma;
- ifr.ifr_map.port=dev->if_port;
- goto rarok;
-
- case SIOCSIFMAP:
- if(dev->set_config==NULL)
- return -EOPNOTSUPP;
- return dev->set_config(dev,&ifr.ifr_map);
-
- case SIOCADDMULTI:
- if(dev->set_multicast_list==NULL)
- return -EINVAL;
- if(ifr.ifr_hwaddr.sa_family!=AF_UNSPEC)
- return -EINVAL;
- dev_mc_add(dev,ifr.ifr_hwaddr.sa_data, dev->addr_len,
1);
- return 0;
-
- case SIOCDELMULTI:
- if(dev->set_multicast_list==NULL)
- return -EINVAL;
- if(ifr.ifr_hwaddr.sa_family!=AF_UNSPEC)
- return -EINVAL;
- dev_mc_delete(dev,ifr.ifr_hwaddr.sa_data,dev->addr_len,
1);
- return 0;
- /*
- * Unknown or private ioctl
- */
-
- default:
- if((getset >= SIOCDEVPRIVATE) &&
- (getset <= (SIOCDEVPRIVATE + 15))) {
- if(dev->do_ioctl==NULL)
- return -EOPNOTSUPP;
- ret=dev->do_ioctl(dev, &ifr, getset);
- memcpy_tofs(arg,&ifr,sizeof(struct ifreq));
- break;
- }
-
-#ifdef CONFIG_NET_RADIO
- if((getset >= SIOCIWFIRST) &&
- (getset <= SIOCIWLAST))
- {
- if(dev->do_ioctl==NULL)
- return -EOPNOTSUPP;
- /* Perform the ioctl */
- ret=dev->do_ioctl(dev, &ifr, getset);
- /* If return args... */
- if(IW_IS_GET(getset))
- memcpy_tofs(arg, &ifr,
- sizeof(struct ifreq));
- break;
- }
-#endif /* CONFIG_NET_RADIO */
-
- ret = -EINVAL;
- }
- return(ret);
-/*
- * The load of calls that return an ifreq and ok (saves memory).
- */
-rarok:
- memcpy_tofs(arg, &ifr, sizeof(struct ifreq));
- return 0;
-}
-
-
-/*
- * This function handles all "interface"-type I/O control requests. The
actual
- * 'doing' part of this is dev_ifsioc above.
- */
-
-int dev_ioctl(unsigned int cmd, void *arg)
-{
- switch(cmd)
- {
- case SIOCGIFCONF:
- (void) dev_ifconf((char *) arg);
- return 0;
-
- /*
- * Ioctl calls that can be done by all.
- */
-
- case SIOCGIFFLAGS:
- case SIOCGIFADDR:
- case SIOCGIFDSTADDR:
- case SIOCGIFBRDADDR:
- case SIOCGIFNETMASK:
- case SIOCGIFMETRIC:
- case SIOCGIFMTU:
- case SIOCGIFMEM:
- case SIOCGIFHWADDR:
- case SIOCGIFSLAVE:
- case SIOCGIFMAP:
- return dev_ifsioc(arg, cmd);
-
- /*
- * Ioctl calls requiring the power of a superuser
- */
-
- case SIOCSIFFLAGS:
- case SIOCSIFADDR:
- case SIOCSIFDSTADDR:
- case SIOCSIFBRDADDR:
- case SIOCSIFNETMASK:
- case SIOCSIFMETRIC:
- case SIOCSIFMTU:
- case SIOCSIFMEM:
- case SIOCSIFHWADDR:
- case SIOCSIFMAP:
- case SIOCSIFSLAVE:
- case SIOCADDMULTI:
- case SIOCDELMULTI:
- if (!suser())
- return -EPERM;
- return dev_ifsioc(arg, cmd);
-
- case SIOCSIFLINK:
- return -EINVAL;
-
- /*
- * Unknown or private ioctl.
- */
-
- default:
- if((cmd >= SIOCDEVPRIVATE) &&
- (cmd <= (SIOCDEVPRIVATE + 15))) {
- return dev_ifsioc(arg, cmd);
- }
-#ifdef CONFIG_NET_RADIO
- if((cmd >= SIOCIWFIRST) &&
- (cmd <= SIOCIWLAST))
- {
- if((IW_IS_SET(cmd)) && (!suser()))
- return -EPERM;
- return dev_ifsioc(arg, cmd);
- }
-#endif /* CONFIG_NET_RADIO */
- return -EINVAL;
- }
-}
-
-
-/*
- * Initialize the DEV module. At boot time this walks the device list and
- * unhooks any devices that fail to initialise (normally hardware not
- * present) and leaves us with a valid list of present and active devices.
- *
- */
-extern int lance_init(void);
-extern int pi_init(void);
-extern int pt_init(void);
-extern int bpq_init(void);
-extern void sdla_setup(void);
-extern int dlci_setup(void);
-extern int sm_init(void);
-extern int baycom_init(void);
-
-int net_dev_init(void)
-{
- struct device *dev, **dp;
-
- /*
- * Initialise the packet receive queue.
- */
-
- skb_queue_head_init(&backlog);
-
- /*
- * The bridge has to be up before the devices
- */
-
-#ifdef CONFIG_BRIDGE
- br_init();
-#endif
-
- /*
- * This is Very Ugly(tm).
- *
- * Some devices want to be initialized early..
- */
-#if defined(CONFIG_PI)
- pi_init();
-#endif
-#if defined(CONFIG_PT)
- pt_init();
-#endif
-#if defined(CONFIG_BPQETHER)
- bpq_init();
-#endif
-#if defined(CONFIG_DLCI)
- dlci_setup();
-#endif
-#if defined(CONFIG_SDLA)
- sdla_setup();
-#endif
-#if defined(CONFIG_BAYCOM)
- baycom_init();
-#endif
-#if defined(CONFIG_SOUNDMODEM)
- sm_init();
-#endif
- /*
- * SLHC if present needs attaching so other people see it
- * even if not opened.
- */
-#if (defined(CONFIG_SLIP) && defined(CONFIG_SLIP_COMPRESSED)) \
- || defined(CONFIG_PPP) \
- || (defined(CONFIG_ISDN) && defined(CONFIG_ISDN_PPP))
- slhc_install();
-#endif
-
- /*
- * Add the devices.
- * If the call to dev->init fails, the dev is removed
- * from the chain disconnecting the device until the
- * next reboot.
- */
-
- dp = &dev_base;
- while ((dev = *dp) != NULL)
- {
- int i;
- for (i = 0; i < DEV_NUMBUFFS; i++) {
- skb_queue_head_init(dev->buffs + i);
- }
-
- if (dev->init && dev->init(dev))
- {
- /*
- * It failed to come up. Unhook it.
- */
- *dp = dev->next;
- }
- else
- {
- dp = &dev->next;
- }
- }
-
-#ifdef CONFIG_PROC_FS
- proc_net_register(&(struct proc_dir_entry) {
- PROC_NET_DEV, 3, "dev",
- S_IFREG | S_IRUGO, 1, 0, 0,
- 0, &proc_net_inode_operations,
- dev_get_info
- });
-#endif
-
-#ifdef CONFIG_NET_RADIO
-#ifdef CONFIG_PROC_FS
- proc_net_register(&(struct proc_dir_entry) {
- PROC_NET_WIRELESS, 8, "wireless",
- S_IFREG | S_IRUGO, 1, 0, 0,
- 0, &proc_net_inode_operations,
- dev_get_wireless_info
- });
-#endif /* CONFIG_PROC_FS */
-#endif /* CONFIG_NET_RADIO */
-
- /*
- * Initialise net_alias engine
- *
- * - register net_alias device notifier
- * - register proc entries: /proc/net/alias_types
- *
/proc/net/aliases
- */
-
-#ifdef CONFIG_NET_ALIAS
- net_alias_init();
-#endif
-
- init_bh(NET_BH, net_bh);
- return 0;
-}
diff --git a/tests/.gitignore b/tests/.gitignore
deleted file mode 100644
index 6e86af1..0000000
--- a/tests/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/test-mbchk
diff --git a/vm/vm_print.h b/vm/vm_print.h
deleted file mode 100644
index 69a20ba..0000000
--- a/vm/vm_print.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef VM_PRINT_H
-#define VM_PRINT_H
-
-#include <vm/vm_map.h>
-#include <machine/db_machdep.h>
-
-/* Debugging: print a map */
-extern void vm_map_print(vm_map_t);
-
-/* Pretty-print a copy object for ddb. */
-extern void vm_map_copy_print(vm_map_copy_t);
-
-#include <vm/vm_object.h>
-
-extern void vm_object_print(vm_object_t);
-
-#include <vm/vm_page.h>
-
-extern void vm_page_print(vm_page_t);
-
-#endif /* VM_PRINT_H */
-
--
Alioth's /usr/local/bin/git-commit-notice on
/srv/git.debian.org/git/pkg-hurd/gnumach.git
- [gnumach] 30/56: another small change in style for consistency, (continued)
- [gnumach] 30/56: another small change in style for consistency, Samuel Thibault, 2013/09/28
- [gnumach] 27/56: another small change in style for consistency, Samuel Thibault, 2013/09/28
- [gnumach] 25/56: remove register qualifiers, Samuel Thibault, 2013/09/28
- [gnumach] 22/56: remove register qualifiers., Samuel Thibault, 2013/09/28
- [gnumach] 28/56: remove preprocessor comments, Samuel Thibault, 2013/09/28
- [gnumach] 23/56: remove register qualifiers, Samuel Thibault, 2013/09/28
- [gnumach] 26/56: small style changes for consistency, Samuel Thibault, 2013/09/28
- [gnumach] 20/56: track the console buffer usage with a boolean instead of an int, Samuel Thibault, 2013/09/28
- [gnumach] 21/56: track the console init with a boolean instead of an int, Samuel Thibault, 2013/09/28
- [gnumach] 54/56: * patches/80_missing_files.patch: Add missing files from git., Samuel Thibault, 2013/09/28
- [gnumach] 50/56: Imported Upstream version 1.4,
Samuel Thibault <=