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

Annotation of sys/arch/solbourne/include/kap.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: kap.h,v 1.2 2006/04/15 17:35:48 miod Exp $    */
                      2: /*
                      3:  * Copyright (c) 2005, Miodrag Vallat
                      4:  *
                      5:  * Redistribution and use in source and binary forms, with or without
                      6:  * modification, are permitted provided that the following conditions
                      7:  * are met:
                      8:  * 1. Redistributions of source code must retain the above copyright
                      9:  *    notice, this list of conditions and the following disclaimer.
                     10:  * 2. Redistributions in binary form must reproduce the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer in the
                     12:  *    documentation and/or other materials provided with the distribution.
                     13:  *
                     14:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     15:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
                     16:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
                     17:  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
                     18:  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
                     19:  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
                     20:  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     21:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
                     22:  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
                     23:  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     24:  * POSSIBILITY OF SUCH DAMAGE.
                     25:  */
                     26:
                     27: #ifndef _SOLBOURNE_KAP_H_
                     28: #define _SOLBOURNE_KAP_H_
                     29:
                     30: /*
                     31:  * KAP specific control registers
                     32:  */
                     33:
                     34: #ifdef _KERNEL
                     35:
                     36: /* TLB handling - write only */
                     37: #define        ASI_GTLB_RANDOM         0xc0    /* random TLB drop-in */
                     38: #define        ASI_GTLB_DROPIN         0xc1    /* TLB drop-in */
                     39: #define        ASI_GTLB_INVAL_ENTRY    0xc2    /* invalidate entry */
                     40: #define        ASI_GTLB_INVAL_PID      0xc3    /* invalidate PID */
                     41: #define        ASI_GTLB_INVALIDATE     0xc4    /* invalidate entire TLB */
                     42: #define        ASI_ITLB_DROPIN         0xc8    /* iTLB drop-in */
                     43:
                     44: /* TLB position addressing */
                     45: #define        TLB_SLOT(x)             ((x) << 3)
                     46: #define        TLB_INCR                (1 << 3)
                     47: #define        GTLB_SLOTS              (128 + 8)       /* XXX unsure */
                     48: #define        ITLB_SLOTS              8               /* XXX unsure */
                     49:
                     50: /* data cache handling - read only except ASI_DCACHE_RW */
                     51: #define        ASI_DCACHE_FLUSH        0xd0    /* flush dcache block */
                     52: #define        ASI_DCACHE_LOOKUP       0xd1    /* check for dcache hit */
                     53: #define        ASI_DCACHE_RW           0xd2    /* read/write dcache */
                     54: #define        ASI_DCACHE_INVAL        0xd3    /* invalidate dcache */
                     55:
                     56: /* cache line addressing (for D flushes) */
                     57: #define        DCACHE_LINE(x)          ((x) << 2)
                     58: #define        DCACHE_INCR             (1 << 2)
                     59: #define        DCACHE_LINES            256
                     60:
                     61: /* bus access - read/write */
                     62: #define        ASI_PHYS_IO             0xd4    /* not cached */
                     63: #define        ASI_PHYS_CACHED         0xd5    /* cached */
                     64: #define        ASI_PHYS_NBW            0xd6    /* non byte writeable shared */
                     65: #define        ASI_PHYS_BW             0xd7    /* byte writeable shared */
                     66:
                     67: /* inst cache handling - read only except ASI_ICACHE_RW */
                     68: #define        ASI_ICACHE_LOOKUP       0xd9    /* check for icache hit */
                     69: #define        ASI_ICACHE_RW           0xda    /* read/write icache */
                     70: #define        ASI_ICACHE_INVAL        0xdb    /* invalidate icache */
                     71:
                     72: /* MMU registers */
                     73: #define        ASI_MMCR                0xe0    /* control register, rw */
                     74: #define        ASI_PDBR                0xe1    /* page directory base address, rw */
                     75: #define        ASI_FVAR                0xe2    /* fault va, rw */
                     76: #define        ASI_PDER                0xe3    /* page directory entry pointer, ro */
                     77: #define        ASI_PTOR                0xe4    /* page table offset, ro */
                     78: #define        ASI_FPAR                0xe5    /* fault pa, rw */
                     79: #define        ASI_FPSR                0xe6    /* fault ASI, rw */
                     80: #define        ASI_PIID                0xe7    /* process ID invalidation, rw */
                     81: #define        ASI_PID                 0xe8    /* process ID, rw */
                     82: #define        ASI_BCR                 0xe9    /* bus control, rw */
                     83: #define        ASI_FCR                 0xea    /* fault cause, rw */
                     84: #define        ASI_PTW0                0xeb    /* translation window #0, rw */
                     85: #define        ASI_PTW1                0xec    /* translation window #0, rw */
                     86: #define        ASI_PTW2                0xed    /* translation window #0, rw */
                     87:
                     88: /* Hardware watchdog */
                     89: #define        ASI_WAR0                0xee    /* watchpoint address 0, rw */
                     90: #define        ASI_WAR1                0xef    /* watchpoint address 1, rw */
                     91: #define        ASI_WCR                 0xf0    /* watchpoint control register, rw */
                     92:
                     93: /* MMCR fields */
                     94: #define        MMCR_ENABLE             0x00000001      /* MMU enable */
                     95: #define        MMCR_MATCH_PTW          0x00000002      /* lookup matches PTW */
                     96: #define        MMCR_MATCH_ITLB         0x00000004      /* lookup matches ITLB */
                     97: #define        MMCR_MATCH_GTLB         0x00000008      /* lookup matches GTLB */
                     98: #define        MMCR_ISET0              0x00000080      /* icache set 0 */
                     99: #define        MMCR_ISET1              0x00000100      /* icache set 1 */
                    100: #define        MMCR_ISET2              0x00000200      /* icache set 2 */
                    101: #define        MMCR_DSET0              0x00000400      /* dcache set 0 */
                    102: #define        MMCR_DSET1              0x00000800      /* dcache set 1 */
                    103:
                    104: /* BCR fields */
                    105: #define        BCR_FAULT_SYNDROME      0x000000ff      /* ECC syndrome byte */
                    106: #define        BCR_ECC                 0x00000100      /* ECC enable */
                    107: #define        BCR_FAULT_DISABLE       0x00000200      /* disable ECC faults */
                    108:
                    109: /* FCR fields */
                    110: #define        FCR_PROTMASK            0x0000000f
                    111: #define        FCR_V                   0x00000001      /* page not valid */
                    112: #define        FCR_RO                  0x00000002      /* write access on read only */
                    113: #define        FCR_S                   0x00000004      /* user access on sup. only */
                    114: #define        FCR_EXTERNAL            0x00000100      /* external fault */
                    115: #define        FCR_ECC_SINGLE          0x00000200      /* single bit ECC */
                    116: #define        FCR_ECC_MULTIPLE        0x00000400      /* multiple bit ECC */
                    117:
                    118: #define        FCR_BITS        "\020\01V\02RO\03S\011EXTERNAL\012ECCS\013ECCM"
                    119:
                    120: /* PTW fields */
                    121: #define        PTW_V                   0x00000001      /* valid */
                    122: #define        PTW_RO                  0x00000002      /* read only */
                    123: #define        PTW_RW                  0x00000000
                    124: #define        PTW_S                   0x00000004      /* supervisor only */
                    125: #define        PTW_CACHEABLE           0x00000008
                    126: #define        PTW_BYTE_SHARED         0x00000010
                    127: #define        PTW_SHARED              0x00000018
                    128: #define        PTW_MASK_MASK           0x0000ff00      /* window address mask */
                    129: #define        PTW_MASK_SHIFT          8
                    130: #define        PTW_PA_MASK             0x00ff0000      /* physical window */
                    131: #define        PTW_PA_SHIFT            16
                    132: #define        PTW_VA_MASK             0xff000000      /* virtual window */
                    133: #define        PTW_VA_SHIFT            24
                    134:
                    135: #define        PTW_WINDOW_SIZE         0x01000000
                    136: #define        PTW_WINDOW_MASK         0xff000000
                    137: #define        PTW_WINDOW_SHIFT        24
                    138:
                    139: #define        PTW_TEMPLATE(va,pa,size) \
                    140:        (((va) << PTW_VA_SHIFT) | ((pa) << PTW_PA_SHIFT) | \
                    141:         (((~((size) - 1) >> 24) << PTW_MASK_SHIFT) & PTW_MASK_MASK))
                    142:
                    143: /*
                    144:  * Initial virtual memory settings
                    145:  */
                    146:
                    147: #define        ROM_WINDOW      0x00
                    148: #define        PTW0_BASE       (vaddr_t)(ROM_WINDOW << PTW_WINDOW_SHIFT)
                    149: #define        PHYSMEM_WINDOW  0xf0
                    150: #define        PHYSMEM_BASE    (vaddr_t)(PHYSMEM_WINDOW << PTW_WINDOW_SHIFT)
                    151: #define        PTW1_WINDOW     0xfd
                    152: #define        PTW1_BASE       (vaddr_t)(PTW1_WINDOW << PTW_WINDOW_SHIFT)
                    153: #define        PTW2_WINDOW     0xfe
                    154: #define        PTW2_BASE       (vaddr_t)(PTW2_WINDOW << PTW_WINDOW_SHIFT)
                    155: #define        PTW0_DEFAULT    \
                    156:        PTW_TEMPLATE(ROM_WINDOW, ROM_WINDOW, 0x10000000) | PTW_S | PTW_V
                    157: #define        PTW1_DEFAULT    PTW_CACHEABLE | \
                    158:        PTW_TEMPLATE(PTW1_WINDOW, PHYSMEM_WINDOW, 0x01000000) | PTW_S | PTW_V
                    159: #define        PTW2_DEFAULT    PTW_SHARED | \
                    160:        PTW_TEMPLATE(PTW2_WINDOW, PHYSMEM_WINDOW, 0x01000000) | PTW_S | PTW_V
                    161:
                    162: #define        PTW0_TO_PHYS(va)        (paddr_t)(va)
                    163: #define        PTW1_TO_PHYS(va)        (paddr_t)((va) - PTW1_BASE + PHYSMEM_BASE)
                    164: #define        PTW2_TO_PHYS(va)        (paddr_t)((va) - PTW2_BASE + PHYSMEM_BASE)
                    165:
                    166: #define        PHYS_TO_PTW0(pa)        (vaddr_t)(pa)
                    167: #define        PHYS_TO_PTW1(pa)        (vaddr_t)((pa) - PHYSMEM_BASE + PTW1_BASE)
                    168: #define        PHYS_TO_PTW2(pa)        (vaddr_t)((pa) - PHYSMEM_BASE + PTW2_BASE)
                    169:
                    170: #endif /* _KERNEL */
                    171:
                    172: #endif /* _SOLBOURNE_KAP_H_ */

CVSweb