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