/* priority.inl
|
/* priority.inl
|
*
|
*
|
* This file contains the macro implementation of all inlined routines
|
* This file contains the macro implementation of all inlined routines
|
* in the Priority Handler.
|
* in the Priority Handler.
|
*
|
*
|
* COPYRIGHT (c) 1989-1999.
|
* COPYRIGHT (c) 1989-1999.
|
* On-Line Applications Research Corporation (OAR).
|
* On-Line Applications Research Corporation (OAR).
|
*
|
*
|
* The license and distribution terms for this file may be
|
* The license and distribution terms for this file may be
|
* found in the file LICENSE in this distribution or at
|
* found in the file LICENSE in this distribution or at
|
* http://www.OARcorp.com/rtems/license.html.
|
* http://www.OARcorp.com/rtems/license.html.
|
*
|
*
|
* priority.inl,v 1.11 1999/11/17 17:50:38 joel Exp
|
* priority.inl,v 1.11 1999/11/17 17:50:38 joel Exp
|
*/
|
*/
|
|
|
#ifndef __PRIORITY_inl
|
#ifndef __PRIORITY_inl
|
#define __PRIORITY_inl
|
#define __PRIORITY_inl
|
|
|
#include
|
#include
|
|
|
/*PAGE
|
/*PAGE
|
*
|
*
|
* _Priority_Handler_initialization
|
* _Priority_Handler_initialization
|
*
|
*
|
*/
|
*/
|
|
|
#define _Priority_Handler_initialization() \
|
#define _Priority_Handler_initialization() \
|
{ \
|
{ \
|
unsigned32 index; \
|
unsigned32 index; \
|
\
|
\
|
_Priority_Major_bit_map = 0; \
|
_Priority_Major_bit_map = 0; \
|
for ( index=0 ; index <16 ; index++ ) \
|
for ( index=0 ; index <16 ; index++ ) \
|
_Priority_Bit_map[ index ] = 0; \
|
_Priority_Bit_map[ index ] = 0; \
|
}
|
}
|
|
|
/*PAGE
|
/*PAGE
|
*
|
*
|
* _Priority_Is_valid
|
* _Priority_Is_valid
|
*
|
*
|
*/
|
*/
|
|
|
/*
|
/*
|
* Since PRIORITY_MINIMUM is 0 and priorities are stored unsigned,
|
* Since PRIORITY_MINIMUM is 0 and priorities are stored unsigned,
|
* then checking for less than 0 is unnecessary.
|
* then checking for less than 0 is unnecessary.
|
*/
|
*/
|
|
|
#define _Priority_Is_valid( _the_priority ) \
|
#define _Priority_Is_valid( _the_priority ) \
|
( (_the_priority) <= PRIORITY_MAXIMUM )
|
( (_the_priority) <= PRIORITY_MAXIMUM )
|
|
|
/*PAGE
|
/*PAGE
|
*
|
*
|
* _Priority_Major
|
* _Priority_Major
|
*
|
*
|
*/
|
*/
|
|
|
#define _Priority_Major( _the_priority ) ( (_the_priority) / 16 )
|
#define _Priority_Major( _the_priority ) ( (_the_priority) / 16 )
|
|
|
/*PAGE
|
/*PAGE
|
*
|
*
|
* _Priority_Minor
|
* _Priority_Minor
|
*
|
*
|
*/
|
*/
|
|
|
#define _Priority_Minor( _the_priority ) ( (_the_priority) % 16 )
|
#define _Priority_Minor( _the_priority ) ( (_the_priority) % 16 )
|
|
|
#if ( CPU_USE_GENERIC_BITFIELD_CODE == TRUE )
|
#if ( CPU_USE_GENERIC_BITFIELD_CODE == TRUE )
|
|
|
/*PAGE
|
/*PAGE
|
*
|
*
|
* _Priority_Mask
|
* _Priority_Mask
|
*
|
*
|
*/
|
*/
|
|
|
#define _Priority_Mask( _bit_number ) \
|
#define _Priority_Mask( _bit_number ) \
|
(0x8000 >> _bit_number)
|
(0x8000 >> _bit_number)
|
|
|
/*PAGE
|
/*PAGE
|
*
|
*
|
* _Priority_Bits_index
|
* _Priority_Bits_index
|
*
|
*
|
*/
|
*/
|
|
|
#define _Priority_Bits_index( _bit_number ) \
|
#define _Priority_Bits_index( _bit_number ) \
|
(_bit_number)
|
(_bit_number)
|
|
|
#endif
|
#endif
|
|
|
/*PAGE
|
/*PAGE
|
*
|
*
|
* _Priority_Add_to_bit_map
|
* _Priority_Add_to_bit_map
|
*
|
*
|
*/
|
*/
|
|
|
#define _Priority_Add_to_bit_map( _the_priority_map ) \
|
#define _Priority_Add_to_bit_map( _the_priority_map ) \
|
{ \
|
{ \
|
*(_the_priority_map)->minor |= (_the_priority_map)->ready_minor; \
|
*(_the_priority_map)->minor |= (_the_priority_map)->ready_minor; \
|
_Priority_Major_bit_map |= (_the_priority_map)->ready_major; \
|
_Priority_Major_bit_map |= (_the_priority_map)->ready_major; \
|
}
|
}
|
|
|
/*PAGE
|
/*PAGE
|
*
|
*
|
* _Priority_Remove_from_bit_map
|
* _Priority_Remove_from_bit_map
|
*
|
*
|
*/
|
*/
|
|
|
#define _Priority_Remove_from_bit_map( _the_priority_map ) \
|
#define _Priority_Remove_from_bit_map( _the_priority_map ) \
|
{ \
|
{ \
|
*(_the_priority_map)->minor &= (_the_priority_map)->block_minor; \
|
*(_the_priority_map)->minor &= (_the_priority_map)->block_minor; \
|
if ( *(_the_priority_map)->minor == 0 ) \
|
if ( *(_the_priority_map)->minor == 0 ) \
|
_Priority_Major_bit_map &= (_the_priority_map)->block_major; \
|
_Priority_Major_bit_map &= (_the_priority_map)->block_major; \
|
}
|
}
|
|
|
/*PAGE
|
/*PAGE
|
*
|
*
|
* _Priority_Get_highest
|
* _Priority_Get_highest
|
*
|
*
|
*/
|
*/
|
|
|
#define _Priority_Get_highest( _high_priority ) \
|
#define _Priority_Get_highest( _high_priority ) \
|
{ \
|
{ \
|
Priority_Bit_map_control minor; \
|
Priority_Bit_map_control minor; \
|
Priority_Bit_map_control major; \
|
Priority_Bit_map_control major; \
|
\
|
\
|
_Bitfield_Find_first_bit( _Priority_Major_bit_map, major ); \
|
_Bitfield_Find_first_bit( _Priority_Major_bit_map, major ); \
|
_Bitfield_Find_first_bit( _Priority_Bit_map[major], minor ); \
|
_Bitfield_Find_first_bit( _Priority_Bit_map[major], minor ); \
|
\
|
\
|
(_high_priority) = (_Priority_Bits_index( major ) * 16) + \
|
(_high_priority) = (_Priority_Bits_index( major ) * 16) + \
|
_Priority_Bits_index( minor ); \
|
_Priority_Bits_index( minor ); \
|
}
|
}
|
|
|
/*PAGE
|
/*PAGE
|
*
|
*
|
* _Priority_Initialize_information
|
* _Priority_Initialize_information
|
*
|
*
|
*/
|
*/
|
|
|
#define _Priority_Initialize_information( \
|
#define _Priority_Initialize_information( \
|
_the_priority_map, _new_priority ) \
|
_the_priority_map, _new_priority ) \
|
{ \
|
{ \
|
Priority_Bit_map_control _major; \
|
Priority_Bit_map_control _major; \
|
Priority_Bit_map_control _minor; \
|
Priority_Bit_map_control _minor; \
|
Priority_Bit_map_control _mask; \
|
Priority_Bit_map_control _mask; \
|
\
|
\
|
_major = _Priority_Major( (_new_priority) ); \
|
_major = _Priority_Major( (_new_priority) ); \
|
_minor = _Priority_Minor( (_new_priority) ); \
|
_minor = _Priority_Minor( (_new_priority) ); \
|
\
|
\
|
(_the_priority_map)->minor = \
|
(_the_priority_map)->minor = \
|
&_Priority_Bit_map[ _Priority_Bits_index(_major) ]; \
|
&_Priority_Bit_map[ _Priority_Bits_index(_major) ]; \
|
\
|
\
|
_mask = _Priority_Mask( _major ); \
|
_mask = _Priority_Mask( _major ); \
|
(_the_priority_map)->ready_major = _mask; \
|
(_the_priority_map)->ready_major = _mask; \
|
(_the_priority_map)->block_major = ~_mask; \
|
(_the_priority_map)->block_major = ~_mask; \
|
\
|
\
|
_mask = _Priority_Mask( _minor ); \
|
_mask = _Priority_Mask( _minor ); \
|
(_the_priority_map)->ready_minor = _mask; \
|
(_the_priority_map)->ready_minor = _mask; \
|
(_the_priority_map)->block_minor = ~_mask; \
|
(_the_priority_map)->block_minor = ~_mask; \
|
}
|
}
|
|
|
/*PAGE
|
/*PAGE
|
*
|
*
|
* _Priority_Is_group_empty
|
* _Priority_Is_group_empty
|
*
|
*
|
*/
|
*/
|
|
|
#define _Priority_Is_group_empty ( _the_priority ) \
|
#define _Priority_Is_group_empty ( _the_priority ) \
|
( (_the_priority) == 0 )
|
( (_the_priority) == 0 )
|
|
|
#endif
|
#endif
|
/* end of include file */
|
/* end of include file */
|
|
|