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/sparc64/include/pmap.h

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) 1991 Regents of the University of California.
    3  * All rights reserved.
    4  *
    5  * This code is derived from software contributed to Berkeley by
    6  * the Systems Programming Group of the University of Utah Computer
    7  * Science Department and William Jolitz of UUNET Technologies Inc.
    8  *
    9  * Redistribution and use in source and binary forms, with or without
   10  * modification, are permitted provided that the following conditions
   11  * are met:
   12  * 1. Redistributions of source code must retain the above copyright
   13  *    notice, this list of conditions and the following disclaimer.
   14  * 2. Redistributions in binary form must reproduce the above copyright
   15  *    notice, this list of conditions and the following disclaimer in the
   16  *    documentation and/or other materials provided with the distribution.
   17  * 4. Neither the name of the University nor the names of its contributors
   18  *    may be used to endorse or promote products derived from this software
   19  *    without specific prior written permission.
   20  *
   21  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   31  * SUCH DAMAGE.
   32  *
   33  *      from: hp300: @(#)pmap.h 7.2 (Berkeley) 12/16/90
   34  *      from: @(#)pmap.h        7.4 (Berkeley) 5/12/91
   35  *      from: FreeBSD: src/sys/i386/include/pmap.h,v 1.70 2000/11/30
   36  * $FreeBSD: releng/10.1/sys/sparc64/include/pmap.h 253940 2013-08-04 21:17:05Z attilio $
   37  */
   38 
   39 #ifndef _MACHINE_PMAP_H_
   40 #define _MACHINE_PMAP_H_
   41 
   42 #include <sys/queue.h>
   43 #include <sys/_cpuset.h>
   44 #include <sys/_lock.h>
   45 #include <sys/_mutex.h>
   46 #include <sys/_rwlock.h>
   47 #include <machine/cache.h>
   48 #include <machine/tte.h>
   49 
   50 #define PMAP_CONTEXT_MAX        8192
   51 
   52 typedef struct pmap *pmap_t;
   53 
   54 struct md_page {
   55         TAILQ_HEAD(, tte) tte_list;
   56         struct  pmap *pmap;
   57         uint32_t colors[DCACHE_COLORS];
   58         int32_t color;
   59 };
   60 
   61 struct pmap {
   62         struct  mtx pm_mtx;
   63         struct  tte *pm_tsb;
   64         vm_object_t pm_tsb_obj;
   65         cpuset_t pm_active;
   66         u_int   pm_context[MAXCPU];
   67         struct  pmap_statistics pm_stats;
   68 };
   69 
   70 #define PMAP_LOCK(pmap)         mtx_lock(&(pmap)->pm_mtx)
   71 #define PMAP_LOCK_ASSERT(pmap, type)                                    \
   72                                 mtx_assert(&(pmap)->pm_mtx, (type))
   73 #define PMAP_LOCK_DESTROY(pmap) mtx_destroy(&(pmap)->pm_mtx)
   74 #define PMAP_LOCK_INIT(pmap)    mtx_init(&(pmap)->pm_mtx, "pmap",       \
   75                                     NULL, MTX_DEF | MTX_DUPOK)
   76 #define PMAP_LOCKED(pmap)       mtx_owned(&(pmap)->pm_mtx)
   77 #define PMAP_MTX(pmap)          (&(pmap)->pm_mtx)
   78 #define PMAP_TRYLOCK(pmap)      mtx_trylock(&(pmap)->pm_mtx)
   79 #define PMAP_UNLOCK(pmap)       mtx_unlock(&(pmap)->pm_mtx)
   80 
   81 #define pmap_page_get_memattr(m)        VM_MEMATTR_DEFAULT
   82 #define pmap_page_is_write_mapped(m)    (((m)->aflags & PGA_WRITEABLE) != 0)
   83 #define pmap_page_set_memattr(m, ma)    (void)0
   84 
   85 void    pmap_bootstrap(u_int cpu_impl);
   86 vm_paddr_t pmap_kextract(vm_offset_t va);
   87 void    pmap_kenter(vm_offset_t va, vm_page_t m);
   88 void    pmap_kremove(vm_offset_t);
   89 void    pmap_kenter_flags(vm_offset_t va, vm_paddr_t pa, u_long flags);
   90 void    pmap_kremove_flags(vm_offset_t va);
   91 boolean_t pmap_page_is_mapped(vm_page_t m);
   92 
   93 int     pmap_cache_enter(vm_page_t m, vm_offset_t va);
   94 
   95 int     pmap_remove_tte(struct pmap *pm1, struct pmap *pm2, struct tte *tp,
   96                         vm_offset_t va);
   97 
   98 void    pmap_map_tsb(void);
   99 void    pmap_set_kctx(void);
  100 
  101 #define vtophys(va)     pmap_kextract((vm_offset_t)(va))
  102 
  103 extern  struct pmap kernel_pmap_store;
  104 #define kernel_pmap     (&kernel_pmap_store)
  105 extern  struct rwlock_padalign tte_list_global_lock;
  106 extern  vm_paddr_t phys_avail[];
  107 extern  vm_offset_t virtual_avail;
  108 extern  vm_offset_t virtual_end;
  109 
  110 #ifdef PMAP_STATS
  111 
  112 SYSCTL_DECL(_debug_pmap_stats);
  113 
  114 #define PMAP_STATS_VAR(name) \
  115         static long name; \
  116         SYSCTL_LONG(_debug_pmap_stats, OID_AUTO, name, CTLFLAG_RW,      \
  117             &name, 0, "")
  118 
  119 #define PMAP_STATS_INC(var) \
  120         atomic_add_long(&var, 1)
  121 
  122 #else
  123 
  124 #define PMAP_STATS_VAR(name)
  125 #define PMAP_STATS_INC(var)
  126 
  127 #endif
  128 
  129 #endif /* !_MACHINE_PMAP_H_ */

Cache object: bf4aa278afc0c1548d812d0e190f1e86


[ 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.