亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 3c501.c

?? 內核是系統的心臟
?? C
?? 第 1 頁 / 共 2 頁
字號:
	outb(TX_NORM, TX_CMD);
	outb(RX_NORM, RX_CMD);
	outb(AX_OFF, AX_CMD);	/* Just trigger a false interrupt. */
#endif
	outb(AX_RX, AX_CMD);	/* Aux control, irq and receive enabled */
	dev->tbusy = 0;
	dev->trans_start = jiffies;
    }

    if (skb == NULL) {
	dev_tint(dev);
	return 0;
    }

    /* Fill in the ethernet header. */
    if (!skb->arp  &&  dev->rebuild_header(skb->data, dev)) {
	skb->dev = dev;
	arp_queue (skb);
	return 0;
    }
    skb->arp=1;

    if (skb->len <= 0)
	return 0;

    /* Avoid timer-based retransmission conflicts. */
    if (set_bit(0, (void*)&dev->tbusy) != 0)
	printk("%s: Transmitter access conflict.\n", dev->name);
    else {
	int gp_start = 0x800 - (ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN);
	unsigned char *buf = skb->data;

	el_status.tx_pkt_start = gp_start;
    	el_status.collisions = 0;

	outb(AX_SYS, AX_CMD);
	inb(RX_STATUS);
	inb(TX_STATUS);
	outb(0x00, RX_BUF_CLR);	/* Set rx packet area to 0. */
	outw(gp_start, GP_LOW);
	outsb(DATAPORT,buf,skb->len);
	outw(gp_start, GP_LOW);
	outb(AX_XMIT, AX_CMD);		/* Trigger xmit.  */
	dev->trans_start = jiffies;
    }

    if (el_debug > 2)
	printk(" queued xmit.\n");
    if (skb->free)
	kfree_skb (skb, FREE_WRITE);
    return 0;
}


/* The typical workload of the driver:
   Handle the ether interface interrupts. */
static void
el_interrupt(int reg_ptr)
{
    int irq = -(((struct pt_regs *)reg_ptr)->orig_eax+2);
    /*struct device *dev = (struct device *)(irq2dev_map[irq]);*/
    struct device *dev = eldev;
    int axsr;			/* Aux. status reg. */
    short ioaddr;

    if (eldev->irq != irq) {
	printk (EL_NAME ": irq %d for unknown device\n", irq);
	return;
    }

    ioaddr = dev->base_addr;

    axsr = inb(AX_STATUS);

    if (el_debug > 3)
      printk("%s: el_interrupt() aux=%#02x", dev->name, axsr);
    if (dev->interrupt)
	printk("%s: Reentering the interrupt driver!\n", dev->name);
    dev->interrupt = 1;

    if (dev->tbusy) {
	int txsr = inb(TX_STATUS);

	if (el_debug > 6)
	    printk(" txsr=%02x gp=%04x rp=%04x", txsr, inw(GP_LOW),
		   inw(RX_LOW));

	if ((axsr & 0x80) && (txsr & TX_READY) == 0) {
	    printk("%s: Unusual interrupt during Tx, txsr=%02x axsr=%02x"
		   " gp=%03x rp=%03x.\n", dev->name, txsr, axsr,
		   inw(ioaddr + EL1_DATAPTR), inw(ioaddr + EL1_RXPTR));
	    dev->tbusy = 0;
	    mark_bh(INET_BH);
	} else if (txsr & TX_16COLLISIONS) {
	    if (el_debug)
		printk("%s: Transmit failed 16 times, ethernet jammed?\n",
		       dev->name);
	    outb(AX_SYS, AX_CMD);
	    el_status.stats.tx_aborted_errors++;
	} else if (txsr & TX_COLLISION) {	/* Retrigger xmit. */
	    if (el_debug > 6)
		printk(" retransmitting after a collision.\n");
	    outb(AX_SYS, AX_CMD);
	    outw(el_status.tx_pkt_start, GP_LOW);
	    outb(AX_XMIT, AX_CMD);
	    el_status.stats.collisions++;
	    dev->interrupt = 0;
	    return;
	} else {
	    el_status.stats.tx_packets++;
	    if (el_debug > 6)
		printk(" Tx succeeded %s\n",
		       (txsr & TX_RDY) ? "." : "but tx is busy!");
	    dev->tbusy = 0;
	    mark_bh(INET_BH);
	}
    } else {
	int rxsr = inb(RX_STATUS);
	if (el_debug > 5)
	    printk(" rxsr=%02x txsr=%02x rp=%04x", rxsr, inb(TX_STATUS),
		   inw(RX_LOW));

	/* Just reading rx_status fixes most errors. */
	if (rxsr & RX_MISSED)
	    el_status.stats.rx_missed_errors++;
	if (rxsr & RX_RUNT) {	/* Handled to avoid board lock-up. */
	    el_status.stats.rx_length_errors++;
	    if (el_debug > 5) printk(" runt.\n");
	} else if (rxsr & RX_GOOD) {
	    el_receive(eldev);
	} else {			/* Nothing?  Something is broken! */
	    if (el_debug > 2)
		printk("%s: No packet seen, rxsr=%02x **resetting 3c501***\n",
		       dev->name, rxsr);
	    el_reset(eldev);
	}
	if (el_debug > 3)
	    printk(".\n");
    }

    outb(AX_RX, AX_CMD);
    outb(0x00, RX_BUF_CLR);
    inb(RX_STATUS);		/* Be certain that interrupts are cleared. */
    inb(TX_STATUS);
    dev->interrupt = 0;
    return;
}


