]> xenbits.xensource.com Git - seabios.git/log
seabios.git
9 years agosdcard: Add proper delays during card power up
Kevin O'Connor [Tue, 4 Aug 2015 14:01:02 +0000 (10:01 -0400)]
sdcard: Add proper delays during card power up

Add card power up timing delays as specified by the sd card "Physical
Layer Simplified Specification Version 4.10".

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agosdcard: Improve SD card initialization command sequence
Kevin O'Connor [Thu, 30 Jul 2015 14:56:00 +0000 (10:56 -0400)]
sdcard: Improve SD card initialization command sequence

Send the initialization commands that are specified for SD cards by
the "SD Host Controller Simplified Specification Version 2.00" spec.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agosdcard: Set timeout control register during init (to max allowed timeout)
Kevin O'Connor [Tue, 28 Jul 2015 18:15:37 +0000 (14:15 -0400)]
sdcard: Set timeout control register during init (to max allowed timeout)

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agosdcard: Make sure controller support 3.3V before enabling it
Kevin O'Connor [Tue, 4 Aug 2015 13:48:30 +0000 (09:48 -0400)]
sdcard: Make sure controller support 3.3V before enabling it

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agosdcard: Implement controller frequency setting according to sdhci spec
Kevin O'Connor [Tue, 28 Jul 2015 17:40:04 +0000 (13:40 -0400)]
sdcard: Implement controller frequency setting according to sdhci spec

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agosdcard: Check if card is present before sending commands to card
Kevin O'Connor [Tue, 28 Jul 2015 17:06:41 +0000 (13:06 -0400)]
sdcard: Check if card is present before sending commands to card

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agovgafb: Minor - move gfx_common() variables outside of switch statement
Kevin O'Connor [Thu, 30 Jul 2015 16:42:47 +0000 (12:42 -0400)]
vgafb: Minor - move gfx_common() variables outside of switch statement

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agosmm: ignore bits 16,18-31 of SMM revision ID at runtime too
Kevin O'Connor [Thu, 30 Jul 2015 16:39:12 +0000 (12:39 -0400)]
smm: ignore bits 16,18-31 of SMM revision ID at runtime too

Check only the relevant bits of the SMM revision ID for both the init
check and during runtime checks.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agosmm: fix outl argument order
Paolo Bonzini [Mon, 27 Jul 2015 10:23:58 +0000 (12:23 +0200)]
smm: fix outl argument order

The value is the first argument and the port is the second, but the code
was using the opposite order.

Reported-by: Stefan Weil <sw@weilnetz.de>
Reviewed-by: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
9 years agoMinor - move declaration of CDRom_locks to code that uses it
Kevin O'Connor [Fri, 24 Jul 2015 17:17:38 +0000 (13:17 -0400)]
Minor - move declaration of CDRom_locks to code that uses it

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agoramdisk: Allow ramdisk support (CONFIG_FLASH_FLOPPY) under QEMU
Kevin O'Connor [Thu, 23 Jul 2015 13:19:23 +0000 (09:19 -0400)]
ramdisk: Allow ramdisk support (CONFIG_FLASH_FLOPPY) under QEMU

Don't require coreboot to use CONFIG_FLASH_FLOPPY - with the latest
QEMU, it's possible to place a floppy image into fw_cfg using the qemu
command line (eg, "-fw_cfg name=floppyimg/MyFloppy,file=file.img").

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agotimer: Add CONFIG_TSC_TIMER build option to disable the CPU TSC timer
Kevin O'Connor [Thu, 23 Jul 2015 12:36:01 +0000 (08:36 -0400)]
timer: Add CONFIG_TSC_TIMER build option to disable the CPU TSC timer

Allow users to remove the CPU timestamp counter support at compile
time.  The PMTIMER is frequently used instead of the TSC and this
compile time option allows one to strip a few bytes from the final
binary.  This change also defaults the internal timer to use the PIT
based timer until the PMTIMER or TSC is detected.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agotimer: Delay timestamp counter init until after pmtimer is probed
Kevin O'Connor [Wed, 22 Jul 2015 20:06:27 +0000 (16:06 -0400)]
timer: Delay timestamp counter init until after pmtimer is probed

Delay call to timer_setup() until after the xxx_platform_setup() calls
so that the pmtimer can be detected first.  Most modern machines will
have a pmtimer and calibrating the timestamp counter is frequently
unnecessary.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agops2: Don't wait 100ms to discard possible extra reset receive byte
Kevin O'Connor [Wed, 22 Jul 2015 18:32:28 +0000 (14:32 -0400)]
ps2: Don't wait 100ms to discard possible extra reset receive byte

The existing PS2 port code waits 100ms to see if the device attached
to the keyboard port responds to a reset command with two bytes
(instead of the normal one byte).  If an extra byte is received, it is
discarded.

