Starting on PAE support, removed UDI from kernel
[tpg/acess2.git] / Kernel / arch / x86 / lib.c
index 6b9ee1e..a3c4fa6 100644 (file)
@@ -2,7 +2,7 @@
  * AcessOS Microkernel Version
  * lib.c
  */
-#include <common.h>
+#include <acess.h>
 
 // === CODE ===
 void Spinlock(int *lock)
@@ -70,11 +70,26 @@ void *memsetd(void *Dest, Uint Val, Uint Num)
        return Dest;
 }
 
+/**
+ * \fn int memcmp(const void *m1, const void *m2, Uint Num)
+ * \brief Compare two pieces of memory
+ */
+int memcmp(const void *m1, const void *m2, Uint Num)
+{
+       while(Num--)
+       {
+               if(*(Uint8*)m1 != *(Uint8*)m2)  break;
+               m1 ++;
+               m2 ++;
+       }
+       return *(Uint8*)m1 - *(Uint8*)m2;
+}
 
 /**
- * \fn void *memcpy(void *Dest, void *Src, Uint Num)
+ * \fn void *memcpy(void *Dest, const void *Src, Uint Num)
+ * \brief Copy \a Num bytes from \a Src to \a Dest
  */
-void *memcpy(void *Dest, void *Src, Uint Num)
+void *memcpy(void *Dest, const void *Src, Uint Num)
 {
        if((Uint)Dest & 3 || (Uint)Src & 3)
                __asm__ __volatile__ ("rep movsb" :: "D" (Dest), "S" (Src), "c" (Num));
@@ -88,9 +103,10 @@ void *memcpy(void *Dest, void *Src, Uint Num)
        return Dest;
 }
 /**
- * \fn void *memcpyd(void *Dest, void *Src, Uint Num)
+ * \fn void *memcpyd(void *Dest, const void *Src, Uint Num)
+ * \brief Copy \a Num DWORDs from \a Src to \a Dest
  */
-void *memcpyd(void *Dest, void *Src, Uint Num)
+void *memcpyd(void *Dest, const void *Src, Uint Num)
 {
        __asm__ __volatile__ ("rep movsl" :: "D" (Dest), "S" (Src), "c" (Num));
        return Dest;
@@ -154,10 +170,31 @@ Uint64 __umoddi3(Uint64 Num, Uint64 Den)
        return Num;
 }
 
+Uint16 LittleEndian16(Uint16 Val)
+{
+       return Val;
+}
+Uint16 BigEndian16(Uint16 Val)
+{
+       return ((Val&0xFF)<<8) | ((Val>>8)&0xFF);
+}
+Uint32 LittleEndian32(Uint32 Val)
+{
+       return Val;
+}
+Uint32 BigEndian32(Uint32 Val)
+{
+       return ((Val&0xFF)<<24) | ((Val&0xFF00)<<8) | ((Val>>8)&0xFF00) | ((Val>>24)&0xFF);
+}
+
 // --- EXPORTS ---
 EXPORT(memcpy);        EXPORT(memset);
+EXPORT(memcmp);
 //EXPORT(memcpyw);     EXPORT(memsetw);
 EXPORT(memcpyd);       EXPORT(memsetd);
 EXPORT(inb);   EXPORT(inw);    EXPORT(ind);
 EXPORT(outb);  EXPORT(outw);   EXPORT(outd);
 EXPORT(__udivdi3);     EXPORT(__umoddi3);
+
+EXPORT(LittleEndian16);        EXPORT(BigEndian16);
+EXPORT(LittleEndian32);        EXPORT(BigEndian32);

UCC git Repository :: git.ucc.asn.au