]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcDhcp.h
[Change summary]:
[mirror_edk2.git] / MdeModulePkg / Universal / Network / UefiPxeBcDxe / PxeBcDhcp.h
index b3438d0e14138bca331ea14e938ad99656c1b260..829caa8bbf5f9e51428413d124b76c7740be2d4d 100644 (file)
@@ -1,6 +1,7 @@
 /** @file\r
+  Dhcp and Discover routines for PxeBc.\r
 \r
-Copyright (c) 2007, Intel Corporation\r
+Copyright (c) 2007 - 2009, Intel Corporation.<BR>\r
 All rights reserved. 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
@@ -9,129 +10,114 @@ http://opensource.org/licenses/bsd-license.php
 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
-Module Name:\r
-\r
-  PxeBcDhcp.h\r
-\r
-Abstract:\r
-\r
-  Dhcp and Discover routines for PxeBc\r
-\r
-\r
 **/\r
 \r
 #ifndef __EFI_PXEBC_DHCP_H__\r
 #define __EFI_PXEBC_DHCP_H__\r
 \r
-enum {\r
-  PXEBC_DHCP4_MAX_OPTION_NUM        = 16,\r
-  PXEBC_DHCP4_MAX_OPTION_SIZE       = 312,\r
-  PXEBC_DHCP4_MAX_PACKET_SIZE       = 1472,\r
-\r
-  PXEBC_DHCP4_S_PORT                = 67,\r
-  PXEBC_DHCP4_C_PORT                = 68,\r
-  PXEBC_BS_DOWNLOAD_PORT            = 69,\r
-  PXEBC_BS_DISCOVER_PORT            = 4011,\r
-\r
-  PXEBC_DHCP4_OPCODE_REQUEST        = 1,\r
-  PXEBC_DHCP4_OPCODE_REPLY          = 2,\r
-  PXEBC_DHCP4_MSG_TYPE_REQUEST      = 3,\r
-  PXEBC_DHCP4_MAGIC                 = 0x63538263, // network byte order\r
-  //\r
-  // Dhcp Options\r
-  //\r
-  PXEBC_DHCP4_TAG_PAD               = 0,    // Pad Option\r
-  PXEBC_DHCP4_TAG_EOP               = 255,  // End Option\r
-  PXEBC_DHCP4_TAG_NETMASK           = 1,    // Subnet Mask\r
-  PXEBC_DHCP4_TAG_TIME_OFFSET       = 2,    // Time Offset from UTC\r
-  PXEBC_DHCP4_TAG_ROUTER            = 3,    // Router option,\r
-  PXEBC_DHCP4_TAG_TIME_SERVER       = 4,    // Time Server\r
-  PXEBC_DHCP4_TAG_NAME_SERVER       = 5,    // Name Server\r
-  PXEBC_DHCP4_TAG_DNS_SERVER        = 6,    // Domain Name Server\r
-  PXEBC_DHCP4_TAG_HOSTNAME          = 12,   // Host Name\r
-  PXEBC_DHCP4_TAG_BOOTFILE_LEN      = 13,   // Boot File Size\r
-  PXEBC_DHCP4_TAG_DUMP              = 14,   // Merit Dump File\r
-  PXEBC_DHCP4_TAG_DOMAINNAME        = 15,   // Domain Name\r
-  PXEBC_DHCP4_TAG_ROOTPATH          = 17,   // Root path\r
-  PXEBC_DHCP4_TAG_EXTEND_PATH       = 18,   // Extensions Path\r
-  PXEBC_DHCP4_TAG_EMTU              = 22,   // Maximum Datagram Reassembly Size\r
-  PXEBC_DHCP4_TAG_TTL               = 23,   // Default IP Time-to-live\r
-  PXEBC_DHCP4_TAG_BROADCAST         = 28,   // Broadcast Address\r
-  PXEBC_DHCP4_TAG_NIS_DOMAIN        = 40,   // Network Information Service Domain\r
-  PXEBC_DHCP4_TAG_NIS_SERVER        = 41,   // Network Information Servers\r
-  PXEBC_DHCP4_TAG_NTP_SERVER        = 42,   // Network Time Protocol Servers\r
-  PXEBC_DHCP4_TAG_VENDOR            = 43,   // Vendor Specific Information\r
-  PXEBC_DHCP4_TAG_REQUEST_IP        = 50,   // Requested IP Address\r
-  PXEBC_DHCP4_TAG_LEASE             = 51,   // IP Address Lease Time\r
-  PXEBC_DHCP4_TAG_OVERLOAD          = 52,   // Option Overload\r
-  PXEBC_DHCP4_TAG_MSG_TYPE          = 53,   // DHCP Message Type\r
-  PXEBC_DHCP4_TAG_SERVER_ID         = 54,   // Server Identifier\r
-  PXEBC_DHCP4_TAG_PARA_LIST         = 55,   // Parameter Request List\r
-  PXEBC_DHCP4_TAG_MAXMSG            = 57,   // Maximum DHCP Message Size\r
-  PXEBC_DHCP4_TAG_T1                = 58,   // Renewal (T1) Time Value\r
-  PXEBC_DHCP4_TAG_T2                = 59,   // Rebinding (T2) Time Value\r
-  PXEBC_DHCP4_TAG_CLASS_ID          = 60,   // Vendor class identifier\r
-  PXEBC_DHCP4_TAG_CLIENT_ID         = 61,   // Client-identifier\r
-  PXEBC_DHCP4_TAG_TFTP              = 66,   // TFTP server name\r
-  PXEBC_DHCP4_TAG_BOOTFILE          = 67,   // Bootfile name\r
-  PXEBC_PXE_DHCP4_TAG_ARCH          = 93,\r
-  PXEBC_PXE_DHCP4_TAG_UNDI          = 94,\r
-  PXEBC_PXE_DHCP4_TAG_UUID          = 97,\r
-  //\r
-  // Sub-Options in Dhcp Vendor Option\r
-  //\r
-  PXEBC_VENDOR_TAG_MTFTP_IP         = 1,\r
-  PXEBC_VENDOR_TAG_MTFTP_CPORT      = 2,\r
-  PXEBC_VENDOR_TAG_MTFTP_SPORT      = 3,\r
-  PXEBC_VENDOR_TAG_MTFTP_TIMEOUT    = 4,\r
-  PXEBC_VENDOR_TAG_MTFTP_DELAY      = 5,\r
-  PXEBC_VENDOR_TAG_DISCOVER_CTRL    = 6,\r
-  PXEBC_VENDOR_TAG_DISCOVER_MCAST   = 7,\r
-  PXEBC_VENDOR_TAG_BOOT_SERVERS     = 8,\r
-  PXEBC_VENDOR_TAG_BOOT_MENU        = 9,\r
-  PXEBC_VENDOR_TAG_MENU_PROMPT      = 10,\r
-  PXEBC_VENDOR_TAG_MCAST_ALLOC      = 11,\r
-  PXEBC_VENDOR_TAG_CREDENTIAL_TYPES = 12,\r
-  PXEBC_VENDOR_TAG_BOOT_ITEM        = 71,\r
-\r
-  PXEBC_DHCP4_DISCOVER_INIT_TIMEOUT = 4,\r
-  PXEBC_DHCP4_DISCOVER_RETRIES      = 4,\r
-\r
-  PXEBC_MAX_MENU_NUM                = 24,\r
-  PXEBC_MAX_OFFER_NUM               = 16,\r
-\r
-  PXEBC_BOOT_REQUEST_TIMEOUT        = 1,\r
-  PXEBC_BOOT_REQUEST_RETRIES        = 4,\r
-\r
-  PXEBC_DHCP4_OVERLOAD_FILE         = 1,\r
-  PXEBC_DHCP4_OVERLOAD_SERVER_NAME  = 2\r
-};\r
+#define PXEBC_DHCP4_MAX_OPTION_NUM         16\r
+#define PXEBC_DHCP4_MAX_OPTION_SIZE        312\r
+#define PXEBC_DHCP4_MAX_PACKET_SIZE        1472\r
+\r
+#define PXEBC_DHCP4_S_PORT                 67\r
+#define PXEBC_DHCP4_C_PORT                 68\r
+#define PXEBC_BS_DOWNLOAD_PORT             69\r
+#define PXEBC_BS_DISCOVER_PORT             4011\r
+\r
+#define PXEBC_DHCP4_OPCODE_REQUEST         1\r
+#define PXEBC_DHCP4_OPCODE_REPLY           2\r
+#define PXEBC_DHCP4_MSG_TYPE_REQUEST       3\r
+#define PXEBC_DHCP4_MAGIC                  0x63538263 // network byte order\r
+//\r
+// Dhcp Options\r
+//\r
+#define PXEBC_DHCP4_TAG_PAD                0    // Pad Option\r
+#define PXEBC_DHCP4_TAG_EOP                255  // End Option\r
+#define PXEBC_DHCP4_TAG_NETMASK            1    // Subnet Mask\r
+#define PXEBC_DHCP4_TAG_TIME_OFFSET        2    // Time Offset from UTC\r
+#define PXEBC_DHCP4_TAG_ROUTER             3    // Router option,\r
+#define PXEBC_DHCP4_TAG_TIME_SERVER        4    // Time Server\r
+#define PXEBC_DHCP4_TAG_NAME_SERVER        5    // Name Server\r
+#define PXEBC_DHCP4_TAG_DNS_SERVER         6    // Domain Name Server\r
+#define PXEBC_DHCP4_TAG_HOSTNAME           12   // Host Name\r
+#define PXEBC_DHCP4_TAG_BOOTFILE_LEN       13   // Boot File Size\r
+#define PXEBC_DHCP4_TAG_DUMP               14   // Merit Dump File\r
+#define PXEBC_DHCP4_TAG_DOMAINNAME         15   // Domain Name\r
+#define PXEBC_DHCP4_TAG_ROOTPATH           17   // Root path\r
+#define PXEBC_DHCP4_TAG_EXTEND_PATH        18   // Extensions Path\r
+#define PXEBC_DHCP4_TAG_EMTU               22   // Maximum Datagram Reassembly Size\r
+#define PXEBC_DHCP4_TAG_TTL                23   // Default IP Time-to-live\r
+#define PXEBC_DHCP4_TAG_BROADCAST          28   // Broadcast Address\r
+#define PXEBC_DHCP4_TAG_NIS_DOMAIN         40   // Network Information Service Domain\r
+#define PXEBC_DHCP4_TAG_NIS_SERVER         41   // Network Information Servers\r
+#define PXEBC_DHCP4_TAG_NTP_SERVER         42   // Network Time Protocol Servers\r
+#define PXEBC_DHCP4_TAG_VENDOR             43   // Vendor Specific Information\r
+#define PXEBC_DHCP4_TAG_REQUEST_IP         50   // Requested IP Address\r
+#define PXEBC_DHCP4_TAG_LEASE              51   // IP Address Lease Time\r
+#define PXEBC_DHCP4_TAG_OVERLOAD           52   // Option Overload\r
+#define PXEBC_DHCP4_TAG_MSG_TYPE           53   // DHCP Message Type\r
+#define PXEBC_DHCP4_TAG_SERVER_ID          54   // Server Identifier\r
+#define PXEBC_DHCP4_TAG_PARA_LIST          55   // Parameter Request List\r
+#define PXEBC_DHCP4_TAG_MAXMSG             57   // Maximum DHCP Message Size\r
+#define PXEBC_DHCP4_TAG_T1                 58   // Renewal (T1) Time Value\r
+#define PXEBC_DHCP4_TAG_T2                 59   // Rebinding (T2) Time Value\r
+#define PXEBC_DHCP4_TAG_CLASS_ID           60   // Vendor class identifier\r
+#define PXEBC_DHCP4_TAG_CLIENT_ID          61   // Client-identifier\r
+#define PXEBC_DHCP4_TAG_TFTP               66   // TFTP server name\r
+#define PXEBC_DHCP4_TAG_BOOTFILE           67   // Bootfile name\r
+#define PXEBC_PXE_DHCP4_TAG_ARCH           93\r
+#define PXEBC_PXE_DHCP4_TAG_UNDI           94\r
+#define PXEBC_PXE_DHCP4_TAG_UUID           97\r
+//\r
+// Sub-Options in Dhcp Vendor Option\r
+//\r
+#define PXEBC_VENDOR_TAG_MTFTP_IP          1\r
+#define PXEBC_VENDOR_TAG_MTFTP_CPORT       2\r
+#define PXEBC_VENDOR_TAG_MTFTP_SPORT       3\r
+#define PXEBC_VENDOR_TAG_MTFTP_TIMEOUT     4\r
+#define PXEBC_VENDOR_TAG_MTFTP_DELAY       5\r
+#define PXEBC_VENDOR_TAG_DISCOVER_CTRL     6\r
+#define PXEBC_VENDOR_TAG_DISCOVER_MCAST    7\r
+#define PXEBC_VENDOR_TAG_BOOT_SERVERS      8\r
+#define PXEBC_VENDOR_TAG_BOOT_MENU         9\r
+#define PXEBC_VENDOR_TAG_MENU_PROMPT       10\r
+#define PXEBC_VENDOR_TAG_MCAST_ALLOC       11\r
+#define PXEBC_VENDOR_TAG_CREDENTIAL_TYPES  12\r
+#define PXEBC_VENDOR_TAG_BOOT_ITEM         71\r
+\r
+#define PXEBC_DHCP4_DISCOVER_INIT_TIMEOUT  4\r
+#define PXEBC_DHCP4_DISCOVER_RETRIES       4\r
+\r
+#define PXEBC_MAX_MENU_NUM                 24\r
+#define PXEBC_MAX_OFFER_NUM                16\r
+\r
+#define PXEBC_BOOT_REQUEST_TIMEOUT         1\r
+#define PXEBC_BOOT_REQUEST_RETRIES         4\r
+\r
+#define PXEBC_DHCP4_OVERLOAD_FILE          1\r
+#define PXEBC_DHCP4_OVERLOAD_SERVER_NAME   2\r
 \r
 //\r
 // The array index of the DHCP4 option tag interested\r
 //\r
