Fixed compile errors, added Semaphore code
[tpg/acess2.git] / Kernel / include / acess.h
index 9549ede..1f969f8 100644 (file)
@@ -22,14 +22,24 @@ typedef Uint        tGID;
 typedef Sint64 tTimestamp;
 typedef struct sShortSpinlock  tShortSpinlock;
 typedef struct sMutex  tMutex;
+typedef struct sSemaphore      tSemaphore;
 
 struct sMutex {
        tShortSpinlock  Protector;      //!< Protector for the lock strucure
+       const char      *Name;  //!< Human-readable name
        struct sThread  *volatile Owner;        //!< Owner of the lock (set upon getting the lock)
        struct sThread  *Waiting;       //!< Waiting threads
        struct sThread  *LastWaiting;   //!< Waiting threads
 };
 
+struct sSemaphore {
+       tShortSpinlock  Protector;      //!< Protector for the lock strucure
+       const char      *Name;  //!< Human-readable name
+       volatile int    Value;  //!< Current mutex value
+       struct sThread  *Waiting;       //!< Waiting threads
+       struct sThread  *LastWaiting;   //!< Waiting threads
+};
+
 // --- Helper Macros ---
 /**
  * \name Helper Macros
@@ -95,11 +105,11 @@ typedef void (*tThreadFunction)(void*);
  */
 typedef struct sKernelSymbol {
        char    *Name;
-       Uint    Value;
+       tVAddr  Value;
 } tKernelSymbol;
-#define        EXPORT(_name)   tKernelSymbol _kexp_##_name __attribute__((section ("KEXPORT"),unused))={#_name, (Uint)_name}
-#define        EXPORTV(_name)  tKernelSymbol _kexp_##_name __attribute__((section ("KEXPORT"),unused))={#_name, (Uint)&_name}
-#define        EXPORTAS(_sym,_name)    tKernelSymbol _kexp_##_name __attribute__((section ("KEXPORT"),unused))={#_name, (Uint)_sym}
+#define        EXPORT(_name)   tKernelSymbol _kexp_##_name __attribute__((section ("KEXPORT"),unused))={#_name, (tVAddr)_name}
+#define        EXPORTV(_name)  tKernelSymbol _kexp_##_name __attribute__((section ("KEXPORT"),unused))={#_name, (tVAddr)&_name}
+#define        EXPORTAS(_sym,_name)    tKernelSymbol _kexp_##_name __attribute__((section ("KEXPORT"),unused))={#_name, (tVAddr)_sym}
 /**
  * \}
  */
@@ -123,16 +133,16 @@ extern void       Log_Debug(char *Ident, char *Message, ...);
  * \{
  */
 extern void    Debug_KernelPanic(void);        //!< Initiate a kernel panic
-extern void    Panic(char *Msg, ...);  //!< Print a panic message (initiates a kernel panic)
-extern void    Warning(char *Msg, ...);        //!< Print a warning message
-extern void    LogF(char *Fmt, ...);   //!< Print a log message without a trailing newline
-extern void    Log(char *Fmt, ...);    //!< Print a log message
-extern void    Debug(char *Fmt, ...);  //!< Print a debug message (doesn't go to KTerm)
-extern void    LogV(char *Fmt, va_list Args);  //!< va_list Log message
-extern void    Debug_Enter(char *FuncName, char *ArgTypes, ...);
-extern void    Debug_Log(char *FuncName, char *Fmt, ...);
-extern void    Debug_Leave(char *FuncName, char RetType, ...);
-extern void    Debug_HexDump(char *Header, void *Data, Uint Length);
+extern void    Panic(const char *Msg, ...);    //!< Print a panic message (initiates a kernel panic)
+extern void    Warning(const char *Msg, ...);  //!< Print a warning message
+extern void    LogF(const char *Fmt, ...);     //!< Print a log message without a trailing newline
+extern void    Log(const char *Fmt, ...);      //!< Print a log message
+extern void    Debug(const char *Fmt, ...);    //!< Print a debug message (doesn't go to KTerm)
+extern void    LogV(const char *Fmt, va_list Args);    //!< va_list Log message
+extern void    Debug_Enter(const char *FuncName, const char *ArgTypes, ...);
+extern void    Debug_Log(const char *FuncName, const char *Fmt, ...);
+extern void    Debug_Leave(const char *FuncName, char RetType, ...);
+extern void    Debug_HexDump(const char *Header, const void *Data, Uint Length);
 #define UNIMPLEMENTED()        Warning("'%s' unimplemented", __func__)
 #if DEBUG
 # define ENTER(_types...)      Debug_Enter((char*)__func__, _types)
@@ -262,6 +272,7 @@ extern tPAddr       MM_AllocPhys(void);
 /**
  * \brief Allocate a contiguous range of physical pages
  * \param Pages        Number of pages to allocate
+ * \param MaxBits      Maximum number of address bits allowed
  * \return First physical address allocated
  */
 extern tPAddr  MM_AllocPhysRange(int Pages, int MaxBits);
@@ -322,14 +333,17 @@ extern Uint32     BigEndian32(Uint32 Val);
  */
 extern int     vsnprintf(char *__s, size_t __maxlen, const char *__format, va_list args);
 extern int     sprintf(char *__s, const char *__format, ...);
-extern Uint    strlen(const char *Str);
+extern size_t  strlen(const char *Str);
 extern char    *strcpy(char *__dest, const char *__src);
 extern char    *strncpy(char *__dest, const char *__src, size_t max);
 extern int     strcmp(const char *__str1, const char *__str2);
 extern int     strncmp(const char *Str1, const char *Str2, size_t num);
 extern int     strucmp(const char *Str1, const char *Str2);
-extern char    *strdup(const char *Str);
+//extern char  *strdup(const char *Str);
+#define strdup(Str)    _strdup(_MODULE_NAME_"/"__FILE__, __LINE__, (Str))
+extern char    *_strdup(const char *File, int Line, const char *Str);
 extern char    **str_split(const char *__str, char __ch);
+extern char    *strchr(const char *__s, int __c);
 extern int     strpos(const char *Str, char Ch);
 extern int     strpos8(const char *str, Uint32 search);
 extern void    itoa(char *buf, Uint num, int base, int minLength, char pad);
@@ -338,12 +352,14 @@ extern int        ReadUTF8(Uint8 *str, Uint32 *Val);
 extern int     WriteUTF8(Uint8 *str, Uint32 Val);
 extern int     ModUtil_SetIdent(char *Dest, char *Value);
 extern int     ModUtil_LookupString(char **Array, char *Needle);
+
 extern Uint8   ByteSum(void *Ptr, int Size);
+extern int     UnHex(Uint8 *Dest, size_t DestSize, const char *SourceString);
 /**
  * \}
  */
 
-extern Uint    rand(void);
+extern int     rand(void);
 extern int     CallWithArgArray(void *Function, int NArgs, Uint *Args);
 
 // --- Heap ---
@@ -410,7 +426,7 @@ extern tUID Threads_GetUID(void);
 extern tGID    Threads_GetGID(void);
 extern int     SpawnTask(tThreadFunction Function, void *Arg);
 extern Uint    *Threads_GetCfgPtr(int Id);
-extern int     Threads_SetName(char *NewName);
+extern int     Threads_SetName(const char *NewName);
 extern void    Mutex_Acquire(tMutex *Mutex);
 extern void    Mutex_Release(tMutex *Mutex);
 extern int     Mutex_IsLocked(tMutex *Mutex);

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