seabios.git
14 years agoReorder source code to work around weird -combine issue.
Kevin O'Connor [Wed, 4 Nov 2009 00:50:52 +0000 (19:50 -0500)]
Reorder source code to work around weird -combine issue.

Seeing an odd issue with ZoneTmpHigh not being declared global - for
    now, work around by reordering the soruce files.
Also, remove the ".comment" section from the final .elf file.

14 years agoCall yield() while waiting for USB control transfers to complete.
Kevin O'Connor [Sat, 31 Oct 2009 17:55:59 +0000 (13:55 -0400)]
Call yield() while waiting for USB control transfers to complete.

14 years agoImprove debugging info on USB UHCI qh timeout.
Kevin O'Connor [Sat, 31 Oct 2009 03:16:07 +0000 (23:16 -0400)]
Improve debugging info on USB UHCI qh timeout.

14 years agoImprove debugging output from threads.
Kevin O'Connor [Sat, 24 Oct 2009 23:56:11 +0000 (19:56 -0400)]
Improve debugging output from threads.

Show the "thread id" on each debug message sent from a thread.
Also, cleanup translation dprintf() so it looks nicer withe thread output.

14 years agoAdd simple cooperative threading scheme to allow parallel hw init.
Kevin O'Connor [Sat, 24 Oct 2009 21:57:29 +0000 (17:57 -0400)]
Add simple cooperative threading scheme to allow parallel hw init.

Enable system for running hardware initialization in parallel.
The yield() call can now round-robin between "threads".
Rework ata controller init to use a thread per controller.
Make sure internal drives are registered in a defined order.
Run keyboard initialization in a thread.
Rework usb init to use a thread per controller.

14 years agoEnable ins/outs functions to use 32bit addresses.
Kevin O'Connor [Sat, 24 Oct 2009 21:54:06 +0000 (17:54 -0400)]
Enable ins/outs functions to use 32bit addresses.

14 years agoReplace irq_enable() regions with explicit calls to check for irqs.
Kevin O'Connor [Sat, 24 Oct 2009 15:06:08 +0000 (11:06 -0400)]
Replace irq_enable() regions with explicit calls to check for irqs.

Add new function yield() which will permit irqs to trigger.
The yield() call enables irqs to occur in 32bit mode.
Add [num]sleep calls that yield instead of just spinning.
Rename existing int 1586 usleep call to biosusleep.
Convert many calls to mdelay to msleep.

14 years agoHandle tsc rollover.
Kevin O'Connor [Fri, 23 Oct 2009 02:30:37 +0000 (22:30 -0400)]
Handle tsc rollover.

Handle case where timetamp counter overflows while waiting.

14 years agoPass 'drive_s' pointer instead of driveid.
Kevin O'Connor [Fri, 23 Oct 2009 01:48:39 +0000 (21:48 -0400)]
Pass 'drive_s' pointer instead of driveid.

Pass a pointer to the drive_s struct instead of a driveid array offset.
Don't allocate ata drive's until a real drive found.
Introduce getDrive() and allocDrive() functions.

14 years agoUpdate TODO list.
Kevin O'Connor [Tue, 20 Oct 2009 02:13:11 +0000 (22:13 -0400)]
Update TODO list.

14 years agoMove smbios definitions to header file; fix compile on older gcc.
Kevin O'Connor [Sun, 18 Oct 2009 13:49:59 +0000 (09:49 -0400)]
Move smbios definitions to header file; fix compile on older gcc.

The build with old versions of gcc can't handle duplicate struct
    definitions.  So, move smbios defs to common header.

14 years agoExpand USB OHCI support.
Kevin O'Connor [Sun, 18 Oct 2009 03:53:32 +0000 (23:53 -0400)]
Expand USB OHCI support.

Get UHCI support to point where it works with (a modified) qemu.

14 years agofix low bits in ROM and I/O sizing
Kevin O'Connor [Wed, 14 Oct 2009 23:28:04 +0000 (19:28 -0400)]
fix low bits in ROM and I/O sizing

This cleans up handling of low bits during BAR sizing,
to match PCI spec requirements, and to use symbolic
constants from pci_regs.h

Issues fixed:
For ROM BARs, bit 0 is writeable (enable bit), which we not
only don't want to set, but it will stick and make us think
it's an I/O port resource.
Further, PCI spec defines the following bits as reserved:
- bit 1 in I/O BAR
- bits 10:1 in ROM BAR
and we should be careful and preserve any values there,
and should ignore anything we read from these registers.
Bits 3:2 in I/O BAR might be writeable, so it
is wrong to mask them when calculating BAR size.

Spec references:
See 6.2.5.1 for I/O and memory, and 6.2.5.2 for ROM,
6.1 for reserved bit handling;
pages 225, 228 and 214 in PCI spec revision 3.0.

See also Qemu pcbios commit 6ddb9f5c742b2b82b1755d7ec2a127f6e20e3806

Signed-off-by: Gleb Natapov <gleb@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
14 years agoUse pmm_malloc() for internal allocations.
Kevin O'Connor [Mon, 12 Oct 2009 16:54:56 +0000 (12:54 -0400)]
Use pmm_malloc() for internal allocations.

Using pmm_malloc permits free() to be used on internal allocations.
Rework low zone expanding so that it doesn't cause gcc v4.3 error.
Allow pmm_malloc to use ZoneTmpLow if ZoneTmpHigh isn't available.

14 years agoProvide correct value for QEMU_CFG_IRQ0_OVERRIDE
Kevin O'Connor [Mon, 12 Oct 2009 16:02:33 +0000 (12:02 -0400)]
Provide correct value for QEMU_CFG_IRQ0_OVERRIDE

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoenable io/memory unconditionally
Kevin O'Connor [Mon, 12 Oct 2009 14:34:51 +0000 (10:34 -0400)]
enable io/memory unconditionally

VGA adapters need to claim memory and i/o
transactions even if they do not have any
i/o or memory bars. E.g. PCI spec, page 297,
gives an example of such a device:

    Programming interface 0000 0000b
    VGA-compatible controller. Memory
    addresses 0A 0000h through 0B
    FFFFh. I/O addresses 3B0h to 3BBh
    and 3C0h to 3DFh and all aliases of
    these addresses.

While we could check for these devices and special-case them, it is
easier to fix this by enabling i/o and memory space unconditionally:
devices that do not support it will just ignore this setting.

Original-by: Michael S. Tsirkin <mst@redhat.com>
14 years agoSet the PCI base address to 0xf0000000.
Kevin O'Connor [Mon, 12 Oct 2009 14:22:45 +0000 (10:22 -0400)]
Set the PCI base address to 0xf0000000.

Qemu starts PCI hole at 0xe0000000, but lets set it to the same value as
pcbios uses for now.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoEnable power button event generation.
Kevin O'Connor [Mon, 12 Oct 2009 14:21:48 +0000 (10:21 -0400)]
Enable power button event generation.

Qemu pcbios commit 4f5a9a84ff32e2445bf1c854e33b0b32f4459428

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoGenerate mptable unconditionally.
Kevin O'Connor [Mon, 12 Oct 2009 14:20:46 +0000 (10:20 -0400)]
Generate mptable unconditionally.

VMware ESX requires an mptable even for uniprocessor guests.

Qemu pcbios commit 9869338791ca6f44e628b88e6335ffd66e1ed86b

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoAdd stubs for USB OHCI support.
Kevin O'Connor [Mon, 12 Oct 2009 14:09:15 +0000 (10:09 -0400)]
Add stubs for USB OHCI support.

Enable USB wrapper functions to call either ohci or ehci helpers.
Implement pci_config_maskw in place of pci_set_bus_master.
Introduce 'struct usb_pipe' in place of 'void *' for pipes.

14 years agoMove read/write[bwl] from smp.c to util.h.
Kevin O'Connor [Mon, 12 Oct 2009 13:49:27 +0000 (09:49 -0400)]
Move read/write[bwl] from smp.c to util.h.

Move them to the header so other code can use them.

14 years agoCleanup 'debuginfo' variable in output; add comment.
Kevin O'Connor [Mon, 12 Oct 2009 13:48:12 +0000 (09:48 -0400)]
Cleanup 'debuginfo' variable in output; add comment.

14 years agoUse MaxCountCPUs during building of per cpu tables.
Kevin O'Connor [Fri, 9 Oct 2009 13:42:11 +0000 (09:42 -0400)]
Use MaxCountCPUs during building of per cpu tables.

Preparation for hot pluggable CPUs.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoUpdate acpi-dsdt.hex with latest changes from acpi-dsdt.dsl.
Kevin O'Connor [Fri, 9 Oct 2009 02:16:04 +0000 (22:16 -0400)]
Update acpi-dsdt.hex with latest changes from acpi-dsdt.dsl.