/* We have a good packet. Well, not really "good", just mostly not broken.
   We must check everything to see if it is good. */
static void
el_receive(struct device *dev)
{
    int sksize, pkt_len;
    struct sk_buff *skb;

    pkt_len = inw(RX_LOW);

    if (el_debug > 4)
      printk(" el_receive %d.\n", pkt_len);

    if ((pkt_len < 60)  ||  (pkt_len > 1536)) {
	if (el_debug)
	  printk("%s: bogus packet, length=%d\n", dev->name, pkt_len);
	el_status.stats.rx_over_errors++;
	return;
    }
    outb(AX_SYS, AX_CMD);

    sksize = sizeof(struct sk_buff) + pkt_len;
    skb = alloc_skb(sksize, GFP_ATOMIC);
    outw(0x00, GP_LOW);
    if (skb == NULL) {
	printk("%s: Memory squeeze, dropping packet.\n", dev->name);
	el_status.stats.rx_dropped++;
	return;
    } else {
	skb->mem_len = sksize;
	skb->mem_addr = skb;
	skb->len = pkt_len;
	skb->dev = dev;

	insb(DATAPORT, skb->data, pkt_len);

#ifdef HAVE_NETIF_RX
	    netif_rx(skb);
#else
	    skb->lock = 0;
	    if (dev_rint((unsigned char*)skb, pkt_len, IN_SKBUFF, dev) != 0) {
		kfree_skbmem(skb, sksize);
		lp->stats.rx_dropped++;
		break;
	    }
#endif
	el_status.stats.rx_packets++;
    }
    return;
}

static void 
el_reset(struct device *dev)
{
    if (el_debug> 2)
	printk("3c501 reset...");
    outb(AX_RESET, AX_CMD);	/* Reset the chip */
    outb(AX_LOOP, AX_CMD);	/* Aux control, irq and loopback enabled */
    {
	int i;
	for (i = 0; i < 6; i++)	/* Set the station address. */
	    outb(dev->dev_addr[i], el_base + i);
    }
    
    outb(0, RX_BUF_CLR);		/* Set rx packet area to 0. */
    cli();			/* Avoid glitch on writes to CMD regs */
    outb(TX_NORM, TX_CMD);		/* tx irq on done, collision */
    outb(RX_NORM, RX_CMD);	/* Set Rx commands. */
    inb(RX_STATUS);		/* Clear status. */
    inb(TX_STATUS);
    dev->interrupt = 0;
    dev->tbusy = 0;
    sti();
}

