libc: Move tf_printf and tf_snprintf to libc

Change their names to printf and snprintf. They are much smaller than
the previous versions we had, which makes them better suited for the
Trusted Firmware.

Change-Id: Ia872af91b7b967c47fce012eccecede7873a3daf
Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
diff --git a/Makefile b/Makefile
index cb7eb08..e7ca14a 100644
--- a/Makefile
+++ b/Makefile
@@ -202,8 +202,6 @@
 
 BL_COMMON_SOURCES	+=	common/bl_common.c			\
 				common/tf_log.c				\
-				common/tf_printf.c			\
-				common/tf_snprintf.c			\
 				common/${ARCH}/debug.S			\
 				lib/${ARCH}/cache_helpers.S		\
 				lib/${ARCH}/misc_helpers.S		\
diff --git a/common/tf_log.c b/common/tf_log.c
index 54c0a43..6da1e85 100644
--- a/common/tf_log.c
+++ b/common/tf_log.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -36,11 +36,11 @@
 
 	prefix_str = plat_log_get_prefix(log_level);
 
-	if (prefix_str != NULL)
-		tf_string_print(prefix_str);
+	while (*prefix_str)
+		putchar(*prefix_str++);
 
 	va_start(args, fmt);
-	tf_vprintf(fmt+1, args);
+	vprintf(fmt + 1, args);
 	va_end(args);
 }
 
diff --git a/docs/psci-lib-integration-guide.rst b/docs/psci-lib-integration-guide.rst
index 47cbfcc..d86fc29 100644
--- a/docs/psci-lib-integration-guide.rst
+++ b/docs/psci-lib-integration-guide.rst
@@ -319,7 +319,7 @@
 below. The TF-A source tree provides implementations for all
 these functions but the EL3 Runtime Software may use its own implementation.
 
-**Functions : assert(), memcpy(), memset**
+**Functions : assert(), memcpy(), memset(), printf()**
 
 These must be implemented as described in ISO C Standard.
 
@@ -353,14 +353,6 @@
 This function will be called by the PSCI library on encountering a critical
 failure that cannot be recovered from. This function **must not** return.
 
-**Function : tf\_printf()**
-
-This is printf-compatible function, but unlike printf, it does not return any
-value. The TF-A source tree provides an implementation which
-is optimized for stack usage and supports only a subset of format specifiers.
-The details of the format specifiers supported can be found in the
-``tf_printf.c`` file in the TF-A source tree.
-
 CPU Context management API
 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 
diff --git a/include/common/debug.h b/include/common/debug.h
index 3c99ce5..4c5560f 100644
--- a/include/common/debug.h
+++ b/include/common/debug.h
@@ -4,8 +4,8 @@
  * SPDX-License-Identifier: BSD-3-Clause
  */
 
-#ifndef __DEBUG_H__
-#define __DEBUG_H__
+#ifndef DEBUG_H
+#define DEBUG_H
 
 /*
  * The log output macros print output to the console. These macros produce
@@ -90,11 +90,7 @@
 void __dead2 __stack_chk_fail(void);
 
 void tf_log(const char *fmt, ...) __printflike(1, 2);
-int tf_printf(const char *fmt, ...) __printflike(1, 2);
-int tf_snprintf(char *s, size_t n, const char *fmt, ...) __printflike(3, 4);
-int tf_vprintf(const char *fmt, va_list args);
-int tf_string_print(const char *str);
 void tf_log_set_max_level(unsigned int log_level);
 
 #endif /* __ASSEMBLY__ */
-#endif /* __DEBUG_H__ */
+#endif /* DEBUG_H */
diff --git a/include/lib/libc/stdio.h b/include/lib/libc/stdio.h
index 83fd18c..3d9323e 100644
--- a/include/lib/libc/stdio.h
+++ b/include/lib/libc/stdio.h
@@ -11,6 +11,7 @@
 #ifndef STDIO_H
 #define STDIO_H
 
+#include <cdefs.h>
 #include <stdio_.h>
 
 #ifndef NULL
@@ -19,14 +20,11 @@
 
 #define EOF            -1
 
