1 /* $NetBSD: procfs_machdep.c,v 1.9 2014/04/06 14:47:46 martin Exp $ */
2
3 #include <sys/cdefs.h>
4 __KERNEL_RCSID(0, "$NetBSD: procfs_machdep.c,v 1.9 2014/04/06 14:47:46 martin Exp $");
5
6 #include <sys/param.h>
7 #include <sys/systm.h>
8 #include <sys/mount.h>
9 #include <sys/stat.h>
10 #include <sys/vnode.h>
11 #include <sys/proc.h>
12
13 #include <miscfs/procfs/procfs.h>
14
15 #include <machine/reg.h>
16
17
18 /*
19 * Linux-style /proc/cpuinfo.
20 * Only used when procfs is mounted with -o linux.
21 */
22 int
procfs_getcpuinfstr(char * buf,size_t * len)23 procfs_getcpuinfstr(char *buf, size_t *len)
24 {
25 *len = 0;
26
27 return 0;
28 }
29
30 #ifdef __HAVE_PROCFS_MACHDEP
31 void
procfs_machdep_allocvp(struct vnode * vp)32 procfs_machdep_allocvp(struct vnode *vp)
33 {
34 struct pfsnode *pfs = vp->v_data;
35
36 switch (pfs->pfs_type) {
37 case Pmachdep_vecregs: /* /proc/N/vecregs = -rw------- */
38 pfs->pfs_mode = S_IRUSR|S_IWUSR;
39 vp->v_type = VREG;
40 break;
41
42 default:
43 panic("procfs_machdep_allocvp");
44 }
45 }
46
47 int
procfs_machdep_rw(struct lwp * curl,struct lwp * l,struct pfsnode * pfs,struct uio * uio)48 procfs_machdep_rw(struct lwp *curl, struct lwp *l, struct pfsnode *pfs,
49 struct uio *uio)
50 {
51
52 switch (pfs->pfs_type) {
53 case Pmachdep_vecregs:
54 return (procfs_machdep_dovecregs(curl, l, pfs, uio));
55
56 default:
57 panic("procfs_machdep_rw");
58 }
59
60 /* NOTREACHED */
61 return (EINVAL);
62 }
63
64 int
procfs_machdep_getattr(struct vnode * vp,struct vattr * vap,struct proc * procp)65 procfs_machdep_getattr(struct vnode *vp, struct vattr *vap, struct proc *procp)
66 {
67 struct pfsnode *pfs = VTOPFS(vp);
68
69 switch (pfs->pfs_type) {
70 case Pmachdep_vecregs:
71 vap->va_bytes = vap->va_size = sizeof(struct vreg);
72 break;
73
74 default:
75 panic("procfs_machdep_getattr");
76 }
77
78 return (0);
79 }
80
81 int
procfs_machdep_dovecregs(struct lwp * curl,struct lwp * l,struct pfsnode * pfs,struct uio * uio)82 procfs_machdep_dovecregs(struct lwp *curl, struct lwp *l,
83 struct pfsnode *pfs, struct uio *uio)
84 {
85
86 return (process_machdep_dovecregs(curl, l, uio));
87 }
88
89 int
procfs_machdep_validvecregs(struct lwp * l,struct mount * mp)90 procfs_machdep_validvecregs(struct lwp *l, struct mount *mp)
91 {
92
93 return (process_machdep_validvecregs(l->l_proc));
94 }
95 #endif
96