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

Annotation of sys/arch/sparc64/include/param.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: param.h,v 1.27 2007/07/24 15:45:10 kettenis Exp $     */
        !             2: /*     $NetBSD: param.h,v 1.25 2001/05/30 12:28:51 mrg Exp $ */
        !             3:
        !             4: /*
        !             5:  * Copyright (c) 1992, 1993
        !             6:  *     The Regents of the University of California.  All rights reserved.
        !             7:  *
        !             8:  * This software was developed by the Computer Systems Engineering group
        !             9:  * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
        !            10:  * contributed to Berkeley.
        !            11:  *
        !            12:  * All advertising materials mentioning features or use of this software
        !            13:  * must display the following acknowledgement:
        !            14:  *     This product includes software developed by the University of
        !            15:  *     California, Lawrence Berkeley Laboratory.
        !            16:  *
        !            17:  * Redistribution and use in source and binary forms, with or without
        !            18:  * modification, are permitted provided that the following conditions
        !            19:  * are met:
        !            20:  * 1. Redistributions of source code must retain the above copyright
        !            21:  *    notice, this list of conditions and the following disclaimer.
        !            22:  * 2. Redistributions in binary form must reproduce the above copyright
        !            23:  *    notice, this list of conditions and the following disclaimer in the
        !            24:  *    documentation and/or other materials provided with the distribution.
        !            25:  * 3. Neither the name of the University nor the names of its contributors
        !            26:  *    may be used to endorse or promote products derived from this software
        !            27:  *    without specific prior written permission.
        !            28:  *
        !            29:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
        !            30:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            31:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            32:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
        !            33:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            34:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            35:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            36:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            37:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            38:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            39:  * SUCH DAMAGE.
        !            40:  *
        !            41:  *     @(#)param.h     8.1 (Berkeley) 6/11/93
        !            42:  */
        !            43:
        !            44: /*
        !            45:  * Copyright (c) 1996-1999 Eduardo Horvath
        !            46:  *
        !            47:  * Redistribution and use in source and binary forms, with or without
        !            48:  * modification, are permitted provided that the following conditions
        !            49:  * are met:
        !            50:  * 1. Redistributions of source code must retain the above copyright
        !            51:  *    notice, this list of conditions and the following disclaimer.
        !            52:  *
        !            53:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR  ``AS IS'' AND
        !            54:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            55:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            56:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR  BE LIABLE
        !            57:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            58:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            59:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            60:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            61:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            62:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            63:  * SUCH DAMAGE.
        !            64:  *
        !            65:  */
        !            66:
        !            67: #ifndef _SPARC64_PARAM_H_
        !            68: #define _SPARC64_PARAM_H_
        !            69:
        !            70: #define        _MACHINE        sparc64
        !            71: #define        MACHINE         "sparc64"
        !            72: #define        _MACHINE_ARCH   sparc64
        !            73: #define        MACHINE_ARCH    "sparc64"
        !            74: #define        MID_MACHINE     MID_SPARC64
        !            75:
        !            76: #ifdef _KERNEL                         /* XXX */
        !            77: #ifndef _LOCORE                                /* XXX */
        !            78: #include <machine/cpu.h>               /* XXX */
        !            79: #endif                                 /* XXX */
        !            80: #endif                                 /* XXX */
        !            81:
        !            82: /*
        !            83:  * Round p (pointer or byte index) up to a correctly-aligned value for
        !            84:  * the machine's strictest data type.  The result is u_int and must be
        !            85:  * cast to any desired pointer type.
        !            86:  *
        !            87:  * ALIGNED_POINTER is a boolean macro that checks whether an address
        !            88:  * is valid to fetch data elements of type t from on this architecture.
        !            89:  * This does not reflect the optimal alignment, just the possibility
        !            90:  * (within reasonable limits).
        !            91:  *
        !            92:  */
        !            93: #define        ALIGNBYTES              0xf
        !            94: #define        ALIGN(p)                (((u_long)(p) + ALIGNBYTES) & ~ALIGNBYTES)
        !            95: #define ALIGNED_POINTER(p,t)   ((((u_long)(p)) & (sizeof(t)-1)) == 0)
        !            96:
        !            97: #define        DEV_BSHIFT      9               /* log2(DEV_BSIZE) */
        !            98: #define        DEV_BSIZE       (1 << DEV_BSHIFT)
        !            99: #define        BLKDEV_IOSIZE   2048
        !           100: #define        MAXPHYS         (64 * 1024)
        !           101:
        !           102: /* We get stack overflows w/8K stacks in 64-bit mode */
        !           103: #define        UPAGES          2               /* initial stack size in pages */
        !           104: #define        USPACE          (UPAGES*8192)
        !           105: #define        USPACE_ALIGN    (0)             /* u-area alignment 0-none */
        !           106:
        !           107:
        !           108: /*
        !           109:  * Here are all the magic kernel virtual addresses and how they're allocated.
        !           110:  *
        !           111:  * First, the PROM is usually a fixed-sized block from 0x00000000f0000000 to
        !           112:  * 0x00000000f0100000.  It also uses some space around 0x00000000fff00000 to
        !           113:  * map in device registers.  The rest is pretty much ours to play with.
        !           114:  *
        !           115:  * The kernel starts at KERNBASE.  Here's the layout.  We use macros to set
        !           116:  * the addresses so we can relocate everything easily.  We use 4MB locked TTEs
        !           117:  * to map in the kernel text and data segments.  Any extra pages are recycled,
        !           118:  * so they can potentially be double-mapped.  This shouldn't really be a
        !           119:  * problem since they're unused, but wild pointers can cause silent data
        !           120:  * corruption if they are in those segments.
        !           121:  *
        !           122:  * 0x0000000000000000: 64K NFO page zero
        !           123:  * 0x0000000000010000: Userland or PROM
        !           124:  * KERNBASE:           4MB kernel text and read only data
        !           125:  *                             This is mapped in the ITLB and
        !           126:  *                             Read-Only in the DTLB
        !           127:  * KERNBASE+0x400000:  4MB kernel data and BSS -- not in ITLB
        !           128:  *                             Contains context table, kernel pmap,
        !           129:  *                             and other important structures.
        !           130:  * KERNBASE+0x800000:  Unmapped page -- redzone
        !           131:  * KERNBASE+0x802000:  Process 0 stack and u-area
        !           132:  * KERNBASE+0x806000:  2 pages for pmap_copy_page and /dev/mem
        !           133:  * KERNBASE+0x80a000:  Start of kernel VA segment
        !           134:  * KERNEND:            End of kernel VA segment
        !           135:  * KERNEND+0x02000:    Auxreg_va (unused?)
        !           136:  * KERNEND+0x04000:    TMPMAP_VA (unused?)
        !           137:  * KERNEND+0x06000:    message buffer.
        !           138:  * KERNEND+0x010000:   64K locked TTE -- different for each CPU
        !           139:  *                     Contains interrupt stack, cpu_info structure,
        !           140:  *                     and 32KB kernel TSB.
        !           141:  *
        !           142:  */
        !           143: #define        KERNBASE        0x001000000     /* start of kernel virtual space */
        !           144: #define        KERNEND         0x0e0000000     /* end of kernel virtual space */
        !           145: #define        VM_MAX_KERNEL_BUF       ((KERNEND-KERNBASE)/4)
        !           146:
        !           147: #define _MAXNBPG       8192    /* fixed VAs, independent of actual NBPG */
        !           148:
        !           149: #define        AUXREG_VA       (      KERNEND + _MAXNBPG) /* 1 page REDZONE */
        !           150: #define        TMPMAP_VA       (    AUXREG_VA + _MAXNBPG)
        !           151: #define        MSGBUF_VA       (    TMPMAP_VA + _MAXNBPG)
        !           152: /*
        !           153:  * Here's the location of the interrupt stack and CPU structure.
        !           154:  */
        !           155: #define INTSTACK       (      KERNEND + 8*_MAXNBPG)/* 64K after kernel end */
        !           156: #define        EINTSTACK       (     INTSTACK + 2*USPACE)      /* 32KB */
        !           157: #define        CPUINFO_VA      (    EINTSTACK)
        !           158:
        !           159: /*
        !           160:  * Constants related to network buffer management.
        !           161:  */
        !           162: #define        NMBCLUSTERS     4096            /* map size, max cluster allocation */
        !           163:
        !           164: #define MSGBUFSIZE     NBPG
        !           165:
        !           166: /*
        !           167:  * Minimum and maximum sizes of the kernel malloc arena in PAGE_SIZE-sized
        !           168:  * logical pages.
        !           169:  */
        !           170: #define        NKMEMPAGES_MIN_DEFAULT  ((8 * 1024 * 1024) >> PAGE_SHIFT)
        !           171: #define        NKMEMPAGES_MAX_DEFAULT  ((128 * 1024 * 1024) >> PAGE_SHIFT)
        !           172:
        !           173: /* pages ("clicks") to disk blocks */
        !           174: #define        ctod(x)         ((x) << (PGSHIFT - DEV_BSHIFT))
        !           175: #define        dtoc(x)         ((x) >> (PGSHIFT - DEV_BSHIFT))
        !           176:
        !           177: /* pages to bytes */
        !           178: #define        ctob(x)         ((x) << PGSHIFT)
        !           179: #define        btoc(x)         (((vsize_t)(x) + PGOFSET) >> PGSHIFT)
        !           180:
        !           181: /* bytes to disk blocks */
        !           182: #define        btodb(x)        ((x) >> DEV_BSHIFT)
        !           183: #define        dbtob(x)        ((x) << DEV_BSHIFT)
        !           184:
        !           185: /*
        !           186:  * dvmamap manages a range of DVMA addresses intended to create double
        !           187:  * mappings of physical memory. In a way, `dvmamap' is a submap of the
        !           188:  * VM map `phys_map'. The difference is the use of the `resource map'
        !           189:  * routines to manage page allocation, allowing DVMA addresses to be
        !           190:  * allocated and freed from within interrupt routines.
        !           191:  *
        !           192:  * Note that `phys_map' can still be used to allocate memory-backed pages
        !           193:  * in DVMA space.
        !           194:  */
        !           195: #ifdef _KERNEL
        !           196: #ifndef _LOCORE
        !           197:
        !           198: extern void    delay(unsigned int);
        !           199: #define        DELAY(n)        delay(n)
        !           200:
        !           201: #endif /* _LOCORE */
        !           202: #endif /* _KERNEL */
        !           203:
        !           204: /*
        !           205:  * Values for the cputyp variable.
        !           206:  */
        !           207: #define CPU_SUN4       0
        !           208: #define CPU_SUN4C      1
        !           209: #define CPU_SUN4M      2
        !           210: #define CPU_SUN4U      3
        !           211:
        !           212: /*
        !           213:  * On a sun4u machine, the page size is 8192.
        !           214:  */
        !           215:
        !           216: #define        NBPG            8192            /* bytes/page */
        !           217: #define        PGOFSET         (NBPG-1)        /* byte offset into page */
        !           218: #define        PGSHIFT         13              /* log2(NBPG) */
        !           219:
        !           220: #define PAGE_SHIFT     13
        !           221: #define PAGE_SIZE      (1 << PAGE_SHIFT)
        !           222: #define PAGE_MASK      (PAGE_SIZE - 1)
        !           223:
        !           224: #endif /* _SPARC64_PARAM_H_ */

CVSweb