Module Name: src Committed By: matt Date: Sun Jul 5 03:03:00 UTC 2015
Modified Files: src/sys/arch/vax/uba: uba_mainbus.c Log Message: Add code to probe the Q-bus/Unibus for memory. (From Charles Dickman) To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/sys/arch/vax/uba/uba_mainbus.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/arch/vax/uba/uba_mainbus.c diff -u src/sys/arch/vax/uba/uba_mainbus.c:1.10 src/sys/arch/vax/uba/uba_mainbus.c:1.11 --- src/sys/arch/vax/uba/uba_mainbus.c:1.10 Tue Dec 14 23:38:30 2010 +++ src/sys/arch/vax/uba/uba_mainbus.c Sun Jul 5 03:03:00 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: uba_mainbus.c,v 1.10 2010/12/14 23:38:30 matt Exp $ */ +/* $NetBSD: uba_mainbus.c,v 1.11 2015/07/05 03:03:00 matt Exp $ */ /* * Copyright (c) 1982, 1986 The Regents of the University of California. * All rights reserved. @@ -68,7 +68,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uba_mainbus.c,v 1.10 2010/12/14 23:38:30 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uba_mainbus.c,v 1.11 2015/07/05 03:03:00 matt Exp $"); #define _VAX_BUS_DMA_PRIVATE @@ -91,6 +91,7 @@ __KERNEL_RCSID(0, "$NetBSD: uba_mainbus. /* Some Qbus-specific defines */ #define QBASIZE (8192 * VAX_NBPG) #define QBAMAP 0x20088000 +#define QBAMEM 0x30000000 #define QIOPAGE 0x20000000 /* @@ -121,6 +122,12 @@ qba_attach(device_t parent, device_t sel { struct mainbus_attach_args * const ma = aux; struct uba_vsoftc * const sc = device_private(self); + paddr_t paddr; + vaddr_t vaddr; + int *mapp; + int pgnum; + //int val; + int start; aprint_normal(": Q22\n"); @@ -140,6 +147,40 @@ qba_attach(device_t parent, device_t sel sc->uv_addr = QBAMAP; /* Physical address of map registers */ uba_dma_init(sc); + + mapp = (int *)vax_map_physmem(QBAMAP, QBASIZE/VAX_NBPG); + //val = 0; + + for (paddr = QBAMEM, pgnum = 0, start = -1; + paddr < QBAMEM + QBASIZE - 8192; + paddr += VAX_NBPG, pgnum += 1) { + //val = mapp[pgnum]; + mapp[pgnum] = 0; + vaddr = vax_map_physmem(paddr, 1); + if (badaddr((void *)vaddr, 2) == 0) { + if (start < 0) + start = pgnum; + } else if (start >= 0) { + aprint_normal("sgmap exclusion at %#x - %#x\n", + start*VAX_NBPG, pgnum*VAX_NBPG - 1); + vax_sgmap_resserve(start*VAX_NBPG, + (pgnum - start)*VAX_NBPG, &sc->uv_sgmap); + start = -1; + } + vax_unmap_physmem(vaddr, 1); + //mapp[pgnum] = val; + } + vax_unmap_physmem((vaddr_t)mapp, QBASIZE/VAX_NBPG); + if (start >= 0) { + aprint_normal("sgmap exclusion at %#x - %#x\n", + start*VAX_NBPG, pgnum*VAX_NBPG - 1); + vax_sgmap_reserve(start*VAX_NBPG, (pgnum - start)*VAX_NBPG, + &sc->uv_sgmap); + } + + /* reserve I/O space within Qbus */ + vax_sgmap_reserve(0x3fe000, 0x400000 - 0x3fe000, &sc->uv_sgmap); + uba_attach(&sc->uv_sc, QIOPAGE); }