fns.h - vx32 - Local 9vx git repository for patches.
 (HTM) git clone git://r-36.net/vx32
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       fns.h (6097B)
       ---
            1 #include "portfns.h"
            2 
            3 void        aamloop(int);
            4 Dirtab*        addarchfile(char*, int, long(*)(Chan*,void*,long,vlong), long(*)(Chan*,void*,long,vlong));
            5 void        archinit(void);
            6 void        bootargs(void*);
            7 ulong        cankaddr(ulong);
            8 void        clockintr(Ureg*, void*);
            9 int        (*cmpswap)(long*, long, long);
           10 int        cmpswap486(long*, long, long);
           11 int        oscmpswap(long*, long, long);
           12 void        (*coherence)(void);
           13 void        cpuid(int, ulong regs[]);
           14 int        cpuidentify(void);
           15 void        cpuidprint(void);
           16 void        (*cycles)(uvlong*);
           17 void        delay(int);
           18 int        dmacount(int);
           19 int        dmadone(int);
           20 void        dmaend(int);
           21 int        dmainit(int, int);
           22 long        dmasetup(int, void*, long, int);
           23 #define        evenaddr(x)                                /* x86 doesn't care */
           24 void        fpclear(void);
           25 void        fpenv(FPsave*);
           26 void        fpinit(void);
           27 void        fpoff(void);
           28 void        fprestore(FPsave*);
           29 void        fpsave(FPsave*);
           30 ulong        fpstatus(void);
           31 ulong        getcr0(void);
           32 ulong        getcr2(void);
           33 ulong        getcr3(void);
           34 ulong        getcr4(void);
           35 char*        getconf(char*);
           36 void        guesscpuhz(int);
           37 void        halt(void);
           38 int        i8042auxcmd(int);
           39 int        i8042auxcmds(uchar*, int);
           40 void        i8042auxenable(void (*)(int, int));
           41 void        i8042reset(void);
           42 void        i8250console(void);
           43 void*        i8250alloc(int, int, int);
           44 void        i8250mouse(char*, int (*)(Queue*, int), int);
           45 void        i8250setmouseputc(char*, int (*)(Queue*, int));
           46 void        i8253enable(void);
           47 void        i8253init(void);
           48 void        i8253link(void);
           49 uvlong        i8253read(uvlong*);
           50 void        i8253timerset(uvlong);
           51 int        i8259disable(int);
           52 int        i8259enable(Vctl*);
           53 void        i8259init(void);
           54 int        i8259isr(int);
           55 void        i8259on(void);
           56 void        i8259off(void);
           57 int        i8259vecno(int);
           58 void        idle(void);
           59 void        idlehands(void);
           60 int        inb(int);
           61 void        insb(int, void*, int);
           62 ushort        ins(int);
           63 void        inss(int, void*, int);
           64 ulong        inl(int);
           65 void        insl(int, void*, int);
           66 int        intrdisable(int, void (*)(Ureg *, void *), void*, int, char*);
           67 void        intrenable(int, void (*)(Ureg*, void*), void*, int, char*);
           68 void        introff(void);
           69 void        intron(void);
           70 void        invlpg(ulong);
           71 void        iofree(int);
           72 void        ioinit(void);
           73 int        iounused(int, int);
           74 int        ioalloc(int, int, int, char*);
           75 int        ioreserve(int, int, int, char*);
           76 int        iprint(char*, ...);
           77 int        isaconfig(char*, int, ISAConf*);
           78 void*        kaddr(ulong);
           79 void        kbdenable(void);
           80 void        kbdinit(void);
           81 #define        kmapinval()
           82 void        lgdt(ushort[3]);
           83 void        lidt(ushort[3]);
           84 void        links(void);
           85 void        ltr(ulong);
           86 void        mach0init(void);
           87 void        mathinit(void);
           88 void        mb386(void);
           89 void        mb586(void);
           90 void        meminit(void);
           91 void        memorysummary(void);
           92 #define mmuflushtlb(pdb) putcr3(pdb)
           93 void        mmuinit(void);
           94 ulong*        mmuwalk(ulong*, ulong, int, int);
           95 int        mtrr(uvlong, uvlong, char *);
           96 void        mtrrclock(void);
           97 int        mtrrprint(char *, long);
           98 uchar        nvramread(int);
           99 void        nvramwrite(int, uchar);
          100 void        outb(int, int);
          101 void        outsb(int, void*, int);
          102 void        outs(int, ushort);
          103 void        outss(int, void*, int);
          104 void        outl(int, ulong);
          105 void        outsl(int, void*, int);
          106 ulong        paddr(void*);
          107 void        pcireset(void);
          108 void        pcmcisread(PCMslot*);
          109 int        pcmcistuple(int, int, int, void*, int);
          110 PCMmap*        pcmmap(int, ulong, int, int);
          111 int        pcmspecial(char*, ISAConf*);
          112 int        (*_pcmspecial)(char *, ISAConf *);
          113 void        pcmspecialclose(int);
          114 void        (*_pcmspecialclose)(int);
          115 void        pcmunmap(int, PCMmap*);
          116 int        pdbmap(ulong*, ulong, ulong, int);
          117 void        procrestore(Proc*);
          118 void        procsave(Proc*);
          119 void        procsetup(Proc*);
          120 void        putcr0(ulong);
          121 void        putcr3(ulong);
          122 void        putcr4(ulong);
          123 void*        rampage(void);
          124 void        rdmsr(int, vlong*);
          125 void        realmode(Ureg*);
          126 void        screeninit(void);
          127 void        (*screenputs)(char*, int);
          128 void        syncclock(void);
          129 void*        tmpmap(Page*);
          130 void        tmpunmap(void*);
          131 void        touser(void*);
          132 void        trapenable(int, void (*)(Ureg*, void*), void*, char*);
          133 void        trapinit(void);
          134 void        trapinit0(void);
          135 int        tas(void*);
          136 uvlong        tscticks(uvlong*);
          137 ulong        umbmalloc(ulong, int, int);
          138 void        umbfree(ulong, int);
          139 ulong        umbrwmalloc(ulong, int, int);
          140 void        umbrwfree(ulong, int);
          141 ulong        upaalloc(int, int);
          142 void        upafree(ulong, int);
          143 void        upareserve(ulong, int);
          144 #define        userureg(ur) (((ur)->cs & 0xFFFF) == UESEL)
          145 void        vectortable(void);
          146 void*        vmap(ulong, int);
          147 int        vmapsync(ulong);
          148 void        vunmap(void*, int);
          149 void        wbinvd(void);
          150 void        wrmsr(int, vlong);
          151 int        xchgw(ushort*, int);
          152 
          153 #define        waserror()        (up->nerrlab++, setlabel(&up->errlab[up->nerrlab-1]))
          154 #define        KADDR(a)        kaddr(a)
          155 #define PADDR(a)        paddr((void*)(a))
          156 
          157 #define        dcflush(a, b)
          158 
          159 // Plan 9 VX additions
          160 void        bootinit(void);
          161 void        gotolabel(Label*);
          162 int        isuaddr(void*);
          163 void        labelinit(Label *l, ulong pc, ulong sp);
          164 void        latin1putc(int, void(*)(int));
          165 void        makekprocdev(Dev*);
          166 void        newmach(void);
          167 void        oserror(void);
          168 void        oserrstr(void);
          169 void restoretty(void);
          170 int        setlabel(Label*);
          171 void        setsigsegv(int invx32);
          172 int        tailkmesg(char*, int);
          173 void        trap(Ureg*);
          174 void        uartecho(char*, int);
          175 void        uartinit(int);
          176 void        *uvalidaddr(ulong addr, ulong len, int write);
          177 
          178 #define GSHORT(p)        (((p)[1]<<8)|(p)[0])
          179 #define GLONG(p)        ((GSHORT(p+2)<<16)|GSHORT(p))
          180 
          181 void        __plock(Psleep*);
          182 void        __punlock(Psleep*);
          183 void        __pwakeup(Psleep*);
          184 void        __psleep(Psleep*);
          185 
          186 extern int tracelock;
          187 
          188 #define lockfngen(type)        __ ## type
          189 
          190 #define lockgen(type, arg)                                                                 \
          191         do {                                                                                \
          192                 if (tracelock) {                                                        \
          193                         iprint("%s %p %s %d\n", (#type), (arg), __FILE__, __LINE__);        \
          194                         lockfngen(type)((arg));                                                \
          195                 } else {                                                                \
          196                         lockfngen(type)((arg));                                                \
          197                 }                                                                        \
          198         } while (0)
          199 
          200 #define qlock(x)        lockgen(qlock, (x))
          201 #define qunlock(x)        lockgen(qunlock, (x))
          202 #define rlock(x)        lockgen(rlock, (x))
          203 #define runlock(x)        lockgen(runlock, (x))
          204 #define wlock(x)        lockgen(wlock, (x))
          205 #define wunlock(x)        lockgen(wunlock, (x))
          206 #define plock(x)        lockgen(plock, (x))
          207 #define punlock(x)        lockgen(punlock, (x))
          208 #define pwakeup(x)        lockgen(pwakeup, (x))
          209 #define psleep(x)        lockgen(psleep, (x))
          210 // #define lock(x)                lockgen(lock, (x))
          211 // #define unlock(x)        lockgen(unlock, (x))
          212 #define lock(x) __lock(x)
          213 #define unlock(x) __unlock(x)
          214 #define canqlock        __canqlock
          215 #define canrlock        __canrlock
          216 
          217 #define        LOCK(x)                lock(&((x)->lk))
          218 #define        UNLOCK(x)        unlock(&((x)->lk))
          219 #define CANQLOCK(x)        canqlock(&((x)->qlock))
          220 #define        QLOCK(x)        qlock(&((x)->qlock))
          221 #define        QUNLOCK(x)        qunlock(&((x)->qlock))
          222 #define CANRLOCK(x)        canrlock(&((x)->rwlock))
          223 #define        RLOCK(x)        rlock(&((x)->rwlock))
          224 #define        RUNLOCK(x)        runlock(&((x)->rwlock))
          225 #define        WLOCK(x)        wlock(&((x)->rwlock))
          226 #define        WUNLOCK(x)        wunlock(&((x)->rwlock))