home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 15 / 15.iso / s / s053 / 8.ddi / usr / include / sys / fd.h < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-08  |  8.1 KB  |  255 lines

  1. /*    Copyright (c) 1990 UNIX System Laboratories, Inc.    */
  2. /*    Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T    */
  3. /*      All Rights Reserved      */
  4.  
  5. /*    THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF         */
  6. /*    UNIX System Laboratories, Inc.                         */
  7. /*    The copyright notice above does not evidence any       */
  8. /*    actual or intended publication of such source code.    */
  9.  
  10. #ifndef _SYS_FD_H
  11. #define _SYS_FD_H
  12.  
  13. #ident    "@(#)/usr/include/sys/fd.h.sl 1.1 4.0 12/08/90 51021 AT&T-USL"
  14.  
  15. #define    FD0    0    /* major device number for floppy disk */
  16.  
  17. /*
  18.  * the floppy disk minor device number is interpreted as follows:
  19.  *     bits:
  20.  *     7  4 3 21 0
  21.  *     +----+-+--+-+
  22.  *     |fmt |s|pt|u|
  23.  *     +----+-+--+-+
  24.  *     codes:
  25.  *    u   - unit no. (0 or 1)
  26.  *    pt  - partition no. (0 - 3)
  27.  *    s   - single/double sided (1 = single)
  28.  *    fmt - format code, no. of bytes per sector/ no. of sectors per trk.
  29.  */
  30.  
  31. #define    PARTITION(x)    ((getminor(x) & 0x06) >> 1)
  32. #define UNIT(x)        (getminor(x) & 0x01)
  33. #define    FRMT(x)        ((getminor(x) & 0xf0) >> 4)
  34. #define    SIDES(x)    ((getminor(x) & 0x08) ? 1 : 2)
  35.  
  36. /*
  37.  * Defines for controller access.
  38.  */
  39. #define    FDSTAT    0x3f4    /* I/O port addr of floppy controller status port */
  40. #define    FDDATA    0x3f5    /* I/O port addr of floppy controller data port */
  41.  
  42. #define    FCBUSY    0x10    /* controller busy bit */
  43. #define    IODIR    0x40    /* data reg I/O direction, 1 = read, 0 = write */
  44. #define    IORDY    0x80    /* data register ready to xfer bit */
  45.  
  46. #define    FCRETRY    4000    /* this many ten microseconds equals 40ms. */
  47.  
  48. #define    CTIMOUT    0x02    /* Timed out waiting for IORDY in fdcmd */
  49. #define    RTIMOUT    0x03    /* Timed out waiting for IORDY in fdresult*/
  50. #define    NECERR    0x04    /* Controller wont go idle error flag */
  51.  
  52. #define ONESIDE 0x08    /* indicates in minor dev that we want single sided */
  53.  
  54. #define NUMDRV  2           /* maximum number of drives supported */
  55. #define NHDS    2           /* default number of heads */
  56. #define NSECS   9           /* default number of sectors per track */
  57. #define NCYLS   40          /* default number of cylinders */
  58. #define SECSIZE 512         /* default sector size */
  59. #define SECSHFT 9
  60. #define SECMASK (SECSIZE-1)
  61.  
  62. #define FD          ('R'<<8)
  63. #define FDSPARAM    (FD | 00)   /* set the drive paramaters */
  64. #define FDGPARAM    (FD | 01)   /* get the drive paramaters */
  65. #define FDFMTTRK    (FD | 02)   /* format a single track */
  66.  
  67. #define OPEN_EMAX   1       /* max number of retries during open processing */
  68. #define FORM_EMAX   3       /* max number of retries during format */
  69. #define TRYRESET    5       /* try a reset after this many errrors */
  70. #define NORM_EMAX   10      /* normal max number of retries */
  71.  
  72. #define RUNTIM  3
  73. #define WAITTIM 4
  74. #define LOADTIM 10
  75. #define MTIME   100    /* no. of clock ticks in one second */
  76. #define ETIMOUT 50    /* no. of clock ticks in 1/2 second */
  77. #define T25MS   3    /* no. of clock ticks in 25 milliseconds */
  78. #define T500MS  50    /* no. of clock ticks in 500 milliseconds */
  79. #define T50MS   5    /* no. of clock ticks in 50 milliseconds */
  80. #define T750MS  75    /* no. of clock ticks in 750 milliseconds */
  81.  
  82. #define OPENED  0x01
  83. #define OPENING 0x02
  84. #define RECAL   0x04
  85. #define CLOSING 0x08
  86. #define EXCLUSV 0x10
  87. #define RSTDOPN 0x20
  88.  
  89. #define WINTR   0x01
  90. #define    WRESET    0x02
  91.  
  92. #define D_NTRK  40      /* 40 tracks - double density */
  93. #define Q_NTRK  80      /* 80 tracks - quad density */
  94.  
  95.  
  96. #define FDCSR1      0x03F7
  97. #define DOOROPEN    0x80
  98. #define FDCTRL      0x03F2
  99. #define NORESET     0x04
  100. #define ENABINT     0x08
  101. #define ENABMOTOR   0x10
  102.  
  103. #define FD0BSY      0x01    /* drive is seeking */
  104. #define FD1BSY      0x02
  105. #define FD2BSY      0x04
  106. #define FD3BSY      0x08
  107. #define FCBSY       0x10    /* controller is busy */
  108. #define NODMA       0x20    /* controller in non-DMA mode */
  109.  
  110. /*
  111.  * Floppy controller commands
  112.  */
  113. #define RDCMD       0x26
  114. #define SEEK        0x0F
  115. #define FORMAT      0x0D
  116. #define READID      0x0A
  117. #define SENSE_INT   0x08
  118. #define REZERO      0x07
  119. #define WRCMD       0x05
  120. #define SENSE_DRV   0x04        /* read status register 3 */
  121. #define SPECIFY     0x03
  122.  
  123. #define READDEL     0x0C
  124. #define WRITEDEL    0x09
  125. #define READTRACK   0x02
  126. #define RAWCMD      0x7F    /* command is thru raw I/O ioctl */
  127.  
  128. #define INVALID     0x80        /* status register 0 */
  129. #define ABNRMTERM   0x40
  130. #define SEEKEND     0x20
  131. #define EQCHK       0x10
  132. #define NOTRDY      0x08
  133.  
  134. #define EOCYL       0x80        /* status register 1 */
  135. #define CRCERR      0x20
  136. #define OVRRUN      0x10
  137. #define NODATA      0x04
  138. #define MADR        0x01
  139.  
  140. #define FAULT       0x80        /* status register 3 */
  141. #define WPROT       0x40
  142. #define RDY         0x20
  143. #define TWOSIDE     0x08
  144.  
  145. /* NEW_HARDWARE CMOS drive descriptions */
  146. #define DRV_NONE    0x00
  147. #define DRV_DBL     0x01
  148. #define DRV_QUAD    0x02
  149.  
  150.         /* encodings for the 'fdf_den' field in structure 'fdparam' */
  151. #define DEN_MFM 0x40        /* double density disks */
  152. #define DEN_FM  0x00        /* single density disks */
  153.  
  154.         /* encodings for the 'fdf_bps' field in structure 'fdparam' */
  155. #define BPS128  0           /* 128 bytes per sector */
  156. #define BPS256  1           /* 256 bytes per sector */
  157. #define BPS512  2           /* 512 bytes per sector */
  158. #define BPS1024 3           /* 1024 bytes per sector */
  159. #define MAXBPS  3           /* maximum value of the 'fdf_bps' field */
  160.  
  161. #define    FDNPART    3    /* number of partitions supported */
  162. #define    FDMEMSIZE    (36*512)
  163. /*
  164.  * partition table for floppy disks
  165.  * we support, 3 different partitions:
  166.  *     0 - the whole disk;
  167.  *    1 - the first cylinder on the disk
  168.  *    2 - the whole disk minus the first cylinder
  169.  */
  170. struct fdpartab {
  171.     int    startcyl;    /* cylinder no. where partition starts */
  172.     int    numcyls;    /* number of cylinders in partition */
  173. };
  174.  
  175. #define    FDNSECT    8    /* no. of sector size/count types supported */
  176. /*
  177.  * sector table for floppy disks,
  178.  * specifies number of bytes per sector and
  179.  * number of sectors per track.
  180.  */
  181. struct fdsectab {
  182.     unsigned short    fd_ssize;    /* number of bytes in a sector */
  183.     unsigned short    fd_sshift;    /* shift to convert bytes to sectors */
  184.     unsigned char    fd_nsect;    /* number of sectors per track */
  185.     unsigned char    fd_drvs;    /* bitmask of drive types supporting */
  186.     unsigned char    fd_gpln;    /* normal gap length */
  187.     unsigned char    fd_gplf;    /* format gap length */
  188. };
  189.  
  190. struct fdstate {
  191.     char     fd_status;
  192.     char     fd_maxerr;
  193.     unsigned char  fd_drvtype;
  194.     unsigned char  fd_trnsfr;
  195.     unsigned char  fd_hst;
  196.     unsigned char  fd_mst;
  197.     unsigned char  fd_dstep;
  198.     unsigned short fd_cylskp;
  199.     unsigned short fd_ncyls;
  200.     unsigned short fd_secsiz;
  201.     unsigned short fd_secmsk;
  202.     unsigned char  fd_secsft;
  203.     unsigned char  fd_nsides;
  204.     unsigned char  fd_nsects;
  205.     unsigned char  fd_cylsiz;
  206.     unsigned char  fd_curcyl;
  207.     unsigned char  fd_lsterr;
  208.     unsigned short fd_n512b;
  209.     dev_t           fd_device;
  210.     struct   proc *fd_proc;
  211.     unsigned char  fd_fmt;        /* auto format detection */
  212.     unsigned char  fd_dskchg;    /* if == 0, format is up to date */
  213. };
  214.  
  215. struct fdparam {        /* used by FDSPARAM and FDGPARAM commands */
  216.     char    fdf_bps;    /* number of bytes per sector - encoded */
  217.     char    fdf_spt;    /* number of sectors per track */
  218.     char    fdf_gpln;   /* gap length for normal R/W operations */
  219.     char    fdf_gplf;   /* gap length for format operations */
  220.     char    fdf_dtl;    /* length of sector if 'fdf_bps' = 0 */
  221.     char    fdf_fil;    /* fill byte to use while formatting */
  222.     char    fdf_den;    /* FM or MFM encoding */
  223.     char    fdf_nhd;    /* number of heads */
  224.     short   fdf_ncyl;   /* number of cylinders */
  225. };
  226.  
  227. struct fdformid {       /* used by FDFMTTRK command */
  228.     char    fdf_track;
  229.     char    fdf_head;
  230.     char    fdf_sec;
  231.     char    fdf_secsiz;
  232. };
  233.  
  234. #define FIOC        ('F'<<8)
  235. #define    F_DTYP        (FIOC|60)    /* returns fd_drvtype */
  236. #define F_FCR        (FIOC|61)    /* output to Floppy Control Register */
  237. #define F_DOR        (FIOC|62)    /* output to Digital Output Register */
  238. #define F_RAW        (FIOC|63)    /* general raw controller interface */
  239.  
  240. struct fdraw {            /* used by F_RAW command */
  241.     char    fr_cmd[10];    /* user-supplied command bytes */
  242.     short    fr_cnum;    /* number of command bytes */
  243.     char    fr_result[10];    /* controller-supplied result bytes */
  244.     short    fr_nbytes;    /* number to transfer if read/write command */
  245.     char   *fr_addr;    /* where to transfer if read/write command */
  246. };
  247.  
  248. struct  fdbufstruct {
  249.     int         fbs_flags;
  250.     caddr_t     fbs_addr;
  251.     unsigned    int     fbs_size;
  252. };
  253.  
  254. #endif    /* _SYS_FD_H */
  255.