1/* 2 * Copyright 2009, Haiku Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef _SCSI_H 6#define _SCSI_H 7 8 9#include <Drivers.h> 10#include <OS.h> 11#include <SupportDefs.h> 12 13 14/* SCSI device types */ 15#define B_SCSI_DISK 0x00 16#define B_SCSI_TAPE 0x01 17#define B_SCSI_PRINTER 0x02 18#define B_SCSI_CPU 0x03 19#define B_SCSI_WORM 0x04 20#define B_SCSI_CD 0x05 21#define B_SCSI_SCANNER 0x06 22#define B_SCSI_OPTICAL 0x07 23#define B_SCSI_JUKEBOX 0x08 24#define B_SCSI_NETWORK 0x09 25 26 27/* SCSI device masks */ 28#define B_SCSI_ALL_DEVICES_MASK 0xffffffff 29#define B_SCSI_DISK_MASK (1 << (B_SCSI_DISK)) 30#define B_SCSI_TAPE_MASK (1 << (B_SCSI_TAPE)) 31#define B_SCSI_PRINTER_MASK (1 << (B_SCSI_PRINTER)) 32#define B_SCSI_CPU_MASK (1 << (B_SCSI_CPU)) 33#define B_SCSI_WORM_MASK (1 << (B_SCSI_WORM)) 34#define B_SCSI_CD_MASK (1 << (B_SCSI_CD)) 35#define B_SCSI_SCANNER_MASK (1 << (B_SCSI_SCANNER)) 36#define B_SCSI_OPTICAL_MASK (1 << (B_SCSI_OPTICAL)) 37#define B_SCSI_JUKEBOX_MASK (1 << (B_SCSI_JUKEBOX)) 38#define B_SCSI_NETWORK_MASK (1 << (B_SCSI_NETWORK)) 39 40 41enum { 42 B_SCSI_SCAN_FOR_DEVICES = B_DEVICE_OP_CODES_END + 1, 43 B_SCSI_ENABLE_PROFILING 44}; 45 46 47enum { 48 B_SCSI_INQUIRY = B_DEVICE_OP_CODES_END + 100, 49 B_SCSI_EJECT, 50 B_SCSI_PREVENT_ALLOW, 51 B_RAW_DEVICE_COMMAND 52}; 53 54 55typedef struct { 56 uchar inquiry_data[36]; 57} scsi_inquiry; 58 59 60enum { 61 B_SCSI_GET_TOC = B_DEVICE_OP_CODES_END + 200, 62 B_SCSI_PLAY_TRACK, 63 B_SCSI_PLAY_POSITION, 64 B_SCSI_STOP_AUDIO, 65 B_SCSI_PAUSE_AUDIO, 66 B_SCSI_RESUME_AUDIO, 67 B_SCSI_GET_POSITION, 68 B_SCSI_SET_VOLUME, 69 B_SCSI_GET_VOLUME, 70 B_SCSI_READ_CD, 71 B_SCSI_SCAN, 72 B_SCSI_DATA_MODE 73}; 74 75 76typedef struct { 77 uchar toc_data[804]; 78} scsi_toc; 79 80 81typedef struct { 82 uchar start_track; 83 uchar start_index; 84 uchar end_track; 85 uchar end_index; 86} scsi_play_track; 87 88 89typedef struct { 90 uchar start_m; 91 uchar start_s; 92 uchar start_f; 93 uchar end_m; 94 uchar end_s; 95 uchar end_f; 96} scsi_play_position; 97 98 99typedef struct { 100 uchar position[16]; 101} scsi_position; 102 103 104typedef struct { 105 uchar flags; 106 uchar port0_channel; 107 uchar port0_volume; 108 uchar port1_channel; 109 uchar port1_volume; 110 uchar port2_channel; 111 uchar port2_volume; 112 uchar port3_channel; 113 uchar port3_volume; 114} scsi_volume; 115 116 117#define B_SCSI_PORT0_CHANNEL 0x01 118#define B_SCSI_PORT0_VOLUME 0x02 119#define B_SCSI_PORT1_CHANNEL 0x04 120#define B_SCSI_PORT1_VOLUME 0x08 121#define B_SCSI_PORT2_CHANNEL 0x10 122#define B_SCSI_PORT2_VOLUME 0x20 123#define B_SCSI_PORT3_CHANNEL 0x40 124#define B_SCSI_PORT3_VOLUME 0x80 125 126 127typedef struct { 128 uchar start_m; 129 uchar start_s; 130 uchar start_f; 131 uchar length_m; 132 uchar length_s; 133 uchar length_f; 134 long buffer_length; 135 char* buffer; 136 bool play; 137} scsi_read_cd; 138 139 140typedef struct { 141 char speed; 142 char direction; 143} scsi_scan; 144 145 146typedef struct { 147 off_t block; 148 int32 mode; 149} scsi_data_mode; 150 151 152typedef struct { 153 uint8 command[16]; 154 uint8 command_length; 155 uint8 flags; 156 uint8 scsi_status; 157 uint8 cam_status; 158 void* data; 159 size_t data_length; 160 void* sense_data; 161 size_t sense_data_length; 162 bigtime_t timeout; 163} raw_device_command; 164 165 166enum { 167 B_RAW_DEVICE_DATA_IN = 0x01, 168 B_RAW_DEVICE_REPORT_RESIDUAL = 0x02, 169 B_RAW_DEVICE_SHORT_READ_VALID = 0x04 170}; 171 172#endif /* _SCSI_H */ 173