Reduce the number of global variables
authorMatt Fleming <matt.fleming@intel.com>
Tue, 4 Dec 2012 22:00:13 +0000 (22:00 +0000)
committerMatt Fleming <matt.fleming@intel.com>
Wed, 5 Dec 2012 20:07:11 +0000 (20:07 +0000)
In preparation for strictly limiting the list of variables that are
exported (global) in the core, delete any unused variables, rewrite
variable declarations in C that are not referenced by asm and delete
files that are no longer included in other asm files.

Cc: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
16 files changed:
com32/elflink/ldlinux/readconfig.c
com32/include/syslinux/features.h [deleted file]
core/bios.inc
core/comboot.inc
core/diskfs.inc
core/font.c
core/fs/pxe/pxe.c
core/fs/pxe/pxe.h
core/graphics.c
core/highmem.inc [deleted file]
core/include/bios.h
core/init.c
core/isolinux.asm
core/kernel.inc
core/layout.inc
core/pxelinux.asm

index 64c20a0..705ffa8 100644 (file)
@@ -718,7 +718,7 @@ extern uint8_t FlowInput;
 extern uint8_t FlowOutput;
 extern uint16_t SerialPort;
 extern uint16_t BaudDivisor;
-extern uint8_t SerialNotice;
+static uint8_t SerialNotice = 1;
 
 #define DEFAULT_BAUD   9600
 #define BAUD_DIVISOR   115200
diff --git a/com32/include/syslinux/features.h b/com32/include/syslinux/features.h
deleted file mode 100644 (file)
index d25d08d..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/* ----------------------------------------------------------------------- *
- *
- *   Copyright 2007-2008 H. Peter Anvin - All Rights Reserved
- *
- *   Permission is hereby granted, free of charge, to any person
- *   obtaining a copy of this software and associated documentation
- *   files (the "Software"), to deal in the Software without
- *   restriction, including without limitation the rights to use,
- *   copy, modify, merge, publish, distribute, sublicense, and/or
- *   sell copies of the Software, and to permit persons to whom
- *   the Software is furnished to do so, subject to the following
- *   conditions:
- *
- *   The above copyright notice and this permission notice shall
- *   be included in all copies or substantial portions of the Software.
- *
- *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- *   OTHER DEALINGS IN THE SOFTWARE.
- *
- * ----------------------------------------------------------------------- */
-
-#ifndef _SYSLINUX_FEATURES_H
-#define _SYSLINUX_FEATURES_H
-
-#define SYSLINUX_FEATURE_LOCAL_BOOT    (0*8+0)
-#define SYSLINUX_FEATURE_NOOP_IDLE     (0*8+1)
-
-extern uint8_t feature_flags;
-extern uint8_t feature_flags_len;
-
-static inline int syslinux_has_feature(unsigned int __flag)
-{
-    unsigned int __byte = __flag >> 3;
-    unsigned int __bit = __flag & 7;
-
-    if (__byte <= feature_flags_len)
-       return (feature_flags[__byte] >> __bit) & 1;
-    else
-       return 0;
-}
-
-#endif /* _SYSLINUX_FEATURE_H */
index 33a3cd4..2e15059 100644 (file)
@@ -18,7 +18,6 @@
 
 %ifndef _BIOS_INC
 %define _BIOS_INC
-                global BIOS_fbm, BIOS_timer
 
                ; Interrupt vectors
                absolute 4*1Ch
index 4474cd3..2e690ff 100644 (file)
@@ -522,31 +522,13 @@ APIKeyFlag        db 0
 
 zero_string    db 0                    ; Empty, null-terminated string
 
-;
-; This is the feature flag array for INT 22h AX=0015h
-;
-; Note: PXELINUX clears the idle is noop flag if appropriate
-; in pxe_detect_nic_type
-;
-               global feature_flags, feature_flags_len
-feature_flags:
-               db 1                    ; Have local boot, idle is not noop
-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
 
