]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/basic/efivars.h
Merge pull request #28301 from berrange/cvm-lockdown
[thirdparty/systemd.git] / src / basic / efivars.h
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
0bb2f0f1
ZJS
2#pragma once
3
4#if !ENABLE_EFI
5# include <errno.h>
6#endif
7#include <stdbool.h>
8#include <stddef.h>
9#include <stdint.h>
10
11#include "sd-id128.h"
12
c4964512 13#include "efivars-fundamental.h"
0bb2f0f1
ZJS
14#include "time-util.h"
15
e6f055cb
ZJS
16#define EFI_VENDOR_LOADER SD_ID128_MAKE(4a,67,b0,82,0a,4c,41,cf,b6,c7,44,0b,29,bb,8c,4f)
17#define EFI_VENDOR_LOADER_STR SD_ID128_MAKE_UUID_STR(4a,67,b0,82,0a,4c,41,cf,b6,c7,44,0b,29,bb,8c,4f)
18#define EFI_VENDOR_GLOBAL SD_ID128_MAKE(8b,e4,df,61,93,ca,11,d2,aa,0d,00,e0,98,03,2b,8c)
19#define EFI_VENDOR_GLOBAL_STR SD_ID128_MAKE_UUID_STR(8b,e4,df,61,93,ca,11,d2,aa,0d,00,e0,98,03,2b,8c)
20#define EFI_VENDOR_SYSTEMD SD_ID128_MAKE(8c,f2,64,4b,4b,0b,42,8f,93,87,6d,87,60,50,dc,67)
21#define EFI_VENDOR_SYSTEMD_STR SD_ID128_MAKE_UUID_STR(8c,f2,64,4b,4b,0b,42,8f,93,87,6d,87,60,50,dc,67)
8fc5c444
LP
22
23#define EFI_VARIABLE_NON_VOLATILE UINT32_C(0x00000001)
24#define EFI_VARIABLE_BOOTSERVICE_ACCESS UINT32_C(0x00000002)
25#define EFI_VARIABLE_RUNTIME_ACCESS UINT32_C(0x00000004)
0bb2f0f1 26
e6f055cb
ZJS
27/* Note that the <lowercaseuuid>-<varname> naming scheme is an efivarfs convention, i.e. part of the Linux
28 * API file system implementation for EFI. EFI itself processes UIDS in binary form.
29 */
30
31#define EFI_VENDOR_VARIABLE_STR(vendor, name) name "-" vendor
32
33#define EFI_GLOBAL_VARIABLE_STR(name) EFI_VENDOR_VARIABLE_STR(EFI_VENDOR_GLOBAL_STR, name)
34#define EFI_LOADER_VARIABLE_STR(name) EFI_VENDOR_VARIABLE_STR(EFI_VENDOR_LOADER_STR, name)
35#define EFI_SYSTEMD_VARIABLE_STR(name) EFI_VENDOR_VARIABLE_STR(EFI_VENDOR_SYSTEMD_STR, name)
36
37#define EFI_GLOBAL_VARIABLE(name) EFI_GLOBAL_VARIABLE_STR(STRINGIFY(name))
38#define EFI_LOADER_VARIABLE(name) EFI_LOADER_VARIABLE_STR(STRINGIFY(name))
39#define EFI_SYSTEMD_VARIABLE(name) EFI_SYSTEMD_VARIABLE_STR(STRINGIFY(name))
40
41#define EFIVAR_PATH(variable) "/sys/firmware/efi/efivars/" variable
42#define EFIVAR_CACHE_PATH(variable) "/run/systemd/efivars/" variable
43
0bb2f0f1
ZJS
44#if ENABLE_EFI
45
187513fd
LP
46int efi_get_variable(const char *variable, uint32_t *attribute, void **ret_value, size_t *ret_size);
47int efi_get_variable_string(const char *variable, char **ret);
e6f055cb
ZJS
48int efi_set_variable(const char *variable, const void *value, size_t size);
49int efi_set_variable_string(const char *variable, const char *p);
0bb2f0f1 50
c7d26acc
AP
51bool is_efi_boot(void);
52bool is_efi_secure_boot(void);
c4964512 53SecureBootMode efi_get_secure_boot_mode(void);
c7d26acc 54
209b2592 55int cache_efi_options_variable(void);
187513fd
LP
56int systemd_efi_options_variable(char **ret);
57int systemd_efi_options_efivarfs_if_newer(char **ret);
53aa0d02 58
0bb2f0f1
ZJS
59#else
60
e6f055cb 61static inline int efi_get_variable(const char *variable, uint32_t *attribute, void **value, size_t *size) {
0bb2f0f1
ZJS
62 return -EOPNOTSUPP;
63}
64
187513fd 65static inline int efi_get_variable_string(const char *variable, char **ret) {
0bb2f0f1
ZJS
66 return -EOPNOTSUPP;
67}
68
e6f055cb 69static inline int efi_set_variable(const char *variable, const void *value, size_t size) {
0bb2f0f1
ZJS
70 return -EOPNOTSUPP;
71}
72
e6f055cb 73static inline int efi_set_variable_string(const char *variable, const char *p) {
0bb2f0f1
ZJS
74 return -EOPNOTSUPP;
75}
76
c7d26acc
AP
77static inline bool is_efi_boot(void) {
78 return false;
79}
80
81static inline bool is_efi_secure_boot(void) {
82 return false;
83}
84
c4964512
JJ
85static inline SecureBootMode efi_get_secure_boot_mode(void) {
86 return SECURE_BOOT_UNKNOWN;
c7d26acc
AP
87}
88
8d2d6416
LB
89static inline int cache_efi_options_variable(void) {
90 return -EOPNOTSUPP;
91}
92
2536752d 93static inline int systemd_efi_options_variable(char **line) {
53aa0d02
ZJS
94 return -ENODATA;
95}
ad2d6880
ZJS
96
97static inline int systemd_efi_options_efivarfs_if_newer(char **line) {
98 return -ENODATA;
99}
0bb2f0f1 100#endif