Changeset fd537a0 in mainline


Ignore:
Timestamp:
2006-01-15T18:05:11Z (19 years ago)
Author:
Jakub Vana <jakub.vana@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ae10582
Parents:
4be51c8
Message:

VHPT setup to be able to use ttag and thash instructions

Location:
arch/ia64
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • arch/ia64/include/mm/frame.h

    r4be51c8 rfd537a0  
    3030#define __ia64_FRAME_H__
    3131
    32 #define FRAME_SIZE              (16*1024)
     32#define FRAME_WIDTH   14
     33#define FRAME_SIZE              (1<<FRAME_WIDTH)
    3334
    3435extern void frame_arch_init(void);
  • arch/ia64/include/mm/page.h

    r4be51c8 rfd537a0  
    3434
    3535#define PAGE_SIZE       FRAME_SIZE
     36#define PAGE_WIDTH      FRAME_WIDTH
    3637
    3738#define KA2PA(x)        ((__address) (x))
     
    4849#define HT_SET_NEXT_ARCH(t, s)
    4950#define HT_SET_RECORD_ARCH(t, page, asid, frame, flags)
     51
     52#define REGION_RID_MAIN 0
     53#define REGION_RID_FIRST_INVALID 16
     54#define REGION_REGISTERS 8
     55
     56#define VHPT_WIDTH 16         /*64kB*/
     57#define VHPT_SIZE (1<<VHPT_WIDTH)
     58
     59#define VHPT_BASE 0           /* Must be aligned to VHPT_SIZE */
    5060
    5161struct VHPT_tag_info
     
    8797                            /* But I'm almost sure we nead access to whole word so there are both possibilities*/
    8898        /* Word 3 */                                                                                                   
    89         unsigned long long next :64;
     99        unsigned long long next :64; /* This ignored field will be (in my hopes ;-) ) used as pointer in link list of entries with same hash value*/
    90100       
    91101}__attribute__ ((packed));
     
    108118                            /* But I'm almost sure we nead access to whole word so there are both possibilities*/
    109119        /* Word 3 */                                                                                                   
    110         unsigned long long next :64;
     120        unsigned long long next :64; /* This ignored field will be (in my hopes ;-) ) used as pointer in link list of entries with same hash value*/
    111121       
    112122}__attribute__ ((packed));
     
    120130extern void page_arch_init(void);
    121131
     132
     133struct region_register_map
     134{
     135  unsigned ve            : 1;
     136        unsigned r0            : 1;
     137        unsigned ps            : 6;
     138        unsigned rid           :24;
     139        unsigned r1            :32;
     140}__attribute__ ((packed));
     141
     142
     143typedef union region_register
     144{
     145        struct region_register_map   map;
     146        unsigned long long           word;
     147}region_register;
     148
     149struct PTA_register_map
     150{
     151  unsigned ve            : 1;
     152        unsigned r0            : 1;
     153        unsigned size          : 6;
     154        unsigned vf            : 1;
     155        unsigned r1            : 6;
     156        unsigned long long base:49;
     157}__attribute__ ((packed));
     158
     159
     160typedef union PTA_register
     161{
     162        struct PTA_register_map   map;
     163        unsigned long long        word;
     164}PTA_register;
     165
     166
    122167#endif
  • arch/ia64/src/mm/page.c

    r4be51c8 rfd537a0  
    3333#include <panic.h>
    3434
     35
     36static void set_VHPT_environment(void)
     37{
     38        /*
     39        TODO:
     40        */
     41       
     42        int i;
     43       
     44        /* First set up REGION REGISTER 0 */
     45       
     46        region_register rr;
     47        rr.map.ve=0;                  /*Disable Walker*/
     48        rr.map.ps=PAGE_WIDTH;
     49        rr.map.rid=REGION_RID_MAIN;
     50       
     51        asm
     52        (
     53                "mov rr[r0]=%0;;"
     54                :
     55                :"r"(rr.word)
     56        );
     57               
     58        /* And Invalidate the rest of REGION REGISTERS */
     59       
     60        for(i=1;i<REGION_REGISTERS;i++)
     61        {
     62                rr.map.rid=REGION_RID_FIRST_INVALID+i-1;
     63                asm
     64                (
     65                        "mov r8=%1;;"
     66                        "mov rr[r8]=%0;;"
     67                        :
     68                        :"r"(rr.word),"r"(i)
     69                        :"r8"
     70                );
     71        };
     72
     73        PTA_register pta;
     74        pta.map.ve=0;                   /*Disable Walker*/
     75        pta.map.vf=1;                   /*Large entry format*/
     76        pta.map.size=VHPT_WIDTH;
     77        pta.map.base=VHPT_BASE;
     78       
     79       
     80        /*Write PTA*/
     81        asm
     82        (
     83                "mov cr8=%0;;"
     84                :
     85                :"r"(pta.word)
     86        );     
     87       
     88}       
     89
     90
    3591void page_arch_init(void)
    3692{
    3793        page_operations = &page_ht_operations;
     94        set_VHPT_environment();
    3895}
Note: See TracChangeset for help on using the changeset viewer.