@@ -676,6 +676,19 @@ static long efi_runtime_get_supported_mask(unsigned long arg)
return rv;
}
+static long efi_runtime_get_revision(unsigned long arg)
+{
+ unsigned int __user *revision;
+ int rv = 0;
+
+ revision = (unsigned int *)arg;
+
+ if (put_user(efi.runtime_version, revision))
+ rv = -EFAULT;
+
+ return rv;
+}
+
static long efi_test_ioctl(struct file *file, unsigned int cmd,
unsigned long arg)
{
@@ -715,6 +728,9 @@ static long efi_test_ioctl(struct file *file, unsigned int cmd,
case EFI_RUNTIME_GET_SUPPORTED_MASK:
return efi_runtime_get_supported_mask(arg);
+
+ case EFI_RUNTIME_GET_REVISION:
+ return efi_runtime_get_revision(arg);
}
return -ENOTTY;
@@ -121,4 +121,7 @@ struct efi_resetsystem {
#define EFI_RUNTIME_GET_SUPPORTED_MASK \
_IOR('p', 0x0C, unsigned int)
+#define EFI_RUNTIME_GET_REVISION \
+ _IOR('p', 0x0D, unsigned int)
+
#endif /* _DRIVERS_FIRMWARE_EFI_TEST_H_ */
For testing UEFI conformance using the Firmware Test Suite it is necessary to know the revision of the UEFI specification followed by the firmware. With this patch an IOCTL call is provided to read the value of the field Revision of the UEFI system table , e.g. #define EFI_RUNTIME_GET_REVISION \ _IOR('p', 0x0D, unsigned int) unsigned int revision; fd = open("/dev/efi_test", O_RDWR); ret = ioctl(fd, EFI_RUNTIME_GET_REVISION, &revision); For UEFI specification 2.8 this will yield revision == 0x250 == (2 << 16) | 80 Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de> --- For testing you can use: https://github.com/xypron/rtmask --- drivers/firmware/efi/test/efi_test.c | 16 ++++++++++++++++ drivers/firmware/efi/test/efi_test.h | 3 +++ 2 files changed, 19 insertions(+) -- 2.29.2