All rights reserved. The Berkeley software License Agreement
specifies the terms and conditions for redistribution.
@(#)ik.4 6.2 (Berkeley) 06/30/87
All operations between the host and the PS300 utilize DMA. The driver currently supports only ``physical i/o'' operations when reading and writing; this makes the device useless with standard Evans and Sutherland software.
The interface provided by the interface is as UNIX-like as possible. When a device is opened a PS300 attach request is automatically performed. When a device is closed a detach is performed. Reads and writes result in physical i/o requests, but hide all the details of the physical i/o protocol. This is programming style is completely different from the VMS-oriented qio-style interface supplied by Evans and Sutherland.
Reads and writes to the device result in a physical i/o request to the PS300. If a readv (2) or writev (2) call is used, each i/o request results in a single physical i/o request (i.e. the scatter-gather facilities are not supported). In normal operation, the address used in a physical i/o request is the current file offset as specified explicitly with lseek (2) or implictly as a result of reading or writing the device. To specify an address to be used with each physical i/o request, the ik driver interprets the iov entries in a non-standard way. If iov_len is zero, then iov_base is interpreted as an address to be used in the physical i/o request. If the address has the PSIO_SYNC flag or-d into it, the physical i/o request is made as a ``write with sync''. All addresses and data presented to the driver should be in the byte order of the host; any byte swapping required to converse with the PS300 is performed in the driver/controller.
In addition to reading and writing, the following ioctl requests are available:
PSIOLOOKUP
Perform a ``name lookup'' request. The pslookup structure passed indicates the symbol name to be looked up and contains the address returned by the PS300. A zero address return indicates the symbol was undefined.
PSIOGETERROR
In the event of an error, this request may be made to return a more detailed and, sometimes PS300-specific, error code.
/dev/ik[0-7]d diagnostic interfaces to devices
ik%d: spurious interrupt, code %x. An unexpected interrupt was received from the PS300; the attention code from the PS300 is printed.
ik%d: timeout. A command failed to elicit a response within a reasonable time; the PS300 probably crashed.