Changeset 33325 in vbox for trunk/src/VBox/Devices/VirtIO
- Timestamp:
- Oct 21, 2010 8:34:14 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 66905
- Location:
- trunk/src/VBox/Devices/VirtIO
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/VirtIO/Virtio.cpp
r33314 r33325 181 181 } 182 182 183 void vqueuePut(PVPCISTATE pState, PVQUEUE pQueue, PVQUEUEELEM pElem, uint32_t uLen )184 { 185 unsigned int i, uOffset ;183 void vqueuePut(PVPCISTATE pState, PVQUEUE pQueue, PVQUEUEELEM pElem, uint32_t uLen, uint32_t uReserved) 184 { 185 unsigned int i, uOffset, cbReserved = uReserved; 186 186 187 187 Log2(("%s vqueuePut: %s desc_idx=%u acb=%u\n", INSTANCE(pState), 188 188 QUEUENAME(pState, pQueue), pElem->uIndex, uLen)); 189 for (i = uOffset = 0; i < pElem->nIn && uOffset < uLen ; i++)190 { 191 uint32_t cbSegLen = RT_MIN(uLen - uOffset, pElem->aSegsIn[i].cb);189 for (i = uOffset = 0; i < pElem->nIn && uOffset < uLen - uReserved; i++) 190 { 191 uint32_t cbSegLen = RT_MIN(uLen - cbReserved - uOffset, pElem->aSegsIn[i].cb - cbReserved); 192 192 if (pElem->aSegsIn[i].pv) 193 193 { 194 194 Log2(("%s vqueuePut: %s used_idx=%u seg=%u addr=%p pv=%p cb=%u acb=%u\n", INSTANCE(pState), 195 195 QUEUENAME(pState, pQueue), pQueue->uNextUsedIndex, i, pElem->aSegsIn[i].addr, pElem->aSegsIn[i].pv, pElem->aSegsIn[i].cb, cbSegLen)); 196 PDMDevHlpPhysWrite(pState->CTX_SUFF(pDevIns), pElem->aSegsIn[i].addr ,196 PDMDevHlpPhysWrite(pState->CTX_SUFF(pDevIns), pElem->aSegsIn[i].addr + cbReserved, 197 197 pElem->aSegsIn[i].pv, cbSegLen); 198 cbReserved = 0; 198 199 } 199 200 uOffset += cbSegLen; 200 201 } 201 202 203 Assert((uReserved + uOffset) == uLen || pElem->nIn == 0); 202 204 Log2(("%s vqueuePut: %s used_idx=%u guest_used_idx=%u id=%u len=%u\n", INSTANCE(pState), 203 205 QUEUENAME(pState, pQueue), pQueue->uNextUsedIndex, vringReadUsedIndex(pState, &pQueue->VRing), pElem->uIndex, uLen)); -
trunk/src/VBox/Devices/VirtIO/Virtio.h
r28800 r33325 305 305 306 306 bool vqueueGet(PVPCISTATE pState, PVQUEUE pQueue, PVQUEUEELEM pElem); 307 void vqueuePut(PVPCISTATE pState, PVQUEUE pQueue, PVQUEUEELEM pElem, uint32_t uLen );307 void vqueuePut(PVPCISTATE pState, PVQUEUE pQueue, PVQUEUEELEM pElem, uint32_t uLen, uint32_t uReserved = 0); 308 308 void vqueueNotify(PVPCISTATE pState, PVQUEUE pQueue); 309 309 void vqueueSync(PVPCISTATE pState, PVQUEUE pQueue);
Note:
See TracChangeset
for help on using the changeset viewer.