14 years agoMove qemu cfg init before smp init.
Kevin O'Connor [Fri, 9 Oct 2009 02:14:50 +0000 (22:14 -0400)]
Move qemu cfg init before smp init.

We will need to read qemu config during smp init.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoRead max number of cpus from VM.
Kevin O'Connor [Fri, 9 Oct 2009 02:13:15 +0000 (22:13 -0400)]
Read max number of cpus from VM.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoAdd SRAT ACPI table support.
Kevin O'Connor [Fri, 9 Oct 2009 02:09:02 +0000 (22:09 -0400)]
Add SRAT ACPI table support.

Take NUMA topology info from the QEMU firmware configuration interface
(number of nodes, node for each (V)CPU and amount of memory) and build
a SRAT table describing this topology for the guest OS. Handles more than
4 GB of RAM by including a hole for 32bit PCI memory mapping.

Qemu pcbios commit 444f1226c11082d374b7e1361c6f5696e479642a

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoAdd 26 pci slots, bringing the total to 32.
Kevin O'Connor [Fri, 9 Oct 2009 02:06:06 +0000 (22:06 -0400)]
Add 26 pci slots, bringing the total to 32.

Lack of pci slots causes Windows to complain when installing too many
device.

Qemu pcbios commit 001fd46e3b551de05c62590ba5ed4cbf6cbe3510

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoHPET support.
Kevin O'Connor [Fri, 9 Oct 2009 02:05:21 +0000 (22:05 -0400)]
HPET support.

Part of qemu pcbios commit e04da91178f0e11febbbd61d9795e49cc27e9ad4

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoPci hotplug support.
Kevin O'Connor [Fri, 9 Oct 2009 02:04:05 +0000 (22:04 -0400)]
Pci hotplug support.

Qemy pcbios commit e88ec0d97b464915281d27d5714784d2215cbdef

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoProvide gpe _L0x methods.
Kevin O'Connor [Fri, 9 Oct 2009 02:03:28 +0000 (22:03 -0400)]
Provide gpe _L0x methods.

Provide methods for gpe blk 0, even though they do nothing atm.

Qemu pcbios commit 37c3845e38cb8ee4a98960bf1fc31563d071838d

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoRemove irq 9 from the pci interrupt link resources.
Kevin O'Connor [Fri, 9 Oct 2009 02:02:33 +0000 (22:02 -0400)]
Remove irq 9 from the pci interrupt link resources.

qemu can't share isa irqs (which is how the acpi sci interrupt is implemente
with the pci irqs, so remove the sci interrupt from the pci link interrupt
candidate list.

Qemu pcbios commit 713939c93b9caa1a31c49211fe83525bcbee5948

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoUse extended interrupt descriptor for pci irqs.
Kevin O'Connor [Fri, 9 Oct 2009 02:01:52 +0000 (22:01 -0400)]
Use extended interrupt descriptor for pci irqs.

This is necessary to allow freebsd to boot; freebsd chokes if a regular
interrupt descriptor specifies an active high pic irq.

Qemu pcbios commit aaff1cc0ce8de3c45eec49b9b0e7624576058eda

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoRestrict pci interrupts to irq 5/9/10/11
Kevin O'Connor [Fri, 9 Oct 2009 02:01:06 +0000 (22:01 -0400)]
Restrict pci interrupts to irq 5/9/10/11

we need to specify the pci interrupts as active high; this reduces
the number of override entries we have to add.

Qemu pcbios commit 0f79abf26ff3e61dab712dbccdbc08a04619e7c0

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoAdvertise pci irqs as active high in DSDT
Kevin O'Connor [Fri, 9 Oct 2009 01:59:51 +0000 (21:59 -0400)]
Advertise pci irqs as active high in DSDT

Now that kvm emulates the ioapic polarity correctly, we must describe
the polarity correctly in the acpi tables. Otherwise pci interrupts won't
be delivered correctly.

Qemu pcbios commit 0c8d4b40a1eec2369c016b9be1c9175607e64a4b

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoUse preprocessor for pci link routing.
Kevin O'Connor [Fri, 9 Oct 2009 01:59:13 +0000 (21:59 -0400)]
Use preprocessor for pci link routing.

Qemu pcbios commit 297a5cd68d2883215571634b2f8c627364c87f2c

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoAdd rule to compile DSDT to make file.
Kevin O'Connor [Fri, 9 Oct 2009 01:57:15 +0000 (21:57 -0400)]
Add rule to compile DSDT to make file.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoRemove CONFIG_KVM compile option.
Kevin O'Connor [Fri, 9 Oct 2009 01:52:11 +0000 (21:52 -0400)]
Remove CONFIG_KVM compile option.

