aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lessons/Lesson_60/UefiLessonsPkg.dsc83
-rw-r--r--Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample/SetVariableExample.c84
-rw-r--r--Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample/SetVariableExample.inf24
-rw-r--r--UefiLessonsPkg/SetVariableExample/SetVariableExample.c84
-rw-r--r--UefiLessonsPkg/SetVariableExample/SetVariableExample.inf24
-rw-r--r--UefiLessonsPkg/UefiLessonsPkg.dsc1
6 files changed, 300 insertions, 0 deletions
diff --git a/Lessons/Lesson_60/UefiLessonsPkg.dsc b/Lessons/Lesson_60/UefiLessonsPkg.dsc
new file mode 100644
index 0000000..b33c87d
--- /dev/null
+++ b/Lessons/Lesson_60/UefiLessonsPkg.dsc
@@ -0,0 +1,83 @@
+##
+# Copyright (c) 2021, Konstantin Aladyshev <aladyshev22@gmail.com>
+#
+# SPDX-License-Identifier: MIT
+##
+
+[Defines]
+ DSC_SPECIFICATION = 0x0001001C
+ PLATFORM_GUID = 3db7270f-ffac-4139-90a4-0ae68f3f8167
+ PLATFORM_VERSION = 0.01
+ PLATFORM_NAME = UefiLessonsPkg
+ SKUID_IDENTIFIER = DEFAULT
+ SUPPORTED_ARCHITECTURES = X64
+ BUILD_TARGETS = RELEASE
+
+
+[LibraryClasses]
+ UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
+ UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
+ DebugLib|MdePkg/Library/UefiDebugLibConOut/UefiDebugLibConOut.inf
+ BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
+ #PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
+ PcdLib|MdePkg/Library/DxePcdLib/DxePcdLib.inf
+ BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
+ RegisterFilterLib|MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull.inf
+ PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
+ DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf
+ UefiLib|MdePkg/Library/UefiLib/UefiLib.inf
+ MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
+ DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
+ UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
+ ShellCEntryLib|ShellPkg/Library/UefiShellCEntryLib/UefiShellCEntryLib.inf
+ ShellLib|ShellPkg/Library/UefiShellLib/UefiShellLib.inf
+ FileHandleLib|MdePkg/Library/UefiFileHandleLib/UefiFileHandleLib.inf
+ HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf
+ SortLib|MdeModulePkg/Library/UefiSortLib/UefiSortLib.inf
+ UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf
+ UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
+ #SimpleLibrary|UefiLessonsPkg/Library/SimpleLibrary/SimpleLibrary.inf
+ #SimpleLibrary|UefiLessonsPkg/Library/SimpleLibraryWithConstructor/SimpleLibraryWithConstructor.inf
+ SimpleLibrary|UefiLessonsPkg/Library/SimpleLibraryWithConstructorAndDestructor/SimpleLibraryWithConstructorAndDestructor.inf
+
+[Components]
+ UefiLessonsPkg/SimplestApp/SimplestApp.inf
+ UefiLessonsPkg/HelloWorld/HelloWorld.inf
+ UefiLessonsPkg/ImageHandle/ImageHandle.inf
+ UefiLessonsPkg/ImageInfo/ImageInfo.inf
+ UefiLessonsPkg/MemoryInfo/MemoryInfo.inf
+ UefiLessonsPkg/SimpleShellApp/SimpleShellApp.inf
+ UefiLessonsPkg/ListVariables/ListVariables.inf
+ UefiLessonsPkg/ShowBootVariables/ShowBootVariables.inf
+ UefiLessonsPkg/InteractiveApp/InteractiveApp.inf
+ UefiLessonsPkg/PCDLesson/PCDLesson.inf
+ UefiLessonsPkg/SmbiosInfo/SmbiosInfo.inf
+ UefiLessonsPkg/ShowTables/ShowTables.inf
+ UefiLessonsPkg/AcpiInfo/AcpiInfo.inf
+ UefiLessonsPkg/SaveBGRT/SaveBGRT.inf
+ UefiLessonsPkg/ListPCI/ListPCI.inf
+ UefiLessonsPkg/SimpleDriver/SimpleDriver.inf
+ UefiLessonsPkg/PCIRomInfo/PCIRomInfo.inf
+ UefiLessonsPkg/Library/SimpleLibrary/SimpleLibrary.inf
+ UefiLessonsPkg/Library/SimpleLibraryWithConstructor/SimpleLibraryWithConstructor.inf
+ UefiLessonsPkg/SimpleLibraryUser/SimpleLibraryUser.inf
+ UefiLessonsPkg/SimpleClassProtocol/SimpleClassProtocol.inf
+ UefiLessonsPkg/SimpleClassUser/SimpleClassUser.inf
+ UefiLessonsPkg/HotKeyDriver/HotKeyDriver.inf
+ UefiLessonsPkg/ShowHII/ShowHII.inf
+ UefiLessonsPkg/HIIStringsC/HIIStringsC.inf
+ UefiLessonsPkg/HIIStringsUNI/HIIStringsUNI.inf
+ UefiLessonsPkg/HIIStringsUNIRC/HIIStringsUNIRC.inf
+ UefiLessonsPkg/HIIStringsMan/HIIStringsMan.inf
+ UefiLessonsPkg/HIIAddRussianFont/HIIAddRussianFont.inf
+ UefiLessonsPkg/HIIAddLocalization/HIIAddLocalization.inf
+ UefiLessonsPkg/AddNewLanguage/AddNewLanguage.inf
+ UefiLessonsPkg/HIISimpleForm/HIISimpleForm.inf
+ UefiLessonsPkg/HIIStaticForm/HIIStaticForm.inf
+ UefiLessonsPkg/HIIStaticFormDriver/HIIStaticFormDriver.inf
+ UefiLessonsPkg/DisplayHIIByGuid/DisplayHIIByGuid.inf
+ UefiLessonsPkg/SetVariableExample/SetVariableExample.inf
+
+[PcdsFixedAtBuild]
+ gUefiLessonsPkgTokenSpaceGuid.PcdMyVar32_2|44
+
diff --git a/Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample/SetVariableExample.c b/Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample/SetVariableExample.c
new file mode 100644
index 0000000..9c99e52
--- /dev/null
+++ b/Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample/SetVariableExample.c
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2021, Konstantin Aladyshev <aladyshev22@gmail.com>
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/UefiLib.h>
+
+
+VOID Usage()
+{
+ Print(L"Delete variable\n");
+ Print(L" SetVariableExample <variable name>\n");
+ Print(L"\n");
+ Print(L"Set variable\n");
+ Print(L" SetVariableExample <variable name> <attributes> <value>\n");
+ Print(L"\n");
+ Print(L"<attributes> can be <n|b|r>\n");
+ Print(L"n - NON_VOLATILE\n");
+ Print(L"b - BOOTSERVICE_ACCESS\n");
+ Print(L"r - RUNTIME_ACCESS\n");
+}
+
+INTN EFIAPI ShellAppMain(IN UINTN Argc, IN CHAR16 **Argv)
+{
+ EFI_STATUS Status;
+
+ if (Argc==2) {
+ CHAR16* VariableName = Argv[1];
+ Status = gRT->SetVariable (
+ VariableName,
+ &gEfiCallerIdGuid,
+ 0,
+ 0,
+ NULL
+ );
+ if (EFI_ERROR (Status)) {
+ Print(L"%r\n", Status);
+ } else {
+ Print(L"Variable %s was successfully deleted\n", VariableName);
+ }
+ return Status;
+ } else if (Argc==4) {
+ CHAR16* VariableName = Argv[1];
+ CHAR16* AttributesStr = Argv[2];
+ CHAR16* Value = Argv[3];
+ UINT32 Attributes = 0;
+ for (UINTN i=0; i<StrLen(AttributesStr); i++) {
+ switch(AttributesStr[i]) {
+ case L'n':
+ Attributes |= EFI_VARIABLE_NON_VOLATILE;
+ break;
+ case L'b':
+ Attributes |= EFI_VARIABLE_BOOTSERVICE_ACCESS;
+ break;
+ case L'r':
+ Attributes |= EFI_VARIABLE_RUNTIME_ACCESS;
+ break;
+ default:
+ Print(L"Error! Unknown attribute!");
+ return EFI_INVALID_PARAMETER;
+ }
+ }
+ Status = gRT->SetVariable (
+ VariableName,
+ &gEfiCallerIdGuid,
+ Attributes,
+ StrSize(Value),
+ Value
+ );
+ if (EFI_ERROR (Status)) {
+ Print(L"%r\n", Status);
+ } else {
+ Print(L"Variable %s was successfully changed\n", VariableName);
+ }
+ return Status;
+ } else {
+ Usage();
+ }
+
+ return EFI_SUCCESS;
+}
diff --git a/Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample/SetVariableExample.inf b/Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample/SetVariableExample.inf
new file mode 100644
index 0000000..948e49a
--- /dev/null
+++ b/Lessons/Lesson_60/UefiLessonsPkg/SetVariableExample/SetVariableExample.inf
@@ -0,0 +1,24 @@
+##
+# Copyright (c) 2021, Konstantin Aladyshev <aladyshev22@gmail.com>
+#
+# SPDX-License-Identifier: MIT
+##
+
+[Defines]
+ INF_VERSION = 1.25
+ BASE_NAME = SetVariableExample
+ FILE_GUID = bb2a829f-7943-4691-a03a-f1f48519d7e6
+ MODULE_TYPE = UEFI_APPLICATION
+ VERSION_STRING = 1.0
+ ENTRY_POINT = ShellCEntryLib
+
+[Sources]
+ SetVariableExample.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+
+[LibraryClasses]
+ UefiApplicationEntryPoint
+ UefiLib
+ ShellCEntryLib
diff --git a/UefiLessonsPkg/SetVariableExample/SetVariableExample.c b/UefiLessonsPkg/SetVariableExample/SetVariableExample.c
new file mode 100644
index 0000000..9c99e52
--- /dev/null
+++ b/UefiLessonsPkg/SetVariableExample/SetVariableExample.c
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2021, Konstantin Aladyshev <aladyshev22@gmail.com>
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/UefiLib.h>
+
+
+VOID Usage()
+{
+ Print(L"Delete variable\n");
+ Print(L" SetVariableExample <variable name>\n");
+ Print(L"\n");
+ Print(L"Set variable\n");
+ Print(L" SetVariableExample <variable name> <attributes> <value>\n");
+ Print(L"\n");
+ Print(L"<attributes> can be <n|b|r>\n");
+ Print(L"n - NON_VOLATILE\n");
+ Print(L"b - BOOTSERVICE_ACCESS\n");
+ Print(L"r - RUNTIME_ACCESS\n");
+}
+
+INTN EFIAPI ShellAppMain(IN UINTN Argc, IN CHAR16 **Argv)
+{
+ EFI_STATUS Status;
+
+ if (Argc==2) {
+ CHAR16* VariableName = Argv[1];
+ Status = gRT->SetVariable (
+ VariableName,
+ &gEfiCallerIdGuid,
+ 0,
+ 0,
+ NULL
+ );
+ if (EFI_ERROR (Status)) {
+ Print(L"%r\n", Status);
+ } else {
+ Print(L"Variable %s was successfully deleted\n", VariableName);
+ }
+ return Status;
+ } else if (Argc==4) {
+ CHAR16* VariableName = Argv[1];
+ CHAR16* AttributesStr = Argv[2];
+ CHAR16* Value = Argv[3];
+ UINT32 Attributes = 0;
+ for (UINTN i=0; i<StrLen(AttributesStr); i++) {
+ switch(AttributesStr[i]) {
+ case L'n':
+ Attributes |= EFI_VARIABLE_NON_VOLATILE;
+ break;
+ case L'b':
+ Attributes |= EFI_VARIABLE_BOOTSERVICE_ACCESS;
+ break;
+ case L'r':
+ Attributes |= EFI_VARIABLE_RUNTIME_ACCESS;
+ break;
+ default:
+ Print(L"Error! Unknown attribute!");
+ return EFI_INVALID_PARAMETER;
+ }
+ }
+ Status = gRT->SetVariable (
+ VariableName,
+ &gEfiCallerIdGuid,
+ Attributes,
+ StrSize(Value),
+ Value
+ );
+ if (EFI_ERROR (Status)) {
+ Print(L"%r\n", Status);
+ } else {
+ Print(L"Variable %s was successfully changed\n", VariableName);
+ }
+ return Status;
+ } else {
+ Usage();
+ }
+
+ return EFI_SUCCESS;
+}
diff --git a/UefiLessonsPkg/SetVariableExample/SetVariableExample.inf b/UefiLessonsPkg/SetVariableExample/SetVariableExample.inf
new file mode 100644
index 0000000..948e49a
--- /dev/null
+++ b/UefiLessonsPkg/SetVariableExample/SetVariableExample.inf
@@ -0,0 +1,24 @@
+##
+# Copyright (c) 2021, Konstantin Aladyshev <aladyshev22@gmail.com>
+#
+# SPDX-License-Identifier: MIT
+##
+
+[Defines]
+ INF_VERSION = 1.25
+ BASE_NAME = SetVariableExample
+ FILE_GUID = bb2a829f-7943-4691-a03a-f1f48519d7e6
+ MODULE_TYPE = UEFI_APPLICATION
+ VERSION_STRING = 1.0
+ ENTRY_POINT = ShellCEntryLib
+
+[Sources]
+ SetVariableExample.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+
+[LibraryClasses]
+ UefiApplicationEntryPoint
+ UefiLib
+ ShellCEntryLib
diff --git a/UefiLessonsPkg/UefiLessonsPkg.dsc b/UefiLessonsPkg/UefiLessonsPkg.dsc
index 67ab576..b33c87d 100644
--- a/UefiLessonsPkg/UefiLessonsPkg.dsc
+++ b/UefiLessonsPkg/UefiLessonsPkg.dsc
@@ -76,6 +76,7 @@
UefiLessonsPkg/HIIStaticForm/HIIStaticForm.inf
UefiLessonsPkg/HIIStaticFormDriver/HIIStaticFormDriver.inf
UefiLessonsPkg/DisplayHIIByGuid/DisplayHIIByGuid.inf
+ UefiLessonsPkg/SetVariableExample/SetVariableExample.inf
[PcdsFixedAtBuild]
gUefiLessonsPkgTokenSpaceGuid.PcdMyVar32_2|44