-// --- Memory ---
-extern tPAddr MM_Allocate(Uint VAddr);
-extern void MM_Deallocate(Uint VAddr); //!< Deallocate a page
-extern int MM_Map(Uint VAddr, tPAddr PAddr); //!< Map a page
-extern tPAddr MM_GetPhysAddr(Uint VAddr); //!< Get the physical address of a page
-extern int MM_IsUser(Uint VAddr, int Length); //!< Checks if a memory address is valid user memory
-extern void MM_SetFlags(Uint VAddr, Uint Flags, Uint Mask);
-extern Uint MM_MapTemp(tPAddr PAddr);
-extern void MM_FreeTemp(Uint PAddr);
-extern Uint MM_MapHWPage(tPAddr PAddr, Uint Number);
-extern void MM_UnmapHWPage(Uint VAddr, Uint Number);
+/**
+ * \}
+ */
+
+// --- Memory Management ---
+/**
+ * \name Memory Management
+ * \{
+ * \todo Move to mm_virt.h
+ */
+/**
+ * \brief Allocate a physical page at \a VAddr
+ * \param VAddr Virtual Address to allocate at
+ * \return Physical address allocated
+ */
+extern tPAddr MM_Allocate(tVAddr VAddr);
+/**
+ * \brief Deallocate a page
+ * \param VAddr Virtual address to unmap
+ */
+extern void MM_Deallocate(tVAddr VAddr);
+/**
+ * \brief Map a physical page at \a PAddr to \a VAddr
+ * \param VAddr Target virtual address
+ * \param PAddr Physical address to map
+ * \return Boolean Success
+ */
+extern int MM_Map(tVAddr VAddr, tPAddr PAddr);
+/**
+ * \brief Get the physical address of \a VAddr
+ * \param VAddr Address of the page to get the physical address of
+ * \return Physical page mapped at \A VAddr
+ */
+extern tPAddr MM_GetPhysAddr(tVAddr VAddr);
+/**
+ * \brief Checks is a memory range is user accessable
+ * \param VAddr Base address to check
+ * \param Length Number of bytes to check
+ * \return 1 if the memory is all user-accessable, 0 otherwise
+ */
+extern int MM_IsUser(tVAddr VAddr, int Length);
+/**
+ * \brief Set the access flags on a page
+ * \param VAddr Virtual address of the page
+ * \param Flags New flags value
+ * \param Mask Flags to set
+ */
+extern void MM_SetFlags(tVAddr VAddr, Uint Flags, Uint Mask);
+/**
+ * \brief Temporarily map a page into the address space
+ * \param PAddr Physical addres to map
+ * \return Virtual address of page in memory
+ * \note There is only a limited ammount of slots avaliable
+ */
+extern tVAddr MM_MapTemp(tPAddr PAddr);
+/**
+ * \brief Free a temporarily mapped page
+ * \param VAddr Allocate virtual addres of page
+ */
+extern void MM_FreeTemp(tVAddr VAddr);
+/**
+ * \brief Map a physcal address range into the virtual address space
+ * \param PAddr Physical address to map in
+ * \param Number Number of pages to map
+ */
+extern tVAddr MM_MapHWPage(tPAddr PAddr, Uint Number);
+/**
+ * \brief Allocates DMA physical memory
+ * \param Pages Number of pages required
+ * \param MaxBits Maximum number of bits the physical address can have
+ * \param PhysAddr Pointer to the location to place the physical address allocated
+ * \return Virtual address allocate
+ */
+extern tVAddr MM_AllocDMA(int Pages, int MaxBits, tPAddr *PhysAddr);
+/**
+ * \brief Unmaps an allocated hardware range
+ * \param VAddr Virtual address allocate by ::MM_MapHWPage or ::MM_AllocDMA
+ * \param Number Number of pages to free
+ */
+extern void MM_UnmapHWPage(tVAddr VAddr, Uint Number);
+/**
+ * \brief Allocate a single physical page
+ * \return Physical address allocated
+ */