Qemu and KVM should use the same bios build. All differences should be
handled in runtime.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoCheck at runtime if VM is KVM.
Kevin O'Connor [Fri, 9 Oct 2009 01:50:31 +0000 (21:50 -0400)]
Check at runtime if VM is KVM.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoirq0override provided by qemu.
Kevin O'Connor [Fri, 9 Oct 2009 01:37:21 +0000 (21:37 -0400)]
irq0override provided by qemu.

Read it instead of relying on compile time flag.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoCorrect default pci irq links
Kevin O'Connor [Fri, 9 Oct 2009 01:34:45 +0000 (21:34 -0400)]
Correct default pci irq links

The hardware uses irqs 10 and 11, so change the bios to reflect that.

Qemu pcbios commit b0a155cfddc57e93b641a24fb198fdd8d738f143

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoAlways create PCI interrupt override acpi tables.
Kevin O'Connor [Fri, 9 Oct 2009 01:33:26 +0000 (21:33 -0400)]
Always create PCI interrupt override acpi tables.

This is what qemu pcbios does since commit
da5ff65dc9473e3f069736d38b9a189ea14a67eb.

Qemu implements PCI interrupts as active high, but OSes assume
that they are active low as per PCI spec. Qemu works without override
only because ioapic there doesn't implement polarity bit.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoLoad SMBIOS entries and files from qemu
Kevin O'Connor [Fri, 9 Oct 2009 01:21:59 +0000 (21:21 -0400)]
Load SMBIOS entries and files from qemu

Allow SMBIOS fields to be overridden and entries replaced by those
read from qemu.

This is port of commit f4a09e759469be74e2598758bfae623b555c4cae
from qemu pc-bios tree.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoAdd support for passing additional acpi tables from qemu.
Kevin O'Connor [Fri, 9 Oct 2009 01:18:41 +0000 (21:18 -0400)]
Add support for passing additional acpi tables from qemu.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoReally fix linker issue with "debuginfo" variable.
Kevin O'Connor [Thu, 8 Oct 2009 12:51:24 +0000 (08:51 -0400)]
Really fix linker issue with "debuginfo" variable.

The 16bit and 32bit code can't share debuginfo because it points to
    code and must point to 16bit code in 16bit mode.  Introduce two
    separate variables - one for 32bit mode and one for 16bit mode.

14 years agoAdd VAR16VISIBLE to debuginfo - older gcc doesn't optimize out.
Kevin O'Connor [Thu, 8 Oct 2009 12:13:13 +0000 (08:13 -0400)]
Add VAR16VISIBLE to debuginfo - older gcc doesn't optimize out.

14 years agoAdd snprintf support.
Kevin O'Connor [Thu, 8 Oct 2009 01:41:08 +0000 (21:41 -0400)]
Add snprintf support.

Extend bvprintf() code to support building a string.
Don't flush the serial port from printf if CONFIG_SCREEN_AND_DEBUG not
    set.

14 years agoSilence gcc asm deprectation warning in output.c.
Kevin O'Connor [Thu, 8 Oct 2009 00:59:45 +0000 (20:59 -0400)]
Silence gcc asm deprectation warning in output.c.

gcc prefers asm parameters not be casts.

14 years agoresolve memory device roll over reporting issues with >32G guests
Kevin O'Connor [Wed, 7 Oct 2009 23:44:23 +0000 (19:44 -0400)]
resolve memory device roll over reporting issues with >32G guests

The field within the Memory Device type 17 is only a word with the MSB being
used to report MB/KB.  Thereby, a guest with 32G and greater would report
incorrect memory device information rolling over to 0.

This presents more than one memory device and associated memory structures
if the memory is larger than 16G

This is port of commit e65bb0d2bd3a156408996674965555979de3a61b
from qemu pc-bios tree.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoCleanup acpi table creation.
Kevin O'Connor [Wed, 7 Oct 2009 23:42:07 +0000 (19:42 -0400)]
Cleanup acpi table creation.

Makes dynamic number of acpi table possible.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoWorkaround gcc4.3 compiler error - disable pmm low mem allocations.
Kevin O'Connor [Sun, 4 Oct 2009 16:06:59 +0000 (12:06 -0400)]
Workaround gcc4.3 compiler error - disable pmm low mem allocations.