Receiving two bytes would be unusual and waiting to check for that
event is unnecessary because the next command in the keyboard init
sequence already seamlessly discards any extra bytes in the command
queue.

This patch eliminates the 100ms wait, which notably reduces the
SeaBIOS boot time on QEMU.  This patch also forces PS2 mice to always
respond with two bytes during a reset sequence (instead of just one
byte), which is a good sanity check.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agoDon't enable interrupts prior to IVT and PIC setup
Kevin O'Connor [Tue, 14 Jul 2015 19:44:26 +0000 (15:44 -0400)]
Don't enable interrupts prior to IVT and PIC setup

The machine may crash if an interrupt occurs prior to the setup of the
interrupt vector table (IVT) and programmable interrupt controller
(PIC).  This patch makes sure that interrupts remain disabled until
these components are setup.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agoata: Make sure "chanid" is relative to PCI device for bootorder file
Kevin O'Connor [Tue, 14 Jul 2015 19:12:25 +0000 (15:12 -0400)]
ata: Make sure "chanid" is relative to PCI device for bootorder file

When specifying drives in the bootorder file, the "drive@x" parameter
should be relative to the given PCI device and not relative to the
total number of ATA controllers in the machine.  This patch separates
the tracking of "chanid" (channel number relative to a given PCI
devices) from the "ataid" (channel number relative to the total number
of ATA channels).

Reported-by: Jonathan A. Kollasch <jakllsch@kollasch.net>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agops2: Support mode for polling the PS2 port instead of using irqs
Kevin O'Connor [Wed, 12 Nov 2014 17:15:34 +0000 (12:15 -0500)]
ps2: Support mode for polling the PS2 port instead of using irqs

Some recent hardware has trouble with routing PS2 port interrupts
while the interrupt controller is in legacy routing mode.  This patch
adds a config mechanism (via "etc/ps2-poll-only") to force the PS2
code into a polling only mode so that interrupts are not required.

It is not recommended to use this polling mode on hardware that does
properly support PS2 irqs, because some very old (DOS-era) programs
depend on the BIOS PS2 irq behavior.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agocoreboot: Try to auto-detect if the CBFS anchor pointer is a relative pointer
Kevin O'Connor [Wed, 8 Jul 2015 23:05:54 +0000 (19:05 -0400)]
coreboot: Try to auto-detect if the CBFS anchor pointer is a relative pointer

If CONFIG_CBFS_LOCATION is set to a non-zero value then it means the
CBFS flash is not at the very end of memory.  In this case, it's
unclear if the anchor pointer is an absolute pointer or if it is
relative to CONFIG_CBFS_LOCATION.  Some devices have been using
absolute pointers, but it appears some devices are now using relative
pointers there.  Since the anchor pointer almost always points to a
structure in the last 64K of the rom, it should be possible to
auto-detect if the pointer is relative or not.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agoblock: Rename process_XXX_op() functions to XXX_process_op()
Kevin O'Connor [Tue, 7 Jul 2015 18:56:20 +0000 (14:56 -0400)]
block: Rename process_XXX_op() functions to XXX_process_op()

Rename disk driver dispatch functions to a consistent naming style.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agoblockcmd: Convert cdb_is_read() to scsi_is_read()
Kevin O'Connor [Tue, 7 Jul 2015 18:43:01 +0000 (14:43 -0400)]
blockcmd: Convert cdb_is_read() to scsi_is_read()

