@@ -239,8 +239,8 @@ StackType_t * pxPortInitialiseStack(
239239 /* Fill the System Call Stack with known values for debugging. */
240240 for ( ulStackIndex = 0x0 ; ulStackIndex < configSYSTEM_CALL_STACK_SIZE ; ulStackIndex ++ )
241241 {
242- xMPUSettings -> xSystemCallStackInfo . ulSystemCallStackBuffer [ ulStackIndex ] =
243- 0x575B | ulStackIndex ;
242+ xMPUSettings -> xSystemCallStackInfo
243+ . ulSystemCallStackBuffer [ ulStackIndex ] = 0x575B | ulStackIndex ;
244244 }
245245
246246 /* Return the address where the context of this task should be restored from*/
@@ -260,8 +260,8 @@ PRIVILEGED_FUNCTION static uint32_t prvGetMPURegionSizeSetting(
260260 uint32_t ulActualSizeInBytes
261261);
262262
263- static uint32_t prvGetMPURegionSizeSetting ( uint32_t ulActualSizeInBytes
264- ) /* PRIVILEGED_FUNCTION */
263+ static uint32_t prvGetMPURegionSizeSetting ( uint32_t ulActualSizeInBytes ) /* PRIVILEGED_FUNCTION
264+ */
265265{
266266 uint32_t ulRegionSize , ulReturnValue = 4U ;
267267
@@ -328,13 +328,13 @@ void vPortStoreTaskMPUSettings(
328328 /* No MPU regions are specified so allow access to all of the RAM. */
329329 xMPUSettings -> xRegion [ 0 ].ulRegionBaseAddress = ( uint32_t
330330 ) __SRAM_segment_start__ ;
331- xMPUSettings -> xRegion [ 0 ].ulRegionSize =
332- ( prvGetMPURegionSizeSetting (
333- ( uint32_t ) __SRAM_segment_end__ - ( uint32_t ) __SRAM_segment_start__
334- ) ) |
335- portMPU_REGION_ENABLE ;
336- xMPUSettings -> xRegion [ 0 ].ulRegionAttribute =
337- portMPU_PRIV_RW_USER_RW_NOEXEC | portMPU_NORMAL_OIWTNOWA_SHARED ;
331+ xMPUSettings -> xRegion [ 0 ].ulRegionSize = ( prvGetMPURegionSizeSetting (
332+ ( uint32_t ) __SRAM_segment_end__ -
333+ ( uint32_t ) __SRAM_segment_start__
334+ ) ) |
335+ portMPU_REGION_ENABLE ;
336+ xMPUSettings -> xRegion [ 0 ].ulRegionAttribute = portMPU_PRIV_RW_USER_RW_NOEXEC |
337+ portMPU_NORMAL_OIWTNOWA_SHARED ;
338338
339339 /* Invalidate all other regions. */
340340 for ( ul = 1 ; ul <= portNUM_CONFIGURABLE_REGIONS ; ul ++ )
@@ -356,10 +356,10 @@ void vPortStoreTaskMPUSettings(
356356 uint32_t ulSmallestRegion = prvGetMPURegionSizeSetting ( ulStackDepth * 0x4 );
357357 /* Define the region that allows access to the stack. */
358358 xMPUSettings -> xRegion [ 0 ].ulRegionBaseAddress = ( uint32_t ) pxBottomOfStack ;
359- xMPUSettings -> xRegion [ 0 ].ulRegionSize =
360- ulSmallestRegion | portMPU_REGION_ENABLE ;
361- xMPUSettings -> xRegion [ 0 ].ulRegionAttribute =
362- portMPU_PRIV_RW_USER_RW_NOEXEC | portMPU_NORMAL_OIWTNOWA_SHARED ;
359+ xMPUSettings -> xRegion [ 0 ].ulRegionSize = ulSmallestRegion |
360+ portMPU_REGION_ENABLE ;
361+ xMPUSettings -> xRegion [ 0 ].ulRegionAttribute = portMPU_PRIV_RW_USER_RW_NOEXEC |
362+ portMPU_NORMAL_OIWTNOWA_SHARED ;
363363 }
364364
365365 for ( ul = 1 ; ul <= portNUM_CONFIGURABLE_REGIONS ; ul ++ )
@@ -369,13 +369,15 @@ void vPortStoreTaskMPUSettings(
369369 /* Translate the generic region definition contained in
370370 * xRegions into the R4 specific MPU settings that are then
371371 * stored in xMPUSettings. */
372- xMPUSettings -> xRegion [ ul ].ulRegionBaseAddress =
373- ( uint32_t ) xRegions [ lIndex ].pvBaseAddress ;
374- xMPUSettings -> xRegion [ ul ].ulRegionSize =
375- prvGetMPURegionSizeSetting ( xRegions [ lIndex ].ulLengthInBytes ) |
376- portMPU_REGION_ENABLE ;
377- xMPUSettings -> xRegion [ ul ].ulRegionAttribute =
378- xRegions [ lIndex ].ulParameters ;
372+ xMPUSettings -> xRegion [ ul ]
373+ .ulRegionBaseAddress = ( uint32_t ) xRegions [ lIndex ].pvBaseAddress ;
374+ xMPUSettings -> xRegion [ ul ]
375+ .ulRegionSize = prvGetMPURegionSizeSetting (
376+ xRegions [ lIndex ].ulLengthInBytes
377+ ) |
378+ portMPU_REGION_ENABLE ;
379+ xMPUSettings -> xRegion [ ul ].ulRegionAttribute = xRegions [ lIndex ]
380+ .ulParameters ;
379381 }
380382 else
381383 {
@@ -513,10 +515,11 @@ PRIVILEGED_FUNCTION static void prvSetupDefaultMPU( void )
513515 * @ingroup MPU Control
514516 */
515517PRIVILEGED_FUNCTION static BaseType_t prvTaskCanAccessRegion (
516- const xMPU_REGION_REGISTERS * xTaskMPURegion ,
517- const uint32_t ulRegionStart ,
518- const uint32_t ulRegionLength ,
519- const uint32_t ulAccessRequested )
518+ const xMPU_REGION_REGISTERS * xTaskMPURegion ,
519+ const uint32_t ulRegionStart ,
520+ const uint32_t ulRegionLength ,
521+ const uint32_t ulAccessRequested
522+ )
520523{
521524 BaseType_t xAccessGranted ;
522525 uint32_t ulRegionEnd = ulRegionStart + ulRegionLength ;
@@ -525,13 +528,12 @@ PRIVILEGED_FUNCTION static BaseType_t prvTaskCanAccessRegion(
525528 uint32_t ulTaskRegionLength = 1 << ( ( xTaskMPURegion -> ulRegionSize >> 1 ) + 1U );
526529 // uint32_t ulTaskRegionLength = 2 << ( xTaskMPURegion->ulRegionSize >> 1 );
527530 uint32_t ulTaskRegionEnd = xTaskMPURegion -> ulRegionBaseAddress + ulTaskRegionLength ;
528- if ( ( ulRegionStart >= xTaskMPURegion -> ulRegionBaseAddress )
529- && ( ulRegionEnd <= ulTaskRegionEnd ) )
531+ if ( ( ulRegionStart >= xTaskMPURegion -> ulRegionBaseAddress ) &&
532+ ( ulRegionEnd <= ulTaskRegionEnd ) )
530533 {
531534 /* Unprivileged read is MPU Ctrl Access Bit Value bX1X */
532535 if ( ( tskMPU_READ_PERMISSION == ulAccessRequested ) &&
533- ( ( portMPU_PRIV_RW_USER_RO_NOEXEC )
534- & xTaskMPURegion -> ulRegionAttribute ) )
536+ ( ( portMPU_PRIV_RW_USER_RO_NOEXEC ) & xTaskMPURegion -> ulRegionAttribute ) )
535537 {
536538 xAccessGranted = pdTRUE ;
537539 }
@@ -559,10 +561,11 @@ PRIVILEGED_FUNCTION static BaseType_t prvTaskCanAccessRegion(
559561
560562/* ------------------------------------------------------------------------- */
561563
562-
563- BaseType_t xPortIsAuthorizedToAccessBuffer ( const void * pvBuffer ,
564- uint32_t ulBufferLength ,
565- uint32_t ulAccessRequested ) /* PRIVILEGED_FUNCTION */
564+ BaseType_t xPortIsAuthorizedToAccessBuffer (
565+ const void * pvBuffer ,
566+ uint32_t ulBufferLength ,
567+ uint32_t ulAccessRequested
568+ ) /* PRIVILEGED_FUNCTION */
566569
567570{
568571 BaseType_t xAccessGranted ;
@@ -595,18 +598,19 @@ BaseType_t xPortIsAuthorizedToAccessBuffer( const void * pvBuffer,
595598 do
596599 {
597600 xTaskMPURegion = & ( xTaskMPUSettings -> xRegion [ ulRegionIndex ++ ] );
598- xAccessGranted = prvTaskCanAccessRegion ( xTaskMPURegion ,
599- ( uint32_t ) pvBuffer ,
600- ulBufferLength ,
601- ulAccessRequested );
601+ xAccessGranted = prvTaskCanAccessRegion (
602+ xTaskMPURegion ,
603+ ( uint32_t ) pvBuffer ,
604+ ulBufferLength ,
605+ ulAccessRequested
606+ );
602607 } while ( ( pdFALSE == xAccessGranted ) &&
603608 ( ulRegionIndex < portTOTAL_NUM_REGIONS_IN_TCB ) );
604609 }
605610 }
606611 return xAccessGranted ;
607612}
608613
609-
610614/*---------------------------------------------------------------------------*/
611615
612616/** @brief Determine if the FreeRTOS Task was created as a privileged task
@@ -669,71 +673,86 @@ BaseType_t xPortStartScheduler( void )
669673
670674#if ( configENABLE_ACCESS_CONTROL_LIST == 1 )
671675
672- BaseType_t xPortIsAuthorizedToAccessKernelObject ( int32_t lInternalIndexOfKernelObject ) /* PRIVILEGED_FUNCTION */
673- {
674- uint32_t ulAccessControlListEntryIndex , ulAccessControlListEntryBit ;
675- BaseType_t xAccessGranted = pdFALSE ;
676- const xMPU_SETTINGS * xTaskMpuSettings ;
676+ BaseType_t xPortIsAuthorizedToAccessKernelObject ( int32_t lInternalIndexOfKernelObject
677+ ) /* PRIVILEGED_FUNCTION */
678+ {
679+ uint32_t ulAccessControlListEntryIndex , ulAccessControlListEntryBit ;
680+ BaseType_t xAccessGranted = pdFALSE ;
681+ const xMPU_SETTINGS * xTaskMpuSettings ;
682+
683+ if ( xSchedulerRunning == pdFALSE )
684+ {
685+ /* Grant access to all the kernel objects before the scheduler
686+ * is started. It is necessary because there is no task running
687+ * yet and therefore, we cannot use the permissions of any
688+ * task. */
689+ xAccessGranted = pdTRUE ;
690+ }
691+ else
692+ {
693+ xTaskMpuSettings = xTaskGetMPUSettings ( NULL ); /* Calling task's MPU settings. */
677694
678- if ( xSchedulerRunning == pdFALSE )
695+ ulAccessControlListEntryIndex =
696+ ( ( uint32_t ) lInternalIndexOfKernelObject / portACL_ENTRY_SIZE_BITS );
697+ ulAccessControlListEntryBit =
698+ ( ( uint32_t ) lInternalIndexOfKernelObject % portACL_ENTRY_SIZE_BITS );
699+
700+ if ( ( xTaskMpuSettings -> ulTaskFlags & portTASK_IS_PRIVILEGED_FLAG ) ==
701+ portTASK_IS_PRIVILEGED_FLAG )
702+ {
703+ xAccessGranted = pdTRUE ;
704+ }
705+ else
706+ {
707+ if ( ( xTaskMpuSettings -> ulAccessControlList [ ulAccessControlListEntryIndex ] &
708+ ( 1U << ulAccessControlListEntryBit ) ) != 0 )
679709 {
680- /* Grant access to all the kernel objects before the scheduler
681- * is started. It is necessary because there is no task running
682- * yet and therefore, we cannot use the permissions of any
683- * task. */
684710 xAccessGranted = pdTRUE ;
685711 }
686- else
687- {
688- xTaskMpuSettings = xTaskGetMPUSettings ( NULL ); /* Calling task's MPU settings. */
689-
690- ulAccessControlListEntryIndex = ( ( uint32_t ) lInternalIndexOfKernelObject / portACL_ENTRY_SIZE_BITS );
691- ulAccessControlListEntryBit = ( ( uint32_t ) lInternalIndexOfKernelObject % portACL_ENTRY_SIZE_BITS );
692-
693- if ( ( xTaskMpuSettings -> ulTaskFlags & portTASK_IS_PRIVILEGED_FLAG ) == portTASK_IS_PRIVILEGED_FLAG )
694- {
695- xAccessGranted = pdTRUE ;
696- }
697- else
698- {
699- if ( ( xTaskMpuSettings -> ulAccessControlList [ ulAccessControlListEntryIndex ] & ( 1U << ulAccessControlListEntryBit ) ) != 0 )
700- {
701- xAccessGranted = pdTRUE ;
702- }
703- }
704- }
705-
706- return xAccessGranted ;
707712 }
713+ }
708714
715+ return xAccessGranted ;
716+ }
709717
710- void vPortGrantAccessToKernelObject ( TaskHandle_t xInternalTaskHandle ,
711- int32_t lInternalIndexOfKernelObject ) /* PRIVILEGED_FUNCTION */
712- {
713- uint32_t ulAccessControlListEntryIndex , ulAccessControlListEntryBit ;
714- xMPU_SETTINGS * xTaskMpuSettings ;
718+ void vPortGrantAccessToKernelObject (
719+ TaskHandle_t xInternalTaskHandle ,
720+ int32_t lInternalIndexOfKernelObject
721+ ) /* PRIVILEGED_FUNCTION */
722+ {
723+ uint32_t ulAccessControlListEntryIndex , ulAccessControlListEntryBit ;
724+ xMPU_SETTINGS * xTaskMpuSettings ;
715725
716- ulAccessControlListEntryIndex = ( ( uint32_t ) lInternalIndexOfKernelObject / portACL_ENTRY_SIZE_BITS );
717- ulAccessControlListEntryBit = ( ( uint32_t ) lInternalIndexOfKernelObject % portACL_ENTRY_SIZE_BITS );
726+ ulAccessControlListEntryIndex =
727+ ( ( uint32_t ) lInternalIndexOfKernelObject / portACL_ENTRY_SIZE_BITS );
728+ ulAccessControlListEntryBit =
729+ ( ( uint32_t ) lInternalIndexOfKernelObject % portACL_ENTRY_SIZE_BITS );
718730
719- xTaskMpuSettings = xTaskGetMPUSettings ( xInternalTaskHandle );
731+ xTaskMpuSettings = xTaskGetMPUSettings ( xInternalTaskHandle );
720732
721- xTaskMpuSettings -> ulAccessControlList [ ulAccessControlListEntryIndex ] |= ( 1U << ulAccessControlListEntryBit );
722- }
733+ xTaskMpuSettings -> ulAccessControlList
734+ [ ulAccessControlListEntryIndex ] |= ( 1U << ulAccessControlListEntryBit );
735+ }
723736
724- void vPortRevokeAccessToKernelObject ( TaskHandle_t xInternalTaskHandle ,
725- int32_t lInternalIndexOfKernelObject ) /* PRIVILEGED_FUNCTION */
726- {
727- uint32_t ulAccessControlListEntryIndex , ulAccessControlListEntryBit ;
728- xMPU_SETTINGS * xTaskMpuSettings ;
737+ void vPortRevokeAccessToKernelObject (
738+ TaskHandle_t xInternalTaskHandle ,
739+ int32_t lInternalIndexOfKernelObject
740+ ) /* PRIVILEGED_FUNCTION */
741+ {
742+ uint32_t ulAccessControlListEntryIndex , ulAccessControlListEntryBit ;
743+ xMPU_SETTINGS * xTaskMpuSettings ;
729744
730- ulAccessControlListEntryIndex = ( ( uint32_t ) lInternalIndexOfKernelObject / portACL_ENTRY_SIZE_BITS );
731- ulAccessControlListEntryBit = ( ( uint32_t ) lInternalIndexOfKernelObject % portACL_ENTRY_SIZE_BITS );
745+ ulAccessControlListEntryIndex =
746+ ( ( uint32_t ) lInternalIndexOfKernelObject / portACL_ENTRY_SIZE_BITS );
747+ ulAccessControlListEntryBit =
748+ ( ( uint32_t ) lInternalIndexOfKernelObject % portACL_ENTRY_SIZE_BITS );
732749
733- xTaskMpuSettings = xTaskGetMPUSettings ( xInternalTaskHandle );
750+ xTaskMpuSettings = xTaskGetMPUSettings ( xInternalTaskHandle );
734751
735- xTaskMpuSettings -> ulAccessControlList [ ulAccessControlListEntryIndex ] &= ~( 1U << ulAccessControlListEntryBit );
736- }
752+ xTaskMpuSettings -> ulAccessControlList [ ulAccessControlListEntryIndex ] &= ~(
753+ 1U << ulAccessControlListEntryBit
754+ );
755+ }
737756
738757#else
739758
0 commit comments