|
|
DataMuseum.dkPresents historical artifacts from the history of: Regnecentalen RC-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Regnecentalen RC-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T U f
Length: 8618 (0x21aa)
Types: TextFile
Notes: UNIX file
Names: »fd.h«
└─⟦a6ab2eb36⟧ Bits:30004042/kconfig3.imd SW95705I 386/ix Multi-user Release 1.2
└─⟦a6ab2eb36⟧ UNIX Filesystem
└─⟦this⟧ »kc/new/usr/include/sys/fd.h«
/*
* Parameters for PC AT floppy disk driver.
*/
/*
* Copyrighted as an unpublished work.
* (c) Copyright 1986 INTERACTIVE Systems Corporation
* All rights reserved.
*
* RESTRICTED RIGHTS
*
* These programs are supplied under a license. They may be used,
* disclosed, and/or copied only as permitted under such license
* agreement. Any copy must contain the above copyright notice and
* this restricted rights notice. Use, copying, and/or disclosure
* of the programs is strictly prohibited unless otherwise provided
* in the license agreement.
*/
#ident "@(#)fd.h 1.12 - 88/03/15"
#define FD0 0 /* major device number for floppy disk */
/*
* the floppy disk minor device number is interpreted as follows:
* bits:
* 7 4 3 21 0
* +----+-+--+-+
* |fmt |s|pt|u|
* +----+-+--+-+
* codes:
* u - unit no. (0 or 1)
* pt - partition no. (0 - 3)
* s - single/double sided (1 = single)
* fmt - format code, no. of bytes per sector/ no. of sectors per trk.
*/
#define PARTITION(x) ((minor(x) & 0x06) >> 1)
#define UNIT(x) (minor(x) & 0x01)
#define FRMT(x) ((minor(x) & 0xf0) >> 4)
#define SIDES(x) ((minor(x) & 0x08) ? 1 : 2)
#define FDNPART 4 /* maximum number of partitions */
#define FDNSECT 16 /* maximum number of format types */
/*
* Defines for controller access.
*/
#define FDSTAT 0x3f4 /* I/O port addr of floppy controller status port */
#define FDDATA 0x3f5 /* I/O port addr of floppy controller data port */
#define FCBUSY 0x10 /* controller busy bit */
#define IODIR 0x40 /* data reg I/O direction, 1 = read, 0 = write */
#define IORDY 0x80 /* data register ready to xfer bit */
#define FCRETRY 2000 /* this many ten microseconds equals 20ms. */
#define CTIMOUT 0x02 /* Timed out waiting for IORDY in fdcmd */
#define RTIMOUT 0x03 /* Timed out waiting for IORDY in fdresult*/
#define NECERR 0x04 /* Controller wont go idle error flag */
#define ONESIDE 0x08 /* indicates in minor dev that we want single sided */
#define NUMDRV 2 /* maximum number of drives supported */
#define NHDS 2 /* default number of heads */
#define NSECS 9 /* default number of sectors per track */
#define NCYLS 40 /* default number of cylinders */
#define SECSIZE 512 /* default sector size */
#define SECSHFT 9
#define SECMASK (SECSIZE-1)
#define OPEN_EMAX 1 /* max number of retries during open processing */
#define FORM_EMAX 3 /* max number of retries during format */
#define TRYRESET 5 /* try a reset after this many errrors */
#define NORM_EMAX 10 /* normal max number of retries */
#define RUNTIM 2
#define WAITTIM 4
#define LOADTIM 10
#ifdef AT386
#define MTIME 100 /* no. of clock ticks in one second */
#define ETIMOUT 50 /* no. of clock ticks in 1/2 second */
#define T25MS 3 /* no. of clock ticks in 25 milliseconds */
#define T500MS 50 /* no. of clock ticks in 50 milliseconds */
#define T50MS 5 /* no. of clock ticks in 50 milliseconds */
#define T750MS 75 /* no. of clock ticks in 750 milliseconds */
#else
#define MTIME 60
#define ETIMOUT 30
#define T25MS 2
#define T500MS 30
#define T50MS 4
#define T750MS 45
#endif /* AT386 */
#define OPEN 0x01
#define WOPEN 0x02
#define RECAL 0x04
#define CLOSING 0x08
#define RSTDOPN 0x20
#define WINTR 0x01
#define WRESET 0x02
#define DMA_RD 0x46
#define DMA_WR 0x4A
#define FDCSR1 0x03F7
#define DOOROPEN 0x80
#define FDCTRL 0x03F2
#define NORESET 0x04
#ifdef PS2
#define ENABINT 0x00
#else
#define ENABINT 0x08
#endif
#define ENABMOTOR 0x10
#define FD0BSY 0x01 /* drive is seeking */
#define FD1BSY 0x02
#define FD2BSY 0x04
#define FD3BSY 0x08
#define FCBSY 0x10 /* controller is busy */
#define NODMA 0x20 /* controller in non-DMA mode */
/*
* Floppy controller commands
*/
#define RDCMD 0x26
#define SEEK 0x0F
#define FORMAT 0x0D
#define READID 0x0A
#define SENSE_INT 0x08
#define REZERO 0x07
#define WRCMD 0x05
#define SENSE_DRV 0x04 /* read status register 3 */
#define SPECIFY 0x03
#ifdef VPIX
#define READDEL 0x0C
#define WRITEDEL 0x09
#define READTRACK 0x02
#define RAWCMD 0x7F /* command is thru raw I/O ioctl */
#endif
#define INVALID 0x80 /* status register 0 */
#define ABNRMTERM 0x40
#define SEEKEND 0x20
#define EQCHK 0x10
#define NOTRDY 0x08
#define EOCYL 0x80 /* status register 1 */
#define CRCERR 0x20
#define OVRRUN 0x10
#define NODATA 0x04
#define MADR 0x01
#define FAULT 0x80 /* status register 3 */
#define WPROT 0x40
#define RDY 0x20
#define TWOSIDE 0x08
/* NEW_HARDWARE CMOS drive descriptions */
#define DRV_NONE 0x00
#define DRV_DBL 0x01
#define DRV_QUAD 0x02
#define DRV_720 0x04 /* LOW_35 gets changed to this for or'ing */
#define DRV_144 0x08 /* HI35 gets changed to this for or'ing */
#define LOW_35 0x03
#define HI_35 0x04
/* encodings for the 'fdf_den' field in structure 'fdparam' */
#define DEN_MFM 0x40 /* double density disks */
#define DEN_FM 0x00 /* single density disks */
/* encodings for the 'fdf_bps' field in structure 'fdparam' */
#define BPS128 0 /* 128 bytes per sector */
#define BPS256 1 /* 256 bytes per sector */
#define BPS512 2 /* 512 bytes per sector */
#define BPS1024 3 /* 1024 bytes per sector */
#define MAXBPS 3 /* maximum value of the 'fdf_bps' field */
/*
* partition table for floppy disks
* we support, 3 different partitions:
* 0 - the whole disk;
* 1 - the first cylinder on the disk
* 2 - the whole disk minus the first cylinder
*/
struct fdpartab {
int startcyl; /* cylinder no. where partition starts */
int numcyls; /* number of cylinders in partition */
};
/*
* sector table for floppy disks,
* specifies number of bytes per sector and
* number of sectors per track and number of cylinders
*/
struct fdsectab {
unsigned short fd_ssize; /* number of bytes in a sector */
unsigned short fd_sshift; /* shift to convert bytes to sectors */
unsigned short fd_ncyls; /* number of cylinders */
unsigned char fd_nsect; /* number of sectors per track */
unsigned char fd_drvs; /* bitmask of drive types supporting */
unsigned char fd_gpln; /* normal gap length */
unsigned char fd_gplf; /* format gap length */
};
struct fdstate {
char fd_status;
char fd_maxerr;
unsigned char fd_drvtype;
unsigned char fd_trnsfr;
unsigned char fd_hst;
unsigned char fd_mst;
unsigned char fd_dstep;
unsigned short fd_cylskp;
unsigned short fd_ncyls;
unsigned short fd_secsiz;
unsigned short fd_secmsk;
unsigned char fd_secsft;
unsigned char fd_nsides;
unsigned char fd_nsects;
unsigned char fd_cylsiz;
unsigned char fd_curcyl;
unsigned char fd_lsterr;
unsigned short fd_n512b;
dev_t fd_device;
struct proc *fd_proc;
};
struct fdparam { /* used by FDSPARAM and FDGPARAM commands */
char fdf_bps; /* number of bytes per sector - encoded */
char fdf_spt; /* number of sectors per track */
char fdf_gpln; /* gap length for normal R/W operations */
char fdf_gplf; /* gap length for format operations */
char fdf_dtl; /* length of sector if 'fdf_bps' = 0 */
char fdf_fil; /* fill byte to use while formatting */
char fdf_den; /* FM or MFM encoding */
char fdf_nhd; /* number of heads */
short fdf_ncyl; /* number of cylinders */
};
struct fdformid { /* used by FDFMTTRK command */
char fdf_track;
char fdf_head;
char fdf_sec;
char fdf_secsiz;
};
#ifdef VPIX
#define FIOC ('F'<<8)
#define F_DTYP (FIOC|60) /* returns fd_drvtype */
#define F_FCR (FIOC|61) /* output to Floppy Control Register */
#define F_DOR (FIOC|62) /* output to Digital Output Register */
#define F_RAW (FIOC|63) /* general raw controller interface */
struct fdraw { /* used by F_RAW command */
char fr_cmd[10]; /* user-supplied command bytes */
short fr_cnum; /* number of command bytes */
char fr_result[10]; /* controller-supplied result bytes */
short fr_nbytes; /* number to transfer if read/write command */
char *fr_addr; /* where to transfer if read/write command */
};
#define FDMEMSIZE (36*512) /* Size in bytes of initial raw i/o */
/* request supported. Must be less */
/* than 65536 for dma wrap avoidance*/
struct fdbufstruct {
int fbs_flags;
caddr_t fbs_addr;
unsigned int fbs_size;
};
#endif