64 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* 	pg.h (c) 1998  Grant R. Guenther <grant@torque.net>
 | 
						|
 		       Under the terms of the GNU General Public License
 | 
						|
 | 
						|
 | 
						|
	pg.h defines the user interface to the generic ATAPI packet
 | 
						|
        command driver for parallel port ATAPI devices (pg). The
 | 
						|
	driver is loosely modelled after the generic SCSI driver, sg,
 | 
						|
	although the actual interface is different.
 | 
						|
 | 
						|
	The pg driver provides a simple character device interface for
 | 
						|
        sending ATAPI commands to a device.  With the exception of the
 | 
						|
	ATAPI reset operation, all operations are performed by a pair
 | 
						|
        of read and write operations to the appropriate /dev/pgN device.
 | 
						|
	A write operation delivers a command and any outbound data in
 | 
						|
        a single buffer.  Normally, the write will succeed unless the
 | 
						|
        device is offline or malfunctioning, or there is already another
 | 
						|
	command pending.  If the write succeeds, it should be followed
 | 
						|
        immediately by a read operation, to obtain any returned data and
 | 
						|
        status information.  A read will fail if there is no operation
 | 
						|
        in progress.
 | 
						|
 | 
						|
	As a special case, the device can be reset with a write operation,
 | 
						|
        and in this case, no following read is expected, or permitted.
 | 
						|
 | 
						|
	There are no ioctl() operations.  Any single operation
 | 
						|
	may transfer at most PG_MAX_DATA bytes.  Note that the driver must
 | 
						|
        copy the data through an internal buffer.  In keeping with all
 | 
						|
	current ATAPI devices, command packets are assumed to be exactly
 | 
						|
	12 bytes in length.
 | 
						|
 | 
						|
	To permit future changes to this interface, the headers in the
 | 
						|
	read and write buffers contain a single character "magic" flag.
 | 
						|
        Currently this flag must be the character "P".
 | 
						|
 | 
						|
*/
 | 
						|
 | 
						|
#define PG_MAGIC	'P'
 | 
						|
#define PG_RESET	'Z'
 | 
						|
#define PG_COMMAND	'C'
 | 
						|
 | 
						|
#define PG_MAX_DATA	32768
 | 
						|
 | 
						|
struct pg_write_hdr {
 | 
						|
 | 
						|
	char	magic;		/* == PG_MAGIC */
 | 
						|
	char	func;		/* PG_RESET or PG_COMMAND */
 | 
						|
	int     dlen;		/* number of bytes expected to transfer */
 | 
						|
	int     timeout;	/* number of seconds before timeout */
 | 
						|
	char	packet[12];	/* packet command */
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
struct pg_read_hdr {
 | 
						|
 | 
						|
	char	magic;		/* == PG_MAGIC */
 | 
						|
	char	scsi;		/* "scsi" status == sense key */
 | 
						|
	int	dlen;		/* size of device transfer request */
 | 
						|
	int     duration;	/* time in seconds command took */
 | 
						|
	char    pad[12];	/* not used */
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
/* end of pg.h */
 |