diff options
author | Haojian Zhuang <haojian.zhuang@linaro.org> | 2018-03-07 22:04:37 +0800 |
---|---|---|
committer | Haojian Zhuang <haojian.zhuang@linaro.org> | 2018-03-07 22:07:36 +0800 |
commit | 65685632d801eb4183a3a84b7f3f4054465399a0 (patch) | |
tree | 2bca07618f12aece4257914ed92fa5e42aa52bb7 | |
parent | 0618f31f22d659cc6f87bd34924461479306d415 (diff) | |
download | OpenPlatformPkg-65685632d801eb4183a3a84b7f3f4054465399a0.tar.gz |
Library/UsbSerialNumberLib: assign usb serialno
Add the function to set specified usb serialno.
Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org>
-rw-r--r-- | Include/Library/UsbSerialNumberLib.h | 6 | ||||
-rw-r--r-- | Library/UsbSerialNumberLib/UsbSerialNumberLib.c | 39 |
2 files changed, 45 insertions, 0 deletions
diff --git a/Include/Library/UsbSerialNumberLib.h b/Include/Library/UsbSerialNumberLib.h index 3ae594b..0ab4cc7 100644 --- a/Include/Library/UsbSerialNumberLib.h +++ b/Include/Library/UsbSerialNumberLib.h @@ -37,6 +37,12 @@ GenerateUsbSN ( ); EFI_STATUS +AssignUsbSN ( + IN CHAR8 *AsciiCmd, + OUT CHAR16 *UnicodeSN + ); + +EFI_STATUS LoadSNFromBlock ( IN EFI_HANDLE FlashHandle, IN EFI_LBA Lba, diff --git a/Library/UsbSerialNumberLib/UsbSerialNumberLib.c b/Library/UsbSerialNumberLib/UsbSerialNumberLib.c index 2727d5c..550a973 100644 --- a/Library/UsbSerialNumberLib/UsbSerialNumberLib.c +++ b/Library/UsbSerialNumberLib/UsbSerialNumberLib.c @@ -28,6 +28,7 @@ #include <Protocol/DevicePath.h> +#define SERIAL_NUMBER_LEN 16 #define SERIAL_NUMBER_SIZE 17 #define RANDOM_MAX 0x7FFFFFFFFFFFFFFF @@ -105,6 +106,41 @@ GenerateUsbSN ( } EFI_STATUS +AssignUsbSN ( + IN CHAR8 *AsciiCmd, + OUT CHAR16 *UnicodeSN + ) +{ + CHAR8 Data; + UINTN Index; + RANDOM_SERIAL_NUMBER RandomSN; + + if ((AsciiCmd == NULL) || (UnicodeSN == NULL)) { + return EFI_INVALID_PARAMETER; + } + for (Index = 0; Index < SERIAL_NUMBER_LEN; Index++) { + Data = *(AsciiCmd + Index); + if (((Data >= '0') && (Data <= '9')) || + ((Data >= 'A') && (Data <= 'F'))) { + continue; + } + // Always use with upper case + if ((Data >= 'a') && (Data <= 'f')) { + *(AsciiCmd + Index) = Data - 'a' + 'A'; + continue; + } + if (Data == '\0') { + break; + } + return EFI_INVALID_PARAMETER; + } + ZeroMem (&RandomSN, sizeof (RANDOM_SERIAL_NUMBER)); + AsciiStrToUnicodeStr (AsciiCmd, RandomSN.UnicodeSN); + StrCpyS (UnicodeSN, SERIAL_NUMBER_SIZE * sizeof (CHAR16), RandomSN.UnicodeSN); + return EFI_SUCCESS; +} + +EFI_STATUS LoadSNFromBlock ( IN EFI_HANDLE FlashHandle, IN EFI_LBA Lba, @@ -207,6 +243,7 @@ StoreSNToBlock ( CHAR16 UnicodeStr[SERIAL_NUMBER_SIZE]; if (UnicodeSN == NULL) { +DEBUG ((DEBUG_ERROR, "#%a, %d\n", __func__, __LINE__)); return EFI_INVALID_PARAMETER; } Status = gBS->OpenProtocol ( @@ -236,10 +273,12 @@ StoreSNToBlock ( ZeroMem (UnicodeStr, SERIAL_NUMBER_SIZE * sizeof (CHAR16)); UnicodeSPrint (UnicodeStr, SERIAL_NUMBER_SIZE * sizeof (CHAR16), L"%lx", RandomSN->Data); if (StrLen (RandomSN->UnicodeSN) != StrLen (UnicodeStr)) { +DEBUG ((DEBUG_ERROR, "#%a, %d, strlen:%d, %d\n", __func__, __LINE__, StrLen (RandomSN->UnicodeSN), StrLen (UnicodeStr))); Status = EFI_INVALID_PARAMETER; goto Exit; } if (StrnCmp (RandomSN->UnicodeSN, UnicodeStr, StrLen (UnicodeStr)) != 0) { +DEBUG ((DEBUG_ERROR, "#%a, %d, %s, %s\n", __func__, __LINE__, RandomSN->UnicodeSN, UnicodeStr)); Status = EFI_INVALID_PARAMETER; goto Exit; } |