[BACK]Return to dptvar.h CVS log [TXT][DIR] Up to [local] / sys / dev / ic

Annotation of sys/dev/ic/dptvar.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: dptvar.h,v 1.2 2002/03/14 01:26:54 millert Exp $      */
                      2: /*     $NetBSD: dptvar.h,v 1.5 1999/10/23 16:26:32 ad Exp $    */
                      3:
                      4: /*
                      5:  * Copyright (c) 1999 Andy Doran <ad@NetBSD.org>
                      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:  *
                     17:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
                     18:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     19:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     20:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
                     21:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     22:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     23:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     24:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     25:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     26:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     27:  * SUCH DAMAGE.
                     28:  *
                     29:  */
                     30:
                     31: #ifndef _IC_DPTVAR_H_
                     32: #define _IC_DPTVAR_H_ 1
                     33: #ifdef _KERNEL
                     34:
                     35: #define        CCB_OFF(sc,m)   ((u_long)(m) - (u_long)((sc)->sc_ccbs))
                     36:
                     37: #define CCB_ALLOC      0x01    /* CCB allocated */
                     38: #define CCB_ABORT      0x02    /* abort has been issued on this CCB */
                     39: #define CCB_INTR       0x04    /* HBA interrupted for this CCB */
                     40: #define CCB_PRIVATE    0x08    /* ours; don't talk to scsipi when done */
                     41:
                     42: struct dpt_ccb {
                     43:        struct eata_cp  ccb_eata_cp;            /* EATA command packet */
                     44:        struct eata_sg  ccb_sg[DPT_SG_SIZE];    /* SG element list */
                     45:        volatile int    ccb_flg;                /* CCB flags */
                     46:        int             ccb_timeout;            /* timeout in ms */
                     47:        u_int32_t       ccb_ccbpa;              /* physical addr of this CCB */
                     48:        bus_dmamap_t    ccb_dmamap_xfer;        /* dmamap for data xfers */
                     49:        int             ccb_hba_status;         /* from status packet */
                     50:        int             ccb_scsi_status;        /* from status packet */
                     51:        int             ccb_id;                 /* unique ID of this CCB */
                     52:        TAILQ_ENTRY(dpt_ccb) ccb_chain;         /* link to next CCB */
                     53: #ifdef __NetBSD__
                     54:        struct scsipi_sense_data ccb_sense;     /* SCSI sense data on error */
                     55:        struct scsipi_xfer *ccb_xs;             /* initiating SCSI command */
                     56: #endif /* __NetBSD__ */
                     57: #ifdef __OpenBSD__
                     58:        struct scsi_sense_data ccb_sense;
                     59:        struct scsi_xfer *ccb_xs;
                     60: #endif /* __OpenBSD__ */
                     61: };
                     62:
                     63: struct dpt_softc {
                     64:        struct device sc_dv;            /* generic device data */
                     65:        bus_space_handle_t sc_ioh;      /* bus space handle */
                     66: #ifdef __NetBSD__
                     67:        struct scsipi_adapter sc_adapter;/* scsipi adapter */
                     68:        struct scsipi_link sc_link[3];  /* prototype link for each channel */
                     69: #endif /* __NetBSD__ */
                     70: #ifdef __OpenBSD__
                     71:        struct scsi_adapter sc_adapter;/* scsipi adapter */
                     72:        struct scsi_link sc_link[3];    /* prototype link for each channel */
                     73: #endif /* __OpenBSD__ */
                     74:        struct eata_cfg sc_ec;          /* EATA configuration data */
                     75:        bus_space_tag_t sc_iot;         /* bus space tag */
                     76:        bus_dma_tag_t   sc_dmat;        /* bus DMA tag */
                     77:        bus_dmamap_t    sc_dmamap_ccb;  /* maps the CCBs */
                     78:        void            *sc_ih;         /* interrupt handler cookie */
                     79:        void            *sc_sdh;        /* shutdown hook */
                     80:        struct dpt_ccb  *sc_ccbs;       /* all our CCBs */
                     81:        struct eata_sp  *sc_statpack;   /* EATA status packet */
                     82:        int             sc_spoff;       /* status packet offset in dmamap */
                     83:        u_int32_t       sc_sppa;        /* status packet physical address */
                     84:        caddr_t         sc_scr;         /* scratch area */
                     85:        int             sc_scrlen;      /* scratch area length */
                     86:        int             sc_scroff;      /* scratch area offset in dmamap */
                     87:        u_int32_t       sc_scrpa;       /* scratch area physical address */
                     88:        int             sc_hbaid[3];    /* ID of HBA on each channel */
                     89:        int             sc_nccbs;       /* number of CCBs available */
                     90:        int             sc_open;        /* device is open */
                     91:        TAILQ_HEAD(, dpt_ccb) sc_free_ccb;/* free ccb list */
                     92: #ifdef __NetBSD__
                     93:        TAILQ_HEAD(, scsipi_xfer) sc_queue;/* pending commands */
                     94: #endif /* __NetBSD__ */
                     95: #ifdef __OpenBSD__
                     96:        LIST_HEAD(, scsi_xfer) sc_queue;/* pending commands */
                     97:        struct scsi_xfer *sc_queuelast;
                     98: #endif /* __NetBSD__ */
                     99: };
                    100:
                    101: int    dpt_intr(void *);
                    102: int    dpt_readcfg(struct dpt_softc *);
                    103: void   dpt_init(struct dpt_softc *, const char *);
                    104: void   dpt_shutdown(void *);
                    105: void   dpt_timeout(void *);
                    106: void   dpt_minphys(struct buf *);
                    107: #ifdef __NetBSD__
                    108: int    dpt_scsi_cmd(struct scsipi_xfer *);
                    109: #endif /* __NetBSD__ */
                    110: #ifdef __OpenBSD__
                    111: int    dpt_scsi_cmd(struct scsi_xfer *);
                    112: #endif /* __OpenBSD__ */
                    113: int    dpt_wait(struct dpt_softc *, u_int8_t, u_int8_t, int);
                    114: int    dpt_poll(struct dpt_softc *, struct dpt_ccb *);
                    115: int    dpt_cmd(struct dpt_softc *, struct eata_cp *, u_int32_t, int, int);
                    116: void   dpt_hba_inquire(struct dpt_softc *, struct eata_inquiry_data **);
                    117: void   dpt_reset_ccb(struct dpt_softc *, struct dpt_ccb *);
                    118: void   dpt_free_ccb(struct dpt_softc *, struct dpt_ccb *);
                    119: void   dpt_done_ccb(struct dpt_softc *, struct dpt_ccb *);
                    120: int    dpt_init_ccb(struct dpt_softc *, struct dpt_ccb *);
                    121: int    dpt_create_ccbs(struct dpt_softc *, struct dpt_ccb *, int);
                    122: struct dpt_ccb *dpt_alloc_ccb(struct dpt_softc *, int);
                    123: #ifdef DEBUG
                    124: void   dpt_dump_sp(struct eata_sp *);
                    125: #endif
                    126:
                    127: #endif /* _KERNEL */
                    128: #endif /* !defined _IC_DPTVAR_H_ */

CVSweb