linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Heinrich Schuchardt <xypron.glpk@gmx.de>
To: Ivan Hu <ivan.hu@canonical.com>, Ard Biesheuvel <ardb@kernel.org>
Cc: linux-efi@vger.kernel.org, linux-kernel@vger.kernel.org,
	Heinrich Schuchardt <xypron.glpk@gmx.de>
Subject: [PATCH 1/1] efi/efi_test: read Revision
Date: Thu, 14 Jan 2021 12:05:52 +0100	[thread overview]
Message-ID: <20210114110552.1522-1-xypron.glpk@gmx.de> (raw)

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(+)

diff --git a/drivers/firmware/efi/test/efi_test.c b/drivers/firmware/efi/test/efi_test.c
index 47d67bb0a516..115e2c8ca8cf 100644
--- a/drivers/firmware/efi/test/efi_test.c
+++ b/drivers/firmware/efi/test/efi_test.c
@@ -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;
diff --git a/drivers/firmware/efi/test/efi_test.h b/drivers/firmware/efi/test/efi_test.h
index 117349e57993..c8ab162256c8 100644
--- a/drivers/firmware/efi/test/efi_test.h
+++ b/drivers/firmware/efi/test/efi_test.h
@@ -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_ */
--
2.29.2


                 reply	other threads:[~2021-01-14 11:07 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210114110552.1522-1-xypron.glpk@gmx.de \
    --to=xypron.glpk@gmx.de \
    --cc=ardb@kernel.org \
    --cc=ivan.hu@canonical.com \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).