From 6064c1e48b622f53538f4df9bdd402c607a87d51 Mon Sep 17 00:00:00 2001
From: Konstantin Aladyshev <aladyshev22@gmail.com>
Date: Sat, 10 Jul 2021 00:04:40 +0300
Subject: Move lessons to separate folder

Signed-off-by: Konstantin Aladyshev <aladyshev22@gmail.com>
---
 .../UefiLessonsPkg/HelloWorld/HelloWorld.c         |  15 +++
 .../UefiLessonsPkg/HelloWorld/HelloWorld.inf       |  18 ++++
 .../UefiLessonsPkg/ImageHandle/ImageHandle.c       | 102 +++++++++++++++++++++
 .../UefiLessonsPkg/ImageHandle/ImageHandle.inf     |  18 ++++
 .../Lesson_09/UefiLessonsPkg/ImageInfo/ImageInfo.c |  44 +++++++++
 .../UefiLessonsPkg/ImageInfo/ImageInfo.inf         |  22 +++++
 .../UefiLessonsPkg/SimplestApp/SimplestApp.c       |  10 ++
 .../UefiLessonsPkg/SimplestApp/SimplestApp.inf     |  16 ++++
 .../Lesson_09/UefiLessonsPkg/UefiLessonsPkg.dsc    |  32 +++++++
 9 files changed, 277 insertions(+)
 create mode 100644 Lessons/Lesson_09/UefiLessonsPkg/HelloWorld/HelloWorld.c
 create mode 100644 Lessons/Lesson_09/UefiLessonsPkg/HelloWorld/HelloWorld.inf
 create mode 100644 Lessons/Lesson_09/UefiLessonsPkg/ImageHandle/ImageHandle.c
 create mode 100644 Lessons/Lesson_09/UefiLessonsPkg/ImageHandle/ImageHandle.inf
 create mode 100644 Lessons/Lesson_09/UefiLessonsPkg/ImageInfo/ImageInfo.c
 create mode 100644 Lessons/Lesson_09/UefiLessonsPkg/ImageInfo/ImageInfo.inf
 create mode 100644 Lessons/Lesson_09/UefiLessonsPkg/SimplestApp/SimplestApp.c
 create mode 100644 Lessons/Lesson_09/UefiLessonsPkg/SimplestApp/SimplestApp.inf
 create mode 100644 Lessons/Lesson_09/UefiLessonsPkg/UefiLessonsPkg.dsc

(limited to 'Lessons/Lesson_09/UefiLessonsPkg')

