summaryrefslogtreecommitdiffstats
path: root/src/arch
Commit message (Collapse)AuthorAgeFilesLines
* [NETDEV] Add notion of link stateMichael Brown2008-04-221-0/+3
| | | | | | | | | | | Add ability for network devices to flag link up/down state to the networking core. Autobooting code will now wait for link-up before attempting DHCP. IPoIB reflects the Infiniband link state as the network device link state (which is not strictly correct; we also need a succesful IPoIB IPv4 broadcast group join), but is probably more informative.
* [HCI] Display "Not an executable image" when appropriateMichael Brown2008-04-081-0/+8
| | | | | | | | | | | | | PXE is a catch-all image format with no signature checks. If an unsupported image file is loaded, it will be treated as a PXE image. In most cases, the image will be too large to be loaded as a PXE image (which has to fit in base memory), so the error returned to the user will be that the segment could not fit within the memory region. Add an explicit check to pxe_image.c to reject images larger than base memory with ENOEXEC. Add ENOEXEC to the error string table.
* [Settings] Expose SMBIOS via settings APIMichael Brown2008-03-285-129/+256
| | | | In particular, expose the system UUID as a setting ("smbios/uuid").
* [PXEXT] Add FILE_API_CHECK API functionH. Peter Anvin2008-03-261-0/+5
| | | | | Add FILE_API_CHECK to the PXEXT API so the NBP can query the availability and status of the API.
* [Settings] Remove assumption that all settings have DHCP tag valuesMichael Brown2008-03-251-4/+3Star
| | | | | | | | | | | | Allow for settings to be described by something other than a DHCP option tag if desirable. Currently used only for the MAC address setting. Separate out fake DHCP packet creation code from dhcp.c to fakedhcp.c. Remove notion of settings from dhcppkt.c. Rationalise dhcp.c to use settings API only for final registration of the DHCP options, rather than using {store,fetch}_setting throughout.
* [libc] Use __builtin_va_list et al in stdarg.hMichael Brown2008-03-241-22/+0Star
| | | | | The home-grown versions don't work properly for static variadic functions, when gcc can choose to use a non-standard calling convention.
* [DHCP] Fix up fake-packet creation as used by PXENV_GET_CACHED_INFOMichael Brown2008-03-231-4/+2Star
| | | | | | | | | | | Add dedicated functions create_dhcpdiscover(), create_dhcpack() and create_proxydhcpack() for use by external code such as the PXE preboot code. Register ProxyDHCP options under the global scope "proxydhcp". Unregister previously-acquired DHCP and ProxyDHCP settings when DHCP succeeds.
* [Settings] Migrate DHCP and NVO code to the new settings API (untested)Michael Brown2008-03-211-4/+4
|
* Merge branch 'pxerom-pmm'Michael Brown2008-03-114-305/+482
|\
| * [PXE] PMM now tested and workingMichael Brown2008-03-111-1/+1
| | | | | | | | Minor bugfix: 4 x 2 = 8, not 16
| * [prefix] Cope with image source addresses outside base memoryMichael Brown2008-03-111-121/+114Star
| | | | | | | | | | | | When PMM is used, the gPXE image source will no longer be in base memory. Decompression of .text16 and .data16 can therefore no longer be done in real mode.
| * [PXE] Improve PnP/BBS detectionMichael Brown2008-03-111-19/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | Use BBS installation check to see if we need to hook INT19 even on a PnP BIOS. Verify that $PnP signature is paragraph-aligned; bochs/qemu BIOS provides a dummy $PnP signature with no valid entry point, and deliberately unaligns the signature to indicate that it is not properly valid. Print message if INT19 is hooked. Attempt to use PMM even if BBS check failed.
| * [prefix] Add printing functions to libprefix.SMichael Brown2008-03-113-128/+112Star
| | | | | | | | | | Move the printing functions from pxeprefix.S into libprefix.S, so they are available for debug from any prefix.
| * [PXE] Add PMM support to romprefix.S (untested)Michael Brown2008-03-093-73/+243
| | | | | | | | | | | | | | | | | | | | ROM initialisation vector now attempts to allocate a 2MB block using PMM. If successful, it copies the ROM image to this block, then shrinks the ROM image to allow for more option ROMs. If unsuccessful, it leaves the ROM as-is. ROM BEV now attempts to return to the BIOS, resorting to INT 18 only if the BIOS stack has been corrupted.
* | Merge branch 'xl0-timer'Michael Brown2008-03-1010-231/+206Star
|\ \ | |/ |/|
| * Use plain C in timer_rdtsc for division instead of inline asssembly.Alexey Zaytsev2008-03-061-43/+21Star
| | | | | | | | | | | | This also fixes a bug in rdtsc_currticks when the result did not fix in %eax Signed-off-by: Alexey Zaytsev <zaytsev.a@protei.ru>
| * fix the rdtsc namimgAlexey Zaytsev2008-03-022-8/+8
| |
| * CleanupsAlexey Zaytsev2008-03-022-2/+6
| | | | | | | | | | | | | | | | Replace a printf with a DBG in timer_rtdsc.c Replace a printf in timer.c with assert Return proper error codes from timer drivers Signed-off-by: Alexey Zaytsev <alexey.zaytsev@gmail.com>
| * Modify gPXE core and drivers to work with the new timer subsystemAlexey Zaytsev2008-03-023-16/+4Star
| | | | | | | | Signed-off-by: Alexey Zaytsev <alexey.zaytsev@gmail.com>
| * Introduce the new timer subsystem.Alexey Zaytsev2008-03-026-215/+220
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Timer subsystem initialization code in core/timer.c Split the BIOS and RTDSC timer drivers from i386_timer.c Split arch/i386/firmware/pcbios/bios.c into the RTSDC timer driver and arch/i386/core/nap.c Split the headers properly: include/unistd.h - delay functions to be used by the gPXE core and drivers. include/gpxe/timer.h - the fimer subsystem interface to be used by the timer drivers and currticks() to be used by the code gPXE subsystems. include/latch.h - removed include/timer.h - scheduled for removal. Some driver are using currticks, which is only for core subsystems. Signed-off-by: Alexey Zaytsev <alexey.zaytsev@gmail.com>
* | [PXEXT] Add PXENV_FILE_EXEC call to PXE extensions API.Michael Brown2008-03-041-0/+5
|/ | | | | | | | This allows pxelinux to execute arbitrary gPXE commands. This is remarkably unsafe (not least because some of the commands will assume full ownership of memory and do nasty things like edit the e820 map underneath the calling pxelinux), but it does allow access to the "sanboot" command.
* Add DBGLVL_IO to trace all memory-mapped I/O.Michael Brown2008-02-211-7/+40
|
* Guard against corruption of top half of %esp during UNDI ISRMichael Brown2008-02-131-0/+3
|
* Merge branch 'master' of rom.etherboot.org:/pub/scm/gpxeMichael Brown2008-02-111-0/+2
|\
| * undiisr.S: save/restore upper half of %eflagsH. Peter Anvin2008-02-111-0/+2
| | | | | | | | | | | | Since we don't know what the UNDI code does, it is safest to save/restore %eflags even though the lower half of %eflags is automatically saved by the interrupt itself.
| * UNDI ISR: save and restore 32-bit registersH. Peter Anvin2008-02-111-4/+7
| | | | | | | | | | | | | | | | | | | | | | As written, if the if the UNDI ISR call clobbers the upper halves of any of the GPRs (which by convention it is permitted to do, and by paranoia should be expected to do) then nothing in the interrupt handler will recover the state. Additionally, save/restore %fs and %gs out of sheer paranoia - it's a cheap enough operation, and may prevent problems due to poorly written UNDI stacks.
* | UNDI ISR: save and restore 32-bit registersH. Peter Anvin2008-02-111-4/+7
| | | | | | | | | | | | | | | | | | | | | | As written, if the if the UNDI ISR call clobbers the upper halves of any of the GPRs (which by convention it is permitted to do, and by paranoia should be expected to do) then nothing in the interrupt handler will recover the state. Additionally, save/restore %fs and %gs out of sheer paranoia - it's a cheap enough operation, and may prevent problems due to poorly written UNDI stacks.
* | Use internal 16-bit stack for added safety.Michael Brown2008-02-111-0/+4
|/
* Remove the (unused) option to override _prefix_link_addr,Michael Brown2007-12-071-14/+4Star
| | | | | | | | | | | _textdata_link_addr, _load_addr and _max_align in the linker scripts. A bug in some versions of ld causes segfaults if the DEFINED() macro is used in a linker script *and* the -Map option to ld is present. We don't currently need to override any of these values; if we need to do so in future then the solution will probably be to always specify the values on the ld command line, and have the linker script not define them at all.
* Fix compiler warnings that appear only on OpenBSD.Michael Brown2007-12-067-14/+14
|
* Add UUID to DHCP request as option 97 (if available).Michael Brown2007-11-212-0/+11
|
* Added definition of a UUID and uuid_ntoa() (for debugging), andMichael Brown2007-11-212-19/+10Star
| | | | implemented smbios_get_uuid().
* Update SMBIOS internal API to be easier to use, and not to requireMichael Brown2007-11-212-101/+214
| | | | potentially exorbitant amounts of stack space.
* Replace "Etherboot" strings with "gPXE".Michael Brown2007-11-201-4/+4
|
* Allow space for the kernel's real-mode .bss. Previously we weren'tMichael Brown2007-11-042-1/+9
| | | | | allowing any space for this, which makes it surprising that bzImage loading ever worked.
* Add missing attribute(packed) to two structures.Michael Brown2007-10-291-2/+2
|
* Ensure that empty e820 regions are skipped even at the end of theMichael Brown2007-10-101-11/+18
| | | | | | | | | memory map. (We achieve this by setting CF on the last entry if it is zero-length; this avoids the need to look ahead to see at each entry if the *next* entry would be both the last entry and zero-length). This fixes the "0kB base memory" error message upon starting Windows 2003 on a SunFire X2100.
* Redefine bzimage_exec_context::mem_limit to be the highest permissibleMichael Brown2007-09-281-3/+4
| | | | | | | | | | | byte, rather than the number of permissible bytes (i.e. subtract one from the value under the previous definition to get the value under the new definition). This avoids integer overflow on 64-bit kernels, where bzhdr.initrd_addr_max may be 0xffffffffffffffff; under the old behaviour we set mem_limit equal to initrd_addr_max+1, which meant it ended up as zero. Kernel loads would fail with ENOBUFS.
* Switch rm_ss and rm_sp back to being words; it'll make it lessMichael Brown2007-09-251-7/+7
| | | | confusing to read the code.
* Don't use the "rep ss movsb" trick to copy the RM stack to the PMMichael Brown2007-09-251-31/+34
| | | | stack; it breaks vmxassist.
* rm_ss, rm_sp, and pm_esp don't need to be accessed from anywhereMichael Brown2007-09-253-54/+0Star
| | | | outside of librm.S.
* Minor refactoring to eliminate duplication.Michael Brown2007-09-251-49/+39Star
|
* Use full protected mode for access to high memory within prefix, toMichael Brown2007-09-251-169/+237
| | | | | work around limitations in real-mode virtualisation support on Intel VT-capable chips.
* Added more verbose memory-map debugging.Michael Brown2007-09-212-11/+43
| | | | | Added redundant call to get_memmap() in int13_boot() immediately before jumping to boot sector, to assist in debugging.
* Add const attribute to byte-swapping functionsMichael Brown2007-09-211-3/+3
|
* Added missing .kpxe prefix.Michael Brown2007-09-061-0/+1
|
* Auto-assign drive number only if set to 0xff; almost all applicationsMichael Brown2007-08-231-2/+3
| | | | require that we use drive 0x80, so it should probably be the default.
* Separate out arch-independent parts of stdint.hMichael Brown2007-08-171-21/+3Star
|
* Add PXE FILE API.Michael Brown2007-08-041-0/+25
|
* Place multiboot command lines in base memory; Xen won't pick them upMichael Brown2007-08-031-36/+69
| | | | otherwise. :(