Annotation of XNU/osfmk/i386/phys.c, revision 1.1.1.1

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:  * Mach Operating System
                     27:  * Copyright (c) 1991,1990,1989 Carnegie Mellon University
                     28:  * All Rights Reserved.
                     29:  * 
                     30:  * Permission to use, copy, modify and distribute this software and its
                     31:  * documentation is hereby granted, provided that both the copyright
                     32:  * notice and this permission notice appear in all copies of the
                     33:  * software, derivative works or modified versions, and any portions
                     34:  * thereof, and that both notices appear in supporting documentation.
                     35:  * 
                     36:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
                     37:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
                     38:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                     39:  * 
                     40:  * Carnegie Mellon requests users of this software to return to
                     41:  * 
                     42:  *  Software Distribution Coordinator  or  [email protected]
                     43:  *  School of Computer Science
                     44:  *  Carnegie Mellon University
                     45:  *  Pittsburgh PA 15213-3890
                     46:  * 
                     47:  * any improvements or extensions that they make and grant Carnegie Mellon
                     48:  * the rights to redistribute these changes.
                     49:  */
                     50: #include <string.h>
                     51: 
                     52: #include <mach/vm_param.h>
                     53: #include <mach/boolean.h>
                     54: #include <vm/pmap.h>
                     55: #include <vm/vm_page.h>
                     56: #include <kern/misc_protos.h>
                     57: 
                     58: /*
                     59:  *     pmap_zero_page zeros the specified (machine independent) page.
                     60:  */
                     61: void
                     62: pmap_zero_page(
                     63:        vm_offset_t p)
                     64: {
                     65:        assert(p != vm_page_fictitious_addr);
                     66:        bzero((char *)phystokv(p), PAGE_SIZE);
                     67: }
                     68: 
                     69: /*
                     70:  *     pmap_zero_part_page
                     71:  *     zeros the specified (machine independent) part of a page.
                     72:  */
                     73: void
                     74: pmap_zero_part_page(
                     75:        vm_offset_t     p,
                     76:        vm_offset_t     offset,
                     77:        vm_size_t       len)
                     78: {
                     79:        assert(p != vm_page_fictitious_addr);
                     80:        assert(offset + len <= PAGE_SIZE);
                     81: 
                     82:        bzero((char *)phystokv(p) + offset, len);
                     83: }
                     84: 
                     85: /*
                     86:  *     pmap_copy_page copies the specified (machine independent) pages.
                     87:  */
                     88: void
                     89: pmap_copy_page(
                     90:        vm_offset_t src,
                     91:        vm_offset_t dst)
                     92: {
                     93:        assert(src != vm_page_fictitious_addr);
                     94:        assert(dst != vm_page_fictitious_addr);
                     95: 
                     96:        memcpy((void *)phystokv(dst), (void *)phystokv(src), PAGE_SIZE);
                     97: }
                     98: 
                     99: /*
                    100:  *     pmap_copy_page copies the specified (machine independent) pages.
                    101:  */
                    102: void
                    103: pmap_copy_part_page(
                    104:        vm_offset_t     src,
                    105:        vm_offset_t     src_offset,
                    106:        vm_offset_t     dst,
                    107:        vm_offset_t     dst_offset,
                    108:        vm_size_t       len)
                    109: {
                    110:        assert(src != vm_page_fictitious_addr);
                    111:        assert(dst != vm_page_fictitious_addr);
                    112:        assert(((dst & PAGE_MASK) + dst_offset + len) <= PAGE_SIZE);
                    113:        assert(((src & PAGE_MASK) + src_offset + len) <= PAGE_SIZE);
                    114: 
                    115:         memcpy((void *)(phystokv(dst) + dst_offset),
                    116:               (void *)(phystokv(src) + src_offset), len);
                    117: }
                    118: 
                    119: /*
                    120:  *      pmap_copy_part_lpage copies part of a virtually addressed page 
                    121:  *      to a physically addressed page.
                    122:  */
                    123: void
                    124: pmap_copy_part_lpage(
                    125:        vm_offset_t     src,
                    126:        vm_offset_t     dst,
                    127:        vm_offset_t     dst_offset,
                    128:        vm_size_t       len)
                    129: {
                    130:        assert(src != vm_page_fictitious_addr);
                    131:        assert(dst != vm_page_fictitious_addr);
                    132:        assert(((dst & PAGE_MASK) + dst_offset + len) <= PAGE_SIZE);
                    133: 
                    134:         memcpy((void *)(phystokv(dst) + dst_offset), (void *)src, len);
                    135: }
                    136: 
                    137: /*
                    138:  *      pmap_copy_part_rpage copies part of a physically addressed page 
                    139:  *      to a virtually addressed page.
                    140:  */
                    141: void
                    142: pmap_copy_part_rpage(
                    143:        vm_offset_t     src,
                    144:        vm_offset_t     src_offset,
                    145:        vm_offset_t     dst,
                    146:        vm_size_t       len)
                    147: {
                    148:        assert(src != vm_page_fictitious_addr);
                    149:        assert(dst != vm_page_fictitious_addr);
                    150:        assert(((src & PAGE_MASK) + src_offset + len) <= PAGE_SIZE);
                    151: 
                    152:         memcpy((void *)dst, (void *)(phystokv(src) + src_offset), len);
                    153: }
                    154: 
                    155: /*
                    156:  *     kvtophys(addr)
                    157:  *
                    158:  *     Convert a kernel virtual address to a physical address
                    159:  */
                    160: vm_offset_t
                    161: kvtophys(
                    162:        vm_offset_t addr)
                    163: {
                    164:        pt_entry_t *pte;
                    165: 
                    166:        if ((pte = pmap_pte(kernel_pmap, addr)) == PT_ENTRY_NULL)
                    167:                return 0;
                    168:        return i386_trunc_page(*pte) | (addr & INTEL_OFFMASK);
                    169: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.