Module Name: src
Committed By: thorpej
Date: Tue Dec 5 15:58:32 UTC 2023
Modified Files:
src/sys/dev/pci: btvmeii.c
Log Message:
Use vmem(9) rather than extent(9) to manage VME<->PCI address
translations.
While here, malloc(9) -> kmem(9), and fix a couple of things that
the newer compiler gripes about.
To generate a diff of this commit:
cvs rdiff -u -r1.26 -r1.27 src/sys/dev/pci/btvmeii.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/pci/btvmeii.c
diff -u src/sys/dev/pci/btvmeii.c:1.26 src/sys/dev/pci/btvmeii.c:1.27
--- src/sys/dev/pci/btvmeii.c:1.26 Sat Aug 7 16:19:14 2021
+++ src/sys/dev/pci/btvmeii.c Tue Dec 5 15:58:32 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: btvmeii.c,v 1.26 2021/08/07 16:19:14 thorpej Exp $ */
+/* $NetBSD: btvmeii.c,v 1.27 2023/12/05 15:58:32 thorpej Exp $ */
/*
* Copyright (c) 1999
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: btvmeii.c,v 1.26 2021/08/07 16:19:14 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: btvmeii.c,v 1.27 2023/12/05 15:58:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -44,8 +44,8 @@ __KERNEL_RCSID(0, "$NetBSD: btvmeii.c,v
#include <dev/pci/pcidevs.h>
#include <sys/bus.h>
-#include <sys/malloc.h>
-#include <sys/extent.h>
+#include <sys/kmem.h>
+#include <sys/vmem.h>
#include <dev/pci/ppbreg.h>
@@ -110,8 +110,7 @@ struct b3_2706_softc {
int windowused[8];
struct b3_2706_vmemaprescs vmemaprescs[8];
- struct extent *vmeext;
- char vmemap[EXTENT_FIXED_STORAGE_SIZE(8)];
+ vmem_t *vme_arena;
struct vme_chipset_tag sc_vct;
@@ -255,10 +254,16 @@ b3_2706_attach(device_t parent, device_t
for (i = 0; i < 8; i++) {
sc->windowused[i] = 0;
}
- sc->vmeext = extent_create("pcivme", sc->vmepbase,
- sc->vmepbase + 32*1024*1024 - 1, M_DEVBUF,
- sc->vmemap, sizeof(sc->vmemap),
- EX_NOCOALESCE);
+ sc->vme_arena = vmem_create("pcivme",
+ sc->vmepbase, /* base */
+ 32*1024*1024, /* size */
+ 1, /* quantum */
+ NULL, /* allocfn */
+ NULL, /* releasefn */
+ NULL, /* source */
+ 0, /* qcache_max */
+ VM_SLEEP,
+ IPL_NONE);
sc->sc_vct.cookie = self;
sc->sc_vct.vct_probe = b3_2706_vme_probe;
@@ -285,8 +290,9 @@ int
b3_2706_map_vme(void *vsc, vme_addr_t vmeaddr, vme_size_t len, vme_am_t am, vme_datasize_t datasizes, vme_swap_t swap, bus_space_tag_t *tag, bus_space_handle_t *handle, vme_mapresc_t *resc)
{
int idx, i, wnd, res;
- unsigned long boundary, maplen, pcibase;
+ unsigned long boundary, maplen;
vme_addr_t vmebase, vmeend;
+ vmem_addr_t pcibase;
static int windoworder[8] = {1, 2, 3, 5, 6, 7, 0, 4};
/* prefer windows with fine granularity for small mappings */
@@ -315,7 +321,15 @@ b3_2706_map_vme(void *vsc, vme_addr_t vm
/* bytes in outgoing window required */
maplen = vmeend - vmebase + boundary;
- if (extent_alloc(sc->vmeext, maplen, boundary, 0, EX_FAST, &pcibase)) {
+ if (vmem_xalloc(sc->vme_arena,
+ maplen, /* size */
+ boundary, /* align */
+ 0, /* phase */
+ 0, /* boundary */
+ VMEM_ADDR_MIN, /* minaddr */
+ VMEM_ADDR_MAX, /* maxaddr */
+ VM_NOSLEEP,
+ &pcibase)) {
sc->windowused[wnd] = 0;
return (ENOMEM);
}
@@ -323,7 +337,7 @@ b3_2706_map_vme(void *vsc, vme_addr_t vm
res = univ_pci_mapvme(&sc->univdata, wnd, vmebase, maplen,
am, datasizes, pcibase);
if (res) {
- extent_free(sc->vmeext, pcibase, maplen, 0);
+ vmem_xfree(sc->vme_arena, pcibase, maplen);
sc->windowused[wnd] = 0;
return (res);
}
@@ -332,7 +346,7 @@ b3_2706_map_vme(void *vsc, vme_addr_t vm
0, handle);
if (res) {
univ_pci_unmapvme(&sc->univdata, wnd);
- extent_free(sc->vmeext, pcibase, maplen, 0);
+ vmem_xfree(sc->vme_arena, pcibase, maplen);
sc->windowused[wnd] = 0;
return (res);
}
@@ -357,7 +371,7 @@ b3_2706_unmap_vme(void *vsc, vme_mapresc
struct b3_2706_vmemaprescs *r = resc;
bus_space_unmap(sc->vmet, r->handle, r->len);
- extent_free(sc->vmeext, r->pcibase, r->maplen, 0);
+ vmem_xfree(sc->vme_arena, r->pcibase, r->maplen);
if (!sc->windowused[r->wnd])
panic("b3_2706_unmap_vme: bad window");
@@ -389,14 +403,17 @@ b3_2706_vme_probe(void *vsc, vme_addr_t
switch (datasize) {
case VME_D8:
dummy = bus_space_read_1(tag, handle, i);
+ (void)dummy;
i++;
break;
case VME_D16:
dummy = bus_space_read_2(tag, handle, i);
+ (void)dummy;
i += 2;
break;
case VME_D32:
dummy = bus_space_read_4(tag, handle, i);
+ (void)dummy;
i += 4;
break;
default:
@@ -433,7 +450,7 @@ b3_2706_establish_vmeint(void *vsc, vme_
long lv;
int s;
- ih = malloc(sizeof *ih, M_DEVBUF, M_WAITOK);
+ ih = kmem_alloc(sizeof *ih, KM_SLEEP);
lv = (long)handle; /* XXX */
@@ -466,7 +483,7 @@ b3_2706_disestablish_vmeint(void *vsc, v
TAILQ_REMOVE(&(sc->intrhdls), ih, ih_next);
splx(s);
- free(ih, M_DEVBUF);
+ kmem_free(ih, sizeof(*ih));
}
void
@@ -506,19 +523,9 @@ b3_2706_vmeint(void *vsc, int level, int
}
int
-b3_2706_dmamap_create(vsc, len, am, datasize, swap,
- nsegs, segsz, bound,
- flags, mapp)
- void *vsc;
- vme_size_t len;
- vme_am_t am;
- vme_datasize_t datasize;
- vme_swap_t swap;
- int nsegs;
- vme_size_t segsz;
- vme_addr_t bound;
- int flags;
- bus_dmamap_t *mapp;
+b3_2706_dmamap_create(void *vsc, vme_size_t len, vme_am_t am,
+ vme_datasize_t datasize, vme_swap_t swap, int nsegs, vme_size_t segsz,
+ vme_addr_t bound, int flags, bus_dmamap_t *mapp)
{
return (EINVAL);
}