Rev 8150 | Rev 8284 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 8150 | Rev 8206 | ||
---|---|---|---|
Line 16... | Line 16... | ||
16 | include '../../const.inc' |
16 | include '../../const.inc' |
Line 17... | Line 17... | ||
17 | 17 | ||
18 | purge DQ |
18 | purge DQ |
Line 19... | Line 19... | ||
19 | include 'uefi64.inc' |
19 | include 'uefi64.inc' |
20 | 20 | ||
21 | MEMORY_MAP_SIZE = 0x4000 |
21 | MEMORY_MAP_SIZE = 0x10000 |
22 | GOP_BUFFER_SIZE = 0x100 |
22 | GOP_BUFFER_SIZE = 0x100 |
Line 23... | Line 23... | ||
23 | LIP_BUFFER_SIZE = 0x100 |
23 | LIP_BUFFER_SIZE = 0x100 |
Line 44... | Line 44... | ||
44 | .name dq ? |
44 | .name dq ? |
45 | .buffer dq ? |
45 | .buffer dq ? |
46 | .size dq ? |
46 | .size dq ? |
47 | .fatal dq ? |
47 | .fatal dq ? |
48 | end virtual |
48 | end virtual |
49 | - | ||
50 | eficall [.root], EFI_FILE_PROTOCOL.Open, [.root], file_handle, \ |
49 | eficall [.root], EFI_FILE_PROTOCOL.Open, [.root], file_handle, \ |
51 | [.name], EFI_FILE_MODE_READ, 0 |
50 | [.name], EFI_FILE_MODE_READ, 0 |
52 | cmp rax, EFI_SUCCESS |
51 | test eax, eax |
53 | jz @f |
52 | jz @f |
54 | xor eax, eax |
53 | xor eax, eax |
55 | cmp [.fatal], 1 |
54 | cmp [.fatal], 1 |
56 | jnz .done |
55 | jnz .done |
57 | mov rbx, [efi_table] |
56 | mov rbx, [efi_table] |
Line 69... | Line 68... | ||
69 | eficall [file_handle], EFI_FILE_PROTOCOL.Read, [file_handle], rax, \ |
68 | eficall [file_handle], EFI_FILE_PROTOCOL.Read, [file_handle], rax, \ |
70 | [.buffer] |
69 | [.buffer] |
71 | eficall [file_handle], EFI_FILE_PROTOCOL.Close, [file_handle] |
70 | eficall [file_handle], EFI_FILE_PROTOCOL.Close, [file_handle] |
72 | mov rax, [.size] |
71 | mov rax, [.size] |
73 | .done: |
72 | .done: |
- | 73 | push rax |
|
- | 74 | call clearbuf |
|
- | 75 | mov rdi, msg |
|
- | 76 | call num2dec |
|
- | 77 | push rbx |
|
- | 78 | mov rbx, [efi_table] |
|
- | 79 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
|
- | 80 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
|
- | 81 | msg_file_size |
|
- | 82 | pop rbx |
|
- | 83 | push rbx |
|
- | 84 | mov rbx, [efi_table] |
|
- | 85 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
|
- | 86 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, msg |
|
- | 87 | pop rbx |
|
- | 88 | pop rax |
|
74 | ret 8*5 |
89 | ret 8*5 |
Line 75... | Line 90... | ||
75 | 90 | ||
76 | skip_whitespace: |
91 | skip_whitespace: |
77 | .next_char: |
92 | .next_char: |
Line 257... | Line 272... | ||
257 | parse_config: |
272 | parse_config: |
258 | virtual at rsp+8 |
273 | virtual at rsp+8 |
259 | .buffer dq ? |
274 | .buffer dq ? |
260 | end virtual |
275 | end virtual |
261 | ; mov rsi, [.buffer] |
276 | ; mov rsi, [.buffer] |
- | 277 | push rbx |
|
- | 278 | mov rbx, [efi_table] |
|
- | 279 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
|
- | 280 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
|
- | 281 | msg_parsing_config |
|
- | 282 | pop rbx |
|
262 | mov rsi, KERNEL_BASE |
283 | mov rsi, KERNEL_BASE |
263 | .next_line: |
284 | .next_line: |
264 | call parse_line |
285 | call parse_line |
265 | cmp byte[rsi], 0 |
286 | cmp byte[rsi], 0 |
266 | jnz .next_line |
287 | jnz .next_line |
Line 269... | Line 290... | ||
269 | read_options_from_config: |
290 | read_options_from_config: |
270 | mov rbx, [efi_table] |
291 | mov rbx, [efi_table] |
271 | mov rbx, [rbx+EFI_SYSTEM_TABLE.BootServices] |
292 | mov rbx, [rbx+EFI_SYSTEM_TABLE.BootServices] |
272 | eficall rbx, EFI_BOOT_SERVICES.HandleProtocol, [efi_handle], lipuuid, \ |
293 | eficall rbx, EFI_BOOT_SERVICES.HandleProtocol, [efi_handle], lipuuid, \ |
273 | lip_interface |
294 | lip_interface |
274 | cmp eax, EFI_SUCCESS |
295 | test eax, eax |
275 | jnz .error |
296 | jz @f |
- | 297 | push rbx |
|
- | 298 | mov rbx, [efi_table] |
|
- | 299 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
|
- | 300 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
|
- | 301 | msg_error_efi_lip_handle |
|
- | 302 | pop rbx |
|
- | 303 | jmp $ |
|
- | 304 | @@: |
|
276 | mov rax, [lip_interface] |
305 | mov rax, [lip_interface] |
Line 277... | Line 306... | ||
277 | 306 | ||
278 | mov rbx, [efi_table] |
307 | mov rbx, [efi_table] |
279 | mov rbx, [rbx+EFI_SYSTEM_TABLE.BootServices] |
308 | mov rbx, [rbx+EFI_SYSTEM_TABLE.BootServices] |
280 | eficall rbx, EFI_BOOT_SERVICES.HandleProtocol, \ |
309 | eficall rbx, EFI_BOOT_SERVICES.HandleProtocol, \ |
281 | [rax+EFI_LOADED_IMAGE_PROTOCOL.DeviceHandle], sfspguid, \ |
310 | [rax+EFI_LOADED_IMAGE_PROTOCOL.DeviceHandle], sfspguid, \ |
- | 311 | sfsp_interface |
|
- | 312 | test eax, eax |
|
- | 313 | jz @f |
|
282 | sfsp_interface |
314 | push rbx |
- | 315 | mov rbx, [efi_table] |
|
- | 316 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
|
- | 317 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
|
283 | cmp rax, EFI_SUCCESS |
318 | msg_error_lip_dev_sfsp |
- | 319 | pop rbx |
|
284 | jnz .error |
320 | jmp $ |
285 | 321 | @@: |
|
286 | eficall [sfsp_interface], EFI_SIMPLE_FILE_SYSTEM_PROTOCOL.OpenVolume, \ |
322 | eficall [sfsp_interface], EFI_SIMPLE_FILE_SYSTEM_PROTOCOL.OpenVolume, \ |
- | 323 | [sfsp_interface], esp_root |
|
- | 324 | test eax, eax |
|
- | 325 | jz @f |
|
287 | [sfsp_interface], esp_root |
326 | push rbx |
- | 327 | mov rbx, [efi_table] |
|
- | 328 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
|
- | 329 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
|
288 | cmp rax, EFI_SUCCESS |
330 | msg_error_sfsp_openvolume |
- | 331 | pop rbx |
|
289 | jnz .error |
332 | jmp $ |
290 | 333 | @@: |
|
291 | push 0 ; not fatal, i.e. it's ok to not find this file |
334 | push 0 ; not fatal, i.e. it's ok to not find this file |
292 | push FILE_BUFFER_SIZE |
335 | push FILE_BUFFER_SIZE |
293 | push KERNEL_BASE |
336 | push KERNEL_BASE |
- | 337 | ; push file_name |
|
- | 338 | mov rax, file_name |
|
294 | push file_name |
339 | push rax |
295 | push [esp_root] |
340 | push [esp_root] |
Line 296... | Line 341... | ||
296 | call load_file |
341 | call load_file |
297 | 342 | ||
Line 364... | Line 409... | ||
364 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
409 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
365 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
410 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
366 | msg_error_no_such_vmode |
411 | msg_error_no_such_vmode |
367 | mov rbx, [efi_table] |
412 | mov rbx, [efi_table] |
368 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
413 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
369 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, msg_error |
414 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
- | 415 | msg_error |
|
370 | jmp $ |
416 | jmp $ |
371 | .error: |
417 | .error: |
372 | .done: |
418 | .done: |
373 | ret |
419 | ret |
Line 481... | Line 527... | ||
481 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
527 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
482 | msg_load_kernel |
528 | msg_load_kernel |
483 | push 1 |
529 | push 1 |
484 | push -1 |
530 | push -1 |
485 | push KERNEL_BASE |
531 | push KERNEL_BASE |
486 | push kernel_name |
532 | ; push kernel_name |
- | 533 | mov rax, kernel_name |
|
- | 534 | push rax |
|
487 | push [esp_root] |
535 | push [esp_root] |
488 | call load_file |
536 | call load_file |
Line 489... | Line 537... | ||
489 | 537 | ||
490 | ; read ramdisk image |
538 | ; read ramdisk image |
Line 493... | Line 541... | ||
493 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
541 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
494 | msg_load_ramdisk |
542 | msg_load_ramdisk |
495 | push 1 |
543 | push 1 |
496 | push -1 |
544 | push -1 |
497 | push RAMDISK_BASE |
545 | push RAMDISK_BASE |
498 | push ramdisk_name |
546 | ; push ramdisk_name |
- | 547 | mov rax, ramdisk_name |
|
- | 548 | push rax |
|
499 | push [esp_root] |
549 | push [esp_root] |
500 | call load_file |
550 | call load_file |
Line 501... | Line 551... | ||
501 | 551 | ||
502 | ; alloc buffer for devices.dat |
552 | ; alloc buffer for devices.dat |
Line 519... | Line 569... | ||
519 | msg_load_devicesdat |
569 | msg_load_devicesdat |
Line 520... | Line 570... | ||
520 | 570 | ||
521 | push 0 ; not fatal |
571 | push 0 ; not fatal |
522 | push [devicesdat_size] |
572 | push [devicesdat_size] |
523 | push [devicesdat_data] |
573 | push [devicesdat_data] |
- | 574 | ; push devicesdat_name |
|
- | 575 | mov rax, devicesdat_name |
|
524 | push devicesdat_name |
576 | push rax |
525 | push [esp_root] |
577 | push [esp_root] |
526 | call load_file |
578 | call load_file |
Line 527... | Line 579... | ||
527 | mov [devicesdat_size], rax |
579 | mov [devicesdat_size], rax |
Line 556... | Line 608... | ||
556 | call clearbuf |
608 | call clearbuf |
557 | mov rdi, msg |
609 | mov rdi, msg |
558 | call num2hex |
610 | call num2hex |
559 | mov rbx, [efi_table] |
611 | mov rbx, [efi_table] |
560 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
612 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
561 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, msg_error |
613 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
- | 614 | msg_error |
|
562 | mov rbx, [efi_table] |
615 | mov rbx, [efi_table] |
563 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
616 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
564 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, msg |
617 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, msg |
565 | jmp $ |
618 | jmp $ |
566 | @@: |
619 | @@: |
Line 571... | Line 624... | ||
571 | msg_look_for_gop_handler |
624 | msg_look_for_gop_handler |
Line 572... | Line 625... | ||
572 | 625 | ||
573 | mov rbx, gop_buffer |
626 | mov rbx, gop_buffer |
574 | .next_gop_handle: |
627 | .next_gop_handle: |
575 | mov rax, rbx |
628 | mov rax, rbx |
- | 629 | mov rcx, gop_buffer |
|
576 | sub rax, gop_buffer |
630 | sub rax, rcx |
577 | cmp rax, [gop_buffer_size] |
631 | cmp rax, [gop_buffer_size] |
578 | jb @f |
632 | jb @f |
579 | push rbx |
633 | push rbx |
580 | mov rbx, [efi_table] |
634 | mov rbx, [efi_table] |
Line 617... | Line 671... | ||
617 | 671 | ||
618 | add rbx, 8 |
672 | add rbx, 8 |
619 | jmp .next_gop_handle |
673 | jmp .next_gop_handle |
Line 620... | Line -... | ||
620 | @@: |
- | |
621 | - | ||
622 | push rbx |
- | |
623 | mov rbx, [efi_table] |
- | |
624 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
- | |
625 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
- | |
626 | msg_look_for_rsdp |
- | |
627 | pop rbx |
- | |
628 | - | ||
629 | mov rbx, [efi_table] |
- | |
630 | mov rdi, [rbx+EFI_SYSTEM_TABLE.ConfigurationTable] |
- | |
631 | mov rcx, [rbx+EFI_SYSTEM_TABLE.NumberOfTableEntries] |
- | |
632 | mov rax, 0x11d3e4f18868e871 |
- | |
633 | mov rdx, 0x81883cc7800022bc |
- | |
634 | .next_table: |
- | |
635 | dec ecx |
- | |
636 | js .all_tables_done |
- | |
637 | cmp [rdi+0], rax |
- | |
638 | jnz .not_acpi20 |
- | |
639 | cmp [rdi+8], rdx |
- | |
640 | jnz .not_acpi20 |
- | |
641 | mov rax, [rdi+16] |
- | |
642 | mov rdx, BOOT_LO.acpi_rsdp |
- | |
643 | mov [rdx], eax |
- | |
644 | jmp .all_tables_done |
674 | @@: |
645 | .not_acpi20: |
- | |
646 | add rdi, 24 |
- | |
Line 647... | Line 675... | ||
647 | jmp .next_table |
675 | |
648 | .all_tables_done: |
676 | call find_rsdp |
649 | 677 | ||
650 | mov rbx, [efi_table] |
678 | mov rbx, [efi_table] |
Line 682... | Line 710... | ||
682 | cmp [cfg_opt_value_ask_params], 0 |
710 | cmp [cfg_opt_value_ask_params], 0 |
683 | jz @f |
711 | jz @f |
684 | call ask_for_params |
712 | call ask_for_params |
685 | @@: |
713 | @@: |
Line -... | Line 714... | ||
- | 714 | ||
- | 715 | ; call calc_memmap |
|
- | 716 | ; call dump_memmap |
|
686 | 717 | ||
687 | movzx ecx, [cfg_opt_value_vmode] |
718 | movzx ecx, [cfg_opt_value_vmode] |
688 | eficall [gop_interface], EFI_GRAPHICS_OUTPUT_PROTOCOL.SetMode, \ |
719 | eficall [gop_interface], EFI_GRAPHICS_OUTPUT_PROTOCOL.SetMode, \ |
689 | [gop_interface], rcx |
720 | [gop_interface], rcx |
690 | test eax, eax |
721 | test eax, eax |
Line 695... | Line 726... | ||
695 | mov rbx, [efi_table] |
726 | mov rbx, [efi_table] |
696 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
727 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
697 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, msg |
728 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, msg |
698 | mov rbx, [efi_table] |
729 | mov rbx, [efi_table] |
699 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
730 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
700 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, msg_error |
731 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
- | 732 | msg_error |
|
701 | jmp $ |
733 | jmp $ |
702 | @@: |
734 | @@: |
Line 703... | Line 735... | ||
703 | 735 | ||
704 | mov rcx, [gop_interface] |
736 | mov rcx, [gop_interface] |
705 | mov rdx, [rcx+EFI_GRAPHICS_OUTPUT_PROTOCOL.Mode] |
737 | mov rdx, [rcx+EFI_GRAPHICS_OUTPUT_PROTOCOL.Mode] |
706 | mov rdi, [rdx+EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE.FrameBufferBase] |
738 | mov rdi, [rdx+EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE.FrameBufferBase] |
Line 707... | Line -... | ||
707 | mov [fb_base], rdi |
- | |
708 | 739 | mov [fb_base], rdi |
|
709 | 740 | ||
710 | mov ebx, [rdx+EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE.Mode] |
741 | mov ebx, [rdx+EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE.Mode] |
711 | eficall [gop_interface], EFI_GRAPHICS_OUTPUT_PROTOCOL.QueryMode, \ |
742 | eficall [gop_interface], EFI_GRAPHICS_OUTPUT_PROTOCOL.QueryMode, \ |
- | 743 | [gop_interface], rbx, gop_info_size, gop_info |
|
712 | [gop_interface], rbx, gop_info_size, gop_info |
744 | test eax, eax |
- | 745 | jz @f |
|
713 | cmp rax, EFI_SUCCESS |
746 | jmp .error |
714 | jnz .error |
747 | @@: |
715 | mov rcx, [gop_info] |
748 | mov rcx, [gop_info] |
716 | mov eax, [rcx+EFI_GRAPHICS_OUTPUT_MODE_INFORMATION.HorizontalResolution] |
749 | mov eax, [rcx+EFI_GRAPHICS_OUTPUT_MODE_INFORMATION.HorizontalResolution] |
717 | xor rdx, rdx |
750 | xor rdx, rdx |
Line 726... | Line 759... | ||
726 | mov byte[rdx+BOOT_LO.pci_data+1], 8 ; last bus, don't know how to count them |
759 | mov byte[rdx+BOOT_LO.pci_data+1], 8 ; last bus, don't know how to count them |
727 | mov byte[rdx+BOOT_LO.pci_data+2], 0x10 ; PCI version |
760 | mov byte[rdx+BOOT_LO.pci_data+2], 0x10 ; PCI version |
728 | mov byte[rdx+BOOT_LO.pci_data+3], 0x02 |
761 | mov byte[rdx+BOOT_LO.pci_data+3], 0x02 |
729 | mov dword[rdx+BOOT_LO.pci_data+4], 0xe3 |
762 | mov dword[rdx+BOOT_LO.pci_data+4], 0xe3 |
Line 730... | Line -... | ||
730 | - | ||
731 | - | ||
732 | mov rbx, [efi_table] |
- | |
733 | mov rbx, [rbx+EFI_SYSTEM_TABLE.BootServices] |
- | |
734 | eficall rbx, EFI_BOOT_SERVICES.AllocatePages, EFI_ALLOCATE_ANY_PAGES, \ |
- | |
735 | EFI_RESERVED_MEMORY_TYPE, MEMORY_MAP_SIZE/0x1000, memory_map |
- | |
736 | cmp eax, EFI_SUCCESS |
- | |
737 | jnz .error |
- | |
738 | - | ||
739 | mov rbx, [efi_table] |
- | |
740 | mov rbx, [rbx+EFI_SYSTEM_TABLE.BootServices] |
- | |
741 | eficall rbx, EFI_BOOT_SERVICES.GetMemoryMap, memory_map_size, \ |
- | |
742 | [memory_map], memory_map_key, descriptor_size, descriptor_ver |
- | |
743 | cmp eax, EFI_SUCCESS |
- | |
744 | jnz .error |
- | |
745 | - | ||
746 | mov rdi, BOOT_LO.memmap_block_cnt |
- | |
747 | mov dword[rdi], 0 |
- | |
748 | mov rdi, BOOT_LO.memmap_blocks |
- | |
749 | mov rax, [memory_map_size] |
- | |
750 | xor edx, edx |
- | |
751 | mov rcx, [descriptor_size] |
- | |
752 | div ecx |
- | |
753 | mov ecx, eax |
- | |
754 | mov rsi, [memory_map] |
- | |
755 | .next_descr: |
- | |
756 | call add_uefi_memmap |
- | |
757 | add rsi, [descriptor_size] |
- | |
758 | add rdi, sizeof.e820entry |
- | |
759 | dec ecx |
- | |
760 | test ecx, ecx |
- | |
761 | jnz .next_descr |
- | |
762 | 763 | ||
763 | ; kernel |
764 | ; kernel |
764 | ; eficall BootServices, AllocatePages, EFI_RESERVED_MEMORY_TYPE, \ |
765 | ; eficall BootServices, AllocatePages, EFI_RESERVED_MEMORY_TYPE, \ |
Line 765... | Line 766... | ||
765 | ; 450000/0x1000, EFI_ALLOCATE_ADDRESS |
766 | ; 450000/0x1000, EFI_ALLOCATE_ADDRESS |
766 | 767 | ||
767 | ; ramdisk |
768 | ; ramdisk |
Line -... | Line 769... | ||
- | 769 | ; eficall BootServices, AllocatePages, EFI_RESERVED_MEMORY_TYPE, \ |
|
- | 770 | ; 2880*512/0x1000, EFI_ALLOCATE_ADDRESS |
|
768 | ; eficall BootServices, AllocatePages, EFI_RESERVED_MEMORY_TYPE, \ |
771 | |
769 | ; 2880*512/0x1000, EFI_ALLOCATE_ADDRESS |
772 | call calc_memmap |
770 | 773 | ||
771 | mov rbx, [efi_table] |
774 | mov rbx, [efi_table] |
772 | mov rbx, [rbx+EFI_SYSTEM_TABLE.BootServices] |
- | |
773 | eficall rbx, EFI_BOOT_SERVICES.ExitBootServices, [efi_handle], \ |
775 | mov rbx, [rbx+EFI_SYSTEM_TABLE.BootServices] |
774 | [memory_map_key] |
- | |
Line 775... | Line 776... | ||
775 | cmp eax, EFI_SUCCESS |
776 | eficall rbx, EFI_BOOT_SERVICES.ExitBootServices, [efi_handle], \ |
Line 776... | Line 777... | ||
776 | jnz .error |
777 | [memory_map_key] |
777 | 778 | call halt_on_error |
|
Line 857... | Line 858... | ||
857 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
858 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
858 | msg_error |
859 | msg_error |
859 | jmp $ |
860 | jmp $ |
Line -... | Line 861... | ||
- | 861 | ||
- | 862 | ||
- | 863 | halt_on_error: |
|
- | 864 | push rax rbx rcx rdx rsi rdi |
|
- | 865 | test eax, eax |
|
- | 866 | jz @f |
|
- | 867 | call clearbuf |
|
- | 868 | mov rdi, msg |
|
- | 869 | call num2hex |
|
- | 870 | mov rbx, [efi_table] |
|
- | 871 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
|
- | 872 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
|
- | 873 | msg_error |
|
- | 874 | mov rbx, [efi_table] |
|
- | 875 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
|
- | 876 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, msg |
|
- | 877 | jmp $ |
|
- | 878 | @@: |
|
- | 879 | pop rdi rsi rdx rcx rbx rax |
|
- | 880 | ret |
|
- | 881 | ||
- | 882 | find_rsdp: |
|
- | 883 | push rbx |
|
- | 884 | mov rbx, [efi_table] |
|
- | 885 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
|
- | 886 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
|
- | 887 | msg_look_for_rsdp |
|
- | 888 | pop rbx |
|
- | 889 | ||
- | 890 | mov rbx, [efi_table] |
|
- | 891 | mov rdi, [rbx+EFI_SYSTEM_TABLE.ConfigurationTable] |
|
- | 892 | mov rcx, [rbx+EFI_SYSTEM_TABLE.NumberOfTableEntries] |
|
- | 893 | mov rax, 0x11d3e4f18868e871 |
|
- | 894 | mov rdx, 0x81883cc7800022bc |
|
- | 895 | .next_table: |
|
- | 896 | dec ecx |
|
- | 897 | js .all_tables_done |
|
- | 898 | cmp [rdi+0], rax |
|
- | 899 | jnz .not_acpi20 |
|
- | 900 | cmp [rdi+8], rdx |
|
- | 901 | jnz .not_acpi20 |
|
- | 902 | mov rax, [rdi+16] |
|
- | 903 | mov rdx, BOOT_LO.acpi_rsdp |
|
- | 904 | mov [rdx], eax |
|
- | 905 | jmp .all_tables_done |
|
- | 906 | .not_acpi20: |
|
- | 907 | add rdi, 24 |
|
- | 908 | jmp .next_table |
|
- | 909 | .all_tables_done: |
|
- | 910 | ret |
|
- | 911 | ||
- | 912 | calc_memmap: |
|
- | 913 | mov rbx, [efi_table] |
|
- | 914 | mov rbx, [rbx+EFI_SYSTEM_TABLE.BootServices] |
|
- | 915 | eficall rbx, EFI_BOOT_SERVICES.AllocatePages, EFI_ALLOCATE_ANY_PAGES, \ |
|
- | 916 | EFI_RESERVED_MEMORY_TYPE, MEMORY_MAP_SIZE/0x1000, memory_map |
|
- | 917 | call halt_on_error |
|
- | 918 | ||
- | 919 | mov rbx, [efi_table] |
|
- | 920 | mov rbx, [rbx+EFI_SYSTEM_TABLE.BootServices] |
|
- | 921 | eficall rbx, EFI_BOOT_SERVICES.GetMemoryMap, memory_map_size, \ |
|
- | 922 | [memory_map], memory_map_key, descriptor_size, descriptor_ver |
|
- | 923 | call halt_on_error |
|
- | 924 | ||
- | 925 | mov rdi, BOOT_LO.memmap_block_cnt |
|
- | 926 | mov dword[rdi], 0 |
|
- | 927 | mov rdi, BOOT_LO.memmap_blocks |
|
- | 928 | mov rax, [memory_map_size] |
|
- | 929 | xor edx, edx |
|
- | 930 | mov rcx, [descriptor_size] |
|
- | 931 | div ecx |
|
- | 932 | mov ecx, eax |
|
- | 933 | cmp ecx, MAX_MEMMAP_BLOCKS |
|
- | 934 | jbe @f |
|
- | 935 | mov ecx, MAX_MEMMAP_BLOCKS |
|
- | 936 | @@: |
|
- | 937 | xor eax, eax |
|
- | 938 | mov [rax+BOOT_LO.memmap_block_cnt], 0 |
|
- | 939 | mov rsi, [memory_map] |
|
- | 940 | .next_descr: |
|
- | 941 | call add_uefi_memmap |
|
- | 942 | add rsi, [descriptor_size] |
|
- | 943 | add rdi, sizeof.e820entry |
|
- | 944 | dec ecx |
|
- | 945 | jnz .next_descr |
|
- | 946 | ret |
|
- | 947 | ||
- | 948 | dump_memmap: |
|
- | 949 | xor eax, eax |
|
- | 950 | mov rsi, BOOT_LO.memmap_blocks |
|
- | 951 | mov ebx, [rax+BOOT_LO.memmap_block_cnt] |
|
- | 952 | ||
- | 953 | call clearbuf |
|
- | 954 | mov eax, ebx |
|
- | 955 | mov rdi, msg |
|
- | 956 | call num2dec |
|
- | 957 | push rbx |
|
- | 958 | mov rbx, [efi_table] |
|
- | 959 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
|
- | 960 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, \ |
|
- | 961 | msg_memmap |
|
- | 962 | pop rbx |
|
- | 963 | push rbx |
|
- | 964 | mov rbx, [efi_table] |
|
- | 965 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
|
- | 966 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, msg |
|
- | 967 | pop rbx |
|
- | 968 | call clearbuf |
|
- | 969 | .next_mapping: |
|
- | 970 | dec ebx |
|
- | 971 | js .done |
|
- | 972 | mov rax, rsi |
|
- | 973 | mov rcx, BOOT_LO.memmap_blocks |
|
- | 974 | sub rax, rcx |
|
- | 975 | mov ecx, sizeof.e820entry |
|
- | 976 | xor edx, edx |
|
- | 977 | div ecx |
|
- | 978 | mov rdi, msg |
|
- | 979 | call num2dec |
|
- | 980 | mov rax, [rsi+e820entry.addr] |
|
- | 981 | mov rdi, msg+4*2 |
|
- | 982 | call num2hex |
|
- | 983 | mov rax, [rsi+e820entry.size] |
|
- | 984 | mov rdi, msg+24*2 |
|
- | 985 | call num2hex |
|
- | 986 | push rbx |
|
- | 987 | mov rbx, [efi_table] |
|
- | 988 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
|
- | 989 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, msg |
|
- | 990 | pop rbx |
|
- | 991 | add rsi, sizeof.e820entry |
|
- | 992 | jmp .next_mapping |
|
- | 993 | .done: |
|
- | 994 | ret |
|
860 | 995 | ||
861 | 996 | ||
862 | ; linux/arch/x86/platform/efi/efi.c |
997 | ; linux/arch/x86/platform/efi/efi.c |
863 | ; do_add_efi_memmap |
998 | ; do_add_efi_memmap |
Line 1082... | Line 1217... | ||
1082 | descriptor_ver dq 0 |
1217 | descriptor_ver dq 0 |
1083 | memory_map_size dq MEMORY_MAP_SIZE |
1218 | memory_map_size dq MEMORY_MAP_SIZE |
Line 1084... | Line 1219... | ||
1084 | 1219 | ||
1085 | msg_u4k_loaded du "uefi64kos loaded",13,10,0 |
1220 | msg_u4k_loaded du "uefi64kos loaded",13,10,0 |
- | 1221 | msg_read_options du "Read options from config file",13,10,0 |
|
- | 1222 | msg_file_size du "File size:",13,10,0 |
|
1086 | msg_read_options du "Read options from config file",13,10,0 |
1223 | msg_parsing_config du "Parsing config file",13,10,0 |
1087 | msg_load_kernel du "Load kernel",13,10,0 |
1224 | msg_load_kernel du "Load kernel",13,10,0 |
1088 | msg_load_ramdisk du "Load ramdisk",13,10,0 |
1225 | msg_load_ramdisk du "Load ramdisk",13,10,0 |
1089 | msg_load_devicesdat du "Load DEVICES.DAT",13,10,0 |
1226 | msg_load_devicesdat du "Load DEVICES.DAT",13,10,0 |
1090 | msg_alloc_devicesdat du "Allocate memory for DEVICES.DAT",13,10,0 |
1227 | msg_alloc_devicesdat du "Allocate memory for DEVICES.DAT",13,10,0 |
Line 1098... | Line 1235... | ||
1098 | msg_acpi_tables_done du "ACPI tables done",13,10,0 |
1235 | msg_acpi_tables_done du "ACPI tables done",13,10,0 |
1099 | msg_ask_for_params du "Ask for params",13,10,0 |
1236 | msg_ask_for_params du "Ask for params",13,10,0 |
1100 | msg_set_graphic_mode du "Set graphic mode",13,10,0 |
1237 | msg_set_graphic_mode du "Set graphic mode",13,10,0 |
1101 | msg_success du "Success!",13,10,0 |
1238 | msg_success du "Success!",13,10,0 |
1102 | msg_gop_buffer_size du "GOP buffer size",13,10,0 |
1239 | msg_gop_buffer_size du "GOP buffer size",13,10,0 |
1103 | msg_opt_resolution du "option resolution: ",0 |
1240 | msg_opt_resolution du "Option resolution: ",0 |
- | 1241 | msg_memmap du "Memmap",13,10,0 |
|
1104 | msg_error du "Error!",13,10,0 |
1242 | msg_error du "Error!",13,10,0 |
- | 1243 | msg_error_efi_lip_handle du "efi_handle can't handle LIP",13,10,0 |
|
- | 1244 | msg_error_lip_dev_sfsp du "LIP device handle can't handle SFSP",13,10,0 |
|
- | 1245 | msg_error_sfsp_openvolume du "SFSP OpenVolume failed",13,10,0 |
|
1105 | msg_error_no_such_vmode du "No such vmode",13,10,0 |
1246 | msg_error_no_such_vmode du "No such vmode",13,10,0 |
1106 | msg_error_out_of_handlers du "Out of handlers",13,10,0 |
1247 | msg_error_out_of_handlers du "Out of handlers",13,10,0 |
1107 | msg_error_open_file du "Error: can't open file ",0 |
1248 | msg_error_open_file du "Error: can't open file ",0 |
- | 1249 | msg_error_exit_boot_services du "Error: Exit boot services",13,10,0 |
|
1108 | msg du 79 dup " ",13,10,0 |
1250 | msg du 79 dup " ",13,10,0 |
Line 1109... | Line 1251... | ||
1109 | 1251 | ||
1110 | efi_fs_info_id db EFI_FILE_SYSTEM_INFO_ID |
1252 | efi_fs_info_id db EFI_FILE_SYSTEM_INFO_ID |
1111 | efi_fs_info_size dq sizeof.EFI_FILE_SYSTEM_INFO |
1253 | efi_fs_info_size dq sizeof.EFI_FILE_SYSTEM_INFO |