[PATCH 2/2] efi_runtime: add UEFI runtime service QueryVariableInfo interface
Keng-Yu Lin
kengyu at canonical.com
Tue Oct 16 09:31:14 UTC 2012
On Fri, Sep 28, 2012 at 4:26 PM, Ivan Hu <ivan.hu at canonical.com> 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_ */
> --
> 1.7.9.5
>
Acked-by: Keng-Yu Lin <kengyu at canonical.com>
More information about the fwts-devel
mailing list