libuutil: move under bmake
[unleashed.git] / usr / src / cmd / format / ctlr_scsi.h
blobd72e162357d9db4bdc2f33ff0318c14389847ec5
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright (c) 1993, 2010, Oracle and/or its affiliates. All rights reserved.
25 #ifndef _CTLR_SCSI_H
26 #define _CTLR_SCSI_H
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
32 #include <sys/buf.h>
33 #include <sys/scsi/scsi.h>
37 * Rounded parameter, as returned in Extended Sense information
39 #define ROUNDED_PARAMETER 0x37
42 * Timeout Value during formatting
44 #ifndef SHRT_MAX
45 #define SHRT_MAX 32767
46 #endif
49 * Mode sense/select page header information
51 struct scsi_ms_header {
52 struct mode_header mode_header;
53 struct block_descriptor block_descriptor;
57 * Mode Sense Page Control
59 #define MODE_SENSE_PC_CURRENT (0 << 6)
60 #define MODE_SENSE_PC_CHANGEABLE (1 << 6)
61 #define MODE_SENSE_PC_DEFAULT (2 << 6)
62 #define MODE_SENSE_PC_SAVED (3 << 6)
65 * Mode Select options
67 #define MODE_SELECT_SP 0x01
68 #define MODE_SELECT_PF 0x10
73 * Minimum length of Request Sense data that we can accept
75 #define MIN_REQUEST_SENSE_LEN 18
78 * "impossible" status value
80 #define IMPOSSIBLE_SCSI_STATUS 0xff
83 * Convert a three-byte triplet into an int
85 #define TRIPLET(u, m, l) ((int)((((u))&0xff<<16) + \
86 (((m)&0xff)<<8) + (l&0xff)))
89 * Define the amount of slop we can tolerate on a SCSI-2 mode sense.
90 * Usually we try to deal with just the common subset between the
91 * the SCSI-2 structure and the CCS structure. The length of the
92 * data returned can vary between targets, so being tolerant gives
93 * gives us a higher chance of success.
95 #define PAGE1_SLOP 5
96 #define PAGE2_SLOP 6
97 #define PAGE3_SLOP 3
98 #define PAGE4_SLOP 8
99 #define PAGE8_SLOP 8
100 #define PAGE38_SLOP 8
103 * Minimum lengths of a particular SCSI-2 mode sense page that
104 * we can deal with. We must reject anything less than this.
106 #define MIN_PAGE1_LEN (sizeof (struct mode_err_recov)-PAGE1_SLOP)
107 #define MIN_PAGE2_LEN (sizeof (struct mode_disco_reco)-PAGE2_SLOP)
108 #define MIN_PAGE3_LEN (sizeof (struct mode_format)-PAGE3_SLOP)
109 #define MIN_PAGE4_LEN (sizeof (struct mode_geometry)-PAGE4_SLOP)
110 #define MIN_PAGE8_LEN (sizeof (struct mode_cache)-PAGE8_SLOP)
111 #define MIN_PAGE38_LEN (sizeof (struct mode_cache_ccs)-PAGE38_SLOP)
114 * Macro to extract the length of a mode sense page
115 * as returned by a target.
117 #define MODESENSE_PAGE_LEN(p) (((int)((struct mode_page *)p)->length) + \
118 sizeof (struct mode_page))
121 * Request this number of bytes for all mode senses. Since the
122 * data returned is self-defining, we can accept anywhere from
123 * the minimum for a particular page, up to this maximum.
124 * Whatever the drive gives us, we return to the drive, delta'ed
125 * by whatever we want to change.
127 #define MAX_MODE_SENSE_SIZE 255
130 #ifdef __STDC__
132 * Local prototypes for ANSI C compilers
134 int scsi_rdwr(int, int, diskaddr_t, int, caddr_t, int, int *);
135 int scsi_ex_man(struct defect_list *);
136 int scsi_ex_cur(struct defect_list *);
137 int scsi_ex_grown(struct defect_list *);
138 int uscsi_cmd(int, struct uscsi_cmd *, int);
139 int uscsi_mode_sense(int, int, int, caddr_t, int,
140 struct scsi_ms_header *);
141 int uscsi_mode_select(int, int, int, caddr_t, int,
142 struct scsi_ms_header *);
143 int uscsi_inquiry(int, caddr_t, int);
144 int uscsi_inquiry_page_86h(int, caddr_t, int);
145 int uscsi_read_capacity(int, struct scsi_capacity_16 *);
146 int uscsi_read_capacity_16(int, struct scsi_capacity_16 *);
147 int scsi_translate(int, struct scsi_bfi_defect *);
148 int scsi_dump_mode_sense_pages(int);
149 int scsi_supported_page(int);
150 int apply_chg_list(int, int, uchar_t *, uchar_t *, struct chg_list *);
151 int scsi_format_time(void);
152 uint8_t get_cur_protection_type(struct scsi_capacity_16 *);
154 #else
156 #ifdef sparc
157 int scsi_ms_page1();
158 int scsi_ms_page2();
159 int scsi_ms_page3();
160 int scsi_ms_page4();
161 int scsi_read_defect_data();
162 int scsi_repair();
163 #endif /* sparc */
165 int scsi_rdwr();
166 int scsi_ck_format();
167 int scsi_ex_man();
168 int scsi_ex_cur();
169 int scsi_ex_grown();
170 int uscsi_cmd();
171 int uscsi_mode_sense();
172 int uscsi_mode_select();
173 int uscsi_inquiry();
174 int uscsi_read_capacity();
175 int scsi_translate();
176 int scsi_dump_mode_sense_pages();
177 int scsi_supported_page();
178 int apply_chg_list();
179 int scsi_format_time();
181 #endif /* __STDC__ */
183 #ifdef __cplusplus
185 #endif
187 #endif /* _CTLR_SCSI_H */