Home | History | Annotate | Line # | Download | only in scsipi
scsipi_all.h revision 1.1.2.1
      1  1.1.2.1  bouyer /*	$NetBSD: scsipi_all.h,v 1.1.2.1 1997/07/01 16:52:32 bouyer Exp $	*/
      2  1.1.2.1  bouyer 
      3  1.1.2.1  bouyer /*
      4  1.1.2.1  bouyer  * SCSI and SCSI-like general interface description
      5  1.1.2.1  bouyer  */
      6  1.1.2.1  bouyer 
      7  1.1.2.1  bouyer /*
      8  1.1.2.1  bouyer  * Largely written by Julian Elischer (julian (at) tfs.com)
      9  1.1.2.1  bouyer  * for TRW Financial Systems.
     10  1.1.2.1  bouyer  *
     11  1.1.2.1  bouyer  * TRW Financial Systems, in accordance with their agreement with Carnegie
     12  1.1.2.1  bouyer  * Mellon University, makes this software available to CMU to distribute
     13  1.1.2.1  bouyer  * or use in any manner that they see fit as long as this message is kept with
     14  1.1.2.1  bouyer  * the software. For this reason TFS also grants any other persons or
     15  1.1.2.1  bouyer  * organisations permission to use or modify this software.
     16  1.1.2.1  bouyer  *
     17  1.1.2.1  bouyer  * TFS supplies this software to be publicly redistributed
     18  1.1.2.1  bouyer  * on the understanding that TFS is not responsible for the correct
     19  1.1.2.1  bouyer  * functioning of this software in any circumstances.
     20  1.1.2.1  bouyer  *
     21  1.1.2.1  bouyer  * Ported to run under 386BSD by Julian Elischer (julian (at) tfs.com) Sept 1992
     22  1.1.2.1  bouyer  */
     23  1.1.2.1  bouyer 
     24  1.1.2.1  bouyer #ifndef	_SCSI_PI_ALL_H
     25  1.1.2.1  bouyer #define _SCSI_PI_ALL_H 1
     26  1.1.2.1  bouyer 
     27  1.1.2.1  bouyer /*
     28  1.1.2.1  bouyer  * SCSI-like command format and opcode
     29  1.1.2.1  bouyer  */
     30  1.1.2.1  bouyer 
     31  1.1.2.1  bouyer #define	TEST_UNIT_READY		0x00
     32  1.1.2.1  bouyer struct scsipi_test_unit_ready {
     33  1.1.2.1  bouyer 	u_int8_t opcode;
     34  1.1.2.1  bouyer 	u_int8_t byte2;
     35  1.1.2.1  bouyer 	u_int8_t unused[3];
     36  1.1.2.1  bouyer 	u_int8_t control;
     37  1.1.2.1  bouyer };
     38  1.1.2.1  bouyer 
     39  1.1.2.1  bouyer #define REQUEST_SENSE       0x03
     40  1.1.2.1  bouyer struct scsipi_sense {
     41  1.1.2.1  bouyer     u_int8_t opcode;
     42  1.1.2.1  bouyer 	u_int8_t byte2;
     43  1.1.2.1  bouyer 	u_int8_t unused[2];
     44  1.1.2.1  bouyer 	u_int8_t length;
     45  1.1.2.1  bouyer 	u_int8_t control;
     46  1.1.2.1  bouyer };
     47  1.1.2.1  bouyer 
     48  1.1.2.1  bouyer #define INQUIRY			0x12
     49  1.1.2.1  bouyer struct scsipi_inquiry {
     50  1.1.2.1  bouyer 	u_int8_t opcode;
     51  1.1.2.1  bouyer 	u_int8_t byte2;
     52  1.1.2.1  bouyer 	u_int8_t unused[2];
     53  1.1.2.1  bouyer 	u_int8_t length;
     54  1.1.2.1  bouyer 	u_int8_t control;
     55  1.1.2.1  bouyer };
     56  1.1.2.1  bouyer 
     57  1.1.2.1  bouyer #define PREVENT_ALLOW		0x1e
     58  1.1.2.1  bouyer struct scsipi_prevent {
     59  1.1.2.1  bouyer 	u_int8_t opcode;
     60  1.1.2.1  bouyer 	u_int8_t byte2;
     61  1.1.2.1  bouyer 	u_int8_t unused[2];
     62  1.1.2.1  bouyer 	u_int8_t how;
     63  1.1.2.1  bouyer 	u_int8_t control;
     64  1.1.2.1  bouyer };
     65  1.1.2.1  bouyer #define	PR_PREVENT 0x01
     66  1.1.2.1  bouyer #define PR_ALLOW   0x00
     67  1.1.2.1  bouyer 
     68  1.1.2.1  bouyer /*
     69  1.1.2.1  bouyer  * inquiry and sense data format
     70  1.1.2.1  bouyer  */
     71  1.1.2.1  bouyer 
     72  1.1.2.1  bouyer struct scsipi_sense_data {
     73  1.1.2.1  bouyer /* 1*/  u_int8_t error_code;
     74  1.1.2.1  bouyer #define SSD_ERRCODE     0x7F
     75  1.1.2.1  bouyer #define SSD_ERRCODE_VALID   0x80
     76  1.1.2.1  bouyer /* 2*/  u_int8_t segment;
     77  1.1.2.1  bouyer /* 3*/  u_int8_t flags;
     78  1.1.2.1  bouyer #define SSD_KEY     0x0F
     79  1.1.2.1  bouyer #define SSD_ILI     0x20
     80  1.1.2.1  bouyer #define SSD_EOM     0x40
     81  1.1.2.1  bouyer #define SSD_FILEMARK    0x80
     82  1.1.2.1  bouyer /* 7*/  u_int8_t info[4];
     83  1.1.2.1  bouyer /* 8*/  u_int8_t extra_len;
     84  1.1.2.1  bouyer /*12*/  u_int8_t cmd_spec_info[4];
     85  1.1.2.1  bouyer /*13*/  u_int8_t add_sense_code;
     86  1.1.2.1  bouyer /*14*/  u_int8_t add_sense_code_qual;
     87  1.1.2.1  bouyer /*15*/  u_int8_t fru;
     88  1.1.2.1  bouyer /*16*/  u_int8_t sense_key_spec_1;
     89  1.1.2.1  bouyer #define SSD_SCS_VALID   0x80
     90  1.1.2.1  bouyer /*17*/  u_int8_t sense_key_spec_2;
     91  1.1.2.1  bouyer /*18*/  u_int8_t sense_key_spec_3;
     92  1.1.2.1  bouyer /*32*/  u_int8_t extra_bytes[14];
     93  1.1.2.1  bouyer };
     94  1.1.2.1  bouyer 
     95  1.1.2.1  bouyer struct scsipi_sense_data_unextended {
     96  1.1.2.1  bouyer /* 1*/  u_int8_t error_code;
     97  1.1.2.1  bouyer /* 4*/  u_int8_t block[3];
     98  1.1.2.1  bouyer };
     99  1.1.2.1  bouyer 
    100  1.1.2.1  bouyer #define T_DIRECT	0
    101  1.1.2.1  bouyer #define T_SEQUENTIAL	1
    102  1.1.2.1  bouyer #define T_PRINTER	2
    103  1.1.2.1  bouyer #define T_PROCESSOR	3
    104  1.1.2.1  bouyer #define T_WORM		4
    105  1.1.2.1  bouyer #define T_CDROM		5
    106  1.1.2.1  bouyer #define T_SCANNER 	6
    107  1.1.2.1  bouyer #define T_OPTICAL 	7
    108  1.1.2.1  bouyer #define T_NODEVICE	0x1F
    109  1.1.2.1  bouyer 
    110  1.1.2.1  bouyer #define T_CHANGER	8
    111  1.1.2.1  bouyer #define T_COMM		9
    112  1.1.2.1  bouyer 
    113  1.1.2.1  bouyer #define T_REMOV		1
    114  1.1.2.1  bouyer #define	T_FIXED		0
    115  1.1.2.1  bouyer 
    116  1.1.2.1  bouyer /*
    117  1.1.2.1  bouyer  * XXX
    118  1.1.2.1  bouyer  * Actually I think some SCSI driver expects this structure to be 32 bytes, so
    119  1.1.2.1  bouyer  * don't change it unless you really know what you are doing
    120  1.1.2.1  bouyer  */
    121  1.1.2.1  bouyer 
    122  1.1.2.1  bouyer struct scsipi_inquiry_data {
    123  1.1.2.1  bouyer 	u_int8_t device;
    124  1.1.2.1  bouyer #define	SID_TYPE	0x1F
    125  1.1.2.1  bouyer #define	SID_QUAL	0xE0
    126  1.1.2.1  bouyer #define	SID_QUAL_LU_OK	0x00
    127  1.1.2.1  bouyer #define	SID_QUAL_LU_OFFLINE	0x20
    128  1.1.2.1  bouyer #define	SID_QUAL_RSVD	0x40
    129  1.1.2.1  bouyer #define	SID_QUAL_BAD_LU	0x60
    130  1.1.2.1  bouyer 	u_int8_t dev_qual2;
    131  1.1.2.1  bouyer #define	SID_QUAL2	0x7F
    132  1.1.2.1  bouyer #define	SID_REMOVABLE	0x80
    133  1.1.2.1  bouyer 	u_int8_t version;
    134  1.1.2.1  bouyer #define SID_ANSII	0x07
    135  1.1.2.1  bouyer #define SID_ECMA	0x38
    136  1.1.2.1  bouyer #define SID_ISO		0xC0
    137  1.1.2.1  bouyer 	u_int8_t response_format;
    138  1.1.2.1  bouyer 	u_int8_t additional_length;
    139  1.1.2.1  bouyer 	u_int8_t unused[2];
    140  1.1.2.1  bouyer 	u_int8_t flags;
    141  1.1.2.1  bouyer #define	SID_SftRe	0x01
    142  1.1.2.1  bouyer #define	SID_CmdQue	0x02
    143  1.1.2.1  bouyer #define	SID_Linked	0x08
    144  1.1.2.1  bouyer #define	SID_Sync	0x10
    145  1.1.2.1  bouyer #define	SID_WBus16	0x20
    146  1.1.2.1  bouyer #define	SID_WBus32	0x40
    147  1.1.2.1  bouyer #define	SID_RelAdr	0x80
    148  1.1.2.1  bouyer 	char	vendor[8];
    149  1.1.2.1  bouyer 	char	product[16];
    150  1.1.2.1  bouyer 	char	revision[4];
    151  1.1.2.1  bouyer 	u_int8_t extra[8];
    152  1.1.2.1  bouyer };
    153  1.1.2.1  bouyer 
    154  1.1.2.1  bouyer #endif /* _SCSI_PI_ALL_H */
    155