iPXE - Open Source Boot Firmware

ipxe.git
8 years ago[release] Update version to 0.9.8 for release v0.9.8
Marty Connor [Wed, 14 Oct 2009 16:12:40 +0000 (12:12 -0400)] 
[release] Update version to 0.9.8 for release

8 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 <itaygazit@gmail.com>

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

8 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()

8 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

9 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 <mdc@etherboot.org>

9 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 <oremanj@rwcr.net>

9 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 <mcb30@etherboot.org>

9 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
address.

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

    host duckling {
        fixed-address 10.252.252.99;
        hardware unknown-32 00:02:c9:02:00:25:a1:b5;
    }

9 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).

9 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
register_netdev().

9 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

9 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 <mcb30@etherboot.org>
Signed-off-by: Michael Brown <mcb30@etherboot.org>

9 years ago[doc] Update doxygen.cfg to match version running on rom.etherboot.org
Michael Brown [Tue, 11 Aug 2009 11:02:05 +0000 (07:02 -0400)] 
[doc] Update doxygen.cfg to match version running on rom.etherboot.org

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

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

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

9 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
user.

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

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

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

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

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

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

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

9 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()

9 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()

9 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

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

9 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 <mcb30@etherboot.org>

9 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 <mcb30@etherboot.org>

9 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 <mcb30@etherboot.org>

9 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 <mcb30@etherboot.org>

9 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 <mcb30@etherboot.org>

9 years ago[802.11] Enhance support for driver PHY differences
Joshua Oreman [Fri, 7 Aug 2009 08:38:23 +0000 (01:38 -0700)] 
[802.11] Enhance support for driver PHY differences

The prior net80211 model of physical-layer behavior for drivers was
overly simplistic and limited the drivers that could be written.  To
be more flexible, split the driver-provided list of supported rates by
band, and add a means for specifying a list of supported channels.
Allow drivers to specify a hardware channel value that will be tied to
uses of the channel.

Expose net80211_duration() to drivers, and make the rate it uses in
its computations configurable, so that it can be used in calculating
durations that must be set in hardware for ACK and CTS packets. Add
net80211_cts_duration() for the common case of calculating the
duration for a CTS packet.

Signed-off-by: Michael Brown <mcb30@etherboot.org>

9 years ago[geniso] Emit proper error message for incorrect location of ISOLINUX_BIN
vibi sreenivasan [Fri, 3 Jul 2009 06:21:54 +0000 (11:51 +0530)] 
[geniso] Emit proper error message for incorrect location of ISOLINUX_BIN

If isolinux.bin is not installed in the expected location the error
message shown is slightly misleading.

Signed-off-by: Vibi Sreenivasan <vibi_sreenivasan@cms.com>
Signed-off-by: Michael Brown <mcb30@etherboot.org>

9 years ago[infiniband] Update all other MAD users to use a management interface
Michael Brown [Thu, 6 Aug 2009 00:18:38 +0000 (01:18 +0100)] 
[infiniband] Update all other MAD users to use a management interface

9 years ago[infiniband] Update subnet management agent to use a management interface
Michael Brown [Mon, 3 Aug 2009 16:47:55 +0000 (17:47 +0100)] 
[infiniband] Update subnet management agent to use a management interface

9 years ago[infiniband] Add the concept of a management interface
Michael Brown [Mon, 3 Aug 2009 14:56:56 +0000 (15:56 +0100)] 
[infiniband] Add the concept of a management interface

A management interface is the component through which both local and
remote management agents are accessed.

This new implementation of a management interface allows for the user
to react to timed-out transactions, and also allows for cancellation
of in-progress transactions.

9 years ago[hermon] Allow for multiple calls to ib_modify_qp()
Michael Brown [Sat, 8 Aug 2009 13:17:27 +0000 (14:17 +0100)] 
[hermon] Allow for multiple calls to ib_modify_qp()

