12 years ago[prefix] Add .xrom prefix for a ROM that loads itself by PCI accesses
Joshua Oreman [Sun, 18 Oct 2009 20:12:51 +0000 (16:12 -0400)]
[prefix] Add .xrom prefix for a ROM that loads itself by PCI accesses

The standard option ROM format provides a header indicating the size
of the entire ROM, which the BIOS will reserve space for, load, and
call as necessary. However, this space is strictly limited to 128k for
all ROMs. gPXE ameliorates this somewhat by reserving space for itself
in high memory and relocating the majority of its code there, but on
systems prior to PCI3 enough space must still be present to load the
ROM in the first place. Even on PCI3 systems, the BIOS often limits the
size of ROM it will load to a bit over 64kB.

These space problems can be solved by providing an artificially small
size in the ROM header: just enough to let the prefix code (at the
beginning of the ROM image) be loaded by the BIOS. To the BIOS, the
gPXE ROM will appear to be only a few kilobytes; it can then load
the rest of itself by accessing the ROM directly using the PCI
interface reserved for that task.

There are a few problems with this approach. First, gPXE needs to find
an unmapped region in memory to map the ROM so it can read from it;
this is done using the crude but effective approach of scanning high
memory (over 0xF0000000) for a sufficiently large region of all-ones
(0xFF) reads. (In x86 architecture, all-ones is returned for accesses
to memory regions that no mapped device can satisfy.) This is not
provably valid in all situations, but has worked well in practice.
More importantly, this type of ROM access can only work if the PCI ROM
BAR exists at all. NICs on physical add-in PCI cards generally must
have the BAR in order for the BIOS to be able to load their ROM, but
ISA cards and LAN-on-Motherboard cards will both fail to load gPXE
using this scheme.

Due to these uncertainties, it is recommended that .xrom only be used
when a regular .rom image is infeasible due to crowded option ROM
space. However, when it works it could allow loading gPXE images
as large as a flash chip one could find - 128kB or even higher.

Signed-off-by: Marty Connor <>
12 years ago[config] Make PXE stack a compile-time option
Joshua Oreman [Tue, 6 Oct 2009 23:15:06 +0000 (19:15 -0400)]
[config] Make PXE stack a compile-time option

For extremely tight space requirements and specific applications, it is
sometimes desirable to create gPXE images that cannot provide the PXE API
functionality to client programs. Add a configuration header option,
PXE_STACK, that can be removed to remove this stack. Also add PXE_MENU
to control the PXE boot menu, which most uses of gPXE do not need.

Signed-off-by: Marty Connor <>
12 years ago[pxe] Support cached DHCP packets in .kkpxe images
Joshua Oreman [Tue, 8 Dec 2009 08:48:15 +0000 (03:48 -0500)]
[pxe] Support cached DHCP packets in .kkpxe images

If we don't unload the PXE stack before executing gPXE, automatically
take advantage of the cached DHCPACK that the underlying/parent PXE
stack can provide. If that cached DHCPACK contains option 175.178, or
the user sets the use-cached setting before invoking DHCP, the real
DHCP request will be skipped and the cached DHCPACK will be used for
network configuration. Otherwise, the cached settings block is thrown
away as soon as a fresh one is acquired.

Signed-off-by: Marty Connor <>
12 years ago[dhcp] Add generic facility for using cached network settings
Joshua Oreman [Tue, 8 Dec 2009 08:40:50 +0000 (03:40 -0500)]
[dhcp] Add generic facility for using cached network settings

