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

Annotation of sys/arch/mvme68k/dev/sbicvar.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: sbicvar.h,v 1.7 2004/07/02 17:57:29 miod Exp $ */
        !             2:
        !             3: /*
        !             4:  * Copyright (c) 1990 The Regents of the University of California.
        !             5:  * All rights reserved.
        !             6:  *
        !             7:  * This code is derived from software contributed to Berkeley by
        !             8:  * Van Jacobson of Lawrence Berkeley Laboratory.
        !             9:  *
        !            10:  * Redistribution and use in source and binary forms, with or without
        !            11:  * modification, are permitted provided that the following conditions
        !            12:  * are met:
        !            13:  * 1. Redistributions of source code must retain the above copyright
        !            14:  *    notice, this list of conditions and the following disclaimer.
        !            15:  * 2. Redistributions in binary form must reproduce the above copyright
        !            16:  *    notice, this list of conditions and the following disclaimer in the
        !            17:  *    documentation and/or other materials provided with the distribution.
        !            18:  * 3. Neither the name of the University nor the names of its contributors
        !            19:  *    may be used to endorse or promote products derived from this software
        !            20:  *    without specific prior written permission.
        !            21:  *
        !            22:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            23:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            24:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            25:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            26:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            27:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            28:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            29:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            30:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            31:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            32:  * SUCH DAMAGE.
        !            33:  *
        !            34:  *  @(#)scsivar.h   7.1 (Berkeley) 5/8/90
        !            35:  */
        !            36: #ifndef _SBICVAR_H_
        !            37: #define _SBICVAR_H_
        !            38: #include <sys/malloc.h>
        !            39:
        !            40:
        !            41: /*
        !            42:  * DMA chains are used for Scatter-Gather DMA.
        !            43:  */
        !            44: struct  dma_chain {
        !            45:     int     dc_count;
        !            46:     char    *dc_addr;
        !            47: };
        !            48:
        !            49: /*
        !            50:  * ACB. Holds additional information for each SCSI command Comments: We
        !            51:  * need a separate scsi command block because we may need to overwrite it
        !            52:  * with a request sense command.  Basicly, we refrain from fiddling with
        !            53:  * the scsi_xfer struct (except do the expected updating of return values).
        !            54:  * We'll generally update: xs->{flags,resid,error,sense,status} and
        !            55:  * occasionally xs->retries.
        !            56:  */
        !            57: struct sbic_acb {
        !            58:     TAILQ_ENTRY(sbic_acb)   chain;
        !            59:     struct scsi_xfer        *xs;        /* SCSI xfer ctrl block from above */
        !            60:     int                     flags;      /* Status */
        !            61: #define ACB_FREE        0x00
        !            62: #define ACB_ACTIVE      0x01
        !            63: #define ACB_DONE        0x04
        !            64: #define ACB_CHKSENSE    0x08
        !            65: #define ACB_BBUF        0x10    /* DMA input needs to be copied from bounce */
        !            66: #define ACB_DATAIN      0x20    /* DMA direction flag */
        !            67:
        !            68:     struct  scsi_generic    cmd;        /* SCSI command block */
        !            69:     int                     clen;
        !            70:     struct  dma_chain       sc_kv;      /* Virtual address of whole DMA */
        !            71:     struct  dma_chain       sc_pa;      /* Physical address of DMA segment */
        !            72:     u_long                  sc_tcnt;    /* number of bytes for this DMA */
        !            73:     u_short                 sc_dmacmd;  /* Internal data for this DMA */
        !            74:     char                    *pa_addr;   /* XXXX initial phys addr */
        !            75: };
        !            76:
        !            77: /*
        !            78:  * Some info about each (possible) target on the SCSI bus.  This should
        !            79:  * probably have been a "per target+lunit" structure, but we'll leave it at
        !            80:  * this for now.  Is there a way to reliably hook it up to sc->fordriver??
        !            81:  */
        !            82: struct sbic_tinfo {
        !            83:     int                     cmds;       /* #commands processed */
        !            84:     int                     dconns;     /* #disconnects */
        !            85:     int                     senses;     /* #request sense commands sent */
        !            86:     int                     lubusy;     /* What local units/subr. are busy? */
        !            87: } tinfo_t;
        !            88:
        !            89: struct  sbic_softc {
        !            90:     struct  device          sc_dev;
        !            91:     struct  intrhand       sc_dmaih;
        !            92:     struct  intrhand       sc_sbicih;
        !            93:     struct  target_sync {
        !            94:         u_char  state;
        !            95:         u_char  period;
        !            96:         u_char  offset;
        !            97:     } sc_sync[8];
        !            98:     u_char                  target;     /* Currently active target */
        !            99:     u_char                  lun;
        !           100:     struct  scsi_link       sc_link;    /* proto for sub devices */
        !           101:     sbic_regmap_p           sc_sbicp;   /* the SBIC */
        !           102:     int                     sc_ipl;
        !           103:
        !           104:     /* Lists of command blocks */
        !           105:     TAILQ_HEAD(acb_list, sbic_acb)  free_list,
        !           106:                                     ready_list,
        !           107:                                     nexus_list;
        !           108:
        !           109:     struct sbic_acb         *sc_nexus;  /* current command */
        !           110:     struct sbic_acb         sc_acb[8];  /* the real command blocks */
        !           111:     struct sbic_tinfo       sc_tinfo[8];
        !           112:
        !           113:     struct  scsi_xfer       *sc_xs;     /* transfer from high level code */
        !           114:     u_char                  sc_flags;
        !           115:     u_char                  sc_stat[2];
        !           116:     u_char                  sc_msg[7];
        !           117:     u_long                  sc_clkfreq;
        !           118:     u_long                  sc_tcnt;    /* number of bytes transferred */
        !           119:     u_short                 sc_dmacmd;  /* used by dma drivers */
        !           120:     u_long                  sc_dmamask; /* dma valid mem mask */
        !           121: #ifdef DEBUG
        !           122:     u_short                 sc_dmatimo; /* dma timeout */
        !           123: #endif
        !           124:     struct  dma_chain       *sc_cur;
        !           125:     struct  dma_chain       *sc_last;
        !           126:     int  (*sc_dmago)(struct sbic_softc *, char *, int, int);
        !           127:     int  (*sc_dmanext)(struct sbic_softc *);
        !           128:     void (*sc_enintr)(struct sbic_softc *);
        !           129:     void (*sc_dmastop)(struct sbic_softc *);
        !           130: };
        !           131:
        !           132: /*
        !           133:  * sc_flags
        !           134:  */
        !           135: #define SBICF_ALIVE         0x01    /* controller initialized */
        !           136: #define SBICF_DCFLUSH       0x02    /* need flush for overlap after dma finishes */
        !           137: #define SBICF_SELECTED      0x04    /* bus is in selected state. */
        !           138: #define SBICF_ICMD          0x08    /* Immediate command in execution */
        !           139: #define SBICF_BADDMA        0x10    /* controller can only DMA to ztwobus space */
        !           140: #define SBICF_INTR          0x40    /* SBICF interrupt expected */
        !           141: #define SBICF_INDMA         0x80    /* not used yet, DMA I/O in progress */
        !           142:
        !           143: /*
        !           144:  * sync states
        !           145:  */
        !           146: #define SYNC_START          0   /* no sync handshake started */
        !           147: #define SYNC_SENT           1   /* we sent sync request, no answer yet */
        !           148: #define SYNC_DONE           2   /* target accepted our (or inferior) settings,
        !           149:                                    or it rejected the request and we stay async */
        !           150:
        !           151: #define PHASE               0x07    /* mask for psns/pctl phase */
        !           152: #define DATA_OUT_PHASE      0x00
        !           153: #define DATA_IN_PHASE       0x01
        !           154: #define CMD_PHASE           0x02
        !           155: #define STATUS_PHASE        0x03
        !           156: #define BUS_FREE_PHASE      0x04
        !           157: #define ARB_SEL_PHASE       0x05    /* Fuji chip combines arbitration with sel. */
        !           158: #define MESG_OUT_PHASE      0x06
        !           159: #define MESG_IN_PHASE       0x07
        !           160:
        !           161: #define MSG_CMD_COMPLETE    0x00
        !           162: #define MSG_EXT_MESSAGE     0x01
        !           163: #define MSG_SAVE_DATA_PTR   0x02
        !           164: #define MSG_RESTORE_PTR     0x03
        !           165: #define MSG_DISCONNECT      0x04
        !           166: #define MSG_INIT_DETECT_ERROR   0x05
        !           167: #define MSG_ABORT           0x06
        !           168: #define MSG_REJECT          0x07
        !           169: #define MSG_NOOP            0x08
        !           170: #define MSG_PARITY_ERROR    0x09
        !           171: #define MSG_BUS_DEVICE_RESET    0x0C
        !           172: #define MSG_IDENTIFY        0x80
        !           173: #define MSG_IDENTIFY_DR     0xc0    /* (disconnect/reconnect allowed) */
        !           174: #define MSG_SYNC_REQ        0x01
        !           175:
        !           176: #define MSG_ISIDENTIFY(x)   ((x) & MSG_IDENTIFY)
        !           177:
        !           178:
        !           179: #define STS_CHECKCOND       0x02    /* Check Condition (ie., read sense) */
        !           180: #define STS_CONDMET         0x04    /* Condition Met (ie., search worked) */
        !           181: #define STS_BUSY            0x08
        !           182: #define STS_INTERMED        0x10    /* Intermediate status sent */
        !           183: #define STS_EXT             0x80    /* Extended status valid */
        !           184:
        !           185:
        !           186: /*
        !           187:  * States returned by our state machine
        !           188:  */
        !           189:
        !           190: #define SBIC_STATE_ERROR    -1
        !           191: #define SBIC_STATE_DONE     0
        !           192: #define SBIC_STATE_RUNNING  1
        !           193: #define SBIC_STATE_DISCONNECT   2
        !           194:
        !           195:
        !           196: struct buf;
        !           197: struct scsi_xfer;
        !           198:
        !           199: void sbic_minphys(struct buf *bp);
        !           200: int sbic_scsicmd(struct scsi_xfer *);
        !           201:
        !           202: #endif /* _SBICVAR_H_ */

CVSweb