cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

attribute_container.h (2803B)


      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
     14struct device;
     15
     16struct 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
     27static inline int
     28attribute_container_no_classdevs(struct attribute_container *atc)
     29{
     30	return atc->flags & ATTRIBUTE_CONTAINER_NO_CLASSDEVS;
     31}
     32
     33static inline void
     34attribute_container_set_no_classdevs(struct attribute_container *atc)
     35{
     36	atc->flags |= ATTRIBUTE_CONTAINER_NO_CLASSDEVS;
     37}
     38
     39int attribute_container_register(struct attribute_container *cont);
     40int __must_check attribute_container_unregister(struct attribute_container *cont);
     41void attribute_container_create_device(struct device *dev,
     42				       int (*fn)(struct attribute_container *,
     43						 struct device *,
     44						 struct device *));
     45void attribute_container_add_device(struct device *dev,
     46				    int (*fn)(struct attribute_container *,
     47					      struct device *,
     48					      struct device *));
     49void attribute_container_remove_device(struct device *dev,
     50				       void (*fn)(struct attribute_container *,
     51						  struct device *,
     52						  struct device *));
     53void attribute_container_device_trigger(struct device *dev, 
     54					int (*fn)(struct attribute_container *,
     55						  struct device *,
     56						  struct device *));
     57int 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 *));
     64void attribute_container_trigger(struct device *dev, 
     65				 int (*fn)(struct attribute_container *,
     66					   struct device *));
     67int attribute_container_add_attrs(struct device *classdev);
     68int attribute_container_add_class_device(struct device *classdev);
     69int attribute_container_add_class_device_adapter(struct attribute_container *cont,
     70						 struct device *dev,
     71						 struct device *classdev);
     72void attribute_container_remove_attrs(struct device *classdev);
     73void attribute_container_class_device_del(struct device *classdev);
     74struct attribute_container *attribute_container_classdev_to_container(struct device *);
     75struct device *attribute_container_find_class_device(struct attribute_container *, struct device *);
     76struct device_attribute **attribute_container_classdev_to_attrs(const struct device *classdev);
     77
     78#endif