Convert the cdb_is_read() function to a new function scsi_is_read()
which takes a 'struct disk_op_s' as a paramter.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agoblockcmd: Remove unused scsi_process_op() and cdb_cmd_data()
Kevin O'Connor [Tue, 7 Jul 2015 16:46:20 +0000 (12:46 -0400)]
blockcmd: Remove unused scsi_process_op() and cdb_cmd_data()

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agopvscsi: Handle pvscsi drives directly via 'struct disk_op_s' requests
Kevin O'Connor [Tue, 7 Jul 2015 16:35:34 +0000 (12:35 -0400)]
pvscsi: Handle pvscsi drives directly via 'struct disk_op_s' requests

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agopvscsi: Move pvscsi_fill_req() code into pvscsi_cmd()
Kevin O'Connor [Tue, 7 Jul 2015 16:24:50 +0000 (12:24 -0400)]
pvscsi: Move pvscsi_fill_req() code into pvscsi_cmd()

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agovirtio-scsi: Handle virtio drives directly via 'struct disk_op_s' requests
Kevin O'Connor [Tue, 7 Jul 2015 16:19:53 +0000 (12:19 -0400)]
virtio-scsi: Handle virtio drives directly via 'struct disk_op_s' requests

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agomegasas: Handle Megasas drives directly via 'struct disk_op_s' requests
Kevin O'Connor [Tue, 7 Jul 2015 16:06:01 +0000 (12:06 -0400)]
megasas: Handle Megasas drives directly via 'struct disk_op_s' requests

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agoesp-scsi: Handle ESP drives directly via 'struct disk_op_s' requests
Kevin O'Connor [Tue, 7 Jul 2015 15:57:50 +0000 (11:57 -0400)]
esp-scsi: Handle ESP drives directly via 'struct disk_op_s' requests

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agolsi-scsi: Handle LSI drives directly via 'struct disk_op_s' requests
Kevin O'Connor [Tue, 7 Jul 2015 15:51:08 +0000 (11:51 -0400)]
lsi-scsi: Handle LSI drives directly via 'struct disk_op_s' requests

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agousb-uas: Handle USB drives directly via 'struct disk_op_s' requests
Kevin O'Connor [Tue, 7 Jul 2015 15:43:34 +0000 (11:43 -0400)]
usb-uas: Handle USB drives directly via 'struct disk_op_s' requests

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agousb-msc: Handle USB drives directly via 'struct disk_op_s' requests
Kevin O'Connor [Tue, 7 Jul 2015 15:35:25 +0000 (11:35 -0400)]
usb-msc: Handle USB drives directly via 'struct disk_op_s' requests

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agoahci: Handle AHCI ATAPI drives directly via 'struct disk_op_s' requests
Kevin O'Connor [Tue, 7 Jul 2015 15:24:27 +0000 (11:24 -0400)]
ahci: Handle AHCI ATAPI drives directly via 'struct disk_op_s' requests

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agoata: Handle ATA ATAPI drives directly via 'struct disk_op_s' requests
Kevin O'Connor [Tue, 7 Jul 2015 15:11:46 +0000 (11:11 -0400)]
ata: Handle ATA ATAPI drives directly via 'struct disk_op_s' requests

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agoblockcmd: Introduce scsi_fill_cmd()
Kevin O'Connor [Tue, 7 Jul 2015 14:53:12 +0000 (10:53 -0400)]
blockcmd: Introduce scsi_fill_cmd()

Introduce scsi_fill_cmd() which creates a scsi style "command data
block" from a "struct disk_op_s" disk request.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agoblock: Route scsi style commands through 'struct disk_op_s'
Kevin O'Connor [Tue, 7 Jul 2015 13:53:54 +0000 (09:53 -0400)]
block: Route scsi style commands through 'struct disk_op_s'

Support sending scsi style "command data block" commands (cdbcmd)
through the 'struct disk_op_s' command request structure.  And change
the blockcmd.c and cdrom.c code to route these commands through the
process_op() code.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agoblock: Introduce default_process_op() with common command handling codes
Kevin O'Connor [Tue, 7 Jul 2015 13:01:52 +0000 (09:01 -0400)]
block: Introduce default_process_op() with common command handling codes

Most disk drivers only implement a couple of the available bios
commands.  Unify the common fallback handling code into a new function
default_process_op() to reduce boiler-plate code.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agoblock: Split process_op() command dispatch up into multiple functions
Kevin O'Connor [Tue, 7 Jul 2015 12:35:51 +0000 (08:35 -0400)]
block: Split process_op() command dispatch up into multiple functions

Introduce process_op_32(), process_op_16(), and process_op_both() and
split the disk driver command dispatch by its runtime mode
requirements.  This makes it more clear which modes each driver runs
in.  It also reduces the call32() boiler-plate code.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agoich9: initialise RCBA register through LPC interface
Paulo Alcantara [Fri, 10 Jul 2015 00:04:01 +0000 (21:04 -0300)]
ich9: initialise RCBA register through LPC interface

This patch initialises root complex register block BAR in order to
support TCO watchdog emulation features on QEMU.

Cc: Kevin O'Connor <kevin@koconnor.net>
Cc: Gerd Hofmann <kraxel@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Paulo Alcantara <pcacjr@zytor.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agodocs: Note release date of 1.8.2
Kevin O'Connor [Mon, 6 Jul 2015 17:45:42 +0000 (13:45 -0400)]
docs: Note release date of 1.8.2

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agoMake sure all code checks for malloc failures
Kevin O'Connor [Tue, 30 Jun 2015 15:10:41 +0000 (11:10 -0400)]
Make sure all code checks for malloc failures

This is the result of an audit of callers of the malloc_XXX() and
memalign_XXX() calls.  All callers need to check if these functions
return NULL.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agobootorder: Update "extra pci root" buses bootorder format to match qemu
Kevin O'Connor [Tue, 30 Jun 2015 15:07:58 +0000 (11:07 -0400)]
bootorder: Update "extra pci root" buses bootorder format to match qemu

The QEMU code will use the prefix "/pci@i0cf8,%x/" for devices on
extra pci root buses, so change the SeaBIOS code to match that.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agovirtio-pci: use high memory for rings
Gerd Hoffmann [Wed, 1 Jul 2015 12:39:30 +0000 (14:39 +0200)]
virtio-pci: use high memory for rings

