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

Annotation of sys/arch/mvme88k/include/m88110.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: m88110.h,v 1.17 2004/06/22 04:55:35 miod Exp $ */
        !             2:
        !             3: #ifndef        __MACHINE_M88110_H__
        !             4: #define        __MACHINE_M88110_H__
        !             5:
        !             6: /*
        !             7:  *     88110 CMMU definitions
        !             8:  */
        !             9: #define CMMU_ICMD 0
        !            10: #define CMMU_ICTL 1
        !            11: #define CMMU_ISAR 2
        !            12: #define CMMU_ISAP 3
        !            13: #define CMMU_IUAP 4
        !            14: #define CMMU_IIR  5
        !            15: #define CMMU_IBP  6
        !            16: #define CMMU_IPPU 7
        !            17: #define CMMU_IPPL 8
        !            18: #define CMMU_ISR  9
        !            19: #define CMMU_ILAR 10
        !            20: #define CMMU_IPAR 11
        !            21:
        !            22: #define CMMU_DCMD 12
        !            23: #define CMMU_DCTL 13
        !            24: #define CMMU_DSAR 14
        !            25: #define CMMU_DSAP 15
        !            26: #define CMMU_DUAP 16
        !            27: #define CMMU_DIR  17
        !            28: #define CMMU_DBP  18
        !            29: #define CMMU_DPPU 19
        !            30: #define CMMU_DPPL 20
        !            31: #define CMMU_DSR  21
        !            32: #define CMMU_DLAR 22
        !            33: #define CMMU_DPAR 23
        !            34:
        !            35: #define CMMU_ICMD_INV_ITIC       0x001    /* Invalidate Inst Cache & TIC */
        !            36: #define CMMU_ICMD_INV_TIC        0x002    /* Invalidate TIC */
        !            37: #define CMMU_ICMD_INV_LINE       0x005    /* Invalidate Inst Cache Line */
        !            38: #define CMMU_ICMD_PRB_SUPR       0x008    /* MMU Probe Supervisor */
        !            39: #define CMMU_ICMD_PRB_USER       0x009    /* MMU Probe User */
        !            40: #define CMMU_ICMD_INV_SATC       0x00a    /* Invalidate All Supervisor ATCs */
        !            41: #define CMMU_ICMD_INV_UATC       0x00b    /* Invalidate All User ATCs */
        !            42:
        !            43: #define CMMU_ICTL_DID            0x8000   /* Double instruction disable */
        !            44: #define CMMU_ICTL_PREN           0x4000   /* Branch Prediction Enable */
        !            45: #define CMMU_ICTL_FRZ0           0x0100   /* Inst Cache Freeze Bank 0 */
        !            46: #define CMMU_ICTL_FRZ1           0x0080   /* Inst Cache Freeze Bank 1 */
        !            47: #define CMMU_ICTL_HTEN           0x0040   /* Hardware Table Search Enable */
        !            48: #define CMMU_ICTL_MEN            0x0020   /* Inst MMU Enable */
        !            49: #define CMMU_ICTL_BEN            0x0004   /* TIC Cache Enable */
        !            50: #define CMMU_ICTL_CEN            0x0001   /* Inst Cache Enable */
        !            51:
        !            52: #define CMMU_ISR_TBE             0x200000 /* Table Search Bus Error */
        !            53: #define CMMU_ISR_SI              0x100000 /* Segment Fault*/
        !            54: #define CMMU_ISR_PI              0x080000 /* Page Fault */
        !            55: #define CMMU_ISR_SP              0x040000 /* Supervisor Protection Violation */
        !            56: #define CMMU_ISR_PH              0x000800 /* PATC Hit */
        !            57: #define CMMU_ISR_BH              0x000400 /* BATC Hit */
        !            58: #define CMMU_ISR_SU              0x000200 /* Supervisor Bit */
        !            59: #define CMMU_ISR_BE              0x000001 /* Bus Error */
        !            60:
        !            61: #define CMMU_DCMD_FLUSH_PG       0x000    /* Flush Data Cache Page (sync) */
        !            62: #define CMMU_DCMD_INV_ALL        0x001    /* Invalidate Data Cache All */
        !            63: #define CMMU_DCMD_FLUSH_ALL      0x002    /* Flush Data Cache All (sync) */
        !            64: #define CMMU_DCMD_FLUSH_ALL_INV  0x003    /* Flush Data Cache All (sync & inval) */
        !            65: #define CMMU_DCMD_FLUSH_PG_INV   0x004    /* Flush Data Cache Page (sync & inval) */
        !            66: #define CMMU_DCMD_INV_LINE       0x005    /* Invalidate Data Cache Line */
        !            67: #define CMMU_DCMD_FLUSH_LINE     0x006    /* Flush Data Cache Line (sync)*/
        !            68: #define CMMU_DCMD_FLUSH_LINE_INV 0x007    /* Flush Data Cache Line (sync & inval)*/
        !            69: #define CMMU_DCMD_PRB_SUPR       0x008    /* MMU Probe Supervisor */
        !            70: #define CMMU_DCMD_PRB_USER       0x009    /* MMU Probe User */
        !            71: #define CMMU_DCMD_INV_SATC       0x00A    /* Invalidate All Supervisor ATCs */
        !            72: #define CMMU_DCMD_INV_UATC       0x00B    /* Invalidate All User ATCs */
        !            73:
        !            74: #define CMMU_DCTL_RSVD7          0x40000   /* Reserved */
        !            75: #define CMMU_DCTL_RSVD6          0x20000   /* Reserved */
        !            76: #define CMMU_DCTL_RSVD5          0x10000   /* Reserved */
        !            77: #define CMMU_DCTL_RSVD4          0x8000   /* Reserved */
        !            78: #define CMMU_DCTL_RSVD3          0x4000   /* Reserved */
        !            79: #define CMMU_DCTL_XMEM           0x2000   /* store -> load sequence */
        !            80: #define CMMU_DCTL_DEN            0x1000   /* Decoupled Cache Access Enable */
        !            81: #define CMMU_DCTL_FWT            0x0800   /* Force Write Through */
        !            82: #define CMMU_DCTL_BPEN1          0x0400   /* Break Point Enable 1 */
        !            83: #define CMMU_DCTL_BPEN0          0x0200   /* Break Point Enable 0 */
        !            84: #define CMMU_DCTL_FRZ0           0x0100   /* Data Cache Freeze Bank 0 */
        !            85: #define CMMU_DCTL_FRZ1           0x0080   /* Data Cache Freeze Bank 1 */
        !            86: #define CMMU_DCTL_HTEN           0x0040   /* Hardware Table Search Enable */
        !            87: #define CMMU_DCTL_MEN            0x0020   /* Data MMU Enable */
        !            88: #define CMMU_DCTL_RSVD2          0x0010   /* Reserved */
        !            89: #define CMMU_DCTL_ADS            0x0008   /* Allocat Disable */
        !            90: #define CMMU_DCTL_RSVD1          0x0004   /* Reserved */
        !            91: #define CMMU_DCTL_SEN            0x0002   /* Data Cache Snoop Enable */
        !            92: #define CMMU_DCTL_CEN            0x0001   /* Data Cache Enable */
        !            93:
        !            94: #define CMMU_DSR_TBE             0x200000 /* Table Search Bus Error */
        !            95: #define CMMU_DSR_SI              0x100000 /* Segment Fault*/
        !            96: #define CMMU_DSR_PI              0x080000 /* Page Fault */
        !            97: #define CMMU_DSR_SP              0x040000 /* Supervisor Protection Violation */
        !            98: #define CMMU_DSR_WE              0x020000 /* Write Protection Violation */
        !            99: #define CMMU_DSR_BPE             0x010000 /* Break Point Exception */
        !           100: #define CMMU_DSR_PH              0x000800 /* PATC Hit */
        !           101: #define CMMU_DSR_BH              0x000400 /* BATC Hit */
        !           102: #define CMMU_DSR_SU              0x000200 /* Supervisor Bit */
        !           103: #define CMMU_DSR_RW              0x000100 /* Read Bit */
        !           104: #define CMMU_DSR_CP              0x000004 /* Copyback Error */
        !           105: #define CMMU_DSR_WA              0x000002 /* Write-Allocate Bus Error */
        !           106: #define CMMU_DSR_BE              0x000001 /* Bus Error */
        !           107:
        !           108: #define CMMU_READ 0
        !           109: #define CMMU_WRITE 1
        !           110: #define CMMU_DATA 1
        !           111: #define CMMU_INST 0
        !           112:
        !           113: /* definitions for use of the BATC */
        !           114: #define BATC_512K      (0x00 << BATC_BLKSHIFT)
        !           115: #define BATC_1M                (0x01 << BATC_BLKSHIFT)
        !           116: #define BATC_2M                (0x03 << BATC_BLKSHIFT)
        !           117: #define BATC_4M                (0x07 << BATC_BLKSHIFT)
        !           118: #define BATC_8M                (0x0f << BATC_BLKSHIFT)
        !           119: #define BATC_16M       (0x1f << BATC_BLKSHIFT)
        !           120: #define BATC_32M       (0x3f << BATC_BLKSHIFT)
        !           121: #define BATC_64M       (0x7f << BATC_BLKSHIFT)
        !           122:
        !           123: #define CLINE_MASK     0x1f
        !           124: #define CLINE_SIZE     (8 * 32)
        !           125:
        !           126: #ifndef        _LOCORE
        !           127:
        !           128: void set_icmd(unsigned value);
        !           129: void set_ictl(unsigned value);
        !           130: void set_isar(unsigned value);
        !           131: void set_isap(unsigned value);
        !           132: void set_iuap(unsigned value);
        !           133: void set_iir(unsigned value);
        !           134: void set_ibp(unsigned value);
        !           135: void set_ippu(unsigned value);
        !           136: void set_ippl(unsigned value);
        !           137: void set_isr(unsigned value);
        !           138: void set_dcmd(unsigned value);
        !           139: void set_dctl(unsigned value);
        !           140: void set_dsar(unsigned value);
        !           141: void set_dsap(unsigned value);
        !           142: void set_duap(unsigned value);
        !           143: void set_dir(unsigned value);
        !           144: void set_dbp(unsigned value);
        !           145: void set_dppu(unsigned value);
        !           146: void set_dppl(unsigned value);
        !           147: void set_dsr(unsigned value);
        !           148:
        !           149: /* get routines */
        !           150: unsigned get_icmd(void);
        !           151: unsigned get_ictl(void);
        !           152: unsigned get_isar(void);
        !           153: unsigned get_isap(void);
        !           154: unsigned get_iuap(void);
        !           155: unsigned get_iir(void);
        !           156: unsigned get_ibp(void);
        !           157: unsigned get_ippu(void);
        !           158: unsigned get_ippl(void);
        !           159: unsigned get_isr(void);
        !           160: unsigned get_dcmd(void);
        !           161: unsigned get_dctl(void);
        !           162: unsigned get_dsar(void);
        !           163: unsigned get_dsap(void);
        !           164: unsigned get_duap(void);
        !           165: unsigned get_dir(void);
        !           166: unsigned get_dbp(void);
        !           167: unsigned get_dppu(void);
        !           168: unsigned get_dppl(void);
        !           169: unsigned get_dsr(void);
        !           170:
        !           171: /* Cache inlines */
        !           172:
        !           173: #define line_addr(x)   (paddr_t)((x) & ~CLINE_MASK)
        !           174: #define page_addr(x)   (paddr_t)((x) & ~PAGE_MASK)
        !           175:
        !           176: static __inline__ void mc88110_flush_data_line(paddr_t x)
        !           177: {
        !           178:        unsigned dctl = get_dctl();
        !           179:        if (dctl & CMMU_DCTL_CEN) {
        !           180:                set_dsar(line_addr(x));
        !           181:                set_dcmd(CMMU_DCMD_FLUSH_LINE);
        !           182:        }
        !           183: }
        !           184:
        !           185: static __inline__ void mc88110_flush_data_page(paddr_t x)
        !           186: {
        !           187:        unsigned dctl = get_dctl();
        !           188:        if (dctl & CMMU_DCTL_CEN) {
        !           189:                set_dsar(page_addr(x));
        !           190:                set_dcmd(CMMU_DCMD_FLUSH_PG);
        !           191:        }
        !           192: }
        !           193:
        !           194: static __inline__ void mc88110_flush_data(void)
        !           195: {
        !           196:        unsigned dctl = get_dctl();
        !           197:        if (dctl & CMMU_DCTL_CEN) {
        !           198:                set_dcmd(CMMU_DCMD_FLUSH_ALL);
        !           199:        }
        !           200: }
        !           201:
        !           202: static __inline__ void mc88110_inval_data_line(paddr_t x)
        !           203: {
        !           204:        set_dsar(line_addr(x));
        !           205:        set_dcmd(CMMU_DCMD_INV_LINE);
        !           206: }
        !           207:
        !           208: static __inline__ void mc88110_inval_data(void)
        !           209: {
        !           210:        set_dcmd(CMMU_DCMD_INV_ALL);
        !           211: }
        !           212:
        !           213: static __inline__ void mc88110_sync_data_line(paddr_t x)
        !           214: {
        !           215:        unsigned dctl = get_dctl();
        !           216:        if (dctl & CMMU_DCTL_CEN) {
        !           217:                set_dsar(line_addr(x));
        !           218:                set_dcmd(CMMU_DCMD_FLUSH_LINE_INV);
        !           219:        }
        !           220: }
        !           221:
        !           222: static __inline__ void mc88110_sync_data_page(paddr_t x)
        !           223: {
        !           224:        unsigned dctl = get_dctl();
        !           225:        if (dctl & CMMU_DCTL_CEN) {
        !           226:                set_dsar(page_addr(x));
        !           227:                set_dcmd(CMMU_DCMD_FLUSH_PG_INV);
        !           228:        }
        !           229: }
        !           230:
        !           231: static __inline__ void mc88110_sync_data(void)
        !           232: {
        !           233:        unsigned dctl = get_dctl();
        !           234:        if (dctl & CMMU_DCTL_CEN) {
        !           235:                set_dcmd(CMMU_DCMD_FLUSH_ALL_INV);
        !           236:        }
        !           237: }
        !           238:
        !           239: static __inline__ void mc88110_inval_inst_line(paddr_t x)
        !           240: {
        !           241:        set_isar(line_addr(x));
        !           242:        set_icmd(CMMU_ICMD_INV_LINE);
        !           243: }
        !           244:
        !           245: static __inline__ void mc88110_inval_inst(void)
        !           246: {
        !           247:        set_icmd(CMMU_ICMD_INV_ITIC);
        !           248: }
        !           249:
        !           250: #endif /* _LOCORE */
        !           251: #endif /* __MACHINE_M88110_H__ */

CVSweb