Changeset 5bda2f3e in mainline for kernel/arch/ia64/include


Ignore:
Timestamp:
2009-09-04T18:06:24Z (16 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
93d66ef
Parents:
029d94a
Message:

ia64 cleanup and conding style
(no change in functionality)

Location:
kernel/arch/ia64/include
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia64/include/asm.h

    r029d94a r5bda2f3e  
    2727 */
    2828
    29 /** @addtogroup ia64   
     29/** @addtogroup ia64
    3030 * @{
    3131 */
     
    4141#include <arch/register.h>
    4242
    43 #define IA64_IOSPACE_ADDRESS 0xE001000000000000ULL
     43#define IA64_IOSPACE_ADDRESS  0xE001000000000000ULL
    4444
    4545static inline void pio_write_8(ioport8_t *port, uint8_t v)
    4646{
    4747        uintptr_t prt = (uintptr_t) port;
    48 
    49         *((ioport8_t *)(IA64_IOSPACE_ADDRESS +
     48       
     49        *((ioport8_t *) (IA64_IOSPACE_ADDRESS +
    5050            ((prt & 0xfff) | ((prt >> 2) << 12)))) = v;
    51 
    52         asm volatile ("mf\n" ::: "memory");
     51       
     52        asm volatile (
     53                "mf\n"
     54                ::: "memory"
     55        );
    5356}
    5457
     
    5659{
    5760        uintptr_t prt = (uintptr_t) port;
    58 
    59         *((ioport16_t *)(IA64_IOSPACE_ADDRESS +
     61       
     62        *((ioport16_t *) (IA64_IOSPACE_ADDRESS +
    6063            ((prt & 0xfff) | ((prt >> 2) << 12)))) = v;
    61 
    62         asm volatile ("mf\n" ::: "memory");
     64       
     65        asm volatile (
     66                "mf\n"
     67                ::: "memory"
     68        );
    6369}
    6470
     
    6672{
    6773        uintptr_t prt = (uintptr_t) port;
    68 
    69         *((ioport32_t *)(IA64_IOSPACE_ADDRESS +
     74       
     75        *((ioport32_t *) (IA64_IOSPACE_ADDRESS +
    7076            ((prt & 0xfff) | ((prt >> 2) << 12)))) = v;
    71 
    72         asm volatile ("mf\n" ::: "memory");
     77       
     78        asm volatile (
     79                "mf\n"
     80                ::: "memory"
     81        );
    7382}
    7483
     
    7685{
    7786        uintptr_t prt = (uintptr_t) port;
    78 
    79         asm volatile ("mf\n" ::: "memory");
    80 
    81         return *((ioport8_t *)(IA64_IOSPACE_ADDRESS +
     87       
     88        asm volatile (
     89                "mf\n"
     90                ::: "memory"
     91        );
     92       
     93        return *((ioport8_t *) (IA64_IOSPACE_ADDRESS +
    8294            ((prt & 0xfff) | ((prt >> 2) << 12))));
    8395}
     
    8698{
    8799        uintptr_t prt = (uintptr_t) port;
    88 
    89         asm volatile ("mf\n" ::: "memory");
    90 
    91         return *((ioport16_t *)(IA64_IOSPACE_ADDRESS +
     100       
     101        asm volatile (
     102                "mf\n"
     103                ::: "memory"
     104        );
     105       
     106        return *((ioport16_t *) (IA64_IOSPACE_ADDRESS +
    92107            ((prt & 0xfff) | ((prt >> 2) << 12))));
    93108}
     
    96111{
    97112        uintptr_t prt = (uintptr_t) port;
    98 
    99         asm volatile ("mf\n" ::: "memory");
    100 
    101         return *((ioport32_t *)(IA64_IOSPACE_ADDRESS +
     113       
     114        asm volatile (
     115                "mf\n"
     116                ::: "memory"
     117        );
     118       
     119        return *((ioport32_t *) (IA64_IOSPACE_ADDRESS +
    102120            ((prt & 0xfff) | ((prt >> 2) << 12))));
    103121}
     
    112130{
    113131        uint64_t v;
    114 
    115         //I'm not sure why but this code bad inlines in scheduler,
    116         //so THE shifts about 16B and causes kernel panic
    117         //asm volatile ("and %0 = %1, r12" : "=r" (v) : "r" (~(STACK_SIZE-1)));
    118         //return v;
    119        
    120         //this code have the same meaning but inlines well
    121         asm volatile ("mov %0 = r12" : "=r" (v)  );
    122         return v & (~(STACK_SIZE-1));
     132       
     133        /* I'm not sure why but this code bad inlines in scheduler,
     134           so THE shifts about 16B and causes kernel panic
     135           
     136           asm volatile (
     137               "and %[value] = %[mask], r12"
     138               : [value] "=r" (v)
     139               : [mask] "r" (~(STACK_SIZE - 1))
     140           );
     141           return v;
     142           
     143           This code have the same meaning but inlines well.
     144        */
     145       
     146        asm volatile (
     147                "mov %[value] = r12"
     148                : [value] "=r" (v)
     149        );
     150       
     151        return (v & (~(STACK_SIZE - 1)));
    123152}
    124153
     
    131160        uint64_t v;
    132161       
    133         asm volatile ("mov %0 = psr\n" : "=r" (v));
     162        asm volatile (
     163                "mov %[value] = psr\n"
     164                : [value] "=r" (v)
     165        );
    134166       
    135167        return v;
     
    144176        uint64_t v;
    145177       
    146         asm volatile ("mov %0 = cr.iva\n" : "=r" (v));
     178        asm volatile (
     179                "mov %[value] = cr.iva\n"
     180                : [value] "=r" (v)
     181        );
    147182       
    148183        return v;
     
    155190static inline void iva_write(uint64_t v)
    156191{
    157         asm volatile ("mov cr.iva = %0\n" : : "r" (v));
     192        asm volatile (
     193                "mov cr.iva = %[value]\n"
     194                :: [value] "r" (v)
     195        );
    158196}
    159197
     
    167205        uint64_t v;
    168206       
    169         asm volatile ("mov %0 = cr.ivr\n" : "=r" (v));
     207        asm volatile (
     208                "mov %[value] = cr.ivr\n"
     209                : [value] "=r" (v)
     210        );
    170211       
    171212        return v;
     
    176217        uint64_t v;
    177218       
    178         asm volatile ("mov %0 = cr64\n" : "=r" (v));
     219        asm volatile (
     220                "mov %[value] = cr64\n"
     221                : [value] "=r" (v)
     222        );
    179223       
    180224        return v;
     
    188232static inline void itc_write(uint64_t v)
    189233{
    190         asm volatile ("mov ar.itc = %0\n" : : "r" (v));
     234        asm volatile (
     235                "mov ar.itc = %[value]\n"
     236                :: [value] "r" (v)
     237        );
    191238}
    192239
     
    199246        uint64_t v;
    200247       
    201         asm volatile ("mov %0 = ar.itc\n" : "=r" (v));
     248        asm volatile (
     249                "mov %[value] = ar.itc\n"
     250                : [value] "=r" (v)
     251        );
    202252       
    203253        return v;
     
    210260static inline void itm_write(uint64_t v)
    211261{
    212         asm volatile ("mov cr.itm = %0\n" : : "r" (v));
     262        asm volatile (
     263                "mov cr.itm = %[value]\n"
     264                :: [value] "r" (v)
     265        );
    213266}
    214267
     
    221274        uint64_t v;
    222275       
    223         asm volatile ("mov %0 = cr.itm\n" : "=r" (v));
     276        asm volatile (
     277                "mov %[value] = cr.itm\n"
     278                : [value] "=r" (v)
     279        );
    224280       
    225281        return v;
     
    234290        uint64_t v;
    235291       
    236         asm volatile ("mov %0 = cr.itv\n" : "=r" (v));
     292        asm volatile (
     293                "mov %[value] = cr.itv\n"
     294                : [value] "=r" (v)
     295        );
    237296       
    238297        return v;
     
    245304static inline void itv_write(uint64_t v)
    246305{
    247         asm volatile ("mov cr.itv = %0\n" : : "r" (v));
     306        asm volatile (
     307                "mov cr.itv = %[value]\n"
     308                :: [value] "r" (v)
     309        );
    248310}
    249311
     
    254316static inline void eoi_write(uint64_t v)
    255317{
    256         asm volatile ("mov cr.eoi = %0\n" : : "r" (v));
     318        asm volatile (
     319                "mov cr.eoi = %[value]\n"
     320                :: [value] "r" (v)
     321        );
    257322}
    258323
     
    264329{
    265330        uint64_t v;
    266 
    267         asm volatile ("mov %0 = cr.tpr\n"  : "=r" (v));
     331       
     332        asm volatile (
     333                "mov %[value] = cr.tpr\n"
     334                : [value] "=r" (v)
     335        );
    268336       
    269337        return v;
     
    276344static inline void tpr_write(uint64_t v)
    277345{
    278         asm volatile ("mov cr.tpr = %0\n" : : "r" (v));
     346        asm volatile (
     347                "mov cr.tpr = %[value]\n"
     348                :: [value] "r" (v)
     349        );
    279350}
    280351
     
    291362       
    292363        asm volatile (
    293                 "mov %0 = psr\n"
    294                 "rsm %1\n"
    295                 : "=r" (v)
    296                 : "i" (PSR_I_MASK)
     364                "mov %[value] = psr\n"
     365                "rsm %[mask]\n"
     366                : [value] "=r" (v)
     367                : [mask] "i" (PSR_I_MASK)
    297368        );
    298369       
     
    312383       
    313384        asm volatile (
    314                 "mov %0 = psr\n"
    315                 "ssm %1\n"
     385                "mov %[value] = psr\n"
     386                "ssm %[mask]\n"
    316387                ";;\n"
    317388                "srlz.d\n"
    318                 : "=r" (v)
    319                 : "i" (PSR_I_MASK)
     389                : [value] "=r" (v)
     390                : [mask] "i" (PSR_I_MASK)
    320391        );
    321392       
     
    349420static inline void pk_disable(void)
    350421{
    351         asm volatile ("rsm %0\n" : : "i" (PSR_PK_MASK));
     422        asm volatile (
     423                "rsm %[mask]\n"
     424                :: [mask] "i" (PSR_PK_MASK)
     425        );
    352426}
    353427
  • kernel/arch/ia64/include/interrupt.h

    r029d94a r5bda2f3e  
    4040
    4141/** ia64 has 256 INRs. */
    42 #define INR_COUNT       256
     42#define INR_COUNT  256
    4343
    4444/*
     
    4747 * to genarch.
    4848 */
    49 #define IVT_ITEMS       0
    50 #define IVT_FIRST       0
     49#define IVT_ITEMS  0
     50#define IVT_FIRST  0
    5151
    5252/** External Interrupt vectors. */
    5353
    54 #define VECTOR_TLB_SHOOTDOWN_IPI 0xf0
    55 #define INTERRUPT_TIMER         255
    56 #define IRQ_KBD                 (0x01 + LEGACY_INTERRUPT_BASE)
    57 #define IRQ_MOUSE               (0x0c + LEGACY_INTERRUPT_BASE)
    58 #define INTERRUPT_SPURIOUS      15
    59 #define LEGACY_INTERRUPT_BASE   0x20
     54#define VECTOR_TLB_SHOOTDOWN_IPI  0xf0
     55
     56#define INTERRUPT_SPURIOUS  15
     57#define INTERRUPT_TIMER     255
     58
     59#define LEGACY_INTERRUPT_BASE  0x20
     60
     61#define IRQ_KBD    (0x01 + LEGACY_INTERRUPT_BASE)
     62#define IRQ_MOUSE  (0x0c + LEGACY_INTERRUPT_BASE)
    6063
    6164/** General Exception codes. */
    62 #define GE_ILLEGALOP            0
    63 #define GE_PRIVOP               1
    64 #define GE_PRIVREG              2
    65 #define GE_RESREGFLD            3
    66 #define GE_DISBLDISTRAN         4
    67 #define GE_ILLEGALDEP           8
     65#define GE_ILLEGALOP     0
     66#define GE_PRIVOP        1
     67#define GE_PRIVREG       2
     68#define GE_RESREGFLD     3
     69#define GE_DISBLDISTRAN  4
     70#define GE_ILLEGALDEP    8
    6871
    69 #define EOI     0               /**< The actual value doesn't matter. */
     72#define EOI  0  /**< The actual value doesn't matter. */
    7073
    7174typedef struct {
     
    100103        uint128_t f30;
    101104        uint128_t f31;
    102                
     105       
    103106        uintptr_t ar_bsp;
    104107        uintptr_t ar_bspstore;
     
    132135{
    133136        istate->cr_iip = retaddr;
    134         istate->cr_ipsr.ri = 0;         /* return to instruction slot #0 */
     137        istate->cr_ipsr.ri = 0;    /* return to instruction slot #0 */
    135138}
    136139
  • kernel/arch/ia64/include/mm/as.h

    r029d94a r5bda2f3e  
    2727 */
    2828
    29 /** @addtogroup ia64mm 
     29/** @addtogroup ia64mm
    3030 * @{
    3131 */
     
    3636#define KERN_ia64_AS_H_
    3737
    38 #define KERNEL_ADDRESS_SPACE_SHADOWED_ARCH      0
     38#define KERNEL_ADDRESS_SPACE_SHADOWED_ARCH  0
    3939
    40 #define KERNEL_ADDRESS_SPACE_START_ARCH         (unsigned long) 0xe000000000000000ULL
    41 #define KERNEL_ADDRESS_SPACE_END_ARCH           (unsigned long) 0xffffffffffffffffULL
    42 #define USER_ADDRESS_SPACE_START_ARCH           (unsigned long) 0x0000000000000000ULL
    43 #define USER_ADDRESS_SPACE_END_ARCH             (unsigned long) 0xdfffffffffffffffULL
     40#define KERNEL_ADDRESS_SPACE_START_ARCH  ((unsigned long) 0xe000000000000000ULL)
     41#define KERNEL_ADDRESS_SPACE_END_ARCH    ((unsigned long) 0xffffffffffffffffULL)
     42#define USER_ADDRESS_SPACE_START_ARCH    ((unsigned long) 0x0000000000000000ULL)
     43#define USER_ADDRESS_SPACE_END_ARCH      ((unsigned long) 0xdfffffffffffffffULL)
    4444
    45 #define USTACK_ADDRESS_ARCH     0x0000000ff0000000ULL
     45#define USTACK_ADDRESS_ARCH  0x0000000ff0000000ULL
    4646
    4747typedef struct {
     
    5050#include <genarch/mm/as_ht.h>
    5151
    52 #define as_constructor_arch(as, flags)          (as != as)
    53 #define as_destructor_arch(as)                  (as != as)
    54 #define as_create_arch(as, flags)               (as != as)
     52#define as_constructor_arch(as, flags)  (as != as)
     53#define as_destructor_arch(as)          (as != as)
     54#define as_create_arch(as, flags)       (as != as)
    5555#define as_deinstall_arch(as)
    5656#define as_invalidate_translation_cache(as, page, cnt)
  • kernel/arch/ia64/include/mm/page.h

    r029d94a r5bda2f3e  
    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
  • kernel/arch/ia64/include/mm/tlb.h

    r029d94a r5bda2f3e  
    2727 */
    2828
    29 /** @addtogroup ia64mm 
     29/** @addtogroup ia64mm
    3030 * @{
    3131 */
     
    4242
    4343/** Data and instruction Translation Register indices. */
    44 #define DTR_KERNEL      0
    45 #define ITR_KERNEL      0
    46 #define DTR_KSTACK1     4
    47 #define DTR_KSTACK2     5
     44#define DTR_KERNEL   0
     45#define ITR_KERNEL   0
     46#define DTR_KSTACK1  4
     47#define DTR_KSTACK2  5
    4848
    4949/** Portion of TLB insertion format data structure. */
    50 union tlb_entry {
     50typedef union {
    5151        uint64_t word[2];
    5252        struct {
    5353                /* Word 0 */
    54                 unsigned p : 1;                 /**< Present. */
    55                 unsigned : 1;
    56                 unsigned ma : 3;                /**< Memory attribute. */
    57                 unsigned a : 1;                 /**< Accessed. */
    58                 unsigned d : 1;                 /**< Dirty. */
    59                 unsigned pl : 2;                /**< Privilege level. */
    60                 unsigned ar : 3;                /**< Access rights. */
    61                 unsigned long long ppn : 38;    /**< Physical Page Number, a.k.a. PFN. */
    62                 unsigned : 2;
    63                 unsigned ed : 1;
    64                 unsigned ig1 : 11;
    65 
     54                unsigned int p : 1;           /**< Present. */
     55                unsigned int : 1;
     56                unsigned int ma : 3;          /**< Memory attribute. */
     57                unsigned int a : 1;           /**< Accessed. */
     58                unsigned int d : 1;           /**< Dirty. */
     59                unsigned int pl : 2;          /**< Privilege level. */
     60                unsigned int ar : 3;          /**< Access rights. */
     61                unsigned long long ppn : 38;  /**< Physical Page Number, a.k.a. PFN. */
     62                unsigned int : 2;
     63                unsigned int ed : 1;
     64                unsigned int ig1 : 11;
     65               
    6666                /* Word 1 */
    67                 unsigned : 2;
    68                 unsigned ps : 6;                /**< Page size will be 2^ps. */
    69                 unsigned key : 24;              /**< Protection key, unused. */
    70                 unsigned : 32;
     67                unsigned int : 2;
     68                unsigned int ps : 6;    /**< Page size will be 2^ps. */
     69                unsigned int key : 24;  /**< Protection key, unused. */
     70                unsigned int : 32;
    7171        } __attribute__ ((packed));
    72 } __attribute__ ((packed));
    73 typedef union tlb_entry tlb_entry_t;
     72} __attribute__ ((packed)) tlb_entry_t;
    7473
    7574extern void tc_mapping_insert(uintptr_t va, asid_t asid, tlb_entry_t entry, bool dtc);
  • kernel/arch/ia64/include/register.h

    r029d94a r5bda2f3e  
    2727 */
    2828
    29 /** @addtogroup ia64   
     29/** @addtogroup ia64
    3030 * @{
    3131 */
     
    3636#define KERN_ia64_REGISTER_H_
    3737
    38 #define CR_IVR_MASK     0xf
    39 #define PSR_IC_MASK     0x2000
    40 #define PSR_I_MASK      0x4000
    41 #define PSR_PK_MASK     0x8000
    42 
    43 #define PSR_DT_MASK     (1 << 17)
    44 #define PSR_RT_MASK     (1 << 27)
    45 
    46 #define PSR_DFL_MASK    (1 << 18)
    47 #define PSR_DFH_MASK    (1 << 19)
    48 
    49 #define PSR_IT_MASK     0x0000001000000000
    50 
    51 #define PSR_CPL_SHIFT           32
    52 #define PSR_CPL_MASK_SHIFTED    3
    53 
    54 #define PFM_MASK        (~0x3fffffffff)
    55 
    56 #define RSC_MODE_MASK   3
    57 #define RSC_PL_MASK     12
     38#define DCR_PP_MASK  (1 << 0)
     39#define DCR_BE_MASK  (1 << 1)
     40#define DCR_LC_MASK  (1 << 2)
     41#define DCR_DM_MASK  (1 << 8)
     42#define DCR_DP_MASK  (1 << 9)
     43#define DCR_DK_MASK  (1 << 10)
     44#define DCR_DX_MASK  (1 << 11)
     45#define DCR_DR_MASK  (1 << 12)
     46#define DCR_DA_MASK  (1 << 13)
     47#define DCR_DD_MASK  (1 << 14)
     48
     49#define CR_IVR_MASK  0x0f
     50
     51#define PSR_IC_MASK   (1 << 13)
     52#define PSR_I_MASK    (1 << 14)
     53#define PSR_PK_MASK   (1 << 15)
     54#define PSR_DT_MASK   (1 << 17)
     55#define PSR_DFL_MASK  (1 << 18)
     56#define PSR_DFH_MASK  (1 << 19)
     57#define PSR_RT_MASK   (1 << 27)
     58#define PSR_IT_MASK   (1 << 36)
     59
     60#define PSR_CPL_SHIFT         32
     61#define PSR_CPL_MASK_SHIFTED  3
     62
     63#define PFM_MASK  (~0x3fffffffff)
     64
     65#define RSC_MODE_MASK   3
     66#define RSC_PL_MASK     12
    5867
    5968/** Application registers. */
    60 #define AR_KR0          0
    61 #define AR_KR1          1
    62 #define AR_KR2          2
    63 #define AR_KR3          3
    64 #define AR_KR4          4
    65 #define AR_KR5          5
    66 #define AR_KR6          6
    67 #define AR_KR7          7
    68 /* AR 8-15 reserved */
    69 #define AR_RSC          16
    70 #define AR_BSP          17
    71 #define AR_BSPSTORE     18
    72 #define AR_RNAT         19
    73 /* AR 20 reserved */
    74 #define AR_FCR          21
    75 /* AR 22-23 reserved */
    76 #define AR_EFLAG        24
    77 #define AR_CSD          25
    78 #define AR_SSD          26
    79 #define AR_CFLG         27
    80 #define AR_FSR          28
    81 #define AR_FIR          29
    82 #define AR_FDR          30
    83 /* AR 31 reserved */
    84 #define AR_CCV          32
    85 /* AR 33-35 reserved */
    86 #define AR_UNAT         36
    87 /* AR 37-39 reserved */
    88 #define AR_FPSR         40
    89 /* AR 41-43 reserved */
    90 #define AR_ITC          44
    91 /* AR 45-47 reserved */
    92 /* AR 48-63 ignored */
    93 #define AR_PFS          64
    94 #define AR_LC           65
    95 #define AR_EC           66
    96 /* AR 67-111 reserved */
    97 /* AR 112-127 ignored */
     69#define AR_KR0       0
     70#define AR_KR1       1
     71#define AR_KR2       2
     72#define AR_KR3       3
     73#define AR_KR4       4
     74#define AR_KR5       5
     75#define AR_KR6       6
     76#define AR_KR7       7
     77/* ARs 8-15 are reserved */
     78#define AR_RSC       16
     79#define AR_BSP       17
     80#define AR_BSPSTORE  18
     81#define AR_RNAT      19
     82/* AR 20 is reserved */
     83#define AR_FCR       21
     84/* ARs 22-23 are reserved */
     85#define AR_EFLAG     24
     86#define AR_CSD       25
     87#define AR_SSD       26
     88#define AR_CFLG      27
     89#define AR_FSR       28
     90#define AR_FIR       29
     91#define AR_FDR       30
     92/* AR 31 is reserved */
     93#define AR_CCV       32
     94/* ARs 33-35 are reserved */
     95#define AR_UNAT      36
     96/* ARs 37-39 are reserved */
     97#define AR_FPSR      40
     98/* ARs 41-43 are reserved */
     99#define AR_ITC       44
     100/* ARs 45-47 are reserved */
     101/* ARs 48-63 are ignored */
     102#define AR_PFS       64
     103#define AR_LC        65
     104#define AR_EC        66
     105/* ARs 67-111 are reserved */
     106/* ARs 112-127 are ignored */
    98107
    99108/** Control registers. */
    100 #define CR_DCR          0
    101 #define CR_ITM          1
    102 #define CR_IVA          2
    103 /* CR3-CR7 reserved */
    104 #define CR_PTA          8
    105 /* CR9-CR15 reserved */
    106 #define CR_IPSR         16
    107 #define CR_ISR          17
    108 /* CR18 reserved */
    109 #define CR_IIP          19
    110 #define CR_IFA          20
    111 #define CR_ITIR         21
    112 #define CR_IIPA         22
    113 #define CR_IFS          23
    114 #define CR_IIM          24
    115 #define CR_IHA          25
    116 /* CR26-CR63 reserved */
    117 #define CR_LID          64
    118 #define CR_IVR          65
    119 #define CR_TPR          66
    120 #define CR_EOI          67
    121 #define CR_IRR0         68
    122 #define CR_IRR1         69
    123 #define CR_IRR2         70
    124 #define CR_IRR3         71
    125 #define CR_ITV          72
    126 #define CR_PMV          73
    127 #define CR_CMCV         74
    128 /* CR75-CR79 reserved */
    129 #define CR_LRR0         80
    130 #define CR_LRR1         81
    131 /* CR82-CR127 reserved */
     109#define CR_DCR   0
     110#define CR_ITM   1
     111#define CR_IVA   2
     112/* CR3-CR7 are reserved */
     113#define CR_PTA   8
     114/* CR9-CR15 are reserved */
     115#define CR_IPSR  16
     116#define CR_ISR   17
     117/* CR18 is reserved */
     118#define CR_IIP   19
     119#define CR_IFA   20
     120#define CR_ITIR  21
     121#define CR_IIPA  22
     122#define CR_IFS   23
     123#define CR_IIM   24
     124#define CR_IHA   25
     125/* CR26-CR63 are reserved */
     126#define CR_LID   64
     127#define CR_IVR   65
     128#define CR_TPR   66
     129#define CR_EOI   67
     130#define CR_IRR0  68
     131#define CR_IRR1  69
     132#define CR_IRR2  70
     133#define CR_IRR3  71
     134#define CR_ITV   72
     135#define CR_PMV   73
     136#define CR_CMCV  74
     137/* CR75-CR79 are reserved */
     138#define CR_LRR0  80
     139#define CR_LRR1  81
     140/* CR82-CR127 are reserved */
    132141
    133142#ifndef __ASM__
     
    136145
    137146/** Processor Status Register. */
    138 union psr {
    139         uint64_t value;
    140         struct {
    141                 unsigned : 1;
    142                 unsigned be : 1;        /**< Big-Endian data accesses. */
    143                 unsigned up : 1;        /**< User Performance monitor enable. */
    144                 unsigned ac : 1;        /**< Alignment Check. */
    145                 unsigned mfl : 1;       /**< Lower floating-point register written. */
    146                 unsigned mfh : 1;       /**< Upper floating-point register written. */
    147                 unsigned : 7;
    148                 unsigned ic : 1;        /**< Interruption Collection. */
    149                 unsigned i : 1;         /**< Interrupt Bit. */
    150                 unsigned pk : 1;        /**< Protection Key enable. */
    151                 unsigned : 1;
    152                 unsigned dt : 1;        /**< Data address Translation. */
    153                 unsigned dfl : 1;       /**< Disabled Floating-point Low register set. */
    154                 unsigned dfh : 1;       /**< Disabled Floating-point High register set. */
    155                 unsigned sp : 1;        /**< Secure Performance monitors. */
    156                 unsigned pp : 1;        /**< Privileged Performance monitor enable. */
    157                 unsigned di : 1;        /**< Disable Instruction set transition. */
    158                 unsigned si : 1;        /**< Secure Interval timer. */
    159                 unsigned db : 1;        /**< Debug Breakpoint fault. */
    160                 unsigned lp : 1;        /**< Lower Privilege transfer trap. */
    161                 unsigned tb : 1;        /**< Taken Branch trap. */
    162                 unsigned rt : 1;        /**< Register Stack Translation. */
    163                 unsigned : 4;
    164                 unsigned cpl : 2;       /**< Current Privilege Level. */
    165                 unsigned is : 1;        /**< Instruction Set. */
    166                 unsigned mc : 1;        /**< Machine Check abort mask. */
    167                 unsigned it : 1;        /**< Instruction address Translation. */
    168                 unsigned id : 1;        /**< Instruction Debug fault disable. */
    169                 unsigned da : 1;        /**< Disable Data Access and Dirty-bit faults. */
    170                 unsigned dd : 1;        /**< Data Debug fault disable. */
    171                 unsigned ss : 1;        /**< Single Step enable. */
    172                 unsigned ri : 2;        /**< Restart Instruction. */
    173                 unsigned ed : 1;        /**< Exception Deferral. */
    174                 unsigned bn : 1;        /**< Register Bank. */
    175                 unsigned ia : 1;        /**< Disable Instruction Access-bit faults. */
    176         } __attribute__ ((packed));
    177 };
    178 typedef union psr psr_t;
     147typedef union {
     148        uint64_t value;
     149        struct {
     150                unsigned int : 1;
     151                unsigned int be : 1;   /**< Big-Endian data accesses. */
     152                unsigned int up : 1;   /**< User Performance monitor enable. */
     153                unsigned int ac : 1;   /**< Alignment Check. */
     154                unsigned int mfl : 1;  /**< Lower floating-point register written. */
     155                unsigned int mfh : 1;  /**< Upper floating-point register written. */
     156                unsigned int : 7;
     157                unsigned int ic : 1;   /**< Interruption Collection. */
     158                unsigned int i : 1;    /**< Interrupt Bit. */
     159                unsigned int pk : 1;   /**< Protection Key enable. */
     160                unsigned int : 1;
     161                unsigned int dt : 1;   /**< Data address Translation. */
     162                unsigned int dfl : 1;  /**< Disabled Floating-point Low register set. */
     163                unsigned int dfh : 1;  /**< Disabled Floating-point High register set. */
     164                unsigned int sp : 1;   /**< Secure Performance monitors. */
     165                unsigned int pp : 1;   /**< Privileged Performance monitor enable. */
     166                unsigned int di : 1;   /**< Disable Instruction set transition. */
     167                unsigned int si : 1;   /**< Secure Interval timer. */
     168                unsigned int db : 1;   /**< Debug Breakpoint fault. */
     169                unsigned int lp : 1;   /**< Lower Privilege transfer trap. */
     170                unsigned int tb : 1;   /**< Taken Branch trap. */
     171                unsigned int rt : 1;   /**< Register Stack Translation. */
     172                unsigned int : 4;
     173                unsigned int cpl : 2;  /**< Current Privilege Level. */
     174                unsigned int is : 1;   /**< Instruction Set. */
     175                unsigned int mc : 1;   /**< Machine Check abort mask. */
     176                unsigned int it : 1;   /**< Instruction address Translation. */
     177                unsigned int id : 1;   /**< Instruction Debug fault disable. */
     178                unsigned int da : 1;   /**< Disable Data Access and Dirty-bit faults. */
     179                unsigned int dd : 1;   /**< Data Debug fault disable. */
     180                unsigned int ss : 1;   /**< Single Step enable. */
     181                unsigned int ri : 2;   /**< Restart Instruction. */
     182                unsigned int ed : 1;   /**< Exception Deferral. */
     183                unsigned int bn : 1;   /**< Register Bank. */
     184                unsigned int ia : 1;   /**< Disable Instruction Access-bit faults. */
     185        } __attribute__ ((packed));
     186} psr_t;
    179187
    180188/** Register Stack Configuration Register */
    181 union rsc {
    182         uint64_t value;
    183         struct {
    184                 unsigned mode : 2;
    185                 unsigned pl : 2;        /**< Privilege Level. */
    186                 unsigned be : 1;        /**< Big-endian. */
    187                 unsigned : 11;
    188                 unsigned loadrs : 14;
    189         } __attribute__ ((packed));
    190 };
    191 typedef union rsc rsc_t;
     189typedef union {
     190        uint64_t value;
     191        struct {
     192                unsigned int mode : 2;
     193                unsigned int pl : 2;    /**< Privilege Level. */
     194                unsigned int be : 1;    /**< Big-endian. */
     195                unsigned int : 11;
     196                unsigned int loadrs : 14;
     197        } __attribute__ ((packed));
     198} rsc_t;
    192199
    193200/** External Interrupt Vector Register */
    194 union cr_ivr {
    195         uint8_t  vector;
    196         uint64_t value;
    197 };
    198 
    199 typedef union cr_ivr cr_ivr_t;
     201typedef union {
     202        uint8_t vector;
     203        uint64_t value;
     204} cr_ivr_t;
    200205
    201206/** Task Priority Register */
    202 union cr_tpr {
    203         struct {
    204                 unsigned : 4;
    205                 unsigned mic: 4;                /**< Mask Interrupt Class. */
    206                 unsigned : 8;
    207                 unsigned mmi: 1;                /**< Mask Maskable Interrupts. */
    208         } __attribute__ ((packed));
    209         uint64_t value;
    210 };
    211 
    212 typedef union cr_tpr cr_tpr_t;
     207typedef union {
     208        uint64_t value;
     209        struct {
     210                unsigned int : 4;
     211                unsigned int mic: 4;  /**< Mask Interrupt Class. */
     212                unsigned int : 8;
     213                unsigned int mmi: 1;  /**< Mask Maskable Interrupts. */
     214        } __attribute__ ((packed));
     215} cr_tpr_t;
    213216
    214217/** Interval Timer Vector */
    215 union cr_itv {
    216         struct {
    217                 unsigned vector : 8;
    218                 unsigned : 4;
    219                 unsigned : 1;
    220                 unsigned : 3;
    221                 unsigned m : 1;                 /**< Mask. */
    222         } __attribute__ ((packed));
    223         uint64_t value;
    224 };
    225 
    226 typedef union cr_itv cr_itv_t;
     218typedef union {
     219        uint64_t value;
     220        struct {
     221                unsigned int vector : 8;
     222                unsigned int : 4;
     223                unsigned int : 1;
     224                unsigned int : 3;
     225                unsigned int m : 1;       /**< Mask. */
     226        } __attribute__ ((packed));
     227} cr_itv_t;
    227228
    228229/** Interruption Status Register */
    229 union cr_isr {
     230typedef union {
     231        uint64_t value;
    230232        struct {
    231233                union {
    232234                        /** General Exception code field structuring. */
     235                        uint16_t code;
    233236                        struct {
    234                                 unsigned ge_na : 4;
    235                                 unsigned ge_code : 4;
     237                                unsigned int ge_na : 4;
     238                                unsigned int ge_code : 4;
    236239                        } __attribute__ ((packed));
    237                         uint16_t code;
    238240                };
    239241                uint8_t vector;
    240                 unsigned : 8;
    241                 unsigned x : 1;                 /**< Execute exception. */
    242                 unsigned w : 1;                 /**< Write exception. */
    243                 unsigned r : 1;                 /**< Read exception. */
    244                 unsigned na : 1;                /**< Non-access exception. */
    245                 unsigned sp : 1;                /**< Speculative load exception. */
    246                 unsigned rs : 1;                /**< Register stack. */
    247                 unsigned ir : 1;                /**< Incomplete Register frame. */
    248                 unsigned ni : 1;                /**< Nested Interruption. */
    249                 unsigned so : 1;                /**< IA-32 Supervisor Override. */
    250                 unsigned ei : 2;                /**< Excepting Instruction. */
    251                 unsigned ed : 1;                /**< Exception Deferral. */
    252                 unsigned : 20;
    253         } __attribute__ ((packed));
    254         uint64_t value;
    255 };
    256 
    257 typedef union cr_isr cr_isr_t;
     242                unsigned int : 8;
     243                unsigned int x : 1;   /**< Execute exception. */
     244                unsigned int w : 1;   /**< Write exception. */
     245                unsigned int r : 1;   /**< Read exception. */
     246                unsigned int na : 1;  /**< Non-access exception. */
     247                unsigned int sp : 1;  /**< Speculative load exception. */
     248                unsigned int rs : 1;  /**< Register stack. */
     249                unsigned int ir : 1;  /**< Incomplete Register frame. */
     250                unsigned int ni : 1;  /**< Nested Interruption. */
     251                unsigned int so : 1;  /**< IA-32 Supervisor Override. */
     252                unsigned int ei : 2;  /**< Excepting Instruction. */
     253                unsigned int ed : 1;  /**< Exception Deferral. */
     254                unsigned int : 20;
     255        } __attribute__ ((packed));
     256} cr_isr_t;
    258257
    259258/** CPUID Register 3 */
    260 union cpuid3 {
     259typedef union {
     260        uint64_t value;
    261261        struct {
    262262                uint8_t number;
     
    266266                uint8_t archrev;
    267267        } __attribute__ ((packed));
    268         uint64_t value;
    269 };
    270 
    271 typedef union cpuid3 cpuid3_t;
     268} cpuid3_t;
    272269
    273270#endif /* !__ASM__ */
Note: See TracChangeset for help on using the changeset viewer.