-enum {\r
-  PXEBC_DHCP4_TAG_INDEX_BOOTFILE_LEN,\r
-  PXEBC_DHCP4_TAG_INDEX_VENDOR,\r
-  PXEBC_DHCP4_TAG_INDEX_OVERLOAD,\r
-  PXEBC_DHCP4_TAG_INDEX_MSG_TYPE,\r
-  PXEBC_DHCP4_TAG_INDEX_SERVER_ID,\r
-  PXEBC_DHCP4_TAG_INDEX_CLASS_ID,\r
-  PXEBC_DHCP4_TAG_INDEX_BOOTFILE,\r
-  PXEBC_DHCP4_TAG_INDEX_MAX\r
-};\r
+#define PXEBC_DHCP4_TAG_INDEX_BOOTFILE_LEN 0\r
+#define PXEBC_DHCP4_TAG_INDEX_VENDOR       1\r
+#define PXEBC_DHCP4_TAG_INDEX_OVERLOAD     2\r
+#define PXEBC_DHCP4_TAG_INDEX_MSG_TYPE     3\r
+#define PXEBC_DHCP4_TAG_INDEX_SERVER_ID    4\r
+#define PXEBC_DHCP4_TAG_INDEX_CLASS_ID     5\r
+#define PXEBC_DHCP4_TAG_INDEX_BOOTFILE     6\r
+#define PXEBC_DHCP4_TAG_INDEX_MAX          7\r
 \r
 //\r
 // The type of DHCP OFFER, arranged by priority, PXE10 has the highest priority.\r
 //\r
