1 /** @file
2 
3   Copyright (c) 2017, Linaro. All rights reserved.
4 
5   This program and the accompanying materials
6   are licensed and made available under the terms and conditions of the BSD License
7   which accompanies this distribution.  The full text of the license may be found at
8   http://opensource.org/licenses/bsd-license.php
9 
10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 
13 **/
14 
15 #ifndef __USB_SERIAL_NUMBER_LIB_H__
16 #define __USB_SERIAL_NUMBER_LIB_H__
17 
18 #include <Uefi.h>
19 
20 #define SERIAL_NUMBER_SIZE                      17
21 
22 typedef struct {
23   UINT64        Magic;
24   UINT64        Data;
25   CHAR16        UnicodeSN[SERIAL_NUMBER_SIZE];
26 } RANDOM_SERIAL_NUMBER;
27 
28 EFI_STATUS
29 GenerateUsbSNBySeed (
30   IN  UINT32                  Seed,
31   OUT RANDOM_SERIAL_NUMBER   *RandomSN
32   );
33 
34 EFI_STATUS
35 GenerateUsbSN (
36   OUT CHAR16                 *UnicodeSN
37   );
38 
39 EFI_STATUS
40 AssignUsbSN (
41   IN  CHAR8                  *AsciiCmd,
42   OUT CHAR16                 *UnicodeSN
43   );
44 
45 EFI_STATUS
46 LoadSNFromBlock (
47   IN  EFI_HANDLE              FlashHandle,
48   IN  EFI_LBA                 Lba,
49   OUT CHAR16                 *UnicodeSN
50   );
51 
52 EFI_STATUS
53 StoreSNToBlock (
54   IN EFI_HANDLE               FlashHandle,
55   IN EFI_LBA                  Lba,
56   IN CHAR16                  *UnicodeSN
57   );
58 
59 #endif /* __USB_SERIAL_NUMBER_LIB_H__ */
60