7#ifndef ZEPHYR_INCLUDE_KERNEL_OBJ_CORE_H_
8#define ZEPHYR_INCLUDE_KERNEL_OBJ_CORE_H_
23#define K_OBJ_CORE(kobj) (&((kobj)->obj_core))
28#define K_OBJ_TYPE_ID_GEN(s) ((s[0] << 24) | (s[1] << 16) | (s[2] << 8) | (s[3]))
33#define K_OBJ_TYPE_CONDVAR_ID K_OBJ_TYPE_ID_GEN("COND")
35#define K_OBJ_TYPE_CPU_ID K_OBJ_TYPE_ID_GEN("CPU_")
37#define K_OBJ_TYPE_EVENT_ID K_OBJ_TYPE_ID_GEN("EVNT")
39#define K_OBJ_TYPE_FIFO_ID K_OBJ_TYPE_ID_GEN("FIFO")
41#define K_OBJ_TYPE_KERNEL_ID K_OBJ_TYPE_ID_GEN("KRNL")
43#define K_OBJ_TYPE_LIFO_ID K_OBJ_TYPE_ID_GEN("LIFO")
45#define K_OBJ_TYPE_MEM_BLOCK_ID K_OBJ_TYPE_ID_GEN("MBLK")
47#define K_OBJ_TYPE_MBOX_ID K_OBJ_TYPE_ID_GEN("MBOX")
49#define K_OBJ_TYPE_MEM_SLAB_ID K_OBJ_TYPE_ID_GEN("SLAB")
51#define K_OBJ_TYPE_MSGQ_ID K_OBJ_TYPE_ID_GEN("MSGQ")
53#define K_OBJ_TYPE_MUTEX_ID K_OBJ_TYPE_ID_GEN("MUTX")
55#define K_OBJ_TYPE_PIPE_ID K_OBJ_TYPE_ID_GEN("PIPE")
57#define K_OBJ_TYPE_SEM_ID K_OBJ_TYPE_ID_GEN("SEM4")
59#define K_OBJ_TYPE_STACK_ID K_OBJ_TYPE_ID_GEN("STCK")
61#define K_OBJ_TYPE_THREAD_ID K_OBJ_TYPE_ID_GEN("THRD")
63#define K_OBJ_TYPE_TIMER_ID K_OBJ_TYPE_ID_GEN("TIMR")
73#define K_OBJ_CORE_INIT(_objp, _obj_type) \
74 extern struct k_obj_type _obj_type; \
75 k_obj_core_init(_objp, &_obj_type)
77#define K_OBJ_CORE_LINK(objp) k_obj_core_link(objp)
79#define K_OBJ_CORE_INIT(objp, type) do { } while (0)
80#define K_OBJ_CORE_LINK(objp) do { } while (0)
116#ifdef CONFIG_OBJ_CORE_STATS
126#ifdef CONFIG_OBJ_CORE_STATS
141struct k_obj_core_desc {
143 const void *objs_start;
144 const void *objs_end;
145 size_t obj_core_offset;
148#ifdef CONFIG_OBJ_CORE_STATS
155#ifdef CONFIG_OBJ_CORE_STATS
156#define Z_OBJ_CORE_STATS_DESC(_stats, _soff, _ssz) \
157 .stats_desc = (_stats), .stats_offset = (_soff), .stats_size = (_ssz),
159#define Z_OBJ_CORE_STATS_DESC(_stats, _soff, _ssz)
162#define Z_K_OBJ_TYPE_DEFINE(_type_var, _struct, _id, _stats, _soff, _ssz) \
163 STRUCT_SECTION_START_EXTERN(_struct); \
164 STRUCT_SECTION_END_EXTERN(_struct); \
165 static const STRUCT_SECTION_ITERABLE(k_obj_core_desc, \
166 _obj_core_desc_##_struct) = { \
167 .type = &(_type_var), \
168 .objs_start = STRUCT_SECTION_START(_struct), \
169 .objs_end = STRUCT_SECTION_END(_struct), \
170 .obj_core_offset = offsetof(struct _struct, obj_core), \
171 .obj_size = sizeof(struct _struct), \
173 Z_OBJ_CORE_STATS_DESC(_stats, _soff, _ssz) \
189#define K_OBJ_TYPE_DEFINE(_type_var, _struct, _id, _stats) \
190 Z_K_OBJ_TYPE_DEFINE(_type_var, _struct, _id, _stats, 0, 0)
204#define K_OBJ_TYPE_DEFINE_STATS(_type_var, _struct, _id, _stats, _member) \
205 Z_K_OBJ_TYPE_DEFINE(_type_var, _struct, _id, _stats, \
206 offsetof(struct _struct, _member), \
207 sizeof(((struct _struct *)0)->_member))
222#define K_OBJ_TYPE_DEFINE_TYPE_ONLY(_type_var, _struct, _id, _stats) \
223 static const STRUCT_SECTION_ITERABLE(k_obj_core_desc, \
224 _obj_core_desc_##_struct) = { \
225 .type = &(_type_var), \
226 .objs_start = NULL, \
228 .obj_core_offset = offsetof(struct _struct, obj_core), \
229 .obj_size = sizeof(struct _struct), \
231 Z_OBJ_CORE_STATS_DESC(_stats, 0, 0) \
363#ifdef CONFIG_OBJ_CORE_STATS
372static inline void k_obj_type_stats_init(
struct k_obj_type *type,
375 type->stats_desc = stats_desc;
387static inline void k_obj_core_stats_init(
struct k_obj_core *obj_core,
390 obj_core->stats = stats;
int k_obj_type_walk_locked(struct k_obj_type *type, int(*func)(struct k_obj_core *, void *), void *data)
Walk the object type's list of object cores.
struct k_obj_type * k_obj_type_find(uint32_t type_id)
Find a specific object type by ID.
int k_obj_type_walk_unlocked(struct k_obj_type *type, int(*func)(struct k_obj_core *, void *), void *data)
Walk the object type's list of object cores.
void k_obj_core_link(struct k_obj_core *obj_core)
Link the kernel object to the kernel object type list.
void k_obj_core_unlink(struct k_obj_core *obj_core)
Unlink the kernel object from the kernel object type list.
void k_obj_core_init_and_link(struct k_obj_core *obj_core, struct k_obj_type *type)
Automatically link the kernel object after initializing it.
void k_obj_core_init(struct k_obj_core *obj_core, struct k_obj_type *type)
Initialize the core of the kernel object.
int k_obj_core_stats_enable(struct k_obj_core *obj_core)
Reset the stats associated with the kernel object.
int k_obj_core_stats_reset(struct k_obj_core *obj_core)
Reset the stats associated with the kernel object.
int k_obj_core_stats_query(struct k_obj_core *obj_core, void *stats, size_t stats_len)
Retrieve the statistics associated with the kernel object.
int k_obj_core_stats_disable(struct k_obj_core *obj_core)
Stop gathering the stats associated with the kernel object.
int k_obj_core_stats_raw(struct k_obj_core *obj_core, void *stats, size_t stats_len)
Retrieve the raw statistics associated with the kernel object.
int k_obj_core_stats_deregister(struct k_obj_core *obj_core)
Deregister kernel object from gathering statistics.
int k_obj_core_stats_register(struct k_obj_core *obj_core, void *stats, size_t stats_len)
Register kernel object for gathering statistics.
struct _slist sys_slist_t
Single-linked list structure.
Definition slist.h:52
struct _snode sys_snode_t
Single-linked list node structure.
Definition slist.h:42
Header file for the single-linked list API.
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
Object core statistics descriptor.
Definition obj_core.h:94
int(* raw)(struct k_obj_core *obj_core, void *stats)
Function pointer to retrieve internal representation of stats.
Definition obj_core.h:99
int(* reset)(struct k_obj_core *obj_core)
Function pointer to reset object's statistics.
Definition obj_core.h:103
size_t raw_size
Internal representation stats buffer size.
Definition obj_core.h:95
int(* query)(struct k_obj_core *obj_core, void *stats)
Function pointer to retrieve reported statistics.
Definition obj_core.h:101
size_t query_size
Stats buffer size used for reporting.
Definition obj_core.h:96
int(* enable)(struct k_obj_core *obj_core)
Function pointer to enable object's statistics gathering.
Definition obj_core.h:107
int(* disable)(struct k_obj_core *obj_core)
Function pointer to disable object's statistics gathering.
Definition obj_core.h:105
Object core structure.
Definition obj_core.h:123
sys_snode_t node
Object node within object type's list.
Definition obj_core.h:124
struct k_obj_type * type
Object type to which object belongs.
Definition obj_core.h:125
Object type structure.
Definition obj_core.h:111
size_t obj_core_offset
Offset to obj_core field.
Definition obj_core.h:115
sys_snode_t node
Node within list of object types.
Definition obj_core.h:112
sys_slist_t list
List of objects of this object type.
Definition obj_core.h:113
uint32_t id
Unique type ID.
Definition obj_core.h:114
Iterable sections helpers.