176babe50SJustin T. Gibbs /* 276babe50SJustin T. Gibbs * Structures and definitions for SCSI commands to Direct Access Devices 376babe50SJustin T. Gibbs */ 476babe50SJustin T. Gibbs 5898b0535SWarner Losh /*- 676babe50SJustin T. Gibbs * Some lines of this file come from a file of the name "scsi.h" 776babe50SJustin T. Gibbs * distributed by OSF as part of mach2.5, 876babe50SJustin T. Gibbs * so the following disclaimer has been kept. 976babe50SJustin T. Gibbs * 1076babe50SJustin T. Gibbs * Copyright 1990 by Open Software Foundation, 1176babe50SJustin T. Gibbs * Grenoble, FRANCE 1276babe50SJustin T. Gibbs * 1376babe50SJustin T. Gibbs * All Rights Reserved 1476babe50SJustin T. Gibbs * 1576babe50SJustin T. Gibbs * Permission to use, copy, modify, and distribute this software and 1676babe50SJustin T. Gibbs * its documentation for any purpose and without fee is hereby granted, 1776babe50SJustin T. Gibbs * provided that the above copyright notice appears in all copies and 1876babe50SJustin T. Gibbs * that both the copyright notice and this permission notice appear in 1976babe50SJustin T. Gibbs * supporting documentation, and that the name of OSF or Open Software 2076babe50SJustin T. Gibbs * Foundation not be used in advertising or publicity pertaining to 2176babe50SJustin T. Gibbs * distribution of the software without specific, written prior 2276babe50SJustin T. Gibbs * permission. 2376babe50SJustin T. Gibbs * 2476babe50SJustin T. Gibbs * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE 2576babe50SJustin T. Gibbs * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, 2676babe50SJustin T. Gibbs * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR 2776babe50SJustin T. Gibbs * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 2876babe50SJustin T. Gibbs * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT, 2976babe50SJustin T. Gibbs * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 3076babe50SJustin T. Gibbs * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 3176babe50SJustin T. Gibbs */ 3276babe50SJustin T. Gibbs 33898b0535SWarner Losh /*- 3476babe50SJustin T. Gibbs * Largely written by Julian Elischer (julian@tfs.com) 3576babe50SJustin T. Gibbs * for TRW Financial Systems. 3676babe50SJustin T. Gibbs * 3776babe50SJustin T. Gibbs * TRW Financial Systems, in accordance with their agreement with Carnegie 3876babe50SJustin T. Gibbs * Mellon University, makes this software available to CMU to distribute 3976babe50SJustin T. Gibbs * or use in any manner that they see fit as long as this message is kept with 4076babe50SJustin T. Gibbs * the software. For this reason TFS also grants any other persons or 4176babe50SJustin T. Gibbs * organisations permission to use or modify this software. 4276babe50SJustin T. Gibbs * 4376babe50SJustin T. Gibbs * TFS supplies this software to be publicly redistributed 4476babe50SJustin T. Gibbs * on the understanding that TFS is not responsible for the correct 4576babe50SJustin T. Gibbs * functioning of this software in any circumstances. 4676babe50SJustin T. Gibbs * 4776babe50SJustin T. Gibbs * Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992 4876babe50SJustin T. Gibbs * 49c3aac50fSPeter Wemm * $FreeBSD$ 5076babe50SJustin T. Gibbs */ 5176babe50SJustin T. Gibbs 5276babe50SJustin T. Gibbs #ifndef _SCSI_SCSI_DA_H 5376babe50SJustin T. Gibbs #define _SCSI_SCSI_DA_H 1 5476babe50SJustin T. Gibbs 5576babe50SJustin T. Gibbs #include <sys/cdefs.h> 5676babe50SJustin T. Gibbs 5776babe50SJustin T. Gibbs struct scsi_rezero_unit 5876babe50SJustin T. Gibbs { 5976babe50SJustin T. Gibbs u_int8_t opcode; 6076babe50SJustin T. Gibbs #define SRZU_LUN_MASK 0xE0 6176babe50SJustin T. Gibbs u_int8_t byte2; 6276babe50SJustin T. Gibbs u_int8_t reserved[3]; 6376babe50SJustin T. Gibbs u_int8_t control; 6476babe50SJustin T. Gibbs }; 6576babe50SJustin T. Gibbs 6696a93c63SKenneth D. Merry /* 6796a93c63SKenneth D. Merry * NOTE: The lower three bits of byte2 of the format CDB are the same as 6896a93c63SKenneth D. Merry * the lower three bits of byte2 of the read defect data CDB, below. 6996a93c63SKenneth D. Merry */ 7096a93c63SKenneth D. Merry struct scsi_format_unit 7196a93c63SKenneth D. Merry { 7296a93c63SKenneth D. Merry u_int8_t opcode; 7396a93c63SKenneth D. Merry u_int8_t byte2; 7496a93c63SKenneth D. Merry #define FU_FORMAT_MASK SRDD10_DLIST_FORMAT_MASK 7596a93c63SKenneth D. Merry #define FU_BLOCK_FORMAT SRDD10_BLOCK_FORMAT 7696a93c63SKenneth D. Merry #define FU_BFI_FORMAT SRDD10_BYTES_FROM_INDEX_FORMAT 7796a93c63SKenneth D. Merry #define FU_PHYS_FORMAT SRDD10_PHYSICAL_SECTOR_FORMAT 7896a93c63SKenneth D. Merry #define FU_CMPLST 0x08 7996a93c63SKenneth D. Merry #define FU_FMT_DATA 0x10 8096a93c63SKenneth D. Merry u_int8_t vendor_specific; 8196a93c63SKenneth D. Merry u_int8_t interleave[2]; 8296a93c63SKenneth D. Merry u_int8_t control; 8396a93c63SKenneth D. Merry }; 8496a93c63SKenneth D. Merry 8576babe50SJustin T. Gibbs struct scsi_reassign_blocks 8676babe50SJustin T. Gibbs { 8776babe50SJustin T. Gibbs u_int8_t opcode; 8876babe50SJustin T. Gibbs u_int8_t byte2; 8976babe50SJustin T. Gibbs u_int8_t unused[3]; 9076babe50SJustin T. Gibbs u_int8_t control; 9176babe50SJustin T. Gibbs }; 9276babe50SJustin T. Gibbs 9376babe50SJustin T. Gibbs struct scsi_read_defect_data_10 9476babe50SJustin T. Gibbs { 95d70698b3SAlexander Motin uint8_t opcode; 96d70698b3SAlexander Motin uint8_t byte2; 9776babe50SJustin T. Gibbs #define SRDD10_GLIST 0x08 9876babe50SJustin T. Gibbs #define SRDD10_PLIST 0x10 9976babe50SJustin T. Gibbs #define SRDD10_DLIST_FORMAT_MASK 0x07 10076babe50SJustin T. Gibbs #define SRDD10_BLOCK_FORMAT 0x00 101a1736be3SKenneth D. Merry #define SRDD10_EXT_BFI_FORMAT 0x01 102a1736be3SKenneth D. Merry #define SRDD10_EXT_PHYS_FORMAT 0x02 103a1736be3SKenneth D. Merry #define SRDD10_LONG_BLOCK_FORMAT 0x03 10476babe50SJustin T. Gibbs #define SRDD10_BYTES_FROM_INDEX_FORMAT 0x04 10576babe50SJustin T. Gibbs #define SRDD10_PHYSICAL_SECTOR_FORMAT 0x05 106a1736be3SKenneth D. Merry #define SRDD10_VENDOR_FORMAT 0x06 107d70698b3SAlexander Motin uint8_t format; 108d70698b3SAlexander Motin uint8_t reserved[4]; 109d70698b3SAlexander Motin uint8_t alloc_length[2]; 1107027b9cdSKenneth D. Merry #define SRDD10_MAX_LENGTH 0xffff 111d70698b3SAlexander Motin uint8_t control; 11276babe50SJustin T. Gibbs }; 11376babe50SJustin T. Gibbs 114ffead710SBryan Venteicher struct scsi_sanitize 115ffead710SBryan Venteicher { 116ffead710SBryan Venteicher u_int8_t opcode; 117ffead710SBryan Venteicher u_int8_t byte2; 118ffead710SBryan Venteicher #define SSZ_SERVICE_ACTION_OVERWRITE 0x01 119ffead710SBryan Venteicher #define SSZ_SERVICE_ACTION_BLOCK_ERASE 0x02 120ffead710SBryan Venteicher #define SSZ_SERVICE_ACTION_CRYPTO_ERASE 0x03 121ffead710SBryan Venteicher #define SSZ_SERVICE_ACTION_EXIT_MODE_FAILURE 0x1F 122ffead710SBryan Venteicher #define SSZ_UNRESTRICTED_EXIT 0x20 123ffead710SBryan Venteicher #define SSZ_IMMED 0x80 124ffead710SBryan Venteicher u_int8_t reserved[5]; 125ffead710SBryan Venteicher u_int8_t length[2]; 126ffead710SBryan Venteicher u_int8_t control; 127ffead710SBryan Venteicher }; 128ffead710SBryan Venteicher 129ffead710SBryan Venteicher struct scsi_sanitize_parameter_list 130ffead710SBryan Venteicher { 131ffead710SBryan Venteicher u_int8_t byte1; 132ffead710SBryan Venteicher #define SSZPL_INVERT 0x80 133ffead710SBryan Venteicher u_int8_t reserved; 134ffead710SBryan Venteicher u_int8_t length[2]; 135ffead710SBryan Venteicher /* Variable length initialization pattern. */ 136ffead710SBryan Venteicher #define SSZPL_MAX_PATTERN_LENGTH 65535 137ffead710SBryan Venteicher }; 138ffead710SBryan Venteicher 13976babe50SJustin T. Gibbs struct scsi_read_defect_data_12 14076babe50SJustin T. Gibbs { 141d70698b3SAlexander Motin uint8_t opcode; 14276babe50SJustin T. Gibbs #define SRDD12_GLIST 0x08 14376babe50SJustin T. Gibbs #define SRDD12_PLIST 0x10 14476babe50SJustin T. Gibbs #define SRDD12_DLIST_FORMAT_MASK 0x07 145a1736be3SKenneth D. Merry #define SRDD12_BLOCK_FORMAT SRDD10_BLOCK_FORMAT 146a1736be3SKenneth D. Merry #define SRDD12_BYTES_FROM_INDEX_FORMAT SRDD10_BYTES_FROM_INDEX_FORMAT 147a1736be3SKenneth D. Merry #define SRDD12_PHYSICAL_SECTOR_FORMAT SRDD10_PHYSICAL_SECTOR_FORMAT 148d70698b3SAlexander Motin uint8_t format; 149d70698b3SAlexander Motin uint8_t address_descriptor_index[4]; 150d70698b3SAlexander Motin uint8_t alloc_length[4]; 151a1736be3SKenneth D. Merry #define SRDD12_MAX_LENGTH 0xffffffff 152d70698b3SAlexander Motin uint8_t reserved; 153d70698b3SAlexander Motin uint8_t control; 15476babe50SJustin T. Gibbs }; 15576babe50SJustin T. Gibbs 1569a6844d5SKenneth D. Merry struct scsi_zbc_out 1579a6844d5SKenneth D. Merry { 1589a6844d5SKenneth D. Merry uint8_t opcode; 1599a6844d5SKenneth D. Merry uint8_t service_action; 1609a6844d5SKenneth D. Merry #define ZBC_OUT_SA_CLOSE 0x01 1619a6844d5SKenneth D. Merry #define ZBC_OUT_SA_FINISH 0x02 1629a6844d5SKenneth D. Merry #define ZBC_OUT_SA_OPEN 0x03 1639a6844d5SKenneth D. Merry #define ZBC_OUT_SA_RWP 0x04 1649a6844d5SKenneth D. Merry uint8_t zone_id[8]; 1659a6844d5SKenneth D. Merry uint8_t reserved[4]; 1669a6844d5SKenneth D. Merry uint8_t zone_flags; 1679a6844d5SKenneth D. Merry #define ZBC_OUT_ALL 0x01 1689a6844d5SKenneth D. Merry uint8_t control; 1699a6844d5SKenneth D. Merry }; 1709a6844d5SKenneth D. Merry 1719a6844d5SKenneth D. Merry struct scsi_zbc_in 1729a6844d5SKenneth D. Merry { 1739a6844d5SKenneth D. Merry uint8_t opcode; 1749a6844d5SKenneth D. Merry uint8_t service_action; 1759a6844d5SKenneth D. Merry #define ZBC_IN_SA_REPORT_ZONES 0x00 1769a6844d5SKenneth D. Merry uint8_t zone_start_lba[8]; 1779a6844d5SKenneth D. Merry uint8_t length[4]; 1789a6844d5SKenneth D. Merry uint8_t zone_options; 1799a6844d5SKenneth D. Merry #define ZBC_IN_PARTIAL 0x80 1809a6844d5SKenneth D. Merry #define ZBC_IN_REP_ALL_ZONES 0x00 1819a6844d5SKenneth D. Merry #define ZBC_IN_REP_EMPTY 0x01 1829a6844d5SKenneth D. Merry #define ZBC_IN_REP_IMP_OPEN 0x02 1839a6844d5SKenneth D. Merry #define ZBC_IN_REP_EXP_OPEN 0x03 1849a6844d5SKenneth D. Merry #define ZBC_IN_REP_CLOSED 0x04 1859a6844d5SKenneth D. Merry #define ZBC_IN_REP_FULL 0x05 1869a6844d5SKenneth D. Merry #define ZBC_IN_REP_READONLY 0x06 1879a6844d5SKenneth D. Merry #define ZBC_IN_REP_OFFLINE 0x07 1889a6844d5SKenneth D. Merry #define ZBC_IN_REP_RESET 0x10 1899a6844d5SKenneth D. Merry #define ZBC_IN_REP_NON_SEQ 0x11 1909a6844d5SKenneth D. Merry #define ZBC_IN_REP_NON_WP 0x3f 1919a6844d5SKenneth D. Merry #define ZBC_IN_REP_MASK 0x3f 1929a6844d5SKenneth D. Merry uint8_t control; 1939a6844d5SKenneth D. Merry }; 1949a6844d5SKenneth D. Merry 1959a6844d5SKenneth D. Merry struct scsi_report_zones_desc { 1969a6844d5SKenneth D. Merry uint8_t zone_type; 1979a6844d5SKenneth D. Merry #define SRZ_TYPE_CONVENTIONAL 0x01 1989a6844d5SKenneth D. Merry #define SRZ_TYPE_SEQ_REQUIRED 0x02 1999a6844d5SKenneth D. Merry #define SRZ_TYPE_SEQ_PREFERRED 0x03 2009a6844d5SKenneth D. Merry #define SRZ_TYPE_MASK 0x0f 2019a6844d5SKenneth D. Merry uint8_t zone_flags; 2029a6844d5SKenneth D. Merry #define SRZ_ZONE_COND_SHIFT 4 2039a6844d5SKenneth D. Merry #define SRZ_ZONE_COND_MASK 0xf0 2049a6844d5SKenneth D. Merry #define SRZ_ZONE_COND_NWP 0x00 2059a6844d5SKenneth D. Merry #define SRZ_ZONE_COND_EMPTY 0x10 2069a6844d5SKenneth D. Merry #define SRZ_ZONE_COND_IMP_OPEN 0x20 2079a6844d5SKenneth D. Merry #define SRZ_ZONE_COND_EXP_OPEN 0x30 2089a6844d5SKenneth D. Merry #define SRZ_ZONE_COND_CLOSED 0x40 2099a6844d5SKenneth D. Merry #define SRZ_ZONE_COND_READONLY 0xd0 2109a6844d5SKenneth D. Merry #define SRZ_ZONE_COND_FULL 0xe0 2119a6844d5SKenneth D. Merry #define SRZ_ZONE_COND_OFFLINE 0xf0 2129a6844d5SKenneth D. Merry #define SRZ_ZONE_NON_SEQ 0x02 2139a6844d5SKenneth D. Merry #define SRZ_ZONE_RESET 0x01 2149a6844d5SKenneth D. Merry uint8_t reserved[6]; 2159a6844d5SKenneth D. Merry uint8_t zone_length[8]; 2169a6844d5SKenneth D. Merry uint8_t zone_start_lba[8]; 2179a6844d5SKenneth D. Merry uint8_t write_pointer_lba[8]; 2189a6844d5SKenneth D. Merry uint8_t reserved2[32]; 2199a6844d5SKenneth D. Merry }; 2209a6844d5SKenneth D. Merry 2219a6844d5SKenneth D. Merry struct scsi_report_zones_hdr { 2229a6844d5SKenneth D. Merry uint8_t length[4]; 2239a6844d5SKenneth D. Merry uint8_t byte4; 2249a6844d5SKenneth D. Merry #define SRZ_SAME_ALL_DIFFERENT 0x00 /* Lengths and types vary */ 2259a6844d5SKenneth D. Merry #define SRZ_SAME_ALL_SAME 0x01 /* Lengths and types the same */ 2269a6844d5SKenneth D. Merry #define SRZ_SAME_LAST_DIFFERENT 0x02 /* Types same, last length varies */ 2279a6844d5SKenneth D. Merry #define SRZ_SAME_TYPES_DIFFERENT 0x03 /* Types vary, length the same */ 2289a6844d5SKenneth D. Merry #define SRZ_SAME_MASK 0x0f 2299a6844d5SKenneth D. Merry uint8_t reserved[3]; 2309a6844d5SKenneth D. Merry uint8_t maximum_lba[8]; 2319a6844d5SKenneth D. Merry uint8_t reserved2[48]; 2329a6844d5SKenneth D. Merry struct scsi_report_zones_desc desc_list[]; 2339a6844d5SKenneth D. Merry }; 23476babe50SJustin T. Gibbs 23576babe50SJustin T. Gibbs /* 23676babe50SJustin T. Gibbs * Opcodes 23776babe50SJustin T. Gibbs */ 23876babe50SJustin T. Gibbs #define REZERO_UNIT 0x01 23996a93c63SKenneth D. Merry #define FORMAT_UNIT 0x04 24076babe50SJustin T. Gibbs #define REASSIGN_BLOCKS 0x07 24176babe50SJustin T. Gibbs #define MODE_SELECT 0x15 24276babe50SJustin T. Gibbs #define MODE_SENSE 0x1a 243c68a9309SBruce M Simpson #define READ_FORMAT_CAPACITIES 0x23 244c68a9309SBruce M Simpson #define WRITE_AND_VERIFY 0x2e 245c68a9309SBruce M Simpson #define VERIFY 0x2f 24676babe50SJustin T. Gibbs #define READ_DEFECT_DATA_10 0x37 247ffead710SBryan Venteicher #define SANITIZE 0x48 2489a6844d5SKenneth D. Merry #define ZBC_OUT 0x94 2499a6844d5SKenneth D. Merry #define ZBC_IN 0x95 25076babe50SJustin T. Gibbs #define READ_DEFECT_DATA_12 0xb7 25176babe50SJustin T. Gibbs 25296a93c63SKenneth D. Merry struct format_defect_list_header 25396a93c63SKenneth D. Merry { 25496a93c63SKenneth D. Merry u_int8_t reserved; 25596a93c63SKenneth D. Merry u_int8_t byte2; 25696a93c63SKenneth D. Merry #define FU_DLH_VS 0x01 25796a93c63SKenneth D. Merry #define FU_DLH_IMMED 0x02 25896a93c63SKenneth D. Merry #define FU_DLH_DSP 0x04 25996a93c63SKenneth D. Merry #define FU_DLH_IP 0x08 26096a93c63SKenneth D. Merry #define FU_DLH_STPF 0x10 26196a93c63SKenneth D. Merry #define FU_DLH_DCRT 0x20 26296a93c63SKenneth D. Merry #define FU_DLH_DPRY 0x40 26396a93c63SKenneth D. Merry #define FU_DLH_FOV 0x80 26496a93c63SKenneth D. Merry u_int8_t defect_list_length[2]; 26596a93c63SKenneth D. Merry }; 26696a93c63SKenneth D. Merry 26796a93c63SKenneth D. Merry struct format_ipat_descriptor 26896a93c63SKenneth D. Merry { 26996a93c63SKenneth D. Merry u_int8_t byte1; 27096a93c63SKenneth D. Merry #define FU_INIT_NO_HDR 0x00 27196a93c63SKenneth D. Merry #define FU_INIT_LBA_MSB 0x40 27296a93c63SKenneth D. Merry #define FU_INIT_LBA_EACH 0x80 27396a93c63SKenneth D. Merry #define FU_INIT_SI 0x20 27496a93c63SKenneth D. Merry u_int8_t pattern_type; 27596a93c63SKenneth D. Merry #define FU_INIT_PAT_DEFAULT 0x00 27696a93c63SKenneth D. Merry #define FU_INIT_PAT_REPEAT 0x01 27796a93c63SKenneth D. Merry u_int8_t pat_length[2]; 27896a93c63SKenneth D. Merry }; 27976babe50SJustin T. Gibbs 280c68a9309SBruce M Simpson struct scsi_read_format_capacities 281c68a9309SBruce M Simpson { 282c68a9309SBruce M Simpson uint8_t opcode; /* READ_FORMAT_CAPACITIES */ 28323e0012dSBruce M Simpson uint8_t byte2; 284c68a9309SBruce M Simpson #define SRFC_LUN_MASK 0xE0 285c68a9309SBruce M Simpson uint8_t reserved0[5]; 286c68a9309SBruce M Simpson uint8_t alloc_length[2]; 287c68a9309SBruce M Simpson uint8_t reserved1[3]; 288c68a9309SBruce M Simpson }; 289c68a9309SBruce M Simpson 29011b569f7SAlexander Motin struct scsi_verify_10 291c68a9309SBruce M Simpson { 29211b569f7SAlexander Motin uint8_t opcode; /* VERIFY(10) */ 29323e0012dSBruce M Simpson uint8_t byte2; 29423e0012dSBruce M Simpson #define SVFY_LUN_MASK 0xE0 295c68a9309SBruce M Simpson #define SVFY_RELADR 0x01 29611b569f7SAlexander Motin #define SVFY_BYTCHK 0x02 297c68a9309SBruce M Simpson #define SVFY_DPO 0x10 298c68a9309SBruce M Simpson uint8_t addr[4]; /* LBA to begin verification at */ 29911b569f7SAlexander Motin uint8_t group; 30011b569f7SAlexander Motin uint8_t length[2]; /* number of blocks to verify */ 30111b569f7SAlexander Motin uint8_t control; 30211b569f7SAlexander Motin }; 30311b569f7SAlexander Motin 30411b569f7SAlexander Motin struct scsi_verify_12 30511b569f7SAlexander Motin { 30611b569f7SAlexander Motin uint8_t opcode; /* VERIFY(12) */ 30711b569f7SAlexander Motin uint8_t byte2; 30811b569f7SAlexander Motin uint8_t addr[4]; /* LBA to begin verification at */ 30911b569f7SAlexander Motin uint8_t length[4]; /* number of blocks to verify */ 31011b569f7SAlexander Motin uint8_t group; 31111b569f7SAlexander Motin uint8_t control; 31211b569f7SAlexander Motin }; 31311b569f7SAlexander Motin 31411b569f7SAlexander Motin struct scsi_verify_16 31511b569f7SAlexander Motin { 31611b569f7SAlexander Motin uint8_t opcode; /* VERIFY(16) */ 31711b569f7SAlexander Motin uint8_t byte2; 31811b569f7SAlexander Motin uint8_t addr[8]; /* LBA to begin verification at */ 31911b569f7SAlexander Motin uint8_t length[4]; /* number of blocks to verify */ 32011b569f7SAlexander Motin uint8_t group; 32111b569f7SAlexander Motin uint8_t control; 32211b569f7SAlexander Motin }; 32311b569f7SAlexander Motin 32411b569f7SAlexander Motin struct scsi_compare_and_write 32511b569f7SAlexander Motin { 32611b569f7SAlexander Motin uint8_t opcode; /* COMPARE AND WRITE */ 32711b569f7SAlexander Motin uint8_t byte2; 32811b569f7SAlexander Motin uint8_t addr[8]; /* LBA to begin verification at */ 32911b569f7SAlexander Motin uint8_t reserved[3]; 33011b569f7SAlexander Motin uint8_t length; /* number of blocks */ 33111b569f7SAlexander Motin uint8_t group; 33211b569f7SAlexander Motin uint8_t control; 333c68a9309SBruce M Simpson }; 334c68a9309SBruce M Simpson 335c68a9309SBruce M Simpson struct scsi_write_and_verify 336c68a9309SBruce M Simpson { 337c68a9309SBruce M Simpson uint8_t opcode; /* WRITE_AND_VERIFY */ 33823e0012dSBruce M Simpson uint8_t byte2; 339c68a9309SBruce M Simpson #define SWVY_LUN_MASK 0xE0 340c68a9309SBruce M Simpson #define SWVY_RELADR 0x01 341c68a9309SBruce M Simpson #define SWVY_BYTECHK 0x02 342c68a9309SBruce M Simpson #define SWVY_DPO 0x10 343c68a9309SBruce M Simpson uint8_t addr[4]; /* LBA to begin verification at */ 344c68a9309SBruce M Simpson uint8_t reserved0[1]; 345c68a9309SBruce M Simpson uint8_t len[2]; /* number of blocks to write and verify */ 346c68a9309SBruce M Simpson uint8_t reserved1[3]; 347c68a9309SBruce M Simpson }; 348c68a9309SBruce M Simpson 349c68a9309SBruce M Simpson /* 350c68a9309SBruce M Simpson * Replies to READ_FORMAT_CAPACITIES look like this: 351c68a9309SBruce M Simpson * 352c68a9309SBruce M Simpson * struct format_capacity_list_header 353c68a9309SBruce M Simpson * struct format_capacity_descriptor[1..n] 354c68a9309SBruce M Simpson * 355c68a9309SBruce M Simpson * These are similar, but not totally identical to, the 356c68a9309SBruce M Simpson * defect list used to format a rigid disk. 357c68a9309SBruce M Simpson * 358c68a9309SBruce M Simpson * The appropriate csio_decode() format string looks like this: 359c68a9309SBruce M Simpson * "{} *i3 {Len} i1 {Blocks} i4 {} *b6 {Code} b2 {Blocklen} i3" 360c68a9309SBruce M Simpson * 361c68a9309SBruce M Simpson * If the capacity_list_length is greater than 362c68a9309SBruce M Simpson * sizeof(struct format_capacity_descriptor), then there are 363c68a9309SBruce M Simpson * additional format capacity descriptors available which 364c68a9309SBruce M Simpson * denote which format(s) the drive can handle. 365c68a9309SBruce M Simpson * 366c68a9309SBruce M Simpson * (Source: USB Mass Storage UFI Specification) 367c68a9309SBruce M Simpson */ 368c68a9309SBruce M Simpson 369c68a9309SBruce M Simpson struct format_capacity_list_header { 370c68a9309SBruce M Simpson uint8_t unused[3]; 371c68a9309SBruce M Simpson uint8_t capacity_list_length; 372c68a9309SBruce M Simpson }; 373c68a9309SBruce M Simpson 374c68a9309SBruce M Simpson struct format_capacity_descriptor { 375c68a9309SBruce M Simpson uint8_t nblocks[4]; /* total number of LBAs */ 376c68a9309SBruce M Simpson uint8_t byte4; /* only present in max/cur descriptor */ 377c68a9309SBruce M Simpson #define FCD_CODE_MASK 0x03 /* mask for code field above */ 378c68a9309SBruce M Simpson #define FCD_UNFORMATTED 0x01 /* unformatted media present, 379c68a9309SBruce M Simpson * maximum capacity returned */ 380c68a9309SBruce M Simpson #define FCD_FORMATTED 0x02 /* formatted media present, 381c68a9309SBruce M Simpson * current capacity returned */ 382c68a9309SBruce M Simpson #define FCD_NOMEDIA 0x03 /* no media present, 383c68a9309SBruce M Simpson * maximum device capacity returned */ 384c68a9309SBruce M Simpson uint8_t block_length[3]; /* length of an LBA in bytes */ 385c68a9309SBruce M Simpson }; 386c68a9309SBruce M Simpson 38776babe50SJustin T. Gibbs struct scsi_reassign_blocks_data 38876babe50SJustin T. Gibbs { 38976babe50SJustin T. Gibbs u_int8_t reserved[2]; 39076babe50SJustin T. Gibbs u_int8_t length[2]; 39176babe50SJustin T. Gibbs struct { 39276babe50SJustin T. Gibbs u_int8_t dlbaddr[4]; /* defect logical block address */ 39376babe50SJustin T. Gibbs } defect_descriptor[1]; 39476babe50SJustin T. Gibbs }; 39576babe50SJustin T. Gibbs 39676babe50SJustin T. Gibbs 39776babe50SJustin T. Gibbs /* 39876babe50SJustin T. Gibbs * This is the list header for the READ DEFECT DATA(10) command above. 39976babe50SJustin T. Gibbs * It may be a bit wrong to append the 10 at the end of the data structure, 40076babe50SJustin T. Gibbs * since it's only 4 bytes but it does tie it to the 10 byte command. 40176babe50SJustin T. Gibbs */ 40276babe50SJustin T. Gibbs struct scsi_read_defect_data_hdr_10 40376babe50SJustin T. Gibbs { 40476babe50SJustin T. Gibbs u_int8_t reserved; 40576babe50SJustin T. Gibbs #define SRDDH10_GLIST 0x08 40676babe50SJustin T. Gibbs #define SRDDH10_PLIST 0x10 40776babe50SJustin T. Gibbs #define SRDDH10_DLIST_FORMAT_MASK 0x07 40876babe50SJustin T. Gibbs #define SRDDH10_BLOCK_FORMAT 0x00 40976babe50SJustin T. Gibbs #define SRDDH10_BYTES_FROM_INDEX_FORMAT 0x04 41076babe50SJustin T. Gibbs #define SRDDH10_PHYSICAL_SECTOR_FORMAT 0x05 41176babe50SJustin T. Gibbs u_int8_t format; 41276babe50SJustin T. Gibbs u_int8_t length[2]; 413a1736be3SKenneth D. Merry #define SRDDH10_MAX_LENGTH SRDD10_MAX_LENGTH - \ 414a1736be3SKenneth D. Merry sizeof(struct scsi_read_defect_data_hdr_10) 41576babe50SJustin T. Gibbs }; 41676babe50SJustin T. Gibbs 41776babe50SJustin T. Gibbs struct scsi_defect_desc_block 41876babe50SJustin T. Gibbs { 41976babe50SJustin T. Gibbs u_int8_t address[4]; 42076babe50SJustin T. Gibbs }; 42176babe50SJustin T. Gibbs 422a1736be3SKenneth D. Merry struct scsi_defect_desc_long_block 423a1736be3SKenneth D. Merry { 424a1736be3SKenneth D. Merry u_int8_t address[8]; 425a1736be3SKenneth D. Merry }; 426a1736be3SKenneth D. Merry 42776babe50SJustin T. Gibbs struct scsi_defect_desc_bytes_from_index 42876babe50SJustin T. Gibbs { 42976babe50SJustin T. Gibbs u_int8_t cylinder[3]; 43076babe50SJustin T. Gibbs u_int8_t head; 431a1736be3SKenneth D. Merry #define SDD_EXT_BFI_MADS 0x80000000 432a1736be3SKenneth D. Merry #define SDD_EXT_BFI_FLAG_MASK 0xf0000000 433a1736be3SKenneth D. Merry #define SDD_EXT_BFI_ENTIRE_TRACK 0x0fffffff 43476babe50SJustin T. Gibbs u_int8_t bytes_from_index[4]; 43576babe50SJustin T. Gibbs }; 43676babe50SJustin T. Gibbs 43776babe50SJustin T. Gibbs struct scsi_defect_desc_phys_sector 43876babe50SJustin T. Gibbs { 43976babe50SJustin T. Gibbs u_int8_t cylinder[3]; 44076babe50SJustin T. Gibbs u_int8_t head; 441a1736be3SKenneth D. Merry #define SDD_EXT_PHYS_MADS 0x80000000 442a1736be3SKenneth D. Merry #define SDD_EXT_PHYS_FLAG_MASK 0xf0000000 443a1736be3SKenneth D. Merry #define SDD_EXT_PHYS_ENTIRE_TRACK 0x0fffffff 44476babe50SJustin T. Gibbs u_int8_t sector[4]; 44576babe50SJustin T. Gibbs }; 44676babe50SJustin T. Gibbs 44776babe50SJustin T. Gibbs struct scsi_read_defect_data_hdr_12 44876babe50SJustin T. Gibbs { 44976babe50SJustin T. Gibbs u_int8_t reserved; 45076babe50SJustin T. Gibbs #define SRDDH12_GLIST 0x08 45176babe50SJustin T. Gibbs #define SRDDH12_PLIST 0x10 45276babe50SJustin T. Gibbs #define SRDDH12_DLIST_FORMAT_MASK 0x07 45376babe50SJustin T. Gibbs #define SRDDH12_BLOCK_FORMAT 0x00 45476babe50SJustin T. Gibbs #define SRDDH12_BYTES_FROM_INDEX_FORMAT 0x04 45576babe50SJustin T. Gibbs #define SRDDH12_PHYSICAL_SECTOR_FORMAT 0x05 45676babe50SJustin T. Gibbs u_int8_t format; 457d70698b3SAlexander Motin u_int8_t generation[2]; 45876babe50SJustin T. Gibbs u_int8_t length[4]; 459a1736be3SKenneth D. Merry #define SRDDH12_MAX_LENGTH SRDD12_MAX_LENGTH - \ 460a1736be3SKenneth D. Merry sizeof(struct scsi_read_defect_data_hdr_12) 46176babe50SJustin T. Gibbs }; 46276babe50SJustin T. Gibbs 46376babe50SJustin T. Gibbs union disk_pages /* this is the structure copied from osf */ 46476babe50SJustin T. Gibbs { 46576babe50SJustin T. Gibbs struct format_device_page { 46676babe50SJustin T. Gibbs u_int8_t pg_code; /* page code (should be 3) */ 46776babe50SJustin T. Gibbs #define SMS_FORMAT_DEVICE_PAGE 0x03 /* only 6 bits valid */ 46876babe50SJustin T. Gibbs u_int8_t pg_length; /* page length (should be 0x16) */ 46976babe50SJustin T. Gibbs #define SMS_FORMAT_DEVICE_PLEN 0x16 47076babe50SJustin T. Gibbs u_int8_t trk_z_1; /* tracks per zone (MSB) */ 47176babe50SJustin T. Gibbs u_int8_t trk_z_0; /* tracks per zone (LSB) */ 47276babe50SJustin T. Gibbs u_int8_t alt_sec_1; /* alternate sectors per zone (MSB) */ 47376babe50SJustin T. Gibbs u_int8_t alt_sec_0; /* alternate sectors per zone (LSB) */ 47476babe50SJustin T. Gibbs u_int8_t alt_trk_z_1; /* alternate tracks per zone (MSB) */ 47576babe50SJustin T. Gibbs u_int8_t alt_trk_z_0; /* alternate tracks per zone (LSB) */ 47676babe50SJustin T. Gibbs u_int8_t alt_trk_v_1; /* alternate tracks per volume (MSB) */ 47776babe50SJustin T. Gibbs u_int8_t alt_trk_v_0; /* alternate tracks per volume (LSB) */ 47876babe50SJustin T. Gibbs u_int8_t ph_sec_t_1; /* physical sectors per track (MSB) */ 47976babe50SJustin T. Gibbs u_int8_t ph_sec_t_0; /* physical sectors per track (LSB) */ 48076babe50SJustin T. Gibbs u_int8_t bytes_s_1; /* bytes per sector (MSB) */ 48176babe50SJustin T. Gibbs u_int8_t bytes_s_0; /* bytes per sector (LSB) */ 48276babe50SJustin T. Gibbs u_int8_t interleave_1; /* interleave (MSB) */ 48376babe50SJustin T. Gibbs u_int8_t interleave_0; /* interleave (LSB) */ 48476babe50SJustin T. Gibbs u_int8_t trk_skew_1; /* track skew factor (MSB) */ 48576babe50SJustin T. Gibbs u_int8_t trk_skew_0; /* track skew factor (LSB) */ 48676babe50SJustin T. Gibbs u_int8_t cyl_skew_1; /* cylinder skew (MSB) */ 48776babe50SJustin T. Gibbs u_int8_t cyl_skew_0; /* cylinder skew (LSB) */ 48876babe50SJustin T. Gibbs u_int8_t flags; /* various */ 48976babe50SJustin T. Gibbs #define DISK_FMT_SURF 0x10 49076babe50SJustin T. Gibbs #define DISK_FMT_RMB 0x20 49176babe50SJustin T. Gibbs #define DISK_FMT_HSEC 0x40 49276babe50SJustin T. Gibbs #define DISK_FMT_SSEC 0x80 49376babe50SJustin T. Gibbs u_int8_t reserved21; 49476babe50SJustin T. Gibbs u_int8_t reserved22; 49576babe50SJustin T. Gibbs u_int8_t reserved23; 49676babe50SJustin T. Gibbs } format_device; 49776babe50SJustin T. Gibbs struct rigid_geometry_page { 49876babe50SJustin T. Gibbs u_int8_t pg_code; /* page code (should be 4) */ 49976babe50SJustin T. Gibbs #define SMS_RIGID_GEOMETRY_PAGE 0x04 50076babe50SJustin T. Gibbs u_int8_t pg_length; /* page length (should be 0x16) */ 50176babe50SJustin T. Gibbs #define SMS_RIGID_GEOMETRY_PLEN 0x16 50276babe50SJustin T. Gibbs u_int8_t ncyl_2; /* number of cylinders (MSB) */ 50376babe50SJustin T. Gibbs u_int8_t ncyl_1; /* number of cylinders */ 50476babe50SJustin T. Gibbs u_int8_t ncyl_0; /* number of cylinders (LSB) */ 50576babe50SJustin T. Gibbs u_int8_t nheads; /* number of heads */ 50676babe50SJustin T. Gibbs u_int8_t st_cyl_wp_2; /* starting cyl., write precomp (MSB) */ 50776babe50SJustin T. Gibbs u_int8_t st_cyl_wp_1; /* starting cyl., write precomp */ 50876babe50SJustin T. Gibbs u_int8_t st_cyl_wp_0; /* starting cyl., write precomp (LSB) */ 50976babe50SJustin T. Gibbs u_int8_t st_cyl_rwc_2; /* starting cyl., red. write cur (MSB)*/ 51076babe50SJustin T. Gibbs u_int8_t st_cyl_rwc_1; /* starting cyl., red. write cur */ 51176babe50SJustin T. Gibbs u_int8_t st_cyl_rwc_0; /* starting cyl., red. write cur (LSB)*/ 51276babe50SJustin T. Gibbs u_int8_t driv_step_1; /* drive step rate (MSB) */ 51376babe50SJustin T. Gibbs u_int8_t driv_step_0; /* drive step rate (LSB) */ 51476babe50SJustin T. Gibbs u_int8_t land_zone_2; /* landing zone cylinder (MSB) */ 51576babe50SJustin T. Gibbs u_int8_t land_zone_1; /* landing zone cylinder */ 51676babe50SJustin T. Gibbs u_int8_t land_zone_0; /* landing zone cylinder (LSB) */ 51776babe50SJustin T. Gibbs u_int8_t rpl; /* rotational position locking (2 bits) */ 51876babe50SJustin T. Gibbs u_int8_t rot_offset; /* rotational offset */ 51976babe50SJustin T. Gibbs u_int8_t reserved19; 52076babe50SJustin T. Gibbs u_int8_t medium_rot_rate_1; /* medium rotation rate (RPM) (MSB) */ 52176babe50SJustin T. Gibbs u_int8_t medium_rot_rate_0; /* medium rotation rate (RPM) (LSB) */ 52276babe50SJustin T. Gibbs u_int8_t reserved22; 52376babe50SJustin T. Gibbs u_int8_t reserved23; 52476babe50SJustin T. Gibbs } rigid_geometry; 52576babe50SJustin T. Gibbs struct flexible_disk_page { 52676babe50SJustin T. Gibbs u_int8_t pg_code; /* page code (should be 5) */ 52776babe50SJustin T. Gibbs #define SMS_FLEXIBLE_GEOMETRY_PAGE 0x05 52876babe50SJustin T. Gibbs u_int8_t pg_length; /* page length (should be 0x1E) */ 5290cdabce0SNick Hibma #define SMS_FLEXIBLE_GEOMETRY_PLEN 0x1E 53076babe50SJustin T. Gibbs u_int8_t xfr_rate_1; /* transfer rate (MSB) */ 53176babe50SJustin T. Gibbs u_int8_t xfr_rate_0; /* transfer rate (LSB) */ 53276babe50SJustin T. Gibbs u_int8_t nheads; /* number of heads */ 53376babe50SJustin T. Gibbs u_int8_t sec_per_track; /* Sectors per track */ 53476babe50SJustin T. Gibbs u_int8_t bytes_s_1; /* bytes per sector (MSB) */ 53576babe50SJustin T. Gibbs u_int8_t bytes_s_0; /* bytes per sector (LSB) */ 53676babe50SJustin T. Gibbs u_int8_t ncyl_1; /* number of cylinders (MSB) */ 53776babe50SJustin T. Gibbs u_int8_t ncyl_0; /* number of cylinders (LSB) */ 53876babe50SJustin T. Gibbs u_int8_t st_cyl_wp_1; /* starting cyl., write precomp (MSB) */ 53976babe50SJustin T. Gibbs u_int8_t st_cyl_wp_0; /* starting cyl., write precomp (LSB) */ 54076babe50SJustin T. Gibbs u_int8_t st_cyl_rwc_1; /* starting cyl., red. write cur (MSB)*/ 54176babe50SJustin T. Gibbs u_int8_t st_cyl_rwc_0; /* starting cyl., red. write cur (LSB)*/ 54276babe50SJustin T. Gibbs u_int8_t driv_step_1; /* drive step rate (MSB) */ 54376babe50SJustin T. Gibbs u_int8_t driv_step_0; /* drive step rate (LSB) */ 54476babe50SJustin T. Gibbs u_int8_t driv_step_pw; /* drive step pulse width */ 54576babe50SJustin T. Gibbs u_int8_t head_stl_del_1;/* Head settle delay (MSB) */ 54676babe50SJustin T. Gibbs u_int8_t head_stl_del_0;/* Head settle delay (LSB) */ 54776babe50SJustin T. Gibbs u_int8_t motor_on_del; /* Motor on delay */ 54876babe50SJustin T. Gibbs u_int8_t motor_off_del; /* Motor off delay */ 54976babe50SJustin T. Gibbs u_int8_t trdy_ssn_mo; /* XXX ??? */ 55076babe50SJustin T. Gibbs u_int8_t spc; /* XXX ??? */ 55176babe50SJustin T. Gibbs u_int8_t write_comp; /* Write compensation */ 55276babe50SJustin T. Gibbs u_int8_t head_load_del; /* Head load delay */ 55376babe50SJustin T. Gibbs u_int8_t head_uload_del;/* Head un-load delay */ 55476babe50SJustin T. Gibbs u_int8_t pin32_pin2; 55576babe50SJustin T. Gibbs u_int8_t pin4_pint1; 55676babe50SJustin T. Gibbs u_int8_t medium_rot_rate_1; /* medium rotation rate (RPM) (MSB) */ 55776babe50SJustin T. Gibbs u_int8_t medium_rot_rate_0; /* medium rotation rate (RPM) (LSB) */ 55876babe50SJustin T. Gibbs u_int8_t reserved30; 55976babe50SJustin T. Gibbs u_int8_t reserved31; 56076babe50SJustin T. Gibbs } flexible_disk; 56176babe50SJustin T. Gibbs }; 56276babe50SJustin T. Gibbs 563130f4520SKenneth D. Merry /* 564130f4520SKenneth D. Merry * XXX KDM 565130f4520SKenneth D. Merry * Here for CTL compatibility, reconcile this. 566130f4520SKenneth D. Merry */ 567130f4520SKenneth D. Merry struct scsi_format_page { 568130f4520SKenneth D. Merry uint8_t page_code; 569130f4520SKenneth D. Merry uint8_t page_length; 570130f4520SKenneth D. Merry uint8_t tracks_per_zone[2]; 571130f4520SKenneth D. Merry uint8_t alt_sectors_per_zone[2]; 572130f4520SKenneth D. Merry uint8_t alt_tracks_per_zone[2]; 573130f4520SKenneth D. Merry uint8_t alt_tracks_per_lun[2]; 574130f4520SKenneth D. Merry uint8_t sectors_per_track[2]; 575130f4520SKenneth D. Merry uint8_t bytes_per_sector[2]; 576130f4520SKenneth D. Merry uint8_t interleave[2]; 577130f4520SKenneth D. Merry uint8_t track_skew[2]; 578130f4520SKenneth D. Merry uint8_t cylinder_skew[2]; 579130f4520SKenneth D. Merry uint8_t flags; 580130f4520SKenneth D. Merry #define SFP_SSEC 0x80 581130f4520SKenneth D. Merry #define SFP_HSEC 0x40 582130f4520SKenneth D. Merry #define SFP_RMB 0x20 583130f4520SKenneth D. Merry #define SFP_SURF 0x10 584130f4520SKenneth D. Merry uint8_t reserved[3]; 585130f4520SKenneth D. Merry }; 586130f4520SKenneth D. Merry 587130f4520SKenneth D. Merry /* 588130f4520SKenneth D. Merry * XXX KDM 589130f4520SKenneth D. Merry * Here for CTL compatibility, reconcile this. 590130f4520SKenneth D. Merry */ 591130f4520SKenneth D. Merry struct scsi_rigid_disk_page { 592130f4520SKenneth D. Merry uint8_t page_code; 593130f4520SKenneth D. Merry #define SMS_RIGID_DISK_PAGE 0x04 594130f4520SKenneth D. Merry uint8_t page_length; 595130f4520SKenneth D. Merry uint8_t cylinders[3]; 596130f4520SKenneth D. Merry uint8_t heads; 597130f4520SKenneth D. Merry uint8_t start_write_precomp[3]; 598130f4520SKenneth D. Merry uint8_t start_reduced_current[3]; 599130f4520SKenneth D. Merry uint8_t step_rate[2]; 600130f4520SKenneth D. Merry uint8_t landing_zone_cylinder[3]; 601130f4520SKenneth D. Merry uint8_t rpl; 602130f4520SKenneth D. Merry #define SRDP_RPL_DISABLED 0x00 603130f4520SKenneth D. Merry #define SRDP_RPL_SLAVE 0x01 604130f4520SKenneth D. Merry #define SRDP_RPL_MASTER 0x02 605130f4520SKenneth D. Merry #define SRDP_RPL_MASTER_CONTROL 0x03 606130f4520SKenneth D. Merry uint8_t rotational_offset; 607130f4520SKenneth D. Merry uint8_t reserved1; 608130f4520SKenneth D. Merry uint8_t rotation_rate[2]; 609130f4520SKenneth D. Merry uint8_t reserved2[2]; 610130f4520SKenneth D. Merry }; 611130f4520SKenneth D. Merry 612130f4520SKenneth D. Merry 61376babe50SJustin T. Gibbs struct scsi_da_rw_recovery_page { 61476babe50SJustin T. Gibbs u_int8_t page_code; 61576babe50SJustin T. Gibbs #define SMS_RW_ERROR_RECOVERY_PAGE 0x01 61676babe50SJustin T. Gibbs u_int8_t page_length; 61776babe50SJustin T. Gibbs u_int8_t byte3; 61876babe50SJustin T. Gibbs #define SMS_RWER_AWRE 0x80 61976babe50SJustin T. Gibbs #define SMS_RWER_ARRE 0x40 62076babe50SJustin T. Gibbs #define SMS_RWER_TB 0x20 62176babe50SJustin T. Gibbs #define SMS_RWER_RC 0x10 62276babe50SJustin T. Gibbs #define SMS_RWER_EER 0x08 62376babe50SJustin T. Gibbs #define SMS_RWER_PER 0x04 62476babe50SJustin T. Gibbs #define SMS_RWER_DTE 0x02 62576babe50SJustin T. Gibbs #define SMS_RWER_DCR 0x01 62676babe50SJustin T. Gibbs u_int8_t read_retry_count; 62776babe50SJustin T. Gibbs u_int8_t correction_span; 62876babe50SJustin T. Gibbs u_int8_t head_offset_count; 62976babe50SJustin T. Gibbs u_int8_t data_strobe_offset_cnt; 630ec05088bSAlexander Motin u_int8_t byte8; 631ec05088bSAlexander Motin #define SMS_RWER_LBPERE 0x80 63276babe50SJustin T. Gibbs u_int8_t write_retry_count; 63376babe50SJustin T. Gibbs u_int8_t reserved2; 63476babe50SJustin T. Gibbs u_int8_t recovery_time_limit[2]; 63576babe50SJustin T. Gibbs }; 63676babe50SJustin T. Gibbs 637*d9ba4eefSAlexander Motin struct scsi_da_verify_recovery_page { 638*d9ba4eefSAlexander Motin u_int8_t page_code; 639*d9ba4eefSAlexander Motin #define SMS_VERIFY_ERROR_RECOVERY_PAGE 0x07 640*d9ba4eefSAlexander Motin u_int8_t page_length; 641*d9ba4eefSAlexander Motin u_int8_t byte3; 642*d9ba4eefSAlexander Motin #define SMS_VER_EER 0x08 643*d9ba4eefSAlexander Motin #define SMS_VER_PER 0x04 644*d9ba4eefSAlexander Motin #define SMS_VER_DTE 0x02 645*d9ba4eefSAlexander Motin #define SMS_VER_DCR 0x01 646*d9ba4eefSAlexander Motin u_int8_t read_retry_count; 647*d9ba4eefSAlexander Motin u_int8_t reserved[6]; 648*d9ba4eefSAlexander Motin u_int8_t recovery_time_limit[2]; 649*d9ba4eefSAlexander Motin }; 650*d9ba4eefSAlexander Motin 65196a93c63SKenneth D. Merry __BEGIN_DECLS 65296a93c63SKenneth D. Merry /* 653a1736be3SKenneth D. Merry * XXX These are only left out of the kernel build to silence warnings. If, 654a1736be3SKenneth D. Merry * for some reason these functions are used in the kernel, the ifdefs should 655a1736be3SKenneth D. Merry * be moved so they are included both in the kernel and userland. 65696a93c63SKenneth D. Merry */ 65796a93c63SKenneth D. Merry #ifndef _KERNEL 65896a93c63SKenneth D. Merry void scsi_format_unit(struct ccb_scsiio *csio, u_int32_t retries, 65996a93c63SKenneth D. Merry void (*cbfcnp)(struct cam_periph *, union ccb *), 66096a93c63SKenneth D. Merry u_int8_t tag_action, u_int8_t byte2, u_int16_t ileave, 66196a93c63SKenneth D. Merry u_int8_t *data_ptr, u_int32_t dxfer_len, 66296a93c63SKenneth D. Merry u_int8_t sense_len, u_int32_t timeout); 66396a93c63SKenneth D. Merry 664a1736be3SKenneth D. Merry void scsi_read_defects(struct ccb_scsiio *csio, uint32_t retries, 665a1736be3SKenneth D. Merry void (*cbfcnp)(struct cam_periph *, union ccb *), 666a1736be3SKenneth D. Merry uint8_t tag_action, uint8_t list_format, 667a1736be3SKenneth D. Merry uint32_t addr_desc_index, uint8_t *data_ptr, 668a1736be3SKenneth D. Merry uint32_t dxfer_len, int minimum_cmd_size, 669a1736be3SKenneth D. Merry uint8_t sense_len, uint32_t timeout); 670a1736be3SKenneth D. Merry 671ffead710SBryan Venteicher void scsi_sanitize(struct ccb_scsiio *csio, u_int32_t retries, 672ffead710SBryan Venteicher void (*cbfcnp)(struct cam_periph *, union ccb *), 673ffead710SBryan Venteicher u_int8_t tag_action, u_int8_t byte2, u_int16_t control, 674ffead710SBryan Venteicher u_int8_t *data_ptr, u_int32_t dxfer_len, u_int8_t sense_len, 675ffead710SBryan Venteicher u_int32_t timeout); 676ffead710SBryan Venteicher 67796a93c63SKenneth D. Merry #endif /* !_KERNEL */ 6789a6844d5SKenneth D. Merry 6799a6844d5SKenneth D. Merry void scsi_zbc_out(struct ccb_scsiio *csio, uint32_t retries, 6809a6844d5SKenneth D. Merry void (*cbfcnp)(struct cam_periph *, union ccb *), 6819a6844d5SKenneth D. Merry uint8_t tag_action, uint8_t service_action, uint64_t zone_id, 6829a6844d5SKenneth D. Merry uint8_t zone_flags, uint8_t *data_ptr, uint32_t dxfer_len, 6839a6844d5SKenneth D. Merry uint8_t sense_len, uint32_t timeout); 6849a6844d5SKenneth D. Merry 6859a6844d5SKenneth D. Merry void scsi_zbc_in(struct ccb_scsiio *csio, uint32_t retries, 6869a6844d5SKenneth D. Merry void (*cbfcnp)(struct cam_periph *, union ccb *), 6879a6844d5SKenneth D. Merry uint8_t tag_action, uint8_t service_action, 6889a6844d5SKenneth D. Merry uint64_t zone_start_lba, uint8_t zone_options, 6899a6844d5SKenneth D. Merry uint8_t *data_ptr, uint32_t dxfer_len, uint8_t sense_len, 6909a6844d5SKenneth D. Merry uint32_t timeout); 6919a6844d5SKenneth D. Merry 6929a6844d5SKenneth D. Merry int scsi_ata_zac_mgmt_out(struct ccb_scsiio *csio, uint32_t retries, 6939a6844d5SKenneth D. Merry void (*cbfcnp)(struct cam_periph *, union ccb *), 6949a6844d5SKenneth D. Merry uint8_t tag_action, int use_ncq, 6959a6844d5SKenneth D. Merry uint8_t zm_action, uint64_t zone_id, 6969a6844d5SKenneth D. Merry uint8_t zone_flags, uint8_t *data_ptr, 6979a6844d5SKenneth D. Merry uint32_t dxfer_len, uint8_t *cdb_storage, 6989a6844d5SKenneth D. Merry size_t cdb_storage_len, uint8_t sense_len, 6999a6844d5SKenneth D. Merry uint32_t timeout); 7009a6844d5SKenneth D. Merry 7019a6844d5SKenneth D. Merry int scsi_ata_zac_mgmt_in(struct ccb_scsiio *csio, uint32_t retries, 7029a6844d5SKenneth D. Merry void (*cbfcnp)(struct cam_periph *, union ccb *), 7039a6844d5SKenneth D. Merry uint8_t tag_action, int use_ncq, 7049a6844d5SKenneth D. Merry uint8_t zm_action, uint64_t zone_id, 7059a6844d5SKenneth D. Merry uint8_t zone_flags, uint8_t *data_ptr, 7069a6844d5SKenneth D. Merry uint32_t dxfer_len, uint8_t *cdb_storage, 7079a6844d5SKenneth D. Merry size_t cdb_storage_len, uint8_t sense_len, 7089a6844d5SKenneth D. Merry uint32_t timeout); 7099a6844d5SKenneth D. Merry 71096a93c63SKenneth D. Merry __END_DECLS 71196a93c63SKenneth D. Merry 71276babe50SJustin T. Gibbs #endif /* _SCSI_SCSI_DA_H */ 713