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

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 0fb70e1 was f66c203d, checked in by Martin Decky <martin@…>, 13 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
Line 
1#ifdef CONFIG_FB
2
3#define MBINFO_BIT_CMDLINE 2
4#define MBINFO_OFFSET_CMDLINE 16
5
6 /* Copy real mode VESA initialization code */
7
8 pm_status $status_vesa_copy
9
10 mov $vesa_init, %esi
11 mov $VESA_INIT_SEGMENT << 4, %edi
12 mov $e_vesa_init - vesa_init, %ecx
13 rep movsb
14
15 /* Check for multiboot command line */
16
17 pm_status $status_multiboot_cmdline
18
19 mov multiboot_eax, %eax
20 cmp $MULTIBOOT_LOADER_MAGIC, %eax
21 jne no_cmdline
22
23 mov multiboot_ebx, %ebx
24 mov (%ebx), %eax
25 bt $MBINFO_BIT_CMDLINE, %eax
26 jnc no_cmdline
27
28 /* Skip the kernel path in command line */
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
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:
56
57 /* Copy at most 23 characters from command line */
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
73 /* Zero termination */
74
75 xor %eax, %eax
76 stosb
77
78 no_cmdline:
79
80 /* Jump to the real mode */
81
82 pm_status $status_vesa_real
83
84 mov $VESA_INIT_SEGMENT << 4, %edi
85 jmpl *%edi
86
87 vesa_meeting_point:
88 /* Returned back to protected mode */
89
90 /*
91 * Initialize Global Descriptor Table and
92 * Interrupt Descriptor Table registers
93 */
94 lgdtl bootstrap_gdtr
95 lidtl bootstrap_idtr
96
97 movzx %ax, %ecx
98 mov %ecx, KA2PA(bfb_scanline)
99
100 shr $16, %eax
101 mov %ax, KA2PA(bfb_bpp)
102
103 movzx %bx, %ecx
104 mov %ecx, KA2PA(bfb_height)
105
106 shr $16, %ebx
107 mov %ebx, KA2PA(bfb_width)
108
109 mov %dl, KA2PA(bfb_green_pos)
110
111 shr $8, %edx
112 mov %dl, KA2PA(bfb_green_size)
113
114 shr $8, %edx
115 mov %dl, KA2PA(bfb_red_pos)
116
117 shr $8, %edx
118 mov %dl, KA2PA(bfb_red_size)
119
120 mov %esi, %edx
121 mov %dl, KA2PA(bfb_blue_pos)
122
123 shr $8, %edx
124 mov %dl, KA2PA(bfb_blue_size)
125
126 mov %edi, KA2PA(bfb_addr)
127#endif
Note: See TracBrowser for help on using the repository browser.