-               global VGAFontSize, UserFont
-               alignz 2
-VGAFontSize    dw 16                   ; Defaults to 16 byte font
-UserFont       db 0                    ; Using a user-specified font
-
                section .bss16
                alignb 4
 DOSErrTramp    resd    33              ; Error trampolines
 
-               global ConfigName
-ConfigName     resb    FILENAME_MAX
 %ifndef HAVE_CURRENTDIRNAME
                global CurrentDirName
 CurrentDirName resb    FILENAME_MAX
index dcbc924..9c9da26 100644 (file)
@@ -91,24 +91,15 @@ auto_boot:
                jmp kaboom
 
                section .bss16
-               global CmdOptPtr, KbdMap
                alignb 4
 ThisKbdTo      resd 1                  ; Temporary holder for KbdTimeout
 ThisTotalTo    resd 1                  ; Temporary holder for TotalTimeout
 KernelExtPtr   resw 1                  ; During search, final null pointer
-CmdOptPtr      resw 1                  ; Pointer to first option on cmd line
-KbdFlags       resb 1                  ; Check for keyboard escapes
 FuncFlag       resb 1                  ; Escape sequences received from keyboard
 KernelType     resb 1                  ; Kernel type, from vkernel, if known
-KbdMap         resb 256                ; Keyboard map
                global KernelName
 KernelName     resb FILENAME_MAX       ; Mangled name for kernel
-               section .config
-               global PXERetry
-PXERetry       dw 0                    ; Extra PXE retries
                section .data16
-               global SerialNotice
-SerialNotice   db 1                    ; Only print this once
                global IPAppends, numIPAppends
 %if IS_PXELINUX
                extern IPOption
index 9e7aa8f..38f03f5 100644 (file)
@@ -26,6 +26,8 @@
 #include "graphics.h"
 #include "core.h"
 
+uint8_t UserFont = 0;          /* Using a user-specified font */
+
 __lowmem char fontbuf[8192];
 
 uint16_t GXPixCols = 1;                /* Graphics mode pixel columns */
index 3cc6497..ee818ec 100644 (file)
@@ -2,6 +2,7 @@
 #include <stdio.h>
 #include <string.h>
 #include <core.h>
+#include <bios.h>
 #include <fs.h>
 #include <minmax.h>
 #include <sys/cpu.h>
@@ -644,7 +645,7 @@ static uint32_t pxe_getfssec(struct file *file, char *buf,
  *
  */
 static void __pxe_searchdir(const char *filename, struct file *file);
-extern uint16_t PXERetry;
+uint16_t PXERetry;
 
 static void pxe_searchdir(const char *filename, struct file *file)
 {
@@ -1270,9 +1271,9 @@ static const void *memory_scan(uintptr_t start, int (*func)(const void *))
 
 static const struct pxe_t *memory_scan_for_pxe_struct(void)
 {
-    extern uint16_t BIOS_fbm;  /* Starting segment */
+    uint16_t start = bios_fbm(); /* Starting segment */
 
-    return memory_scan(BIOS_fbm << 10, is_pxe);
+    return memory_scan(start << 10, is_pxe);
 }
 
 static const struct pxenv_t *memory_scan_for_pxenv_struct(void)
@@ -1677,11 +1678,11 @@ void unload_pxe(uint16_t flags)
        uint16_t Status;        /* All calls have this as the first member */
     } unload_call;
 
-    dprintf("FBM before unload = %d\n", BIOS_fbm);
+    dprintf("FBM before unload = %d\n", bios_fbm());
 
     err = reset_pxe();
 
-    dprintf("FBM after reset_pxe = %d, err = %d\n", BIOS_fbm, err);
+    dprintf("FBM after reset_pxe = %d, err = %d\n", bios_fbm(), err);
 
     /* If we want to keep PXE around, we still need to reset it */
     if (flags || err)
@@ -1701,8 +1702,8 @@ void unload_pxe(uint16_t flags)
     }
 
     api = 0xff00;