For some unknown reason, the 16bit version of low memory expansion is
    confusing gcc4.3.  For now, just disable it as it isn't used in
    practice.

14 years agoMove qemu config code from smbios.c to its own files. Add support for
Kevin O'Connor [Sun, 4 Oct 2009 14:05:16 +0000 (10:05 -0400)]
Move qemu config code from smbios.c to its own files. Add support for
-boot menu=on|off qemu option.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
14 years agoInitial support for USB, UHCI, and USB Keyboards.
Kevin O'Connor [Tue, 29 Sep 2009 01:32:08 +0000 (21:32 -0400)]
Initial support for USB, UHCI, and USB Keyboards.

This adds preliminary support for USB controllers and keyboards.
Add support for UHCI controllers.
Add support for "HID" USB keyboards.
Also, fix bug in hexdump() - len need not be power of 4.

14 years agoReplace clock conversion constants with defines.
Kevin O'Connor [Mon, 28 Sep 2009 00:07:40 +0000 (20:07 -0400)]
Replace clock conversion constants with defines.

Simplify and name the clock multiplier constants.

14 years agoInterrupts should be enabled when calling 16bit code.
Kevin O'Connor [Fri, 25 Sep 2009 01:01:16 +0000 (21:01 -0400)]
Interrupts should be enabled when calling 16bit code.

Set most code paths to have interrupts on when calling 16bit code.
This fixes at least one optionrom that needed irqs on.

14 years agoAdd support for permanent low memory allocations.
Kevin O'Connor [Fri, 25 Sep 2009 00:51:55 +0000 (20:51 -0400)]
Add support for permanent low memory allocations.

Support pmm style permanent low-memory allocations.
When used, relocate ebda and store permanent memory at top of 640K.

14 years agoFix bug in fdpt filling - driveid is not hdid.
Kevin O'Connor [Mon, 21 Sep 2009 00:04:06 +0000 (20:04 -0400)]
Fix bug in fdpt filling - driveid is not hdid.

Make sure driveid is used properly.

14 years agoAllow rom to grow beyond 64K.
Kevin O'Connor [Sun, 20 Sep 2009 23:47:45 +0000 (19:47 -0400)]
Allow rom to grow beyond 64K.

If rom is over 64K then use part of e-segment for 32bit code.
Push 32bit code as high as it can go in the f-segment.
Do version building before layoutrom.py - this way layoutrom knows
    full size of rom.
Make layoutrom.py build the full ld script - remove now unused ld
    scripts that just imported the output of layoutrom.py.
Also, use "objdump" instead of "nm" - reduce toolchain requirements.
Enhance tools/checkrom.py so that it can pad bios.bin to size qemu is
    happy with.
Also, add dependencies to build rules for local tools - if tool
    changes automatically rerun it.
Make sure option roms don't overwrite the 32bit code (should the 32bit
    code be in the e-segment).
Make sure shadow code works even if part of the code is in the
    e-segment.

14 years agoFix uninitialized variable in cbfs menu code.
Kevin O'Connor [Sun, 20 Sep 2009 19:42:39 +0000 (15:42 -0400)]
Fix uninitialized variable in cbfs menu code.

14 years agoSupport sleeping until an irq fires, and use where applicable.
Kevin O'Connor [Sun, 20 Sep 2009 19:33:08 +0000 (15:33 -0400)]
Support sleeping until an irq fires, and use where applicable.

Add wait_irq() - it's more efficient than looping with cpu_relax().
Also, move kbd irq enables down - only kbd_command needs it.
Also, make some minor code layout improvements to kbd.c.

14 years agoDo PCI initialization before vga init.
Kevin O'Connor [Sun, 13 Sep 2009 14:46:57 +0000 (10:46 -0400)]
Do PCI initialization before vga init.

The VGA init could depend on the PCI init.

14 years agoUnify cd emulation access and main disk access code.
Kevin O'Connor [Sat, 12 Sep 2009 23:35:04 +0000 (19:35 -0400)]
Unify cd emulation access and main disk access code.

Add a new backend driver for cd emulation (DTYPE_CDEMU).  This backend
    driver now does the work of scheduling mis-sized reads.
Add mechanism for obtaining emulated drive geometry.
Extend disk_1308() to support cdrom emulation.
Use regular disk_13*() calls even for cdemu.
Also, unify the X_SECTOR_SIZE definitions.

14 years agoAdd mechanism for describing internal drives in boot menu.
Kevin O'Connor [Sat, 12 Sep 2009 17:20:14 +0000 (13:20 -0400)]
Add mechanism for describing internal drives in boot menu.

