From e25803f0f0fcee1f3fa34dea67ca89ba1cada9dd Mon Sep 17 00:00:00 2001 From: klu2 Date: Tue, 6 Jan 2009 03:25:24 +0000 Subject: [PATCH] 1, Enable USB boot for R9's Duet. 2, Work around an RTC issue for DUET under vmware environment. 3, Enable early serial status code output for DxeCore module. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7187 6f19259b-4bc3-4df7-8a09-765794883524 --- DuetPkg/CreateBootDisk.bat | 23 +++++++++++++++++++---- DuetPkg/DuetPkg.dsc | 5 +++-- DuetPkg/DxeIpl/DxeInit.c | 32 +++++++++++++++++++++++++++----- DuetPkg/PcRtc/RealTimeClock.c | 12 +++++++----- 4 files changed, 56 insertions(+), 16 deletions(-) diff --git a/DuetPkg/CreateBootDisk.bat b/DuetPkg/CreateBootDisk.bat index 8bed045a0c..c37eed09cc 100644 --- a/DuetPkg/CreateBootDisk.bat +++ b/DuetPkg/CreateBootDisk.bat @@ -3,7 +3,7 @@ @REM Set up environment at fisrt. @REM set BASETOOLS_DIR=%WORKSPACE_TOOLS_PATH%\Bin\Win32 -@set BASETOOLS_DIR=m:\tree\BaseTools\Bin\Win32 +@set BASETOOLS_DIR=n:\BaseTools\Bin\Win32 @set BUILD_DIR=%WORKSPACE%\Build\DuetPkg\DEBUG_MYTOOLS @set DISK_LABEL=DUET @echo on @@ -14,6 +14,7 @@ @if "%3"=="" goto Help @set EFI_BOOT_DISK=%2 @if "%1"=="floppy" goto CreateFloppy +@if "%1"=="file" goto CreateFile @if "%1"=="usb" goto CreateUsb @if "%1"=="ide" goto CreateIde goto Help @@ -37,6 +38,17 @@ mkdir %EFI_BOOT_DISK%\efi\boot copy %WORKSPACE%\EdkShellBinPkg\bin\ia32\Shell.efi %EFI_BOOT_DISK%\efi\boot\bootia32.efi /y @goto end +:CreateFile +@if NOT "%3"=="FAT12" goto WrongFATType +@echo Start to create file boot disk ... +@echo Create boot sector ... +%BASETOOLS_DIR%\Genbootsector.exe -i %EFI_BOOT_DISK% -o FDBs.com +%BASETOOLS_DIR%\Bootsectimage.exe -g FDBs.com %BUILD_DIR%\IA32\DuetPkg\BootSector\BootSector\OUTPUT\Bootsect.com -f +@REM @del FDBS.com +%BASETOOLS_DIR%\Genbootsector.exe -o %EFI_BOOT_DISK% -i %BUILD_DIR%\IA32\DuetPkg\BootSector\BootSector\OUTPUT\Bootsect.com +@echo Done. +@goto end + :CreateUsb @echo Start to create usb boot disk ... @if "%3"=="FAT16" goto CreateUsb_FAT16 @@ -44,6 +56,7 @@ copy %WORKSPACE%\EdkShellBinPkg\bin\ia32\Shell.efi %EFI_BOOT_DISK%\efi\boot\boot @if "%3"=="FAT12" goto WrongFATType :CreateUsb_FAT16 +@if "%4"=="step2" goto CreateUsb_FAT16_step2 @echo Format %EFI_BOOT_DISK% ... @echo.> FormatCommandInput.txt @format /FS:FAT /v:%DISK_LABEL% /q %EFI_BOOT_DISK% < FormatCommandInput.txt > NUL @@ -51,14 +64,16 @@ copy %WORKSPACE%\EdkShellBinPkg\bin\ia32\Shell.efi %EFI_BOOT_DISK%\efi\boot\boot @echo Create boot sector ... @%BASETOOLS_DIR%\Genbootsector.exe -i %EFI_BOOT_DISK% -o UsbBs16.com @%BASETOOLS_DIR%\Bootsectimage.exe -g UsbBs16.com %BUILD_DIR%\IA32\DuetPkg\BootSector\BootSector\OUTPUT\Bs16.com -f -@del UsbBs16.com @%BASETOOLS_DIR%\Genbootsector.exe -o %EFI_BOOT_DISK% -i %BUILD_DIR%\IA32\DuetPkg\BootSector\BootSector\OUTPUT\Bs16.com @%BASETOOLS_DIR%\Genbootsector.exe -m -o %EFI_BOOT_DISK% -i %BUILD_DIR%\IA32\DuetPkg\BootSector\BootSector\OUTPUT\Mbr.com +@echo Done. +@echo PLEASE UNPLUG USB, THEN PLUG IT AGAIN! +@goto end + +:CreateUsb_FAT16_step2 @copy %BUILD_DIR%\FV\EfiLdr16 %EFI_BOOT_DISK% @mkdir %EFI_BOOT_DISK%\efi\boot @copy %WORKSPACE%\EdkShellBinPkg\bin\ia32\Shell.efi %EFI_BOOT_DISK%\efi\boot\bootia32.efi /y -@echo Done. -@echo PLEASE UNPLUG USB, THEN PLUG IT AGAIN! @goto end :CreateUsb_FAT32 diff --git a/DuetPkg/DuetPkg.dsc b/DuetPkg/DuetPkg.dsc index a87515cde9..323d84b8f9 100644 --- a/DuetPkg/DuetPkg.dsc +++ b/DuetPkg/DuetPkg.dsc @@ -67,11 +67,12 @@ MemoryAllocationLib|MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf DebugLib|IntelFrameworkModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf - ReportStatusCodeLib|IntelFrameworkModulePkg/Library/DxeReportStatusCodeLibFramework/DxeReportStatusCodeLib.inf + ReportStatusCodeLib|DuetPkg/Library/DuetDxeReportStatusCodeLib/DuetDxeReportStatusCodeLib.inf SerialPortLib|DuetPkg/Library/DuetSerialIoLib/DuetSerialIoLib.inf PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf ExtractGuidedSectionLib|MdePkg/Library/DxeExtractGuidedSectionLib/DxeExtractGuidedSectionLib.inf - + + [LibraryClasses.common.DXE_RUNTIME_DRIVER] MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf diff --git a/DuetPkg/DxeIpl/DxeInit.c b/DuetPkg/DxeIpl/DxeInit.c index 6bc3170bc5..2f4e5b9f82 100644 --- a/DuetPkg/DxeIpl/DxeInit.c +++ b/DuetPkg/DxeIpl/DxeInit.c @@ -110,6 +110,19 @@ EnterDxeMain ( IN VOID *PageTable ); +VOID +WaitForKey () +{ + PrintString("Press Enter to continue ...\n"); + _asm { + mov al, 20h + out 64h, al + AGAIN: in al, 60h + cmp al, 1ch + jnz AGAIN + } +} + VOID DxeInit ( IN EFILDRHANDOFF *Handoff @@ -139,6 +152,7 @@ Returns: ClearScreen(); PrintString("Enter DxeIpl ...\n"); + /* ClearScreen(); PrintString("handoff:\n"); @@ -166,27 +180,31 @@ Returns: // * Don't report FV as physical memory // * MemoryAllocation Hob should only cover physical memory // * Use ResourceDescriptor Hob to report physical memory or Firmware Device and they shouldn't be overlapped - + PrintString("Prepare Cpu HOB information ...\n"); PrepareHobCpu (); + // // 1. BFV // + PrintString("Prepare BFV HOB information ...\n"); PrepareHobBfv (Handoff->BfvBase, Handoff->BfvSize); // // 2. Updates Memory information, and get the top free address under 4GB // + PrintString("Prepare Memory HOB information ...\n"); MemoryTopOnDescriptor = PrepareHobMemory (Handoff->MemDescCount, Handoff->MemDesc); - + // // 3. Put [NV], [Stack], [PageTable], [MemDesc], [HOB] just below the [top free address under 4GB] // // 3.1 NV data + PrintString("Prepare NV Storage information ...\n"); NvStorageBase = PrepareHobNvStorage (MemoryTopOnDescriptor); AsciiSPrint (PrintBuffer, 256, "NV Storage Base=0x%x\n", (UINTN)NvStorageBase); PrintString (PrintBuffer); - + // 3.2 Stack StackTop = NvStorageBase; StackBottom = PrepareHobStack (StackTop); @@ -203,6 +221,7 @@ Returns: // // 4. Register the memory occupied by DxeCore and DxeIpl together as DxeCore // + PrintString("Prepare DxeCore memory Hob ...\n"); PrepareHobDxeCore ( Handoff->DxeCoreEntryPoint, (EFI_PHYSICAL_ADDRESS)(UINTN)Handoff->DxeCoreImageBase, @@ -210,6 +229,7 @@ Returns: ); PrepareHobLegacyTable (gHob); + PreparePpisNeededByDxeCore (gHob); CompleteHobGeneration (); @@ -292,12 +312,14 @@ Returns: PrintString("\n"); EFI_DEADLOOP(); */ + WaitForKey (); ClearScreen(); PrintString("\n\n\n\n\n\n\n\n\n\n"); PrintString(" WELCOME TO EFI WORLD!\n"); - + EnterDxeMain (StackTop, Handoff->DxeCoreEntryPoint, gHob, PageTableBase); - + + PrintString("Fail to enter DXE main!\n"); // // Should never get here // diff --git a/DuetPkg/PcRtc/RealTimeClock.c b/DuetPkg/PcRtc/RealTimeClock.c index 1df9945d4e..d3c5f31c4d 100644 --- a/DuetPkg/PcRtc/RealTimeClock.c +++ b/DuetPkg/PcRtc/RealTimeClock.c @@ -191,11 +191,13 @@ Returns: // // Wait for up to 0.1 seconds for the RTC to be updated // - Status = RtcWaitToUpdate (100000); - if (EFI_ERROR (Status)) { - EfiReleaseLock (&Global->RtcLock); - return EFI_DEVICE_ERROR; - } + // KEN: BUGBUG following wait action will cause failure under vmware environment. + // + //Status = RtcWaitToUpdate (100000); + //if (EFI_ERROR (Status)) { + // EfiReleaseLock (&Global->RtcLock); + // return EFI_DEVICE_ERROR; + //} // // Get the Time/Date/Daylight Savings values. // -- 2.39.2