That way we should be able to manage *alot* more devices.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio-ring: 32bit cleanup
Gerd Hoffmann [Wed, 1 Jul 2015 12:45:58 +0000 (14:45 +0200)]
virtio-ring: 32bit cleanup

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio-scsi: 32bit cleanup
Gerd Hoffmann [Wed, 1 Jul 2015 12:38:59 +0000 (14:38 +0200)]
virtio-scsi: 32bit cleanup

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio-blk: 32bit cleanup
Gerd Hoffmann [Wed, 1 Jul 2015 12:35:27 +0000 (14:35 +0200)]
virtio-blk: 32bit cleanup

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio: legacy cleanup
Gerd Hoffmann [Tue, 30 Jun 2015 07:53:03 +0000 (09:53 +0200)]
virtio: legacy cleanup

Now that all code is switched over to use vp_read/write we can
drop the ioaddr field from vp_device and the offset #defines.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio: also probe version 1.0 pci ids
Gerd Hoffmann [Fri, 26 Jun 2015 07:50:22 +0000 (09:50 +0200)]
virtio: also probe version 1.0 pci ids

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio: use version 1.0 if available (flip the big switch)
Gerd Hoffmann [Fri, 26 Jun 2015 06:45:11 +0000 (08:45 +0200)]
virtio: use version 1.0 if available (flip the big switch)

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio-blk: fix initialization for version 1.0
Gerd Hoffmann [Fri, 26 Jun 2015 09:55:41 +0000 (11:55 +0200)]
virtio-blk: fix initialization for version 1.0

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio-scsi: fix initialization for version 1.0
Gerd Hoffmann [Fri, 26 Jun 2015 08:22:55 +0000 (10:22 +0200)]
virtio-scsi: fix initialization for version 1.0

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio: add version 1.0 support to vp_find_vq
Gerd Hoffmann [Fri, 26 Jun 2015 07:07:59 +0000 (09:07 +0200)]
virtio: add version 1.0 support to vp_find_vq

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio: remove unused vp_del_vq
Gerd Hoffmann [Fri, 26 Jun 2015 06:40:30 +0000 (08:40 +0200)]
virtio: remove unused vp_del_vq

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio: add version 1.0 support to vp_notify
Gerd Hoffmann [Fri, 26 Jun 2015 06:19:28 +0000 (08:19 +0200)]
virtio: add version 1.0 support to vp_notify

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio: add version 1.0 support to vp_reset
Gerd Hoffmann [Thu, 25 Jun 2015 14:44:06 +0000 (16:44 +0200)]
virtio: add version 1.0 support to vp_reset

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio: add version 1.0 support to vp_get_isr
Gerd Hoffmann [Thu, 25 Jun 2015 14:43:17 +0000 (16:43 +0200)]
virtio: add version 1.0 support to vp_get_isr

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio: add version 1.0 support to vp_{get,set}_status
Gerd Hoffmann [Thu, 25 Jun 2015 14:37:41 +0000 (16:37 +0200)]
virtio: add version 1.0 support to vp_{get,set}_status

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio: make features 64bit, support version 1.0 features
Gerd Hoffmann [Thu, 25 Jun 2015 10:28:46 +0000 (12:28 +0200)]
virtio: make features 64bit, support version 1.0 features

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio: add read/write functions and macros
Gerd Hoffmann [Thu, 25 Jun 2015 10:24:59 +0000 (12:24 +0200)]
virtio: add read/write functions and macros

Add macros to read/write virtio registers.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio: create vp_cap struct for legacy bar
Gerd Hoffmann [Tue, 30 Jun 2015 06:50:09 +0000 (08:50 +0200)]
virtio: create vp_cap struct for legacy bar

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio: find version 1.0 virtio capabilities
Gerd Hoffmann [Thu, 25 Jun 2015 14:14:21 +0000 (16:14 +0200)]
virtio: find version 1.0 virtio capabilities

virtio 1.0 specifies the location of the various virtio regions
using pci capabilities.  Look them up and store the results.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio: add version 0.9.5 struct
Gerd Hoffmann [Tue, 30 Jun 2015 06:42:50 +0000 (08:42 +0200)]
virtio: add version 0.9.5 struct

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio: add version 1.0 structs and #defines
Gerd Hoffmann [Thu, 25 Jun 2015 14:13:51 +0000 (16:13 +0200)]
virtio: add version 1.0 structs and #defines

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio: pass struct pci_device to vp_init_simple
Gerd Hoffmann [Thu, 25 Jun 2015 08:24:27 +0000 (10:24 +0200)]
virtio: pass struct pci_device to vp_init_simple

... instead of the bdf only.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio: add struct vp_device
Gerd Hoffmann [Thu, 25 Jun 2015 07:36:16 +0000 (09:36 +0200)]
virtio: add struct vp_device

