NetBSD/sys/arch/sparc/scsi/disktape.h

262 lines
10 KiB
C

/*
* Copyright (c) 1992 The Regents of the University of California.
* All rights reserved.
*
* This software was developed by the Computer Systems Engineering group
* at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
* contributed to Berkeley.
*
* All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Lawrence Berkeley Laboratories.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* %W% (Berkeley) %G%
*
* from: Header: disktape.h,v 1.4 93/04/30 00:02:16 torek Exp (LBL)
* $Id: disktape.h,v 1.1 1993/10/27 17:48:34 deraadt Exp $
*/
/*
* Commands common to disk and tape devices, but not other SCSI devices.
*/
#define CMD_MODE_SELECT6 0x15 /* mode select (6 byte cdb) */
#define CMD_MODE_SENSE6 0x1a /* mode sense (6 byte cdb) */
#define CMD_MODE_SELECT10 0x55 /* mode select (10 byte cdb) */
#define CMD_MODE_SENSE10 0x5a /* mode sense (10 byte cdb) */
/*
* Structure of MODE SELECT commands (i.e., the cdb; 6 & 10 byte flavors).
* The only difference is that the 10-byte version can give more parameter
* bytes.
*/
struct scsi_cdb_modeselect6 {
u_char cdb_cmd, /* 0x15 */
cdb_lun_flags, /* LUN + flags */
cdb_xxx[2], /* reserved */
cdb_len, /* parameter list length */
cdb_ctrl; /* control byte */
};
struct scsi_cdb_modeselect10 {
u_char cdb_cmd, /* 0x55 */
cdb_lun_flags, /* LUN + flags */
cdb_xxx[5], /* reserved */
cdb_lenh, /* parameter list length (MSB) */
cdb_lenl, /* parameter list length (LSB) */
cdb_ctrl; /* control byte */
};
/* flags in SCSI_MODESELECT commands */
#define SCSI_MSEL_SCSI1_DATA 0x00 /* SCSI-1 data format */
#define SCSI_MSEL_SCSI2_DATA 0x10 /* SCSI-2 data format */
#define SCSI_MSEL_DONTSAVE 0x00 /* don't save pages */
#define SCSI_MSEL_SAVEPAGES 0x01 /* save mode pages */
/*
* Structure of MODE SENSE command (i.e., the cdb; 6 & 10 byte flavors).
* Again, the 10-byte version merely allows more parameter bytes.
* Note that these lengths include the MODE SENSE headers, while those
* for individual mode pages do not. (Consistency? What's that?)
*/
struct scsi_cdb_modesense6 {
u_char cdb_cmd, /* 0x1a */
cdb_lun_flags, /* logical unit number + flags */
cdb_pcc, /* page control & code */
cdb_xxx, /* reserved */
cdb_len, /* allocation length */
cdb_ctrl; /* control byte */
};
struct scsi_cdb_modesense10 {
u_char cdb_cmd, /* 0x5a */
cdb_lun_flags, /* logical unit number + flags */
cdb_pcc, /* page control & code */
cdb_xxx[4], /* reserved */
cdb_lenh, /* allocation length (MSB) */
cdb_lenl, /* allocation length (MSB) */
cdb_ctrl; /* control byte */
};
/* flags in SCSI_MODESENSE commands */
#define SCSI_MSENSE_DBD 0x08 /* device returns db descriptors */
/* page controls */
#define SCSI_MSENSE_PCTL_CUR 0x00 /* return current parameters */
#define SCSI_MSENSE_PCTL_VAR 0x40 /* return variable parameters */
#define SCSI_MSENSE_PCTL_DFLT 0x80 /* return default parameters */
#define SCSI_MSENSE_PCTL_SAVED 0xc0 /* return saved parameters */
/*
* Both MODE_SENSE and MODE_SELECT use a Mode Parameter Header,
* followed by an array of Block Descriptors, followed by an array
* of Pages. We define structures for the Block Descriptor and Page
* header first, then the two (6 and 10 byte) Mode Parameter headers
* (not including the Block Descriptor(s) and any mode pages themselves).
*/
struct scsi_ms_bd { /* mode sense/select block descriptor */
u_char bd_dc, /* density code (tapes only) */
bd_nbh, /* number of blocks (MSB) */
bd_nbm, /* number of blocks */
bd_nbl, /* number of blocks (LSB) */
bd_xxx, /* reserved */
bd_blh, /* block length (MSB) */
bd_blm, /* block length */
bd_bll; /* block length (LSB) */
};
struct scsi_ms_page_hdr { /* mode sense/select page header */
u_char mp_psc, /* saveable flag + code */
mp_len; /* parameter length (excludes this header) */
/* followed by parameters */
};
#define SCSI_MS_MP_SAVEABLE 0x80 /* page can be saved */
/* 0x40 reserved */
#define SCSI_MS_PC_MASK 0x3f /* page code mask */
/*
* Structure of returned mode sense6 / mode select6 (hence "ms6") data.
*/
struct scsi_ms6 {
u_char ms_len, /* total sense data length */
ms_mt, /* medium type (disks only?) */
ms_dsp, /* device specific parameter */
ms_bdl; /* block descriptor length (bytes) */
/* followed by block descriptors, if any */
/* followed by pages, if any */
};
/*
* Same, but for ms10.
*/
struct scsi_ms10 {
u_char ms_lenh, /* total sense length (MSB) */
ms_lenl, /* total sense length (LSB) */
ms_mt, /* medium type (disks only?) */
ms_dsp, /* device specific parameter */
ms_xxx[2], /* reserved */
ms_bdlh, /* block descriptor length (bytes) (MSB) */
ms_bdll; /* block descriptor length (bytes) (LSB) */
/* followed by block descriptors, if any */
/* followed by pages, if any */
};
/* values for the Medium Type field - disks */
#define SCSI_MS_MT_DEFAULT 0x00 /* whatever is current */
#define SCSI_MS_MT_SS 0x01 /* single sided, unspecified medium */
#define SCSI_MS_MT_DS 0x02 /* double sided, unspecified medium */
#define SCSI_MS_MT_8SSSD 0x05 /* 8" floppy, SSSD (X3.73-1980) */
#define SCSI_MS_MT_8DSSD 0x06 /* 8" floppy, DSSD (X3B8-140) */
#define SCSI_MS_MT_8SSDD 0x09 /* 8" floppy, SSDD (X3B8/78-139) */
#define SCSI_MS_MT_8DSDD 0x0a /* 8" floppy, DSDD (X3.121-1984) */
#define SCSI_MS_MT_5SSSD 0x0d /* 5.25" floppy, SSSD (X3.82-1980) */
#define SCSI_MS_MT_5DSDD 0x12 /* 5.25" floppy, DSDD (X3.125-1984) */
#define SCSI_MS_MT_5DSDD96 0x16 /* 5.25", DSDD, 96tpi (X3.126-198X) */
#define SCSI_MS_MT_5DSQD 0x1a /* 5.25", DSQD, 96tpi (DIS 8630) */
#define SCSI_MS_MT_3DS 0x1e /* 3.5", double sided (X3.137-198X) */
/* values for the Medium Type field - tapes */
#define SCSI_MS_MT_QIC_12T 0x40 /* 0.25", 12 tracks */
#define SCSI_MS_MT_QIC_24T 0x44 /* 0.25", 24 tracks */
/* values for the Device Specific Parameter field */
#define SCSI_MS_DSP_WP 0x80 /* write protect (both disk & tape) */
/* if disk */
#define SCSI_MS_DSP_DPO_FUA 0x10 /* cache flags DPO, FUA supported */
/* if tape */
#define SCSI_MS_DSP_UNBUFFERED 0x00 /* unbuffered writes */
#define SCSI_MS_DSP_BUFFERED 0x10 /* buffered writes */
#define SCSI_MS_DSP_BUF2 0x20 /* buffered, for shared tapes */
/* 0x30..0x70 reserved */
#define SCSI_MS_DSP_SPEED_DFLT 0x00 /* use device default speed */
#define SCSI_MS_DSP_SPEED_MASK 0x0f /* mask for non-default speeds */
/* values for the Density Code field - tapes */
#define SCSI_MS_DC_DEFAULT 0 /* use device default density */
#define SCSI_MS_DC_9T_800BPI 1 /* 9 track, 800 bpi */
#define SCSI_MS_DC_9T_1600BPI 2 /* 9 track, 1600 bpi */
#define SCSI_MS_DC_9T_6250BPI 3 /* 9 track, 6250 bpi */
#define SCSI_MS_DC_QIC_XX1 4 /* QIC-11? 4 or 9 track, 8000 bpi */
#define SCSI_MS_DC_QIC_XX2 5 /* QIC-11? 4 or 9 track, 8000 bpi */
#define SCSI_MS_DC_9T_3200BPI 6 /* 9 track, 3200 bpi */
#define SCSI_MS_DC_QIC_XX3 7 /* QIC, 4 track, 6400 bpi */
#define SCSI_MS_DC_CS_XX4 8 /* cassette 4 track, 8000 bpi */
#define SCSI_MS_DC_HIC_XX5 9 /* half inch cartridge, 18 track */
#define SCSI_MS_DC_HIC_XX6 10 /* HIC, 22 track, 6667 bpi */
#define SCSI_MS_DC_QIC_XX7 11 /* QIC, 4 track, 1600 bpi */
#define SCSI_MS_DC_HIC_XX8 12 /* HIC, 24 track, 12690 bpi */
#define SCSI_MS_DC_HIC_XX9 13 /* HIC, 24 track, 25380 bpi */
/*
* Common page codes.
*/
/* 0x01 device specific */
#define SCSI_MS_PC_DR 0x02 /* disconnect/reconnect control */
/* 0x03..0x08 device specific */
#define SCSI_MS_PC_PDEV 0x09 /* peripheral device page */
#define SCSI_MS_PC_CTLMODE 0x0a /* control mode page */
/* 0x0b..0x1f device specific */
/* 0x20..0x3e vendor specific */
#define SCSI_MS_PC_ALL 0x3f /* all pages */
/*
* Structure of a Disconnect/Reconnect Control mode page.
*/
struct scsi_page_dr {
u_char dr_full, /* buffer full ratio */
dr_empty, /* buffer empty ratio */
dr_inacth, /* bus inactivity timeout (MSB) */
dr_inactl, /* bus inactivity timeout (LSB) */
dr_disconh, /* disconnect time limit (MSB) */
dr_disconl, /* disconnect time limit (LSB) */
dr_conh, /* connect time limit (MSB) */
dr_conl, /* connect time limit (LSB) */
dr_bursth, /* maximum burst size (MSB) */
dr_burstl, /* maximum burst size (LSB) */
dr_dtdc, /* Data Transfer Disconnect Control (below) */
dr_xxx[3]; /* reserved */
};
/* Data Transfer Disconnect Control */
#define SCSI_DR_DTDC_MASK 0x03 /* mask for valid bits */
#define SCSI_DR_DTDC_NONE 0x00 /* no control */
#define SCSI_DR_DTDC_NOTDATA 0x01 /* never during data transfer */
#define SCSI_DR_DTDC_RSVD 0x02 /* reserved */
#define SCSI_DR_DTDC_NOTD2 0x03 /* never during/after data transfer */
/*
* Structure of a PREVENT/ALLOW MEDIUM REMOVAL command.
*/
struct scsi_cdb_pamr {
u_char cdb_cmd, /* 0x1e */
cdb_lun_xxx, /* logical unit number + reserved */
cdb_xxx1, /* reserved */
cdb_xxx2, /* reserved */
cdb_prevent, /* 1=prevent, 0=allow */
cdb_ctrl;
};