Annotation of sys/miscfs/procfs/procfs.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: procfs.h,v 1.24 2007/06/22 09:38:53 jasper Exp $ */
2: /* $NetBSD: procfs.h,v 1.17 1996/02/12 15:01:41 christos Exp $ */
3:
4: /*
5: * Copyright (c) 1993 Jan-Simon Pendry
6: * Copyright (c) 1993
7: * The Regents of the University of California. All rights reserved.
8: *
9: * This code is derived from software contributed to Berkeley by
10: * Jan-Simon Pendry.
11: *
12: * Redistribution and use in source and binary forms, with or without
13: * modification, are permitted provided that the following conditions
14: * are met:
15: * 1. Redistributions of source code must retain the above copyright
16: * notice, this list of conditions and the following disclaimer.
17: * 2. Redistributions in binary form must reproduce the above copyright
18: * notice, this list of conditions and the following disclaimer in the
19: * documentation and/or other materials provided with the distribution.
20: * 3. Neither the name of the University nor the names of its contributors
21: * may be used to endorse or promote products derived from this software
22: * without specific prior written permission.
23: *
24: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34: * SUCH DAMAGE.
35: *
36: * @(#)procfs.h 8.7 (Berkeley) 6/15/94
37: */
38:
39: /*
40: * The different types of node in a procfs filesystem
41: */
42: typedef enum {
43: Proot, /* the filesystem root */
44: Pcurproc, /* symbolic link for curproc */
45: Pself, /* like curproc, but this is the Linux name */
46: Pproc, /* a process-specific sub-directory */
47: Pfile, /* the executable file */
48: Pmem, /* the process's memory image */
49: Pregs, /* the process's register set */
50: Pfpregs, /* the process's FP register set */
51: Pctl, /* process control */
52: Pstatus, /* process status */
53: Pnote, /* process notifier */
54: Pnotepg, /* process group notifier */
55: Pcmdline, /* process command line args */
56: Pmeminfo, /* system memory info (if -o linux) */
57: Pcpuinfo /* CPU info (if -o linux) */
58: } pfstype;
59:
60: /*
61: * control data for the proc file system.
62: */
63: struct pfsnode {
64: TAILQ_ENTRY(pfsnode) list;
65: struct vnode *pfs_vnode; /* vnode associated with this pfsnode */
66: pfstype pfs_type; /* type of procfs node */
67: pid_t pfs_pid; /* associated process */
68: mode_t pfs_mode; /* mode bits for stat() */
69: u_long pfs_flags; /* open flags */
70: u_long pfs_fileno; /* unique file id */
71: };
72:
73: #define PROCFS_NOTELEN 64 /* max length of a note (/proc/$pid/note) */
74: #define PROCFS_CTLLEN 8 /* max length of a ctl msg (/proc/$pid/ctl */
75:
76: /*
77: * Kernel stuff follows
78: */
79: #ifdef _KERNEL
80: #define CNEQ(cnp, s, len) \
81: ((cnp)->cn_namelen == (len) && \
82: (bcmp((s), (cnp)->cn_nameptr, (len)) == 0))
83:
84: #define UIO_MX 32
85:
86: #define PROCFS_FILENO(pid, type) \
87: (((type) < Pproc) ? \
88: ((type) + 4) : \
89: ((((pid)+1) << 5) + ((int) (type))))
90:
91: struct procfsmount {
92: void *pmnt_exechook;
93: int pmnt_flags;
94: };
95:
96: #define VFSTOPROC(mp) ((struct procfsmount *)(mp)->mnt_data)
97:
98: /*
99: * Convert between pfsnode vnode
100: */
101: #define VTOPFS(vp) ((struct pfsnode *)(vp)->v_data)
102: #define PFSTOV(pfs) ((pfs)->pfs_vnode)
103:
104: typedef struct vfs_namemap vfs_namemap_t;
105: struct vfs_namemap {
106: const char *nm_name;
107: int nm_val;
108: };
109:
110: int vfs_getuserstr(struct uio *, char *, int *);
111: const vfs_namemap_t *vfs_findname(const vfs_namemap_t *, char *, int);
112:
113: int procfs_allocvp(struct mount *, struct vnode **, pid_t, pfstype);
114: int procfs_doctl(struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
115: int procfs_dofpregs(struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
116: int procfs_donote(struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
117: int procfs_doregs(struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
118: int procfs_dostatus(struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
119: int procfs_docmdline(struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
120: int procfs_domeminfo(struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
121: int procfs_docpuinfo(struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio);
122: int procfs_domap(struct proc *, struct proc *, struct pfsnode *pfsp, struct uio *uio, int);
123: int procfs_freevp(struct vnode *);
124: int procfs_getcpuinfstr(char *, int *);
125: int procfs_poll(void *);
126:
127: /* functions to check whether or not files should be displayed */
128: int procfs_validfile(struct proc *, struct mount *);
129: int procfs_validfpregs(struct proc *, struct mount *);
130: int procfs_validregs(struct proc *, struct mount *);
131: int procfs_validmap(struct proc *, struct mount *);
132:
133: int procfs_rw(void *);
134:
135: #define PROCFS_LOCKED 0x01
136: #define PROCFS_WANT 0x02
137:
138: extern int (**procfs_vnodeop_p)(void *);
139: extern const struct vfsops procfs_vfsops;
140:
141: struct vfsconf;
142:
143: int procfs_init(struct vfsconf *);
144: int procfs_root(struct mount *, struct vnode **);
145:
146: #endif /* _KERNEL */
CVSweb