Skip to content

Commit

Permalink
efi/efi_test: add exporting ResetSystem runtime service
Browse files Browse the repository at this point in the history
Add exporting the UEFI runtime service ResetSystem for upper application or test
tools to use.

Signed-off-by: Ivan Hu <ivan.hu@canonical.com>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
  • Loading branch information
Ivan Hu authored and Ard Biesheuvel committed Sep 26, 2018
1 parent 41f1c48 commit bcb31c6
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 0 deletions.
27 changes: 27 additions & 0 deletions drivers/firmware/efi/test/efi_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -682,6 +706,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;
Expand Down
10 changes: 10 additions & 0 deletions drivers/firmware/efi/test/efi_test.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,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 \
Expand Down Expand Up @@ -108,4 +115,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_ */

0 comments on commit bcb31c6

Please sign in to comment.