aboutsummaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)AuthorFilesLines
2021-01-28[hermon] Increase command timeout from 2 to 10 secondsChristian Iversen1-1/+1
Some commands (particularly in relation to device initialization) can occasionally take longer than 2 seconds, and the Mellanox documentation recommends a 10 second timeout. Signed-off-by: Christian Iversen <ci@iversenit.dk>
2021-01-28[hermon] Add assorted debug error messagesMichael Brown1-6/+33
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-28[hermon] Show "issuing command" messages only at DBGLVL_EXTRAMichael Brown1-7/+5
Originally-implemented-by: Christian Iversen <ci@iversenit.dk> Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-28[hermon] Reorganize PCI ROM list and document well-known product namesChristian Iversen1-2/+9
Signed-off-by: Christian Iversen <ci@iversenit.dk>
2021-01-28[golan] Backport typo fix in nodnic_prm.h: s/HERMON/NODNIC/Christian Iversen1-2/+2
Signed-off-by: Christian Iversen <ci@iversenit.dk>
2021-01-28[arbel] Clean up whitespace in MT25218_PRM.h headerChristian Iversen1-88/+88
Signed-off-by: Christian Iversen <ci@iversenit.dk>
2021-01-28[hermon] Clean up whitespace in MT25408_PRM.h headerChristian Iversen1-132/+132
Signed-off-by: Christian Iversen <ci@iversenit.dk>
2021-01-27[efi] Use EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL if availableMichael Brown1-11/+66
The original EFI_SIMPLE_TEXT_INPUT_PROTOCOL is not technically required to handle the use of the Ctrl key, and the long-obsolete EFI 1.10 specification lists only backspace, tab, linefeed, and carriage return as required. Some particularly brain-dead vendor UEFI firmware implementations dutifully put in the extra effort of ensuring that all other control characters (such as Ctrl-C) are impossible to type via EFI_SIMPLE_TEXT_INPUT_PROTOCOL. Current versions of the UEFI specification mandate that the console input handle must support both EFI_SIMPLE_TEXT_INPUT_PROTOCOL and EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL, the latter of which at least provides access to modifier key state. Unlike EFI_SIMPLE_TEXT_INPUT_PROTOCOL, the pointer to the EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL instance does not appear within the EFI system table and must therefore be opened explicitly. The UEFI specification provides no safe way to do so, since we cannot open the handle BY_DRIVER or BY_CHILD_CONTROLLER and so nothing guarantees that this pointer will remain valid for the lifetime of iPXE. We must simply hope that no UEFI firmware implementation ever discovers a motivation for reinstalling the EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL instance. Use EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL if available, falling back to the existing EFI_SIMPLE_TEXT_PROTOCOL otherwise. Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-27[image] Implicitly trust first embedded imageJoe Groocock1-0/+3
iPXE when used as a NIC option ROM can sometimes be reloaded by the UEFI/BIOS and any pre-initialised memory will remain loaded. When the imgtrust command is run it sets `require_trusted_images'. Upon reloading, iPXE tries to load the first embedded image but fails as it is not marked trusted. Setting this flag ensures that imgtrust with the first embedded script is reentrant. Signed-off-by: Joe Groocock <jgroocock@cloudflare.com>
2021-01-27[infiniband] Require drivers to specify the number of portsChristian Iversen9-22/+9
Require drivers to report the total number of Infiniband ports. This is necessary to report the correct number of ports on devices with dynamic port types. For example, dual-port Mellanox cards configured for (eth, ib) would be rejected by the subnet manager, because they report using "port 2, out of 1". Signed-off-by: Christian Iversen <ci@iversenit.dk>
2021-01-26[efi] Fix misleading debug messageMichael Brown1-1/+2
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-26[ifmgmt] Make "ifstat" show the link-layer protocol for each netdevChristian Iversen1-1/+2
This is useful on devices that perform auto-detection for ports. Example output: iPXE> ifstat net0: 00:11:22:33:44:55 using mt4099 on 0000:00:03.0 (Ethernet) [open] [Link:down, TX:0 TXE:0 RX:0 RXE:0] [Link status: Unknown (http://ipxe.org/1a086101)] net1: 00:11:22:33:44:56 using mt4099 on 0000:00:03.0 (IPoIB) [open] [Link:down, TX:0 TXE:0 RX:0 RXE:0] [Link status: Initialising (http://ipxe.org/1a136101)] Signed-off-by: Christian Iversen <ci@iversenit.dk>
2021-01-26[cmdline] Expose "iflinkwait" as a commandMichael Brown4-7/+67
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-26[efi] Fix use of uninitialised variableMichael Brown1-0/+3
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-25[efi] Automatically load "/autoexec.ipxe" when booted from a filesystemMichael Brown3-10/+204
When booting iPXE from a filesystem (e.g. a FAT-formatted USB key) it can be useful to have an iPXE script loaded automatically from the same filesystem. Compared to using an embedded script, this has the advantage that the script can be edited without recompiling the iPXE binary. For the BIOS version of iPXE, loading from a filesystem is handled using syslinux (or isolinux) which allows the script to be passed to the iPXE .lkrn image as an initrd. For the UEFI version of iPXE, the platform firmware loads the iPXE .efi image directly and there is currently no equivalent of the BIOS initrd mechanism. Add support for automatically loading a file "autoexec.ipxe" (if present) from the root of the filesystem containing the UEFI iPXE binary. A combined BIOS and UEFI image for a USB key can be created using e.g. ./util/genfsimg -o usbkey.img -s myscript.ipxe \ bin-x86_64-efi/ipxe.efi bin/ipxe.lkrn The file "myscript.ipxe" would appear as "autoexec.ipxe" on the USB key, and would be loaded automatically on both BIOS and UEFI systems. Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-25[image] Provide image_memory()Michael Brown6-76/+62
Consolidate the remaining logic common to initrd_init() and imgmem() into a shared image_memory() function. Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-24[build] Report a meaningful error message if isolinux.bin is missingMichael Brown1-2/+4
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-24[build] Check that mkisofs equivalent supports the required optionsMichael Brown1-19/+14
The "-e" option required for creating EFI boot images is supported only by widely used patched versions of genisoimage. Check that the required options are supported when selecting a mkisofs equivalent, thereby allowing a fallback to the use of xorrisofs when building a UEFI ISO image on a system with an unpatched version of genisoimage. Continue to prefer the use of genisoimage over xorrisofs, since there is apparently no way to inhibit the irritatingly useless startup banner message printed by xorrisofs even when the "-quiet" option is specified. Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-22[tftp] Allow for profiling of client and server turnaround timesMichael Brown1-1/+23
Provide some visibility into the turnaround times on both client and server sides as perceived by iPXE, to assist in debugging inexplicably slow TFTP transfers. Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-22[image] Add the "imgmem" commandMichael Brown5-0/+148
Provide the "imgmem" command to create an image from an existing block of memory, for debugging purposes only. Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-22[image] Provide image_set_data()Michael Brown3-12/+34
Extract part of the logic in initrd_init() to a standalone function image_set_data(). Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-22[build] Allow an initrd script to be provided via genfsimgMichael Brown1-4/+15
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-22[build] Fail gracefully when no input files are given to genfsimgMichael Brown1-0/+5
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-22[build] Use explicit disk geometry for generated FAT filesystem imagesMichael Brown1-4/+7
For FAT filesystem images larger than a 1.44MB floppy disk, round up the image size to a whole number of 504kB cylinders before formatting. This avoids losing up to a cylinder's worth of expected space in the filesystem image. Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-22[build] Fix genfsimg incompatibility with dash shellMichael Brown1-2/+2
Reported-by: Antony Messerli <antony@mes.ser.li> Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-21[build] Set volume name "iPXE" on FAT filesystem imagesMichael Brown1-2/+2
Allow generated filesystem images to be accessed using the file:// URI syntax by setting a defined volume name. This allows a script placed on the same filesystem image to be accessed using e.g. chain file://iPXE/script.ipxe Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-19[build] Allow genfsimg to be used on third party UEFI binariesMichael Brown1-3/+21
Extract the PE header offset from the MZ header rather than assuming a fixed offset as used in the binaries created by the iPXE build system. This allows genfsimg to be used to create bootable filesystem images from third party UEFI binaries such as the UEFI shell. Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-19[ipv6] Defer router discovery timeout while link is blockedMichael Brown1-1/+19
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-19[dhcp] Allow for links that remained blocked for up to three minutesMichael Brown1-1/+1
With the default timeouts for Cisco MAC Authentication Bypass, the link will remain blocked for around 90 seconds (plus a likely subsequent delay for STP). Extend the maximum number of DHCP discovery deferrals to allow for up to three minutes of waiting for a link to become unblocked. Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-19[eap] Treat an EAP Request-Identity as indicating a blocked linkMichael Brown7-0/+256
A switch port using 802.1x authentication will send EAP Request-Identity packets once the physical link is up, and will not be forwarding packets until the port identity has been established. We do not currently support 802.1x authentication. However, a reasonably common configuration involves using a preset list of permitted MAC addresses, with the "authentication" taking place between the switch and a RADIUS server. In this configuration, the end device does not need to perform any authentication step, but does need to be prepared for the switch port to fail to forward packets for a substantial time after physical link-up. This exactly matches the "blocked link" semantics already used when detecting a non-forwarding switch port via LACP or STP. Treat a received EAP Request-Identity as indicating a blocked link. Unlike LACP or STP, there is no way to determine the expected time until the next EAP packet and so we must choose a fixed timeout. Erroneously assuming that the link is blocked is relatively harmless since we will still attempt to transmit and receive data even over a link that is marked as blocked, and so the net effect is merely to prolong DHCP attempts. In contrast, erroneously assuming that the link is unblocked will potentially cause DHCP to time out and give up, resulting in a failed boot. The default EAP Request-Identity interval in Cisco switches (where this is most likely to be encountered in practice) is 30 seconds, so choose 45 seconds as a timeout that is likely to avoid gaps during which we falsely assume that the link is unblocked. Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-19[eapol] Replace EAPoL codeMichael Brown3-146/+109
Replace the GPL2+-only EAPoL code (currently used only for WPA) with new code licensed under GPL2+-or-UBDL. Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-19[dhcp] Continue transmitting DHCPDISCOVER while link is blockedMichael Brown1-12/+11
Continue to transmit DHCPDISCOVER while waiting for a blocked link, in order to support mechanisms such as Cisco MAC Authentication Bypass that require repeated transmission attempts in order to trigger the action that will result in the link becoming unblocked. Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-18[build] Include xorrisofs as a viable mkisofs equivalentOmgalof1-2/+2
Add support for xorrisofs, a GNU mkisofs equivalent that is available in most distro repositories. Modified-by: Michael Brown <mcb30@ipxe.org> Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-15[build] Inhibit spurious array bounds warning on some versions of gccMichael Brown1-1/+1
Some versions of gcc (observed with gcc 9.3.0 on NixOS Linux) produce a spurious warning about an out-of-bounds array access for the isa_extra_probe_addrs[] array. Work around this compiler bug by redefining the array index as a signed long, which seems to somehow avoid this spurious warning. Debugged-by: Manuel Mendez <mmendez534@gmail.com> Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-13[isa] Add missing #include <config/isa.h>Manuel Mendez1-0/+1
Signed-off-by: Manuel Mendez <mmendez534@gmail.com> Modified-by: Michael Brown <mcb30@ipxe.org> Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-13[build] Create util/genfsimg for building filesystem-based imagesMichael Brown6-308/+260
Generalise util/geniso, util/gensdsk, and util/genefidsk to create a single script util/genfsimg that can be used to build either FAT filesystem images or ISO images. Extend the functionality to allow for building multi-architecture UEFI bootable ISO images and combined BIOS+UEFI images. For example: ./util/genfsimg -o combined.iso \ bin-x86_64-efi/ipxe.efi \ bin-arm64-efi/ipxe.efi \ bin/ipxe.lkrn would generate a hybrid image that could be used as a CDROM (or hard disk or USB key) on legacy BIOS, x86_64 UEFI, or ARM64 UEFI. Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-04[xhci] Avoid false positive Coverity warningMichael Brown1-1/+1
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-03[efi] Leave asynchronous USB endpoints open until device is removedMichael Brown1-11/+13
Some UEFI device drivers will react to an asynchronous USB transfer failure by dubiously terminating the scheduled transfer from within the completion handler. We already have code from commit fbb776f ("[efi] Leave USB endpoint descriptors in existence until device is removed") that avoids freeing memory in this situation, in order to avoid use-after-free bugs. This is not sufficient to avoid potential problems, since with an xHCI controller the act of closing the endpoint requires issuing a command and awaiting completion via the event ring, which may in turn dispatch further USB transfer completion events. Avoid these problems by leaving the USB endpoint open (but with the refill timer stopped) until the device is finally removed, as is already done for control and bulk transfers. Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-03[xhci] Show meaningful error messages after command failuresMichael Brown1-7/+25
Ensure that any command failure messages are followed up with an error message indicating what the failed command was attempting to perform. Signed-off-by: Michael Brown <mcb30@ipxe.org>
2021-01-03[xhci] Fail attempts to issue concurrent commandsMichael Brown1-0/+8
The xHCI driver can handle only a single command TRB in progress at any one time. Immediately fail any attempts to issue concurrent commands (which should not occur in normal operation). Signed-off-by: Michael Brown <mcb30@ipxe.org>
2020-12-31[efi] Use segment and bus number to identify PCI root bridge I/O protocolv1.21.1Michael Brown2-4/+71
There may be multiple instances of EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL for a single PCI segment. Use the bus number range descriptor from the ACPI resource list to identify the correct protocol instance. There is some discrepancy between the ACPI and UEFI specifications regarding the interpretation of values within the ACPI resource list. The ACPI specification defines the min/max field values to be within the secondary (device-side) address space, and defines the offset field value as "the offset that must be added to the address on the secondary side to obtain the address on the primary side". The UEFI specification states instead that the offset field value is the "offset to apply to the starting address to convert it to a PCI address", helpfully omitting to clarify whether "to apply" in this context means "to add" or "to subtract". The implication of the wording is also that the "starting address" is not already a "PCI address" and must therefore be a host-side address rather than the ACPI-defined device-side address. Code comments in the EDK2 codebase seem to support the latter (non-ACPI) interpretation of these ACPI structures. For example, in the PciHostBridgeDxe driver there can be found the comment Macros to translate device address to host address and vice versa. According to UEFI 2.7, device address = host address + translation offset. along with a pair of macros TO_HOST_ADDRESS() and TO_DEVICE_ADDRESS() which similarly negate the sense of the "translation offset" from the definition found in the ACPI specification. The existing logic in efipci_ioremap() (based on a presumed-working externally contributed patch) applies the non-ACPI interpretation: it assumes that min/max field values are host-side addresses and that the offset field value is negated. Match this existing logic by assuming that min/max field values are host-side bus numbers. (The bus number offset value is therefore not required and so can be ignored.) As noted in commit 9b25f6e ("[efi] Fall back to assuming identity mapping of MMIO address space"), some systems seem to fail to provide MMIO address space descriptors. Assume that some systems may similarly fail to provide bus number range descriptors, and fall back in this situation to assuming that matching on segment number alone is sufficient. Testing any of this is unfortunately impossible without access to esoteric hardware that actually uses non-zero translation offsets. Originally-implemented-by: Thomas Walker <twalker@twosigma.com> Signed-off-by: Michael Brown <mcb30@ipxe.org>
2020-12-29[smbios] Add support for the 64-bit SMBIOS3 entry pointMichael Brown3-22/+82
Support UEFI systems that provide only 64-bit versions of the SMBIOS entry point. Signed-off-by: Michael Brown <mcb30@ipxe.org>
2020-12-29[efi] Allow for longer device paths in debug messagesb1f6c1c41-1/+1
Modified-by: Michael Brown <mcb30@ipxe.org> Signed-off-by: Michael Brown <mcb30@ipxe.org>
2020-12-28[sfc] Update email addressesMartin Habets5-10/+16
Email from solarflare.com will stop working, so update those. Remove email for Shradha Shah, as she is not involved with this any more. Update copyright notices for files touched. Signed-off-by: Michael Brown <mcb30@ipxe.org>
2020-12-28[x509] Clarify debug message for an untrusted X.509 issuerJosh McSavaney1-1/+1
We surface this debugging information in cases where a cert actually lacks an issuer, but also in cases where it *has* an issuer, but we cannot trust it (e.g. due to issues in establishing a trust chain). Signed-off-by: Josh McSavaney <me@mcsau.cc> Modified-by: Michael Brown <mcb30@ipxe.org> Signed-off-by: Michael Brown <mcb30@ipxe.org>
2020-12-28[golan] Add new PCI IDsMohammed Taha1-0/+3
Signed-off-by: Mohammed <mohammedt@mellanox.com> Signed-off-by: Michael Brown <mcb30@ipxe.org>
2020-12-17[efi] Allow EFI_USB_IO_PROTOCOL interfaces to be nullified and leakedMichael Brown3-9/+181
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2020-12-17[efi] Skip interface uninstallation during shutdownMichael Brown4-18/+23
iPXE seems to be almost alone in the UEFI world in attempting to shut down cleanly, free resources, and leave hardware in a well-defined reset state before handing over to the booted operating system. The UEFI driver model does allow for graceful shutdown via uninstallation of protocol interfaces. However, virtually no other UEFI drivers do this, and the external code paths that react to uninstallation are consequently poorly tested. This leads to a proliferation of bugs found in UEFI implementations in the wild, as described in commits such as 1295b4a ("[efi] Allow initialisation via SNP interface even while claimed") or b6e2ea0 ("[efi] Veto the HP XhciDxe Driver"). Try to avoid triggering such bugs by unconditionally skipping the protocol interface uninstallation during UEFI boot services shutdown, leaving the interfaces present but nullified and deliberately leaking the containing memory. Signed-off-by: Michael Brown <mcb30@ipxe.org>
2020-12-17[efi] Nullify interfaces unconditionally on error and shutdown pathsMichael Brown4-16/+16
Signed-off-by: Michael Brown <mcb30@ipxe.org>
2020-12-16[iphone] Add iPhone tethering driverMichael Brown3-0/+2560
USB tethering via an iPhone is unreasonably complicated due to the requirement to perform a pairing operation that involves establishing a TLS session over a completely unrelated USB function that speaks a protocol that is almost, but not quite, entirely unlike TCP. Signed-off-by: Michael Brown <mcb30@ipxe.org>