diff options
Diffstat (limited to 'EdkModulePkg/Bus/Pci/PciBus/Dxe/PciRomTable.c')
-rw-r--r-- | EdkModulePkg/Bus/Pci/PciBus/Dxe/PciRomTable.c | 264 |
1 files changed, 0 insertions, 264 deletions
diff --git a/EdkModulePkg/Bus/Pci/PciBus/Dxe/PciRomTable.c b/EdkModulePkg/Bus/Pci/PciBus/Dxe/PciRomTable.c index 8f5a450d75..01249d4a5e 100644 --- a/EdkModulePkg/Bus/Pci/PciBus/Dxe/PciRomTable.c +++ b/EdkModulePkg/Bus/Pci/PciBus/Dxe/PciRomTable.c @@ -101,270 +101,6 @@ Returns: mNumberOfPciRomImages++;
}
-STATIC
-VOID
-HexToString (
- CHAR16 *String,
- UINTN Value,
- UINTN Digits
- )
-/*++
-
-Routine Description:
-
- TODO: Add function description
-
-Arguments:
-
- String - TODO: add argument description
- Value - TODO: add argument description
- Digits - TODO: add argument description
-
-Returns:
-
- TODO: add return values
-
---*/
-{
- for (; Digits > 0; Digits--, String++) {
- *String = (CHAR16) ((Value >> (4 * (Digits - 1))) & 0x0f);
- if (*String > 9) {
- (*String) += ('A' - 10);
- } else {
- (*String) += '0';
- }
- }
-}
-
-STATIC
-EFI_STATUS
-PciRomLoadEfiDriversFromRomImage (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_PCI_OPTION_ROM_DESCRIPTOR *PciOptionRomDescriptor
- )
-/*++
-
-Routine Description:
-
-Arguments:
-
-Returns:
-
---*/
-// TODO: This - add argument and description to function comment
-// TODO: PciOptionRomDescriptor - add argument and description to function comment
-{
- VOID *RomBar;
- UINTN RomSize;
- CHAR16 *FileName;
- EFI_PCI_EXPANSION_ROM_HEADER *EfiRomHeader;
- PCI_DATA_STRUCTURE *Pcir;
- UINTN ImageIndex;
- UINTN RomBarOffset;
- UINT32 ImageSize;
- UINT16 ImageOffset;
- EFI_HANDLE ImageHandle;
- EFI_STATUS Status;
- EFI_STATUS retStatus;
- EFI_DEVICE_PATH_PROTOCOL *FilePath;
- BOOLEAN SkipImage;
- UINT32 DestinationSize;
- UINT32 ScratchSize;
- UINT8 *Scratch;
- VOID *ImageBuffer;
- VOID *DecompressedImageBuffer;
- UINT32 ImageLength;
- EFI_DECOMPRESS_PROTOCOL *Decompress;
-
- RomBar = (VOID *) (UINTN) PciOptionRomDescriptor->RomAddress;
- RomSize = (UINTN) PciOptionRomDescriptor->RomLength;
- FileName = L"PciRom Seg=00000000 Bus=00 Dev=00 Func=00 Image=0000";
-
- HexToString (&FileName[11], PciOptionRomDescriptor->Seg, 8);
- HexToString (&FileName[24], PciOptionRomDescriptor->Bus, 2);
- HexToString (&FileName[31], PciOptionRomDescriptor->Dev, 2);
- HexToString (&FileName[39], PciOptionRomDescriptor->Func, 2);
-
- ImageIndex = 0;
- retStatus = EFI_NOT_FOUND;
- RomBarOffset = (UINTN) RomBar;
-
- do {
-
- EfiRomHeader = (EFI_PCI_EXPANSION_ROM_HEADER *) (UINTN) RomBarOffset;
-
- if (EfiRomHeader->Signature != 0xaa55) {
- return retStatus;
- }
-
- Pcir = (PCI_DATA_STRUCTURE *) (UINTN) (RomBarOffset + EfiRomHeader->PcirOffset);
- ImageSize = Pcir->ImageLength * 512;
-
- if ((Pcir->CodeType == PCI_CODE_TYPE_EFI_IMAGE) &&
- (EfiRomHeader->EfiSignature == EFI_PCI_EXPANSION_ROM_HEADER_EFISIGNATURE) ) {
-
- if ((EfiRomHeader->EfiSubsystem == EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER) ||
- (EfiRomHeader->EfiSubsystem == EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER) ) {
-
- ImageOffset = EfiRomHeader->EfiImageHeaderOffset;
- ImageSize = EfiRomHeader->InitializationSize * 512;
-
- ImageBuffer = (VOID *) (UINTN) (RomBarOffset + ImageOffset);
- ImageLength = ImageSize - ImageOffset;
- DecompressedImageBuffer = NULL;
-
- //
- // decompress here if needed
- //
- SkipImage = FALSE;
- if (EfiRomHeader->CompressionType > EFI_PCI_EXPANSION_ROM_HEADER_COMPRESSED) {
- SkipImage = TRUE;
- }
-
- if (EfiRomHeader->CompressionType == EFI_PCI_EXPANSION_ROM_HEADER_COMPRESSED) {
- Status = gBS->LocateProtocol (&gEfiDecompressProtocolGuid, NULL, (VOID **) &Decompress);
- if (EFI_ERROR (Status)) {
- SkipImage = TRUE;
- } else {
- SkipImage = TRUE;
- Status = Decompress->GetInfo (
- Decompress,
- ImageBuffer,
- ImageLength,
- &DestinationSize,
- &ScratchSize
- );
- if (!EFI_ERROR (Status)) {
- DecompressedImageBuffer = NULL;
- DecompressedImageBuffer = AllocatePool (DestinationSize);
- if (DecompressedImageBuffer != NULL) {
- Scratch = AllocatePool (ScratchSize);
- if (Scratch != NULL) {
- Status = Decompress->Decompress (
- Decompress,
- ImageBuffer,
- ImageLength,
- DecompressedImageBuffer,
- DestinationSize,
- Scratch,
- ScratchSize
- );
- if (!EFI_ERROR (Status)) {
- ImageBuffer = DecompressedImageBuffer;
- ImageLength = DestinationSize;
- SkipImage = FALSE;
- }
-
- gBS->FreePool (Scratch);
- }
- }
- }
- }
- }
-
- if (!SkipImage) {
-
- //
- // load image and start image
- //
-
- HexToString (&FileName[48], ImageIndex, 4);
- FilePath = FileDevicePath (NULL, FileName);
-
- Status = gBS->LoadImage (
- FALSE,
- This->ImageHandle,
- FilePath,
- ImageBuffer,
- ImageLength,
- &ImageHandle
- );
- if (!EFI_ERROR (Status)) {
- Status = gBS->StartImage (ImageHandle, NULL, NULL);
- if (!EFI_ERROR (Status)) {
- PciRomAddImageMapping (
- ImageHandle,
- PciOptionRomDescriptor->Seg,
- PciOptionRomDescriptor->Bus,
- PciOptionRomDescriptor->Dev,
- PciOptionRomDescriptor->Func,
- PciOptionRomDescriptor->RomAddress,
- PciOptionRomDescriptor->RomLength
- );
- retStatus = Status;
- }
- }
- }
-
- if (DecompressedImageBuffer != NULL) {
- gBS->FreePool (DecompressedImageBuffer);
- }
-
- }
- }
-
- RomBarOffset = RomBarOffset + ImageSize;
- ImageIndex++;
- } while (((Pcir->Indicator & 0x80) == 0x00) && ((RomBarOffset - (UINTN) RomBar) < RomSize));
-
- return retStatus;
-}
-
-STATIC
-EFI_STATUS
-PciRomLoadEfiDriversFromOptionRomTable (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo
- )
-/*++
-
-Routine Description:
-
-Arguments:
-
-Returns:
-
---*/
-// TODO: This - add argument and description to function comment
-// TODO: PciRootBridgeIo - add argument and description to function comment
-// TODO: EFI_NOT_FOUND - add return value to function comment
-{
- EFI_STATUS Status;
- EFI_PCI_OPTION_ROM_TABLE *PciOptionRomTable;
- EFI_PCI_OPTION_ROM_DESCRIPTOR *PciOptionRomDescriptor;
- UINTN Index;
- EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptors;
- UINT16 MinBus;
- UINT16 MaxBus;
-
- Status = EfiGetSystemConfigurationTable (&gEfiPciOptionRomTableGuid, (VOID **) &PciOptionRomTable);
- if (EFI_ERROR (Status)) {
- return EFI_NOT_FOUND;
- }
-
- Status = EFI_NOT_FOUND;
-
- for (Index = 0; Index < PciOptionRomTable->PciOptionRomCount; Index++) {
- PciOptionRomDescriptor = &PciOptionRomTable->PciOptionRomDescriptors[Index];
- if (!PciOptionRomDescriptor->DontLoadEfiRom) {
- if (PciOptionRomDescriptor->Seg == PciRootBridgeIo->SegmentNumber) {
- Status = PciRootBridgeIo->Configuration (PciRootBridgeIo, (VOID **) &Descriptors);
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- PciGetBusRange (&Descriptors, &MinBus, &MaxBus, NULL);
- if ((MinBus <= PciOptionRomDescriptor->Bus) && (PciOptionRomDescriptor->Bus <= MaxBus)) {
- Status = PciRomLoadEfiDriversFromRomImage (This, PciOptionRomDescriptor);
- PciOptionRomDescriptor->DontLoadEfiRom |= 2;
- }
- }
- }
- }
-
- return Status;
-}
-
EFI_STATUS
PciRomGetRomResourceFromPciOptionRomTable (
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|