199ca880aSopenharmony_ci/*** 299ca880aSopenharmony_ci This file is part of systemd. 399ca880aSopenharmony_ci 499ca880aSopenharmony_ci Copyright 2008-2012 Kay Sievers <kay@vrfy.org> 599ca880aSopenharmony_ci 699ca880aSopenharmony_ci systemd is free software; you can redistribute it and/or modify it 799ca880aSopenharmony_ci under the terms of the GNU Lesser General Public License as published by 899ca880aSopenharmony_ci the Free Software Foundation; either version 2.1 of the License, or 999ca880aSopenharmony_ci (at your option) any later version. 1099ca880aSopenharmony_ci 1199ca880aSopenharmony_ci systemd is distributed in the hope that it will be useful, but 1299ca880aSopenharmony_ci WITHOUT ANY WARRANTY; without even the implied warranty of 1399ca880aSopenharmony_ci MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1499ca880aSopenharmony_ci Lesser General Public License for more details. 1599ca880aSopenharmony_ci 1699ca880aSopenharmony_ci You should have received a copy of the GNU Lesser General Public License 1799ca880aSopenharmony_ci along with systemd; If not, see <http://www.gnu.org/licenses/>. 1899ca880aSopenharmony_ci***/ 1999ca880aSopenharmony_ci 2099ca880aSopenharmony_ci#pragma once 2199ca880aSopenharmony_ci 2299ca880aSopenharmony_ci#include <stdarg.h> 2399ca880aSopenharmony_ci#include <sys/sysmacros.h> 2499ca880aSopenharmony_ci#include <sys/types.h> 2599ca880aSopenharmony_ci#include <sys/stat.h> 2699ca880aSopenharmony_ci 2799ca880aSopenharmony_ci#ifdef __cplusplus 2899ca880aSopenharmony_ciextern "C" { 2999ca880aSopenharmony_ci#endif 3099ca880aSopenharmony_ci 3199ca880aSopenharmony_ci/* 3299ca880aSopenharmony_ci * udev - library context 3399ca880aSopenharmony_ci * 3499ca880aSopenharmony_ci * reads the udev config and system environment 3599ca880aSopenharmony_ci * allows custom logging 3699ca880aSopenharmony_ci */ 3799ca880aSopenharmony_cistruct udev; 3899ca880aSopenharmony_cistruct udev *udev_ref(struct udev *udev); 3999ca880aSopenharmony_cistruct udev *udev_unref(struct udev *udev); 4099ca880aSopenharmony_cistruct udev *udev_new(void); 4199ca880aSopenharmony_civoid udev_set_log_fn(struct udev *udev, 4299ca880aSopenharmony_ci void (*log_fn)(struct udev *udev, 4399ca880aSopenharmony_ci int priority, const char *file, int line, const char *fn, 4499ca880aSopenharmony_ci const char *format, va_list args)) __attribute__ ((deprecated)); 4599ca880aSopenharmony_ciint udev_get_log_priority(struct udev *udev) __attribute__ ((deprecated)); 4699ca880aSopenharmony_civoid udev_set_log_priority(struct udev *udev, int priority) __attribute__ ((deprecated)); 4799ca880aSopenharmony_civoid *udev_get_userdata(struct udev *udev); 4899ca880aSopenharmony_civoid udev_set_userdata(struct udev *udev, void *userdata); 4999ca880aSopenharmony_ci 5099ca880aSopenharmony_ci/* 5199ca880aSopenharmony_ci * udev_list 5299ca880aSopenharmony_ci * 5399ca880aSopenharmony_ci * access to libudev generated lists 5499ca880aSopenharmony_ci */ 5599ca880aSopenharmony_cistruct udev_list_entry; 5699ca880aSopenharmony_cistruct udev_list_entry *udev_list_entry_get_next(struct udev_list_entry *list_entry); 5799ca880aSopenharmony_cistruct udev_list_entry *udev_list_entry_get_by_name(struct udev_list_entry *list_entry, const char *name); 5899ca880aSopenharmony_ciconst char *udev_list_entry_get_name(struct udev_list_entry *list_entry); 5999ca880aSopenharmony_ciconst char *udev_list_entry_get_value(struct udev_list_entry *list_entry); 6099ca880aSopenharmony_ci/** 6199ca880aSopenharmony_ci * udev_list_entry_foreach: 6299ca880aSopenharmony_ci * @list_entry: entry to store the current position 6399ca880aSopenharmony_ci * @first_entry: first entry to start with 6499ca880aSopenharmony_ci * 6599ca880aSopenharmony_ci * Helper to iterate over all entries of a list. 6699ca880aSopenharmony_ci */ 6799ca880aSopenharmony_ci#define udev_list_entry_foreach(list_entry, first_entry) \ 6899ca880aSopenharmony_ci for (list_entry = first_entry; \ 6999ca880aSopenharmony_ci list_entry != NULL; \ 7099ca880aSopenharmony_ci list_entry = udev_list_entry_get_next(list_entry)) 7199ca880aSopenharmony_ci 7299ca880aSopenharmony_ci/* 7399ca880aSopenharmony_ci * udev_device 7499ca880aSopenharmony_ci * 7599ca880aSopenharmony_ci * access to sysfs/kernel devices 7699ca880aSopenharmony_ci */ 7799ca880aSopenharmony_cistruct udev_device; 7899ca880aSopenharmony_cistruct udev_device *udev_device_ref(struct udev_device *udev_device); 7999ca880aSopenharmony_cistruct udev_device *udev_device_unref(struct udev_device *udev_device); 8099ca880aSopenharmony_cistruct udev *udev_device_get_udev(struct udev_device *udev_device); 8199ca880aSopenharmony_cistruct udev_device *udev_device_new_from_syspath(struct udev *udev, const char *syspath); 8299ca880aSopenharmony_cistruct udev_device *udev_device_new_from_devnum(struct udev *udev, char type, dev_t devnum); 8399ca880aSopenharmony_cistruct udev_device *udev_device_new_from_subsystem_sysname(struct udev *udev, const char *subsystem, const char *sysname); 8499ca880aSopenharmony_cistruct udev_device *udev_device_new_from_device_id(struct udev *udev, const char *id); 8599ca880aSopenharmony_cistruct udev_device *udev_device_new_from_environment(struct udev *udev); 8699ca880aSopenharmony_ci/* udev_device_get_parent_*() does not take a reference on the returned device, it is automatically unref'd with the parent */ 8799ca880aSopenharmony_cistruct udev_device *udev_device_get_parent(struct udev_device *udev_device); 8899ca880aSopenharmony_cistruct udev_device *udev_device_get_parent_with_subsystem_devtype(struct udev_device *udev_device, 8999ca880aSopenharmony_ci const char *subsystem, const char *devtype); 9099ca880aSopenharmony_ci/* retrieve device properties */ 9199ca880aSopenharmony_ciint udev_device_read_db(struct udev_device *udev_device); 9299ca880aSopenharmony_ciconst char *udev_device_get_devpath(struct udev_device *udev_device); 9399ca880aSopenharmony_ciconst char *udev_device_get_subsystem(struct udev_device *udev_device); 9499ca880aSopenharmony_ciconst char *udev_device_get_devtype(struct udev_device *udev_device); 9599ca880aSopenharmony_ciconst char *udev_device_get_syspath(struct udev_device *udev_device); 9699ca880aSopenharmony_ciconst char *udev_device_get_sysname(struct udev_device *udev_device); 9799ca880aSopenharmony_ciconst char *udev_device_get_sysnum(struct udev_device *udev_device); 9899ca880aSopenharmony_ciconst char *udev_device_get_devnode(struct udev_device *udev_device); 9999ca880aSopenharmony_ciint udev_device_get_is_initialized(struct udev_device *udev_device); 10099ca880aSopenharmony_cistruct udev_list_entry *udev_device_get_devlinks_list_entry(struct udev_device *udev_device); 10199ca880aSopenharmony_cistruct udev_list_entry *udev_device_get_properties_list_entry(struct udev_device *udev_device); 10299ca880aSopenharmony_cistruct udev_list_entry *udev_device_get_tags_list_entry(struct udev_device *udev_device); 10399ca880aSopenharmony_cistruct udev_list_entry *udev_device_get_sysattr_list_entry(struct udev_device *udev_device); 10499ca880aSopenharmony_ciconst char *udev_device_get_property_value(struct udev_device *udev_device, const char *key); 10599ca880aSopenharmony_ciconst char *udev_device_get_driver(struct udev_device *udev_device); 10699ca880aSopenharmony_cidev_t udev_device_get_devnum(struct udev_device *udev_device); 10799ca880aSopenharmony_ciconst char *udev_device_get_action(struct udev_device *udev_device); 10899ca880aSopenharmony_ciunsigned long long int udev_device_get_seqnum(struct udev_device *udev_device); 10999ca880aSopenharmony_ciunsigned long long int udev_device_get_usec_since_initialized(struct udev_device *udev_device); 11099ca880aSopenharmony_ciconst char *udev_device_get_sysattr_value(struct udev_device *udev_device, const char *sysattr); 11199ca880aSopenharmony_ciint udev_device_set_sysattr_value(struct udev_device *udev_device, const char *sysattr, char *value); 11299ca880aSopenharmony_ciint udev_device_has_tag(struct udev_device *udev_device, const char *tag); 11399ca880aSopenharmony_ci 11499ca880aSopenharmony_ci/* 11599ca880aSopenharmony_ci * udev_monitor 11699ca880aSopenharmony_ci * 11799ca880aSopenharmony_ci * access to kernel uevents and udev events 11899ca880aSopenharmony_ci */ 11999ca880aSopenharmony_cistruct udev_monitor; 12099ca880aSopenharmony_cistruct udev_monitor *udev_monitor_ref(struct udev_monitor *udev_monitor); 12199ca880aSopenharmony_cistruct udev_monitor *udev_monitor_unref(struct udev_monitor *udev_monitor); 12299ca880aSopenharmony_cistruct udev *udev_monitor_get_udev(struct udev_monitor *udev_monitor); 12399ca880aSopenharmony_ci/* kernel and udev generated events over netlink */ 12499ca880aSopenharmony_cistruct udev_monitor *udev_monitor_new_from_netlink(struct udev *udev, const char *name); 12599ca880aSopenharmony_ci/* bind socket */ 12699ca880aSopenharmony_ciint udev_monitor_enable_receiving(struct udev_monitor *udev_monitor); 12799ca880aSopenharmony_ciint udev_monitor_set_receive_buffer_size(struct udev_monitor *udev_monitor, int size); 12899ca880aSopenharmony_ciint udev_monitor_get_fd(struct udev_monitor *udev_monitor); 12999ca880aSopenharmony_cistruct udev_device *udev_monitor_receive_device(struct udev_monitor *udev_monitor); 13099ca880aSopenharmony_ci/* in-kernel socket filters to select messages that get delivered to a listener */ 13199ca880aSopenharmony_ciint udev_monitor_filter_add_match_subsystem_devtype(struct udev_monitor *udev_monitor, 13299ca880aSopenharmony_ci const char *subsystem, const char *devtype); 13399ca880aSopenharmony_ciint udev_monitor_filter_add_match_tag(struct udev_monitor *udev_monitor, const char *tag); 13499ca880aSopenharmony_ciint udev_monitor_filter_update(struct udev_monitor *udev_monitor); 13599ca880aSopenharmony_ciint udev_monitor_filter_remove(struct udev_monitor *udev_monitor); 13699ca880aSopenharmony_ci 13799ca880aSopenharmony_ci/* 13899ca880aSopenharmony_ci * udev_enumerate 13999ca880aSopenharmony_ci * 14099ca880aSopenharmony_ci * search sysfs for specific devices and provide a sorted list 14199ca880aSopenharmony_ci */ 14299ca880aSopenharmony_cistruct udev_enumerate; 14399ca880aSopenharmony_cistruct udev_enumerate *udev_enumerate_ref(struct udev_enumerate *udev_enumerate); 14499ca880aSopenharmony_cistruct udev_enumerate *udev_enumerate_unref(struct udev_enumerate *udev_enumerate); 14599ca880aSopenharmony_cistruct udev *udev_enumerate_get_udev(struct udev_enumerate *udev_enumerate); 14699ca880aSopenharmony_cistruct udev_enumerate *udev_enumerate_new(struct udev *udev); 14799ca880aSopenharmony_ci/* device properties filter */ 14899ca880aSopenharmony_ciint udev_enumerate_add_match_subsystem(struct udev_enumerate *udev_enumerate, const char *subsystem); 14999ca880aSopenharmony_ciint udev_enumerate_add_nomatch_subsystem(struct udev_enumerate *udev_enumerate, const char *subsystem); 15099ca880aSopenharmony_ciint udev_enumerate_add_match_sysattr(struct udev_enumerate *udev_enumerate, const char *sysattr, const char *value); 15199ca880aSopenharmony_ciint udev_enumerate_add_nomatch_sysattr(struct udev_enumerate *udev_enumerate, const char *sysattr, const char *value); 15299ca880aSopenharmony_ciint udev_enumerate_add_match_property(struct udev_enumerate *udev_enumerate, const char *property, const char *value); 15399ca880aSopenharmony_ciint udev_enumerate_add_match_sysname(struct udev_enumerate *udev_enumerate, const char *sysname); 15499ca880aSopenharmony_ciint udev_enumerate_add_match_tag(struct udev_enumerate *udev_enumerate, const char *tag); 15599ca880aSopenharmony_ciint udev_enumerate_add_match_parent(struct udev_enumerate *udev_enumerate, struct udev_device *parent); 15699ca880aSopenharmony_ciint udev_enumerate_add_match_is_initialized(struct udev_enumerate *udev_enumerate); 15799ca880aSopenharmony_ciint udev_enumerate_add_syspath(struct udev_enumerate *udev_enumerate, const char *syspath); 15899ca880aSopenharmony_ci/* run enumeration with active filters */ 15999ca880aSopenharmony_ciint udev_enumerate_scan_devices(struct udev_enumerate *udev_enumerate); 16099ca880aSopenharmony_ciint udev_enumerate_scan_subsystems(struct udev_enumerate *udev_enumerate); 16199ca880aSopenharmony_ci/* return device list */ 16299ca880aSopenharmony_cistruct udev_list_entry *udev_enumerate_get_list_entry(struct udev_enumerate *udev_enumerate); 16399ca880aSopenharmony_ci 16499ca880aSopenharmony_ci/* 16599ca880aSopenharmony_ci * udev_queue 16699ca880aSopenharmony_ci * 16799ca880aSopenharmony_ci * access to the currently running udev events 16899ca880aSopenharmony_ci */ 16999ca880aSopenharmony_cistruct udev_queue; 17099ca880aSopenharmony_cistruct udev_queue *udev_queue_ref(struct udev_queue *udev_queue); 17199ca880aSopenharmony_cistruct udev_queue *udev_queue_unref(struct udev_queue *udev_queue); 17299ca880aSopenharmony_cistruct udev *udev_queue_get_udev(struct udev_queue *udev_queue); 17399ca880aSopenharmony_cistruct udev_queue *udev_queue_new(struct udev *udev); 17499ca880aSopenharmony_ciunsigned long long int udev_queue_get_kernel_seqnum(struct udev_queue *udev_queue) __attribute__ ((deprecated)); 17599ca880aSopenharmony_ciunsigned long long int udev_queue_get_udev_seqnum(struct udev_queue *udev_queue) __attribute__ ((deprecated)); 17699ca880aSopenharmony_ciint udev_queue_get_udev_is_active(struct udev_queue *udev_queue); 17799ca880aSopenharmony_ciint udev_queue_get_queue_is_empty(struct udev_queue *udev_queue); 17899ca880aSopenharmony_ciint udev_queue_get_seqnum_is_finished(struct udev_queue *udev_queue, unsigned long long int seqnum) __attribute__ ((deprecated)); 17999ca880aSopenharmony_ciint udev_queue_get_seqnum_sequence_is_finished(struct udev_queue *udev_queue, 18099ca880aSopenharmony_ci unsigned long long int start, unsigned long long int end) __attribute__ ((deprecated)); 18199ca880aSopenharmony_ciint udev_queue_get_fd(struct udev_queue *udev_queue); 18299ca880aSopenharmony_ciint udev_queue_flush(struct udev_queue *udev_queue); 18399ca880aSopenharmony_cistruct udev_list_entry *udev_queue_get_queued_list_entry(struct udev_queue *udev_queue) __attribute__ ((deprecated)); 18499ca880aSopenharmony_ci 18599ca880aSopenharmony_ci/* 18699ca880aSopenharmony_ci * udev_hwdb 18799ca880aSopenharmony_ci * 18899ca880aSopenharmony_ci * access to the static hardware properties database 18999ca880aSopenharmony_ci */ 19099ca880aSopenharmony_cistruct udev_hwdb; 19199ca880aSopenharmony_cistruct udev_hwdb *udev_hwdb_new(struct udev *udev); 19299ca880aSopenharmony_cistruct udev_hwdb *udev_hwdb_ref(struct udev_hwdb *hwdb); 19399ca880aSopenharmony_cistruct udev_hwdb *udev_hwdb_unref(struct udev_hwdb *hwdb); 19499ca880aSopenharmony_cistruct udev_list_entry *udev_hwdb_get_properties_list_entry(struct udev_hwdb *hwdb, const char *modalias, unsigned int flags); 19599ca880aSopenharmony_ci 19699ca880aSopenharmony_ci/* 19799ca880aSopenharmony_ci * udev_util 19899ca880aSopenharmony_ci * 19999ca880aSopenharmony_ci * udev specific utilities 20099ca880aSopenharmony_ci */ 20199ca880aSopenharmony_ciint udev_util_encode_string(const char *str, char *str_enc, size_t len); 20299ca880aSopenharmony_ci 20399ca880aSopenharmony_ci 20499ca880aSopenharmony_ci#ifdef __cplusplus 20599ca880aSopenharmony_ci} /* extern "C" */ 20699ca880aSopenharmony_ci#endif 207