forked from luck/tmp_suning_uos_patched
efi/efi_test: add exporting ResetSystem runtime service
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>
This commit is contained in:
parent
41f1c48420
commit
bcb31c6225
|
@ -542,6 +542,30 @@ static long efi_runtime_get_nexthighmonocount(unsigned long arg)
|
||||||
return 0;
|
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)
|
static long efi_runtime_query_variableinfo(unsigned long arg)
|
||||||
{
|
{
|
||||||
struct efi_queryvariableinfo __user *queryvariableinfo_user;
|
struct efi_queryvariableinfo __user *queryvariableinfo_user;
|
||||||
|
@ -682,6 +706,9 @@ static long efi_test_ioctl(struct file *file, unsigned int cmd,
|
||||||
|
|
||||||
case EFI_RUNTIME_QUERY_CAPSULECAPABILITIES:
|
case EFI_RUNTIME_QUERY_CAPSULECAPABILITIES:
|
||||||
return efi_runtime_query_capsulecaps(arg);
|
return efi_runtime_query_capsulecaps(arg);
|
||||||
|
|
||||||
|
case EFI_RUNTIME_RESET_SYSTEM:
|
||||||
|
return efi_runtime_reset_system(arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
return -ENOTTY;
|
return -ENOTTY;
|
||||||
|
|
|
@ -81,6 +81,13 @@ struct efi_querycapsulecapabilities {
|
||||||
efi_status_t *status;
|
efi_status_t *status;
|
||||||
} __packed;
|
} __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 \
|
#define EFI_RUNTIME_GET_VARIABLE \
|
||||||
_IOWR('p', 0x01, struct efi_getvariable)
|
_IOWR('p', 0x01, struct efi_getvariable)
|
||||||
#define EFI_RUNTIME_SET_VARIABLE \
|
#define EFI_RUNTIME_SET_VARIABLE \
|
||||||
|
@ -108,4 +115,7 @@ struct efi_querycapsulecapabilities {
|
||||||
#define EFI_RUNTIME_QUERY_CAPSULECAPABILITIES \
|
#define EFI_RUNTIME_QUERY_CAPSULECAPABILITIES \
|
||||||
_IOR('p', 0x0A, struct efi_querycapsulecapabilities)
|
_IOR('p', 0x0A, struct efi_querycapsulecapabilities)
|
||||||
|
|
||||||
|
#define EFI_RUNTIME_RESET_SYSTEM \
|
||||||
|
_IOW('p', 0x0B, struct efi_resetsystem)
|
||||||
|
|
||||||
#endif /* _DRIVERS_FIRMWARE_EFI_TEST_H_ */
|
#endif /* _DRIVERS_FIRMWARE_EFI_TEST_H_ */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user