Changeset 24790 in vbox for trunk/src/VBox
- Timestamp:
- Nov 19, 2009 2:21:54 PM (15 years ago)
- Location:
- trunk/src/VBox/Devices/EFI
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/EFI/DevEFI.cpp
r24706 r24790 785 785 pEfiInfo->cbBelow4GB = pThis->cbBelow4GB; 786 786 pEfiInfo->cbAbove4GB = pThis->cbAbove4GB; 787 pEfiInfo->fFlags = 0; 787 pEfiInfo->fFlags = 0; /* todo 0 bit makes 64-bit fw to boot need some knitting with GUI */ 788 788 pEfiInfo->cCpus = pThis->cCpus; 789 789 pEfiInfo->pfnPeiEP = (uint32_t)pThis->GCEntryPoint1; -
trunk/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/DevEFI.h
r23400 r24790 118 118 /** 0x18 - Amount of memory above 4GB (in bytes). */ 119 119 uint64_t cbAbove4GB; 120 /** 0x20 - Flags reserved for future use, must be zero.*/120 /** 0x20 - see flags values below */ 121 121 uint32_t fFlags; 122 122 /** 0x24 - The nubmer of Virtual CPUs. */ … … 135 135 /** The physical address where DEVEFIINFO can be found. */ 136 136 #define DEVEFI_INFO_PHYS_ADDR (0xfffff000) 137 #define DEVEFI_INFO_FLAGS_X64 RT_BIT(0) 137 138 138 139 /** @} */ -
trunk/src/VBox/Devices/EFI/Firmware2/VBoxPkg/Include/DevEFI.mac
r23400 r24790 55 55 56 56 %define DEVEFI_INFO_PHYS_ADDR (0xfffff000) 57 %define DEVEFI_INFO_FLAGS_X64 RT_BIT(0) 57 58 58 59 %endif -
trunk/src/VBox/Devices/EFI/Thunk/EfiThunk.asm
r23400 r24790 30 30 %define IDT_VECTORS 128 31 31 ;; keep in sync with actual GDT size 32 %define GDT_SELECTORS 732 %define GDT_SELECTORS 10 33 33 34 34 … … 79 79 dw 0xffff, 0, 0x9300, 0x0000 ; 16 bit data segment base=0x0 limit=0xffff - FIXME: ditto. 80 80 dw 0xffff, 0, 0x9300, 0x00cf ; 32 bit flat stack segment (0x30) 81 dw 0xffff, 0, 0x9a00, 0x00af ; 64 bit flat code segment (0x38) 82 dw 0, 0, 0, 0 ; ditto 83 dw 0, 0, 0, 0 ; ditto 81 84 82 85 ;; For lidt … … 93 96 db 0x0f ; base 23:16 94 97 db 0x00 ; unused 95 96 98 97 99 BITS 32 98 100 … … 137 139 BITS 16 138 140 ;; 139 ; This i sthe place where we jump immediately after boot and141 ; This i the place where we jump immediately after boot and 140 142 ; switch the CPU into protected mode. 141 143 ; … … 207 209 ; around all it wants for all we care. 208 210 ; 211 mov eax,[0xfffff000 + DEVEFIINFO.fFlags] 212 and eax, DEVEFI_INFO_FLAGS_X64 213 jnz trampoline_64 209 214 mov ebp, [0xfffff000 + DEVEFIINFO.PhysFwVol] 210 215 mov esi, [0xfffff000 + DEVEFIINFO.pfnFirmwareEP] … … 212 217 jmp [0xfffff000 + DEVEFIINFO.pfnFirmwareEP] 213 218 jmp HaltForEver 219 trampoline_64: 220 %macro fill_pkt 1 221 %%loop: 222 mov [ebx],eax 223 xor edx,edx 224 mov [ebx + 4], edx 225 add ebx, 8 226 add eax, %1 227 loop %%loop 228 %endmacro 229 230 %define base 0x800000;0xfffff000 231 mov ecx, 0x800 ; pde size 232 mov ebx, base - (6 << X86_PAGE_4K_SHIFT) 233 xor eax, eax 234 ;; or flags to eax 235 or eax, (X86_PDE_P|X86_PDE_A|X86_PDE_PS|X86_PDE_PCD|X86_PDE_RW|RT_BIT(6)) 236 fill_pkt (1 << X86_PAGE_2M_SHIFT) 237 238 ;; pdpt (1st 4 entries describe 4Gb) 239 mov ebx, base - (2 << X86_PAGE_4K_SHIFT) 240 mov eax, base - (6 << X86_PAGE_4K_SHIFT) ;; 241 or eax, (X86_PDPE_P|X86_PDPE_RW|X86_PDPE_A|X86_PDPE_PCD) 242 mov [ebx],eax 243 xor edx,edx 244 mov [ebx + 4], edx 245 add ebx, 8 246 247 mov eax, base - 5 * (1 << X86_PAGE_4K_SHIFT) ;; 248 or eax, (X86_PDPE_P|X86_PDPE_RW|X86_PDPE_A|X86_PDPE_PCD) 249 mov [ebx],eax 250 xor edx,edx 251 mov [ebx + 4], edx 252 add ebx, 8 253 254 mov eax, base - 4 * (1 << X86_PAGE_4K_SHIFT) ;; 255 or eax, (X86_PDPE_P|X86_PDPE_RW|X86_PDPE_A|X86_PDPE_PCD) 256 mov [ebx],eax 257 xor edx,edx 258 mov [ebx + 4], edx 259 add ebx, 8 260 261 mov eax, base - 3 * (1 << X86_PAGE_4K_SHIFT) ;; 262 or eax, (X86_PDPE_P|X86_PDPE_RW|X86_PDPE_A|X86_PDPE_PCD) 263 mov [ebx],eax 264 xor edx,edx 265 mov [ebx + 4], edx 266 add ebx, 8 267 268 mov ecx, 0x1f7 ; pdte size 269 mov ebx, base - 2 * (1 << X86_PAGE_4K_SHIFT) + 4 * 8 270 mov eax, base - 6 * (1 << X86_PAGE_4K_SHIFT);; 271 or eax, (X86_PDPE_P|X86_PDPE_RW|X86_PDPE_A|X86_PDPE_PCD) 272 ;; or flags to eax 273 fill_pkt 3 * (1 << X86_PAGE_4K_SHIFT) 274 275 mov ecx, 0x200 ; pml4 size 276 mov ebx, base - (1 << X86_PAGE_4K_SHIFT) 277 mov eax, base - 2 * (1 << X86_PAGE_4K_SHIFT) ;; 278 or eax, (X86_PML4E_P|X86_PML4E_PCD|X86_PML4E_A|X86_PML4E_RW) 279 ;; or flags to eax 280 fill_pkt 0 281 282 mov eax, base - (1 << X86_PAGE_4K_SHIFT) 283 mov cr3, eax 284 285 286 mov eax,cr4 287 or eax, X86_CR4_PAE|X86_CR4_OSFSXR|X86_CR4_OSXMMEEXCPT 288 mov cr4,eax 289 290 mov ecx, MSR_K6_EFER 291 rdmsr 292 or eax, MSR_K6_EFER_LME 293 wrmsr 294 295 mov eax, cr0 296 or eax, X86_CR0_PG 297 mov cr0, eax 298 jmp compat 299 compat: 300 jmp 0x38:0xffff0000 + efi_64 301 BITS 64 302 efi_64: 303 mov ebp, [0xff009] ; DEVEFIINFO.PhysFwVol 304 mov esi, [0xff000]; + DEVEFIINFO.pfnFirmwareEP] 305 mov edi, [0xff000 + 0x28]; + DEVEFIINFO.pfnPeiEP] 306 jmp [0xff000]; + DEVEFIINFO.pfnFirmwareEP] 307 jmp HaltForEver 214 308 215 309 ; … … 221 315 BITS 16 222 316 jmp genesis 223 times (16 - 3) db 0cch 224 317 dw 0xdead 318 dw 0xbeaf 319 times (16 - 7) db 0cch 225 320 end:
Note:
See TracChangeset
for help on using the changeset viewer.