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