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