4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 only,
8 * as published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License version 2 for more details (a copy is included
14 * in the LICENSE file that accompanied this code).
16 * You should have received a copy of the GNU General Public License
17 * version 2 along with this program; If not, see
18 * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
20 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
21 * CA 95054 USA or visit www.sun.com if you need additional information or
27 * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
28 * Use is subject to license terms.
30 * Copyright (c) 2012, Intel Corporation.
33 * This file is part of Lustre, http://www.lustre.org/
34 * Lustre is a trademark of Sun Microsystems, Inc.
36 * API and structure definitions for params_tree.
38 * Author: LiuYing <emoly.liu@oracle.com>
40 #ifndef __PARAMS_TREE_H__
41 #define __PARAMS_TREE_H__
43 #include <libcfs/libcfs.h>
46 #if (defined(__KERNEL__) && defined(CONFIG_PROC_FS))
51 #ifndef HAVE_ONLY_PROCFS_SEQ
52 /* in lprocfs_stat.c, to protect the private data for proc entries */
53 extern struct rw_semaphore _lprocfs_lock;
56 int LPROCFS_ENTRY_CHECK(struct proc_dir_entry *dp)
60 spin_lock(&(dp)->pde_unload_lock);
61 if (dp->proc_fops == NULL)
63 spin_unlock(&(dp)->pde_unload_lock);
68 #define LPROCFS_SRCH_ENTRY() \
70 down_read(&_lprocfs_lock); \
73 #define LPROCFS_SRCH_EXIT() \
75 up_read(&_lprocfs_lock); \
78 #define LPROCFS_WRITE_ENTRY() \
80 down_write(&_lprocfs_lock); \
83 #define LPROCFS_WRITE_EXIT() \
85 up_write(&_lprocfs_lock); \
88 #define PDE_DATA(inode) PDE(inode)->data
90 #else /* New proc api */
92 static inline struct proc_dir_entry *PDE(struct inode *inode)
98 int LPROCFS_ENTRY_CHECK(struct proc_dir_entry *dp)
103 #define LPROCFS_WRITE_ENTRY() do {} while(0)
104 #define LPROCFS_WRITE_EXIT() do {} while(0)
113 unsigned int param_flags;
120 struct poll_table_struct {
124 struct proc_dir_entry {
129 struct proc_dir_entry *param_pde;
130 struct inode param_inode;
133 struct seq_operations;
142 const struct seq_operations *op;
146 struct seq_operations {
147 void *(*start) (struct seq_file *m, loff_t *pos);
148 void (*stop) (struct seq_file *m, void *v);
149 void *(*next) (struct seq_file *m, void *v, loff_t *pos);
150 int (*show) (struct seq_file *m, void *v);
153 #define seq_lseek NULL
155 static inline int seq_read(char *buf, size_t count, loff_t *ppos)
161 seq_open(struct file *file, const struct seq_operations *fops)
163 struct seq_file *p = file->param_private;
166 LIBCFS_ALLOC(p, sizeof(*p));
169 file->param_private = p;
171 memset(p, 0, sizeof(*p));
177 static inline struct proc_inode *FAKE_PROC_I(const struct inode *inode)
179 return container_of(inode, struct proc_inode, param_inode);
182 static inline struct proc_dir_entry *PDE(struct inode *inode)
184 return FAKE_PROC_I(inode)->param_pde;
188 int LPROCFS_ENTRY_CHECK(struct proc_dir_entry *dp)
192 #define LPROCFS_WRITE_ENTRY() do {} while(0)
193 #define LPROCFS_WRITE_EXIT() do {} while(0)
195 int seq_printf(struct seq_file *, const char *, ...)
196 __attribute__ ((format (printf,2,3)));
200 /* XXX: params_tree APIs */
202 #endif /* __PARAMS_TREE_H__ */