Changeset 64152 in vbox for trunk/src/VBox/Devices/Storage/VSCSI
- Timestamp:
- Oct 5, 2016 12:05:35 PM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 111128
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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.