home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
NeXTSTEP 3.0
/
NeXTSTEP3.0.iso
/
NextDeveloper
/
Headers
/
mach
/
vm_param.h
< prev
next >
Wrap
Text File
|
1992-07-29
|
3KB
|
99 lines
/*
* Mach Operating System
* Copyright (c) 1987 Carnegie-Mellon University
* All rights reserved. The CMU software License Agreement specifies
* the terms and conditions for use and redistribution.
*/
/*
* File: mach/vm_param.h
* Author: Avadi!29vanian, Jr., Michael Wayne Young
*
* Copyright (C) 1985, Avadis Tevanian, Jr., Michael Wayne Young
*
* Machine independent virtual memory parameters.
*
* HISTORY
* 15-May-87 Avadis Tevanian (avie) at Carnegie-Mellon University
* Coalesced includes, documented use of PAGE_SIZE and PAGE_SHIFT.
*
* 15-Nov-86 Avadis Tevanian (avie) at Carnegie-Mellon University
* Removed include of <mach_init.h> before non-kernel definitions
* of trunc/round page macros. When this is included, it makes it
* impossible for user programs to include system header files to
* retrieve kernel data structures. (For example, the user level
* mach_init will cause a task to be a port, making it impossible
* to get the real kernel definition of a task).
*
* 7-Nov-86 Michael Young (mwyoung) at Carnegie-Mellon University
* Added non-KERNEL definitions of round_page, trunc_page.
*
* 21-May-86 David Golub (dbg) at Carnegie-Mellon University
* Added page_mask. Changed types of page_size and page_mask
* to vm_size_t.
*
* 9-Jun-85 Avadis Tevanian (avie) at Carnegie-Mellon University
* Created.
*
*/
#ifndef _MACH_VM_PARAM_H_
#define _MACH_VM_PARAM_H_
#import <mach/machine/vm_param.h>
#import <mach/machine/vm_types.h>
/*
* The machine independent pages are refered to as PAGES. A page
* is some number of hardware pages, depending on the target machine.
*/
/*
* All references to the size of a page should be done with PAGE_SIZE
* or PAGE_SHIFT. The fact they are variables is hidden here so that
* we can easily make them constant if we so desire.
*/
#define PAGE_SIZE page_size /* size of page in addressible units */
#define PAGE_SHIFT page_shift /* number of bits to shift for pages */
#ifdef ASSEMBLER
#else ASSEMBLER
/*
* Convert addresses to pages and vice versa.
* No rounding is used.
*/
#ifdef KERNEL
#define atop(x) (((unsigned)(x)) >> page_shift)
#define ptoa(x) ((vm_offset_t)((x) << page_shift))
#endif KERNEL
/*
* Round off or truncate to the nearest page. These will work
* for either addresses or counts. (i.e. 1 byte rounds to 1 page
* bytes.
*/
#ifdef KERNEL
#define round_page(x) ((vm_offset_t)((((vm_offset_t)(x)) + page_mask) & ~page_mask))
#define trunc_page(x) ((vm_offset_t)(((vm_offset_t)(x)) & ~page_mask))
#else KERNEL
#define round_page(x) ((((vm_offset_t)(x) + (vm_page_si!2@ 1)) / vm_page_size) * vm_page_size)
#define trunc_page(x) ((((vm_offset_t)(x)) / vm_page_size) * vm_page_size)
#endif KERNEL
#ifdef KERNEL
extern vm_size_t page_size; /* machine independent page size */
extern vm_size_t page_mask; /* page_size - 1; mask for
offset within page */
extern int page_shift; /* shift to use for page size */
extern vm_size_t mem_size; /* size of physical memory (bytes) */
extern vm_offset_t first_addr; /* first physical page */
extern vm_offset_t last_addr; /* last physical page */
#endif KERNEL
#endif ASSEMBLER
#endif _MACH_VM_PARAM_H_