1 /* SPDX-License-Identifier: GPL-2.0+ */
11 enum udev_ctrl_msg_type
{
12 _UDEV_CTRL_END_MESSAGES
,
13 UDEV_CTRL_SET_LOG_LEVEL
,
14 UDEV_CTRL_STOP_EXEC_QUEUE
,
15 UDEV_CTRL_START_EXEC_QUEUE
,
18 UDEV_CTRL_SET_CHILDREN_MAX
,
23 union udev_ctrl_msg_value
{
28 typedef int (*udev_ctrl_handler_t
)(struct udev_ctrl
*udev_ctrl
, enum udev_ctrl_msg_type type
,
29 const union udev_ctrl_msg_value
*value
, void *userdata
);
31 int udev_ctrl_new_from_fd(struct udev_ctrl
**ret
, int fd
);
32 static inline int udev_ctrl_new(struct udev_ctrl
**ret
) {
33 return udev_ctrl_new_from_fd(ret
, -1);
36 int udev_ctrl_enable_receiving(struct udev_ctrl
*uctrl
);
37 struct udev_ctrl
*udev_ctrl_ref(struct udev_ctrl
*uctrl
);
38 struct udev_ctrl
*udev_ctrl_unref(struct udev_ctrl
*uctrl
);
39 int udev_ctrl_cleanup(struct udev_ctrl
*uctrl
);
40 int udev_ctrl_attach_event(struct udev_ctrl
*uctrl
, sd_event
*event
);
41 int udev_ctrl_start(struct udev_ctrl
*uctrl
, udev_ctrl_handler_t callback
, void *userdata
);
42 sd_event_source
*udev_ctrl_get_event_source(struct udev_ctrl
*uctrl
);
44 int udev_ctrl_wait(struct udev_ctrl
*uctrl
, usec_t timeout
);
46 int udev_ctrl_send(struct udev_ctrl
*uctrl
, enum udev_ctrl_msg_type type
, int intval
, const char *buf
);
47 static inline int udev_ctrl_send_set_log_level(struct udev_ctrl
*uctrl
, int priority
) {
48 return udev_ctrl_send(uctrl
, UDEV_CTRL_SET_LOG_LEVEL
, priority
, NULL
);
51 static inline int udev_ctrl_send_stop_exec_queue(struct udev_ctrl
*uctrl
) {
52 return udev_ctrl_send(uctrl
, UDEV_CTRL_STOP_EXEC_QUEUE
, 0, NULL
);
55 static inline int udev_ctrl_send_start_exec_queue(struct udev_ctrl
*uctrl
) {
56 return udev_ctrl_send(uctrl
, UDEV_CTRL_START_EXEC_QUEUE
, 0, NULL
);
59 static inline int udev_ctrl_send_reload(struct udev_ctrl
*uctrl
) {
60 return udev_ctrl_send(uctrl
, UDEV_CTRL_RELOAD
, 0, NULL
);
63 static inline int udev_ctrl_send_set_env(struct udev_ctrl
*uctrl
, const char *key
) {
64 return udev_ctrl_send(uctrl
, UDEV_CTRL_SET_ENV
, 0, key
);
67 static inline int udev_ctrl_send_set_children_max(struct udev_ctrl
*uctrl
, int count
) {
68 return udev_ctrl_send(uctrl
, UDEV_CTRL_SET_CHILDREN_MAX
, count
, NULL
);
71 static inline int udev_ctrl_send_ping(struct udev_ctrl
*uctrl
) {
72 return udev_ctrl_send(uctrl
, UDEV_CTRL_PING
, 0, NULL
);
75 static inline int udev_ctrl_send_exit(struct udev_ctrl
*uctrl
) {
76 return udev_ctrl_send(uctrl
, UDEV_CTRL_EXIT
, 0, NULL
);
79 DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_ctrl
*, udev_ctrl_unref
);