static int
el1_close(struct device *dev)
{
    int ioaddr = dev->base_addr;

    if (el_debug > 2)
	printk("%s: Shutting down ethercard at %#x.\n", dev->name, ioaddr);

    dev->tbusy = 1;
    dev->start = 0;

    /* Free and disable the IRQ. */
    free_irq(dev->irq);
    outb(AX_RESET, AX_CMD);	/* Reset the chip */
    irq2dev_map[dev->irq] = 0;

    return 0;
}

static struct enet_statistics *
el1_get_stats(struct device *dev)
{
    return &el_status.stats;
}

#ifdef HAVE_MULTICAST
/* Set or clear the multicast filter for this adaptor.
   num_addrs == -1	Promiscuous mode, receive all packets
   num_addrs == 0	Normal mode, clear multicast list
   num_addrs > 0	Multicast mode, receive normal and MC packets, and do
			best-effort filtering.
 */
static void
set_multicast_list(struct device *dev, int num_addrs, void *addrs)
{
    if (num_addrs > 0) {
	outb(RX_MULT, RX_CMD);
	inb(RX_STATUS);		/* Clear status. */
    } else if (num_addrs < 0) {
	outb(RX_PROM, RX_CMD);
	inb(RX_STATUS);
    } else {
	outb(RX_NORM, RX_CMD);
	inb(RX_STATUS);
    }
}
#endif

