mirror of
				https://github.com/FreeRTOS/FreeRTOS-Kernel.git
				synced 2025-11-04 11:09:01 +01:00 
			
		
		
		
	Fix MISRA C 2012 rule 8.6 errors (#862)
* Fix MISRA C 2012 rule 8.6 errors * Add suppression for hook function Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com> --------- Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com> Co-authored-by: Ubuntu <ubuntu@ip-172-31-34-245.ap-northeast-1.compute.internal> Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com> Co-authored-by: Gaurav Aggarwal <aggarg@amazon.com>
This commit is contained in:
		
							parent
							
								
									55094e2ddf
								
							
						
					
					
						commit
						51437bf943
					
				
							
								
								
									
										13
									
								
								MISRA.md
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								MISRA.md
									
									
									
									
									
								
							@ -21,7 +21,7 @@ grep 'MISRA Ref 8.4.1' . -rI
 | 
			
		||||
#### Rule 8.4
 | 
			
		||||
 | 
			
		||||
MISRA C:2012 Rule 8.4: A compatible declaration shall be visible when an
 | 
			
		||||
        object or function with external linkage is defined.
 | 
			
		||||
object or function with external linkage is defined.
 | 
			
		||||
 | 
			
		||||
_Ref 8.4.1_
 | 
			
		||||
 - pxCurrentTCB(s) is defined with external linkage but it is only referenced
 | 
			
		||||
@ -34,6 +34,17 @@ _Ref 8.4.2_
 | 
			
		||||
   kernel unit tests. It is not meant to be directly accessed by the application
 | 
			
		||||
   and therefore, not declared in a header file.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#### Rule 8.6
 | 
			
		||||
 | 
			
		||||
MISRA C:2012 Rule 8.6: An identifier with external linkage shall have exactly
 | 
			
		||||
one external definition.
 | 
			
		||||
 | 
			
		||||
_Ref 8.6.1_
 | 
			
		||||
 - This rule prohibits an identifier with external linkage to have multiple
 | 
			
		||||
   definitions or no definition. FreeRTOS hook functions are implemented in
 | 
			
		||||
   the application and therefore, have no definition in the Kernel code.
 | 
			
		||||
 | 
			
		||||
#### Rule 11.3
 | 
			
		||||
 | 
			
		||||
MISRA C:2012 Rule 11.3: A cast shall not be performed between a pointer to
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										103
									
								
								include/queue.h
									
									
									
									
									
								
							
							
						
						
									
										103
									
								
								include/queue.h
									
									
									
									
									
								
							@ -1455,6 +1455,8 @@ BaseType_t xQueueIsQueueEmptyFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FU
 | 
			
		||||
BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
 | 
			
		||||
UBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
#if ( configUSE_CO_ROUTINES == 1 )
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The functions defined above are for passing data to and from tasks.  The
 | 
			
		||||
 * functions below are the equivalents for passing data to and from
 | 
			
		||||
@ -1464,18 +1466,20 @@ UBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue ) PRIVILEG
 | 
			
		||||
 * should not be called directly from application code.  Instead use the macro
 | 
			
		||||
 * wrappers defined within croutine.h.
 | 
			
		||||
 */
 | 
			
		||||
BaseType_t xQueueCRSendFromISR( QueueHandle_t xQueue,
 | 
			
		||||
                                const void * pvItemToQueue,
 | 
			
		||||
                                BaseType_t xCoRoutinePreviouslyWoken );
 | 
			
		||||
BaseType_t xQueueCRReceiveFromISR( QueueHandle_t xQueue,
 | 
			
		||||
                                   void * pvBuffer,
 | 
			
		||||
                                   BaseType_t * pxTaskWoken );
 | 
			
		||||
BaseType_t xQueueCRSend( QueueHandle_t xQueue,
 | 
			
		||||
                         const void * pvItemToQueue,
 | 
			
		||||
                         TickType_t xTicksToWait );
 | 
			
		||||
