#include "udev_libc_wrapper.h"
#include "udev_version.h"
-#define COMMENT_CHARACTER '#'
-#define PATH_TO_NAME_CHAR '@'
-#define LINE_SIZE 512
-#define NAME_SIZE 128
-#define PATH_SIZE 256
-#define USER_SIZE 32
-#define SEQNUM_SIZE 32
-#define VALUE_SIZE 128
-
-#define DEFAULT_PARTITIONS_COUNT 15
-#define UDEV_ALARM_TIMEOUT 180
+#define COMMENT_CHARACTER '#'
+#define PATH_TO_NAME_CHAR '@'
+#define LINE_SIZE 512
+#define NAME_SIZE 128
+#define PATH_SIZE 256
+#define USER_SIZE 32
+#define SEQNUM_SIZE 32
+#define VALUE_SIZE 128
+
+#define DEFAULT_PARTITIONS_COUNT 15
+#define UDEV_ALARM_TIMEOUT 180
#define UDEV_MAX(a,b) ((a) > (b) ? (a) : (b))
/* pipes */
-#define READ_END 0
-#define WRITE_END 1
+#define READ_END 0
+#define WRITE_END 1
-#define DB_DIR ".udev/db"
+#define DB_DIR ".udev/db"
struct udev_rules;
struct sysfs_device {
- struct list_head node; /* for device cache */
+ struct list_head node; /* for device cache */
+ struct sysfs_device *parent; /* already cached parent*/
char devpath[PATH_SIZE];
- char subsystem[NAME_SIZE]; /* $class/$bus/"drivers" */
- char kernel_name[NAME_SIZE]; /* device instance name */
+ char subsystem[NAME_SIZE]; /* $class/$bus/"drivers" */
+ char kernel_name[NAME_SIZE]; /* device instance name */
char kernel_number[NAME_SIZE];
- char driver[NAME_SIZE]; /* device driver name */
+ char driver[NAME_SIZE]; /* device driver name */
};
struct udevice {
/* device event */
- struct sysfs_device *dev; /* points to dev_local by default */
+ struct sysfs_device *dev; /* points to dev_local by default */
struct sysfs_device dev_local;
+ struct sysfs_device *dev_parent; /* current parent device used for matching */
char action[NAME_SIZE];
/* node */
extern void sysfs_device_set_values(struct sysfs_device *dev, const char *devpath, const char *subsystem);
extern struct sysfs_device *sysfs_device_get(const char *devpath);
extern struct sysfs_device *sysfs_device_get_parent(struct sysfs_device *dev);
+extern struct sysfs_device *sysfs_device_get_parent_with_subsystem(struct sysfs_device *dev, const char *subsystem);
extern char *sysfs_attr_get_value(const char *devpath, const char *attr_name);
-/* udev_add.c */
-extern int udev_make_node(struct udevice *udev, const char *file, dev_t devt, mode_t mode, uid_t uid, gid_t gid);
-extern int udev_add_device(struct udevice *udev);
-
-/* udev_remove.c */
-extern int udev_remove_device(struct udevice *udev);
+/* udev_node.c */
+extern int udev_node_mknod(struct udevice *udev, const char *file, dev_t devt, mode_t mode, uid_t uid, gid_t gid);
+extern int udev_node_add(struct udevice *udev);
+extern int udev_node_remove(struct udevice *udev);
/* udev_db.c */
extern int udev_db_add_device(struct udevice *dev);