Rev 8206 | Rev 8284 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 8206 | Rev 8220 | ||
---|---|---|---|
Line 710... | Line 710... | ||
710 | cmp [cfg_opt_value_ask_params], 0 |
710 | cmp [cfg_opt_value_ask_params], 0 |
711 | jz @f |
711 | jz @f |
712 | call ask_for_params |
712 | call ask_for_params |
713 | @@: |
713 | @@: |
Line 714... | Line -... | ||
714 | - | ||
715 | ; call calc_memmap |
- | |
716 | ; call dump_memmap |
- | |
717 | 714 | ||
718 | movzx ecx, [cfg_opt_value_vmode] |
715 | movzx ecx, [cfg_opt_value_vmode] |
719 | eficall [gop_interface], EFI_GRAPHICS_OUTPUT_PROTOCOL.SetMode, \ |
716 | eficall [gop_interface], EFI_GRAPHICS_OUTPUT_PROTOCOL.SetMode, \ |
720 | [gop_interface], rcx |
717 | [gop_interface], rcx |
721 | test eax, eax |
718 | test eax, eax |
Line 768... | Line 765... | ||
768 | ; ramdisk |
765 | ; ramdisk |
769 | ; eficall BootServices, AllocatePages, EFI_RESERVED_MEMORY_TYPE, \ |
766 | ; eficall BootServices, AllocatePages, EFI_RESERVED_MEMORY_TYPE, \ |
770 | ; 2880*512/0x1000, EFI_ALLOCATE_ADDRESS |
767 | ; 2880*512/0x1000, EFI_ALLOCATE_ADDRESS |
Line 771... | Line 768... | ||
771 | 768 | ||
- | 769 | call calc_memmap |
|
Line 772... | Line 770... | ||
772 | call calc_memmap |
770 | ; call dump_memmap |
773 | 771 | ||
774 | mov rbx, [efi_table] |
772 | mov rbx, [efi_table] |
775 | mov rbx, [rbx+EFI_SYSTEM_TABLE.BootServices] |
773 | mov rbx, [rbx+EFI_SYSTEM_TABLE.BootServices] |
Line 859... | Line 857... | ||
859 | msg_error |
857 | msg_error |
860 | jmp $ |
858 | jmp $ |
Line 861... | Line 859... | ||
861 | 859 | ||
862 | - | ||
863 | halt_on_error: |
860 | |
864 | push rax rbx rcx rdx rsi rdi |
861 | halt_on_error: |
865 | test eax, eax |
862 | test eax, eax |
866 | jz @f |
863 | jz @f |
867 | call clearbuf |
864 | call clearbuf |
Line 874... | Line 871... | ||
874 | mov rbx, [efi_table] |
871 | mov rbx, [efi_table] |
875 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
872 | mov rbx, [rbx+EFI_SYSTEM_TABLE.ConOut] |
876 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, msg |
873 | eficall rbx, EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL.OutputString, rbx, msg |
877 | jmp $ |
874 | jmp $ |
878 | @@: |
875 | @@: |
879 | pop rdi rsi rdx rcx rbx rax |
- | |
880 | ret |
876 | ret |
Line 881... | Line 877... | ||
881 | 877 | ||
882 | find_rsdp: |
878 | find_rsdp: |
883 | push rbx |
879 | push rbx |
Line 920... | Line 916... | ||
920 | mov rbx, [rbx+EFI_SYSTEM_TABLE.BootServices] |
916 | mov rbx, [rbx+EFI_SYSTEM_TABLE.BootServices] |
921 | eficall rbx, EFI_BOOT_SERVICES.GetMemoryMap, memory_map_size, \ |
917 | eficall rbx, EFI_BOOT_SERVICES.GetMemoryMap, memory_map_size, \ |
922 | [memory_map], memory_map_key, descriptor_size, descriptor_ver |
918 | [memory_map], memory_map_key, descriptor_size, descriptor_ver |
923 | call halt_on_error |
919 | call halt_on_error |
Line 924... | Line -... | ||
924 | - | ||
925 | mov rdi, BOOT_LO.memmap_block_cnt |
- | |
926 | mov dword[rdi], 0 |
920 | |
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 |
921 | mov rdi, BOOT_LO.memmap_blocks |
938 | mov [rax+BOOT_LO.memmap_block_cnt], 0 |
922 | mov dword[rdi-4], 0 ; memmap_block_cnt |
- | 923 | mov rsi, [memory_map] |
|
- | 924 | mov rbx, rsi |
|
939 | mov rsi, [memory_map] |
925 | add rbx, [memory_map_size] |
940 | .next_descr: |
926 | .next_descr: |
941 | call add_uefi_memmap |
927 | call add_uefi_memmap |
942 | add rsi, [descriptor_size] |
- | |
943 | add rdi, sizeof.e820entry |
928 | add rsi, [descriptor_size] |
944 | dec ecx |
929 | cmp rsi, rbx |
945 | jnz .next_descr |
930 | jb .next_descr |
Line 946... | Line 931... | ||
946 | ret |
931 | ret |
947 | 932 | ||
948 | dump_memmap: |
933 | dump_memmap: |
Line 995... | Line 980... | ||
995 | 980 | ||
996 | 981 | ||
997 | ; linux/arch/x86/platform/efi/efi.c |
982 | ; linux/arch/x86/platform/efi/efi.c |
998 | ; do_add_efi_memmap |
983 | ; do_add_efi_memmap |
- | 984 | add_uefi_memmap: |
|
- | 985 | xor eax, eax |
|
Line 999... | Line -... | ||
999 | add_uefi_memmap: |
- | |
1000 | push rax rbx rcx rdx rsi rdi |
986 | cmp [rax+BOOT_LO.memmap_block_cnt], MAX_MEMMAP_BLOCKS |
1001 | - | ||
1002 | mov r10d, [rsi+EFI_MEMORY_DESCRIPTOR.Type] |
987 | jz .done |
Line 1003... | Line 988... | ||
1003 | mov r11, [rsi+EFI_MEMORY_DESCRIPTOR.PhysicalStart] |
988 | |
1004 | mov r13, [rsi+EFI_MEMORY_DESCRIPTOR.NumberOfPages] |
- | |
1005 | mov r14, [rsi+EFI_MEMORY_DESCRIPTOR.Attribute] |
989 | mov rax, [rsi+EFI_MEMORY_DESCRIPTOR.PhysicalStart] |
1006 | 990 | mov [rdi+e820entry.addr], rax |
|
Line 1007... | Line -... | ||
1007 | mov [rdi+e820entry.addr], r11 |
- | |
- | 991 | ||
1008 | mov rax, r13 |
992 | mov rax, [rsi+EFI_MEMORY_DESCRIPTOR.NumberOfPages] |
1009 | shl rax, 12 |
993 | shl rax, 12 |
1010 | mov [rdi+e820entry.size], rax |
994 | mov [rdi+e820entry.size], rax |
1011 | 995 | ||
1012 | 996 | mov ecx, [rsi+EFI_MEMORY_DESCRIPTOR.Type] |
|
1013 | cmp r10d, EFI_LOADER_CODE |
997 | cmp ecx, EFI_LOADER_CODE |
1014 | jz .case0 |
998 | jz .mem_ram_if_wb |
1015 | cmp r10d, EFI_LOADER_DATA |
999 | cmp ecx, EFI_LOADER_DATA |
1016 | jz .case0 |
1000 | jz .mem_ram_if_wb |
1017 | cmp r10d, EFI_BOOT_SERVICES_CODE |
1001 | cmp ecx, EFI_BOOT_SERVICES_CODE |
1018 | jz .case0 |
1002 | jz .mem_ram_if_wb |
1019 | cmp r10d, EFI_BOOT_SERVICES_DATA |
- | |
1020 | jz .case0 |
- | |
1021 | cmp r10d, EFI_CONVENTIONAL_MEMORY |
- | |
1022 | jz .case0 |
- | |
1023 | cmp r10d, EFI_ACPI_RECLAIM_MEMORY |
- | |
1024 | jz .case1 |
- | |
1025 | cmp r10d, EFI_ACPI_MEMORY_NVS |
- | |
1026 | jz .case2 |
- | |
1027 | cmp r10d, EFI_UNUSABLE_MEMORY |
- | |
1028 | jz .case3 |
- | |
1029 | cmp r10d, EFI_PERSISTENT_MEMORY |
- | |
1030 | jz .case4 |
- | |
1031 | jmp .default |
- | |
1032 | - | ||
1033 | .case0: |
- | |
1034 | test r14, EFI_MEMORY_WB |
- | |
1035 | jz @f |
- | |
1036 | mov eax, E820_RAM |
- | |
1037 | jmp .done |
1003 | cmp ecx, EFI_BOOT_SERVICES_DATA |
1038 | @@: |
1004 | jz .mem_ram_if_wb |
1039 | mov eax, E820_RESERVED |
1005 | cmp ecx, EFI_CONVENTIONAL_MEMORY |
1040 | jmp .done |
1006 | jz .mem_ram_if_wb |
1041 | .case1: |
1007 | cmp ecx, EFI_ACPI_RECLAIM_MEMORY |
1042 | mov eax, E820_ACPI |
1008 | mov eax, E820_ACPI |
1043 | jmp .done |
1009 | jz .type_done |
1044 | .case2: |
1010 | cmp ecx, EFI_ACPI_MEMORY_NVS |
1045 | mov eax, E820_NVS |
1011 | mov eax, E820_NVS |
1046 | jmp .done |
1012 | jz .type_done |
1047 | .case3: |
1013 | cmp ecx, EFI_UNUSABLE_MEMORY |
- | 1014 | mov eax, E820_UNUSABLE |
|
- | 1015 | jz .type_done |
|
- | 1016 | cmp ecx, EFI_PERSISTENT_MEMORY |
|
- | 1017 | mov eax, E820_PMEM |
|
- | 1018 | jz .type_done |
|
1048 | mov eax, E820_UNUSABLE |
1019 | jmp .reserved |
1049 | jmp .done |
1020 | .mem_ram_if_wb: |
1050 | .case4: |
- | |
1051 | mov eax, E820_PMEM |
- | |
1052 | jmp .done |
1021 | test [rsi+EFI_MEMORY_DESCRIPTOR.Attribute], dword EFI_MEMORY_WB |
1053 | .default: |
1022 | mov eax, E820_RAM |
1054 | mov eax, E820_RESERVED |
- | |
1055 | jmp .done |
1023 | jnz .type_done |
- | 1024 | .reserved: |
|
1056 | 1025 | mov eax, E820_RESERVED |
|
1057 | .done: |
- | |
- | 1026 | .type_done: |
|
1058 | mov [rdi+e820entry.type], eax |
1027 | mov [rdi+e820entry.type], eax |
- | 1028 | cmp eax, E820_RAM |
|
- | 1029 | jnz @f |
|
1059 | 1030 | xor eax, eax |
|
Line 1060... | Line 1031... | ||
1060 | mov rax, BOOT_LO.memmap_block_cnt |
1031 | inc [rax+BOOT_LO.memmap_block_cnt] |
1061 | inc word[rax] |
1032 | add rdi, sizeof.e820entry |