BaseType_t xQueueCRReceive( QueueHandle_t xQueue,
 | 
			
		||||
                            void * pvBuffer,
 | 
			
		||||
                            TickType_t xTicksToWait );
 | 
			
		||||
    BaseType_t xQueueCRSendFromISR( QueueHandle_t xQueue,
 | 
			
		||||
                                    const void * pvItemToQueue,
 | 
			
		||||
                                    BaseType_t xCoRoutinePreviouslyWoken );
 | 
			
		||||
    BaseType_t xQueueCRReceiveFromISR( QueueHandle_t xQueue,
 | 
			
		||||
                                       void * pvBuffer,
 | 
			
		||||
                                       BaseType_t * pxTaskWoken );
 | 
			
		||||
    BaseType_t xQueueCRSend( QueueHandle_t xQueue,
 | 
			
		||||
                             const void * pvItemToQueue,
 | 
			
		||||
                             TickType_t xTicksToWait );
 | 
			
		||||
    BaseType_t xQueueCRReceive( QueueHandle_t xQueue,
 | 
			
		||||
                                void * pvBuffer,
 | 
			
		||||
                                TickType_t xTicksToWait );
 | 
			
		||||
 | 
			
		||||
#endif /* if ( configUSE_CO_ROUTINES == 1 ) */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * For internal use only.  Use xSemaphoreCreateMutex(),
 | 
			
		||||
@ -1483,17 +1487,30 @@ BaseType_t xQueueCRReceive( QueueHandle_t xQueue,
 | 
			
		||||
 * these functions directly.
 | 
			
		||||
 */
 | 
			
		||||
QueueHandle_t xQueueCreateMutex( const uint8_t ucQueueType ) PRIVILEGED_FUNCTION;
 | 
			
		||||
QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType,
 | 
			
		||||
                                       StaticQueue_t * pxStaticQueue ) PRIVILEGED_FUNCTION;
 | 
			
		||||
QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount,
 | 
			
		||||
                                             const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION;
 | 
			
		||||
QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount,
 | 
			
		||||
                                                   const UBaseType_t uxInitialCount,
 | 
			
		||||
                                                   StaticQueue_t * pxStaticQueue ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
