2
efivars_sysfs.[ch] - Manipulates EFI variables as exported in /sys/firmware/efi/vars
4
Copyright (C) 2001,2003 Dell Computer Corporation <Matt_Domsch@dell.com>
6
This program is free software; you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 2 of the License, or
9
(at your option) any later version.
11
This program is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
GNU General Public License for more details.
16
You should have received a copy of the GNU General Public License
17
along with this program; if not, write to the Free Software
18
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
#define _FILE_OFFSET_BITS 64
31
#include <sys/types.h>
36
#include "efibootmgr.h"
37
#include "efivars_sysfs.h"
40
sysfs_read_variable(const char *name, efi_variable_t *var)
42
char filename[PATH_MAX];
45
char buffer[PATH_MAX+40];
46
if (!name || !var) return EFI_INVALID_PARAMETER;
47
memset(buffer, 0, sizeof(buffer));
49
snprintf(filename, PATH_MAX-1, "%s/%s/raw_var", SYSFS_DIR_EFI_VARS,name);
50
fd = open(filename, O_RDONLY);
54
readsize = read(fd, var, sizeof(*var));
55
if (readsize != sizeof(*var)) {
57
return EFI_INVALID_PARAMETER;
64
sysfs_write_variable(const char *filename, efi_variable_t *var)
68
char buffer[PATH_MAX+40];
70
if (!filename || !var) return EFI_INVALID_PARAMETER;
71
memset(buffer, 0, sizeof(buffer));
73
fd = open(filename, O_WRONLY);
75
return EFI_INVALID_PARAMETER;
77
writesize = write(fd, var, sizeof(*var));
78
if (writesize != sizeof(*var)) {
80
return EFI_INVALID_PARAMETER;
88
sysfs_edit_variable(const char *name, efi_variable_t *var)
90
char filename[PATH_MAX];
91
if (!var) return EFI_INVALID_PARAMETER;
92
snprintf(filename, PATH_MAX-1, "%s/%s/raw_var", SYSFS_DIR_EFI_VARS,name);
93
return sysfs_write_variable(filename, var);
97
sysfs_create_variable(efi_variable_t *var)
99
char filename[PATH_MAX];
100
if (!var) return EFI_INVALID_PARAMETER;
101
snprintf(filename, PATH_MAX-1, "%s/%s", SYSFS_DIR_EFI_VARS,"new_var");
102
return sysfs_write_variable(filename, var);
106
sysfs_delete_variable(efi_variable_t *var)
108
char filename[PATH_MAX];
109
if (!var) return EFI_INVALID_PARAMETER;
110
snprintf(filename, PATH_MAX-1, "%s/%s", SYSFS_DIR_EFI_VARS,"del_var");
111
return sysfs_write_variable(filename, var);
114
struct efivar_kernel_calls sysfs_kernel_calls = {
115
.read = sysfs_read_variable,
116
.edit = sysfs_edit_variable,
117
.create = sysfs_create_variable,
118
.delete = sysfs_delete_variable,
119
.path = SYSFS_DIR_EFI_VARS,