[PATCH 1/2] uefi: add the header for using efi runtime service

Ivan Hu ivan.hu at canonical.com
Mon Jul 4 09:25:34 UTC 2016


Planning to upstream efi_runtime kernel module, add a header file for using uefi
runtime service on user space.

Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
---
 src/lib/include/fwts_efi_runtime.h       | 160 +++++++++++++++++++++++++++++++
 src/uefi/uefirtauthvar/uefirtauthvar.c   |   2 +-
 src/uefi/uefirtmisc/uefirtmisc.c         |   2 +-
 src/uefi/uefirttime/uefirttime.c         |   2 +-
 src/uefi/uefirtvariable/uefirtvariable.c |   2 +-
 src/uefi/uefivarinfo/uefivarinfo.c       |   2 +-
 6 files changed, 165 insertions(+), 5 deletions(-)
 create mode 100644 src/lib/include/fwts_efi_runtime.h

diff --git a/src/lib/include/fwts_efi_runtime.h b/src/lib/include/fwts_efi_runtime.h
new file mode 100644
index 0000000..a65de31
--- /dev/null
+++ b/src/lib/include/fwts_efi_runtime.h
@@ -0,0 +1,160 @@
+/*
+ * Copyright(C) 2016 Canonical Ltd.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef _FWTS_EFI_RUNTIME_H_
+#define _FWTS_EFI_RUNTIME_H_
+
+typedef enum {
+	EfiResetCold,
+	EfiResetWarm,
+	EfiResetShutdown
+} EFI_RESET_TYPE;
+
+typedef struct {
+	uint32_t	Data1;
+	uint16_t	Data2;
+	uint16_t	Data3;
+	uint8_t		Data4[8];
+} __attribute__ ((packed)) EFI_GUID;
+
+typedef struct {
+	uint16_t	Year;		/* 1900 – 9999 */
+	uint8_t		Month;		/* 1 – 12 */
+	uint8_t		Day;		/* 1 – 31 */
+	uint8_t		Hour;		/* 0 – 23 */
+	uint8_t		Minute;		/* 0 – 59 */
+	uint8_t		Second;		/* 0 – 59 */
+	uint8_t		Pad1;
+	uint32_t	Nanosecond;	/* 0 – 999,999,999 */
+	int16_t		TimeZone;	/* -1440 to 1440 or 2047 */
+	uint8_t		Daylight;
+	uint8_t		Pad2;
+} __attribute__ ((packed)) EFI_TIME;
+
+typedef struct {
+	uint32_t	Resolution;
+	uint32_t	Accuracy;
+	uint8_t		SetsToZero;
+} __attribute__ ((packed)) EFI_TIME_CAPABILITIES;
+
+typedef struct {
+	EFI_GUID CapsuleGuid;
+	uint32_t HeaderSize;
+	uint32_t Flags;
+	uint32_t CapsuleImageSize;
+} __attribute__ ((packed)) EFI_CAPSULE_HEADER;
+
+struct efi_getvariable {
+	uint16_t	*VariableName;
+	EFI_GUID	*VendorGuid;
+	uint32_t	*Attributes;
+	uint64_t	*DataSize;
+	void		*Data;
+	uint64_t	*status;
+} __attribute__ ((packed));
+
+struct efi_setvariable {
+	uint16_t	*VariableName;
+	EFI_GUID	*VendorGuid;
+	uint32_t	Attributes;
+	uint64_t	DataSize;
+	void		*Data;
+	uint64_t	*status;
+} __attribute__ ((packed));
+
+struct efi_getnextvariablename {
+	uint64_t	*VariableNameSize;
+	uint16_t	*VariableName;
+	EFI_GUID	*VendorGuid;
+	uint64_t	*status;
+} __attribute__ ((packed));
+
+struct efi_queryvariableinfo {
+	uint32_t	Attributes;
+	uint64_t	*MaximumVariableStorageSize;
+	uint64_t	*RemainingVariableStorageSize;
+	uint64_t	*MaximumVariableSize;
+	uint64_t	*status;
+} __attribute__ ((packed));
+
+struct efi_gettime {
+	EFI_TIME		*Time;
+	EFI_TIME_CAPABILITIES	*Capabilities;
+	uint64_t		*status;
+} __attribute__ ((packed));
+
+struct efi_settime {
+	EFI_TIME		*Time;
+	uint64_t		*status;
+} __attribute__ ((packed));
+
+struct efi_getwakeuptime {
+	uint8_t		*Enabled;
+	uint8_t		*Pending;
+	EFI_TIME	*Time;
+	uint64_t	*status;
+} __attribute__ ((packed));
+
+struct efi_setwakeuptime {
+	uint8_t		Enabled;
+	EFI_TIME	*Time;
+	uint64_t	*status;
+} __attribute__ ((packed));
+
+struct efi_getnexthighmonotoniccount {
+	uint32_t	*HighCount;
+	uint64_t	*status;
+} __attribute__ ((packed));
+
+struct efi_querycapsulecapabilities {
+	EFI_CAPSULE_HEADER	**CapsuleHeaderArray;
+	uint64_t		CapsuleCount;
+	uint64_t		*MaximumCapsuleSize;
+	EFI_RESET_TYPE		*ResetType;
+	uint64_t		*status;
+} __attribute__ ((packed));
+
+/* ioctl calls that are permitted to the /dev/efi_runtime interface. */
+#define EFI_RUNTIME_GET_VARIABLE \
+	_IOWR('p', 0x01, struct efi_getvariable)
+#define EFI_RUNTIME_SET_VARIABLE \
+	_IOW('p', 0x02, struct efi_setvariable)
+
+#define EFI_RUNTIME_GET_TIME \
+	_IOR('p', 0x03, struct efi_gettime)
+#define EFI_RUNTIME_SET_TIME \
+	_IOW('p', 0x04, struct efi_settime)
+
+#define EFI_RUNTIME_GET_WAKETIME \
+	_IOR('p', 0x05, struct efi_getwakeuptime)
+#define EFI_RUNTIME_SET_WAKETIME \
+	_IOW('p', 0x06, struct efi_setwakeuptime)
+
+#define EFI_RUNTIME_GET_NEXTVARIABLENAME \
+	_IOWR('p', 0x07, struct efi_getnextvariablename)
+
+#define EFI_RUNTIME_QUERY_VARIABLEINFO \
+	_IOR('p', 0x08, struct efi_queryvariableinfo)
+
+#define EFI_RUNTIME_GET_NEXTHIGHMONOTONICCOUNT \
+	_IOR('p', 0x09, struct efi_getnexthighmonotoniccount)
+
+#define EFI_RUNTIME_QUERY_CAPSULECAPABILITIES \
+	_IOR('p', 0x0A, struct efi_querycapsulecapabilities)
+
+#endif /* _FWTS_EFI_RUNTIME_H_ */
diff --git a/src/uefi/uefirtauthvar/uefirtauthvar.c b/src/uefi/uefirtauthvar/uefirtauthvar.c
index 6d8c385..ed23a8e 100644
--- a/src/uefi/uefirtauthvar/uefirtauthvar.c
+++ b/src/uefi/uefirtauthvar/uefirtauthvar.c
@@ -27,7 +27,7 @@
 #include <fcntl.h>
 
 #include "fwts_uefi.h"
