|
|
1.1 ! root 1: /* ! 2: * Written by Julian Elischer ([email protected]) ! 3: * for TRW Financial Systems. ! 4: * ! 5: * TRW Financial Systems, in accordance with their agreement with Carnegie ! 6: * Mellon University, makes this software available to CMU to distribute ! 7: * or use in any manner that they see fit as long as this message is kept with ! 8: * the software. For this reason TFS also grants any other persons or ! 9: * organisations permission to use or modify this software. ! 10: * ! 11: * TFS supplies this software to be publicly redistributed ! 12: * on the understanding that TFS is not responsible for the correct ! 13: * functioning of this software in any circumstances. ! 14: * ! 15: * ! 16: * PATCHES MAGIC LEVEL PATCH THAT GOT US HERE ! 17: * -------------------- ----- ---------------------- ! 18: * CURRENT PATCH LEVEL: 1 00098 ! 19: * -------------------- ----- ---------------------- ! 20: * ! 21: * 16 Feb 93 Julian Elischer ADDED for SCSI system ! 22: */ ! 23: ! 24: ! 25: ! 26: /* ! 27: * Ported to run under 386BSD by Julian Elischer ([email protected]) Sept 1992 ! 28: */ ! 29: ! 30: /* ! 31: * SCSI command format ! 32: */ ! 33: ! 34: struct scsi_read_capacity_cd ! 35: { ! 36: u_char op_code; ! 37: u_char :5; ! 38: u_char lun:3; ! 39: u_char addr_3; /* Most Significant */ ! 40: u_char addr_2; ! 41: u_char addr_1; ! 42: u_char addr_0; /* Least Significant */ ! 43: u_char unused[3]; ! 44: u_char link:1; ! 45: u_char flag:1; ! 46: u_char :6; ! 47: }; ! 48: ! 49: struct scsi_pause ! 50: { ! 51: u_char op_code; ! 52: u_char :5; ! 53: u_char lun:3; ! 54: u_char unused[6]; ! 55: u_char resume:1; ! 56: u_char :7; ! 57: u_char link:1; ! 58: u_char flag:1; ! 59: u_char :6; ! 60: }; ! 61: #define PA_PAUSE 1 ! 62: #define PA_RESUME 0 ! 63: ! 64: struct scsi_play_msf ! 65: { ! 66: u_char op_code; ! 67: u_char :5; ! 68: u_char lun:3; ! 69: u_char unused; ! 70: u_char start_m; ! 71: u_char start_s; ! 72: u_char start_f; ! 73: u_char end_m; ! 74: u_char end_s; ! 75: u_char end_f; ! 76: u_char link:1; ! 77: u_char flag:1; ! 78: u_char :6; ! 79: }; ! 80: ! 81: struct scsi_play_track ! 82: { ! 83: u_char op_code; ! 84: u_char :5; ! 85: u_char lun:3; ! 86: u_char unused[2]; ! 87: u_char start_track; ! 88: u_char start_index; ! 89: u_char unused1; ! 90: u_char end_track; ! 91: u_char end_index; ! 92: u_char link:1; ! 93: u_char flag:1; ! 94: u_char :6; ! 95: }; ! 96: ! 97: struct scsi_play ! 98: { ! 99: u_char op_code; ! 100: u_char reladdr:1; ! 101: u_char :4; ! 102: u_char lun:3; ! 103: u_char blk_addr[4]; ! 104: u_char unused; ! 105: u_char xfer_len[2]; ! 106: u_char link:1; ! 107: u_char flag:1; ! 108: u_char :6; ! 109: }; ! 110: ! 111: struct scsi_play_big ! 112: { ! 113: u_char op_code; ! 114: u_char reladdr:1; ! 115: u_char :4; ! 116: u_char lun:3; ! 117: u_char blk_addr[4]; ! 118: u_char xfer_len[4]; ! 119: u_char unused; ! 120: u_char link:1; ! 121: u_char flag:1; ! 122: u_char :6; ! 123: }; ! 124: ! 125: struct scsi_play_rel_big ! 126: { ! 127: u_char op_code; ! 128: u_char reladdr:1; ! 129: u_char :4; ! 130: u_char lun:3; ! 131: u_char blk_addr[4]; ! 132: u_char xfer_len[4]; ! 133: u_char track; ! 134: u_char link:1; ! 135: u_char flag:1; ! 136: u_char :6; ! 137: }; ! 138: ! 139: struct scsi_read_header ! 140: { ! 141: u_char op_code; ! 142: u_char :1; ! 143: u_char msf:1; ! 144: u_char :3; ! 145: u_char lun:3; ! 146: u_char blk_addr[4]; ! 147: u_char unused; ! 148: u_char data_len[2]; ! 149: u_char link:1; ! 150: u_char flag:1; ! 151: u_char :6; ! 152: }; ! 153: ! 154: struct scsi_read_subchannel ! 155: { ! 156: u_char op_code; ! 157: u_char :1; ! 158: u_char msf:1; ! 159: u_char :3; ! 160: u_char lun:3; ! 161: u_char :6; ! 162: u_char subQ:1; ! 163: u_char :1; ! 164: u_char subchan_format; ! 165: u_char unused[2]; ! 166: u_char track; ! 167: u_char data_len[2]; ! 168: u_char link:1; ! 169: u_char flag:1; ! 170: u_char :6; ! 171: }; ! 172: ! 173: struct scsi_read_toc ! 174: { ! 175: u_char op_code; ! 176: u_char :1; ! 177: u_char msf:1; ! 178: u_char :3; ! 179: u_char lun:3; ! 180: u_char unused[4]; ! 181: u_char from_track; ! 182: u_char data_len[2]; ! 183: u_char link:1; ! 184: u_char flag:1; ! 185: u_char :6; ! 186: }; ! 187: ; ! 188: ! 189: struct scsi_read_cd_capacity ! 190: { ! 191: u_char op_code; ! 192: u_char :5; ! 193: u_char lun:3; ! 194: u_char addr_3; /* Most Significant */ ! 195: u_char addr_2; ! 196: u_char addr_1; ! 197: u_char addr_0; /* Least Significant */ ! 198: u_char unused[3]; ! 199: u_char link:1; ! 200: u_char flag:1; ! 201: u_char :6; ! 202: }; ! 203: ! 204: /* ! 205: * Opcodes ! 206: */ ! 207: ! 208: #define READ_CD_CAPACITY 0x25 /* slightly different from disk */ ! 209: #define READ_SUBCHANNEL 0x42 /* cdrom read Subchannel */ ! 210: #define READ_TOC 0x43 /* cdrom read TOC */ ! 211: #define READ_HEADER 0x44 /* cdrom read header */ ! 212: #define PLAY 0x45 /* cdrom play 'play audio' mode */ ! 213: #define PLAY_MSF 0x47 /* cdrom play Min,Sec,Frames mode */ ! 214: #define PLAY_TRACK 0x48 /* cdrom play track/index mode */ ! 215: #define PLAY_TRACK_REL 0x49 /* cdrom play track/index mode */ ! 216: #define PAUSE 0x4b /* cdrom pause in 'play audio' mode */ ! 217: #define PLAY_BIG 0xa5 /* cdrom pause in 'play audio' mode */ ! 218: #define PLAY_TRACK_REL_BIG 0xa9 /* cdrom play track/index mode */ ! 219: ! 220: ! 221: struct cd_inquiry_data /* in case there is some special info */ ! 222: { ! 223: u_char device_type:5; ! 224: u_char device_qualifier:3; ! 225: u_char dev_qual2:7; ! 226: u_char removable:1; ! 227: u_char ansii_version:3; ! 228: u_char :5; ! 229: u_char response_format; ! 230: u_char additional_length; ! 231: u_char unused[2]; ! 232: u_char :3; ! 233: u_char can_link:1; ! 234: u_char can_sync:1; ! 235: u_char :3; ! 236: char vendor[8]; ! 237: char product[16]; ! 238: char revision[4]; ! 239: u_char extra[8]; ! 240: }; ! 241: ! 242: struct scsi_read_cd_cap_data ! 243: { ! 244: u_char addr_3; /* Most significant */ ! 245: u_char addr_2; ! 246: u_char addr_1; ! 247: u_char addr_0; /* Least significant */ ! 248: u_char length_3; /* Most significant */ ! 249: u_char length_2; ! 250: u_char length_1; ! 251: u_char length_0; /* Least significant */ ! 252: }; ! 253: ! 254: union cd_pages ! 255: { ! 256: #define AUDIO_PAGE 0x0e ! 257: struct audio_page ! 258: { ! 259: u_char page_code:6; ! 260: u_char :1; ! 261: u_char ps:1; ! 262: u_char param_len; ! 263: u_char :1; ! 264: u_char sotc:1; ! 265: u_char immed:1; ! 266: u_char :5; ! 267: u_char unused[2]; ! 268: u_char format_lba:4; ! 269: u_char :3; ! 270: u_char apr_valid:1; ! 271: u_char lb_per_sec[2]; ! 272: struct port_control ! 273: { ! 274: u_char channels:4; ! 275: #define CHANNEL_0 1 ! 276: #define CHANNEL_1 2 ! 277: #define CHANNEL_2 4 ! 278: #define CHANNEL_3 8 ! 279: #define LEFT_CHANNEL CHANNEL_0 ! 280: #define RIGHT_CHANNEL CHANNEL_1 ! 281: u_char :4; ! 282: u_char volume; ! 283: } port[4]; ! 284: #define LEFT_PORT 0 ! 285: #define RIGHT_PORT 1 ! 286: }audio; ! 287: }; ! 288: ! 289: struct cd_mode_data ! 290: { ! 291: struct scsi_mode_header header; ! 292: struct blk_desc blk_desc; ! 293: union cd_pages page; ! 294: }; ! 295:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.