indicating an unhandled "command". ERESTART is -1, which can lead to
confusion. ERESTART has been moved to -3 and EPASSTHROUGH has been
placed at -4. No ioctl code should now return -1 anywhere. The
ioctl() system call is now properly restartable.
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
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.
directly, call the function pointer (*if_input)(ifp, m). The input routine
expects the packet header to be at the head of the packet, and will adjust
as necessary. Privatize the layer 2 input and output routines, allowing
*_ifattach() to set them up as appropriate.
struct scsipi_adapter; they were not used.
Add a scsipi_ioctl entry point to struct scsipi_adapter. This will be
used to issue ioctl commands to the host adapters.
Inspired by PR #6090, from Matt Jacob.
(currently only CD-ROM drives on i386). The sys/dev/scsipi system provides 2
busses to which devices can attach (scsibus and atapibus). This needed to
change some include files and structure names in the low level scsi drivers.
when running at high speeds. This works by using hardware RTS again and
using the receive fifo threshold as well as the transmit fifo provided
by the sc26c92.
lpt{open,close,write,ioctl} prototypes.
* Remove the cdev_decl(lpt). We get it from machine/conf.h.
* Add and use LPTSOFTC.
* Use level triggered interrupts (seems to work with less spurious interrupts).
* Do not use NLPT. Use lpt_cd.cd_ndevs to get the number of lpt devices.
* ether_ifattach now needs the ethernet address of the device. Supply a
dummy address.
* Use machine/conf.h not sys/conf.h to get the prototypes for the
scn cdev functions.
* Include <sys/kgdb.h> to get prototypes for kgdb_connect and kgdb_attach.
* Add missing prototypes for some functions.
* Make ddb work before the console was opend. Thank's to Ian Dall
for this change. His comment:
Also, ddb doesn't work if a break is set before the console
is opened. That is because DTR and RTS are not asserted. It
would probably work if the console is wired to ingnore DTR
or RTS. The change below is probably not very correct.
Proabably the state of DTR and RTS should be saved and DTR
and RTS asserted on the start of a polled serial input and
the saved values restored on exiting polled input
* Remove unused function scn_ei.
* Add prototype for ncr_ready.
* Add ncr_wait_not_req function from Ian Dall:
The ncr_wait_not_req business is to avoid a potential race.
When the pseudo DMA finishes, the target may not have
lowered REQ yet. If we just charge ahead, we eventually test
for phase when REQ is high. However, if REQ has not yet gone
low for the last byte transferred, this will be the wrong
phase. This is taken from the dp8490 application notes. The
last ACK is not deasserted until the dma is completed.
Deasserting the last ACK should be delayed until the last
REQ is deasserted. I am not sure if there are ever devices
this slow, but I believe the code is "more correct".
Some of the stuff (e.g., rarpd, bootpd, dhcpd etc., libsa) still will
only support Ethernet. Tcpdump itself should be ok, but libpcap needs
lot of work.
For the detailed change history, look at the commit log entries for
the is-newarp branch.
* Uses Counter/Timer dynamicly for rate generation; You can
have both 19200 and 38400 on one duart, and 57600 on another!
* Improved scninfo program to dump driver internal information.
implemented counters for parity err, framing err, break
* Delays changes until transmitter idle to avoid "glitches"
* Cleaned up scn_softc member names
* Untested support for sc26c92 (I don't yet have any to test with);
+ Will use alternate rate tables (include 115.2kbps and 230.4kbps)
+ Will raise FIFO rx interrupt threshold and watchdog timer
at higher rates.
+ Unknown (to me) how fast pc532 MC145406 driver chips can go
NOTE: It seems like it may be a BAD idea to use a sc26c92 as
a console port for now; the PROM doesn't know to reset the
chip back to scn2692 mode!!