procfs_fpregs.c revision 1541
11541Srgrimes/* 21541Srgrimes * Copyright (c) 1993 Jan-Simon Pendry 31541Srgrimes * Copyright (c) 1993 41541Srgrimes * The Regents of the University of California. All rights reserved. 51541Srgrimes * 61541Srgrimes * This code is derived from software contributed to Berkeley by 71541Srgrimes * Jan-Simon Pendry. 81541Srgrimes * 91541Srgrimes * Redistribution and use in source and binary forms, with or without 101541Srgrimes * modification, are permitted provided that the following conditions 111541Srgrimes * are met: 121541Srgrimes * 1. Redistributions of source code must retain the above copyright 131541Srgrimes * notice, this list of conditions and the following disclaimer. 141541Srgrimes * 2. Redistributions in binary form must reproduce the above copyright 151541Srgrimes * notice, this list of conditions and the following disclaimer in the 161541Srgrimes * documentation and/or other materials provided with the distribution. 171541Srgrimes * 3. All advertising materials mentioning features or use of this software 181541Srgrimes * must display the following acknowledgement: 191541Srgrimes * This product includes software developed by the University of 201541Srgrimes * California, Berkeley and its contributors. 211541Srgrimes * 4. Neither the name of the University nor the names of its contributors 221541Srgrimes * may be used to endorse or promote products derived from this software 231541Srgrimes * without specific prior written permission. 241541Srgrimes * 251541Srgrimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 261541Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 271541Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 281541Srgrimes * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 291541Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 301541Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 311541Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 321541Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 331541Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 341541Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 351541Srgrimes * SUCH DAMAGE. 361541Srgrimes * 371541Srgrimes * @(#)procfs_fpregs.c 8.1 (Berkeley) 1/27/94 381541Srgrimes * 391541Srgrimes * From: 401541Srgrimes * $Id: procfs_regs.c,v 3.2 1993/12/15 09:40:17 jsp Exp $ 411541Srgrimes */ 421541Srgrimes 431541Srgrimes#include <sys/param.h> 441541Srgrimes#include <sys/systm.h> 451541Srgrimes#include <sys/time.h> 461541Srgrimes#include <sys/kernel.h> 471541Srgrimes#include <sys/proc.h> 481541Srgrimes#include <sys/vnode.h> 491541Srgrimes#include <machine/reg.h> 501541Srgrimes#include <miscfs/procfs/procfs.h> 511541Srgrimes 521541Srgrimesint 531541Srgrimesprocfs_dofpregs(curp, p, pfs, uio) 541541Srgrimes struct proc *curp; 551541Srgrimes struct proc *p; 561541Srgrimes struct pfsnode *pfs; 571541Srgrimes struct uio *uio; 581541Srgrimes{ 591541Srgrimes int error; 601541Srgrimes struct fpreg r; 611541Srgrimes char *kv; 621541Srgrimes int kl; 631541Srgrimes 641541Srgrimes kl = sizeof(r); 651541Srgrimes kv = (char *) &r; 661541Srgrimes 671541Srgrimes kv += uio->uio_offset; 681541Srgrimes kl -= uio->uio_offset; 691541Srgrimes if (kl > uio->uio_resid) 701541Srgrimes kl = uio->uio_resid; 711541Srgrimes 721541Srgrimes if (kl < 0) 731541Srgrimes error = EINVAL; 741541Srgrimes else 751541Srgrimes error = procfs_read_fpregs(p, &r); 761541Srgrimes if (error == 0) 771541Srgrimes error = uiomove(kv, kl, uio); 781541Srgrimes if (error == 0 && uio->uio_rw == UIO_WRITE) { 791541Srgrimes if (p->p_stat != SSTOP) 801541Srgrimes error = EBUSY; 811541Srgrimes else 821541Srgrimes error = procfs_write_fpregs(p, &r); 831541Srgrimes } 841541Srgrimes 851541Srgrimes uio->uio_offset = 0; 861541Srgrimes return (error); 871541Srgrimes} 88