When a DHCP session is started (using autoboot or a command-line `dhcp
net0'), check whether the new setting use-cached (DHCP option 175.178)
is TRUE; if so, skip DHCP and rely on currently registered
settings. This lets one combine a static IP with autoboot.

Before checking the use-cached setting, call a weak
get_cached_dhcpack() hook that can be implemented by particular builds
of gPXE supporting some fashion of retrieving a cached DHCPACK packet.
If one is available, it is registered as an options source, and then
either that packet's option 175.178 or the user's prior manual
use-cached setting can allow skipping duplicate DHCP.

Using cached packets is not the default because DHCP servers are often
configured to give gPXE different options than they give a vendor PXE
client; in order to break the infinite loop of PXE chaining, one would
need to load a gPXE with an embedded image that does something more
than autoboot.

Signed-off-by: Marty Connor <>
12 years ago[pxe] Separate parent PXE API caller from UNDINET driver
Joshua Oreman [Tue, 8 Dec 2009 08:38:50 +0000 (03:38 -0500)]
[pxe] Separate parent PXE API caller from UNDINET driver

Calling the parent PXE stack (the stack that loaded us, for
undionly.kkpxe) can be useful for more than UNDI calls; for instance,
it lets us get cached DHCP packets to avoid re-DHCP when working with
embedded images.

Signed-off-by: Marty Connor <>
12 years ago[linker] Add safe weak symbol macros
Joshua Oreman [Thu, 26 Nov 2009 02:10:05 +0000 (18:10 -0800)]
[linker] Add safe weak symbol macros

Weak symbols are a useful tool in eliminating unnecessary dependencies
between object files, but they are somewhat dangerous because one must
remember to test the weak symbol against NULL before using it. To
rectify that, add macros for declaring weak functions that will return
a default value inline if the file defining them is not available at
link time.

Signed-off-by: Marty Connor <>
12 years ago[contrib] Add README file to rom-o-matic
Marty Connor [Tue, 19 Jan 2010 02:37:14 +0000 (21:37 -0500)]
[contrib] Add README file to rom-o-matic

Signed-off-by: Marty Connor <>
12 years ago[tftp] Abort requests with error code 0
Stefan Hajnoczi [Mon, 18 Jan 2010 20:53:20 +0000 (20:53 +0000)]
[tftp] Abort requests with error code 0

There is no defined error code for aborting a request but 0 is commonly
used.  This patch switches the abort request error code from

Signed-off-by: Stefan Hajnoczi <>
Signed-off-by: Marty Connor <>
12 years ago[tftp] Make TFTP size requests abort transfer with an error
Thomas Horsten [Thu, 7 Jan 2010 17:02:13 +0000 (17:02 +0000)]
[tftp] Make TFTP size requests abort transfer with an error

pxenv_tftp_get_fsize is an API call that PXE clients can call to
obtain the size of a remote file. It is implemented by starting a TFTP
transfer with pxe_tftp_open, waiting for the response and then
stopping the transfer with pxe_tftp_close(). This leaves the session
hanging on the TFTP server and it will try to resend the packet
repeatedly (verified with tftpd-hpa) until it times out.

This patch adds a method "tftpsize" that will abort the transfer after
the first packet is received from the server. This will terminate the
session on the server and is the same behaviour as Intel's PXE ROM

Together with a qemu patch to handle the ERROR packet (submitted to
qemu's mailing list), this resolves a specific issue where booting
pxegrub with qemu's TFTP server would be slow or hang.

I've tested this against qemu's tftp server and against my normal boot
infrastructure (tftpd-hpa). Booting pxegrub and loading extra files
now produces a trace similar to Intel's PXE client and there are no
spurious retransmits from tftpd any more.

Signed-off-by: Thomas Horsten <>
Signed-off-by: Milan Plzik <>
Signed-off-by: Stefan Hajnoczi <>
Signed-off-by: Marty Connor <>
12 years ago[contrib] Add .hrom format to rom-o-matic
Marty Connor [Sun, 17 Jan 2010 19:11:52 +0000 (14:11 -0500)]
[contrib] Add .hrom format to rom-o-matic

Signed-off-by: Marty Connor <>
12 years ago[contrib] Add rom-o-matic to contrib
Marty Connor [Sun, 17 Jan 2010 03:23:45 +0000 (22:23 -0500)]
[contrib] Add rom-o-matic to contrib

12 years ago[contrib] Move most contrib content to a separate repository
Marty Connor [Sun, 17 Jan 2010 02:47:39 +0000 (21:47 -0500)]
[contrib] Move most contrib content to a separate repository

Most of the content that was previously in this directory has been
moved to a separate git repository:;a=summary

or the Etherboot Project wiki:

12 years ago[sanboot] Prevent leaking a stack reference for "keep-san" AoE
Stefan Hajnoczi [Tue, 5 Jan 2010 08:05:32 +0000 (08:05 +0000)]
[sanboot] Prevent leaking a stack reference for "keep-san" AoE

When the "keep-san" option is used, the function is exited without
unregistering the stack allocated int13h drive.  To prevent a dangling
pointer to the stack, these structs should be heap allocated.

Signed-off-by: Stefan Hajnoczi <>
Signed-off-by: Marty Connor <>
12 years ago[tftp] Remove unnecessary delay when opening a connection
Stefan Hajnoczi [Wed, 13 Jan 2010 17:57:41 +0000 (17:57 +0000)]
[tftp] Remove unnecessary delay when opening a connection

The retry timer is used to retransmit TFTP packets lost on the network,
and to start a new connection.  There is an unnecessary delay while
waiting for name resolution because the timer period is fixed and cannot
be shortened when name resolution completes.  This patch keeps the timer
period at zero while name resolution takes place so that no time is lost
once before sending the first packet.

Reported-by: Thomas Horsten <>
Signed-off-by: Stefan Hajnoczi <>
Signed-off-by: Marty Connor <>
12 years ago[tftp] Allow fetching larger files by wrapping block number
Stefan Hajnoczi [Sun, 10 Jan 2010 19:05:17 +0000 (19:05 +0000)]
[tftp] Allow fetching larger files by wrapping block number

This patch adds TFTP support for files larger than 65535 blocks by
wrapping the 16-bit block number.

Reported-by: Mark Johnson <>
Signed-off-by: Stefan Hajnoczi <>
Signed-off-by: Marty Connor <>
12 years ago[dhcp] Assume PXE options are in DHCPOFFER only if boot menu is included
Joshua Oreman [Tue, 3 Nov 2009 18:37:57 +0000 (13:37 -0500)]
[dhcp] Assume PXE options are in DHCPOFFER only if boot menu is included

IBM's Tivoli Provisioning Manager for OS Deployment, when acting as a
ProxyDHCP server, sends an initial offer with a vendor class of "PXEClient"
and vendor-encapsulated options that have nothing to do with PXE. To
differentiate between this case and the case of a ProxyDHCP server that
sends all PXE options in its initial offer, modify gPXE to check for
the presence of an encapsulated PXE boot menu option (43.9) instead of
simply checking for the existence of any encapsulated options at all.
This is the same check used by the Intel vendor PXE ROM.

Signed-off-by: Marty Connor <>
12 years ago[dhcp] Accept ProxyDHCP replies of type DHCPOFFER
Joshua Oreman [Tue, 3 Nov 2009 18:31:12 +0000 (13:31 -0500)]
[dhcp] Accept ProxyDHCP replies of type DHCPOFFER

The PXE standard provides examples of ProxyDHCP responses being encoded both
as type DHCPOFFER and DHCPACK, but currently we only accept DHCPACKs. Since
there are PXE servers in existence that respond to ProxyDHCPREQUESTs with
DHCPOFFERs, modify gPXE's ProxyDHCP pruning logic to treat both types of
responses equally.

Signed-off-by: Marty Connor <>
12 years ago[skge] Note correct author of akge driver
Thomas Miletich [Thu, 14 Jan 2010 17:23:52 +0000 (12:23 -0500)]
[skge] Note correct author of akge driver

The previous [skge] commit should have been recorded as authored by
Thomas Miletich <>

I mistakenly committed it improperly after fixing a merge issue.

Signed-off-by: Marty Connor <>
12 years ago[skge] Add driver for skge NICs
Marty Connor [Thu, 14 Jan 2010 17:04:50 +0000 (12:04 -0500)]
[skge] Add driver for skge NICs

This code is based on the linux skge driver. It supports Marvell Yukon
and SysKonnect Gigabit chipsets.

The code is based on code Michael Decker <> wrote for
Google Summer of Code 2008.

Support for dual-port cards is untested. The code, however, was left
in. In my opinion it's easier to fix the code if we need to, instead
of having to add support for it from scratch.

Signed-off-by: Marty Connor <>
12 years ago[3c90xutil] Update bromutil.c and cromutil.c.
Thomas Miletich [Fri, 4 Dec 2009 23:00:44 +0000 (00:00 +0100)]
[3c90xutil] Update bromutil.c and cromutil.c.

bromutil.c has been updated with a command to "fix" 3c905B NICs
so that EEPROMs larger than 8K may be used.

cromutil.c has been replaced with an updated version that has been
included in etherboot-5.4 for some time now.

See README for usage.

Signed-off-by: Marty Connor <>
12 years ago[util] Add utility for generating diffs of object sizes
Joshua Oreman [Wed, 30 Dec 2009 01:33:25 +0000 (20:33 -0500)]
[util] Add utility for generating diffs of object sizes

This is useful when comparing size optimizations.

Signed-off-by: Marty Connor <>
12 years ago[makefile] Allow .sizes target to work with funny-named objects
Joshua Oreman [Wed, 30 Dec 2009 01:28:34 +0000 (20:28 -0500)]
[makefile] Allow .sizes target to work with funny-named objects

The bin/xxx.sizes targets examine the list of obj_ symbols in bin/xxx.tmp
to determine which objects to measure the size of. These symbols have been
normalized to C identifiers, so the result is an error message from `size'
when examining a target that includes objects that were originally named
with hyphens.

Fix by turning obj_foo_bar into $(wildcard bin/foo?bar.o) instead of

Signed-off-by: Marty Connor <>
12 years ago[dhcp] Append new DHCP options versus prepend
Shao Miller [Thu, 22 Oct 2009 20:51:43 +0000 (16:51 -0400)]
[dhcp] Append new DHCP options versus prepend

Change the behaviour for adding DHCP options into a DHCP packet so
that we now append options, rather than insert them in front of
whatever options might already be present.

Apparently, the DHCP relay logic on a Nortel 470-48T layer 2 switch
cares about the order of DHCP options.  If we build a DHCP packet
pre-populated with some options, their order will now be preserved,
except for encapsulated options.

Signed-off-by: Marty Connor <>
12 years ago[dhcp] Ensure message type is first DHCP option
Shao Miller [Thu, 22 Oct 2009 21:00:24 +0000 (17:00 -0400)]
[dhcp] Ensure message type is first DHCP option

Apparently, the DHCP relay logic on a Nortel 470-48T layer 2 switch
cares about the order of DHCP options.  Specifically, it requires
that the DHCP message type option be the first option present in the
DHCP packet.  We achieve this by having this option appear first in
our dhcp_request_options_data array, which pre-populates DHCP

Signed-off-by: Marty Connor <>
12 years ago[prefix] Add .hrom prefix for a ROM that loads high under PCI3 without PMM
Joshua Oreman [Tue, 6 Oct 2009 20:12:22 +0000 (16:12 -0400)]
[prefix] Add .hrom prefix for a ROM that loads high under PCI3 without PMM

gPXE currently takes advantage of the feature of PCI3.0 that allows
option ROMs to relocate the bulk of their code to high memory and so
take up only a small amount of space in the option ROM area. Currently,
the relocation can only take place if the BIOS's implementation of PMM
can be made to return blocks aligned to an even megabyte, because of
the A20 gate. AMI BIOSes, in particular, will not return allocations
that gPXE can use.

Ameliorate the situation somewhat by adding a prefix, .hrom, that works
identically to .rom except in the case that PMM allocation fails. Where
.rom would give up and place itself entirely in option ROM space, .hrom
moves to a block (assumed free) at HIGHMEM_LOADPOINT = 4MB. This allows
for the use of larger gPXE ROMs than would otherwise be possible.

Because there is no way to check that the area at HIGHMEM_LOADPOINT is
really free, other devices using that memory during the boot process
will cause failure for gPXE, the other device, or both. In practice
such conflicts will likely not occur, but this prefix should still be
considered EXPERIMENTAL.

Signed-off-by: Marty Connor <>
12 years ago[myri10ge] Native driver for Myricom 10Gb Ethernet NICs
Glenn Brown [Tue, 22 Dec 2009 01:01:39 +0000 (17:01 -0800)]
[myri10ge] Native driver for Myricom 10Gb Ethernet NICs

This driver supports all current Myricom 10 gigabit Ethernet NICs.
It was written from scratch for gPXE by Glenn Brown <>,
referenencing Myricom's Linux and EFI drivers, with permission.

Signed-off-by: Glenn Brown <>
Signed-off-by: Stefan Hajnoczi <>
Signed-off-by: Marty Connor <>
12 years ago[pci] Add PCI_COMMAND_INTX_DISABLE
Glenn Brown [Tue, 22 Dec 2009 00:51:09 +0000 (16:51 -0800)]

Taken from Linux /usr/include/linux/pci.h .

Signed-off-by: Glenn Brown <>
Signed-off-by: Stefan Hajnoczi <>
Signed-off-by: Marty Connor <>
12 years ago[forcedeth] Add support for 10de:054c nforce 630a, MCP 67
Thomas Horsten [Wed, 6 Jan 2010 20:12:11 +0000 (20:12 +0000)]
[forcedeth] Add support for 10de:054c nforce 630a, MCP 67

Tested-by: Boudhayan Gupta <>
Signed-off-by: Thomas Horsten <>
Signed-off-by: Stefan Hajnoczi <>
12 years ago[802.11] Allow connecting to spectrum managed networks
Joshua Oreman [Sun, 29 Nov 2009 19:12:00 +0000 (14:12 -0500)]
[802.11] Allow connecting to spectrum managed networks

Contrary to the IEEE specification, some access points apparently
set the Spectrum Mgmt bit in the capabilities field even when
broadcasting on a 2.4GHz band that does not require spectrum
management. Allow gPXE to attempt to connect to such networks;
if spectrum management is really required, our advertisement
of capabilities not including it will result in an association

Reported-by: Peter Meyer <>
Signed-off-by: Marty Connor <>
12 years ago[config] Enable WPA2 by default
Joshua Oreman [Sun, 29 Nov 2009 19:10:48 +0000 (14:10 -0500)]
[config] Enable WPA2 by default

Wireless gPXE images are already so large that user-friendliness
seems to trump ROM-size friendliness in this case.

Signed-off-by: Marty Connor <>
12 years ago[wpa] Add CCMP backend (new AES-based cryptosystem)
Joshua Oreman [Sat, 8 Aug 2009 06:07:11 +0000 (23:07 -0700)]
[wpa] Add CCMP backend (new AES-based cryptosystem)

Signed-off-by: Marty Connor <>
12 years ago[wpa] Add TKIP backend (legacy RC4-based cryptosystem)
Joshua Oreman [Sat, 8 Aug 2009 06:06:22 +0000 (23:06 -0700)]
[wpa] Add TKIP backend (legacy RC4-based cryptosystem)

Signed-off-by: Marty Connor <>
12 years ago[wpa] Add pre-shared key frontend (WPA "Personal" with just a passphrase)
Joshua Oreman [Sat, 8 Aug 2009 06:05:00 +0000 (23:05 -0700)]
[wpa] Add pre-shared key frontend (WPA "Personal" with just a passphrase)

Modified-by: Marty Connor <>
Signed-off-by: Marty Connor <>
12 years ago[wpa] Add general support for WPA-protected 802.11 networks
Joshua Oreman [Sat, 8 Aug 2009 06:03:40 +0000 (23:03 -0700)]
[wpa] Add general support for WPA-protected 802.11 networks

Modified-by: Marty Connor <>
Signed-off-by: Marty Connor <>
12 years ago[eapol] Add basic support for 802.1X EAP over LANs
Joshua Oreman [Sat, 8 Aug 2009 05:31:25 +0000 (22:31 -0700)]
[eapol] Add basic support for 802.1X EAP over LANs

EAPOL is a container protocol that can wrap either EAP packets or
802.11 EAPOL-Key frames. For cleanliness' sake, add a stub that strips
the framing and sends packets off to the appropriate handler if it
is compiled in.

Signed-off-by: Marty Connor <>
12 years ago[802.11] Add support for WEP-protected networks
Joshua Oreman [Wed, 24 Jun 2009 07:37:52 +0000 (00:37 -0700)]
[802.11] Add support for WEP-protected networks

WEP is a highly flawed cryptosystem, barely better than no encryption at all,
but many people still use it. It does have the advantage of being very simple
and small in code size.

Signed-off-by: Marty Connor <>
12 years ago[iwmgmt] Add wireless management commands and text for common errors
Joshua Oreman [Sat, 8 Aug 2009 03:17:50 +0000 (20:17 -0700)]
[iwmgmt] Add wireless management commands and text for common errors

Add commands `iwstat' (to list 802.11-specific status information for
802.11 devices) and `iwlist' (to scan for available networks and print
a list along with security information).

