at v2.6.22 5.9 kB view raw
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 * 7 * Please see Documentation/filesystems/sysfs.txt for more information. 8 */ 9 10#ifndef _SYSFS_H_ 11#define _SYSFS_H_ 12 13#include <linux/compiler.h> 14#include <linux/errno.h> 15#include <linux/list.h> 16#include <asm/atomic.h> 17 18struct kobject; 19struct module; 20struct nameidata; 21struct dentry; 22 23struct attribute { 24 const char * name; 25 struct module * owner; 26 mode_t mode; 27}; 28 29struct attribute_group { 30 const char * name; 31 struct attribute ** attrs; 32}; 33 34 35 36/** 37 * Use these macros to make defining attributes easier. See include/linux/device.h 38 * for examples.. 39 */ 40 41#define __ATTR(_name,_mode,_show,_store) { \ 42 .attr = {.name = __stringify(_name), .mode = _mode, .owner = THIS_MODULE }, \ 43 .show = _show, \ 44 .store = _store, \ 45} 46 47#define __ATTR_RO(_name) { \ 48 .attr = { .name = __stringify(_name), .mode = 0444, .owner = THIS_MODULE }, \ 49 .show = _name##_show, \ 50} 51 52#define __ATTR_NULL { .attr = { .name = NULL } } 53 54#define attr_name(_attr) (_attr).attr.name 55 56struct vm_area_struct; 57 58struct bin_attribute { 59 struct attribute attr; 60 size_t size; 61 void *private; 62 ssize_t (*read)(struct kobject *, char *, loff_t, size_t); 63 ssize_t (*write)(struct kobject *, char *, loff_t, size_t); 64 int (*mmap)(struct kobject *, struct bin_attribute *attr, 65 struct vm_area_struct *vma); 66}; 67 68struct sysfs_ops { 69 ssize_t (*show)(struct kobject *, struct attribute *,char *); 70 ssize_t (*store)(struct kobject *,struct attribute *,const char *, size_t); 71}; 72 73#define SYSFS_ROOT 0x0001 74#define SYSFS_DIR 0x0002 75#define SYSFS_KOBJ_ATTR 0x0004 76#define SYSFS_KOBJ_BIN_ATTR 0x0008 77#define SYSFS_KOBJ_LINK 0x0020 78#define SYSFS_NOT_PINNED (SYSFS_KOBJ_ATTR | SYSFS_KOBJ_BIN_ATTR | SYSFS_KOBJ_LINK) 79 80#ifdef CONFIG_SYSFS 81 82extern int sysfs_schedule_callback(struct kobject *kobj, 83 void (*func)(void *), void *data, struct module *owner); 84 85extern int __must_check 86sysfs_create_dir(struct kobject *, struct dentry *); 87 88extern void 89sysfs_remove_dir(struct kobject *); 90 91extern int __must_check 92sysfs_rename_dir(struct kobject *, struct dentry *, const char *new_name); 93 94extern int __must_check 95sysfs_move_dir(struct kobject *, struct kobject *); 96 97extern int __must_check 98sysfs_create_file(struct kobject *, const struct attribute *); 99 100extern int __must_check 101sysfs_update_file(struct kobject *, const struct attribute *); 102 103extern int __must_check 104sysfs_chmod_file(struct kobject *kobj, struct attribute *attr, mode_t mode); 105 106extern void 107sysfs_remove_file(struct kobject *, const struct attribute *); 108 109extern int __must_check 110sysfs_create_link(struct kobject * kobj, struct kobject * target, const char * name); 111 112extern void 113sysfs_remove_link(struct kobject *, const char * name); 114 115int __must_check sysfs_create_bin_file(struct kobject *kobj, 116 struct bin_attribute *attr); 117void sysfs_remove_bin_file(struct kobject *kobj, struct bin_attribute *attr); 118 119int __must_check sysfs_create_group(struct kobject *, 120 const struct attribute_group *); 121void sysfs_remove_group(struct kobject *, const struct attribute_group *); 122int sysfs_add_file_to_group(struct kobject *kobj, 123 const struct attribute *attr, const char *group); 124void sysfs_remove_file_from_group(struct kobject *kobj, 125 const struct attribute *attr, const char *group); 126 127void sysfs_notify(struct kobject * k, char *dir, char *attr); 128 129 130extern int sysfs_make_shadowed_dir(struct kobject *kobj, 131 void * (*follow_link)(struct dentry *, struct nameidata *)); 132extern struct dentry *sysfs_create_shadow_dir(struct kobject *kobj); 133extern void sysfs_remove_shadow_dir(struct dentry *dir); 134 135extern int __must_check sysfs_init(void); 136 137#else /* CONFIG_SYSFS */ 138 139static inline int sysfs_schedule_callback(struct kobject *kobj, 140 void (*func)(void *), void *data, struct module *owner) 141{ 142 return -ENOSYS; 143} 144 145static inline int sysfs_create_dir(struct kobject * k, struct dentry *shadow) 146{ 147 return 0; 148} 149 150static inline void sysfs_remove_dir(struct kobject * k) 151{ 152 ; 153} 154 155static inline int sysfs_rename_dir(struct kobject * k, 156 struct dentry *new_parent, 157 const char *new_name) 158{ 159 return 0; 160} 161 162static inline int sysfs_move_dir(struct kobject * k, struct kobject * new_parent) 163{ 164 return 0; 165} 166 167static inline int sysfs_create_file(struct kobject * k, const struct attribute * a) 168{ 169 return 0; 170} 171 172static inline int sysfs_update_file(struct kobject * k, const struct attribute * a) 173{ 174 return 0; 175} 176static inline int sysfs_chmod_file(struct kobject *kobj, struct attribute *attr, mode_t mode) 177{ 178 return 0; 179} 180 181static inline void sysfs_remove_file(struct kobject * k, const struct attribute * a) 182{ 183 ; 184} 185 186static inline int sysfs_create_link(struct kobject * k, struct kobject * t, const char * n) 187{ 188 return 0; 189} 190 191static inline void sysfs_remove_link(struct kobject * k, const char * name) 192{ 193 ; 194} 195 196 197static inline int sysfs_create_bin_file(struct kobject * k, struct bin_attribute * a) 198{ 199 return 0; 200} 201 202static inline int sysfs_remove_bin_file(struct kobject * k, struct bin_attribute * a) 203{ 204 return 0; 205} 206 207static inline int sysfs_create_group(struct kobject * k, const struct attribute_group *g) 208{ 209 return 0; 210} 211 212static inline void sysfs_remove_group(struct kobject * k, const struct attribute_group * g) 213{ 214 ; 215} 216 217static inline int sysfs_add_file_to_group(struct kobject *kobj, 218 const struct attribute *attr, const char *group) 219{ 220 return 0; 221} 222 223static inline void sysfs_remove_file_from_group(struct kobject *kobj, 224 const struct attribute *attr, const char *group) 225{ 226} 227 228static inline void sysfs_notify(struct kobject * k, char *dir, char *attr) 229{ 230} 231 232static inline int sysfs_make_shadowed_dir(struct kobject *kobj, 233 void * (*follow_link)(struct dentry *, struct nameidata *)) 234{ 235 return 0; 236} 237 238static inline int __must_check sysfs_init(void) 239{ 240 return 0; 241} 242 243#endif /* CONFIG_SYSFS */ 244 245#endif /* _SYSFS_H_ */