FreeBSD/Linux Kernel Cross Reference
sys/i386/io_map.c
1 /*
2 * Mach Operating System
3 * Copyright (c) 1991,1990 Carnegie Mellon University
4 * All Rights Reserved.
5 *
6 * Permission to use, copy, modify and distribute this software and its
7 * documentation is hereby granted, provided that both the copyright
8 * notice and this permission notice appear in all copies of the
9 * software, derivative works or modified versions, and any portions
10 * thereof, and that both notices appear in supporting documentation.
11 *
12 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
13 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
14 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
15 *
16 * Carnegie Mellon requests users of this software to return to
17 *
18 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
19 * School of Computer Science
20 * Carnegie Mellon University
21 * Pittsburgh PA 15213-3890
22 *
23 * any improvements or extensions that they make and grant Carnegie Mellon
24 * the rights to redistribute these changes.
25 */
26 /*
27 * HISTORY
28 * $Log: io_map.c,v $
29 * Revision 2.5 91/05/14 16:09:37 mrt
30 * Correcting copyright
31 *
32 * Revision 2.4 91/03/16 14:44:30 rpd
33 * Updated for new kmem_alloc interface.
34 * [91/03/03 rpd]
35 *
36 * Revision 2.3 91/02/05 17:12:31 mrt
37 * Changed to new Mach copyright
38 * [91/02/01 17:35:11 mrt]
39 *
40 * Revision 2.2 90/05/03 15:27:57 dbg
41 * Created.
42 * [90/02/21 dbg]
43 *
44 */
45
46 #include <mach/vm_param.h>
47 #include <vm/vm_kern.h>
48 #include <vm/vm_map.h>
49
50 extern vm_offset_t virtual_avail;
51
52 /*
53 * Allocate and map memory for devices that may need to be mapped before
54 * Mach VM is running.
55 */
56 vm_offset_t
57 io_map(phys_addr, size)
58 vm_offset_t phys_addr;
59 vm_size_t size;
60 {
61 vm_offset_t start;
62
63 if (kernel_map == VM_MAP_NULL) {
64 /*
65 * VM is not initialized. Grab memory.
66 */
67 start = virtual_avail;
68 virtual_avail += round_page(size);
69 }
70 else {
71 (void) kmem_alloc_pageable(kernel_map, &start, round_page(size));
72 }
73 (void) pmap_map_bd(start, phys_addr, phys_addr + round_page(size),
74 VM_PROT_READ|VM_PROT_WRITE);
75 return (start);
76 }
Cache object: 477f5880085b84c88febc5e1f182fd29
|