xref: /aosp_15_r20/external/kernel-headers/original/uapi/linux/pg.h (revision f80ad8b4341604f5951dab671d41019a6d7087ce)
1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-1.0+ WITH Linux-syscall-note */
2*f80ad8b4SAndroid Build Coastguard Worker /* 	pg.h (c) 1998  Grant R. Guenther <[email protected]>
3*f80ad8b4SAndroid Build Coastguard Worker  		       Under the terms of the GNU General Public License
4*f80ad8b4SAndroid Build Coastguard Worker 
5*f80ad8b4SAndroid Build Coastguard Worker 
6*f80ad8b4SAndroid Build Coastguard Worker 	pg.h defines the user interface to the generic ATAPI packet
7*f80ad8b4SAndroid Build Coastguard Worker         command driver for parallel port ATAPI devices (pg). The
8*f80ad8b4SAndroid Build Coastguard Worker 	driver is loosely modelled after the generic SCSI driver, sg,
9*f80ad8b4SAndroid Build Coastguard Worker 	although the actual interface is different.
10*f80ad8b4SAndroid Build Coastguard Worker 
11*f80ad8b4SAndroid Build Coastguard Worker 	The pg driver provides a simple character device interface for
12*f80ad8b4SAndroid Build Coastguard Worker         sending ATAPI commands to a device.  With the exception of the
13*f80ad8b4SAndroid Build Coastguard Worker 	ATAPI reset operation, all operations are performed by a pair
14*f80ad8b4SAndroid Build Coastguard Worker         of read and write operations to the appropriate /dev/pgN device.
15*f80ad8b4SAndroid Build Coastguard Worker 	A write operation delivers a command and any outbound data in
16*f80ad8b4SAndroid Build Coastguard Worker         a single buffer.  Normally, the write will succeed unless the
17*f80ad8b4SAndroid Build Coastguard Worker         device is offline or malfunctioning, or there is already another
18*f80ad8b4SAndroid Build Coastguard Worker 	command pending.  If the write succeeds, it should be followed
19*f80ad8b4SAndroid Build Coastguard Worker         immediately by a read operation, to obtain any returned data and
20*f80ad8b4SAndroid Build Coastguard Worker         status information.  A read will fail if there is no operation
21*f80ad8b4SAndroid Build Coastguard Worker         in progress.
22*f80ad8b4SAndroid Build Coastguard Worker 
23*f80ad8b4SAndroid Build Coastguard Worker 	As a special case, the device can be reset with a write operation,
24*f80ad8b4SAndroid Build Coastguard Worker         and in this case, no following read is expected, or permitted.
25*f80ad8b4SAndroid Build Coastguard Worker 
26*f80ad8b4SAndroid Build Coastguard Worker 	There are no ioctl() operations.  Any single operation
27*f80ad8b4SAndroid Build Coastguard Worker 	may transfer at most PG_MAX_DATA bytes.  Note that the driver must
28*f80ad8b4SAndroid Build Coastguard Worker         copy the data through an internal buffer.  In keeping with all
29*f80ad8b4SAndroid Build Coastguard Worker 	current ATAPI devices, command packets are assumed to be exactly
30*f80ad8b4SAndroid Build Coastguard Worker 	12 bytes in length.
31*f80ad8b4SAndroid Build Coastguard Worker 
32*f80ad8b4SAndroid Build Coastguard Worker 	To permit future changes to this interface, the headers in the
33*f80ad8b4SAndroid Build Coastguard Worker 	read and write buffers contain a single character "magic" flag.
34*f80ad8b4SAndroid Build Coastguard Worker         Currently this flag must be the character "P".
35*f80ad8b4SAndroid Build Coastguard Worker 
36*f80ad8b4SAndroid Build Coastguard Worker */
37*f80ad8b4SAndroid Build Coastguard Worker 
38*f80ad8b4SAndroid Build Coastguard Worker #ifndef _UAPI_LINUX_PG_H
39*f80ad8b4SAndroid Build Coastguard Worker #define _UAPI_LINUX_PG_H
40*f80ad8b4SAndroid Build Coastguard Worker 
41*f80ad8b4SAndroid Build Coastguard Worker #define PG_MAGIC	'P'
42*f80ad8b4SAndroid Build Coastguard Worker #define PG_RESET	'Z'
43*f80ad8b4SAndroid Build Coastguard Worker #define PG_COMMAND	'C'
44*f80ad8b4SAndroid Build Coastguard Worker 
45*f80ad8b4SAndroid Build Coastguard Worker #define PG_MAX_DATA	32768
46*f80ad8b4SAndroid Build Coastguard Worker 
47*f80ad8b4SAndroid Build Coastguard Worker struct pg_write_hdr {
48*f80ad8b4SAndroid Build Coastguard Worker 
49*f80ad8b4SAndroid Build Coastguard Worker 	char	magic;		/* == PG_MAGIC */
50*f80ad8b4SAndroid Build Coastguard Worker 	char	func;		/* PG_RESET or PG_COMMAND */
51*f80ad8b4SAndroid Build Coastguard Worker 	int     dlen;		/* number of bytes expected to transfer */
52*f80ad8b4SAndroid Build Coastguard Worker 	int     timeout;	/* number of seconds before timeout */
53*f80ad8b4SAndroid Build Coastguard Worker 	char	packet[12];	/* packet command */
54*f80ad8b4SAndroid Build Coastguard Worker 
55*f80ad8b4SAndroid Build Coastguard Worker };
56*f80ad8b4SAndroid Build Coastguard Worker 
57*f80ad8b4SAndroid Build Coastguard Worker struct pg_read_hdr {
58*f80ad8b4SAndroid Build Coastguard Worker 
59*f80ad8b4SAndroid Build Coastguard Worker 	char	magic;		/* == PG_MAGIC */
60*f80ad8b4SAndroid Build Coastguard Worker 	char	scsi;		/* "scsi" status == sense key */
61*f80ad8b4SAndroid Build Coastguard Worker 	int	dlen;		/* size of device transfer request */
62*f80ad8b4SAndroid Build Coastguard Worker 	int     duration;	/* time in seconds command took */
63*f80ad8b4SAndroid Build Coastguard Worker 	char    pad[12];	/* not used */
64*f80ad8b4SAndroid Build Coastguard Worker 
65*f80ad8b4SAndroid Build Coastguard Worker };
66*f80ad8b4SAndroid Build Coastguard Worker 
67*f80ad8b4SAndroid Build Coastguard Worker #endif /* _UAPI_LINUX_PG_H */
68