Back to home page

LXR

 
 

    


File indexing completed on 2025-05-11 08:24:27

0001 /* SPDX-License-Identifier: BSD-2-Clause */
0002 
0003 /**
0004  * @file
0005  *
0006  * @ingroup RTEMSScoreThread
0007  *
0008  * @brief This source file contains static assertions related to the Thread
0009  *   Handler and the implementation of _Thread_Initialize_information() and
0010  *   _Thread_Handler_initialization().
0011  */
0012 
0013 /*
0014  *  COPYRIGHT (c) 1989-2011.
0015  *  On-Line Applications Research Corporation (OAR).
0016  *
0017  * Redistribution and use in source and binary forms, with or without
0018  * modification, are permitted provided that the following conditions
0019  * are met:
0020  * 1. Redistributions of source code must retain the above copyright
0021  *    notice, this list of conditions and the following disclaimer.
0022  * 2. Redistributions in binary form must reproduce the above copyright
0023  *    notice, this list of conditions and the following disclaimer in the
0024  *    documentation and/or other materials provided with the distribution.
0025  *
0026  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
0027  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
0028  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
0029  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
0030  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
0031  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
0032  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
0033  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
0034  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
0035  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
0036  * POSSIBILITY OF SUCH DAMAGE.
0037  */
0038 
0039 #ifdef HAVE_CONFIG_H
0040 #include "config.h"
0041 #endif
0042 
0043 #include <rtems/score/threadimpl.h>
0044 #include <rtems/score/freechainimpl.h>
0045 #include <rtems/score/objectimpl.h>
0046 #include <rtems/score/scheduler.h>
0047 
0048 #define THREAD_OFFSET_ASSERT( field ) \
0049   RTEMS_STATIC_ASSERT( \
0050     offsetof( Thread_Control, field ) == offsetof( Thread_Proxy_control, field ), \
0051     field \
0052   )
0053 
0054 THREAD_OFFSET_ASSERT( Object );
0055 THREAD_OFFSET_ASSERT( Join_queue );
0056 THREAD_OFFSET_ASSERT( current_state );
0057 THREAD_OFFSET_ASSERT( Real_priority );
0058 #if defined(RTEMS_SCORE_THREAD_ENABLE_RESOURCE_COUNT)
0059 THREAD_OFFSET_ASSERT( resource_count );
0060 #endif
0061 THREAD_OFFSET_ASSERT( Scheduler );
0062 THREAD_OFFSET_ASSERT( Wait );
0063 THREAD_OFFSET_ASSERT( Timer );
0064 #if defined(RTEMS_MULTIPROCESSING)
0065 THREAD_OFFSET_ASSERT( receive_packet );
0066 #endif
0067 
0068 void _Thread_Initialize_information( Thread_Information *information )
0069 {
0070   _Objects_Initialize_information( &information->Objects );
0071 
0072   _Freechain_Initialize(
0073     &information->Thread_queue_heads.Free,
0074     information->Thread_queue_heads.initial,
0075     _Objects_Get_maximum_index( &information->Objects ),
0076     _Thread_queue_Heads_size
0077   );
0078 }
0079 
0080 void _Thread_Handler_initialization(void)
0081 {
0082 #if defined(RTEMS_MULTIPROCESSING)
0083   _Thread_MP_Handler_initialization( _MPCI_Configuration.maximum_proxies );
0084 #endif
0085 
0086   /*
0087    *  Initialize the internal class of threads.  We need an IDLE thread
0088    *  per CPU in an SMP system.  In addition, if this is a loosely
0089    *  coupled multiprocessing system, account for the MPCI Server Thread.
0090    */
0091   _Thread_Initialize_information( &_Thread_Information );
0092 }