Blame view

include/linux/proc_fs.h 8.13 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
  #ifndef _LINUX_PROC_FS_H
  #define _LINUX_PROC_FS_H
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
3
4
  #include <linux/slab.h>
  #include <linux/fs.h>
64a07bd82   Steven Rostedt   [PATCH] protect r...
5
  #include <linux/spinlock.h>
e18fa700c   Jeff Garzik   Move several *_SU...
6
  #include <linux/magic.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
7
  #include <asm/atomic.h>
457c4cbc5   Eric W. Biederman   [NET]: Make /proc...
8
  struct net;
786d7e161   Alexey Dobriyan   Fix rmmod/read/wr...
9
  struct completion;
57d3c64fd   Ben Nizette   proc_fs.h: move s...
10
  struct mm_struct;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
11
12
13
14
15
16
17
18
  /*
   * The proc filesystem constants/structures
   */
  
  /*
   * Offset of the first process in the /proc root directory..
   */
  #define FIRST_PROCESS_ENTRY 256
f248dcb34   Matt Mackall   maps4: move clear...
19
20
  /* Worst case buffer size needed for holding an integer. */
  #define PROC_NUMBUF 13
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
21
22
23
24
25
26
27
28
  
  /*
   * We always define these enumerators
   */
  
  enum {
  	PROC_ROOT_INO = 1,
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
29
30
31
32
33
34
35
36
37
38
  /*
   * This is not completely implemented yet. The idea is to
   * create an in-memory tree (like the actual /proc filesystem
   * tree) of these proc_dir_entries, so that we can dynamically
   * add new files to /proc.
   *
   * The "next" pointer creates a linked list of one /proc directory,
   * while parent/subdir create the directory structure (every
   * /proc file has a parent, but "subdir" is NULL for all
   * non-directory entries).
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
39
40
41
42
43
44
   */
  
  typedef	int (read_proc_t)(char *page, char **start, off_t off,
  			  int count, int *eof, void *data);
  typedef	int (write_proc_t)(struct file *file, const char __user *buffer,
  			   unsigned long count, void *data);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
45
46
47
48
49
50
51
52
53
  
  struct proc_dir_entry {
  	unsigned int low_ino;
  	unsigned short namelen;
  	const char *name;
  	mode_t mode;
  	nlink_t nlink;
  	uid_t uid;
  	gid_t gid;
22e6c1b39   Maneesh Soni   [PATCH] Use loff_...
54
  	loff_t size;
c5ef1c42c   Arjan van de Ven   [PATCH] mark stru...
55
  	const struct inode_operations *proc_iops;
786d7e161   Alexey Dobriyan   Fix rmmod/read/wr...
56
57
58
59
60
61
62
63
  	/*
  	 * NULL ->proc_fops means "PDE is going away RSN" or
  	 * "PDE is just created". In either case, e.g. ->read_proc won't be
  	 * called because it's too late or too early, respectively.
  	 *
  	 * If you're allocating ->proc_fops dynamically, save a pointer
  	 * somewhere.
  	 */
c5ef1c42c   Arjan van de Ven   [PATCH] mark stru...
64
  	const struct file_operations *proc_fops;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
65
66
67
68
69
  	struct proc_dir_entry *next, *parent, *subdir;
  	void *data;
  	read_proc_t *read_proc;
  	write_proc_t *write_proc;
  	atomic_t count;		/* use count */
786d7e161   Alexey Dobriyan   Fix rmmod/read/wr...
70
71
72
  	int pde_users;	/* number of callers into module in progress */
  	spinlock_t pde_unload_lock; /* proc_fops checks and pde_users bumps */
  	struct completion *pde_unload_completion;
881adb853   Alexey Dobriyan   proc: always do -...
73
  	struct list_head pde_openers;	/* who did ->open, but not ->release */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
74
  };
c30bb2a25   KAMEZAWA Hiroyuki   kcore: add kclist...
75
76
77
78
  enum kcore_type {
  	KCORE_TEXT,
  	KCORE_VMALLOC,
  	KCORE_RAM,
26562c59f   KAMEZAWA Hiroyuki   kcore: register v...
79
  	KCORE_VMEMMAP,
c30bb2a25   KAMEZAWA Hiroyuki   kcore: add kclist...
80
81
  	KCORE_OTHER,
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
82
  struct kcore_list {
2ef43ec77   KAMEZAWA Hiroyuki   kcore: use usual ...
83
  	struct list_head list;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
84
85
  	unsigned long addr;
  	size_t size;
c30bb2a25   KAMEZAWA Hiroyuki   kcore: add kclist...
86
  	int type;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
87
  };
666bfddbe   Vivek Goyal   [PATCH] kdump: Ac...
88
89
90
  struct vmcore {
  	struct list_head list;
  	unsigned long long paddr;
80e8ff634   Vivek Goyal   [PATCH] kdump pro...
91
  	unsigned long long size;
666bfddbe   Vivek Goyal   [PATCH] kdump: Ac...
92
93
  	loff_t offset;
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
94
  #ifdef CONFIG_PROC_FS
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
95
  extern void proc_root_init(void);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
96

48e6484d4   Eric W. Biederman   [PATCH] proc: Rew...
97
  void proc_flush_task(struct task_struct *task);
7695650a9   Alexey Dobriyan   Fix race between ...
98

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
99
100
  extern struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode,
  						struct proc_dir_entry *parent);
59b743514   Denis V. Lunev   proc: introduce p...
101
  struct proc_dir_entry *proc_create_data(const char *name, mode_t mode,
2d3a4e366   Alexey Dobriyan   proc: fix ->open'...
102
  				struct proc_dir_entry *parent,
59b743514   Denis V. Lunev   proc: introduce p...
103
104
  				const struct file_operations *proc_fops,
  				void *data);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
105
  extern void remove_proc_entry(const char *name, struct proc_dir_entry *parent);
07543f5c7   Pavel Emelyanov   pid namespaces: m...
106
  struct pid_namespace;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
107

6f4e64335   Pavel Emelyanov   pid namespaces: i...
108
109
  extern int pid_ns_prepare_proc(struct pid_namespace *ns);
  extern void pid_ns_release_proc(struct pid_namespace *ns);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
110
111
112
113
114
115
116
117
118
119
120
  /*
   * proc_tty.c
   */
  struct tty_driver;
  extern void proc_tty_init(void);
  extern void proc_tty_register_driver(struct tty_driver *driver);
  extern void proc_tty_unregister_driver(struct tty_driver *driver);
  
  /*
   * proc_devtree.c
   */
183d02025   Benjamin Herrenschmidt   [PATCH] ppc64: SM...
121
  #ifdef CONFIG_PROC_DEVICETREE
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
122
  struct device_node;
183d02025   Benjamin Herrenschmidt   [PATCH] ppc64: SM...
123
  struct property;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
124
  extern void proc_device_tree_init(void);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
125
  extern void proc_device_tree_add_node(struct device_node *, struct proc_dir_entry *);
183d02025   Benjamin Herrenschmidt   [PATCH] ppc64: SM...
126
  extern void proc_device_tree_add_prop(struct proc_dir_entry *pde, struct property *prop);
898b5395e   Dave C Boutcher   [PATCH] powerpc: ...
127
128
129
130
131
  extern void proc_device_tree_remove_prop(struct proc_dir_entry *pde,
  					 struct property *prop);
  extern void proc_device_tree_update_prop(struct proc_dir_entry *pde,
  					 struct property *newprop,
  					 struct property *oldprop);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
132
133
134
135
136
137
138
  #endif /* CONFIG_PROC_DEVICETREE */
  
  extern struct proc_dir_entry *proc_symlink(const char *,
  		struct proc_dir_entry *, const char *);
  extern struct proc_dir_entry *proc_mkdir(const char *,struct proc_dir_entry *);
  extern struct proc_dir_entry *proc_mkdir_mode(const char *name, mode_t mode,
  			struct proc_dir_entry *parent);
59b743514   Denis V. Lunev   proc: introduce p...
139
140
141
142
143
  static inline struct proc_dir_entry *proc_create(const char *name, mode_t mode,
  	struct proc_dir_entry *parent, const struct file_operations *proc_fops)
  {
  	return proc_create_data(name, mode, parent, proc_fops, NULL);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
144
145
146
147
148
149
150
151
152
153
154
155
  static inline struct proc_dir_entry *create_proc_read_entry(const char *name,
  	mode_t mode, struct proc_dir_entry *base, 
  	read_proc_t *read_proc, void * data)
  {
  	struct proc_dir_entry *res=create_proc_entry(name,mode,base);
  	if (res) {
  		res->read_proc=read_proc;
  		res->data=data;
  	}
  	return res;
  }
   
457c4cbc5   Eric W. Biederman   [NET]: Make /proc...
156
157
158
  extern struct proc_dir_entry *proc_net_fops_create(struct net *net,
  	const char *name, mode_t mode, const struct file_operations *fops);
  extern void proc_net_remove(struct net *net, const char *name);
e5d69b9f4   Denis V. Lunev   [ATM]: Oops readi...
159
160
  extern struct proc_dir_entry *proc_net_mkdir(struct net *net, const char *name,
  	struct proc_dir_entry *parent);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
161

925d1c401   Matt Helsley   procfs task exe s...
162
163
164
165
166
  /* While the {get|set|dup}_mm_exe_file functions are for mm_structs, they are
   * only needed to implement /proc/<pid>|self/exe so we define them here. */
  extern void set_mm_exe_file(struct mm_struct *mm, struct file *new_exe_file);
  extern struct file *get_mm_exe_file(struct mm_struct *mm);
  extern void dup_mm_exe_file(struct mm_struct *oldmm, struct mm_struct *newmm);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
167
  #else
457c4cbc5   Eric W. Biederman   [NET]: Make /proc...
168
  #define proc_net_fops_create(net, name, mode, fops)  ({ (void)(mode), NULL; })
457c4cbc5   Eric W. Biederman   [NET]: Make /proc...
169
  static inline void proc_net_remove(struct net *net, const char *name) {}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
170

60347f671   Pavel Emelyanov   pid namespaces: p...
171
172
173
  static inline void proc_flush_task(struct task_struct *task)
  {
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
174
175
176
  
  static inline struct proc_dir_entry *create_proc_entry(const char *name,
  	mode_t mode, struct proc_dir_entry *parent) { return NULL; }
2d3a4e366   Alexey Dobriyan   proc: fix ->open'...
177
178
179
180
181
182
  static inline struct proc_dir_entry *proc_create(const char *name,
  	mode_t mode, struct proc_dir_entry *parent,
  	const struct file_operations *proc_fops)
  {
  	return NULL;
  }
59b743514   Denis V. Lunev   proc: introduce p...
183
184
185
186
187
188
  static inline struct proc_dir_entry *proc_create_data(const char *name,
  	mode_t mode, struct proc_dir_entry *parent,
  	const struct file_operations *proc_fops, void *data)
  {
  	return NULL;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
189
190
191
192
193
194
195
196
197
198
  #define remove_proc_entry(name, parent) do {} while (0)
  
  static inline struct proc_dir_entry *proc_symlink(const char *name,
  		struct proc_dir_entry *parent,const char *dest) {return NULL;}
  static inline struct proc_dir_entry *proc_mkdir(const char *name,
  	struct proc_dir_entry *parent) {return NULL;}
  
  static inline struct proc_dir_entry *create_proc_read_entry(const char *name,
  	mode_t mode, struct proc_dir_entry *base, 
  	read_proc_t *read_proc, void * data) { return NULL; }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
199
200
201
202
  
  struct tty_driver;
  static inline void proc_tty_register_driver(struct tty_driver *driver) {};
  static inline void proc_tty_unregister_driver(struct tty_driver *driver) {};
6f4e64335   Pavel Emelyanov   pid namespaces: i...
203
204
205
206
207
208
209
210
  static inline int pid_ns_prepare_proc(struct pid_namespace *ns)
  {
  	return 0;
  }
  
  static inline void pid_ns_release_proc(struct pid_namespace *ns)
  {
  }
925d1c401   Matt Helsley   procfs task exe s...
211
212
213
214
215
216
217
218
219
220
221
222
  static inline void set_mm_exe_file(struct mm_struct *mm,
  				   struct file *new_exe_file)
  {}
  
  static inline struct file *get_mm_exe_file(struct mm_struct *mm)
  {
  	return NULL;
  }
  
  static inline void dup_mm_exe_file(struct mm_struct *oldmm,
  	       			   struct mm_struct *newmm)
  {}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
223
224
225
  #endif /* CONFIG_PROC_FS */
  
  #if !defined(CONFIG_PROC_KCORE)
c30bb2a25   KAMEZAWA Hiroyuki   kcore: add kclist...
226
227
  static inline void
  kclist_add(struct kcore_list *new, void *addr, size_t size, int type)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
228
229
230
  {
  }
  #else
c30bb2a25   KAMEZAWA Hiroyuki   kcore: add kclist...
231
  extern void kclist_add(struct kcore_list *, void *, size_t, int type);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
232
  #endif
20cdc894c   Eric W. Biederman   [PATCH] proc: mod...
233
  union proc_op {
3dcd25f37   Jan Blunck   d_path: Make proc...
234
  	int (*proc_get_link)(struct inode *, struct path *);
20cdc894c   Eric W. Biederman   [PATCH] proc: mod...
235
  	int (*proc_read)(struct task_struct *task, char *page);
be614086a   Eric W. Biederman   proc: implement p...
236
237
238
  	int (*proc_show)(struct seq_file *m,
  		struct pid_namespace *ns, struct pid *pid,
  		struct task_struct *task);
20cdc894c   Eric W. Biederman   [PATCH] proc: mod...
239
  };
9043476f7   Al Viro   [PATCH] sanitize ...
240
241
  struct ctl_table_header;
  struct ctl_table;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
242
  struct proc_inode {
13b41b094   Eric W. Biederman   [PATCH] proc: Use...
243
  	struct pid *pid;
aed7a6c47   Eric W. Biederman   [PATCH] proc: Rep...
244
  	int fd;
20cdc894c   Eric W. Biederman   [PATCH] proc: mod...
245
  	union proc_op op;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
246
  	struct proc_dir_entry *pde;
9043476f7   Al Viro   [PATCH] sanitize ...
247
248
  	struct ctl_table_header *sysctl;
  	struct ctl_table *sysctl_entry;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
249
250
251
252
253
254
255
256
257
258
259
260
  	struct inode vfs_inode;
  };
  
  static inline struct proc_inode *PROC_I(const struct inode *inode)
  {
  	return container_of(inode, struct proc_inode, vfs_inode);
  }
  
  static inline struct proc_dir_entry *PDE(const struct inode *inode)
  {
  	return PROC_I(inode)->pde;
  }
457c4cbc5   Eric W. Biederman   [NET]: Make /proc...
261
262
263
264
  static inline struct net *PDE_NET(struct proc_dir_entry *pde)
  {
  	return pde->parent->data;
  }
99f895518   Eric W. Biederman   [PATCH] proc: don...
265
  struct proc_maps_private {
13b41b094   Eric W. Biederman   [PATCH] proc: Use...
266
  	struct pid *pid;
99f895518   Eric W. Biederman   [PATCH] proc: don...
267
  	struct task_struct *task;
dbf8685c8   David Howells   [PATCH] NOMMU: Im...
268
  #ifdef CONFIG_MMU
99f895518   Eric W. Biederman   [PATCH] proc: don...
269
  	struct vm_area_struct *tail_vma;
dbf8685c8   David Howells   [PATCH] NOMMU: Im...
270
  #endif
99f895518   Eric W. Biederman   [PATCH] proc: don...
271
  };
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
272
  #endif /* _LINUX_PROC_FS_H */