[PATCH 1/3] uefitime: add checking the EFI_UNSUPPORTED return code

Ivan Hu ivan.hu at canonical.com
Tue Jun 11 10:18:55 UTC 2019


The UEFI spec 2.8(Matis 1961) adds EFI_UNSUPPORTED as a return code to most
UEFI runtime services for those embeded devices such as specified by the
ARM EBBR specification which are impractical or impossible to implement
in such a way that they can be used at runtime.

Add checking the EFI_UNSUPPORTED return code and skip the test for those
unsupported runtime services.

Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
---
 src/uefi/uefirttime/uefirttime.c | 90 +++++++++++++++++++++++++++++++++-------
 1 file changed, 76 insertions(+), 14 deletions(-)

diff --git a/src/uefi/uefirttime/uefirttime.c b/src/uefi/uefirttime/uefirttime.c
index 7626f06..c0ff61d 100644
--- a/src/uefi/uefirttime/uefirttime.c
+++ b/src/uefi/uefirttime/uefirttime.c
@@ -215,6 +215,11 @@ static int uefirttime_test1(fwts_framework *fw)
 	ioret = ioctl(fd, EFI_RUNTIME_GET_TIME, &gettime);
 
 	if (ioret == -1) {
+		if (status == EFI_UNSUPPORTED) {
+			fwts_skipped(fw, "Skipping test, GetTime runtime "
+				"service is not supported on this platform.");
+			return FWTS_SKIP;
+		}
 		fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetTime",
 			"Failed to get time with UEFI runtime service.");
 		fwts_uefi_print_status_info(fw, status);