Signed-off-by: Marty Connor <>
12 years ago[802.11] Add core support for detecting and using encrypted networks
Joshua Oreman [Sat, 8 Aug 2009 05:03:30 +0000 (22:03 -0700)]
[802.11] Add core support for detecting and using encrypted networks

Signed-off-by: Marty Connor <>
12 years ago[crypto] Add a placeholder for a proper random number generator
Joshua Oreman [Tue, 30 Jun 2009 05:54:16 +0000 (22:54 -0700)]
[crypto] Add a placeholder for a proper random number generator

Currently it just calls random().

Signed-off-by: Marty Connor <>
12 years ago[crypto] Add AES key-wrap mode (RFC 3394)
Joshua Oreman [Fri, 3 Jul 2009 23:07:08 +0000 (16:07 -0700)]
[crypto] Add AES key-wrap mode (RFC 3394)

The unwrapping half is used by WPA2 code; the wrapping half is currently

Signed-off-by: Marty Connor <>
12 years ago[crypto] Make AES context size and algorithm structure externally available
Joshua Oreman [Fri, 3 Jul 2009 23:06:05 +0000 (16:06 -0700)]
[crypto] Make AES context size and algorithm structure externally available

This is required to support modes of AES beyond cipher-block chaining.

Signed-off-by: Marty Connor <>
12 years ago[crypto] Add parentheses around len argument in blocksize assert
Joshua Oreman [Wed, 1 Jul 2009 04:55:10 +0000 (21:55 -0700)]
[crypto] Add parentheses around len argument in blocksize assert