#if ( configSUPPORT_STATIC_ALLOCATION == 1 )
 | 
			
		||||
    QueueHandle_t xQueueCreateMutexStatic( const uint8_t ucQueueType,
 | 
			
		||||
                                           StaticQueue_t * pxStaticQueue ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if ( configUSE_COUNTING_SEMAPHORES == 1 )
 | 
			
		||||
    QueueHandle_t xQueueCreateCountingSemaphore( const UBaseType_t uxMaxCount,
 | 
			
		||||
                                                 const UBaseType_t uxInitialCount ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if ( ( configUSE_COUNTING_SEMAPHORES == 1 ) && ( configSUPPORT_STATIC_ALLOCATION == 1 ) )
 | 
			
		||||
    QueueHandle_t xQueueCreateCountingSemaphoreStatic( const UBaseType_t uxMaxCount,
 | 
			
		||||
                                                       const UBaseType_t uxInitialCount,
 | 
			
		||||
                                                       StaticQueue_t * pxStaticQueue ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
BaseType_t xQueueSemaphoreTake( QueueHandle_t xQueue,
 | 
			
		||||
                                TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
 | 
			
		||||
TaskHandle_t xQueueGetMutexHolder( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION;
 | 
			
		||||
TaskHandle_t xQueueGetMutexHolderFromISR( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
#if ( ( configUSE_MUTEXES == 1 ) && ( INCLUDE_xSemaphoreGetMutexHolder == 1 ) )
 | 
			
		||||
    TaskHandle_t xQueueGetMutexHolder( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION;
 | 
			
		||||
    TaskHandle_t xQueueGetMutexHolderFromISR( QueueHandle_t xSemaphore ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * For internal use only.  Use xSemaphoreTakeMutexRecursive() or
 | 
			
		||||
@ -1653,7 +1670,9 @@ BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 * @return If the queue set is created successfully then a handle to the created
 | 
			
		||||
 * queue set is returned.  Otherwise NULL is returned.
 | 
			
		||||
 */
 | 
			
		||||
QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( ( configUSE_QUEUE_SETS == 1 ) && ( configSUPPORT_DYNAMIC_ALLOCATION == 1 ) )
 | 
			
		||||
    QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Adds a queue or semaphore to a queue set that was previously created by a
 | 
			
		||||
@ -1677,8 +1696,10 @@ QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength ) PRIVILE
 | 
			
		||||
 * queue set because it is already a member of a different queue set then pdFAIL
 | 
			
		||||
 * is returned.
 | 
			
		||||
 */
 | 
			
		||||
BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore,
 | 
			
		||||
                           QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( configUSE_QUEUE_SETS == 1 )
 | 
			
		||||
    BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore,
 | 
			
		||||
                               QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Removes a queue or semaphore from a queue set.  A queue or semaphore can only
 | 
			
		||||
@ -1697,8 +1718,10 @@ BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore,
 | 
			
		||||
 * then pdPASS is returned.  If the queue was not in the queue set, or the
 | 
			
		||||
 * queue (or semaphore) was not empty, then pdFAIL is returned.
 | 
			
		||||
 */
 | 
			
		||||
BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore,
 | 
			
		||||
                                QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( configUSE_QUEUE_SETS == 1 )
 | 
			
		||||
    BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore,
 | 
			
		||||
                                    QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * xQueueSelectFromSet() selects from the members of a queue set a queue or
 | 
			
		||||
@ -1734,13 +1757,17 @@ BaseType_t xQueueRemoveFromSet( QueueSetMemberHandle_t xQueueOrSemaphore,
 | 
			
		||||
 * in the queue set that is available, or NULL if no such queue or semaphore
 | 
			
		||||
 * exists before before the specified block time expires.
 | 
			
		||||
 */
 | 
			
		||||
QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet,
 | 
			
		||||
                                            const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( configUSE_QUEUE_SETS == 1 )
 | 
			
		||||
    QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet,
 | 
			
		||||
                                                const TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * A version of xQueueSelectFromSet() that can be used from an ISR.
 | 
			
		||||
 */
 | 
			
		||||
QueueSetMemberHandle_t xQueueSelectFromSetFromISR( QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( configUSE_QUEUE_SETS == 1 )
 | 
			
		||||
    QueueSetMemberHandle_t xQueueSelectFromSetFromISR( QueueSetHandle_t xQueueSet ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* Not public API functions. */
 | 
			
		||||
void vQueueWaitForMessageRestricted( QueueHandle_t xQueue,
 | 
			
		||||
@ -1748,10 +1775,20 @@ void vQueueWaitForMessageRestricted( QueueHandle_t xQueue,
 | 
			
		||||
                                     const BaseType_t xWaitIndefinitely ) PRIVILEGED_FUNCTION;
 | 
			
		||||
BaseType_t xQueueGenericReset( QueueHandle_t xQueue,
 | 
			
		||||
                               BaseType_t xNewQueue ) PRIVILEGED_FUNCTION;
 | 
			
		||||
void vQueueSetQueueNumber( QueueHandle_t xQueue,
 | 
			
		||||
                           UBaseType_t uxQueueNumber ) PRIVILEGED_FUNCTION;
 | 
			
		||||
UBaseType_t uxQueueGetQueueNumber( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
 | 
			
		||||
uint8_t ucQueueGetQueueType( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
#if ( configUSE_TRACE_FACILITY == 1 )
 | 
			
		||||
    void vQueueSetQueueNumber( QueueHandle_t xQueue,
 | 
			
		||||
                               UBaseType_t uxQueueNumber ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if ( configUSE_TRACE_FACILITY == 1 )
 | 
			
		||||
    UBaseType_t uxQueueGetQueueNumber( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if ( configUSE_TRACE_FACILITY == 1 )
 | 
			
		||||
    uint8_t ucQueueGetQueueType( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
UBaseType_t uxQueueGetQueueItemSize( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
 | 
			
		||||
UBaseType_t uxQueueGetQueueLength( QueueHandle_t xQueue ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -918,14 +918,15 @@ StreamBufferHandle_t xStreamBufferGenericCreate( size_t xBufferSizeBytes,
 | 
			
		||||
                                                 StreamBufferCallbackFunction_t pxSendCompletedCallback,
 | 
			
		||||
                                                 StreamBufferCallbackFunction_t pxReceiveCompletedCallback ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
StreamBufferHandle_t xStreamBufferGenericCreateStatic( size_t xBufferSizeBytes,
 | 
			
		||||
                                                       size_t xTriggerLevelBytes,
 | 
			
		||||
                                                       BaseType_t xIsMessageBuffer,
 | 
			
		||||
                                                       uint8_t * const pucStreamBufferStorageArea,
 | 
			
		||||
                                                       StaticStreamBuffer_t * const pxStaticStreamBuffer,
 | 
			
		||||
                                                       StreamBufferCallbackFunction_t pxSendCompletedCallback,
 | 
			
		||||
                                                       StreamBufferCallbackFunction_t pxReceiveCompletedCallback ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( configSUPPORT_STATIC_ALLOCATION == 1 )
 | 
			
		||||
    StreamBufferHandle_t xStreamBufferGenericCreateStatic( size_t xBufferSizeBytes,
 | 
			
		||||
                                                           size_t xTriggerLevelBytes,
 | 
			
		||||
                                                           BaseType_t xIsMessageBuffer,
 | 
			
		||||
                                                           uint8_t * const pucStreamBufferStorageArea,
 | 
			
		||||
                                                           StaticStreamBuffer_t * const pxStaticStreamBuffer,
 | 
			
		||||
                                                           StreamBufferCallbackFunction_t pxSendCompletedCallback,
 | 
			
		||||
                                                           StreamBufferCallbackFunction_t pxReceiveCompletedCallback ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
size_t xStreamBufferNextMessageLengthBytes( StreamBufferHandle_t xStreamBuffer ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										136
									
								
								include/task.h
									
									
									
									
									
								
							
							
						
						
									
										136
									
								
								include/task.h
									
									
									
									
									
								
							@ -752,8 +752,10 @@ typedef enum
 | 
			
		||||
 * \defgroup vTaskAllocateMPURegions vTaskAllocateMPURegions
 | 
			
		||||
 * \ingroup Tasks
 | 
			
		||||
 */
 | 
			
		||||
void vTaskAllocateMPURegions( TaskHandle_t xTaskToModify,
 | 
			
		||||
                              const MemoryRegion_t * const pxRegions ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( portUSING_MPU_WRAPPERS == 1 )
 | 
			
		||||
    void vTaskAllocateMPURegions( TaskHandle_t xTaskToModify,
 | 
			
		||||
                                  const MemoryRegion_t * const pxRegions ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * task. h
 | 
			
		||||
@ -960,7 +962,9 @@ BaseType_t xTaskDelayUntil( TickType_t * const pxPreviousWakeTime,
 | 
			
		||||
 * \defgroup xTaskAbortDelay xTaskAbortDelay
 | 
			
		||||
 * \ingroup TaskCtrl
 | 
			
		||||
 */
 | 
			
		||||
BaseType_t xTaskAbortDelay( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( INCLUDE_xTaskAbortDelay == 1 )
 | 
			
		||||
    BaseType_t xTaskAbortDelay( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * task. h
 | 
			
		||||
@ -1070,7 +1074,9 @@ UBaseType_t uxTaskBasePriorityGetFromISR( const TaskHandle_t xTask ) PRIVILEGED_
 | 
			
		||||
 * state of the task might change between the function being called, and the
 | 
			
		||||
 * functions return value being tested by the calling task.
 | 
			
		||||
 */
 | 
			
		||||
eTaskState eTaskGetState( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( ( INCLUDE_eTaskGetState == 1 ) || ( configUSE_TRACE_FACILITY == 1 ) || ( INCLUDE_xTaskAbortDelay == 1 ) )
 | 
			
		||||
    eTaskState eTaskGetState( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * task. h
 | 
			
		||||
@ -1128,10 +1134,12 @@ eTaskState eTaskGetState( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 * \defgroup vTaskGetInfo vTaskGetInfo
 | 
			
		||||
 * \ingroup TaskCtrl
 | 
			
		||||
 */
 | 
			
		||||
void vTaskGetInfo( TaskHandle_t xTask,
 | 
			
		||||
                   TaskStatus_t * pxTaskStatus,
 | 
			
		||||
                   BaseType_t xGetFreeStackSpace,
 | 
			
		||||
                   eTaskState eState ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( configUSE_TRACE_FACILITY == 1 )
 | 
			
		||||
    void vTaskGetInfo( TaskHandle_t xTask,
 | 
			
		||||
                       TaskStatus_t * pxTaskStatus,
 | 
			
		||||
                       BaseType_t xGetFreeStackSpace,
 | 
			
		||||
                       eTaskState eState ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * task. h
 | 
			
		||||
@ -1755,7 +1763,9 @@ char * pcTaskGetName( TaskHandle_t xTaskToQuery ) PRIVILEGED_FUNCTION; /*lint !e
 | 
			
		||||
 * \defgroup pcTaskGetHandle pcTaskGetHandle
 | 
			
		||||
 * \ingroup TaskUtils
 | 
			
		||||
 */
 | 
			
		||||
TaskHandle_t xTaskGetHandle( const char * pcNameToQuery ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
 | 
			
		||||
#if ( INCLUDE_xTaskGetHandle == 1 )
 | 
			
		||||
    TaskHandle_t xTaskGetHandle( const char * pcNameToQuery ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * task. h
 | 
			
		||||
@ -1814,7 +1824,9 @@ TaskHandle_t xTaskGetHandle( const char * pcNameToQuery ) PRIVILEGED_FUNCTION; /
 | 
			
		||||
 * actual spaces on the stack rather than bytes) since the task referenced by
 | 
			
		||||
 * xTask was created.
 | 
			
		||||
 */
 | 
			
		||||
UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( INCLUDE_uxTaskGetStackHighWaterMark == 1 )
 | 
			
		||||
    UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * task.h
 | 
			
		||||
@ -1843,7 +1855,9 @@ UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask ) PRIVILEGED_FUNCTIO
 | 
			
		||||
 * actual spaces on the stack rather than bytes) since the task referenced by
 | 
			
		||||
 * xTask was created.
 | 
			
		||||
 */
 | 
			
		||||
configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( INCLUDE_uxTaskGetStackHighWaterMark2 == 1 )
 | 
			
		||||
    configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* When using trace macros it is sometimes necessary to include task.h before
 | 
			
		||||
 * FreeRTOS.h.  When this is done TaskHookFunction_t will not yet have been defined,
 | 
			
		||||
@ -1922,6 +1936,9 @@ configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) PRIVIL
 | 
			
		||||
 * @param xTask the task that just exceeded its stack boundaries.
 | 
			
		||||
 * @param pcTaskName A character string containing the name of the offending task.
 | 
			
		||||
 */
 | 
			
		||||
    /* MISRA Ref 8.6.1 [External linkage] */
 | 
			
		||||
    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-86 */
 | 
			
		||||
    /* coverity[misra_c_2012_rule_8_6_violation] */
 | 
			
		||||
    void vApplicationStackOverflowHook( TaskHandle_t xTask,
 | 
			
		||||
                                        char * pcTaskName );
 | 
			
		||||
 | 
			
		||||
@ -1940,6 +1957,9 @@ configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) PRIVIL
 | 
			
		||||
 * the overhead of a separate task.
 | 
			
		||||
 * NOTE: vApplicationIdleHook() MUST NOT, UNDER ANY CIRCUMSTANCES, CALL A FUNCTION THAT MIGHT BLOCK.
 | 
			
		||||
 */
 | 
			
		||||
    /* MISRA Ref 8.6.1 [External linkage] */
 | 
			
		||||
    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-86 */
 | 
			
		||||
    /* coverity[misra_c_2012_rule_8_6_violation] */
 | 
			
		||||
    void vApplicationIdleHook( void );
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@ -1955,6 +1975,9 @@ configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) PRIVIL
 | 
			
		||||
 *
 | 
			
		||||
 * This hook function is called in the system tick handler after any OS work is completed.
 | 
			
		||||
 */
 | 
			
		||||
    /* MISRA Ref 8.6.1 [External linkage] */
 | 
			
		||||
    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-86 */
 | 
			
		||||
    /* coverity[misra_c_2012_rule_8_6_violation] */
 | 
			
		||||
    void vApplicationTickHook( void ); /*lint !e526 Symbol not defined as it is an application callback. */
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
@ -2023,8 +2046,10 @@ configSTACK_DEPTH_TYPE uxTaskGetStackHighWaterMark2( TaskHandle_t xTask ) PRIVIL
 | 
			
		||||
 * wants.  The return value is the value returned by the task hook function
 | 
			
		||||
 * registered by the user.
 | 
			
		||||
 */
 | 
			
		||||
BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask,
 | 
			
		||||
                                         void * pvParameter ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( configUSE_APPLICATION_TASK_TAG == 1 )
 | 
			
		||||
    BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask,
 | 
			
		||||
                                             void * pvParameter ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * xTaskGetIdleTaskHandle() is only available if
 | 
			
		||||
@ -2043,10 +2068,13 @@ BaseType_t xTaskCallApplicationTaskHook( TaskHandle_t xTask,
 | 
			
		||||
 * idle task handle. Call xTaskGetIdleTaskHandleForCore() with xCoreID set to
 | 
			
		||||
 * 1,2 ... ( configNUMBER_OF_CORES - 1 ) to get the Passive idle task handles.
 | 
			
		||||
 */
 | 
			
		||||
#if ( configNUMBER_OF_CORES == 1 )
 | 
			
		||||
    TaskHandle_t xTaskGetIdleTaskHandle( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif /* #if ( configNUMBER_OF_CORES == 1 ) */
 | 
			
		||||
TaskHandle_t xTaskGetIdleTaskHandleForCore( BaseType_t xCoreID ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( INCLUDE_xTaskGetIdleTaskHandle == 1 )
 | 
			
		||||
    #if ( configNUMBER_OF_CORES == 1 )
 | 
			
		||||
        TaskHandle_t xTaskGetIdleTaskHandle( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
    #endif /* #if ( configNUMBER_OF_CORES == 1 ) */
 | 
			
		||||
 | 
			
		||||
    TaskHandle_t xTaskGetIdleTaskHandleForCore( BaseType_t xCoreID ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif /* #if ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * configUSE_TRACE_FACILITY must be defined as 1 in FreeRTOSConfig.h for
 | 
			
		||||
@ -2145,9 +2173,11 @@ TaskHandle_t xTaskGetIdleTaskHandleForCore( BaseType_t xCoreID ) PRIVILEGED_FUNC
 | 
			
		||||
 *  }
 | 
			
		||||
 *  @endcode
 | 
			
		||||
 */
 | 
			
		||||
UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray,
 | 
			
		||||
                                  const UBaseType_t uxArraySize,
 | 
			
		||||
                                  configRUN_TIME_COUNTER_TYPE * const pulTotalRunTime ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( configUSE_TRACE_FACILITY == 1 )
 | 
			
		||||
    UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray,
 | 
			
		||||
                                      const UBaseType_t uxArraySize,
 | 
			
		||||
                                      configRUN_TIME_COUNTER_TYPE * const pulTotalRunTime ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * task. h
 | 
			
		||||
@ -2200,8 +2230,10 @@ UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray,
 | 
			
		||||
 * \defgroup vTaskListTasks vTaskListTasks
 | 
			
		||||
 * \ingroup TaskUtils
 | 
			
		||||
 */
 | 
			
		||||
void vTaskListTasks( char * pcWriteBuffer,
 | 
			
		||||
                     size_t uxBufferLength ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( ( configUSE_TRACE_FACILITY == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) )
 | 
			
		||||
    void vTaskListTasks( char * pcWriteBuffer,
 | 
			
		||||
                         size_t uxBufferLength ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * task. h
 | 
			
		||||
@ -2315,8 +2347,10 @@ void vTaskListTasks( char * pcWriteBuffer,
 | 
			
		||||
 * \defgroup vTaskGetRunTimeStatistics vTaskGetRunTimeStatistics
 | 
			
		||||
 * \ingroup TaskUtils
 | 
			
		||||
 */
 | 
			
		||||
void vTaskGetRunTimeStatistics( char * pcWriteBuffer,
 | 
			
		||||
                                size_t uxBufferLength ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
 | 
			
		||||
#if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( configUSE_STATS_FORMATTING_FUNCTIONS > 0 ) && ( configUSE_TRACE_FACILITY == 1 ) )
 | 
			
		||||
    void vTaskGetRunTimeStatistics( char * pcWriteBuffer,
 | 
			
		||||
                                    size_t uxBufferLength ) PRIVILEGED_FUNCTION; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * task. h
 | 
			
		||||
@ -2413,8 +2447,10 @@ void vTaskGetRunTimeStatistics( char * pcWriteBuffer,
 | 
			
		||||
 * \defgroup ulTaskGetRunTimeCounter ulTaskGetRunTimeCounter
 | 
			
		||||
 * \ingroup TaskUtils
 | 
			
		||||
 */
 | 
			
		||||
configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimeCounter( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
 | 
			
		||||
configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimePercent( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( configGENERATE_RUN_TIME_STATS == 1 )
 | 
			
		||||
    configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimeCounter( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
 | 
			
		||||
    configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimePercent( const TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * task. h
 | 
			
		||||
@ -2453,8 +2489,10 @@ configRUN_TIME_COUNTER_TYPE ulTaskGetRunTimePercent( const TaskHandle_t xTask )
 | 
			
		||||
 * \defgroup ulTaskGetIdleRunTimeCounter ulTaskGetIdleRunTimeCounter
 | 
			
		||||
 * \ingroup TaskUtils
 | 
			
		||||
 */
 | 
			
		||||
configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimeCounter( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimePercent( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( ( configGENERATE_RUN_TIME_STATS == 1 ) && ( INCLUDE_xTaskGetIdleTaskHandle == 1 ) )
 | 
			
		||||
    configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimeCounter( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
    configRUN_TIME_COUNTER_TYPE ulTaskGetIdleRunTimePercent( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * task. h
 | 
			
		||||
@ -3536,7 +3574,9 @@ TaskHandle_t xTaskGetCurrentTaskHandle( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
/*
 | 
			
		||||
 * Return the handle of the task running on specified core.
 | 
			
		||||
 */
 | 
			
		||||
TaskHandle_t xTaskGetCurrentTaskHandleForCore( BaseType_t xCoreID ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( configNUMBER_OF_CORES > 1 )
 | 
			
		||||
    TaskHandle_t xTaskGetCurrentTaskHandleForCore( BaseType_t xCoreID ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Shortcut used by the queue implementation to prevent unnecessary call to
 | 
			
		||||
@ -3576,14 +3616,18 @@ void vTaskPriorityDisinheritAfterTimeout( TaskHandle_t const pxMutexHolder,
 | 
			
		||||
/*
 | 
			
		||||
 * Get the uxTaskNumber assigned to the task referenced by the xTask parameter.
 | 
			
		||||
 */
 | 
			
		||||
UBaseType_t uxTaskGetTaskNumber( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( configUSE_TRACE_FACILITY == 1 )
 | 
			
		||||
    UBaseType_t uxTaskGetTaskNumber( TaskHandle_t xTask ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Set the uxTaskNumber of the task referenced by the xTask parameter to
 | 
			
		||||
 * uxHandle.
 | 
			
		||||
 */
 | 
			
		||||
void vTaskSetTaskNumber( TaskHandle_t xTask,
 | 
			
		||||
                         const UBaseType_t uxHandle ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( configUSE_TRACE_FACILITY == 1 )
 | 
			
		||||
    void vTaskSetTaskNumber( TaskHandle_t xTask,
 | 
			
		||||
                             const UBaseType_t uxHandle ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Only available when configUSE_TICKLESS_IDLE is set to 1.
 | 
			
		||||
@ -3593,7 +3637,9 @@ void vTaskSetTaskNumber( TaskHandle_t xTask,
 | 
			
		||||
 * to date with the actual execution time by being skipped forward by a time
 | 
			
		||||
 * equal to the idle period.
 | 
			
		||||
 */
 | 
			
		||||
void vTaskStepTick( TickType_t xTicksToJump ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( configUSE_TICKLESS_IDLE != 0 )
 | 
			
		||||
    void vTaskStepTick( TickType_t xTicksToJump ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Only available when configUSE_TICKLESS_IDLE is set to 1.
 | 
			
		||||
@ -3609,7 +3655,9 @@ void vTaskStepTick( TickType_t xTicksToJump ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 * critical section between the timer being stopped and the sleep mode being
 | 
			
		||||
 * entered to ensure it is ok to proceed into the sleep mode.
 | 
			
		||||
 */
 | 
			
		||||
eSleepModeStatus eTaskConfirmSleepModeStatus( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( configUSE_TICKLESS_IDLE != 0 )
 | 
			
		||||
    eSleepModeStatus eTaskConfirmSleepModeStatus( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * For internal use only.  Increment the mutex held count when a mutex is
 | 
			
		||||
@ -3627,7 +3675,9 @@ void vTaskInternalSetTimeOutState( TimeOut_t * const pxTimeOut ) PRIVILEGED_FUNC
 | 
			
		||||
 * For internal use only. Same as portYIELD_WITHIN_API() in single core FreeRTOS.
 | 
			
		||||
 * For SMP this is not defined by the port.
 | 
			
		||||
 */
 | 
			
		||||
void vTaskYieldWithinAPI( void );
 | 
			
		||||
#if ( configNUMBER_OF_CORES > 1 )
 | 
			
		||||
    void vTaskYieldWithinAPI( void );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This function is only intended for use when implementing a port of the scheduler
 | 
			
		||||
@ -3637,7 +3687,9 @@ void vTaskYieldWithinAPI( void );
 | 
			
		||||
 * It should be used in the implementation of portENTER_CRITICAL if port is running a
 | 
			
		||||
 * multiple core FreeRTOS.
 | 
			
		||||
 */
 | 
			
		||||
void vTaskEnterCritical( void );
 | 
			
		||||
#if ( ( portCRITICAL_NESTING_IN_TCB == 1 ) || ( configNUMBER_OF_CORES > 1 ) )
 | 
			
		||||
    void vTaskEnterCritical( void );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This function is only intended for use when implementing a port of the scheduler
 | 
			
		||||
@ -3647,7 +3699,9 @@ void vTaskEnterCritical( void );
 | 
			
		||||
 * It should be used in the implementation of portEXIT_CRITICAL if port is running a
 | 
			
		||||
 * multiple core FreeRTOS.
 | 
			
		||||
 */
 | 
			
		||||
void vTaskExitCritical( void );
 | 
			
		||||
#if ( ( portCRITICAL_NESTING_IN_TCB == 1 ) || ( configNUMBER_OF_CORES > 1 ) )
 | 
			
		||||
    void vTaskExitCritical( void );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This function is only intended for use when implementing a port of the scheduler
 | 
			
		||||
@ -3655,7 +3709,9 @@ void vTaskExitCritical( void );
 | 
			
		||||
 * should be used in the implementation of portENTER_CRITICAL_FROM_ISR if port is
 | 
			
		||||
 * running a multiple core FreeRTOS.
 | 
			
		||||
 */
 | 
			
		||||
UBaseType_t vTaskEnterCriticalFromISR( void );
 | 
			
		||||
#if ( configNUMBER_OF_CORES > 1 )
 | 
			
		||||
    UBaseType_t vTaskEnterCriticalFromISR( void );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This function is only intended for use when implementing a port of the scheduler
 | 
			
		||||
@ -3663,7 +3719,9 @@ UBaseType_t vTaskEnterCriticalFromISR( void );
 | 
			
		||||
 * should be used in the implementation of portEXIT_CRITICAL_FROM_ISR if port is
 | 
			
		||||
 * running a multiple core FreeRTOS.
 | 
			
		||||
 */
 | 
			
		||||
void vTaskExitCriticalFromISR( UBaseType_t uxSavedInterruptStatus );
 | 
			
		||||
#if ( configNUMBER_OF_CORES > 1 )
 | 
			
		||||
    void vTaskExitCriticalFromISR( UBaseType_t uxSavedInterruptStatus );
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if ( portUSING_MPU_WRAPPERS == 1 )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1198,10 +1198,12 @@ TaskHandle_t xTimerGetTimerDaemonTaskHandle( void ) PRIVILEGED_FUNCTION;
 | 
			
		||||
 *  }
 | 
			
		||||
 * @endverbatim
 | 
			
		||||
 */
 | 
			
		||||
BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend,
 | 
			
		||||
                                          void * pvParameter1,
 | 
			
		||||
                                          uint32_t ulParameter2,
 | 
			
		||||
                                          BaseType_t * pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( INCLUDE_xTimerPendFunctionCall == 1 )
 | 
			
		||||
    BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend,
 | 
			
		||||
                                              void * pvParameter1,
 | 
			
		||||
                                              uint32_t ulParameter2,
 | 
			
		||||
                                              BaseType_t * pxHigherPriorityTaskWoken ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend,
 | 
			
		||||
@ -1235,10 +1237,12 @@ BaseType_t xTimerPendFunctionCallFromISR( PendedFunction_t xFunctionToPend,
 | 
			
		||||
 * timer daemon task, otherwise pdFALSE is returned.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend,
 | 
			
		||||
                                   void * pvParameter1,
 | 
			
		||||
                                   uint32_t ulParameter2,
 | 
			
		||||
                                   TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#if ( INCLUDE_xTimerPendFunctionCall == 1 )
 | 
			
		||||
    BaseType_t xTimerPendFunctionCall( PendedFunction_t xFunctionToPend,
 | 
			
		||||
                                       void * pvParameter1,
 | 
			
		||||
                                       uint32_t ulParameter2,
 | 
			
		||||
                                       TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * const char * const pcTimerGetName( TimerHandle_t xTimer );
 | 
			
		||||
@ -1408,6 +1412,9 @@ BaseType_t xTimerGenericCommandFromISR( TimerHandle_t xTimer,
 | 
			
		||||
 *
 | 
			
		||||
 * This hook function is called form the timer task once when the task starts running.
 | 
			
		||||
 */
 | 
			
		||||
    /* MISRA Ref 8.6.1 [External linkage] */
 | 
			
		||||
    /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-86 */
 | 
			
		||||
    /* coverity[misra_c_2012_rule_8_6_violation] */
 | 
			
		||||
    void vApplicationDaemonTaskStartupHook( void );
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user