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 <>
13 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 <>
13 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 <>
13 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 <>
13 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 <>
13 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 <>
13 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 <>
13 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 <>
13 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 <>
13 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 <>
13 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.

13 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

13 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.

13 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.

13 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.

13 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

13 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.

13 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.

13 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.

13 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

13 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

13 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.

13 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().

13 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.

13 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.

13 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

13 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.

13 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 <>
13 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 <>
13 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 <>
13 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 <>
13 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 <>
13 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

13 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

13 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

13 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

13 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

13 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 <>
13 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
13 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 <>
13 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 <>
13 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 <>
13 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 <>
13 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

13 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 <>
13 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 <>
13 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 <>
13 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 <>
13 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 <>
13 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 <>
13 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 <>
13 years ago[3c90x] Fix a3c90x_close() and a3c90x_remove() methods.
Thomas Miletich [Sat, 5 Sep 2009 09:23:55 +0000 (11:23 +0200)]
[3c90x] Fix a3c90x_close() and a3c90x_remove() methods.

Both methods disabled packet tx and rx just to have it enabled again
by calling a3c90x_reset().
Fixed by disabling tx and rx after the call to a3c90x_reset().

Tested by booting Ubuntu intrepid(8.10) directly from gPXE and pxelinux.
Tested on 3c905, 3c905B, 3c905C.

Signed-off-by: Marty Connor <>
13 years ago[release] Update version to 0.9.8+ post release
Marty Connor [Wed, 14 Oct 2009 18:24:49 +0000 (14:24 -0400)]
[release] Update version to 0.9.8+ post release

13 years ago[release] Update version to 0.9.8 for release
Marty Connor [Wed, 14 Oct 2009 16:12:40 +0000 (12:12 -0400)]
[release] Update version to 0.9.8 for release

13 years ago[hermon] Reset device during probe()
Michael Brown [Wed, 14 Oct 2009 01:09:49 +0000 (02:09 +0100)]
[hermon] Reset device during probe()

Some systems will retry their boot sequence in the event of a boot
failure.  On these systems, the second and subsequent boot attempts
will fail to initialise the Hermon HCA.

Fix by resetting the HCA during probe().  This incurs a one-second
cost, but there seems to be no viable alternative.

Originally-fixed-by: Itay Gazit <>
13 years ago[pci] Add generic configuration space backup/restore facility
Michael Brown [Wed, 14 Oct 2009 01:06:01 +0000 (02:06 +0100)]
[pci] Add generic configuration space backup/restore facility

Some devices can only be reset via a mechanism that also resets the
card's PCI core, thus necessitating a backup and restore of all or
part of the PCI configuration space across a reset.

13 years ago[job] Report progress of downloader jobs via job_progress()
Michael Brown [Mon, 31 Aug 2009 18:33:55 +0000 (19:33 +0100)]
[job] Report progress of downloader jobs via job_progress()

13 years ago[job] Add missing job_progress() interface method
Michael Brown [Mon, 31 Aug 2009 18:33:05 +0000 (19:33 +0100)]
[job] Add missing job_progress() interface method

13 years ago[ath5k] Remove spurious debugging check
Joshua Oreman [Mon, 17 Aug 2009 22:02:23 +0000 (15:02 -0700)]
[ath5k] Remove spurious debugging check

Signed-off-by: Marty Connor <>
13 years ago[802.11] Support multicast hashing
Michael Brown [Tue, 11 Aug 2009 23:40:26 +0000 (00:40 +0100)]
[802.11] Support multicast hashing

802.11 multicast hashing is the same as standard Ethernet hashing, so
just expose and use eth_mc_hash().

Signed-off-by: Joshua Oreman <>
13 years ago[802.11] Properly initialize autoassociation process
Joshua Oreman [Tue, 11 Aug 2009 05:31:51 +0000 (22:31 -0700)]
[802.11] Properly initialize autoassociation process

The recent change to process_add() to detect duplicate process
additions relies on the fact that all processes will be initialized
using process_init_stopped() before being passed to that function.
The autoassociation process was not initialized in this fashion, so
process_add() erroneously detected it as a duplicate.

Fix by using process_init_stopped() to initialize the autoassociation
process instead of setting the step member directly.

