1; -*- fundamental -*- 2; ----------------------------------------------------------------------- 3; 4; Copyright 2004-2008 H. Peter Anvin - All Rights Reserved 5; Copyright 2009 Intel Corporation; author: H. Peter Anvin 6; 7; This program is free software; you can redistribute it and/or modify 8; it under the terms of the GNU General Public License as published by 9; the Free Software Foundation, Inc., 53 Temple Place Ste 330, 10; Boston MA 02111-1307, USA; either version 2 of the License, or 11; (at your option) any later version; incorporated herein by reference. 12; 13; ----------------------------------------------------------------------- 14 15; 16; init.inc 17; 18; Common initialization code (inline) 19; 20 21 section .text16 22common_init: 23 ; Initialize PM invocation framework 24 call pm_init 25 26%if IS_PXELINUX 27 ; Save derivative-specific data 28 pm_call pm_save_data 29%endif 30 31 ; Decompress PM code to its target location 32 pm_call pm_decompress 33 cmp eax,__pm_code_len 34 jne kaboom 35 36 extern syslinux_register_bios, init 37 38 pm_call syslinux_register_bios 39 pm_call init 40 41; 42; The code to decompress the PM code and initialize other segments. 43; 44 extern _lzo1x_decompress_asm_fast_safe 45 46 section .textnr 47 bits 32 48pm_decompress: 49 push __pm_code_len + 16 ; Space for decompressed size 50 push esp ; Pointer to previous word 51 push __pm_code_start ; Target address 52 push dword [lzo_data_size] ; Compressed size 53 push dword __pm_code_lma 54 call _lzo1x_decompress_asm_fast_safe 55 add esp,16 56 pop RM_EAX ; Decompressed size 57 58 ; Zero bss sections (but not .earlybss, since it may 59 ; contain already-live data.) 60 xor eax,eax 61 mov edi,__bss_start 62 mov ecx,__bss_dwords 63 rep stosd 64 mov edi,__bss16_start 65 mov ecx,__bss16_dwords 66 rep stosd 67 mov edi,__high_clear_start ; .uibss, .lowmem 68 mov ecx,__high_clear_dwords 69 rep stosd 70 71 ret 72 73 section .data16 74lzo_data_size dd 0 ; filled in by compressor 75 76 section .text16 77 bits 16 78