For virtio 1.0 support we will need more state than just the (legacy
mode) ioaddr for each virtio-pci device.  Prepare for that by adding
a new struct for it.  For now it carries the ioaddr only.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovirtio: run drivers in 32bit mode
Gerd Hoffmann [Fri, 26 Jun 2015 07:44:00 +0000 (09:44 +0200)]
virtio: run drivers in 32bit mode

virtio version 1.0 registers can (and actually do in the qemu
implementation) live in mmio space.  So we must run the blk and
scsi virtio drivers in 32bit mode, otherwise we can't access them.

This also allows to drop a bunch of GET_LOWFLAT calls from the virtio
code in the following patches.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agopci: allow to loop over capabilities
Gerd Hoffmann [Thu, 25 Jun 2015 08:49:10 +0000 (10:49 +0200)]
pci: allow to loop over capabilities

Add a parameter to pci_find_capability, to specify the start point.
This allows to find multiple capabilities of the same type, by calling
pci_find_capability again with the offset of the last capability found.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agobuild: CONFIG_VGA_FIXUP_ASM should depend on CONFIG_BUILD_VGABIOS
Kevin O'Connor [Wed, 10 Jun 2015 14:44:32 +0000 (10:44 -0400)]
build: CONFIG_VGA_FIXUP_ASM should depend on CONFIG_BUILD_VGABIOS

Add the dependency to CONFIG_VGA_FIXUP_ASM so the menu option only
appears when appropriate.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agotcg: Use seabios setup()/prepboot() calling convention for tcg
Kevin O'Connor [Wed, 10 Jun 2015 15:00:17 +0000 (11:00 -0400)]
tcg: Use seabios setup()/prepboot() calling convention for tcg

Rename tcg externally called functions to more closely match other
subsystems.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Tested-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
9 years agotpm: Move call to tpm_option_rom into init_optionrom
Stefan Berger [Tue, 9 Jun 2015 23:56:33 +0000 (19:56 -0400)]
tpm: Move call to tpm_option_rom into init_optionrom

Move the call to measure the option ROM 'tpm_option_rom' into
init_optionrom.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
9 years agotpm: Clean up in tcgbios.h
Stefan Berger [Tue, 9 Jun 2015 23:56:32 +0000 (19:56 -0400)]
tpm: Clean up in tcgbios.h

Remove some unused #defines and remove comments pointing to
sections in specs.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
9 years agotpm: clean up parameters to build_and_send_cmd
Stefan Berger [Tue, 9 Jun 2015 23:56:31 +0000 (19:56 -0400)]
tpm: clean up parameters to build_and_send_cmd

Clean up the parameters to the build_and_send_cmd function call.
Use the sizeof() on the preceding buffer parameter. If the buffer
is NULL, we pass 0.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
9 years agotpm: Be consistent with array sizes in tcgbios.c
Stefan Berger [Tue, 9 Jun 2015 23:56:29 +0000 (19:56 -0400)]
tpm: Be consistent with array sizes in tcgbios.c

Remove the array size from all arrays.

Replace the magic 12 with sizeof(GetCapability_Timeouts),
which represents the maximum number of bytes that need to be
reserved.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
9 years agotpm: Introduce a #define for command tag
Stefan Berger [Tue, 9 Jun 2015 23:56:28 +0000 (19:56 -0400)]
tpm: Introduce a #define for command tag

Introduce a #define for the TPM command tag 0x00c1.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
9 years agovga: add virtio-vga to kconfig
Gerd Hoffmann [Fri, 10 Apr 2015 08:43:45 +0000 (10:43 +0200)]
vga: add virtio-vga to kconfig

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovga: rework virtio-vga support
Gerd Hoffmann [Wed, 8 Apr 2015 08:36:22 +0000 (10:36 +0200)]
vga: rework virtio-vga support

Unlike planned earlier virtio-vga will be compatible with
the qemu stdvga, with the framebuffer in bar 0.  Drop the
virtio-vga chunk, update comment accordingly.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agovga: simplify vga builds
Gerd Hoffmann [Wed, 8 Apr 2015 08:49:25 +0000 (10:49 +0200)]
vga: simplify vga builds

Add a kconfig menu to pick the vga variant, stick the vendorr
and device ids as defaults into Kconfig.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
9 years agobuild: Support "make VERSION=xyz" to override the default build version
Kevin O'Connor [Wed, 3 Jun 2015 23:17:12 +0000 (19:17 -0400)]
build: Support "make VERSION=xyz" to override the default build version

Add a build option to explicitly set the version information compiled
into the seabios and seavgabios binaries.  This may assist in
reproducible builds or to better link builds to distribution packages.
If the new "VERSION=" parameter is not provided then the default build
version remains unchanged.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agoDon't forward declare functions with "inline" in headers
Kevin O'Connor [Mon, 1 Jun 2015 22:32:06 +0000 (18:32 -0400)]
Don't forward declare functions with "inline" in headers

