linux/include/linux/sysfs.h
<<
>>
Prefs
   1/*
   2 * sysfs.h - definitions for the device driver filesystem
   3 *
   4 * Copyright (c) 2001,2002 Patrick Mochel
   5 * Copyright (c) 2004 Silicon Graphics, Inc.
   6 * Copyright (c) 2007 SUSE Linux Products GmbH
   7 * Copyright (c) 2007 Tejun Heo <teheo@suse.de>
   8 *
   9 * Please see Documentation/filesystems/sysfs.txt for more information.
  10 */
  11
  12#ifndef _SYSFS_H_
  13#define _SYSFS_H_
  14
  15#include <linux/compiler.h>
  16#include <linux/errno.h>
  17#include <linux/list.h>
  18#include <linux/lockdep.h>
  19#include <asm/atomic.h>
  20
  21struct kobject;
  22struct module;
  23
  24/* FIXME
  25 * The *owner field is no longer used.
  26 * x86 tree has been cleaned up. The owner
  27 * attribute is still left for other arches.
  28 */
  29struct attribute {
  30        const char              *name;
  31        struct module           *owner;
  32        mode_t                  mode;
  33#ifdef CONFIG_DEBUG_LOCK_ALLOC
  34        struct lock_class_key   *key;
  35        struct lock_class_key   skey;
  36#endif
  37};
  38
  39/**
  40 *      sysfs_attr_init - initialize a dynamically allocated sysfs attribute
  41 *      @attr: struct attribute to initialize
  42 *
  43 *      Initialize a dynamically allocated struct attribute so we can
  44 *      make lockdep happy.  This is a new requirement for attributes
  45 *      and initially this is only needed when lockdep is enabled.
  46 *      Lockdep gives a nice error when your attribute is added to
  47 *      sysfs if you don't have this.
  48 */
  49#ifdef CONFIG_DEBUG_LOCK_ALLOC
  50#define sysfs_attr_init(attr)                           \
  51do {                                                    \
  52        static struct lock_class_key __key;             \
  53                                                        \
  54        (attr)->key = &__key;                           \
  55} while(0)
  56#else
  57#define sysfs_attr_init(attr) do {} while(0)
  58#endif
  59
  60struct attribute_group {
  61        const char              *name;
  62        mode_t                  (*is_visible)(struct kobject *,
  63                                              struct attribute *, int);
  64        struct attribute        **attrs;
  65};
  66
  67
  68
  69/**
  70 * Use these macros to make defining attributes easier. See include/linux/device.h
  71 * for examples..
  72 */
  73
  74#define __ATTR(_name,_mode,_show,_store) { \
  75        .attr = {.name = __stringify(_name), .mode = _mode },   \
  76        .show   = _show,                                        \
  77        .store  = _store,                                       \
  78}
  79
  80#define __ATTR_RO(_name) { \
  81        .attr   = { .name = __stringify(_name), .mode = 0444 }, \
  82        .show   = _name##_show,                                 \
  83}
  84
  85#define __ATTR_NULL { .attr = { .name = NULL } }
  86
  87#define attr_name(_attr) (_attr).attr.name
  88
  89struct vm_area_struct;
  90
  91struct bin_attribute {
  92        struct attribute        attr;
  93        size_t                  size;
  94        void                    *private;
  95        ssize_t (*read)(struct kobject *, struct bin_attribute *,
  96                        char *, loff_t, size_t);
  97        ssize_t (*write)(struct kobject *, struct bin_attribute *,
  98                         char *, loff_t, size_t);
  99        int (*mmap)(struct kobject *, struct bin_attribute *attr,
 100                    struct vm_area_struct *vma);
 101};
 102
 103/**
 104 *      sysfs_bin_attr_init - initialize a dynamically allocated bin_attribute
 105 *      @attr: struct bin_attribute to initialize
 106 *
 107 *      Initialize a dynamically allocated struct bin_attribute so we
 108 *      can make lockdep happy.  This is a new requirement for
 109 *      attributes and initially this is only needed when lockdep is
 110 *      enabled.  Lockdep gives a nice error when your attribute is
 111 *      added to sysfs if you don't have this.
 112 */
 113#define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&(bin_attr)->attr)
 114
 115struct sysfs_ops {
 116        ssize_t (*show)(struct kobject *, struct attribute *,char *);
 117        ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t);
 118};
 119
 120struct sysfs_dirent;
 121
 122#ifdef CONFIG_SYSFS
 123
 124int sysfs_schedule_callback(struct kobject *kobj, void (*func)(void *),
 125                            void *data, struct module *owner);
 126
 127int __must_check sysfs_create_dir(struct kobject *kobj);
 128void sysfs_remove_dir(struct kobject *kobj);
 129int __must_check sysfs_rename_dir(struct kobject *kobj, const char *new_name);
 130int __must_check sysfs_move_dir(struct kobject *kobj,
 131                                struct kobject *new_parent_kobj);
 132
 133int __must_check sysfs_create_file(struct kobject *kobj,
 134                                   const struct attribute *attr);
 135int __must_check sysfs_create_files(struct kobject *kobj,
 136                                   const struct attribute **attr);
 137int __must_check sysfs_chmod_file(struct kobject *kobj, struct attribute *attr,
 138                                  mode_t mode);
 139void sysfs_remove_file(struct kobject *kobj, const struct attribute *attr);
 140void sysfs_remove_files(struct kobject *kobj, const struct attribute **attr);
 141
 142int __must_check sysfs_create_bin_file(struct kobject *kobj,
 143                                       const struct bin_attribute *attr);
 144void sysfs_remove_bin_file(struct kobject *kobj,
 145                           const struct bin_attribute *attr);
 146
 147int __must_check sysfs_create_link(struct kobject *kobj, struct kobject *target,
 148                                   const char *name);
 149int __must_check sysfs_create_link_nowarn(struct kobject *kobj,
 150                                          struct kobject *target,
 151                                          const char *name);
 152void sysfs_remove_link(struct kobject *kobj, const char *name);
 153
 154int sysfs_rename_link(struct kobject *kobj, struct kobject *target,
 155                        const char *old_name, const char *new_name);
 156
 157int __must_check sysfs_create_group(struct kobject *kobj,
 158                                    const struct attribute_group *grp);
 159int sysfs_update_group(struct kobject *kobj,
 160                       const struct attribute_group *grp);
 161void sysfs_remove_group(struct kobject *kobj,
 162                        const struct attribute_group *grp);
 163int sysfs_add_file_to_group(struct kobject *kobj,
 164                        const struct attribute *attr, const char *group);
 165void sysfs_remove_file_from_group(struct kobject *kobj,
 166                        const struct attribute *attr, const char *group);
 167
 168void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr);
 169void sysfs_notify_dirent(struct sysfs_dirent *sd);
 170struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd,
 171                                      const unsigned char *name);
 172struct sysfs_dirent *sysfs_get(struct sysfs_dirent *sd);
 173void sysfs_put(struct sysfs_dirent *sd);
 174void sysfs_printk_last_file(void);
 175int __must_check sysfs_init(void);
 176
 177#else /* CONFIG_SYSFS */
 178
 179static inline int sysfs_schedule_callback(struct kobject *kobj,
 180                void (*func)(void *), void *data, struct module *owner)
 181{
 182        return -ENOSYS;
 183}
 184
 185static inline int sysfs_create_dir(struct kobject *kobj)
 186{
 187        return 0;
 188}
 189
 190static inline void sysfs_remove_dir(struct kobject *kobj)
 191{
 192}
 193
 194static inline int sysfs_rename_dir(struct kobject *kobj, const char *new_name)
 195{
 196        return 0;
 197}
 198
 199static inline int sysfs_move_dir(struct kobject *kobj,
 200                                 struct kobject *new_parent_kobj)
 201{
 202        return 0;
 203}
 204
 205static inline int sysfs_create_file(struct kobject *kobj,
 206                                    const struct attribute *attr)
 207{
 208        return 0;
 209}
 210
 211static inline int sysfs_create_files(struct kobject *kobj,
 212                                    const struct attribute **attr)
 213{
 214        return 0;
 215}
 216
 217static inline int sysfs_chmod_file(struct kobject *kobj,
 218                                   struct attribute *attr, mode_t mode)
 219{
 220        return 0;
 221}
 222
 223static inline void sysfs_remove_file(struct kobject *kobj,
 224                                     const struct attribute *attr)
 225{
 226}
 227
 228static inline void sysfs_remove_files(struct kobject *kobj,
 229                                     const struct attribute **attr)
 230{
 231}
 232
 233static inline int sysfs_create_bin_file(struct kobject *kobj,
 234                                        const struct bin_attribute *attr)
 235{
 236        return 0;
 237}
 238
 239static inline void sysfs_remove_bin_file(struct kobject *kobj,
 240                                         const struct bin_attribute *attr)
 241{
 242}
 243
 244static inline int sysfs_create_link(struct kobject *kobj,
 245                                    struct kobject *target, const char *name)
 246{
 247        return 0;
 248}
 249
 250static inline int sysfs_create_link_nowarn(struct kobject *kobj,
 251                                           struct kobject *target,
 252                                           const char *name)
 253{
 254        return 0;
 255}
 256
 257static inline void sysfs_remove_link(struct kobject *kobj, const char *name)
 258{
 259}
 260
 261static inline int sysfs_rename_link(struct kobject *k, struct kobject *t,
 262                                    const char *old_name, const char *new_name)
 263{
 264        return 0;
 265}
 266
 267static inline int sysfs_create_group(struct kobject *kobj,
 268                                     const struct attribute_group *grp)
 269{
 270        return 0;
 271}
 272
 273static inline int sysfs_update_group(struct kobject *kobj,
 274                                const struct attribute_group *grp)
 275{
 276        return 0;
 277}
 278
 279static inline void sysfs_remove_group(struct kobject *kobj,
 280                                      const struct attribute_group *grp)
 281{
 282}
 283
 284static inline int sysfs_add_file_to_group(struct kobject *kobj,
 285                const struct attribute *attr, const char *group)
 286{
 287        return 0;
 288}
 289
 290static inline void sysfs_remove_file_from_group(struct kobject *kobj,
 291                const struct attribute *attr, const char *group)
 292{
 293}
 294
 295static inline void sysfs_notify(struct kobject *kobj, const char *dir,
 296                                const char *attr)
 297{
 298}
 299static inline void sysfs_notify_dirent(struct sysfs_dirent *sd)
 300{
 301}
 302static inline
 303struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd,
 304                                      const unsigned char *name)
 305{
 306        return NULL;
 307}
 308static inline struct sysfs_dirent *sysfs_get(struct sysfs_dirent *sd)
 309{
 310        return NULL;
 311}
 312static inline void sysfs_put(struct sysfs_dirent *sd)
 313{
 314}
 315
 316static inline int __must_check sysfs_init(void)
 317{
 318        return 0;
 319}
 320
 321static inline void sysfs_printk_last_file(void)
 322{
 323}
 324
 325#endif /* CONFIG_SYSFS */
 326
 327#endif /* _SYSFS_H_ */
 328
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.