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

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

1.1       nbrk        1: /* $OpenBSD: mfivar.h,v 1.30 2007/03/22 16:55:31 deraadt Exp $ */
                      2: /*
                      3:  * Copyright (c) 2006 Marco Peereboom <marco@peereboom.us>
                      4:  *
                      5:  * Permission to use, copy, modify, and distribute this software for any
                      6:  * purpose with or without fee is hereby granted, provided that the above
                      7:  * copyright notice and this permission notice appear in all copies.
                      8:  *
                      9:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
                     10:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
                     11:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
                     12:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
                     13:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
                     14:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
                     15:  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
                     16:  */
                     17:
                     18: #include <sys/sensors.h>
                     19:
                     20: #define DEVNAME(_s)     ((_s)->sc_dev.dv_xname)
                     21:
                     22: /* #define MFI_DEBUG */
                     23: #ifdef MFI_DEBUG
                     24: extern uint32_t                        mfi_debug;
                     25: #define DPRINTF(x...)          do { if (mfi_debug) printf(x); } while(0)
                     26: #define DNPRINTF(n,x...)       do { if (mfi_debug & n) printf(x); } while(0)
                     27: #define        MFI_D_CMD               0x0001
                     28: #define        MFI_D_INTR              0x0002
                     29: #define        MFI_D_MISC              0x0004
                     30: #define        MFI_D_DMA               0x0008
                     31: #define        MFI_D_IOCTL             0x0010
                     32: #define        MFI_D_RW                0x0020
                     33: #define        MFI_D_MEM               0x0040
                     34: #define        MFI_D_CCB               0x0080
                     35: #else
                     36: #define DPRINTF(x...)
                     37: #define DNPRINTF(n,x...)
                     38: #endif
                     39:
                     40: struct mfi_mem {
                     41:        bus_dmamap_t            am_map;
                     42:        bus_dma_segment_t       am_seg;
                     43:        size_t                  am_size;
                     44:        caddr_t                 am_kva;
                     45: };
                     46:
                     47: #define MFIMEM_MAP(_am)                ((_am)->am_map)
                     48: #define MFIMEM_DVA(_am)                ((_am)->am_map->dm_segs[0].ds_addr)
                     49: #define MFIMEM_KVA(_am)                ((void *)(_am)->am_kva)
                     50:
                     51: struct mfi_prod_cons {
                     52:        uint32_t                mpc_producer;
                     53:        uint32_t                mpc_consumer;
                     54:        uint32_t                mpc_reply_q[1]; /* compensate for 1 extra reply per spec */
                     55: };
                     56:
                     57: struct mfi_ccb {
                     58:        struct mfi_softc        *ccb_sc;
                     59:
                     60:        union mfi_frame         *ccb_frame;
                     61:        paddr_t                 ccb_pframe;
                     62:        uint32_t                ccb_frame_size;
                     63:        uint32_t                ccb_extra_frames;
                     64:
                     65:        struct mfi_sense        *ccb_sense;
                     66:        paddr_t                 ccb_psense;
                     67:
                     68:        bus_dmamap_t            ccb_dmamap;
                     69:
                     70:        union mfi_sgl           *ccb_sgl;
                     71:
                     72:        /* data for sgl */
                     73:        void                    *ccb_data;
                     74:        uint32_t                ccb_len;
                     75:
                     76:        uint32_t                ccb_direction;
                     77: #define MFI_DATA_NONE  0
                     78: #define MFI_DATA_IN    1
                     79: #define MFI_DATA_OUT   2
                     80:
                     81:        struct scsi_xfer        *ccb_xs;
                     82:
                     83:        void                    (*ccb_done)(struct mfi_ccb *);
                     84:
                     85:        volatile enum {
                     86:                MFI_CCB_FREE,
                     87:                MFI_CCB_READY,
                     88:                MFI_CCB_DONE
                     89:        }                       ccb_state;
                     90:        uint32_t                ccb_flags;
                     91: #define MFI_CCB_F_ERR                  (1<<0)
                     92:        TAILQ_ENTRY(mfi_ccb)    ccb_link;
                     93: };
                     94:
                     95: TAILQ_HEAD(mfi_ccb_list, mfi_ccb);
                     96:
                     97: struct mfi_softc {
                     98:        struct device           sc_dev;
                     99:        void                    *sc_ih;
                    100:        struct scsi_link        sc_link;
                    101:
                    102:        u_int32_t               sc_flags;
                    103:
                    104:        bus_space_tag_t         sc_iot;
                    105:        bus_space_handle_t      sc_ioh;
                    106:        bus_dma_tag_t           sc_dmat;
                    107:
                    108:        /* mgmt lock */
                    109:        struct rwlock           sc_lock;
                    110:
                    111:        /* save some useful information for logical drives that is missing
                    112:         * in sc_ld_list
                    113:         */
                    114:        struct {
                    115:                uint32_t        ld_present;
                    116:                char            ld_dev[16];     /* device name sd? */
                    117:        }                       sc_ld[MFI_MAX_LD];
                    118:
                    119:        /* scsi ioctl from sd device */
                    120:        int                     (*sc_ioctl)(struct device *, u_long, caddr_t);
                    121:
                    122:        /* firmware determined max, totals and other information*/
                    123:        uint32_t                sc_max_cmds;
                    124:        uint32_t                sc_max_sgl;
                    125:        uint32_t                sc_max_ld;
                    126:        uint32_t                sc_ld_cnt;
                    127:        /* XXX these struct should be local to mgmt function */
                    128:        struct mfi_ctrl_info    sc_info;
                    129:        struct mfi_ld_list      sc_ld_list;
                    130:        struct mfi_ld_details   sc_ld_details;
                    131:
                    132:        /* all commands */
                    133:        struct mfi_ccb          *sc_ccb;
                    134:
                    135:        /* producer/consumer pointers and reply queue */
                    136:        struct mfi_mem          *sc_pcq;
                    137:
                    138:        /* frame memory */
                    139:        struct mfi_mem          *sc_frames;
                    140:        uint32_t                sc_frames_size;
                    141:
                    142:        /* sense memory */
                    143:        struct mfi_mem          *sc_sense;
                    144:
                    145:        struct mfi_ccb_list     sc_ccb_freeq;
                    146:
                    147:        struct ksensor          *sc_sensors;
                    148:        struct ksensordev       sc_sensordev;
                    149: };
                    150:
                    151: int    mfi_attach(struct mfi_softc *sc);
                    152: int    mfi_intr(void *);

CVSweb