1 /* $NetBSD: mfivar.h,v 1.12 2009/07/16 18:10:00 dyoung Exp $ */
2 /* $OpenBSD: mfivar.h,v 1.28 2006/08/31 18:18:46 marco Exp $ */
4 * Copyright (c) 2006 Marco Peereboom <marco@peereboom.us>
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 #include <dev/sysmon/sysmonvar.h>
20 #include <sys/envsys.h>
22 #define DEVNAME(_s) (device_xname((_s)->sc_dev))
24 /* #define MFI_DEBUG */
26 extern uint32_t mfi_debug
;
27 #define DPRINTF(x...) do { if (mfi_debug) printf(x); } while(0)
28 #define DNPRINTF(n,x...) do { if (mfi_debug & n) printf(x); } while(0)
29 #define MFI_D_CMD 0x0001
30 #define MFI_D_INTR 0x0002
31 #define MFI_D_MISC 0x0004
32 #define MFI_D_DMA 0x0008
33 #define MFI_D_IOCTL 0x0010
34 #define MFI_D_RW 0x0020
35 #define MFI_D_MEM 0x0040
36 #define MFI_D_CCB 0x0080
38 #define DPRINTF(x, ...)
39 #define DNPRINTF(n, x, ...)
44 bus_dma_segment_t am_seg
;
49 #define MFIMEM_MAP(_am) ((_am)->am_map)
50 #define MFIMEM_DVA(_am) ((_am)->am_map->dm_segs[0].ds_addr)
51 #define MFIMEM_KVA(_am) ((void *)(_am)->am_kva)
53 struct mfi_prod_cons
{
54 uint32_t mpc_producer
;
55 uint32_t mpc_consumer
;
56 uint32_t mpc_reply_q
[1]; /* compensate for 1 extra reply per spec */
60 struct mfi_softc
*ccb_sc
;
62 union mfi_frame
*ccb_frame
;
64 uint32_t ccb_frame_size
;
65 uint32_t ccb_extra_frames
;
67 struct mfi_sense
*ccb_sense
;
70 bus_dmamap_t ccb_dmamap
;
72 union mfi_sgl
*ccb_sgl
;
78 uint32_t ccb_direction
;
79 #define MFI_DATA_NONE 0
81 #define MFI_DATA_OUT 2
83 struct scsipi_xfer
*ccb_xs
;
85 void (*ccb_done
)(struct mfi_ccb
*);
93 #define MFI_CCB_F_ERR (1<<0)
94 TAILQ_ENTRY(mfi_ccb
) ccb_link
;
97 TAILQ_HEAD(mfi_ccb_list
, mfi_ccb
);
105 uint32_t (*mio_fw_state
)(struct mfi_softc
*);
106 void (*mio_intr_dis
)(struct mfi_softc
*);
107 void (*mio_intr_ena
)(struct mfi_softc
*);
108 int (*mio_intr
)(struct mfi_softc
*);
109 void (*mio_post
)(struct mfi_softc
*, struct mfi_ccb
*);
114 struct scsipi_channel sc_chan
;
115 struct scsipi_adapter sc_adapt
;
117 const struct mfi_iop_ops
*sc_iop
;
123 bus_space_tag_t sc_iot
;
124 bus_space_handle_t sc_ioh
;
125 bus_dma_tag_t sc_dmat
;
128 /* save some useful information for logical drives that is missing
133 char ld_dev
[16]; /* device name sd? */
136 /* firmware determined max, totals and other information*/
137 uint32_t sc_max_cmds
;
141 /* XXX these struct should be local to mgmt function */
142 struct mfi_ctrl_info sc_info
;
143 struct mfi_ld_list sc_ld_list
;
144 struct mfi_ld_details sc_ld_details
;
147 struct mfi_ccb
*sc_ccb
;
149 /* producer/consumer pointers and reply queue */
150 struct mfi_mem
*sc_pcq
;
153 struct mfi_mem
*sc_frames
;
154 uint32_t sc_frames_size
;
157 struct mfi_mem
*sc_sense
;
159 struct mfi_ccb_list sc_ccb_freeq
;
161 struct sysmon_envsys
*sc_sme
;
162 envsys_data_t
*sc_sensor
;
167 int mfi_rescan(device_t
, const char *, const int *);
168 void mfi_childdetached(device_t
, device_t
);
169 int mfi_attach(struct mfi_softc
*, enum mfi_iop
);
170 int mfi_detach(struct mfi_softc
*, int);
171 int mfi_intr(void *);