|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * The contents of this file constitute Original Code as defined in and ! 7: * are subject to the Apple Public Source License Version 1.1 (the ! 8: * "License"). You may not use this file except in compliance with the ! 9: * License. Please obtain a copy of the License at ! 10: * http://www.apple.com/publicsource and read it before using this file. ! 11: * ! 12: * This Original Code and all software distributed under the License are ! 13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 17: * License for the specific language governing rights and limitations ! 18: * under the License. ! 19: * ! 20: * @APPLE_LICENSE_HEADER_END@ ! 21: */ ! 22: /* ! 23: * @OSF_COPYRIGHT@ ! 24: */ ! 25: ! 26: /* Things that don't need to be exported from pmap. Putting ! 27: * them here and not in pmap.h avoids major recompiles when ! 28: * modifying something either here or in proc_reg.h ! 29: */ ! 30: ! 31: #ifndef _PMAP_INTERNALS_H_ ! 32: #define _PMAP_INTERNALS_H_ ! 33: ! 34: /* ! 35: * Definition of the flags in the low 5 bits of the phys_link field of the phys_entry ! 36: */ ! 37: ! 38: #define PHYS_LOCK 0x00000001 ! 39: #define PHYS_FLAGS 0x0000001F ! 40: ! 41: #ifndef ASSEMBLER ! 42: ! 43: #include <cpus.h> ! 44: #include <mach_ldebug.h> ! 45: #include <debug.h> ! 46: ! 47: #include <mach/vm_types.h> ! 48: #include <mach/machine/vm_types.h> ! 49: #include <mach/vm_prot.h> ! 50: #include <mach/vm_statistics.h> ! 51: #include <kern/assert.h> ! 52: #include <kern/cpu_number.h> ! 53: #include <kern/lock.h> ! 54: #include <kern/queue.h> ! 55: #include <ppc/proc_reg.h> ! 56: ! 57: ! 58: /* Page table entries are stored in groups (PTEGS) in a hash table */ ! 59: ! 60: #if __PPC__ ! 61: #if _BIG_ENDIAN == 0 ! 62: error - bitfield structures are not checked for bit ordering in words ! 63: #endif /* _BIG_ENDIAN */ ! 64: #endif /* __PPC__ */ ! 65: ! 66: /* ! 67: * Don't change these structures unless you change the assembly code ! 68: */ ! 69: ! 70: struct phys_entry { ! 71: struct mapping *phys_link; /* MUST BE FIRST - chain of mappings and flags in the low 5 bits, see above */ ! 72: unsigned int pte1; /* referenced/changed/wimg - info update atomically */ ! 73: }; ! 74: ! 75: ! 76: #define PHYS_NULL ((struct phys_entry *)0) ! 77: ! 78: /* Memory may be non-contiguous. This data structure contains info ! 79: * for mapping this non-contiguous space into the contiguous ! 80: * physical->virtual mapping tables. An array of this type is ! 81: * provided to the pmap system at bootstrap by ppc_vm_init. ! 82: * ! 83: * NB : regions must be in order in this structure. ! 84: */ ! 85: ! 86: typedef struct mem_region { ! 87: vm_offset_t start; /* Address of base of region */ ! 88: struct phys_entry *phys_table; /* base of region's table */ ! 89: unsigned int end; /* End address+1 */ ! 90: } mem_region_t; ! 91: ! 92: /* PMAP_MEM_REGION_MAX has a PowerMac dependancy - at least the value of ! 93: * kMaxRAMBanks in ppc/POWERMAC/nkinfo.h ! 94: */ ! 95: #define PMAP_MEM_REGION_MAX 26 ! 96: ! 97: extern mem_region_t pmap_mem_regions[PMAP_MEM_REGION_MAX]; ! 98: extern int pmap_mem_regions_count; ! 99: ! 100: /* keep track of free regions of physical memory so that we can offer ! 101: * them up via pmap_next_page later on ! 102: */ ! 103: ! 104: #define FREE_REGION_MAX 8 ! 105: extern mem_region_t free_regions[FREE_REGION_MAX]; ! 106: extern int free_regions_count; ! 107: ! 108: /* Prototypes */ ! 109: ! 110: struct phys_entry *pmap_find_physentry(vm_offset_t pa); ! 111: ! 112: ! 113: #if DEBUG ! 114: extern int pmdebug; ! 115: #define PDB_LOCK 0x100 ! 116: #define LOCKPRINTF(args) if (pmdebug & PDB_LOCK) printf args; else ! 117: #else /* DEBUG */ ! 118: #define LOCKPRINTF(args) ! 119: #endif /* DEBUG */ ! 120: ! 121: extern vm_offset_t hash_table_base; ! 122: extern unsigned int hash_table_size; ! 123: ! 124: #define TLBSYNC_SYNC() \ ! 125: { \ ! 126: if (PROCESSOR_VERSION != PROCESSOR_VERSION_601) \ ! 127: __asm__ volatile("tlbsync" __CASMNL__ " sync"); \ ! 128: } while (0) ! 129: ! 130: #endif ! 131: #endif /* _PMAP_INTERNALS_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.