1 1.18 bouyer /* $NetBSD: scsi_all.h,v 1.18 2001/05/14 20:35:28 bouyer Exp $ */ 2 1.5 cgd 3 1.1 cgd /* 4 1.16 wiz * SCSI-specific interface description. 5 1.3 mycroft */ 6 1.3 mycroft 7 1.3 mycroft /* 8 1.1 cgd * Largely written by Julian Elischer (julian (at) tfs.com) 9 1.1 cgd * for TRW Financial Systems. 10 1.1 cgd * 11 1.1 cgd * TRW Financial Systems, in accordance with their agreement with Carnegie 12 1.1 cgd * Mellon University, makes this software available to CMU to distribute 13 1.12 enami * or use in any manner that they see fit as long as this message is kept with 14 1.1 cgd * the software. For this reason TFS also grants any other persons or 15 1.1 cgd * organisations permission to use or modify this software. 16 1.1 cgd * 17 1.1 cgd * TFS supplies this software to be publicly redistributed 18 1.1 cgd * on the understanding that TFS is not responsible for the correct 19 1.1 cgd * functioning of this software in any circumstances. 20 1.1 cgd * 21 1.3 mycroft * Ported to run under 386BSD by Julian Elischer (julian (at) tfs.com) Sept 1992 22 1.1 cgd */ 23 1.1 cgd 24 1.1 cgd /* 25 1.3 mycroft * SCSI command format 26 1.1 cgd */ 27 1.1 cgd 28 1.1 cgd /* 29 1.3 mycroft * Define dome bits that are in ALL (or a lot of) scsi commands 30 1.1 cgd */ 31 1.12 enami #define SCSI_CTL_LINK 0x01 32 1.12 enami #define SCSI_CTL_FLAG 0x02 33 1.12 enami #define SCSI_CTL_VENDOR 0xC0 34 1.9 thorpej 35 1.9 thorpej 36 1.9 thorpej /* 37 1.9 thorpej * Some old SCSI devices need the LUN to be set in the top 3 bits of the 38 1.9 thorpej * second byte of the CDB. 39 1.9 thorpej */ 40 1.9 thorpej #define SCSI_CMD_LUN_MASK 0xe0 41 1.9 thorpej #define SCSI_CMD_LUN_SHIFT 5 42 1.1 cgd 43 1.11 bouyer /* 44 1.11 bouyer * XXX 45 1.11 bouyer * Actually some SCSI driver expects this structure to be 12 bytes, so 46 1.11 bouyer * don't change it unless you really know what you are doing 47 1.11 bouyer */ 48 1.1 cgd 49 1.6 mycroft struct scsi_generic { 50 1.6 mycroft u_int8_t opcode; 51 1.6 mycroft u_int8_t bytes[11]; 52 1.6 mycroft }; 53 1.6 mycroft 54 1.11 bouyer /* XXX Is this a command ? What's its opcode ? */ 55 1.6 mycroft struct scsi_send_diag { 56 1.6 mycroft u_int8_t opcode; 57 1.6 mycroft u_int8_t byte2; 58 1.3 mycroft #define SSD_UOL 0x01 59 1.3 mycroft #define SSD_DOL 0x02 60 1.3 mycroft #define SSD_SELFTEST 0x04 61 1.3 mycroft #define SSD_PF 0x10 62 1.6 mycroft u_int8_t unused[1]; 63 1.6 mycroft u_int8_t paramlen[2]; 64 1.6 mycroft u_int8_t control; 65 1.6 mycroft }; 66 1.6 mycroft 67 1.12 enami #define SCSI_RESERVE 0x16 68 1.6 mycroft struct scsi_reserve { 69 1.6 mycroft u_int8_t opcode; 70 1.6 mycroft u_int8_t byte2; 71 1.6 mycroft u_int8_t unused[2]; 72 1.6 mycroft u_int8_t length; 73 1.6 mycroft u_int8_t control; 74 1.6 mycroft }; 75 1.6 mycroft 76 1.12 enami #define SCSI_RELEASE 0x17 77 1.6 mycroft struct scsi_release { 78 1.6 mycroft u_int8_t opcode; 79 1.6 mycroft u_int8_t byte2; 80 1.6 mycroft u_int8_t unused[2]; 81 1.6 mycroft u_int8_t length; 82 1.6 mycroft u_int8_t control; 83 1.6 mycroft }; 84 1.6 mycroft 85 1.11 bouyer #define SCSI_CHANGE_DEFINITION 0x40 86 1.6 mycroft struct scsi_changedef { 87 1.6 mycroft u_int8_t opcode; 88 1.6 mycroft u_int8_t byte2; 89 1.6 mycroft u_int8_t unused1; 90 1.6 mycroft u_int8_t how; 91 1.6 mycroft u_int8_t unused[4]; 92 1.6 mycroft u_int8_t datalen; 93 1.6 mycroft u_int8_t control; 94 1.3 mycroft }; 95 1.12 enami #define SC_SCSI_1 0x01 96 1.12 enami #define SC_SCSI_2 0x03 97 1.1 cgd 98 1.18 bouyer /* block descriptor, for mode sense/mode select */ 99 1.6 mycroft struct scsi_blk_desc { 100 1.6 mycroft u_int8_t density; 101 1.6 mycroft u_int8_t nblocks[3]; 102 1.6 mycroft u_int8_t reserved; 103 1.6 mycroft u_int8_t blklen[3]; 104 1.6 mycroft }; 105 1.1 cgd 106 1.1 cgd /* 107 1.1 cgd * Status Byte 108 1.1 cgd */ 109 1.15 ad #define SCSI_OK 0x00 110 1.15 ad #define SCSI_CHECK 0x02 111 1.15 ad #define SCSI_BUSY 0x08 112 1.15 ad #define SCSI_INTERM 0x10 113 1.15 ad #define SCSI_RESV_CONFLICT 0x18 114 1.15 ad #define SCSI_TERMINATED 0x22 115 1.15 ad #define SCSI_QUEUE_FULL 0x28 116 1.15 ad #define SCSI_ACA_ACTIVE 0x30 117