diff options
Diffstat (limited to 'usr/src/man/man7i/dkio.7i')
-rw-r--r-- | usr/src/man/man7i/dkio.7i | 867 |
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. |