Hi, Jiaxin The Snp->Getstatus may not support media present report, please use NetLib interface NetLibDetectMedia() instead.
-----Original Message----- From: Wu, Jiaxin Sent: Friday, August 28, 2015 4:55 PM To: edk2-devel@lists.01.org Cc: Ye, Ting <ting...@intel.com>; Fu, Siyuan <siyuan...@intel.com>; Carsey, Jaben <jaben.car...@intel.com> Subject: [Patch] ShellPkg: Get media status in ifconfig command This patch is used to get media status in ifconfig command. Cc: Ye Ting <ting...@intel.com> Cc: Fu Siyuan <siyuan...@intel.com> Cc: Jaben Carsey <jaben.car...@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jiaxin Wu <jiaxin...@intel.com> --- .../UefiShellNetwork1CommandsLib/Ifconfig.c | 85 +++++++++++++++++++-- .../UefiShellNetwork1CommandsLib.uni | Bin 20910 -> 21094 bytes 2 files changed, 80 insertions(+), 5 deletions(-) diff --git a/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c b/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c index 273f1a8..4637f28 100644 --- a/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c +++ b/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c @@ -378,10 +378,68 @@ IfConfigPrintMacAddr ( } ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_NEWLINE), gShellNetwork1HiiHandle); } +/** + Get network physical device NIC information. + + @param[in] Handle The network physical device handle. + @param[out] MediaPresent Upon successful return, TRUE is media present + is enabled. FALSE otherwise. + + @retval EFI_SUCCESS The operation was successful. + @retval others Get media status failed. +**/ +EFI_STATUS +EFIAPI +IfConfigGetNicMediaStatus ( + IN EFI_HANDLE ServiceHandle, + OUT BOOLEAN *MediaPresent + ) + +{ + EFI_STATUS Status; + EFI_HANDLE SnpHandle; + EFI_SIMPLE_NETWORK_PROTOCOL *Snp; + UINT32 InterruptStatus; + + ASSERT (MediaPresent != NULL); + + // + // Get SNP handle + // + Snp = NULL; + SnpHandle = NetLibGetSnpHandle (ServiceHandle, &Snp); if (SnpHandle + == NULL) { + return EFI_INVALID_PARAMETER; + } + + // + // Check whether SNP support media detection // if + (!Snp->Mode->MediaPresentSupported) { + return EFI_UNSUPPORTED; + } + + // + // Invoke Snp->GetStatus() to refresh MediaPresent field in SNP mode + data // Status = Snp->GetStatus (Snp, &InterruptStatus, NULL); if + (EFI_ERROR (Status)) { + return Status; + } + + if (Snp->Mode->MediaPresent) { + *MediaPresent = TRUE; + } else { + *MediaPresent = FALSE; + } + + return EFI_SUCCESS; +} + /** The get current status of all handles. @param[in] IfName The pointer of IfName(interface name). @@ -594,15 +652,18 @@ ON_ERROR: EFI_STATUS IfConfigShowInterfaceInfo ( IN LIST_ENTRY *IfList ) { - LIST_ENTRY *Entry; - LIST_ENTRY *Next; - IFCONFIG_INTERFACE_CB *IfCb; - EFI_IPv4_ADDRESS Gateway; - UINT32 Index; + LIST_ENTRY *Entry; + LIST_ENTRY *Next; + IFCONFIG_INTERFACE_CB *IfCb; + BOOLEAN MediaPresent; + EFI_IPv4_ADDRESS Gateway; + UINT32 Index; + + MediaPresent = TRUE; if (IsListEmpty (IfList)) { ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INVALID_INTERFACE), gShellNetwork1HiiHandle); } @@ -618,10 +679,24 @@ IfConfigShowInterfaceInfo ( // Print interface name. // ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_IF_NAME), gShellNetwork1HiiHandle, IfCb->IfInfo->Name); // + // Get media state. + // + IfConfigGetNicMediaStatus (IfCb->NicHandle, &MediaPresent); + + // + // Print media state. + // + if (!MediaPresent) { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_MEDIA_STATE), gShellNetwork1HiiHandle, L"Media disconnected"); + } else { + ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_MEDIA_STATE), gShellNetwork1HiiHandle, L"Media present"); + } + + // // Print interface config policy. // if (IfCb->Policy == Ip4Config2PolicyDhcp) { ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_POLICY_DHCP), gShellNetwork1HiiHandle); } else { diff --git a/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.uni b/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.uni index 7cc7b7d672246a62ef97a8b002a780003d3da330..43259591820582cc38937ad680739fcff21b96c5 100644 GIT binary patch delta 66 zcmZ3tnDN;X#toCSgnb!Y8C)1V85|kn8G;!?fON>@hnk|30}QmpJs5l$QW;VhG8qyX S6o9fNK)Qq>b+fZpwmJY$n-Ez5 delta 14 WcmaF1gmK+s#toCSHhXEyr~?2p<OQ_= -- 1.9.5.msysgit.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel