!C99Shell v. 1.0 pre-release build #13!

Software: Apache/2.0.54 (Unix) mod_perl/1.99_09 Perl/v5.8.0 mod_ssl/2.0.54 OpenSSL/0.9.7l DAV/2 FrontPage/5.0.2.2635 PHP/4.4.0 mod_gzip/2.0.26.1a 

uname -a: Linux snow.he.net 4.4.276-v2-mono-1 #1 SMP Wed Jul 21 11:21:17 PDT 2021 i686 

uid=99(nobody) gid=98(nobody) groups=98(nobody) 

Safe-mode: OFF (not secure)

/usr/src/linux-2.4.18-xfs-1.1/drivers/sgi/char/   drwxr-xr-x
Free 318.32 GB of 458.09 GB (69.49%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     newport.c (4.67 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/*
 * newport.c: context switching the newport graphics card and
 *            newport graphics support.
 *
 * Author: Miguel de Icaza
 */

#include <linux/errno.h>
#include <linux/sched.h>
#include <asm/types.h>
#include <asm/gfx.h>
#include <asm/ng1.h>
#include <asm/uaccess.h>
#include <video/newport.h>
#include <linux/module.h>

struct newport_regs *npregs;

EXPORT_SYMBOL(npregs);

/* Kernel routines for supporting graphics context switching */

void newport_save (void *y)
{
    newport_ctx *x = y;
    newport_wait ();

#define LOAD(val) x->val = npregs->set.val;
#define LOADI(val) x->val = npregs->set.val.word;
#define LOADC(val) x->val = npregs->cset.val;
    
    LOAD(drawmode1);
    LOAD(drawmode0);
    LOAD(lsmode);
    LOAD(lspattern);
    LOAD(lspatsave);
    LOAD(zpattern);
    LOAD(colorback);
    LOAD(colorvram);
    LOAD(alpharef);
    LOAD(smask0x);
    LOAD(smask0y);
    LOADI(_xstart);
    LOADI(_ystart);
    LOADI(_xend);
    LOADI(_yend);
    LOAD(xsave);
    LOAD(xymove);
    LOADI(bresd);
    LOADI(bress1);
    LOAD(bresoctinc1);
    LOAD(bresrndinc2);
    LOAD(brese1);
    LOAD(bress2);
    LOAD(aweight0);
    LOAD(aweight1);
    LOADI(colorred);
    LOADI(coloralpha);
    LOADI(colorgrn);
    LOADI(colorblue);
    LOADI(slopered);
    LOADI(slopealpha);
    LOADI(slopegrn);
    LOADI(slopeblue);
    LOAD(wrmask);
    LOAD(hostrw0);
    LOAD(hostrw1);
    
        /* configregs */
    
    LOADC(smask1x);
    LOADC(smask1y);
    LOADC(smask2x);
    LOADC(smask2y);
    LOADC(smask3x);
    LOADC(smask3y);
    LOADC(smask4x);
    LOADC(smask4y);
    LOADC(topscan);
    LOADC(xywin);
    LOADC(clipmode);
    LOADC(config);

    /* Mhm, maybe I am missing something, but it seems that
     * saving/restoring the DCB is only a matter of saving these
     * registers
     */

    newport_bfwait ();
    LOAD (dcbmode);
    newport_bfwait ();
    x->dcbdata0 = npregs->set.dcbdata0.byword;
    newport_bfwait ();
    LOAD(dcbdata1);
}

/*
 * Importat things to keep in mind when restoring the newport context:
 *
 * 1. slopered register is stored as a 2's complete (s12.11);
 *    needs to be converted to a signed magnitude (s(8)12.11).
 *
 * 2. xsave should be stored after xstart.
 *
 * 3. None of the registers should be written with the GO address.
 *    (read the docs for more details on this).
 */
void newport_restore (void *y)
{
    newport_ctx *x = y;
#define STORE(val) npregs->set.val = x->val
#define STOREI(val) npregs->set.val.word = x->val
#define STOREC(val) npregs->cset.val = x->val
    newport_wait ();
    
    STORE(drawmode1);
    STORE(drawmode0);
    STORE(lsmode);
    STORE(lspattern);
    STORE(lspatsave);
    STORE(zpattern);
    STORE(colorback);
    STORE(colorvram);
    STORE(alpharef);
    STORE(smask0x);
    STORE(smask0y);
    STOREI(_xstart);
    STOREI(_ystart);
    STOREI(_xend);
    STOREI(_yend);
    STORE(xsave);
    STORE(xymove);
    STOREI(bresd);
    STOREI(bress1);
    STORE(bresoctinc1);
    STORE(bresrndinc2);
    STORE(brese1);
    STORE(bress2);
    STORE(aweight0);
    STORE(aweight1);
    STOREI(colorred);
    STOREI(coloralpha);
    STOREI(colorgrn);
    STOREI(colorblue);
    STOREI(slopered);
    STOREI(slopealpha);
    STOREI(slopegrn);
    STOREI(slopeblue);
    STORE(wrmask);
    STORE(hostrw0);
    STORE(hostrw1);
    
        /* configregs */
    
    STOREC(smask1x);
    STOREC(smask1y);
    STOREC(smask2x);
    STOREC(smask2y);
    STOREC(smask3x);
    STOREC(smask3y);
    STOREC(smask4x);
    STOREC(smask4y);
    STOREC(topscan);
    STOREC(xywin);
    STOREC(clipmode);
    STOREC(config);

    /* FIXME: restore dcb thingies */
}

int
newport_ioctl (int card, int cmd, unsigned long arg)
{
    switch (cmd){
    case NG1_SETDISPLAYMODE: {
        struct ng1_setdisplaymode_args request;
        
        if (copy_from_user (&request, (void *) arg, sizeof (request)))
            return -EFAULT;

        newport_wait ();
        newport_bfwait ();
        npregs->set.dcbmode = DCB_XMAP0 | XM9_CRS_FIFO_AVAIL |
            DCB_DATAWIDTH_1 | R_DCB_XMAP9_PROTOCOL;
        xmap9FIFOWait (npregs);
        
        /* FIXME: timing is wrong, just be extracted from 
         * the per-board timing table.  I still have to figure
         * out where this comes from
         *
         * This is used to select the protocol used to talk to
         * the xmap9.  For now I am using 60, selecting the
         * WSLOW_DCB_XMAP9_PROTOCOL.
         *
         * Robert Tray comments on this issue:
         *
         * cfreq refers to the frequency of the monitor
         * (ie. the refresh rate).  Our monitors run typically
         * between 60 Hz and 76 Hz.  But it will be as low as
         * 50 Hz if you're displaying NTSC/PAL and as high as
         * 120 Hz if you are runining in stereo mode.  You
         * might want to try the WSLOW values.
         */
        xmap9SetModeReg (npregs, request.wid, request.mode, 60);
        return 0;
    }
    case NG1_SET_CURSOR_HOTSPOT: {
        struct ng1_set_cursor_hotspot request;
        
        if (copy_from_user (&request, (void *) arg, sizeof (request)))
            return -EFAULT;
        /* FIXME: make request.xhot, request.yhot the hot spot */
        return 0;
    }
    
    case NG1_SETGAMMARAMP0:
        /* FIXME: load the gamma ramps :-) */
        return 0;

    }
    return -EINVAL;
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #13 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0237 ]--