[BACK]Return to pmap.h CVS log [TXT][DIR] Up to [local] / sys / arch / powerpc / include

Annotation of sys/arch/powerpc/include/pmap.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: pmap.h,v 1.44 2007/05/27 15:46:02 drahn Exp $ */
                      2: /*     $NetBSD: pmap.h,v 1.1 1996/09/30 16:34:29 ws Exp $      */
                      3:
                      4: /*-
                      5:  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
                      6:  * Copyright (C) 1995, 1996 TooLs GmbH.
                      7:  * All rights reserved.
                      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:  * 3. All advertising materials mentioning features or use of this software
                     18:  *    must display the following acknowledgement:
                     19:  *     This product includes software developed by TooLs GmbH.
                     20:  * 4. The name of TooLs GmbH may not be used to endorse or promote products
                     21:  *    derived from this software without specific prior written permission.
                     22:  *
                     23:  * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
                     24:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     25:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     26:  * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
                     27:  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
                     28:  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
                     29:  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
                     30:  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
                     31:  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
                     32:  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     33:  */
                     34:
                     35: #ifndef        _POWERPC_PMAP_H_
                     36: #define        _POWERPC_PMAP_H_
                     37:
                     38: #include <machine/pte.h>
                     39:
                     40: /*
                     41:  * Segment registers
                     42:  */
                     43: #ifndef        _LOCORE
                     44: typedef u_int sr_t;
                     45: #endif /* _LOCORE */
                     46: #define        SR_TYPE         0x80000000
                     47: #define        SR_SUKEY        0x40000000
                     48: #define        SR_PRKEY        0x20000000
                     49: #define SR_NOEXEC      0x10000000
                     50: #define        SR_VSID         0x00ffffff
                     51: /*
                     52:  * bit
                     53:  *   3  2 2  2    2 1  1 1  1 1            0
                     54:  *   1  8 7  4    0 9  6 5  2 1            0
                     55:  *  |XXXX|XXXX XXXX|XXXX XXXX|XXXX XXXX XXXX
                     56:  *
                     57:  *  bits 28 - 31 contain SR
                     58:  *  bits 20 - 27 contain L1 for VtoP translation
                     59:  *  bits 12 - 19 contain L2 for VtoP translation
                     60:  *  bits  0 - 11 contain page offset
                     61:  */
                     62: #ifndef _LOCORE
                     63: /* V->P mapping data */
                     64: #define VP_SR_SIZE     16
                     65: #define VP_SR_MASK     (VP_SR_SIZE-1)
                     66: #define VP_SR_POS      28
                     67: #define VP_IDX1_SIZE   256
                     68: #define VP_IDX1_MASK   (VP_IDX1_SIZE-1)
                     69: #define VP_IDX1_POS    20
                     70: #define VP_IDX2_SIZE   256
                     71: #define VP_IDX2_MASK   (VP_IDX2_SIZE-1)
                     72: #define VP_IDX2_POS    12
                     73:
                     74: /* functions used by the bus layer for device accesses */
                     75: void pmap_kenter_cache(vaddr_t va, paddr_t pa, vm_prot_t prot, int cacheable);
                     76: void pmap_kremove_pg(vaddr_t va);
                     77:
                     78: /* cache flags */
                     79: #define PMAP_CACHE_DEFAULT     0       /* WB cache managed mem, devices not */
                     80: #define PMAP_CACHE_CI          1       /* cache inhibit */
                     81: #define PMAP_CACHE_WT          2       /* writethru */
                     82: #define PMAP_CACHE_WB          3       /* writeback */
                     83:
                     84: #ifdef _KERNEL
                     85:
                     86: /*
                     87:  * Pmap stuff
                     88:  */
                     89: struct pmap {
                     90:        sr_t pm_sr[16];         /* segments used in this pmap */
                     91:        struct pmapvp *pm_vp[VP_SR_SIZE];       /* virtual to physical table */
                     92:        u_int32_t pm_exec[16];  /* segments used in this pmap */
                     93:        int pm_refs;            /* ref count */
                     94:        struct pmap_statistics  pm_stats;       /* pmap statistics */
                     95: };
                     96:
                     97: typedef        struct pmap *pmap_t;
                     98:
                     99: extern struct pmap kernel_pmap_;
                    100: #define        pmap_kernel()   (&kernel_pmap_)
                    101: boolean_t pteclrbits(struct vm_page *pg, u_int mask, u_int clear);
                    102:
                    103:
                    104: #define pmap_clear_modify(page) \
                    105:        (pteclrbits((page), PG_PMAP_MOD, TRUE))
                    106: #define        pmap_clear_reference(page) \
                    107:        (pteclrbits((page), PG_PMAP_REF, TRUE))
                    108: #define        pmap_is_modified(page) \
                    109:        (pteclrbits((page), PG_PMAP_MOD, FALSE))
                    110: #define        pmap_is_referenced(page) \
                    111:        (pteclrbits((page), PG_PMAP_REF, FALSE))
                    112:
                    113: #define        pmap_unwire(pm, va)
                    114: #define        pmap_phys_address(x)            (x)
                    115: #define pmap_update(pmap)      /* nothing (yet) */
                    116:
                    117: #define pmap_resident_count(pmap)       ((pmap)->pm_stats.resident_count)
                    118:
                    119: /*
                    120:  * Alternate mapping methods for pool.
                    121:  * Really simple. 0x0->0x80000000 contain 1->1 mappings of the physical
                    122:  * memory. - XXX
                    123:  */
                    124: #define pmap_map_direct(pg)            ((vaddr_t)VM_PAGE_TO_PHYS(pg))
                    125: #define pmap_unmap_direct(va)          PHYS_TO_VM_PAGE((paddr_t)va)
                    126: #define        __HAVE_PMAP_DIRECT
                    127:
                    128: void pmap_bootstrap(u_int kernelstart, u_int kernelend);
                    129:
                    130: void pmap_pinit(struct pmap *);
                    131: void pmap_release(struct pmap *);
                    132:
                    133: void pmap_real_memory(vaddr_t *start, vsize_t *size);
                    134: void switchexit(struct proc *);
                    135:
                    136: int pte_spill_v(struct pmap *pm, u_int32_t va, u_int32_t dsisr, int exec_fault);
                    137: #define pmap_copy(dst_pmap, src_pmap, dst_addr, len, src_addr) ;
                    138: int reserve_dumppages(caddr_t p);
                    139:
                    140: void pmap_proc_iflush(struct proc *proc, vaddr_t va, vsize_t len);
                    141: #define pmap_unuse_final(p)            /* nothing */
                    142:
                    143: #define        PMAP_STEAL_MEMORY
                    144:
                    145: #define PG_PMAP_MOD     PG_PMAP0
                    146: #define PG_PMAP_REF     PG_PMAP1
                    147: #define PG_PMAP_EXE     PG_PMAP2
                    148:
                    149: #endif /* _KERNEL */
                    150: #endif /* _LOCORE */
                    151: #endif /* _POWERPC_PMAP_H_ */

CVSweb