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

Reply via email to