Changeset 81312 in vbox
- Timestamp:
- Oct 17, 2019 1:35:50 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Storage/DevVirtioSCSI.cpp
r81308 r81312 361 361 uint32_t uEventActual; /** event_actual */ 362 362 uint8_t uResponse; /** response */ 363 } VIRTIOSCSI_CTRL_AN , *PVIRTIOSCSI_CTRL_AN_T;363 } VIRTIOSCSI_CTRL_AN_T, *PVIRTIOSCSI_CTRL_AN_T; 364 364 #pragma pack() 365 366 typedef union virtio_scsi_ctrl_union 367 { 368 VIRTIOSCSI_CTRL_T scsiCtrl; 369 VIRTIOSCSI_CTRL_TMF_T scsiCtrlTmf; 370 VIRTIOSCSI_CTRL_AN_T scsiCtrlAsyncNotify; 371 } VIRTIO_SCSI_CTRL_UNION_T, *PVIRTIO_SCSI_CTRL_UNION_T; 365 372 366 373 /** … … 1253 1260 RT_NOREF2(pThis, qIdx); 1254 1261 1255 uint8_t uResponse = VIRTIOSCSI_S_OK; 1256 1257 PVIRTIOSCSI_CTRL_T pScsiCtrl = (PVIRTIOSCSI_CTRL_T)RTMemAlloc(sizeof(PVIRTIOSCSI_CTRL_T)); 1258 1259 uint8_t *pb = (uint8_t *)pScsiCtrl; 1260 for (size_t cb = RT_MIN(pDescChain->cbPhysSend, sizeof(PVIRTIOSCSI_CTRL_T)); cb; ) 1262 uint8_t uResponse = VIRTIOSCSI_S_OK; 1263 1264 PVIRTIO_SCSI_CTRL_UNION_T pScsiCtrlUnion = 1265 (PVIRTIO_SCSI_CTRL_UNION_T)RTMemAlloc(sizeof(VIRTIO_SCSI_CTRL_UNION_T)); 1266 1267 uint8_t *pb = (uint8_t *)pScsiCtrlUnion; 1268 for (size_t cb = RT_MIN(pDescChain->cbPhysSend, sizeof(VIRTIO_SCSI_CTRL_UNION_T)); cb; ) 1261 1269 { 1262 1270 size_t cbSeg = cb; … … 1279 1287 RTSGBUF reqSegBuf; 1280 1288 1281 switch(pScsiCtrl->uType) 1289 1290 switch(pScsiCtrlUnion->scsiCtrl.uType) 1282 1291 { 1283 1292 case VIRTIOSCSI_T_TMF: /* Task Management Functions */ 1284 1293 { 1285 PVIRTIOSCSI_CTRL_TMF_T pScsiCtrlTmf = (PVIRTIOSCSI_CTRL_TMF_T)pScsiCtrl; 1286 const char *pszTmfTypeText = virtioGetTMFTypeText(pScsiCtrlTmf->uSubtype); 1287 LogFunc(("%s, VirtIO LUN: %.8Rhxs\n%*sTask Mgt Function: %s (not yet implemented)\n", 1288 QUEUENAME(qIdx), pScsiCtrlTmf->uScsiLun, 1289 CBQUEUENAME(qIdx) + 18, "", pszTmfTypeText)); 1290 RT_NOREF(pszTmfTypeText); 1291 switch(pScsiCtrlTmf->uSubtype) 1294 uint8_t uTarget = pScsiCtrlUnion->scsiCtrlTmf.uScsiLun[1]; 1295 uint32_t uScsiLun = (pScsiCtrlUnion->scsiCtrlTmf.uScsiLun[2] << 8 1296 | pScsiCtrlUnion->scsiCtrlTmf.uScsiLun[3]) & 0x3fff; 1297 1298 if (LogIs3Enabled()) 1299 { 1300 const char *pszTmfTypeText = virtioGetTMFTypeText(pScsiCtrlUnion->scsiCtrlTmf.uSubtype); 1301 Log3Func(("[%s] (Target: %d LUN: %d) Task Mgt Function: %s\n", 1302 uTarget, uScsiLun, pszTmfTypeText)); 1303 RT_NOREF(pszTmfTypeText); 1304 } 1305 1306 switch(pScsiCtrlUnion->scsiCtrlTmf.uSubtype) 1292 1307 { 1293 1308 case VIRTIOSCSI_T_TMF_ABORT_TASK: … … 1327 1342 case VIRTIOSCSI_T_AN_QUERY: /* Guest SCSI driver is querying supported async event notifications */ 1328 1343 { 1329 PVIRTIOSCSI_CTRL_AN_T pScsiCtrlAnQuery = (PVIRTIOSCSI_CTRL_AN_T)pScsiCtrl; 1344 1345 PVIRTIOSCSI_CTRL_AN_T pScsiCtrlAnQuery = &pScsiCtrlUnion->scsiCtrlAsyncNotify; 1346 1347 uint8_t uTarget = pScsiCtrlAnQuery->uScsiLun[1]; 1348 uint32_t uScsiLun = (pScsiCtrlAnQuery->uScsiLun[2] << 8 | pScsiCtrlAnQuery->uScsiLun[3]) & 0x3fff; 1330 1349 1331 1350 uSubscribedEvents &= pScsiCtrlAnQuery->uEventsRequested; … … 1335 1354 { 1336 1355 char szTypeText[128]; 1337 virtioGetControlAsyncMaskText(szTypeText, sizeof(szTypeText), pScsiCtrlAnQuery->uEventsRequested); 1338 1339 LogFunc(("%s, VirtIO LUN: %.8Rhxs\n%*sAsync Query, types: %s\n", 1340 QUEUENAME(qIdx), pScsiCtrlAnQuery->uScsiLun, CBQUEUENAME(qIdx) + 30, "", szTypeText)); 1356 virtioGetControlAsyncMaskText(szTypeText, sizeof(szTypeText), 1357 pScsiCtrlAnQuery->uEventsRequested); 1358 Log3Func(("[%s] (Target: %d LUN: %d) Asyc. Notification Queury: %s\n", 1359 uTarget, uScsiLun, szTypeText)); 1360 RT_NOREF(szTypeText); 1361 1341 1362 } 1342 1363 … … 1348 1369 case VIRTIOSCSI_T_AN_SUBSCRIBE: /* Guest SCSI driver is subscribing to async event notification(s) */ 1349 1370 { 1350 PVIRTIOSCSI_CTRL_AN_T pScsiCtrlAnSubscribe = (PVIRTIOSCSI_CTRL_AN_T)pScsiCtrl; 1371 1372 PVIRTIOSCSI_CTRL_AN_T pScsiCtrlAnSubscribe = &pScsiCtrlUnion->scsiCtrlAsyncNotify; 1373 1374 uint8_t uTarget = pScsiCtrlAnSubscribe->uScsiLun[1]; 1375 uint32_t uScsiLun = (pScsiCtrlAnSubscribe->uScsiLun[2] << 8 1376 | pScsiCtrlAnSubscribe->uScsiLun[3]) & 0x3fff; 1351 1377 1352 1378 if (pScsiCtrlAnSubscribe->uEventsRequested & ~SUBSCRIBABLE_EVENTS) 1353 LogFunc(("Unsupported bits in event subscription event mask: 0x%x\n", pScsiCtrlAnSubscribe->uEventsRequested)); 1379 LogFunc(("Unsupported bits in event subscription event mask: 0x%x\n", 1380 pScsiCtrlAnSubscribe->uEventsRequested)); 1354 1381 1355 1382 uSubscribedEvents &= pScsiCtrlAnSubscribe->uEventsRequested; … … 1360 1387 char szTypeText[128]; 1361 1388 virtioGetControlAsyncMaskText(szTypeText, sizeof(szTypeText), pScsiCtrlAnSubscribe->uEventsRequested); 1362 1363 LogFunc(("%s, VirtIO LUN: %.8Rhxs\n%*sAsync Subscribe, types: %s\n", 1364 QUEUENAME(qIdx), pScsiCtrlAnSubscribe->uScsiLun, CBQUEUENAME(qIdx) + 30, "", szTypeText)); 1389 Log3Func(("[%s] (Target: %d LUN: %d) Asyc. Notification Subscribe: %s\n", 1390 uTarget, uScsiLun, szTypeText)); 1391 RT_NOREF(szTypeText); 1392 1365 1393 } 1366 1394 … … 1380 1408 } 1381 1409 default: 1382 LogFunc(("Unknown control type extracted from %s: %d\n", QUEUENAME(qIdx), pScsiCtrl->uType)); 1410 LogFunc(("Unknown control type extracted from %s: %d\n", 1411 QUEUENAME(qIdx), &pScsiCtrlUnion->scsiCtrl.uType)); 1383 1412 1384 1413 uResponse = VIRTIOSCSI_S_FAILURE;
Note:
See TracChangeset
for help on using the changeset viewer.