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

Colin Ian King colin.king at canonical.com
Wed Jul 6 08:10:57 UTC 2016


On 04/07/16 10:25, Ivan Hu wrote:
> 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
> 
> 
> 
OK - looks good to me, thanks Ivan.

Acked-by: Colin Ian King <colin.king at canonical.com>



More information about the fwts-devel mailing list