9 years ago[romprefix] Cope with PnP BIOSes that fail to set %es:%di on entry
Michael Brown [Sat, 8 Aug 2009 13:36:10 +0000 (14:36 +0100)] 
[romprefix] Cope with PnP BIOSes that fail to set %es:%di on entry

Some BIOSes support the BIOS Boot Specification (BBS) but fail to set
%es:%di correctly when calling the option ROM initialisation entry
point.  This causes gPXE to identify the BIOS as non-PnP (and so
non-BBS), leaving the user unable to control the boot order.

Fix by scanning for the $PnP signature ourselves, rather than relying
on the BIOS having passed in %es:%di correctly.

Tested-by: Helmut Adrigan <helmut.adrigan@chello.at>

9 years ago[hermon] Add support for multiple ports and detecting non-IB ports
Michael Brown [Thu, 6 Aug 2009 00:55:38 +0000 (01:55 +0100)] 
[hermon] Add support for multiple ports and detecting non-IB ports

Originally-fixed-by: Itay Gazit <itaygazit@gmail.com>

9 years ago[infiniband] Change IB_{QPN,QKEY,QPT} names from {SMA,GMA} to {SMI,GSI}
Michael Brown [Sun, 2 Aug 2009 21:57:01 +0000 (22:57 +0100)] 
[infiniband] Change IB_{QPN,QKEY,QPT} names from {SMA,GMA} to {SMI,GSI}

The IBA specification refers to management "interfaces" and "agents".
The interface is the component that connects to the queue pair and
sends and receives MADs; the agent is the component that constructs
the reply to the MAD.

Rename the IB_{QPN,QKEY,QPT} constants as a first step towards making
this separation in gPXE.

9 years ago[build] Mark __intel_new_proc_init with __libgcc rather than cdecl
Michael Brown [Mon, 3 Aug 2009 14:53:43 +0000 (15:53 +0100)] 
[build] Mark __intel_new_proc_init with __libgcc rather than cdecl

The function __intel_new_proc_init() (called implicitly when building
using icc) is marked with __attribute__((cdecl)).  This breaks
building on x86_64, where cdecl is meaningless.

Fix by replacing with the existing __libgcc macro, which is already
defined to be "__attribute__((cdecl))" for i386 builds and empty for
x86_64 builds.

9 years ago[sky2] Add support for Marvell Yukon-II gigabit Ethernet cards
Joshua Oreman [Sun, 2 Aug 2009 23:14:01 +0000 (16:14 -0700)] 
[sky2] Add support for Marvell Yukon-II gigabit Ethernet cards

Signed-off-by: Michael Brown <mcb30@etherboot.org>

9 years ago[pci] Add definitions for Advanced Error Reporting registers
Joshua Oreman [Sun, 2 Aug 2009 23:13:40 +0000 (16:13 -0700)] 
[pci] Add definitions for Advanced Error Reporting registers

Signed-off-by: Michael Brown <mcb30@etherboot.org>

9 years ago[legal] Add the MIT and ISC licenses to licence.pl
H. Peter Anvin [Sun, 2 Aug 2009 21:42:55 +0000 (14:42 -0700)] 
[legal] Add the MIT and ISC licenses to licence.pl

The MIT and ISC licenses are legally equivalent to the bsd2 license,
but with slightly different verbiage.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Michael Brown <mcb30@etherboot.org>

9 years ago[pxe] Dual-license pxe_api.h under the MIT license
H. Peter Anvin [Sun, 2 Aug 2009 21:41:38 +0000 (14:41 -0700)] 
[pxe] Dual-license pxe_api.h under the MIT license

pxe_api.h is just a description of API functions, it's actively
undesirable to have more implementations than necessary.  Allowing it
under the MIT license lets the Syslinux libraries use it.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Michael Brown <mcb30@etherboot.org>

9 years ago[config] Enable PXE commands by default only on pcbios architecture
Joshua Oreman [Sun, 2 Aug 2009 21:52:05 +0000 (14:52 -0700)] 
[config] Enable PXE commands by default only on pcbios architecture

The commands bring in UNDI and thus real-mode code, so they cannot be
used on EFI.

Signed-off-by: Michael Brown <mcb30@etherboot.org>

9 years ago[pxe] Avoid printf format warning on some compilers
Michael Brown [Sun, 2 Aug 2009 21:40:58 +0000 (22:40 +0100)] 
[pxe] Avoid printf format warning on some compilers

Tested-by: Joshua Oreman <oremanj@xenon.get-linux.org>

9 years ago[tcp] Avoid printf format warnings on some compilers
Michael Brown [Sun, 2 Aug 2009 21:19:31 +0000 (22:19 +0100)] 
[tcp] Avoid printf format warnings on some compilers

In several places, we currently use size_t to represent a difference
between TCP sequence numbers.  This can cause compiler warnings
relating to printf format specifiers, since the result of
(uint32_t+size_t) may be an unsigned long on some compilers.

Fix by using uint32_t for all variables that represent a difference
between TCP sequence numbers.

Tested-by: Joshua Oreman <oremanj@xenon.get-linux.org>

9 years ago[build] Allow safe concurrent builds of .iso, .liso and .sdsk targets
Michael Brown [Sun, 2 Aug 2009 10:17:02 +0000 (11:17 +0100)] 
[build] Allow safe concurrent builds of .iso, .liso and .sdsk targets

The geniso, genliso and gensdsk scripts contain hard-coded temporary
directory names, and so could potentially collide with each other when
run as part of a concurrent build (e.g. "make -j 4").

Fix by using mktemp to generate suitable temporary directory names.

9 years ago[build] Make .liso image generation silent unless errors occur
Michael Brown [Sun, 2 Aug 2009 10:08:43 +0000 (11:08 +0100)] 
[build] Make .liso image generation silent unless errors occur

9 years ago[build] Add syslinux floppy image type .sdsk
Marty Connor [Sun, 29 Mar 2009 05:25:15 +0000 (01:25 -0400)] 
[build] Add syslinux floppy image type .sdsk

We add a syslinux floppy disk type using parts of the genliso script.
This floppy image cat be dd'ed to a physical floppy or used in
instances where a virtual floppy with an mountable DOS filesystem is
useful.

We also modify the genliso script to only generate .liso images
rather than creating images depending on how it is called.

Signed-off-by: Michael Brown <mcb30@etherboot.org>

9 years ago[rtl818x] Add driver for Realtek 8180/8185 wireless cards
Joshua Oreman [Sun, 21 Jun 2009 00:58:10 +0000 (17:58 -0700)] 
[rtl818x] Add driver for Realtek 8180/8185 wireless cards

9 years ago[802.11] Add support for 802.11 devices with software MAC layer
Joshua Oreman [Tue, 21 Jul 2009 18:16:38 +0000 (11:16 -0700)] 
[802.11] Add support for 802.11 devices with software MAC layer

This is required for all modern 802.11 devices, and allows drivers
to be written for them with minimally more effort than is required
for a wired NIC.

Signed-off-by: Michael Brown <mcb30@etherboot.org>
Modified-by: Michael Brown <mcb30@etherboot.org>

9 years ago[hermon] Add support for RC queue pairs
Michael Brown [Fri, 17 Jul 2009 21:34:38 +0000 (22:34 +0100)] 
[hermon] Add support for RC queue pairs

9 years ago[hermon] Allow software GMA to receive packets destined for QP1
Michael Brown [Thu, 9 Jul 2009 04:18:33 +0000 (05:18 +0100)] 
[hermon] Allow software GMA to receive packets destined for QP1

The Linux IB Communication Manager will always send MADs to QP1,
rather than back to the originating QP.  On Hermon, QP1 is by default
handled by the embedded firmware.  We can change this, but the cost is
that we have to handle both QP0 and QP1 (i.e. we have to provide SMA
as well as GMA service in software), and we have to use MLX queues
rather than standard UD queues (i.e. we have to construct the UD
datagrams by hand).

There doesn't seem to be any viable way around this situation, ugly
though it is.

