The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/vme/xyreg.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

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

Cache object: 481ef2f5cc0833d5a9adacbd4af4e8ac


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.