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, but leave around
  25 * until the tree gets cleaned up fully.
  26 */
  27struct attribute {
  28        const char              *name;
  29        struct module           *owner;
  30        mode_t                  mode;
  31};
  32
  33struct attribute_group {
  34        const char              *name;
  35        int                     (*is_visible)(struct kobject *,
  36                                              struct attribute *, int);
  37        struct attribute        **attrs;
  38};
  39
  40
  41
  42/**
  43 * Use these macros to make defining attributes easier. See include/linux/device.h
  44 * for examples..
  45 */
  46
  47#define __ATTR(_name,_mode,_show,_store) { \
  48        .attr = {.name = __stringify(_name), .mode = _mode },   \
  49        .show   = _show,                                        \
  50        .store  = _store,                                       \
  51}
  52
  53#define __ATTR_RO(_name) { \
  54        .attr   = { .name = __stringify(_name), .mode = 0444 }, \
  55        .show   = _name##_show,                                 \
  56}
  57
  58#define __ATTR_NULL { .attr = { .name = NULL } }
  59
  60#define attr_name(_attr) (_attr).attr.name
  61
  62struct vm_area_struct;
  63
  64struct bin_attribute {
  65        struct attribute        attr;
  66        size_t                  size;
  67        void                    *private;
  68        ssize_t (*read)(struct kobject *, struct bin_attribute *,
  69                        char *, loff_t, size_t);
  70        ssize_t (*write)(struct kobject *, struct bin_attribute *,
  71                         char *, loff_t, size_t);
  72        int (*mmap)(struct kobject *, struct bin_attribute *attr,
  73                    struct vm_area_struct *vma);
  74};
  75
  76struct sysfs_ops {
  77        ssize_t (*show)(struct kobject *, struct attribute *,char *);
  78        ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t);
  79};
  80
  81#ifdef CONFIG_SYSFS
  82
  83int sysfs_schedule_callback(struct kobject *kobj, void (*func)(void *),
  84                            void *data, struct module *owner);
  85
  86int __must_check sysfs_create_dir(struct kobject *kobj);
  87void sysfs_remove_dir(struct kobject *kobj);
  88int __must_check sysfs_rename_dir(struct kobject *kobj, const char *new_name);
  89int __must_check sysfs_move_dir(struct kobject *kobj,
  90                                struct kobject *new_parent_kobj);
  91
  92int __must_check sysfs_create_file(struct kobject *kobj,
  93                                   const struct attribute *attr);
  94int __must_check sysfs_chmod_file(struct kobject *kobj, struct attribute *attr,
  95                                  mode_t mode);
  96void sysfs_remove_file(struct kobject *kobj, const struct attribute *attr);
  97
  98int __must_check sysfs_create_bin_file(struct kobject *kobj,
  99                                       struct bin_attribute *attr);
 100void sysfs_remove_bin_file(struct kobject *kobj, struct bin_attribute *attr);
 101
 102int __must_check sysfs_create_link(struct kobject *kobj, struct kobject *target,
 103                                   const char *name);
 104void sysfs_remove_link(struct kobject *kobj, const char *name);
 105
 106int __must_check sysfs_create_group(struct kobject *kobj,
 107                                    const struct attribute_group *grp);
 108void sysfs_remove_group(struct kobject *kobj,
 109                        const struct attribute_group *grp);
 110int sysfs_add_file_to_group(struct kobject *kobj,
 111                        const struct attribute *attr, const char *group);
 112void sysfs_remove_file_from_group(struct kobject *kobj,
 113                        const struct attribute *attr, const char *group);
 114
 115void sysfs_notify(struct kobject *kobj, char *dir, char *attr);
 116
 117extern int __must_check sysfs_init(void);
 118
 119#else /* CONFIG_SYSFS */
 120
 121static inline int sysfs_schedule_callback(struct kobject *kobj,
 122                void (*func)(void *), void *data, struct module *owner)
 123{
 124        return -ENOSYS;
 125}
 126
 127static inline int sysfs_create_dir(struct kobject *kobj)
 128{
 129        return 0;
 130}
 131
 132static inline void sysfs_remove_dir(struct kobject *kobj)
 133{
 134        ;
 135}
 136
 137static inline int sysfs_rename_dir(struct kobject *kobj, const char *new_name)
 138{
 139        return 0;
 140}
 141
 142static inline int sysfs_move_dir(struct kobject *kobj,
 143                                 struct kobject *new_parent_kobj)
 144{
 145        return 0;
 146}
 147
 148static inline int sysfs_create_file(struct kobject *kobj,
 149                                    const struct attribute *attr)
 150{
 151        return 0;
 152}
 153
 154static inline int sysfs_chmod_file(struct kobject *kobj,
 155                                   struct attribute *attr, mode_t mode)
 156{
 157        return 0;
 158}
 159
 160static inline void sysfs_remove_file(struct kobject *kobj,
 161                                     const struct attribute *attr)
 162{
 163        ;
 164}
 165
 166static inline int sysfs_create_bin_file(struct kobject *kobj,
 167                                        struct bin_attribute *attr)
 168{
 169        return 0;
 170}
 171
 172static inline int sysfs_remove_bin_file(struct kobject *kobj,
 173                                        struct bin_attribute *attr)
 174{
 175        return 0;
 176}
 177
 178static inline int sysfs_create_link(struct kobject *kobj,
 179                                    struct kobject *target, const char *name)
 180{
 181        return 0;
 182}
 183
 184static inline void sysfs_remove_link(struct kobject *kobj, const char *name)
 185{
 186        ;
 187}
 188
 189static inline int sysfs_create_group(struct kobject *kobj,
 190                                     const struct attribute_group *grp)
 191{
 192        return 0;
 193}
 194
 195static inline void sysfs_remove_group(struct kobject *kobj,
 196                                      const struct attribute_group *grp)
 197{
 198        ;
 199}
 200
 201static inline int sysfs_add_file_to_group(struct kobject *kobj,
 202                const struct attribute *attr, const char *group)
 203{
 204        return 0;
 205}
 206
 207static inline void sysfs_remove_file_from_group(struct kobject *kobj,
 208                const struct attribute *attr, const char *group)
 209{
 210}
 211
 212static inline void sysfs_notify(struct kobject *kobj, char *dir, char *attr)
 213{
 214}
 215
 216static inline int __must_check sysfs_init(void)
 217{
 218        return 0;
 219}
 220
 221#endif /* CONFIG_SYSFS */
 222
 223#endif /* _SYSFS_H_ */
 224
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.