9 years ago[hermon] Disable debugging around mapping of firmware tables
Michael Brown [Thu, 9 Jul 2009 01:45:37 +0000 (02:45 +0100)] 
[hermon] Disable debugging around mapping of firmware tables

9 years ago[hermon] Remove an unnecessary check for GID-less transmissions
Michael Brown [Wed, 8 Jul 2009 21:00:07 +0000 (22:00 +0100)] 
[hermon] Remove an unnecessary check for GID-less transmissions

9 years ago[infiniband] Add Communication Manager (CM)
Michael Brown [Fri, 17 Jul 2009 21:10:42 +0000 (22:10 +0100)] 
[infiniband] Add Communication Manager (CM)

The Communication Manager is responsible for handling the setup and
teardown of RC connections.

9 years ago[infiniband] Add infrastructure for RC queue pairs
Michael Brown [Fri, 17 Jul 2009 21:27:34 +0000 (22:27 +0100)] 
[infiniband] Add infrastructure for RC queue pairs

Queue pairs are now assumed to be created in the INIT state, with a
call to ib_modify_qp() required to bring the queue pair to the RTS
state.

ib_modify_qp() no longer takes a modification list; callers should
modify the relevant queue pair parameters (e.g. qkey) directly and
then call ib_modify_qp() to synchronise the changes to the hardware.

The packet sequence number is now a property of the queue pair, rather
than of the device.

Each queue pair may have an associated address vector.  For RC queue
pairs, this is the address vector that will be programmed in to the
hardware as the remote address.  For UD queue pairs, it will be used
as the default address vector if none is supplied to ib_post_send().

9 years ago[infiniband] Pass a generic MAD to ib_set_port_info()
Michael Brown [Fri, 17 Jul 2009 21:40:12 +0000 (22:40 +0100)] 
[infiniband] Pass a generic MAD to ib_set_port_info()

9 years ago[infiniband] Expose supported and enabled link speeds and widths
Michael Brown [Sat, 11 Jul 2009 00:14:43 +0000 (01:14 +0100)] 
[infiniband] Expose supported and enabled link speeds and widths

9 years ago[infiniband] Allow MAD handlers to indicate response via return value
Michael Brown [Fri, 10 Jul 2009 21:31:40 +0000 (22:31 +0100)] 
[infiniband] Allow MAD handlers to indicate response via return value

Now that MAD handlers no longer return a status code, we can allow
them to return a pointer to a MAD structure if and only if they want
to send a response.  This provides a more natural and flexible
approach than using a "response method" field within the handler's
descriptor.

9 years ago[infiniband] Remove the return status code from MAD handlers
Michael Brown [Fri, 10 Jul 2009 20:29:25 +0000 (21:29 +0100)] 
[infiniband] Remove the return status code from MAD handlers

MAD handlers have to set the status fields within the MAD itself
anyway, in order to provide a meaningful response MAD; the additional
gPXE return status code is just noise.

Note that we probably don't need to ever explicitly set the status to
IB_MGMT_STATUS_OK, since it should already have this value from the
request.  (By not explicitly setting the status in this way, we can
safely have ib_sma_set_xxx() call ib_sma_get_xxx() in order to
generate the GetResponse MAD without worrying that ib_sma_get_xxx()
will clear any error status set by ib_sma_set_xxx().)

9 years ago[infiniband] Allow external QPN to differ from real QPN
Michael Brown [Thu, 9 Jul 2009 14:52:04 +0000 (15:52 +0100)] 
[infiniband] Allow external QPN to differ from real QPN

Most IB hardware seems not to allow allocation of the genuine QPNs 0
and 1, so allow for the externally-visible QPN (as constructed and
parsed by ib_packet, where used) to differ from the real
hardware-allocated QPN.

9 years ago[infiniband] Always create an SMA and a GMA
Michael Brown [Thu, 9 Jul 2009 02:49:37 +0000 (03:49 +0100)] 
[infiniband] Always create an SMA and a GMA

