summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* [release] Update version information for 0.9.4 releasev0.9.4Marty Connor2008-09-262-3/+3
|
* [settings] Allow for setting fetchers to fail in fetchf_hex()Michael Brown2008-09-261-0/+2
|
* [settings] Expose MAC address setting for general useMichael Brown2008-09-261-0/+1
|
* [romprefix] Fully clear the "Press B to boot..." message when INT19 is usedMichael Brown2008-09-261-1/+1
|
* [pcbios] Fetch INT 15,e820 entry directly into our e820 cacheMichael Brown2008-09-251-19/+9Star
| | | | | | | | | | | | | | | | | | | | Some BIOSes require us to pass in not only the continuation value (in %ebx) as returned by the previous call to INT 15,e820 but also the unmodified buffer (at %es:%di) as returned by the previous call to INT 15,e820. Apparently, someone thought it would be a worthwhile optimisation to fill in only the low dword of the "length" field and the low byte of the "type field", assuming that the buffer would remain unaltered from the previous call. This problem was being triggered by the "peek ahead" logic in get_mangled_e820(), which would read the next entry into a temporary buffer in order to be able to guarantee terminating the map with %ebx=0 rather than CF=1. (Terminating with CF=1 upsets some Windows flavours, despite being documented legal behaviour.) Work around this problem by always fetching directly into our e820 cache; that way we can guarantee that the underlying call always sees the previous buffer contents (and the same buffer address).
* [arbel] Allocate sufficient space for firmware bufferMichael Brown2008-09-251-1/+1
| | | | | | We were accidentally allocating only half the required amount of memory (given the alignment method) for the firmware buffer, leading to conflicts between the firmware buffer and gPXE code/data segments.
* [hermon] Allocate sufficient space for firmware bufferMichael Brown2008-09-251-1/+1
| | | | | | We were accidentally allocating only half the required amount of memory (given the alignment method) for the firmware buffer, leading to conflicts between the firmware buffer and gPXE code/data segments.
* [pcbios] Add facility for testing arbitrary E820 memory mapsMichael Brown2008-09-253-0/+112
| | | | | | | | | | We seem to be having issues with various E820 memory maps. These problems are often difficult to reproduce, requiring access to the specific system exhibiting the problem. Add a facility for hooking in a fake E820 map generator, using an arbitrary map defined in a C array, solely in order to be able to test the map-mangling code against arbitrary E820 maps.
* [crypto] Remove spurious #include "config.h"Michael Brown2008-09-251-2/+0Star
|
* [romprefix] Allow BANNER_TIMEOUT to control banners in romprefix.SMichael Brown2008-09-251-18/+26
| | | | | | | | In particular, allow BANNER_TIMEOUT=0 to inhibit the prompt banners altogether. Ironically, this request comes from the same OEM that originally required the prompts to be present during POST.
* [dhcp] Accept BOOTP as well as DHCPMichael Brown2008-09-252-7/+10
|
* [pxe] Enable interrupts before starting PXE NBP executionMichael Brown2008-09-241-0/+1
| | | | Based on a patch provided by XenSource for Etherboot 5.4.
* [pcbios] Inhibit INT 15 memory map hiding on brain-dead BIOSesMichael Brown2008-09-241-0/+27
| | | | | | | | | | | | | | Some really moronic BIOSes bring up the PXE stack via the UNDI loader entry point during POST, and then don't bother to unload it before overwriting the code and data segments. If this happens, we really don't want to leave INT 15 hooked, because that will cause any loaded OS to die horribly as soon as it attempts to fetch the system memory map. We use a heuristic to detect whether or not we are being loaded at the top of free base memory. If we determine that we are being loaded at some other arbitrary location in base memory, then we assume that it's not safe to hook INT 15.
* [settings] Add the uristring setting typeMichael Brown2008-09-241-0/+53
| | | | | | | | | | | | | | | This allows settings to be expanded in a way that is safe to include within a URI string, such as kernel http://10.0.0.1/boot.php?mf=${manufacturer:uristring} where the ${manufacturer} setting may contain characters that are not permitted (or have reserved purposes) within a URI. Since whitespace characters will be URI-encoded (e.g. "%20" for a space character), this also works around the problem that spaces within an expanded setting would cause the shell to split command-line arguments incorrectly.
* [uri] Add uri_encode() and uri_decode() functions for URI character encodingMichael Brown2008-09-242-0/+80
|
* [romprefix] If we hook INT 19, prompt before attempting bootMichael Brown2008-09-241-44/+107
| | | | | | | On non-BBS systems we hook INT 19, since there is no other way we can guarantee gaining control of the flow of execution. If we end up doing this, prompt the user before attempting boot, since forcibly capturing INT 19 is rather antisocial.
* [phantom] Skip command PEG initialisation if PEG is already runningMichael Brown2008-09-241-0/+11
| | | | | | | It is possible for the BIOS to use the UNDI API to bring up the NIC prior to system boot. If this happens, UNM_NIC_REG_CMDPEG_STATE will contain the value 0xf00f (UNM_NIC_REG_CMDPEG_STATE_INITIALIZE_ACK), and we should skip initialising the command PEG.
* [pcbios] Sanity-check the INT15,e820 and INT15,e801 memory mapsMichael Brown2008-09-241-0/+33
| | | | | Some systems seem to report insane memory maps (particularly at POST time). Detect and work around some of the common failure cases.
* [phantom] Omit an initialisation step now performed by the firmwareMichael Brown2008-09-241-2/+0Star
| | | | | | The firmware will now determine the right port mode on all cards, so the PXE driver doesn't have to set it. (Setting the port mode apparently breaks some newer cards.)
* [pxe] Display PXE_LOADER debug message after call to initialise()Michael Brown2008-09-231-3/+3
| | | | | | | At least one Dell system calls the UNDI loader entry point with the BIOS console disabled. The serial console is active only after a call to initialise(), so move the debug message in undi_loader() so that it can be displayed via the serial console.
* [relocate] Guard against systems that report empty memory regionsMichael Brown2008-09-231-5/+10
| | | | | | | | | If the INT 15,e820 memory map reports a region [0,0), this confuses the "truncate to even megabytes" logic, which ends up rounding the region 'down' to [0,fff00000). Fix by ensuring that the region's end address is at least 1, before we subtract 1 to obtain the "last byte in region" address.
* [memmap] Allow for 4GB+ systems in debug messageMichael Brown2008-09-231-3/+3
| | | | | | INT 15,e801 is capable of returning a memory range that extends to 4GB, so allow for this in the debug message that shows the data returned by INT 15,e801.
* [iscsi] Change default initiator name prefix to "iqn.2000-01.org.etherboot:"Michael Brown2008-09-191-1/+1
| | | | | | | | | | | | The domain etherboot.org was actually registered on 2000-01-09, not 2000-09-01. (To put it another way, it was registered on 1/9/2000 (US date format) rather than 1/9/2000 (sensible date format); this may illuminate the cause of the error.) "iqn.2000-09.org.etherboot:" is still valid as per RFC3720, but may be surprising to users, so change it to something less unexpected. Thanks to the anonymous contributor for pointing this one out.
* [undi] Scan for UNDI ROMs on 512-byte boundaries rather than 2kB boundariesMichael Brown2008-09-121-2/+2
| | | | | | | | | Apparently some BIOSes will place option ROMs on 512-byte boundaries. While this is against specification, it doesn't actually hurt anything, so we may as well increase our scan granularity to 512 bytes. Contributed by Luca <lucarx76@gmail.com>
* [util] Disable automatic CR->LF conversion in serial-console utilityMichael Brown2008-09-071-2/+2
| | | | | | DUET (the EFI test environment) seems not to handle LF, so inhibit the CR->LF conversion that the pty does for us by default. This doesn't affect operation of gPXE, which will happily accept either CR or LF.
* [pcbios] Add extra debugging messages relating to the system memory mapMichael Brown2008-09-073-4/+19
|
* [contrib] Bring bochs/qemu READMEs up to date with latest upstream codeMichael Brown2008-09-072-4/+4
|
* [pxe] Add a dummy PXENV+ entry point at UNDI_CS:0000Michael Brown2008-09-062-1/+13
| | | | | | | | | Wyse Streaming Manager server (WLDRM13.BIN) assumes that the PXENV+ entry point is at UNDI_CS:0000; apparently, somebody at Wyse has difficulty distinguishing between the words "may" and "must"... Add a dummy entry point at UNDI_CS:0000, which just jumps to the correct entry point.
* [multiboot] Allow for unspecified {load,bss}_end_addr for raw imagesMichael Brown2008-09-061-2/+5
| | | | | | | The multiboot specification states that, for raw images, if load_end_addr is zero then it should be interpreted as meaning "use the entire file", and if bss_end_addr is zero it should be interpreted as meaning "no bss".
* [util] Avoid calling fclose(NULL) in zbin.cEygene Ryabinkin2008-09-041-1/+2
| | | | | | | | Must check that argument to a fclose() is not NULL -- we can get to the 'err' label when file was not opened. fclose(NULL) is known to produce core dump on some platforms and we don't want zbin to fail so loudly. Signed-off-by: Eygene Ryabinkin <rea-fbsd@codelabs.ru>
* [libprefix] Add addr32 prefix required by older assemblersEygene Ryabinkin2008-09-041-1/+1
| | | | | | | | | | Explicitly state that we are using 32-bit addressing in 16-bit code. GNU as 2.15 (FreeBSD/amd64 7-STABLE) got confused that 32-bit registers are used in the code that was declared as 16-bit. Add explicit modifier 'addr32' to make assembler happy. Signed-off-by: Eygene Ryabinkin <rea-fbsd@codelabs.ru>
* [comboot] Add COMBOOT and COM32 supportDaniel Verkamp2008-08-2915-0/+1816
|
* [librm] Add rm stack copying functionsDaniel Verkamp2008-08-292-0/+48
|
* [librm] Make rm_sp and rm_ss globals againDaniel Verkamp2008-08-282-0/+4
|
* [libc] Mark setjmp and longjmp as __cdeclDaniel Verkamp2008-08-281-2/+2
|
* [pxe] Fill in UNDIROMID pointer in !PXE structureMichael Brown2008-08-284-6/+30
| | | | | | IBM's iSCSI Firmware Initiator checks the UNDIROMID pointer in the !PXE structure that gets created by the UNDI loader. We didn't previously fill this value in.
* [romprefix] Add UNDI ROMID structure bus type fieldMichael Brown2008-08-271-0/+1
| | | | | The IBM iSCSI Firmware Initiator complains that we don't have a bus type field in the UNDI ROMID structure, so include one.
* [phantom] Fix P3 B1 silicon bug workaroundMichael Brown2008-08-271-1/+3
| | | | | | Commit f58cc3f introduced a temporary workaround for a bug in current prototype silicon, but failed to apply it to all eight PCI functions within the device.
* [util] Fix interpretation of short jumps in Option::ROMMichael Brown2008-08-271-1/+3
| | | | | | Option::ROM was assuming that ROM images using a short jump instruction for the init entry point would have a zero byte at offset 5; this is not necessarily true.
* [romprefix] Preserve %edi when issuing INT 1A,B101Michael Brown2008-08-261-1/+3
| | | | INT 1A,B101 (get PCI BIOS version) will overwrite %edi.
* [phantom] Remove comment that no longer matches realityMichael Brown2008-08-261-3/+0Star
|
* [romprefix] Add more diagnostic messages to ROM prefixMichael Brown2008-08-261-27/+28
| | | | | | | | | Include PMM allocation result in POST banner. Include full product string in "starting execution" message. Also mark ourselves as supporting DDIM in PnP header, for completeness.
* [phantom] Temporary workaround for bug in prototype (P3 B1) siliconMichael Brown2008-08-262-1/+14
|
* [romprefix] Fix regression in UNDI loaderMichael Brown2008-08-231-2/+2
| | | | | Commit 12f203c introduced a bug that caused the UNDI loader to attempt to load the UNDI code and data segments to incorrect addresses.
* [romprefix] On a PCI3.0, non-BBS system, use the correct %cs for INT19Michael Brown2008-08-221-26/+45
| | | | | | | | On a system that doesn't support BBS, we end up hooking INT19 to gain control of the boot process. If the system is PCI3.0, we must take care to use the runtime value for %cs, rather than the POST-time value, otherwise we end up pointing INT19 to the temporary option ROM POST scratch area.
* [elf] Add execution entry point debug messages for elf/multiboot imagesMichael Brown2008-08-222-0/+3
|
* [pxe] Add extra debug messages to the PXE UDP API callsMichael Brown2008-08-211-4/+16
|
* [pxe] Fix broadcast transmissions via PXENV_UDP_WRITEMichael Brown2008-08-211-0/+1
| | | | | pxenv_udp_write() needs to specify a net device, otherwise ipv4 is unable to route broadcast transmissions.
* [undi] Fill in ProtType correctly in PXENV_UNDI_ISRMichael Brown2008-08-205-65/+145
| | | | | | | | | Determine the network-layer packet type and fill it in for UNDI clients. This is required by some NBPs such as emBoot's winBoot/i. This change requires refactoring the link-layer portions of the gPXE netdevice API, so that it becomes possible to strip the link-layer header without passing the packet up the network stack.
* [undi] Work around broken UNDI polling behaviour in winBoot/iMichael Brown2008-08-201-3/+17
| | | | | | | | Some dumb NBPs (e.g. emBoot's winBoot/i) never call PXENV_UNDI_ISR with FuncFlag=PXENV_UNDI_ISR_START; they just sit in a tight polling loop merrily violating the PXE spec with repeated calls to PXENV_UNDI_ISR_IN_PROCESS. Force a extra calls to netdev_poll() to cope with these out-of-spec clients.