VirtualBox

Changeset 24169 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Oct 29, 2009 4:33:48 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
54108
Message:

ATA/ATAPI: Add more keys to overwrite VPD data for CD drives

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Storage/DevATA.cpp

    r24094 r24169  
    108108#define ATA_FIRMWARE_REVISION_LENGTH  8
    109109#define ATA_MODEL_NUMBER_LENGTH      40
     110#define ATAPI_INQUIRY_VENDOR_ID      16
     111#define ATAPI_INQUIRY_PRODUCT_ID     16
     112#define ATAPI_INQUIRY_REVISION        4
    110113
    111114/*******************************************************************************
     
    290293    /** The model number to use for IDENTIFY DEVICE commands. */
    291294    char                                szModelNumber[ATA_MODEL_NUMBER_LENGTH+1];
    292 
    293     uint8_t                             abAlignment3[HC_ARCH_BITS == 32 ? 7 : 7];
     295    /** The vendor identification string for SCSI INQUIRY commands. */
     296    char                                szInquiryVendorId[ATAPI_INQUIRY_VENDOR_ID+1];
     297    /** The product identification string for SCSI INQUIRY commands. */
     298    char                                szInquiryProductId[ATAPI_INQUIRY_PRODUCT_ID+1];
     299    /** The revision string for SCSI INQUIRY commands. */
     300    char                                szInquiryRevision[ATAPI_INQUIRY_REVISION+1];
     301
     302    uint8_t                             abAlignment3[7];
    294303} ATADevState;
    295304AssertCompileMemberAlignment(ATADevState, cTotalSectors, 8);
     
    23722381    pbBuf[6] = 0; /* reserved */
    23732382    pbBuf[7] = 0; /* reserved */
    2374     ataSCSIPadStr(pbBuf + 8, "VBOX", 8);
    2375     ataSCSIPadStr(pbBuf + 16, "CD-ROM", 16);
    2376     ataSCSIPadStr(pbBuf + 32, "1.0", 4);
     2383    ataSCSIPadStr(pbBuf + 8, s->szInquiryVendorId, 8);
     2384    ataSCSIPadStr(pbBuf + 16, s->szInquiryProductId, 16);
     2385    ataSCSIPadStr(pbBuf + 32, s->szInquiryRevision, 4);
    23772386    s->iSourceSink = ATAFN_SS_NULL;
    23782387    atapiCmdOK(s);
     
    67896798                                    N_("PIIX3 configuration error: failed to read \"ModelNumber\" as string"));
    67906799                    }
     6800
     6801                    /* There are three other identification strings for CD drives used for INQUIRY */
     6802                    if (pIf->fATAPI)
     6803                    {
     6804                        rc = CFGMR3QueryStringDef(pCfgNode, "ATAPIVendorId", pIf->szInquiryVendorId, sizeof(pIf->szInquiryVendorId),
     6805                                                  "VBOX");
     6806                        if (RT_FAILURE(rc))
     6807                        {
     6808                            if (rc == VERR_CFGM_NOT_ENOUGH_SPACE)
     6809                                return PDMDEV_SET_ERROR(pDevIns, VERR_INVALID_PARAMETER,
     6810                                           N_("PIIX3 configuration error: \"ATAPIVendorId\" is longer than 16 bytes"));
     6811                            return PDMDEV_SET_ERROR(pDevIns, rc,
     6812                                        N_("PIIX3 configuration error: failed to read \"ATAPIVendorId\" as string"));
     6813                        }
     6814
     6815                        rc = CFGMR3QueryStringDef(pCfgNode, "ATAPIProductId", pIf->szInquiryProductId, sizeof(pIf->szInquiryProductId),
     6816                                                  "CD-ROM");
     6817                        if (RT_FAILURE(rc))
     6818                        {
     6819                            if (rc == VERR_CFGM_NOT_ENOUGH_SPACE)
     6820                                return PDMDEV_SET_ERROR(pDevIns, VERR_INVALID_PARAMETER,
     6821                                           N_("PIIX3 configuration error: \"ATAPIProductId\" is longer than 16 bytes"));
     6822                            return PDMDEV_SET_ERROR(pDevIns, rc,
     6823                                        N_("PIIX3 configuration error: failed to read \"ATAPIProductId\" as string"));
     6824                        }
     6825
     6826                        rc = CFGMR3QueryStringDef(pCfgNode, "ATAPIRevision", pIf->szInquiryRevision, sizeof(pIf->szInquiryRevision),
     6827                                                  "1.0");
     6828                        if (RT_FAILURE(rc))
     6829                        {
     6830                            if (rc == VERR_CFGM_NOT_ENOUGH_SPACE)
     6831                                return PDMDEV_SET_ERROR(pDevIns, VERR_INVALID_PARAMETER,
     6832                                           N_("PIIX3 configuration error: \"ATAPIRevision\" is longer than 4 bytes"));
     6833                            return PDMDEV_SET_ERROR(pDevIns, rc,
     6834                                        N_("PIIX3 configuration error: failed to read \"ATAPIRevision\" as string"));
     6835                        }
     6836                    }
    67916837                }
    67926838
  • trunk/src/VBox/Devices/testcase/tstDeviceStructSizeGC.cpp

    r24097 r24169  
    740740    GEN_CHECK_OFF(ATADevState, szModelNumber);
    741741    GEN_CHECK_OFF(ATADevState, szModelNumber[ATA_MODEL_NUMBER_LENGTH]);
     742    GEN_CHECK_OFF(ATADevState, szInquiryVendorId);
     743    GEN_CHECK_OFF(ATADevState, szInquiryVendorId[ATAPI_INQUIRY_VENDOR_ID]);
     744    GEN_CHECK_OFF(ATADevState, szInquiryProductId);
     745    GEN_CHECK_OFF(ATADevState, szInquiryProductId[ATAPI_INQUIRY_PRODUCT_ID]);
     746    GEN_CHECK_OFF(ATADevState, szInquiryRevision);
     747    GEN_CHECK_OFF(ATADevState, szInquiryRevision[ATAPI_INQUIRY_REVISION]);
    742748    GEN_CHECK_SIZE(ATATransferRequest);
    743749    GEN_CHECK_OFF(ATATransferRequest, iIf);
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