diff --git a/syslinux-3.82-gfxboot.diff b/syslinux-3.82-gfxboot.diff index f592924..8d5f7d0 100644 --- a/syslinux-3.82-gfxboot.diff +++ b/syslinux-3.82-gfxboot.diff @@ -252,10 +252,24 @@ index 8bfc8b8..f458fc7 100644 call writestr mov si,InitRDCName diff --git a/core/ui.inc b/core/ui.inc -index 1b40717..be4f385 100644 +index 1b40717..9413f16 100644 --- a/core/ui.inc +++ b/core/ui.inc -@@ -468,6 +468,8 @@ bad_kernel: +@@ -402,8 +402,12 @@ vk_check: + %if HAS_LOCALBOOT + ; Is this a "localboot" pseudo-kernel? + cmp al,VK_LOCALBOOT ; al == KernelType ++ jne .no_local_boot ++ mov al,7 ++ call [comboot_hook] + mov ax,[VKernelBuf+vk_rname] ; Possible localboot type +- je local_boot ++ jmp local_boot ++.no_local_boot: + %endif + jmp get_kernel + +@@ -468,6 +472,8 @@ bad_kernel: .really: mov si,KernelName mov di,KernelCName @@ -264,7 +278,7 @@ index 1b40717..be4f385 100644 push di call unmangle_name ; Get human form mov si,err_notfound ; Complain about missing kernel -@@ -510,7 +512,10 @@ on_error: +@@ -510,7 +516,10 @@ on_error: ; ; kernel_corrupt: Called if the kernel file does not seem healthy ; @@ -351,10 +365,10 @@ index f458fc7..f6ed644 100644 + section .data +QuietBoot db 0 ; Set if a quiet boot is requested diff --git a/core/ui.inc b/core/ui.inc -index be4f385..2bc56a1 100644 +index 9413f16..353d59a 100644 --- a/core/ui.inc +++ b/core/ui.inc -@@ -596,7 +596,7 @@ kernel_good: +@@ -600,7 +600,7 @@ kernel_good: ; xor ax,ax mov [InitRDPtr],ax @@ -406,7 +420,7 @@ index f6ed644..286c9c8 100644 + alignz 4 +KernelStart dd 100000h diff --git a/core/comboot.inc b/core/comboot.inc -index 1a1dbfe..1a147c9 100644 +index 1a1dbfe..1923308 100644 --- a/core/comboot.inc +++ b/core/comboot.inc @@ -962,6 +962,45 @@ comapi_shufraw: @@ -455,7 +469,7 @@ index 1a1dbfe..1a147c9 100644 section .data %macro int21 2 -@@ -969,6 +1008,108 @@ comapi_shufraw: +@@ -969,6 +1008,109 @@ comapi_shufraw: dw %2 %endmacro @@ -529,6 +543,7 @@ index 1a1dbfe..1a147c9 100644 +; 4: progress start +; 5: progress increment +; 6: progress end: kernel loaded, stop gfxboot ++; 7: stop gfxboot +; +comboot_hook_entry: + pushad @@ -564,7 +579,7 @@ index 1a1dbfe..1a147c9 100644 int21_table: int21 00h, comboot_return int21 01h, comboot_getkey -@@ -1021,8 +1162,16 @@ int22_table: +@@ -1021,8 +1163,16 @@ int22_table: dw comapi_closedir ; 0022 close directory dw comapi_shufsize ; 0023 query shuffler size dw comapi_shufraw ; 0024 cleanup, shuffle and boot raw @@ -581,7 +596,7 @@ index 1a1dbfe..1a147c9 100644 APIKeyWait db 0 APIKeyFlag db 0 -@@ -1041,8 +1190,10 @@ feature_flags_len equ ($-feature_flags) +@@ -1041,8 +1191,10 @@ feature_flags_len equ ($-feature_flags) err_notdos db ': attempted DOS system call INT ',0 err_comlarge db 'COMBOOT image too large.', CR, LF, 0 @@ -594,7 +609,7 @@ index 1a1dbfe..1a147c9 100644 ConfigName resb FILENAME_MAX CurrentDirName resb FILENAME_MAX diff --git a/core/comboot.inc b/core/comboot.inc -index 1a147c9..e5dc115 100644 +index 1923308..f39bfb1 100644 --- a/core/comboot.inc +++ b/core/comboot.inc @@ -1043,12 +1043,14 @@ comapi_run2: @@ -612,7 +627,7 @@ index 1a147c9..e5dc115 100644 clc ret -@@ -1171,6 +1173,7 @@ int22_count equ ($-int22_table)/2 +@@ -1172,6 +1174,7 @@ int22_count equ ($-int22_table)/2 comboot_sp_save dw 0 comboot_hook dw comboot_hook_nop comboot_far dd 0 @@ -621,7 +636,7 @@ index 1a147c9..e5dc115 100644 APIKeyWait db 0 APIKeyFlag db 0 diff --git a/core/ui.inc b/core/ui.inc -index 2bc56a1..59b5724 100644 +index 353d59a..e37f2a7 100644 --- a/core/ui.inc +++ b/core/ui.inc @@ -379,9 +379,13 @@ vk_check: @@ -639,10 +654,10 @@ index 2bc56a1..59b5724 100644 pop es mov di,KernelName diff --git a/core/comboot.inc b/core/comboot.inc -index e5dc115..60506ce 100644 +index f39bfb1..0874526 100644 --- a/core/comboot.inc +++ b/core/comboot.inc -@@ -1087,6 +1087,7 @@ comboot_hook_entry: +@@ -1088,6 +1088,7 @@ comboot_hook_entry: push fs push es push ds @@ -651,10 +666,10 @@ index e5dc115..60506ce 100644 pop ds pop es diff --git a/core/ui.inc b/core/ui.inc -index 59b5724..d56c148 100644 +index e37f2a7..6137dc9 100644 --- a/core/ui.inc +++ b/core/ui.inc -@@ -612,7 +612,11 @@ kernel_good: +@@ -616,7 +616,11 @@ kernel_good: mov [KernelCNameLen],di ; Default memory limit, can be overridden by image loaders @@ -666,7 +681,7 @@ index 59b5724..d56c148 100644 mov [MyHighMemSize],eax popad -@@ -633,6 +637,7 @@ kernel_good: +@@ -637,6 +641,7 @@ kernel_good: ; At this point, EAX contains the size of the kernel, SI contains ; the file handle/cluster pointer, and ECX contains the extension (if any.) ; @@ -773,10 +788,10 @@ index 0000000..a98f9aa +} diff --git a/modules/gfxboot.c b/modules/gfxboot.c new file mode 100644 -index 0000000..b4a794c +index 0000000..01c6c84 --- /dev/null +++ b/modules/gfxboot.c -@@ -0,0 +1,1036 @@ +@@ -0,0 +1,1039 @@ +/* + * + * gfxboot.c @@ -1683,7 +1698,7 @@ index 0000000..b4a794c + + r.edi = comboot + (uint32_t) cmdline; + r.ecx = sizeof cmdline; -+ r.eax = timeout; ++ r.eax = timeout * 182 / 100; + timeout = 0; // use timeout only first time + farcall(gfx.jmp_table[GFX_BC_INPUT], &r); + if((r.eflags & X86_CF)) r.eax = 1; @@ -1780,7 +1795,6 @@ index 0000000..b4a794c + + case 4: // progress start + r->eax = r->ecx >> gfx_config.sector_shift; // kernel size in sectors -+ r->eax = 0; + r->esi = comboot + (uint32_t) current_label; + farcall(gfx.jmp_table[GFX_BC_PROGRESS_INIT], r); + break; @@ -1795,6 +1809,10 @@ index 0000000..b4a794c + farcall(gfx.jmp_table[GFX_BC_PROGRESS_DONE], r); + gfx_done(); + break; ++ ++ case 7: // stop gfxboot ++ gfx_done(); ++ break; + } +} + diff --git a/syslinux.changes b/syslinux.changes index 47e73e6..9142b74 100644 --- a/syslinux.changes +++ b/syslinux.changes @@ -1,3 +1,14 @@ +------------------------------------------------------------------- +Mon Oct 19 16:45:35 CEST 2009 - snwint@suse.de + +- get kernel size right + +------------------------------------------------------------------- +Mon Oct 19 13:32:29 CEST 2009 - snwint@suse.de + +- set correct timeout value +- localboot should return to text mode + ------------------------------------------------------------------- Mon Oct 5 13:44:54 CEST 2009 - snwint@suse.de diff --git a/syslinux.spec b/syslinux.spec index e0ee2d8..ccc6790 100644 --- a/syslinux.spec +++ b/syslinux.spec @@ -27,7 +27,7 @@ Requires: mtools AutoReqProv: on Summary: Boot Loader for Linux Version: 3.82 -Release: 7 +Release: 8 Source: %{name}-%{version}.tar.bz2 Source1: isolinux-config Source2: README.gfxboot