Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0-only */ 2 : : /* 3 : : * attribute_container.h - a generic container for all classes 4 : : * 5 : : * Copyright (c) 2005 - James Bottomley <James.Bottomley@steeleye.com> 6 : : */ 7 : : 8 : : #ifndef _ATTRIBUTE_CONTAINER_H_ 9 : : #define _ATTRIBUTE_CONTAINER_H_ 10 : : 11 : : #include <linux/list.h> 12 : : #include <linux/klist.h> 13 : : 14 : : struct device; 15 : : 16 : : struct attribute_container { 17 : : struct list_head node; 18 : : struct klist containers; 19 : : struct class *class; 20 : : const struct attribute_group *grp; 21 : : struct device_attribute **attrs; 22 : : int (*match)(struct attribute_container *, struct device *); 23 : : #define ATTRIBUTE_CONTAINER_NO_CLASSDEVS 0x01 24 : : unsigned long flags; 25 : : }; 26 : : 27 : : static inline int 28 : : attribute_container_no_classdevs(struct attribute_container *atc) 29 : : { 30 : 0 : return atc->flags & ATTRIBUTE_CONTAINER_NO_CLASSDEVS; 31 : : } 32 : : 33 : : static inline void 34 : : attribute_container_set_no_classdevs(struct attribute_container *atc) 35 : : { 36 : 0 : atc->flags |= ATTRIBUTE_CONTAINER_NO_CLASSDEVS; 37 : : } 38 : : 39 : : int attribute_container_register(struct attribute_container *cont); 40 : : int __must_check attribute_container_unregister(struct attribute_container *cont); 41 : : void attribute_container_create_device(struct device *dev, 42 : : int (*fn)(struct attribute_container *, 43 : : struct device *, 44 : : struct device *)); 45 : : void attribute_container_add_device(struct device *dev, 46 : : int (*fn)(struct attribute_container *, 47 : : struct device *, 48 : : struct device *)); 49 : : void attribute_container_remove_device(struct device *dev, 50 : : void (*fn)(struct attribute_container *, 51 : : struct device *, 52 : : struct device *)); 53 : : void attribute_container_device_trigger(struct device *dev, 54 : : int (*fn)(struct attribute_container *, 55 : : struct device *, 56 : : struct device *)); 57 : : void attribute_container_trigger(struct device *dev, 58 : : int (*fn)(struct attribute_container *, 59 : : struct device *)); 60 : : int attribute_container_add_attrs(struct device *classdev); 61 : : int attribute_container_add_class_device(struct device *classdev); 62 : : int attribute_container_add_class_device_adapter(struct attribute_container *cont, 63 : : struct device *dev, 64 : : struct device *classdev); 65 : : void attribute_container_remove_attrs(struct device *classdev); 66 : : void attribute_container_class_device_del(struct device *classdev); 67 : : struct attribute_container *attribute_container_classdev_to_container(struct device *); 68 : : struct device *attribute_container_find_class_device(struct attribute_container *, struct device *); 69 : : struct device_attribute **attribute_container_classdev_to_attrs(const struct device *classdev); 70 : : 71 : : #endif