summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-04-11 10:34:01 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-04-11 11:17:46 +0200
commit73839e9adea917b229137344afa0ad2b84d8c6ab (patch)
treedb63e3bea62b8aaa17bd58af71ddbe0b6ea0104a
parentnios2: API change (diff)
downloadrtems-73839e9adea917b229137344afa0ad2b84d8c6ab.tar.bz2
nios2: New functions
Add o _Nios2_MPU_Get_region_descriptor(), and o _Nios2_MPU_Set_region_registers().
-rw-r--r--cpukit/score/cpu/nios2/nios2-mpu-descriptor.c32
-rw-r--r--cpukit/score/cpu/nios2/rtems/score/nios2-utility.h17
2 files changed, 49 insertions, 0 deletions
diff --git a/cpukit/score/cpu/nios2/nios2-mpu-descriptor.c b/cpukit/score/cpu/nios2/nios2-mpu-descriptor.c
index 2c5231340f..be680ffeb2 100644
--- a/cpukit/score/cpu/nios2/nios2-mpu-descriptor.c
+++ b/cpukit/score/cpu/nios2/nios2-mpu-descriptor.c
@@ -106,3 +106,35 @@ bool _Nios2_MPU_Setup_region_registers(
return ok;
}
+
+bool _Nios2_MPU_Get_region_descriptor(
+ const Nios2_MPU_Configuration *config,
+ int index,
+ bool data,
+ Nios2_MPU_Region_descriptor *desc
+)
+{
+ bool ok = _Nios2_MPU_Is_valid_index( config, index, data );
+
+ if ( ok ) {
+ uint32_t mpubase;
+ uint32_t mpuacc;
+
+ _Nios2_MPU_Get_region_registers( index, data, &mpubase, &mpuacc );
+
+ desc->index = index;
+ desc->base = (void *) (mpubase & NIOS2_MPUBASE_BASE_MASK);
+ if ( config->region_uses_limit ) {
+ desc->end = (void *) (mpuacc & NIOS2_MPUACC_LIMIT_MASK);
+ } else {
+ desc->end = (void *) ((mpuacc & NIOS2_MPUACC_MASK_MASK) + 1);
+ }
+ desc->perm = (mpuacc & NIOS2_MPUACC_PERM_MASK) >> NIOS2_MPUACC_PERM_OFFSET;
+ desc->data = data;
+ desc->cacheable = (mpuacc & NIOS2_MPUACC_C) != 0;
+ desc->read = (mpuacc & NIOS2_MPUACC_RD) != 0;
+ desc->write = (mpuacc & NIOS2_MPUACC_WR) != 0;
+ }
+
+ return ok;
+}
diff --git a/cpukit/score/cpu/nios2/rtems/score/nios2-utility.h b/cpukit/score/cpu/nios2/rtems/score/nios2-utility.h
index 9702feb060..bab411b245 100644
--- a/cpukit/score/cpu/nios2/rtems/score/nios2-utility.h
+++ b/cpukit/score/cpu/nios2/rtems/score/nios2-utility.h
@@ -401,6 +401,13 @@ bool _Nios2_MPU_Setup_region_registers(
uint32_t *mpuacc
);
+bool _Nios2_MPU_Get_region_descriptor(
+ const Nios2_MPU_Configuration *config,
+ int index,
+ bool data,
+ Nios2_MPU_Region_descriptor *desc
+);
+
/**
* @brief Seaches the region table part for a disabled region.
*
@@ -451,6 +458,16 @@ static inline void _Nios2_MPU_Get_region_registers(
*mpuacc = _Nios2_Get_ctlreg_mpuacc();
}
+static inline void _Nios2_MPU_Set_region_registers(
+ uint32_t mpubase,
+ uint32_t mpuacc
+)
+{
+ _Nios2_Set_ctlreg_mpubase( mpubase );
+ _Nios2_Set_ctlreg_mpuacc( mpuacc );
+ _Nios2_Flush_pipeline();
+}
+
static inline void _Nios2_MPU_Enable( void )
{
uint32_t config = _Nios2_Get_ctlreg_config();