VirtualBox

Changeset 59248 in vbox for trunk/src/VBox/Devices/PC


Ignore:
Timestamp:
Jan 4, 2016 2:13:22 PM (9 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
104877
Message:

Storage: Get rid of the block driver and merge the the little extra functionality it had into the VD driver. Enables us to get rid of PDMIBLOCK which is basically a subset of PDMIMEDIA and makes changes to the latter interface tedious because it had to be replicated in the former. (bugref:4114)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/PC/DevPcBios.cpp

    r59227 r59248  
    291291 * @param   pLCHSGeometry   Where to return the disk geometry on success
    292292 */
    293 static int biosGuessDiskLCHS(PPDMIBLOCK pBlock, PPDMMEDIAGEOMETRY pLCHSGeometry)
     293static int biosGuessDiskLCHS(PPDMIMEDIA pMedia, PPDMMEDIAGEOMETRY pLCHSGeometry)
    294294{
    295295    uint8_t aMBR[512], *p;
     
    297297    uint32_t iEndHead, iEndSector, cLCHSCylinders, cLCHSHeads, cLCHSSectors;
    298298
    299     if (!pBlock)
     299    if (!pMedia)
    300300        return VERR_INVALID_PARAMETER;
    301     rc = pBlock->pfnReadPcBios(pBlock, 0, aMBR, sizeof(aMBR));
     301    rc = pMedia->pfnReadPcBios(pMedia, 0, aMBR, sizeof(aMBR));
    302302    if (RT_FAILURE(rc))
    303303        return rc;
     
    316316            cLCHSHeads = iEndHead + 1;
    317317            cLCHSSectors = iEndSector;
    318             cLCHSCylinders = RT_MIN(1024, pBlock->pfnGetSize(pBlock) / (512 * cLCHSHeads * cLCHSSectors));
     318            cLCHSCylinders = RT_MIN(1024, pMedia->pfnGetSize(pMedia) / (512 * cLCHSHeads * cLCHSSectors));
    319319            if (cLCHSCylinders >= 1)
    320320            {
     
    397397 * @param   pLCHSGeometry Where to store the geometry settings.
    398398 */
    399 static int setLogicalDiskGeometry(PPDMIBASE pBase, PPDMIBLOCKBIOS pHardDisk, PPDMMEDIAGEOMETRY pLCHSGeometry)
     399static int setLogicalDiskGeometry(PPDMIBASE pBase, PPDMIMEDIA pHardDisk, PPDMMEDIAGEOMETRY pLCHSGeometry)
    400400{
    401401    PDMMEDIAGEOMETRY LCHSGeometry;
    402402    int rc = VINF_SUCCESS;
    403403
    404     rc = pHardDisk->pfnGetLCHSGeometry(pHardDisk, &LCHSGeometry);
     404    rc = pHardDisk->pfnBiosGetLCHSGeometry(pHardDisk, &LCHSGeometry);
    405405    if (   rc == VERR_PDM_GEOMETRY_NOT_SET
    406406        || LCHSGeometry.cCylinders == 0
     
    410410        || LCHSGeometry.cSectors > 63)
    411411    {
    412         PPDMIBLOCK pBlock;
    413         pBlock = PDMIBASE_QUERY_INTERFACE(pBase, PDMIBLOCK);
    414412        /* No LCHS geometry, autodetect and set. */
    415         rc = biosGuessDiskLCHS(pBlock, &LCHSGeometry);
     413        rc = biosGuessDiskLCHS(pHardDisk, &LCHSGeometry);
    416414        if (RT_FAILURE(rc))
    417415        {
    418416            /* Try if PCHS geometry works, otherwise fall back. */
    419             rc = pHardDisk->pfnGetPCHSGeometry(pHardDisk, &LCHSGeometry);
     417            rc = pHardDisk->pfnBiosGetPCHSGeometry(pHardDisk, &LCHSGeometry);
    420418        }
    421419        if (   RT_FAILURE(rc)
     
    427425            || LCHSGeometry.cSectors > 63)
    428426        {
    429             uint64_t cSectors = pBlock->pfnGetSize(pBlock) / 512;
     427            uint64_t cSectors = pHardDisk->pfnGetSize(pHardDisk) / 512;
    430428            if (cSectors / 16 / 63 <= 1024)
    431429            {
     
    456454
    457455        }
    458         rc = pHardDisk->pfnSetLCHSGeometry(pHardDisk, &LCHSGeometry);
     456        rc = pHardDisk->pfnBiosSetLCHSGeometry(pHardDisk, &LCHSGeometry);
    459457        if (rc == VERR_VD_IMAGE_READ_ONLY)
    460458        {
     
    483481 * @param   pLCHSGeometry Where to store the geometry settings.
    484482 */
    485 static int getLogicalDiskGeometry(PPDMIBLOCKBIOS pHardDisk, PPDMMEDIAGEOMETRY pLCHSGeometry)
     483static int getLogicalDiskGeometry(PPDMIMEDIA pHardDisk, PPDMMEDIAGEOMETRY pLCHSGeometry)
    486484{
    487485    PDMMEDIAGEOMETRY LCHSGeometry;
    488486    int rc = VINF_SUCCESS;
    489487
    490     rc = pHardDisk->pfnGetLCHSGeometry(pHardDisk, &LCHSGeometry);
     488    rc = pHardDisk->pfnBiosGetLCHSGeometry(pHardDisk, &LCHSGeometry);
    491489    if (   rc == VERR_PDM_GEOMETRY_NOT_SET
    492490        || LCHSGeometry.cCylinders == 0
     
    549547    unsigned        i;
    550548    PUVM            pUVM = PDMDevHlpGetUVM(pDevIns); AssertRelease(pUVM);
    551     PPDMIBLOCKBIOS  apHDs[4] = {0};
     549    PPDMIMEDIA      apHDs[4] = {0};
    552550    LogFlow(("pcbiosInitComplete:\n"));
    553551
     
    642640        if (RT_SUCCESS(rc))
    643641        {
    644             PPDMIBLOCKBIOS pFD = PDMIBASE_QUERY_INTERFACE(pBase, PDMIBLOCKBIOS);
     642            PPDMIMEDIA pFD = PDMIBASE_QUERY_INTERFACE(pBase, PDMIMEDIA);
    645643            if (pFD)
    646644            {
     
    649647                switch (pFD->pfnGetType(pFD))
    650648                {
    651                     case PDMBLOCKTYPE_FLOPPY_360:       u32 |= 1  << cShift; break;
    652                     case PDMBLOCKTYPE_FLOPPY_1_20:      u32 |= 2  << cShift; break;
    653                     case PDMBLOCKTYPE_FLOPPY_720:       u32 |= 3  << cShift; break;
    654                     case PDMBLOCKTYPE_FLOPPY_1_44:      u32 |= 4  << cShift; break;
    655                     case PDMBLOCKTYPE_FLOPPY_2_88:      u32 |= 5  << cShift; break;
    656                     case PDMBLOCKTYPE_FLOPPY_FAKE_15_6: u32 |= 14 << cShift; break;
    657                     case PDMBLOCKTYPE_FLOPPY_FAKE_63_5: u32 |= 15 << cShift; break;
     649                    case PDMMEDIATYPE_FLOPPY_360:       u32 |= 1  << cShift; break;
     650                    case PDMMEDIATYPE_FLOPPY_1_20:      u32 |= 2  << cShift; break;
     651                    case PDMMEDIATYPE_FLOPPY_720:       u32 |= 3  << cShift; break;
     652                    case PDMMEDIATYPE_FLOPPY_1_44:      u32 |= 4  << cShift; break;
     653                    case PDMMEDIATYPE_FLOPPY_2_88:      u32 |= 5  << cShift; break;
     654                    case PDMMEDIATYPE_FLOPPY_FAKE_15_6: u32 |= 14 << cShift; break;
     655                    case PDMMEDIATYPE_FLOPPY_FAKE_63_5: u32 |= 15 << cShift; break;
    658656                    default:                        AssertFailed(); break;
    659657                }
     
    683681        int rc = PDMR3QueryLun(pUVM, pThis->pszHDDevice, 0, i, &pBase);
    684682        if (RT_SUCCESS(rc))
    685             apHDs[i] = PDMIBASE_QUERY_INTERFACE(pBase, PDMIBLOCKBIOS);
     683            apHDs[i] = PDMIBASE_QUERY_INTERFACE(pBase, PDMIMEDIA);
    686684        if (   apHDs[i]
    687             && (   apHDs[i]->pfnGetType(apHDs[i]) != PDMBLOCKTYPE_HARD_DISK
    688                 || !apHDs[i]->pfnIsVisible(apHDs[i])))
     685            && (   apHDs[i]->pfnGetType(apHDs[i]) != PDMMEDIATYPE_HARD_DISK
     686                || !apHDs[i]->pfnBiosIsVisible(apHDs[i])))
    689687            apHDs[i] = NULL;
    690688        if (apHDs[i])
     
    744742            int rc = PDMR3QueryLun(pUVM, pThis->pszSataDevice, 0, pThis->iSataHDLUN[i], &pBase);
    745743            if (RT_SUCCESS(rc))
    746                 apHDs[i] = PDMIBASE_QUERY_INTERFACE(pBase, PDMIBLOCKBIOS);
     744                apHDs[i] = PDMIBASE_QUERY_INTERFACE(pBase, PDMIMEDIA);
    747745            if (   apHDs[i]
    748                 && (   apHDs[i]->pfnGetType(apHDs[i]) != PDMBLOCKTYPE_HARD_DISK
    749                     || !apHDs[i]->pfnIsVisible(apHDs[i])))
     746                && (   apHDs[i]->pfnGetType(apHDs[i]) != PDMMEDIATYPE_HARD_DISK
     747                    || !apHDs[i]->pfnBiosIsVisible(apHDs[i])))
    750748                apHDs[i] = NULL;
    751749            if (apHDs[i])
     
    798796            int rc = PDMR3QueryLun(pUVM, pThis->pszScsiDevice, 0, pThis->iScsiHDLUN[i], &pBase);
    799797            if (RT_SUCCESS(rc))
    800                 apHDs[i] = PDMIBASE_QUERY_INTERFACE(pBase, PDMIBLOCKBIOS);
     798                apHDs[i] = PDMIBASE_QUERY_INTERFACE(pBase, PDMIMEDIA);
    801799            if (   apHDs[i]
    802                 && (   apHDs[i]->pfnGetType(apHDs[i]) != PDMBLOCKTYPE_HARD_DISK
    803                     || !apHDs[i]->pfnIsVisible(apHDs[i])))
     800                && (   apHDs[i]->pfnGetType(apHDs[i]) != PDMMEDIATYPE_HARD_DISK
     801                    || !apHDs[i]->pfnBiosIsVisible(apHDs[i])))
    804802                apHDs[i] = NULL;
    805803            if (apHDs[i])
Note: See TracChangeset for help on using the changeset viewer.

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