kernel/poll: add user tag to struct k_poll_event
This will allow users to install a way of finding out what the event and the objects are used for without looking at the object itself, or to tag a bunch of objects that belong together. The runtime init function _does not_ take a tag so that there is no runtime hit if not needed. The static initializer macro _does_ take the tag, so that it does not have to be initialized at runtime if needed, and thus avoids a runtime hit. Change-Id: I89a36c6f969ff952f9d1673b1bb5136e407535c6 Signed-off-by: Benjamin Walsh <walsh.benj@gmail.com>
This commit is contained in:
parent
1eba370efd
commit
969d4a7ff1
2 changed files with 23 additions and 3 deletions
|
@ -3151,7 +3151,12 @@ enum _poll_states_bits {
|
||||||
#define _POLL_STATE_BIT(state) (1 << ((state) - 1))
|
#define _POLL_STATE_BIT(state) (1 << ((state) - 1))
|
||||||
|
|
||||||
#define _POLL_EVENT_NUM_UNUSED_BITS \
|
#define _POLL_EVENT_NUM_UNUSED_BITS \
|
||||||
(32 - (_POLL_NUM_TYPES + _POLL_NUM_STATES + 1 /* modes */))
|
(32 - (0 \
|
||||||
|
+ 8 /* tag */ \
|
||||||
|
+ _POLL_NUM_TYPES \
|
||||||
|
+ _POLL_NUM_STATES \
|
||||||
|
+ 1 /* modes */ \
|
||||||
|
))
|
||||||
|
|
||||||
#if _POLL_EVENT_NUM_UNUSED_BITS < 0
|
#if _POLL_EVENT_NUM_UNUSED_BITS < 0
|
||||||
#error overflow of 32-bit word in struct k_poll_event
|
#error overflow of 32-bit word in struct k_poll_event
|
||||||
|
@ -3217,6 +3222,9 @@ struct k_poll_event {
|
||||||
/* PRIVATE - DO NOT TOUCH */
|
/* PRIVATE - DO NOT TOUCH */
|
||||||
struct _poller *poller;
|
struct _poller *poller;
|
||||||
|
|
||||||
|
/* optional user-specified tag, opaque, untouched by the API */
|
||||||
|
uint32_t tag:8;
|
||||||
|
|
||||||
/* bitfield of event types (bitwise-ORed K_POLL_TYPE_xxx values) */
|
/* bitfield of event types (bitwise-ORed K_POLL_TYPE_xxx values) */
|
||||||
uint32_t type:_POLL_NUM_TYPES;
|
uint32_t type:_POLL_NUM_TYPES;
|
||||||
|
|
||||||
|
@ -3238,14 +3246,25 @@ struct k_poll_event {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
#define K_POLL_EVENT_INITIALIZER(event_type, event_mode, event_data) \
|
#define K_POLL_EVENT_INITIALIZER(event_type, event_mode, event_obj) \
|
||||||
{ \
|
{ \
|
||||||
.poller = NULL, \
|
.poller = NULL, \
|
||||||
.type = event_type, \
|
.type = event_type, \
|
||||||
.state = K_POLL_STATE_NOT_READY, \
|
.state = K_POLL_STATE_NOT_READY, \
|
||||||
.mode = event_mode, \
|
.mode = event_mode, \
|
||||||
.unused = 0, \
|
.unused = 0, \
|
||||||
{ .obj = event_data }, \
|
{ .obj = event_obj }, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define K_POLL_EVENT_STATIC_INITIALIZER(event_type, event_mode, event_obj, \
|
||||||
|
event_tag) \
|
||||||
|
{ \
|
||||||
|
.type = event_type, \
|
||||||
|
.tag = event_tag, \
|
||||||
|
.state = K_POLL_STATE_NOT_READY, \
|
||||||
|
.mode = event_mode, \
|
||||||
|
.unused = 0, \
|
||||||
|
{ .obj = event_obj }, \
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -31,6 +31,7 @@ void k_poll_event_init(struct k_poll_event *event, uint32_t type,
|
||||||
__ASSERT(obj, "must provide an object\n");
|
__ASSERT(obj, "must provide an object\n");
|
||||||
|
|
||||||
event->poller = NULL;
|
event->poller = NULL;
|
||||||
|
/* event->tag is left uninitialized: the user will set it if needed */
|
||||||
event->type = type;
|
event->type = type;
|
||||||
event->state = K_POLL_STATE_NOT_READY;
|
event->state = K_POLL_STATE_NOT_READY;
|
||||||
event->mode = mode;
|
event->mode = mode;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue