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/xdvar.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: xdvar.h,v 1.7 2002/07/23 20:49:55 hannken 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 d v a r . h
   36  *
   37  * this file defines the software structure we use to control the
   38  * 753/7053.
   39  *
   40  * author: Chuck Cranor <chuck@ccrc.wustl.edu>
   41  */
   42 
   43 #include <sys/callout.h>
   44 
   45 /*
   46  * i/o request: wrapper for hardware's iopb data structure
   47  */
   48 
   49 struct xd_iorq {
   50         struct xd_iopb *iopb;           /* address of matching iopb */
   51         struct xd_iopb *dmaiopb;        /* DMA address of above */
   52         struct xdc_softc *xdc;          /* who we are working with */
   53         struct xd_softc *xd;            /* which disk */
   54         int ttl;                        /* time to live */
   55         int mode;                       /* current mode (state+other data) */
   56         int tries;                      /* number of times we have tried it */
   57         int errno;                      /* error number if we fail */
   58         int lasterror;                  /* last error we got */
   59         int blockno;                    /* starting block no for this xfer */
   60         int sectcnt;                    /* number of sectors in xfer */
   61         char *dbuf;                     /* KVA of data buffer (advances) */
   62         struct buf *buf;                /* for NORM */
   63         bus_dmamap_t dmamap;            /* DMA I/O handle */
   64 };
   65 
   66 /*
   67  * state
   68  */
   69 
   70 #define XD_SUB_MASK 0xf0            /* mask bits for state */
   71 #define XD_SUB_FREE 0x00            /* free */
   72 #define XD_SUB_NORM 0x10            /* normal I/O request */
   73 #define XD_SUB_WAIT 0x20            /* normal I/O request in the
   74                                              context of a process */
   75 #define XD_SUB_POLL 0x30            /* polled mode */
   76 #define XD_SUB_DONE 0x40            /* not active, but can't be free'd yet */
   77 #define XD_SUB_NOQ  0x50            /* don't queue, just submit (internal) */
   78 
   79 #define XD_STATE(X) ((X) & XD_SUB_MASK) /* extract state from mode */
   80 #define XD_NEWSTATE(OLD, NEW) (((OLD) & ~XD_SUB_MASK) |(NEW)) /* new state */
   81 
   82 
   83 /*
   84  * other mode data
   85  */
   86 
   87 #define XD_MODE_VERBO 0x08          /* print error messages */
   88 #define XD_MODE_B144  0x04          /* handling a bad144 sector */
   89 
   90 
   91 /*
   92  * software timers and flags
   93  */
   94 
   95 #define XDC_SUBWAITLIM  4       /* max number of "done" IOPBs there can be
   96                                    where we still allow a SUB_WAIT command */
   97 #define XDC_TICKCNT     (5*hz)  /* call xdc_tick on this interval (5 sec) */
   98 #define XDC_MAXTTL      2       /* max number of xd ticks to live */
   99 #define XDC_NOUNIT      (-1)    /* for xdcmd: no unit number */
  100 
  101 /*
  102  * a "xd_softc" structure contains per-disk state info.
  103  */
  104 
  105 struct xd_softc {
  106         struct device sc_dev;           /* device struct, reqd by autoconf */
  107         struct disk sc_dk;              /* generic disk info */
  108         struct xdc_softc *parent;       /* parent */
  109         u_short flags;                  /* flags */
  110         u_short state;                  /* device state */
  111         int xd_drive;                   /* unit number */
  112         /* geometry */
  113         u_short ncyl, acyl, pcyl;       /* number of cyl's */
  114         u_short sectpercyl;             /* nhead*nsect */
  115         u_char nhead;                   /* number of heads */
  116         u_char nsect;                   /* number of sectors per track */
  117         u_char hw_spt;                  /* as above, but includes spare sectors */
  118         struct dkbad dkb;               /* bad144 sectors */
  119 };
  120 
  121 /*
  122  * flags
  123  */
  124 #define XD_WLABEL 0x0001           /* write label */
  125 
  126 /*
  127  * state
  128  */
  129 #define XD_DRIVE_UNKNOWN 0         /* never talked to it */
  130 #define XD_DRIVE_ATTACHING 1       /* attach in progress */
  131 #define XD_DRIVE_NOLABEL 2         /* drive on-line, no label */
  132 #define XD_DRIVE_ONLINE  3         /* drive is on-line */
  133 
  134 /*
  135  * a "xdc_softc" structure contains per-disk-controller state info,
  136  * including a list of active controllers.
  137  */
  138 
  139 struct xdc_softc {
  140         struct device sc_dev;           /* device struct, reqd by autoconf */
  141         struct evcnt sc_intrcnt;        /* event counter (for vmstat -i) */
  142 
  143         struct callout sc_tick_ch;
  144 
  145         struct xdc *xdc;                /* vaddr of vme registers */
  146 
  147         struct xd_softc *sc_drives[XDC_MAXDEV]; /* drives on this controller */
  148         int ipl;                        /* interrupt level */
  149         int vector;                     /* interrupt vector */
  150         bus_dma_tag_t dmatag;           /* Bus DMA tag */
  151 
  152         struct xd_iorq *reqs;           /* i/o requests */
  153         struct xd_iopb *iopbase;        /* iopb base addr (maps iopb->iorq) */
  154         struct xd_iopb *dvmaiopb;       /* iopb base in DVMA space, not kvm */
  155         bus_dmamap_t iopmap;            /* IOPB DMA handle */
  156         bus_dmamap_t auxmap;            /* auxiliary DMA handle */
  157         struct bufq_state sc_wq;        /* queued IOPBs for this controller */
  158         char freereq[XDC_MAXIOPB];      /* free list (stack) */
  159         char waitq[XDC_MAXIOPB];        /* wait queue */
  160         u_char nfree;                   /* number of iopbs free */
  161         u_char nrun;                    /* number running */
  162         u_char nwait;                   /* number of waiting iopbs */
  163         u_char ndone;                   /* number of done IORQs */
  164         u_char waithead;                /* head of queue */
  165         u_char waitend;                 /* end of queue */
  166 };
  167 
  168 /*
  169  * reset blast modes
  170  */
  171 
  172 #define XD_RSET_NONE (-1)          /* restart all requests */
  173 #define XD_RSET_ALL  (-2)          /* don't restart anything */

Cache object: 8a517420949acf27dc83d6984a4c25ef


[ 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.