eal/windows: add macros required by testpmd
[dpdk.git] / lib / eal / windows / include / rte_os_shim.h
index f40fb62..824d974 100644 (file)
@@ -3,7 +3,10 @@
 #ifndef _RTE_OS_SHIM_
 #define _RTE_OS_SHIM_
 
+#include <time.h>
+
 #include <rte_os.h>
+#include <rte_windows.h>
 
 /**
  * @file
 
 #define strdup(str) _strdup(str)
 #define strtok_r(str, delim, saveptr) strtok_s(str, delim, saveptr)
+#ifndef RTE_TOOLCHAIN_GCC
+#define strcasecmp(s1, s2) _stricmp(s1, s2)
 #define strncasecmp(s1, s2, count) _strnicmp(s1, s2, count)
+#endif
 
 #define open(path, flags, ...) _open(path, flags, ##__VA_ARGS__)
 #define read(fd, buf, n) _read(fd, buf, n)
 #define IPPROTO_SCTP   132
 #endif
 
+#ifndef IPDEFTTL
+#define IPDEFTTL 64
+#endif
+
+#ifndef S_ISREG
+#define S_ISREG(mode)  (((mode) & S_IFMT) == S_IFREG)
+#endif
+
+#ifdef RTE_TOOLCHAIN_GCC
+
+#define TIME_UTC 1
+
+static inline int
+rte_timespec_get(struct timespec *now, int base)
+{
+       /* 100ns ticks from 1601-01-01 to 1970-01-01 */
+       static const uint64_t EPOCH = 116444736000000000ULL;
+       static const uint64_t TICKS_PER_SEC = 10000000;
+       static const uint64_t NS_PER_TICK = 100;
+
+       FILETIME ft;
+       uint64_t ticks;
+
+       if (base != TIME_UTC)
+               return 0;
+
+       GetSystemTimePreciseAsFileTime(&ft);
+       ticks = ((uint64_t)ft.dwHighDateTime << 32) | ft.dwLowDateTime;
+       ticks -= EPOCH;
+       now->tv_sec = ticks / TICKS_PER_SEC;
+       now->tv_nsec = (ticks - now->tv_sec * TICKS_PER_SEC) * NS_PER_TICK;
+       return base;
+}
+
+#define timespec_get(ts, base) rte_timespec_get(ts, base)
+
+#endif /* RTE_TOOLCHAIN_GCC */
+
 #endif /* _RTE_OS_SHIM_ */