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 <asm/atomic.h>
  19
  20struct kobject;
  21struct module;
  22
  23/* FIXME
  24 * The *owner field is no longer used.
  25 * x86 tree has been cleaned up. The owner
  26 * attribute is still left for other arches.
  27 */
  28struct attribute {
  29        const char              *name;
  30        struct module           *owner;
  31        mode_t                  mode;
  32};
  33
  34struct attribute_group {
  35        const char              *name;
  36        mode_t                  (*is_visible)(struct kobject *,
  37                                              struct attribute *, int);
  38        struct attribute        **attrs;
  39};
  40
  41
  42
  43/**
  44 * Use these macros to make defining attributes easier. See include/linux/device.h
  45 * for examples..
  46 */
  47
  48#define __ATTR(_name,_mode,_show,_store) { \
  49        .attr = {.name = __stringify(_name), .mode = _mode },   \
  50        .show   = _show,                                        \
  51        .store  = _store,                                       \
  52}
  53
  54#define __ATTR_RO(_name) { \
  55        .attr   = { .name = __stringify(_name), .mode = 0444 }, \
  56        .show   = _name##_show,                                 \
  57}
  58
  59#define __ATTR_NULL { .attr = { .name = NULL } }
  60
  61#define attr_name(_attr) (_attr).attr.name
  62
  63struct vm_area_struct;
  64
  65struct bin_attribute {
  66        struct attribute        attr;
  67        size_t                  size;
  68        void                    *private;
  69        ssize_t (*read)(struct kobject *, struct bin_attribute *,
  70                        char *, loff_t, size_t);
  71        ssize_t (*write)(struct kobject *, struct bin_attribute *,
  72                         char *, loff_t, size_t);
  73        int (*mmap)(struct kobject *, struct bin_attribute *attr,
  74                    struct vm_area_struct *vma);
  75};
  76
  77struct sysfs_ops {
  78        ssize_t (*show)(struct kobject *, struct attribute *,char *);
  79        ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t);
  80};
  81
  82struct sysfs_dirent;
  83
  84#ifdef CONFIG_SYSFS
  85
  86int sysfs_schedule_callback(struct kobject *kobj, void (*func)(void *),
  87                            void *data, struct module *owner);
  88
  89int __must_check sysfs_create_dir(struct kobject *kobj);
  90void sysfs_remove_dir(struct kobject *kobj);
  91int __must_check sysfs_rename_dir(struct kobject *kobj, const char *new_name);
  92int __must_check sysfs_move_dir(struct kobject *kobj,
  93                                struct kobject *new_parent_kobj);
  94
  95int __must_check sysfs_create_file(struct kobject *kobj,
  96                                   const struct attribute *attr);
  97int __must_check sysfs_chmod_file(struct kobject *kobj, struct attribute *attr,
  98                                  mode_t mode);
  99void sysfs_remove_file(struct kobject *kobj, const struct attribute *attr);
 100
 101int __must_check sysfs_create_bin_file(struct kobject *kobj,
 102                                       struct bin_attribute *attr);
 103void sysfs_remove_bin_file(struct kobject *kobj, struct bin_attribute *attr);
 104
 105int __must_check sysfs_create_link(struct kobject *kobj, struct kobject *target,
 106                                   const char *name);
 107int __must_check sysfs_create_link_nowarn(struct kobject *kobj,
 108                                          struct kobject *target,
 109                                          const char *name);
 110void sysfs_remove_link(struct kobject *kobj, const char *name);
 111
 112int __must_check sysfs_create_group(struct kobject *kobj,
 113                                    const struct attribute_group *grp);
 114int sysfs_update_group(struct kobject *kobj,
 115                       const struct attribute_group *grp);
 116void sysfs_remove_group(struct kobject *kobj,
 117                        const struct attribute_group *grp);
 118int sysfs_add_file_to_group(struct kobject *kobj,
 119                        const struct attribute *attr, const char *group);
 120void sysfs_remove_file_from_group(struct kobject *kobj,
 121                        const struct attribute *attr, const char *group);
 122
 123void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr);
 124void sysfs_notify_dirent(struct sysfs_dirent *sd);
 125struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd,
 126                                      const unsigned char *name);
 127struct sysfs_dirent *sysfs_get(struct sysfs_dirent *sd);
 128void sysfs_put(struct sysfs_dirent *sd);
 129void sysfs_printk_last_file(void);
 130int __must_check sysfs_init(void);
 131
 132#else /* CONFIG_SYSFS */
 133
 134static inline int sysfs_schedule_callback(struct kobject *kobj,
 135                void (*func)(void *), void *data, struct module *owner)
 136{
 137        return -ENOSYS;
 138}
 139
 140static inline int sysfs_create_dir(struct kobject *kobj)
 141{
 142        return 0;
 143}
 144
 145static inline void sysfs_remove_dir(struct kobject *kobj)
 146{
 147}
 148
 149static inline int sysfs_rename_dir(struct kobject *kobj, const char *new_name)
 150{
 151        return 0;
 152}
 153
 154static inline int sysfs_move_dir(struct kobject *kobj,
 155                                 struct kobject *new_parent_kobj)
 156{
 157        return 0;
 158}
 159
 160static inline int sysfs_create_file(struct kobject *kobj,
 161                                    const struct attribute *attr)
 162{
 163        return 0;
 164}
 165
 166static inline int sysfs_chmod_file(struct kobject *kobj,
 167                                   struct attribute *attr, mode_t mode)
 168{
 169        return 0;
 170}
 171
 172static inline void sysfs_remove_file(struct kobject *kobj,
 173                                     const struct attribute *attr)
 174{
 175}
 176
 177static inline int sysfs_create_bin_file(struct kobject *kobj,
 178                                        struct bin_attribute *attr)
 179{
 180        return 0;
 181}
 182
 183static inline void sysfs_remove_bin_file(struct kobject *kobj,
 184                                         struct bin_attribute *attr)
 185{
 186}
 187
 188static inline int sysfs_create_link(struct kobject *kobj,
 189                                    struct kobject *target, const char *name)
 190{
 191        return 0;
 192}
 193
 194static inline int sysfs_create_link_nowarn(struct kobject *kobj,
 195                                           struct kobject *target,
 196                                           const char *name)
 197{
 198        return 0;
 199}
 200
 201static inline void sysfs_remove_link(struct kobject *kobj, const char *name)
 202{
 203}
 204
 205static inline int sysfs_create_group(struct kobject *kobj,
 206                                     const struct attribute_group *grp)
 207{
 208        return 0;
 209}
 210
 211static inline int sysfs_update_group(struct kobject *kobj,
 212                                const struct attribute_group *grp)
 213{
 214        return 0;
 215}
 216
 217static inline void sysfs_remove_group(struct kobject *kobj,
 218                                      const struct attribute_group *grp)
 219{
 220}
 221
 222static inline int sysfs_add_file_to_group(struct kobject *kobj,
 223                const struct attribute *attr, const char *group)
 224{
 225        return 0;
 226}
 227
 228static inline void sysfs_remove_file_from_group(struct kobject *kobj,
 229                const struct attribute *attr, const char *group)
 230{
 231}
 232
 233static inline void sysfs_notify(struct kobject *kobj, const char *dir,
 234                                const char *attr)
 235{
 236}
 237static inline void sysfs_notify_dirent(struct sysfs_dirent *sd)
 238{
 239}
 240static inline
 241struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd,
 242                                      const unsigned char *name)
 243{
 244        return NULL;
 245}
 246static inline struct sysfs_dirent *sysfs_get(struct sysfs_dirent *sd)
 247{
 248        return NULL;
 249}
 250static inline void sysfs_put(struct sysfs_dirent *sd)
 251{
 252}
 253
 254static inline int __must_check sysfs_init(void)
 255{
 256        return 0;
 257}
 258
 259static inline void sysfs_printk_last_file(void)
 260{
 261}
 262
 263#endif /* CONFIG_SYSFS */
 264
 265#endif /* _SYSFS_H_ */
 266