mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-26 14:18:20 +00:00
+ Added object type field to object id.
+ Added name pointer to Object_Control. + Modified Object Open and Close to address name field. + Removed name as separate element from Thread and Proxy Control.
This commit is contained in:
@@ -33,11 +33,44 @@ typedef unsigned32 Objects_Name;
|
||||
|
||||
/*
|
||||
* The following type defines the control block used to manage
|
||||
* object IDs.
|
||||
* object IDs. The format is as follows (0=LSB):
|
||||
*
|
||||
* Bits 0 .. 15 = index
|
||||
* Bits 16 .. 25 = node
|
||||
* Bits 26 .. 31 = class
|
||||
*/
|
||||
|
||||
typedef unsigned32 Objects_Id;
|
||||
|
||||
#define OBJECTS_INDEX_START_BIT 0
|
||||
#define OBJECTS_NODE_START_BIT 16
|
||||
#define OBJECTS_CLASS_START_BIT 26
|
||||
|
||||
#define OBJECTS_INDEX_MASK 0x0000ffff
|
||||
#define OBJECTS_NODE_MASK 0x03ff0000
|
||||
#define OBJECTS_CLASS_MASK 0xfc000000
|
||||
|
||||
#define OBJECTS_INDEX_VALID_BITS 0x0000ffff
|
||||
#define OBJECTS_NODE_VALID_BITS 0x000003ff
|
||||
#define OBJECTS_CLASS_VALID_BITS 0x000000cf
|
||||
|
||||
/*
|
||||
* This enumerated type is used in the class field of the object ID.
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
OBJECTS_NO_CLASS = 0,
|
||||
OBJECTS_RTEMS_TASKS = 1,
|
||||
OBJECTS_RTEMS_TIMERS = 2,
|
||||
OBJECTS_RTEMS_SEMAPHORES = 3,
|
||||
OBJECTS_RTEMS_MESSAGE_QUEUES = 4,
|
||||
OBJECTS_RTEMS_PARTITIONS = 5,
|
||||
OBJECTS_RTEMS_REGIONS = 6,
|
||||
OBJECTS_RTEMS_PORTS = 7,
|
||||
OBJECTS_RTEMS_PERIODS = 8,
|
||||
OBJECTS_RTEMS_EXTENSIONS = 9
|
||||
} Objects_Classes;
|
||||
|
||||
/*
|
||||
* This enumerated type lists the locations which may be returned
|
||||
* by _Objects_Get. These codes indicate the success of locating
|
||||
@@ -56,8 +89,9 @@ typedef enum {
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
Chain_Node Node;
|
||||
Objects_Id id;
|
||||
Chain_Node Node;
|
||||
Objects_Id id;
|
||||
Objects_Name *name;
|
||||
} Objects_Control;
|
||||
|
||||
/*
|
||||
@@ -66,6 +100,7 @@ typedef struct {
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
Objects_Classes the_class; /* Class of this object */
|
||||
Objects_Id minimum_id; /* minimum valid id of this type */
|
||||
Objects_Id maximum_id; /* maximum valid id of this type */
|
||||
unsigned32 maximum; /* maximum number of objects */
|
||||
@@ -88,7 +123,7 @@ EXTERN unsigned32 _Objects_Local_node;
|
||||
*
|
||||
*/
|
||||
|
||||
#define OBJECTS_ID_OF_SELF 0
|
||||
#define OBJECTS_ID_OF_SELF ((Objects_Id) 0)
|
||||
|
||||
/*
|
||||
* The following define the constants which may be used in name searches.
|
||||
@@ -107,9 +142,10 @@ EXTERN unsigned32 _Objects_Local_node;
|
||||
#define RTEMS_OBJECT_ID_FINAL_INDEX (0xffff)
|
||||
|
||||
#define RTEMS_OBJECT_ID_INITIAL(node) (_Objects_Build_id( \
|
||||
OBJECTS_NO_CLASS, \
|
||||
node, \
|
||||
RTEMS_OBJECT_ID_INITIAL_INDEX))
|
||||
#define RTEMS_OBJECT_ID_FINAL ((Objects_Id) ~0)
|
||||
#define RTEMS_OBJECT_ID_FINAL ((Objects_Id)~0)
|
||||
|
||||
/*
|
||||
* _Objects_Handler_initialization
|
||||
@@ -140,6 +176,7 @@ void _Objects_Handler_initialization(
|
||||
|
||||
void _Objects_Initialize_information (
|
||||
Objects_Information *information,
|
||||
Objects_Classes the_class,
|
||||
boolean supports_global,
|
||||
unsigned32 maximum,
|
||||
unsigned32 size
|
||||
@@ -264,8 +301,22 @@ STATIC INLINE void rtems_name_to_characters(
|
||||
*/
|
||||
|
||||
STATIC INLINE Objects_Id _Objects_Build_id(
|
||||
unsigned32 node,
|
||||
unsigned32 index
|
||||
Objects_Classes the_class,
|
||||
unsigned32 node,
|
||||
unsigned32 index
|
||||
);
|
||||
|
||||
/*
|
||||
* rtems_get_class
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* This function returns the class portion of the ID.
|
||||
*
|
||||
*/
|
||||
|
||||
STATIC INLINE Objects_Classes rtems_get_class(
|
||||
Objects_Id id
|
||||
);
|
||||
|
||||
/*
|
||||
|
||||
@@ -133,14 +133,13 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
Objects_Control Object;
|
||||
Objects_Name name;
|
||||
States_Control current_state;
|
||||
rtems_task_priority current_priority;
|
||||
rtems_task_priority real_priority;
|
||||
rtems_task_priority current_priority;
|
||||
rtems_task_priority real_priority;
|
||||
unsigned32 resource_count;
|
||||
Thread_Wait_information Wait;
|
||||
Watchdog_Control Timer;
|
||||
rtems_packet_prefix *receive_packet;
|
||||
rtems_packet_prefix *receive_packet;
|
||||
/****************** end of common block ********************/
|
||||
Chain_Node Active;
|
||||
} Thread_Proxy_control;
|
||||
@@ -156,7 +155,6 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
Objects_Control Object;
|
||||
Objects_Name name;
|
||||
States_Control current_state;
|
||||
rtems_task_priority current_priority;
|
||||
rtems_task_priority real_priority;
|
||||
|
||||
@@ -33,11 +33,44 @@ typedef unsigned32 Objects_Name;
|
||||
|
||||
/*
|
||||
* The following type defines the control block used to manage
|
||||
* object IDs.
|
||||
* object IDs. The format is as follows (0=LSB):
|
||||
*
|
||||
* Bits 0 .. 15 = index
|
||||
* Bits 16 .. 25 = node
|
||||
* Bits 26 .. 31 = class
|
||||
*/
|
||||
|
||||
typedef unsigned32 Objects_Id;
|
||||
|
||||
#define OBJECTS_INDEX_START_BIT 0
|
||||
#define OBJECTS_NODE_START_BIT 16
|
||||
#define OBJECTS_CLASS_START_BIT 26
|
||||
|
||||
#define OBJECTS_INDEX_MASK 0x0000ffff
|
||||
#define OBJECTS_NODE_MASK 0x03ff0000
|
||||
#define OBJECTS_CLASS_MASK 0xfc000000
|
||||
|
||||
#define OBJECTS_INDEX_VALID_BITS 0x0000ffff
|
||||
#define OBJECTS_NODE_VALID_BITS 0x000003ff
|
||||
#define OBJECTS_CLASS_VALID_BITS 0x000000cf
|
||||
|
||||
/*
|
||||
* This enumerated type is used in the class field of the object ID.
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
OBJECTS_NO_CLASS = 0,
|
||||
OBJECTS_RTEMS_TASKS = 1,
|
||||
OBJECTS_RTEMS_TIMERS = 2,
|
||||
OBJECTS_RTEMS_SEMAPHORES = 3,
|
||||
OBJECTS_RTEMS_MESSAGE_QUEUES = 4,
|
||||
OBJECTS_RTEMS_PARTITIONS = 5,
|
||||
OBJECTS_RTEMS_REGIONS = 6,
|
||||
OBJECTS_RTEMS_PORTS = 7,
|
||||
OBJECTS_RTEMS_PERIODS = 8,
|
||||
OBJECTS_RTEMS_EXTENSIONS = 9
|
||||
} Objects_Classes;
|
||||
|
||||
/*
|
||||
* This enumerated type lists the locations which may be returned
|
||||
* by _Objects_Get. These codes indicate the success of locating
|
||||
@@ -56,8 +89,9 @@ typedef enum {
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
Chain_Node Node;
|
||||
Objects_Id id;
|
||||
Chain_Node Node;
|
||||
Objects_Id id;
|
||||
Objects_Name *name;
|
||||
} Objects_Control;
|
||||
|
||||
/*
|
||||
@@ -66,6 +100,7 @@ typedef struct {
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
Objects_Classes the_class; /* Class of this object */
|
||||
Objects_Id minimum_id; /* minimum valid id of this type */
|
||||
Objects_Id maximum_id; /* maximum valid id of this type */
|
||||
unsigned32 maximum; /* maximum number of objects */
|
||||
@@ -88,7 +123,7 @@ EXTERN unsigned32 _Objects_Local_node;
|
||||
*
|
||||
*/
|
||||
|
||||
#define OBJECTS_ID_OF_SELF 0
|
||||
#define OBJECTS_ID_OF_SELF ((Objects_Id) 0)
|
||||
|
||||
/*
|
||||
* The following define the constants which may be used in name searches.
|
||||
@@ -107,9 +142,10 @@ EXTERN unsigned32 _Objects_Local_node;
|
||||
#define RTEMS_OBJECT_ID_FINAL_INDEX (0xffff)
|
||||
|
||||
#define RTEMS_OBJECT_ID_INITIAL(node) (_Objects_Build_id( \
|
||||
OBJECTS_NO_CLASS, \
|
||||
node, \
|
||||
RTEMS_OBJECT_ID_INITIAL_INDEX))
|
||||
#define RTEMS_OBJECT_ID_FINAL ((Objects_Id) ~0)
|
||||
#define RTEMS_OBJECT_ID_FINAL ((Objects_Id)~0)
|
||||
|
||||
/*
|
||||
* _Objects_Handler_initialization
|
||||
@@ -140,6 +176,7 @@ void _Objects_Handler_initialization(
|
||||
|
||||
void _Objects_Initialize_information (
|
||||
Objects_Information *information,
|
||||
Objects_Classes the_class,
|
||||
boolean supports_global,
|
||||
unsigned32 maximum,
|
||||
unsigned32 size
|
||||
@@ -264,8 +301,22 @@ STATIC INLINE void rtems_name_to_characters(
|
||||
*/
|
||||
|
||||
STATIC INLINE Objects_Id _Objects_Build_id(
|
||||
unsigned32 node,
|
||||
unsigned32 index
|
||||
Objects_Classes the_class,
|
||||
unsigned32 node,
|
||||
unsigned32 index
|
||||
);
|
||||
|
||||
/*
|
||||
* rtems_get_class
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* This function returns the class portion of the ID.
|
||||
*
|
||||
*/
|
||||
|
||||
STATIC INLINE Objects_Classes rtems_get_class(
|
||||
Objects_Id id
|
||||
);
|
||||
|
||||
/*
|
||||
|
||||
@@ -133,14 +133,13 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
Objects_Control Object;
|
||||
Objects_Name name;
|
||||
States_Control current_state;
|
||||
rtems_task_priority current_priority;
|
||||
rtems_task_priority real_priority;
|
||||
rtems_task_priority current_priority;
|
||||
rtems_task_priority real_priority;
|
||||
unsigned32 resource_count;
|
||||
Thread_Wait_information Wait;
|
||||
Watchdog_Control Timer;
|
||||
rtems_packet_prefix *receive_packet;
|
||||
rtems_packet_prefix *receive_packet;
|
||||
/****************** end of common block ********************/
|
||||
Chain_Node Active;
|
||||
} Thread_Proxy_control;
|
||||
@@ -156,7 +155,6 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
Objects_Control Object;
|
||||
Objects_Name name;
|
||||
States_Control current_state;
|
||||
rtems_task_priority current_priority;
|
||||
rtems_task_priority real_priority;
|
||||
|
||||
@@ -57,13 +57,30 @@ STATIC INLINE void rtems_name_to_characters(
|
||||
*/
|
||||
|
||||
STATIC INLINE Objects_Id _Objects_Build_id(
|
||||
unsigned32 node,
|
||||
unsigned32 index
|
||||
Objects_Classes the_class,
|
||||
unsigned32 node,
|
||||
unsigned32 index
|
||||
)
|
||||
{
|
||||
return ( (node << 16) | index );
|
||||
return ( (the_class << OBJECTS_CLASS_START_BIT) |
|
||||
(node << OBJECTS_NODE_START_BIT) |
|
||||
(index << OBJECTS_INDEX_START_BIT) );
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* rtems_get_class
|
||||
*/
|
||||
|
||||
STATIC INLINE Objects_Classes rtems_get_class(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
return (Objects_Classes)
|
||||
((id >> OBJECTS_CLASS_START_BIT) & OBJECTS_CLASS_VALID_BITS);
|
||||
}
|
||||
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* rtems_get_node
|
||||
@@ -74,7 +91,7 @@ STATIC INLINE unsigned32 rtems_get_node(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
return (id >> 16);
|
||||
return (id >> OBJECTS_NODE_START_BIT) & OBJECTS_NODE_VALID_BITS;
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
@@ -87,7 +104,7 @@ STATIC INLINE unsigned32 rtems_get_index(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
return (id &0xFFFF);
|
||||
return (id >> OBJECTS_INDEX_START_BIT) & OBJECTS_INDEX_VALID_BITS;
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
@@ -174,6 +191,7 @@ STATIC INLINE void _Objects_Open(
|
||||
index = rtems_get_index( the_object->id );
|
||||
information->local_table[ index ] = the_object;
|
||||
information->name_table[ index ] = name;
|
||||
the_object->name = &information->name_table[ index ];
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
@@ -192,6 +210,7 @@ STATIC INLINE void _Objects_Close(
|
||||
index = rtems_get_index( the_object->id );
|
||||
information->local_table[ index ] = NULL;
|
||||
information->name_table[ index ] = 0;
|
||||
the_object->name = 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -57,13 +57,30 @@ STATIC INLINE void rtems_name_to_characters(
|
||||
*/
|
||||
|
||||
STATIC INLINE Objects_Id _Objects_Build_id(
|
||||
unsigned32 node,
|
||||
unsigned32 index
|
||||
Objects_Classes the_class,
|
||||
unsigned32 node,
|
||||
unsigned32 index
|
||||
)
|
||||
{
|
||||
return ( (node << 16) | index );
|
||||
return ( (the_class << OBJECTS_CLASS_START_BIT) |
|
||||
(node << OBJECTS_NODE_START_BIT) |
|
||||
(index << OBJECTS_INDEX_START_BIT) );
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* rtems_get_class
|
||||
*/
|
||||
|
||||
STATIC INLINE Objects_Classes rtems_get_class(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
return (Objects_Classes)
|
||||
((id >> OBJECTS_CLASS_START_BIT) & OBJECTS_CLASS_VALID_BITS);
|
||||
}
|
||||
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* rtems_get_node
|
||||
@@ -74,7 +91,7 @@ STATIC INLINE unsigned32 rtems_get_node(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
return (id >> 16);
|
||||
return (id >> OBJECTS_NODE_START_BIT) & OBJECTS_NODE_VALID_BITS;
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
@@ -87,7 +104,7 @@ STATIC INLINE unsigned32 rtems_get_index(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
return (id &0xFFFF);
|
||||
return (id >> OBJECTS_INDEX_START_BIT) & OBJECTS_INDEX_VALID_BITS;
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
@@ -174,6 +191,7 @@ STATIC INLINE void _Objects_Open(
|
||||
index = rtems_get_index( the_object->id );
|
||||
information->local_table[ index ] = the_object;
|
||||
information->name_table[ index ] = name;
|
||||
the_object->name = &information->name_table[ index ];
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
@@ -192,6 +210,7 @@ STATIC INLINE void _Objects_Close(
|
||||
index = rtems_get_index( the_object->id );
|
||||
information->local_table[ index ] = NULL;
|
||||
information->name_table[ index ] = 0;
|
||||
the_object->name = 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -45,8 +45,19 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define _Objects_Build_id( _node, _index ) \
|
||||
( ((_node) << 16) | (_index) )
|
||||
#define _Objects_Build_id( _the_class, _node, _index ) \
|
||||
( ((_the_class) << OBJECTS_CLASS_START_BIT) | \
|
||||
((_node) << OBJECTS_NODE_START_BIT) | \
|
||||
((_index) << OBJECTS_INDEX_START_BIT) )
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* rtems_get_class
|
||||
*/
|
||||
|
||||
#define rtems_get_class( _id ) \
|
||||
(Objects_Classes) \
|
||||
(((_id) >> OBJECTS_CLASS_START_BIT) & OBJECTS_CLASS_VALID_BITS)
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
@@ -55,7 +66,7 @@
|
||||
*/
|
||||
|
||||
#define rtems_get_node( _id ) \
|
||||
((_id) >> 16)
|
||||
(((_id) >> OBJECTS_NODE_START_BIT) & OBJECTS_NODE_VALID_BITS)
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
@@ -64,7 +75,7 @@
|
||||
*/
|
||||
|
||||
#define rtems_get_index( _id ) \
|
||||
((_id) & 0xFFFF)
|
||||
(((_id) >> OBJECTS_INDEX_START_BIT) & OBJECTS_INDEX_VALID_BITS)
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
@@ -124,6 +135,7 @@
|
||||
_index = rtems_get_index( (_the_object)->id ); \
|
||||
(_information)->local_table[ _index ] = (_the_object); \
|
||||
(_information)->name_table[ _index ] = (_name); \
|
||||
(_the_object)->name = &(_information)->name_table[ _index ]; \
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
@@ -139,6 +151,7 @@
|
||||
_index = rtems_get_index( (_the_object)->id ); \
|
||||
(_information)->local_table[ _index ] = NULL; \
|
||||
(_information)->name_table[ _index ] = 0; \
|
||||
(_the_object)->name = 0; \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -45,8 +45,19 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define _Objects_Build_id( _node, _index ) \
|
||||
( ((_node) << 16) | (_index) )
|
||||
#define _Objects_Build_id( _the_class, _node, _index ) \
|
||||
( ((_the_class) << OBJECTS_CLASS_START_BIT) | \
|
||||
((_node) << OBJECTS_NODE_START_BIT) | \
|
||||
((_index) << OBJECTS_INDEX_START_BIT) )
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* rtems_get_class
|
||||
*/
|
||||
|
||||
#define rtems_get_class( _id ) \
|
||||
(Objects_Classes) \
|
||||
(((_id) >> OBJECTS_CLASS_START_BIT) & OBJECTS_CLASS_VALID_BITS)
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
@@ -55,7 +66,7 @@
|
||||
*/
|
||||
|
||||
#define rtems_get_node( _id ) \
|
||||
((_id) >> 16)
|
||||
(((_id) >> OBJECTS_NODE_START_BIT) & OBJECTS_NODE_VALID_BITS)
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
@@ -64,7 +75,7 @@
|
||||
*/
|
||||
|
||||
#define rtems_get_index( _id ) \
|
||||
((_id) & 0xFFFF)
|
||||
(((_id) >> OBJECTS_INDEX_START_BIT) & OBJECTS_INDEX_VALID_BITS)
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
@@ -124,6 +135,7 @@
|
||||
_index = rtems_get_index( (_the_object)->id ); \
|
||||
(_information)->local_table[ _index ] = (_the_object); \
|
||||
(_information)->name_table[ _index ] = (_name); \
|
||||
(_the_object)->name = &(_information)->name_table[ _index ]; \
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
@@ -139,6 +151,7 @@
|
||||
_index = rtems_get_index( (_the_object)->id ); \
|
||||
(_information)->local_table[ _index ] = NULL; \
|
||||
(_information)->name_table[ _index ] = 0; \
|
||||
(_the_object)->name = 0; \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -33,11 +33,44 @@ typedef unsigned32 Objects_Name;
|
||||
|
||||
/*
|
||||
* The following type defines the control block used to manage
|
||||
* object IDs.
|
||||
* object IDs. The format is as follows (0=LSB):
|
||||
*
|
||||
* Bits 0 .. 15 = index
|
||||
* Bits 16 .. 25 = node
|
||||
* Bits 26 .. 31 = class
|
||||
*/
|
||||
|
||||
typedef unsigned32 Objects_Id;
|
||||
|
||||
#define OBJECTS_INDEX_START_BIT 0
|
||||
#define OBJECTS_NODE_START_BIT 16
|
||||
#define OBJECTS_CLASS_START_BIT 26
|
||||
|
||||
#define OBJECTS_INDEX_MASK 0x0000ffff
|
||||
#define OBJECTS_NODE_MASK 0x03ff0000
|
||||
#define OBJECTS_CLASS_MASK 0xfc000000
|
||||
|
||||
#define OBJECTS_INDEX_VALID_BITS 0x0000ffff
|
||||
#define OBJECTS_NODE_VALID_BITS 0x000003ff
|
||||
#define OBJECTS_CLASS_VALID_BITS 0x000000cf
|
||||
|
||||
/*
|
||||
* This enumerated type is used in the class field of the object ID.
|
||||
*/
|
||||
|
||||
typedef enum {
|
||||
OBJECTS_NO_CLASS = 0,
|
||||
OBJECTS_RTEMS_TASKS = 1,
|
||||
OBJECTS_RTEMS_TIMERS = 2,
|
||||
OBJECTS_RTEMS_SEMAPHORES = 3,
|
||||
OBJECTS_RTEMS_MESSAGE_QUEUES = 4,
|
||||
OBJECTS_RTEMS_PARTITIONS = 5,
|
||||
OBJECTS_RTEMS_REGIONS = 6,
|
||||
OBJECTS_RTEMS_PORTS = 7,
|
||||
OBJECTS_RTEMS_PERIODS = 8,
|
||||
OBJECTS_RTEMS_EXTENSIONS = 9
|
||||
} Objects_Classes;
|
||||
|
||||
/*
|
||||
* This enumerated type lists the locations which may be returned
|
||||
* by _Objects_Get. These codes indicate the success of locating
|
||||
@@ -56,8 +89,9 @@ typedef enum {
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
Chain_Node Node;
|
||||
Objects_Id id;
|
||||
Chain_Node Node;
|
||||
Objects_Id id;
|
||||
Objects_Name *name;
|
||||
} Objects_Control;
|
||||
|
||||
/*
|
||||
@@ -66,6 +100,7 @@ typedef struct {
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
Objects_Classes the_class; /* Class of this object */
|
||||
Objects_Id minimum_id; /* minimum valid id of this type */
|
||||
Objects_Id maximum_id; /* maximum valid id of this type */
|
||||
unsigned32 maximum; /* maximum number of objects */
|
||||
@@ -88,7 +123,7 @@ EXTERN unsigned32 _Objects_Local_node;
|
||||
*
|
||||
*/
|
||||
|
||||
#define OBJECTS_ID_OF_SELF 0
|
||||
#define OBJECTS_ID_OF_SELF ((Objects_Id) 0)
|
||||
|
||||
/*
|
||||
* The following define the constants which may be used in name searches.
|
||||
@@ -107,9 +142,10 @@ EXTERN unsigned32 _Objects_Local_node;
|
||||
#define RTEMS_OBJECT_ID_FINAL_INDEX (0xffff)
|
||||
|
||||
#define RTEMS_OBJECT_ID_INITIAL(node) (_Objects_Build_id( \
|
||||
OBJECTS_NO_CLASS, \
|
||||
node, \
|
||||
RTEMS_OBJECT_ID_INITIAL_INDEX))
|
||||
#define RTEMS_OBJECT_ID_FINAL ((Objects_Id) ~0)
|
||||
#define RTEMS_OBJECT_ID_FINAL ((Objects_Id)~0)
|
||||
|
||||
/*
|
||||
* _Objects_Handler_initialization
|
||||
@@ -140,6 +176,7 @@ void _Objects_Handler_initialization(
|
||||
|
||||
void _Objects_Initialize_information (
|
||||
Objects_Information *information,
|
||||
Objects_Classes the_class,
|
||||
boolean supports_global,
|
||||
unsigned32 maximum,
|
||||
unsigned32 size
|
||||
@@ -264,8 +301,22 @@ STATIC INLINE void rtems_name_to_characters(
|
||||
*/
|
||||
|
||||
STATIC INLINE Objects_Id _Objects_Build_id(
|
||||
unsigned32 node,
|
||||
unsigned32 index
|
||||
Objects_Classes the_class,
|
||||
unsigned32 node,
|
||||
unsigned32 index
|
||||
);
|
||||
|
||||
/*
|
||||
* rtems_get_class
|
||||
*
|
||||
* DESCRIPTION:
|
||||
*
|
||||
* This function returns the class portion of the ID.
|
||||
*
|
||||
*/
|
||||
|
||||
STATIC INLINE Objects_Classes rtems_get_class(
|
||||
Objects_Id id
|
||||
);
|
||||
|
||||
/*
|
||||
|
||||
@@ -133,14 +133,13 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
Objects_Control Object;
|
||||
Objects_Name name;
|
||||
States_Control current_state;
|
||||
rtems_task_priority current_priority;
|
||||
rtems_task_priority real_priority;
|
||||
rtems_task_priority current_priority;
|
||||
rtems_task_priority real_priority;
|
||||
unsigned32 resource_count;
|
||||
Thread_Wait_information Wait;
|
||||
Watchdog_Control Timer;
|
||||
rtems_packet_prefix *receive_packet;
|
||||
rtems_packet_prefix *receive_packet;
|
||||
/****************** end of common block ********************/
|
||||
Chain_Node Active;
|
||||
} Thread_Proxy_control;
|
||||
@@ -156,7 +155,6 @@ typedef struct {
|
||||
|
||||
typedef struct {
|
||||
Objects_Control Object;
|
||||
Objects_Name name;
|
||||
States_Control current_state;
|
||||
rtems_task_priority current_priority;
|
||||
rtems_task_priority real_priority;
|
||||
|
||||
@@ -57,13 +57,30 @@ STATIC INLINE void rtems_name_to_characters(
|
||||
*/
|
||||
|
||||
STATIC INLINE Objects_Id _Objects_Build_id(
|
||||
unsigned32 node,
|
||||
unsigned32 index
|
||||
Objects_Classes the_class,
|
||||
unsigned32 node,
|
||||
unsigned32 index
|
||||
)
|
||||
{
|
||||
return ( (node << 16) | index );
|
||||
return ( (the_class << OBJECTS_CLASS_START_BIT) |
|
||||
(node << OBJECTS_NODE_START_BIT) |
|
||||
(index << OBJECTS_INDEX_START_BIT) );
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* rtems_get_class
|
||||
*/
|
||||
|
||||
STATIC INLINE Objects_Classes rtems_get_class(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
return (Objects_Classes)
|
||||
((id >> OBJECTS_CLASS_START_BIT) & OBJECTS_CLASS_VALID_BITS);
|
||||
}
|
||||
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* rtems_get_node
|
||||
@@ -74,7 +91,7 @@ STATIC INLINE unsigned32 rtems_get_node(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
return (id >> 16);
|
||||
return (id >> OBJECTS_NODE_START_BIT) & OBJECTS_NODE_VALID_BITS;
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
@@ -87,7 +104,7 @@ STATIC INLINE unsigned32 rtems_get_index(
|
||||
Objects_Id id
|
||||
)
|
||||
{
|
||||
return (id &0xFFFF);
|
||||
return (id >> OBJECTS_INDEX_START_BIT) & OBJECTS_INDEX_VALID_BITS;
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
@@ -174,6 +191,7 @@ STATIC INLINE void _Objects_Open(
|
||||
index = rtems_get_index( the_object->id );
|
||||
information->local_table[ index ] = the_object;
|
||||
information->name_table[ index ] = name;
|
||||
the_object->name = &information->name_table[ index ];
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
@@ -192,6 +210,7 @@ STATIC INLINE void _Objects_Close(
|
||||
index = rtems_get_index( the_object->id );
|
||||
information->local_table[ index ] = NULL;
|
||||
information->name_table[ index ] = 0;
|
||||
the_object->name = 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -45,8 +45,19 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define _Objects_Build_id( _node, _index ) \
|
||||
( ((_node) << 16) | (_index) )
|
||||
#define _Objects_Build_id( _the_class, _node, _index ) \
|
||||
( ((_the_class) << OBJECTS_CLASS_START_BIT) | \
|
||||
((_node) << OBJECTS_NODE_START_BIT) | \
|
||||
((_index) << OBJECTS_INDEX_START_BIT) )
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
* rtems_get_class
|
||||
*/
|
||||
|
||||
#define rtems_get_class( _id ) \
|
||||
(Objects_Classes) \
|
||||
(((_id) >> OBJECTS_CLASS_START_BIT) & OBJECTS_CLASS_VALID_BITS)
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
@@ -55,7 +66,7 @@
|
||||
*/
|
||||
|
||||
#define rtems_get_node( _id ) \
|
||||
((_id) >> 16)
|
||||
(((_id) >> OBJECTS_NODE_START_BIT) & OBJECTS_NODE_VALID_BITS)
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
@@ -64,7 +75,7 @@
|
||||
*/
|
||||
|
||||
#define rtems_get_index( _id ) \
|
||||
((_id) & 0xFFFF)
|
||||
(((_id) >> OBJECTS_INDEX_START_BIT) & OBJECTS_INDEX_VALID_BITS)
|
||||
|
||||
/*PAGE
|
||||
*
|
||||
@@ -124,6 +135,7 @@
|
||||
_index = rtems_get_index( (_the_object)->id ); \
|
||||
(_information)->local_table[ _index ] = (_the_object); \
|
||||
(_information)->name_table[ _index ] = (_name); \
|
||||
(_the_object)->name = &(_information)->name_table[ _index ]; \
|
||||
}
|
||||
|
||||
/*PAGE
|
||||
@@ -139,6 +151,7 @@
|
||||
_index = rtems_get_index( (_the_object)->id ); \
|
||||
(_information)->local_table[ _index ] = NULL; \
|
||||
(_information)->name_table[ _index ] = 0; \
|
||||
(_the_object)->name = 0; \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user