This fixes an issue where passing a length as a compound expression
(e.g. using `hdrlen + datalen') would trigger compiler warnings and
potentially precedence-related errors.

Signed-off-by: Marty Connor <>
12 years ago[digest] Add HMAC-SHA1 based pseudorandom function and PBKDF2
Joshua Oreman [Fri, 26 Jun 2009 07:03:12 +0000 (00:03 -0700)]
[digest] Add HMAC-SHA1 based pseudorandom function and PBKDF2

Both of these routines are used by 802.11 WPA, but they are generic
and could be needed by other protocols as well.

Signed-off-by: Marty Connor <>
12 years ago[cipher] Add the ARC4 stream cipher
Joshua Oreman [Wed, 24 Jun 2009 07:33:50 +0000 (00:33 -0700)]
[cipher] Add the ARC4 stream cipher

Signed-off-by: Marty Connor <>
12 years ago[digest] Add generic CRC32 function
Joshua Oreman [Wed, 24 Jun 2009 07:33:13 +0000 (00:33 -0700)]
[digest] Add generic CRC32 function

Signed-off-by: Marty Connor <>
12 years ago[e1000] Remove deprecated IRQ_FORCE action from e1000_irq()
Thomas Miletich [Mon, 30 Nov 2009 10:02:38 +0000 (11:02 +0100)]
[e1000] Remove deprecated IRQ_FORCE action from e1000_irq()

The gPXE driver API does not have a "force interrupt" function.
Remove legacy code.

Signed-off-by: Marty Connor <>
12 years ago[build] Pad .hd image type to 32 KB
Stefan Hajnoczi [Tue, 15 Dec 2009 07:42:31 +0000 (07:42 +0000)]
[build] Pad .hd image type to 32 KB

The disk partition prefix code in hdprefix.S reads the gPXE image in
tracks, not individual sectors.  This means it will attempt to read
beyond the end of the image if the .hd image type is not padded to 32

This issue is affects virtualization software which may execute a .hd or
.usb image file directly - effectively running a machine with a tiny
disk containing just the gPXE image.  Boot will fail when gPXE tries to
read beyond the end of disk.

12 years ago[multiboot] Build memory map after shutting down and unhiding gPXE
Stefan Hajnoczi [Thu, 13 Aug 2009 20:48:10 +0000 (21:48 +0100)]
[multiboot] Build memory map after shutting down and unhiding gPXE

The Multiboot memory map needs to be built after unhiding gPXE and
downloaded images from memory.  Solaris faults during boot when trying
to access the ramdisk, which is hidden from the memory map while gPXE is
executing.  This issue is fixed by using the memory map from after gPXE
unhides itself.

Reported-by: Moinak Ghosh <>
Signed-off-by: Stefan Hajnoczi <>
12 years ago[settings] Add Bus ID setting
Shao Miller [Mon, 9 Nov 2009 13:57:23 +0000 (08:57 -0500)]
[settings] Add Bus ID setting

Users can find the bus type and PCI IDs for a network interface with:


Signed-off-by: Stefan Hajnoczi <>
12 years ago[eepro100] Add missing FILE_LICENCE() to eepro100.h
Thomas Miletich [Thu, 10 Dec 2009 16:51:32 +0000 (17:51 +0100)]
[eepro100] Add missing FILE_LICENCE() to eepro100.h

Signed-off-by: Stefan Hajnoczi <>
12 years ago[e1000] Enable interrupts in a more UNDI compatible way
Thomas Miletich [Wed, 25 Nov 2009 17:02:59 +0000 (18:02 +0100)]
[e1000] Enable interrupts in a more UNDI compatible way

Signed-off-by: Marty Connor <>
12 years ago[eepro100] Convert to native gPXE API
Thomas Miletich [Tue, 6 Oct 2009 21:57:49 +0000 (23:57 +0200)]
[eepro100] Convert to native gPXE API

This version is Based on Michael Decker's GSoC 2008 code.
A number cleanups and fixes were applied.

Earlier-version-reviewed-by: Marty Connor <>
Earlier-version-tested-by: Marty Connor <>
Earlier-version-tested-by: Shao Miller <>
Reviewed-by: Stefan Hajnoczi <>
Reviewed-by: Joshua Oreman <>
Signed-off-by: Marty Connor <>
12 years ago[e1000] Use the alternate MAC in NVRAM when available
Alex Williamson [Thu, 19 Nov 2009 15:46:30 +0000 (08:46 -0700)]
[e1000] Use the alternate MAC in NVRAM when available

The 82571 supports an alternate MAC address location in NVRAM.
When this is set, use this for the MAC rather than the default
physical MAC address.

Ported from linux-2.6.git 93ca161027eb6a1761fb674ad7b995aedccf5f6e

Signed-off-by: Alex Williamson <>
Tested-by: Thomas Miletich <>
Signed-off-by: Marty Connor <>
12 years ago[e1000] Implement zero-copy receive
Thomas Miletich [Sun, 8 Nov 2009 16:25:39 +0000 (17:25 +0100)]
[e1000] Implement zero-copy receive

Co-Authored by: Marty Connor <>
Signed-off-by: Marty Connor <>
12 years ago[e820mangler] Add missing CLC ins. for success path
Shao Miller [Tue, 17 Nov 2009 23:28:10 +0000 (18:28 -0500)]
[e820mangler] Add missing CLC ins. for success path

The get_underlying_e820 function should return with CF unset on success.

Reported-by: Timothy Stack <>
Signed-off-by: Marty Connor <>
12 years ago[uri] Fix outdated comment in parse_uri()
sobtwmxt [Thu, 19 Nov 2009 11:25:05 +0000 (11:25 +0000)]
[uri] Fix outdated comment in parse_uri()

Signed-off-by: Marty Connor <>
12 years ago[linker] Add mechanism for subsystem-dependent configuration options
Joshua Oreman [Fri, 7 Aug 2009 01:52:06 +0000 (18:52 -0700)]
[linker] Add mechanism for subsystem-dependent configuration options

It is often the case that some module of gPXE is only relevant if the
subsystem it depends on is already being included. For instance,
commands to manage wireless interfaces are quite useless if no
compiled-in driver has pulled in the wireless networking stack. There
may be a user-modifiable configuration options for these dependent
modules, but even if enabled, they should not be included when they
would be useless.

Solve this by allowing the creation of config_subsystem.c, for
configuration directives like those in the global config.c that should
only be considered when subsystem.c is included in the final gPXE

For consistency, move core/config.c to the config/ directory, where
the other config_subsystem.c files will eventually reside.

Signed-off-by: Marty Connor <>
12 years ago[linker] Expand and correct symbol requirement macros
Joshua Oreman [Sun, 2 Aug 2009 21:01:36 +0000 (14:01 -0700)]
[linker] Expand and correct symbol requirement macros

REQUIRE_SYMBOL() formerly used a formulation of symbol requirement
that would allow a link to succeed despite lacking a required symbol,
because it did not introduce any relocations. Fix by renaming it to
REQUEST_SYMBOL() (since the soft-requirement behavior can be useful)
and add a REQUIRE_SYMBOL() that truly requires.

behavior that allows one to make use of the symbol, by combining a
weak external on the symbol itself with a REQUEST_SYMBOL() of a second

Signed-off-by: Marty Connor <>
12 years ago[pxebs] Consistently interpret PXE type field as little-endian
Joshua Oreman [Fri, 20 Nov 2009 03:20:17 +0000 (22:20 -0500)]
[pxebs] Consistently interpret PXE type field as little-endian

The PXE menu code also treated the type as big-endian, which went
unnoticed until the first fix because its ntohs() was matched by a
htons() in the PXE boot server discovery code.

Signed-off-by: Marty Connor <>
12 years ago[int13] Guard against BIOSes that "fix" the drive count
Michael Brown [Wed, 18 Nov 2009 02:37:15 +0000 (02:37 +0000)]
[int13] Guard against BIOSes that "fix" the drive count

Some BIOSes (observed with an AMI BIOS on a SunFire X2200) seem to
reset the BIOS drive counter at 40:75 after a failed boot attempt.
This causes problems when attempting a Windows direct-to-iSCSI
installation: bootmgr.exe calls INT 13,0800 and gets told that there
are no hard disks, so never bothers to read the MBR in order to obtain
the boot disk signature.  The Windows iSCSI initiator will detect the
iBFT and connect to the target, and everything will appear to work
except for the error message "This computer's hardware may not support
booting to this disk.  Ensure that the disk's controller is enabled in
the computer's BIOS menu."

Fix by checking the BIOS drive counter on every INT 13 call, and
updating it whenever necessary.

12 years ago[int13] Fix number of sectors returned by INT 13,15
Michael Brown [Wed, 18 Nov 2009 00:50:45 +0000 (00:50 +0000)]
[int13] Fix number of sectors returned by INT 13,15

INT 13,15 should return the number of sectors, not the number of

12 years ago[autoboot] Ensure that an error message is always printed for a boot failure
Michael Brown [Tue, 17 Nov 2009 03:46:45 +0000 (03:46 +0000)]
[autoboot] Ensure that an error message is always printed for a boot failure

The case of an unsupported SAN protocol will currently not result in
any error message.  Fix by printing the error message at the top level
using strerror(), rather than using hard-coded error messages in the
error paths.

12 years ago[linda] Re-import the latest register definitions
Michael Brown [Wed, 11 Nov 2009 00:48:14 +0000 (00:48 +0000)]
[linda] Re-import the latest register definitions

Two registers have been renamed, and a bugfix to
removes a harmless excess padding field.

12 years ago[susieq] Update to handle SusieQ definitions
Michael Brown [Wed, 11 Nov 2009 00:45:52 +0000 (00:45 +0000)]
[susieq] Update to handle SusieQ definitions

The latest RTL-generated register lists include (mostly redundant)
xxx_MSB values alongside xxx_LSB and xxx_RMASK, and also include
default register values.

12 years ago[linda] Wait up to 20us for link state to update
Michael Brown [Mon, 16 Nov 2009 21:21:12 +0000 (21:21 +0000)]
[linda] Wait up to 20us for link state to update

Some subnet managers expect the GetResponse from a SetPortInfo MAD to
contain the new link state.  The transition is not immediate, so we
often end up returning the previous link state.  This can cause the SM
to fail to activate the port.

Fix by waiting for up to 20us for the link state transition to take

12 years ago[ipoib] Mask out non-QPN bits in the IPoIB destination MAC when sending
Michael Brown [Fri, 13 Nov 2009 22:34:47 +0000 (22:34 +0000)]
[ipoib] Mask out non-QPN bits in the IPoIB destination MAC when sending

The first byte of the IPoIB MAC address is used for flags indicating
support for "connected mode".  Strip out the non-QPN bits of the first
dword when constructing the address vector for transmitted IPoIB
packets, so as not to end up passing an invalid QPN in the BTH.

12 years ago[ipoib] Always set the "full membership" bit in the IPv4 broadcast GID
Michael Brown [Fri, 13 Nov 2009 19:10:13 +0000 (19:10 +0000)]
[ipoib] Always set the "full membership" bit in the IPv4 broadcast GID

The SM always creates the IPoIB multicast groups with full membership
partition keys.

12 years ago[infiniband] Rename IB_PKEY_NONE to IB_PKEY_DEFAULT
Michael Brown [Fri, 13 Nov 2009 19:02:04 +0000 (19:02 +0000)]
[infiniband] Rename IB_PKEY_NONE to IB_PKEY_DEFAULT

There is no such thing as a non-existent partition.

12 years ago[infiniband] Report IB link status as IPoIB netdevice status
Michael Brown [Sat, 14 Nov 2009 03:40:29 +0000 (03:40 +0000)]
[infiniband] Report IB link status as IPoIB netdevice status

12 years ago[infiniband] Include hostname in node description, if available
Michael Brown [Mon, 16 Nov 2009 20:34:54 +0000 (20:34 +0000)]
[infiniband] Include hostname in node description, if available

12 years ago[infiniband] Make node description invariant across all ports
Michael Brown [Mon, 16 Nov 2009 20:18:03 +0000 (20:18 +0000)]
[infiniband] Make node description invariant across all ports

IBA section states that "the contents of the NodeDescription
attribute are the same for all ports on a node".  Satisfy this by
using the HCA GUID rather than the port GUID to form the node
description string.

12 years ago[ipv4] Ignore non-open net devices when performing routing
Michael Brown [Sat, 14 Nov 2009 03:02:16 +0000 (03:02 +0000)]
[ipv4] Ignore non-open net devices when performing routing

We do not discard routing table entries when closing an interface.  It
is plausible that multiple interfaces may be on the same physical
network; if so, then we may end up in a situation whereby outbound
packets attempt to route via a closed interface.

Fix by ignoring non-open net devices in ipv4_route().

12 years ago[ipv4] Allow calculation of default subnet mask
Michael Brown [Sat, 14 Nov 2009 02:28:16 +0000 (02:28 +0000)]
[ipv4] Allow calculation of default subnet mask

ipv4.c calculates the default subnet mask before calling
fetch_ipv4_setting() to retrieve the configured subnet mask (if any).

However, as of commit 612f4e7 "[settings] Avoid returning
uninitialised data on error in fetch_xxx_setting()",
fetch_ipv4_setting() will zero the IP address if the setting does not
exist, rather than leaving it unaltered.

Fix by fetching the setting first and calculating the default subnet
mask only if necessary.

12 years ago[ipv4] Use a zero address to indicate "no gateway", rather than INADDR_NONE
Michael Brown [Sat, 14 Nov 2009 02:21:13 +0000 (02:21 +0000)]
[ipv4] Use a zero address to indicate "no gateway", rather than INADDR_NONE

ipv4.c uses a gateway address of INADDR_NONE to represent "no
gateway".  It initialises the gateway address to INADDR_NONE before
calling fetch_ipv4_setting() to retrieve the configured gateway
address (if any).

However, as of commit 612f4e7 "[settings] Avoid returning
uninitialised data on error in fetch_xxx_setting()",
fetch_ipv4_setting() will zero the IP address if the setting does not
exist, rather than leaving it unaltered.

Fix by using a zero IP address to indicate "no gateway", so that a
non-existent gateway address setting will be treated as such.

12 years ago[libc] Use only generic errortab entries to match generic errors
Michael Brown [Sat, 14 Nov 2009 21:08:39 +0000 (21:08 +0000)]
[libc] Use only generic errortab entries to match generic errors

12 years ago[sanboot] Extend the "keep-san" option to non-iSCSI SAN protocols
Michael Brown [Wed, 4 Nov 2009 01:18:08 +0000 (01:18 +0000)]
[sanboot] Extend the "keep-san" option to non-iSCSI SAN protocols

This disgustingly ugly hack just keeps getting worse.

12 years ago[pxebs] Correct endianness of PXE type
Joshua Oreman [Sun, 18 Oct 2009 22:59:19 +0000 (18:59 -0400)]
[pxebs] Correct endianness of PXE type

The PXE type field is canonically little-endian, but the pxebs command
treats it as big-endian in converting the type number passed on the
command line to a field value to search against. Fix, to prevent the
necessity of incantations like "pxebs net0 1536" to select menu item #6.

Signed-off-by: Michael Brown <>
Modified-by: Michael Brown <>
12 years ago[atl1e] Fix compilation on gcc-4.4.1-2.fc11.i586.
Joshua Oreman [Fri, 23 Oct 2009 15:04:38 +0000 (17:04 +0200)]
[atl1e] Fix compilation on gcc-4.4.1-2.fc11.i586.

Error message was:

[BUILD] bin/atl1e.oncc1: warnings being treated as errors
drivers/net/atl1e.c: In function 'atl1e_get_permanent_address':
drivers/net/atl1e.c:1326: error: dereferencing type-punned pointer will break strict-aliasing rules
make: *** [bin/atl1e.o] Error 1

Reported-by: Giandomenico De Tullio <>
Signed-off-by: Michael Brown <>
Modified-by: Michael Brown <>
12 years ago[sis190] Hide the ISA bridge's PCI IDs from
Thomas Miletich [Fri, 23 Oct 2009 15:00:25 +0000 (17:00 +0200)]
[sis190] Hide the ISA bridge's PCI IDs from

Signed-off-by: Michael Brown <>
Modified-by: Michael Brown <>
12 years ago[sis190] Insert forgotten FILE_LICENCE() to sis190.h
Thomas Miletich [Sat, 24 Oct 2009 08:57:58 +0000 (10:57 +0200)]
[sis190] Insert forgotten FILE_LICENCE() to sis190.h

Signed-off-by: Michael Brown <>
Modified-by: Michael Brown <>
12 years ago[sis190] Make 'make allroms' happy.
Thomas Miletich [Fri, 23 Oct 2009 14:54:59 +0000 (16:54 +0200)]
[sis190] Make 'make allroms' happy.

Remove spaces in 3rd PCI_ROM field.

Debugged-by: Marty Connor <>
Reported-by: Giandomenico De Tullio <>
Signed-off-by: Michael Brown <>
12 years ago[iscsi] Use the "Ethernet-compatible" MAC address in the iBFT
Michael Brown [Fri, 23 Oct 2009 21:18:04 +0000 (22:18 +0100)]
[iscsi] Use the "Ethernet-compatible" MAC address in the iBFT

12 years ago[netdevice] Add the concept of an "Ethernet-compatible" MAC address
Michael Brown [Fri, 23 Oct 2009 21:14:05 +0000 (22:14 +0100)]
[netdevice] Add the concept of an "Ethernet-compatible" MAC address

The iBFT is Ethernet-centric in providing only six bytes for a MAC
address.  This is most probably an indirect consequence of a similar
design flaw in the Windows NDIS stack.  (The WinOF IPoIB stack
performs all sorts of contortions in order to pretend to the NDIS
layer that it is dealing with six-byte MAC addresses.)

There is no sensible way in which to extend the iBFT without breaking
compatibility with programs that expect to parse it.  Add the notion
of an "Ethernet-compatible" MAC address to our link layer abstraction,
so that link layers can provide their own workarounds for this

12 years ago[iscsi] Fix printing of non-existent strings in iBFT debug messages
Michael Brown [Fri, 23 Oct 2009 20:33:48 +0000 (21:33 +0100)]
[iscsi] Fix printing of non-existent strings in iBFT debug messages

12 years ago[release] Update version to 0.9.9+ post release
Marty Connor [Wed, 21 Oct 2009 19:09:11 +0000 (15:09 -0400)]
[release] Update version to 0.9.9+ post release

12 years ago[release] Update version to 0.9.9 for release
Marty Connor [Wed, 21 Oct 2009 19:05:47 +0000 (15:05 -0400)]
[release] Update version to 0.9.9 for release

12 years ago[zbin] Fix 64-bit compilation warnings for util/zbin.c
Joshua Oreman [Sun, 18 Oct 2009 20:32:59 +0000 (16:32 -0400)]
[zbin] Fix 64-bit compilation warnings for util/zbin.c

Recent gcc versions generate more warnings when compiling util/zbin.c
on a 64-bit system:

util/zbin.c: In function `read_file':
util/zbin.c:85: warning: format `%d' expects type `int', but
                argument 3 has type `size_t'
util/zbin.c:91: warning: format `%d' expects type `int', but
                argument 3 has type `size_t'
util/zbin.c: In function `read_zinfo_file':
util/zbin.c:119: warning: format `%d' expects type `int', but
                 argument 4 has type `size_t'
util/zbin.c: In function `alloc_output_file':
util/zbin.c:134: warning: format `%d' expects type `int', but
                 argument 3 has type `size_t'
util/zbin.c: In function `process_zinfo_add':
util/zbin.c:244: warning: format `%d' expects type `int', but
                 argument 3 has type `size_t'
util/zbin.c:266: warning: format `%d' expects type `int', but
                 argument 7 has type `size_t'
util/zbin.c:286: warning: format `%#x' expects type `unsigned int',
                 but argument 7 has type `size_t'
util/zbin.c: In function `write_output_file':
util/zbin.c:348: warning: format `%d' expects type `int', but
                 argument 3 has type `size_t'

This patch eliminates these warnings.

Signed-off-by: Marty Connor <>
12 years ago[util] Change gensdsk file permissions to include execute
Marty Connor [Tue, 20 Oct 2009 14:07:50 +0000 (10:07 -0400)]
[util] Change gensdsk file permissions to include execute

src/util/gensdsk is a shell script and should have execute permission.

Reported-by: sobtwmxt
12 years ago[sis190] Fix for gcc-3.3.3 compilation
Shao Miller [Sun, 18 Oct 2009 01:53:36 +0000 (21:53 -0400)]
[sis190] Fix for gcc-3.3.3 compilation

gcc 3.3.3 gave the following error when compiling sis190.c

drivers/net/sis190.c: In function 'sis190_get_mac_addr_from_apc':
drivers/net/sis190.c:966: warning: 'isa_bridge' might be used
uninitialized in this function
make: *** [bin/sis190.o] Error 1

This patch allows error-free compilation.

Signed-off-by: Marty Connor <>
12 years ago[zbin] Fix compilation warnings for util/zbin.c
Thomas Miletich [Sat, 17 Oct 2009 14:52:30 +0000 (16:52 +0200)]
[zbin] Fix compilation warnings for util/zbin.c

Recent gcc versions generate warnings when compiling util/zbin.c
( tested with gcc-4.3.3 ):

util/zbin.c: In function ‘process_zinfo_pack’:
util/zbin.c:200: warning: format ‘%#zx’ expects type ‘size_t’, but argument 6
has type ‘long unsigned int’
util/zbin.c: In function ‘process_zinfo_add’:
util/zbin.c:257: warning: format ‘%#lx’ expects type ‘long unsigned int’, but
argument 4 has type ‘int’
util/zbin.c:266: warning: format ‘%#lx’ expects type ‘long unsigned int’, but
argument 4 has type ‘int’
util/zbin.c:266: warning: format ‘%d’ expects type ‘int’, but argument 8 has
type ‘long unsigned int’
util/zbin.c:286: warning: format ‘%#lx’ expects type ‘long unsigned int’, but
argument 6 has type ‘int’
util/zbin.c:286: warning: format ‘%#lx’ expects type ‘long unsigned int’, but
argument 7 has type ‘size_t’

This patch eliminates these warnings.

Tested with gcc-4.3.3 on Ubuntu 9.04 and gcc-4.1.2 on Debian Etch.

Signed-off-by: Marty Connor <>
12 years ago[ath5k] Save proper cacheline size when fixing PCI configuration
Joshua Oreman [Fri, 16 Oct 2009 23:27:43 +0000 (19:27 -0400)]
[ath5k] Save proper cacheline size when fixing PCI configuration

Some BIOSes set the PCI cacheline size to zero for the card; the ath5k
driver fixes it to a reasonable in PCI config space, but failed to
correct the internal value it had already read. This resulted in
divide-by-zero errors when cacheline-aligning various data structures.

Fix by setting the internal cachelsz to a sane value at the same time
as we write that value to PCI config space.

Signed-off-by: Marty Connor <>
12 years ago[ath5k] Update for changes in kernel 2.6.31
Joshua Oreman [Sat, 12 Sep 2009 16:01:47 +0000 (09:01 -0700)]
[ath5k] Update for changes in kernel 2.6.31

This adds basic rfkill support for enabling the wireless card on certain
laptops, and changes miscellaneous other details that may help in obscure

Also change the error handling to not report CRC errors, which due to the
basic facts of wireless may happen even more frequently than valid packets.

Signed-off-by: Marty Connor <>
12 years ago[infiniband] Send CM requests to target node's GSI rather than SM's GSI
Michael Brown [Fri, 16 Oct 2009 17:20:55 +0000 (18:20 +0100)]
[infiniband] Send CM requests to target node's GSI rather than SM's GSI

12 years ago[sis190] Add sis190/191 ethernet driver
Thomas Miletich [Fri, 16 Oct 2009 18:56:34 +0000 (14:56 -0400)]
[sis190] Add sis190/191 ethernet driver

Tested-by: Paul Hackett <>
Signed-off-by: Marty Connor <>
12 years ago[e1000] Add 82576 support
Simon Horman [Thu, 8 Oct 2009 23:01:09 +0000 (10:01 +1100)]
[e1000] Add 82576 support

Add the 82576 to the e1000 driver.

- Examining the Linux 2.6.30-rc4 igb driver, which supports this card and;
- Information available in the Intel® 82576 Gigabit Ethernet
  Controller Datasheet v2.1, which is available from Intel's web site.

I only have a dual-ported card with Copper PHY, so any code paths relating
to Fibre haven't been tested. Also, I have only tested using auto-negotiation
of speed and duplex, and no flow control.  Other code paths relating to
those settings also have not been exercised.

Signed-off-by: Simon Horman <>
Sponsored-by: Thomas Miletich <>
Modified-by: Thomas Miletich <>
Modified-by: Marty Connor <>
Signed-off-by: Marty Connor <>
12 years ago[atl1e] Add Attansic L1E gigabit Ethernet driver
Joshua Oreman [Mon, 5 Oct 2009 15:27:10 +0000 (11:27 -0400)]
[atl1e] Add Attansic L1E gigabit Ethernet driver

Signed-off-by: Marty Connor <>
12 years ago[sis900] Enable interrupts to allow UNDI to work
Thomas Miletich [Tue, 8 Sep 2009 17:35:55 +0000 (19:35 +0200)]
[sis900] Enable interrupts to allow UNDI to work

Enable interrupts in sis900_irq(). Doing so allows some programs using
gPXE's UNDI interface to work properly, including Symantec Ghost.

Tested-by: Hubert Mercier <>
Signed-off-by: Marty Connor <>
12 years ago[util] Make mtools check detect new versions
Stefan Hajnoczi [Wed, 14 Oct 2009 07:11:04 +0000 (08:11 +0100)]
[util] Make mtools check detect new versions

The mtools version check does not handle GNU mtools 4.0.10.  This commit
makes the pattern more general so it matches older mtools as well as the
newer "mtools (GNU mtools) 4.0.10" string.

Signed-off-by: Stefan Hajnoczi <>
Signed-off-by: Marty Connor <>
12 years ago[modrom] Avoid clobbering near jump with checksum
Joshua Oreman [Wed, 7 Oct 2009 20:40:49 +0000 (16:40 -0400)]
[modrom] Avoid clobbering near jump with checksum

A jump instruction starts at the third byte of an option ROM image, and
it is required that the bytes in the whole image add up to zero. To
achieve this, a checksum byte is usually placed after the jump. The jump
can be either a short jump (2 bytes, EB xx) or a near jump (3 bytes,
E9 xx xx). gPXE's romprefix.S uses a near jump, but assumed
a short jump, and clobbered the high byte of the offset. This caused
modrom-modified gPXE ROM images to crash the system during POST.

Fix by making place the checksum at byte 6, like does.

Signed-off-by: Marty Connor <>
12 years ago[build] Fix DEBUG builds for filenames with hyphens
Joshua Oreman [Thu, 15 Oct 2009 18:07:20 +0000 (14:07 -0400)]
[build] Fix DEBUG builds for filenames with hyphens

Debug builds for filenames with hyphens such as:

     $ make bin/via-rhine.dsk DEBUG=via-rhine

fail with:

     [BUILD] bin/via-rhine.dbg1.o
     <command-line>: error: missing whitespace after the macro name
     make: *** [bin/via-rhine.dbg1.o] Error 1

This is because "-" is not a legal character in C identifiers, and
gcc rejects "-Ddebug_via-rhine=1" as an argument.

Signed-off-by: Daniel Verkamp <>
Signed-off-by: Joshua Oreman <>
Signed-off-by: Marty Connor <>