Patch is good to me. Reviewed-by: Fu Siyuan <siyuan...@intel.com> > -----Original Message----- > From: Ni, Ruiyu > Sent: Friday, March 4, 2016 6:15 PM > To: edk2-devel@lists.01.org > Cc: Ni, Ruiyu <ruiyu...@intel.com>; Fu, Siyuan <siyuan...@intel.com> > Subject: [Patch 2/2] MdeModulePkg/Bds: More user-friendly network boot > option description > > The patch enhances the UefiBootManagerLib to use more user-friendly > network boot option description. > It builds description like below: > "PXEv6 (MAC:112233445566 VLAN1)" > "HTTPv4 (MAC:112233445566)" > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Ruiyu Ni <ruiyu...@intel.com> > Cc: Siyuan Fu <siyuan...@intel.com> > --- > .../Library/UefiBootManagerLib/BmBootDescription.c | 170 > ++++++++++++++++----- > .../Library/UefiBootManagerLib/InternalBm.h | 2 - > 2 files changed, 133 insertions(+), 39 deletions(-) > > diff --git > a/MdeModulePkg/Library/UefiBootManagerLib/BmBootDescription.c > b/MdeModulePkg/Library/UefiBootManagerLib/BmBootDescription.c > index 5c77e86..69a2914 100644 > --- a/MdeModulePkg/Library/UefiBootManagerLib/BmBootDescription.c > +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmBootDescription.c > @@ -28,24 +28,19 @@ LIST_ENTRY mPlatformBootDescriptionHandlers = > INITIALIZE_LIST_HEAD_VARIABLE (mPl > /** > For a bootable Device path, return its boot type. > > - @param DevicePath The bootable device Path to check > - > - @retval AcpiFloppyBoot If given device path contains > ACPI_DEVICE_PATH type device path node > - which HID is floppy device. > - @retval MessageAtapiBoot If given device path contains > MESSAGING_DEVICE_PATH type device path node > - and its last device path node's > subtype is MSG_ATAPI_DP. > - @retval MessageSataBoot If given device path contains > MESSAGING_DEVICE_PATH type device path node > - and its last device path node's > subtype is MSG_SATA_DP. > - @retval MessageScsiBoot If given device path contains > MESSAGING_DEVICE_PATH type device path node > - and its last device path node's > subtype is MSG_SCSI_DP. > - @retval MessageUsbBoot If given device path contains > MESSAGING_DEVICE_PATH type device path node > - and its last device path node's > subtype is MSG_USB_DP. > - @retval MessageNetworkBoot If given device path contains > MESSAGING_DEVICE_PATH type device path node > - and its last device path node's > subtype is > MSG_MAC_ADDR_DP, MSG_VLAN_DP, > - MSG_IPv4_DP or MSG_IPv6_DP. > - @retval MessageHttpBoot If given device path contains > MESSAGING_DEVICE_PATH type device path node > - and its last device path node's > subtype is MSG_URI_DP. > - @retval UnsupportedBoot If tiven device path doesn't match the > above condition, it's not supported. > + @param DevicePath The bootable device Path to check > + > + @retval AcpiFloppyBoot If given device path contains ACPI_DEVICE_PATH > type device path node > + which HID is floppy device. > + @retval MessageAtapiBoot If given device path contains > MESSAGING_DEVICE_PATH type device path node > + and its last device path node's subtype is > MSG_ATAPI_DP. > + @retval MessageSataBoot If given device path contains > MESSAGING_DEVICE_PATH type device path node > + and its last device path node's subtype is > MSG_SATA_DP. > + @retval MessageScsiBoot If given device path contains > MESSAGING_DEVICE_PATH type device path node > + and its last device path node's subtype is > MSG_SCSI_DP. > + @retval MessageUsbBoot If given device path contains > MESSAGING_DEVICE_PATH type device path node > + and its last device path node's subtype is > MSG_USB_DP. > + @retval BmMiscBoot If tiven device path doesn't match the above > condition. > > **/ > BM_BOOT_TYPE > @@ -108,17 +103,6 @@ BmDevicePathType ( > case MSG_SCSI_DP: > return BmMessageScsiBoot; > break; > - > - case MSG_MAC_ADDR_DP: > - case MSG_VLAN_DP: > - case MSG_IPv4_DP: > - case MSG_IPv6_DP: > - return BmMessageNetworkBoot; > - break; > - > - case MSG_URI_DP: > - return BmMessageHttpBoot; > - break; > } > } > } > @@ -352,6 +336,125 @@ BmGetUsbDescription ( > } > > /** > + Return the description for network boot device. > + > + @param Handle Controller handle. > + > + @return The description string. > +**/ > +CHAR16 * > +BmGetNetworkDescription ( > + IN EFI_HANDLE Handle > + ) > +{ > + EFI_STATUS Status; > + EFI_DEVICE_PATH_PROTOCOL *DevicePath; > + MAC_ADDR_DEVICE_PATH *Mac; > + VLAN_DEVICE_PATH *Vlan; > + EFI_DEVICE_PATH_PROTOCOL *Ip; > + EFI_DEVICE_PATH_PROTOCOL *Uri; > + CHAR16 *Description; > + UINTN DescriptionSize; > + > + Status = gBS->OpenProtocol ( > + Handle, > + &gEfiLoadFileProtocolGuid, > + NULL, > + gImageHandle, > + Handle, > + EFI_OPEN_PROTOCOL_TEST_PROTOCOL > + ); > + if (EFI_ERROR (Status)) { > + return NULL; > + } > + > + Status = gBS->OpenProtocol ( > + Handle, > + &gEfiDevicePathProtocolGuid, > + (VOID **) &DevicePath, > + gImageHandle, > + Handle, > + EFI_OPEN_PROTOCOL_GET_PROTOCOL > + ); > + if (EFI_ERROR (Status) || (DevicePath == NULL)) { > + return NULL; > + } > + > + // > + // The PXE device path is like: > + // ....../Mac(...)[/Vlan(...)] > + // ....../Mac(...)[/Vlan(...)]/IPv4(...) > + // ....../Mac(...)[/Vlan(...)]/IPv6(...) > + // > + // The HTTP device path is like: > + // ....../Mac(...)[/Vlan(...)]/IPv4(...)/Uri(...) > + // ....../Mac(...)[/Vlan(...)]/IPv6(...)/Uri(...) > + // > + while (!IsDevicePathEnd (DevicePath) && > + ((DevicePathType (DevicePath) != MESSAGING_DEVICE_PATH) || > + (DevicePathSubType (DevicePath) != MSG_MAC_ADDR_DP)) > + ) { > + DevicePath = NextDevicePathNode (DevicePath); > + } > + > + if (IsDevicePathEnd (DevicePath)) { > + return NULL; > + } > + > + Mac = (MAC_ADDR_DEVICE_PATH *) DevicePath; > + DevicePath = NextDevicePathNode (DevicePath); > + > + if ((DevicePathType (DevicePath) == MESSAGING_DEVICE_PATH) && > + (DevicePathSubType (DevicePath) == MSG_VLAN_DP) > + ) { > + Vlan = (VLAN_DEVICE_PATH *) DevicePath; > + DevicePath = NextDevicePathNode (DevicePath); > + } else { > + Vlan = NULL; > + } > + > + if ((DevicePathType (DevicePath) == MESSAGING_DEVICE_PATH) && > + ((DevicePathSubType (DevicePath) == MSG_IPv4_DP) || > + (DevicePathSubType (DevicePath) == MSG_IPv6_DP)) > + ) { > + Ip = DevicePath; > + DevicePath = NextDevicePathNode (DevicePath); > + } else { > + Ip = NULL; > + } > + > + if ((DevicePathType (DevicePath) == MESSAGING_DEVICE_PATH) && > + (DevicePathSubType (DevicePath) == MSG_URI_DP) > + ) { > + Uri = DevicePath; > + DevicePath = NextDevicePathNode (DevicePath); > + } else { > + Uri = NULL; > + } > + > + // > + // Build description like below: > + // "PXEv6 (MAC:112233445566 VLAN1)" > + // "HTTPv4 (MAC:112233445566)" > + // > + DescriptionSize = sizeof (L"HTTPv6 (MAC:112233445566 VLAN65535)"); > + Description = AllocatePool (DescriptionSize); > + ASSERT (Description != NULL); > + UnicodeSPrint ( > + Description, DescriptionSize, > + (Vlan == NULL) ? > + L"%sv%d (MAC:%02x%02x%02x%02x%02x%02x)" : > + L"%sv%d (MAC:%02x%02x%02x%02x%02x%02x VLAN%d)", > + (Uri == NULL) ? L"PXE" : L"HTTP", > + ((Ip == NULL) || (DevicePathSubType (Ip) == MSG_IPv4_DP)) ? 4 : 6, > + Mac->MacAddress.Addr[0], Mac->MacAddress.Addr[1], Mac- > >MacAddress.Addr[2], > + Mac->MacAddress.Addr[3], Mac->MacAddress.Addr[4], Mac- > >MacAddress.Addr[5], > + (Vlan == NULL) ? 0 : Vlan->VlanId > + ); > + return Description; > +} > + > +/** > Return the boot description for the controller based on the type. > > @param Handle Controller handle. > @@ -400,14 +503,6 @@ BmGetMiscDescription ( > } > break; > > - case BmMessageNetworkBoot: > - Description = L"Network"; > - break; > - > - case BmMessageHttpBoot: > - Description = L"Http"; > - break; > - > default: > Status = gBS->HandleProtocol (Handle, &gEfiSimpleFileSystemProtocolGuid, > (VOID **) &Fs); > if (!EFI_ERROR (Status)) { > @@ -463,6 +558,7 @@ EfiBootManagerRegisterBootDescriptionHandler ( > BM_GET_BOOT_DESCRIPTION mBmBootDescriptionHandlers[] = { > BmGetUsbDescription, > BmGetDescriptionFromDiskInfo, > + BmGetNetworkDescription, > BmGetMiscDescription > }; > > diff --git a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h > b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h > index c1514c3..b261d76 100644 > --- a/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h > +++ b/MdeModulePkg/Library/UefiBootManagerLib/InternalBm.h > @@ -92,8 +92,6 @@ typedef enum { > BmMessageSataBoot, > BmMessageUsbBoot, > BmMessageScsiBoot, > - BmMessageNetworkBoot, > - BmMessageHttpBoot, > BmMiscBoot > } BM_BOOT_TYPE; > > -- > 2.7.0.windows.1
_______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel