[GSoC2012] MMU / New Arena API ( libarena.h)
Hesham Moustafa
heshamelmatary at gmail.com
Tue May 29 18:02:16 UTC 2012
I sent a previous message illustrating Arena Design for my project. This is
an initial .h file to be reviewed. Hope to get some feedbacks.
/**
*
*
* *
* * @brief Arena Manager API
* */
/*
* * Copyright (c) 2012 Hesham AL-Matary
* *
* * The license and distribution terms for this file may be
* * found in the file LICENSE in this distribution or at
* * http://www.rtems.com/license/LICENSE.
* */
#ifndef _RTEMS_LIBARENA_H
#define _RTEMS_LIBARENA_H
#include <inttypes.h>
#include <rtems/chain.h>
#include <rtems/score/object.h>
#include <rtems/score/thread.h>
/**
* * Type for attributes for arena
* */
typedef uint32_t arena_attributes;
/**
* * arena_attributes bit masks
* */
#define ARENA_ATTRIBUTES_NO_PERMISSION 0x00
#define ARENA_ATTRIBUTES_READ_PERMISSION 0x01
#define ARENA_ATTRIBUTES_WRITE_PERMISSION 0x02
#define ARENA_ATTRIBUTES_EXECUTE_PERMISSION 0x04
#define ARENA_ATTRIBUTES_CACHEABLE_PERMISSION 0x08
#ifdef __cplusplus
extern "c" {
#endif
/* Possible status for Arena_Status type ( to be extended ) */
typedef enum {
/* Generic operation failure */
ARENA_FAILED,
/* Operation done successfully */
ARENA_SUCCESS,
/* Invalid address argument */
ARENA_INVALID_ADDRESS,
/* Invalid size argumnet */
ARENA_INVALID_SIZE,
/* Invalid attributes pattern */
ARENA_INVALID_ATTRIBUTES,
/* The maximum number of Arenas per Task is reached */
ARENA_MAX_ARENA_PER_TASK_REACHED
} Arena_Status;
typedef struct {
Objects_Control Object;
/* starting address of the arena’s memory pool */
void *start_address;
/* size of the arena’s memory pool */
size_t size;
/* memory attributes like w/r/x, cacheable */
arena_attributes attributes;
/* flag to indicate whether arena is active or not */
bool is_active;
/* linked list of tasks that are attached to this arena. Points to
* an Arena_Per_task structure embedded in a Thread_Control. */
rtems_chain_control attached_tasks;
} Arena_Control;
//The TCB would have a pointer to an array of the following struct.
typedef struct {
/* node of the task in attached_arena->attached_tasks list */
rtems_chain_node node;
/* pointer to a specific Arena which this task is attached to. */
Arena_Control *attached_arena;
} Arena_Per_Thread;
Arena_Status _Arena_Initialize( ) ;
/* This function will apply setup fields in Arena_Control
* and apply memory protection attributes using libmmu API.
* Also initializing an empty list of attached_tasks. */
Arena_Control *_Arena_Create(
void *start_address,
size_t size,
arena_attributes attributes
);
/* This function returns attributes of a given Arena */
arena_attributes _Arena_Get_attributes(
Arena_Control *arena
);
/* This function returns the starting address of that Arena in memory */
void *_Arena_Get_start_address(
Arena_Control *arena
);
/* This function returns the size of the Arena */
size_t _Arena_Get_size(
Arena_Control *arena
);
/* This function update the current attributes for
* an Arena with new_attributes , could be used for deleting protection */
Arena_Status _Arena_Update_attributes(
Arena_Control *arena,
arena_attributes new_attributes
);
/* This function create a link between an Arena and a task by adding
* a pointer to ACB in TCB’s attached arenas list and By adding a pointer
* to TCB in ACB by adding a pointer to attached task list */
Arena_Status _Arena_Attach(
Arena_Control *arena,
Thread_Control *task
);
/* This function cut the link between a given Arena one of its attached
tasks */
Arena_Status _Arena_Detach(
Arena_Control arena,
Thread_Control *task
);
/* This function mark an Arena as Deactivated when the current
* task use it and a context switch happens, so that the next
* task can not access this deactivated Arena. */
Arena_Status _Arena_Deactivate(
Arena_Control *arena
);
/* This function mark an Arena as Activated when
* a context switch happens, and the next task
* is attached to that Arena */
Arena_Status _Arena_Activate(
Arena_Control *arena
);
/* This function delete the Arena and update the Arena
* list in every attached task TCB by deleting the ACB entry
* of the deleted Arena */
Arena_Status _Arena_Delete(
Arena_Control *arena
);
#ifdef __cplusplus
}
#endif
#endif
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20120529/f9fc7657/attachment.html>
More information about the devel
mailing list