[BACK]Return to xyreg.h CVS log [TXT][DIR] Up to [local] / sys / arch / sparc / dev

Annotation of sys/arch/sparc/dev/xyreg.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: xyreg.h,v 1.4 2004/04/12 22:12:32 jmc Exp $   */
        !             2: /*     $NetBSD: xyreg.h,v 1.3 1996/03/31 22:39:02 pk Exp $     */
        !             3:
        !             4: /*
        !             5:  *
        !             6:  * Copyright (c) 1995 Charles D. Cranor
        !             7:  * All rights reserved.
        !             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 by Charles D. Cranor.
        !            20:  * 4. The name of the author may not be used to endorse or promote products
        !            21:  *    derived from this software without specific prior written permission.
        !            22:  *
        !            23:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
        !            24:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
        !            25:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
        !            26:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
        !            27:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
        !            28:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
        !            29:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
        !            30:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
        !            31:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
        !            32:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        !            33:  */
        !            34:
        !            35: /*
        !            36:  * x y r e g . h
        !            37:  *
        !            38:  * this file contains the description of the Xylogics 450/451's hardware
        !            39:  * data structures.
        !            40:  *
        !            41:  * author: Chuck Cranor <chuck@ccrc.wustl.edu>
        !            42:  */
        !            43:
        !            44: #define XYC_MAXDEV    2       /* max devices per controller */
        !            45: #define XYC_CTLIOPB   XYC_MAXDEV /* controller's iopb */
        !            46: #define XYC_RESETUSEC 1000000 /* max time for xyc reset (same as xdc?) */
        !            47: #define XYC_MAXIOPB   (XYC_MAXDEV+1)
        !            48:                              /* max number of iopbs that can be active */
        !            49: #define XYC_MAXTIME   4*1000000 /* four seconds before we give up and reset */
        !            50: #define XYC_MAXTRIES  4       /* max number of times to retry an operation */
        !            51: #define XYC_INTERLEAVE 1      /* interleave (from disk label?) */
        !            52: #define XYFM_BPS       0x200 /* must be 512! */
        !            53:
        !            54: /*
        !            55:  * xyc device interface
        !            56:  * (lives in VME address space)   [note: bytes are swapped!]
        !            57:  */
        !            58:
        !            59: struct xyc {
        !            60:   volatile u_char xyc_reloc_hi;        /* iopb relocation (low byte) */
        !            61:   volatile u_char xyc_reloc_lo;        /* iopb relocation (high byte) */
        !            62:   volatile u_char xyc_addr_hi;         /* iopb address (low byte) */
        !            63:   volatile u_char xyc_addr_lo;         /* iopb address (high byte) */
        !            64:   volatile u_char xyc_rsetup;          /* reset/update reg */
        !            65:   volatile u_char xyc_csr;             /* control and status register */
        !            66: };
        !            67:
        !            68: /*
        !            69:  * xyc_csr
        !            70:  */
        !            71:
        !            72: #define XYC_GBSY     0x80     /* go/busy */
        !            73: #define XYC_ERR             0x40     /* error */
        !            74: #define XYC_DERR     0x20     /* double error! */
        !            75: #define XYC_IPND     0x10     /* interrupt pending */
        !            76: #define XYC_ADRM     0x08     /* 24-bit addressing */
        !            77: #define XYC_AREQ     0x04     /* attention request */
        !            78: #define XYC_AACK     0x02     /* attention ack. */
        !            79: #define XYC_DRDY     0x01     /* drive ready */
        !            80:
        !            81: /*
        !            82:  * Input/Output Parameter Block (iopb)
        !            83:  *
        !            84:  * all controller commands are done via iopb's.   to start a command you
        !            85:  * must do this:
        !            86:  * [1] allocate space in DVMA space for the iopb
        !            87:  * [2] fill out all the fields of the iopb
        !            88:  * [3] if the controller isn't busy, start the iopb by loading the address
        !            89:  *     and reloc in the xyc's registers and setting the "go" bit [done]
        !            90:  * [4] controller busy: set AREQ bit, and wait for AACK bit.
        !            91:  *     add iopb to the chain, and clear AREQ to resume I/O
        !            92:  *
        !            93:  * when the controller is done with a command it may interrupt (if you
        !            94:  * ask it to) and it will set the XYC_IPND bit in the csr.   clear
        !            95:  * the interrupt by writing one to this bit.
        !            96:  *
        !            97:  * the format of the iopb is described in section 2.4 of the manual.
        !            98:  * note that it is byte-swapped on the sun.
        !            99:  */
        !           100:
        !           101: struct xy_iopb {
        !           102:                                 /* section 2.4.2: byte 1 */
        !           103:   volatile u_char resv1:1;      /* reserved */
        !           104:   volatile u_char iei:1;        /* interrupt on each IOPB done */
        !           105:   volatile u_char ierr:1;       /* interrupt on error (no effect on 450) */
        !           106:   volatile u_char hdp:1;        /* hold dual port drive */
        !           107:   volatile u_char asr:1;        /* autoseek retry */
        !           108:   volatile u_char eef:1;        /* enable extended fn. (overlap seek) */
        !           109:   volatile u_char ecm:2;        /* ECC correction mode */
        !           110: #define XY_ECM 2                /* use mode 2 (see section 2.4.2) */
        !           111:                                  /* section 2.4.1: byte 0 */
        !           112:   volatile u_char aud:1;        /* auto-update iopb */
        !           113:   volatile u_char relo:1;       /* enable multibus relocation (>16bit addrs)*/
        !           114:   volatile u_char chen:1;        /* chain enable, "next iopb" is valid */
        !           115:   volatile u_char ien:1;        /* interrupt enable */
        !           116:   volatile u_char com:4;        /* command */
        !           117: #define XYCMD_NOP 0x0            /* no-op */
        !           118: #define XYCMD_WR  0x1            /* write */
        !           119: #define XYCMD_RD  0x2            /* read */
        !           120: #define XYCMD_WTH 0x3           /* write track headers */
        !           121: #define XYCMD_RTH 0x4           /* read track headers */
        !           122: #define XYCMD_SK  0x5            /* seek */
        !           123: #define XYCMD_RST 0x6            /* drive reset */
        !           124: #define XYCMD_WFM 0x7           /* write format */
        !           125: #define XYCMD_RDH 0x8           /* read header, data, and ECC */
        !           126: #define XYCMD_RDS 0x9           /* read drive status */
        !           127: #define XYCMD_WRH 0xa           /* write header, data, and ECC */
        !           128: #define XYCMD_SDS 0xb           /* set drive size */
        !           129: #define XYCMD_ST  0xc           /* self test */
        !           130: #define XYCMD_R   0xd           /* reserved */
        !           131: #define XYCMD_MBL 0xe           /* maint. buffer load */
        !           132: #define XYCMD_MBD 0xf           /* main. buffer dump */
        !           133:                                  /* section 2.4.4: byte 3 */
        !           134:   volatile u_char errno;        /* error or completion code */
        !           135:                                  /* section 2.4.3: byte 2 */
        !           136:   volatile u_char errs:1;        /* error summary bit */
        !           137:   volatile u_char resv2:2;      /* reserved */
        !           138:   volatile u_char ctyp:3;       /* controller type */
        !           139: #define XYCT_450 1              /* the 450 controller */
        !           140:   volatile u_char resv3:1;      /* reserved */
        !           141:   volatile u_char done:1;       /* done! */
        !           142:                                  /* section 2.4.6: byte 5 */
        !           143:   volatile u_char dt:2;                 /* drive type */
        !           144: #define XYC_MAXDT 3             /* largest drive type possible */
        !           145:   volatile u_char resv4:4;      /* reserved */
        !           146:   volatile u_char unit:2;       /* unit # */
        !           147:                                  /* section 2.4.5: byte 4 */
        !           148:   volatile u_char bw:1;                 /* byte(1)/word(0) xfer size */
        !           149:   volatile u_char intlv:4;      /* interleave factor (0=1:1, 1=2:1, etc.) */
        !           150:   volatile u_char thro:3;       /* dma throttle (0=2,1=4,2=8, etc...) */
        !           151: #define XY_THRO 4               /* 4 == 32 dma cycles */
        !           152:                                  /* section 2.4.8: byte 7 */
        !           153:   volatile u_char sect;                 /* sector # */
        !           154:                                  /* section 2.4.7: byte 6 */
        !           155:   volatile u_char head;                 /* head # */
        !           156:                                  /* section 2.4.9: byte 8,9 */
        !           157:   volatile u_short cyl;                 /* cyl # */
        !           158:                                  /* section 2.4.10: byte a,b */
        !           159:   volatile u_short scnt;        /* sector count, also drive status */
        !           160: #define xy_dr_status scnt
        !           161: #define XYS_ONCL 0x80           /* on-cylinder (active LOW) */
        !           162: #define XYS_DRDY 0x40           /* drive ready (active LOW) */
        !           163: #define XYS_WRPT 0x20           /* write protect */
        !           164: #define XYS_DPB  0x10           /* dual-port busy */
        !           165: #define XYS_SKER 0x08           /* hard seek error */
        !           166: #define XYS_DFLT 0x04           /* disk fault */
        !           167:                                  /* section 2.4.11: byte c,d */
        !           168:   volatile u_short dataa;       /* data address */
        !           169:                                  /* section 2.4.12: byte e,f */
        !           170:   volatile u_short datar;       /* data relocation pointer */
        !           171:                                 /* section 2.4.14: byte 11 */
        !           172:   volatile u_char subfn;        /* sub-function */
        !           173:                                 /* section 2.4.13: byte 10 */
        !           174:   volatile u_char hoff;                 /* head offset for fixed/removable drives */
        !           175:                                 /* section 2.4.15: byte 12,13 */
        !           176:   volatile u_short nxtiopb;     /* next iopb address (same relocation) */
        !           177:                                 /* section 2.4.16: byte 14,15 */
        !           178:   volatile u_short eccpat;      /* ecc pattern */
        !           179:                                 /* section 2.4.17: byte 16,17 */
        !           180:   volatile u_short eccaddr;     /* ecc address */
        !           181: };
        !           182:
        !           183:
        !           184: /*
        !           185:  * errors (section 2.4.4.1)
        !           186:  */
        !           187:
        !           188: /* software error codes */
        !           189: #define XY_ERR_FAIL 0xff         /* general total failure */
        !           190: #define XY_ERR_DERR 0xfe        /* double error */
        !           191: /* no error */
        !           192: #define XY_ERR_AOK  0x00         /* success */
        !           193:
        !           194: #define XY_ERR_IPEN 0x01        /* interrupt pending */
        !           195: #define XY_ERR_BCFL 0x03        /* busy conflict */
        !           196: #define XY_ERR_TIMO 0x04        /* operation timeout */
        !           197: #define XY_ERR_NHDR 0x05        /* header not found */
        !           198: #define XY_ERR_HARD 0x06        /* hard ECC error */
        !           199: #define XY_ERR_ICYL 0x07        /* illegal cylinder address */
        !           200: #define XY_ERR_ISEC 0x0a        /* illegal sector address */
        !           201: #define XY_ERR_SMAL 0x0d        /* last sector too small */
        !           202: #define XY_ERR_SACK 0x0e        /* slave ACK error (non-existent memory) */
        !           203: #define XY_ERR_CHER 0x12        /* cylinder and head/header error */
        !           204: #define XY_ERR_SRTR 0x13        /* auto-seek retry successful */
        !           205: #define XY_ERR_WPRO 0x14        /* write-protect error */
        !           206: #define XY_ERR_UIMP 0x15        /* unimplemented command */
        !           207: #define XY_ERR_DNRY 0x16        /* drive not ready */
        !           208: #define XY_ERR_SZER 0x17        /* sector count zero */
        !           209: #define XY_ERR_DFLT 0x18        /* drive faulted */
        !           210: #define XY_ERR_ISSZ 0x19        /* illegal sector size */
        !           211: #define XY_ERR_SLTA 0x1a        /* self test a */
        !           212: #define XY_ERR_SLTB 0x1b        /* self test b */
        !           213: #define XY_ERR_SLTC 0x1c        /* self test c */
        !           214: #define XY_ERR_SOFT 0x1e        /* soft ECC error */
        !           215: #define XY_ERR_SFOK 0x1f        /* soft ECC error recovered */
        !           216: #define XY_ERR_IHED 0x20        /* illegal head */
        !           217: #define XY_ERR_DSEQ 0x21        /* disk sequencer error */
        !           218: #define XY_ERR_SEEK 0x25        /* seek error */
        !           219:
        !           220:
        !           221: /* error actions */
        !           222: #define XY_ERA_PROG 0x10        /* program error: quit */
        !           223: #define XY_ERA_SOFT 0x30         /* soft error: we recovered */
        !           224: #define XY_ERA_HARD 0x40         /* hard error: retry */
        !           225: #define XY_ERA_RSET 0x60         /* hard error: reset, then retry */
        !           226: #define XY_ERA_WPRO 0x90         /* write protected */
        !           227:
        !           228:

CVSweb