- );\r
- if ((Status != EFI_SUCCESS) && (Status != EFI_NOT_READY)) {\r
- Status = EFI_DEVICE_ERROR;\r
- break;\r
- }\r
-\r
- //\r
- // If Status is EFI_SUCCESS, the packet is put in the transmit queue.\r
- // if Status is EFI_NOT_READY, the transmit engine of the network interface is busy.\r
- // Both need to sync SNP.\r
- //\r
- TxBuf = NULL;\r
- do {\r
- //\r
- // Get the recycled transmit buffer status.\r
- //\r
- Snp->GetStatus (Snp, NULL, (VOID **) &TxBuf);\r
-\r
- if (!EFI_ERROR (gBS->CheckEvent (MnpDeviceData->TxTimeoutEvent))) {\r
- Status = EFI_TIMEOUT;\r
- break;\r
- }\r
- } while (TxBuf == NULL);\r
-\r
- if ((Status == EFI_SUCCESS) || (Status == EFI_TIMEOUT)) {\r
- break;\r
- } else {\r
- //\r
- // Status is EFI_NOT_READY. Restart the timer event and call Snp->Transmit again.\r
- //\r
- gBS->SetTimer (\r
- MnpDeviceData->TxTimeoutEvent,\r
- TimerRelative,\r
- MNP_TX_TIMEOUT_TIME\r
- );\r
- }\r