Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=5be865661516263d90317a6b35b588a2d7c3cb55
Commit:     5be865661516263d90317a6b35b588a2d7c3cb55
Parent:     ad7e906d5687bb076fe6c3c980d6e013a3a42bde
Author:     H. Peter Anvin <[EMAIL PROTECTED]>
AuthorDate: Wed Jul 11 12:18:41 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Thu Jul 12 10:55:55 2007 -0700

    String-handling functions for the new x86 setup code.
    
    strcmp(), memcpy(), memset(), as well as routines to copy to and from
    other segments (as pointed to by fs and gs).
    
    Signed-off-by: H. Peter Anvin <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 arch/i386/boot/copy.S   |  101 +++++++++++++++++++++++++++++++++++++++++++++++
 arch/i386/boot/string.c |   52 ++++++++++++++++++++++++
 2 files changed, 153 insertions(+), 0 deletions(-)

diff --git a/arch/i386/boot/copy.S b/arch/i386/boot/copy.S
new file mode 100644
index 0000000..ef127e5
--- /dev/null
+++ b/arch/i386/boot/copy.S
@@ -0,0 +1,101 @@
+/* ----------------------------------------------------------------------- *
+ *
+ *   Copyright (C) 1991, 1992 Linus Torvalds
+ *   Copyright 2007 rPath, Inc. - All Rights Reserved
+ *
+ *   This file is part of the Linux kernel, and is made available under
+ *   the terms of the GNU General Public License version 2.
+ *
+ * ----------------------------------------------------------------------- */
+
+/*
+ * arch/i386/boot/copy.S
+ *
+ * Memory copy routines
+ */
+
+       .code16gcc
+       .text
+
+       .globl  memcpy
+       .type   memcpy, @function
+memcpy:
+       pushw   %si
+       pushw   %di
+       movw    %ax, %di
+       movw    %dx, %si
+       pushw   %cx
+       shrw    $2, %cx
+       rep; movsl
+       popw    %cx
+       andw    $3, %cx
+       rep; movsb
+       popw    %di
+       popw    %si
+       ret
+       .size   memcpy, .-memcpy
+
+       .globl  memset
+       .type   memset, @function
+memset:
+       pushw   %di
+       movw    %ax, %di
+       movzbl  %dl, %eax
+       imull   $0x01010101,%eax
+       pushw   %cx
+       shrw    $2, %cx
+       rep; stosl
+       popw    %cx
+       andw    $3, %cx
+       rep; stosb
+       popw    %di
+       ret
+       .size   memset, .-memset
+
+       .globl  copy_from_fs
+       .type   copy_from_fs, @function
+copy_from_fs:
+       pushw   %ds
+       pushw   %fs
+       popw    %ds
+       call    memcpy
+       popw    %ds
+       ret
+       .size   copy_from_fs, .-copy_from_fs
+
+       .globl  copy_to_fs
+       .type   copy_to_fs, @function
+copy_to_fs:
+       pushw   %es
+       pushw   %fs
+       popw    %es
+       call    memcpy
+       popw    %es
+       ret
+       .size   copy_to_fs, .-copy_to_fs
+
+#if 0 /* Not currently used, but can be enabled as needed */
+
+       .globl  copy_from_gs
+       .type   copy_from_gs, @function
+copy_from_gs:
+       pushw   %ds
+       pushw   %gs
+       popw    %ds
+       call    memcpy
+       popw    %ds
+       ret
+       .size   copy_from_gs, .-copy_from_gs
+       .globl  copy_to_gs
+
+       .type   copy_to_gs, @function
+copy_to_gs:
+       pushw   %es
+       pushw   %gs
+       popw    %es
+       call    memcpy
+       popw    %es
+       ret
+       .size   copy_to_gs, .-copy_to_gs
+
+#endif
diff --git a/arch/i386/boot/string.c b/arch/i386/boot/string.c
new file mode 100644
index 0000000..481a220
--- /dev/null
+++ b/arch/i386/boot/string.c
@@ -0,0 +1,52 @@
+/* -*- linux-c -*- ------------------------------------------------------- *
+ *
+ *   Copyright (C) 1991, 1992 Linus Torvalds
+ *   Copyright 2007 rPath, Inc. - All Rights Reserved
+ *
+ *   This file is part of the Linux kernel, and is made available under
+ *   the terms of the GNU General Public License version 2.
+ *
+ * ----------------------------------------------------------------------- */
+
+/*
+ * arch/i386/boot/string.c
+ *
+ * Very basic string functions
+ */
+
+#include "boot.h"
+
+int strcmp(const char *str1, const char *str2)
+{
+       const unsigned char *s1 = (const unsigned char *)str1;
+       const unsigned char *s2 = (const unsigned char *)str2;
+       int delta = 0;
+
+       while (*s1 || *s2) {
+               delta = *s2 - *s1;
+               if (delta)
+                       return delta;
+               s1++;
+               s2++;
+       }
+       return 0;
+}
+
+size_t strnlen(const char *s, size_t maxlen)
+{
+       const char *es = s;
+       while (*es && maxlen) {
+               es++;
+               maxlen--;
+       }
+
+       return (es - s);
+}
+
+unsigned int atou(const char *s)
+{
+       unsigned int i = 0;
+       while (isdigit(*s))
+               i = i * 10 + (*s++ - '0');
+       return i;
+}
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to