ethread.c,v

来自「TCP-IP红宝书源代码」· C,V 代码 · 共 76 行

C,V
76
字号
head	1.1;
access;
symbols;
locks
	dls:1.1; strict;
comment	@ * @;


1.1
date	97.09.21.19.26.05;	author dls;	state Dist;
branches;
next	;


desc
@@


1.1
log
@pre-3e code
@
text
@/* ethread.c - ethread */

#include <conf.h>
#include <kernel.h>
#include <proc.h>
#include <lereg.h>
#include <network.h>
#include <q.h>

/*#define DEBUG*/

/*------------------------------------------------------------------------
 *  ethread - read a single packet from the ethernet
 *------------------------------------------------------------------------
 */
ethread(devptr, ppep, len)
     struct	devsw	*devptr;
     struct	ep	**ppep;
     int	len;
{
    struct	ep	*pep;
    struct	etblk	*pet;

#ifdef DEBUG
    kprintf("ethread(): called\n");
#endif
    
    pet = (struct etblk *) devptr->dvioblk;
    
    /* wait for exclusive read access */
    wait(pet->etrsem);
    
    pet->etrpid = currpid;
    
    while ((pep = (struct ep *) deq(pet->etinq)) == (struct ep *) 0) {
	suspend(currpid);
    }
    
    pet->etrpid = BADPID;
    
    if (pep->ep_len > len) {
	len = SYSERR;
	*ppep = (struct ep *) NULL;
    } else {
	len = pep->ep_len;
	*ppep = pep;
    }
    
    signal(pet->etrsem);
    return(len);
}
@

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?