attribute_container.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * class_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. #ifndef _ATTRIBUTE_CONTAINER_H_
  9. #define _ATTRIBUTE_CONTAINER_H_
  10. #include <linux/device.h>
  11. #include <linux/list.h>
  12. struct attribute_container {
  13. struct list_head node;
  14. struct list_head containers;
  15. struct class *class;
  16. struct class_device_attribute **attrs;
  17. int (*match)(struct attribute_container *, struct device *);
  18. #define ATTRIBUTE_CONTAINER_NO_CLASSDEVS 0x01
  19. unsigned long flags;
  20. };
  21. static inline int
  22. attribute_container_no_classdevs(struct attribute_container *atc)
  23. {
  24. return atc->flags & ATTRIBUTE_CONTAINER_NO_CLASSDEVS;
  25. }
  26. static inline void
  27. attribute_container_set_no_classdevs(struct attribute_container *atc)
  28. {
  29. atc->flags |= ATTRIBUTE_CONTAINER_NO_CLASSDEVS;
  30. }
  31. int attribute_container_register(struct attribute_container *cont);
  32. int attribute_container_unregister(struct attribute_container *cont);
  33. void attribute_container_create_device(struct device *dev,
  34. int (*fn)(struct attribute_container *,
  35. struct device *,
  36. struct class_device *));
  37. void attribute_container_add_device(struct device *dev,
  38. int (*fn)(struct attribute_container *,
  39. struct device *,
  40. struct class_device *));
  41. void attribute_container_remove_device(struct device *dev,
  42. void (*fn)(struct attribute_container *,
  43. struct device *,
  44. struct class_device *));
  45. void attribute_container_device_trigger(struct device *dev,
  46. int (*fn)(struct attribute_container *,
  47. struct device *,
  48. struct class_device *));
  49. void attribute_container_trigger(struct device *dev,
  50. int (*fn)(struct attribute_container *,
  51. struct device *));
  52. int attribute_container_add_attrs(struct class_device *classdev);
  53. int attribute_container_add_class_device(struct class_device *classdev);
  54. int attribute_container_add_class_device_adapter(struct attribute_container *cont,
  55. struct device *dev,
  56. struct class_device *classdev);
  57. void attribute_container_remove_attrs(struct class_device *classdev);
  58. void attribute_container_class_device_del(struct class_device *classdev);
  59. struct class_device_attribute **attribute_container_classdev_to_attrs(const struct class_device *classdev);
  60. #endif