SYSTEM CALLS - IO

You will notice there is no such thing as a 'read' or 'write' call below. This is because all I/O calls are routed through either oz_sys_io (for synchronous completion), or oz_sys_io_start (for asynchronous completion). Those two routines take a function code and corresponding argument block to describe the I/O request. So far, here is a list of I/O functions I have defined, based on the device class:

These routines are callable from user and kernel mode, at or below softint level. The source for these routines is in oz_sys_io.c

        oz_sys_io_assign assigns an I/O channel to a device.  It 
        is sort of like an unix 'open' call, except it just points to 
        the device.  If it is an file-structured device, you still have 
        to do an open I/O function to access the particular file you 
        want.

        Input:
         - processor mode to assign the channel in, user or kernel
           if a user mode caller specifies kernel, it is changed to user
           but a kernel mode caller can specify whichever it wants
         - name of the device the channel is being assigned to
         - lockmode for the channel, ie, are we going to be reading, 
           writing, and do we want to block other readers, writers
        Output:
         - completion status
         - handle to the assigned I/O channel

        oz_sys_io_abort aborts I/O in progress on a channel

        Input:
         - processor mode of I/O requests to abort.  An usermode caller 
           can only abort I/O's issued from user mode, but a kernel 
           mode caller can abort both user and kernel mode I/O's.
         - I/O channel that requests were made on
        Output:
         - status
        Note:
           This routine returns 'immdidately', you must still wait for 
           the I/O's to complete.  This routine just alerts the driver 
           to tell it the function(s) are no longer required and 
           hopefully the driver is smart enough to abort processing 
           them as quickly as possible.

        oz_sys_io starts an I/O on a channel and waits for its 
                         completion

        Input:
         - processor mode of the I/O request
         - I/O channel that the request is for
         - event flag to user for waiting
         - I/O function code
         - I/O argument block size
         - I/O argument block pointer
        Output:
         - I/O completion status
         - I/O function performed

        oz_sys_io_start starts an I/O on a channel
                               (does not wait for completion)

        Input:
         - processor mode of the I/O request
         - I/O channel that the request is for
         - [optional] where to return completion status
         - [optional] event flag to increment when I/O completes
         - [optional] ast routine entrypoint and parameter to call when 
                      I/O completes
         - I/O function code
         - I/O argument block size
         - I/O argument block pointer
        Output:
         - I/O queuing status
        Note:
           If I/O queuing status returned is other than 
           OZ_STARTED, the request completed synchronously.  
           Thus the completion status will not be set, the event flag 
           will not be incremented and the ast routine will not be 
           called.

           Otherwise, all three will take place (assuming you have asked 
           for them).  If an oz_sys_io_abort call is made, the 
           three completion indications will take place when the I/O 
           driver actually gets around to aborting the request.

        oz_sys_iochan_getunitname gets the name of the device 
                                         that an I/O channel is assigned to

        oz_sys_iochan_getclassname gets the name of the driver 
                                          class of the device that an 
                                          I/O channel is assigned to