Extracts sigscan/checksum
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 4 Mar 2014 19:20:34 +0000 (11:20 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 5 Mar 2014 01:30:25 +0000 (17:30 -0800)
Helpers to scan memory for a signature/pattern.  Now we can use them in
multiple places, without have the same code twice.

kern/arch/x86/mp.c
kern/drivers/dev/acpi.c
kern/include/string.h
kern/src/string.c

index 1e4a164..c4d9e03 100644 (file)
@@ -365,33 +365,6 @@ static int mpparse(PCMP * pcmp, int maxcores)
        return maxcores;
 }
 
-static int sigchecksum(void *address, int length)
-{
-       uint8_t *p, sum;
-
-       sum = 0;
-       for (p = address; length-- > 0; p++)
-               sum += *p;
-
-       return sum;
-}
-
-static void *sigscan(uint8_t * address, int length, char *signature)
-{
-       uint8_t *e, *p;
-       int siglength;
-
-       e = address + length;
-       siglength = strlen(signature);
-       for (p = address; p + siglength < e; p += 16) {
-               if (memcmp(p, signature, siglength))
-                       continue;
-               return p;
-       }
-
-       return NULL;
-}
-
 static void *sigsearch(char *signature)
 {
        uintptr_t p;
index 7037ba9..047270c 100644 (file)
@@ -1215,26 +1215,6 @@ static int acpixsdtload(char *sig)
        return found;
 }
 
-static void *rsdscan(uint8_t * addr, int len, char *signature)
-{
-       int sl;
-       uint8_t *e, *p;
-
-       printk("SCANNNNNNNNNNNNNNNNNNNNNNNNNNNNN\n");
-       e = addr + len;
-       sl = strlen(signature);
-       for (p = addr; p + sl < e; p += 16) {
-               if (p == (void *)0xf15c0)
-                       printk("CHECK F15C0!!!!!!!!!!!!!!!\n");
-               if (memcmp(p, signature, sl))
-                       continue;
-               printk("WE GOT %p\n", p);
-               return p;
-       }
-
-       return NULL;
-}
-
 static void *rsdsearch(char *signature)
 {
        uintptr_t p;
@@ -1245,7 +1225,7 @@ static void *rsdsearch(char *signature)
         * Search for the data structure signature:
         * 1) in the BIOS ROM between 0xE0000 and 0xFFFFF.
         */
-       return rsdscan(KADDR(0xE0000), 0x20000, signature);
+       return sigscan(KADDR(0xE0000), 0x20000, signature);
 }
 
 static void acpirsdptr(void)
index 649c027..131f186 100644 (file)
@@ -34,5 +34,7 @@ void *BND(s,s+len)    memfind(const void *COUNT(len) s, int c, size_t len);
 long   strtol(const char *NTS s, char **endptr, int base);
 unsigned long strtoul(const char *s, char **endptr, int base);
 int    atoi(const char*NTS s);
+int sigchecksum(void *address, int length);
+void *sigscan(uint8_t *address, int length, char *signature);
 
 #endif /* not ROS_INC_STRING_H */
index c4aafdd..6142c52 100644 (file)
@@ -422,3 +422,30 @@ int atoi(const char *s)
        // no overflow detection
        return (int)strtol(s,NULL,10);
 }
+
+int sigchecksum(void *address, int length)
+{
+       uint8_t *p, sum;
+
+       sum = 0;
+       for (p = address; length-- > 0; p++)
+               sum += *p;
+
+       return sum;
+}
+
+void *sigscan(uint8_t *address, int length, char *signature)
+{
+       uint8_t *e, *p;
+       int siglength;
+
+       e = address + length;
+       siglength = strlen(signature);
+       for (p = address; p + siglength < e; p += 16) {
+               if (memcmp(p, signature, siglength))
+                       continue;
+               return p;
+       }
+
+       return NULL;
+}