9 years ago[infiniband] Add notion of a queue pair type
Michael Brown [Thu, 9 Jul 2009 02:09:00 +0000 (03:09 +0100)] 
[infiniband] Add notion of a queue pair type

9 years ago[infiniband] Allow completion queue operations to be optional
Michael Brown [Wed, 8 Jul 2009 10:50:47 +0000 (11:50 +0100)] 
[infiniband] Allow completion queue operations to be optional

The send completion handler typically will just free the I/O buffer,
so allow this common case to be handled by the Infiniband core.

9 years ago[infiniband] Improve ib_packet debugging messages
Michael Brown [Wed, 8 Jul 2009 03:31:48 +0000 (04:31 +0100)] 
[infiniband] Improve ib_packet debugging messages

9 years ago[ipoib] Attempt the broadcast group join only if the link is up
Michael Brown [Tue, 7 Jul 2009 18:14:52 +0000 (19:14 +0100)] 
[ipoib] Attempt the broadcast group join only if the link is up

Attempting the broadcast group join while the link is down is
harmless, but can generate annoying volumes of debug messages.

9 years ago[infiniband] Implement SMA as an instance of a GMA
Michael Brown [Tue, 7 Jul 2009 17:30:15 +0000 (18:30 +0100)] 
[infiniband] Implement SMA as an instance of a GMA

The GMA code was based upon the SMA code.  We can save space by making
the SMA simply an instance of the GMA.

9 years ago[infiniband] Pass GMA as a parameter to GMA MAD handlers
Michael Brown [Tue, 7 Jul 2009 17:09:21 +0000 (18:09 +0100)] 
[infiniband] Pass GMA as a parameter to GMA MAD handlers

9 years ago[ipoib] Remove the queue set abstraction
Michael Brown [Tue, 7 Jul 2009 15:26:57 +0000 (16:26 +0100)] 
[ipoib] Remove the queue set abstraction

Now that IPoIB has to deal with only one set of queues, the queue set
abstraction becomes merely an inconvenient wrapper.

9 years ago[ipoib] Kill off the now-unused IPoIB metadata queue set
Michael Brown [Tue, 7 Jul 2009 15:18:47 +0000 (16:18 +0100)] 
[ipoib] Kill off the now-unused IPoIB metadata queue set

All packets handled by the metadata queue set now go via the GMA.

9 years ago[infiniband] Provide a general mechanism for multicast group joins
Michael Brown [Tue, 7 Jul 2009 15:07:31 +0000 (16:07 +0100)] 
[infiniband] Provide a general mechanism for multicast group joins

Generalise out the multicast group membership record code from IPoIB.

9 years ago[infiniband] Allow for sending MADs via GMA without retransmission
Michael Brown [Tue, 7 Jul 2009 15:01:51 +0000 (16:01 +0100)] 
[infiniband] Allow for sending MADs via GMA without retransmission

9 years ago[infiniband] Make qkey and rate optional parameters to ib_post_send()
Michael Brown [Tue, 7 Jul 2009 13:03:11 +0000 (14:03 +0100)] 
[infiniband] Make qkey and rate optional parameters to ib_post_send()

The queue key is stored as a property of the queue pair, and so can
optionally be added by the Infiniband core at the time of calling
ib_post_send(), rather than always having to be specified by the
caller.

This allows IPoIB to avoid explicitly keeping track of the data queue
key.

9 years ago[ipoib] Clarify new role of IPoIB peer cache as for MAC addresses only
Michael Brown [Tue, 7 Jul 2009 12:54:39 +0000 (13:54 +0100)] 
[ipoib] Clarify new role of IPoIB peer cache as for MAC addresses only

Now that path record lookups are handled entirely via
ib_resolve_path(), the only role of the IPoIB peer cache is as a
lookup table for MAC addresses.  Update the code structure and
comments to reflect this.

9 years ago[ipoib] Expose the real broadcast MAC
Michael Brown [Tue, 7 Jul 2009 12:30:47 +0000 (13:30 +0100)] 
[ipoib] Expose the real broadcast MAC

