xref: /freebsd/sys/compat/linuxkpi/common/include/linux/efi.h (revision b72ae900d4348118829fe04abdc11b620930c30f)
189bb7f9bSVladimir Kondratyev /*-
289bb7f9bSVladimir Kondratyev  * SPDX-License-Identifier: BSD-2-Clause
389bb7f9bSVladimir Kondratyev  *
489bb7f9bSVladimir Kondratyev  * Copyright (c) 2021 Vladimir Kondratyev <wulf@FreeBSD.org>
589bb7f9bSVladimir Kondratyev  *
689bb7f9bSVladimir Kondratyev  * Redistribution and use in source and binary forms, with or without
789bb7f9bSVladimir Kondratyev  * modification, are permitted provided that the following conditions
889bb7f9bSVladimir Kondratyev  * are met:
989bb7f9bSVladimir Kondratyev  *
1089bb7f9bSVladimir Kondratyev  * 1. Redistributions of source code must retain the above copyright
1189bb7f9bSVladimir Kondratyev  *    notice, this list of conditions and the following disclaimer.
1289bb7f9bSVladimir Kondratyev  * 2. Redistributions in binary form must reproduce the above copyright
1389bb7f9bSVladimir Kondratyev  *    notice, this list of conditions and the following disclaimer in the
1489bb7f9bSVladimir Kondratyev  *    documentation and/or other materials provided with the distribution.
1589bb7f9bSVladimir Kondratyev  *
1689bb7f9bSVladimir Kondratyev  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1789bb7f9bSVladimir Kondratyev  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1889bb7f9bSVladimir Kondratyev  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
1989bb7f9bSVladimir Kondratyev  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2089bb7f9bSVladimir Kondratyev  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2189bb7f9bSVladimir Kondratyev  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2289bb7f9bSVladimir Kondratyev  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2389bb7f9bSVladimir Kondratyev  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2489bb7f9bSVladimir Kondratyev  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2589bb7f9bSVladimir Kondratyev  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2689bb7f9bSVladimir Kondratyev  */
2789bb7f9bSVladimir Kondratyev 
28307f78f3SVladimir Kondratyev #ifndef _LINUXKPI_LINUX_EFI_H_
29307f78f3SVladimir Kondratyev #define	_LINUXKPI_LINUX_EFI_H_
3089bb7f9bSVladimir Kondratyev 
3189bb7f9bSVladimir Kondratyev #include <sys/param.h>
32325ba120SBjoern A. Zeeb #include <sys/queue.h>
3389bb7f9bSVladimir Kondratyev #include <sys/linker.h>
3489bb7f9bSVladimir Kondratyev #include <sys/systm.h>
3589bb7f9bSVladimir Kondratyev 
3689bb7f9bSVladimir Kondratyev #include <machine/md_var.h>
3789bb7f9bSVladimir Kondratyev #include <machine/metadata.h>
3889bb7f9bSVladimir Kondratyev 
3989bb7f9bSVladimir Kondratyev #define	EFI_BOOT		0
4089bb7f9bSVladimir Kondratyev 
4189bb7f9bSVladimir Kondratyev static inline bool
__efi_enabled(int feature)4289bb7f9bSVladimir Kondratyev __efi_enabled(int feature)
4389bb7f9bSVladimir Kondratyev {
4489bb7f9bSVladimir Kondratyev 	bool enabled = false;
4589bb7f9bSVladimir Kondratyev 
4689bb7f9bSVladimir Kondratyev 	switch (feature) {
4789bb7f9bSVladimir Kondratyev 	case EFI_BOOT:
4889bb7f9bSVladimir Kondratyev #ifdef __amd64__
4989bb7f9bSVladimir Kondratyev 		/* Use cached value on amd64 */
5089bb7f9bSVladimir Kondratyev 		enabled = efi_boot;
5189bb7f9bSVladimir Kondratyev #elif defined(MODINFOMD_EFI_MAP)
52*b72ae900SAhmad Khalifa 		enabled = preload_search_info(preload_kmdp,
5389bb7f9bSVladimir Kondratyev 		    MODINFO_METADATA | MODINFOMD_EFI_MAP) != NULL;
5489bb7f9bSVladimir Kondratyev #endif
5589bb7f9bSVladimir Kondratyev 		break;
5689bb7f9bSVladimir Kondratyev 	default:
5789bb7f9bSVladimir Kondratyev 		break;
5889bb7f9bSVladimir Kondratyev 	}
5989bb7f9bSVladimir Kondratyev 
6089bb7f9bSVladimir Kondratyev 	return (enabled);
6189bb7f9bSVladimir Kondratyev }
6289bb7f9bSVladimir Kondratyev 
6389bb7f9bSVladimir Kondratyev #define	efi_enabled(x)	({					\
6489bb7f9bSVladimir Kondratyev 	_Static_assert((x) == EFI_BOOT, "unsupported feature");	\
6589bb7f9bSVladimir Kondratyev 	__efi_enabled(x);					\
6689bb7f9bSVladimir Kondratyev })
6789bb7f9bSVladimir Kondratyev 
68307f78f3SVladimir Kondratyev #endif	/* _LINUXKPI_LINUX_EFI_H_ */
69