]> git.proxmox.com Git - mirror_edk2.git/commitdiff
1. Define a netlib library function NetLibGetSystemGuid()
authorhhuan13 <hhuan13@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 14 Jul 2011 11:27:05 +0000 (11:27 +0000)
committerhhuan13 <hhuan13@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 14 Jul 2011 11:27:05 +0000 (11:27 +0000)
2. Update PXE driver to use NetLibGetSystemGuid()

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12017 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Include/Library/NetLib.h
MdeModulePkg/Library/DxeNetLib/DxeNetLib.c
MdeModulePkg/Library/DxeNetLib/DxeNetLib.inf
MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDhcp.c
MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.c
MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcSupport.h

index 102d7f1413844ef52bad68eb35e8d36fb9fa6507..4bb1f766a10937e515e3c9244a367370ca7b7a97 100644 (file)
@@ -2,7 +2,7 @@
   This library is only intended to be used by UEFI network stack modules.\r
   It provides basic functions for the UEFI network stack.\r
 \r
-Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2005 - 2011, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at<BR>\r
@@ -2020,4 +2020,20 @@ VOID
 NetIpSecNetbufFree (\r
   NET_BUF   *Nbuf\r
   );\r
+\r
+/**\r
+  This function obtains the system guid from the smbios table.\r
+\r
+  @param[out]  SystemGuid     The pointer of the returned system guid.\r
+\r
+  @retval EFI_SUCCESS         Successfully obtained the system guid.\r
+  @retval EFI_NOT_FOUND       Did not find the SMBIOS table.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+NetLibGetSystemGuid (\r
+  OUT EFI_GUID              *SystemGuid\r
+  );\r
+\r
 #endif\r
index 55c72027fc4bce82f7b1a6ed3e1d87a6d0461867..dbd77e5bda145d4afe3eda93fb52f5468f1fd147 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Network library.\r
 \r
-Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2005 - 2011, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -13,6 +13,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 #include <Uefi.h>\r
 \r
+#include <IndustryStandard/SmBios.h>\r
+\r
 #include <Protocol/DriverBinding.h>\r
 #include <Protocol/ServiceBinding.h>\r
 #include <Protocol/SimpleNetwork.h>\r
@@ -23,6 +25,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <Protocol/HiiConfigAccess.h>\r
 \r
 #include <Guid/NicIp4ConfigNvData.h>\r
+#include <Guid/SmBios.h>\r
 \r
 #include <Library/NetLib.h>\r
 #include <Library/BaseLib.h>\r
@@ -3155,3 +3158,86 @@ Exit:
   return Status;\r
 }\r
 \r
+\r
+\r
+/**\r
+  This function obtains the system guid from the smbios table.\r
+\r
+  @param[out]  SystemGuid     The pointer of the returned system guid.\r
+\r
+  @retval EFI_SUCCESS         Successfully obtained the system guid.\r
+  @retval EFI_NOT_FOUND       Did not find the SMBIOS table.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+NetLibGetSystemGuid (\r
+  OUT EFI_GUID              *SystemGuid\r
+  )\r
+{\r
+  EFI_STATUS                Status;\r
+  SMBIOS_TABLE_ENTRY_POINT  *SmbiosTable;\r
+  SMBIOS_STRUCTURE_POINTER  Smbios;\r
+  SMBIOS_STRUCTURE_POINTER  SmbiosEnd;\r
+  CHAR8                     *String;\r
+\r
+  SmbiosTable = NULL;\r
+  Status      = EfiGetSystemConfigurationTable (&gEfiSmbiosTableGuid, (VOID **) &SmbiosTable);\r
+\r
+  if (EFI_ERROR (Status) || SmbiosTable == NULL) {\r
+    return EFI_NOT_FOUND;\r
+  }\r
+\r
+  Smbios.Hdr    = (SMBIOS_STRUCTURE *) (UINTN) SmbiosTable->TableAddress;\r
+  SmbiosEnd.Raw = (UINT8 *) (UINTN) (SmbiosTable->TableAddress + SmbiosTable->TableLength);\r
+\r
+  do {\r
+    if (Smbios.Hdr->Type == 1) {\r
+      if (Smbios.Hdr->Length < 0x19) {\r
+        //\r
+        // Older version did not support UUID.\r
+        //\r
+        return EFI_NOT_FOUND;\r
+      }\r
+      \r
+      //\r
+      // SMBIOS tables are byte packed so we need to do a byte copy to\r
+      // prevend alignment faults on Itanium-based platform.\r
+      //\r
+      CopyMem (SystemGuid, &Smbios.Type1->Uuid, sizeof (EFI_GUID));\r
+      return EFI_SUCCESS;\r
+    }\r
+\r
+    //\r
+    // Go to the next SMBIOS structure. Each SMBIOS structure may include 2 parts:\r
+    // 1. Formatted section; 2. Unformatted string section. So, 2 steps are needed\r
+    // to skip one SMBIOS structure.\r
+    //\r
+    \r
+    //\r
+    // Step 1: Skip over formatted section.\r
+    //\r
+    String = (CHAR8 *) (Smbios.Raw + Smbios.Hdr->Length);\r
+  \r
+    //\r
+    // Step 2: Skip over unformated string section.\r
+    //\r
+    do {\r
+      //\r
+      // Each string is terminated with a NULL(00h) BYTE and the sets of strings\r
+      // is terminated with an additional NULL(00h) BYTE.\r
+      //\r
+      for ( ; *String != 0; String++) {\r
+      }\r
+\r
+      if (*(UINT8*)++String == 0) {\r
+        //\r
+        // Pointer to the next SMBIOS structure.\r
+        //\r
+        Smbios.Raw = (UINT8 *)++String;\r
+        break;\r
+      }    \r
+    } while (TRUE);\r
+  } while (Smbios.Raw < SmbiosEnd.Raw);\r
+  return EFI_NOT_FOUND;\r
+}\r
index 9b11c8211d597c76e13a1810363454d13009bd76..190d82b39db106254ac7553104074763431b9f51 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 #  Instance of DxeNetLib.\r
 #\r
-# Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
 # This program and the accompanying materials\r
 # are licensed and made available under the terms and conditions of the BSD License\r
 # which accompanies this distribution.  The full text of the license may be found at\r
@@ -51,6 +51,7 @@
 \r
 [Guids]\r
   gEfiNicIp4ConfigVariableGuid\r
+  gEfiSmbiosTableGuid\r
 \r
 [Protocols]\r
   gEfiSimpleNetworkProtocolGuid                 # PROTOCOL ALWAYS_CONSUMED\r
index 6b25cab33d58cd41223cfb5a7ec78418010e7bba..a9c86dc042bf1c2672843af73245a5a65a9d06e7 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Support for PxeBc dhcp functions.\r
 \r
-Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -788,7 +788,6 @@ PxeBcDhcpCallBack (
   UINT16                              Value;\r
   EFI_STATUS                          Status;\r
   BOOLEAN                             Received;\r
-  CHAR8                               *SystemSerialNumber;\r
   EFI_DHCP4_HEADER                    *DhcpHeader;\r
 \r
   if ((Dhcp4Event != Dhcp4RcvdOffer) &&\r
@@ -843,7 +842,7 @@ PxeBcDhcpCallBack (
       //\r
       DhcpHeader = &Packet->Dhcp4.Header;\r
 \r
-      if (EFI_ERROR (GetSmbiosSystemGuidAndSerialNumber ((EFI_GUID *) DhcpHeader->ClientHwAddr, &SystemSerialNumber))) {\r
+      if (EFI_ERROR (NetLibGetSystemGuid ((EFI_GUID *) DhcpHeader->ClientHwAddr))) {\r
         //\r
         // GUID not yet set - send all 0xff's to show programable (via SetVariable)\r
         // SetMem(DHCPV4_OPTIONS_BUFFER.DhcpPlatformId.Guid, sizeof(EFI_GUID), 0xff);\r
@@ -928,7 +927,6 @@ PxeBcBuildDhcpOptions (
   UINT32                    Index;\r
   PXEBC_DHCP4_OPTION_ENTRY  OptEnt;\r
   UINT16                    Value;\r
-  CHAR8                     *SystemSerialNumber;\r
 \r
   Index       = 0;\r
   OptList[0]  = (EFI_DHCP4_PACKET_OPTION *) Private->OptionBuffer;\r
@@ -1009,7 +1007,7 @@ PxeBcBuildDhcpOptions (
   Index++;\r
   OptList[Index]          = GET_NEXT_DHCP_OPTION (OptList[Index - 1]);\r
 \r
-  if (EFI_ERROR (GetSmbiosSystemGuidAndSerialNumber ((EFI_GUID *) OptEnt.Uuid->Guid, &SystemSerialNumber))) {\r
+  if (EFI_ERROR (NetLibGetSystemGuid ((EFI_GUID *) OptEnt.Uuid->Guid))) {\r
     //\r
     // GUID not yet set - send all 0xff's to show programable (via SetVariable)\r
     // SetMem(DHCPV4_OPTIONS_BUFFER.DhcpPlatformId.Guid, sizeof(EFI_GUID), 0xff);\r
@@ -1120,7 +1118,6 @@ PxeBcDiscvBootService (
   EFI_DHCP4_PACKET_OPTION             *PxeOpt;\r
   PXEBC_OPTION_BOOT_ITEM              *PxeBootItem;\r
   UINT8                               VendorOptLen;\r
-  CHAR8                               *SystemSerialNumber;\r
   EFI_DHCP4_HEADER                    *DhcpHeader;\r
   UINT32                              Xid;\r
 \r
@@ -1180,7 +1177,7 @@ PxeBcDiscvBootService (
 \r
   DhcpHeader = &Token.Packet->Dhcp4.Header;\r
   if (Mode->SendGUID) {\r
-    if (EFI_ERROR (GetSmbiosSystemGuidAndSerialNumber ((EFI_GUID *) DhcpHeader->ClientHwAddr, &SystemSerialNumber))) {\r
+    if (EFI_ERROR (NetLibGetSystemGuid ((EFI_GUID *) DhcpHeader->ClientHwAddr))) {\r
       //\r
       // GUID not yet set - send all 0's to show not programable\r
       //\r
index 60cace885de1043b3cd377a373cdb225ce95db22..327e4a26d81cad633d30d7aa502d4a4e4ea6ea52 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Support routines for PxeBc.\r
 \r
-Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -16,127 +16,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include "PxeBcImpl.h"\r
 \r
 \r
-/**\r
-  This function returns SMBIOS string given the string number.\r
-\r
-  @param  Smbios              Pointer to SMBIOS structure\r
-  @param  StringNumber        String number to return. 0 is used to skip all\r
-                              strings and  point to the next SMBIOS structure.\r
-\r
-  @return Pointer to string, or pointer to next SMBIOS strcuture if StringNumber == 0\r
-\r
-**/\r
-CHAR8 *\r
-GetSmbiosString (\r
-  IN  SMBIOS_STRUCTURE_POINTER  *Smbios,\r
-  IN  UINT16                    StringNumber\r
-  )\r
-{\r
-  UINT16  Index;\r
-  CHAR8   *String;\r
-\r
-  //\r
-  // Skip over formatted section\r
-  //\r
-  String = (CHAR8 *) (Smbios->Raw + Smbios->Hdr->Length);\r
-\r
-  //\r
-  // Look through unformated section\r
-  //\r
-  for (Index = 1; Index <= StringNumber || StringNumber == 0; Index++) {\r
-    if (StringNumber == Index) {\r
-      return String;\r
-    }\r
-    //\r
-    // Skip string\r
-    //\r
-    for (; *String != 0; String++)\r
-      ;\r
-    String++;\r
-\r
-    if (*String == 0) {\r
-      //\r
-      // If double NULL then we are done.\r
-      //  Return pointer to next structure in Smbios.\r
-      //  if you pass in a 0 you will always get here\r
-      //\r
-      Smbios->Raw = (UINT8 *)++String;\r
-      return NULL;\r
-    }\r
-  }\r
-\r
-  return NULL;\r
-}\r
-\r
-\r
-/**\r
-  This function gets system guid and serial number from the smbios table.\r
-\r
-  @param  SystemGuid          The pointer of returned system guid.\r
-  @param  SystemSerialNumber  The pointer of returned system serial number.\r
-\r
-  @retval EFI_SUCCESS         Successfully get the system guid and system serial\r
-                              number.\r
-  @retval EFI_NOT_FOUND       Not find the SMBIOS table.\r
-\r
-**/\r
-EFI_STATUS\r
-GetSmbiosSystemGuidAndSerialNumber (\r
-  IN  EFI_GUID  *SystemGuid,\r
-  OUT CHAR8     **SystemSerialNumber\r
-  )\r
-{\r
-  EFI_STATUS                Status;\r
-  SMBIOS_TABLE_ENTRY_POINT  *SmbiosTable;\r
-  SMBIOS_STRUCTURE_POINTER  Smbios;\r
-  SMBIOS_STRUCTURE_POINTER  SmbiosEnd;\r
-  UINT16                    Index;\r
-\r
-  Status = EfiGetSystemConfigurationTable (&gEfiSmbiosTableGuid, (VOID **) &SmbiosTable);\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-  ASSERT (SmbiosTable != NULL);\r
-\r
-  Smbios.Hdr    = (SMBIOS_STRUCTURE *) (UINTN) SmbiosTable->TableAddress;\r
-  SmbiosEnd.Raw = (UINT8 *) (UINTN) (SmbiosTable->TableAddress + SmbiosTable->TableLength);\r
-\r
-  for (Index = 0; Index < SmbiosTable->TableLength; Index++) {\r
-    if (Smbios.Hdr->Type == 1) {\r
-      if (Smbios.Hdr->Length < 0x19) {\r
-        //\r
-        // Older version did not support Guid and Serial number\r
-        //\r
-        continue;\r
-      }\r
-      //\r
-      // SMBIOS tables are byte packed so we need to do a byte copy to\r
-      // prevend alignment faults on Itanium-based platform.\r
-      //\r
-      CopyMem (SystemGuid, &Smbios.Type1->Uuid, sizeof (EFI_GUID));\r
-      *SystemSerialNumber = GetSmbiosString (&Smbios, Smbios.Type1->SerialNumber);\r
-\r
-      return EFI_SUCCESS;\r
-    }\r
-    //\r
-    // Make Smbios point to the next record\r
-    //\r
-    GetSmbiosString (&Smbios, 0);\r
-\r
-    if (Smbios.Raw >= SmbiosEnd.Raw) {\r
-      //\r
-      // SMBIOS 2.1 incorrectly stated the length of SmbiosTable as 0x1e.\r
-      // given this we must double check against the length of the structure.\r
-      //\r
-      return EFI_SUCCESS;\r
-    }\r
-  }\r
-\r
-  return EFI_SUCCESS;\r
-}\r
-\r
-\r
 /**\r
   The common notify function associated with various PxeBc events.\r
 \r
index 8eb9574e80277b171386b6c130a057e053c4bc24..96f48f56de3ede0d6778ad3110271a578c442663 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
   Support routines for PxeBc.\r
-Copyright (c) 2007 - 2009, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2007 - 2011, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -14,23 +14,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #ifndef __EFI_PXEBC_SUPPORT_H__\r
 #define __EFI_PXEBC_SUPPORT_H__\r
 \r
-/**\r
-  This function gets system guid and serial number from the smbios table.\r
-\r
-  @param  SystemGuid          The pointer of returned system guid.\r
-  @param  SystemSerialNumber  The pointer of returned system serial number.\r
-\r
-  @retval EFI_SUCCESS         Successfully get the system guid and system serial\r
-                              number.\r
-  @retval EFI_NOT_FOUND       Not find the SMBIOS table.\r
-\r
-**/\r
-EFI_STATUS\r
-GetSmbiosSystemGuidAndSerialNumber (\r
-  IN  EFI_GUID  *SystemGuid,\r
-  OUT CHAR8     **SystemSerialNumber\r
-  );\r
-\r
 \r
 /**\r
   The common notify function associated with various PxeBc events. \r