VirtualBox

Changeset 33114 in vbox


Ignore:
Timestamp:
Oct 13, 2010 5:49:00 PM (14 years ago)
Author:
vboxsync
Message:

EFI: some code restructure.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/EFI/Firmware2/VBoxPkg/VBoxIdeBusDxe/Ide.c

    r33049 r33114  
    304304  UINT8       PciClass;
    305305  UINT8       PciSubClass;
     306  BOOLEAN     fIDEAhciEmulation = FALSE;
    306307
    307308  Status = PciIo->Pci.Read (
     
    337338    return Status;
    338339  }
     340  switch (PciSubClass)
     341  {
     342     case PCI_CLASS_MASS_STORAGE_IDE:
     343        fIDEAhciEmulation = FALSE;
     344        break;
     345     case 0x6:
     346        fIDEAhciEmulation = TRUE;
     347        break;
     348     default:
     349        ASSERT_EFI_ERROR((EFI_UNSUPPORTED));
     350        return EFI_UNSUPPORTED;
     351  }
    339352  DEBUG((DEBUG_INFO, "class primary code: %x\n", PciData.Hdr.ClassCode[0] & IDE_PRIMARY_OPERATING_MODE));
    340353  DEBUG((DEBUG_INFO, "class secondary code: %x\n", PciData.Hdr.ClassCode[0] & IDE_SECONDARY_OPERATING_MODE));
    341354  if ((PciData.Hdr.ClassCode[0] & IDE_PRIMARY_OPERATING_MODE) == 0) {
    342     switch (PciSubClass)
    343     {
    344        case PCI_CLASS_MASS_STORAGE_IDE:
    345           IdeRegsBaseAddr[IdePrimary].CommandBlockBaseAddr  = 0x1f0;
    346           IdeRegsBaseAddr[IdePrimary].ControlBlockBaseAddr  = 0x3f6;
    347           IdeRegsBaseAddr[IdePrimary].BusMasterBaseAddr     =
    348           (UINT16)((PciData.Device.Bar[4] & 0x0000fff0));
    349           break;
    350        case 0x6:
    351           IdeRegsBaseAddr[IdePrimary].CommandBlockBaseAddr  = 0x1e8;
    352           IdeRegsBaseAddr[IdePrimary].ControlBlockBaseAddr  = 0x3e6;
    353           IdeRegsBaseAddr[IdePrimary].BusMasterBaseAddr     = 0;
    354           break;
    355         default:
    356           ASSERT_EFI_ERROR((EFI_UNSUPPORTED));
    357     }
     355     IdeRegsBaseAddr[IdePrimary].CommandBlockBaseAddr  = fIDEAhciEmulation ? 0x1e8 : 0x1f0;
     356     IdeRegsBaseAddr[IdePrimary].ControlBlockBaseAddr  = fIDEAhciEmulation ? 0x3e6 :0x3f6;
    358357  } else {
    359358    //
     
    362361    if ((PciData.Device.Bar[0] & BIT0) == 0 ||
    363362        (PciData.Device.Bar[1] & BIT0) == 0) {
    364       DEBUG((DEBUG_INFO, "%a:%d\n", __FILE__, __LINE__));
    365363      return EFI_UNSUPPORTED;
    366364    }
    367365
    368     switch (PciSubClass)
    369     {
    370        case PCI_CLASS_MASS_STORAGE_IDE:
    371           IdeRegsBaseAddr[IdePrimary].CommandBlockBaseAddr  =
    372           (UINT16) (PciData.Device.Bar[0] & 0x0000fff8);
    373           IdeRegsBaseAddr[IdePrimary].ControlBlockBaseAddr  =
    374           (UINT16) ((PciData.Device.Bar[1] & 0x0000fffc) + 2);
    375           IdeRegsBaseAddr[IdePrimary].BusMasterBaseAddr     =
    376           (UINT16) ((PciData.Device.Bar[4] & 0x0000fff0));
    377           break;
    378        case 0x6:
    379           IdeRegsBaseAddr[IdePrimary].CommandBlockBaseAddr  = 0x168;
    380           IdeRegsBaseAddr[IdePrimary].ControlBlockBaseAddr  = 0x366;
    381           IdeRegsBaseAddr[IdePrimary].BusMasterBaseAddr     = 0;
    382           break;
    383         default:
    384           ASSERT_EFI_ERROR((EFI_UNSUPPORTED));
    385     }
    386   }
     366    IdeRegsBaseAddr[IdePrimary].CommandBlockBaseAddr  =
     367    fIDEAhciEmulation ? 0x1e8 : (UINT16) (PciData.Device.Bar[0] & 0x0000fff8);
     368    IdeRegsBaseAddr[IdePrimary].ControlBlockBaseAddr  =
     369    fIDEAhciEmulation ? 0x3e6 :(UINT16) ((PciData.Device.Bar[1] & 0x0000fffc) + 2);
     370  }
     371  IdeRegsBaseAddr[IdePrimary].BusMasterBaseAddr     =
     372  fIDEAhciEmulation ? 0 : (UINT16)((PciData.Device.Bar[4] & 0x0000fff0));
    387373
    388374  if ((PciData.Hdr.ClassCode[0] & IDE_SECONDARY_OPERATING_MODE) == 0) {
    389     switch (PciSubClass)
    390     {
    391        case PCI_CLASS_MASS_STORAGE_IDE:
    392           IdeRegsBaseAddr[IdeSecondary].CommandBlockBaseAddr  = 0x170;
    393           IdeRegsBaseAddr[IdeSecondary].ControlBlockBaseAddr  = 0x376;
    394           IdeRegsBaseAddr[IdeSecondary].BusMasterBaseAddr     =
    395           (UINT16) ((PciData.Device.Bar[4] & 0x0000fff0));
    396           break;
    397        case 0x6:
    398           IdeRegsBaseAddr[IdeSecondary].CommandBlockBaseAddr  = 0x1e8;
    399           IdeRegsBaseAddr[IdeSecondary].ControlBlockBaseAddr  = 0x3e6;
    400           IdeRegsBaseAddr[IdeSecondary].BusMasterBaseAddr     = 0;
    401           break;
    402         default:
    403           ASSERT_EFI_ERROR((EFI_UNSUPPORTED));
    404     }
     375    IdeRegsBaseAddr[IdeSecondary].CommandBlockBaseAddr  = fIDEAhciEmulation ? 0x168 : 0x170;
     376    IdeRegsBaseAddr[IdeSecondary].ControlBlockBaseAddr  = fIDEAhciEmulation ? 0x366 : 0x376;
    405377  } else {
    406378    //
     
    409381    if ((PciData.Device.Bar[2] & BIT0) == 0 ||
    410382        (PciData.Device.Bar[3] & BIT0) == 0) {
    411       DEBUG((DEBUG_INFO, "%a:%d\n", __FILE__, __LINE__));
    412383      return EFI_UNSUPPORTED;
    413384    }
    414 
    415     switch (PciSubClass)
    416     {
    417        case PCI_CLASS_MASS_STORAGE_IDE:
    418           IdeRegsBaseAddr[IdeSecondary].CommandBlockBaseAddr  =
    419           (UINT16) (PciData.Device.Bar[2] & 0x0000fff8);
    420           IdeRegsBaseAddr[IdeSecondary].ControlBlockBaseAddr  =
    421           (UINT16) ((PciData.Device.Bar[3] & 0x0000fffc) + 2);
    422           IdeRegsBaseAddr[IdeSecondary].BusMasterBaseAddr     =
    423           (UINT16) ((PciData.Device.Bar[4] & 0x0000fff0));
    424           break;
    425         case 0x6:
    426           IdeRegsBaseAddr[IdeSecondary].CommandBlockBaseAddr  = 0x168;
    427           IdeRegsBaseAddr[IdeSecondary].ControlBlockBaseAddr  = 0x366;
    428           IdeRegsBaseAddr[IdeSecondary].BusMasterBaseAddr     = 0;
    429           break;
    430         default:
    431           ASSERT_EFI_ERROR((EFI_UNSUPPORTED));
    432      }
    433   }
     385    IdeRegsBaseAddr[IdeSecondary].CommandBlockBaseAddr  =
     386    fIDEAhciEmulation ? 0x168 : (UINT16) (PciData.Device.Bar[2] & 0x0000fff8);
     387    IdeRegsBaseAddr[IdeSecondary].ControlBlockBaseAddr  =
     388    fIDEAhciEmulation ? 0x366 : (UINT16) ((PciData.Device.Bar[3] & 0x0000fffc) + 2);
     389  }
     390  IdeRegsBaseAddr[IdeSecondary].BusMasterBaseAddr     =
     391  (UINT16) ((PciData.Device.Bar[fIDEAhciEmulation ? 5 : 4] & 0x0000fff0));
    434392
    435393  DEBUG((DEBUG_INFO, "%a:%d CommandBlockBaseAddr:%x, "
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