Magellan Linux

Annotation of /trunk/mkinitrd-magellan/isolinux/cpuinit.inc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 532 - (hide annotations) (download)
Sat Sep 1 22:45:15 2007 UTC (16 years, 8 months ago) by niro
File size: 1887 byte(s)
-import if magellan mkinitrd; it is a fork of redhats mkinitrd-5.0.8 with all magellan patches and features; deprecates magellan-src/mkinitrd

1 niro 532 ;; $Id: cpuinit.inc,v 1.1 2007-09-01 22:44:04 niro Exp $
2     ;; -----------------------------------------------------------------------
3     ;;
4     ;; Copyright 1994-2002 H. Peter Anvin - All Rights Reserved
5     ;;
6     ;; This program is free software; you can redistribute it and/or modify
7     ;; it under the terms of the GNU General Public License as published by
8     ;; the Free Software Foundation, Inc., 53 Temple Place Ste 330,
9     ;; Boston MA 02111-1307, USA; either version 2 of the License, or
10     ;; (at your option) any later version; incorporated herein by reference.
11     ;;
12     ;; -----------------------------------------------------------------------
13    
14     ;;
15     ;; cpuinit.inc
16     ;;
17     ;; CPU-dependent initialization and related checks.
18     ;;
19    
20     check_escapes:
21     mov ah,02h ; Check keyboard flags
22     int 16h
23     mov [KbdFlags],al ; Save for boot prompt check
24     test al,04h ; Ctrl->skip 386 check
25     jnz skip_checks
26    
27     ;
28     ; Now check that there is sufficient low (DOS) memory
29     ;
30     ; NOTE: Linux doesn't use all of real_mode_seg, but we use the same
31     ; segment for COMBOOT images, which can use all 64K
32     ;
33     dosram_k equ (real_mode_seg+0x1000) >> 6 ; Minimum DOS memory (K)
34     int 12h
35     cmp ax,dosram_k
36     jae enough_ram
37     mov si,err_noram
38     call writestr
39     jmp kaboom
40     enough_ram:
41     skip_checks:
42    
43     ;
44     ; Initialize the bcopy32 code in low memory
45     ;
46     mov si,section..bcopy32.start
47     mov di,__bcopy_start
48     mov cx,__bcopy_size >> 2
49     rep movsd
50    
51     ;
52     ; Check if we're 386 (as opposed to 486+); if so we need to blank out
53     ; the WBINVD instruction
54     ;
55     ; We check for 486 by setting EFLAGS.AC
56     ;
57     %if DO_WBINVD
58     pushfd ; Save the good flags
59     pushfd
60     pop eax
61     mov ebx,eax
62     xor eax,(1 << 18) ; AC bit
63     push eax
64     popfd
65     pushfd
66     pop eax
67     popfd ; Restore the original flags
68     xor eax,ebx
69     jnz is_486
70     ;
71     ; 386 - Looks like we better blot out the WBINVD instruction
72     ;
73     mov byte [try_wbinvd],0c3h ; Near RET
74     is_486:
75     %endif ; DO_WBINVD
76