-    if (real_base_mem <= BIOS_fbm) {  /* Sanity check */ 
-       dprintf("FBM %d < real_base_mem %d\n", BIOS_fbm, real_base_mem);
+    if (real_base_mem <= bios_fbm()) {  /* Sanity check */
+       dprintf("FBM %d < real_base_mem %d\n", bios_fbm(), real_base_mem);
        goto cant_free;
     }
     api++;
@@ -1710,20 +1711,20 @@ void unload_pxe(uint16_t flags)
     /* Check that PXE actually unhooked the INT 0x1A chain */
     int_addr = (size_t)GET_PTR(*(far_ptr_t *)(4 * 0x1a));
     int_addr >>= 10;
-    if (int_addr >= real_base_mem || int_addr < BIOS_fbm) {
-       BIOS_fbm = real_base_mem;
-       dprintf("FBM after unload_pxe = %d\n", BIOS_fbm);
+    if (int_addr >= real_base_mem || int_addr < bios_fbm()) {
+       set_bios_fbm(real_base_mem);
+       dprintf("FBM after unload_pxe = %d\n", bios_fbm());
        return;
     }
 
     dprintf("Can't free FBM, real_base_mem = %d, "
            "FBM = %d, INT 1A = %08x (%d)\n",
-           real_base_mem, BIOS_fbm,
+           real_base_mem, bios_fbm(),
            *(uint32_t *)(4 * 0x1a), int_addr);
 
 cant_free:
     printf("Failed to free base memory error %04x-%08x (%d/%dK)\n",
-          api, *(uint32_t *)(4 * 0x1a), BIOS_fbm, real_base_mem);
+          api, *(uint32_t *)(4 * 0x1a), bios_fbm(), real_base_mem);
     return;
 }
 
index c754106..d437758 100644 (file)
@@ -211,7 +211,6 @@ extern bool have_uuid;
 extern uint8_t uuid_type;
 extern uint8_t uuid[];
 
-extern uint16_t BIOS_fbm;
 extern const uint8_t TimeoutTable[];
 
 /*
index bdf48a8..55d91d7 100644 (file)
@@ -28,6 +28,7 @@
 uint8_t UsingVGA = 0;
 uint16_t VGAPos;               /* Pointer into VGA memory */
 uint16_t *VGAFilePtr;          /* Pointer into VGAFileBuf */
+uint16_t VGAFontSize = 16;     /* Defaults to 16 byte font */
 
 char VGAFileBuf[VGA_FILE_BUF_SIZE]; /* Unmangled VGA image name */
 char VGAFileMBuf[FILENAME_MAX];        /* Mangled VGA image name */
