x86: vmm: Rework VMRESUME logic
[akaros.git] / kern / include / endian.h
index be7ddfb..1ccba8c 100644 (file)
@@ -4,13 +4,20 @@
  *
  * Macros to convert to and from endian-data */
 
+#pragma once
+
 #include <ros/common.h>
 #include <arch/endian.h>
 
-#ifndef ROS_KERN_ENDIAN_H
-#define ROS_KERN_ENDIAN_H
+/* Endian-generic versions.  Let the compiler figure it out, plan 9-style */
+#define l16get(p)      (((p)[1]<<8)|(p)[0])
+#define l32get(p)      (((uint32_t)l16get(p+2)<<16)|l16get(p))
+#define l64get(p)      (((uint64_t)l32get(p+4)<<32)|l32get(p))
 
 #ifdef LITTLE_ENDIAN
+
+#define __LITTLE_ENDIAN
+
 #define cpu_to_le16(x) ((uint16_t)(x))
 #define cpu_to_le32(x) ((uint32_t)(x))
 #define cpu_to_le64(x) ((uint64_t)(x))
 #define be32_to_cpu(x) byte_swap32((x))
 #define be64_to_cpu(x) byte_swap64((x))
 
+#define PP_HTONS(x) ((((x) & 0xff) << 8) | (((x) & 0xff00) >> 8))
+#define PP_NTOHS(x) PP_HTONS(x)
+#define PP_HTONL(x) ((((x) & 0xff) << 24) | \
+                     (((x) & 0xff00) << 8) | \
+                     (((x) & 0xff0000UL) >> 8) | \
+                     (((x) & 0xff000000UL) >> 24))
+#define PP_NTOHL(x) PP_HTONL(x)
+
 #else /* big endian */
 
 # ifndef BIG_ENDIAN
 # error "Need an endianness defined"
 # endif
 
+#define __BIG_ENDIAN
+
 #define cpu_to_le16(x) byte_swap16((x))
 #define cpu_to_le32(x) byte_swap32((x))
 #define cpu_to_le64(x) byte_swap64((x))
@@ -45,6 +62,9 @@
 #define be32_to_cpu(x) ((uint32_t)(x))
 #define be64_to_cpu(x) ((uint64_t)(x))
 
-#endif /* endian */
+#define PP_HTONS(x) (x)
+#define PP_NTOHS(x) (x)
+#define PP_HTONL(x) (x)
+#define PP_NTOHL(x) (x)
 
-#endif /* ROS_KERN_ENDIAN_H */
+#endif /* endian */