Annotation of xinu/sys/ethread.c, revision 1.1.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.