Don't mark function definitions in headers with "inline" - it causes
compile warnings on gcc v5.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Acked-by: Paul Menzel <paulepanter@sourceforge.net>
9 years agoAdd 'measurement' code to the BIOS
Stefan Berger [Tue, 26 May 2015 19:48:33 +0000 (15:48 -0400)]
Add 'measurement' code to the BIOS

This patch adds invocations of functions that measure various parts of the
code and data through various parts of the BIOS code. It follows TCG
specifications on what needs to be measured. It also adds the implementation
of the called functions.

Reference for what needs to be measured can be found in specs found here:

http://www.trustedcomputinggroup.org/resources/pc_client_work_group_specific_implementation_specification_for_conventional_bios

The first measurements are done once the ACPI tables have been initialized.

Once booted into Linux, the current measurements produce the following logs
which can be found in /sys/kernel/security/tpm0/ascii_bios_measurements.
The below log also shows measurements from trusted grub.

 1 3fb240d2a04085a4e84f81e4398e070ed5a18163 06 [SMBIOS]
 2 cc812353fc277c1fab99e0b721752a1392984566 06 [Option ROM]
 2 9dbd87163112e5670378abe4510491259a61f411 05 [Start Option ROM Scan]
 2 6f74e357331b8dee11bbad85f27bc66cb873106c 06 [Option ROM]
 2 5626eb7ac05c7231e46d7461e7d3839b03ae9fad 06 [Option ROM]
 4 c1e25c3f6b0dc78d57296aa2870ca6f782ccf80f 05 [Calling INT 19h]
 0 d9be6524a5f5047db5866813acf3277892a7a30a 04 []
 1 d9be6524a5f5047db5866813acf3277892a7a30a 04 []
 2 d9be6524a5f5047db5866813acf3277892a7a30a 04 []
 3 d9be6524a5f5047db5866813acf3277892a7a30a 04 []
 4 d9be6524a5f5047db5866813acf3277892a7a30a 04 []
 5 d9be6524a5f5047db5866813acf3277892a7a30a 04 []
 6 d9be6524a5f5047db5866813acf3277892a7a30a 04 []
 7 d9be6524a5f5047db5866813acf3277892a7a30a 04 []
 4 8cf2fe6c87d4d0b2998a43da630292e6d85ee8b6 05 [Booting BCV device 80h (HDD)]
 4 5dff94459a3e2d13a433ef94afdc306144565bf7 0d [IPL]
 5 d1b33afde65ad47502332af957c60f20c84c1edc 0e [IPL Partition Data]
 4 487ce764b527ccad17f1d04243d0136fa981e6c4 0d [IPL]
 4 91d285e4dead566324c8938a3cc75803f462d9a1 0d [IPL]
 4 8ba79ac98bb491524fef29defc724daaf6263d35 0d [IPL]
 4 c591c15b82e4ff30e7383a4ff1ef3b41b38521ac 06 []
 4 8cdc27ec545eda33fbba1e8b8dae4da5c7206972 04 [Grub Event Separator]
 5 8cdc27ec545eda33fbba1e8b8dae4da5c7206972 04 [Grub Event Separator]
 5 e8673b9e14b02dc12d8ccfd0176bca7a3de7fc3c 0e [IPL Partition Data]
 5 0163e375a0af7525c5dac1a8e74b277359e40d1d 1105 []
 8 4be30f67c3d48ab7f04d9c0fd07f06d4c68379be 1205 []
 8 54c83965978de9708d026016ecb0e70660e04388 1305 []
 5 2431ed60130faeaf3a045f21963f71cacd46a029 04 [OS Event Separator]
 8 2431ed60130faeaf3a045f21963f71cacd46a029 04 [OS Event Separator]
 8 f3973cae05d6e2055062119d6e6e1e077b7df876 1005 []

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
9 years agoAdd multiboot support.
Vladimir Serbinenko [Mon, 18 May 2015 17:07:16 +0000 (19:07 +0200)]
Add multiboot support.

I've been successfully using SeaBIOS as secondary bootloader. In more details
I have GRUB2-as-payload in flash together with coreboot. SeaBIOS binary is on
the HDD and loaded by GRUB when needed. This has an unfortunate consequence
that I have to keep vga oprom in flash even if usually I boot without it. This
patches makes bios.bin.elf multiboot executable with files passed as modules.
Example:

menuentry "SeaBIOS (mb)" --unrestricted {
   root=ahci0,2
   multiboot /bios.bin.elf
   module /vgabios_x230.rom name=pci8086,0166.rom
}

the parameter name= specifies under which name SeaBIOS will see it.

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agomake SeaBios compatible with Xen vTPM.
Quan Xu [Thu, 30 Apr 2015 23:43:04 +0000 (19:43 -0400)]
make SeaBios compatible with Xen vTPM.

