2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering#pragma once
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering/***
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering This file is part of systemd.
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering Copyright 2013 Lennart Poettering
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering systemd is free software; you can redistribute it and/or modify it
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering under the terms of the GNU Lesser General Public License as published by
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering the Free Software Foundation; either version 2.1 of the License, or
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering (at your option) any later version.
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering systemd is distributed in the hope that it will be useful, but
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering WITHOUT ANY WARRANTY; without even the implied warranty of
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering Lesser General Public License for more details.
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering You should have received a copy of the GNU Lesser General Public License
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering along with systemd; If not, see <http://www.gnu.org/licenses/>.
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering***/
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering
f4ce2b3e5ce93b83f14f8785e205ebb5a9b8c1dfLennart Poettering#include <stdbool.h>
a8fbdf5424be099ba1b2b1ec261c02b8759d6b0cThomas Hindoe Paaboel Andersen#include <stddef.h>
a8fbdf5424be099ba1b2b1ec261c02b8759d6b0cThomas Hindoe Paaboel Andersen#include <stdint.h>
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering#include "sd-id128.h"
71d35b6b5563817dfbe757ab9e3b9f018b2db491Thomas Hindoe Paaboel Andersen
f4ce2b3e5ce93b83f14f8785e205ebb5a9b8c1dfLennart Poettering#include "time-util.h"
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poettering
7b4d7cc08283e5485dcfa49ffdf1915de1d5e81bKay Sievers#define EFI_VENDOR_LOADER SD_ID128_MAKE(4a,67,b0,82,0a,4c,41,cf,b6,c7,44,0b,29,bb,8c,4f)
7b4d7cc08283e5485dcfa49ffdf1915de1d5e81bKay Sievers#define EFI_VENDOR_GLOBAL SD_ID128_MAKE(8b,e4,df,61,93,ca,11,d2,aa,0d,00,e0,98,03,2b,8c)
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers#define EFI_VARIABLE_NON_VOLATILE 0x0000000000000001
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x0000000000000002
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers#define EFI_VARIABLE_RUNTIME_ACCESS 0x0000000000000004
7b4d7cc08283e5485dcfa49ffdf1915de1d5e81bKay Sievers
733dbdc53425a00ac95328ef531bbfce263df5ecThomas Hindoe Paaboel Andersen#ifdef ENABLE_EFI
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
9cde64ff264c432fc83be638e57d8fd6392793a6Lennart Poetteringbool is_efi_boot(void);
9df49b33583e8a7d0a252bc5bd532fd2448ef0c8Tom Gundersenbool is_efi_secure_boot(void);
9df49b33583e8a7d0a252bc5bd532fd2448ef0c8Tom Gundersenbool is_efi_secure_boot_setup_mode(void);
5bdf22430e367799dfa66c724144b624c5479518Jan Janssenint efi_reboot_to_firmware_supported(void);
5bdf22430e367799dfa66c724144b624c5479518Jan Janssenint efi_get_reboot_to_firmware(void);
5bdf22430e367799dfa66c724144b624c5479518Jan Janssenint efi_set_reboot_to_firmware(bool value);
34e5a31ec5897de8ba1436dad53df99637569d0aLennart Poettering
2e3d069236777cd62f755a02f4a239306b4ad21aLennart Poetteringint efi_get_variable(sd_id128_t vendor, const char *name, uint32_t *attribute, void **value, size_t *size);
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sieversint efi_set_variable(sd_id128_t vendor, const char *name, const void *value, size_t size);
9cde64ff264c432fc83be638e57d8fd6392793a6Lennart Poetteringint efi_get_variable_string(sd_id128_t vendor, const char *name, char **p);
7b4d7cc08283e5485dcfa49ffdf1915de1d5e81bKay Sievers
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sieversint efi_get_boot_option(uint16_t nr, char **title, sd_id128_t *part_uuid, char **path, bool *active);
0974a682d155a5874123ba7de9c1e314c6681e0fKay 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);
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sieversint efi_remove_boot_option(uint16_t id);
9cde64ff264c432fc83be638e57d8fd6392793a6Lennart Poetteringint efi_get_boot_order(uint16_t **order);
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sieversint efi_set_boot_order(uint16_t *order, size_t n);
9cde64ff264c432fc83be638e57d8fd6392793a6Lennart Poetteringint efi_get_boot_options(uint16_t **options);
34e5a31ec5897de8ba1436dad53df99637569d0aLennart Poettering
c51d84dc09476d9c06b8aac726220bf3c7d62e8dKay Sieversint efi_loader_get_device_part_uuid(sd_id128_t *u);
c51d84dc09476d9c06b8aac726220bf3c7d62e8dKay Sieversint efi_loader_get_boot_usec(usec_t *firmware, usec_t *loader);
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sievers
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen#else
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersenstatic inline bool is_efi_boot(void) {
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen return false;
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen}
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersenstatic inline bool is_efi_secure_boot(void) {
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen return false;
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen}
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersenstatic inline bool is_efi_secure_boot_setup_mode(void) {
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen return false;
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen}
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersenstatic inline int efi_reboot_to_firmware_supported(void) {
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen return -EOPNOTSUPP;
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen}
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersenstatic inline int efi_get_reboot_to_firmware(void) {
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen return -EOPNOTSUPP;
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen}
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersenstatic inline int efi_set_reboot_to_firmware(bool value) {
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen return -EOPNOTSUPP;
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen}
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersenstatic inline int efi_get_variable(sd_id128_t vendor, const char *name, uint32_t *attribute, void **value, size_t *size) {
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen return -EOPNOTSUPP;
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen}
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersenstatic inline int efi_set_variable(sd_id128_t vendor, const char *name, const void *value, size_t size) {
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen return -EOPNOTSUPP;
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen}
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersenstatic inline int efi_get_variable_string(sd_id128_t vendor, const char *name, char **p) {
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen return -EOPNOTSUPP;
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen}
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersenstatic inline int efi_get_boot_option(uint16_t nr, char **title, sd_id128_t *part_uuid, char **path, bool *active) {
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen return -EOPNOTSUPP;
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen}
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersenstatic 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) {
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen return -EOPNOTSUPP;
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen}
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersenstatic inline int efi_remove_boot_option(uint16_t id) {
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen return -EOPNOTSUPP;
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen}
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersenstatic inline int efi_get_boot_order(uint16_t **order) {
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen return -EOPNOTSUPP;
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen}
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersenstatic inline int efi_set_boot_order(uint16_t *order, size_t n) {
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen return -EOPNOTSUPP;
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen}
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersenstatic inline int efi_get_boot_options(uint16_t **options) {
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen return -EOPNOTSUPP;
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen}
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersenstatic inline int efi_loader_get_device_part_uuid(sd_id128_t *u) {
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen return -EOPNOTSUPP;
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen}
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersenstatic inline int efi_loader_get_boot_usec(usec_t *firmware, usec_t *loader) {
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen return -EOPNOTSUPP;
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen}
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen#endif
b28ce7c6dbe341d6f5769d31014ab8411257db7dTom Gundersen
0974a682d155a5874123ba7de9c1e314c6681e0fKay Sieverschar *efi_tilt_backslashes(char *s);