diff --git a/README b/README deleted file mode 100644 index 011aa210..00000000 --- a/README +++ /dev/null @@ -1,8 +0,0 @@ -iPXE README File - -Quick start guide: - - cd src - make - -For any more detailed instructions, see http://ipxe.org diff --git a/src/arch/i386/include/pxe_call.h b/src/arch/i386/include/pxe_call.h index e6f6605d..45af4654 100644 --- a/src/arch/i386/include/pxe_call.h +++ b/src/arch/i386/include/pxe_call.h @@ -38,24 +38,6 @@ extern void pxe_activate ( struct net_device *netdev ); extern int pxe_deactivate ( void ); extern int pxe_start_nbp ( void ); extern __asmcall void pxe_api_call ( struct i386_all_regs *ix86 ); -extern int _pxe_api_call_weak ( struct i386_all_regs *ix86 ) - __attribute__ (( weak )); - -/** - * Dispatch PXE API call weakly - * - * @v ix86 Registers for PXE call - * @ret present Zero if the PXE stack is present, nonzero if not - * - * A successful return only indicates that the PXE stack was available - * for dispatching the call; it says nothing about the success of - * whatever the call asked for. - */ -static inline int pxe_api_call_weak ( struct i386_all_regs *ix86 ) -{ - if ( _pxe_api_call_weak != NULL ) - return _pxe_api_call_weak ( ix86 ); - return -1; -} +extern int pxe_api_call_weak ( struct i386_all_regs *ix86 ); #endif /* _PXE_CALL_H */ diff --git a/src/arch/i386/interface/pxe/pxe_call.c b/src/arch/i386/interface/pxe/pxe_call.c index 2b17f70e..f6324bbf 100644 --- a/src/arch/i386/interface/pxe/pxe_call.c +++ b/src/arch/i386/interface/pxe/pxe_call.c @@ -351,7 +351,7 @@ __asmcall void pxe_api_call ( struct i386_all_regs *ix86 ) { * @v ix86 Registers for PXE call * @ret present Zero (PXE stack present) */ -int _pxe_api_call_weak ( struct i386_all_regs *ix86 ) +int pxe_api_call_weak ( struct i386_all_regs *ix86 ) { pxe_api_call ( ix86 ); return 0; diff --git a/src/arch/i386/interface/pxeparent/pxeparent_dhcp.c b/src/arch/i386/interface/pxeparent/pxeparent_dhcp.c index 439ebda3..8fe1572f 100644 --- a/src/arch/i386/interface/pxeparent/pxeparent_dhcp.c +++ b/src/arch/i386/interface/pxeparent/pxeparent_dhcp.c @@ -29,7 +29,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); /** * Present cached DHCP packet if it exists */ -void __weak_impl ( get_cached_dhcpack ) ( void ) { +void get_cached_dhcpack ( void ) { struct undi_device *undi; struct s_PXENV_GET_CACHED_INFO get_cached_info; int rc; diff --git a/src/arch/i386/interface/syslinux/comboot_call.c b/src/arch/i386/interface/syslinux/comboot_call.c index b1489efd..0c52b28a 100644 --- a/src/arch/i386/interface/syslinux/comboot_call.c +++ b/src/arch/i386/interface/syslinux/comboot_call.c @@ -318,6 +318,20 @@ static __asmcall void int21 ( struct i386_all_regs *ix86 ) { } +/** + * Dispatch PXE API call weakly + * + * @v ix86 Registers for PXE call + * @ret present Zero if the PXE stack is present, nonzero if not + * + * A successful return only indicates that the PXE stack was available + * for dispatching the call; it says nothing about the success of + * whatever the call asked for. + */ +__weak int pxe_api_call_weak ( struct i386_all_regs *ix86 __unused ) { + return -1; +} + /** * SYSLINUX API */ diff --git a/src/include/compiler.h b/src/include/compiler.h index a9067c94..654eaac2 100644 --- a/src/include/compiler.h +++ b/src/include/compiler.h @@ -179,41 +179,12 @@ REQUEST_EXPANDED ( CONFIG_SYMBOL ); /** Select file identifier for errno.h (if used) */ #define ERRFILE PREFIX_OBJECT ( ERRFILE_ ) -/** - * @defgroup weakmacros Macros to manage weak symbol definitions - * - * Weak symbols allow one to reference a function in another file - * without necessarily requiring that file to be linked in. In their - * native form, the function will be @c NULL if its file is not linked - * in; these macros provide an inline wrapper that returns an - * appropriate error indication or default value. - * - * @{ - */ #ifndef ASSEMBLY -/** Mangle @a name into its weakly-referenced implementation */ -#define __weak_impl( name ) _w_ ## name - -/** - * Declare a weak function with inline safety wrapper - * - * @v ret Return type of weak function - * @v name Name of function to expose - * @v proto Parenthesized list of arguments with types - * @v args Parenthesized list of argument names - * @v dfl Value to return if weak function is not available - */ -#define __weak_decl( ret, name, proto, args, dfl ) \ - ret __weak_impl( name ) proto __attribute__ (( weak )); \ - static inline ret name proto { \ - if ( __weak_impl( name ) ) \ - return __weak_impl( name ) args; \ - return dfl; \ - } +/** Declare a function as weak (use *before* the definition) */ +#define __weak __attribute__ (( weak )) #endif -/** @} */ /** @defgroup dbg Debugging infrastructure * @{ diff --git a/src/include/ipxe/dhcp.h b/src/include/ipxe/dhcp.h index bbfa293b..bbbe73d2 100644 --- a/src/include/ipxe/dhcp.h +++ b/src/include/ipxe/dhcp.h @@ -630,7 +630,7 @@ extern int start_pxebs ( struct job_interface *job, struct net_device *netdev, * should look for such a packet and call store_cached_dhcpack() with * it if it exists. */ -__weak_decl ( void, get_cached_dhcpack, ( void ), (), ); +extern void get_cached_dhcpack ( void ); extern void store_cached_dhcpack ( userptr_t data, size_t len ); diff --git a/src/include/ipxe/sec80211.h b/src/include/ipxe/sec80211.h index 5ac96de1..59ca3eb8 100644 --- a/src/include/ipxe/sec80211.h +++ b/src/include/ipxe/sec80211.h @@ -27,42 +27,11 @@ FILE_LICENCE ( GPL2_OR_LATER ); /** @file * * Definitions for general secured-network routines. - * - * Any function in this file which may be referenced by code which is - * not exclusive to encryption-enabled builds (e.g. sec80211_detect(), - * which is called by net80211_probe_step() to fill the net80211_wlan - * structure's security fields) must be declared as a weak symbol, - * using an inline interface similar to that used for - * sec80211_detect() below. This prevents secure network support from - * bloating general builds by any more than a few tiny hooks to call - * crypto functions when crypto structures are non-NULL. */ -int _sec80211_detect ( struct io_buffer *iob, - enum net80211_security_proto *secprot, - enum net80211_crypto_alg *crypt ) - __attribute__ (( weak )); - - -/** - * Inline safety wrapper for _sec80211_detect() - * - * @v iob I/O buffer containing beacon frame - * @ret secprot Security handshaking protocol used by network - * @ret crypt Cryptosystem used by network - * @ret rc Return status code - * - * This function transparently calls _sec80211_detect() if the file - * containing it was compiled in, or returns an error indication of - * @c -ENOTSUP if not. - */ -static inline int sec80211_detect ( struct io_buffer *iob, - enum net80211_security_proto *secprot, - enum net80211_crypto_alg *crypt ) { - if ( _sec80211_detect ) - return _sec80211_detect ( iob, secprot, crypt ); - return -ENOTSUP; -} +int sec80211_detect ( struct io_buffer *iob, + enum net80211_security_proto *secprot, + enum net80211_crypto_alg *crypt ); int sec80211_detect_ie ( int is_rsn, u8 *start, u8 *end, enum net80211_security_proto *secprot, diff --git a/src/include/usr/autoboot.h b/src/include/usr/autoboot.h index 70c1adfc..81b686b5 100644 --- a/src/include/usr/autoboot.h +++ b/src/include/usr/autoboot.h @@ -19,7 +19,6 @@ extern int boot_next_server_and_filename ( struct in_addr next_server, const char *filename ); extern int boot_root_path ( const char *root_path ); -extern int pxe_menu_boot ( struct net_device *netdev ) - __attribute__ (( weak )); +extern int pxe_menu_boot ( struct net_device *netdev ); #endif /* _USR_AUTOBOOT_H */ diff --git a/src/net/80211/net80211.c b/src/net/80211/net80211.c index 0069abaa..8df2c315 100644 --- a/src/net/80211/net80211.c +++ b/src/net/80211/net80211.c @@ -139,6 +139,17 @@ struct net80211_assoc_ctx { int times_tried; }; +/** + * Detect secure 802.11 network when security support is not available + * + * @return -ENOTSUP, always. + */ +__weak int sec80211_detect ( struct io_buffer *iob __unused, + enum net80211_security_proto *secprot __unused, + enum net80211_crypto_alg *crypt __unused ) { + return -ENOTSUP; +} + /** * @defgroup net80211_netdev Network device interface functions * @{ diff --git a/src/net/udp/dhcp.c b/src/net/udp/dhcp.c index ac03412d..7850fb4b 100644 --- a/src/net/udp/dhcp.c +++ b/src/net/udp/dhcp.c @@ -1406,6 +1406,11 @@ static struct sockaddr dhcp_peer = { .sa_family = AF_INET, }; +/** + * Get cached DHCPACK where none exists + */ +__weak void get_cached_dhcpack ( void ) {} + /** * Start DHCP state machine on a network device * diff --git a/src/usr/autoboot.c b/src/usr/autoboot.c index acc4efd6..48d1fa60 100644 --- a/src/usr/autoboot.c +++ b/src/usr/autoboot.c @@ -42,6 +42,13 @@ FILE_LICENCE ( GPL2_OR_LATER ); /** Shutdown flags for exit */ int shutdown_exit_flags = 0; +/** + * Perform PXE menu boot when PXE stack is not available + */ +__weak int pxe_menu_boot ( struct net_device *netdev __unused ) { + return -ENOTSUP; +} + /** * Identify the boot network device * @@ -155,7 +162,7 @@ static int netboot ( struct net_device *netdev ) { buf, sizeof ( buf ) ); pxe_discovery_control = fetch_uintz_setting ( NULL, &pxe_discovery_control_setting ); - if ( ( strcmp ( buf, "PXEClient" ) == 0 ) && pxe_menu_boot != NULL && + if ( ( strcmp ( buf, "PXEClient" ) == 0 ) && setting_exists ( NULL, &pxe_boot_menu_setting ) && ( ! ( ( pxe_discovery_control & PXEBS_SKIP ) && setting_exists ( NULL, &filename_setting ) ) ) ) {