]> git.ipfire.org Git - thirdparty/ipxe.git/commit
[block] Replace gPXE block-device API with an iPXE asynchronous interface
authorMichael Brown <mcb30@ipxe.org>
Fri, 3 Sep 2010 15:11:51 +0000 (16:11 +0100)
committerMichael Brown <mcb30@ipxe.org>
Tue, 14 Sep 2010 19:37:15 +0000 (20:37 +0100)
commit220495f8bf2222e1dc1aa7db554d23997b545546
treef04aa0d123a0b643fc41e178db81cfe63ba913bf
parent46c7f99c66e18bf1735a68ada35aa963c979d59b
[block] Replace gPXE block-device API with an iPXE asynchronous interface

The block device interface used in gPXE predates the invention of even
the old gPXE data-transfer interface, let alone the current iPXE
generic asynchronous interface mechanism.  Bring this old code up to
date, with the following benefits:

 o  Block device commands can be cancelled by the requestor.  The INT 13
    layer uses this to provide a global timeout on all INT 13 calls,
    with the result that an unexpected passive failure mode (such as
    an iSCSI target ACKing the request but never sending a response)
    will lead to a timeout that gets reported back to the INT 13 user,
    rather than simply freezing the system.

 o  INT 13,00 (reset drive) is now able to reset the underlying block
    device.  INT 13 users, such as DOS, that use INT 13,00 as a method
    for error recovery now have a chance of recovering.

 o  All block device commands are tagged, with a numerical tag that
    will show up in debugging output and in packet captures; this will
    allow easier interpretation of bug reports that include both
    sources of information.

 o  The extremely ugly hacks used to generate the boot firmware tables
    have been eradicated and replaced with a generic acpi_describe()
    method (exploiting the ability of iPXE interfaces to pass through
    methods to an underlying interface).  The ACPI tables are now
    built in a shared data block within .bss16, rather than each
    requiring dedicated space in .data16.

 o  The architecture-independent concept of a SAN device has been
    exposed to the iPXE core through the sanboot API, which provides
    calls to hook, unhook, boot, and describe SAN devices.  This
    allows for much more flexible usage patterns (such as hooking an
    empty SAN device and then running an OS installer via TFTP).

Signed-off-by: Michael Brown <mcb30@ipxe.org>
47 files changed:
src/arch/i386/image/eltorito.c [deleted file]
src/arch/i386/include/bits/eltorito.h [deleted file]
src/arch/i386/include/bits/sanboot.h [new file with mode: 0644]
src/arch/i386/include/int13.h
src/arch/i386/include/ipxe/abft.h [deleted file]
src/arch/i386/include/ipxe/bios_sanboot.h [new file with mode: 0644]
src/arch/i386/include/ipxe/sbft.h [deleted file]
src/arch/i386/interface/pcbios/abft.c [deleted file]
src/arch/i386/interface/pcbios/aoeboot.c [deleted file]
src/arch/i386/interface/pcbios/ib_srpboot.c [deleted file]
src/arch/i386/interface/pcbios/int13.c
src/arch/i386/interface/pcbios/iscsiboot.c [deleted file]
src/arch/i386/interface/pcbios/keepsan.c [deleted file]
src/arch/i386/interface/pcbios/sbft.c [deleted file]
src/arch/x86_64/include/bits/sanboot.h [new file with mode: 0644]
src/config/config.c
src/config/config_ethernet.c
src/config/config_infiniband.c
src/config/defaults/efi.h
src/config/defaults/linux.h
src/config/defaults/pcbios.h
src/config/sanboot.h [new file with mode: 0644]
src/core/acpi.c
src/core/blockdev.c [new file with mode: 0644]
src/core/null_sanboot.c [new file with mode: 0644]
src/drivers/block/ata.c
src/drivers/block/ibft.c [moved from src/arch/i386/interface/pcbios/ibft.c with 63% similarity]
src/drivers/block/ramdisk.c [deleted file]
src/drivers/block/scsi.c
src/drivers/block/srp.c
src/include/ipxe/acpi.h
src/include/ipxe/aoe.h
src/include/ipxe/ata.h
src/include/ipxe/blockdev.h
src/include/ipxe/errfile.h
src/include/ipxe/ib_srp.h
src/include/ipxe/ibft.h [moved from src/arch/i386/include/ipxe/ibft.h with 86% similarity]
src/include/ipxe/iscsi.h
src/include/ipxe/null_sanboot.h [new file with mode: 0644]
src/include/ipxe/ramdisk.h [deleted file]
src/include/ipxe/sanboot.h
src/include/ipxe/scsi.h
src/include/ipxe/srp.h
src/net/aoe.c
src/net/infiniband/ib_srp.c
src/net/tcp/iscsi.c
src/usr/autoboot.c