/*
 * Local variables:
 *  compile-command: "gcc -D__KERNEL__ -Wall -Wstrict-prototypes -O6 -fomit-frame-pointer  -m486 -c -o 3c501.o 3c501.c"
 *  kept-new-versions: 5
 * End:
 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区二区三区av| 欧美理论在线播放| 亚洲视频在线一区观看| 精品视频全国免费看| 香蕉久久夜色精品国产使用方法| 欧美三级电影在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美日韩精品专区| 国产91在线|亚洲| 亚洲男人的天堂av| 日韩欧美三级在线| 不卡的av电影| 国产盗摄女厕一区二区三区| 亚洲人精品午夜| 久久久久久久精| 欧美男女性生活在线直播观看 | 一区视频在线播放| 日韩欧美国产高清| 91精品国产综合久久国产大片 | 久草精品在线观看| 久久机这里只有精品| 日韩激情视频在线观看| 亚洲午夜精品在线| 一区二区日韩av| 亚洲欧美另类小说视频| 国产亚洲视频系列| 日本一区二区电影| 国产欧美日韩综合精品一区二区| 久久奇米777| 中文字幕一区在线| 亚洲伊人色欲综合网| 午夜日韩在线观看| 日本一区中文字幕| 激情五月播播久久久精品| 国产精一区二区三区| 91视频国产观看| 色婷婷国产精品| 欧美一二三在线| 国产精品免费久久久久| 亚洲激情欧美激情| 日韩高清欧美激情| 国产福利不卡视频| 91成人在线免费观看| 欧美精选一区二区| 久久久久久久久久久久久夜| 亚洲婷婷在线视频| 亚洲成人手机在线| 狠狠色狠狠色综合日日91app| 成人福利视频在线看| 久久久久久麻豆| 亚洲国产视频直播| 成人亚洲一区二区一| 日韩精品一区二区在线| 一区二区三区中文字幕在线观看| 韩国精品在线观看| 欧美精品亚洲一区二区在线播放| 久久精品亚洲精品国产欧美kt∨ | 91麻豆免费看片| 久久尤物电影视频在线观看| 亚洲成人三级小说| 91色在线porny| 久久嫩草精品久久久久| 日韩制服丝袜av| 91久久一区二区| 中文字幕第一区二区| 国产在线播放一区三区四| 欧美岛国在线观看| 久久精品国产99| 精品国产伦理网| 国产一二三精品| 日本一区二区三区电影| av一区二区三区| 亚洲欧美另类小说视频| 欧美私模裸体表演在线观看| 午夜亚洲国产au精品一区二区| 欧美三电影在线| 奇米精品一区二区三区四区| 精品美女在线播放| 成人a区在线观看| 亚洲国产成人高清精品| 欧美一级欧美三级在线观看| 国产超碰在线一区| 亚洲女人的天堂| 欧美一级片在线| 在线国产亚洲欧美| 国产高清精品网站| 一区二区三区中文在线观看| 日韩一卡二卡三卡四卡| 成人黄色国产精品网站大全在线免费观看 | 午夜一区二区三区视频| 国产校园另类小说区| 色婷婷av一区二区三区之一色屋| 麻豆精品在线视频| 亚洲视频在线观看一区| 精品国内片67194| 欧美日韩国产123区| 国产成人a级片| 老鸭窝一区二区久久精品| 亚洲一级在线观看| 中文字幕在线观看一区二区| 精品国产制服丝袜高跟| 欧美日韩国产美| 色一区在线观看| 99久久国产免费看| 99免费精品视频| a美女胸又www黄视频久久| 韩日欧美一区二区三区| 日本在线播放一区二区三区| 三级精品在线观看| 日韩国产高清在线| 男女视频一区二区| 久久66热re国产| 国产91精品精华液一区二区三区| 国产福利电影一区二区三区| 国产激情91久久精品导航 | 国产在线精品一区二区三区不卡 | 激情久久久久久久久久久久久久久久| 日本va欧美va欧美va精品| 日本欧美在线看| 日本一区二区久久| 麻豆精品久久精品色综合| 日本vs亚洲vs韩国一区三区| 日韩高清不卡一区| 久久丁香综合五月国产三级网站| 久久精品免费观看| 91丨porny丨最新| 91.xcao| 日韩伦理免费电影| 日韩不卡一二三区| 处破女av一区二区| 欧美午夜电影一区| 欧美mv日韩mv| 亚洲午夜精品网| 大陆成人av片| 久久综合色婷婷| 亚洲一区二区三区在线播放| 国产一区久久久| 欧美另类变人与禽xxxxx| 亚洲视频免费在线| 九一九一国产精品| 欧美性三三影院| 亚洲激情成人在线| 91老师片黄在线观看| 国产欧美精品一区二区三区四区 | 精品国产精品一区二区夜夜嗨| 欧美午夜电影在线播放| 911精品国产一区二区在线| 日韩码欧中文字| 国产精品18久久久久久久久| 欧美高清视频在线高清观看mv色露露十八| 国产情人综合久久777777| 日本不卡1234视频| 欧美欧美欧美欧美| 日韩高清在线观看| 日韩三级.com| 国产乱码精品一区二区三区忘忧草| 8x福利精品第一导航| 日本免费新一区视频| 日韩精品专区在线影院重磅| 精品在线播放免费| 国产校园另类小说区| 国产精品一区三区| 欧美一区二区三区思思人| 石原莉奈在线亚洲二区| 日韩精品一区二区三区在线观看| 婷婷亚洲久悠悠色悠在线播放| 欧美性感一类影片在线播放| 美国毛片一区二区| 国产女主播视频一区二区| 欧美在线一二三四区| 男男gaygay亚洲| 一区视频在线播放| 欧美挠脚心视频网站| 99国产精品国产精品久久| 青青草原综合久久大伊人精品| 国产欧美一区二区精品仙草咪 | 国产欧美视频一区二区| 99国产精品一区| 国内精品国产三级国产a久久| 亚洲欧洲日产国码二区| 欧美一区二区成人6969| 99re成人精品视频| 国产在线看一区| 老司机精品视频导航| 亚洲免费观看高清完整| 久久影院电视剧免费观看| 91精品国产欧美一区二区18| 一本高清dvd不卡在线观看| 成人一区在线看| 成人在线综合网| 成人污污视频在线观看| 免费成人在线播放| 日韩经典中文字幕一区| 香蕉久久夜色精品国产使用方法| 亚洲精品国产第一综合99久久| 国产精品天干天干在观线| 欧美国产日本视频| 亚洲欧美日韩精品久久久久| 亚洲欧美日韩久久| 亚洲国产精品久久人人爱蜜臀|