]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/VirtioNetDxe/SnpSharedHelpers.c
OvmfPkg/VirtioNetDxe: dynamically alloc transmit header
[mirror_edk2.git] / OvmfPkg / VirtioNetDxe / SnpSharedHelpers.c
index 9fedb72fdbd4d4aaa23fedf0dfced379347aa9cb..2fce8142d554d7849715df88528c298707ca423c 100644 (file)
@@ -39,7 +39,12 @@ VirtioNetShutdownRx (
   IN OUT VNET_DEV *Dev\r
   )\r
 {\r
-  FreePool (Dev->RxBuf);\r
+  Dev->VirtIo->UnmapSharedBuffer (Dev->VirtIo, Dev->RxBufMap);\r
+  Dev->VirtIo->FreeSharedPages (\r
+                 Dev->VirtIo,\r
+                 Dev->RxBufNrPages,\r
+                 Dev->RxBuf\r
+                 );\r
 }\r
 \r
 \r
@@ -49,5 +54,32 @@ VirtioNetShutdownTx (
   IN OUT VNET_DEV *Dev\r
   )\r
 {\r
+  Dev->VirtIo->UnmapSharedBuffer (Dev->VirtIo, Dev->TxSharedReqMap);\r
+  Dev->VirtIo->FreeSharedPages (\r
+                 Dev->VirtIo,\r
+                 EFI_SIZE_TO_PAGES (sizeof *(Dev->TxSharedReq)),\r
+                 Dev->TxSharedReq\r
+                 );\r
+\r
   FreePool (Dev->TxFreeStack);\r
 }\r
+\r
+/**\r
+  Release TX and RX VRING resources.\r
+\r
+  @param[in,out] Dev       The VNET_DEV driver instance which was using\r
+                           the ring.\r
+  @param[in,out] Ring      The virtio ring to clean up.\r
+  @param[in]     RingMap   A token return from the VirtioRingMap()\r
+*/\r
+VOID\r
+EFIAPI\r
+VirtioNetUninitRing (\r
+  IN OUT VNET_DEV *Dev,\r
+  IN OUT VRING    *Ring,\r
+  IN     VOID     *RingMap\r
+  )\r
+{\r
+  Dev->VirtIo->UnmapSharedBuffer (Dev->VirtIo, RingMap);\r
+  VirtioRingUninit (Dev->VirtIo, Ring);\r
+}\r