diff options
Diffstat (limited to 'usr/src/man/man4i/fdio.4i')
-rw-r--r-- | usr/src/man/man4i/fdio.4i | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/usr/src/man/man4i/fdio.4i b/usr/src/man/man4i/fdio.4i new file mode 100644 index 0000000000..a3f01b1021 --- /dev/null +++ b/usr/src/man/man4i/fdio.4i @@ -0,0 +1,277 @@ +.\" Copyright (c) 2001, Sun Microsystems, Inc. All Rights Reserved +.\" Copyright (c) 2017, Joyent, Inc. +.\" 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] +.Dd October 22, 2017 +.Dt FDIO 4I +.Os +.Sh NAME +.Nm fdio +.Nd floppy disk control operations +.Sh SYNOPSIS +.In sys/fdio.h +.Sh DESCRIPTION +The Solaris floppy driver supports a set of +.Xr ioctl 2 +requests for getting and setting the floppy drive characteristics. +Basic to these +.Xr ioctl 2 +requests are the definitions in +.In sys/fdio.h . +.Sh IOCTLS +The following +.Xr ioctl 2 +requests are available on the Solaris floppy driver. +.Bl -tag -width FDDEFGEOCHAR +.It Dv FDDEFGEOCHAR +x86 based systems: This +.Xr ioctl 2 +forces the floppy driver to restore +the diskette and drive characteristics and geometry, and partition information +to default values based on the device configuration. +.It Dv FDGETCHANGE +The argument is a pointer to an +.Vt int . +This +.Xr ioctl 2 +returns the status of the diskette-changed signal from the floppy interface. +The following defines are provided for cohesion. +.El +.Pp +Note: For x86 based systems, use +.Dv FDGC_DETECTED +(which is available only on x86 based systems) instead of +.Dv FDGC_HISTORY . +.Bd -literal -offset 2n +/* + * Used by FDGETCHANGE, returned state of the sense disk change bit. + */ +#define FDGC_HISTORY 0x01 /* + * disk has changed since insertion or + * last FDGETCHANGE call + */ +#define FDGC_CURRENT 0x02 /* + * if set, indicates drive has floppy, + * otherwise, drive is empty + */ +#define FDGC_CURWPROT 0x10 /* current state of write protect */ +#define FDGC_DETECTED 0x20 /* previous state of DISK CHANGE */ +.Ed +.Bl -tag -width FDIOGCHAR +.It Dv FDIOGCHAR +The argument is a pointer to an +.Vt fd_char +structure (described below). +This +.Xr ioctl 2 +gets the characteristics of the floppy diskette from the floppy controller. +.It Dv FDIOSCHAR +The argument is a pointer to an +.Vt fd_char +structure (described below). +This +.Xr ioctl 2 +sets the characteristics of the floppy diskette for the floppy controller. +Typical values in the +.Vt fd_char +structure for a high density diskette: +.Bl -column fdc_stransfer_rate value "{ This field doesn't apply. }" +.It Field Ta Value Ta +.It fdc_medium Ta 0 Ta +.It fdc_transfer_rate Ta 500 Ta +.It fdc_ncyl Ta 80 Ta +.It fdc_nhead Ta 2 Ta +.It fdc_sec_size Ta 512 Ta +.It fdc_secptrack Ta 18 Ta +.It fdc_steps Ta -1 Ta { This field doesn't apply. } +.El +.El +.Bd -literal -offset 2n +/* + * Floppy characteristics + */ +struct fd_char { + uchar_t fdc_medium; /* equals 1 if floppy is medium density format */ + int fdc_transfer_rate; /* transfer rate */ + int fdc_ncyl; /* number of cylinders */ + int fdc_nhead; /* number of heads */ + int fdc_sec_size; /* sector size */ + int fdc_secptrack; /* sectors per track */ + int fdc_steps; /* no. of steps per data track */ +}; +.Ed +.Bl -tag -width FDGETDRIVECHAR +.It Dv FDGETDRIVECHAR +The argument to this +.Xr ioctl 2 +is a pointer to an +.Vt fd_drive +structure (described below). +This +.Xr ioctl 2 +gets the characteristics of the floppy drive from the floppy controller. +.It Dv FDSETDRIVECHAR +x86 based systems: The argument to this +.Xr ioctl 2 +is a pointer to an +.Vt fd_drive +structure (described below). +This +.Xr ioctl 2 +sets the characteristics of the floppy drive for the floppy controller. +Only +.Fa fdd_steprate , +.Fa fdd_headsettle , +.Fa fdd_motoron , +and +.Fa fdd_motoroff +are actually used by the floppy disk driver. +.El +.Bd -literal -offset 2n +/* + * Floppy Drive characteristics + */ +struct fd_drive { + int fdd_ejectable; /* does the drive support eject? */ + int fdd_maxsearch; /* size of per-unit search table */ + int fdd_writeprecomp; /* cyl to start write precompensation */ + int fdd_writereduce; /* cyl to start recucing write current */ + int fdd_stepwidth; /* width of step pulse in 1 us units */ + int fdd_steprate; /* step rate in 100 us units */ + int fdd_headsettle; /* delay, in 100 us units */ + int fdd_headload; /* delay, in 100 us units */ + int fdd_headunload; /* delay, in 100 us units */ + int fdd_motoron; /* delay, in 100 ms units */ + int fdd_motoroff; /* delay, in 100 ms units */ + int fdd_precomplevel; /* bit shift, in nano-secs */ + int fdd_pins; /* defines meaning of pin 1, 2, 4 and 34 */ + int fdd_flags; /* TRUE READY, Starting Sector #, & Motor On */ +}; +.Ed +.Bl -tag -width FDGETSEARCH +.It Dv FDGETSEARCH +Not available. +.It Dv FDSETSEARCH +Not available. +.It Dv FDEJECT +SPARC: This +.Xr ioctl 2 +requests the floppy drive to eject the diskette. +.It Dv FDIOCMD +The argument is a pointer to an +.Vt fd_cmd +structure (described below). +This +.Xr ioctl 2 +allows access to the floppy diskette using the floppy device driver. +Only the +.Dv FDCMD_WRITE , +.Dv FDCMD_READ , +and +.Dv FDCMD_FORMAT_TRACK +commands are currently available. +.El +.Bd -literal -offset 2n +struct fd_cmd { + ushort_t fdc_cmd; /* command to be executed */ + int fdc_flags; /* execution flags (x86 only) */ + daddr_t fdc_blkno; /* disk address for command */ + int fdc_secnt; /* sector count for command */ + caddr_t fdc_bufaddr; /* user's buffer address */ + uint_t fdc_buflen; /* size of user's buffer */ +}; +.Ed +.Pp +Please note that the +.Fa fdc_buflen +field is currently unused. +The +.Fa fdc_secnt +field is used to calculate the transfer size, and the buffer is +assumed to be large enough to accommodate the transfer. +.Bd -literal -offset 2n +/* + * Floppy commands + */ +#define FDCMD_WRITE 1 +#define FDCMD_READ 2 +#define FDCMD_SEEK 3 +#define FDCMD_REZERO 4 +#define FDCMD_FORMAT_UNIT 5 +#define FDCMD_FORMAT_TRACK 6 +.Ed +.Bl -tag -width FDRAW +.It Dv FDRAW +The argument is a pointer to an +.Vt fd_raw +structure (described below). +This +.Xr ioctl 2 +allows direct control of the floppy drive using the floppy controller. +Refer to the appropriate floppy-controller data sheet for full +details on required command bytes and returned result bytes. +The following commands are supported. +.El +.Bd -literal -offset 2n +/* + * Floppy raw commands + */ +#define FDRAW_SPECIFY 0x03 +#define FDRAW_READID 0x0a (x86 only) +#define FDRAW_SENSE_DRV 0x04 +#define FDRAW_REZERO 0x07 +#define FDRAW_SEEK 0x0f +#define FDRAW_SENSE_INT 0x08 (x86 only) +#define FDRAW_FORMAT 0x0d +#define FDRAW_READTRACK 0x02 +#define FDRAW_WRCMD 0x05 +#define FDRAW_RDCMD 0x06 +#define FDRAW_WRITEDEL 0x09 +#define FDRAW_READDEL 0x0c +.Ed +.Pp +Please note that when using +.Dv FDRAW_SEEK +or +.Dv FDRAW_REZERO , +the driver automatically issues a +.Dv FDRAW_SENSE_INT +command to clear the interrupt from the +.Dv FDRAW_SEEK +or the +.Dv FDRAW_REZERO . +The result bytes returned by these commands are the results from the +.Dv DRAW_SENSE_INT +command. +Please see the floppy-controller data sheet for +more details on +.Dv FDRAW_SENSE_INT . +.Bd -literal -offset 2n +/* + * Used by FDRAW + */ +struct fd_raw { + char fdr_cmd[10]; /* user-supplied command bytes */ + short fdr_cnum; /* number of command bytes */ + char fdr_result[10]; /* controller-supplied result bytes */ + ushort_t fdr_nbytes; /* number to transfer if read/write command */ + char *fdr_addr; /* where to transfer if read/write command */ +}; +.Ed +.Sh SEE ALSO +.Xr ioctl 2 , +.Xr fd 4D , +.Xr dkio 4I , +.Xr hdio 4I |