The IPoIB broadcast MAC address varies according to the partition key.
Now that the broadcast MAC address is a property of the network device
rather than of the link layer, we can expose this real MAC address
directly.

The broadcast LID is now identified via a path record lookup; this is
marginally inefficient (since it was present in the MCMemberRecord
GetResponse), but avoids the need to special-case broadcasts when
constructing the address vector in ipoib_transmit().

9 years ago[ipoib] Use Infiniband broadcast QPN in IPoIB broadcast MAC address
Michael Brown [Tue, 7 Jul 2009 10:31:35 +0000 (11:31 +0100)] 
[ipoib] Use Infiniband broadcast QPN in IPoIB broadcast MAC address

Remove the special handling of the IPoIB broadcast QPN.

9 years ago[infiniband] Provide a general mechanism for path record lookups
Michael Brown [Tue, 7 Jul 2009 01:01:21 +0000 (02:01 +0100)] 
[infiniband] Provide a general mechanism for path record lookups

Generalise out the path record lookup code from IPoIB.

9 years ago[infiniband] Create a general management agent
Michael Brown [Mon, 6 Jul 2009 22:09:26 +0000 (23:09 +0100)] 
[infiniband] Create a general management agent

Generalise the subnet management agent into a general management agent
capable of sending and responding to MADs, including support for
retransmissions as necessary.

9 years ago[infiniband] Centralise SMA and GMA queue constants
Michael Brown [Mon, 6 Jul 2009 19:31:44 +0000 (20:31 +0100)] 
[infiniband] Centralise SMA and GMA queue constants

9 years ago[infiniband] Poll completion queues automatically
Michael Brown [Mon, 6 Jul 2009 18:12:12 +0000 (19:12 +0100)] 
[infiniband] Poll completion queues automatically

Currently, all Infiniband users must create a process for polling
their completion queues (or rely on a regular hook such as
netdev_poll() in ipoib.c).

