Home | History | Annotate | Line # | Download | only in include
      1  1.3  thorpej /*	$NetBSD: mmu_30.h,v 1.3 2025/07/08 11:45:25 thorpej Exp $	*/
      2  1.1  thorpej 
      3  1.1  thorpej /*-
      4  1.1  thorpej  * Copyright (c) 2023 The NetBSD Foundation, Inc.
      5  1.1  thorpej  * All rights reserved.
      6  1.1  thorpej  *
      7  1.1  thorpej  * This code is derived from software contributed to The NetBSD Foundation
      8  1.1  thorpej  * by Jason R. Thorpe.
      9  1.1  thorpej  *
     10  1.1  thorpej  * Redistribution and use in source and binary forms, with or without
     11  1.1  thorpej  * modification, are permitted provided that the following conditions
     12  1.1  thorpej  * are met:
     13  1.1  thorpej  * 1. Redistributions of source code must retain the above copyright
     14  1.1  thorpej  *    notice, this list of conditions and the following disclaimer.
     15  1.1  thorpej  * 2. Redistributions in binary form must reproduce the above copyright
     16  1.1  thorpej  *    notice, this list of conditions and the following disclaimer in the
     17  1.1  thorpej  *    documentation and/or other materials provided with the distribution.
     18  1.1  thorpej  *
     19  1.1  thorpej  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     20  1.1  thorpej  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     21  1.1  thorpej  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     22  1.1  thorpej  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     23  1.1  thorpej  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     24  1.1  thorpej  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25  1.1  thorpej  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26  1.1  thorpej  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     27  1.1  thorpej  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28  1.1  thorpej  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     29  1.1  thorpej  * POSSIBILITY OF SUCH DAMAGE.
     30  1.1  thorpej  */
     31  1.1  thorpej 
     32  1.1  thorpej #ifndef _M68K_MMU_30_H_
     33  1.1  thorpej #define	_M68K_MMU_30_H_
     34  1.1  thorpej 
     35  1.1  thorpej #include <machine/fcode.h>
     36  1.1  thorpej 
     37  1.1  thorpej /*
     38  1.1  thorpej  * The built-in MMU in the 68030 is a subset of the 68851.  Section 9.6
     39  1.1  thorpej  * of the 68030 User's Manual describes the differences:
     40  1.1  thorpej  *
     41  1.1  thorpej  * The following 68851 functions are not present on the 68030:
     42  1.1  thorpej  * - Access levels
     43  1.1  thorpej  * - Breakpoint registers
     44  1.1  thorpej  * - DMA Root Pointer
     45  1.1  thorpej  * - Task aliases
     46  1.1  thorpej  * - Lockable ATC entries
     47  1.1  thorpej  * - ATC entries defined as Shared Globally
     48  1.1  thorpej  *
     49  1.2   andvar  * Furthermore, the 68030 has some functional differences:
     50  1.1  thorpej  * - Only 22 ATC entries
     51  1.1  thorpej  * - Reduced instruction set for MMU operations
     52  1.1  thorpej  * - Reduced addressing modes for MMU instructions.
     53  1.1  thorpej  *
     54  1.1  thorpej  * Instructions removed: PVALID, PFLUSHR, PFLUSHS, PBcc, PDBcc, PScc,
     55  1.1  thorpej  * PTRAPcc, PSAVE, PRESTORE.
     56  1.1  thorpej  *
     57  1.1  thorpej  * Registers removed: CAL, VAL, BAD, BACx, DRP, AC.
     58  1.1  thorpej  *
     59  1.1  thorpej  * The 68030 does, however, add a pair of Transparent Translation
     60  1.1  thorpej  * registers
     61  1.1  thorpej  */
     62  1.1  thorpej 
     63  1.1  thorpej /*
     64  1.1  thorpej  * 9.7.3 -- Transparent Translation registers
     65  1.1  thorpej  *
     66  1.1  thorpej  * These registers define blocks of logical address space that are
     67  1.1  thorpej  * transparently translated VA==PA.  The minimum block size is 16MB,
     68  1.1  thorpej  * and the blocks may overlap.  The mode in which the transparent
     69  1.1  thorpej  * translation is applied is specified by the Function Code base and
     70  1.1  thorpej  * mask fields.
     71  1.1  thorpej  *
     72  1.1  thorpej  * The Logical Address Base specifies the address of the block and
     73  1.1  thorpej  * the Logical Address Mask field specifies the address bits to *ignore*.
     74  1.1  thorpej  *
     75  1.1  thorpej  */
     76  1.1  thorpej #define	TT30_LAB	__BITS(31,24)	/* Logical Address Base */
     77  1.1  thorpej #define	TT30_LAM	__BITS(16,23)	/* Logical Address Mask */
     78  1.1  thorpej #define	TT30_E		__BIT(15)	/* Enable transparent translation */
     79  1.1  thorpej #define	TT30_CI		__BIT(10)	/* Cache Inhibit */
     80  1.1  thorpej #define	TT30_RW		__BIT(9)	/* Read(1) or Write(0) translated */
     81  1.1  thorpej #define	TT30_RWM	__BIT(8)	/* RW field used(0) or ignored(1) */
     82  1.1  thorpej #define	TT30_FCBASE	__BITS(4,6)	/* Function Code base */
     83  1.1  thorpej #define	TT30_FCMASK	__BITS(0,2)	/* Function Code bits to ignore */
     84  1.1  thorpej 
     85  1.1  thorpej /* Convenience definitions for address space selection. */
     86  1.1  thorpej #define	TT30_USERD	__SHIFTIN(FC_USERD,TT30_FCBASE)
     87  1.1  thorpej #define	TT30_USERP	__SHIFTIN(FC_USERP,TT30_FCBASE)
     88  1.1  thorpej #define	TT30_SUPERD	__SHIFTIN(FC_SUPERD,TT30_FCBASE)
     89  1.1  thorpej #define	TT30_SUPERP	__SHIFTIN(FC_SUPERP,TT30_FCBASE)
     90  1.1  thorpej 
     91  1.3  thorpej #ifdef _KERNEL
     92  1.3  thorpej /*
     93  1.3  thorpej  * TT register value indices in the mmu_ttregs[] array.  Note that asm
     94  1.3  thorpej  * code makes assumptions about these indices, to change them at your
     95  1.3  thorpej  * peril.
     96  1.3  thorpej  */
     97  1.3  thorpej extern uint32_t mmu_tt30[];
     98  1.3  thorpej #define	MMU_TTREG_TT0	0
     99  1.3  thorpej #define	MMU_TTREG_TT1	1
    100  1.3  thorpej #define	MMU_NTTREGS30	2
    101  1.3  thorpej 
    102  1.3  thorpej void	mmu_load_tt30(uint32_t *);
    103  1.3  thorpej #endif /* _KERNEL */
    104  1.3  thorpej 
    105  1.1  thorpej #endif /* _M68K_MMU_30_H_ */
    106