Training courses
Kernel and Embedded Linux
Bootlin training courses
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319
/* $NetBSD: scsipi_cd.h,v 1.21 2009/04/01 12:19:04 reinoud Exp $ */ /* * Written by Julian Elischer (julian@tfs.com) * for TRW Financial Systems. * * TRW Financial Systems, in accordance with their agreement with Carnegie * Mellon University, makes this software available to CMU to distribute * or use in any manner that they see fit as long as this message is kept with * the software. For this reason TFS also grants any other persons or * organisations permission to use or modify this software. * * TFS supplies this software to be publicly redistributed * on the understanding that TFS is not responsible for the correct * functioning of this software in any circumstances. * * Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992 */ /* * Define two bits always in the same place in byte 2 (flag byte) */ #define CD_RELADDR 0x01 #define CD_MSF 0x02 /* * SCSI and SCSI-like command format */ #define LOAD_UNLOAD 0xa6 struct scsipi_load_unload { u_int8_t opcode; u_int8_t unused1[3]; u_int8_t options; u_int8_t unused2[3]; u_int8_t slot; u_int8_t unused3[3]; } __packed; #define PAUSE 0x4b /* cdrom pause in 'play audio' mode */ struct scsipi_pause { u_int8_t opcode; u_int8_t byte2; u_int8_t unused[6]; u_int8_t resume; u_int8_t control; } __packed; #define PA_PAUSE 0x00 #define PA_RESUME 0x01 #define PLAY_MSF 0x47 /* cdrom play Min,Sec,Frames mode */ struct scsipi_play_msf { u_int8_t opcode; u_int8_t byte2; u_int8_t unused; u_int8_t start_m; u_int8_t start_s; u_int8_t start_f; u_int8_t end_m; u_int8_t end_s; u_int8_t end_f; u_int8_t control; } __packed; #define PLAY 0x45 /* cdrom play 'play audio' mode */ struct scsipi_play { u_int8_t opcode; u_int8_t byte2; u_int8_t blk_addr[4]; u_int8_t unused; u_int8_t xfer_len[2]; u_int8_t control; } __packed; #define READ_HEADER 0x44 /* cdrom read header */ struct scsipi_read_header { u_int8_t opcode; u_int8_t byte2; u_int8_t blk_addr[4]; u_int8_t unused; u_int8_t data_len[2]; u_int8_t control; } __packed; #define READ_SUBCHANNEL 0x42 /* cdrom read Subchannel */ struct scsipi_read_subchannel { u_int8_t opcode; u_int8_t byte2; u_int8_t byte3; #define SRS_SUBQ 0x40 u_int8_t subchan_format; u_int8_t unused[2]; u_int8_t track; u_int8_t data_len[2]; u_int8_t control; } __packed; #define READ_TOC 0x43 /* cdrom read TOC */ struct scsipi_read_toc { u_int8_t opcode; u_int8_t addr_mode; u_int8_t resp_format; u_int8_t unused[3]; u_int8_t from_track; /* session nr in format 2 */ u_int8_t data_len[2]; u_int8_t control; } __packed; struct scsipi_toc_header { uint8_t length[2]; uint8_t first; /* track or session */ uint8_t last; } __packed; /* read TOC form 0 result entries */ struct scsipi_toc_formatted { uint8_t unused1; uint8_t adrcontrol; uint8_t tracknr; uint8_t unused2; uint8_t msf_lba[4]; /* union msf_lba from cdio.h */ } __packed; /* read TOC form 1 result entries */ struct scsipi_toc_msinfo { uint8_t unused1; uint8_t adrcontol; uint8_t tracknr; /* first track last compl. session */ uint8_t unused2; uint8_t msf_lba[4]; /* union msf_lba from cdio.h */ } __packed; /* read TOC form 2 result entries */ struct scsipi_toc_rawtoc { uint8_t sessionnr; uint8_t adrcontrol; uint8_t tno; uint8_t point; uint8_t min; uint8_t sec; uint8_t frame; uint8_t zero; /* zero/unused */ uint8_t pmin; uint8_t psec; uint8_t pframe; } __packed; /* read TOC form 3, 4 and 5 obmitted yet */ #define GET_CONFIGURATION 0x46 /* Get configuration */ #define GET_CONF_NO_FEATURES_LEN 8 struct scsipi_get_configuration { uint8_t opcode; uint8_t request_type; uint8_t start_at_feature[2]; uint8_t unused[3]; uint8_t data_len[2]; uint8_t control; } __packed; struct scsipi_get_conf_data { uint8_t data_len[4]; uint8_t unused[2]; uint8_t mmc_profile[2]; /* current mmc profile for disk */ uint8_t feature_desc[1]; /* feature descriptors follow */ } __packed; struct scsipi_get_conf_feature { /* feature descriptor */ uint8_t featurecode[2]; uint8_t flags; uint8_t additional_length; /* length of feature dependent */ uint8_t feature_dependent[256]; } __packed; #define FEATUREFLAG_CURRENT 1 #define FEATUREFLAG_PERSISTENT 2 #define READ_DISCINFO 0x51 struct scsipi_read_discinfo { uint8_t opcode; uint8_t unused[6]; uint8_t data_len[2]; uint8_t control; } __packed; #define READ_DISCINFO_SMALLSIZE 12 #define READ_DISCINFO_BIGSIZE 34 /* + entries */ struct scsipi_read_discinfo_data { uint8_t data_len[2]; uint8_t disc_state; uint8_t first_track; uint8_t num_sessions_lsb; uint8_t first_track_last_session_lsb; uint8_t last_track_last_session_lsb; uint8_t disc_state2; uint8_t disc_type; uint8_t num_sessions_msb; uint8_t first_track_last_session_msb; uint8_t last_track_last_session_msb; uint8_t discid[4]; uint8_t last_session_leadin_hmsf[4]; uint8_t last_possible_start_leadout_hmsf[4]; uint8_t disc_bar_code[8]; uint8_t application_code; uint8_t num_opc_table_entries; uint8_t opc_table_entries[1]; /* opc table entries follow */ } __packed; #define READ_TRACKINFO 0x52 struct scsipi_read_trackinfo { uint8_t opcode; uint8_t addr_type; uint8_t address[4]; uint8_t nothing; uint8_t data_len[2]; uint8_t control; } __packed; #define READ_TRACKINFO_ADDR_LBA 0 #define READ_TRACKINFO_ADDR_TRACK 1 #define READ_TRACKINFO_ADDR_SESS 2 struct scsipi_read_trackinfo_data { uint8_t data_len[2]; uint8_t track_lsb; uint8_t session_lsb; uint8_t unused1; uint8_t track_info_1; uint8_t track_info_2; uint8_t data_valid; uint8_t track_start[4]; uint8_t next_writable[4]; uint8_t free_blocks[4]; uint8_t packet_size[4]; uint8_t track_size[4]; uint8_t last_recorded[4]; uint8_t track_msb; uint8_t session_msb; uint8_t unused2[2]; } __packed; #define READ_TRACKINFO_RETURNSIZE 36 #define CLOSE_TRACKSESSION 0x5B struct scsipi_close_tracksession { uint8_t opcode; uint8_t addr_type; /* bit 1 holds immediate */ uint8_t function; /* bits 2,1,0 */ uint8_t unused1; uint8_t tracksessionnr[2]; uint8_t unused2[3]; uint8_t control; } __packed; #define RESERVE_TRACK 0x53 struct scsipi_reserve_track { uint8_t opcode; uint8_t reserved[4]; uint8_t reservation_size[4]; uint8_t control; } __packed; #define REPAIR_TRACK 0x58 struct scsipi_repair_track { uint8_t opcode; uint8_t reserved1; /* bit 1 holds immediate */ uint8_t reserved2[2]; uint8_t tracknr[2]; /* logical track nr */ uint8_t reserved3[3]; uint8_t control; } __packed; #define READ_CD_CAPACITY 0x25 /* slightly different from disk */ struct scsipi_read_cd_capacity { u_int8_t opcode; u_int8_t byte2; u_int8_t addr[4]; u_int8_t unused[3]; u_int8_t control; } __packed; struct scsipi_read_cd_cap_data { u_int8_t addr[4]; u_int8_t length[4]; } __packed; /* mod pages common to scsi and atapi */ struct cd_audio_page { u_int8_t pg_code; #define AUDIO_PAGE 0x0e u_int8_t pg_length; u_int8_t flags; #define CD_PA_SOTC 0x02 #define CD_PA_IMMED 0x04 u_int8_t unused[2]; u_int8_t format_lba; /* valid only for SCSI CDs */ #define CD_PA_FORMAT_LBA 0x0F #define CD_PA_APR_VALID 0x80 u_int8_t lb_per_sec[2]; struct port_control { u_int8_t channels; #define CHANNEL 0x0F #define CHANNEL_0 1 #define CHANNEL_1 2 #define CHANNEL_2 4 #define CHANNEL_3 8 #define LEFT_CHANNEL CHANNEL_0 #define RIGHT_CHANNEL CHANNEL_1 #define MUTE_CHANNEL 0x0 #define BOTH_CHANNEL LEFT_CHANNEL | RIGHT_CHANNEL u_int8_t volume; } port[4]; #define LEFT_PORT 0 #define RIGHT_PORT 1 };