diff --git a/Lessons/Lesson_09/UefiLessonsPkg/HelloWorld/HelloWorld.c b/Lessons/Lesson_09/UefiLessonsPkg/HelloWorld/HelloWorld.c
new file mode 100644
index 0000000..1f05899
--- /dev/null
+++ b/Lessons/Lesson_09/UefiLessonsPkg/HelloWorld/HelloWorld.c
@@ -0,0 +1,15 @@
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiLib.h>
+
+EFI_STATUS
+EFIAPI
+UefiMain (
+  IN EFI_HANDLE        ImageHandle,
+  IN EFI_SYSTEM_TABLE  *SystemTable
+  )
+{
+  SystemTable->ConOut->OutputString(SystemTable->ConOut, L"Hello World!\n");
+  gST->ConOut->OutputString(gST->ConOut, L"Hello again!\n");
+  Print(L"Bye!\n");
+  return EFI_SUCCESS;
+}
diff --git a/Lessons/Lesson_09/UefiLessonsPkg/HelloWorld/HelloWorld.inf b/Lessons/Lesson_09/UefiLessonsPkg/HelloWorld/HelloWorld.inf
new file mode 100644
index 0000000..d65ca2e
--- /dev/null
+++ b/Lessons/Lesson_09/UefiLessonsPkg/HelloWorld/HelloWorld.inf
@@ -0,0 +1,18 @@
+[Defines]
+  INF_VERSION                    = 1.25
+  BASE_NAME                      = HelloWorld
+  FILE_GUID                      = 2e55fa38-f148-42d3-af90-1be247323e30
+  MODULE_TYPE                    = UEFI_APPLICATION
+  VERSION_STRING                 = 1.0
+  ENTRY_POINT                    = UefiMain
+
+[Sources]
+  HelloWorld.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+
+[LibraryClasses]
+  UefiApplicationEntryPoint
+  UefiLib
+
diff --git a/Lessons/Lesson_09/UefiLessonsPkg/ImageHandle/ImageHandle.c b/Lessons/Lesson_09/UefiLessonsPkg/ImageHandle/ImageHandle.c
new file mode 100644
index 0000000..6117243
--- /dev/null
+++ b/Lessons/Lesson_09/UefiLessonsPkg/ImageHandle/ImageHandle.c
@@ -0,0 +1,102 @@
+#include <Library/MemoryAllocationLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiLib.h>
+
+typedef struct {
+  UINTN               Signature;
+  /// All handles list of IHANDLE
+  LIST_ENTRY          AllHandles;
+  /// List of PROTOCOL_INTERFACE's for this handle
+  LIST_ENTRY          Protocols;
+  UINTN               LocateRequest;
+  /// The Handle Database Key value when this handle was last created or modified
+  UINT64              Key;
+} IHANDLE;
+
+typedef struct {
+  UINTN               Signature;
+  /// Link Entry inserted to mProtocolDatabase
+  LIST_ENTRY          AllEntries;
+  /// ID of the protocol
+  EFI_GUID            ProtocolID;
+  /// All protocol interfaces
+  LIST_ENTRY          Protocols;
+  /// Registerd notification handlers
+  LIST_ENTRY          Notify;
+} PROTOCOL_ENTRY;
+
+typedef struct {
+  UINTN                       Signature;
+  /// Link on IHANDLE.Protocols
+  LIST_ENTRY                  Link;
+  /// Back pointer
+  IHANDLE                     *Handle;
+  /// Link on PROTOCOL_ENTRY.Protocols
+  LIST_ENTRY                  ByProtocol;
+  /// The protocol ID
+  PROTOCOL_ENTRY              *Protocol;
+  /// The interface value
+  VOID                        *Interface;
+  /// OPEN_PROTOCOL_DATA list
+  LIST_ENTRY                  OpenList;
+  UINTN                       OpenListCount;
+
+} PROTOCOL_INTERFACE;
+
+
+#define offsetof(a,b) ((INTN)(&(((a*)(0))->b)))
+
+#define container_of(ptr, type, member) ({                      \
+        const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
+        (type *)( (char *)__mptr - offsetof(type,member) );})
+
+EFI_STATUS
+EFIAPI
+UefiMain (
+  IN EFI_HANDLE        ImageHandle,
+  IN EFI_SYSTEM_TABLE  *SystemTable
+  )
+{
+  IHANDLE* MyHandle = ImageHandle;
+  Print(L"Signature: %c %c %c %c\n", (MyHandle->Signature >>  0) & 0xff,
+                                     (MyHandle->Signature >>  8) & 0xff,
+                                     (MyHandle->Signature >> 16) & 0xff,
+                                     (MyHandle->Signature >> 24) & 0xff);
+
+  Print(L"Back Protocol Interface Link: %p\n", MyHandle->Protocols.BackLink);
+  Print(L"Forward Protocol Interface Link: %p\n", MyHandle->Protocols.ForwardLink);
+
+  LIST_ENTRY *FirstLink = MyHandle->Protocols.ForwardLink;
+  LIST_ENTRY *CurrentLink = FirstLink;
+  do {
+  	PROTOCOL_INTERFACE* MyProtocolInterface = container_of(CurrentLink, PROTOCOL_INTERFACE, Link);
+
+        Print(L"\n");
+        Print(L"Current Link: %p\n", CurrentLink);
+  	Print(L"Signature: %x %x %x %x\n", (MyProtocolInterface->Signature >>  0) & 0xff,
+        	                           (MyProtocolInterface->Signature >>  8) & 0xff,
+                	                   (MyProtocolInterface->Signature >> 16) & 0xff,
+                        	           (MyProtocolInterface->Signature >> 24) & 0xff);
+
+  	Print(L"Back Link: %p\n", MyProtocolInterface->Link.BackLink);
+	Print(L"Forward Link: %p\n", MyProtocolInterface->Link.ForwardLink);
+	Print(L"GUID=%g\n", MyProtocolInterface->Protocol->ProtocolID);
+        CurrentLink = MyProtocolInterface->Link.ForwardLink;
+  } while (CurrentLink != FirstLink);
+
+  Print(L"________\n");
+  EFI_GUID **ProtocolGuidArray;
+  UINTN ArrayCount;
+  EFI_STATUS Status = gBS->ProtocolsPerHandle(ImageHandle,
+					      &ProtocolGuidArray,
+					      &ArrayCount);
+
+  if (Status == EFI_SUCCESS) {
+    for (int i=0; i<ArrayCount; i++) {
+      Print(L"%g\n", ProtocolGuidArray[i]);
+    }
+    FreePool(ProtocolGuidArray);
+  }
+
+  return EFI_SUCCESS;
+}
diff --git a/Lessons/Lesson_09/UefiLessonsPkg/ImageHandle/ImageHandle.inf b/Lessons/Lesson_09/UefiLessonsPkg/ImageHandle/ImageHandle.inf
new file mode 100644
index 0000000..34256ee
--- /dev/null
+++ b/Lessons/Lesson_09/UefiLessonsPkg/ImageHandle/ImageHandle.inf
@@ -0,0 +1,18 @@
+[Defines]
+  INF_VERSION                    = 1.25
+  BASE_NAME                      = ImageHandle
+  FILE_GUID                      = b68d3472-70c7-4928-841b-6566032e0a23
+  MODULE_TYPE                    = UEFI_APPLICATION
+  VERSION_STRING                 = 1.0
+  ENTRY_POINT                    = UefiMain
+
+[Sources]
+  ImageHandle.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+
+[LibraryClasses]
+  UefiApplicationEntryPoint
+  UefiLib
+
diff --git a/Lessons/Lesson_09/UefiLessonsPkg/ImageInfo/ImageInfo.c b/Lessons/Lesson_09/UefiLessonsPkg/ImageInfo/ImageInfo.c
new file mode 100644
index 0000000..c45570e
--- /dev/null
+++ b/Lessons/Lesson_09/UefiLessonsPkg/ImageInfo/ImageInfo.c
@@ -0,0 +1,44 @@
+#include <Library/UefiBootServicesTableLib.h>
+#include <Library/UefiLib.h>
+
+#include <Protocol/LoadedImage.h>
+#include <Library/DevicePathLib.h>
+
+EFI_STATUS
+EFIAPI
+UefiMain (
+  IN EFI_HANDLE        ImageHandle,
+  IN EFI_SYSTEM_TABLE  *SystemTable
+  )
+{
+  EFI_STATUS Status;
+  EFI_LOADED_IMAGE_PROTOCOL* LoadedImage;
+
+  Status = gBS->HandleProtocol(
+    ImageHandle,
+    &gEfiLoadedImageProtocolGuid,
+    (VOID **) &LoadedImage
+  );
+
+  if (Status == EFI_SUCCESS) {
+    EFI_DEVICE_PATH_PROTOCOL* DevicePath;
+
+    Status = gBS->HandleProtocol(
+      ImageHandle,
+      &gEfiLoadedImageDevicePathProtocolGuid,
+      (VOID**) &DevicePath
+    );
+
+    if (Status == EFI_SUCCESS) {
+      Print(L"Image device: %s\n", ConvertDevicePathToText(DevicePath, FALSE, TRUE));
+      Print(L"Image file: %s\n",  ConvertDevicePathToText(LoadedImage->FilePath, FALSE, TRUE));	// EFI_DEVICE_PATH_PROTOCOL *FilePath
+      Print(L"Image Base: %X\n", LoadedImage->ImageBase);
+      Print(L"Image Size: %X\n", LoadedImage->ImageSize);
+    } else {
+      Print(L"Can't get EFI_LOADED_IMAGE_PROTOCOL, Status=%r\n", Status);
+    }
+  } else {
+    Print(L"Can't get EFI_DEVICE_PATH_PROTOCOL, Status=%r\n", Status);
+  }
+  return EFI_SUCCESS;
+}
diff --git a/Lessons/Lesson_09/UefiLessonsPkg/ImageInfo/ImageInfo.inf b/Lessons/Lesson_09/UefiLessonsPkg/ImageInfo/ImageInfo.inf
new file mode 100644
index 0000000..0ce54a6
--- /dev/null
+++ b/Lessons/Lesson_09/UefiLessonsPkg/ImageInfo/ImageInfo.inf
@@ -0,0 +1,22 @@
+[Defines]
+  INF_VERSION                    = 1.25
+  BASE_NAME                      = ImageInfo
+  FILE_GUID                      = b68d3472-70c7-4928-841b-6566032e0a23
+  MODULE_TYPE                    = UEFI_APPLICATION
+  VERSION_STRING                 = 1.0
+  ENTRY_POINT                    = UefiMain
+
+[Sources]
+  ImageInfo.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+
+[LibraryClasses]
+  UefiApplicationEntryPoint
+  UefiLib
+
+[Protocols]
+  gEfiLoadedImageProtocolGuid
+  gEfiLoadedImageDevicePathProtocolGuid
+
diff --git a/Lessons/Lesson_09/UefiLessonsPkg/SimplestApp/SimplestApp.c b/Lessons/Lesson_09/UefiLessonsPkg/SimplestApp/SimplestApp.c
new file mode 100644
index 0000000..8bdf500
--- /dev/null
+++ b/Lessons/Lesson_09/UefiLessonsPkg/SimplestApp/SimplestApp.c
@@ -0,0 +1,10 @@
+EFI_STATUS
+EFIAPI
+UefiMain (
+  IN EFI_HANDLE        ImageHandle,
+  IN EFI_SYSTEM_TABLE  *SystemTable
+  )
+{
+  return EFI_SUCCESS;
+}
+
diff --git a/Lessons/Lesson_09/UefiLessonsPkg/SimplestApp/SimplestApp.inf b/Lessons/Lesson_09/UefiLessonsPkg/SimplestApp/SimplestApp.inf
new file mode 100644
index 0000000..7d4bae2
--- /dev/null
+++ b/Lessons/Lesson_09/UefiLessonsPkg/SimplestApp/SimplestApp.inf
@@ -0,0 +1,16 @@
+[Defines]
+  INF_VERSION                    = 1.25
+  BASE_NAME                      = SimplestApp
+  FILE_GUID                      = 4a298956-fbe0-47fb-ae3a-2d5a0a959a26
+  MODULE_TYPE                    = UEFI_APPLICATION
+  VERSION_STRING                 = 1.0
+  ENTRY_POINT                    = UefiMain
+
+[Sources]
+  SimplestApp.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+
+[LibraryClasses]
+  UefiApplicationEntryPoint
diff --git a/Lessons/Lesson_09/UefiLessonsPkg/UefiLessonsPkg.dsc b/Lessons/Lesson_09/UefiLessonsPkg/UefiLessonsPkg.dsc
new file mode 100644
index 0000000..ff2edf6
--- /dev/null
+++ b/Lessons/Lesson_09/UefiLessonsPkg/UefiLessonsPkg.dsc
@@ -0,0 +1,32 @@
+[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
+  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
+
+[Components]
+  UefiLessonsPkg/SimplestApp/SimplestApp.inf
+  UefiLessonsPkg/HelloWorld/HelloWorld.inf
+  UefiLessonsPkg/ImageHandle/ImageHandle.inf
+  UefiLessonsPkg/ImageInfo/ImageInfo.inf
+
+
-- 
cgit v1.2.3-18-g5258