1 /*	$NetBSD: procfs_machdep.c,v 1.7 2007/10/17 19:56:48 garbled Exp $	*/
2 
3 #include <sys/cdefs.h>
4 __KERNEL_RCSID(0, "$NetBSD: procfs_machdep.c,v 1.7 2007/10/17 19:56:48 garbled 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
23 procfs_getcpuinfstr(char *buf, int *len)
24 {
25 	*len = 0;
26 
27 	return 0;
28 }
29 
30 #ifdef __HAVE_PROCFS_MACHDEP
31 void
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
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
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
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
90 procfs_machdep_validvecregs(struct lwp *l, struct mount *mp)
91 {
92 
93 	return (process_machdep_validvecregs(l->l_proc));
94 }
95 #endif
96