Annotation of xinu/sys/ethread.c, revision 1.1

1.1     ! root        1: /* ethread.c - ethread */
        !             2: 
        !             3: #include <conf.h>
        !             4: #include <kernel.h>
        !             5: #include <proc.h>
        !             6: #include <network.h>
        !             7: 
        !             8: /*------------------------------------------------------------------------
        !             9:  *  ethread - read a single packet from the ethernet
        !            10:  *------------------------------------------------------------------------
        !            11:  */
        !            12: ethread(devptr, buff, len)
        !            13: struct devsw   *devptr;
        !            14: char   *buff;
        !            15: int    len;
        !            16: {
        !            17:        PStype  ps;
        !            18:        short   wbuff;
        !            19:        struct  etblk   *etptr;
        !            20:        struct  dcmd    *dcmptr;
        !            21:        struct  dqregs  *dqptr;
        !            22: 
        !            23:        etptr = (struct etblk *) devptr->dvioblk;
        !            24:        dcmptr = etptr->ercmd;
        !            25:        dqptr = etptr->eioaddr;
        !            26:        wait(etptr->etrsem);
        !            27:        disable(ps);
        !            28:        etptr->etrpid = currpid;
        !            29:        recvclr();
        !            30:        ethrstrt(etptr, buff, len);
        !            31:        while (recvtim(DQ_RTO) == TIMEOUT) {
        !            32:                wbuff = (dcmptr=etptr->ewcmd)->dc_buf;
        !            33:                ethstrt(etptr, buff);
        !            34:                ethrstrt(etptr, buff, len);
        !            35:                if (etptr->etlen != 0) {
        !            36:                        ethwstrt(etptr, wbuff, etptr->etlen, DC_NORM);
        !            37:                }
        !            38:        }
        !            39:        if ( (dcmptr->dc_st1 & DC_LUSE) == DC_ERRU) {
        !            40:                len = SYSERR;
        !            41:        } else {
        !            42:                len = (dcmptr->dc_st1&DC_HLEN)|(dcmptr->dc_st2 & DC_LLEN);
        !            43:                len += DC_XLEN;
        !            44:        }
        !            45:        signal(etptr->etrsem);
        !            46:        restore(ps);
        !            47:        return(len);
        !            48: }

unix.superglobalmegacorp.com

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