@@ -244,6 +249,11 @@ static int uefirttime_test_gettime_invalid(
 
 	ioret = ioctl(fd, EFI_RUNTIME_GET_TIME, &gettime);
 	if (ioret == -1) {
+		if (status == EFI_UNSUPPORTED) {
+			fwts_skipped(fw, "Skipping test, GetTime runtime "
+				"service is not supported on this platform.");
+			return FWTS_SKIP;
+		}
 		if (status == EFI_INVALID_PARAMETER) {
 			fwts_passed(fw, "UEFI runtime service GetTime interface test "
 				"passed, returned EFI_INVALID_PARAMETER as expected.");
@@ -291,6 +301,11 @@ static int uefirttime_test4(fwts_framework *fw)
 	ioret = ioctl(fd, EFI_RUNTIME_GET_TIME, &gettime);
 
 	if (ioret == -1) {
+		if (status == EFI_UNSUPPORTED) {
+			fwts_skipped(fw, "Skipping test, GetTime runtime "
+				"service is not supported on this platform.");
+			return FWTS_SKIP;
+		}
 		fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetTime",
 			"Failed to get time with UEFI runtime service.");
 		fwts_uefi_print_status_info(fw, status);
@@ -330,6 +345,11 @@ static int uefirttime_test4(fwts_framework *fw)
 
 	ioret = ioctl(fd, EFI_RUNTIME_SET_TIME, &settime);
 	if (ioret == -1) {
+		if (status == EFI_UNSUPPORTED) {
+			fwts_skipped(fw, "Skipping test, SetTime runtime "
+				"service is not supported on this platform.");
+			return FWTS_SKIP;
+		}
 		fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetTime",
 			"Failed to set time with UEFI runtime service.");
 		fwts_uefi_print_status_info(fw, status);
@@ -344,6 +364,11 @@ static int uefirttime_test4(fwts_framework *fw)
 	ioret = ioctl(fd, EFI_RUNTIME_GET_TIME, &gettime);
 
 	if (ioret == -1) {
+		if (status == EFI_UNSUPPORTED) {
+			fwts_skipped(fw, "Skipping test, GetTime runtime "
+				"service is not supported on this platform.");
+			return FWTS_SKIP;
+		}
 		fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetTime",
 			"Failed to get time with UEFI runtime service.");
 		fwts_uefi_print_status_info(fw, status);
@@ -385,6 +410,11 @@ static int uefirttime_test4(fwts_framework *fw)
 	status = ~0ULL;
 	ioret = ioctl(fd, EFI_RUNTIME_SET_TIME, &settime);
 	if (ioret == -1) {
+		if (status == EFI_UNSUPPORTED) {
+			fwts_skipped(fw, "Skipping test, SetTime runtime "
+				"service is not supported on this platform.");
+			return FWTS_SKIP;
+		}
 		fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetTime",
 			"Failed to set time with UEFI runtime service.");
 		fwts_uefi_print_status_info(fw, status);
@@ -407,6 +437,11 @@ static int uefirttime_test_settime_invalid(
 
 	ioret = ioctl(fd, EFI_RUNTIME_SET_TIME, settime);
 	if (ioret == -1) {
+		if (status == EFI_UNSUPPORTED) {
+			fwts_skipped(fw, "Skipping test, SetTime runtime "
+				"service is not supported on this platform.");
+			return FWTS_SKIP;
+		}
 		if (status == EFI_INVALID_PARAMETER) {
 			fwts_passed(fw, "UEFI runtime service SetTime interface test "
 				"passed, returned EFI_INVALID_PARAMETER as expected.");
@@ -439,6 +474,11 @@ static int uefirttime_test_settime_invalid_time(
 
 	ioret = ioctl(fd, EFI_RUNTIME_GET_TIME, &gettime);
 	if (ioret == -1) {
+		if (status == EFI_UNSUPPORTED) {
+			fwts_skipped(fw, "Skipping test, GetTime runtime "
+				"service is not supported on this platform.");
+			return FWTS_SKIP;
+		}
 		fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetTime",
 			"Failed to get wakeup time with UEFI runtime service.");
 		fwts_uefi_print_status_info(fw, status);
@@ -474,6 +514,11 @@ static int uefirttime_test_settime_invalid_time(
 	settime.status = &status;
 	ioret = ioctl(fd, EFI_RUNTIME_SET_TIME, &settime);
 	if (ioret == -1) {
+		if (status == EFI_UNSUPPORTED) {
+			fwts_skipped(fw, "Skipping test, SetTime runtime "
+				"service is not supported on this platform.");
+			return FWTS_SKIP;
+		}
 		fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetTime",
 			"Failed to set wakeup time with UEFI runtime service.");
 		fwts_uefi_print_status_info(fw, status);
@@ -627,7 +672,7 @@ static int uefirttime_test18(fwts_framework *fw)
 		if (status == EFI_UNSUPPORTED) {
 			fwts_skipped(fw, "Skipping test, GetWakeupTime runtime "
 				"service is not supported on this platform.");
-			return FWTS_OK;
+			return FWTS_SKIP;
 		}
 		fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetWakeupTime",
 			"Failed to get wakeup time with UEFI runtime service.");
@@ -653,17 +698,19 @@ static int uefirttime_test_getwaketime_invalid(
 
 	ioret = ioctl(fd, EFI_RUNTIME_GET_WAKETIME, getwakeuptime);
 	if (ioret == -1) {
-		if (status == EFI_INVALID_PARAMETER ||
-		    status == EFI_UNSUPPORTED) {
+		if (status == EFI_UNSUPPORTED) {
+			fwts_skipped(fw, "Skipping test, GetTimeWakeupTime runtime "
+				"service is not supported on this platform.");
+			return FWTS_SKIP;
+		}
+		if (status == EFI_INVALID_PARAMETER) {
 			fwts_passed(fw, "UEFI runtime service GetTimeWakeupTime interface test "
-				"passed, returned EFI_INVALID_PARAMETER or "
-				"EFI_UNSUPPORTED as expected.");
+				"passed, returned EFI_INVALID_PARAMETER as expected.");
 			return FWTS_OK;
 		} else {
 			fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetWakeupTime",
 				"Failed to get correct return status from UEFI "
-				"runtime service, expecting EFI_INVALID_PARAMETER "
-				"or EFI_UNSUPPORTED.");
+				"runtime service, expecting EFI_INVALID_PARAMETER.");
 			fwts_uefi_print_status_info(fw, status);
 			return FWTS_ERROR;
 		}
@@ -743,6 +790,11 @@ static int uefirttime_test23(fwts_framework *fw)
 	ioret = ioctl(fd, EFI_RUNTIME_GET_TIME, &gettime);
 
 	if (ioret == -1) {
+		if (status == EFI_UNSUPPORTED) {
+			fwts_skipped(fw, "Skipping test, GetTime runtime "
+				"service is not supported on this platform.");
+			return FWTS_SKIP;
+		}
 		fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetTime",
 			"Failed to get time with UEFI runtime service.");
 		fwts_uefi_print_status_info(fw, status);
@@ -760,9 +812,9 @@ static int uefirttime_test23(fwts_framework *fw)
 	ioret = ioctl(fd, EFI_RUNTIME_SET_WAKETIME, &setwakeuptime);
 	if (ioret == -1) {
 		if (status == EFI_UNSUPPORTED) {
-			fwts_skipped(fw, "Skipping test, GetWakeupTime runtime "
+			fwts_skipped(fw, "Skipping test, SetWakeupTime runtime "
 				"service is not supported on this platform.");
-			return FWTS_OK;
+			return FWTS_SKIP;
 		}
 		fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetWakeupTime",
 			"Failed to set wakeup time with UEFI runtime service.");
@@ -783,7 +835,7 @@ static int uefirttime_test23(fwts_framework *fw)
 		if (status == EFI_UNSUPPORTED) {
 			fwts_skipped(fw, "Skipping test, GetWakeupTime runtime "
 				"service is not supported on this platform.");
-			return FWTS_OK;
+			return FWTS_SKIP;
 		}
 		fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetWakeupTime",
 			"Failed to get wakeup time with UEFI runtime service.");
@@ -815,6 +867,11 @@ static int uefirttime_test23(fwts_framework *fw)
 
 	ioret = ioctl(fd, EFI_RUNTIME_SET_WAKETIME, &setwakeuptime);
 	if (ioret == -1) {
+		if (status == EFI_UNSUPPORTED) {
+			fwts_skipped(fw, "Skipping test, SetWakeupTime runtime "
+				"service is not supported on this platform.");
+			return FWTS_SKIP;
+		}
 		fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetWakeupTime",
 			"Failed to set wakeup time with UEFI runtime service.");
 		fwts_uefi_print_status_info(fw, status);
@@ -829,7 +886,7 @@ static int uefirttime_test23(fwts_framework *fw)
 		if (status == EFI_UNSUPPORTED) {
 			fwts_skipped(fw, "Skipping test, GetWakeupTime runtime "
 				"service is not supported on this platform.");
-			return FWTS_OK;
+			return FWTS_SKIP;
 		}
 		fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetWakeupTime",
 			"Failed to get wakeup time with UEFI runtime service.");
@@ -861,9 +918,9 @@ static int uefirttime_test_setwakeuptime_invalid(
 	ioret = ioctl(fd, EFI_RUNTIME_SET_WAKETIME, setwakeuptime);
 	if (ioret == -1) {
 		if (status == EFI_UNSUPPORTED) {
-			fwts_skipped(fw, "Skipping test, GetWakeupTime runtime "
+			fwts_skipped(fw, "Skipping test, SetWakeupTime runtime "
 				"service is not supported on this platform.");
-			return FWTS_OK;
+			return FWTS_SKIP;
 		}
 		if (status == EFI_INVALID_PARAMETER) {
 			fwts_passed(fw, "UEFI runtime service SetTimeWakeupTime interface test "
@@ -912,7 +969,7 @@ static int uefirttime_test_setwakeuptime_invalid_time(
 		if (status == EFI_UNSUPPORTED) {
 			fwts_skipped(fw, "Skipping test, GetWakeupTime runtime "
 				"service is not supported on this platform.");
-			return FWTS_OK;
+			return FWTS_SKIP;
 		}
 		fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeGetWakeupTime",
 			"Failed to get wakeup time with UEFI runtime service.");
@@ -951,6 +1008,11 @@ static int uefirttime_test_setwakeuptime_invalid_time(
 	setwakeuptime.Enabled = true;
 	ioret = ioctl(fd, EFI_RUNTIME_SET_WAKETIME, &setwakeuptime);
 	if (ioret == -1) {
+		if (status == EFI_UNSUPPORTED) {
+			fwts_skipped(fw, "Skipping test, SetWakeupTime runtime "
+				"service is not supported on this platform.");
+			return FWTS_SKIP;
+		}
 		fwts_failed(fw, LOG_LEVEL_HIGH, "UEFIRuntimeSetWakeupTime",
 			"Failed to set wakeup time with UEFI runtime service.");
 		fwts_uefi_print_status_info(fw, status);
-- 
2.7.4




More information about the fwts-devel mailing list