Move instead to a model whereby the Infiniband core maintains a single
process calling ib_poll_eq(), and polling the event queue triggers
polls of the applicable completion queues.  (At present, the
Infiniband core simply polls all of the device's completion queues.)
Polling a completion queue will now implicitly refill all attached
receive work queues; this is analogous to the way that netdev_poll()
implicitly refills the RX ring.

Infiniband users no longer need to create a process just to poll their
completion queues and refill their receive rings.

9 years ago[infiniband] Centralise assumption of 2048-byte payloads
Michael Brown [Fri, 17 Jul 2009 21:50:33 +0000 (22:50 +0100)] 
[infiniband] Centralise assumption of 2048-byte payloads

IPoIB and the SMA have separate constants for the packet size to be
used to I/O buffer allocations.  Merge these into the single
IB_MAX_PAYLOAD_SIZE constant.

(Various other points in the Infiniband stack have hard-coded
assumptions of a 2048-byte payload; we don't currently support
variable MTUs.)

9 years ago[infiniband] Provide ib_get_hca_info() as a commonly-available function
Michael Brown [Thu, 2 Jul 2009 11:54:36 +0000 (12:54 +0100)] 
[infiniband] Provide ib_get_hca_info() as a commonly-available function

9 years ago[infiniband] Split queue set functionality out of ipoib.c to ib_qset.c
Michael Brown [Thu, 2 Jul 2009 08:56:14 +0000 (09:56 +0100)] 
[infiniband] Split queue set functionality out of ipoib.c to ib_qset.c

9 years ago[infiniband] Move non-driver-specific code to net/infiniband
Michael Brown [Thu, 2 Jul 2009 07:39:34 +0000 (08:39 +0100)] 
[infiniband] Move non-driver-specific code to net/infiniband

9 years ago[netdevice] Make ll_broadcast per-netdevice rather than per-ll_protocol
Michael Brown [Fri, 17 Jul 2009 21:48:31 +0000 (22:48 +0100)] 
[netdevice] Make ll_broadcast per-netdevice rather than per-ll_protocol

IPoIB has a link-layer broadcast address that varies according to the
partition key.  We currently go through several contortions to pretend
that the link-layer address is a fixed constant; by making the
broadcast address a property of the network device rather than the
link-layer protocol it will be possible to simplify IPoIB's broadcast
handling.

9 years ago[ata] Make ATA command issuing partially asynchronous
Michael Brown [Tue, 7 Jul 2009 22:01:28 +0000 (23:01 +0100)] 
[ata] Make ATA command issuing partially asynchronous

Move the icky call to step() from aoe.c to ata.c; this takes it at
least one step further away from where it really doesn't belong.

Unfortunately, AoE has the ugly aoe_discover() mechanism which means
that we still have a step() loop in aoe.c for now; this needs to be
replaced at some future point.

9 years ago[scsi] Improve SCSI debugging
Michael Brown [Mon, 13 Jul 2009 04:01:54 +0000 (05:01 +0100)] 
[scsi] Improve SCSI debugging

9 years ago[scsi] Make SCSI command issuing partially asynchronous
Michael Brown [Tue, 7 Jul 2009 22:00:11 +0000 (23:00 +0100)] 
[scsi] Make SCSI command issuing partially asynchronous

Move the icky call to step() from iscsi.c to scsi.c; this takes it at
least one step further away from where it really doesn't belong.

9 years ago[debug] Use a delimiter to break up DBG_HD() output
Michael Brown [Sun, 12 Jul 2009 20:30:08 +0000 (21:30 +0100)] 
[debug] Use a delimiter to break up DBG_HD() output

Reading sixteen columns of hex digits can be difficult; include a "-"
character to split the output into two groups of eight columns.

9 years ago[xfer] Always nullify interface while sending close() message
Michael Brown [Mon, 6 Jul 2009 15:16:59 +0000 (16:16 +0100)] 
[xfer] Always nullify interface while sending close() message

Objects typically call xfer_close() as part of their response to a
close() message.  If the initiating object has already nullified the
xfer interface then this isn't a problem, but it can lead to
unexpected behaviour when the initiating object is aiming to reuse the
connection and so does not nullify the interface.

Fix by always temporarily nullifying the interface during xfer_close()
(as was already being done by xfer_vreopen() in order to work around
this specific problem).

Reported-by: infernix <infernix@infernix.net>
Tested-by: infernix <infernix@infernix.net>

9 years ago[pxe] Add startpxe and stoppxe commands
Michael Brown [Sun, 28 Jun 2009 19:50:23 +0000 (20:50 +0100)] 
[pxe] Add startpxe and stoppxe commands

These commands can be used to activate or deactivate the PXE API (on a
specifiable network interface).

This is currently of limited use, since most image formats will call
shutdown() before booting the image, meaning that the underlying net
device gets shut down during remove_devices() anyway.

9 years ago[ifmgmt] Move ifmgmt_cmd.h to include/hci
Michael Brown [Sun, 28 Jun 2009 19:28:38 +0000 (20:28 +0100)] 
[ifmgmt] Move ifmgmt_cmd.h to include/hci

9 years ago[ifmgmt] Optimise prototype for ifcommon_exec()
Michael Brown [Sun, 28 Jun 2009 19:24:54 +0000 (20:24 +0100)] 
[ifmgmt] Optimise prototype for ifcommon_exec()

ifcommon_exec() was long-ago marked as __attribute__((regparm(2))) in
order to minimise the size of functions that call into it.  Since
then, gPXE has added -mregparm=3 as a general compilation option, and
this "optimisation" is now counter-productive.

Change (and simplify) the prototype to minimise code size given the
current compilation conditions.

9 years ago[pxe] Check for unhookable interrupts in PXENV_STOP_UNDI
Michael Brown [Sun, 28 Jun 2009 19:12:16 +0000 (20:12 +0100)] 
[pxe] Check for unhookable interrupts in PXENV_STOP_UNDI

PXENV_STOP_UNDI should return PXENV_STATUS_KEEP_UNDI if the UNDI
cannot be safely unloaded (e.g. due to interrupt vectors that could
not be unhooked).