Allow each drive type to describe itself on the boot menu.
This fixes a bug where driveid was used in place of ataid in the boot
   menu.
Also, expand descriptions for each drive type.
Don't overload the IPL type for BCVs - instead introduce new types.

14 years agoSeparate out pause key processing in process_key().
Kevin O'Connor [Fri, 11 Sep 2009 21:00:31 +0000 (17:00 -0400)]
Separate out pause key processing in process_key().

14 years agoDefine bit names for keyboard shift flags.
Kevin O'Connor [Fri, 11 Sep 2009 06:06:02 +0000 (02:06 -0400)]
Define bit names for keyboard shift flags.

Also, move setting of bit flags to the end of process_key().

14 years agoReplace common segment/offset pairs with struct segoff_s.
Kevin O'Connor [Wed, 9 Sep 2009 15:34:39 +0000 (11:34 -0400)]
Replace common segment/offset pairs with struct segoff_s.

Introduce 'struct segoff_s' to more places.

14 years agoRename VAR16_32 to VAR16VISIBLE.
Kevin O'Connor [Wed, 9 Sep 2009 13:51:31 +0000 (09:51 -0400)]
Rename VAR16_32 to VAR16VISIBLE.

Sometimes VAR16_32 is used to export a definition to assembler, so
    clarify its naming.

14 years agoPrep version id for next release.
Kevin O'Connor [Wed, 9 Sep 2009 00:29:57 +0000 (20:29 -0400)]
Prep version id for next release.

14 years agoNote version 0.4.2.
Kevin O'Connor [Wed, 9 Sep 2009 00:20:04 +0000 (20:20 -0400)]
Note version 0.4.2.

14 years agoRamdisk cleanups.
Kevin O'Connor [Sun, 30 Aug 2009 23:31:22 +0000 (19:31 -0400)]
Ramdisk cleanups.

Use malloc code to allocate space for floppy image instead of
    searching e820 map - this prevents a possible conflict with memory
    allocated by pmm.
Check int 1587 return code.

14 years agoCleanups for malloc code.
Kevin O'Connor [Sun, 30 Aug 2009 23:19:31 +0000 (19:19 -0400)]
Cleanups for malloc code.

Fix bug where zones over 2gig may fail to allocate.
Add memalign_high() and use for acpi facs allocation.
Misc code cleanups.

14 years agoAdd defines for floppy constants.
Kevin O'Connor [Sun, 23 Aug 2009 15:56:55 +0000 (11:56 -0400)]
Add defines for floppy constants.

Add defines for several of the codes used in floppy.c.
Also, actually send the gap length in the floppy commands.
Also, adjust count in floppy_cmd instead of all callers.

14 years agoAdd initial support for PMM allocations of permanent memory.
Kevin O'Connor [Sun, 23 Aug 2009 01:31:58 +0000 (21:31 -0400)]
Add initial support for PMM allocations of permanent memory.

Support PCIv3 PMM requests for permanent memory.
Only support permanent high memory requests for now.

14 years agoMerge cdrom 13xx handlers with main disk 13xx handlers.
Kevin O'Connor [Wed, 19 Aug 2009 02:38:49 +0000 (22:38 -0400)]
Merge cdrom 13xx handlers with main disk 13xx handlers.

Most of the cdrom_13 code did the same thing as disk_13 - so merge
    them together.
Add definitions for 0xe0 (EXTSTART_CD) and 0x80 (EXTSTART_HD).
This changes the behavior for cdroms on 1315 and 1316 calls -
    previously 1315 returned an error and set ah=2, now it sets ah=1
    and doesn't return an error; previously 1316 returned ok, not it
    returns EPARAM.

14 years agoFix bug causing layoutrom.py to break if no rodata sections.
Kevin O'Connor [Wed, 19 Aug 2009 02:26:02 +0000 (22:26 -0400)]
Fix bug causing layoutrom.py to break if no rodata sections.

Handle case where there are no rodata sections.

14 years agoUpdate todo.
Kevin O'Connor [Wed, 19 Aug 2009 02:22:07 +0000 (22:22 -0400)]
Update todo.

14 years agoFurther simplify cbfs functions - don't pass iscomp to callers.
Kevin O'Connor [Wed, 19 Aug 2009 02:21:10 +0000 (22:21 -0400)]
Further simplify cbfs functions - don't pass iscomp to callers.

