Changeset 1787e527 in mainline for kernel/arch/ia64/include/mm/page.h


Ignore:
Timestamp:
2009-11-16T21:22:54Z (14 years ago)
Author:
Lenka Trochtova <trochtova.lenka@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5ebdf94
Parents:
fcbd1be (diff), 9c70ed6 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

merged with head (unstable)

File:
1 edited

Legend:

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

    rfcbd1be r1787e527  
    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                        (7LL << 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    (7ULL << 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                      7LL
     77        #define VRN_KERNEL  7ULL
    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    0x0
    92 #define MA_UNCACHEABLE  0x4
     91#define MA_WRITEBACK    0x00
     92#define MA_UNCACHEABLE  0x04
    9393
    9494/** Privilege Levels. Only the most and the least privileged ones are ever used. */
    95 #define PL_KERNEL       0x0
    96 #define PL_USER         0x3
     95#define PL_KERNEL  0x00
     96#define PL_USER    0x03
    9797
    9898/* Access Rigths. Only certain combinations are used by the kernel. */
    99 #define AR_READ         0x0
    100 #define AR_EXECUTE      0x1
    101 #define AR_WRITE        0x2
     99#define AR_READ     0x00
     100#define AR_EXECUTE  0x01
     101#define AR_WRITE    0x02
    102102
    103103#ifndef __ASM__
     
    113113struct vhpt_tag_info {
    114114        unsigned long long tag : 63;
    115         unsigned ti : 1;
     115        unsigned int ti : 1;
    116116} __attribute__ ((packed));
    117117
     
    123123struct vhpt_entry_present {
    124124        /* Word 0 */
    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;
     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;
    132132        unsigned long long ppn : 38;
    133         unsigned : 2;
    134         unsigned ed : 1;
    135         unsigned ig1 : 11;
     133        unsigned int : 2;
     134        unsigned int ed : 1;
     135        unsigned int ig1 : 11;
    136136       
    137137        /* Word 1 */
    138         unsigned : 2;
    139         unsigned ps : 6;
    140         unsigned key : 24;
    141         unsigned : 32;
     138        unsigned int : 2;
     139        unsigned int ps : 6;
     140        unsigned int key : 24;
     141        unsigned int : 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 p : 1;
     152        unsigned int p : 1;
    153153        unsigned long long ig0 : 52;
    154         unsigned ig1 : 11;
     154        unsigned int ig1 : 11;
    155155       
    156156        /* Word 1 */
    157         unsigned : 2;
    158         unsigned ps : 6;
     157        unsigned int : 2;
     158        unsigned int 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 vhpt_entry {
     168typedef union {
    169169        struct vhpt_entry_present present;
    170170        struct vhpt_entry_not_present not_present;
     
    173173
    174174struct region_register_map {
    175         unsigned ve : 1;
    176         unsigned : 1;
    177         unsigned ps : 6;
    178         unsigned rid : 24;
    179         unsigned : 32;
    180 } __attribute__ ((packed));
    181 
    182 typedef union region_register {
     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
     182typedef union {
    183183        struct region_register_map map;
    184184        unsigned long long word;
    185 } region_register;
     185} region_register_t;
    186186
    187187struct pta_register_map {
    188         unsigned ve : 1;
    189         unsigned : 1;
    190         unsigned size : 6;
    191         unsigned vf : 1;
    192         unsigned : 6;
     188        unsigned int ve : 1;
     189        unsigned int : 1;
     190        unsigned int size : 6;
     191        unsigned int vf : 1;
     192        unsigned int : 6;
    193193        unsigned long long base : 49;
    194194} __attribute__ ((packed));
     
    197197        struct pta_register_map map;
    198198        uint64_t word;
    199 } pta_register;
     199} pta_register_t;
    200200
    201201/** Return Translation Hashed Entry Address.
     
    211211{
    212212        uint64_t ret;
    213 
    214         asm volatile ("thash %0 = %1\n" : "=r" (ret) : "r" (va));
    215 
     213       
     214        asm volatile (
     215                "thash %[ret] = %[va]\n"
     216                : [ret] "=r" (ret)
     217                : [va] "r" (va)
     218        );
     219       
    216220        return ret;
    217221}
     
    229233{
    230234        uint64_t ret;
    231 
    232         asm volatile ("ttag %0 = %1\n" : "=r" (ret) : "r" (va));
    233 
     235       
     236        asm volatile (
     237                "ttag %[ret] = %[va]\n"
     238                : [ret] "=r" (ret)
     239                : [va] "r" (va)
     240        );
     241       
    234242        return ret;
    235243}
     
    244252{
    245253        uint64_t ret;
     254       
    246255        ASSERT(i < REGION_REGISTERS);
    247         asm volatile ("mov %0 = rr[%1]\n" : "=r" (ret) : "r" (i << VRN_SHIFT));
     256       
     257        asm volatile (
     258                "mov %[ret] = rr[%[index]]\n"
     259                : [ret] "=r" (ret)
     260                : [index] "r" (i << VRN_SHIFT)
     261        );
     262       
    248263        return ret;
    249264}
     
    257272{
    258273        ASSERT(i < REGION_REGISTERS);
    259         asm volatile (
    260                 "mov rr[%0] = %1\n"
    261                 :
    262                 : "r" (i << VRN_SHIFT), "r" (v)
    263         );
    264 }
    265  
     274       
     275        asm volatile (
     276                "mov rr[%[index]] = %[value]\n"
     277                :: [index] "r" (i << VRN_SHIFT),
     278                   [value] "r" (v)
     279        );
     280}
     281
    266282/** Read Page Table Register.
    267283 *
     
    272288        uint64_t ret;
    273289       
    274         asm volatile ("mov %0 = cr.pta\n" : "=r" (ret));
     290        asm volatile (
     291                "mov %[ret] = cr.pta\n"
     292                : [ret] "=r" (ret)
     293        );
    275294       
    276295        return ret;
     
    283302static inline void pta_write(uint64_t v)
    284303{
    285         asm volatile ("mov cr.pta = %0\n" : : "r" (v));
     304        asm volatile (
     305                "mov cr.pta = %[value]\n"
     306                :: [value] "r" (v)
     307        );
    286308}
    287309
Note: See TracChangeset for help on using the changeset viewer.