Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia64/include/mm/page.h

    r7a0359b r98000fb  
    2828 */
    2929
    30 /** @addtogroup ia64mm
     30/** @addtogroup ia64mm 
    3131 * @{
    3232 */
     
    3939#include <arch/mm/frame.h>
    4040
    41 #define PAGE_SIZE   FRAME_SIZE
    42 #define PAGE_WIDTH  FRAME_WIDTH
     41#define PAGE_SIZE       FRAME_SIZE
     42#define PAGE_WIDTH      FRAME_WIDTH
    4343
    4444#ifdef KERNEL
    4545
    4646/** Bit width of the TLB-locked portion of kernel address space. */
    47 #define KERNEL_PAGE_WIDTH  28  /* 256M */
    48 #define IO_PAGE_WIDTH      26  /* 64M */
    49 #define FW_PAGE_WIDTH      28  /* 256M */
    50 
    51 #define USPACE_IO_PAGE_WIDTH  12  /* 4K */
     47#define KERNEL_PAGE_WIDTH               28      /* 256M */
     48#define IO_PAGE_WIDTH                   26      /* 64M */
     49#define FW_PAGE_WIDTH                   28      /* 256M */
     50
     51#define USPACE_IO_PAGE_WIDTH            12      /* 4K */
    5252
    5353
     
    5959
    6060/* Firmware area (bellow 4GB in phys mem) */
    61 #define FW_OFFSET   0x00000000F0000000
     61#define FW_OFFSET             0x00000000F0000000
    6262/* Legacy IO space */
    63 #define IO_OFFSET   0x0001000000000000
     63#define IO_OFFSET             0x0001000000000000
    6464/* Videoram - now mapped to 0 as VGA text mode vram on 0xb8000 */
    65 #define VIO_OFFSET  0x0002000000000000
    66 
    67 
    68 #define PPN_SHIFT  12
    69 
    70 #define VRN_SHIFT   61
    71 #define VRN_MASK    (7ULL << VRN_SHIFT)
    72 #define VA2VRN(va)  ((va) >> VRN_SHIFT)
     65#define VIO_OFFSET            0x0002000000000000
     66
     67
     68#define PPN_SHIFT                       12
     69
     70#define VRN_SHIFT                       61
     71#define VRN_MASK                        (7LL << VRN_SHIFT)
     72#define VA2VRN(va)                      ((va)>>VRN_SHIFT)
    7373
    7474#ifdef __ASM__
    75         #define VRN_KERNEL  7
     75#define VRN_KERNEL                      7
    7676#else
    77         #define VRN_KERNEL  7ULL
     77#define VRN_KERNEL                      7LL
    7878#endif
    7979
    80 #define REGION_REGISTERS  8
    81 
    82 #define KA2PA(x)  ((uintptr_t) ((x) - (VRN_KERNEL << VRN_SHIFT)))
    83 #define PA2KA(x)  ((uintptr_t) ((x) + (VRN_KERNEL << VRN_SHIFT)))
    84 
    85 #define VHPT_WIDTH  20  /* 1M */
    86 #define VHPT_SIZE   (1 << VHPT_WIDTH)
    87 
    88 #define PTA_BASE_SHIFT  15
     80#define REGION_REGISTERS                8
     81
     82#define KA2PA(x)        ((uintptr_t) (x - (VRN_KERNEL << VRN_SHIFT)))
     83#define PA2KA(x)        ((uintptr_t) (x + (VRN_KERNEL << VRN_SHIFT)))
     84
     85#define VHPT_WIDTH                      20      /* 1M */
     86#define VHPT_SIZE                       (1 << VHPT_WIDTH)
     87
     88#define PTA_BASE_SHIFT                  15
    8989
    9090/** Memory Attributes. */
    91 #define MA_WRITEBACK    0x00
    92 #define MA_UNCACHEABLE  0x04
     91#define MA_WRITEBACK    0x0
     92#define MA_UNCACHEABLE  0x4
    9393
    9494/** Privilege Levels. Only the most and the least privileged ones are ever used. */
    95 #define PL_KERNEL  0x00
    96 #define PL_USER    0x03
     95#define PL_KERNEL       0x0
     96#define PL_USER         0x3
    9797
    9898/* Access Rigths. Only certain combinations are used by the kernel. */
    99 #define AR_READ     0x00
    100 #define AR_EXECUTE  0x01
    101 #define AR_WRITE    0x02
     99#define AR_READ         0x0
     100#define AR_EXECUTE      0x1
     101#define AR_WRITE        0x2
    102102
    103103#ifndef __ASM__
     
    108108#include <arch/barrier.h>
    109109#include <arch/mm/asid.h>
    110 #include <typedefs.h>
     110#include <arch/types.h>
    111111#include <debug.h>
    112112
    113113struct vhpt_tag_info {
    114114        unsigned long long tag : 63;
    115         unsigned int ti : 1;
     115        unsigned ti : 1;
    116116} __attribute__ ((packed));
    117117
     
    123123struct vhpt_entry_present {
    124124        /* Word 0 */
    125         unsigned int p : 1;
    126         unsigned int : 1;
    127         unsigned int ma : 3;
    128         unsigned int a : 1;
    129         unsigned int d : 1;
    130         unsigned int pl : 2;
    131         unsigned int ar : 3;
     125        unsigned p : 1;
     126        unsigned : 1;
     127        unsigned ma : 3;
     128        unsigned a : 1;
     129        unsigned d : 1;
     130        unsigned pl : 2;
     131        unsigned ar : 3;
    132132        unsigned long long ppn : 38;
    133         unsigned int : 2;
    134         unsigned int ed : 1;
    135         unsigned int ig1 : 11;
     133        unsigned : 2;
     134        unsigned ed : 1;
     135        unsigned ig1 : 11;
    136136       
    137137        /* Word 1 */
    138         unsigned int : 2;
    139         unsigned int ps : 6;
    140         unsigned int key : 24;
    141         unsigned int : 32;
     138        unsigned : 2;
     139        unsigned ps : 6;
     140        unsigned key : 24;
     141        unsigned : 32;
    142142       
    143143        /* Word 2 */
    144144        union vhpt_tag tag;
    145145       
    146         /* Word 3 */
     146        /* Word 3 */                                                                                                   
    147147        uint64_t ig3 : 64;
    148148} __attribute__ ((packed));
     
    150150struct vhpt_entry_not_present {
    151151        /* Word 0 */
    152         unsigned int p : 1;
     152        unsigned p : 1;
    153153        unsigned long long ig0 : 52;
    154         unsigned int ig1 : 11;
     154        unsigned ig1 : 11;
    155155       
    156156        /* Word 1 */
    157         unsigned int : 2;
    158         unsigned int ps : 6;
     157        unsigned : 2;
     158        unsigned ps : 6;
    159159        unsigned long long ig2 : 56;
    160        
     160
    161161        /* Word 2 */
    162162        union vhpt_tag tag;
    163163       
    164         /* Word 3 */
     164        /* Word 3 */                                                                                                   
    165165        uint64_t ig3 : 64;
    166166} __attribute__ ((packed));
    167167
    168 typedef union {
     168typedef union vhpt_entry {
    169169        struct vhpt_entry_present present;
    170170        struct vhpt_entry_not_present not_present;
     
    173173
    174174struct region_register_map {
    175         unsigned int ve : 1;
    176         unsigned int : 1;
    177         unsigned int ps : 6;
    178         unsigned int rid : 24;
    179         unsigned int : 32;
    180 } __attribute__ ((packed));
    181 
    182 typedef union {
     175        unsigned ve : 1;
     176        unsigned : 1;
     177        unsigned ps : 6;
     178        unsigned rid : 24;
     179        unsigned : 32;
     180} __attribute__ ((packed));
     181
     182typedef union region_register {
    183183        struct region_register_map map;
    184184        unsigned long long word;
    185 } region_register_t;
     185} region_register;
    186186
    187187struct pta_register_map {
    188         unsigned int ve : 1;
    189         unsigned int : 1;
    190         unsigned int size : 6;
    191         unsigned int vf : 1;
    192         unsigned int : 6;
     188        unsigned ve : 1;
     189        unsigned : 1;
     190        unsigned size : 6;
     191        unsigned vf : 1;
     192        unsigned : 6;
    193193        unsigned long long base : 49;
    194194} __attribute__ ((packed));
     
    197197        struct pta_register_map map;
    198198        uint64_t word;
    199 } pta_register_t;
     199} pta_register;
    200200
    201201/** Return Translation Hashed Entry Address.
     
    208208 * @return Address of the head of VHPT collision chain.
    209209 */
    210 NO_TRACE static inline uint64_t thash(uint64_t va)
     210static inline uint64_t thash(uint64_t va)
    211211{
    212212        uint64_t ret;
    213        
    214         asm volatile (
    215                 "thash %[ret] = %[va]\n"
    216                 : [ret] "=r" (ret)
    217                 : [va] "r" (va)
    218         );
    219        
     213
     214        asm volatile ("thash %0 = %1\n" : "=r" (ret) : "r" (va));
     215
    220216        return ret;
    221217}
     
    230226 * @return The unique tag for VPN and RID in the collision chain returned by thash().
    231227 */
    232 NO_TRACE static inline uint64_t ttag(uint64_t va)
     228static inline uint64_t ttag(uint64_t va)
    233229{
    234230        uint64_t ret;
    235        
    236         asm volatile (
    237                 "ttag %[ret] = %[va]\n"
    238                 : [ret] "=r" (ret)
    239                 : [va] "r" (va)
    240         );
    241        
     231
     232        asm volatile ("ttag %0 = %1\n" : "=r" (ret) : "r" (va));
     233
    242234        return ret;
    243235}
     
    249241 * @return Current contents of rr[i].
    250242 */
    251 NO_TRACE static inline uint64_t rr_read(size_t i)
     243static inline uint64_t rr_read(size_t i)
    252244{
    253245        uint64_t ret;
    254        
    255246        ASSERT(i < REGION_REGISTERS);
    256        
    257         asm volatile (
    258                 "mov %[ret] = rr[%[index]]\n"
    259                 : [ret] "=r" (ret)
    260                 : [index] "r" (i << VRN_SHIFT)
    261         );
    262        
     247        asm volatile ("mov %0 = rr[%1]\n" : "=r" (ret) : "r" (i << VRN_SHIFT));
    263248        return ret;
    264249}
     
    269254 * @param v Value to be written to rr[i].
    270255 */
    271 NO_TRACE static inline void rr_write(size_t i, uint64_t v)
     256static inline void rr_write(size_t i, uint64_t v)
    272257{
    273258        ASSERT(i < REGION_REGISTERS);
    274        
    275259        asm volatile (
    276                 "mov rr[%[index]] = %[value]\n"
    277                 :: [index] "r" (i << VRN_SHIFT),
    278                    [value] "r" (v)
     260                "mov rr[%0] = %1\n"
     261                : 
     262                : "r" (i << VRN_SHIFT), "r" (v)
    279263        );
    280264}
    281 
     265 
    282266/** Read Page Table Register.
    283267 *
    284268 * @return Current value stored in PTA.
    285269 */
    286 NO_TRACE static inline uint64_t pta_read(void)
     270static inline uint64_t pta_read(void)
    287271{
    288272        uint64_t ret;
    289273       
    290         asm volatile (
    291                 "mov %[ret] = cr.pta\n"
    292                 : [ret] "=r" (ret)
    293         );
     274        asm volatile ("mov %0 = cr.pta\n" : "=r" (ret));
    294275       
    295276        return ret;
     
    300281 * @param v New value to be stored in PTA.
    301282 */
    302 NO_TRACE static inline void pta_write(uint64_t v)
    303 {
    304         asm volatile (
    305                 "mov cr.pta = %[value]\n"
    306                 :: [value] "r" (v)
    307         );
     283static inline void pta_write(uint64_t v)
     284{
     285        asm volatile ("mov cr.pta = %0\n" : : "r" (v));
    308286}
    309287
Note: See TracChangeset for help on using the changeset viewer.