This is a completely rewritten scsipi_xfer execution engine, and the
associated changes to HBA drivers. Overview of changes & features:
- All xfers are queued in the mid-layer, rather than doing so in an
ad-hoc fashion in individual adapter drivers.
- Adapter/channel resource management in the mid-layer, avoids even trying
to start running an xfer if the adapter/channel doesn't have the resources.
- Better communication between the mid-layer and the adapters.
- Asynchronous event notification mechanism from adapter to mid-layer and
peripherals.
- Better peripheral queue management: freeze/thaw, sorted requeueing during
recovery, etc.
- Clean separation of peripherals, adapters, and adapter channels (no more
scsipi_link).
- Kernel thread for each scsipi_channel makes error recovery much easier
(no more dealing with interrupt context when recovering from an error).
- Mid-layer support for tagged queueing: commands can have the tag type
set explicitly, tag IDs are allocated in the mid-layer (thus eliminating
the need to use buggy tag ID allocation schemes in many adapter drivers).
- support for QUEUE FULL and CHECK CONDITION status in mid-layer; the command
will be requeued, or a REQUEST SENSE will be sent as appropriate.
Just before the merge syssrc has been tagged with thorpej_scsipi_beforemerge
"off_t" and the return value is a "paddr_t" to allow mappings
at offsets past 2^31 bytes. Somewhat inspired by FreeBSD, which
only changed the offset to a "vm_offset_t".
Includes updates for the i386, pc532 and sh3 mmmmap from Jason Thorpe.
change these from bp->b_un.b_addr to bp->b_data, as well. This also
allows us more flexibility to experiment with other data buffer types
hung off of struct buf.
incorrectly added as a union member which overlaid the keyboard
state structure. Fixed by moving the callout structure into to
keyboard state structure.
rcons_ttyinit() was never added to the pmax rasterconsole stuff. Output
to the display using /dev/console has not been working since then. Adding
the call to rcons_ttyinit() makes this work again.
* Remove the casts to vaddr_t from the round_page() and trunc_page() macros to
make them type-generic, which is necessary i.e. to operate on file offsets
without truncating them.
* In due course, cast pointer arguments to these macros to an appropriate
integral type (paddr_t, vaddr_t).
Originally done by Chuck Silvers, updated by myself.
timeout()/untimeout() API:
- Clients supply callout handle storage, thus eliminating problems of
resource allocation.
- Insertion and removal of callouts is constant time, important as
this facility is used quite a lot in the kernel.
The old timeout()/untimeout() API has been removed from the kernel.
configured, but after all adapters have been configured. When multiple
adapters are present, only the last configured adapter could be matched
to the boot device slot. The adapter attach routines now check if that
adapter slot matches the boot device slot and saves the softc pointer
for that controller. Then when the disks are configured, dk_establish()
matches the appropriate controller. Also change the rz boot device test
to include a check for the adapter so that it works when booting from a
disk on adapters other than the first one.
disks are now usable with the MI SCSI sd devices.
The install mini-root adjustment and the default partitioning still needs
to be moved into readdisklabel().
consinit().
- Fix fbconnect() and relatives; 'struct fbinfo' is initialized only once,
making sure no extraneous console resolution message is emitted.
- Make local-only function and variables static.
- Move function prototypes and extern variable declarations to
header files.
- Delete unused variables.
There's still a handful of extern declaraions that should be fixed up.