efivars.h revision 733dbdc53425a00ac95328ef531bbfce263df5ec
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers#pragma once
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers/***
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers This file is part of systemd.
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers Copyright 2013 Lennart Poettering
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers systemd is free software; you can redistribute it and/or modify it
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers under the terms of the GNU Lesser General Public License as published by
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers the Free Software Foundation; either version 2.1 of the License, or
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers (at your option) any later version.
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers systemd is distributed in the hope that it will be useful, but
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers WITHOUT ANY WARRANTY; without even the implied warranty of
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers Lesser General Public License for more details.
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers You should have received a copy of the GNU Lesser General Public License
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers along with systemd; If not, see <http://www.gnu.org/licenses/>.
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers***/
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers#include <stdbool.h>
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers#include "sd-id128.h"
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers#include "time-util.h"
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers#define EFI_VENDOR_LOADER SD_ID128_MAKE(4a,67,b0,82,0a,4c,41,cf,b6,c7,44,0b,29,bb,8c,4f)
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers#define EFI_VENDOR_GLOBAL SD_ID128_MAKE(8b,e4,df,61,93,ca,11,d2,aa,0d,00,e0,98,03,2b,8c)
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers#define EFI_VARIABLE_NON_VOLATILE 0x0000000000000001
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x0000000000000002
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers#define EFI_VARIABLE_RUNTIME_ACCESS 0x0000000000000004
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers#ifdef ENABLE_EFI
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversbool is_efi_boot(void);
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversbool is_efi_secure_boot(void);
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversbool is_efi_secure_boot_setup_mode(void);
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversint efi_reboot_to_firmware_supported(void);
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversint efi_get_reboot_to_firmware(void);
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversint efi_set_reboot_to_firmware(bool value);
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversint efi_get_variable(sd_id128_t vendor, const char *name, uint32_t *attribute, void **value, size_t *size);
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversint efi_set_variable(sd_id128_t vendor, const char *name, const void *value, size_t size);
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversint efi_get_variable_string(sd_id128_t vendor, const char *name, char **p);
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversint efi_get_boot_option(uint16_t nr, char **title, sd_id128_t *part_uuid, char **path, bool *active);
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversint efi_add_boot_option(uint16_t id, const char *title, uint32_t part, uint64_t pstart, uint64_t psize, sd_id128_t part_uuid, const char *path);
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversint efi_remove_boot_option(uint16_t id);
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversint efi_get_boot_order(uint16_t **order);
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversint efi_set_boot_order(uint16_t *order, size_t n);
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversint efi_get_boot_options(uint16_t **options);
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversint efi_loader_get_device_part_uuid(sd_id128_t *u);
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversint efi_loader_get_boot_usec(usec_t *firmware, usec_t *loader);
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers#else
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversstatic inline bool is_efi_boot(void) {
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers return false;
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers}
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversstatic inline bool is_efi_secure_boot(void) {
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers return false;
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers}
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversstatic inline bool is_efi_secure_boot_setup_mode(void) {
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers return false;
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers}
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversstatic inline int efi_reboot_to_firmware_supported(void) {
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers return -EOPNOTSUPP;
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers}
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversstatic inline int efi_get_reboot_to_firmware(void) {
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers return -EOPNOTSUPP;
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers}
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversstatic inline int efi_set_reboot_to_firmware(bool value) {
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers return -EOPNOTSUPP;
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers}
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversstatic inline int efi_get_variable(sd_id128_t vendor, const char *name, uint32_t *attribute, void **value, size_t *size) {
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers return -EOPNOTSUPP;
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers}
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversstatic inline int efi_set_variable(sd_id128_t vendor, const char *name, const void *value, size_t size) {
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers return -EOPNOTSUPP;
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers}
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversstatic inline int efi_get_variable_string(sd_id128_t vendor, const char *name, char **p) {
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers return -EOPNOTSUPP;
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers}
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers
20bbd54f603994a3cc211d2795de16550882ed8dKay Sieversstatic inline int efi_get_boot_option(uint16_t nr, char **title, sd_id128_t *part_uuid, char **path, bool *active) {
20bbd54f603994a3cc211d2795de16550882ed8dKay Sievers return -EOPNOTSUPP;
dbf61afb29e016fe1b4ac48312a782df1d60a3e6Kay Sievers}
dbf61afb29e016fe1b4ac48312a782df1d60a3e6Kay Sievers
dbf61afb29e016fe1b4ac48312a782df1d60a3e6Kay Sieversstatic inline int efi_add_boot_option(uint16_t id, const char *title, uint32_t part, uint64_t pstart, uint64_t psize, sd_id128_t part_uuid, const char *path) {
dbf61afb29e016fe1b4ac48312a782df1d60a3e6Kay Sievers return -EOPNOTSUPP;
dbf61afb29e016fe1b4ac48312a782df1d60a3e6Kay Sievers}
static inline int efi_remove_boot_option(uint16_t id) {
return -EOPNOTSUPP;
}
static inline int efi_get_boot_order(uint16_t **order) {
return -EOPNOTSUPP;
}
static inline int efi_set_boot_order(uint16_t *order, size_t n) {
return -EOPNOTSUPP;
}
static inline int efi_get_boot_options(uint16_t **options) {
return -EOPNOTSUPP;
}
static inline int efi_loader_get_device_part_uuid(sd_id128_t *u) {
return -EOPNOTSUPP;
}
static inline int efi_loader_get_boot_usec(usec_t *firmware, usec_t *loader) {
return -EOPNOTSUPP;
}
#endif
char *efi_tilt_backslashes(char *s);