Dr Andrew Scott G7VAV

My photo
 
June 2025
Mo Tu We Th Fr Sa Su
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6


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


for client (none)
© Andrew Scott 2006 - 2025,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/