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

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

support for overriding the preconfigured VESA mode via GRUB command line option

  • Property mode set to 100644
File size: 1.3 KB
Line 
1#ifdef CONFIG_FB
2
3#define MULTIBOOT_LOADER_MAGIC 0x2BADB002
4#define MBINFO_BIT_CMDLINE 2
5#define MBINFO_OFFSET_CMDLINE 16
6
7 # copy real mode VESA initialization code
8
9 mov $vesa_init, %esi
10 mov $VESA_INIT_SEGMENT << 4, %edi
11 mov $e_vesa_init - vesa_init, %ecx
12 rep movsb
13
14 # check for GRUB command line
15
16 mov grub_eax, %eax
17 cmp $MULTIBOOT_LOADER_MAGIC, %eax
18 jne no_cmdline
19
20 mov grub_ebx, %ebx
21 mov (%ebx), %eax
22 bt $MBINFO_BIT_CMDLINE, %eax
23 jnc no_cmdline
24
25 # skip the kernel path in command line
26
27 mov MBINFO_OFFSET_CMDLINE(%ebx), %esi
28
29 skip_loop:
30 lodsb
31
32 cmp $0, %al
33 je no_cmdline
34
35 cmp $' ', %al
36 je skip_loop_done
37
38 jmp skip_loop
39 skip_loop_done:
40
41 mov (%esi), %al
42 cmp $0, %al
43 je no_cmdline
44
45 # copy at most 23 characters from command line
46
47 mov $VESA_INIT_SEGMENT << 4, %edi
48 add $default_mode - vesa_init, %edi
49 mov $23, %ecx
50
51 cmd_loop:
52 lodsb
53 stosb
54
55 cmp $0, %al
56 je cmd_loop_done
57
58 loop cmd_loop
59 cmd_loop_done:
60
61 # zero termination
62
63 xor %eax, %eax
64 stosb
65
66 no_cmdline:
67
68 # jump to the real mode
69
70 mov $VESA_INIT_SEGMENT << 4, %edi
71 jmpl *%edi
72
73 vesa_meeting_point:
74 # returned back to protected mode
75
76 mov %esi, KA2PA(vesa_ph_addr)
77 mov %di, KA2PA(vesa_height)
78 shr $16, %edi
79 mov %di, KA2PA(vesa_width)
80 mov %bx, KA2PA(vesa_scanline)
81 shr $16, %ebx
82 mov %bx, KA2PA(vesa_bpp)
83#endif
Note: See TracBrowser for help on using the repository browser.