-int printf(const char *fmt, ...);
-int snprintf(char *s, size_t n, const char *fmt, ...);
-int sprintf(char *s, const char *fmt, ...);
-int sscanf(const char *s, const char *fmt, ...);
+int printf(const char *fmt, ...) __printflike(1, 2);
+int snprintf(char *s, size_t n, const char *fmt, ...) __printflike(3, 4);
 
 #ifdef STDARG_H
-int vsnprintf(char *s, size_t n, const char *fmt, va_list arg);
-int vsprintf(char *s, const char *fmt, va_list arg);
+int vprintf(const char *fmt, va_list args);
 #endif
 
 int putchar(int c);
diff --git a/lib/libc/libc.mk b/lib/libc/libc.mk
index 0dee4f5..554f36b 100644
--- a/lib/libc/libc.mk
+++ b/lib/libc/libc.mk
@@ -16,12 +16,12 @@
 			printf.c			\
 			putchar.c			\
 			puts.c				\
+			snprintf.c			\
 			strchr.c			\
 			strcmp.c			\
 			strlen.c			\
 			strncmp.c			\
-			strnlen.c			\
-			subr_prf.c)
+			strnlen.c)
 
 INCLUDES	+=	-Iinclude/lib/libc		\
 			-Iinclude/lib/libc/$(ARCH)	\
diff --git a/common/tf_printf.c b/lib/libc/printf.c
similarity index 91%
rename from common/tf_printf.c
rename to lib/libc/printf.c
index ecf058c..a1a8024 100644
--- a/common/tf_printf.c
+++ b/lib/libc/printf.c
@@ -1,13 +1,10 @@
 /*
- * Copyright (c) 2014-2017, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
-#include <arch.h>
-#include <arch_helpers.h>
 #include <assert.h>
 #include <debug.h>
-#include <limits.h>
 #include <stdarg.h>
 #include <stdint.h>
 
@@ -23,7 +20,7 @@
 	(((_lcount) > 1) ? va_arg(_args, unsigned long long int) :	\
 	((_lcount) ? va_arg(_args, unsigned long int) : va_arg(_args, unsigned int)))
 
-int tf_string_print(const char *str)
+static int string_print(const char *str)
 {
 	int count = 0;
 
@@ -87,7 +84,7 @@
  * The print exits on all other formats specifiers other than valid
  * combinations of the above specifiers.
  *******************************************************************/
-int tf_vprintf(const char *fmt, va_list args)
+int vprintf(const char *fmt, va_list args)
 {
 	int l_count;
 	long long int num;
@@ -121,12 +118,12 @@
 				break;
 			case 's':
 				str = va_arg(args, char *);
-				count += tf_string_print(str);
+				count += string_print(str);
 				break;
 			case 'p':
 				unum = (uintptr_t)va_arg(args, void *);
 				if (unum) {
-					count += tf_string_print("0x");
+					count += string_print("0x");
 					padn -= 2;
 				}
 
@@ -180,13 +177,13 @@
 	return count;
 }
 
-int tf_printf(const char *fmt, ...)
+int printf(const char *fmt, ...)
 {
 	int count;
 	va_list va;
 
 	va_start(va, fmt);
-	count = tf_vprintf(fmt, va);
+	count = vprintf(fmt, va);
 	va_end(va);
 
 	return count;
diff --git a/common/tf_snprintf.c b/lib/libc/snprintf.c
similarity index 94%
rename from common/tf_snprintf.c
rename to lib/libc/snprintf.c
index 6df1377..0738a86 100644
--- a/common/tf_snprintf.c
+++ b/lib/libc/snprintf.c
@@ -52,7 +52,7 @@
  * buffer was big enough. If it returns a value lower than n, the
  * whole string has been written.
  *******************************************************************/
-int tf_snprintf(char *s, size_t n, const char *fmt, ...)
+int snprintf(char *s, size_t n, const char *fmt, ...)
 {
 	va_list args;
 	int num;
@@ -102,7 +102,7 @@
 				break;
 			default:
 				/* Panic on any other format specifier. */
-				ERROR("tf_snprintf: specifier with ASCII code '%d' not supported.",
+				ERROR("snprintf: specifier with ASCII code '%d' not supported.",
 				      *fmt);
 				plat_panic_handler();
 			}