Subversion Repositories Kolibri OS

Rev

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