david/ipxe
david
/
ipxe
Archived
1
0
Fork 0
This repository has been archived on 2020-12-06. You can view files and clone it, but cannot push or open issues or pull requests.
ipxe/src/config/config.c

353 lines
7.2 KiB
C
Raw Permalink Normal View History

2005-03-08 19:53:11 +01:00
/*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*
* You can also choose to distribute this program under the terms of
* the Unmodified Binary Distribution Licence (as given in the file
* COPYING.UBDL), provided that you have satisfied its requirements.
2005-03-08 19:53:11 +01:00
*/
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#include <config/general.h>
#include <config/console.h>
#include <config/sideband.h>
#include <config/settings.h>
/** @file
*
* Configuration options
*
* This file contains macros that pull various objects into the link
* based on definitions in configuration header files. Ideally it
* should be the only place in iPXE where one might need to use #ifdef
* for compile-time options.
*
* In the fairly common case where an object should only be considered
* for inclusion if the subsystem it depends on is present, its
* configuration macros should be placed in a file named
* <tt>config_<i>subsystem</i>.c</tt>, where @e subsystem is the
* object basename of the main source file for that subsystem. The
* build system will pull in that file if @c subsystem.c is included
* in the final iPXE executable built.
*/
PROVIDE_REQUIRING_SYMBOL();
/*
* Drag in all requested console types
*
*/
#ifdef CONSOLE_SERIAL
REQUIRE_OBJECT ( serial );
#endif
#ifdef CONSOLE_DIRECT_VGA
REQUIRE_OBJECT ( video_subr );
#endif
#ifdef CONSOLE_PC_KBD
REQUIRE_OBJECT ( pc_kbd );
#endif
#ifdef CONSOLE_SYSLOG
REQUIRE_OBJECT ( syslog );
#endif
#ifdef CONSOLE_SYSLOGS
REQUIRE_OBJECT ( syslogs );
#endif
#ifdef CONSOLE_EFI
REQUIRE_OBJECT ( efi_console );
#endif
#ifdef CONSOLE_LINUX
REQUIRE_OBJECT ( linux_console );
#endif
#ifdef CONSOLE_VMWARE
REQUIRE_OBJECT ( vmconsole );
#endif
#ifdef CONSOLE_DEBUGCON
REQUIRE_OBJECT ( debugcon );
#endif
/*
* Drag in all requested network protocols
*
*/
#ifdef NET_PROTO_IPV4
REQUIRE_OBJECT ( ipv4 );
#endif
#ifdef NET_PROTO_IPV6
REQUIRE_OBJECT ( ipv6 );
#endif
/*
* Drag in all requested PXE support
*
*/
#ifdef PXE_MENU
REQUIRE_OBJECT ( pxemenu );
#endif
#ifdef PXE_STACK
REQUIRE_OBJECT ( pxe_call );
#endif
/*
* Drag in all requested download protocols
*
*/
#ifdef DOWNLOAD_PROTO_TFTP
REQUIRE_OBJECT ( tftp );
#endif
#ifdef DOWNLOAD_PROTO_HTTP
REQUIRE_OBJECT ( http );
#endif
#ifdef DOWNLOAD_PROTO_HTTPS
REQUIRE_OBJECT ( https );
#endif
#ifdef DOWNLOAD_PROTO_FTP
REQUIRE_OBJECT ( ftp );
#endif
#ifdef DOWNLOAD_PROTO_NFS
REQUIRE_OBJECT ( nfs_open );
#endif
#ifdef DOWNLOAD_PROTO_SLAM
REQUIRE_OBJECT ( slam );
#endif
/*
* Drag in all requested SAN boot protocols
*
*/
#ifdef SANBOOT_PROTO_ISCSI
[block] Replace gPXE block-device API with an iPXE asynchronous interface The block device interface used in gPXE predates the invention of even the old gPXE data-transfer interface, let alone the current iPXE generic asynchronous interface mechanism. Bring this old code up to date, with the following benefits: o Block device commands can be cancelled by the requestor. The INT 13 layer uses this to provide a global timeout on all INT 13 calls, with the result that an unexpected passive failure mode (such as an iSCSI target ACKing the request but never sending a response) will lead to a timeout that gets reported back to the INT 13 user, rather than simply freezing the system. o INT 13,00 (reset drive) is now able to reset the underlying block device. INT 13 users, such as DOS, that use INT 13,00 as a method for error recovery now have a chance of recovering. o All block device commands are tagged, with a numerical tag that will show up in debugging output and in packet captures; this will allow easier interpretation of bug reports that include both sources of information. o The extremely ugly hacks used to generate the boot firmware tables have been eradicated and replaced with a generic acpi_describe() method (exploiting the ability of iPXE interfaces to pass through methods to an underlying interface). The ACPI tables are now built in a shared data block within .bss16, rather than each requiring dedicated space in .data16. o The architecture-independent concept of a SAN device has been exposed to the iPXE core through the sanboot API, which provides calls to hook, unhook, boot, and describe SAN devices. This allows for much more flexible usage patterns (such as hooking an empty SAN device and then running an OS installer via TFTP). Signed-off-by: Michael Brown <mcb30@ipxe.org>
2010-09-03 17:11:51 +02:00
REQUIRE_OBJECT ( iscsi );
#endif
#ifdef SANBOOT_PROTO_HTTP
REQUIRE_OBJECT ( httpblock );
#endif
/*
* Drag in all requested resolvers
*
*/
#ifdef DNS_RESOLVER
2005-04-30 16:49:41 +02:00
REQUIRE_OBJECT ( dns );
#endif
/*
* Drag in all requested image formats
*
*/
#ifdef IMAGE_NBI
REQUIRE_OBJECT ( nbi );
#endif
#ifdef IMAGE_ELF
REQUIRE_OBJECT ( elfboot );
#endif
#ifdef IMAGE_MULTIBOOT
REQUIRE_OBJECT ( multiboot );
#endif
#ifdef IMAGE_PXE
REQUIRE_OBJECT ( pxe_image );
#endif
#ifdef IMAGE_SCRIPT
REQUIRE_OBJECT ( script );
#endif
2007-01-14 05:27:25 +01:00
#ifdef IMAGE_BZIMAGE
REQUIRE_OBJECT ( bzimage );
#endif
#ifdef IMAGE_ELTORITO
REQUIRE_OBJECT ( eltorito );
#endif
#ifdef IMAGE_COMBOOT
REQUIRE_OBJECT ( comboot );
REQUIRE_OBJECT ( com32 );
REQUIRE_OBJECT ( comboot_call );
REQUIRE_OBJECT ( com32_call );
REQUIRE_OBJECT ( com32_wrapper );
REQUIRE_OBJECT ( comboot_resolv );
#endif
#ifdef IMAGE_EFI
REQUIRE_OBJECT ( efi_image );
#endif
#ifdef IMAGE_SDI
REQUIRE_OBJECT ( sdi );
#endif
2006-06-11 03:55:43 +02:00
2006-12-20 01:39:06 +01:00
/*
* Drag in all requested commands
*
*/
2007-01-14 01:06:23 +01:00
#ifdef AUTOBOOT_CMD
REQUIRE_OBJECT ( autoboot_cmd );
#endif
2006-12-20 01:39:06 +01:00
#ifdef NVO_CMD
REQUIRE_OBJECT ( nvo_cmd );
#endif
#ifdef CONFIG_CMD
REQUIRE_OBJECT ( config_cmd );
#endif
#ifdef IFMGMT_CMD
REQUIRE_OBJECT ( ifmgmt_cmd );
#endif
/* IWMGMT_CMD is brought in by net80211.c if requested */
#ifdef ROUTE_CMD
REQUIRE_OBJECT ( route_cmd );
#endif
#ifdef IMAGE_CMD
REQUIRE_OBJECT ( image_cmd );
#endif
#ifdef IMAGE_TRUST_CMD
REQUIRE_OBJECT ( image_trust_cmd );
#endif
2007-01-12 10:53:28 +01:00
#ifdef DHCP_CMD
REQUIRE_OBJECT ( dhcp_cmd );
#endif
2008-03-04 18:59:26 +01:00
#ifdef SANBOOT_CMD
REQUIRE_OBJECT ( sanboot_cmd );
#endif
#ifdef MENU_CMD
REQUIRE_OBJECT ( menu_cmd );
#endif
2009-02-17 13:01:47 +01:00
#ifdef LOGIN_CMD
REQUIRE_OBJECT ( login_cmd );
#endif
#ifdef TIME_CMD
REQUIRE_OBJECT ( time_cmd );
#endif
#ifdef DIGEST_CMD
REQUIRE_OBJECT ( digest_cmd );
#endif
#ifdef PXE_CMD
REQUIRE_OBJECT ( pxe_cmd );
#endif
#ifdef LOTEST_CMD
REQUIRE_OBJECT ( lotest_cmd );
#endif
#ifdef VLAN_CMD
REQUIRE_OBJECT ( vlan_cmd );
#endif
#ifdef POWEROFF_CMD
REQUIRE_OBJECT ( poweroff_cmd );
#endif
#ifdef REBOOT_CMD
REQUIRE_OBJECT ( reboot_cmd );
#endif
#ifdef CPUID_CMD
REQUIRE_OBJECT ( cpuid_cmd );
#endif
#ifdef SYNC_CMD
REQUIRE_OBJECT ( sync_cmd );
#endif
#ifdef SHELL_CMD
REQUIRE_OBJECT ( shell );
#endif
#ifdef NSLOOKUP_CMD
REQUIRE_OBJECT ( nslookup_cmd );
#endif
#ifdef PCI_CMD
REQUIRE_OBJECT ( pci_cmd );
#endif
#ifdef PARAM_CMD
REQUIRE_OBJECT ( param_cmd );
#endif
#ifdef NEIGHBOUR_CMD
REQUIRE_OBJECT ( neighbour_cmd );
#endif
#ifdef PING_CMD
REQUIRE_OBJECT ( ping_cmd );
#endif
#ifdef CONSOLE_CMD
REQUIRE_OBJECT ( console_cmd );
#endif
#ifdef IPSTAT_CMD
REQUIRE_OBJECT ( ipstat_cmd );
#endif
#ifdef PROFSTAT_CMD
REQUIRE_OBJECT ( profstat_cmd );
#endif
#ifdef NTP_CMD
REQUIRE_OBJECT ( ntp_cmd );
#endif
#ifdef CERT_CMD
REQUIRE_OBJECT ( cert_cmd );
#endif
2006-12-20 01:39:06 +01:00
2006-06-11 03:55:43 +02:00
/*
* Drag in miscellaneous objects
*
*/
#ifdef NULL_TRAP
2006-06-11 03:55:43 +02:00
REQUIRE_OBJECT ( nulltrap );
#endif
#ifdef GDBSERIAL
REQUIRE_OBJECT ( gdbidt );
REQUIRE_OBJECT ( gdbserial );
REQUIRE_OBJECT ( gdbstub_cmd );
#endif
#ifdef GDBUDP
REQUIRE_OBJECT ( gdbidt );
REQUIRE_OBJECT ( gdbudp );
REQUIRE_OBJECT ( gdbstub_cmd );
#endif
/*
* Drag in objects that are always required, but not dragged in via
* symbol dependencies.
*
*/
REQUIRE_OBJECT ( device );
REQUIRE_OBJECT ( embedded );
/* linux drivers aren't picked up by the parserom utility so drag them in here */
#ifdef DRIVERS_LINUX
REQUIRE_OBJECT ( tap );
#endif
/*
* Drag in relevant sideband entry points
*/
#ifdef CONFIG_BOFM
#ifdef BOFM_EFI
REQUIRE_OBJECT ( efi_bofm );
#endif /* BOFM_EFI */
#endif /* CONFIG_BOFM */
/*
* Drag in relevant settings sources
*/
#ifdef PCI_SETTINGS
REQUIRE_OBJECT ( pci_settings );
#endif
#ifdef VMWARE_SETTINGS
REQUIRE_OBJECT ( guestinfo );
#endif
#ifdef CPUID_SETTINGS
REQUIRE_OBJECT ( cpuid_settings );
#endif
#ifdef MEMMAP_SETTINGS
REQUIRE_OBJECT ( memmap_settings );
#endif
#ifdef VRAM_SETTINGS
REQUIRE_OBJECT ( vram_settings );
#endif
#ifdef ACPI_SETTINGS
REQUIRE_OBJECT ( acpi_settings );
#endif
/*
* Drag in selected keyboard map
*/
#define REQUIRE_KEYMAP_OBJECT( _map ) REQUIRE_OBJECT ( keymap_ ## _map )
#define REQUIRE_KEYMAP( _map ) REQUIRE_KEYMAP_OBJECT ( _map )
REQUIRE_KEYMAP ( KEYBOARD_MAP );