Subversion Repositories HelenOS-historic

Rev

Rev 699 | Rev 715 | 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.  
  37. #define KA2PA(x)    ((__address) (x))
  38. #define PA2KA(x)    ((__address) (x))
  39.  
  40. #define GET_PTL0_ADDRESS_ARCH()         ((pte_t *) 0)
  41. #define SET_PTL0_ADDRESS_ARCH(ptl0)
  42.  
  43. /** Implementation of page hash table interface. */
  44. #define HT_HASH_ARCH(page, asid)    0
  45. #define HT_COMPARE_ARCH(page, asid, t)  0
  46. #define HT_SLOT_EMPTY_ARCH(t)       1
  47. #define HT_GET_NEXT_ARCH(t)     0
  48. #define HT_SET_NEXT_ARCH(t, s)
  49. #define HT_SET_RECORD_ARCH(t, page, asid, frame, flags)
  50.  
  51. struct VHPT_tag_info
  52. {
  53.     unsigned long long tag       :63;
  54.     unsigned           ti        : 1;
  55. }__attribute__ ((packed));
  56.  
  57. union VHPT_tag
  58. {
  59.     struct VHPT_tag_info tag_info;
  60.     unsigned             tag_word;
  61. };
  62.  
  63. struct VHPT_entry_present
  64. {
  65.  
  66.     /* Word 0 */
  67.     unsigned p              : 1;
  68.     unsigned rv0            : 1;
  69.     unsigned ma             : 3;
  70.     unsigned a              : 1;
  71.     unsigned d              : 1;
  72.     unsigned pl             : 2;
  73.     unsigned ar             : 3;
  74.     unsigned long long ppn  :38;
  75.     unsigned rv1            : 2;
  76.     unsigned ed             : 1;
  77.     unsigned ig1            :11;
  78.    
  79.     /* Word 1 */
  80.     unsigned rv2            : 2;
  81.     unsigned ps             : 6;
  82.     unsigned key            :24;
  83.     unsigned rv3            :32;
  84.    
  85.     /* Word 2 */
  86.     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*/
  87.                             /* But I'm almost sure we nead access to whole word so there are both possibilities*/
  88.     /* Word 3 */                                                   
  89.     unsigned long long next :64;
  90.    
  91. }__attribute__ ((packed));
  92.  
  93. struct VHPT_entry_not_present
  94. {
  95.     /* Word 0 */
  96.     unsigned p              : 1;
  97.     unsigned long long ig0  :52;
  98.     unsigned ig1            :11;
  99.    
  100.     /* Word 1 */
  101.     unsigned rv2            : 2;
  102.     unsigned ps             : 6;
  103.     unsigned long long ig2  :56;
  104.  
  105.    
  106.     /* Word 2 */
  107.     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*/
  108.                             /* But I'm almost sure we nead access to whole word so there are both possibilities*/
  109.     /* Word 3 */                                                   
  110.     unsigned long long next :64;
  111.    
  112. }__attribute__ ((packed));
  113.  
  114. typedef union VHPT_entry
  115. {
  116.     struct VHPT_entry_present        present;
  117.     struct VHPT_entry_not_present    not_present;
  118. }VHPT_entry;
  119.  
  120. extern void page_arch_init(void);
  121.  
  122. #endif
  123.