Usermode/AxWin3 - Bugfixing rendering/layout issues
[tpg/acess2.git] / Kernel / include / hal_proc.h
index e7ca891..a189d56 100644 (file)
@@ -8,21 +8,83 @@
  */
 #ifndef _HAL_PROC_H_
 #define _HAL_PROC_H_
+/**
+ * \file hal_proc.h
+ * \brief Achitecture defined thread/process management functions
+ */
 
 #include <threads_int.h>
 
+/**
+ * \brief Initialise the architecture dependent side of threading
+ */
 extern void    ArchThreads_Init(void);
+/**
+ * \brief Start preemptive multithreading (if needed)
+ */
 extern void    Proc_Start(void);
+/**
+ * \brief Called just before a thread is freed
+ */
+extern void    Proc_ClearThread(tThread *Thread);
+/**
+ * \brief Get the ID of this CPU
+ * \return Zero based CPU ID
+ */
 extern int     GetCPUNum(void);
+/**
+ * \brief Create a copy of the current process
+ * \param Flags        Options for the clone
+ * \return ID of the new thread/process
+ */
 extern tTID    Proc_Clone(Uint Flags);
-extern void    Proc_StartUser(Uint Entrypoint, Uint *Bases, int ArgC, char **ArgV, char **EnvP, int DataSize);
+/**
+ * \brief Create a new kernel thread for the process
+ * \param Fnc  Thread root function
+ * \param Ptr  Argument to pass the root function
+ * \return ID of new thread
+ */
+extern tTID    Proc_NewKThread( void (*Fnc)(void*), void *Ptr );
+/**
+ * \brief Start a user task
+ * \param Entrypoint   User entrypoint
+ * \param Base Base of executable (argument for ld-acess)
+ * \param ArgC Number of arguments when the program was invoked
+ * \param ArgV Heap allocated arguments and environment (two NULL terminated lists)
+ * \param DataSize     Size of the \a ArgV buffer in bytes
+ * \note This function should free \a ArgV
+ */
+extern void    Proc_StartUser(Uint Entrypoint, Uint Base, int ArgC, char **ArgV, int DataSize) NORETURN;
+/**
+ * \brief Call the fault handler for a thread
+ * \param Thread       Thread that is at fault :)
+ */
 extern void    Proc_CallFaultHandler(tThread *Thread);
+/**
+ * \brief Dump the CPU state for a thread
+ */
 extern void    Proc_DumpThreadCPUState(tThread *Thread);
+/**
+ * \brief Select a new task and run it, suspending this
+ */
 extern void    Proc_Reschedule(void);
 
-
-extern tPAddr  MM_ClearUser(void);
+/**
+ * \brief Clear the user's memory space back to the minimum required to run
+ */
+extern void    MM_ClearUser(void);
+/**
+ * \brief Dump the address space to the debug channel
+ * \param Start        First address
+ * \param End  Last address
+ */
 extern void    MM_DumpTables(tVAddr Start, tVAddr End);
 
-
+/**
+ * \brief Check if a buffer is valid (and all user if originally user)
+ * \param Addr Base address
+ * \param Size Size of the buffer in bytes
+ * \return Boolean valid (0: invalid, non-0: Valid)
+ */
+extern int     MM_IsValidBuffer(tVAddr Addr, size_t Size);
 #endif

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