Re: [PATCH] efi/efi_test: add exporting ResetSystem runtime service

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 22 August 2018 at 11:15, Ivan Hu <ivan.hu@xxxxxxxxxxxxx> wrote:
> Add exporting the UEFI runtime service ResetSystem for upper application or test
> tools to use.
>
> Signed-off-by: Ivan Hu <ivan.hu@xxxxxxxxxxxxx>

Queued in efi/next - thanks.

> ---
>  drivers/firmware/efi/test/efi_test.c | 27 +++++++++++++++++++++++++++
>  drivers/firmware/efi/test/efi_test.h | 10 ++++++++++
>  2 files changed, 37 insertions(+)
>
> diff --git a/drivers/firmware/efi/test/efi_test.c b/drivers/firmware/efi/test/efi_test.c
> index 08129b7..a00cb67 100644
> --- a/drivers/firmware/efi/test/efi_test.c
> +++ b/drivers/firmware/efi/test/efi_test.c
> @@ -542,6 +542,30 @@ static long efi_runtime_get_nexthighmonocount(unsigned long arg)
>         return 0;
>  }
>
> +static long efi_runtime_reset_system(unsigned long arg)
> +{
> +       struct efi_resetsystem __user *resetsystem_user;
> +       struct efi_resetsystem resetsystem;
> +       void *data = NULL;
> +
> +       resetsystem_user = (struct efi_resetsystem __user *)arg;
> +       if (copy_from_user(&resetsystem, resetsystem_user,
> +                                               sizeof(resetsystem)))
> +               return -EFAULT;
> +       if (resetsystem.data_size != 0) {
> +               data = memdup_user((void *)resetsystem.data,
> +                                               resetsystem.data_size);
> +               if (IS_ERR(data))
> +                       return PTR_ERR(data);
> +       }
> +
> +       efi.reset_system(resetsystem.reset_type, resetsystem.status,
> +                               resetsystem.data_size, (efi_char16_t *)data);
> +
> +       kfree(data);
> +       return 0;
> +}
> +
>  static long efi_runtime_query_variableinfo(unsigned long arg)
>  {
>         struct efi_queryvariableinfo __user *queryvariableinfo_user;
> @@ -679,6 +703,9 @@ static long efi_test_ioctl(struct file *file, unsigned int cmd,
>
>         case EFI_RUNTIME_QUERY_CAPSULECAPABILITIES:
>                 return efi_runtime_query_capsulecaps(arg);
> +
> +       case EFI_RUNTIME_RESET_SYSTEM:
> +               return efi_runtime_reset_system(arg);
>         }
>
>         return -ENOTTY;
> diff --git a/drivers/firmware/efi/test/efi_test.h b/drivers/firmware/efi/test/efi_test.h
> index a33a6c6..1cc421a 100644
> --- a/drivers/firmware/efi/test/efi_test.h
> +++ b/drivers/firmware/efi/test/efi_test.h
> @@ -80,6 +80,13 @@ struct efi_querycapsulecapabilities {
>         efi_status_t            *status;
>  } __packed;
>
> +struct efi_resetsystem {
> +       int                     reset_type;
> +       efi_status_t            status;
> +       unsigned long           data_size;
> +       efi_char16_t            *data;
> +} __packed;
> +
>  #define EFI_RUNTIME_GET_VARIABLE \
>         _IOWR('p', 0x01, struct efi_getvariable)
>  #define EFI_RUNTIME_SET_VARIABLE \
> @@ -107,4 +114,7 @@ struct efi_querycapsulecapabilities {
>  #define EFI_RUNTIME_QUERY_CAPSULECAPABILITIES \
>         _IOR('p', 0x0A, struct efi_querycapsulecapabilities)
>
> +#define EFI_RUNTIME_RESET_SYSTEM \
> +       _IOW('p', 0x0B, struct efi_resetsystem)
> +
>  #endif /* _DRIVERS_FIRMWARE_EFI_TEST_H_ */
> --
> 2.7.4
>



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux