Annotation of Gnu-Mach/i386/i386at/fdreg.h, revision 1.1.1.1

1.1       root        1: /* 
                      2:  * Mach Operating System
                      3:  * Copyright (c) 1993,1991,1990,1989 Carnegie Mellon University
                      4:  * All Rights Reserved.
                      5:  * 
                      6:  * Permission to use, copy, modify and distribute this software and its
                      7:  * documentation is hereby granted, provided that both the copyright
                      8:  * notice and this permission notice appear in all copies of the
                      9:  * software, derivative works or modified versions, and any portions
                     10:  * thereof, and that both notices appear in supporting documentation.
                     11:  * 
                     12:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
                     13:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
                     14:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                     15:  * 
                     16:  * Carnegie Mellon requests users of this software to return to
                     17:  * 
                     18:  *  Software Distribution Coordinator  or  [email protected]
                     19:  *  School of Computer Science
                     20:  *  Carnegie Mellon University
                     21:  *  Pittsburgh PA 15213-3890
                     22:  * 
                     23:  * any improvements or extensions that they make and grant Carnegie Mellon
                     24:  * the rights to redistribute these changes.
                     25:  */
                     26: /*
                     27:   Copyright 1988, 1989 by Intel Corporation, Santa Clara, California.
                     28: 
                     29:                All Rights Reserved
                     30: 
                     31: Permission to use, copy, modify, and distribute this software and
                     32: its documentation for any purpose and without fee is hereby
                     33: granted, provided that the above copyright notice appears in all
                     34: copies and that both the copyright notice and this permission notice
                     35: appear in supporting documentation, and that the name of Intel
                     36: not be used in advertising or publicity pertaining to distribution
                     37: of the software without specific, written prior permission.
                     38: 
                     39: INTEL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
                     40: INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
                     41: IN NO EVENT SHALL INTEL BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
                     42: CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
                     43: LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
                     44: NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
                     45: WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
                     46: */
                     47: 
                     48: /*     Copyright (c) 1987, 1988 TOSHIBA Corp.          */
                     49: /*             All Rights Reserved                     */
                     50: 
                     51: #ident  "@(#)m765.h    1.13 - 88/02/17"
                     52: 
                     53: /*******************************************************************
                     54:  *
                     55:  *      Toshiba Floppy Driver for UNIX System V R3
                     56:  *
                     57:  *                                     June 21, 1988 
                     58:  *
                     59:  *     Intended Drive Units:
                     60:  *             Worldwide - Model No. ND-356  3.5" unformatted 2MB/1MB
                     61:  *             UNIX Media Type Name: 2HD512/2DD512/2D512/1D512.
                     62:  *
                     63:  *             In Japan Only - Model No. ND-355  3.5" unformatted 1.6MB/1MB
                     64:  *             UNIX Media Type Name: 2HC1024/2HC512/2HC256/2DD512/2D512/1D512.
                     65:  *
                     66:  *             Worldwide - Model No. ND-04DT-A  5.25" unformatted 500 KB
                     67:  *             UNIX Media Type Name: 2D512/1D512.
                     68:  *
                     69:  *             In Japan Only - Model No. ND-08DE  5.25" unformatted 1.6MB/1MB
                     70:  *             UNIX Media Type Name: 2HC1024/2HC512/2HC256/2DD512/2D512/1D512.
                     71:  *
                     72:  *             Use with other devices may require modification.
                     73:  *
                     74:  *     Notes:
                     75:  *             For further detail regarding drive units contact 
                     76:  *             Toshiba America,Inc. Disk Products Division,
                     77:  *             Irvine, CA (714) 583-3000.
                     78:  *
                     79:  *******************************************************************/
                     80: 
                     81: /*
                     82:  *     fdcmd.c_rbmtr
                     83:  *
                     84:  *             |--+--+--+--+--+--+--+--|
                     85:  *             |  |  |  |  |  |  |  |  |
                     86:  *             |--+--+--+--+--+--+--+--|
                     87:  *                    ^  ^        ^  ^
                     88:  *                    |  |        |  |--- unit0 motor on flag
                     89:  *                    |  |        |------ unit1 motor on flag
                     90:  *                    |  |--------------- unit0 recalibrate flag
                     91:  *                    |------------------ unit1 recalibrate flag
                     92:  */
                     93: #define MTRMASK                0x003           /* mask motor_flag for get status */
                     94: #define MTRRST         0x0fc           /* reset motor_flag data */
                     95: #define RBSHIFT                0x004           /* shift count for recalibrate data */
                     96: #define RBRST          0x0cf           /* reset recalibrate data */
                     97: 
                     98: /*
                     99:  *     fdcmd.c_intr
                    100:  *
                    101:  *                               |--+--+--+--+--+--+--+--|
                    102:  *                               |  |  |  |  |  |  |  |  |
                    103:  *                               |--+--+--+--+--+--+--+--|
                    104:  *                                 ^  ^  ^  ^  ^  ^  ^  ^
                    105:  *                      reserved  --+  |  |  |  |  |  |  +--- read/write flag
                    106:  *                      reserved  -----+  |  |  |  |  +------ seek flag
                    107:  *                     reserved  --------+  |  |  +------ seek flag for retry
                    108:  * recalibrate/seek flag(for open) ----------+  +--------- recalibrate flag
                    109:  */
                    110: #define RWFLAG         0x001
                    111: #define SKFLAG         0x002
                    112: #define SKEFLAG                0x004
                    113: #define RBFLAG         0x008
                    114: #define WUPFLAG                0x010
                    115: #define CMDRST         0x000   
                    116: 
                    117: /* 
                    118:  *     fddrtab.dr_type 
                    119:  *
                    120:  *        +---+---+---+---+---+---+---+---+
                    121:  *        |   |   |   |   |   |   |   |   |
                    122:  *        +---+---+---+---+---+---+---+---+
                    123:  *          ^   ^   ^   ^   ^
                    124:  *          |   |   |   |   |----------- rapid seek flag
                    125:  *          |---|   |   |                  0: normal seek
                    126:  *            |     |   |                  1: rapid seek
                    127:  *            |     |   |--------------- detect format
                    128:  *            |     |                      0: no detect
                    129:  *            |     |                      1: format type OK
                    130:  *            |     |------------------- 40 or 80 cylinder(for 2hc/2dd drive)
                    131:  *            |                            0: 80 cylinder
                    132:  *            |                            1: 40 cylinder
                    133:  *            |------------------------- transfer rate(for read/write/format)
                    134:  *                                         00: 500kbps  10: 250kbps
                    135:  *                                         01: 300kbps  11: reserved
                    136:  */
                    137: #define RPSEEK         0x00            /* rapid seek */
                    138: #define RAPID          0x08            /* rapid seek flag */
                    139: #define OKTYPE         0x10            /* media change flag */
                    140: #define DOUBLE         0x20            /* double/single step change */
                    141: #define NMSEEK         0x80            /* normal seek */
                    142: #define RATEMASK       0xc0            /* transfer parameter mask data */
                    143: 
                    144: /*
                    145:  *     device number
                    146:  *
                    147:  *      15             10  9  8  7                    0
                    148:  *     +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
                    149:  *     | 0  0  0  0  0  0  0  1|     | 0| 0| 0| 0|     |
                    150:  *     +-----------+-----+-----+--+--+--+--+-----------+
                    151:  *       ^                    ^  ^  ^              ^  ^ 
                    152:  *       |____________________|  |__|              |__|
                    153:  *                 |              |                 |
                    154:  *                 |              |                 |- media type
                    155:  *            major number        |                    0: 3.50"  720 KB
                    156:  *                                |- unit number       1: 3.50" 1.44 Meg
                    157:  *                                                     2: 5.25"  360 KB
                    158:  *                                                     3: 5.25" 1.20 Meg
                    159:  */
                    160: #define UNIT(dev)      ((dev & 0xc0)>>6)       /* get unit number */
                    161: #define MEDIATYPE(dev) (dev & 0x03)            /* get media type */
                    162: /*****************************************************************************
                    163:  
                    164:                wait time / timeout count
                    165: 
                    166:  *****************************************************************************/
                    167: #define STSCHKCNT      0x2800          /* For check status */
                    168: #define ITOUT          HZ*5            /* interrupt timeout count */
                    169: #define TOUT           HZ/4            /* media type check timeout count */
                    170: #define MTRSTOP                HZ*2            /* motor off time */
                    171: #define SEEKWAIT       HZ/100*3        /* head_lock time */
                    172: 
                    173: /******************************************************************************
                    174:  
                    175:                define for FDC
                    176: 
                    177:  ******************************************************************************/
                    178: /* FDC register */
                    179: #define CTRLREG(ADDR)  (ADDR)          /* controle register */
                    180: #define STSREG(ADDR)   ((ADDR)+2)      /* status register */
                    181: #define DATAREG(ADDR)  ((ADDR)+3)      /* data register */
                    182: #define VFOREG(ADDR)   ((ADDR)+5)      /* vfo register */
                    183: 
                    184: /* CTRLREG flags */
                    185: #define FDC_RST                0x04
                    186: #define MTR_ON         0x04
                    187: #define DMAREQ         0x08
                    188: #define RDY            0x40
                    189: #define BSY            0x80
                    190: 
                    191: /* status for command_out */
                    192: #define FD_OSTS                0x00            /* For output check */
                    193: #define FD_ISTS                0x40            /* For input check */
                    194: #define DTOCPU         0x40
                    195: #define DATAOK         0x80
                    196: 
                    197: /* Command for FDC */
                    198: #define SPCCMD         0x03            /* Specify command */
                    199: #define RBCMD          0x07            /* Recalibrate command */
                    200: #define SISCMD         0x08            /* Sense interrupt status command */
                    201: #define SEEKCMD                0x0f            /* seek command */
                    202: #define RDM            0xe6            /* FDC READ command */
                    203: #define RDMV           0x42e6          /* VERIFY READ command */
                    204: #define WTM            0xc5            /* FDC WRITE command */
                    205: #define FMTM           0x4d            /* FDC FORMAT command */
                    206: #define FMTDATA                0x5e            /* format data */
                    207: 
                    208: /* check value */
                    209: #define OPENBIT                0x80            /* VFO check define */
                    210: #define BYTEMASK       0xff
                    211: 
                    212: /* FDC error code define */
                    213: #define ERROR          0xff
                    214: #define EBBHARD                128
                    215: #define EBBSOFT                129
                    216: #define ST0AT          0x40
                    217: #define ST0IC          0x80
                    218: #define ST0OK          0xc0
                    219: #define ADDRERR                0x01
                    220: #define WTPRT          0x02
                    221: #define NOREC          0x03
                    222: #define OVERRUN                0x04
                    223: #define CRCERR         0x05
                    224: #define FDCERR         0x06
                    225: #define TIMEOUT                0x08
                    226: #define DOORERR                0x09
                    227: 
                    228: /******************************************************************************
                    229:  
                    230:                define for DMA
                    231: 
                    232:  *****************************************************************************/
                    233: /* DMA register */
                    234: #define DMACMD1                0x08            /* DMA #1 command register      */
                    235: #define DMAMSK1                0x0f            /* DMA #1 all mask register     */
                    236: #define DMABPFF                0x0c
                    237: #define DMAMODE                0x0b
                    238: #define DMAADDR                0x04
                    239: #define DMAPAGE                0x81
                    240: #define DMACNT         0x05
                    241: #define DMAMSK         0x0a
                    242: 
                    243: /* dma set data */
                    244: #define DMARD          0x46            /* DMA read mode                */
                    245: #define DMAWT          0x4a            /* DMA  write mode              */
                    246: #define DMAVRF         0x42            /* DMA verify mode              */
                    247: 
                    248: #define DMADATA0       0x00            /* DMA #2 all mask data         */
                    249: #define DMADATA1       0x0b            /* DMA #1 all mask data         */
                    250: #define CHANNEL2       0x02
                    251: 
                    252: #define SRTHUT          0xdf
                    253: #define HLTND           0x02
                    254: #define DTL             0xff
                    255: 
                    256: /******************************************************************************
                    257:  
                    258:                etc. define
                    259: 
                    260:  *****************************************************************************/
                    261: #define SPL            spl5    /* Same as in i386at/autoconf.c */
                    262: #define MAXUNIT                4       /* Max unit number */
                    263: #define BLKSIZE                512     /* block size      */
                    264: 
                    265: /* fdcmd.c_stsflag     */
                    266: #define MTRFLAG        0x01
                    267: #define MTROFF 0x02
                    268: #define INTROUT        0x04
                    269: 
                    270: /* fdcmd.c_devflag (media check flag . etc.) */
                    271: #define FDMCHK         0x01
                    272: #define FDWAIT         0x02
                    273: #define STRCHK         0x04
                    274: #define STRWAIT                0x08
                    275: 
                    276: /* fdcmd.c_dcount */
                    277: #define FDCCNT 9       /* Command table for read/write/format (FDC) */
                    278: #define RWCNT  9       /* Read/Write command count */
                    279: #define FMTCNT 6       /* format command count */
                    280: 
                    281: struct fdcmd {
                    282:        int     c_rbmtr;                /* moter & rcalibrate flag */
                    283:        int     c_intr;                 /* intr flag */
                    284:        int     c_stsflag;              /* moter flag */
                    285:        int     c_mtrid;                /* motor off queue id */
                    286:        int     c_timeid;               /* interrupt timeout id */
                    287:        int     c_devflag;              /* device status   */
                    288:        int     c_dcount;               /* Read/Write/Format data count */
                    289:        int     c_rwdata[FDCCNT];       /* Read/Write/Format cmd (FDC) */
                    290:        int     c_saddr;                /* cmd seek address */
                    291: };
                    292: 
                    293: /* fdmbuf.b_rberr/fdmbuf.b_seekerr/fdmbuf.b_rwerr */
                    294: #define MEDIARD                0x01
                    295: #define MEDIASEEK      0x01
                    296: #define SRETRY         0x03
                    297: #define MRETRY         0x30
                    298: #define LRETRY         0x300
                    299: #define SRMASK         0x0f
                    300: #define MRMASK         0xf0
                    301: #define RMRMASK                0xff0
                    302: #define LRMASK         0xf00
                    303: #define MINC           0x10
                    304: #define LINC           0x100
                    305: 
                    306: struct ctrl_info {
                    307:        struct  unit_info *b_unitf;     /* first buffer for this dev       */
                    308:        struct  unit_info *b_uip;       /* like b_unit                     */
                    309:        struct  unit_info *b_wup;       /* unit to wake up when WUPFLAG    */
                    310:        short   b_rberr;                /* rb error count (for recovery)   */
                    311:        short   b_seekerr;              /* seek error count (for recovery) */
                    312:        short   b_rwerr;                /* r/w error count (for recovery)  */
                    313:        short   b_status;               /* error status                    */
                    314:        struct  buf     *b_buf;         /* set bp address                  */
                    315:        caddr_t b_xferaddr;             /* trasfer address                 */
                    316:        unsigned int b_xfercount;       /* total transfer count            */
                    317:        unsigned int b_xferdma;         /* dma transfer count              */
                    318:        int     usebuf;                 /* use private dma page            */
                    319:        caddr_t b_vbuf;                 /* virtual address for dma page    */
                    320:        vm_offset_t b_pbuf;             /* physical dma page (model_dep.c) */
                    321:        daddr_t b_sector;               /* read/write sector               */
                    322:        struct  fdcmd   b_cmd;          /* set command table address       */
                    323: };
                    324: 
                    325: #define FMTID  4
                    326: struct fmttbl {
                    327:        unsigned char cyl;
                    328:        unsigned char head;
                    329:        unsigned char sector;
                    330:        unsigned char s_type;
                    331: };
                    332: 
                    333: struct fddrtab {
                    334:        u_short dr_ncyl;        /* cylinder count                */
                    335:        u_short dr_spc;         /* actual sectors/cylinder       */
                    336:        daddr_t p_nsec;         /* disk length (sector count)    */
                    337:        char    dr_nsec;        /* sector per track              */
                    338:        char    dr_type;        /* media type                    */
                    339:        char    dr_rwgpl;       /* Read / Write Gap length       */
                    340:        char    dr_fgpl;        /* Format Gap length             */
                    341: };
                    342: 
                    343: struct unit_info {
                    344:        struct unit_info *b_unitf;      /* next slave                 */
                    345:        struct buf       *av_forw;      /* head of I/O queue (b_forw) */
                    346:        int              b_seekaddr;    /* cylinder address           */
                    347:        u_short          addr;
                    348:        struct fddrtab   d_drtab;       /* floppy disk parameter      */
                    349:        struct bus_device *dev;
                    350:        struct fdcmd     *b_cmd;        /* set command table address  */
                    351:        char             wakeme;        /* set if someone wants to be woken */
                    352: };
                    353: 
                    354: #define HZ             100             /* 100 ticks/second of the clock */
                    355: #define NBPSCTR                512             /* Bytes per LOGICAL disk sector */
                    356:                                        /* These should be added to 
                    357:                                           "sys/param.h". */
                    358: #define PAGESIZ                4096
                    359: #ifdef MACH_KERNEL
                    360: #define        PZERO           25
                    361: #define        PRIBIO          20
                    362: 
                    363: #define        B_VERIFY        IO_SPARE_START
                    364: #define        B_FORMAT        (IO_SPARE_START << 1)
                    365: 
                    366: #define        b_pfcent        io_mode
                    367: 
                    368: #endif MACH_KERNEL

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.