Changeset 64152 in vbox
- Timestamp:
- Oct 5, 2016 12:05:35 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 111128
- Location:
- trunk/src/VBox/Devices/Storage
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Storage/DrvSCSI.cpp
r64150 r64152 1242 1242 if (pThis->pDrvMount) 1243 1243 { 1244 if (pThis->pDrvM edia->pfnGetSize(pThis->pDrvMedia))1244 if (pThis->pDrvMount->pfnIsMounted(pThis->pDrvMount)) 1245 1245 { 1246 1246 rc = VINF_SUCCESS; VSCSILunMountNotify(pThis->hVScsiLun); … … 1274 1274 pThis->pDrvMediaEx = NULL; 1275 1275 pThis->pDrvMount = NULL; 1276 1277 VSCSILunUnmountNotify(pThis->hVScsiLun); 1276 1278 } 1277 1279 … … 1492 1494 if (pThis->pDrvMount) 1493 1495 { 1494 if (pThis->pDrvM edia->pfnGetSize(pThis->pDrvMedia))1496 if (pThis->pDrvMount->pfnIsMounted(pThis->pDrvMount)) 1495 1497 { 1496 1498 rc = VINF_SUCCESS; VSCSILunMountNotify(pThis->hVScsiLun); -
trunk/src/VBox/Devices/Storage/VSCSI/VSCSILunMmc.cpp
r64132 r64152 747 747 RT_ZERO(aReply); 748 748 749 LogFlowFunc(("pVScsiLunMmc=%#p pVScsiReq=%#p cbMaxTransfer=%zu\n", 750 pVScsiLunMmc, pVScsiReq, cbMaxTransfer)); 751 749 752 do 750 753 { … … 763 766 aReply[6] = 0x00; 764 767 aReply[7] = 0x00; 768 pVScsiLunMmc->Core.fReady = true; 765 769 break; 766 770 … … 800 804 break; 801 805 } 806 807 LogFlowFunc(("OldStatus=%u NewStatus=%u\n", OldStatus, NewStatus)); 808 802 809 } while (!ASMAtomicCmpXchgU32((volatile uint32_t *)&pVScsiLunMmc->MediaEventStatus, NewStatus, OldStatus)); 803 810 … … 838 845 unsigned uCmd = pVScsiReq->pbCDB[0]; 839 846 847 LogFlowFunc(("pVScsiLun=%#p{.fReady=%RTbool, .fMediaPresent=%RTbool} pVScsiReq=%#p{.pbCdb[0]=%#x}\n", 848 pVScsiLun, pVScsiLun->fReady, pVScsiLun->fMediaPresent, pVScsiReq, uCmd)); 849 840 850 /* 841 851 * GET CONFIGURATION, GET EVENT/STATUS NOTIFICATION, INQUIRY, and REQUEST SENSE commands … … 843 853 * needs to report CHECK CONDITION in that case. 844 854 */ 845 if (!pVScsiLunMmc->Core.fReady && uCmd != SCSI_INQUIRY) 855 if ( !pVScsiLunMmc->Core.fReady 856 && uCmd != SCSI_INQUIRY 857 && uCmd != SCSI_GET_CONFIGURATION 858 && uCmd != SCSI_GET_EVENT_STATUS_NOTIFICATION) 846 859 { 847 860 /* … … 1260 1273 { 1261 1274 PVSCSILUNMMC pVScsiLunMmc = (PVSCSILUNMMC)pVScsiLun; 1262 1263 uint32_t OldStatus, NewStatus; 1264 do 1265 { 1266 OldStatus = ASMAtomicReadU32((volatile uint32_t *)&pVScsiLunMmc->MediaEventStatus); 1267 switch (OldStatus) 1275 uint64_t cbDisk = 0; 1276 int rc = vscsiLunMediumGetSize(pVScsiLun, &cbDisk); 1277 if (RT_SUCCESS(rc)) 1278 { 1279 pVScsiLunMmc->cSectors = cbDisk / pVScsiLunMmc->cbSector; 1280 1281 uint32_t OldStatus, NewStatus; 1282 do 1268 1283 { 1269 case MMCEVENTSTATUSTYPE_MEDIA_CHANGED: 1270 case MMCEVENTSTATUSTYPE_MEDIA_REMOVED: 1271 /* no change, we will send "medium removed" + "medium inserted" */ 1272 NewStatus = MMCEVENTSTATUSTYPE_MEDIA_CHANGED; 1273 break; 1274 default: 1275 NewStatus = MMCEVENTSTATUSTYPE_MEDIA_NEW; 1276 break; 1277 } 1278 } while (!ASMAtomicCmpXchgU32((volatile uint32_t *)&pVScsiLunMmc->MediaEventStatus, 1279 NewStatus, OldStatus)); 1280 1281 ASMAtomicXchgU32(&pVScsiLunMmc->u32MediaTrackType, MMC_MEDIA_TYPE_UNKNOWN); 1282 return VINF_SUCCESS; 1284 OldStatus = ASMAtomicReadU32((volatile uint32_t *)&pVScsiLunMmc->MediaEventStatus); 1285 switch (OldStatus) 1286 { 1287 case MMCEVENTSTATUSTYPE_MEDIA_CHANGED: 1288 case MMCEVENTSTATUSTYPE_MEDIA_REMOVED: 1289 /* no change, we will send "medium removed" + "medium inserted" */ 1290 NewStatus = MMCEVENTSTATUSTYPE_MEDIA_CHANGED; 1291 break; 1292 default: 1293 NewStatus = MMCEVENTSTATUSTYPE_MEDIA_NEW; 1294 break; 1295 } 1296 } while (!ASMAtomicCmpXchgU32((volatile uint32_t *)&pVScsiLunMmc->MediaEventStatus, 1297 NewStatus, OldStatus)); 1298 1299 ASMAtomicXchgU32(&pVScsiLunMmc->u32MediaTrackType, MMC_MEDIA_TYPE_UNKNOWN); 1300 } 1301 1302 return rc; 1283 1303 } 1284 1304
Note:
See TracChangeset
for help on using the changeset viewer.