1 #ifndef SONYCD535_H
2 #define SONYCD535_H
3 
4 /*
5  * define all the commands recognized by the CDU-531/5
6  */
7 #define SONY535_REQUEST_DRIVE_STATUS_1		(0x80)
8 #define SONY535_REQUEST_SENSE			(0x82)
9 #define SONY535_REQUEST_DRIVE_STATUS_2		(0x84)
10 #define SONY535_REQUEST_ERROR_STATUS		(0x86)
11 #define SONY535_REQUEST_AUDIO_STATUS		(0x88)
12 #define SONY535_INQUIRY				(0x8a)
13 
14 #define SONY535_SET_INACTIVITY_TIME		(0x90)
15 
16 #define SONY535_SEEK_AND_READ_N_BLOCKS_1	(0xa0)
17 #define SONY535_SEEK_AND_READ_N_BLOCKS_2	(0xa4)
18 #define SONY535_PLAY_AUDIO			(0xa6)
19 
20 #define SONY535_REQUEST_DISC_CAPACITY		(0xb0)
21 #define SONY535_REQUEST_TOC_DATA		(0xb2)
22 #define SONY535_REQUEST_SUB_Q_DATA		(0xb4)
23 #define SONY535_REQUEST_ISRC			(0xb6)
24 #define SONY535_REQUEST_UPC_EAN			(0xb8)
25 
26 #define SONY535_SET_DRIVE_MODE			(0xc0)
27 #define SONY535_REQUEST_DRIVE_MODE		(0xc2)
28 #define SONY535_SET_RETRY_COUNT			(0xc4)
29 
30 #define SONY535_DIAGNOSTIC_1			(0xc6)
31 #define SONY535_DIAGNOSTIC_4			(0xcc)
32 #define SONY535_DIAGNOSTIC_5			(0xce)
33 
34 #define SONY535_EJECT_CADDY			(0xd0)
35 #define SONY535_DISABLE_EJECT_BUTTON		(0xd2)
36 #define SONY535_ENABLE_EJECT_BUTTON		(0xd4)
37 
38 #define SONY535_HOLD				(0xe0)
39 #define SONY535_AUDIO_PAUSE_ON_OFF		(0xe2)
40 #define SONY535_SET_VOLUME			(0xe8)
41 
42 #define SONY535_STOP				(0xf0)
43 #define SONY535_SPIN_UP				(0xf2)
44 #define SONY535_SPIN_DOWN			(0xf4)
45 
46 #define SONY535_CLEAR_PARAMETERS		(0xf6)
47 #define SONY535_CLEAR_ENDING_ADDRESS		(0xf8)
48 
49 /*
50  * define some masks
51  */
52 #define SONY535_DATA_NOT_READY_BIT		(0x1)
53 #define SONY535_RESULT_NOT_READY_BIT		(0x2)
54 
55 /*
56  *  drive status 1
57  */
58 #define SONY535_STATUS1_COMMAND_ERROR		(0x1)
59 #define SONY535_STATUS1_DATA_ERROR		(0x2)
60 #define SONY535_STATUS1_SEEK_ERROR		(0x4)
61 #define SONY535_STATUS1_DISC_TYPE_ERROR		(0x8)
62 #define SONY535_STATUS1_NOT_SPINNING		(0x10)
63 #define SONY535_STATUS1_EJECT_BUTTON_PRESSED	(0x20)
64 #define SONY535_STATUS1_CADDY_NOT_INSERTED	(0x40)
65 #define SONY535_STATUS1_BYTE_TWO_FOLLOWS	(0x80)
66 
67 /*
68  * drive status 2
69  */
70 #define SONY535_CDD_LOADING_ERROR		(0x7)
71 #define SONY535_CDD_NO_DISC			(0x8)
72 #define SONY535_CDD_UNLOADING_ERROR		(0x9)
73 #define SONY535_CDD_CADDY_NOT_INSERTED		(0xd)
74 #define SONY535_ATN_RESET_OCCURRED		(0x2)
75 #define SONY535_ATN_DISC_CHANGED		(0x4)
76 #define SONY535_ATN_RESET_AND_DISC_CHANGED	(0x6)
77 #define SONY535_ATN_EJECT_IN_PROGRESS		(0xe)
78 #define SONY535_ATN_BUSY			(0xf)
79 
80 /*
81  * define some parameters
82  */
83 #define SONY535_AUDIO_DRIVE_MODE		(0)
84 #define SONY535_CDROM_DRIVE_MODE		(0xe0)
85 
86 #define SONY535_PLAY_OP_PLAYBACK		(0)
87 #define SONY535_PLAY_OP_ENTER_HOLD		(1)
88 #define SONY535_PLAY_OP_SET_AUDIO_ENDING_ADDR	(2)
89 #define SONY535_PLAY_OP_SCAN_FORWARD		(3)
90 #define SONY535_PLAY_OP_SCAN_BACKWARD		(4)
91 
92 /*
93  *  convert from msf format to block number
94  */
95 #define SONY_BLOCK_NUMBER(m,s,f) (((m)*60L+(s))*75L+(f))
96 #define SONY_BLOCK_NUMBER_MSF(x) (((x)[0]*60L+(x)[1])*75L+(x)[2])
97 
98 /*
99  *  error return values from the doSonyCmd() routines
100  */
101 #define TIME_OUT			(-1)
102 #define NO_CDROM			(-2)
103 #define BAD_STATUS			(-3)
104 #define CD_BUSY				(-4)
105 #define NOT_DATA_CD			(-5)
106 #define NO_ROOM				(-6)
107 
108 #define LOG_START_OFFSET        150     /* Offset of first logical sector */
109 
110 #define SONY_JIFFIES_TIMEOUT	(5*HZ)	/* Maximum time
111 					   the drive will wait/try for an
112 					   operation */
113 #define SONY_READY_RETRIES      (50000)  /* How many times to retry a
114                                                   spin waiting for a register
115                                                   to come ready */
116 #define SONY535_FAST_POLLS	(10000)   /* how many times recheck
117                                                   status waiting for a data
118                                                   to become ready */
119 
120 typedef unsigned char Byte;
121 
122 /*
123  * This is the complete status returned from the drive configuration request
124  * command.
125  */
126 struct s535_sony_drive_config
127 {
128    char vendor_id[8];
129    char product_id[16];
130    char product_rev_level[4];
131 };
132 
133 /* The following is returned from the request sub-q data command */
134 struct s535_sony_subcode
135 {
136    unsigned char address        :4;
137    unsigned char control        :4;
138    unsigned char track_num;
139    unsigned char index_num;
140    unsigned char rel_msf[3];
141    unsigned char abs_msf[3];
142 };
143 
144 struct s535_sony_disc_capacity
145 {
146    Byte mFirstTrack, sFirstTrack, fFirstTrack;
147    Byte mLeadOut, sLeadOut, fLeadOut;
148 };
149 
150 /*
151  * The following is returned from the request TOC (Table Of Contents) command.
152  * (last_track_num-first_track_num+1) values are valid in tracks.
153  */
154 struct s535_sony_toc
155 {
156    unsigned char reserved0      :4;
157    unsigned char control0       :4;
158    unsigned char point0;
159    unsigned char first_track_num;
160    unsigned char reserved0a;
161    unsigned char reserved0b;
162    unsigned char reserved1      :4;
163    unsigned char control1       :4;
164    unsigned char point1;
165    unsigned char last_track_num;
166    unsigned char dummy1;
167    unsigned char dummy2;
168    unsigned char reserved2      :4;
169    unsigned char control2       :4;
170    unsigned char point2;
171    unsigned char lead_out_start_msf[3];
172    struct
173    {
174       unsigned char reserved    :4;
175       unsigned char control     :4;
176       unsigned char track;
177       unsigned char track_start_msf[3];
178    } tracks[100];
179 
180    unsigned int lead_out_start_lba;
181 };
182 
183 #endif /* SONYCD535_H */
184