--- /dev/null
+#ifndef _ARCH_X86_64_PAGE_TABLE_H
+#define _ARCH_X86_64_PAGE_TABLE_H
+
+typedef struct {
+ uint64_t
+ present :1, /* Is there a physical page? */
+ write :1, /* Is the page writable? */
+ user :1, /* Is the page accessible to user-space? */
+ pwt :1, /* Is the page write-through cached? */
+ pcd :1, /* Is the page uncached? */
+ accessed :1, /* Has the page been read? */
+ dirty :1, /* Has the page been written to? */
+ pagesize :1, /* 0 == 4KB, 1 == (2 MB || 1 GB) */
+ global :1, /* Is the page mapped in all address spaces? */
+ os_bits_1 :3, /* Available for us! */
+ base_paddr :40, /* Bits [51,12] of base address. */
+ os_bits_2 :11, /* Available for us! */
+ no_exec :1; /* Is the page executable? */
+} xpte_t;
+
+typedef struct {
+ uint64_t
+ present :1, /* Is there a physical page? */
+ write :1, /* Is the page writable? */
+ user :1, /* Is the page accessible to user-space? */
+ pwt :1, /* Is the page write-through cached? */
+ pcd :1, /* Is the page uncached? */
+ accessed :1, /* Has the page been read? */
+ dirty :1, /* Has the page been written to? */
+ pat :1, /* Page attribute table bit. */
+ global :1, /* Is the page mapped in all address spaces? */
+ os_bits_1 :3, /* Available for us! */
+ base_paddr :40, /* Bits [51,12] of page's base physical addr. */
+ os_bits_2 :11, /* Available for us! */
+ no_exec :1; /* Is the page executable? */
+} xpte_4KB_t;
+
+typedef struct {
+ uint64_t
+ present :1, /* Is there a physical page? */
+ write :1, /* Is the page writable? */
+ user :1, /* Is the page accessible to user-space? */
+ pwt :1, /* Is the page write-through cached? */
+ pcd :1, /* Is the page uncached? */
+ accessed :1, /* Has the page been read? */
+ dirty :1, /* Has the page been written to? */
+ must_be_1 :1, /* Must be 1 to indicate a 2 MB page. */
+ global :1, /* Is the page mapped in all address spaces? */
+ os_bits_1 :3, /* Available for us! */
+ pat :1, /* Page attribute table bit. */
+ must_be_0 :8, /* Reserved, must be zero. */
+ base_paddr :31, /* Bits [51,21] of page's base physical addr. */
+ os_bits_2 :11, /* Available for us! */
+ no_exec :1; /* Is the page executable? */
+} xpte_2MB_t;
+
+typedef struct {
+ uint64_t
+ present :1, /* Is there a physical page? */
+ write :1, /* Is the page writable? */
+ user :1, /* Is the page accessible to user-space? */
+ pwt :1, /* Is the page write-through cached? */
+ pcd :1, /* Is the page uncached? */
+ accessed :1, /* Has the page been read? */
+ dirty :1, /* Has the page been written to? */
+ must_be_1 :1, /* Must be 1 to indicate a 1GB page. */
+ global :1, /* Is the page mapped in all address spaces? */
+ os_bits_1 :3, /* Available for us! */
+ pat :1, /* Page attribute table bit. */
+ must_be_0 :17, /* Reserved, must be zero. */
+ base_paddr :22, /* Bits [51,30] of page's base physical addr. */
+ os_bits_2 :11, /* Available for us! */
+ no_exec :1; /* Is the page executable? */
+} xpte_1GB_t;
+
+#endif