Re: [edk2] [Patch] ShellPkg: Get media status in ifconfig command

2015-08-28 Thread Wu, Jiaxin
Attach patch and UNI file. 

-Original Message-
From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Jiaxin Wu
Sent: Friday, August 28, 2015 4:55 PM
To: edk2-devel@lists.01.org
Cc: Ye, Ting; Carsey, Jaben; Fu, Siyuan
Subject: [edk2] [Patch] ShellPkg: Get media status in ifconfig command

This patch is used to get media status in ifconfig command.

Cc: Ye Ting 
Cc: Fu Siyuan 
Cc: Jaben Carsey 
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jiaxin Wu 
---
 .../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 othersGet media status failed.
+**/
+EFI_STATUS
+EFIAPI
+IfConfigGetNicMediaStatus (
+  IN  EFI_HANDLEServiceHandle,
+  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;
-  UINT32Index;
+  LIST_ENTRY   *Entry;
+  LIST_ENTRY   *Next;
+  IFCONFIG_INTERFACE_CB*IfCb;
+  BOOLEAN   MediaPresent;
+  EFI_IPv4_ADDRESS  Gateway;
+  UINT32Index;
+  
+  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~?2phttps://lists.01.org/mailman/listinfo/edk2-devel
___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


Re: [edk2] [Patch] ShellPkg: Get media status in ifconfig command

2015-08-28 Thread Fu, Siyuan
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 ; Fu, Siyuan ; Carsey, 
Jaben 
Subject: [Patch] ShellPkg: Get media status in ifconfig command

This patch is used to get media status in ifconfig command.

Cc: Ye Ting 
Cc: Fu Siyuan 
Cc: Jaben Carsey 
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jiaxin Wu 
---
 .../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 othersGet media status failed.
+**/
+EFI_STATUS
+EFIAPI
+IfConfigGetNicMediaStatus (
+  IN  EFI_HANDLEServiceHandle,
+  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;
-  UINT32Index;
+  LIST_ENTRY   *Entry;
+  LIST_ENTRY   *Next;
+  IFCONFIG_INTERFACE_CB*IfCb;
+  BOOLEAN   MediaPresent;
+  EFI_IPv4_ADDRESS  Gateway;
+  UINT32Index;
+  
+  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~?2phttps://lists.01.org/mailman/listinfo/edk2-devel


[edk2] [Patch] ShellPkg: Get media status in ifconfig command

2015-08-28 Thread Jiaxin Wu
This patch is used to get media status in ifconfig command.

Cc: Ye Ting 
Cc: Fu Siyuan 
Cc: Jaben Carsey 
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jiaxin Wu 
---
 .../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 othersGet media status failed.
+**/
+EFI_STATUS
+EFIAPI
+IfConfigGetNicMediaStatus (
+  IN  EFI_HANDLEServiceHandle,
+  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;
-  UINT32Index;
+  LIST_ENTRY   *Entry;
+  LIST_ENTRY   *Next;
+  IFCONFIG_INTERFACE_CB*IfCb;
+  BOOLEAN   MediaPresent;
+  EFI_IPv4_ADDRESS  Gateway;
+  UINT32Index;
+  
+  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~?2phttps://lists.01.org/mailman/listinfo/edk2-devel