sos-code-article7/hwcore/mm_context.h

102 lines
3.0 KiB
C

/* Copyright (C) 2005 David Decotigny
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA.
*/
#ifndef _SOS_MMCTXT_H_
#define _SOS_MMCTXT_H_
/**
* @file mm_context.h
*
* Low level API to manage multiple MMU translation tables. The API
* (not its implementation) should be some kind of
* architecture-independent.
*
* The goal of this API is:
* - To provide a simple arch-independent API to change the current
* address space configured in the MMU
* - To make sure that ALL the kernel space mappings are always kept
* IDENTICAL among all the address spaces in the whole system. That
* way, a virtual address in the kernel space refers to EXACTLY the
* same physical memory location for all the address spaces.
*/
#include <sos/types.h>
#include <sos/errno.h>
/**
* Declaration of an MMU context. Opaque structure defined in
* mm_context.c
*/
struct sos_mm_context;
/**
* Setup the MMU context management subsystem
*/
sos_ret_t sos_mm_context_subsystem_setup();
/**
* Public function to allocate a new MMU context.
*
* Allocate a new PD, map it into kernel virtual address space and
* initialize its PDE for the Kernel space so that the Kernel space is
* kept identical between ALL the MMU context in the system.
*/
struct sos_mm_context * sos_mm_context_create(void);
/**
* Public function to release the given MMU context (based on
* reference counting). Only the virtual page that maps the PD of the
* MMU context is released. All the other user-space pages are
* expected to be already released by the parent process.
*/
sos_ret_t sos_mm_context_unref(struct sos_mm_context *mmctxt);
/**
* Reconfigure the MMU to use a different MMU context. mmctxt MUST
* NOT be NULL.
*/
sos_ret_t sos_mm_context_switch_to(struct sos_mm_context *mmctxt);
/* ******************************************************
* Reserved functions
*/
/**
* Reserved function to increase the reference count of the given MMU
* context (based on reference counting).
*/
sos_ret_t sos_mm_context_ref(struct sos_mm_context *mmctxt);
/**
* Restricted function reserved to paging.c to synchronize all the PDEs
* accross all the MMU contexts in the system. This is limited to PDEs
* pertaining to the kernel space.
*/
sos_ret_t sos_mm_context_synch_kernel_PDE(unsigned int index_in_pd,
sos_ui32_t pde);
#endif /* _SOS_MMCTXT_H_ */