diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-04-11 10:34:01 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-04-11 11:24:41 +0200 |
commit | 8eb559d316ee9a1839268b9b6ffe9e4ac40d250b (patch) | |
tree | 3548d33922dc7830c0157b388c70e407a2a79fe7 /cpukit/score/cpu/nios2/nios2-mpu-descriptor.c | |
parent | 2d0ca00003d5093f8811fbe9be7ef331d23b6aa2 (diff) |
nios2: New functions
Add
o _Nios2_MPU_Get_region_descriptor(), and
o _Nios2_MPU_Set_region_registers().
Diffstat (limited to 'cpukit/score/cpu/nios2/nios2-mpu-descriptor.c')
-rw-r--r-- | cpukit/score/cpu/nios2/nios2-mpu-descriptor.c | 32 |
1 files changed, 32 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; +} |