diff --git a/core/highmem.inc b/core/highmem.inc
deleted file mode 100644 (file)
index ea386ff..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-;; -----------------------------------------------------------------------
-;;
-;;   Copyright 1994-2008 H. Peter Anvin - All Rights Reserved
-;;
-;;   This program is free software; you can redistribute it and/or modify
-;;   it under the terms of the GNU General Public License as published by
-;;   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
-;;   Boston MA 02111-1307, USA; either version 2 of the License, or
-;;   (at your option) any later version; incorporated herein by reference.
-;;
-;; -----------------------------------------------------------------------
-
-;;
-;; highmem.inc
-;;
-;; Probe for the size of high memory.  This can be overridden by a
-;; mem= command on the command line while booting a new kernel.
-;;
-
-               section .text16
-
-;
-; This is set up as a subroutine; it will set up the global variable
-; HighMemSize.  All registers are preserved.
-;
-highmemsize:
-               push es
-               pushfd
-               pushad
-
-               push cs
-               pop es
-
-;
-; First, try INT 15:E820 (get BIOS memory map)
-;
-; Note: we may have to scan this multiple times, because some (daft) BIOSes
-; report main memory as multiple contiguous ranges...
-;
-get_e820:
-               mov dword [E820Max],-(1 << 20)  ; Max amount of high memory
-               mov dword [E820Mem],(1 << 20)   ; End of detected high memory
-.start_over:
-               mov di,E820Buf
-               xor ax,ax
-               mov cx,10
-               rep stosw                       ; Clear buffer
-               xor ebx,ebx                     ; Start with first record
-               jmp short .do_e820              ; Skip "at end" check first time!
-.int_loop:     and ebx,ebx                     ; If we're back at beginning...
-               jz .e820_done                   ; ... we're done
-.do_e820:      mov eax,0000E820h
-               mov edx,534D4150h               ; "SMAP" backwards
-               xor ecx,ecx
-               mov cl,20                       ; ECX <- 20 (size of buffer)
-               mov di,E820Buf
-               int 15h
-               jnc .no_carry
-               ; If carry, ebx == 0 means error, ebx != 0 means we're done
-               and ebx,ebx
-               jnz .e820_done
-               jmp no_e820
-.no_carry:
-               cmp eax,534D4150h
-               jne no_e820
-               cmp cx,20
-               jb no_e820
-
-;
-; Look for a memory block starting at <= 1 MB and continuing upward
-;
-               cmp dword [E820Buf+4], byte 0
-               ja .int_loop                    ; Start >= 4 GB?
-               mov eax, [E820Buf]
-               cmp dword [E820Buf+16],1
-               je .is_ram                      ; Is it memory?
-               ;
-               ; Non-memory range.  Remember this as a limit; some BIOSes get the length
-               ; of primary RAM incorrect!
-               ;
-.not_ram:
-               cmp eax, (1 << 20)
-               jb .int_loop                    ; Starts in lowmem region
-               cmp eax,[E820Max]
-               jae .int_loop                   ; Already above limit
-               mov [E820Max],eax               ; Set limit
-               jmp .int_loop
-
-.is_ram:
-               cmp eax,[E820Mem]
-               ja .int_loop                    ; Not contiguous with our starting point
-               add eax,[E820Buf+8]
-               jc .overflow
-               cmp dword [E820Buf+12],0
-               je .nooverflow
-.overflow:
-               or eax,-1
-.nooverflow:
-               cmp eax,[E820Mem]
-               jbe .int_loop                   ; All is below our baseline
-               mov [E820Mem],eax
-               jmp .start_over                 ; Start over in case we find an adjacent range
-
-.e820_done:
-               mov eax,[E820Mem]
-               cmp eax,[E820Max]
-               jna .not_limited
-               mov eax,[E820Max]
-.not_limited:
-               cmp eax,(1 << 20)
-               ja got_highmem                  ; Did we actually find memory?
-               ; otherwise fall through
-
-;
-; INT 15:E820 failed.  Try INT 15:E801.
-;
-no_e820:
-               mov ax,0e801h                   ; Query high memory (semi-recent)
-               int 15h
-               jc no_e801
-               cmp ax,3c00h
-               ja no_e801                      ; > 3C00h something's wrong with this call
-               jb e801_hole                    ; If memory hole we can only use low part
-
-               mov ax,bx
-               shl eax,16                      ; 64K chunks
-               add eax,(16 << 20)              ; Add first 16M
-               jmp short got_highmem
-
-;
-; INT 15:E801 failed.  Try INT 15:88.
-;
-no_e801:
-               mov ah,88h                      ; Query high memory (oldest)
-               int 15h
-               cmp ax,14*1024                  ; Don't trust memory >15M
-               jna e801_hole
-               mov ax,14*1024
-e801_hole:
-               and eax,0ffffh
-               shl eax,10                      ; Convert from kilobytes
-               add eax,(1 << 20)               ; First megabyte
-got_highmem:
-%if HIGHMEM_SLOP != 0
-               sub eax,HIGHMEM_SLOP
-%endif
-               mov [HighMemSize],eax
-               popad
-               popfd
-               pop es
-               ret                             ; Done!
-
-               section .bss16
-               alignb 4
-E820Buf                resd 5                  ; INT 15:E820 data buffer
-E820Mem                resd 1                  ; Memory detected by E820
-E820Max                resd 1                  ; Is E820 memory capped?
-; HighMemSize is defined in com32.inc
index 42a9768..d38f669 100644 (file)
 #define BIOS_magic     0x0472  /* BIOS reset magic */
 #define BIOS_vidrows   0x0484  /* Number of screen rows */
 