-enum {\r
-  DHCP4_PACKET_TYPE_PXE10,\r
-  DHCP4_PACKET_TYPE_WFM11A,\r
-  DHCP4_PACKET_TYPE_BINL,\r
-  DHCP4_PACKET_TYPE_DHCP_ONLY,\r
-  DHCP4_PACKET_TYPE_MAX,\r
-  DHCP4_PACKET_TYPE_BOOTP           = DHCP4_PACKET_TYPE_MAX\r
-};\r
+#define DHCP4_PACKET_TYPE_PXE10            0\r
+#define DHCP4_PACKET_TYPE_WFM11A           1\r
+#define DHCP4_PACKET_TYPE_BINL             2\r
+#define DHCP4_PACKET_TYPE_DHCP_ONLY        3\r
+#define DHCP4_PACKET_TYPE_MAX              4\r
+#define DHCP4_PACKET_TYPE_BOOTP            DHCP4_PACKET_TYPE_MAX\r
 \r
 #define BIT(x)  (1 << x)\r
 #define CTRL(x) (0x1F & (x))\r
@@ -201,7 +187,10 @@ typedef struct {
   UINT16  Type;\r
 } PXEBC_DHCP4_OPTION_ARCH;\r
 \r
-#define DEFAULT_CLASS_ID_DATA "PXEClient:Arch:?????:????:??????"\r
+#define DEFAULT_CLASS_ID_DATA "PXEClient:Arch:xxxxx:UNDI:003000"\r
+#define DEFAULT_UNDI_TYPE     1\r
+#define DEFAULT_UNDI_MAJOR    3\r
+#define DEFAULT_UNDI_MINOR    0\r
 \r
 typedef struct {\r
   UINT8 ClassIdentifier[10];\r
@@ -279,13 +268,14 @@ typedef struct {
 \r
 #define PXEBC_CACHED_DHCP4_PACKET_MAX_SIZE  (OFFSET_OF (EFI_DHCP4_PACKET, Dhcp4) + PXEBC_DHCP4_MAX_PACKET_SIZE)\r
 \r
-typedef struct {\r
-  union {\r
-    EFI_DHCP4_PACKET  Offer;\r
-    EFI_DHCP4_PACKET  Ack;\r
-    UINT8             Buffer[PXEBC_CACHED_DHCP4_PACKET_MAX_SIZE];\r
-  } Packet;\r
+typedef union {\r
+  EFI_DHCP4_PACKET  Offer;\r
+  EFI_DHCP4_PACKET  Ack;\r
+  UINT8             Buffer[PXEBC_CACHED_DHCP4_PACKET_MAX_SIZE];\r
+} PXEBC_DHCP4_PACKET;\r
 \r
+typedef struct {\r
+  PXEBC_DHCP4_PACKET      Packet;\r
   BOOLEAN                 IsPxeOffer;\r
   UINT8                   OfferType;\r
   EFI_DHCP4_PACKET_OPTION *Dhcp4Option[PXEBC_DHCP4_TAG_INDEX_MAX];\r
@@ -301,74 +291,85 @@ typedef struct {
 #define GET_NEXT_BOOT_SVR_ENTRY(Ent) \\r
   (PXEBC_BOOT_SVR_ENTRY *) ((UINT8 *) Ent + sizeof (*(Ent)) + ((Ent)->IpCnt - 1) * sizeof (EFI_IPv4_ADDRESS))\r
 \r
+\r
+/**\r
+  This function initialize the DHCP4 message instance.\r
+\r
+  This function will pad each item of dhcp4 message packet.\r
+  \r
+  @param  Seed    Pointer to the message instance of the DHCP4 packet.\r
+  @param  Udp4    Pointer to the EFI_UDP4_PROTOCOL instance.\r
+\r
+**/\r
 VOID\r
 PxeBcInitSeedPacket (\r
   IN EFI_DHCP4_PACKET  *Seed,\r
   IN EFI_UDP4_PROTOCOL *Udp4\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  GC_NOTO: Add function description\r
-\r
-Arguments:\r
-\r
-  Seed  - GC_NOTO: add argument description\r
-  Udp4  - GC_NOTO: add argument description\r
-\r
-Returns:\r
-\r
-  GC_NOTO: add return values\r
-\r
---*/\r
-;\r
+  );\r
 \r
 \r
 /**\r
-  GC_NOTO: Add function description\r
+  Parse the cached dhcp packet.\r
 \r
-  @param  CachedPacket    GC_NOTO: add argument description\r
+  @param  CachedPacket  Pointer to cached dhcp packet.\r
 \r
-  @return GC_NOTO: add return values\r
+  @retval TRUE          Succeed to parse and validation.\r
+  @retval FALSE         Fail to parse or validation.\r
 \r
 **/\r
 BOOLEAN\r
 PxeBcParseCachedDhcpPacket (\r
   IN PXEBC_CACHED_DHCP4_PACKET  *CachedPacket\r
-  )\r
-;\r
-\r
+  );\r
 \r
 /**\r
-  GC_NOTO: Add function description\r
+  This function is to check the selected proxy offer (include BINL dhcp offer and\r
+  DHCP_ONLY offer ) and set the flag and copy the DHCP packets to the Pxe base code\r
+  mode structure.\r
 \r
-  @param  Private         GC_NOTO: add argument description\r
+  @param  Private          Pointer to PxeBc private data.\r
 \r
-  @return GC_NOTO: add return values\r
+  @retval EFI_SUCCESS      Operational successful.\r
+  @retval EFI_NO_RESPONSE  Offer dhcp service failed.\r
 \r
 **/\r
 EFI_STATUS\r
 PxeBcCheckSelectedOffer (\r
   IN PXEBC_PRIVATE_DATA  *Private\r
-  )\r
-;\r
+  );\r
 \r
 \r
 /**\r
-  GC_NOTO: Add function description\r
-\r
-  @param  This            GC_NOTO: add argument description\r
-  @param  Context         GC_NOTO: add argument description\r
-  @param  CurrentState    GC_NOTO: add argument description\r
-  @param  Dhcp4Event      GC_NOTO: add argument description\r
-  @param  Packet          GC_NOTO: add argument description\r
-  @param  NewPacket       GC_NOTO: add argument description\r
-\r
-  @return GC_NOTO: add return values\r
+  Callback routine.\r
+  \r
+  EFI_DHCP4_CALLBACK is provided by the consumer of the EFI DHCPv4 Protocol driver\r
+  to intercept events that occurred in the configuration process. This structure\r
+  provides advanced control of each state transition of the DHCP process. The\r
+  returned status code determines the behavior of the EFI DHCPv4 Protocol driver.\r
+  There are three possible returned values, which are described in the following\r
+  table.\r
+\r
+  @param  This                  Pointer to the EFI DHCPv4 Protocol instance that is used to\r
+                                configure this callback function.\r
+  @param  Context               Pointer to the context that is initialized by\r
+                                EFI_DHCP4_PROTOCOL.Configure().\r
+  @param  CurrentState          The current operational state of the EFI DHCPv4 Protocol\r
+                                driver.\r
+  @param  Dhcp4Event            The event that occurs in the current state, which usually means a\r
+                                state transition.\r
+  @param  Packet                The DHCP packet that is going to be sent or already received.\r
+  @param  NewPacket             The packet that is used to replace the above Packet.\r
+\r
+  @retval EFI_SUCCESS           Tells the EFI DHCPv4 Protocol driver to continue the DHCP process.\r
+  @retval EFI_NOT_READY         Only used in the Dhcp4Selecting state. The EFI DHCPv4 Protocol\r
+                                driver will continue to wait for more DHCPOFFER packets until the retry\r
+                                timeout expires.\r
+  @retval EFI_ABORTED           Tells the EFI DHCPv4 Protocol driver to abort the current process and\r
+                                return to the Dhcp4Init or Dhcp4InitReboot state.\r
 \r
 **/\r
 EFI_STATUS\r
+EFIAPI\r
 PxeBcDhcpCallBack (\r
   IN EFI_DHCP4_PROTOCOL                * This,\r
   IN VOID                              *Context,\r
@@ -376,25 +377,27 @@ PxeBcDhcpCallBack (
   IN EFI_DHCP4_EVENT                   Dhcp4Event,\r
   IN EFI_DHCP4_PACKET                  * Packet OPTIONAL,\r
   OUT EFI_DHCP4_PACKET                 **NewPacket OPTIONAL\r
-  )\r
-;\r
+  );\r
 \r
 \r
 /**\r
-  GC_NOTO: Add function description\r
-\r
-  @param  Private         GC_NOTO: add argument description\r
-  @param  Type            GC_NOTO: add argument description\r
-  @param  Layer           GC_NOTO: add argument description\r
-  @param  UseBis          GC_NOTO: add argument description\r
-  @param  DestIp          GC_NOTO: add argument description\r
-  @param  IpCount         GC_NOTO: add argument description\r
-  @param  SrvList         GC_NOTO: add argument description\r
-  @param  IsDiscv         GC_NOTO: add argument description\r
-  @param  Reply           GC_NOTO: add argument description\r
-\r
-  @return GC_NOTO: add return values\r
-\r
+  Discover the boot of service and initialize the vendor option if exists.\r
+\r
+  @param  Private               Pointer to PxeBc private data.\r
+  @param  Type                  PxeBc option boot item type\r
+  @param  Layer                 PxeBc option boot item layer\r
+  @param  UseBis                Use BIS or not\r
+  @param  DestIp                Ip address for server      \r
+  @param  IpCount               The total count of the server ip address    \r
+  @param  SrvList               Server list\r
+  @param  IsDiscv               Discover the vendor or not\r
+  @param  Reply                 The dhcp4 packet of Pxe reply\r
+\r
+  @retval EFI_SUCCESS           Operation succeeds.\r
+  @retval EFI_OUT_OF_RESOURCES  Allocate memory pool failed.\r
+  @retval EFI_NOT_FOUND         There is no vendor option exists.\r
+  @retval EFI_TIMEOUT           Send Pxe Discover time out. \r
+  \r
 **/\r
 EFI_STATUS\r
 PxeBcDiscvBootService (\r
@@ -407,18 +410,18 @@ PxeBcDiscvBootService (
   IN EFI_PXE_BASE_CODE_SRVLIST         * SrvList,\r
   IN BOOLEAN                           IsDiscv,\r
   OUT EFI_DHCP4_PACKET                 * Reply OPTIONAL\r
-  )\r
-;\r
+  );\r
 \r
 \r
 /**\r
-  GC_NOTO: Add function description\r
+  Initialize the DHCP options and build the option list.\r
 \r
-  @param  Private         GC_NOTO: add argument description\r
-  @param  OptList         GC_NOTO: add argument description\r
-  @param  IsDhcpDiscover  GC_NOTO: add argument description\r
+  @param  Private          Pointer to PxeBc private data.\r
+  @param  OptList          Pointer to a DHCP option list.\r
+                           \r
+  @param  IsDhcpDiscover   Discover dhcp option or not.     \r
 \r
-  @return GC_NOTO: add return values\r
+  @return The index item number of the option list.\r
 \r
 **/\r
 UINT32\r
@@ -426,19 +429,16 @@ PxeBcBuildDhcpOptions (
   IN PXEBC_PRIVATE_DATA            *Private,\r
   IN EFI_DHCP4_PACKET_OPTION       **OptList,\r
   IN BOOLEAN                       IsDhcpDiscover\r
-  )\r
-;\r
+  );\r
 \r
 \r
 /**\r
-  GC_NOTO: Add function description\r
-\r
-  @param  OptList         GC_NOTO: add argument description\r
-  @param  Type            GC_NOTO: add argument description\r
-  @param  Layer           GC_NOTO: add argument description\r
-  @param  OptLen          GC_NOTO: add argument description\r
+  Create the boot options.\r
 \r
-  @return GC_NOTO: add return values\r
+  @param  OptList    Pointer to the list of the options\r
+  @param  Type       the type of option\r
+  @param  Layer      the layer of the boot options \r
+  @param  OptLen     length of opotion\r
 \r
 **/\r
 VOID\r
@@ -447,18 +447,18 @@ PxeBcCreateBootOptions (
   IN  UINT16                           Type,\r
   IN  UINT16                           *Layer,\r
   OUT UINT32                           *OptLen\r
-  )\r
-;\r
+  );\r
 \r
 \r
 /**\r
-  GC_NOTO: Add function description\r
+  Parse interested dhcp options.\r
 \r
-  @param  Buffer          GC_NOTO: add argument description\r
-  @param  Length          GC_NOTO: add argument description\r
-  @param  OptTag          GC_NOTO: add argument description\r
+  @param  Buffer     Pointer to the dhcp options packet.\r
+  @param  Length     The length of the dhcp options.\r
+  @param  OptTag     The option OpCode.\r
 \r
-  @return GC_NOTO: add return values\r
+  @return NULL if the buffer length is 0 and OpCode is not \r
+          PXEBC_DHCP4_TAG_EOP, or the pointer to the buffer.\r
 \r
 **/\r
 EFI_DHCP4_PACKET_OPTION *\r
@@ -466,68 +466,53 @@ PxeBcParseExtendOptions (
   IN UINT8                         *Buffer,\r
   IN UINT32                        Length,\r
   IN UINT8                         OptTag\r
-  )\r
-;\r
+  );\r
 \r
 \r
 /**\r
-  GC_NOTO: Add function description\r
+  This function is to parse and check vendor options.\r
 \r
-  @param  Dhcp4Option     GC_NOTO: add argument description\r
-  @param  VendorOption    GC_NOTO: add argument description\r
+  @param  Dhcp4Option           Pointer to dhcp options\r
+  @param  VendorOption          Pointer to vendor options\r
 \r
-  @return GC_NOTO: add return values\r
+  @return TRUE if valid for vendor options, or FALSE.\r
 \r
 **/\r
 BOOLEAN\r
 PxeBcParseVendorOptions (\r
   IN EFI_DHCP4_PACKET_OPTION       *Dhcp4Option,\r
-  IN PXEBC_VENDOR_OPTION          *VendorOption\r
-  )\r
-;\r
+  IN PXEBC_VENDOR_OPTION           *VendorOption\r
+  );\r
 \r
 \r
 /**\r
-  GC_NOTO: Add function description\r
+  Choose the boot prompt.\r
 \r
-  @param  Private         GC_NOTO: add argument description\r
-  @param  Info            GC_NOTO: add argument description\r
-  @param  Type            GC_NOTO: add argument description\r
-\r
-  @return GC_NOTO: add return values\r
-\r
-**/\r
-EFI_STATUS\r
-PxeBcSelectBootServers (\r
-  IN  PXEBC_PRIVATE_DATA               *Private,\r
-  OUT EFI_PXE_BASE_CODE_DISCOVER_INFO  **Info,\r
-  OUT UINT16                           *Type\r
-  )\r
-;\r
-\r
-\r
-/**\r
-  GC_NOTO: Add function description\r
-\r
-  @param  Private         GC_NOTO: add argument description\r
-\r
-  @return GC_NOTO: add return values\r
+  @param  Private              Pointer to PxeBc private data.\r
 \r
+  @retval EFI_SUCCESS          Select boot prompt done.\r
+  @retval EFI_TIMEOUT          Select boot prompt time out. \r
+  @retval EFI_NOT_FOUND        The proxy offer is not Pxe10.\r
+  @retval EFI_ABORTED          User cancel the operation.\r
+  @retval EFI_NOT_READY        Read the input key from the keybroad has not finish.\r
+  \r
 **/\r
 EFI_STATUS\r
 PxeBcSelectBootPrompt (\r
   IN PXEBC_PRIVATE_DATA              *Private\r
-  )\r
-;\r
+  );\r
 \r
 \r
 /**\r
-  GC_NOTO: Add function description\r
-\r
-  @param  Private         GC_NOTO: add argument description\r
-  @param  Type            GC_NOTO: add argument description\r
+  Select the boot menu.\r
 \r
-  @return GC_NOTO: add return values\r
+  @param  Private         Pointer to PxeBc private data.\r
+  @param  Type            The type of the menu.\r
+  @param  UseDefaultItem  Use default item or not.\r
+  \r
+  @retval EFI_ABORTED     User cancel operation.\r
+  @retval EFI_SUCCESS     Select the boot menu success.\r
+  @retval EFI_NOT_READY   Read the input key from the keybroad has not finish.    \r
 \r
 **/\r
 EFI_STATUS\r
@@ -535,8 +520,7 @@ PxeBcSelectBootMenu (
   IN  PXEBC_PRIVATE_DATA              *Private,\r
   OUT UINT16                          *Type,\r
   IN  BOOLEAN                         UseDefaultItem\r
-  )\r
-;\r
+  );\r
 \r
 #endif\r
 \r