-#include "efi_runtime.h"
+#include "fwts_efi_runtime.h"
 #include "fwts_efi_module.h"
 #include "authvardefs.h"
 
diff --git a/src/uefi/uefirtmisc/uefirtmisc.c b/src/uefi/uefirtmisc/uefirtmisc.c
index 0b319d7..347b2b1 100644
--- a/src/uefi/uefirtmisc/uefirtmisc.c
+++ b/src/uefi/uefirtmisc/uefirtmisc.c
@@ -27,7 +27,7 @@
 #include <fcntl.h>
 
 #include "fwts_uefi.h"
-#include "efi_runtime.h"
+#include "fwts_efi_runtime.h"
 #include "fwts_efi_module.h"
 
 #define CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000
diff --git a/src/uefi/uefirttime/uefirttime.c b/src/uefi/uefirttime/uefirttime.c
index 5c883a5..f79e2da 100644
--- a/src/uefi/uefirttime/uefirttime.c
+++ b/src/uefi/uefirttime/uefirttime.c
@@ -27,7 +27,7 @@
 #include <fcntl.h>
 
 #include "fwts_uefi.h"
-#include "efi_runtime.h"
+#include "fwts_efi_runtime.h"
 #include "fwts_efi_module.h"
 
 #define UEFI_IGNORE_UNSET_BITS	(0)
diff --git a/src/uefi/uefirtvariable/uefirtvariable.c b/src/uefi/uefirtvariable/uefirtvariable.c
index aca0202..f60dbad 100644
--- a/src/uefi/uefirtvariable/uefirtvariable.c
+++ b/src/uefi/uefirtvariable/uefirtvariable.c
@@ -27,7 +27,7 @@
 #include <fcntl.h>
 
 #include "fwts_uefi.h"
-#include "efi_runtime.h"
+#include "fwts_efi_runtime.h"
 #include "fwts_efi_module.h"
 
 #define TEST_GUID1 \
diff --git a/src/uefi/uefivarinfo/uefivarinfo.c b/src/uefi/uefivarinfo/uefivarinfo.c
index 005e3a1..22afe53 100644
--- a/src/uefi/uefivarinfo/uefivarinfo.c
+++ b/src/uefi/uefivarinfo/uefivarinfo.c
@@ -27,7 +27,7 @@
 #include <fcntl.h>
 
 #include "fwts_uefi.h"
-#include "efi_runtime.h"
+#include "fwts_efi_runtime.h"
 #include "fwts_efi_module.h"
 
 #define MAX_VARNAME_LENGTH	1024
-- 
1.9.1




More information about the fwts-devel mailing list