Home | History | Annotate | Line # | Download | only in pci
btvmeii.c revision 1.1
      1  1.1  drochner /* $NetBSD: btvmeii.c,v 1.1 2000/02/25 18:22:39 drochner Exp $ */
      2  1.1  drochner 
      3  1.1  drochner /*
      4  1.1  drochner  * Copyright (c) 1999
      5  1.1  drochner  * 	Matthias Drochner.  All rights reserved.
      6  1.1  drochner  *
      7  1.1  drochner  * Redistribution and use in source and binary forms, with or without
      8  1.1  drochner  * modification, are permitted provided that the following conditions
      9  1.1  drochner  * are met:
     10  1.1  drochner  * 1. Redistributions of source code must retain the above copyright
     11  1.1  drochner  *    notice, this list of conditions, and the following disclaimer.
     12  1.1  drochner  * 2. Redistributions in binary form must reproduce the above copyright
     13  1.1  drochner  *    notice, this list of conditions and the following disclaimer in the
     14  1.1  drochner  *    documentation and/or other materials provided with the distribution.
     15  1.1  drochner  *
     16  1.1  drochner  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     17  1.1  drochner  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     18  1.1  drochner  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     19  1.1  drochner  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     20  1.1  drochner  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     21  1.1  drochner  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     22  1.1  drochner  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     23  1.1  drochner  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     24  1.1  drochner  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     25  1.1  drochner  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     26  1.1  drochner  * SUCH DAMAGE.
     27  1.1  drochner  */
     28  1.1  drochner 
     29  1.1  drochner /*
     30  1.1  drochner  * Driver for the Bit3/SBS PCI-VME adapter Model 2706.
     31  1.1  drochner  * Uses the common Tundra Universe code.
     32  1.1  drochner  */
     33  1.1  drochner 
     34  1.1  drochner #include <sys/param.h>
     35  1.1  drochner #include <sys/systm.h>
     36  1.1  drochner #include <sys/device.h>
     37  1.1  drochner 
     38  1.1  drochner #include <dev/pci/pcireg.h>
     39  1.1  drochner #include <dev/pci/pcivar.h>
     40  1.1  drochner #include <dev/pci/pcidevs.h>
     41  1.1  drochner 
     42  1.1  drochner #include <machine/bus.h>
     43  1.1  drochner #include <sys/malloc.h>
     44  1.1  drochner #include <sys/extent.h>
     45  1.1  drochner 
     46  1.1  drochner #include <dev/pci/ppbreg.h>
     47  1.1  drochner 
     48  1.1  drochner #include <dev/vme/vmereg.h>
     49  1.1  drochner #include <dev/vme/vmevar.h>
     50  1.1  drochner 
     51  1.1  drochner #include <dev/pci/universe_pci_var.h>
     52  1.1  drochner 
     53  1.1  drochner static int b3_2706_match __P((struct device *, struct cfdata *, void *));
     54  1.1  drochner static void b3_2706_attach __P((struct device *, struct device *, void *));
     55  1.1  drochner 
     56  1.1  drochner /* exported via tag structs */
     57  1.1  drochner int b3_2706_map_vme __P((void *, vme_addr_t, vme_size_t,
     58  1.1  drochner 		      vme_am_t, vme_datasize_t, vme_swap_t,
     59  1.1  drochner 		      bus_space_tag_t *, bus_space_handle_t *, vme_mapresc_t*));
     60  1.1  drochner void b3_2706_unmap_vme __P((void *, vme_mapresc_t));
     61  1.1  drochner 
     62  1.1  drochner int b3_2706_vme_probe __P((void *, vme_addr_t, vme_size_t, vme_am_t,
     63  1.1  drochner 			vme_datasize_t,
     64  1.1  drochner 			int (*)(void *, bus_space_tag_t, bus_space_handle_t),
     65  1.1  drochner 			void *));
     66  1.1  drochner 
     67  1.1  drochner int b3_2706_map_vmeint __P((void *, int, int, vme_intr_handle_t *));
     68  1.1  drochner void *b3_2706_establish_vmeint __P((void *, vme_intr_handle_t, int,
     69  1.1  drochner 				 int (*)(void *), void *));
     70  1.1  drochner void b3_2706_disestablish_vmeint __P((void *, void *));
     71  1.1  drochner 
     72  1.1  drochner int b3_2706_dmamap_create __P((void *, vme_size_t,
     73  1.1  drochner 			    vme_am_t, vme_datasize_t, vme_swap_t,
     74  1.1  drochner 			    int, vme_size_t, vme_addr_t,
     75  1.1  drochner 			    int, bus_dmamap_t *));
     76  1.1  drochner void b3_2706_dmamap_destroy __P((void *, bus_dmamap_t));
     77  1.1  drochner 
     78  1.1  drochner int b3_2706_dmamem_alloc __P((void *, vme_size_t,
     79  1.1  drochner 			      vme_am_t, vme_datasize_t, vme_swap_t,
     80  1.1  drochner 			      bus_dma_segment_t *, int, int *, int));
     81  1.1  drochner void b3_2706_dmamem_free __P((void *, bus_dma_segment_t *, int));
     82  1.1  drochner 
     83  1.1  drochner struct b3_2706_vmemaprescs {
     84  1.1  drochner 	int wnd;
     85  1.1  drochner 	unsigned long pcibase, maplen;
     86  1.1  drochner 	bus_space_handle_t handle;
     87  1.1  drochner 	u_int32_t len;
     88  1.1  drochner };
     89  1.1  drochner 
     90  1.1  drochner struct b3_2706_softc {
     91  1.1  drochner 	struct device sc_dev;
     92  1.1  drochner 	struct univ_pci_data univdata;
     93  1.1  drochner 	bus_space_tag_t swapt, vmet;
     94  1.1  drochner 	bus_space_handle_t swaph;
     95  1.1  drochner 	bus_addr_t vmepbase;
     96  1.1  drochner 
     97  1.1  drochner 	int windowused[8];
     98  1.1  drochner 	struct b3_2706_vmemaprescs vmemaprescs[8];
     99  1.1  drochner 	struct extent *vmeext;
    100  1.1  drochner 	char vmemap[EXTENT_FIXED_STORAGE_SIZE(8)];
    101  1.1  drochner 
    102  1.1  drochner 	struct vme_chipset_tag sc_vct;
    103  1.1  drochner };
    104  1.1  drochner 
    105  1.1  drochner struct cfattach btvmeii_ca = {
    106  1.1  drochner 	sizeof(struct b3_2706_softc), b3_2706_match, b3_2706_attach,
    107  1.1  drochner #if 0
    108  1.1  drochner 	b3_2706_detach
    109  1.1  drochner #endif
    110  1.1  drochner };
    111  1.1  drochner 
    112  1.1  drochner /*
    113  1.1  drochner  * The adapter consists of a DEC PCI-PCI-bridge with two
    114  1.1  drochner  * PCI devices behind it: A Tundra Universe as device 4 and
    115  1.1  drochner  * some FPGA with glue logics as device 8.
    116  1.1  drochner  * As long as the autoconf code doesn't provide more support
    117  1.1  drochner  * for dependant devices, we have to duplicate a part of the
    118  1.1  drochner  * "ppb" functions here.
    119  1.1  drochner  */
    120  1.1  drochner 
    121  1.1  drochner static int
    122  1.1  drochner b3_2706_match(parent, match, aux)
    123  1.1  drochner 	struct device *parent;
    124  1.1  drochner 	struct cfdata *match;
    125  1.1  drochner 	void *aux;
    126  1.1  drochner {
    127  1.1  drochner 	struct pci_attach_args *pa = aux;
    128  1.1  drochner 	pci_chipset_tag_t pc = pa->pa_pc;
    129  1.1  drochner 	int secbus;
    130  1.1  drochner 	pcitag_t tag;
    131  1.1  drochner 	pcireg_t id;
    132  1.1  drochner 
    133  1.1  drochner 	if ((PCI_VENDOR(pa->pa_id) != PCI_VENDOR_DEC)
    134  1.1  drochner 	    || (PCI_PRODUCT(pa->pa_id) != PCI_PRODUCT_DEC_21152))
    135  1.1  drochner 		return (0);
    136  1.1  drochner 
    137  1.1  drochner 	secbus = PPB_BUSINFO_SECONDARY(pci_conf_read(pc, pa->pa_tag,
    138  1.1  drochner 						     PPB_REG_BUSINFO));
    139  1.1  drochner 	if (secbus == 0) {
    140  1.1  drochner 		printf("b3_2706_match: ppb not configured\n");
    141  1.1  drochner 		return (0);
    142  1.1  drochner 	}
    143  1.1  drochner 
    144  1.1  drochner 	tag = pci_make_tag(pc, secbus, 4, 0);
    145  1.1  drochner 	id = pci_conf_read(pc, tag, PCI_ID_REG);
    146  1.1  drochner 
    147  1.1  drochner 	if ((PCI_VENDOR(id) != PCI_VENDOR_NEWBRIDGE)
    148  1.1  drochner 	    || (PCI_PRODUCT(id) != PCI_PRODUCT_NEWBRIDGE_CA91CX42)) {
    149  1.1  drochner #ifdef DEBUG
    150  1.1  drochner 		printf("b3_2706_match: no tundra\n");
    151  1.1  drochner #endif
    152  1.1  drochner 		return (0);
    153  1.1  drochner 	}
    154  1.1  drochner 
    155  1.1  drochner 	tag = pci_make_tag(pc, secbus, 8, 0);
    156  1.1  drochner 	id = pci_conf_read(pc, tag, PCI_ID_REG);
    157  1.1  drochner 
    158  1.1  drochner 	if ((PCI_VENDOR(id) != PCI_VENDOR_BIT3)
    159  1.1  drochner 	    || (PCI_PRODUCT(id) != PCI_PRODUCT_BIT3_PCIVME2706)) {
    160  1.1  drochner #ifdef DEBUG
    161  1.1  drochner 		printf("b3_2706_match: no bit3 chip\n");
    162  1.1  drochner #endif
    163  1.1  drochner 		return (0);
    164  1.1  drochner 	}
    165  1.1  drochner 
    166  1.1  drochner 	return (5); /* beat "ppb" */
    167  1.1  drochner }
    168  1.1  drochner 
    169  1.1  drochner static void
    170  1.1  drochner b3_2706_attach(parent, self, aux)
    171  1.1  drochner 	struct device *parent, *self;
    172  1.1  drochner 	void *aux;
    173  1.1  drochner {
    174  1.1  drochner 	struct b3_2706_softc *sc = (struct b3_2706_softc *)self;
    175  1.1  drochner 	struct pci_attach_args *pa = aux;
    176  1.1  drochner 	pci_chipset_tag_t pc = pa->pa_pc;
    177  1.1  drochner 	struct pci_attach_args aa;
    178  1.1  drochner 	int secbus;
    179  1.1  drochner 	pcireg_t intr;
    180  1.1  drochner 	pcitag_t tag;
    181  1.1  drochner 	bus_addr_t swappbase;
    182  1.1  drochner 	int i;
    183  1.1  drochner 
    184  1.1  drochner 	struct vmebus_attach_args vaa;
    185  1.1  drochner 
    186  1.1  drochner 	printf("\n");
    187  1.1  drochner 
    188  1.1  drochner 	secbus = PPB_BUSINFO_SECONDARY(pci_conf_read(pc, pa->pa_tag,
    189  1.1  drochner 						     PPB_REG_BUSINFO));
    190  1.1  drochner 
    191  1.1  drochner 	bcopy(pa, &aa, sizeof(struct pci_attach_args));
    192  1.1  drochner 	aa.pa_device = 4;
    193  1.1  drochner 	aa.pa_function = 0;
    194  1.1  drochner 	aa.pa_tag = pci_make_tag(pc, secbus, 4, 0);
    195  1.1  drochner 	aa.pa_intrswiz += 4;
    196  1.1  drochner 	intr = pci_conf_read(pc, aa.pa_tag, PCI_INTERRUPT_REG);
    197  1.1  drochner 	/*
    198  1.1  drochner 	 * swizzle it based on the number of
    199  1.1  drochner 	 * busses we're behind and our device
    200  1.1  drochner 	 * number.
    201  1.1  drochner 	 */
    202  1.1  drochner 	aa.pa_intrpin =	((1 + aa.pa_intrswiz - 1) % 4) + 1;
    203  1.1  drochner 	aa.pa_intrline = PCI_INTERRUPT_LINE(intr);
    204  1.1  drochner 
    205  1.1  drochner 	if (univ_pci_attach(&sc->univdata, &aa)) {
    206  1.1  drochner 		printf("%s: error initializing universe chip\n",
    207  1.1  drochner 		       self->dv_xname);
    208  1.1  drochner 		return;
    209  1.1  drochner 	}
    210  1.1  drochner 
    211  1.1  drochner 	tag = pci_make_tag(pc, secbus, 8, 0);
    212  1.1  drochner 	sc->swapt = pa->pa_memt;
    213  1.1  drochner 	if (pci_mapreg_info(pc, tag, 0x10,
    214  1.1  drochner 			    PCI_MAPREG_TYPE_MEM | PCI_MAPREG_MEM_TYPE_32BIT,
    215  1.1  drochner 			    &swappbase, 0, 0) ||
    216  1.1  drochner 	    bus_space_map(sc->swapt, swappbase, 4, 0, &sc->swaph)) {
    217  1.1  drochner 		printf("%s: can't map byteswap register\n", self->dv_xname);
    218  1.1  drochner 		return;
    219  1.1  drochner 	}
    220  1.1  drochner 	sc->vmet = pa->pa_memt;
    221  1.1  drochner 	if (pci_mapreg_info(pc, tag, 0x14,
    222  1.1  drochner 			    PCI_MAPREG_TYPE_MEM | PCI_MAPREG_MEM_TYPE_32BIT,
    223  1.1  drochner 			    &sc->vmepbase, 0, 0)) {
    224  1.1  drochner 		printf("%s: VME range not assigned\n", self->dv_xname);
    225  1.1  drochner 		return;
    226  1.1  drochner 	}
    227  1.1  drochner 	printf("%s: VME window @%lx\n", self->dv_xname, (long)sc->vmepbase);
    228  1.1  drochner 
    229  1.1  drochner 	for (i = 0; i < 8; i++) {
    230  1.1  drochner 		univ_pci_unmapvme(&sc->univdata, i);
    231  1.1  drochner 		sc->windowused[i] = 0;
    232  1.1  drochner 	}
    233  1.1  drochner 
    234  1.1  drochner 	sc->vmeext = extent_create("pcivme", sc->vmepbase,
    235  1.1  drochner 				   sc->vmepbase + 32*1024*1024 - 1, M_DEVBUF,
    236  1.1  drochner 				   sc->vmemap, sizeof(sc->vmemap),
    237  1.1  drochner 				   EX_NOCOALESCE);
    238  1.1  drochner 
    239  1.1  drochner 	sc->sc_vct.cookie = self;
    240  1.1  drochner 	sc->sc_vct.vct_probe = b3_2706_vme_probe;
    241  1.1  drochner 	sc->sc_vct.vct_map = b3_2706_map_vme;
    242  1.1  drochner 	sc->sc_vct.vct_unmap = b3_2706_unmap_vme;
    243  1.1  drochner 	sc->sc_vct.vct_int_map = b3_2706_map_vmeint;
    244  1.1  drochner 	sc->sc_vct.vct_int_establish = b3_2706_establish_vmeint;
    245  1.1  drochner 	sc->sc_vct.vct_int_disestablish = b3_2706_disestablish_vmeint;
    246  1.1  drochner 	sc->sc_vct.vct_dmamap_create = b3_2706_dmamap_create;
    247  1.1  drochner 	sc->sc_vct.vct_dmamap_destroy = b3_2706_dmamap_destroy;
    248  1.1  drochner 	sc->sc_vct.vct_dmamem_alloc = b3_2706_dmamem_alloc;
    249  1.1  drochner 	sc->sc_vct.vct_dmamem_free = b3_2706_dmamem_free;
    250  1.1  drochner 
    251  1.1  drochner 	vaa.va_vct = &(sc->sc_vct);
    252  1.1  drochner 	vaa.va_bdt = pa->pa_dmat; /* XXX */
    253  1.1  drochner 	vaa.va_slaveconfig = 0; /* XXX */
    254  1.1  drochner 
    255  1.1  drochner 	config_found(self, &vaa, 0);
    256  1.1  drochner }
    257  1.1  drochner 
    258  1.1  drochner #define sc ((struct b3_2706_softc*)vsc)
    259  1.1  drochner 
    260  1.1  drochner int
    261  1.1  drochner b3_2706_map_vme(vsc, vmeaddr, len, am, datasizes, swap, tag, handle, resc)
    262  1.1  drochner 	void *vsc;
    263  1.1  drochner 	vme_addr_t vmeaddr;
    264  1.1  drochner 	vme_size_t len;
    265  1.1  drochner 	vme_am_t am;
    266  1.1  drochner 	vme_datasize_t datasizes;
    267  1.1  drochner 	vme_swap_t swap;
    268  1.1  drochner 	bus_space_tag_t *tag;
    269  1.1  drochner 	bus_space_handle_t *handle;
    270  1.1  drochner 	vme_mapresc_t *resc;
    271  1.1  drochner {
    272  1.1  drochner 	int idx, i, wnd, res;
    273  1.1  drochner 	unsigned long boundary, maplen, pcibase;
    274  1.1  drochner 	vme_addr_t vmebase, vmeend;
    275  1.1  drochner 	static int windoworder[8] = {1, 2, 3, 5, 6, 7, 0, 4};
    276  1.1  drochner 
    277  1.1  drochner 	/* prefer windows with fine granularity for small mappings */
    278  1.1  drochner 	wnd = -1;
    279  1.1  drochner 	if (len <= 32*1024)
    280  1.1  drochner 		idx = 6;
    281  1.1  drochner 	else
    282  1.1  drochner 		idx = 0;
    283  1.1  drochner 	for (i = 0; i < 8; i++) {
    284  1.1  drochner 		if (!sc->windowused[windoworder[idx]]) {
    285  1.1  drochner 			wnd = windoworder[idx];
    286  1.1  drochner 			sc->windowused[wnd] = 1;
    287  1.1  drochner 			break;
    288  1.1  drochner 		}
    289  1.1  drochner 		idx = (idx + 1) % 8;
    290  1.1  drochner 	}
    291  1.1  drochner 	if (wnd == -1)
    292  1.1  drochner 		return (ENOSPC);
    293  1.1  drochner 
    294  1.1  drochner 	boundary = (wnd & 3) ? 64*1024 : 4*1024;
    295  1.1  drochner 
    296  1.1  drochner 	/* first mapped address */
    297  1.1  drochner 	vmebase = vmeaddr & ~(boundary - 1);
    298  1.1  drochner 	/* base of last mapped page */
    299  1.1  drochner 	vmeend = (vmeaddr + len - 1) & ~(boundary - 1);
    300  1.1  drochner 	/* bytes in outgoing window required */
    301  1.1  drochner 	maplen = vmeend - vmebase + boundary;
    302  1.1  drochner 
    303  1.1  drochner 	if (extent_alloc(sc->vmeext, maplen, boundary, 0, EX_FAST, &pcibase))
    304  1.1  drochner 		return (ENOMEM);
    305  1.1  drochner 
    306  1.1  drochner 	res = univ_pci_mapvme(&sc->univdata, wnd, vmebase, maplen,
    307  1.1  drochner 			      am, datasizes, pcibase);
    308  1.1  drochner 	if (res) {
    309  1.1  drochner 		extent_free(sc->vmeext, pcibase, maplen, 0);
    310  1.1  drochner 		return (res);
    311  1.1  drochner 	}
    312  1.1  drochner 
    313  1.1  drochner 	res = bus_space_map(sc->vmet, pcibase + (vmeaddr - vmebase), len,
    314  1.1  drochner 			    0, handle);
    315  1.1  drochner 	if (res) {
    316  1.1  drochner 		univ_pci_unmapvme(&sc->univdata, wnd);
    317  1.1  drochner 		extent_free(sc->vmeext, pcibase, maplen, 0);
    318  1.1  drochner 		return (res);
    319  1.1  drochner 	}
    320  1.1  drochner 
    321  1.1  drochner 	*tag = sc->vmet;
    322  1.1  drochner 
    323  1.1  drochner 	/*
    324  1.1  drochner 	 * save all data needed for later unmapping
    325  1.1  drochner 	 */
    326  1.1  drochner 	sc->vmemaprescs[wnd].wnd = wnd;
    327  1.1  drochner 	sc->vmemaprescs[wnd].pcibase = pcibase;
    328  1.1  drochner 	sc->vmemaprescs[wnd].maplen = maplen;
    329  1.1  drochner 	sc->vmemaprescs[wnd].handle = *handle;
    330  1.1  drochner 	sc->vmemaprescs[wnd].len = len;
    331  1.1  drochner 	*resc = &sc->vmemaprescs[wnd];
    332  1.1  drochner 	return (0);
    333  1.1  drochner }
    334  1.1  drochner 
    335  1.1  drochner void
    336  1.1  drochner b3_2706_unmap_vme(vsc, resc)
    337  1.1  drochner 	void *vsc;
    338  1.1  drochner 	vme_mapresc_t resc;
    339  1.1  drochner {
    340  1.1  drochner 	struct b3_2706_vmemaprescs *r = resc;
    341  1.1  drochner 
    342  1.1  drochner 	bus_space_unmap(sc->vmet, r->handle, r->len);
    343  1.1  drochner 	extent_free(sc->vmeext, r->pcibase, r->maplen, 0);
    344  1.1  drochner 
    345  1.1  drochner 	if (!sc->windowused[r->wnd])
    346  1.1  drochner 		panic("b3_2706_unmap_vme: bad window");
    347  1.1  drochner 	univ_pci_unmapvme(&sc->univdata, r->wnd);
    348  1.1  drochner 	sc->windowused[r->wnd] = 0;
    349  1.1  drochner }
    350  1.1  drochner 
    351  1.1  drochner int
    352  1.1  drochner b3_2706_vme_probe(vsc, addr, len, am, datasize, callback, cbarg)
    353  1.1  drochner 	void *vsc;
    354  1.1  drochner 	vme_addr_t addr;
    355  1.1  drochner 	vme_size_t len;
    356  1.1  drochner 	vme_am_t am;
    357  1.1  drochner 	vme_datasize_t datasize;
    358  1.1  drochner 	int (*callback) __P((void *, bus_space_tag_t, bus_space_handle_t));
    359  1.1  drochner 	void *cbarg;
    360  1.1  drochner {
    361  1.1  drochner 	return (EINVAL);
    362  1.1  drochner }
    363  1.1  drochner 
    364  1.1  drochner int
    365  1.1  drochner b3_2706_map_vmeint(vsc, level, vector, handlep)
    366  1.1  drochner 	void *vsc;
    367  1.1  drochner 	int level, vector;
    368  1.1  drochner 	vme_intr_handle_t *handlep;
    369  1.1  drochner {
    370  1.1  drochner 	return (EINVAL);
    371  1.1  drochner }
    372  1.1  drochner 
    373  1.1  drochner void *
    374  1.1  drochner b3_2706_establish_vmeint(vsc, handle, prior, func, arg)
    375  1.1  drochner 	void *vsc;
    376  1.1  drochner 	vme_intr_handle_t handle;
    377  1.1  drochner 	int prior;
    378  1.1  drochner 	int (*func) __P((void *));
    379  1.1  drochner 	void *arg;
    380  1.1  drochner {
    381  1.1  drochner 	return (NULL);
    382  1.1  drochner }
    383  1.1  drochner 
    384  1.1  drochner void
    385  1.1  drochner b3_2706_disestablish_vmeint(vsc, cookie)
    386  1.1  drochner 	void *vsc;
    387  1.1  drochner 	void *cookie;
    388  1.1  drochner {
    389  1.1  drochner }
    390  1.1  drochner 
    391  1.1  drochner int
    392  1.1  drochner b3_2706_dmamap_create(vsc, len, am, datasize, swap,
    393  1.1  drochner 		      nsegs, segsz, bound,
    394  1.1  drochner 		      flags, mapp)
    395  1.1  drochner 	void *vsc;
    396  1.1  drochner 	vme_size_t len;
    397  1.1  drochner 	vme_am_t am;
    398  1.1  drochner 	vme_datasize_t datasize;
    399  1.1  drochner 	vme_swap_t swap;
    400  1.1  drochner 	int nsegs;
    401  1.1  drochner 	vme_size_t segsz;
    402  1.1  drochner 	vme_addr_t bound;
    403  1.1  drochner 	int flags;
    404  1.1  drochner 	bus_dmamap_t *mapp;
    405  1.1  drochner {
    406  1.1  drochner 	return (EINVAL);
    407  1.1  drochner }
    408  1.1  drochner 
    409  1.1  drochner void
    410  1.1  drochner b3_2706_dmamap_destroy(vsc, map)
    411  1.1  drochner 	void *vsc;
    412  1.1  drochner 	bus_dmamap_t map;
    413  1.1  drochner {
    414  1.1  drochner }
    415  1.1  drochner 
    416  1.1  drochner int
    417  1.1  drochner b3_2706_dmamem_alloc(vsc, len, am, datasizes, swap, segs, nsegs, rsegs, flags)
    418  1.1  drochner 	void *vsc;
    419  1.1  drochner 	vme_size_t len;
    420  1.1  drochner 	vme_am_t am;
    421  1.1  drochner 	vme_datasize_t datasizes;
    422  1.1  drochner 	vme_swap_t swap;
    423  1.1  drochner 	bus_dma_segment_t *segs;
    424  1.1  drochner 	int nsegs;
    425  1.1  drochner 	int *rsegs;
    426  1.1  drochner 	int flags;
    427  1.1  drochner {
    428  1.1  drochner 	return (EINVAL);
    429  1.1  drochner }
    430  1.1  drochner 
    431  1.1  drochner void
    432  1.1  drochner b3_2706_dmamem_free(vsc, segs, nsegs)
    433  1.1  drochner 	void *vsc;
    434  1.1  drochner 	bus_dma_segment_t *segs;
    435  1.1  drochner 	int nsegs;
    436  1.1  drochner {
    437  1.1  drochner }
    438  1.1  drochner 
    439  1.1  drochner #undef sc
    440