mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-05 06:37:05 +07:00
fd1109711d
This patch is the beginning of moving the attribute_containers to use attribute groups exclusively. The attr element is now deprecated and will eventually be removed (along with all the hand rolled code for doing exactly what attribute groups do) when all the consumers are converted to attribute groups. Acked-by: Greg Kroah-Hartman <gregkh@suse.de> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
72 lines
2.5 KiB
C
72 lines
2.5 KiB
C
/*
|
|
* class_container.h - a generic container for all classes
|
|
*
|
|
* Copyright (c) 2005 - James Bottomley <James.Bottomley@steeleye.com>
|
|
*
|
|
* This file is licensed under GPLv2
|
|
*/
|
|
|
|
#ifndef _ATTRIBUTE_CONTAINER_H_
|
|
#define _ATTRIBUTE_CONTAINER_H_
|
|
|
|
#include <linux/device.h>
|
|
#include <linux/list.h>
|
|
#include <linux/klist.h>
|
|
|
|
struct attribute_container {
|
|
struct list_head node;
|
|
struct klist containers;
|
|
struct class *class;
|
|
struct attribute_group *grp;
|
|
struct class_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 attribute_container_unregister(struct attribute_container *cont);
|
|
void attribute_container_create_device(struct device *dev,
|
|
int (*fn)(struct attribute_container *,
|
|
struct device *,
|
|
struct class_device *));
|
|
void attribute_container_add_device(struct device *dev,
|
|
int (*fn)(struct attribute_container *,
|
|
struct device *,
|
|
struct class_device *));
|
|
void attribute_container_remove_device(struct device *dev,
|
|
void (*fn)(struct attribute_container *,
|
|
struct device *,
|
|
struct class_device *));
|
|
void attribute_container_device_trigger(struct device *dev,
|
|
int (*fn)(struct attribute_container *,
|
|
struct device *,
|
|
struct class_device *));
|
|
void attribute_container_trigger(struct device *dev,
|
|
int (*fn)(struct attribute_container *,
|
|
struct device *));
|
|
int attribute_container_add_attrs(struct class_device *classdev);
|
|
int attribute_container_add_class_device(struct class_device *classdev);
|
|
int attribute_container_add_class_device_adapter(struct attribute_container *cont,
|
|
struct device *dev,
|
|
struct class_device *classdev);
|
|
void attribute_container_remove_attrs(struct class_device *classdev);
|
|
void attribute_container_class_device_del(struct class_device *classdev);
|
|
struct attribute_container *attribute_container_classdev_to_container(struct class_device *);
|
|
struct class_device *attribute_container_find_class_device(struct attribute_container *, struct device *);
|
|
struct class_device_attribute **attribute_container_classdev_to_attrs(const struct class_device *classdev);
|
|
|
|
#endif
|