Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:09

0001 /*
0002  * Copyright (c) 2005 Jakub Jermar
0003  * All rights reserved.
0004  *
0005  * Redistribution and use in source and binary forms, with or without
0006  * modification, are permitted provided that the following conditions
0007  * are met:
0008  *
0009  * - Redistributions of source code must retain the above copyright
0010  *   notice, this list of conditions and the following disclaimer.
0011  * - Redistributions in binary form must reproduce the above copyright
0012  *   notice, this list of conditions and the following disclaimer in the
0013  *   documentation and/or other materials provided with the distribution.
0014  * - The name of the author may not be used to endorse or promote products
0015  *   derived from this software without specific prior written permission.
0016  *
0017  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
0018  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
0019  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
0020  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
0021  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
0022  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
0023  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
0024  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
0025  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
0026  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
0027  */
0028 
0029 /** @addtogroup RTEMSBSPsSPARC64mm  
0030  * @{
0031  */
0032 /** @file
0033  */
0034 
0035 #ifndef KERN_sparc64_sun4u_TTE_H_
0036 #define KERN_sparc64_sun4u_TTE_H_
0037 
0038 #define TTE_G       (1 << 0)
0039 #define TTE_W       (1 << 1)
0040 #define TTE_P       (1 << 2)
0041 #define TTE_E       (1 << 3)
0042 #define TTE_CV      (1 << 4)
0043 #define TTE_CP      (1 << 5)
0044 #define TTE_L       (1 << 6)
0045 
0046 #define TTE_V_SHIFT 63
0047 #define TTE_SIZE_SHIFT  61
0048 
0049 #ifndef __ASM__
0050 
0051 #include <arch/types.h>
0052 
0053 /* TTE tag's VA_tag field contains bits <63:VA_TAG_PAGE_SHIFT> of the VA */
0054 #define VA_TAG_PAGE_SHIFT   22
0055 
0056 /** Translation Table Entry - Tag. */
0057 union tte_tag {
0058     uint64_t value;
0059     struct {
0060         unsigned g : 1;     /**< Global. */
0061         unsigned : 2;       /**< Reserved. */
0062         unsigned context : 13;  /**< Context identifier. */
0063         unsigned : 6;       /**< Reserved. */
0064         uint64_t va_tag : 42;   /**< Virtual Address Tag, bits 63:22. */
0065     } __attribute__ ((packed));
0066 };
0067 
0068 typedef union tte_tag tte_tag_t;
0069 
0070 /** Translation Table Entry - Data. */
0071 union tte_data {
0072     uint64_t value;
0073     struct {
0074         unsigned v : 1;     /**< Valid. */
0075         unsigned size : 2;  /**< Page size of this entry. */
0076         unsigned nfo : 1;   /**< No-Fault-Only. */
0077         unsigned ie : 1;    /**< Invert Endianness. */
0078         unsigned soft2 : 9; /**< Software defined field. */
0079 #if defined (US)
0080         unsigned diag : 9;  /**< Diagnostic data. */
0081         unsigned pfn : 28;  /**< Physical Address bits, bits 40:13. */
0082 #elif defined (US3)
0083         unsigned : 7;       /**< Reserved. */
0084         unsigned pfn : 30;  /**< Physical Address bits, bits 42:13 */
0085 #endif
0086         unsigned soft : 6;  /**< Software defined field. */
0087         unsigned l : 1;     /**< Lock. */
0088         unsigned cp : 1;    /**< Cacheable in physically indexed cache. */
0089         unsigned cv : 1;    /**< Cacheable in virtually indexed cache. */
0090         unsigned e : 1;     /**< Side-effect. */
0091         unsigned p : 1;     /**< Privileged. */
0092         unsigned w : 1;     /**< Writable. */
0093         unsigned g : 1;     /**< Global. */
0094     } __attribute__ ((packed));
0095 };
0096 
0097 typedef union tte_data tte_data_t;
0098 
0099 #endif /* !def __ASM__ */
0100 
0101 #endif
0102 
0103 /** @}
0104  */