VirtualBox

Ignore:
Timestamp:
Apr 14, 2023 3:17:44 PM (21 months ago)
Author:
vboxsync
Message:

Devices/EFI/FirmwareNew: Update to edk2-stable202302 and make it build, bugref:4643

Location:
trunk/src/VBox/Devices/EFI/FirmwareNew
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/EFI/FirmwareNew

  • trunk/src/VBox/Devices/EFI/FirmwareNew/ShellPkg/Library/UefiShellDebug1CommandsLib/LoadPciRom.c

    r85718 r99404  
    4040EFI_STATUS
    4141LoadEfiDriversFromRomImage (
    42   VOID                      *RomBar,
    43   UINTN                     RomSize,
    44   CONST CHAR16              *FileName
     42  VOID          *RomBar,
     43  UINTN         RomSize,
     44  CONST CHAR16  *FileName
    4545  );
    4646
    47 STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
    48   {L"-nc", TypeFlag},
    49   {NULL, TypeMax}
    50   };
     47STATIC CONST SHELL_PARAM_ITEM  ParamList[] = {
     48  { L"-nc", TypeFlag },
     49  { NULL,   TypeMax  }
     50};
    5151
    5252/**
     
    6363  )
    6464{
    65   EFI_SHELL_FILE_INFO     *FileList;
    66   UINTN                   SourceSize;
    67   UINT8                   *File1Buffer;
    68   EFI_STATUS              Status;
    69   LIST_ENTRY              *Package;
    70   CHAR16                  *ProblemParam;
    71   SHELL_STATUS            ShellStatus;
    72   BOOLEAN                 Connect;
    73   CONST CHAR16            *Param;
    74   UINTN                   ParamCount;
    75   EFI_SHELL_FILE_INFO     *Node;
     65  EFI_SHELL_FILE_INFO  *FileList;
     66  UINTN                SourceSize;
     67  UINT8                *File1Buffer;
     68  EFI_STATUS           Status;
     69  LIST_ENTRY           *Package;
     70  CHAR16               *ProblemParam;
     71  SHELL_STATUS         ShellStatus;
     72  BOOLEAN              Connect;
     73  CONST CHAR16         *Param;
     74  UINTN                ParamCount;
     75  EFI_SHELL_FILE_INFO  *Node;
     76
    7677  //
    7778  // Local variable initializations
     
    8182  FileList    = NULL;
    8283
    83 
    8484  //
    8585  // verify number of arguments
    8686  //
    8787  Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);
    88   if (EFI_ERROR(Status)) {
    89     if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {
    90       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"loadpcirom", ProblemParam);
    91       FreePool(ProblemParam);
     88  if (EFI_ERROR (Status)) {
     89    if ((Status == EFI_VOLUME_CORRUPTED) && (ProblemParam != NULL)) {
     90      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"loadpcirom", ProblemParam);
     91      FreePool (ProblemParam);
    9292      ShellStatus = SHELL_INVALID_PARAMETER;
    9393    } else {
    94       ASSERT(FALSE);
     94      ASSERT (FALSE);
    9595    }
    9696  } else {
    97     if (ShellCommandLineGetCount(Package) < 2) {
    98       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"loadpcirom");
     97    if (ShellCommandLineGetCount (Package) < 2) {
     98      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"loadpcirom");
    9999      ShellStatus = SHELL_INVALID_PARAMETER;
    100100    } else {
    101       if (ShellCommandLineGetFlag(Package, L"-nc")) {
     101      if (ShellCommandLineGetFlag (Package, L"-nc")) {
    102102        Connect = FALSE;
    103103      } else {
     
    109109      // if parameter is a directory then add all the files below it to the list
    110110      //
    111       for ( ParamCount = 1, Param = ShellCommandLineGetRawValue(Package, ParamCount)
    112           ; Param != NULL
    113           ; ParamCount++, Param = ShellCommandLineGetRawValue(Package, ParamCount)
    114          ){
    115         Status = ShellOpenFileMetaArg((CHAR16*)Param, EFI_FILE_MODE_WRITE|EFI_FILE_MODE_READ, &FileList);
    116         if (EFI_ERROR(Status)) {
    117           ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"loadpcirom", Param);
     111      for ( ParamCount = 1, Param = ShellCommandLineGetRawValue (Package, ParamCount)
     112            ; Param != NULL
     113            ; ParamCount++, Param = ShellCommandLineGetRawValue (Package, ParamCount)
     114            )
     115      {
     116        Status = ShellOpenFileMetaArg ((CHAR16 *)Param, EFI_FILE_MODE_WRITE|EFI_FILE_MODE_READ, &FileList);
     117        if (EFI_ERROR (Status)) {
     118          ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"loadpcirom", Param);
    118119          ShellStatus = SHELL_ACCESS_DENIED;
    119120          break;
    120121        }
    121122      }
    122       if (ShellStatus == SHELL_SUCCESS  && FileList != NULL) {
     123
     124      if ((ShellStatus == SHELL_SUCCESS) && (FileList != NULL)) {
    123125        //
    124126        // loop through the list and make sure we are not aborting...
    125127        //
    126         for ( Node = (EFI_SHELL_FILE_INFO*)GetFirstNode(&FileList->Link)
    127             ; !IsNull(&FileList->Link, &Node->Link) && !ShellGetExecutionBreakFlag()
    128             ; Node = (EFI_SHELL_FILE_INFO*)GetNextNode(&FileList->Link, &Node->Link)
    129            ){
    130           if (EFI_ERROR(Node->Status)){
    131             ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"loadpcirom", Node->FullName);
     128        for ( Node = (EFI_SHELL_FILE_INFO *)GetFirstNode (&FileList->Link)
     129              ; !IsNull (&FileList->Link, &Node->Link) && !ShellGetExecutionBreakFlag ()
     130              ; Node = (EFI_SHELL_FILE_INFO *)GetNextNode (&FileList->Link, &Node->Link)
     131              )
     132        {
     133          if (EFI_ERROR (Node->Status)) {
     134            ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"loadpcirom", Node->FullName);
    132135            ShellStatus = SHELL_INVALID_PARAMETER;
    133136            continue;
    134137          }
    135           if (FileHandleIsDirectory(Node->Handle) == EFI_SUCCESS) {
    136             ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, L"loadpcirom", Node->FullName);
     138
     139          if (FileHandleIsDirectory (Node->Handle) == EFI_SUCCESS) {
     140            ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_DIR), gShellDebug1HiiHandle, L"loadpcirom", Node->FullName);
    137141            ShellStatus = SHELL_INVALID_PARAMETER;
    138142            continue;
    139143          }
    140           SourceSize  = (UINTN) Node->Info->FileSize;
     144
     145          SourceSize  = (UINTN)Node->Info->FileSize;
    141146          File1Buffer = AllocateZeroPool (SourceSize);
    142147          if (File1Buffer == NULL) {
     
    145150            continue;
    146151          }
    147           Status = gEfiShellProtocol->ReadFile(Node->Handle, &SourceSize, File1Buffer);
    148           if (EFI_ERROR(Status)) {
    149             ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_READ_FAIL), gShellDebug1HiiHandle, L"loadpcirom", Node->FullName);
     152
     153          Status = gEfiShellProtocol->ReadFile (Node->Handle, &SourceSize, File1Buffer);
     154          if (EFI_ERROR (Status)) {
     155            ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_FILE_READ_FAIL), gShellDebug1HiiHandle, L"loadpcirom", Node->FullName);
    150156            ShellStatus = SHELL_INVALID_PARAMETER;
    151157          } else {
    152158            Status = LoadEfiDriversFromRomImage (
    153                       File1Buffer,
    154                       SourceSize,
    155                       Node->FullName
    156                      );
    157 
    158             ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_LOAD_PCI_ROM_RES), gShellDebug1HiiHandle, Node->FullName, Status);
    159           }
    160           FreePool(File1Buffer);
     159                       File1Buffer,
     160                       SourceSize,
     161                       Node->FullName
     162                       );
     163
     164            ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_LOAD_PCI_ROM_RES), gShellDebug1HiiHandle, Node->FullName, Status);
     165          }
     166
     167          FreePool (File1Buffer);
    161168        }
    162169      } else if (ShellStatus == SHELL_SUCCESS) {
    163         ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_SPEC), gShellDebug1HiiHandle, "loadpcirom");
     170        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_FILE_NOT_SPEC), gShellDebug1HiiHandle, "loadpcirom");
    164171        ShellStatus = SHELL_NOT_FOUND;
    165172      }
    166       if (FileList != NULL && !IsListEmpty(&FileList->Link)) {
    167         Status = ShellCloseFileMetaArg(&FileList);
    168       }
     173
     174      if ((FileList != NULL) && !IsListEmpty (&FileList->Link)) {
     175        Status = ShellCloseFileMetaArg (&FileList);
     176      }
     177
    169178      FileList = NULL;
    170179
     
    193202EFI_STATUS
    194203LoadEfiDriversFromRomImage (
    195   VOID                      *RomBar,
    196   UINTN                     RomSize,
    197   CONST CHAR16              *FileName
     204  VOID          *RomBar,
     205  UINTN         RomSize,
     206  CONST CHAR16  *FileName
    198207  )
    199208
     
    220229  UINT32                        InitializationSize;
    221230
    222   ImageIndex    = 0;
    223   ReturnStatus     = EFI_NOT_FOUND;
    224   RomBarOffset  = (UINTN) RomBar;
     231  ImageIndex   = 0;
     232  ReturnStatus = EFI_NOT_FOUND;
     233  RomBarOffset = (UINTN)RomBar;
    225234
    226235  do {
    227 
    228     EfiRomHeader = (EFI_PCI_EXPANSION_ROM_HEADER *) (UINTN) RomBarOffset;
     236    EfiRomHeader = (EFI_PCI_EXPANSION_ROM_HEADER *)(UINTN)RomBarOffset;
    229237
    230238    if (EfiRomHeader->Signature != PCI_EXPANSION_ROM_HEADER_SIGNATURE) {
    231       ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_LOADPCIROM_CORRUPT), gShellDebug1HiiHandle, L"loadpcirom", FileName, ImageIndex);
    232 //      PrintToken (STRING_TOKEN (STR_LOADPCIROM_IMAGE_CORRUPT), HiiHandle, ImageIndex);
     239      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_LOADPCIROM_CORRUPT), gShellDebug1HiiHandle, L"loadpcirom", FileName, ImageIndex);
     240      //      PrintToken (STRING_TOKEN (STR_LOADPCIROM_IMAGE_CORRUPT), HiiHandle, ImageIndex);
    233241      return ReturnStatus;
    234242    }
     
    238246    // The PCI Data Structure must be DWORD aligned.
    239247    //
    240     if (EfiRomHeader->PcirOffset == 0 ||
    241         (EfiRomHeader->PcirOffset & 3) != 0 ||
    242         RomBarOffset - (UINTN)RomBar + EfiRomHeader->PcirOffset + sizeof (PCI_DATA_STRUCTURE) > RomSize) {
     248    if ((EfiRomHeader->PcirOffset == 0) ||
     249        ((EfiRomHeader->PcirOffset & 3) != 0) ||
     250        (RomBarOffset - (UINTN)RomBar + EfiRomHeader->PcirOffset + sizeof (PCI_DATA_STRUCTURE) > RomSize))
     251    {
    243252      break;
    244253    }
    245254
    246     Pcir      = (PCI_DATA_STRUCTURE *) (UINTN) (RomBarOffset + EfiRomHeader->PcirOffset);
     255    Pcir = (PCI_DATA_STRUCTURE *)(UINTN)(RomBarOffset + EfiRomHeader->PcirOffset);
    247256    //
    248257    // If a valid signature is not present in the PCI Data Structure, no further images can be located.
     
    251260      break;
    252261    }
     262
    253263    ImageSize = Pcir->ImageLength * 512;
    254264    if (RomBarOffset - (UINTN)RomBar + ImageSize > RomSize) {
     
    259269        (EfiRomHeader->EfiSignature == EFI_PCI_EXPANSION_ROM_HEADER_EFISIGNATURE) &&
    260270        ((EfiRomHeader->EfiSubsystem == EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER) ||
    261          (EfiRomHeader->EfiSubsystem == EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER))) {
    262 
    263       ImageOffset             = EfiRomHeader->EfiImageHeaderOffset;
    264       InitializationSize      = EfiRomHeader->InitializationSize * 512;
    265 
    266       if (InitializationSize <= ImageSize && ImageOffset < InitializationSize) {
    267 
    268         ImageBuffer             = (VOID *) (UINTN) (RomBarOffset + ImageOffset);
     271         (EfiRomHeader->EfiSubsystem == EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER)))
     272    {
     273      ImageOffset        = EfiRomHeader->EfiImageHeaderOffset;
     274      InitializationSize = EfiRomHeader->InitializationSize * 512;
     275
     276      if ((InitializationSize <= ImageSize) && (ImageOffset < InitializationSize)) {
     277        ImageBuffer             = (VOID *)(UINTN)(RomBarOffset + ImageOffset);
    269278        ImageLength             = InitializationSize - ImageOffset;
    270279        DecompressedImageBuffer = NULL;
     
    279288
    280289        if (EfiRomHeader->CompressionType == EFI_PCI_EXPANSION_ROM_HEADER_COMPRESSED) {
    281           Status = gBS->LocateProtocol (&gEfiDecompressProtocolGuid, NULL, (VOID**)&Decompress);
    282           ASSERT_EFI_ERROR(Status);
     290          Status = gBS->LocateProtocol (&gEfiDecompressProtocolGuid, NULL, (VOID **)&Decompress);
     291          ASSERT_EFI_ERROR (Status);
    283292          if (EFI_ERROR (Status)) {
    284293            SkipImage = TRUE;
    285294          } else {
    286295            SkipImage = TRUE;
    287             Status = Decompress->GetInfo (
    288                                   Decompress,
    289                                   ImageBuffer,
    290                                   ImageLength,
    291                                   &DestinationSize,
    292                                   &ScratchSize
    293                                  );
     296            Status    = Decompress->GetInfo (
     297                                      Decompress,
     298                                      ImageBuffer,
     299                                      ImageLength,
     300                                      &DestinationSize,
     301                                      &ScratchSize
     302                                      );
    294303            if (!EFI_ERROR (Status)) {
    295304              DecompressedImageBuffer = AllocateZeroPool (DestinationSize);
     
    298307                if (Scratch != NULL) {
    299308                  Status = Decompress->Decompress (
    300                                         Decompress,
    301                                         ImageBuffer,
    302                                         ImageLength,
    303                                         DecompressedImageBuffer,
    304                                         DestinationSize,
    305                                         Scratch,
    306                                         ScratchSize
    307                                        );
     309                                         Decompress,
     310                                         ImageBuffer,
     311                                         ImageLength,
     312                                         DecompressedImageBuffer,
     313                                         DestinationSize,
     314                                         Scratch,
     315                                         ScratchSize
     316                                         );
    308317                  if (!EFI_ERROR (Status)) {
    309318                    ImageBuffer = DecompressedImageBuffer;
     
    327336
    328337          Status = gBS->LoadImage (
    329                         TRUE,
    330                         gImageHandle,
    331                         FilePath,
    332                         ImageBuffer,
    333                         ImageLength,
    334                         &ImageHandle
    335                        );
     338                          TRUE,
     339                          gImageHandle,
     340                          FilePath,
     341                          ImageBuffer,
     342                          ImageLength,
     343                          &ImageHandle
     344                          );
    336345          if (EFI_ERROR (Status)) {
    337346            //
     
    344353              gBS->UnloadImage (ImageHandle);
    345354            }
    346             ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_LOADPCIROM_LOAD_FAIL), gShellDebug1HiiHandle, L"loadpcirom", FileName, ImageIndex);
    347 //            PrintToken (STRING_TOKEN (STR_LOADPCIROM_LOAD_IMAGE_ERROR), HiiHandle, ImageIndex, Status);
     355
     356            ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_LOADPCIROM_LOAD_FAIL), gShellDebug1HiiHandle, L"loadpcirom", FileName, ImageIndex);
     357            //            PrintToken (STRING_TOKEN (STR_LOADPCIROM_LOAD_IMAGE_ERROR), HiiHandle, ImageIndex, Status);
    348358          } else {
    349359            Status = gBS->StartImage (ImageHandle, NULL, NULL);
    350360            if (EFI_ERROR (Status)) {
    351               ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_LOADPCIROM_START_FAIL), gShellDebug1HiiHandle, L"loadpcirom", FileName, ImageIndex);
    352 //              PrintToken (STRING_TOKEN (STR_LOADPCIROM_START_IMAGE), HiiHandle, ImageIndex, Status);
     361              ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_LOADPCIROM_START_FAIL), gShellDebug1HiiHandle, L"loadpcirom", FileName, ImageIndex);
     362              //              PrintToken (STRING_TOKEN (STR_LOADPCIROM_START_IMAGE), HiiHandle, ImageIndex, Status);
    353363            } else {
    354364              ReturnStatus = Status;
     
    360370          FreePool (DecompressedImageBuffer);
    361371        }
    362 
    363372      }
    364373    }
     
    366375    RomBarOffset = RomBarOffset + ImageSize;
    367376    ImageIndex++;
    368   } while (((Pcir->Indicator & 0x80) == 0x00) && ((RomBarOffset - (UINTN) RomBar) < RomSize));
     377  } while (((Pcir->Indicator & 0x80) == 0x00) && ((RomBarOffset - (UINTN)RomBar) < RomSize));
    369378
    370379  return ReturnStatus;
     
    403412      break;
    404413    }
     414
    405415    gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);
    406416  }
     
    409419    FreePool (HandleBuffer);
    410420  }
     421
    411422  return Status;
    412423}
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette