From 91d7642d303985a8e6ea1812b0860d203c09eea5 Mon Sep 17 00:00:00 2001 From: cgd Date: Fri, 8 Mar 1996 20:19:48 +0000 Subject: [PATCH] implement bus_mem_map() and bus_mem_unmap() functions. --- sys/arch/i386/i386/machdep.c | 46 +++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/sys/arch/i386/i386/machdep.c b/sys/arch/i386/i386/machdep.c index 1112b32e749d..9dd646de8415 100644 --- a/sys/arch/i386/i386/machdep.c +++ b/sys/arch/i386/i386/machdep.c @@ -1,4 +1,4 @@ -/* $NetBSD: machdep.c,v 1.193 1996/03/08 11:40:28 mycroft Exp $ */ +/* $NetBSD: machdep.c,v 1.194 1996/03/08 20:19:48 cgd Exp $ */ /*- * Copyright (c) 1993, 1994, 1995 Charles M. Hannum. All rights reserved. @@ -1420,3 +1420,47 @@ cpu_reset() for (;;); } + +int +bus_mem_map(t, bpa, size, cacheable, mhp) + bus_chipset_tag_t t; + bus_mem_addr_t bpa; + bus_mem_size_t size; + int cacheable; + bus_mem_handle_t *mhp; +{ + u_long pa, endpa; + vm_offset_t va; + + pa = i386_trunc_page(bpa); + endpa = i386_round_page(bpa + size); + + va = kmem_alloc_pageable(kernel_map, endpa - pa); + if (va == 0) + return (1); + *mhp = (caddr_t)(va + (bpa & PGOFSET)); + + for (; pa < endpa; pa += NBPG, va += NBPG) { + pmap_enter(pmap_kernel(), va, pa, VM_PROT_READ | VM_PROT_WRITE, + TRUE); + if (!cacheable) + pmap_changebit(pa, PG_N, ~0); + else + pmap_changebit(pa, 0, ~PG_N); + } + + return 0; +} + +void +bus_mem_unmap(t, memh, size) + bus_chipset_tag_t t; + bus_mem_handle_t memh; + bus_mem_size_t size; +{ + vm_offset_t va, endva; + + va = i386_trunc_page(memh); + endva = i386_round_page(memh); + kmem_free(kmem_map, va, endva - va); +}