#ifndef _GPXE_API_H
#define _GPXE_API_H

/** @file
 *
 * gPXE internal APIs
 *
 * There are various formally-defined APIs internal to gPXE, with
 * several differing implementations specific to particular execution
 * environments (e.g. PC BIOS, EFI, LinuxBIOS).
 *
 */

/** @defgroup Single-implementation APIs
 *
 * These are APIs for which only a single implementation may be
 * compiled in at any given time.
 *
 * @{
 */

/**
 * Calculate function implementation name
 *
 * @v _prefix		Subsystem prefix
 * @v _api_func		API function
 * @ret _subsys_func	Subsystem API function
 *
 * The subsystem prefix should be an empty string for the currently
 * selected subsystem, and should be a subsystem-unique string for all
 * other subsystems.
 */
#define SINGLE_API_NAME( _prefix, _api_func ) _prefix ## _api_func

/**
 * Calculate static inline function name
 *
 * @v _prefix		Subsystem prefix
 * @v _api_func		API function
 * @ret _subsys_func	Subsystem API function
 */
#define SINGLE_API_INLINE( _prefix, _api_func )	\
	SINGLE_API_NAME ( _prefix, _api_func )

/**
 * Provide an API implementation
 *
 * @v _prefix		Subsystem prefix
 * @v _api_func		API function
 * @v _func		Implementing function
 */
#define PROVIDE_SINGLE_API( _prefix, _api_func, _func )			      \
	/* Ensure that _api_func exists */				      \
	typeof ( _api_func ) _api_func;					      \
	/* Ensure that _func exists */					      \
	typeof ( _func ) _func;						      \
	/* Ensure that _func is type-compatible with _api_func */	      \
	typeof ( _api_func ) _func;					      \
	/* Ensure that _subsys_func is non-static */			      \
	extern typeof ( _api_func ) SINGLE_API_NAME ( _prefix, _api_func );   \
	/* Provide symbol alias from _subsys_func to _func */		      \
	typeof ( _api_func ) SINGLE_API_NAME ( _prefix, _api_func )	      \
		__attribute__ (( alias ( #_func ) ));

/**
 * Provide a static inline API implementation
 *
 * @v _prefix		Subsystem prefix
 * @v _api_func		API function
 */
#define PROVIDE_SINGLE_API_INLINE( _prefix, _api_func )			      \
	/* Ensure that _api_func exists */				      \
	typeof ( _api_func ) _api_func;					      \
	/* Ensure that _subsys_func exists and is static */		      \
	static typeof ( SINGLE_API_INLINE ( _prefix, _api_func ) )	      \
		SINGLE_API_INLINE ( _prefix, _api_func );		      \
	/* Ensure that _subsys_func is type-compatible with _api_func */      \
	typeof ( _api_func ) SINGLE_API_INLINE ( _prefix, _api_func );

/** @} */

#endif /* _GPXE_API_H */
