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