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