[BACK]Return to hdc9224.h CVS log [TXT][DIR] Up to [local] / sys / arch / vax / vsa

Annotation of sys/arch/vax/vsa/hdc9224.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: hdc9224.h,v 1.7 2006/11/06 22:16:28 miod Exp $        */
                      2: /*     $NetBSD: hdc9224.h,v 1.5 2003/11/10 08:51:52 wiz Exp $ */
                      3: /*
                      4:  * Copyright (c) 1996 Ludd, University of Lule}, Sweden.
                      5:  * All rights reserved.
                      6:  *
                      7:  * This code is derived from software contributed to Ludd by Bertram Barth.
                      8:  *
                      9:  * Redistribution and use in source and binary forms, with or without
                     10:  * modification, are permitted provided that the following conditions
                     11:  * are met:
                     12:  * 1. Redistributions of source code must retain the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer.
                     14:  * 2. Redistributions in binary form must reproduce the above copyright
                     15:  *    notice, this list of conditions and the following disclaimer in the
                     16:  *    documentation and/or other materials provided with the distribution.
                     17:  * 3. All advertising materials mentioning features or use of this software
                     18:  *    must display the following acknowledgement:
                     19:  *     This product includes software developed at Ludd, University of
                     20:  *     Lule}, Sweden and its contributors.
                     21:  * 4. The name of the author may not be used to endorse or promote products
                     22:  *    derived from this software without specific prior written permission
                     23:  *
                     24:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     25:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     26:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     27:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     28:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     29:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     30:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     31:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     32:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     33:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     34:  */
                     35:
                     36: struct hdc9224_DKCreg {
                     37:        unsigned char dkc_reg;  /* Disk Register Data Access Port (rw)*/
                     38:        unsigned char fill[3];  /* bytes are longword aligned */
                     39:        unsigned char dkc_cmd;  /* Disk Controller Command Port (wo) */
                     40: #define dkc_stat dkc_cmd       /* Interrupt Status Port (ro) */
                     41: };
                     42:
                     43: /*
                     44:  * definition of some commands (constant bits only, incomplete!)
                     45:  */
                     46: #define DKC_CMD_RESET          0x00    /* terminate non-data-transfer cmds */
                     47: #define DKC_CMD_DRDESELECT     0x01    /* done when no drive is in use */
                     48: #define DKC_CMD_SETREGPTR      0x40    /* logically or-ed with reg-number */
                     49: #define DKC_CMD_DRSELECT       0x20
                     50: #define DKC_CMD_DRSEL_HDD      0x24    /* select HDD, or-ed with unit-numb. */
                     51: #define DKC_CMD_DRSEL_RX33     0x28    /* or-ed with unit-number of RX33 */
                     52: #define DKC_CMD_DRSEL_RX50     0x2C    /* or-ed with unit-number of RX50 */
                     53: #define DKC_CMD_RESTORE                0x02
                     54: #define DKC_CMD_STEP           0x04
                     55: #define DKC_CMD_STEPIN_FDD     0x04    /* one step inward for floppy */
                     56: #define DKC_CMD_STEPOUT_FDD    0x06    /* one step outward (toward cyl #0) */
                     57: #define DKC_CMD_POLLDRIVE      0x10
                     58: #define DKC_CMD_SEEKREADID     0x50
                     59: #define DKC_CMD_FORMATTRACK    0x60
                     60: #define DKC_CMD_READTRACK      0x5A
                     61: #define DKC_CMD_READPHYSICAL   0x58
                     62: #define DKC_CMD_READLOGICAL    0x5C
                     63: #define DKC_CMD_READ_HDD       0x5D    /* read-logical, bypass=0, xfer=1 */
                     64: #define DKC_CMD_READ_RX33      0x5D    /* ??? */
                     65: #define DKC_CMD_WRITEPHYSICAL  0x80
                     66: #define DKC_CMD_WRITELOGICAL   0xC0
                     67: #define DKC_CMD_WRITE_HDD      0xA0    /* bypass=0, ddmark=0 */
                     68: #define DKC_CMD_WRITE_RX33     0xA1    /* precompensation differs... */
                     69: #define DKC_CMD_WRITE_RX50     0xA4
                     70:
                     71: /*
                     72:  * Definition of bits in the DKC_STAT register
                     73:  */
                     74: #define DKC_ST_INTPEND (1<<7)          /* interrupt pending */
                     75: #define DKC_ST_DMAREQ  (1<<6)          /* DMA request */
                     76: #define DKC_ST_DONE    (1<<5)          /* command done */
                     77: #define DKC_ST_TERMCOD (3<<3)          /* termination code (see below) */
                     78: #define DKC_ST_RDYCHNG (1<<2)          /* ready change */
                     79: #define DKC_ST_OVRUN   (1<<1)          /* overrun/underrun */
                     80: #define DKC_ST_BADSECT (1<<0)          /* bad sector */
                     81:
                     82: /*
                     83:  * Definition of the termination codes
                     84:  */
                     85: #define DKC_TC_SUCCESS (0<<3)          /* Successful completion */
                     86: #define DKC_TC_RDIDERR (1<<3)          /* Error in READ-ID sequence */
                     87: #define DKC_TC_VRFYERR (2<<3)          /* Error in VERIFY sequence */
                     88: #define DKC_TC_DATAERR (3<<3)          /* Error in DATA-TRANSFER seq. */
                     89:
                     90: /*
                     91:  * Definitions of delays necessary for floppy-operation
                     92:  */
                     93: #define DKC_DELAY_MOTOR                500     /* allow 500 ms to reach speed */
                     94: #define DKC_DELAY_SELECT        70     /* 70 ms for data-recovery-circuit */
                     95: #define DKC_DELAY_POSITION      59     /* 59 ms for RX33, 100 ms for RX50 */
                     96: #define DKC_DELAY_HEADSET       18     /* 18 ms when changing head-number */
                     97:
                     98: /*
                     99:  * The HDC9224 has 11/15(?) internal registers which are accessible via
                    100:  * the Disk-Register-Data-Access-Port DKC_REG
                    101:  */
                    102: struct hdc9224_UDCreg { /* internal disk controller registers */
                    103:        u_char udc_dma7;        /*  0: DMA address bits  0 -  7 */
                    104:        u_char udc_dma15;       /*  1: DMA address bits  8 - 15 */
                    105:        u_char udc_dma23;       /*  2: DMA address bits 16 - 23 */
                    106:        u_char udc_dsect;       /*  3: desired/starting sector number */
                    107: #define udc_csect udc_dsect    /*     current sector number */
                    108:        u_char udc_dhead;       /*  4: cyl-bits 8-10, desired head number */
                    109: #define udc_chead udc_dhead    /*     current head number */
                    110:        u_char udc_dcyl;        /*  5: desired cylinder number */
                    111: #define udc_ccyl udc_dcyl      /*     current cylinder number */
                    112:        u_char udc_scnt;        /*  6: sector count register */
                    113:        u_char udc_rtcnt;       /*  7: retry count register */
                    114:        u_char udc_mode;        /*  8: operation mode/chip status */
                    115: #define udc_cstat udc_mode     /*     chip status register */
                    116:        u_char udc_term;        /*  9: termination conditions/drive status */
                    117: #define udc_dstat udc_term     /*     drive status register */
                    118:        u_char udc_data;        /* 10: data */
                    119: };
                    120:
                    121: /* UDC regs */
                    122: #define        UDC_TERM        9
                    123:
                    124: /*
                    125:  * Definition of bits in the Current-Head register
                    126:  */
                    127: #define UDC_CH_BADSECT (1<<7)  /* indicates a bad sector (if bypass=0) */
                    128: #define UDC_CH_CYLBITS (0x70)  /* bits 10-8 of current cylinder number */
                    129: #define UDC_CH_HEADNO  (0x0F)  /* current head number */
                    130:
                    131: /*
                    132:  * Definition of bits in the Retry-Count register
                    133:  */
                    134: #define UDC_RC_RTRYCNT (0xF0)  /* 1's compl. in read-log, 0 all others */
                    135: #define UDC_RC_RXDISAB (1<<3)  /* must/should be 0 for normal operation */
                    136: #define UDC_RC_INVRDY  (1<<2)  /* polarity of floppy-status, important! */
                    137: #define UDC_RC_MOTOR   (1<<1)  /* turn on floppy-motor, no effect on HDD */
                    138: #define UDC_RC_LOSPEED (1<<0)  /* floppy-speed select, RX33: 0, RX50: 1 */
                    139:
                    140: #define UDC_RC_HDD_READ         0xF2   /* 0x72 ??? */
                    141: #define UDC_RC_HDD_WRT  0xF2   /* 0xF0 ??? */
                    142: #define UDC_RC_RX33READ         0x76   /* enable retries when reading floppies */
                    143: #define UDC_RC_RX33WRT  0xF6
                    144: #define UDC_RC_RX50READ         0x77   /* enable retries when reading floppies */
                    145: #define UDC_RC_RX50WRT  0xF7
                    146:
                    147: /*
                    148:  * Definition of bits in the Operating-Mode register
                    149:  */
                    150: #define UDC_MD_HDMODE  (1<<7)  /* must be 1 for all FDD and HDD */
                    151: #define UDC_MD_CHKCOD  (3<<5)  /* error-check: FDD/CRC: 0, HDD/ECC: 1 */
                    152: #define UDC_MD_DENS    (1<<4)  /* density select, must be 0 */
                    153: #define UDC_MD_UNUSED  (1<<3)  /* bit 3 is not used and must be 0 */
                    154: #define UDC_MD_SRATE   (7<<0)  /* seek step rate */
                    155:
                    156: #define UDC_MD_HDD      0xC0
                    157: #define UDC_MD_RX33     0x82
                    158: #define UDC_MD_RX50     0x81
                    159:
                    160: /*
                    161:  * Definition of bits in the Chip-Status register
                    162:  */
                    163: #define UDC_CS_RETREQ  (1<<7)  /* retry required */
                    164: #define UDC_CS_ECCATT  (1<<6)  /* error correction attempted */
                    165: #define UDC_CS_ECCERR  (1<<5)  /* ECC/CRC error */
                    166: #define UDC_CS_DELDATA (1<<4)  /* deleted data mark */
                    167: #define UDC_CS_SYNCERR (1<<3)  /* synchronization error */
                    168: #define UDC_CS_COMPERR (1<<2)  /* compare error */
                    169: #define UDC_CS_PRESDRV (0x3)   /* present drive selected */
                    170:
                    171: /*
                    172:  * Definition of bits in the Termination-Conditions register
                    173:  */
                    174: #define UDC_TC_CRCPRE  (1<<7)  /* CRC register preset, must be 1 */
                    175: #define UDC_TC_UNUSED  (1<<6)  /* bit 6 is not used and must be 0 */
                    176: #define UDC_TC_INTDONE (1<<5)  /* interrupt on done */
                    177: #define UDC_TC_TDELDAT (1<<4)  /* terminate on deleted data */
                    178: #define UDC_TC_TDSTAT3 (1<<3)  /* terminate on drive status 3 change */
                    179: #define UDC_TC_TWPROT  (1<<2)  /* terminate on write-protect (FDD only) */
                    180: #define UDC_TC_INTRDCH (1<<1)  /* interrupt on ready change (FDD only) */
                    181: #define UDC_TC_TWRFLT  (1<<0)  /* interrupt on write-fault (HDD only) */
                    182:
                    183: #define UDC_TC_HDD      0xA5   /* 0xB5 ??? */
                    184: #define UDC_TC_FDD      0xA0   /* 0xAA ??? 0xB4 ??? */
                    185:
                    186: /*
                    187:  * Definition of bits in the Disk-Status register
                    188:  */
                    189: #define UDC_DS_SELACK  (1<<7)  /* select acknowledge (harddisk only!) */
                    190: #define UDC_DS_INDEX   (1<<6)  /* index point */
                    191: #define UDC_DS_SKCOM   (1<<5)  /* seek complete */
                    192: #define UDC_DS_TRK00   (1<<4)  /* track 0 */
                    193: #define UDC_DS_DSTAT3  (1<<3)  /* drive status 3 (MBZ) */
                    194: #define UDC_DS_WRPROT  (1<<2)  /* write protect (floppy only!) */
                    195: #define UDC_DS_READY   (1<<1)  /* drive ready bit */
                    196: #define UDC_DS_WRFAULT (1<<0)  /* write fault */

CVSweb