1*53ee8cc1Swenshuai.xi /* 2*53ee8cc1Swenshuai.xi * Copyright (C) 2000 Jens Axboe <axboe@suse.de> 3*53ee8cc1Swenshuai.xi * Copyright (C) 2001-2004 Peter Osterlund <petero2@telia.com> 4*53ee8cc1Swenshuai.xi * 5*53ee8cc1Swenshuai.xi * May be copied or modified under the terms of the GNU General Public 6*53ee8cc1Swenshuai.xi * License. See linux/COPYING for more information. 7*53ee8cc1Swenshuai.xi * 8*53ee8cc1Swenshuai.xi * Packet writing layer for ATAPI and SCSI CD-R, CD-RW, DVD-R, and 9*53ee8cc1Swenshuai.xi * DVD-RW devices. 10*53ee8cc1Swenshuai.xi * 11*53ee8cc1Swenshuai.xi */ 12*53ee8cc1Swenshuai.xi #ifndef __PKTCDVD_H 13*53ee8cc1Swenshuai.xi #define __PKTCDVD_H 14*53ee8cc1Swenshuai.xi 15*53ee8cc1Swenshuai.xi #include <linux/types.h> 16*53ee8cc1Swenshuai.xi 17*53ee8cc1Swenshuai.xi /* 18*53ee8cc1Swenshuai.xi * 1 for normal debug messages, 2 is very verbose. 0 to turn it off. 19*53ee8cc1Swenshuai.xi */ 20*53ee8cc1Swenshuai.xi #define PACKET_DEBUG 1 21*53ee8cc1Swenshuai.xi 22*53ee8cc1Swenshuai.xi #define MAX_WRITERS 8 23*53ee8cc1Swenshuai.xi 24*53ee8cc1Swenshuai.xi #define PKT_RB_POOL_SIZE 512 25*53ee8cc1Swenshuai.xi 26*53ee8cc1Swenshuai.xi /* 27*53ee8cc1Swenshuai.xi * How long we should hold a non-full packet before starting data gathering. 28*53ee8cc1Swenshuai.xi */ 29*53ee8cc1Swenshuai.xi #define PACKET_WAIT_TIME (HZ * 5 / 1000) 30*53ee8cc1Swenshuai.xi 31*53ee8cc1Swenshuai.xi /* 32*53ee8cc1Swenshuai.xi * use drive write caching -- we need deferred error handling to be 33*53ee8cc1Swenshuai.xi * able to sucessfully recover with this option (drive will return good 34*53ee8cc1Swenshuai.xi * status as soon as the cdb is validated). 35*53ee8cc1Swenshuai.xi */ 36*53ee8cc1Swenshuai.xi #if defined(CONFIG_CDROM_PKTCDVD_WCACHE) 37*53ee8cc1Swenshuai.xi #define USE_WCACHING 1 38*53ee8cc1Swenshuai.xi #else 39*53ee8cc1Swenshuai.xi #define USE_WCACHING 0 40*53ee8cc1Swenshuai.xi #endif 41*53ee8cc1Swenshuai.xi 42*53ee8cc1Swenshuai.xi /* 43*53ee8cc1Swenshuai.xi * No user-servicable parts beyond this point -> 44*53ee8cc1Swenshuai.xi */ 45*53ee8cc1Swenshuai.xi 46*53ee8cc1Swenshuai.xi /* 47*53ee8cc1Swenshuai.xi * device types 48*53ee8cc1Swenshuai.xi */ 49*53ee8cc1Swenshuai.xi #define PACKET_CDR 1 50*53ee8cc1Swenshuai.xi #define PACKET_CDRW 2 51*53ee8cc1Swenshuai.xi #define PACKET_DVDR 3 52*53ee8cc1Swenshuai.xi #define PACKET_DVDRW 4 53*53ee8cc1Swenshuai.xi 54*53ee8cc1Swenshuai.xi /* 55*53ee8cc1Swenshuai.xi * flags 56*53ee8cc1Swenshuai.xi */ 57*53ee8cc1Swenshuai.xi #define PACKET_WRITABLE 1 /* pd is writable */ 58*53ee8cc1Swenshuai.xi #define PACKET_NWA_VALID 2 /* next writable address valid */ 59*53ee8cc1Swenshuai.xi #define PACKET_LRA_VALID 3 /* last recorded address valid */ 60*53ee8cc1Swenshuai.xi #define PACKET_MERGE_SEGS 4 /* perform segment merging to keep */ 61*53ee8cc1Swenshuai.xi /* underlying cdrom device happy */ 62*53ee8cc1Swenshuai.xi 63*53ee8cc1Swenshuai.xi /* 64*53ee8cc1Swenshuai.xi * Disc status -- from READ_DISC_INFO 65*53ee8cc1Swenshuai.xi */ 66*53ee8cc1Swenshuai.xi #define PACKET_DISC_EMPTY 0 67*53ee8cc1Swenshuai.xi #define PACKET_DISC_INCOMPLETE 1 68*53ee8cc1Swenshuai.xi #define PACKET_DISC_COMPLETE 2 69*53ee8cc1Swenshuai.xi #define PACKET_DISC_OTHER 3 70*53ee8cc1Swenshuai.xi 71*53ee8cc1Swenshuai.xi /* 72*53ee8cc1Swenshuai.xi * write type, and corresponding data block type 73*53ee8cc1Swenshuai.xi */ 74*53ee8cc1Swenshuai.xi #define PACKET_MODE1 1 75*53ee8cc1Swenshuai.xi #define PACKET_MODE2 2 76*53ee8cc1Swenshuai.xi #define PACKET_BLOCK_MODE1 8 77*53ee8cc1Swenshuai.xi #define PACKET_BLOCK_MODE2 10 78*53ee8cc1Swenshuai.xi 79*53ee8cc1Swenshuai.xi /* 80*53ee8cc1Swenshuai.xi * Last session/border status 81*53ee8cc1Swenshuai.xi */ 82*53ee8cc1Swenshuai.xi #define PACKET_SESSION_EMPTY 0 83*53ee8cc1Swenshuai.xi #define PACKET_SESSION_INCOMPLETE 1 84*53ee8cc1Swenshuai.xi #define PACKET_SESSION_RESERVED 2 85*53ee8cc1Swenshuai.xi #define PACKET_SESSION_COMPLETE 3 86*53ee8cc1Swenshuai.xi 87*53ee8cc1Swenshuai.xi #define PACKET_MCN "4a656e734178626f65323030300000" 88*53ee8cc1Swenshuai.xi 89*53ee8cc1Swenshuai.xi #undef PACKET_USE_LS 90*53ee8cc1Swenshuai.xi 91*53ee8cc1Swenshuai.xi #define PKT_CTRL_CMD_SETUP 0 92*53ee8cc1Swenshuai.xi #define PKT_CTRL_CMD_TEARDOWN 1 93*53ee8cc1Swenshuai.xi #define PKT_CTRL_CMD_STATUS 2 94*53ee8cc1Swenshuai.xi 95*53ee8cc1Swenshuai.xi struct pkt_ctrl_command { 96*53ee8cc1Swenshuai.xi __u32 command; /* in: Setup, teardown, status */ 97*53ee8cc1Swenshuai.xi __u32 dev_index; /* in/out: Device index */ 98*53ee8cc1Swenshuai.xi __u32 dev; /* in/out: Device nr for cdrw device */ 99*53ee8cc1Swenshuai.xi __u32 pkt_dev; /* in/out: Device nr for packet device */ 100*53ee8cc1Swenshuai.xi __u32 num_devices; /* out: Largest device index + 1 */ 101*53ee8cc1Swenshuai.xi __u32 padding; /* Not used */ 102*53ee8cc1Swenshuai.xi }; 103*53ee8cc1Swenshuai.xi 104*53ee8cc1Swenshuai.xi /* 105*53ee8cc1Swenshuai.xi * packet ioctls 106*53ee8cc1Swenshuai.xi */ 107*53ee8cc1Swenshuai.xi #define PACKET_IOCTL_MAGIC ('X') 108*53ee8cc1Swenshuai.xi #define PACKET_CTRL_CMD _IOWR(PACKET_IOCTL_MAGIC, 1, struct pkt_ctrl_command) 109*53ee8cc1Swenshuai.xi 110*53ee8cc1Swenshuai.xi 111*53ee8cc1Swenshuai.xi #endif /* __PKTCDVD_H */ 112