Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bcb31c62 authored by Ivan Hu's avatar Ivan Hu Committed by Ard Biesheuvel
Browse files

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: default avatarIvan Hu <ivan.hu@canonical.com>
Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
parent 41f1c484
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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;
+10 −0
Original line number Diff line number Diff line
@@ -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 \
@@ -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_ */