author | Dan McDonald <danmcd@nexenta.com> |
Fri, 04 Mar 2011 13:57:09 -0800 | |
changeset 13297 | 4b9dc4ca8e9f |
parent 12426 | cdff5d2ea989 |
permissions | -rw-r--r-- |
0 | 1 |
/* |
2 |
* CDDL HEADER START |
|
3 |
* |
|
4 |
* The contents of this file are subject to the terms of the |
|
1489
fa842259660e
6322205 Enable disk write cache if ZFS owns the disk
webaker
parents:
1415
diff
changeset
|
5 |
* Common Development and Distribution License (the "License"). |
fa842259660e
6322205 Enable disk write cache if ZFS owns the disk
webaker
parents:
1415
diff
changeset
|
6 |
* You may not use this file except in compliance with the License. |
0 | 7 |
* |
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. |
|
12 |
* |
|
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] |
|
18 |
* |
|
19 |
* CDDL HEADER END |
|
20 |
*/ |
|
7563
84ec90ffc3f7
PSARC/2008/336 Extended VTOC
Prasad Singamsetty <Prasad.Singamsetty@Sun.COM>
parents:
6423
diff
changeset
|
21 |
|
0 | 22 |
/* |
12426
cdff5d2ea989
PSARC 2009/646 bd - generic block device driver
Garrett D'Amore <gdamore@opensolaris.org>
parents:
11329
diff
changeset
|
23 |
* Copyright (c) 1982, 2010, Oracle and/or its affiliates. All rights reserved. |
13297
4b9dc4ca8e9f
701 UNMAP support for COMSTAR
Dan McDonald <danmcd@nexenta.com>
parents:
12426
diff
changeset
|
24 |
* |
4b9dc4ca8e9f
701 UNMAP support for COMSTAR
Dan McDonald <danmcd@nexenta.com>
parents:
12426
diff
changeset
|
25 |
* Copyright 2011 Nexenta Systems, Inc. All rights reserved. |
0 | 26 |
*/ |
27 |
||
28 |
#ifndef _SYS_DKIO_H |
|
29 |
#define _SYS_DKIO_H |
|
30 |
||
31 |
#include <sys/dklabel.h> /* Needed for NDKMAP define */ |
|
32 |
||
33 |
#ifdef __cplusplus |
|
34 |
extern "C" { |
|
35 |
#endif |
|
36 |
||
37 |
/* |
|
38 |
* Structures and definitions for disk io control commands |
|
39 |
*/ |
|
40 |
||
41 |
/* |
|
42 |
* Structures used as data by ioctl calls. |
|
43 |
*/ |
|
44 |
||
45 |
#define DK_DEVLEN 16 /* device name max length, including */ |
|
46 |
/* unit # & NULL (ie - "xyc1") */ |
|
47 |
||
48 |
/* |
|
49 |
* Used for controller info |
|
50 |
*/ |
|
51 |
struct dk_cinfo { |
|
52 |
char dki_cname[DK_DEVLEN]; /* controller name (no unit #) */ |
|
53 |
ushort_t dki_ctype; /* controller type */ |
|
54 |
ushort_t dki_flags; /* flags */ |
|
55 |
ushort_t dki_cnum; /* controller number */ |
|
56 |
uint_t dki_addr; /* controller address */ |
|
57 |
uint_t dki_space; /* controller bus type */ |
|
58 |
uint_t dki_prio; /* interrupt priority */ |
|
59 |
uint_t dki_vec; /* interrupt vector */ |
|
60 |
char dki_dname[DK_DEVLEN]; /* drive name (no unit #) */ |
|
61 |
uint_t dki_unit; /* unit number */ |
|
62 |
uint_t dki_slave; /* slave number */ |
|
63 |
ushort_t dki_partition; /* partition number */ |
|
64 |
ushort_t dki_maxtransfer; /* max. transfer size in DEV_BSIZE */ |
|
65 |
}; |
|
66 |
||
67 |
/* |
|
68 |
* Controller types |
|
69 |
*/ |
|
70 |
#define DKC_UNKNOWN 0 |
|
71 |
#define DKC_CDROM 1 /* CD-ROM, SCSI or otherwise */ |
|
72 |
#define DKC_WDC2880 2 |
|
73 |
#define DKC_XXX_0 3 /* unassigned */ |
|
74 |
#define DKC_XXX_1 4 /* unassigned */ |
|
75 |
#define DKC_DSD5215 5 |
|
76 |
#define DKC_ACB4000 7 |
|
77 |
#define DKC_MD21 8 |
|
78 |
#define DKC_XXX_2 9 /* unassigned */ |
|
79 |
#define DKC_NCRFLOPPY 10 |
|
80 |
#define DKC_SMSFLOPPY 12 |
|
81 |
#define DKC_SCSI_CCS 13 /* SCSI CCS compatible */ |
|
82 |
#define DKC_INTEL82072 14 /* native floppy chip */ |
|
83 |
#define DKC_MD 16 /* meta-disk (virtual-disk) driver */ |
|
84 |
#define DKC_INTEL82077 19 /* 82077 floppy disk controller */ |
|
85 |
#define DKC_DIRECT 20 /* Intel direct attached device i.e. IDE */ |
|
11215
821b7edb881c
PSARC 2009/582 EOF of pcmem/pcram
Garrett D'Amore <gdamore@opensolaris.org>
parents:
10021
diff
changeset
|
86 |
#define DKC_PCMCIA_MEM 21 /* PCMCIA memory disk-like type (Obsolete) */ |
0 | 87 |
#define DKC_PCMCIA_ATA 22 /* PCMCIA AT Attached type */ |
4507
4af450c9a1af
6571774 Add new controller type DKC_VBD for xVM virtual disks
jhd
parents:
3652
diff
changeset
|
88 |
#define DKC_VBD 23 /* virtual block device */ |
12426
cdff5d2ea989
PSARC 2009/646 bd - generic block device driver
Garrett D'Amore <gdamore@opensolaris.org>
parents:
11329
diff
changeset
|
89 |
#define DKC_BLKDEV 24 /* generic block device (see blkdev(7d)) */ |
0 | 90 |
|
91 |
/* |
|
92 |
* Sun reserves up through 1023 |
|
93 |
*/ |
|
94 |
||
95 |
#define DKC_CUSTOMER_BASE 1024 |
|
96 |
||
97 |
/* |
|
98 |
* Flags |
|
99 |
*/ |
|
100 |
#define DKI_BAD144 0x01 /* use DEC std 144 bad sector fwding */ |
|
101 |
#define DKI_MAPTRK 0x02 /* controller does track mapping */ |
|
102 |
#define DKI_FMTTRK 0x04 /* formats only full track at a time */ |
|
103 |
#define DKI_FMTVOL 0x08 /* formats only full volume at a time */ |
|
104 |
#define DKI_FMTCYL 0x10 /* formats only full cylinders at a time */ |
|
105 |
#define DKI_HEXUNIT 0x20 /* unit number is printed as 3 hex digits */ |
|
106 |
#define DKI_PCMCIA_PFD 0x40 /* PCMCIA pseudo-floppy memory card */ |
|
107 |
||
108 |
/* |
|
109 |
* Used for all partitions |
|
110 |
*/ |
|
111 |
struct dk_allmap { |
|
112 |
struct dk_map dka_map[NDKMAP]; |
|
113 |
}; |
|
114 |
||
115 |
#if defined(_SYSCALL32) |
|
116 |
struct dk_allmap32 { |
|
117 |
struct dk_map32 dka_map[NDKMAP]; |
|
118 |
}; |
|
119 |
#endif /* _SYSCALL32 */ |
|
120 |
||
121 |
/* |
|
122 |
* Definition of a disk's geometry |
|
123 |
*/ |
|
124 |
struct dk_geom { |
|
125 |
unsigned short dkg_ncyl; /* # of data cylinders */ |
|
126 |
unsigned short dkg_acyl; /* # of alternate cylinders */ |
|
127 |
unsigned short dkg_bcyl; /* cyl offset (for fixed head area) */ |
|
128 |
unsigned short dkg_nhead; /* # of heads */ |
|
129 |
unsigned short dkg_obs1; /* obsolete */ |
|
130 |
unsigned short dkg_nsect; /* # of data sectors per track */ |
|
131 |
unsigned short dkg_intrlv; /* interleave factor */ |
|
132 |
unsigned short dkg_obs2; /* obsolete */ |
|
133 |
unsigned short dkg_obs3; /* obsolete */ |
|
134 |
unsigned short dkg_apc; /* alternates per cyl (SCSI only) */ |
|
135 |
unsigned short dkg_rpm; /* revolutions per minute */ |
|
136 |
unsigned short dkg_pcyl; /* # of physical cylinders */ |
|
137 |
unsigned short dkg_write_reinstruct; /* # sectors to skip, writes */ |
|
138 |
unsigned short dkg_read_reinstruct; /* # sectors to skip, reads */ |
|
139 |
unsigned short dkg_extra[7]; /* for compatible expansion */ |
|
140 |
}; |
|
141 |
||
142 |
/* |
|
143 |
* These defines are for historic compatibility with old drivers. |
|
144 |
*/ |
|
145 |
#define dkg_bhead dkg_obs1 /* used to be head offset */ |
|
146 |
#define dkg_gap1 dkg_obs2 /* used to be gap1 */ |
|
147 |
#define dkg_gap2 dkg_obs3 /* used to be gap2 */ |
|
148 |
||
149 |
/* |
|
150 |
* Disk io control commands |
|
151 |
* Warning: some other ioctls with the DIOC prefix exist elsewhere. |
|
152 |
* The Generic DKIOC numbers are from 0 - 50. |
|
153 |
* The Floppy Driver uses 51 - 100. |
|
154 |
* The Hard Disk (except SCSI) 101 - 106. (these are obsolete) |
|
155 |
* The CDROM Driver 151 - 200. |
|
156 |
* The USCSI ioctl 201 - 250. |
|
157 |
*/ |
|
158 |
#define DKIOC (0x04 << 8) |
|
159 |
||
160 |
/* |
|
161 |
* The following ioctls are generic in nature and need to be |
|
162 |
* suported as appropriate by all disk drivers |
|
163 |
*/ |
|
164 |
#define DKIOCGGEOM (DKIOC|1) /* Get geometry */ |
|
165 |
#define DKIOCINFO (DKIOC|3) /* Get info */ |
|
166 |
#define DKIOCEJECT (DKIOC|6) /* Generic 'eject' */ |
|
167 |
#define DKIOCGVTOC (DKIOC|11) /* Get VTOC */ |
|
168 |
#define DKIOCSVTOC (DKIOC|12) /* Set VTOC & Write to Disk */ |
|
169 |
||
7563
84ec90ffc3f7
PSARC/2008/336 Extended VTOC
Prasad Singamsetty <Prasad.Singamsetty@Sun.COM>
parents:
6423
diff
changeset
|
170 |
#define DKIOCGEXTVTOC (DKIOC|23) /* Get extended VTOC */ |
84ec90ffc3f7
PSARC/2008/336 Extended VTOC
Prasad Singamsetty <Prasad.Singamsetty@Sun.COM>
parents:
6423
diff
changeset
|
171 |
#define DKIOCSEXTVTOC (DKIOC|24) /* Set extended VTOC, Write to Disk */ |
84ec90ffc3f7
PSARC/2008/336 Extended VTOC
Prasad Singamsetty <Prasad.Singamsetty@Sun.COM>
parents:
6423
diff
changeset
|
172 |
|
0 | 173 |
/* |
789 | 174 |
* Disk Cache Controls. These ioctls should be supported by |
175 |
* all disk drivers. |
|
176 |
* |
|
177 |
* DKIOCFLUSHWRITECACHE when used from user-mode ignores the ioctl |
|
178 |
* argument, but it should be passed as NULL to allow for future |
|
179 |
* reinterpretation. From user-mode, this ioctl request is synchronous. |
|
180 |
* |
|
181 |
* When invoked from within the kernel, the arg can be NULL to indicate |
|
182 |
* a synchronous request or can be the address of a struct dk_callback |
|
183 |
* to request an asynchronous callback when the flush request is complete. |
|
184 |
* In this case, the flag to the ioctl must include FKIOCTL and the |
|
185 |
* dkc_callback field of the pointed to struct must be non-null or the |
|
186 |
* request is made synchronously. |
|
187 |
* |
|
188 |
* In the callback case: if the ioctl returns 0, a callback WILL be performed. |
|
189 |
* If the ioctl returns non-zero, a callback will NOT be performed. |
|
190 |
* NOTE: In some cases, the callback may be done BEFORE the ioctl call |
|
191 |
* returns. The caller's locking strategy should be prepared for this case. |
|
192 |
*/ |
|
193 |
#define DKIOCFLUSHWRITECACHE (DKIOC|34) /* flush cache to phys medium */ |
|
194 |
||
195 |
struct dk_callback { |
|
196 |
void (*dkc_callback)(void *dkc_cookie, int error); |
|
197 |
void *dkc_cookie; |
|
5065
fcf530c3356e
PSARC 2007/053 Per-Disk-Device support of non-volatile cache
gz161490
parents:
4507
diff
changeset
|
198 |
int dkc_flag; |
789 | 199 |
}; |
200 |
||
5065
fcf530c3356e
PSARC 2007/053 Per-Disk-Device support of non-volatile cache
gz161490
parents:
4507
diff
changeset
|
201 |
/* bit flag definitions for dkc_flag */ |
fcf530c3356e
PSARC 2007/053 Per-Disk-Device support of non-volatile cache
gz161490
parents:
4507
diff
changeset
|
202 |
#define FLUSH_VOLATILE 0x1 /* Bit 0: if set, only flush */ |
fcf530c3356e
PSARC 2007/053 Per-Disk-Device support of non-volatile cache
gz161490
parents:
4507
diff
changeset
|
203 |
/* volatile cache; otherwise, flush */ |
fcf530c3356e
PSARC 2007/053 Per-Disk-Device support of non-volatile cache
gz161490
parents:
4507
diff
changeset
|
204 |
/* volatile and non-volatile cache */ |
fcf530c3356e
PSARC 2007/053 Per-Disk-Device support of non-volatile cache
gz161490
parents:
4507
diff
changeset
|
205 |
|
1489
fa842259660e
6322205 Enable disk write cache if ZFS owns the disk
webaker
parents:
1415
diff
changeset
|
206 |
#define DKIOCGETWCE (DKIOC|36) /* Get current write cache */ |
fa842259660e
6322205 Enable disk write cache if ZFS owns the disk
webaker
parents:
1415
diff
changeset
|
207 |
/* enablement status */ |
fa842259660e
6322205 Enable disk write cache if ZFS owns the disk
webaker
parents:
1415
diff
changeset
|
208 |
#define DKIOCSETWCE (DKIOC|37) /* Enable/Disable write cache */ |
fa842259660e
6322205 Enable disk write cache if ZFS owns the disk
webaker
parents:
1415
diff
changeset
|
209 |
|
789 | 210 |
/* |
0 | 211 |
* The following ioctls are used by Sun drivers to communicate |
212 |
* with their associated format routines. Support of these ioctls |
|
213 |
* is not required of foreign drivers |
|
214 |
*/ |
|
215 |
#define DKIOCSGEOM (DKIOC|2) /* Set geometry */ |
|
216 |
#define DKIOCSAPART (DKIOC|4) /* Set all partitions */ |
|
217 |
#define DKIOCGAPART (DKIOC|5) /* Get all partitions */ |
|
218 |
#define DKIOCG_PHYGEOM (DKIOC|32) /* get physical geometry */ |
|
219 |
#define DKIOCG_VIRTGEOM (DKIOC|33) /* get virtual geometry */ |
|
220 |
||
221 |
/* |
|
222 |
* The following ioctl's are removable media support |
|
223 |
*/ |
|
224 |
#define DKIOCLOCK (DKIOC|7) /* Generic 'lock' */ |
|
225 |
#define DKIOCUNLOCK (DKIOC|8) /* Generic 'unlock' */ |
|
226 |
#define DKIOCSTATE (DKIOC|13) /* Inquire insert/eject state */ |
|
227 |
#define DKIOCREMOVABLE (DKIOC|16) /* is media removable */ |
|
228 |
||
1415 | 229 |
|
230 |
/* |
|
231 |
* ioctl for hotpluggable devices |
|
232 |
*/ |
|
233 |
#define DKIOCHOTPLUGGABLE (DKIOC|35) /* is hotpluggable */ |
|
234 |
||
10021
a41c569bdaca
PSARC/2006/379 Solaris on Extended partition
Sheshadri Vasudevan <Sheshadri.Vasudevan@Sun.COM>
parents:
9889
diff
changeset
|
235 |
#if defined(__i386) || defined(__amd64) |
a41c569bdaca
PSARC/2006/379 Solaris on Extended partition
Sheshadri Vasudevan <Sheshadri.Vasudevan@Sun.COM>
parents:
9889
diff
changeset
|
236 |
/* ioctl to write extended partition structure into the disk */ |
a41c569bdaca
PSARC/2006/379 Solaris on Extended partition
Sheshadri Vasudevan <Sheshadri.Vasudevan@Sun.COM>
parents:
9889
diff
changeset
|
237 |
#define DKIOCSETEXTPART (DKIOC|46) |
a41c569bdaca
PSARC/2006/379 Solaris on Extended partition
Sheshadri Vasudevan <Sheshadri.Vasudevan@Sun.COM>
parents:
9889
diff
changeset
|
238 |
#endif |
a41c569bdaca
PSARC/2006/379 Solaris on Extended partition
Sheshadri Vasudevan <Sheshadri.Vasudevan@Sun.COM>
parents:
9889
diff
changeset
|
239 |
|
0 | 240 |
/* |
241 |
* Ioctl to force driver to re-read the alternate partition and rebuild |
|
242 |
* the internal defect map. |
|
243 |
*/ |
|
244 |
#define DKIOCADDBAD (DKIOC|20) /* Re-read the alternate map (IDE) */ |
|
245 |
#define DKIOCGETDEF (DKIOC|21) /* read defect list (IDE) */ |
|
246 |
||
247 |
/* |
|
248 |
* Used by applications to get disk defect information from IDE |
|
249 |
* drives. |
|
250 |
*/ |
|
251 |
#ifdef _SYSCALL32 |
|
252 |
struct defect_header32 { |
|
253 |
int head; |
|
254 |
caddr32_t buffer; |
|
255 |
}; |
|
256 |
#endif /* _SYSCALL32 */ |
|
257 |
||
258 |
struct defect_header { |
|
259 |
int head; |
|
260 |
caddr_t buffer; |
|
261 |
}; |
|
262 |
||
263 |
#define DKIOCPARTINFO (DKIOC|22) /* Get partition or slice parameters */ |
|
7563
84ec90ffc3f7
PSARC/2008/336 Extended VTOC
Prasad Singamsetty <Prasad.Singamsetty@Sun.COM>
parents:
6423
diff
changeset
|
264 |
#define DKIOCEXTPARTINFO (DKIOC|19) /* Get extended partition or slice */ |
84ec90ffc3f7
PSARC/2008/336 Extended VTOC
Prasad Singamsetty <Prasad.Singamsetty@Sun.COM>
parents:
6423
diff
changeset
|
265 |
/* parameters */ |
84ec90ffc3f7
PSARC/2008/336 Extended VTOC
Prasad Singamsetty <Prasad.Singamsetty@Sun.COM>
parents:
6423
diff
changeset
|
266 |
|
0 | 267 |
|
268 |
/* |
|
269 |
* Used by applications to get partition or slice information |
|
270 |
*/ |
|
271 |
#ifdef _SYSCALL32 |
|
272 |
struct part_info32 { |
|
273 |
daddr32_t p_start; |
|
274 |
int p_length; |
|
275 |
}; |
|
276 |
#endif /* _SYSCALL32 */ |
|
277 |
||
278 |
struct part_info { |
|
279 |
daddr_t p_start; |
|
280 |
int p_length; |
|
281 |
}; |
|
282 |
||
7563
84ec90ffc3f7
PSARC/2008/336 Extended VTOC
Prasad Singamsetty <Prasad.Singamsetty@Sun.COM>
parents:
6423
diff
changeset
|
283 |
struct extpart_info { |
84ec90ffc3f7
PSARC/2008/336 Extended VTOC
Prasad Singamsetty <Prasad.Singamsetty@Sun.COM>
parents:
6423
diff
changeset
|
284 |
diskaddr_t p_start; |
84ec90ffc3f7
PSARC/2008/336 Extended VTOC
Prasad Singamsetty <Prasad.Singamsetty@Sun.COM>
parents:
6423
diff
changeset
|
285 |
diskaddr_t p_length; |
84ec90ffc3f7
PSARC/2008/336 Extended VTOC
Prasad Singamsetty <Prasad.Singamsetty@Sun.COM>
parents:
6423
diff
changeset
|
286 |
}; |
84ec90ffc3f7
PSARC/2008/336 Extended VTOC
Prasad Singamsetty <Prasad.Singamsetty@Sun.COM>
parents:
6423
diff
changeset
|
287 |
|
0 | 288 |
/* The following ioctls are for Optical Memory Device */ |
289 |
#define DKIOC_EBP_ENABLE (DKIOC|40) /* enable by pass erase on write */ |
|
290 |
#define DKIOC_EBP_DISABLE (DKIOC|41) /* disable by pass erase on write */ |
|
291 |
||
292 |
/* |
|
293 |
* This state enum is the argument passed to the DKIOCSTATE ioctl. |
|
294 |
*/ |
|
295 |
enum dkio_state { DKIO_NONE, DKIO_EJECTED, DKIO_INSERTED, DKIO_DEV_GONE }; |
|
296 |
||
297 |
#define DKIOCGMEDIAINFO (DKIOC|42) /* get information about the media */ |
|
298 |
||
299 |
/* |
|
300 |
* ioctls to read/write mboot info. |
|
301 |
*/ |
|
302 |
#define DKIOCGMBOOT (DKIOC|43) /* get mboot info */ |
|
303 |
#define DKIOCSMBOOT (DKIOC|44) /* set mboot info */ |
|
304 |
||
305 |
/* |
|
306 |
* ioctl to get the device temperature. |
|
307 |
*/ |
|
308 |
#define DKIOCGTEMPERATURE (DKIOC|45) /* get temperature */ |
|
309 |
||
310 |
/* |
|
9889
68d0fe4c716e
PSARC 2008/769 Multiple disk sector size support.
yu, larry liu - Sun Microsystems - Beijing China <Larry.Liu@Sun.COM>
parents:
8333
diff
changeset
|
311 |
* ioctl to get the media info including physical block size |
68d0fe4c716e
PSARC 2008/769 Multiple disk sector size support.
yu, larry liu - Sun Microsystems - Beijing China <Larry.Liu@Sun.COM>
parents:
8333
diff
changeset
|
312 |
*/ |
68d0fe4c716e
PSARC 2008/769 Multiple disk sector size support.
yu, larry liu - Sun Microsystems - Beijing China <Larry.Liu@Sun.COM>
parents:
8333
diff
changeset
|
313 |
#define DKIOCGMEDIAINFOEXT (DKIOC|48) |
68d0fe4c716e
PSARC 2008/769 Multiple disk sector size support.
yu, larry liu - Sun Microsystems - Beijing China <Larry.Liu@Sun.COM>
parents:
8333
diff
changeset
|
314 |
|
68d0fe4c716e
PSARC 2008/769 Multiple disk sector size support.
yu, larry liu - Sun Microsystems - Beijing China <Larry.Liu@Sun.COM>
parents:
8333
diff
changeset
|
315 |
/* |
11329
b7b0c7106406
PSARC 2009/656 DKIOCREADONLY
Garrett D'Amore <gdamore@opensolaris.org>
parents:
11215
diff
changeset
|
316 |
* ioctl to determine whether media is write-protected |
b7b0c7106406
PSARC 2009/656 DKIOCREADONLY
Garrett D'Amore <gdamore@opensolaris.org>
parents:
11215
diff
changeset
|
317 |
*/ |
b7b0c7106406
PSARC 2009/656 DKIOCREADONLY
Garrett D'Amore <gdamore@opensolaris.org>
parents:
11215
diff
changeset
|
318 |
#define DKIOCREADONLY (DKIOC|49) |
b7b0c7106406
PSARC 2009/656 DKIOCREADONLY
Garrett D'Amore <gdamore@opensolaris.org>
parents:
11215
diff
changeset
|
319 |
|
b7b0c7106406
PSARC 2009/656 DKIOCREADONLY
Garrett D'Amore <gdamore@opensolaris.org>
parents:
11215
diff
changeset
|
320 |
/* |
0 | 321 |
* Used for providing the temperature. |
322 |
*/ |
|
323 |
||
324 |
struct dk_temperature { |
|
325 |
uint_t dkt_flags; /* Flags */ |
|
326 |
short dkt_cur_temp; /* Current disk temperature */ |
|
327 |
short dkt_ref_temp; /* reference disk temperature */ |
|
328 |
}; |
|
329 |
||
330 |
#define DKT_BYPASS_PM 0x1 |
|
331 |
#define DKT_INVALID_TEMP 0xFFFF |
|
332 |
||
333 |
||
334 |
/* |
|
335 |
* Used for Media info or the current profile info |
|
336 |
*/ |
|
337 |
struct dk_minfo { |
|
338 |
uint_t dki_media_type; /* Media type or profile info */ |
|
339 |
uint_t dki_lbsize; /* Logical blocksize of media */ |
|
340 |
diskaddr_t dki_capacity; /* Capacity as # of dki_lbsize blks */ |
|
341 |
}; |
|
342 |
||
343 |
/* |
|
9889
68d0fe4c716e
PSARC 2008/769 Multiple disk sector size support.
yu, larry liu - Sun Microsystems - Beijing China <Larry.Liu@Sun.COM>
parents:
8333
diff
changeset
|
344 |
* Used for Media info or the current profile info |
68d0fe4c716e
PSARC 2008/769 Multiple disk sector size support.
yu, larry liu - Sun Microsystems - Beijing China <Larry.Liu@Sun.COM>
parents:
8333
diff
changeset
|
345 |
* including physical block size if supported. |
68d0fe4c716e
PSARC 2008/769 Multiple disk sector size support.
yu, larry liu - Sun Microsystems - Beijing China <Larry.Liu@Sun.COM>
parents:
8333
diff
changeset
|
346 |
*/ |
68d0fe4c716e
PSARC 2008/769 Multiple disk sector size support.
yu, larry liu - Sun Microsystems - Beijing China <Larry.Liu@Sun.COM>
parents:
8333
diff
changeset
|
347 |
struct dk_minfo_ext { |
68d0fe4c716e
PSARC 2008/769 Multiple disk sector size support.
yu, larry liu - Sun Microsystems - Beijing China <Larry.Liu@Sun.COM>
parents:
8333
diff
changeset
|
348 |
uint_t dki_media_type; /* Media type or profile info */ |
68d0fe4c716e
PSARC 2008/769 Multiple disk sector size support.
yu, larry liu - Sun Microsystems - Beijing China <Larry.Liu@Sun.COM>
parents:
8333
diff
changeset
|
349 |
uint_t dki_lbsize; /* Logical blocksize of media */ |
68d0fe4c716e
PSARC 2008/769 Multiple disk sector size support.
yu, larry liu - Sun Microsystems - Beijing China <Larry.Liu@Sun.COM>
parents:
8333
diff
changeset
|
350 |
diskaddr_t dki_capacity; /* Capacity as # of dki_lbsize blks */ |
68d0fe4c716e
PSARC 2008/769 Multiple disk sector size support.
yu, larry liu - Sun Microsystems - Beijing China <Larry.Liu@Sun.COM>
parents:
8333
diff
changeset
|
351 |
uint_t dki_pbsize; /* Physical blocksize of media */ |
68d0fe4c716e
PSARC 2008/769 Multiple disk sector size support.
yu, larry liu - Sun Microsystems - Beijing China <Larry.Liu@Sun.COM>
parents:
8333
diff
changeset
|
352 |
}; |
68d0fe4c716e
PSARC 2008/769 Multiple disk sector size support.
yu, larry liu - Sun Microsystems - Beijing China <Larry.Liu@Sun.COM>
parents:
8333
diff
changeset
|
353 |
|
68d0fe4c716e
PSARC 2008/769 Multiple disk sector size support.
yu, larry liu - Sun Microsystems - Beijing China <Larry.Liu@Sun.COM>
parents:
8333
diff
changeset
|
354 |
/* |
0 | 355 |
* Media types or profiles known |
356 |
*/ |
|
357 |
#define DK_UNKNOWN 0x00 /* Media inserted - type unknown */ |
|
358 |
||
359 |
||
360 |
/* |
|
361 |
* SFF 8090 Specification Version 3, media types 0x01 - 0xfffe are retained to |
|
362 |
* maintain compatibility with SFF8090. The following define the |
|
363 |
* optical media type. |
|
364 |
*/ |
|
768
daea417d4c6b
6334882 format -e does not see the USB Iomega Rev Drive
phitran
parents:
0
diff
changeset
|
365 |
#define DK_REMOVABLE_DISK 0x02 /* Removable Disk */ |
0 | 366 |
#define DK_MO_ERASABLE 0x03 /* MO Erasable */ |
367 |
#define DK_MO_WRITEONCE 0x04 /* MO Write once */ |
|
368 |
#define DK_AS_MO 0x05 /* AS MO */ |
|
369 |
#define DK_CDROM 0x08 /* CDROM */ |
|
370 |
#define DK_CDR 0x09 /* CD-R */ |
|
371 |
#define DK_CDRW 0x0A /* CD-RW */ |
|
372 |
#define DK_DVDROM 0x10 /* DVD-ROM */ |
|
373 |
#define DK_DVDR 0x11 /* DVD-R */ |
|
374 |
#define DK_DVDRAM 0x12 /* DVD_RAM or DVD-RW */ |
|
375 |
||
376 |
/* |
|
377 |
* Media types for other rewritable magnetic media |
|
378 |
*/ |
|
379 |
#define DK_FIXED_DISK 0x10001 /* Fixed disk SCSI or otherwise */ |
|
380 |
#define DK_FLOPPY 0x10002 /* Floppy media */ |
|
381 |
#define DK_ZIP 0x10003 /* IOMEGA ZIP media */ |
|
382 |
#define DK_JAZ 0x10004 /* IOMEGA JAZ media */ |
|
383 |
||
384 |
#define DKIOCSETEFI (DKIOC|17) /* Set EFI info */ |
|
385 |
#define DKIOCGETEFI (DKIOC|18) /* Get EFI info */ |
|
386 |
||
387 |
#define DKIOCPARTITION (DKIOC|9) /* Get partition info */ |
|
388 |
||
389 |
/* |
|
390 |
* Ioctls to get/set volume capabilities related to Logical Volume Managers. |
|
391 |
* They include the ability to get/set capabilities and to issue a read to a |
|
392 |
* specific underlying device of a replicated device. |
|
393 |
*/ |
|
394 |
||
395 |
#define DKIOCGETVOLCAP (DKIOC | 25) /* Get volume capabilities */ |
|
396 |
#define DKIOCSETVOLCAP (DKIOC | 26) /* Set volume capabilities */ |
|
397 |
#define DKIOCDMR (DKIOC | 27) /* Issue a directed read */ |
|
398 |
||
6423 | 399 |
#define DKIOCDUMPINIT (DKIOC | 28) /* Dumpify a zvol */ |
400 |
#define DKIOCDUMPFINI (DKIOC | 29) /* Un-Dumpify a zvol */ |
|
401 |
||
0 | 402 |
typedef uint_t volcapinfo_t; |
403 |
||
404 |
typedef uint_t volcapset_t; |
|
405 |
||
406 |
#define DKV_ABR_CAP 0x00000001 /* Support Appl.Based Recovery */ |
|
407 |
#define DKV_DMR_CAP 0x00000002 /* Support Directed Mirror Read */ |
|
408 |
||
409 |
typedef struct volcap { |
|
410 |
volcapinfo_t vc_info; /* Capabilities available */ |
|
411 |
volcapset_t vc_set; /* Capabilities set */ |
|
412 |
} volcap_t; |
|
413 |
||
414 |
#define VOL_SIDENAME 256 |
|
415 |
||
416 |
typedef struct vol_directed_rd { |
|
417 |
int vdr_flags; |
|
418 |
offset_t vdr_offset; |
|
419 |
size_t vdr_nbytes; |
|
420 |
size_t vdr_bytesread; |
|
421 |
void *vdr_data; |
|
422 |
int vdr_side; |
|
423 |
char vdr_side_name[VOL_SIDENAME]; |
|
424 |
} vol_directed_rd_t; |
|
425 |
||
426 |
#define DKV_SIDE_INIT (-1) |
|
427 |
#define DKV_DMR_NEXT_SIDE 0x00000001 |
|
428 |
#define DKV_DMR_DONE 0x00000002 |
|
429 |
#define DKV_DMR_ERROR 0x00000004 |
|
430 |
#define DKV_DMR_SUCCESS 0x00000008 |
|
431 |
#define DKV_DMR_SHORT 0x00000010 |
|
432 |
||
433 |
#ifdef _MULTI_DATAMODEL |
|
434 |
#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 |
|
435 |
#pragma pack(4) |
|
436 |
#endif |
|
437 |
typedef struct vol_directed_rd32 { |
|
438 |
int32_t vdr_flags; |
|
439 |
offset_t vdr_offset; /* 64-bit element on 32-bit alignment */ |
|
440 |
size32_t vdr_nbytes; |
|
441 |
size32_t vdr_bytesread; |
|
442 |
caddr32_t vdr_data; |
|
443 |
int32_t vdr_side; |
|
444 |
char vdr_side_name[VOL_SIDENAME]; |
|
445 |
} vol_directed_rd32_t; |
|
446 |
#if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 |
|
447 |
#pragma pack() |
|
448 |
#endif |
|
449 |
#endif /* _MULTI_DATAMODEL */ |
|
450 |
||
3652 | 451 |
/* |
452 |
* The ioctl is used to fetch disk's device type, vendor ID, |
|
453 |
* model number/product ID, firmware revision and serial number together. |
|
454 |
* |
|
455 |
* Currently there are two device types - DKD_ATA_TYPE which means the |
|
456 |
* disk is driven by cmdk/ata or dad/uata driver, and DKD_SCSI_TYPE |
|
457 |
* which means the disk is driven by sd/scsi hba driver. |
|
458 |
*/ |
|
459 |
#define DKIOC_GETDISKID (DKIOC|46) |
|
460 |
||
461 |
/* These two labels are for dkd_dtype of dk_disk_id_t */ |
|
462 |
#define DKD_ATA_TYPE 0x01 /* ATA disk or legacy mode SATA disk */ |
|
463 |
#define DKD_SCSI_TYPE 0x02 /* SCSI disk or native mode SATA disk */ |
|
464 |
||
465 |
#define DKD_ATA_MODEL 40 /* model number length */ |
|
466 |
#define DKD_ATA_FWVER 8 /* firmware revision length */ |
|
467 |
#define DKD_ATA_SERIAL 20 /* serial number length */ |
|
468 |
||
469 |
#define DKD_SCSI_VENDOR 8 /* vendor ID length */ |
|
470 |
#define DKD_SCSI_PRODUCT 16 /* product ID length */ |
|
471 |
#define DKD_SCSI_REVLEVEL 4 /* revision level length */ |
|
472 |
#define DKD_SCSI_SERIAL 12 /* serial number length */ |
|
473 |
||
474 |
/* |
|
475 |
* The argument type for DKIOC_GETDISKID ioctl. |
|
476 |
*/ |
|
477 |
typedef struct dk_disk_id { |
|
478 |
uint_t dkd_dtype; |
|
479 |
union { |
|
480 |
struct { |
|
481 |
char dkd_amodel[DKD_ATA_MODEL]; /* 40 bytes */ |
|
482 |
char dkd_afwver[DKD_ATA_FWVER]; /* 8 bytes */ |
|
483 |
char dkd_aserial[DKD_ATA_SERIAL]; /* 20 bytes */ |
|
484 |
} ata_disk_id; |
|
485 |
struct { |
|
486 |
char dkd_svendor[DKD_SCSI_VENDOR]; /* 8 bytes */ |
|
487 |
char dkd_sproduct[DKD_SCSI_PRODUCT]; /* 16 bytes */ |
|
488 |
char dkd_sfwver[DKD_SCSI_REVLEVEL]; /* 4 bytes */ |
|
489 |
char dkd_sserial[DKD_SCSI_SERIAL]; /* 12 bytes */ |
|
490 |
} scsi_disk_id; |
|
491 |
} disk_id; |
|
492 |
} dk_disk_id_t; |
|
493 |
||
494 |
/* |
|
495 |
* The ioctl is used to update the firmware of device. |
|
496 |
*/ |
|
497 |
#define DKIOC_UPDATEFW (DKIOC|47) |
|
498 |
||
499 |
/* The argument type for DKIOC_UPDATEFW ioctl */ |
|
500 |
typedef struct dk_updatefw { |
|
501 |
caddr_t dku_ptrbuf; /* pointer to firmware buf */ |
|
502 |
uint_t dku_size; /* firmware buf length */ |
|
503 |
uint8_t dku_type; /* firmware update type */ |
|
504 |
} dk_updatefw_t; |
|
505 |
||
506 |
#ifdef _SYSCALL32 |
|
507 |
typedef struct dk_updatefw_32 { |
|
508 |
caddr32_t dku_ptrbuf; /* pointer to firmware buf */ |
|
509 |
uint_t dku_size; /* firmware buf length */ |
|
510 |
uint8_t dku_type; /* firmware update type */ |
|
511 |
} dk_updatefw_32_t; |
|
512 |
#endif /* _SYSCALL32 */ |
|
513 |
||
514 |
/* |
|
515 |
* firmware update type - temporary or permanent use |
|
516 |
*/ |
|
517 |
#define FW_TYPE_TEMP 0x0 /* temporary use */ |
|
518 |
#define FW_TYPE_PERM 0x1 /* permanent use */ |
|
519 |
||
13297
4b9dc4ca8e9f
701 UNMAP support for COMSTAR
Dan McDonald <danmcd@nexenta.com>
parents:
12426
diff
changeset
|
520 |
/* |
4b9dc4ca8e9f
701 UNMAP support for COMSTAR
Dan McDonald <danmcd@nexenta.com>
parents:
12426
diff
changeset
|
521 |
* ioctl to free space (e.g. SCSI UNMAP) off a disk. |
4b9dc4ca8e9f
701 UNMAP support for COMSTAR
Dan McDonald <danmcd@nexenta.com>
parents:
12426
diff
changeset
|
522 |
*/ |
4b9dc4ca8e9f
701 UNMAP support for COMSTAR
Dan McDonald <danmcd@nexenta.com>
parents:
12426
diff
changeset
|
523 |
#define DKIOCFREE (DKIOC|50) |
4b9dc4ca8e9f
701 UNMAP support for COMSTAR
Dan McDonald <danmcd@nexenta.com>
parents:
12426
diff
changeset
|
524 |
|
4b9dc4ca8e9f
701 UNMAP support for COMSTAR
Dan McDonald <danmcd@nexenta.com>
parents:
12426
diff
changeset
|
525 |
typedef struct dkioc_free_s { |
4b9dc4ca8e9f
701 UNMAP support for COMSTAR
Dan McDonald <danmcd@nexenta.com>
parents:
12426
diff
changeset
|
526 |
uint32_t df_flags; |
4b9dc4ca8e9f
701 UNMAP support for COMSTAR
Dan McDonald <danmcd@nexenta.com>
parents:
12426
diff
changeset
|
527 |
uint32_t df_reserved; /* For easy 64-bit alignment below... */ |
4b9dc4ca8e9f
701 UNMAP support for COMSTAR
Dan McDonald <danmcd@nexenta.com>
parents:
12426
diff
changeset
|
528 |
diskaddr_t df_start; |
4b9dc4ca8e9f
701 UNMAP support for COMSTAR
Dan McDonald <danmcd@nexenta.com>
parents:
12426
diff
changeset
|
529 |
diskaddr_t df_length; |
4b9dc4ca8e9f
701 UNMAP support for COMSTAR
Dan McDonald <danmcd@nexenta.com>
parents:
12426
diff
changeset
|
530 |
} dkioc_free_t; |
4b9dc4ca8e9f
701 UNMAP support for COMSTAR
Dan McDonald <danmcd@nexenta.com>
parents:
12426
diff
changeset
|
531 |
|
4b9dc4ca8e9f
701 UNMAP support for COMSTAR
Dan McDonald <danmcd@nexenta.com>
parents:
12426
diff
changeset
|
532 |
#define DF_WAIT_SYNC 0x00000001 /* Wait for full write-out of free. */ |
3652 | 533 |
|
0 | 534 |
#ifdef __cplusplus |
535 |
} |
|
536 |
#endif |
|
537 |
||
538 |
#endif /* _SYS_DKIO_H */ |