Subversion Repositories HelenOS-historic

Rev

Rev 715 | Rev 747 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Copyright (C) 2005 Jakub Jermar
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions
  7.  * are met:
  8.  *
  9.  * - Redistributions of source code must retain the above copyright
  10.  *   notice, this list of conditions and the following disclaimer.
  11.  * - Redistributions in binary form must reproduce the above copyright
  12.  *   notice, this list of conditions and the following disclaimer in the
  13.  *   documentation and/or other materials provided with the distribution.
  14.  * - The name of the author may not be used to endorse or promote products
  15.  *   derived from this software without specific prior written permission.
  16.  *
  17.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  18.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  19.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  20.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  21.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  22.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  23.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  24.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  26.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27.  */
  28.  
  29. #ifndef __ia64_PAGE_H__
  30. #define __ia64_PAGE_H__
  31.  
  32. #include <arch/types.h>
  33. #include <arch/mm/frame.h>
  34.  
  35. #define PAGE_SIZE   FRAME_SIZE
  36. #define PAGE_WIDTH  FRAME_WIDTH
  37.  
  38. #define KA2PA(x)    ((__address) (x))
  39. #define PA2KA(x)    ((__address) (x))
  40.  
  41. #define GET_PTL0_ADDRESS_ARCH()         ((pte_t *) 0)
  42. #define SET_PTL0_ADDRESS_ARCH(ptl0)
  43.  
  44. /** Implementation of page hash table interface. */
  45. #define HT_ENTRIES_ARCH         0
  46. #define HT_HASH_ARCH(page, asid)    0
  47. #define HT_COMPARE_ARCH(page, asid, t)  0
  48. #define HT_SLOT_EMPTY_ARCH(t)       1
  49. #define HT_INVALIDATE_SLOT_ARCH(t)
  50. #define HT_GET_NEXT_ARCH(t)     0
  51. #define HT_SET_NEXT_ARCH(t, s)
  52. #define HT_SET_RECORD_ARCH(t, page, asid, frame, flags)
  53.  
  54. #define REGION_RID_MAIN 0
  55. #define REGION_RID_FIRST_INVALID 16
  56. #define REGION_REGISTERS 8
  57.  
  58. #define VHPT_WIDTH 16         /*64kB*/
  59. #define VHPT_SIZE (1<<VHPT_WIDTH)
  60.  
  61. #define VHPT_BASE 0           /* Must be aligned to VHPT_SIZE */
  62.  
  63. struct VHPT_tag_info
  64. {
  65.     unsigned long long tag       :63;
  66.     unsigned           ti        : 1;
  67. }__attribute__ ((packed));
  68.  
  69. union VHPT_tag
  70. {
  71.     struct VHPT_tag_info tag_info;
  72.     unsigned             tag_word;
  73. };
  74.  
  75. struct VHPT_entry_present
  76. {
  77.  
  78.     /* Word 0 */
  79.     unsigned p              : 1;
  80.     unsigned rv0            : 1;
  81.     unsigned ma             : 3;
  82.     unsigned a              : 1;
  83.     unsigned d              : 1;
  84.     unsigned pl             : 2;
  85.     unsigned ar             : 3;
  86.     unsigned long long ppn  :38;
  87.     unsigned rv1            : 2;
  88.     unsigned ed             : 1;
  89.     unsigned ig1            :11;
  90.    
  91.     /* Word 1 */
  92.     unsigned rv2            : 2;
  93.     unsigned ps             : 6;
  94.     unsigned key            :24;
  95.     unsigned rv3            :32;
  96.    
  97.     /* Word 2 */
  98.     union VHPT_tag tag;       /*This data is here as union because I'm not sure if anybody nead access to areas ti and tag in VHPT entry*/
  99.                             /* But I'm almost sure we nead access to whole word so there are both possibilities*/
  100.     /* Word 3 */                                                   
  101.     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*/
  102.    
  103. }__attribute__ ((packed));
  104.  
  105. struct VHPT_entry_not_present
  106. {
  107.     /* Word 0 */
  108.     unsigned p              : 1;
  109.     unsigned long long ig0  :52;
  110.     unsigned ig1            :11;
  111.    
  112.     /* Word 1 */
  113.     unsigned rv2            : 2;
  114.     unsigned ps             : 6;
  115.     unsigned long long ig2  :56;
  116.  
  117.    
  118.     /* Word 2 */
  119.     union VHPT_tag tag;       /*This data is here as union because I'm not sure if anybody nead access to areas ti and tag in VHPT entry*/
  120.                             /* But I'm almost sure we nead access to whole word so there are both possibilities*/
  121.     /* Word 3 */                                                   
  122.     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*/
  123.    
  124. }__attribute__ ((packed));
  125.  
  126. typedef union VHPT_entry
  127. {
  128.     struct VHPT_entry_present        present;
  129.     struct VHPT_entry_not_present    not_present;
  130. }VHPT_entry;
  131.  
  132. extern void page_arch_init(void);
  133.  
  134.  
  135. struct region_register_map
  136. {
  137.   unsigned ve            : 1;
  138.     unsigned r0            : 1;
  139.     unsigned ps            : 6;
  140.     unsigned rid           :24;
  141.     unsigned r1            :32;
  142. }__attribute__ ((packed));
  143.  
  144.  
  145. typedef union region_register
  146. {
  147.     struct region_register_map   map;
  148.     unsigned long long           word;
  149. }region_register;
  150.  
  151. struct PTA_register_map
  152. {
  153.   unsigned ve            : 1;
  154.     unsigned r0            : 1;
  155.     unsigned size          : 6;
  156.     unsigned vf            : 1;
  157.     unsigned r1            : 6;
  158.     unsigned long long base:49;
  159. }__attribute__ ((packed));
  160.  
  161.  
  162. typedef union PTA_register
  163. {
  164.     struct PTA_register_map   map;
  165.     unsigned long long        word;
  166. }PTA_register;
  167.  
  168.  
  169. #endif
  170.