⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ethread.c

📁 TCP-IP红宝书源代码
💻 C
字号:
/* 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -