Home | History | Annotate | Line # | Download | only in powerpc
      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
     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
     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