From 21f75b9e4475b92665e4dd8ca182108dab53045f Mon Sep 17 00:00:00 2001 From: Ilya Smirnov Date: Wed, 12 Dec 2018 11:33:38 -0600 Subject: SMF: NVRAM Reading and Mem Distribution end-to-end Changes This commit introduces the changes to read out the SMF secure memory amount value from NVRAM and to distribute the secure memory amount based on the value read. strtou64 was copied from runtime code to convert the value read from NVRAM (as a string) to uint64_t. Change-Id: I83e41f0aaff9b4035d20a517cf866f348acedd59 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/69728 Tested-by: Jenkins Server Tested-by: Jenkins OP Build CI Tested-by: FSP CI Jenkins Reviewed-by: Nicholas E. Bofferding Tested-by: Jenkins OP HW Reviewed-by: Daniel M. Crowell --- src/lib/stdlib.C | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) (limited to 'src/lib') diff --git a/src/lib/stdlib.C b/src/lib/stdlib.C index a7c694f9d..2688959bd 100644 --- a/src/lib/stdlib.C +++ b/src/lib/stdlib.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2010,2018 */ +/* Contributors Listed Below - COPYRIGHT 2010,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -161,3 +161,41 @@ void* calloc(size_t num, size_t size) return mem; } +uint64_t strtoul(const char *nptr, char **endptr, int base) +{ + uint64_t l_data = 0; + size_t i = 0; + while( nptr[i] != '\0' ) + { + uint64_t l_nib = 0; + switch(nptr[i]) + { + // handle leading '0x' or 'x' + case('x'): case('X'): + l_data = 0; + break; + case('0'): l_nib = 0; break; + case('1'): l_nib = 1; break; + case('2'): l_nib = 2; break; + case('3'): l_nib = 3; break; + case('4'): l_nib = 4; break; + case('5'): l_nib = 5; break; + case('6'): l_nib = 6; break; + case('7'): l_nib = 7; break; + case('8'): l_nib = 8; break; + case('9'): l_nib = 9; break; + case('A'): case('a'): l_nib = 0xA; break; + case('B'): case('b'): l_nib = 0xB; break; + case('C'): case('c'): l_nib = 0xC; break; + case('D'): case('d'): l_nib = 0xD; break; + case('E'): case('e'): l_nib = 0xE; break; + case('F'): case('f'): l_nib = 0xF; break; + default: + return 0ULL; + } + l_data <<= 4; + l_data |= l_nib; + i++; + } + return l_data; +} -- cgit v1.2.1