[coreboot] r3235 - in trunk/payloads/libpayload: include libc

svn at coreboot.org svn at coreboot.org
Fri Apr 11 20:38:04 CEST 2008


Author: uwe
Date: 2008-04-11 20:38:04 +0200 (Fri, 11 Apr 2008)
New Revision: 3235

Modified:
   trunk/payloads/libpayload/include/libpayload.h
   trunk/payloads/libpayload/libc/lib.c
Log:
Convert BIN2HEX/HEX2BIN to functions and add the abs() family
of functions while we're at it.

hex2bin() now also supports upper-case input characters.

Signed-off-by: Uwe Hermann <uwe at hermann-uwe.de>
Acked-by: Jordan Crouse <jordan.crouse at amd.com>



Modified: trunk/payloads/libpayload/include/libpayload.h
===================================================================
--- trunk/payloads/libpayload/include/libpayload.h	2008-04-11 18:01:50 UTC (rev 3234)
+++ trunk/payloads/libpayload/include/libpayload.h	2008-04-11 18:38:04 UTC (rev 3235)
@@ -41,10 +41,6 @@
 #define MAX(a,b) ((a) > (b) ? (a) : (b))
 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
 
-#define BIN2HEX(b) ("0123456789abcdef"[b & 15])
-#define HEX2BIN(h) (('0' <= h && h <= '9') ? (h - '0') : \
-                    ('a' <= h && h <= 'f') ? (h - 'a' + 10) : 0)
-
 #define LITTLE_ENDIAN	1234
 #define BIG_ENDIAN	4321
 #ifdef CONFIG_TARGET_I386
@@ -119,6 +115,11 @@
 /* libc/lib.c */
 int bcd2dec(int b);
 int dec2bcd(int d);
+int abs(int j);
+long int labs(long int j);
+long long int llabs(long long int j);
+u8 bin2hex(u8 b);
+u8 hex2bin(u8 h);
 
 /* libc/memory.c */
 void *memset(void *s, int c, size_t n);

Modified: trunk/payloads/libpayload/libc/lib.c
===================================================================
--- trunk/payloads/libpayload/libc/lib.c	2008-04-11 18:01:50 UTC (rev 3234)
+++ trunk/payloads/libpayload/libc/lib.c	2008-04-11 18:38:04 UTC (rev 3235)
@@ -27,6 +27,8 @@
  * SUCH DAMAGE.
  */
 
+#include <libpayload.h>
+
 /*
  * Convert a number in BCD format to decimal.
  *
@@ -49,3 +51,53 @@
 	return ((d / 10) << 4) | (d % 10);
 }
 
+/**
+ * Return the absolute value of the specified integer.
+ *
+ * @param val The integer of which we want to know the absolute value.
+ * @return The absolute value of the specified integer.
+ */
+int abs(int j)
+{
+	return (j >= 0 ? j : -j);
+}
+
+long int labs(long int j)
+{
+	return (j >= 0 ? j : -j);
+}
+
+long long int llabs(long long int j)
+{
+	return (j >= 0 ? j : -j);
+}
+
+/**
+ * Given a 4-bit value, return the ASCII hex representation of it.
+ *
+ * @param b A 4-bit value which shall be converted to ASCII hex.
+ * @return The ASCII hex representation of the specified 4-bit value.
+ *         Returned hex-characters will always be lower-case (a-f, not A-F).
+ */
+u8 bin2hex(u8 b)
+{
+	return (b < 10) ? '0' + b : 'a' + (b - 10);
+}
+
+/**
+ * Given an ASCII hex input character, return its integer value.
+ *
+ * For example, the input value '6' will be converted to 6, 'a'/'A' will
+ * be converted to 10, 'f'/'F' will be converted to 15, and so on.
+ *
+ * The return value for invalid input characters is 0.
+ *
+ * @param h The input byte in ASCII hex format.
+ * @return The integer value of the specified ASCII hex byte.
+ */
+u8 hex2bin(u8 h)
+{
+	return (('0' <= h && h <= '9') ? (h - '0') : \
+	        ('A' <= h && h <= 'F') ? (h - 'A' + 10) : \
+	        ('a' <= h && h <= 'f') ? (h - 'a' + 10) : 0);
+}





More information about the coreboot mailing list