[BOOTMGFW]:
[reactos.git] / reactos / boot / environ / lib / bootlib.c
index 7efb04e..e15da5c 100644 (file)
@@ -19,11 +19,30 @@ PBOOT_APPLICATION_PARAMETER_BLOCK BlpApplicationParameters;
 BL_APPLICATION_ENTRY BlpApplicationEntry;
 BOOLEAN BlpLibraryParametersInitialized;
 
-/* temp */
-BL_TRANSLATION_TYPE MmTranslationType;
-
 /* FUNCTIONS *****************************************************************/
 
+/* HACKKKYYY */
+EFI_SYSTEM_TABLE* g_SystemTable;
+
+VOID
+EarlyPrint(_In_ PWCHAR Format, ...)
+{
+    WCHAR buffer[1024];
+    va_list args;
+
+    va_start(args, Format);
+
+    vswprintf(buffer, Format, args);
+
+    g_SystemTable->ConOut->OutputString(g_SystemTable->ConOut, L"\r");
+    g_SystemTable->ConOut->OutputString(g_SystemTable->ConOut, buffer);
+
+    g_SystemTable->BootServices->Stall(1000000);
+
+    va_end(args);
+}
+/* END HACKKKYYY */
+
 /*++
  * @name InitializeLibrary
  *
@@ -46,7 +65,7 @@ InitializeLibrary (
     )
 {
     NTSTATUS Status;
-    //PBL_MEMORY_DATA MemoryData;
+    PBL_MEMORY_DATA MemoryData;
     PBL_APPLICATION_ENTRY AppEntry;
     PBL_FIRMWARE_DESCRIPTOR FirmwareDescriptor;
     ULONG_PTR ParamPointer = (ULONG_PTR)BootAppParameters;
@@ -57,11 +76,12 @@ InitializeLibrary (
         (BootAppParameters->Signature[1] != BOOT_APPLICATION_SIGNATURE_2) ||
         (BootAppParameters->Size < sizeof(*BootAppParameters)))
     {
-        return STATUS_INVALID_PARAMETER;
+        Status = STATUS_INVALID_PARAMETER;
+        goto Quickie;
     }
 
     /* Get sub-structures */
-    //MemoryData = (PBL_MEMORY_DATA)(ParamPointer + BootAppParameters->MemoryDataOffset);
+    MemoryData = (PBL_MEMORY_DATA)(ParamPointer + BootAppParameters->MemoryDataOffset);
     FirmwareDescriptor = (PBL_FIRMWARE_DESCRIPTOR)(ParamPointer + BootAppParameters->FirmwareParametersOffset);
     AppEntry = (PBL_APPLICATION_ENTRY)(ParamPointer + BootAppParameters->AppEntryOffset);
     BlpBootDevice = (PBL_DEVICE_DESCRIPTOR)(ParamPointer + BootAppParameters->BootDeviceOffset);
@@ -78,6 +98,7 @@ InitializeLibrary (
     if (strncmp(AppEntry->Signature, BL_APP_ENTRY_SIGNATURE, 7))
     {
         Status = STATUS_INVALID_PARAMETER_9;
+        goto Quickie;
     }
 
     /* Read parameters */
@@ -101,9 +122,21 @@ InitializeLibrary (
         goto Quickie;
     }
 
+    /* Initialize the memory manager */
+    Status = BlpMmInitialize(MemoryData,
+                             BootAppParameters->MemoryTranslationType,
+                             LibraryParameters);
+    if (!NT_SUCCESS(Status))
+    {
+        EarlyPrint(L"MM init failed!\n");
+        goto Quickie;
+    }
+
+    EarlyPrint(L"TODO!\n");
     Status = STATUS_NOT_IMPLEMENTED;
 
 Quickie:
+    EarlyPrint(L"Exiting init: %lx\n", Status);
     return Status;
 }
 
@@ -132,11 +165,11 @@ BlInitializeLibrary(
     NTSTATUS Status;
 
     /* Are we re-initializing the library? */
-    if (LibraryParameters->LibraryFlags & 2)
+    if (LibraryParameters->LibraryFlags & BL_LIBRARY_FLAG_REINITIALIZE)
     {
         /* From scratch? */
         BlpLibraryParameters = *LibraryParameters;
-        if (LibraryParameters->LibraryFlags & 4)
+        if (LibraryParameters->LibraryFlags & BL_LIBRARY_FLAG_REINITIALIZE_ALL)
         {
 #if 0
             /* Initialize all the core modules again */