Lines Matching refs:pQueue

44 static void vqueueReset(PVQUEUE pQueue)
46 pQueue->VRing.addrDescriptors = 0;
47 pQueue->VRing.addrAvail = 0;
48 pQueue->VRing.addrUsed = 0;
49 pQueue->uNextAvailIndex = 0;
50 pQueue->uNextUsedIndex = 0;
51 pQueue->uPageNumber = 0;
54 static void vqueueInit(PVQUEUE pQueue, uint32_t uPageNumber)
56 pQueue->VRing.addrDescriptors = (uint64_t)uPageNumber << PAGE_SHIFT;
57 pQueue->VRing.addrAvail = pQueue->VRing.addrDescriptors
58 + sizeof(VRINGDESC) * pQueue->VRing.uSize;
59 pQueue->VRing.addrUsed = RT_ALIGN(
60 pQueue->VRing.addrAvail + RT_OFFSETOF(VRINGAVAIL, auRing[pQueue->VRing.uSize]),
62 pQueue->uNextAvailIndex = 0;
63 pQueue->uNextUsedIndex = 0;
116 bool vqueueSkip(PVPCISTATE pState, PVQUEUE pQueue)
118 if (vqueueIsEmpty(pState, pQueue))
122 QUEUENAME(pState, pQueue), pQueue->uNextAvailIndex));
123 pQueue->uNextAvailIndex++;
127 bool vqueueGet(PVPCISTATE pState, PVQUEUE pQueue, PVQUEUEELEM pElem, bool fRemove)
129 if (vqueueIsEmpty(pState, pQueue))
135 QUEUENAME(pState, pQueue), pQueue->uNextAvailIndex));
138 uint16_t idx = vringReadAvail(pState, &pQueue->VRing, pQueue->uNextAvailIndex);
140 pQueue->uNextAvailIndex++;
146 vringReadDesc(pState, &pQueue->VRing, idx, &desc);
150 QUEUENAME(pState, pQueue), pElem->nIn, idx, desc.u64Addr, desc.uLen));
156 QUEUENAME(pState, pQueue), pElem->nOut, idx, desc.u64Addr, desc.uLen));
168 QUEUENAME(pState, pQueue), pElem->uIndex, pElem->nIn, pElem->nOut));
199 void vqueuePut(PVPCISTATE pState, PVQUEUE pQueue, PVQUEUEELEM pElem, uint32_t uLen, uint32_t uReserved)
204 QUEUENAME(pState, pQueue), pElem->uIndex, uLen));
211 QUEUENAME(pState, pQueue), pQueue->uNextUsedIndex, i, pElem->aSegsIn[i].addr, pElem->aSegsIn[i].pv, pElem->aSegsIn[i].cb, cbSegLen));
221 QUEUENAME(pState, pQueue), pQueue->uNextUsedIndex, vringReadUsedIndex(pState, &pQueue->VRing), pElem->uIndex, uLen));
222 vringWriteUsedElem(pState, &pQueue->VRing, pQueue->uNextUsedIndex++, pElem->uIndex, uLen);
225 void vqueueNotify(PVPCISTATE pState, PVQUEUE pQueue)
228 INSTANCE(pState), QUEUENAME(pState, pQueue),
229 vringReadAvailFlags(pState, &pQueue->VRing),
230 pState->uGuestFeatures, vqueueIsEmpty(pState, pQueue)?"":"not "));
231 if (!(vringReadAvailFlags(pState, &pQueue->VRing) & VRINGAVAIL_F_NO_INTERRUPT)
232 || ((pState->uGuestFeatures & VPCI_F_NOTIFY_ON_EMPTY) && vqueueIsEmpty(pState, pQueue)))
245 void vqueueSync(PVPCISTATE pState, PVQUEUE pQueue)
248 QUEUENAME(pState, pQueue), vringReadUsedIndex(pState, &pQueue->VRing), pQueue->uNextUsedIndex));
249 vringWriteUsedIndex(pState, &pQueue->VRing, pQueue->uNextUsedIndex);
250 vqueueNotify(pState, pQueue);
923 PVQUEUE pQueue = NULL;
929 pQueue = &pState->Queues[i];
934 if (!pQueue)
940 pQueue->VRing.uSize = uSize;
941 pQueue->VRing.addrDescriptors = 0;
942 pQueue->uPageNumber = 0;
943 pQueue->pfnCallback = pfnCallback;
944 pQueue->pcszName = pcszName;
947 return pQueue;