Michael Brown
95c07736cb
Be more aggressive in attempts to enable A20, now that we have the
...
optimisation of only trying to do so when necessary.
2007-07-14 14:21:18 +01:00
Michael Brown
57b5e227ff
Use fast in-situ test for gate A20 being set, to cut down on the
...
number of (potentially very slow) gateA20_set operations.
Die with a fatal error if we are unable to set gate A20; if this fails
then we are bound to experience memory corruption at a later stage,
and I'd prefer to pick it up early.
2007-07-13 13:32:49 +01:00
Michael Brown
1ecb9acb87
Fix typo
2007-07-04 02:25:07 +01:00
Michael Brown
89349d7fad
Separated out initialisation functions from startup/shutdown functions.
2007-07-03 23:09:56 +01:00
Marty Connor
9b3c4e4d79
Warnings purge: src/arch/i386, src/core/disk.c, ramdisk, autoboot
2007-07-03 16:02:15 -04:00
Michael Brown
22ed1fbaf1
Add ability to read serial number from SMBIOS
2007-02-01 20:52:12 +00:00
Michael Brown
b9f99858ab
Make the getmemsize() prototype available in memsizes.h, for code that
...
doesn't want to go to the hassle of processing a full memory map.
2007-01-14 15:32:25 +00:00
Michael Brown
dca369ddc3
Call hide_etherboot() from startup(), rather than requiring the prefix to
...
do it.
2007-01-14 00:53:56 +00:00
Michael Brown
0b0e34e667
Provide {get,set}_fbms() in basemem.h.
...
set_fbms() will also update the E820 hidden region.
2007-01-13 23:57:31 +00:00
Michael Brown
aaed3d50a8
Some operating systems get a nasty shock if a region of the E820 map seems
...
to start on a non-page boundary. Make life safer by rounding out our
edited regions.
2007-01-13 23:38:33 +00:00
Michael Brown
859da6bd32
Allow external code to update hidden memory regions.
2007-01-12 03:13:04 +00:00
Michael Brown
c980cdd0aa
Move memmap.h out of arch/i386; it no longer contains anything
...
architecture-dependent and is needed by the ELF code.
2007-01-11 14:08:44 +00:00
Michael Brown
477a70697a
Added PnP BIOS scanning code, separated out from the UNDI driver
2007-01-05 16:10:03 +00:00
Michael Brown
f58f193633
Engage brain: since when was zero >= 0x80 ?
2006-12-21 05:15:26 +00:00
Michael Brown
9c3b4e5b0b
Some BIOSes return 0xe0 for extended characters. Just assume that
...
anything over 0x80 is an extended character.
2006-12-21 00:07:48 +00:00
Michael Brown
dbb7b30cca
Return ANSI sequences for special keys
2006-12-20 23:42:28 +00:00
Michael Brown
0aa1223264
Optimise bios_putchar for speed(!) by avoiding two separate real-mode
...
calls. This does make a visible difference when clearing the screen with
werase() inside bochs or qemu.
2006-12-19 01:15:05 +00:00
Michael Brown
8b3a4c9862
Add basic ANSI escape sequence support to BIOS console
2006-12-18 01:19:38 +00:00
Michael Brown
8bff0f0619
Avoid draining the keyboard buffer during gateA20_set(). It shouldn't
...
technically be necessary, because the "enable A20" command requires
only that the keyboard controller is ready to accept input (i.e. that
its input buffer is empty), and shouldn't also require that the
keyboard is ready to send output (i.e. that its output buffer is also
empty). See http://www.smsc.com/main/tools/io-bios/42i.pdf section
3.1 ("Command Invocation") for a justification.
gateA20_set() is called on every real-mode transition (in case some
idiot piece of external code such as Intel's PXE stack decided it
would be fun to re-disable A20), so draining the keyboard buffer means
that we end up losing keypresses on some systems. In particular, this
makes typing at the command line almost impossible, and causes
Etherboot to ignore Ctrl-Alt-Del.
We should really implement a gateA20_test() function to verify that
gate A20 has been correctly enabled, and think about adding other
commonly-used methods such as Fast Gate A20.
2006-12-05 09:45:39 +00:00
Michael Brown
88e38fa148
We don't actually have a stdio.h header file. Our printf() functions are
...
defined in vsprintf.h. (This may change, since vsprintf.h is a
non-standard name, but for now it's the one to use.)
There should be no need to include vsprintf.h just for DBG() statements,
since include/compiler.h forces it in for a debug build anyway.
2006-09-27 10:58:14 +00:00
Marty Connor
6ac78f6aff
added stdio.h to includes for DBG compilation
2006-09-27 05:57:06 +00:00
Marty Connor
56a3ff7202
get rid of compile warnings (except intentionally generated ones)
2006-09-14 20:54:05 +00:00
Marty Connor
c30623b739
fix DBG macro unknown variable
2006-09-14 20:34:53 +00:00
Michael Brown
78dd963c1f
Check to see if we've reached the end of the map before attempting to
...
skip past an empty region, otherwise we end up generating an infinitely
long e820 map. (Yes, there *are* real systems that provide e820 maps
with a zero-length region at the end...)
2006-08-31 13:25:45 +00:00
Michael Brown
2138db36ca
Add "addr32" required explicitly by older gas.
2006-06-12 01:07:43 +00:00
Michael Brown
476d02051f
Windows Server 2003 sulks if we feed it an empty region in base memory
...
as a result of our memory map editing, so strip out any empty regions.
2006-06-09 12:20:03 +00:00
Michael Brown
d82f71efd0
Also hide base memory region from E820 map.
2006-05-25 00:10:58 +00:00
Michael Brown
f939ff7cb5
Fix printf format warning error
2006-05-25 00:02:27 +00:00
Michael Brown
3bd3c13c7b
Why should pushal/popal put the registers on the stack in a logical
...
order?
2006-05-25 00:01:46 +00:00
Michael Brown
dd75965057
Typo.
2006-05-25 00:00:53 +00:00
Michael Brown
e4f8d6eed7
Add a "count" field to struct memory_map.
2006-05-25 00:00:30 +00:00
Michael Brown
986f6ffff1
Define a struct memory_map with a fixed number of entries, rather than
...
requiring each caller to decide how many entries it wants to permit.
2006-05-24 14:41:27 +00:00
Michael Brown
8110f9b082
Updated to REAL_CODE()
2006-05-24 13:50:40 +00:00
Michael Brown
e8550035af
Updated to REAL_CODE()
2006-05-24 13:28:39 +00:00
Michael Brown
c4d688c005
Updated to REAL_CODE().
2006-05-24 13:24:22 +00:00
Michael Brown
04d6005d77
Update to REAL_CODE()
2006-05-24 12:45:50 +00:00
Michael Brown
53935e9dc6
Set carry flag before calling INT 15,e801 and INT 15,e820.
...
Ignore carry flag for INT 15,88; the Ralf Brown interrupt list says
that CF is unreliable for this call.
2006-05-24 12:19:16 +00:00
Michael Brown
77a65075a6
Replaced memsizes.c with smaller memmap.c, taking advantage of __data16,
...
and creating a memory map that's easier to work with than the E820 map.
2006-05-24 01:37:46 +00:00
Michael Brown
5e80847827
Code to install the new E820 mangler (which doesn't require copying
...
down to base memory, since it is now in the base-memory-resident
.text16 section).
2006-05-23 23:47:05 +00:00
Michael Brown
5ec2b2c251
Cope with regions bigger than 4GB.
...
We now split e820 regions around ourselves, rather than just
truncating the e820 region. This avoids the worst-case scenario of
losing all memory over 4GB.
It's more important to get the memory map right now that we're
expecting to still be loaded when the OS starts in several situations
(e.g. Linux with UNDI driver, any OS with iSCSI/AoE boot, etc.).
2006-05-23 23:33:37 +00:00
Michael Brown
d822b3d4cd
Define BIOS data segment in bios.h
2006-05-13 11:43:07 +00:00
Michael Brown
352bf1bda2
Move init.h to gpxe/init.h.
2006-04-30 01:08:52 +00:00
Michael Brown
832e86246b
gcc is rather over-aggressive about optimising out static data structures
...
even when __atribute__ (( unused )) is correctly set...
2006-04-24 18:31:37 +00:00
Michael Brown
7b423c0988
Fixes for gcc >= 3.2 from Georg Baum
2005-05-23 23:47:54 +00:00
Michael Brown
c245ab75ad
Moved disk functions to drivers/bus/bios_disks.c
2005-04-18 15:35:39 +00:00
Michael Brown
2c36f5e6c7
Save a few bytes by using naturally-sized ints.
2005-04-18 09:17:27 +00:00
Michael Brown
44c7cc8c12
Standardised debug mechanism in place now.
2005-04-14 11:55:57 +00:00
Michael Brown
e44e5c7247
compiler.h is now always included on the command line.
2005-04-14 11:50:26 +00:00
Michael Brown
070f6c0b6b
Fixed debug messages
2005-04-10 16:58:19 +00:00
Michael Brown
e29e6456b0
Don't zero freed base memory; one block will contain librm.
2005-04-09 16:14:37 +00:00