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

Annotation of sys/dev/i2o/iopvar.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: iopvar.h,v 1.7 2002/03/14 01:26:53 millert Exp $      */
        !             2: /*     $NetBSD: iopvar.h,v 1.5 2001/03/20 13:01:49 ad Exp $    */
        !             3:
        !             4: /*-
        !             5:  * Copyright (c) 2000, 2001 The NetBSD Foundation, Inc.
        !             6:  * All rights reserved.
        !             7:  *
        !             8:  * This code is derived from software contributed to The NetBSD Foundation
        !             9:  * by Andrew Doran.
        !            10:  *
        !            11:  * Redistribution and use in source and binary forms, with or without
        !            12:  * modification, are permitted provided that the following conditions
        !            13:  * are met:
        !            14:  * 1. Redistributions of source code must retain the above copyright
        !            15:  *    notice, this list of conditions and the following disclaimer.
        !            16:  * 2. Redistributions in binary form must reproduce the above copyright
        !            17:  *    notice, this list of conditions and the following disclaimer in the
        !            18:  *    documentation and/or other materials provided with the distribution.
        !            19:  * 3. All advertising materials mentioning features or use of this software
        !            20:  *    must display the following acknowledgement:
        !            21:  *        This product includes software developed by the NetBSD
        !            22:  *        Foundation, Inc. and its contributors.
        !            23:  * 4. Neither the name of The NetBSD Foundation nor the names of its
        !            24:  *    contributors may be used to endorse or promote products derived
        !            25:  *    from this software without specific prior written permission.
        !            26:  *
        !            27:  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
        !            28:  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
        !            29:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
        !            30:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
        !            31:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
        !            32:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
        !            33:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
        !            34:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
        !            35:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
        !            36:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
        !            37:  * POSSIBILITY OF SUCH DAMAGE.
        !            38:  */
        !            39:
        !            40: #ifndef _I2O_IOPVAR_H_
        !            41: #define        _I2O_IOPVAR_H_
        !            42:
        !            43: /*
        !            44:  * Transfer descriptor.
        !            45:  */
        !            46: struct iop_xfer {
        !            47:        bus_dmamap_t    ix_map;
        !            48:        u_int           ix_size;
        !            49:        u_int           ix_flags;
        !            50: };
        !            51: #define        IX_IN                   0x0001  /* Data transfer from IOP */
        !            52: #define        IX_OUT                  0x0002  /* Data transfer to IOP */
        !            53:
        !            54: /*
        !            55:  * Message wrapper.
        !            56:  */
        !            57: struct iop_msg {
        !            58:        SLIST_ENTRY(iop_msg)    im_chain;       /* Next free message */
        !            59:        u_int                   im_flags;       /* Control flags */
        !            60:        u_int                   im_tctx;        /* Transaction context */
        !            61:        void                    *im_dvcontext;  /* Un*x device context */
        !            62:        struct i2o_reply        *im_rb;         /* Reply buffer */
        !            63:        u_int                   im_reqstatus;   /* Status from reply */
        !            64:        struct iop_xfer         im_xfer[IOP_MAX_MSG_XFERS];
        !            65: };
        !            66: #define        IM_SYSMASK              0x00ff
        !            67: #define        IM_REPLIED              0x0001  /* Message has been replied to */
        !            68: #define        IM_ALLOCED              0x0002  /* This message wrapper is allocated */
        !            69: #define        IM_SGLOFFADJ            0x0004  /* S/G list offset adjusted */
        !            70: #define        IM_DISCARD              0x0008  /* Discard message wrapper once sent */
        !            71: #define        IM_FAIL                 0x0010  /* Transaction error returned */
        !            72:
        !            73: #define        IM_USERMASK             0xff00
        !            74: #define        IM_WAIT                 0x0100  /* Wait (sleep) for completion */
        !            75: #define        IM_POLL                 0x0200  /* Wait (poll) for completion */
        !            76: #define        IM_NOSTATUS             0x0400  /* Don't check status if waiting */
        !            77: #define        IM_POLL_INTR            0x0800  /* Do send interrupt when polling */
        !            78:
        !            79: struct iop_initiator {
        !            80:        LIST_ENTRY(iop_initiator) ii_list;
        !            81:        LIST_ENTRY(iop_initiator) ii_hash;
        !            82:
        !            83:        void    (*ii_intr)(struct device *, struct iop_msg *, void *);
        !            84:        int     (*ii_reconfig)(struct device *);
        !            85:        void    (*ii_adjqparam)(struct device *, int);
        !            86:
        !            87:        struct  device *ii_dv;
        !            88:        int     ii_flags;
        !            89:        int     ii_ictx;                /* Initiator context */
        !            90:        int     ii_tid;
        !            91: };
        !            92: #define        II_DISCARD      0x0001  /* Don't track state; discard msg wrappers */
        !            93: #define        II_CONFIGURED   0x0002  /* Already configured */
        !            94: #define        II_UTILITY      0x0004  /* Utility initiator (not a real device) */
        !            95:
        !            96: #define        IOP_ICTX        0
        !            97: #define        IOP_INIT_CODE   0x80
        !            98:
        !            99: /*
        !           100:  * Parameter group op (for async parameter retrievals).
        !           101:  */
        !           102: struct iop_pgop {
        !           103:        struct  i2o_param_op_list_header olh;
        !           104:        struct  i2o_param_op_all_template oat;
        !           105: } __attribute__ ((__packed__));
        !           106:
        !           107: /*
        !           108:  * Per-IOP context.
        !           109:  */
        !           110: struct iop_softc {
        !           111:        struct device   sc_dv;          /* generic device data */
        !           112:        bus_space_handle_t sc_ioh;      /* bus space handle */
        !           113:        bus_space_tag_t sc_iot;         /* bus space tag */
        !           114:        bus_dma_tag_t   sc_dmat;        /* bus DMA tag */
        !           115:        void            *sc_ih;         /* interrupt handler cookie */
        !           116:        struct lock     sc_conflock;    /* autoconfiguration lock */
        !           117:        bus_addr_t      sc_memaddr;     /* register window address */
        !           118:        bus_size_t      sc_memsize;     /* register window size */
        !           119:
        !           120:        struct i2o_hrt  *sc_hrt;        /* hardware resource table */
        !           121:        struct iop_tidmap *sc_tidmap;   /* tid map (per-lct-entry flags) */
        !           122:        struct i2o_lct  *sc_lct;        /* logical configuration table */
        !           123:        int             sc_nlctent;     /* number of LCT entries */
        !           124:        int             sc_flags;       /* IOP-wide flags */
        !           125:        int             sc_maxib;
        !           126:        int             sc_maxob;
        !           127:        int             sc_curib;
        !           128:        u_int32_t       sc_chgind;      /* autoconfig vs. LCT change ind. */
        !           129:        LIST_HEAD(, iop_initiator) sc_iilist;/* initiator list */
        !           130:        int             sc_nii;
        !           131:        int             sc_nuii;
        !           132:        struct iop_initiator sc_eventii;/* IOP event handler */
        !           133:        struct proc     *sc_reconf_proc;/* reconfiguration process */
        !           134:        struct iop_msg  *sc_ims;
        !           135:        SLIST_HEAD(, iop_msg) sc_im_freelist;
        !           136:        caddr_t         sc_ptb;
        !           137:        bus_dmamap_t    sc_scr_dmamap;  /* Scratch DMA map */
        !           138:        bus_dma_segment_t sc_scr_seg[1];/* Scratch DMA segment */
        !           139:        caddr_t         sc_scr;         /* Scratch memory va */
        !           140:
        !           141:        /*
        !           142:         * Reply queue.
        !           143:         */
        !           144:        bus_dmamap_t    sc_rep_dmamap;
        !           145:        int             sc_rep_size;
        !           146:        bus_addr_t      sc_rep_phys;
        !           147:        caddr_t         sc_rep;
        !           148:
        !           149:        bus_space_tag_t sc_bus_memt;
        !           150:        bus_space_tag_t sc_bus_iot;
        !           151:
        !           152:        struct i2o_status sc_status;    /* status */
        !           153: };
        !           154: #define        IOP_OPEN                0x01    /* Device interface open */
        !           155: #define        IOP_HAVESTATUS          0x02    /* Successfully retrieved status */
        !           156: #define        IOP_ONLINE              0x04    /* Can use ioctl interface */
        !           157:
        !           158: #define        IOPCF_TID               0
        !           159: #define        IOPCF_TID_DEFAULT       -1
        !           160:
        !           161: struct iop_attach_args {
        !           162:        int     ia_class;               /* device class */
        !           163:        int     ia_tid;                 /* target ID */
        !           164: };
        !           165: #define        iopcf_tid       cf_loc[IOPCF_TID]               /* TID */
        !           166:
        !           167: void   iop_init(struct iop_softc *, const char *);
        !           168: int    iop_intr(void *);
        !           169: int    iop_lct_get(struct iop_softc *);
        !           170: int    iop_param_op(struct iop_softc *, int, struct iop_initiator *, int,
        !           171:            int, void *, size_t);
        !           172: int    iop_print_ident(struct iop_softc *, int);
        !           173: int    iop_simple_cmd(struct iop_softc *, int, int, int, int, int);
        !           174: void   iop_strvis(struct iop_softc *, const char *, int, char *, int);
        !           175:
        !           176: void   iop_initiator_register(struct iop_softc *, struct iop_initiator *);
        !           177: void   iop_initiator_unregister(struct iop_softc *, struct iop_initiator *);
        !           178:
        !           179: struct iop_msg *iop_msg_alloc(struct iop_softc *, struct iop_initiator *,
        !           180:            int);
        !           181: void   iop_msg_free(struct iop_softc *, struct iop_msg *);
        !           182: int    iop_msg_map(struct iop_softc *, struct iop_msg *, u_int32_t *, void *,
        !           183:            size_t, int);
        !           184: int    iop_msg_map_bio(struct iop_softc *, struct iop_msg *, u_int32_t *,
        !           185:            void *, int, int);
        !           186: int    iop_msg_post(struct iop_softc *, struct iop_msg *, void *, int);
        !           187: void   iop_msg_unmap(struct iop_softc *, struct iop_msg *);
        !           188:
        !           189: int    iop_util_abort(struct iop_softc *, struct iop_initiator *, int, int,
        !           190:            int);
        !           191: int    iop_util_claim(struct iop_softc *, struct iop_initiator *, int, int);
        !           192: int    iop_util_eventreg(struct iop_softc *, struct iop_initiator *, int);
        !           193:
        !           194: #endif /* !_I2O_IOPVAR_H_ */

CVSweb