ACK: [PATCH 2/2] efi_runtime: add UEFI runtime service QueryVariableInfo interface

Alex Hung alex.hung at canonical.com
Wed Oct 17 14:44:31 UTC 2012


On 09/28/2012 04:26 PM, Ivan Hu wrote:
> This interface is always returned EFI_UNSUPPORTED from
> virt_fei_query_variable_info on kernel driver efi.c because of checking
> the runtime_version. It seems that runtime_version value always 0,
> it alway returns EFI_UNSUPPORTED. Need a patch of efi.c for this interface.
>
> Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
> ---
>   efi_runtime/efi_runtime.c |   20 ++++++++++++++++++++
>   efi_runtime/efi_runtime.h |   11 +++++++++++
>   2 files changed, 31 insertions(+)
>
> diff --git a/efi_runtime/efi_runtime.c b/efi_runtime/efi_runtime.c
> index 227a910..0e66e94 100644
> --- a/efi_runtime/efi_runtime.c
> +++ b/efi_runtime/efi_runtime.c
> @@ -117,6 +117,8 @@ static long efi_runtime_ioctl(struct file *file, unsigned int cmd,
>   	struct efi_getnextvariablename __user *pgetnextvariablename;
>   	unsigned long name_size;
>
> +	struct efi_queryvariableinfo __user *pqueryvariableinfo;
> +
>   	switch (cmd) {
>   	case EFI_RUNTIME_GET_VARIABLE:
>   		pgetvariable = (struct efi_getvariable __user *)arg;
> @@ -261,6 +263,24 @@ static long efi_runtime_ioctl(struct file *file, unsigned int cmd,
>   						&vendor_guid, sizeof(EFI_GUID)))
>   			return -EFAULT;
>   		return 0;
> +
> +	case EFI_RUNTIME_QUERY_VARIABLEINFO:
> +
> +		pqueryvariableinfo = (struct efi_queryvariableinfo __user *)arg;
> +
> +		if (get_user(attr, &pqueryvariableinfo->Attributes))
> +			return -EFAULT;
> +
> +		status = efi.query_variable_info(attr,
> +				pqueryvariableinfo->MaximumVariableStorageSize,
> +				pqueryvariableinfo->RemainingVariableStorageSize
> +				, pqueryvariableinfo->MaximumVariableSize);
> +		if (put_user(status, pqueryvariableinfo->status))
> +			return -EFAULT;
> +		if (status != EFI_SUCCESS)
> +			return -EINVAL;
> +
> +		return 0;
>   	}
>
>   	return -ENOTTY;
> diff --git a/efi_runtime/efi_runtime.h b/efi_runtime/efi_runtime.h
> index 7387406..cc33878 100644
> --- a/efi_runtime/efi_runtime.h
> +++ b/efi_runtime/efi_runtime.h
> @@ -73,6 +73,14 @@ struct efi_getnextvariablename {
>   	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;
> @@ -116,4 +124,7 @@ 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)
> +
>   #endif /* _EFI_RUNTIME_H_ */
>

Acked-by: Alex Hung <alex.hung at canonical.com>



More information about the fwts-devel mailing list