diff options
author | hpa <hpa> | 2002-04-28 05:40:11 +0000 |
---|---|---|
committer | hpa <hpa> | 2002-04-28 05:40:11 +0000 |
commit | bdb0fcf1acccec785084bfe0b3802d4674638b64 (patch) | |
tree | bfe06e9b601affd91f3e028a3e274dc05a668c13 /pxelinux.asm | |
parent | c0cd85e0e93e2390f3f33169c78e4ed0033e5ceb (diff) | |
download | syslinux-bdb0fcf1acccec785084bfe0b3802d4674638b64.tar.gz |
Factor out CPU initialization and some common configuration intosyslinux-1.73-pre6
separate files; fix bcopy bugs.
Diffstat (limited to 'pxelinux.asm')
-rw-r--r-- | pxelinux.asm | 87 |
1 files changed, 5 insertions, 82 deletions
diff --git a/pxelinux.asm b/pxelinux.asm index f447b7de..6735615f 100644 --- a/pxelinux.asm +++ b/pxelinux.asm @@ -20,25 +20,21 @@ %define IS_PXELINUX 1 %include "macros.inc" +%include "config.inc" %include "kernel.inc" %include "bios.inc" %include "tracers.inc" %include "pxe.inc" ; -; Some semi-configurable constants... change on your own risk. Most are imposed -; by the kernel. +; Some semi-configurable constants... change on your own risk. ; my_id equ pxelinux_id -max_cmd_len equ 255 ; Must be odd; 255 is the kernel limit FILENAME_MAX_LG2 equ 6 ; log2(Max filename size Including final null) FILENAME_MAX equ (1 << FILENAME_MAX_LG2) NULLFILE equ 0 ; Zero byte == null file name REBOOT_TIME equ 5*60 ; If failure, time until full reset -HIGHMEM_MAX equ 037FFFFFFh ; DEFAULT highest address for an initrd %assign HIGHMEM_SLOP 128*1024 ; Avoid this much memory near the top -DEFAULT_BAUD equ 9600 ; Default baud rate for serial port -BAUD_DIVISOR equ 115200 ; Serial port parameter MAX_SOCKETS_LG2 equ 6 ; log2(Max number of open sockets) MAX_SOCKETS equ (1 << MAX_SOCKETS_LG2) TFTP_PORT equ htons(69) ; Default TFTP port @@ -213,6 +209,7 @@ InitRDCNameLen resw 1 ; Length of unmangled initrd name NextCharJump resw 1 ; Routine to interpret next print char SetupSecs resw 1 ; Number of setup sectors A20Test resw 1 ; Counter for testing status of A20 +A20Type resw 1 ; A20 type CmdLineLen resw 1 ; Length of command line including null GraphXSize resw 1 ; Width of splash screen file VGAPos resw 1 ; Pointer into VGA memory @@ -593,84 +590,10 @@ udp_init: jmp kaboom .success: -; -; Check that no moron is trying to boot Linux on a 286 or so. According -; to Intel, the way to check is to see if the high 4 bits of the FLAGS -; register are either all stuck at 1 (8086/8088) or all stuck at 0 -; (286 in real mode), if not it is a 386 or higher. They didn't -; say how to check for a 186/188, so I *hope* it falls out as a 8086 -; or 286 in this test. -; -; Also, provide an escape route in case it doesn't work. -; -check_escapes: - mov ah,02h ; Check keyboard flags - int 16h - mov [KbdFlags],al ; Save for boot prompt check - test al,04h ; Ctrl->skip 386 check - jnz skip_checks -test_8086: - pushf ; Get flags - pop ax - and ax,0FFFh ; Clear top 4 bits - push ax ; Load into FLAGS - popf - pushf ; And load back - pop ax - and ax,0F000h ; Get top 4 bits - cmp ax,0F000h ; If set -> 8086/8088 - je not_386 -test_286: - pushf ; Get flags - pop ax - or ax,0F000h ; Set top 4 bits - push ax - popf - pushf - pop ax - and ax,0F000h ; Get top 4 bits - jnz is_386 ; If not clear -> 386 -not_386: - mov si,err_not386 - call writestr - jmp kaboom -is_386: - ; Now we know it's a 386 or higher -; -; Now check that there is sufficient low (DOS) memory -; - int 12h - cmp ax,(real_mode_seg+0xa00) >> 6 - jae enough_ram - mov si,err_noram - call writestr - jmp kaboom -enough_ram: -skip_checks: - -; -; Check if we're 386 (as opposed to 486+); if so we need to blank out -; the WBINVD instruction -; -; We check for 486 by setting EFLAGS.AC -; - pushfd ; Save the good flags - pushfd - pop eax - mov ebx,eax - xor eax,(1 << 18) ; AC bit - push eax - popfd - pushfd - pop eax - popfd ; Restore the original flags - xor eax,ebx - jnz is_486 ; -; 386 - Looks like we better blot out the WBINVD instruction +; Common initialization code ; - mov byte [try_wbinvd],0c3h ; Near RET -is_486: +%include "cpuinit.inc" ; ; Now we're all set to start with our *real* business. First load the |