2 * Acess2 DiskTool utility
3 * - By John Hodge (thePowersGang)
6 * - Mock kernel core header
8 #ifndef _DISKTOOL__ACESS_H_
9 #define _DISKTOOL__ACESS_H_
11 #define CONCAT(x,y) x ## y
12 #define EXPAND_CONCAT(x,y) CONCAT(x,y)
14 #define EXPAND_STR(x) STR(x)
16 //#define ASSERT(x) do{}while(0)
18 extern char __buildnum[];
19 #define BUILD_NUM ((int)(Uint)&__buildnum)
20 extern const char gsGitHash[];
21 extern const char gsBuildInfo[];
24 #define NULL ((void*)0)
27 typedef uintptr_t Uint;
28 //typedef unsigned int size_t;
30 typedef uint64_t off_t;
34 typedef uint8_t Uint8;
35 typedef uint16_t Uint16;
36 typedef uint32_t Uint32;
37 typedef uint64_t Uint64;
40 typedef int16_t Sint16;
41 typedef int32_t Sint32;
42 typedef int64_t Sint64;
44 typedef uintptr_t tVAddr;
45 typedef uint32_t tPAddr;
47 typedef uint32_t tUID;
48 typedef uint32_t tGID;
49 typedef uint32_t tTID;
51 // NOTE: Since this is single-threaded (for now) mutexes can be implimented as simple locks
52 typedef char tShortSpinlock;
54 typedef int64_t tTime;
55 extern tTime now(void);
56 extern int64_t timestamp(int sec, int min, int hr, int day, int month, int year);
57 extern void format_date(tTime TS, int *year, int *month, int *day, int *hrs, int *mins, int *sec, int *ms);
59 #define PACKED __attribute__((packed))
66 // These are actually library functions, but they can't be included, so they're defined manually
67 extern void *malloc(size_t bytes);
68 extern void *calloc(size_t nmemb, size_t size);
69 extern void *realloc(void *oldptr, size_t bytes);
70 extern void free(void *buffer);
73 #include <acess_logging.h>
76 extern int *Threads_GetErrno(void);
77 //extern tPGID Threads_GetPGID(void);
78 //extern tPID Threads_GetPID(void);
79 extern tTID Threads_GetTID(void);
80 extern tUID Threads_GetUID(void);
81 extern tGID Threads_GetGID(void);
83 // Kinda hacky way of not colliding with native errno
84 #define errno (*(Threads_GetErrno()))
87 * \name Endianness Swapping
91 #define LittleEndian16(_val) SwapEndian16(_val)
92 #define LittleEndian32(_val) SwapEndian32(_val)
93 #define LittleEndian64(_val) SwapEndian32(_val)
94 #define BigEndian16(_val) (_val)
95 #define BigEndian32(_val) (_val)
96 #define BigEndian64(_val) (_val)
98 #define LittleEndian16(_val) (_val)
99 #define LittleEndian32(_val) (_val)
100 #define LittleEndian64(_val) (_val)
101 #define BigEndian16(_val) SwapEndian16(_val)
102 #define BigEndian32(_val) SwapEndian32(_val)
103 #define BigEndian64(_val) SwapEndian64(_val)
105 extern Uint16 SwapEndian16(Uint16 Val);
106 extern Uint32 SwapEndian32(Uint32 Val);
107 extern Uint64 SwapEndian64(Uint64 Val);
114 extern int strucmp(const char *s1, const char *s2);
115 extern int strpos(const char *Str, char Ch);
116 extern void itoa(char *buf, uint64_t num, int base, int minLength, char pad);
117 extern int snprintf(char *buf, size_t len, const char *fmt, ...);
118 extern int sprintf(char *buf, const char *fmt, ...);
119 extern int ReadUTF8(const Uint8 *str, Uint32 *Val);
120 extern int WriteUTF8(Uint8 *str, Uint32 Val);
121 #define CheckString(str) (1)
122 #define CheckMem(mem,sz) (1)
126 extern int DivUp(int value, int divisor);
127 extern uint64_t DivMod64U(uint64_t Num, uint64_t Den, uint64_t *Rem);
128 static inline int MIN(int a, int b) { return a < b ? a : b; }
129 static inline int MAX(int a, int b) { return a > b ? a : b; }
131 static inline void SHORTLOCK(tShortSpinlock *Lock) {
132 if(*Lock) Log_KernelPanic("---", "Double short lock");
135 static inline void SHORTREL(tShortSpinlock *m) { *m = 0; }
137 static inline intptr_t MM_GetPhysAddr(void *Ptr) { return 1; }