source: mainline/kernel/arch/ia32/src/boot/vesa_prot.inc@ bfb6576

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since bfb6576 was f66c203d, checked in by Martin Decky <martin@…>, 14 years ago

explicitly load default BIOS IDT for real-mode VESA BIOS access (GRUB 2.00 setups an empty IDT for bootstrap)
always use an empty IDT during bootstrap (for consistency)
make sure the interrupts are disabled during bootstrap
make sure correct GDT is set after returning from VESA BIOS

  • Property mode set to 100644
File size: 2.0 KB
RevLine 
[421c833]1#ifdef CONFIG_FB
[b6dfc32]2
3#define MBINFO_BIT_CMDLINE 2
4#define MBINFO_OFFSET_CMDLINE 16
5
[873c681]6 /* Copy real mode VESA initialization code */
7
8 pm_status $status_vesa_copy
[b6dfc32]9
[421c833]10 mov $vesa_init, %esi
11 mov $VESA_INIT_SEGMENT << 4, %edi
12 mov $e_vesa_init - vesa_init, %ecx
13 rep movsb
14
[1f5c9c96]15 /* Check for multiboot command line */
[873c681]16
[1f5c9c96]17 pm_status $status_multiboot_cmdline
[b6dfc32]18
[1f5c9c96]19 mov multiboot_eax, %eax
[b6dfc32]20 cmp $MULTIBOOT_LOADER_MAGIC, %eax
21 jne no_cmdline
22
[1f5c9c96]23 mov multiboot_ebx, %ebx
[b6dfc32]24 mov (%ebx), %eax
25 bt $MBINFO_BIT_CMDLINE, %eax
26 jnc no_cmdline
27
[873c681]28 /* Skip the kernel path in command line */
[b6dfc32]29
30 mov MBINFO_OFFSET_CMDLINE(%ebx), %esi
31
32 skip_loop:
33 lodsb
34
35 cmp $0, %al
36 je no_cmdline
37
38 cmp $' ', %al
39 je skip_loop_done
40
41 jmp skip_loop
42 skip_loop_done:
43
[e749794]44 space_loop:
45 mov (%esi), %al
46
47 cmp $0, %al
48 je no_cmdline
49
50 cmp $' ', %al
51 jne space_loop_done
52
53 inc %esi
54 jmp space_loop
55 space_loop_done:
[b6dfc32]56
[873c681]57 /* Copy at most 23 characters from command line */
[b6dfc32]58
59 mov $VESA_INIT_SEGMENT << 4, %edi
60 add $default_mode - vesa_init, %edi
61 mov $23, %ecx
62
63 cmd_loop:
64 lodsb
65 stosb
66
67 cmp $0, %al
68 je cmd_loop_done
69
70 loop cmd_loop
71 cmd_loop_done:
72
[873c681]73 /* Zero termination */
[b6dfc32]74
75 xor %eax, %eax
76 stosb
77
78 no_cmdline:
79
[873c681]80 /* Jump to the real mode */
81
82 pm_status $status_vesa_real
[b6dfc32]83
[421c833]84 mov $VESA_INIT_SEGMENT << 4, %edi
85 jmpl *%edi
86
87 vesa_meeting_point:
[873c681]88 /* Returned back to protected mode */
[b6dfc32]89
[f66c203d]90 /*
91 * Initialize Global Descriptor Table and
92 * Interrupt Descriptor Table registers
93 */
94 lgdtl bootstrap_gdtr
95 lidtl bootstrap_idtr
96
[1f5c9c96]97 movzx %ax, %ecx
98 mov %ecx, KA2PA(bfb_scanline)
99
[1496f87]100 shr $16, %eax
[1f5c9c96]101 mov %ax, KA2PA(bfb_bpp)
102
103 movzx %bx, %ecx
104 mov %ecx, KA2PA(bfb_height)
[1496f87]105
[421c833]106 shr $16, %ebx
[1f5c9c96]107 mov %ebx, KA2PA(bfb_width)
108
109 mov %dl, KA2PA(bfb_green_pos)
[1496f87]110
111 shr $8, %edx
[1f5c9c96]112 mov %dl, KA2PA(bfb_green_size)
113
[1496f87]114 shr $8, %edx
[1f5c9c96]115 mov %dl, KA2PA(bfb_red_pos)
116
[1496f87]117 shr $8, %edx
[1f5c9c96]118 mov %dl, KA2PA(bfb_red_size)
[1496f87]119
120 mov %esi, %edx
[1f5c9c96]121 mov %dl, KA2PA(bfb_blue_pos)
122
[1496f87]123 shr $8, %edx
[1f5c9c96]124 mov %dl, KA2PA(bfb_blue_size)
[1496f87]125
[1f5c9c96]126 mov %edi, KA2PA(bfb_addr)
[421c833]127#endif
Note: See TracBrowser for help on using the repository browser.