Signed-off-by: Quan Xu <quan.xu@intel.com>
9 years agoSupport for BIOS interrupt handler
Stefan Berger [Mon, 23 Mar 2015 18:22:17 +0000 (14:22 -0400)]
Support for BIOS interrupt handler

This patch implements the TCG BIOS interrupt handler 1ah. It is for
example used by trusted grub.

This patch adds an implementation of SHA1 (following NIST specs., IETF RFC 3147
and Wikipedia) for speeding up measurements of code. Trusted Grub for example
makes use of this interface and measures (calculates SHA1) of the Linux kernel
and initrd. Those files can be rather large and hunting their bytes through
the TIS interface as part of the int handler commands invoked by trusted grub
does take quite some time due to the many vmexits the interface is creating
(one per byte).

There is also a threshold for the size of data to hash (100k) below which
the TPM is used and above the internal faster SHA1 algorithm is used.

This patch for example enables trusted grub to interact with the TPM
and take additional measurements.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
9 years agoImplementation of the TCG BIOS extensions
Stefan Berger [Mon, 23 Mar 2015 18:22:16 +0000 (14:22 -0400)]
Implementation of the TCG BIOS extensions

This patch implements the main part of the TCG BIOS extensions. It provides
the following functionality:

- initialization of the TCPA ACPI table used for logging of measurements
- initialization of the TPM by sending a sequence of commands to it
- proper setup of the TPM before the BIOS hands over control to the bootloader
- support for S3 resume; BIOS sends TPM_Startup(ST_STATE) to TPM
- enable configuration of SeaBIOS to be built with TCGBIOS extensions
  All TCG BIOS extensions are activated with CONFIG_TCGBIOS.

Structures that are needed in subsequent patches are also included in
tcgbios.h at this point.

The effect of this patch is that it initialized the TPM upon VM start
and S3 resume.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
9 years agoAdd an implementation of a TPM TIS driver
Stefan Berger [Mon, 23 Mar 2015 18:22:15 +0000 (14:22 -0400)]
Add an implementation of a TPM TIS driver

This patch adds an implementation of a TPM TIS driver for the TPM TIS
emulation supported by QEMU. The driver is broken up into several
small functions that have to be called in proper sequence. The driver is
cleanly separated from the rest of the code through an interface holding
pointers to the driver's functions.
A client using this driver first probes whether the TPM TIS
interface is available (probe function) and then invokes the interface
function to initialze the interface and send requests and receive responses.

Possible future extensions *could* include a virtio interface for the TPM
with a corresponding driver here.

Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
9 years agoLink rom.o with -N option.
Vladimir Serbinenko [Tue, 19 May 2015 16:21:19 +0000 (18:21 +0200)]
Link rom.o with -N option.

This option tells linker not to align sections in a way optimied for OS.

ls -lh out/bios.bin.elf
-rwxr-xr-x 1 phcoder phcoder 90K Mai 19 20:38 out/bios.bin.elf

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
9 years agoahci: Ignore max_ports.
Vladimir Serbinenko [Mon, 18 May 2015 13:00:31 +0000 (15:00 +0200)]
ahci: Ignore max_ports.

At least AHCI on Intel on some machines claim to support only 6 ports
while in fact higher port numbers are present and work.
This is needed to access CD-ROM on PackardBell MS2290.
Both GRUB and Linux have a similar workaround.

Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
9 years agosmm: ignore bits 16,18-31 of SMM revision ID
Paolo Bonzini [Wed, 6 May 2015 10:38:29 +0000 (12:38 +0200)]
smm: ignore bits 16,18-31 of SMM revision ID

Bits 16-31 of the SMM revision ID are feature bits.  We only need to
check that SMBASE relocation is supported, but do not care about other
features.  In particular, this allows the SMM I/O instruction restart
feature to be present.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 years agocheckstack: Minor - continue if not a regular asm line
Kevin O'Connor [Fri, 17 Apr 2015 16:33:58 +0000 (12:33 -0400)]
checkstack: Minor - continue if not a regular asm line

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
10 years agovgabios: Emulate "leal" instruction
Kevin O'Connor [Thu, 9 Apr 2015 21:20:16 +0000 (17:20 -0400)]
vgabios: Emulate "leal" instruction

Emulate the "leal" instruction so that the vgabios can run on older
versions of x86emu.  (This removes the previous "leal" trap.)

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
10 years agovgabios: Add config option for assembler fixups
Kevin O'Connor [Thu, 9 Apr 2015 21:15:23 +0000 (17:15 -0400)]
vgabios: Add config option for assembler fixups

