1 /* $NetBSD: uhavar.h,v 1.16 2012/10/27 17:18:23 chs Exp $ */ 2 3 /*- 4 * Copyright (c) 1998 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Charles M. Hannum and by Jason R. Thorpe of the Numerical Aerospace 9 * Simulation Facility, NASA Ames Research Center. 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 * 20 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 21 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 24 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 */ 32 33 #include <sys/queue.h> 34 35 #define UHA_MSCP_MAX 32 /* store up to 32 MSCPs at one time */ 36 #define MSCP_HASH_SIZE 32 /* hash table size for phystokv */ 37 #define MSCP_HASH_SHIFT 9 38 #define MSCP_HASH(x) ((((long)(x))>>MSCP_HASH_SHIFT) & (MSCP_HASH_SIZE - 1)) 39 40 struct uha_softc { 41 device_t sc_dev; 42 43 bus_space_tag_t sc_iot; 44 bus_space_handle_t sc_ioh; 45 bus_dma_tag_t sc_dmat; 46 void *sc_ih; 47 48 int sc_dmaflags; /* bus-specific DMA map creation flags */ 49 50 void (*start_mbox)(struct uha_softc *, struct uha_mscp *); 51 int (*poll)(struct uha_softc *, struct scsipi_xfer *, int); 52 void (*init)(struct uha_softc *); 53 54 bus_dmamap_t sc_dmamap_mscp; /* maps the mscps */ 55 struct uha_mscp *sc_mscps; /* all our mscps */ 56 57 struct uha_mscp *sc_mscphash[MSCP_HASH_SIZE]; 58 TAILQ_HEAD(, uha_mscp) sc_free_mscp; 59 int sc_nummscps; 60 61 struct scsipi_adapter sc_adapter; 62 struct scsipi_channel sc_channel; 63 }; 64 65 /* 66 * Offset of an MSCP from the beginning of the MSCP DMA mapping. 67 */ 68 #define UHA_MSCP_OFF(m) (((u_long)(m)) - ((u_long)&sc->sc_mscps[0])) 69 70 struct uha_probe_data { 71 int sc_irq, sc_drq; 72 int sc_scsi_dev; 73 }; 74 75 void uha_attach(struct uha_softc *, struct uha_probe_data *); 76 void uha_timeout(void *arg); 77 struct uha_mscp *uha_mscp_phys_kv(struct uha_softc *, u_long); 78 void uha_done(struct uha_softc *, struct uha_mscp *); 79