The cbfs data copy function can determine if the file is compressed on
    its own - it doesn't need the iscomp parameter passed in.

14 years agoWork around qemu quirk - dh not reset on ata drive reset.
Kevin O'Connor [Wed, 19 Aug 2009 02:17:57 +0000 (22:17 -0400)]
Work around qemu quirk - dh not reset on ata drive reset.

14 years agoAdd support for using floppy images in CBFS.
Kevin O'Connor [Mon, 17 Aug 2009 01:59:40 +0000 (21:59 -0400)]
Add support for using floppy images in CBFS.

Add new "ramdisk" type for disk accesses.
Extract out high-mem finding code from pmm into find_high_area().
Fix bug in GDB_BASE and GDT_LIMIT macros (wrong bit shifts).

14 years agoRework coreboot cbfs interface for added flexibility.
Kevin O'Connor [Mon, 17 Aug 2009 00:17:35 +0000 (20:17 -0400)]
Rework coreboot cbfs interface for added flexibility.

Allow callers to track the cbfs_file pointer.
Also, remove obsolete code for brute-force flash scanning.

14 years agoUnify floppy and harddrive command routing.
Kevin O'Connor [Sun, 16 Aug 2009 22:48:38 +0000 (18:48 -0400)]
Unify floppy and harddrive command routing.

Implement low-level floppy commands using the disk_op structure.
The requests can then be filled using the regular disk_13xx functions.

14 years agoUnify some floppy and disk functions.
Kevin O'Connor [Sun, 16 Aug 2009 18:13:36 +0000 (14:13 -0400)]
Unify some floppy and disk functions.

Merge floppy_1301/1308/1315/1316/_ret() functions with their disk equivalents.
Store floppy type in drives structure.

14 years agoChange send_disk_op() to return the bios status code.
Kevin O'Connor [Sun, 16 Aug 2009 17:32:24 +0000 (13:32 -0400)]
Change send_disk_op() to return the bios status code.

14 years agoEnhance boot menu to allow selection of floppy to boot from.
Kevin O'Connor [Sun, 16 Aug 2009 16:21:44 +0000 (12:21 -0400)]
Enhance boot menu to allow selection of floppy to boot from.

The bootmenu can now reorder the first floppy drive.
Note - only the drive mapping is changed - floppy variables in the BDA
    are still set depending on the real floppy index.

14 years agoAdd floppy controllers to "drives" list also.
Kevin O'Connor [Sun, 16 Aug 2009 16:09:44 +0000 (12:09 -0400)]
Add floppy controllers to "drives" list also.

The Drives.drives list now contains floppies, harddrives, and cdroms.
Add mapping table for external/internal drive ids for floppies.
Rename CONFIG_FLOPPY_SUPPORT to CONFIG_FLOPPY (for consistency).
Be consistent with "driveid" and "floppyid" variable names.
Replace switch statements of drive parameters into a global array.
There are some externally visible changes with this patch:
  - Some calls will now return EPARAM instead of ETIMEOUT (or ECHANGED)
  - floppy_1301/1308 are now only available when regs->dl is valid
  - floppy_1308/1315 return EPARAM on invalid drives

14 years agoStore cdrom emulated driveid directly.
Kevin O'Connor [Wed, 12 Aug 2009 02:36:30 +0000 (22:36 -0400)]
Store cdrom emulated driveid directly.

14 years agoUse variable name "driveid" consistently (instead of "device").
Kevin O'Connor [Wed, 12 Aug 2009 02:27:51 +0000 (22:27 -0400)]
Use variable name "driveid" consistently (instead of "device").

14 years agoSeparate ATA code from generic disk code.
Kevin O'Connor [Wed, 12 Aug 2009 01:59:37 +0000 (21:59 -0400)]
Separate ATA code from generic disk code.

Move generic code from ata.c to new file block.c.
Rename atabits.h to ata.h and move ata header definitions from disk.h.
Rename ATA.channels to ATA_channels.
Rename ATA structure to Drives.
Support both CONFIG_DRIVES and CONFIG_ATA options.

14 years agoMinor - remove ATA specific version field from ATA.devices[].
Kevin O'Connor [Wed, 12 Aug 2009 00:58:11 +0000 (20:58 -0400)]
Minor - remove ATA specific version field from ATA.devices[].

14 years agoDensely populate ATA.devices list.
Kevin O'Connor [Wed, 12 Aug 2009 00:43:38 +0000 (20:43 -0400)]
Densely populate ATA.devices list.

Populate ATA.devices in order of drives found; the array index no
    longer correlates with the ATA.channels list.
Add cntl_id to device struct for finding the channel info.

14 years agoMisc ATA cleanups.
Kevin O'Connor [Mon, 10 Aug 2009 04:06:37 +0000 (00:06 -0400)]
Misc ATA cleanups.

Remove some unused defines.
Rename ATA_TYPE_* to DTYPE_* and move from atabits.h to disk.h.
Rename ATA_TRANSLATION_* to TRANSLATION_* and move from atabits.h to disk.h.
Convert bios is-drive-ready call to use send_disk_op().
Only add atapi devices to the cdmap if they are cd/dvd roms.
Remove 'device' from struct ata_devices_s.

14 years agoAdd helper macros for defining GDT descriptors.
Kevin O'Connor [Mon, 10 Aug 2009 04:03:04 +0000 (00:03 -0400)]
Add helper macros for defining GDT descriptors.

14 years agoRoute disk_op commands by drive type - not by command.
Kevin O'Connor [Sun, 9 Aug 2009 23:17:11 +0000 (19:17 -0400)]
Route disk_op commands by drive type - not by command.

Don't confuse op->command with low-level ata cmd->command.
Modify __send_disk_op to route commands by drive type.
Add commands for verify and seek operations.
Do ata resets via disk_op also.

14 years agoRemove unused cdemu ATA code.
Kevin O'Connor [Sun, 9 Aug 2009 22:06:40 +0000 (18:06 -0400)]
Remove unused cdemu ATA code.

Remove the low-level ATA code for short reads on cdroms now that cd
    emulation is done at higher-level.
Also, remove sector_count from ebda - ata code updates op->count now.

14 years agoImplement cdrom disk emulation at high-level instead of in low-level ATA.
Kevin O'Connor [Sun, 9 Aug 2009 21:25:19 +0000 (17:25 -0400)]
Implement cdrom disk emulation at high-level instead of in low-level ATA.

Add a 2K buffer to the ebda to allow for cdrom 512 byte vs 2048 byte
    sector emulation.
For unaliagned cdemu reads, just make multiple cdrom reads instead of
    using ata specific code for short reads.
Also, define cdemu virtual sectors using struct chs_s, and update
    legacy_lba() func to take pointer to a chs_s struct.

14 years agoUpdate tools/checkstack.py - new compilers set %ebp in preamble.
Kevin O'Connor [Sun, 9 Aug 2009 17:10:47 +0000 (13:10 -0400)]
Update tools/checkstack.py - new compilers set %ebp in preamble.

A 'movl   %esp,%ebp' can occur in the preamble - note for proper stack
    usage checking.

14 years agoSeparate cdemu disk accesses from regular disk accesses.
Kevin O'Connor [Sun, 9 Aug 2009 17:08:21 +0000 (13:08 -0400)]
Separate cdemu disk accesses from regular disk accesses.

Breakup basic_access() into basic_access, cdemu_access, and legacy_lba.
Also, check for verify and seek calls in __send_disk_op instead of all
    callers.
Also, send_disk_op returns sector count in dop.count instead of via ebda.

14 years agoUse regular CD reading to load initial CDROM boot image.
Kevin O'Connor [Sun, 9 Aug 2009 15:32:00 +0000 (11:32 -0400)]
Use regular CD reading to load initial CDROM boot image.

Use cdrom_read() instead of cdrom_read_512() for loading the initial
    image.  The initial image will always start on a 2K block, and it
    should be okay to load extra sectors if the sector count doesn't
    end on a 2K boundary.

14 years agoAdd option CONFIG_SCREEN_AND_DEBUG to control printf and debugging.
Kevin O'Connor [Sun, 2 Aug 2009 17:18:27 +0000 (13:18 -0400)]
Add option CONFIG_SCREEN_AND_DEBUG to control printf and debugging.

New option controls whether or not printf content is also written to
    the debug ports.

14 years agoFix some PMM corner-cases.
Kevin O'Connor [Sun, 2 Aug 2009 16:33:58 +0000 (12:33 -0400)]
Fix some PMM corner-cases.

Make sure not to divide by zero when calculating usage percent in
    debug messages.
Make sure high memory zones are aligned; make sure zone is big enough
    even after loss due to alignment.
Be sure to reset ZoneTmpHigh and PMMAllocs on failure paths.
Fix corner case in pmm_free() where an allocation might not get freed
    due to ordering of pmmalloc_s structs.