Lines Matching refs:pSgBuf

362  * @param   pSgBuf              The S/G buffer to free.
364 static void drvNATFreeSgBuf(PDRVNAT pThis, PPDMSCATTERGATHER pSgBuf)
366 Assert((pSgBuf->fFlags & PDMSCATTERGATHER_FLAGS_MAGIC_MASK) == PDMSCATTERGATHER_FLAGS_MAGIC);
367 pSgBuf->fFlags = 0;
368 if (pSgBuf->pvAllocator)
370 Assert(!pSgBuf->pvUser);
371 slirp_ext_m_free(pThis->pNATState, (struct mbuf *)pSgBuf->pvAllocator, NULL);
372 pSgBuf->pvAllocator = NULL;
374 else if (pSgBuf->pvUser)
376 RTMemFree(pSgBuf->aSegs[0].pvSeg);
377 pSgBuf->aSegs[0].pvSeg = NULL;
378 RTMemFree(pSgBuf->pvUser);
379 pSgBuf->pvUser = NULL;
381 RTMemFree(pSgBuf);
388 * @param pSgBuf The scatter/gather buffer.
391 static void drvNATSendWorker(PDRVNAT pThis, PPDMSCATTERGATHER pSgBuf)
398 struct mbuf *m = (struct mbuf *)pSgBuf->pvAllocator;
404 pSgBuf->pvAllocator = NULL;
405 slirp_input(pThis->pNATState, m, pSgBuf->cbUsed);
416 uint8_t const *pbFrame = (uint8_t const *)pSgBuf->aSegs[0].pvSeg;
417 PCPDMNETWORKGSO pGso = (PCPDMNETWORKGSO)pSgBuf->pvUser;
418 uint32_t const cSegs = PDMNetGsoCalcSegmentCount(pGso, pSgBuf->cbUsed); Assert(cSegs > 1);
429 uint32_t offPayload = PDMNetGsoCarveSegment(pGso, pbFrame, pSgBuf->cbUsed,
436 void *pvSegFrame = PDMNetGsoCarveSegmentQD(pGso, (uint8_t *)pbFrame, pSgBuf->cbUsed, abHdrScratch,
445 drvNATFreeSgBuf(pThis, pSgBuf);
486 PPDMSCATTERGATHER pSgBuf = (PPDMSCATTERGATHER)RTMemAlloc(sizeof(*pSgBuf));
487 if (!pSgBuf)
501 pSgBuf->pvUser = NULL;
502 pSgBuf->pvAllocator = slirp_ext_m_get(pThis->pNATState, cbMin,
503 &pSgBuf->aSegs[0].pvSeg, &pSgBuf->aSegs[0].cbSeg);
504 if (!pSgBuf->pvAllocator)
506 RTMemFree(pSgBuf);
522 pSgBuf->pvUser = RTMemDup(pGso, sizeof(*pGso));
523 pSgBuf->pvAllocator = NULL;
524 pSgBuf->aSegs[0].cbSeg = RT_ALIGN_Z(cbMin, 16);
525 pSgBuf->aSegs[0].pvSeg = RTMemAlloc(pSgBuf->aSegs[0].cbSeg);
526 if (!pSgBuf->pvUser || !pSgBuf->aSegs[0].pvSeg)
528 RTMemFree(pSgBuf->aSegs[0].pvSeg);
529 RTMemFree(pSgBuf->pvUser);
530 RTMemFree(pSgBuf);
538 pSgBuf->fFlags = PDMSCATTERGATHER_FLAGS_MAGIC | PDMSCATTERGATHER_FLAGS_OWNER_1;
539 pSgBuf->cbUsed = 0;
540 pSgBuf->cbAvailable = pSgBuf->aSegs[0].cbSeg;
541 pSgBuf->cSegs = 1;
544 memset(pSgBuf->aSegs[0].pvSeg, 'F', pSgBuf->aSegs[0].cbSeg);
546 *ppSgBuf = pSgBuf;
553 static DECLCALLBACK(int) drvNATNetworkUp_FreeBuf(PPDMINETWORKUP pInterface, PPDMSCATTERGATHER pSgBuf)
557 drvNATFreeSgBuf(pThis, pSgBuf);
564 static DECLCALLBACK(int) drvNATNetworkUp_SendBuf(PPDMINETWORKUP pInterface, PPDMSCATTERGATHER pSgBuf, bool fOnWorkerThread)
567 Assert((pSgBuf->fFlags & PDMSCATTERGATHER_FLAGS_OWNER_MASK) == PDMSCATTERGATHER_FLAGS_OWNER_1);
580 (PFNRT)drvNATSendWorker, 2, pThis, pSgBuf);
591 drvNATFreeSgBuf(pThis, pSgBuf);