Annotation of lucent/sys/src/libgnot/bbmalloc.c, revision 1.1

1.1     ! root        1: #include <u.h>
        !             2: #include <libc.h>
        !             3: 
        !             4: /* Routines for letting gbitblt run at user level */
        !             5: 
        !             6: enum {
        !             7:        nbbarena = 20000,
        !             8:        linewords = (64/sizeof(ulong)),
        !             9: };
        !            10: 
        !            11: static ulong bbarena[nbbarena];
        !            12: static ulong *bbcur = bbarena;
        !            13: static ulong *bblast = bbarena;
        !            14: 
        !            15: void *
        !            16: bbmalloc(int nbytes)
        !            17: {
        !            18:        int nw;
        !            19:        ulong *ans;
        !            20: 
        !            21:        nw = nbytes/sizeof(long);
        !            22:        if(bbcur + nw > &bbarena[nbbarena])
        !            23:                ans = bblast = bbarena;
        !            24:        else
        !            25:                ans = bbcur;
        !            26:        bbcur = ans + nw;
        !            27:        if(ans == bbarena)
        !            28:                segflush(ans, nbbarena*sizeof(ulong));
        !            29:        bblast = ans;
        !            30:        return ans;
        !            31: }
        !            32: 
        !            33: void
        !            34: bbfree(void *a, int n)
        !            35: {
        !            36:        USED(a);
        !            37:        bbcur = (ulong *)(((char *)bblast) + n + linewords*sizeof(long));
        !            38: }
        !            39: 
        !            40: int
        !            41: bbonstack(void)
        !            42: {
        !            43: #ifdef Tmips
        !            44:        return 0;
        !            45: #else
        !            46:        return 1;
        !            47: #endif
        !            48: }
        !            49: 
        !            50: #ifdef T68020
        !            51: void
        !            52: flushvirtpage(void *p)
        !            53: {
        !            54:        segflush(p, 200);       /* 200 > bytes in biggest non-converting bitblt */
        !            55: }
        !            56: 
        !            57: void
        !            58: bbdflush(void *p, int n)
        !            59: {
        !            60:        segflush(p, n);
        !            61: }
        !            62: #endif
        !            63: 
        !            64: #ifdef Tmips
        !            65: void
        !            66: wbflush(void)
        !            67: {
        !            68:        /* mips has write-through data cache */
        !            69:        /* assume this call is enough to trickle data cache out */
        !            70: }
        !            71: 
        !            72: void
        !            73: icflush(void *p, int n)
        !            74: {
        !            75:        segflush(p, n);
        !            76: }
        !            77: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.