root/dev/ic/adw.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    1 /*      $OpenBSD: adw.h,v 1.9 2002/03/14 01:26:53 millert Exp $ */
    2 /*      $NetBSD: adw.h,v 1.9 2000/05/26 15:13:43 dante Exp $        */
    3 
    4 /*
    5  * Generic driver definitions and exported functions for the Advanced
    6  * Systems Inc. SCSI controllers
    7  * 
    8  * Copyright (c) 1998, 1999, 2000 The NetBSD Foundation, Inc.
    9  * All rights reserved.
   10  *
   11  * Author: Baldassare Dante Profeta <dante@mclink.it>
   12  *
   13  * Redistribution and use in source and binary forms, with or without
   14  * modification, are permitted provided that the following conditions
   15  * are met:
   16  * 1. Redistributions of source code must retain the above copyright
   17  *    notice, this list of conditions and the following disclaimer.
   18  * 2. Redistributions in binary form must reproduce the above copyright
   19  *    notice, this list of conditions and the following disclaimer in the
   20  *    documentation and/or other materials provided with the distribution.
   21  * 3. All advertising materials mentioning features or use of this software
   22  *    must display the following acknowledgement:
   23  *        This product includes software developed by the NetBSD
   24  *        Foundation, Inc. and its contributors.
   25  * 4. Neither the name of The NetBSD Foundation nor the names of its
   26  *    contributors may be used to endorse or promote products derived
   27  *    from this software without specific prior written permission.
   28  *
   29  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   30  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   31  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   32  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   33  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   34  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   35  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   36  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   37  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   38  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   39  * POSSIBILITY OF SUCH DAMAGE.
   40  */
   41 
   42 #ifndef _ADVANSYS_WIDE_H_
   43 #define _ADVANSYS_WIDE_H_
   44 
   45 /******************************************************************************/
   46 
   47 typedef int (* ADW_ISR_CALLBACK) (ADW_SOFTC *, ADW_SCSI_REQ_Q *);
   48 typedef void (* ADW_ASYNC_CALLBACK) (ADW_SOFTC *, u_int8_t);
   49 
   50 
   51 /*
   52  * per request scatter-gather element limit
   53  * We could have up to 256 SG lists.
   54  */
   55 #define ADW_MAX_SG_LIST         255
   56 
   57 /* 
   58  * Scatter-Gather Definitions per request.
   59  */
   60 
   61 #define NO_OF_SG_PER_BLOCK      15
   62 
   63 /* Number of SG blocks needed. */
   64 #define ADW_NUM_SG_BLOCK \
   65         ((ADW_MAX_SG_LIST + (NO_OF_SG_PER_BLOCK - 1))/NO_OF_SG_PER_BLOCK)
   66 
   67 
   68 struct adw_ccb {
   69         ADW_SCSI_REQ_Q          scsiq;
   70         ADW_SG_BLOCK            sg_block[ADW_NUM_SG_BLOCK];
   71 
   72         struct scsi_sense_data  scsi_sense;
   73 
   74         TAILQ_ENTRY(adw_ccb)    chain;
   75         struct adw_ccb          *nexthash;
   76         u_int32_t               hashkey;
   77 
   78         struct scsi_xfer        *xs;    /* the scsi_xfer for this cmd */
   79         int                     flags;  /* see below */
   80 
   81         int                     timeout;
   82 
   83         /*
   84          * This DMA map maps the buffer involved in the transfer.
   85          */
   86         bus_dmamap_t            dmamap_xfer;
   87 };
   88 
   89 typedef struct adw_ccb ADW_CCB;
   90 
   91 /* flags for ADW_CCB */
   92 #define CCB_ALLOC       0x01
   93 #define CCB_ABORTING    0x02
   94 #define CCB_ABORTED     0x04
   95 
   96 
   97 #define ADW_MAX_CCB     63      /* Max. number commands per device (63) */
   98 
   99 struct adw_control {
  100         ADW_CCB         ccbs[ADW_MAX_CCB];      /* all our control blocks */
  101         ADW_CARRIER     *carriers;              /* all our carriers */
  102 };
  103 
  104 /*
  105  * Offset of a CCB from the beginning of the control DMA mapping.
  106  */
  107 #define ADW_CCB_OFF(c)  (offsetof(struct adw_control, ccbs[0]) +        \
  108                     (((u_long)(c)) - ((u_long)&sc->sc_control->ccbs[0])))
  109 
  110 /******************************************************************************/
  111 
  112 int adw_init(ADW_SOFTC *sc);
  113 void adw_attach(ADW_SOFTC *sc);
  114 int adw_intr(void *arg);
  115 ADW_CCB *adw_ccb_phys_kv(ADW_SOFTC *, u_int32_t);
  116 
  117 /******************************************************************************/
  118 
  119 #endif /* _ADVANSYS_ADW_H_ */

/* [<][>][^][v][top][bottom][index][help] */