Signed-off-by: Michael Brown <>
13 years ago[dhcp] Fall back to using the hardware address to populate the chaddr field
Michael Brown [Tue, 11 Aug 2009 22:44:04 +0000 (23:44 +0100)]
[dhcp] Fall back to using the hardware address to populate the chaddr field

For IPoIB, the chaddr field is too small (16 bytes) to contain the
20-byte IPoIB link-layer address.  RFC4390 mandates that we should
pass an empty chaddr field and rely on the DHCP client identifier
instead.  This has many problems, not least of which is that a client
identifier containing an IPoIB link-layer address is not very useful
from the point of view of creating DHCP reservations, since the QPN
component is assigned at runtime and may vary between boots.

Leave the DHCP client identifier as-is, to avoid breaking existing
setups as far as possible, but expose the real hardware address (the
port GUID) via the DHCP chaddr field, using the broadcast flag to
instruct the DHCP server not to use this chaddr value as a link-layer

This makes it possible (at least with ISC dhcpd) to create DHCP
reservations using host declarations such as:

    host duckling {
        hardware unknown-32 00:02:c9:02:00:25:a1:b5;

13 years ago[netdevice] Allow the hardware and link-layer addresses to differ in size
Michael Brown [Tue, 11 Aug 2009 22:40:27 +0000 (23:40 +0100)]
[netdevice] Allow the hardware and link-layer addresses to differ in size

IPoIB has a 20-byte link-layer address, of which only eight bytes
represent anything relating to a "hardware address".

The PXE and EFI SNP APIs expect the permanent address to be the same
size as the link-layer address, so fill in the "permanent address"
field with the initial link layer address (as generated by
register_netdev() based upon the real hardware address).

13 years ago[netdevice] Separate out the concept of hardware and link-layer addresses
Michael Brown [Tue, 11 Aug 2009 19:19:53 +0000 (20:19 +0100)]
[netdevice] Separate out the concept of hardware and link-layer addresses

The hardware address is an intrinsic property of the hardware, while
the link-layer address can be changed at runtime.  This separation is
exposed via APIs such as PXE and EFI, but is currently elided by gPXE.

Expose the hardware and link-layer addresses as separate properties
within a net device.  Drivers should now fill in hw_addr, which will
be used to initialise ll_addr at the time of calling

13 years ago[doc] Expand scope of doxygen-generated documentation
Michael Brown [Tue, 11 Aug 2009 14:14:36 +0000 (15:14 +0100)]
[doc] Expand scope of doxygen-generated documentation

13 years ago[zbin] Change fixup semantics to support ROMs over 128k uncompressed
Joshua Oreman [Mon, 10 Aug 2009 05:12:21 +0000 (22:12 -0700)]
[zbin] Change fixup semantics to support ROMs over 128k uncompressed

The option ROM header contains a one-byte field indicating the number
of 512-byte sectors in the ROM image.  Currently it is linked to
contain the number of uncompressed sectors, with an instruction to the
compressor to correct it.  This causes link failure when the
uncompressed size of the ROM image is over 128k.

Fix by replacing the SUBx compressor fixup with an ADDx fixup that
adds the total compressed output length, scaled as requested, to an
addend stored in the field where the final length value will be
placed.  This is similar to the behavior of ELF relocations, and
ensures that an overflow error will not be generated unless the
compressed size is still too large for the field.

This also allows us to do away with the _filesz_pgh and _filesz_sect
calculations exported by the linker script.

Output tested bitwise identical to the old SUBx mechanism on hd, dsk,
lkrn, and rom prefixes, on both 32-bit and 64-bit processors.

Modified-by: Michael Brown <>
Signed-off-by: Michael Brown <>
13 years ago[doc] Update doxygen.cfg to match version running on
Michael Brown [Tue, 11 Aug 2009 11:02:05 +0000 (07:02 -0400)]
[doc] Update doxygen.cfg to match version running on

13 years ago[infiniband] Add support for the SRP Boot Firmware Table
Michael Brown [Mon, 10 Aug 2009 20:22:31 +0000 (21:22 +0100)]
[infiniband] Add support for the SRP Boot Firmware Table

The SRP Boot Firmware Table serves a similar role to the iSCSI and AoE
Boot Firmware Tables; it provides information required by the loaded
OS in order to establish a connection back to the SRP boot device.

13 years ago[infiniband] Disambiguate CM connection rejection reasons
Michael Brown [Sun, 9 Aug 2009 20:00:48 +0000 (21:00 +0100)]
[infiniband] Disambiguate CM connection rejection reasons

There is diagnostic value in being able to disambiguate between the
various reasons why an IB CM has rejected a connection attempt.  In
particular, reason 8 "invalid service ID" can be used to identify an
incorrect SRP service_id root-path component, and reason 28 "consumer
reject" corresponds to a genuine SRP login rejection IU, which can be
passed up to the SRP layer.

For rejection reasons other than "consumer reject", we should not pass
through the private data, since it is most likely generated by the CM
without any protocol-specific knowledge.

13 years ago[infiniband] Allow SRP reconnection attempts even after reporting failures
Michael Brown [Mon, 10 Aug 2009 01:20:21 +0000 (02:20 +0100)]
[infiniband] Allow SRP reconnection attempts even after reporting failures

With iSCSI, connection attempts are expensive; it may take many
seconds to determine that a connection will fail.  SRP connection
attempts are much less expensive, so we may as well avoid the
"optimisation" of declaring a state of permanent failure after a
certain number of attempts.  This allows a gPXE SRP initiator to
resume operations after an arbitrary amount of SRP target downtime.

13 years ago[infiniband] Generate more specific errors in response to failure MADs
Michael Brown [Mon, 10 Aug 2009 10:32:13 +0000 (11:32 +0100)]
[infiniband] Generate more specific errors in response to failure MADs

Generate errors within individual MAD transaction consumers such as
ib_pathrec.c and ib_mcast.c, rather than within ib_mi.c.  This allows
for more meaningful error messages to eventually be displayed to the

13 years ago[infiniband] Add support for SRP over Infiniband
Michael Brown [Fri, 17 Jul 2009 21:11:42 +0000 (22:11 +0100)]
[infiniband] Add support for SRP over Infiniband

SRP is the SCSI RDMA Protocol.  It allows for a method of SAN booting
whereby the target is responsible for reading and writing data using
Remote DMA directly to the initiator's memory.  The software initiator
merely sends and receives SCSI commands; it never has to touch the
actual data.

13 years ago[infiniband] Add last_opened_ibdev(), analogous to last_opened_netdev()
Michael Brown [Mon, 10 Aug 2009 10:47:11 +0000 (11:47 +0100)]
[infiniband] Add last_opened_ibdev(), analogous to last_opened_netdev()

The minimal-surprise behaviour, when no explicit SRP initiator device
is specified, will probably be to use the most recently opened
Infiniband device.  This matches our behaviour with using the most
recently opened net device for PXE, iSCSI, AoE, NBI, etc.

13 years ago[infiniband] Add find_ibdev()
Michael Brown [Sun, 9 Aug 2009 18:29:03 +0000 (19:29 +0100)]
[infiniband] Add find_ibdev()

13 years ago[infiniband] Add a "communication-managed reliable connection" protocol
Michael Brown [Sun, 9 Aug 2009 10:05:21 +0000 (11:05 +0100)]
[infiniband] Add a "communication-managed reliable connection" protocol

SRP over Infiniband uses a protocol whereby data is sent via a
combination of the CM private data fields and the RC queue pair
itself.  This seems sufficiently generic that it's worth having
available as a separate protocol.

13 years ago[hermon] Reduce the RC ACK timeout
Michael Brown [Mon, 10 Aug 2009 01:10:17 +0000 (02:10 +0100)]
[hermon] Reduce the RC ACK timeout

The ACK timeout determines how long we take to notice a failed
Reliable Connection.  Reducing it from the arbitrary value of 19 down
to 14 reduces the individual ACK timeout from around 2.1s to 67ms;
this in turn reduces the time to tear down and re-establish a broken
SRP session from around 30s to around 1s.

13 years ago[hermon] Randomise the high-order bits of queue pair numbers
Michael Brown [Sun, 9 Aug 2009 19:38:35 +0000 (20:38 +0100)]
[hermon] Randomise the high-order bits of queue pair numbers

The Infiniband Communication Manager will refuse to establish a
connection if it believes the connection is already established.
There is no immediately obvious way to ask it to tear down the
existing connection and replace it; to issue a DREP we would need to
know the local and remote communication IDs used for the previous
connection setup.

We can work around this by randomising the high-order bits of the
queue pair number; these have no significance to the hardware, but are
sufficient to convince the IB CM that this is a different connection.

13 years ago[scsi] Make LUN a property of the SCSI backend only
Michael Brown [Sun, 9 Aug 2009 15:09:47 +0000 (16:09 +0100)]
[scsi] Make LUN a property of the SCSI backend only

Nothing within the SCSI core actually refers to the LUN, so we can
simplify matters by treating it as purely a property of the backend.

13 years ago[scsi] Generalise iscsi_parse_lun() to scsi_parse_lun()
Michael Brown [Sun, 9 Aug 2009 14:30:07 +0000 (15:30 +0100)]
[scsi] Generalise iscsi_parse_lun() to scsi_parse_lun()

13 years ago[scsi] Generalise iscsi_detached_command() to scsi_detached_command()
Michael Brown [Sun, 9 Aug 2009 14:20:46 +0000 (15:20 +0100)]
[scsi] Generalise iscsi_detached_command() to scsi_detached_command()

13 years ago[process] Make it safe to call process_add() multiple times
Michael Brown [Mon, 10 Aug 2009 00:09:41 +0000 (01:09 +0100)]
[process] Make it safe to call process_add() multiple times

13 years ago[infiniband] Handle duplicate Communication Management REPs
Michael Brown [Sun, 9 Aug 2009 00:25:38 +0000 (01:25 +0100)]
[infiniband] Handle duplicate Communication Management REPs

We will terminate our transaction as soon as we receive the first CM
REP, since that provides all the state that we need.  However, the
peer may resend the REP if it didn't see our RTU, and if we don't
respond with another RTU we risk being disconnected.  (This protocol
appears not to handle retries gracefully.)

Fix by adding a management agent that will listen for these duplicate
REPs and send back an RTU.

13 years ago[ath5k] Add support for non-802.11n Atheros wireless NICs
Joshua Oreman [Fri, 7 Aug 2009 09:25:35 +0000 (02:25 -0700)]
[ath5k] Add support for non-802.11n Atheros wireless NICs

Signed-off-by: Michael Brown <>
13 years ago[legal] Add MIT licence declaration
Joshua Oreman [Fri, 7 Aug 2009 09:23:30 +0000 (02:23 -0700)]
[legal] Add MIT licence declaration

Signed-off-by: Michael Brown <>
13 years ago[802.11] Fix memory leak on unsuccessful probes
Joshua Oreman [Thu, 6 Aug 2009 23:20:57 +0000 (16:20 -0700)]
[802.11] Fix memory leak on unsuccessful probes

When a probe found no results, the list head of beacons would not be
freed, leaking 16 bytes of memory per probe.

Signed-off-by: Michael Brown <>
13 years ago[802.11] Fix maximum packet length
Joshua Oreman [Sat, 1 Aug 2009 16:56:44 +0000 (09:56 -0700)]
[802.11] Fix maximum packet length

Previously the maximum packet length was computed using an erroneous
understanding of the role of the MIC field in TKIP-encrypted packets.
The field is actually considered to be part of the MSDU (encrypted and
fragmented data), not the MPDU (container for each encrypted
fragment). As such its size does not contribute to cryptographic
overhead outside the data field's size limitations. The net result is
that the previous maximum packet length value was 4 bytes too long;
fix it to the correct value of 2352.

Signed-off-by: Michael Brown <>
13 years ago[802.11] Set channels early on to avoid tuning to an undefined channel
Joshua Oreman [Sat, 1 Aug 2009 16:52:59 +0000 (09:52 -0700)]
[802.11] Set channels early on to avoid tuning to an undefined channel

Some cards (such as ath5k) always need to tune to a particular channel
when they are reset; the reset may happen upon open(), which is before
the channels array would be set up (in prepare_probe()). Avoid tuning
the card to an inconsistent state by copying the hardware
supported-channels array to the 802.11 device's allowable-channels
array even before channels are "properly" set up.

Signed-off-by: Michael Brown <>