summaryrefslogtreecommitdiff
path: root/usr/src/man/man4i/fdio.4i
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/man/man4i/fdio.4i')
-rw-r--r--usr/src/man/man4i/fdio.4i277
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