af46178d9db09ba85a9a7b41551bc1d5dca1f4b9
[reactos.git] / reactos / boot / freeldr / freeldr / include / arch / amd64 / amd64.h
1 /*
2 * FreeLoader
3 *
4 * Copyright (C) 2003 Eric Kohl
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along
17 * with this program; if not, write to the Free Software Foundation, Inc.,
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 */
20
21 #pragma once
22
23 // This is needed because headers define wrong one for ReactOS
24 #undef KIP0PCRADDRESS
25 #define KIP0PCRADDRESS 0xFFFFF78000001000ULL /* FIXME!!! */
26
27 #define STACK64ADDR 0x74000 /* The 64-bit stack top will be at 0x74000 */
28
29 /* Long mode selectors */
30 #define LMODE_CS 0x10
31 #define LMODE_DS 0x18
32 #define RMODE_CS 0x20 /* RMode code selector, base 0 limit 64k */
33 #define RMODE_DS 0x28 /* RMode data selector, base 0 limit 64k */
34 #define CMODE_CS 0x30
35
36 #define VA_MASK 0x0000FFFFFFFFFFFFUL
37
38 #define PtrToPfn(p) \
39 ((((ULONGLONG)p) >> PAGE_SHIFT) & 0xfffffffULL)
40
41 #define VAtoPXI(va) ((((ULONG64)va) >> PXI_SHIFT) & 0x1FF)
42 #define VAtoPPI(va) ((((ULONG64)va) >> PPI_SHIFT) & 0x1FF)
43 #define VAtoPDI(va) ((((ULONG64)va) >> PDI_SHIFT) & 0x1FF)
44 #define VAtoPTI(va) ((((ULONG64)va) >> PTI_SHIFT) & 0x1FF)
45
46 #define HYPERSPACE_BASE 0xfffff70000000000ULL
47 #define HAL_BASE 0xffffffff80000000ULL
48 #define APIC_BASE 0xfffffffffee00000ULL // FIXME
49
50 #define APIC_PHYS_BASE 0xfee00000
51
52 #define NUM_PAGES_KERNEL
53
54 #ifndef ASM
55 typedef struct _PAGE_DIRECTORY_AMD64
56 {
57 HARDWARE_PTE Pde[512];
58 } PAGE_DIRECTORY_AMD64, *PPAGE_DIRECTORY_AMD64;
59
60
61 VOID FrLdrSetupGdtIdt();
62
63 #endif
64
65 /* EOF */