git: 4e83ac7d2e6c - main - libefivar: Handle Sata device path when optional para is not specified

From: Warner Losh <imp_at_FreeBSD.org>
Date: Sun, 27 Feb 2022 16:47:50 UTC
The branch main has been updated by imp:

URL: https://cgit.FreeBSD.org/src/commit/?id=4e83ac7d2e6c130ba2df813505b2181f896a1a93

commit 4e83ac7d2e6c130ba2df813505b2181f896a1a93
Author:     Jose Luis Duran <jlduran@gmail.com>
AuthorDate: 2022-02-25 17:48:26 +0000
Commit:     Warner Losh <imp@FreeBSD.org>
CommitDate: 2022-02-27 16:13:20 +0000

    libefivar: Handle Sata device path when optional para is not specified
    
    Sata device path format:Sata(HPN, PMPN, LUN)
    According to UEFI Spec, the PMPN is an integer between
    0 and 65535 and is optional. If not provided, the default is 0xFFFF.
    
    This commit is to do the enhancement for Sata device path
    when optional para is not specified.
    
    Upstream Bug:   https://bugzilla.tianocore.org/show_bug.cgi?id=1243
    Obtained from:  https://github.com/tianocore/edk2/commit/6d9b9bbb6148831de2ca545994f31e27b3d4c675
    Pull Request:   https://github.com/freebsd/freebsd-src/pull/581
---
 lib/libefivar/efivar-dp-parse.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/lib/libefivar/efivar-dp-parse.c b/lib/libefivar/efivar-dp-parse.c
index 8e6a7c8acad1..303fc9676425 100644
--- a/lib/libefivar/efivar-dp-parse.c
+++ b/lib/libefivar/efivar-dp-parse.c
@@ -3594,7 +3594,15 @@ DevPathFromTextSata (
                                 (UINT16) sizeof (SATA_DEVICE_PATH)
                                 );
   Sata->HBAPortNumber            = (UINT16) Strtoi (Param1);
-  Sata->PortMultiplierPortNumber = (UINT16) Strtoi (Param2);
+
+  //
+  // According to UEFI spec, if PMPN is not provided, the default is 0xFFFF
+  //
+  if (*Param2 == '\0' ) {
+    Sata->PortMultiplierPortNumber = 0xFFFF;
+  } else {
+    Sata->PortMultiplierPortNumber = (UINT16) Strtoi (Param2);
+  }
   Sata->Lun                      = (UINT16) Strtoi (Param3);
 
   return (EFI_DEVICE_PATH_PROTOCOL *) Sata;