Subject: RE: proposal for MI floppy formatting
To: 'John Kohl' <>
From: Adam Glass <>
List: tech-kern
Date: 11/17/1996 11:28:12
A question about the fdformat_result enumerator:

Why does it exist?  Isn't returning an appropriate code back from the
ioctl sufficient?  Seems like it is sufficient for every other ioctl I
can think of.


>-----Original Message-----
>From:	John Kohl []
>Sent:	Saturday, November 16, 1996 9:03 AM
>Subject:	proposal for MI floppy formatting
>MI floppy formatting proposal:
>$Id: proposal,v 1.2 1996/11/16 17:02:32 jtk Exp $
>Gordon Ross and Ignatios Souvatzis commented last month on my call for
>suggestions on floppy formatting.
>Gordon suggested a generic formatting interface with get/set and format
>commands, and suggested that we verify any interface is sufficiently
>flexible for SCSI floppy formatting.
>Ignatios explained how the amiga drivers work (essentially, all software
>magic); I think the interface below should work OK for an Amiga; it's
>more complicated than the simple "dd" that they can use for formatting
>but should be easily implementable for those drivers.
>So, here's my first draft proposal for floppy drivers, mostly pulled up
>from the existing i386 floppy formatting code.  I haven't a SCSI-2 spec
>to verify this with--can someone take a look and see if there are any
>additional parameters that could/should be passed in the fdformat_parms?
>Floppy diskette drivers provide the following IOCTLs:
>FDIOCSETFORMAT(struct fdformat_parms):
>	set formatting parameters, using 'struct fdformat_parms'
>	the driver saves this state and it persists while the device is open.
>FDIOCGETFORMAT(struct fdformat_parms):
>	fetch current formatting parameters into 'struct fdformat_parms'
>FDIOCFORMAT_TRACK(struct fdformat_cmd):
>	format a track on the medium, returning format results
>	[I chose a per-track format, since feedback during formatting a
>	disk is nice.  An alternative would be a list or range of
>	heads/cylinders to format, and an array of success/failure values for
>	each one.  Comments welcome]
>enum fdformat_result {
>	FDFORMAT_MEDIA_ERROR,		/* hardware reported a formatting
>					   error */
>	FDFORMAT_CONFIG_ERROR		/* something bogus in parameters */
>struct fdformat_cmd {
>	int head;		/* IN */
>	int cylinder;		/* IN */
>	enum fdformat_result result;	/* OUT */
>#define FDFORMAT_VERSION 19961116
>struct fdformat_parms {
>/* list of items taken from i386 formatting glop (NEC 765);
>   should be made the union of support needed for other devices. */
>    int fdformat_version;	/* rev this when needed; write drivers to
>				   allow forward compatibility, please,
>				   and add elements to the end of the
>				   structure */
>    int sector_shift;
>    int nbps;				/* number of bytes per sector */
>    int ncyl;				/* number of cylinders */
>    int nspt;				/* sectors per track */
>    int ntrk;				/* number of heads/tracks per cyl */
>    int stepspercyl;			/* steps per cylinder */
>    int gaplen;				/* formatting gap length */
>    int fillbyte;			/* formatting fill byte */
>    int xfer_rate;			/* in bits per second; driver
>					   must convert */