The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/osfmk/i386/phys.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
    3  *
    4  * @APPLE_LICENSE_HEADER_START@
    5  * 
    6  * Copyright (c) 1999-2003 Apple Computer, Inc.  All Rights Reserved.
    7  * 
    8  * This file contains Original Code and/or Modifications of Original Code
    9  * as defined in and that are subject to the Apple Public Source License
   10  * Version 2.0 (the 'License'). You may not use this file except in
   11  * compliance with the License. Please obtain a copy of the License at
   12  * http://www.opensource.apple.com/apsl/ and read it before using this
   13  * file.
   14  * 
   15  * The Original Code and all software distributed under the License are
   16  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
   17  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
   18  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
   19  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
   20  * Please see the License for the specific language governing rights and
   21  * limitations under the License.
   22  * 
   23  * @APPLE_LICENSE_HEADER_END@
   24  */
   25 /*
   26  * @OSF_COPYRIGHT@
   27  */
   28 /* 
   29  * Mach Operating System
   30  * Copyright (c) 1991,1990,1989 Carnegie Mellon University
   31  * All Rights Reserved.
   32  * 
   33  * Permission to use, copy, modify and distribute this software and its
   34  * documentation is hereby granted, provided that both the copyright
   35  * notice and this permission notice appear in all copies of the
   36  * software, derivative works or modified versions, and any portions
   37  * thereof, and that both notices appear in supporting documentation.
   38  * 
   39  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
   40  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
   41  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
   42  * 
   43  * Carnegie Mellon requests users of this software to return to
   44  * 
   45  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
   46  *  School of Computer Science
   47  *  Carnegie Mellon University
   48  *  Pittsburgh PA 15213-3890
   49  * 
   50  * any improvements or extensions that they make and grant Carnegie Mellon
   51  * the rights to redistribute these changes.
   52  */
   53 #include <string.h>
   54 
   55 #include <mach/vm_param.h>
   56 #include <mach/boolean.h>
   57 #include <vm/pmap.h>
   58 #include <vm/vm_page.h>
   59 #include <kern/misc_protos.h>
   60 
   61 /*
   62  *      pmap_zero_page zeros the specified (machine independent) page.
   63  */
   64 void
   65 pmap_zero_page(
   66                ppnum_t pn)
   67 {
   68         vm_offset_t p;
   69         assert(pn != vm_page_fictitious_addr);
   70         p = (vm_offset_t)i386_ptob(pn);
   71         bzero((char *)phystokv(p), PAGE_SIZE);
   72 }
   73 
   74 /*
   75  *      pmap_zero_part_page
   76  *      zeros the specified (machine independent) part of a page.
   77  */
   78 void
   79 pmap_zero_part_page(
   80         ppnum_t         pn,
   81         vm_offset_t     offset,
   82         vm_size_t       len)
   83 {
   84         assert(pn != vm_page_fictitious_addr);
   85         assert(offset + len <= PAGE_SIZE);
   86         bzero((char *)phystokv(i386_ptob(pn)) + offset, len);
   87 }
   88 
   89 /*
   90  *      pmap_copy_page copies the specified (machine independent) pages.
   91  */
   92 void
   93 pmap_copy_page(
   94        ppnum_t  psrc,
   95        ppnum_t  pdst)
   96 
   97 {
   98         vm_offset_t src,dst;
   99 
  100         assert(psrc != vm_page_fictitious_addr);
  101         assert(pdst != vm_page_fictitious_addr);
  102         src = (vm_offset_t)i386_ptob(psrc);
  103         dst = (vm_offset_t)i386_ptob(pdst);
  104 
  105         memcpy((void *)phystokv(dst), (void *)phystokv(src), PAGE_SIZE);
  106 }
  107 
  108 /*
  109  *      pmap_copy_page copies the specified (machine independent) pages.
  110  */
  111 void
  112 pmap_copy_part_page(
  113         ppnum_t         psrc,
  114         vm_offset_t     src_offset,
  115         ppnum_t         pdst,
  116         vm_offset_t     dst_offset,
  117         vm_size_t       len)
  118 {
  119         vm_offset_t  src, dst;
  120 
  121         assert(psrc != vm_page_fictitious_addr);
  122         assert(pdst != vm_page_fictitious_addr);
  123         src = (vm_offset_t)i386_ptob(psrc);
  124         dst = (vm_offset_t)i386_ptob(pdst);
  125         assert(((dst & PAGE_MASK) + dst_offset + len) <= PAGE_SIZE);
  126         assert(((src & PAGE_MASK) + src_offset + len) <= PAGE_SIZE);
  127 
  128         memcpy((void *)(phystokv(dst) + dst_offset),
  129                (void *)(phystokv(src) + src_offset), len);
  130 }
  131 
  132 /*
  133  *      pmap_copy_part_lpage copies part of a virtually addressed page 
  134  *      to a physically addressed page.
  135  */
  136 void
  137 pmap_copy_part_lpage(
  138         vm_offset_t     src,
  139         ppnum_t         pdst,
  140         vm_offset_t     dst_offset,
  141         vm_size_t       len)
  142 {
  143         vm_offset_t dst;
  144 
  145         assert(src != vm_page_fictitious_addr);
  146         assert(pdst != vm_page_fictitious_addr);
  147         dst = (vm_offset_t)i386_ptob(pdst);
  148         assert(((dst & PAGE_MASK) + dst_offset + len) <= PAGE_SIZE);
  149 
  150         memcpy((void *)(phystokv(dst) + dst_offset), (void *)src, len);
  151 }
  152 
  153 /*
  154  *      pmap_copy_part_rpage copies part of a physically addressed page 
  155  *      to a virtually addressed page.
  156  */
  157 void
  158 pmap_copy_part_rpage(
  159         ppnum_t         psrc,
  160         vm_offset_t     src_offset,
  161         vm_offset_t     dst,
  162         vm_size_t       len)
  163 {
  164         vm_offset_t src;
  165 
  166         assert(psrc != vm_page_fictitious_addr);
  167         assert(dst != vm_page_fictitious_addr);
  168         src = (vm_offset_t)i386_ptob(psrc);
  169         assert(((src & PAGE_MASK) + src_offset + len) <= PAGE_SIZE);
  170 
  171         memcpy((void *)dst, (void *)(phystokv(src) + src_offset), len);
  172 }
  173 
  174 /*
  175  *      kvtophys(addr)
  176  *
  177  *      Convert a kernel virtual address to a physical address
  178  */
  179 vm_offset_t
  180 kvtophys(
  181         vm_offset_t addr)
  182 {
  183         pt_entry_t *pte;
  184 
  185         if ((pte = pmap_pte(kernel_pmap, addr)) == PT_ENTRY_NULL)
  186                 return 0;
  187         return i386_trunc_page(*pte) | (addr & INTEL_OFFMASK);
  188 }

Cache object: b650369a3f73567d1f2f1da75170eea3


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.