linux-bk/include/linux/sysfs.h
<<
>>
Prefs
   1/*
   2 * sysfs.h - definitions for the device driver filesystem
   3 *
   4 * Copyright (c) 2001,2002 Patrick Mochel
   5 *
   6 * Please see Documentation/filesystems/sysfs.txt for more information.
   7 */
   8
   9#ifndef _SYSFS_H_
  10#define _SYSFS_H_
  11
  12#include <asm/atomic.h>
  13
  14struct kobject;
  15struct module;
  16
  17struct attribute {
  18        char                    * name;
  19        struct module           * owner;
  20        mode_t                  mode;
  21};
  22
  23struct attribute_group {
  24        char                    * name;
  25        struct attribute        ** attrs;
  26};
  27
  28
  29
  30/**
  31 * Use these macros to make defining attributes easier. See include/linux/device.h
  32 * for examples..
  33 */
  34
  35#define __ATTR(_name,_mode,_show,_store) { \
  36        .attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE },     \
  37        .show   = _show,                                        \
  38        .store  = _store,                                       \
  39}
  40
  41#define __ATTR_RO(_name) { \
  42        .attr   = { .name = __stringify(_name), .mode = 0444, .owner = THIS_MODULE },   \
  43        .show   = _name##_show, \
  44}
  45
  46#define __ATTR_NULL { .attr = { .name = NULL } }
  47
  48#define attr_name(_attr) (_attr).attr.name
  49
  50struct bin_attribute {
  51        struct attribute        attr;
  52        size_t                  size;
  53        ssize_t (*read)(struct kobject *, char *, loff_t, size_t);
  54        ssize_t (*write)(struct kobject *, char *, loff_t, size_t);
  55};
  56
  57struct sysfs_ops {
  58        ssize_t (*show)(struct kobject *, struct attribute *,char *);
  59        ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t);
  60};
  61
  62struct sysfs_dirent {
  63        atomic_t                s_count;
  64        struct list_head        s_sibling;
  65        struct list_head        s_children;
  66        void                    * s_element;
  67        int                     s_type;
  68        umode_t                 s_mode;
  69        struct dentry           * s_dentry;
  70};
  71
  72#define SYSFS_ROOT              0x0001
  73#define SYSFS_DIR               0x0002
  74#define SYSFS_KOBJ_ATTR         0x0004
  75#define SYSFS_KOBJ_BIN_ATTR     0x0008
  76#define SYSFS_KOBJ_LINK         0x0020
  77#define SYSFS_NOT_PINNED        (SYSFS_KOBJ_ATTR | SYSFS_KOBJ_BIN_ATTR | SYSFS_KOBJ_LINK)
  78
  79#ifdef CONFIG_SYSFS
  80
  81extern int
  82sysfs_create_dir(struct kobject *);
  83
  84extern void
  85sysfs_remove_dir(struct kobject *);
  86
  87extern int
  88sysfs_rename_dir(struct kobject *, const char *new_name);
  89
  90extern int
  91sysfs_create_file(struct kobject *, const struct attribute *);
  92
  93extern int
  94sysfs_update_file(struct kobject *, const struct attribute *);
  95
  96extern void
  97sysfs_remove_file(struct kobject *, const struct attribute *);
  98
  99extern int 
 100sysfs_create_link(struct kobject * kobj, struct kobject * target, char * name);
 101
 102extern void
 103sysfs_remove_link(struct kobject *, char * name);
 104
 105int sysfs_create_bin_file(struct kobject * kobj, struct bin_attribute * attr);
 106int sysfs_remove_bin_file(struct kobject * kobj, struct bin_attribute * attr);
 107
 108int sysfs_create_group(struct kobject *, const struct attribute_group *);
 109void sysfs_remove_group(struct kobject *, const struct attribute_group *);
 110
 111#else /* CONFIG_SYSFS */
 112
 113static inline int sysfs_create_dir(struct kobject * k)
 114{
 115        return 0;
 116}
 117
 118static inline void sysfs_remove_dir(struct kobject * k)
 119{
 120        ;
 121}
 122
 123static inline int sysfs_rename_dir(struct kobject * k, const char *new_name)
 124{
 125        return 0;
 126}
 127
 128static inline int sysfs_create_file(struct kobject * k, const struct attribute * a)
 129{
 130        return 0;
 131}
 132
 133static inline int sysfs_update_file(struct kobject * k, const struct attribute * a)
 134{
 135        return 0;
 136}
 137
 138static inline void sysfs_remove_file(struct kobject * k, const struct attribute * a)
 139{
 140        ;
 141}
 142
 143static inline int sysfs_create_link(struct kobject * k, struct kobject * t, char * n)
 144{
 145        return 0;
 146}
 147
 148static inline void sysfs_remove_link(struct kobject * k, char * name)
 149{
 150        ;
 151}
 152
 153
 154static inline int sysfs_create_bin_file(struct kobject * k, struct bin_attribute * a)
 155{
 156        return 0;
 157}
 158
 159static inline int sysfs_remove_bin_file(struct kobject * k, struct bin_attribute * a)
 160{
 161        return 0;
 162}
 163
 164static inline int sysfs_create_group(struct kobject * k, const struct attribute_group *g)
 165{
 166        return 0;
 167}
 168
 169static inline void sysfs_remove_group(struct kobject * k, const struct attribute_group * g)
 170{
 171        ;
 172}
 173
 174#endif /* CONFIG_SYSFS */
 175
 176#endif /* _SYSFS_H_ */
 177
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.