]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBbs.c
Remove IntelFrameworkModulePkg
[mirror_edk2.git] / IntelFrameworkModulePkg / Csm / LegacyBiosDxe / LegacyBbs.c
diff --git a/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBbs.c b/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/LegacyBbs.c
deleted file mode 100644 (file)
index 6b1dd34..0000000
+++ /dev/null
@@ -1,377 +0,0 @@
-/** @file\r
-\r
-Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
-\r
-SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-#include "LegacyBiosInterface.h"\r
-#include <IndustryStandard/Pci.h>\r
-\r
-// Give floppy 3 states\r
-// FLOPPY_PRESENT_WITH_MEDIA  = Floppy controller present and media is inserted\r
-// FLOPPY_NOT_PRESENT = No floppy controller present\r
-// FLOPPY_PRESENT_NO_MEDIA = Floppy controller present but no media inserted\r
-//\r
-#define FLOPPY_NOT_PRESENT           0\r
-#define FLOPPY_PRESENT_WITH_MEDIA    1\r
-#define FLOPPY_PRESENT_NO_MEDIA      2\r
-\r
-BBS_TABLE           *mBbsTable;\r
-BOOLEAN             mBbsTableDoneFlag   = FALSE;\r
-BOOLEAN             IsHaveMediaInFloppy = TRUE;\r
-\r
-/**\r
-  Checks the state of the floppy and if media is inserted.\r
-\r
-  This routine checks the state of the floppy and if media is inserted.\r
-  There are 3 cases:\r
-  No floppy present         - Set BBS entry to ignore\r
-  Floppy present & no media - Set BBS entry to lowest priority. We cannot\r
-  set it to ignore since 16-bit CSM will\r
-  indicate no floppy and thus drive A: is\r
-  unusable. CSM-16 will not try floppy since\r
-  lowest priority and thus not incur boot\r
-  time penality.\r
-  Floppy present & media    - Set BBS entry to some priority.\r
-\r
-  @return  State of floppy media\r
-\r
-**/\r
-UINT8\r
-HasMediaInFloppy (\r
-  VOID\r
-  )\r
-{\r
-  EFI_STATUS                            Status;\r
-  UINTN                                 HandleCount;\r
-  EFI_HANDLE                            *HandleBuffer;\r
-  UINTN                                 Index;\r
-  EFI_ISA_IO_PROTOCOL                   *IsaIo;\r
-  EFI_BLOCK_IO_PROTOCOL                 *BlkIo;\r
-\r
-  HandleBuffer  = NULL;\r
-  HandleCount   = 0;\r
-\r
-  gBS->LocateHandleBuffer (\r
-        ByProtocol,\r
-        &gEfiIsaIoProtocolGuid,\r
-        NULL,\r
-        &HandleCount,\r
-        &HandleBuffer\r
-        );\r
-\r
-  //\r
-  // If don't find any ISA/IO protocol assume no floppy. Need for floppy\r
-  // free system\r
-  //\r
-  if (HandleCount == 0) {\r
-    return FLOPPY_NOT_PRESENT;\r
-  }\r
-\r
-  ASSERT (HandleBuffer != NULL);\r
-\r
-  for (Index = 0; Index < HandleCount; Index++) {\r
-    Status = gBS->HandleProtocol (\r
-                    HandleBuffer[Index],\r
-                    &gEfiIsaIoProtocolGuid,\r
-                    (VOID **) &IsaIo\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      continue;\r
-    }\r
-\r
-    if (IsaIo->ResourceList->Device.HID != EISA_PNP_ID (0x604)) {\r
-      continue;\r
-    }\r
-    //\r
-    // Update blockio in case the floppy is inserted in during BdsTimeout\r
-    //\r
-    Status = gBS->DisconnectController (HandleBuffer[Index], NULL, NULL);\r
-\r
-    if (EFI_ERROR (Status)) {\r
-      continue;\r
-    }\r
-\r
-    Status = gBS->ConnectController (HandleBuffer[Index], NULL, NULL, TRUE);\r
-\r
-    if (EFI_ERROR (Status)) {\r
-      continue;\r
-    }\r
-\r
-    Status = gBS->HandleProtocol (\r
-                    HandleBuffer[Index],\r
-                    &gEfiBlockIoProtocolGuid,\r
-                    (VOID **) &BlkIo\r
-                    );\r
-    if (EFI_ERROR (Status)) {\r
-      continue;\r
-    }\r
-\r
-    if (BlkIo->Media->MediaPresent) {\r
-      FreePool (HandleBuffer);\r
-      return FLOPPY_PRESENT_WITH_MEDIA;\r
-    } else {\r
-      FreePool (HandleBuffer);\r
-      return FLOPPY_PRESENT_NO_MEDIA;\r
-    }\r
-  }\r
-\r
-  FreePool (HandleBuffer);\r
-\r
-  return FLOPPY_NOT_PRESENT;\r
-\r
-}\r
-\r
-\r
-/**\r
-  Complete build of BBS TABLE.\r
-\r
-  @param  Private                 Legacy BIOS Instance data\r
-  @param  BbsTable                BBS Table passed to 16-bit code\r
-\r
-  @retval EFI_SUCCESS             Removable media not present\r
-\r
-**/\r
-EFI_STATUS\r
-LegacyBiosBuildBbs (\r
-  IN  LEGACY_BIOS_INSTANCE      *Private,\r
-  IN  BBS_TABLE                 *BbsTable\r
-  )\r
-{\r
-  UINTN     BbsIndex;\r
-  HDD_INFO  *HddInfo;\r
-  UINTN     HddIndex;\r
-  UINTN     Index;\r
-\r
-  //\r
-  // First entry is floppy.\r
-  // Next 2*MAX_IDE_CONTROLLER entries are for onboard IDE.\r
-  // Next n entries are filled in after each ROM is dispatched.\r
-  //   Entry filled in if follow BBS spec. See LegacyPci.c\r
-  // Next entries are for non-BBS compliant ROMS. They are filled in by\r
-  //   16-bit code during Legacy16UpdateBbs invocation. Final BootPriority\r
-  //   occurs after that invocation.\r
-  //\r
-  // Floppy\r
-  // Set default state.\r
-  //\r
-  IsHaveMediaInFloppy = HasMediaInFloppy ();\r
-  if (IsHaveMediaInFloppy == FLOPPY_PRESENT_WITH_MEDIA) {\r
-    BbsTable[0].BootPriority = BBS_UNPRIORITIZED_ENTRY;\r
-  } else {\r
-    if (IsHaveMediaInFloppy == FLOPPY_PRESENT_NO_MEDIA) {\r
-      BbsTable[0].BootPriority = BBS_LOWEST_PRIORITY;\r
-    } else {\r
-      BbsTable[0].BootPriority = BBS_IGNORE_ENTRY;\r
-    }\r
-  }\r
-\r
-  BbsTable[0].Bus                       = 0xff;\r
-  BbsTable[0].Device                    = 0xff;\r
-  BbsTable[0].Function                  = 0xff;\r
-  BbsTable[0].DeviceType                = BBS_FLOPPY;\r
-  BbsTable[0].Class                     = 01;\r
-  BbsTable[0].SubClass                  = 02;\r
-  BbsTable[0].StatusFlags.OldPosition   = 0;\r
-  BbsTable[0].StatusFlags.Reserved1     = 0;\r
-  BbsTable[0].StatusFlags.Enabled       = 0;\r
-  BbsTable[0].StatusFlags.Failed        = 0;\r
-  BbsTable[0].StatusFlags.MediaPresent  = 0;\r
-  BbsTable[0].StatusFlags.Reserved2     = 0;\r
-\r
-  //\r
-  // Onboard HDD - Note Each HDD controller controls 2 drives\r
-  //               Master & Slave\r
-  //\r
-  HddInfo = &Private->IntThunk->EfiToLegacy16BootTable.HddInfo[0];\r
-  //\r
-  // Get IDE Drive Info\r
-  //\r
-  LegacyBiosBuildIdeData (Private, &HddInfo, 0);\r
-\r
-  for (HddIndex = 0; HddIndex < MAX_IDE_CONTROLLER; HddIndex++) {\r
-\r
-    BbsIndex = HddIndex * 2 + 1;\r
-    for (Index = 0; Index < 2; ++Index) {\r
-\r
-      BbsTable[BbsIndex + Index].Bus                      = HddInfo[HddIndex].Bus;\r
-      BbsTable[BbsIndex + Index].Device                   = HddInfo[HddIndex].Device;\r
-      BbsTable[BbsIndex + Index].Function                 = HddInfo[HddIndex].Function;\r
-      BbsTable[BbsIndex + Index].Class                    = 01;\r
-      BbsTable[BbsIndex + Index].SubClass                 = 01;\r
-      BbsTable[BbsIndex + Index].StatusFlags.OldPosition  = 0;\r
-      BbsTable[BbsIndex + Index].StatusFlags.Reserved1    = 0;\r
-      BbsTable[BbsIndex + Index].StatusFlags.Enabled      = 0;\r
-      BbsTable[BbsIndex + Index].StatusFlags.Failed       = 0;\r
-      BbsTable[BbsIndex + Index].StatusFlags.MediaPresent = 0;\r
-      BbsTable[BbsIndex + Index].StatusFlags.Reserved2    = 0;\r
-\r
-      //\r
-      // If no controller found or no device found set to ignore\r
-      // else set to unprioritized and set device type\r
-      //\r
-      if (HddInfo[HddIndex].CommandBaseAddress == 0) {\r
-        BbsTable[BbsIndex + Index].BootPriority = BBS_IGNORE_ENTRY;\r
-      } else {\r
-        if (Index == 0) {\r
-          if ((HddInfo[HddIndex].Status & (HDD_MASTER_IDE | HDD_MASTER_ATAPI_CDROM | HDD_MASTER_ATAPI_ZIPDISK)) != 0) {\r
-            BbsTable[BbsIndex + Index].BootPriority = BBS_UNPRIORITIZED_ENTRY;\r
-            if ((HddInfo[HddIndex].Status & HDD_MASTER_IDE) != 0) {\r
-              BbsTable[BbsIndex + Index].DeviceType = BBS_HARDDISK;\r
-            } else if ((HddInfo[HddIndex].Status & HDD_MASTER_ATAPI_CDROM) != 0) {\r
-              BbsTable[BbsIndex + Index].DeviceType = BBS_CDROM;\r
-            } else {\r
-              //\r
-              // for ZIPDISK\r
-              //\r
-              BbsTable[BbsIndex + Index].DeviceType = BBS_HARDDISK;\r
-            }\r
-          } else {\r
-            BbsTable[BbsIndex + Index].BootPriority = BBS_IGNORE_ENTRY;\r
-          }\r
-        } else {\r
-          if ((HddInfo[HddIndex].Status & (HDD_SLAVE_IDE | HDD_SLAVE_ATAPI_CDROM | HDD_SLAVE_ATAPI_ZIPDISK)) != 0) {\r
-            BbsTable[BbsIndex + Index].BootPriority = BBS_UNPRIORITIZED_ENTRY;\r
-            if ((HddInfo[HddIndex].Status & HDD_SLAVE_IDE) != 0) {\r
-              BbsTable[BbsIndex + Index].DeviceType = BBS_HARDDISK;\r
-            } else if ((HddInfo[HddIndex].Status & HDD_SLAVE_ATAPI_CDROM) != 0) {\r
-              BbsTable[BbsIndex + Index].DeviceType = BBS_CDROM;\r
-            } else {\r
-              //\r
-              // for ZIPDISK\r
-              //\r
-              BbsTable[BbsIndex + Index].DeviceType = BBS_HARDDISK;\r
-            }\r
-          } else {\r
-            BbsTable[BbsIndex + Index].BootPriority = BBS_IGNORE_ENTRY;\r
-          }\r
-        }\r
-      }\r
-    }\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-\r
-}\r
-\r
-\r
-/**\r
-  Get all BBS info\r
-\r
-  @param  This                    Protocol instance pointer.\r
-  @param  HddCount                Number of HDD_INFO structures\r
-  @param  HddInfo                 Onboard IDE controller information\r
-  @param  BbsCount                Number of BBS_TABLE structures\r
-  @param  BbsTable                List BBS entries\r
-\r
-  @retval EFI_SUCCESS             Tables returned\r
-  @retval EFI_NOT_FOUND           resource not found\r
-  @retval EFI_DEVICE_ERROR        can not get BBS table\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-LegacyBiosGetBbsInfo (\r
-  IN EFI_LEGACY_BIOS_PROTOCOL         *This,\r
-  OUT UINT16                          *HddCount,\r
-  OUT HDD_INFO                        **HddInfo,\r
-  OUT UINT16                          *BbsCount,\r
-  OUT BBS_TABLE                       **BbsTable\r
-  )\r
-{\r
-  LEGACY_BIOS_INSTANCE              *Private;\r
-  EFI_IA32_REGISTER_SET             Regs;\r
-  EFI_TO_COMPATIBILITY16_BOOT_TABLE *EfiToLegacy16BootTable;\r
-//  HDD_INFO                          *LocalHddInfo;\r
-//  IN BBS_TABLE                      *LocalBbsTable;\r
-  UINTN                             NumHandles;\r
-  EFI_HANDLE                        *HandleBuffer;\r
-  UINTN                             Index;\r
-  UINTN                             TempData;\r
-  UINT32                            Granularity;\r
-\r
-  HandleBuffer            = NULL;\r
-\r
-  Private                 = LEGACY_BIOS_INSTANCE_FROM_THIS (This);\r
-  EfiToLegacy16BootTable  = &Private->IntThunk->EfiToLegacy16BootTable;\r
-//  LocalHddInfo            = EfiToLegacy16BootTable->HddInfo;\r
-//  LocalBbsTable           = (BBS_TABLE*)(UINTN)EfiToLegacy16BootTable->BbsTable;\r
-\r
-  if (!mBbsTableDoneFlag) {\r
-    mBbsTable = Private->BbsTablePtr;\r
-\r
-    //\r
-    // Always enable disk controllers so 16-bit CSM code has valid information for all\r
-    // drives.\r
-    //\r
-    //\r
-    // Get PciRootBridgeIO protocol\r
-    //\r
-    gBS->LocateHandleBuffer (\r
-          ByProtocol,\r
-          &gEfiPciRootBridgeIoProtocolGuid,\r
-          NULL,\r
-          &NumHandles,\r
-          &HandleBuffer\r
-          );\r
-\r
-    if (NumHandles == 0) {\r
-      return EFI_NOT_FOUND;\r
-    }\r
-\r
-    mBbsTableDoneFlag = TRUE;\r
-    for (Index = 0; Index < NumHandles; Index++) {\r
-      //\r
-      // Connect PciRootBridgeIO protocol handle with FALSE parameter to let\r
-      // PCI bus driver enumerate all subsequent handles\r
-      //\r
-      gBS->ConnectController (HandleBuffer[Index], NULL, NULL, FALSE);\r
-\r
-    }\r
-\r
-    LegacyBiosBuildBbs (Private, mBbsTable);\r
-\r
-    Private->LegacyRegion->UnLock (Private->LegacyRegion, 0xe0000, 0x20000, &Granularity);\r
-\r
-    //\r
-    // Call into Legacy16 code to add to BBS table for non BBS compliant OPROMs.\r
-    //\r
-    ZeroMem (&Regs, sizeof (EFI_IA32_REGISTER_SET));\r
-    Regs.X.AX = Legacy16UpdateBbs;\r
-\r
-    //\r
-    // Pass in handoff data\r
-    //\r
-    TempData  = (UINTN) EfiToLegacy16BootTable;\r
-    Regs.X.ES = NORMALIZE_EFI_SEGMENT ((UINT32) TempData);\r
-    Regs.X.BX = NORMALIZE_EFI_OFFSET ((UINT32) TempData);\r
-\r
-    Private->LegacyBios.FarCall86 (\r
-      This,\r
-      Private->Legacy16CallSegment,\r
-      Private->Legacy16CallOffset,\r
-      &Regs,\r
-      NULL,\r
-      0\r
-      );\r
-\r
-    Private->Cpu->FlushDataCache (Private->Cpu, 0xE0000, 0x20000, EfiCpuFlushTypeWriteBackInvalidate);\r
-    Private->LegacyRegion->Lock (Private->LegacyRegion, 0xe0000, 0x20000, &Granularity);\r
-\r
-    if (Regs.X.AX != 0) {\r
-      return EFI_DEVICE_ERROR;\r
-    }\r
-  }\r
-\r
-  if (HandleBuffer != NULL) {\r
-    FreePool (HandleBuffer);\r
-  }\r
-\r
-  *HddCount = MAX_IDE_CONTROLLER;\r
-  *HddInfo  = EfiToLegacy16BootTable->HddInfo;\r
-  *BbsTable = (BBS_TABLE*)(UINTN)EfiToLegacy16BootTable->BbsTable;\r
-  *BbsCount = (UINT16) (sizeof (Private->IntThunk->BbsTable) / sizeof (BBS_TABLE));\r
-  return EFI_SUCCESS;\r
-}\r