Kevin O'Connor [Sun, 7 Dec 2008 04:11:56 +0000 (23:11 -0500)]
Don't overwrite memory on smm init.
Save/restore memory changed during smm init - this is based on a patch
committed to bochs bios.
Also, clean up ioport and base memory address definitions for smm.
Kevin O'Connor [Sun, 7 Dec 2008 00:37:56 +0000 (19:37 -0500)]
Execute smp detect code in place instead of copying it.
Compile the smp detect handler with the rest of the 16bit code.
Implement a simple ljmpw trampoline so the main code can run in place.
Restore memory afterwards to prevent memory corruption.
Kevin O'Connor [Sat, 6 Dec 2008 23:56:19 +0000 (18:56 -0500)]
Makefile cleanups.
Don't assemble romlayout16.S with debugging on - gcc gets confused
when multiple files with debugging are included.
Be more consistent in status messages.
Use ccode instead of blob/romlayout32 -- it's more accurate.
Kevin O'Connor [Sat, 6 Dec 2008 18:03:52 +0000 (13:03 -0500)]
Call option roms in "big real mode".
Kevin O'Connor [Sat, 6 Dec 2008 16:57:45 +0000 (11:57 -0500)]
Add additional PCI option rom checks.
PCI_ROM_ADDRESS is only valid for PCI_HEADER_TYPE_NORMAL devices.
Don't attempt to run a rom with address less than 16MiB.
Don't run roms for IDE code when native IDE support is available.
Also, move hardcode option rom defs to config.h.
Also, add some minor code cleanups.
Kevin O'Connor [Fri, 5 Dec 2008 00:39:10 +0000 (19:39 -0500)]
Don't allow start_bdf with new auto max bus detection code.
It's not valid to set a "start bdf" when search for a device now,
because we wont be able to properly detect the maximum bus unless
we start at the beginning.
Change callers that need to resume a search to use foreachpci() macro.
Update all callers so that they don't pass in the now unused start_bdf.
Kevin O'Connor [Fri, 5 Dec 2008 00:22:49 +0000 (19:22 -0500)]
Only support IDE devices with pci class of PCI_CLASS_STORAGE_IDE.
Devices of class PCI_CLASS_STORAGE_OTHER may work with some devices,
but they are just as likely to cause a crash with other devices.
Kevin O'Connor [Sun, 30 Nov 2008 01:39:06 +0000 (20:39 -0500)]
Enance support for PCI option roms.
Scan for the PCI option rom structure on each PCI card.
Support multiple images in an option rom.
Don't map to area just above memory - assume card is already
programmed with a valid address.
Kevin O'Connor [Sun, 30 Nov 2008 01:31:49 +0000 (20:31 -0500)]
Only touch PCI functions > 0 on multi-function devices; rescan max pci each time.
Some single-function devices will respond to all sub-functions - and
this confuses things. So, when scanning the PCI bus make sure to
only touch function 0 on single-function devices.
Since the bus scanning code is necessarily complex now, we might as
well implement max bus detection inline with all pci scans. So,
there is no need to scan for the max bus at startup.
Kevin O'Connor [Sat, 29 Nov 2008 18:22:29 +0000 (13:22 -0500)]
Detect keyboard ctrl-alt-delete and try to reset machine.
Kevin O'Connor [Sat, 29 Nov 2008 17:41:48 +0000 (12:41 -0500)]
Fix bug on keyboard LED set.
The ps2_command() function had a cut-and-paste error.
Also, add some additional debugging functions to ps2 port code.
Kevin O'Connor [Sat, 29 Nov 2008 16:19:19 +0000 (11:19 -0500)]
Don't reset .bss on reboots.
Since .data isn't reset on a reboot, it's confusing to reset .bss.
Fixup all places that assumed .bss variables were reset.
Kevin O'Connor [Fri, 28 Nov 2008 21:40:06 +0000 (16:40 -0500)]
Implement tsc based delay timers, and use them throughout code.
Calibrate the timestamp-counter using the PIT timer2 mechanism.
Implement ndelay/udelay/mdelay using tsc.
Remove obsolete sleeping mechanisms.
Kevin O'Connor [Fri, 28 Nov 2008 16:56:37 +0000 (11:56 -0500)]
Fix bug - bios writes must be enabled before max PCI bus detected.
The max pci bus is stored in the bios segment, so it must be writable.
So, use a default max size (1 pci bus) for the initial write enable
device scan and then do the full max bus check after write is
enabled.
Kevin O'Connor [Wed, 26 Nov 2008 22:02:43 +0000 (17:02 -0500)]
Enable a default hw irq handler.
Also, only route hw irqs to their handlers when they are enabled.
(This ensures that if a subsystem is disabled that the default
hwirq handler will be used.)
Add helper macros to declare the extern asm handlers.
Always enable the RTC hwirq at startup (as opposed to when it is first
used).
Fix bug in default handler - wrong bit was used for checking the
cascaded irq.
Kevin O'Connor [Sun, 16 Nov 2008 23:14:33 +0000 (18:14 -0500)]
Add tool for generating assembler offset definition file.
Replace __call16 hardcoded offsets with auto generated struct offsets.
Also, load/save %ds register in __call16().
Kevin O'Connor [Sun, 16 Nov 2008 14:59:32 +0000 (09:59 -0500)]
Define bit definitions for cr0 register.
Define and consistently use names for the bits in the cr0 register.
Kevin O'Connor [Sun, 16 Nov 2008 14:17:02 +0000 (09:17 -0500)]
Cleanup a20 code.
Fix two apparent bugs - set_a20() returned new status instead of old
status and handle_152402() checked wrong bit.
Add bit definition for the a20 enable bit: A20_ENABLE_BIT
Allow ioport.h #defines to be used in romlayout.S.
Kevin O'Connor [Sun, 16 Nov 2008 02:15:24 +0000 (21:15 -0500)]
Show PCI info when reporting ATA controllers.
Kevin O'Connor [Thu, 13 Nov 2008 01:10:13 +0000 (20:10 -0500)]
Increase debugging output in option rom processing.
Kevin O'Connor [Wed, 12 Nov 2008 03:03:55 +0000 (22:03 -0500)]
Disable a20 on 16bit calls.
The a20 gate is enabled when invoking 32bit mode. Turn it off before
returning to 16bit mode.
Kevin O'Connor [Wed, 12 Nov 2008 02:34:37 +0000 (21:34 -0500)]
Move POST stack from 0xfffe to 0x7c00.
The BIOS Boot Specification recommends 0x7c00 - 0xffff for option rom
temp storage, so don't use that space as a stack.
Also, default CONFIG_VGAHOOKS off as it isn't generally useful.
Finally, update TODO list.
Kevin O'Connor [Sun, 9 Nov 2008 22:35:05 +0000 (17:35 -0500)]
Make sure to exit from cdrom_boot() if a cdrom is not found.
Kevin O'Connor [Sun, 9 Nov 2008 20:33:47 +0000 (15:33 -0500)]
Overhaul PCI config functions.
Remove PCIDevice struct and replace with a "u16" with BDF -
Bus/Device/Function. This simplifies the code in several places.
Also, scan for and store the maximum PCI bus found during startup.
The previous config option CONFIG_PCI_BUS_COUNT is no longer
needed and has been removed.
Kevin O'Connor [Sun, 9 Nov 2008 02:36:35 +0000 (21:36 -0500)]
Overhaul option rom processing.
Add initial support for scanning PCI devices for option roms.
Implement two pass option rom scan - init first then scan for bev/bcv.
Support calling BCV vectors that are found.
Kevin O'Connor [Sun, 9 Nov 2008 00:07:49 +0000 (19:07 -0500)]
Move 32bit segment defines from romlayout.S to config.h.
This moves the 32bit segment names next to the real-mode segment names.
Also, renames them to be more consistent.
Kevin O'Connor [Sat, 8 Nov 2008 20:53:36 +0000 (15:53 -0500)]
Synch pci ids and registers with Linux kernel source.
Add pci_regs.h and pci_ids.h from kernel repo.
Modify code to use the above includes and to use the kernel definitions.
Kevin O'Connor [Sat, 8 Nov 2008 18:35:32 +0000 (13:35 -0500)]
Avoid casting EBDA variables ipl.description and pir_loc.
Define them using their native types (pointers).
Also, fix an apparent bug in mptable coreboot processing - it
incorrectly overwrote the pir_loc variable.
Kevin O'Connor [Sat, 8 Nov 2008 18:05:27 +0000 (13:05 -0500)]
Update e820 map in place instead of copying it.
Allocate the e820 map space in the 0xf0000 segment and do all updates
in place. This reduces the need to access external memory during
post.
Also, move e820 pointer and count from ebda to variables in 0xf0000.
Kevin O'Connor [Sat, 8 Nov 2008 18:02:46 +0000 (13:02 -0500)]
Rework READx_SEG/WRITEx_SEG macro type detection.
Detect types by size instead of by comparison to different integer types.
This allows pointers and other types to be directly accessed.
Note that this does slightly pessimize 64bit accesses.
Kevin O'Connor [Sat, 8 Nov 2008 15:36:16 +0000 (10:36 -0500)]
Support .bss variables in 16bit code (ones that the 32bit code can set).
Kevin O'Connor [Sat, 8 Nov 2008 15:35:26 +0000 (10:35 -0500)]
Add dprintf() status writes during startup of bios table inits.
Kevin O'Connor [Sat, 8 Nov 2008 03:15:31 +0000 (22:15 -0500)]
Place .bss section in 0xf0000 segment.
Storing the .bss separately from .data is confusing - so unite them.
Kevin O'Connor [Sat, 8 Nov 2008 02:42:00 +0000 (21:42 -0500)]
Be sure to define defaults for NM,STRIP,OBJCOPY in Makefile.
Kevin O'Connor [Thu, 6 Nov 2008 23:57:10 +0000 (18:57 -0500)]
Fix cross compilation issues of seabios
Signed-off-by: Stefan Reinauer <stepan@coresystems.de>
Kevin O'Connor [Sun, 2 Nov 2008 00:32:27 +0000 (20:32 -0400)]
Separate out and enhance option rom scanning code.
Move option rom code from post.c to optionroms.c.
Add struct definitions for option roms.
Fix an apparent bug in the check for pnp extension headers.
Kevin O'Connor [Sun, 26 Oct 2008 16:01:21 +0000 (12:01 -0400)]
Misc minor cleanups.
Kevin O'Connor [Sun, 26 Oct 2008 03:10:27 +0000 (23:10 -0400)]
Updates to TODO list.
Kevin O'Connor [Sun, 26 Oct 2008 03:06:23 +0000 (23:06 -0400)]
Turn on cache as first step of post.
This is needed on kvm.
Kevin O'Connor [Sun, 26 Oct 2008 03:05:42 +0000 (23:05 -0400)]
Add support for more than 4Gig of ram.
This is based on code in kvm.
Kevin O'Connor [Sat, 25 Oct 2008 19:50:30 +0000 (15:50 -0400)]
Synch ACPI DSDT with latest bochs bios.
Kevin O'Connor [Sat, 25 Oct 2008 19:43:46 +0000 (15:43 -0400)]
Add new QEMU code to access UUID.
This is based on a patch committed to bochs bios.
Kevin O'Connor [Sat, 25 Oct 2008 19:23:53 +0000 (15:23 -0400)]
Set smbios cache handles - patch from bochs bios.
Kevin O'Connor [Sat, 25 Oct 2008 19:23:23 +0000 (15:23 -0400)]
Support pci init of both PIIX3 and PIIX4 - patch from bochs bios.
Kevin O'Connor [Sat, 25 Oct 2008 18:43:11 +0000 (14:43 -0400)]
Fix smbios bios_characteristics -- patch from bochs bios.
Kevin O'Connor [Sat, 25 Oct 2008 18:39:56 +0000 (14:39 -0400)]
Fix VMware backdoor command 0Ah - patch from bochs bios.
Also, use macro PACKED instead of __attribute__((__packed__)) in
smbios code.
Kevin O'Connor [Sat, 25 Oct 2008 18:38:31 +0000 (14:38 -0400)]
Update F11/F12 scan codes from bochs bios.
This merges a patch that was committed to bochs bios.
Kevin O'Connor [Sat, 25 Oct 2008 18:37:29 +0000 (14:37 -0400)]
Supply vga register names for BDA.
This completes most of the names for the BDA struct (struct bios_data_area_s).
Kevin O'Connor [Sat, 25 Oct 2008 18:35:59 +0000 (14:35 -0400)]
Use defines for PCI ids.
This is based on a patch that was committed to bochs bios.
Kevin O'Connor [Sun, 31 Aug 2008 15:16:33 +0000 (11:16 -0400)]
Use PCI bus scan to find all ATA controllers. Several IDE fixes.
Find all ATA controllers via a pci bus - don't poke random IO ports.
Force IDE drives to 512 byte sector size; word 5 in identify command
isn't defined on recent drives.
Add debugging info for extended_access and int 1348 calls.
int 1348 enhancements - general cleanup, report drives as PCI, correct
iface_path/device_path settings, checksums should be a 2's
complement, call disk_ret() on all return paths, always use dpte
revision 0x11, don't set size above 30 bytes.
Kevin O'Connor [Sun, 31 Aug 2008 15:06:27 +0000 (11:06 -0400)]
Rename pci_find_class() to pci_find_classprog(), and add new functions.
New pci_find_class() searches by just class, not class and prog-if.
Add some new pci config space definitions.
Add inline functions for converting to/from bus/dev/fn to bdf to PCIDevice.
Kevin O'Connor [Sat, 30 Aug 2008 01:21:09 +0000 (21:21 -0400)]
Print out percentage of space used for bios tables during boot.
Kevin O'Connor [Sat, 30 Aug 2008 01:20:32 +0000 (21:20 -0400)]
Fix bug in dprintf - isdigit had sign overflow problem.
Kevin O'Connor [Sat, 30 Aug 2008 01:19:53 +0000 (21:19 -0400)]
Create a dummy smbios table in coreboot environments.
Kevin O'Connor [Sat, 30 Aug 2008 01:14:36 +0000 (21:14 -0400)]
Rename memcpy() to memcpy_far() and add regular memcpy() code.
Kevin O'Connor [Sat, 30 Aug 2008 01:12:03 +0000 (21:12 -0400)]
Use ALIGN() macro in place of open-coded aligns.
Kevin O'Connor [Sun, 17 Aug 2008 16:12:31 +0000 (12:12 -0400)]
Set bx/dx to 0xffff on option rom call.
Also improve comments in option rom call slightly.
Kevin O'Connor [Sun, 17 Aug 2008 15:30:07 +0000 (11:30 -0400)]
Disable floppy access when coreboot enabled.
Floppy code on real hardware is suspect, but some OSes might require
the calls to be present. So, force the floppy count to zero for
now.
Kevin O'Connor [Sun, 17 Aug 2008 15:26:42 +0000 (11:26 -0400)]
Misc minor improvements.
Update TODO list.
Improve comments in boot.c.
Use debug port 0x0402 instead of 0x0403 (bochs prefers the latter).
Fix formatting of debug messages in kbd.c.
Use proper return check for kbd and mouse init.
Kevin O'Connor [Sun, 17 Aug 2008 15:11:07 +0000 (11:11 -0400)]
Add stubs for VIA vga bios callbacks to system bios.
The VIA vga bios likes wants to call int 15/5f of main bios. So, add
stubs to make it happy.
Kevin O'Connor [Sun, 17 Aug 2008 15:08:46 +0000 (11:08 -0400)]
Return max bus number in int 1a/b101 call.
Add new option CONFIG_PCI_BUS_COUNT to set max bus count.
Use that option consistently in handle_1ab101() and pci.c.
Also, clean up comments of handle_1ab101().
Kevin O'Connor [Sun, 17 Aug 2008 15:03:24 +0000 (11:03 -0400)]
Remove CONFIG_QEMU option - breakout into other options.
Define all the required app names in config.h directly.
Control UUID detection via new option - CONFIG_UUID_BACKDOOR.
Don't enable mptable on uniprocessor machines (check use to only be
done for qemu, but it is needed everywhere).
Also add new option CONFIG_SMBIOS.
Kevin O'Connor [Sun, 17 Aug 2008 14:50:57 +0000 (10:50 -0400)]
Improve smp detection code.
Use 'lock incw' to ensure proper synchronization between cpus.
Jump to the 0xf0000 segment for the halt (to ensure halt code isn't overwritten).
Improve code comments.
Kevin O'Connor [Thu, 31 Jul 2008 00:37:13 +0000 (20:37 -0400)]
Don't allow CFLAGS to be set from commandline.
Some build systems try to override CFLAGS, but this project needs it
to be set explicitly.
Kevin O'Connor [Tue, 22 Jul 2008 03:42:34 +0000 (23:42 -0400)]
Support ps2 port RESET commands that respond with 1 or 2 bytes.
Some devices only respond with 1 byte - if they timeout reading the
second byte, don't fail the whole operation - just continue and
handle the 1 byte.
Kevin O'Connor [Tue, 22 Jul 2008 03:40:57 +0000 (23:40 -0400)]
Add debugging for unknown keyboard (int 16) calls.
Kevin O'Connor [Tue, 22 Jul 2008 03:29:33 +0000 (23:29 -0400)]
Shrink size of bx_panic when CONFIG_DEBUG_LEVEL is off.
When CONFIG_DEBUG_LEVEL the debug message wont be shown, so don't
bother calling bvprintf.
Kevin O'Connor [Tue, 22 Jul 2008 02:30:38 +0000 (22:30 -0400)]
Add config option to disable scanning for option roms.
Kevin O'Connor [Tue, 22 Jul 2008 02:23:05 +0000 (22:23 -0400)]
Add additional config options to remove parts of code.
Added options CONFIG_BOOT, CONFIG_SERIAL, CONFIG_LPT, CONFIG_KEYBOARD,
CONFIG_BOOTMENU.
Also extended coverage of existing options to ensure full code got
removed.
Kevin O'Connor [Mon, 21 Jul 2008 23:25:21 +0000 (19:25 -0400)]
Remove vgahooks.c from Makefile.
A testing change got accidentally commited.
Kevin O'Connor [Sun, 20 Jul 2008 14:08:59 +0000 (10:08 -0400)]
Rewrite ps2 port (keyboard/mouse) handling.
Use command sending code for communicating with the ps2 port.
Kevin O'Connor [Sat, 19 Jul 2008 18:12:32 +0000 (14:12 -0400)]
Misc fixes and updates.
Minor code cleanups.
Fix parenthesis imbalance in keyboard led test.
The printf() call is only used in 32bit mode - make this explicit to
the compiler - it improves the code generation.
Clear the screen after initializing the vga option rom.
Kevin O'Connor [Sun, 13 Jul 2008 15:08:36 +0000 (11:08 -0400)]
Always define macro MODE16 - that way it can be used in C conditionals.
When in 32bit mode - just define it to 0.
Kevin O'Connor [Sun, 13 Jul 2008 14:59:11 +0000 (10:59 -0400)]
Change checkstack.py tool - key functions by address instead of name.
Keying by address allows the tool to work even when multiple symbols
have the same address.
Kevin O'Connor [Sat, 12 Jul 2008 18:30:11 +0000 (14:30 -0400)]
Show percent space of C code used in checkrom.py.
Kevin O'Connor [Sat, 12 Jul 2008 18:22:14 +0000 (14:22 -0400)]
Add workaround for older gcc's not fully supporting VISIBLE32.
Kevin O'Connor [Sat, 12 Jul 2008 16:46:07 +0000 (12:46 -0400)]
Add option to disable mptable generation.
Kevin O'Connor [Thu, 10 Jul 2008 02:45:12 +0000 (22:45 -0400)]
Fix bug in int1308 handling of floppies.
The floppy_1308() function did not properly set the return code.
Also, simplify physical address lookup code in floppy_cmd().
Kevin O'Connor [Thu, 10 Jul 2008 02:43:23 +0000 (22:43 -0400)]
Fix error in pci_find_class().
Fix biterror - must shift value read from pci space - otherwise stray
bits may be set and cause comparison to fail.
Kevin O'Connor [Tue, 8 Jul 2008 01:37:10 +0000 (21:37 -0400)]
Improve debugging output.
Return the line number of the debug_fail() / debug_stub() call site on
each call.
Show the return status on set_code_fail() calls.
Also, the floppy_1305() code should not clear AL.
Kevin O'Connor [Sun, 6 Jul 2008 14:14:49 +0000 (10:14 -0400)]
Convert bootup code (int18/int19) to 32bit mode.
The boot entry points should not require 16bit mode, so use 32bit mode
instead.
Kevin O'Connor [Sun, 6 Jul 2008 13:56:14 +0000 (09:56 -0400)]
Relinking rom32.o twice seems flaky - make third link stage.
Sigh - ld seems to move things around when relinking files. So,
separate out the link stages so that everything is incremental.
Also, improve diagnostics of checkrom.py tool.
Kevin O'Connor [Sun, 6 Jul 2008 13:30:47 +0000 (09:30 -0400)]
Move $PnP string from boot.c to romlayout.S.
The string is special, so it's better to define it in assembler.
Kevin O'Connor [Sun, 6 Jul 2008 01:19:10 +0000 (21:19 -0400)]
Move elf entry point from post.c to romlayout.S
Also, it isn't necessary to use .set when adding 0xf0000 to addresses.
Kevin O'Connor [Sun, 6 Jul 2008 01:08:56 +0000 (21:08 -0400)]
Ensure proper alignment of subsections.
Also, do a better job of halting build on a failure in checkrom.py
Kevin O'Connor [Sun, 6 Jul 2008 00:41:53 +0000 (20:41 -0400)]
Use ld to build final rom; remove custom build utilities.
It's possible to build the final rom with a little LD magic - so use
that instead of the buildrom.py / defsyms.py method.
Also, rename all occurances of ".globl" to the more clear ".global".
Kevin O'Connor [Sat, 5 Jul 2008 16:49:53 +0000 (12:49 -0400)]
Use ".set" gas feature to avoid having to hardcode ljmpl asm insn.
Kevin O'Connor [Fri, 4 Jul 2008 19:29:23 +0000 (15:29 -0400)]
Define 16bit OFFSET_x to be 32bit addresses; introduce CONFIG_BIOS_ADDR.
The rom16.o object will now have absolute (32bit applicable) addresses.
Replace several 0xf0000 and 0x10000 uses with CONFIG_BIOS_ADDR/SIZE macros.
Kevin O'Connor [Fri, 4 Jul 2008 19:15:49 +0000 (15:15 -0400)]
Add hack to prevent checkstack.py from infinitely recursing (with bad input).
Kevin O'Connor [Fri, 4 Jul 2008 17:10:12 +0000 (13:10 -0400)]
Declare kbd_setup() in post.h - next to other kbd.c defines.
Kevin O'Connor [Fri, 4 Jul 2008 17:04:29 +0000 (13:04 -0400)]
Extract 'struct bregs' out of biosvar.h; clean up header includes.
Kevin O'Connor [Fri, 4 Jul 2008 10:18:30 +0000 (06:18 -0400)]
Breakup rombios32.c into pciinit.c and smbios.c
Kevin O'Connor [Fri, 4 Jul 2008 09:47:26 +0000 (05:47 -0400)]
Separate out smp detection and mp table generation from rombios32.c
Also, change smp_probe() to return the cpu count on each call.
Kevin O'Connor [Fri, 4 Jul 2008 09:05:54 +0000 (05:05 -0400)]
Separate SMM code into its own file (smm.c from rombios32.c).
Kevin O'Connor [Fri, 4 Jul 2008 08:47:09 +0000 (04:47 -0400)]
Clean up #ifdefs.
Remove option CONFIG_USE_EBDA_TABLES -- it's just broken.
Convert several '#if CONFIG_X' to 'if (CONFIG_X)'.
Kevin O'Connor [Sat, 28 Jun 2008 16:19:52 +0000 (12:19 -0400)]
Updates to TODO items.
Kevin O'Connor [Sat, 28 Jun 2008 16:18:39 +0000 (12:18 -0400)]
Set BIOS checksum at 0xfffff.
Kevin O'Connor [Sat, 28 Jun 2008 16:15:57 +0000 (12:15 -0400)]
Improve some debugging output.
Replace DEBUGF calls with dprintf calls.
Make ata calls consistently use 'int' return codes.
Make each error return code in ata.c use a unique negative number.
Kevin O'Connor [Sat, 21 Jun 2008 23:46:43 +0000 (19:46 -0400)]
Scan for and relocate mptable when using coreboot.
Kevin O'Connor [Sat, 21 Jun 2008 16:59:19 +0000 (12:59 -0400)]
Convert '\n' to '\r\n' on debug serial output.