mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.7 KiB
78 lines
2.7 KiB
/* SPDX-License-Identifier: GPL-2.0-only */ |
|
/* |
|
* attribute_container.h - a generic container for all classes |
|
* |
|
* Copyright (c) 2005 - James Bottomley <[email protected]> |
|
*/ |
|
|
|
#ifndef _ATTRIBUTE_CONTAINER_H_ |
|
#define _ATTRIBUTE_CONTAINER_H_ |
|
|
|
#include <linux/list.h> |
|
#include <linux/klist.h> |
|
|
|
struct device; |
|
|
|
struct attribute_container { |
|
struct list_head node; |
|
struct klist containers; |
|
struct class *class; |
|
const struct attribute_group *grp; |
|
struct device_attribute **attrs; |
|
int (*match)(struct attribute_container *, struct device *); |
|
#define ATTRIBUTE_CONTAINER_NO_CLASSDEVS 0x01 |
|
unsigned long flags; |
|
}; |
|
|
|
static inline int |
|
attribute_container_no_classdevs(struct attribute_container *atc) |
|
{ |
|
return atc->flags & ATTRIBUTE_CONTAINER_NO_CLASSDEVS; |
|
} |
|
|
|
static inline void |
|
attribute_container_set_no_classdevs(struct attribute_container *atc) |
|
{ |
|
atc->flags |= ATTRIBUTE_CONTAINER_NO_CLASSDEVS; |
|
} |
|
|
|
int attribute_container_register(struct attribute_container *cont); |
|
int __must_check attribute_container_unregister(struct attribute_container *cont); |
|
void attribute_container_create_device(struct device *dev, |
|
int (*fn)(struct attribute_container *, |
|
struct device *, |
|
struct device *)); |
|
void attribute_container_add_device(struct device *dev, |
|
int (*fn)(struct attribute_container *, |
|
struct device *, |
|
struct device *)); |
|
void attribute_container_remove_device(struct device *dev, |
|
void (*fn)(struct attribute_container *, |
|
struct device *, |
|
struct device *)); |
|
void attribute_container_device_trigger(struct device *dev, |
|
int (*fn)(struct attribute_container *, |
|
struct device *, |
|
struct device *)); |
|
int attribute_container_device_trigger_safe(struct device *dev, |
|
int (*fn)(struct attribute_container *, |
|
struct device *, |
|
struct device *), |
|
int (*undo)(struct attribute_container *, |
|
struct device *, |
|
struct device *)); |
|
void attribute_container_trigger(struct device *dev, |
|
int (*fn)(struct attribute_container *, |
|
struct device *)); |
|
int attribute_container_add_attrs(struct device *classdev); |
|
int attribute_container_add_class_device(struct device *classdev); |
|
int attribute_container_add_class_device_adapter(struct attribute_container *cont, |
|
struct device *dev, |
|
struct device *classdev); |
|
void attribute_container_remove_attrs(struct device *classdev); |
|
void attribute_container_class_device_del(struct device *classdev); |
|
struct attribute_container *attribute_container_classdev_to_container(struct device *); |
|
struct device *attribute_container_find_class_device(struct attribute_container *, struct device *); |
|
struct device_attribute **attribute_container_classdev_to_attrs(const struct device *classdev); |
|
|
|
#endif
|
|
|