Home | History | Annotate | Line # | Download | only in scsipi
scsi_disk.h revision 1.3.3.1
      1      1.1      cgd /*
      2      1.3      cgd  * SCSI interface description
      3  1.3.3.1  mycroft  */
      4  1.3.3.1  mycroft 
      5  1.3.3.1  mycroft /*
      6  1.3.3.1  mycroft  * Some lines of this file come from a file of the name "scsi.h"
      7      1.1      cgd  * distributed by OSF as part of mach2.5,
      8      1.1      cgd  *  so the following disclaimer has been kept.
      9      1.1      cgd  *
     10      1.1      cgd  * Copyright 1990 by Open Software Foundation,
     11      1.1      cgd  * Grenoble, FRANCE
     12      1.1      cgd  *
     13      1.1      cgd  * 		All Rights Reserved
     14      1.1      cgd  *
     15      1.1      cgd  *   Permission to use, copy, modify, and distribute this software and
     16      1.1      cgd  * its documentation for any purpose and without fee is hereby granted,
     17      1.1      cgd  * provided that the above copyright notice appears in all copies and
     18      1.1      cgd  * that both the copyright notice and this permission notice appear in
     19      1.1      cgd  * supporting documentation, and that the name of OSF or Open Software
     20      1.1      cgd  * Foundation not be used in advertising or publicity pertaining to
     21      1.1      cgd  * distribution of the software without specific, written prior
     22      1.1      cgd  * permission.
     23      1.1      cgd  *
     24      1.1      cgd  *   OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
     25      1.1      cgd  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
     26      1.1      cgd  * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
     27      1.1      cgd  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
     28      1.1      cgd  * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
     29      1.1      cgd  * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
     30      1.1      cgd  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     31      1.1      cgd  */
     32      1.1      cgd 
     33      1.1      cgd /*
     34      1.1      cgd  * Largely written by Julian Elischer (julian (at) tfs.com)
     35      1.1      cgd  * for TRW Financial Systems.
     36      1.1      cgd  *
     37      1.1      cgd  * TRW Financial Systems, in accordance with their agreement with Carnegie
     38      1.1      cgd  * Mellon University, makes this software available to CMU to distribute
     39      1.1      cgd  * or use in any manner that they see fit as long as this message is kept with
     40      1.1      cgd  * the software. For this reason TFS also grants any other persons or
     41      1.1      cgd  * organisations permission to use or modify this software.
     42      1.1      cgd  *
     43      1.1      cgd  * TFS supplies this software to be publicly redistributed
     44      1.1      cgd  * on the understanding that TFS is not responsible for the correct
     45      1.1      cgd  * functioning of this software in any circumstances.
     46      1.1      cgd  *
     47      1.1      cgd  * Ported to run under 386BSD by Julian Elischer (julian (at) tfs.com) Sept 1992
     48  1.3.3.1  mycroft  *
     49  1.3.3.1  mycroft  *	$Id: scsi_disk.h,v 1.3.3.1 1993/11/24 05:03:04 mycroft Exp $
     50      1.1      cgd  */
     51      1.1      cgd 
     52      1.1      cgd /*
     53      1.1      cgd  * SCSI command format
     54      1.1      cgd  */
     55      1.1      cgd 
     56  1.3.3.1  mycroft #ifndef	_SCSI_SCSI_DISK_H
     57  1.3.3.1  mycroft #define _SCSI_SCSI_DISK_H 1
     58      1.1      cgd 
     59      1.1      cgd struct scsi_reassign_blocks
     60      1.1      cgd {
     61      1.1      cgd 	u_char	op_code;
     62  1.3.3.1  mycroft 	u_char	byte2;
     63      1.1      cgd 	u_char	unused[3];
     64  1.3.3.1  mycroft 	u_char	control;
     65      1.1      cgd };
     66      1.1      cgd 
     67      1.1      cgd struct scsi_rw
     68      1.1      cgd {
     69      1.1      cgd 	u_char	op_code;
     70  1.3.3.1  mycroft 	u_char	addr_2;		/* Most significant */
     71  1.3.3.1  mycroft #define	SRW_TOPADDR	0x1F	/* only 5 bits here */
     72      1.1      cgd 	u_char	addr_1;
     73      1.1      cgd 	u_char	addr_0;		/* least significant */
     74      1.1      cgd 	u_char	length;
     75  1.3.3.1  mycroft 	u_char	control;
     76      1.1      cgd };
     77      1.1      cgd 
     78      1.1      cgd struct scsi_rw_big
     79      1.1      cgd {
     80      1.1      cgd 	u_char	op_code;
     81  1.3.3.1  mycroft 	u_char	byte2;
     82  1.3.3.1  mycroft #define	SRWB_RELADDR	0x01
     83  1.3.3.1  mycroft 	u_char	addr_3;		/* Most significant */
     84      1.1      cgd 	u_char	addr_2;
     85      1.1      cgd 	u_char	addr_1;
     86      1.1      cgd 	u_char	addr_0;		/* least significant */
     87      1.1      cgd 	u_char	reserved;;
     88      1.1      cgd 	u_char	length2;
     89      1.1      cgd 	u_char	length1;
     90  1.3.3.1  mycroft 	u_char	control;
     91      1.1      cgd };
     92      1.1      cgd 
     93      1.1      cgd struct scsi_read_capacity
     94      1.1      cgd {
     95      1.1      cgd 	u_char	op_code;
     96  1.3.3.1  mycroft 	u_char	byte2;
     97      1.1      cgd 	u_char	addr_3;	/* Most Significant */
     98      1.1      cgd 	u_char	addr_2;
     99      1.1      cgd 	u_char	addr_1;
    100      1.1      cgd 	u_char	addr_0;	/* Least Significant */
    101      1.1      cgd 	u_char	unused[3];
    102  1.3.3.1  mycroft 	u_char	control;
    103      1.1      cgd };
    104      1.1      cgd 
    105      1.1      cgd struct scsi_start_stop
    106      1.1      cgd {
    107      1.1      cgd 	u_char	op_code;
    108  1.3.3.1  mycroft 	u_char	byte2;
    109      1.1      cgd 	u_char	unused[2];
    110  1.3.3.1  mycroft 	u_char	how;
    111  1.3.3.1  mycroft #define	SSS_START		0x01
    112  1.3.3.1  mycroft #define	SSS_LOEJ		0x02
    113  1.3.3.1  mycroft 	u_char	control;
    114      1.1      cgd };
    115      1.1      cgd 
    116      1.1      cgd 
    117      1.1      cgd 
    118      1.1      cgd /*
    119      1.1      cgd  * Opcodes
    120      1.1      cgd  */
    121      1.1      cgd 
    122      1.1      cgd #define	REASSIGN_BLOCKS		0x07
    123      1.1      cgd #define	READ_COMMAND		0x08
    124      1.1      cgd #define WRITE_COMMAND		0x0a
    125      1.1      cgd #define MODE_SELECT		0x15
    126      1.1      cgd #define MODE_SENSE		0x1a
    127      1.1      cgd #define START_STOP		0x1b
    128      1.1      cgd #define PREVENT_ALLOW		0x1e
    129      1.1      cgd #define	READ_CAPACITY		0x25
    130      1.1      cgd #define	READ_BIG		0x28
    131      1.1      cgd #define WRITE_BIG		0x2a
    132      1.1      cgd 
    133      1.1      cgd 
    134      1.1      cgd 
    135      1.1      cgd struct scsi_read_cap_data
    136      1.1      cgd {
    137      1.1      cgd 	u_char	addr_3;	/* Most significant */
    138      1.1      cgd 	u_char	addr_2;
    139      1.1      cgd 	u_char	addr_1;
    140      1.1      cgd 	u_char	addr_0;	/* Least significant */
    141      1.1      cgd 	u_char	length_3;	/* Most significant */
    142      1.1      cgd 	u_char	length_2;
    143      1.1      cgd 	u_char	length_1;
    144      1.1      cgd 	u_char	length_0;	/* Least significant */
    145      1.1      cgd };
    146      1.1      cgd 
    147      1.1      cgd struct scsi_reassign_blocks_data
    148      1.1      cgd {
    149      1.1      cgd 	u_char	reserved[2];
    150      1.1      cgd 	u_char	length_msb;
    151      1.1      cgd 	u_char	length_lsb;
    152      1.1      cgd 	struct
    153      1.1      cgd 	{
    154      1.1      cgd 		u_char	dlbaddr_3;	/* defect logical block address (MSB) */
    155      1.1      cgd 		u_char	dlbaddr_2;
    156      1.1      cgd 		u_char	dlbaddr_1;
    157      1.1      cgd 		u_char	dlbaddr_0;	/* defect logical block address (LSB) */
    158      1.1      cgd 	} defect_descriptor[1];
    159      1.1      cgd };
    160      1.1      cgd 
    161      1.1      cgd union	disk_pages /* this is the structure copied from osf */
    162      1.1      cgd {
    163      1.1      cgd 	struct page_disk_format {
    164  1.3.3.1  mycroft 	   u_char pg_code;	/* page code (should be 3)	      */
    165  1.3.3.1  mycroft #define	DISK_PGCODE	0x3F	/* only 6 bits valid */
    166      1.1      cgd 	   u_char pg_length;	/* page length (should be 0x16)	      */
    167      1.1      cgd 	   u_char trk_z_1;	/* tracks per zone (MSB)	      */
    168      1.1      cgd 	   u_char trk_z_0;	/* tracks per zone (LSB)	      */
    169      1.1      cgd 	   u_char alt_sec_1;	/* alternate sectors per zone (MSB)   */
    170      1.1      cgd 	   u_char alt_sec_0;	/* alternate sectors per zone (LSB)   */
    171      1.1      cgd 	   u_char alt_trk_z_1;	/* alternate tracks per zone (MSB)    */
    172      1.1      cgd 	   u_char alt_trk_z_0;	/* alternate tracks per zone (LSB)    */
    173      1.1      cgd 	   u_char alt_trk_v_1;	/* alternate tracks per volume (MSB)  */
    174      1.1      cgd 	   u_char alt_trk_v_0;	/* alternate tracks per volume (LSB)  */
    175      1.1      cgd 	   u_char ph_sec_t_1;	/* physical sectors per track (MSB)   */
    176      1.1      cgd 	   u_char ph_sec_t_0;	/* physical sectors per track (LSB)   */
    177      1.1      cgd 	   u_char bytes_s_1;	/* bytes per sector (MSB)	      */
    178      1.1      cgd 	   u_char bytes_s_0;	/* bytes per sector (LSB)	      */
    179      1.1      cgd 	   u_char interleave_1;/* interleave (MSB)		      */
    180      1.1      cgd 	   u_char interleave_0;/* interleave (LSB)		      */
    181      1.1      cgd 	   u_char trk_skew_1;	/* track skew factor (MSB)	      */
    182      1.1      cgd 	   u_char trk_skew_0;	/* track skew factor (LSB)	      */
    183      1.1      cgd 	   u_char cyl_skew_1;	/* cylinder skew (MSB)		      */
    184      1.1      cgd 	   u_char cyl_skew_0;	/* cylinder skew (LSB)		      */
    185  1.3.3.1  mycroft 	   u_char flags;	/* various */
    186  1.3.3.1  mycroft #define		DISK_FMT_SURF	0x10
    187  1.3.3.1  mycroft #define		DISK_FMT_RMB	0x20
    188  1.3.3.1  mycroft #define		DISK_FMT_HSEC	0x40
    189  1.3.3.1  mycroft #define		DISK_FMT_SSEC	0x80
    190      1.1      cgd 	   u_char reserved2;
    191      1.1      cgd 	   u_char reserved3;
    192      1.1      cgd 	} disk_format;
    193      1.1      cgd 	struct page_rigid_geometry {
    194  1.3.3.1  mycroft 	   u_char pg_code;	/* page code (should be 4)	      */
    195      1.1      cgd 	   u_char pg_length;	/* page length (should be 0x16)	      */
    196      1.1      cgd 	   u_char ncyl_2;	/* number of cylinders (MSB)	      */
    197      1.1      cgd 	   u_char ncyl_1;	/* number of cylinders 		      */
    198      1.1      cgd 	   u_char ncyl_0;	/* number of cylinders (LSB)	      */
    199      1.1      cgd 	   u_char nheads;	/* number of heads 		      */
    200      1.1      cgd 	   u_char st_cyl_wp_2;	/* starting cyl., write precomp (MSB) */
    201      1.1      cgd 	   u_char st_cyl_wp_1;	/* starting cyl., write precomp	      */
    202      1.1      cgd 	   u_char st_cyl_wp_0;	/* starting cyl., write precomp (LSB) */
    203      1.1      cgd 	   u_char st_cyl_rwc_2;/* starting cyl., red. write cur (MSB)*/
    204      1.1      cgd 	   u_char st_cyl_rwc_1;/* starting cyl., red. write cur      */
    205      1.1      cgd 	   u_char st_cyl_rwc_0;/* starting cyl., red. write cur (LSB)*/
    206      1.1      cgd 	   u_char driv_step_1;	/* drive step rate (MSB)	      */
    207      1.1      cgd 	   u_char driv_step_0;	/* drive step rate (LSB)	      */
    208      1.1      cgd 	   u_char land_zone_2;	/* landing zone cylinder (MSB)	      */
    209      1.1      cgd 	   u_char land_zone_1;	/* landing zone cylinder 	      */
    210      1.1      cgd 	   u_char land_zone_0;	/* landing zone cylinder (LSB)	      */
    211      1.1      cgd 	   u_char reserved1;
    212      1.1      cgd 	   u_char reserved2;
    213      1.1      cgd 	   u_char reserved3;
    214      1.1      cgd     	} rigid_geometry;
    215      1.1      cgd } ;
    216  1.3.3.1  mycroft #endif /* _SCSI_SCSI_DISK_H*/
    217