]>
Commit | Line | Data |
---|---|---|
db9ecf05 | 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
57fa1d09 TG |
2 | #pragma once |
3 | ||
ac790e8b YW |
4 | #include <stdbool.h> |
5 | ||
023e75df ZJS |
6 | #include "sd-device.h" |
7 | ||
ac790e8b YW |
8 | #include "hashmap.h" |
9 | #include "log.h" | |
10 | #include "macro.h" | |
bcfe746b | 11 | #include "set.h" |
ac790e8b | 12 | |
57fa1d09 TG |
13 | #define FOREACH_DEVICE_PROPERTY(device, key, value) \ |
14 | for (key = sd_device_get_property_first(device, &(value)); \ | |
15 | key; \ | |
16 | key = sd_device_get_property_next(device, &(value))) | |
17 | ||
18 | #define FOREACH_DEVICE_TAG(device, tag) \ | |
19 | for (tag = sd_device_get_tag_first(device); \ | |
20 | tag; \ | |
21 | tag = sd_device_get_tag_next(device)) | |
22 | ||
e77b146f LP |
23 | #define FOREACH_DEVICE_CURRENT_TAG(device, tag) \ |
24 | for (tag = sd_device_get_current_tag_first(device); \ | |
25 | tag; \ | |
26 | tag = sd_device_get_current_tag_next(device)) | |
27 | ||
57fa1d09 TG |
28 | #define FOREACH_DEVICE_SYSATTR(device, attr) \ |
29 | for (attr = sd_device_get_sysattr_first(device); \ | |
30 | attr; \ | |
31 | attr = sd_device_get_sysattr_next(device)) | |
32 | ||
33 | #define FOREACH_DEVICE_DEVLINK(device, devlink) \ | |
34 | for (devlink = sd_device_get_devlink_first(device); \ | |
35 | devlink; \ | |
36 | devlink = sd_device_get_devlink_next(device)) | |
96df036f TG |
37 | |
38 | #define FOREACH_DEVICE(enumerator, device) \ | |
39 | for (device = sd_device_enumerator_get_device_first(enumerator); \ | |
40 | device; \ | |
41 | device = sd_device_enumerator_get_device_next(enumerator)) | |
42 | ||
43 | #define FOREACH_SUBSYSTEM(enumerator, device) \ | |
44 | for (device = sd_device_enumerator_get_subsystem_first(enumerator); \ | |
45 | device; \ | |
46 | device = sd_device_enumerator_get_subsystem_next(enumerator)) | |
b0cba0ca | 47 | |
ab54f12b | 48 | #define log_device_full_errno(device, level, error, ...) \ |
b0cba0ca | 49 | ({ \ |
38d1555d | 50 | const char *_sysname = NULL; \ |
b0cba0ca YW |
51 | sd_device *_d = (device); \ |
52 | int _level = (level), _error = (error); \ | |
53 | \ | |
46d4149d | 54 | if (_d && _unlikely_(log_get_max_level() >= LOG_PRI(_level))) \ |
b0cba0ca | 55 | (void) sd_device_get_sysname(_d, &_sysname); \ |
62c6bbbc | 56 | log_object_internal(_level, _error, PROJECT_FILE, __LINE__, __func__, \ |
b0cba0ca | 57 | _sysname ? "DEVICE=" : NULL, _sysname, \ |
ab54f12b | 58 | NULL, NULL, __VA_ARGS__); \ |
b0cba0ca YW |
59 | }) |
60 | ||
ab54f12b YW |
61 | #define log_device_full(device, level, ...) (void) log_device_full_errno(device, level, 0, __VA_ARGS__) |
62 | ||
63 | #define log_device_debug(device, ...) log_device_full_errno(device, LOG_DEBUG, 0, __VA_ARGS__) | |
64 | #define log_device_info(device, ...) log_device_full(device, LOG_INFO, __VA_ARGS__) | |
65 | #define log_device_notice(device, ...) log_device_full(device, LOG_NOTICE, __VA_ARGS__) | |
66 | #define log_device_warning(device, ...) log_device_full(device, LOG_WARNING, __VA_ARGS__) | |
67 | #define log_device_error(device, ...) log_device_full(device, LOG_ERR, __VA_ARGS__) | |
68 | ||
69 | #define log_device_debug_errno(device, error, ...) log_device_full_errno(device, LOG_DEBUG, error, __VA_ARGS__) | |
70 | #define log_device_info_errno(device, error, ...) log_device_full_errno(device, LOG_INFO, error, __VA_ARGS__) | |
71 | #define log_device_notice_errno(device, error, ...) log_device_full_errno(device, LOG_NOTICE, error, __VA_ARGS__) | |
72 | #define log_device_warning_errno(device, error, ...) log_device_full_errno(device, LOG_WARNING, error, __VA_ARGS__) | |
73 | #define log_device_error_errno(device, error, ...) log_device_full_errno(device, LOG_ERR, error, __VA_ARGS__) | |
ac790e8b YW |
74 | |
75 | bool device_match_sysattr(sd_device *device, Hashmap *match_sysattr, Hashmap *nomatch_sysattr); | |
bcfe746b | 76 | bool device_match_parent(sd_device *device, Set *match_parent, Set *nomatch_parent); |