Add a kconfig build option (CONFIG_VGA_FIXUP_ASM) to allow users to
build the vgabios without the complex assembler fixups that work
around emulator bugs.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
10 years agovgabios: Don't use "smsww" instruction - it confuses x86emu
Kevin O'Connor [Thu, 9 Apr 2015 16:24:18 +0000 (12:24 -0400)]
vgabios: Don't use "smsww" instruction - it confuses x86emu

Commit 251e2638 introduced the "smsww" instruction to the vgabios.
Unfortunately, it appears at least some versions of x86emu crash when
executing that instruction (eg, FC13 installer crashes).  That
instruction wasn't required to work around the problem fixed in
251e2638, so just avoid it.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
10 years agosmbios: Use integer signature instead of string signature
Kevin O'Connor [Thu, 9 Apr 2015 15:57:44 +0000 (11:57 -0400)]
smbios: Use integer signature instead of string signature

Change the smbios structure to use a 4 byte u32 signature field
instead of a 4 byte character string field.  In practice, this allows
the compiler to place the signature in the initialize code segment and
thus makes it less likely the signature would be found in the
f-segment.  (If the smbios signature is found in the f-segment it can
confuse some table scans.)

Reviewed-by: Bruce Rogers <brogers@suse.com>
Tested-by: Bruce Rogers <brogers@suse.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
10 years agocheckrom: Fix typo in error message
Andreas Färber [Thu, 19 Mar 2015 16:23:19 +0000 (17:23 +0100)]
checkrom: Fix typo in error message

increate -> increase

Signed-off-by: Andreas Färber <afaerber@suse.de>
10 years agocheckstack: Prefer passing "function" class instead of function address
Kevin O'Connor [Thu, 19 Mar 2015 16:43:29 +0000 (12:43 -0400)]
checkstack: Prefer passing "function" class instead of function address

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
10 years agocheckstack: Simplify yield calculations
Kevin O'Connor [Thu, 19 Mar 2015 16:10:28 +0000 (12:10 -0400)]
checkstack: Simplify yield calculations

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
10 years agocheckstack: Replace function information tuple with class
Kevin O'Connor [Thu, 19 Mar 2015 03:31:43 +0000 (23:31 -0400)]
checkstack: Replace function information tuple with class

Replace the six-tuple storing information on each parsed function with
a class.  This makes the code more readable.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
10 years agodocs: Clarify that pci-optionrom-exec doesn't apply to roms in cbfs
Kevin O'Connor [Wed, 18 Mar 2015 16:16:59 +0000 (12:16 -0400)]
docs: Clarify that pci-optionrom-exec doesn't apply to roms in cbfs

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
10 years agovgabios: Don't use extra stack if it appears a modern OS is in use
Kevin O'Connor [Tue, 17 Mar 2015 15:37:25 +0000 (11:37 -0400)]
vgabios: Don't use extra stack if it appears a modern OS is in use

If the last mode set (while not in vm86 mode) was done from a VBE mode
set call then disable the extra stack.  This works under the premise
that only a modern OS would invoke the VBE mode changing facilities
and a modern OS would always call the vgabios with sufficient stack
space.

This is an ugly hack to work around a problem Windows Vista (and
possibly later Windows releases) has with the VGA BIOS using a stack
in the e-segment.

Reported-by: Richard Laager <rlaager@wiktel.com>
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
10 years agovgabios: On bda_save_restore() the saved vbe_mode also has flags in it
Kevin O'Connor [Tue, 17 Mar 2015 14:52:16 +0000 (10:52 -0400)]
vgabios: On bda_save_restore() the saved vbe_mode also has flags in it

When restoring a saved state, make sure to remove any flags from the
video mode prior to searching for that mode.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
10 years agodocs: Note release date of 1.8.1
Kevin O'Connor [Mon, 16 Mar 2015 14:43:26 +0000 (10:43 -0400)]
docs: Note release date of 1.8.1

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
10 years agoboot: switch default menu key to ESC
Paolo Bonzini [Thu, 12 Mar 2015 17:12:24 +0000 (18:12 +0100)]
boot: switch default menu key to ESC

On some platforms, F12 may be hard to access; for example, on OS X
machines F9-F12 have been intercepted by the OS for a long time, and
on newer OS X releases function keys are basically gone for good.

Which keys are and are not available depends on the client, not on
the server, but only function keys are usually trapped by terminals.
Hence, using ESC for the boot menu avoids the problems associated
with F12.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
10 years agoboot.c: delay exiting boot if menu key is ESC
Paolo Bonzini [Thu, 12 Mar 2015 17:12:23 +0000 (18:12 +0100)]
boot.c: delay exiting boot if menu key is ESC

If the menu key is ESC, do not restart boot unless
1.5 seconds have passed.  Otherwise users (trained by years of
repeatedly hitting keys to enter the BIOS) will end up hitting ESC
multiple times and immediately booting the primary boot device.

Suggested-by: Matt DeVillier <matt.devillier@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>