--- /dev/null
+/**
+ * \file archdoc.h
+ * \brief Documentation Definitions for the Acess 2 Architecture Interface
+ * \author John Hodge (thePowersGang)
+ *
+ * Acess 2 allows different architecture builds to be made off almost
+ * the same source tree. The difference between the trees is the inclusion
+ * of a different directory from the "Kernel/arch/" directory that
+ * contains the architecture specific intialisation and management code.
+ * Each achitecture tree must provide all the definitions from this
+ * document in some form or another (usually in the most efficient way
+ * avaliable)
+ * The values and types used in this documentation are a guide only and
+ * will most probably be incorrect for most architectures.
+ */
+#ifndef _ARCHDOC_H_
+#define _ARCHDOC_H_
+
+/**
+ * \brief Maximum number of CPUs supported by this architecture driver
+ * (in the current build)
+ */
+#define MAX_CPUS 1
+/**
+ * \brief Number of bits in a machine word (Uint)
+ */
+#define BITS 32
+/**
+ * \brief Number of valid bits in a \a tPAddr
+ */
+#define PHYS_BITS 32
+
+/**
+ * \name Syncronisation Primitives
+ * \{
+ */
+/**
+ * \brief Spinlock type
+ */
+typedef volatile int tSpinlock;
+/**
+ * \brief Acquire a spinlock
+ */
+#define LOCK(lockptr) do{while(*(tSpinlock*)lockptr)Threads_Yield();*(tSpinlock*)lockptr=1;}while(0)
+/**
+ * \brief Release a held spinlock
+ */
+#define RELEASE(lockptr) do{*(tSpinlock*)lockptr=0;}while(0)
+/**
+ * \}
+ */
+//#define HALT() __asm__ __volatile__ ("hlt")
+
+
+/**
+ * \name Atomic Types
+ * \{
+ */
+typedef unsigned int Uint; //!< Unsigned machine native integer
+typedef unsigned char Uint8; //!< Unsigned 8-bit integer
+typedef unsigned short Uint16; //!< Unsigned 16-bit integer
+typedef unsigned long Uint32; //!< Unsigned 32-bit integer
+typedef unsigned long long Uint64; //!< Unsigned 64-bit integer
+typedef signed int Sint; //!< Signed Machine Native integer
+typedef signed char Sint8; //!< Signed 8-bit integer
+typedef signed short Sint16; //!< Signed 16-bit integer
+typedef signed long Sint32; //!< Signed 32-bit integer
+typedef signed long long Sint64; //!< Signed 16-bit integer
+/**
+ * \}
+ */
+
+typedef Uint size_t; //!< Counter/Byte count type
+typedef Uint32 tVAddr; //!< Virtual address type
+typedef Uint32 tPAddr; //!< Physical Address type
+
+/**
+ * \brief Register state passed to the syscall handler
+ *
+ * The \a tSyscallRegs structure allows the system call handler to read
+ * the user state to get the arguments for the call. It also allows the
+ * handler to alter specific parts of the user state to reflect the
+ * result of the call.
+ * \note The fields shown here are need only be present in the actual
+ * structure, in any order. The implementation may also add more
+ * fields for padding purposes.
+ */
+typedef struct {
+ Uint Arg4; //!< Fourth argument
+ Uint Arg3; //!< Third argument
+ Uint Arg2; //!< Second argument
+ union {
+ Uint Arg1; //!< First arugment
+ Uint RetHi; //!< High part of the return
+ };
+ union {
+ Uint Num; //!< Call Number
+ Uint Return; //!< Low return value
+ };
+
+ Uint StackPointer; //!< User stack pointer
+} tSyscallRegs;
+
+/**
+ * \brief Opaque structure definining the MMU state for a task
+ */
+typedef struct sMemoryState tMemoryState;
+
+/**
+ * \brief Opque structure defining the CPU state for a task
+ */
+typedef struct sTaskState tTaskState;
+
+
+/**
+ * \name Memory Management
+ * \{
+ */
+/**
+ * \}
+ */
+
+
+#endif