	IFND	EXEC_IO_I
EXEC_IO_I	SET	1
**
**	$Filename: exec/io.i $
**	$Release: 1.3 $
**
**	
**
**	(C) Copyright 1985,1986,1987,1988 Commodore-Amiga, Inc.
**	    All Rights Reserved
**

    IFND EXEC_PORTS_I
    INCLUDE "exec/ports.i"
    ENDC	; EXEC_PORTS_I

    IFND EXEC_LIBRARIES_I
    INCLUDE "exec/libraries.i"
    ENDC	; EXEC_LIBRARIES_I


*----------------------------------------------------------------
*
*   IO Request Structures
*
*----------------------------------------------------------------

*------ Required portion of IO request:

 STRUCTURE  IO,MN_SIZE
    APTR    IO_DEVICE			* device node pointer
    APTR    IO_UNIT			* unit (driver private)
    UWORD   IO_COMMAND			* device command
    UBYTE   IO_FLAGS			* special flags
    BYTE    IO_ERROR			* error or warning code
    LABEL   IO_SIZE


*------ Standard IO request extension:

    ULONG   IO_ACTUAL			* actual # of bytes transfered
    ULONG   IO_LENGTH			* requested # of bytes transfered
    APTR    IO_DATA			* pointer to data area
    ULONG   IO_OFFSET			* offset for seeking devices
    LABEL   IOSTD_SIZE


*------ IO_FLAGS bit definitions:

    BITDEF  IO,QUICK,0			* complete IO quickly


*----------------------------------------------------------------
*
*   Standard Device Library Functions
*
*----------------------------------------------------------------

	    LIBINIT

	    LIBDEF  DEV_BEGINIO		* process IO request
	    LIBDEF  DEV_ABORTIO		* abort IO request


*----------------------------------------------------------------
*
*   IO Function Macros
*
*----------------------------------------------------------------

BEGINIO	    MACRO
	    LINKLIB DEV_BEGINIO,IO_DEVICE(A1)
	    ENDM

ABORTIO	    MACRO
	    LINKLIB DEV_ABORTIO,IO_DEVICE(A1)
	    ENDM


*----------------------------------------------------------------
*
*   Standard Device Command Definitions
*
*----------------------------------------------------------------

*------ Command definition macro:
DEVINIT	    MACRO   * [baseOffset]
	    IFC	    '\1',''
CMD_COUNT   SET	    CMD_NONSTD
	    ENDC
	    IFNC    '\1',''
CMD_COUNT   SET	    \1
	    ENDC
	    ENDM

DEVCMD	    MACRO   * cmdname
\1	    EQU	    CMD_COUNT
CMD_COUNT   SET	    CMD_COUNT+1
	    ENDM


*------ Standard device commands:

	    DEVINIT 0

	    DEVCMD  CMD_INVALID		* invalid command
	    DEVCMD  CMD_RESET		* reset as if just inited
	    DEVCMD  CMD_READ		* standard read
	    DEVCMD  CMD_WRITE		* standard write
	    DEVCMD  CMD_UPDATE		* write out all buffers
	    DEVCMD  CMD_CLEAR		* clear all buffers
	    DEVCMD  CMD_STOP		* hold current and queued
	    DEVCMD  CMD_START		* restart after stop
	    DEVCMD  CMD_FLUSH		* abort entire queue


*------ First non-standard device command value:

	    DEVCMD  CMD_NONSTD

	ENDC	; EXEC_IO_I
