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 : 2400 : attribute_container_no_classdevs(struct attribute_container *atc) 29 : : { 30 [ - + - + : 2400 : return atc->flags & ATTRIBUTE_CONTAINER_NO_CLASSDEVS; - - + + ] 31 : : } 32 : : 33 : : static inline void 34 : 30 : attribute_container_set_no_classdevs(struct attribute_container *atc) 35 : : { 36 : 30 : 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 : : int attribute_container_device_trigger_safe(struct device *dev, 58 : : int (*fn)(struct attribute_container *, 59 : : struct device *, 60 : : struct device *), 61 : : int (*undo)(struct attribute_container *, 62 : : struct device *, 63 : : struct device *)); 64 : : void attribute_container_trigger(struct device *dev, 65 : : int (*fn)(struct attribute_container *, 66 : : struct device *)); 67 : : int attribute_container_add_attrs(struct device *classdev); 68 : : int attribute_container_add_class_device(struct device *classdev); 69 : : int attribute_container_add_class_device_adapter(struct attribute_container *cont, 70 : : struct device *dev, 71 : : struct device *classdev); 72 : : void attribute_container_remove_attrs(struct device *classdev); 73 : : void attribute_container_class_device_del(struct device *classdev); 74 : : struct attribute_container *attribute_container_classdev_to_container(struct device *); 75 : : struct device *attribute_container_find_class_device(struct attribute_container *, struct device *); 76 : : struct device_attribute **attribute_container_classdev_to_attrs(const struct device *classdev); 77 : : 78 : : #endif