+/**\r
+ Detect media status for specified network device.\r
+\r
+ If MediaPresent is NULL, then ASSERT().\r
+\r
+ The underlying UNDI driver may or may not support reporting media status from\r
+ GET_STATUS command (PXE_STATFLAGS_GET_STATUS_NO_MEDIA_SUPPORTED). This routine\r
+ will try to invoke Snp->GetStatus() to get the media status. If media is already\r
+ present, it returns directly. If media is not present, it will stop SNP and then\r
+ restart SNP to get the latest media status. This provides an opportunity to get\r
+ the correct media status for old UNDI driver, which doesn't support reporting\r
+ media status from GET_STATUS command.\r
+ Note: there are two limitations for the current algorithm:\r
+ 1) For UNDI with this capability, when the cable is not attached, there will\r
+ be an redundant Stop/Start() process.\r
+ 2) for UNDI without this capability, in case that network cable is attached when\r
+ Snp->Initialize() is invoked while network cable is unattached later,\r
+ NetLibDetectMedia() will report MediaPresent as TRUE, causing upper layer\r
+ apps to wait for timeout time.\r
+\r
+ @param[in] ServiceHandle The handle where network service binding protocols are\r
+ installed.\r
+ @param[out] MediaPresent The pointer to store the media status.\r
+\r
+ @retval EFI_SUCCESS Media detection success.\r
+ @retval EFI_INVALID_PARAMETER ServiceHandle is not a valid network device handle.\r
+ @retval EFI_UNSUPPORTED The network device does not support media detection.\r
+ @retval EFI_DEVICE_ERROR SNP is in an unknown state.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+NetLibDetectMedia (\r
+ IN EFI_HANDLE ServiceHandle,\r
+ OUT BOOLEAN *MediaPresent\r
+ );\r
+\r
+/**\r
+ Detect media state for a network device. This routine will wait for a period of time at\r
+ a specified checking interval when a certain network is under connecting until connection\r
+ process finishes or timeout. If Aip protocol is supported by low layer drivers, three kinds\r
+ of media states can be detected: EFI_SUCCESS, EFI_NOT_READY and EFI_NO_MEDIA, represents\r
+ connected state, connecting state and no media state respectively. When function detects\r
+ the current state is EFI_NOT_READY, it will loop to wait for next time's check until state\r
+ turns to be EFI_SUCCESS or EFI_NO_MEDIA. If Aip protocol is not supported, function will\r
+ call NetLibDetectMedia() and return state directly.\r
+\r
+ @param[in] ServiceHandle The handle where network service binding protocols are\r
+ installed on.\r
+ @param[in] Timeout The maximum number of 100ns units to wait when network\r
+ is connecting. Zero value means detect once and return\r
+ immediately.\r
+ @param[out] MediaState The pointer to the detected media state.\r
+\r
+ @retval EFI_SUCCESS Media detection success.\r
+ @retval EFI_INVALID_PARAMETER ServiceHandle is not a valid network device handle or\r
+ MediaState pointer is NULL.\r
+ @retval EFI_DEVICE_ERROR A device error occurred.\r
+ @retval EFI_TIMEOUT Network is connecting but timeout.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+NetLibDetectMediaWaitTimeout (\r
+ IN EFI_HANDLE ServiceHandle,\r
+ IN UINT64 Timeout,\r
+ OUT EFI_STATUS *MediaState\r
+ );\r
+\r
+\r