Add support to run SMM handler in TSEG instead of ASEG
[coreboot.git] / src / include / string.h
index 1c07af0ca51fb39ca2d1821c1f045e929e2142c1..708961b6352bba80b258b7d13be95dd99447c187 100644 (file)
@@ -4,22 +4,19 @@
 #include <stddef.h>
 #include <stdlib.h>
 
-extern void *memcpy(void *dest, const void *src, size_t n);
-extern void *memmove(void *dest, const void *src, size_t n);
-extern void *memset(void *s, int c, size_t n);
-extern int memcmp(const void *s1, const void *s2, size_t n);
-
-extern int sprintf(char * buf, const char *fmt, ...);
-
-// yes, linux has fancy ones. We don't care. This stuff gets used 
-// hardly at all. And the pain of including those files is just too high.
-
-//extern inline void strcpy(char *dst, char *src) {while (*src) *dst++ = *src++;}
-
-//extern inline int strlen(char *src) { int i = 0; while (*src++) i++; return i;}
-
-static inline size_t strnlen(const char *src, size_t max) 
-{ 
+void *memcpy(void *dest, const void *src, size_t n);
+void *memmove(void *dest, const void *src, size_t n);
+void *memset(void *s, int c, size_t n);
+int memcmp(const void *s1, const void *s2, size_t n);
+void *memchr(const void *s, int c, size_t n);
+#if !defined(__PRE_RAM__)
+int sprintf(char * buf, const char *fmt, ...);
+#endif
+
+// simple string functions
+
+static inline size_t strnlen(const char *src, size_t max)
+{
        size_t i = 0;
        while((*src++) && (i < max)) {
                i++;
@@ -41,17 +38,19 @@ static inline char *strchr(const char *s, int c)
        for (; *s; s++) {
                if (*s == c)
                        return (char *) s;
-       }       
+       }
        return 0;
 }
 
+#if !defined(__PRE_RAM__)
 static inline char *strdup(const char *s)
-{   
+{
        size_t sz = strlen(s) + 1;
        char *d = malloc(sz);
        memcpy(d, s, sz);
        return d;
 }
+#endif
 
 static inline char *strncpy(char *to, const char *from, int count)
 {
@@ -70,8 +69,14 @@ static inline char *strncpy(char *to, const char *from, int count)
        return ret;
 }
 
+static inline void strcpy(char *dst, const char *src)
+{
+       while (*src)
+               *dst++ = *src++;
+}
+
 static inline int strcmp(const char *s1, const char *s2)
-{   
+{
        int r;
 
        while ((r = (*s1 - *s2)) == 0 && *s1) {
@@ -79,7 +84,19 @@ static inline int strcmp(const char *s1, const char *s2)
                s2++;
        }
        return r;
-}  
+}
+
+static inline int strncmp(const char *s1, const char *s2, int maxlen)
+{
+       int i;
+
+       for (i = 0; i < maxlen; i++) {
+               if (s1[i] != s2[i])
+                       return s1[i] - s2[i];
+       }
+
+       return 0;
+}
 
 static inline int isspace(int c)
 {
@@ -104,6 +121,11 @@ static inline int isxdigit(int c)
                (c >= 'A' && c <= 'F'));
 }
 
+static inline int isupper(int c)
+{
+       return (c >= 'A' && c <= 'Z');
+}
+
 static inline int islower(int c)
 {
        return (c >= 'a' && c <= 'z');
@@ -115,4 +137,11 @@ static inline int toupper(int c)
                 c -= 'a'-'A';
         return c;
 }
+
+static inline int tolower(int c)
+{
+        if (isupper(c))
+                c -= 'A'-'a';
+        return c;
+}
 #endif /* STRING_H */