+static inline uint16_t bios_fbm(void)
+{
+       return *(volatile uint16_t *)BIOS_fbm;
+}
+
+static inline void set_bios_fbm(uint16_t mem)
+{
+       *(volatile uint16_t *)BIOS_fbm = mem;
+}
+
 #define serial_buf_size                4096
 #define IO_DELAY_PORT          0x80 /* Invalid port (we hope!) */
 
index 26b4a19..ca9e413 100644 (file)
@@ -7,6 +7,7 @@
 static uint32_t min_lowmem_heap = 65536;
 extern char __lowmem_heap[];
 uint8_t KbdFlags;              /* Check for keyboard escapes */
+uint8_t KbdMap[256];           /* Keyboard map */
 
 static inline void check_escapes(void)
 {
index 617003c..8866298 100644 (file)
@@ -1202,24 +1202,15 @@ debug_tracer:   pushad
 %endif ; DEBUG_TRACERS
 
                section .bss16
-               global CmdOptPtr, KbdMap
                alignb 4
 ThisKbdTo      resd 1                  ; Temporary holder for KbdTimeout
 ThisTotalTo    resd 1                  ; Temporary holder for TotalTimeout
 KernelExtPtr   resw 1                  ; During search, final null pointer
-CmdOptPtr      resw 1                  ; Pointer to first option on cmd line
-KbdFlags       resb 1                  ; Check for keyboard escapes
 FuncFlag       resb 1                  ; Escape sequences received from keyboard
 KernelType     resb 1                  ; Kernel type, from vkernel, if known
-KbdMap         resb 256                ; Keyboard map
                global KernelName
 KernelName     resb FILENAME_MAX       ; Mangled name for kernel
-               section .config
-               global PXERetry
-PXERetry       dw 0                    ; Extra PXE retries
                section .data16
-               global SerialNotice
-SerialNotice   db 1                    ; Only print this once
                global IPAppends, numIPAppends
 %if IS_PXELINUX
                extern IPOption
index 245cd6d..5e1c7a3 100644 (file)
@@ -62,9 +62,6 @@ linux_fdctab  resb 12
 cmd_line_here  equ $                   ; F800 Should be out of the way
                endstruc
 
-               global cmd_line
-cmd_line       equ core_real_mode + cmd_line_here
-
 ;
 ; Old kernel command line signature
 ;
index 2484392..6d31b18 100644 (file)
@@ -52,7 +52,6 @@ LATEBSS_START equ 0B800h
 ;
 ; 32-bit stack layout
 ;
-               global STACK32_LEN
 STACK32_LEN    equ 64*1024
 
                section .stack          nobits write align=4096
index 63334ff..097b856 100644 (file)
@@ -281,24 +281,15 @@ Kernel_EAX        resd 1
 Kernel_SI      resw 1
 
                section .bss16
-               global CmdOptPtr, KbdMap
                alignb 4
 ThisKbdTo      resd 1                  ; Temporary holder for KbdTimeout
 ThisTotalTo    resd 1                  ; Temporary holder for TotalTimeout
 KernelExtPtr   resw 1                  ; During search, final null pointer
-CmdOptPtrj     resw 1                  ; Pointer to first option on cmd line
-KbdFlags       resb 1                  ; Check for keyboard escapes
 FuncFlag       resb 1                  ; Escape sequences received from keyboard
 KernelType     resb 1                  ; Kernel type, from vkernel, if known
-KbdMap         resb 256                ; Keyboard map
                global KernelName
 KernelName     resb FILENAME_MAX       ; Mangled name for kernel
-               section .config
-               global PXERetry
-PXERetry       dw 0                    ; Extra PXE retries
                section .data16
-               global SerialNotice
-SerialNotice   db 1                    ; Only print this once
                extern IPOption
                global IPAppends, numIPAppends
                alignz 2