summaryrefslogtreecommitdiff
path: root/usr/src/man/man7i/dkio.7i
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/man/man7i/dkio.7i')
-rw-r--r--usr/src/man/man7i/dkio.7i867
1 files changed, 0 insertions, 867 deletions
diff --git a/usr/src/man/man7i/dkio.7i b/usr/src/man/man7i/dkio.7i
deleted file mode 100644
index 4b8c26a592..0000000000
--- a/usr/src/man/man7i/dkio.7i
+++ /dev/null
@@ -1,867 +0,0 @@
-.\"
-.\" The contents of this file are subject to the terms of the
-.\" Common Development and Distribution License (the "License").
-.\" You may not use this file except in compliance with the License.
-.\"
-.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-.\" or http://www.opensolaris.org/os/licensing.
-.\" See the License for the specific language governing permissions
-.\" and limitations under the License.
-.\"
-.\" When distributing Covered Code, include this CDDL HEADER in each
-.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-.\" If applicable, add the following below this CDDL HEADER, with the
-.\" fields enclosed by brackets "[]" replaced with your own identifying
-.\" information: Portions Copyright [yyyy] [name of copyright owner]
-.\"
-.\"
-.\" Copyright (c) 2009 Sun Microsystems, Inc. All Rights Reserved.
-.\" Copyright 2016 Nexenta Systems, Inc.
-.\" Copyright (c) 2017, Joyent, Inc.
-.\"
-.Dd October 23, 2017
-.Dt DKIO 7I
-.Os
-.Sh NAME
-.Nm dkio
-.Nd disk control operations
-.Sh SYNOPSIS
-.In sys/dkio.h
-.In sys/vtoc.h
-.Sh DESCRIPTION
-Disk drivers support a set of
-.Xr ioctl 2
-requests for disk controller, geometry, and partition information.
-Basic to these
-.Xr ioctl 2
-requests are the definitions in
-.In sys/dkio.h .
-.Sh IOCTLS
-The following
-.Xr ioctl 2
-requests set and/or retrieve the current disk
-controller, partitions, or geometry information on all architectures:
-.Bl -tag -width 1n
-.It Dv DKIOCINFO
-.Pp
-The argument is a pointer to a
-.Vt dk_cinfo
-structure (described below).
-This structure tells the controller-type and attributes regarding bad-block
-processing done on the controller.
-.Bd -literal -offset 2n
-/*
- * Structures and definitions for disk I/O control commands
- */
-#define DK_DEVLEN 16 /* device name max length, */
- /* including unit # and NULL */
-
-/* Used for controller info */
-struct dk_cinfo {
- char dki_cname[DK_DEVLEN]; /* controller name */
- /* (no unit #) */
- ushort_t dki_ctype; /* controller type */
- ushort_t dki_flags; /* flags */
- ushort_t dki_cnum; /* controller number */
- uint_t dki_addr; /* controller address */
- uint_t dki_space; /* controller bus type */
- uint_t dki_prio; /* interrupt priority */
- uint_t dki_vec; /* interrupt vector */
- char dki_dname[DK_DEVLEN]; /* drive name (no unit #) */
- uint_t dki_unit; /* unit number */
- uint_t dki_slave; /* slave number */
- ushort_t dki_partition; /* partition number */
- ushort_t dki_maxtransfer; /* maximum transfer size */
- /* in DEV_BSIZE */
- };
-
- /*
- * Controller types
- */
- #define DKC_UNKNOWN 0
- #define DKC_CDROM 1 /* CD-ROM, SCSI or other */
- #define DKC_WDC2880 2
- #define DKC_XXX_0 3 /* unassigned */
- #define DKC_XXX_1 4 /* unassigned */
- #define DKC_DSD5215 5
- #define DKC_ACB4000 7
- #define DKC_XXX_2 9 /* unassigned */
- #define DKC_NCRFLOPPY 10
- #define DKC_SMSFLOPPY 12
- #define DKC_SCSI_CCS 13 /* SCSI CCS compatible */
- #define DKC_INTEL82072 14 /* native floppy chip */
- #define DKC_INTEL82077 19 /* 82077 floppy disk */
- /* controller */
- #define DKC_DIRECT 20 /* Intel direct attached */
- /* device (IDE) */
- #define DKC_PCMCIA_MEM 21 /* PCMCIA memory disk-like */
- /* type */
- #define DKC_PCMCIA_ATA 22 /* PCMCIA AT Attached type */
-
- /*
- * Sun reserves up through 1023
- */
-
- #define DKC_CUSTOMER_BASE 1024
-
- /*
- * Flags
- */
- #define DKI_BAD144 0x01 /* use DEC std 144 */
- /* bad sector fwding */
- #define DKI_MAPTRK 0x02 /* controller does */
- /* track mapping */
- #define DKI_FMTTRK 0x04 /* formats only full
- /* track at a time */
- #define DKI_FMTVOL 0x08 /* formats only full */
- /* volume at a time */
- #define DKI_FMTCYL 0x10 /* formats only full */
- /* cylinders at a time */
- #define DKI_HEXUNIT 0x20 /* unit number printed */
- /* as 3 hexdigits */
- #define DKI_PCMCIA_PFD 0x40 /* PCMCIA pseudo-floppy */
- /* memory card */
-.Ed
-.It Dv DKIOCGAPART
-.Pp
-The argument is a pointer to a
-.Vt dk_allmap
-structure (described below).
-This
-.Xr ioctl 2
-gets the controller's notion of the current partition table
-for disk drive.
-.It Dv DKIOCSAPART
-.Pp
-The argument is a pointer to a
-.Vt dk_allmap
-structure (described below).
-This
-.Xr ioctl 2
-sets the controller's notion of the partition table without
-changing the disk itself.
-.Bd -literal -offset 2n
-/*
- * Partition map (part of dk_label)
- */
-struct dk_map {
- daddr_t dkl_cylno; /* starting cylinder */
- daddr_t dkl_nblk; /* number of blocks */
-};
-
-/*
- * Used for all partitions
- */
-struct dk_allmap {
- struct dk_map dka_map[NDKMAP];
-};
-.Ed
-.It Dv DKIOCGGEOM
-.Pp
-The argument is a pointer to a
-.Vt dk_geom
-structure (described below).
-This
-.Xr ioctl 2
-gets the controller's notion of the current geometry of the disk drive.
-.It Dv DKIOCSGEOM
-.Pp
-The argument is a pointer to a
-.Vt dk_geom
-structure (described below).
-This
-.Xr ioctl 2
-sets the controller's notion of the geometry without changing the disk itself.
-.It Dv DKIOCGVTOC
-.Pp
-The argument is a pointer to a
-.Vt vtoc
-structure (described below).
-This
-.Xr ioctl 2
-returns the device's current volume table of contents (VTOC).
-For disks larger than 1TB,
-.Dv DKIOCGEXTVTOC
-must be used instead.
-.It Dv DKIOCSVTOC
-.Pp
-The argument is a pointer to a
-.Vt vtoc
-structure (described below).
-This
-.Xr ioctl 2
-changes the VTOC associated with the device.
-For disks larger than 1TB,
-.Dv DKIOCSEXTVTOC
-must be used instead.
-.Bd -literal -offset 2n
-struct partition {
- ushort_t p_tag; /* ID tag of partition */
- ushort_t p_flag; /* permission flags */
- daddr_t p_start; /* start sector of partition */
- long p_size; /* # of blocks in partition */
-};
-.Ed
-.Pp
-If
-.Dv DKIOCSVTOC
-is used with a floppy diskette, the
-.Fa p_start
-field must be the first sector of a cylinder.
-To compute the number of sectors per
-cylinder, multiply the number of heads by the number of sectors per track.
-.Bd -literal -offset 2n
-struct vtoc {
- unsigned long v_bootinfo[3]; /* info needed by mboot */
- /* (unsupported) */
- unsigned long v_sanity; /* to verify vtoc */
- /* sanity */
- unsigned long v_version; /* layout version */
- char v_volume[LEN_DKL_VVOL]; /* volume name */
- ushort_t v_sectorsz; /* sector size in bytes */
- ushort_t v_nparts; /* number of partitions */
- unsigned long v_reserved[10]; /* free space */
- struct partition v_part[V_NUMPAR]; /* partition headers */
- time_t timestamp[V_NUMPAR]; /* partition timestamp */
- /* (unsupported) */
- char v_asciilabel[LEN_DKL_ASCII]; /* compatibility */
-};
-
-/*
- * Partition permission flags
- */
-#define V_UNMNT 0x01 /* Unmountable partition */
-#define V_RONLY 0x10 /* Read only */
-
-/*
- * Partition identification tags
- */
-#define V_UNASSIGNED 0x00 /* unassigned partition */
-#define V_BOOT 0x01 /* Boot partition */
-#define V_ROOT 0x02 /* Root filesystem */
-#define V_SWAP 0x03 /* Swap filesystem */
-#define V_USR 0x04 /* Usr filesystem */
-#define V_BACKUP 0x05 /* full disk */
-#define V_VAR 0x07 /* Var partition */
-#define V_HOME 0x08 /* Home partition */
-#define V_ALTSCTR 0x09 /* Alternate sector partition */
-.Ed
-.It Dv DKIOCGEXTVTOC
-.Pp
-The argument is a pointer to an
-.Vt extvtoc
-structure (described below).
-This ioctl returns the device's current volume table of contents (VTOC).
-VTOC is extended to support a disk up to 2TB in size.
-For disks larger than 1TB this ioctl must be used instead of
-.Dv DKIOCGVTOC .
-.It Dv DKIOCSEXTVTOC
-.Pp
-The argument is a pointer to an
-.Vt extvtoc
-structure (described below).
-This ioctl changes the VTOC associated with the device.
-VTOC is extended to support a disk up to 2TB in size.
-For disks larger than 1TB this ioctl must be used instead of
-.Vt DKIOCSVTOC .
-.Bd -literal -offset 2n
-struct extpartition {
- ushort_t p_tag; /* ID tag of partition */
- ushort_t p_flag; /* permission flags */
- ushort_t p_pad[2]; /* reserved */
- diskaddr_t p_start; /* start sector no of partition */
- diskaddr_t p_size; /* # of blocks in partition */
-};
-
-struct extvtoc {
- uint64_t v_bootinfo[3]; /* info needed by mboot (unsupported) */
- uint64_t v_sanity; /* to verify vtoc sanity */
- uint64_t v_version; /* layout version */
- char v_volume[LEN_DKL_VVOL]; /* volume name */
- ushort_t v_sectorsz; /* sector size in bytes */
- ushort_t v_nparts; /* number of partitions */
- ushort_t pad[2];
- uint64_t v_reserved[10];
- struct extpartition v_part[V_NUMPAR]; /* partition headers */
- uint64_t timestamp[V_NUMPAR]; /* partition timestamp */
- /* (unsupported) */
- char v_asciilabel[LEN_DKL_ASCII]; /* for compatibility */
-};
-.Ed
-.Pp
-Partition permissions flags and identification tags
-are defined the same as vtoc structure.
-.It Dv DKIOCEJECT
-.Pp
-If the drive supports removable media, this
-.Xr ioctl 2
-requests the disk drive to eject its disk.
-.It Dv DKIOCREMOVABLE
-.Pp
-The argument to this
-.Xr ioctl 2
-is an integer.
-After successful completion, this
-.Xr ioctl 2
-sets that integer to a non-zero value if the drive in
-question has removable media.
-If the media is not removable, the integer is set to
-.Sy 0 .
-.It Dv DKIOCHOTPLUGGABLE
-.Pp
-The argument to this
-.Xr ioctl 2
-is an integer.
-After successful completion, this
-.Xr ioctl 2
-sets that integer to a non-zero value if the drive in question is hotpluggable.
-If the media is not hotpluggable, the integer is set to 0.
-.It Dv DKIOCSTATE
-.Pp
-This
-.Xr ioctl 2
-blocks until the state of the drive, inserted or ejected, is changed.
-The argument is a pointer to a
-.Vt dkio_state ,
-enum, whose possible enumerations are listed below.
-The initial value should be either the last
-reported state of the drive, or
-.Dv DKIO_NONE .
-Upon return, the enum pointed
-to by the argument is updated with the current state of the drive.
-.Bd -literal -offset 2n
-enum dkio_state {
- DKIO_NONE, /* Return disk's current state */
- DKIO_EJECTED, /* Disk state is 'ejected' */
- DKIO_INSERTED /* Disk state is 'inserted' */
-};
-.Ed
-.It Dv DKIOCLOCK
-.Pp
-For devices with removable media, this
-.Xr ioctl 2
-requests the disk drive to lock the door.
-.It Dv DKIOCUNLOCK
-.Pp
-For devices with removable media, this
-.Xr ioctl 2
-requests the disk drive to unlock the door.
-.It Dv DKIOCGMEDIAINFO
-.Pp
-The argument to this
-.Xr ioctl 2
-is a pointer to a
-.Vt dk_minfo
-structure.
-The structure indicates the type of media or the command set profile used by
-the drive to operate on the media.
-The
-.Vt dk_minfo
-structure also indicates the logical media block size the drive uses as the
-basic unit block size of operation and the raw formatted capacity of the media
-in number of logical blocks.
-.It Dv DKIOCGMEDIAINFOEXT
-.Pp
-The argument to this
-.Xr ioctl 2
-is a pointer to a
-.Vt dk_minfo_ext
-structure.
-The structure indicates the type of media or the command set profile
-used by the drive to operate on the media.
-The
-.Vt dk_minfo_ext
-structure
-also indicates the logical media block size the drive uses as the basic unit
-block size of operation, the raw formatted capacity of the media in number of
-logical blocks and the physical block size of the media.
-.Bd -literal -offset 2n
-/*
- * Used for media info or profile info
- */
-struct dk_minfo {
- uint_t dki_media_type; /* Media type or profile info */
- uint_t dki_lbsize; /* Logical blocksize of media */
- diskaddr_t dki_capacity; /* Capacity as # of dki_lbsize blks */
-};
-
-/*
- * Used for media info or profile info and physical blocksize
- */
-struct dk_minfo_ext {
- uint_t dki_media_type; /* Media type or profile info */
- uint_t dki_lbsize; /* Logical blocksize of media */
- diskaddr_t dki_capacity; /* Capacity as # of dki_lbsize blks */
- uint_t dki_pbsize; /* Physical blocksize of media */
-};
-
-
-/*
- * Media types or profiles known
- */
-#define DK_UNKNOWN 0x00 /* Media inserted - type unknown */
-
-/*
- * SFF 8090 Specification Version 3, media types 0x01 - 0xfffe are
- * retained to maintain compatibility with SFF8090. The following
- * define the optical media type.
- */
-#define DK_MO_ERASABLE 0x03 /* MO Erasable */
-#define DK_MO_WRITEONCE 0x04 /* MO Write once */
-#define DK_AS_MO 0x05 /* AS MO */
-#define DK_CDROM 0x08 /* CDROM */
-#define DK_CDR 0x09 /* CD-R */
-#define DK_CDRW 0x0A /* CD-RW */
-#define DK_DVDROM 0x10 /* DVD-ROM */
-#define DK_DVDR 0x11 /* DVD-R */
-#define DK_DVDRAM 0x12 /* DVD_RAM or DVD-RW */
-
-/*
- * Media types for other rewritable magnetic media
- */
-#define DK_FIXED_DISK 0x10001 /* Fixed disk SCSI or otherwise */
-#define DK_FLOPPY 0x10002 /* Floppy media */
-#define DK_ZIP 0x10003 /* IOMEGA ZIP media */
-#define DK_JAZ 0x10004 /* IOMEGA JAZ media */
-.Ed
-.Pp
-If the media exists and the host can obtain a current profile list, the command
-succeeds and returns the
-.Vt dk_minfo
-structure with data representing that media.
-.Pp
-If there is no media in the drive, the command fails and the host returns an
-.Er ENXIO
-error, indicating that it cannot gather the information requested.
-.Pp
-If the profile list is not available, the host attempts to identify the
-media-type based on the available information.
-.Pp
-If identification is not possible, the host returns media type
-.Dv DK_UNKNOWN .
-See
-.Sx NOTES
-for blocksize usage and capacity information.
-.It Dv DKIOCSMBOOT
-.Pp
-The argument is a pointer to struct
-.Vt mboot .
-.Pp
-Copies the
-.Vt mboot
-information supplied in the argument to the absolute sector 0 of the device.
-Prior to copying the information, this
-.Xr ioctl 2
-performs the following checks on the
-.Vt mboot
-data:
-.Bl -bullet -offset indent
-.It
-Ensures that the signature field is set to 0xAA55.
-.It
-Ensures that partitions do not overlap.
-.It
-On SPARC platforms, determines if the device is a removable media.
-.El
-.Pp
-If the above verification fails,
-.Va errno
-is set to
-.Er EINVAL
-and the
-.Xr ioctl 2
-command fails.
-.Pp
-x86 Platforms \(em Upon successful write of
-.Vt mboot ,
-the partition map structure maintained in the driver is updated.
-If the new Solaris partition is
-different from the previous one, the internal VTOC table maintained in the
-driver is set as follows:
-.Pp
-If
-.Dv _SUNOS_VTOC_8
-is defined:
-.Bd -unfilled -offset 4n
-Partition: 0 Start: 0 Capacity = Capacity of device.
-Partition: 2 Start: 0 Capacity = Capacity of device.
-.Ed
-.Pp
-If
-.Dv _SUNOS_VTOC_16
-is defined:
-.Bd -unfilled -offset 4n
-Partition: 2 Start: 0 Size = Size specified in mboot - 2 cylinders.
-Partition: 8 Start: 0 Size = Sectors/cylinder.
-Partition: 9 Start: Sectors/cylinder Size = 2 * sectors/cylinder
-.Ed
-.Pp
-To determine if the Solaris partition has changed:
-.Bd -offset 4n -ragged
-If either offset or the size of the Solaris partition is different from the
-previous one then it shall be deemed to have changed.
-In all other cases, the
-internal VTOC info remains as before.
-.Ed
-.Pp
-SPARC Platforms \(em The VTOC label and
-.Vt mboot
-both occupy the same location, namely sector 0.
-As a result, following the successful write of
-.Vt mboot
-info, the internal VTOC table maintained in the driver is set as follows:
-.Bd -unfilled -offset 4n
-Partition: 0 Start: 0 Size = Capacity of device.
-Partition: 2 Start: 0 Size = Capacity of device.
-.Ed
-.Pp
-See the
-.Sx NOTES
-section for usage of
-.Dv DKIOCSMBOOT
-when modifying Solaris partitions.
-.It Dv DKIOCGETVOLCAP
-.Pp
-This ioctl provides information and status of available capabilities.
-.Fa vc_info
-is a bitmap and the valid flag values are:
-.Pp
-.Bl -tag -width DKV_ABR_CAP -compact -offset 2n
-.It Dv DKV_ABR_CAP
-Capable of application-based recovery
-.It Dv DKV_DMR_CAP
-Ability to read specific copy of data when multiple copies exist.
-For example, in a two way mirror, this ioctl is used to read each
-side of the mirror.
-.El
-.Pp
-.Fa vc_set
-is a bitmap and the valid flag values are:
-.Pp
-.Bl -tag -width DKV_ABR_CAP -compact -offset 2n
-.It Dv DKV_ABR_CAP
-This flag is set if ABR has been set on a device that supports ABR functionality.
-.It Dv DKV_DMR_CAP
-Directed read has been enabled.
-.El
-.Pp
-These capabilities are not required to be persistent across a system reboot and
-their persistence depends upon the implementation.
-For example, if the ABR
-capability for a DRL mirror simply clears the dirty-region list and
-subsequently stops updating this list, there is no reason for persistence
-because the VM recovery is a no-op.
-Conversely, if the ABR capability is
-applied to a non-DRL mirror to indicate that the VM should not perform a full
-recovery of the mirror following a system crash, the capability must be
-persistent so that the VM know whether or not to perform recovery.
-.Pp
-Return Errors:
-.Pp
-.Bl -tag -width ENOTSUP -compact -offset 2n
-.It Er EINVAL
-Invalid device for this operation.
-.It Er ENOTSUP
-Functionality that is attempted to be set is not supported.
-.El
-.It Dv DKIOCSETVOLCAP
-.Pp
-This ioctl sets the available capabilities for the device.
-If a capability flag
-is not set in
-.Fa vc_set ,
-that capability is cleared.
-.Pp
-.Fa vc_info
-flags are ignored.
-.Pp
-.Fa vc_set
-valid flags are:
-.Pp
-.Bl -tag -width DKV_ABR_CAP -compact -offset 2n
-.It Dv DKV_ABR_CAP
-Flag to set application-based recovery.
-A device can successfully support ABR only if it is capable.
-.It Dv DKV_DMR_CAP
-Flag to set directed read.
-.El
-.It Dv DKIODMR
-.Pp
-.Ft int
-.Fo ioctl
-.Fa int ,
-.\" This could be .Fa as well -- but mandoc doesn't seem to allow both
-.Dv DKIODMR ,
-.Fa "vol_directed_rd *"
-.Fc
-.Pp
-This ioctl allows highly available applications to perform round-robin reads
-from the underlying devices of a replicated device.
-.Pp
-.Bl -tag -width vdr_bytesread -offset 2n -compact
-.It Fa vdr_offset
-Offset at which the read should occur.
-.It Fa vdr_nbytes
-Number of bytes to be read
-.It Fa vdr_bytesread
-Number of bytes successfully read by the kernel.
-.It Fa vdr_data
-Pointer to a user allocated buffer to return the data read
-.It Fa vdr_side
-Side to be read.
-Initialized to
-.Dv DKV_SIDE_INIT
-.It Fa vdr_side_name
-The volume name that has been read.
-.El
-.Pp
-Valid
-.Fa vdr_flags
-are:
-.Pp
-.Bl -tag -width DKV_DMR_NEXT_SIDE -offset 2n -compact
-.It Dv DKV_DMR_NEXT_SIDE
-Set by user
-.It Dv DKV_DMR_DONE
-Return value
-.It Dv DKV_DMR_ERROR
-Return value
-.It Dv DKV_DMR_SUCCESS
-Return value
-.It Dv DKV_DMR_SHORT
-Return value
-.El
-.Pp
-The calling sequence is as follows: The caller sets the
-.Fa vdr_flags
-to
-.Dv DK_DMR_NEXT_SIDE
-and
-.Fa vdr_side
-to
-.Dv DKV_SIDE_INIT
-at the start.
-Subsequent calls should be made without any changes to these values.
-If they are changed the results of the ioctl are indeterminate.
-.Pp
-When
-.Dv DKV_SIDE_INIT
-is set, the call results in the kernel reading from the first side.
-The kernel updates
-.Fa vdr_side
-to indicate the side that was read, and
-.Fa vdr_side_name
-to contain the name of that side.
-.Fa vdr_data
-contains the data that was read.
-Therefore to perform a round-robin read all of
-the valid sides, there is no need for the caller to change the contents of
-.Fa vdr_side .
-.Pp
-Subsequent
-.Xr ioctl 2
-calls result in reads from the next valid side until all valid
-sides have been read.
-On success, the kernel sets
-.Dv DKV_DMR_SUCCESS .
-The following table shows the values of
-.Fa vdr_flags
-that are returned when an error occurs:
-.Bl -column DKV_DMR_SHORT DKV_SIDE_INIT "Bytes requested cannot" -offset 2n
-.It Fa vda_flags Ta Fa vdr_side Ta Notes
-.It Dv DKV_DMR_ERROR Ta Dv DKV_SIDE_INIT Ta \&No valid side to read
-.It Dv DKV_DMR_DONE Ta Not Init side Ta All valid sides read
-.It Dv DKV_DMR_SHORT Ta Any value Ta Bytes requested cannot be read Fa vdr_bytesread No set to bytes actually read
-.El
-Typical code fragment:
-.Bd -literal -offset 2n
-enable->vc_set |= DKV_ABR_SET;
-retval = ioctl(filedes, DKIOSETVOLCAP, enable);
-if (retval != EINVAL || retval != ENOTSUP) {
- if (info->vc_set & DKV_DMR_SET) {
- dr->vdr_flags |= DKV_DMR_NEXT_SIDE;
- dr->vdr_side = DKV_SIDE_INIT;
- dr->vdr_nbytes = 1024;
- dr->vdr_offset = 0xff00;
- do {
- rval = ioctl(fildes, DKIODMR, dr);
- if (rval != EINVAL) {
- /* Process data */
- }
- } while (rval != EINVAL || dr->vdr_flags &
- (DKV_DMR_DONE | DKV_DMR_ERROR | DKV_DMR_SHORT)
- }
-}
-.Ed
-.El
-.Ss "RETURN VALUES"
-Upon successful completion, the value returned is
-.Sy 0 .
-Otherwise,
-.Sy -1
-is returned and
-.Va errno
-is set to indicate the error.
-.Ss "x86 Only"
-The following
-.Xr ioctl 2
-requests set and/or retrieve the current disk
-controller, partitions, or geometry information on the x86 architecture.
-.Bl -tag -width 1n
-.It Dv DKIOCG_PHYGEOM
-.Pp
-The argument is a pointer to a
-.Vt dk_geom
-structure (described below).
-This
-.Xr ioctl 2
-gets the driver's notion of the physical geometry of the disk drive.
-It is functionally identical to the
-.Dv DKIOCGGEOM
-.Xr ioctl 2 .
-.It Dv DKIOCG_VIRTGEOM
-.Pp
-The argument is a pointer to a
-.Vt dk_geom
-structure (described below).
-This
-.Xr ioctl 2
-gets the controller's (and hence the driver's) notion of the
-virtual geometry of the disk drive.
-Virtual geometry is a view of the disk
-geometry maintained by the firmware in a host bus adapter or disk controller.
-If the disk is larger than 8 Gbytes, this ioctl fails because a CHS-based
-geometry is not relevant or useful for this drive.
-.Bd -literal -offset 2n
-/*
- * Definition of a disk's geometry
- */
-struct dk_geom {
- unsigned shor dkg_ncyl; /* # of data cylinders */
- unsigned shor dkg_acyl; /* # of alternate cylinders */
- unsigned short dkg_bcyl; /* cyl offset (for fixed head */
- /* area) */
- unsigned short dkg_nhead; /* # of heads */
- unsigned short dkg_obs1; /* obsolete */
- unsigned short dkg_nsect; /* # of sectors per track */
- unsigned short dkg_intrlv; /* interleave factor */
- unsigned short dkg_obs2; /* obsolete */
- unsigned short dkg_obs3; /* obsolete */
- unsigned short dkg_apc; /* alternates per cylinder */
- /* (SCSI only) */
- unsigned short dkg_rpm; /* revolutions per min */
- unsigned short dkg_pcyl; /* # of physical cylinders */
- unsigned short dkg_write_reinstruct; /* # sectors to skip, */
- /* writes */
- unsigned short dkg_read_reinstruct; /* # sectors to skip ,*/
- /* reads */
- unsigned short dkg_extra[7]; /* for compatible expansion */
-};
-.Ed
-.It Dv DKIOCADDBAD
-.Pp
-This
-.Xr ioctl 2
-forces the driver to re-examine the alternates slice and
-rebuild the internal bad block map accordingly.
-It should be used whenever the
-alternates slice is changed by any method other than the
-.Xr addbadsec 1M
-or
-.Xr format 1M
-utilities.
-.Dv DKIOCADDBAD
-can only be used for software
-remapping on
-.Sy IDE
-drives;
-.Sy SCSI
-drives use hardware remapping of alternate sectors.
-.It Dv DKIOCPARTINFO
-.Pp
-The argument is a pointer to a
-.Vt part_info
-structure (described below).
-This
-.Xr ioctl 2
-gets the driver's notion of the size and extent of the
-partition or slice indicated by the file descriptor argument.
-.Bd -literal -offset 2n
-/*
- * Used by applications to get partition or slice information
- */
-struct part_info {
- daddr_t p_start;
- int p_length;
-};
-.Ed
-.It Dv DKIOCEXTPARTINFO
-.Pp
-The argument is a pointer to an
-.Vt extpart_info
-structure (described below).
-This ioctl gets the driver's notion of the size and extent of the partition or
-slice indicated by the file descriptor argument.
-On disks larger than 1TB, this ioctl must be used instead of
-.Dv DKIOCPARTINFO .
-.Bd -literal -offset 2n
-/*
- * Used by applications to get partition or slice information
- */
-struct extpart_info {
- diskkaddr_t p_start;
- diskaddr_t p_length;
-};
-.Ed
-.It Dv DKIOCSETEXTPART
-.Pp
-This ioctl is used to update the in-memory copy of the logical drive
-information maintained by the driver.
-The ioctl takes no arguments.
-It causes a re-read of the partition information and recreation of minor nodes
-if required.
-Prior to updating the data structures, the ioctl ensures that the partitions do
-not overlap.
-Device nodes are created only for valid partition entries.
-If there is any change in the partition offset, size or ID from the previous
-read, the partition is deemed to have been changed and hence the device nodes
-are recreated.
-Any modification to any of the logical partitions results in the
-recreation of all logical device nodes.
-.El
-.Sh SEE ALSO
-.Xr addbadsec 1M ,
-.Xr fdisk 1M ,
-.Xr format 1M ,
-.Xr ioctl 2 ,
-.Xr cmdk 7D ,
-.Xr sd 7D ,
-.Xr cdio 7I ,
-.Xr fdio 7I ,
-.Xr hdio 7I
-.Sh NOTES
-Blocksize information provided in
-.Dv DKIOCGMEDIAINFO
-is the size (in bytes) of the device's basic unit of operation and can differ
-from the blocksize that the Solaris operating environment exports to the user.
-Capacity information provided in the
-.Dv DKIOCGMEDIAINFO
-are for reference only and you are advised to use the values returned by
-.Dv DKIOCGGEOM
-or other appropriate
-.Xr ioctl 2
-for accessing data using the standard interfaces.
-.Pp
-For x86 only: If the
-.Dv DKIOCSMBOOT
-command is used to modify the Solaris partitions, the VTOC information should
-also be set appropriately to reflect the changes to partition.
-Failure to do so leads to unexpected results when the
-device is closed and reopened fresh at a later time.
-This is because a default VTOC is assumed by driver when a Solaris partition
-is changed.
-The default VTOC persists until the ioctl
-.Dv DKIOCSVTOC
-is called to modify VTOC or the device is closed and reopened.
-At that point, the old valid VTOC is read from
-the disk if it is still available.