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

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

?? 3c501.c

?? 內核是系統的心臟
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* 3c501.c: A 3Com 3c501 ethernet driver for linux. */
/*
    Copyright (C) 1992,1993  Donald Becker

    Copyright 1993 United States Government as represented by the
    Director, National Security Agency.  This software may be used and
    distributed according to the terms of the GNU Public License,
    incorporated herein by reference.

    This is a device driver for the 3Com Etherlink 3c501.
    Do not purchase this card, even as a joke.  It's performance is horrible,
    and it breaks in many ways.  

    The Author may be reached as becker@super.org or
    C/O Supercomputing Research Ctr., 17100 Science Dr., Bowie MD 20715
    I'll only accept bug fixes, not reports, for the 3c501 driver.
*/

static char *version =
    "3c501.c: 3/3/94 Donald Becker (becker@super.org).\n";

/*
  Braindamage remaining:
  The 3c501 board.
  */

#include <linux/config.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/ptrace.h>
#include <linux/fcntl.h>
#include <linux/ioport.h>
#include <linux/interrupt.h>
#include <linux/malloc.h>
#include <linux/ioport.h>
#include <asm/bitops.h>
#include <asm/io.h>
#include <errno.h>

#include "dev.h"
#include "eth.h"
#include "skbuff.h"
#include "arp.h"

#ifndef HAVE_AUTOIRQ
/* From auto_irq.c, should be in a *.h file. */
extern void autoirq_setup(int waittime);
extern int autoirq_report(int waittime);
extern struct device *irq2dev_map[16];
#endif

#ifndef HAVE_ALLOC_SKB
#define alloc_skb(size, priority) (struct sk_buff *) kmalloc(size,priority)
#define kfree_skbmem(addr, size) kfree_s(addr,size);
#endif


/* Index to functions. */
int el1_probe(struct device *dev);
static int  el_open(struct device *dev);
static int  el_start_xmit(struct sk_buff *skb, struct device *dev);
static void el_interrupt(int reg_ptr);
static void el_receive(struct device *dev);
static void el_reset(struct device *dev);
static int  el1_close(struct device *dev);
static struct enet_statistics *el1_get_stats(struct device *dev);
#ifdef HAVE_MULTICAST
static void set_multicast_list(struct device *dev, int num_addrs, void *addrs);
#endif

#define EL_NAME "EtherLink 3c501"

#ifndef EL_DEBUG
#define EL_DEBUG  2	/* use 0 for production, 1 for devel., >2 for debug */
#endif			/* Anything above 5 is wordy death! */
static int el_debug = EL_DEBUG;
static int el_base;
static struct device *eldev;	/* Only for consistency checking.  */
 
/* We could easily have this struct kmalloc()ed per-board, but
   who would want more than one 3c501?. */
static struct {
    struct enet_statistics stats;
    int tx_pkt_start;		/* The length of the current Tx packet. */
    int collisions;		/* Tx collisions this packet */
} el_status;			/* This should be stored per-board */


#define RX_STATUS (el_base + 0x06)
#define RX_CMD	  RX_STATUS
#define TX_STATUS (el_base + 0x07)
#define TX_CMD	  TX_STATUS
#define GP_LOW 	  (el_base + 0x08)
#define GP_HIGH   (el_base + 0x09)
#define RX_BUF_CLR (el_base + 0x0A)
#define RX_LOW	  (el_base + 0x0A)
#define RX_HIGH   (el_base + 0x0B)
#define SAPROM	  (el_base + 0x0C)
#define AX_STATUS (el_base + 0x0E)
#define AX_CMD	  AX_STATUS
#define DATAPORT  (el_base + 0x0F)
#define TX_RDY 0x08		/* In TX_STATUS */

#define EL1_DATAPTR	0x08
#define EL1_RXPTR	0x0A
#define EL1_SAPROM	0x0C
#define EL1_DATAPORT 	0x0f

/* Writes to the ax command register. */
#define AX_OFF	0x00			/* Irq off, buffer access on */
#define AX_SYS  0x40			/* Load the buffer */
#define AX_XMIT 0x44			/* Transmit a packet */
#define AX_RX	0x48			/* Receive a packet */
#define AX_LOOP	0x0C			/* Loopback mode */
#define AX_RESET 0x80

/* Normal receive mode written to RX_STATUS.  We must intr on short packets
   to avoid bogus rx lockups. */
#define RX_NORM 0xA8		/* 0x68 == all addrs, 0xA8 only to me. */
#define RX_PROM 0x68		/* Senior Prom, uhmm promiscuous mode. */
#define RX_MULT 0xE8		/* Accept multicast packets. */
#define TX_NORM 0x0A	/* Interrupt on everything that might hang the chip */

/* TX_STATUS register. */
#define TX_COLLISION 0x02
#define TX_16COLLISIONS 0x04
#define TX_READY 0x08

#define RX_RUNT 0x08
#define RX_MISSED 0x01		/* Missed a packet due to 3c501 braindamage. */
#define RX_GOOD	0x30		/* Good packet 0x20, or simple overflow 0x10. */


int
el1_probe(struct device *dev)
{
    int i;
    int ioaddr;
    unsigned char station_addr[6];
    int autoirq = 0;

    eldev = dev;		/* Store for debugging. */
    el_base = dev->base_addr;

    if (el_base < 0x40)		/* Invalid?  Probe for it. */
	el_base = 0x280;

    ioaddr = el_base;

    /* Read the station address PROM data from the special port.  */
    for (i = 0; i < 6; i++) {
	outw(i, ioaddr + EL1_DATAPTR);
	station_addr[i] = inb(ioaddr + EL1_SAPROM);
    }
    /* Check the first three octets of the S.A. for 3Com's code. */ 
    if (station_addr[0] != 0x02  ||  station_addr[1] != 0x60
	|| station_addr[2] != 0x8c) {
	return ENODEV;
    }

#ifdef HAVE_PORTRESERVE
    /* Grab the region so we can find the another board if autoIRQ fails. */
    snarf_region(ioaddr, 16);
#endif

    /* We auto-IRQ by shutting off the interrupt line and letting it float
       high. */
    if (dev->irq < 2) {

	autoirq_setup(2);

	inb(RX_STATUS);		/* Clear pending interrupts. */
	inb(TX_STATUS);
	outb(AX_LOOP + 1, AX_CMD);

	outb(0x00, AX_CMD);

	autoirq = autoirq_report(1);

	if (autoirq == 0) {
	    printk("%s: 3c501 probe failed to detect IRQ line.\n", dev->name);
	    return EAGAIN;
	}
	dev->irq = autoirq;
    }

    outb(AX_RESET+AX_LOOP, AX_CMD);			/* Loopback mode. */

    dev->base_addr = el_base;
    memcpy(dev->dev_addr, station_addr, ETH_ALEN);
    if (dev->mem_start & 0xf)
	el_debug = dev->mem_start & 0x7;

    printk("%s: 3c501 EtherLink at %#x, using %sIRQ %d, melting ethernet.\n",
	   dev->name, dev->base_addr, autoirq ? "auto":"assigned ", dev->irq);

    if (el_debug)
	printk("%s", version);

    /* The EL1-specific entries in the device structure. */
    dev->open = &el_open;
    dev->hard_start_xmit = &el_start_xmit;
    dev->stop = &el1_close;
    dev->get_stats = &el1_get_stats;
#ifdef HAVE_MULTICAST
    dev->set_multicast_list = &set_multicast_list;
#endif

    /* Fill in the generic field of the device structure. */
    for (i = 0; i < DEV_NUMBUFFS; i++)
	dev->buffs[i] = NULL;

    dev->hard_header	= eth_header;
    dev->add_arp	= eth_add_arp;
    dev->queue_xmit	= dev_queue_xmit;
    dev->rebuild_header	= eth_rebuild_header;
    dev->type_trans	= eth_type_trans;

    dev->type		= ARPHRD_ETHER;
    dev->hard_header_len = ETH_HLEN;
    dev->mtu		= 1500; /* eth_mtu */
    dev->addr_len	= ETH_ALEN;
    for (i = 0; i < ETH_ALEN; i++) {
	dev->broadcast[i]=0xff;
    }

    /* New-style flags. */
    dev->flags		= IFF_BROADCAST;
    dev->family		= AF_INET;
    dev->pa_addr	= 0;
    dev->pa_brdaddr	= 0;
    dev->pa_mask	= 0;
    dev->pa_alen	= sizeof(unsigned long);

    return 0;
}

/* Open/initialize the board. */
static int
el_open(struct device *dev)
{

  if (el_debug > 2)
      printk("%s: Doing el_open()...", dev->name);

  if (request_irq(dev->irq, &el_interrupt)) {
      if (el_debug > 2)
	  printk("interrupt busy, exiting el_open().\n");
      return -EAGAIN;
  }
  irq2dev_map[dev->irq] = dev;

  el_reset(dev);

  dev->start = 1;

  outb(AX_RX, AX_CMD);	/* Aux control, irq and receive enabled */
  if (el_debug > 2)
     printk("finished el_open().\n");
  return (0);
}

static int
el_start_xmit(struct sk_buff *skb, struct device *dev)
{

    if (dev->tbusy) {
	if (jiffies - dev->trans_start < 20) {
	    if (el_debug > 2)
		printk(" transmitter busy, deferred.\n");
	    return 1;
	}
	if (el_debug)
	    printk ("%s: transmit timed out, txsr %#2x axsr=%02x rxsr=%02x.\n",
		    dev->name, inb(TX_STATUS), inb(AX_STATUS), inb(RX_STATUS));
	el_status.stats.tx_errors++;
#ifdef oldway
	el_reset(dev);
#else

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜一区二区| 亚洲一区二区三区精品在线| 国产精品久久久爽爽爽麻豆色哟哟 | 欧美高清性hdvideosex| 欧美一级xxx| 欧美激情综合五月色丁香小说| 亚洲免费观看高清完整版在线观看 | 欧美午夜免费电影| 91精品国模一区二区三区| 2017欧美狠狠色| 亚洲色图制服丝袜| 日本中文字幕一区二区视频| 国产精品99久久不卡二区| 在线日韩av片| 国产日本欧美一区二区| 亚洲国产成人av网| 国产精品一区二区久久不卡| 欧美系列在线观看| 久久综合一区二区| 亚洲综合成人网| 国产乱码一区二区三区| 欧美午夜精品免费| 国产欧美一区二区三区网站| 婷婷中文字幕综合| 99re成人精品视频| 日韩欧美国产系列| 一区二区三区在线不卡| 国产精品亚洲第一| 91麻豆精品国产91久久久久| 亚洲欧洲av另类| 激情小说欧美图片| 欧美巨大另类极品videosbest| 国产精品人妖ts系列视频| 日本免费在线视频不卡一不卡二| 99v久久综合狠狠综合久久| 精品国产一二三| 日韩精品久久久久久| 91成人免费电影| 国产精品高潮久久久久无| 精品一区二区三区视频 | 日韩av在线播放中文字幕| a4yy欧美一区二区三区| 欧美精品一区二区三区蜜桃 | 欧美酷刑日本凌虐凌虐| 亚洲视频免费在线| 国产麻豆精品久久一二三| 日韩一区二区中文字幕| 亚洲国产综合在线| 色网站国产精品| 中文字幕第一区二区| 国产精品资源在线| 2020日本不卡一区二区视频| 日韩有码一区二区三区| 欧美影院午夜播放| 亚洲日本在线观看| 99热这里都是精品| 中文在线一区二区 | 国产精品久久国产精麻豆99网站| 国产在线精品免费| 日韩欧美专区在线| 视频一区欧美精品| 欧美日韩电影一区| 亚洲第一主播视频| 欧美性一区二区| 亚洲国产精品嫩草影院| 日本福利一区二区| 一区二区三区免费| 91成人免费在线| 亚洲一二三四区不卡| 色婷婷精品久久二区二区蜜臂av | 欧美一级二级三级乱码| 免费在线成人网| 日韩一区二区三区精品视频| 午夜电影网一区| 欧美一区二区福利视频| 日日摸夜夜添夜夜添国产精品| 欧美日韩黄色影视| 日韩中文字幕区一区有砖一区| 7777精品伊人久久久大香线蕉经典版下载| 亚洲乱码一区二区三区在线观看| 91久久久免费一区二区| 亚洲最大色网站| 欧美日韩亚洲综合在线| 五月综合激情网| 日韩精品一区二区三区老鸭窝| 美美哒免费高清在线观看视频一区二区| 欧美一区二区三区视频在线| 精品一区二区三区免费观看 | av成人老司机| 亚洲愉拍自拍另类高清精品| 欧美乱妇23p| 国产制服丝袜一区| 国产蜜臀97一区二区三区| av在线不卡网| 亚洲一区二区中文在线| 欧美日韩国产电影| 另类成人小视频在线| 国产区在线观看成人精品 | 亚洲精品免费看| 欧美精品在线视频| 久久99精品久久久久久国产越南 | 国产成人啪免费观看软件| 国产精品国产三级国产普通话三级 | 日韩精品一区二| 懂色av一区二区夜夜嗨| 亚洲综合激情小说| 欧美大胆一级视频| 国产成人小视频| 亚洲午夜久久久| 精品国产123| 色诱亚洲精品久久久久久| 青青草国产精品亚洲专区无| 亚洲国产精品二十页| 欧美三级视频在线播放| 国产精品一区二区男女羞羞无遮挡| 成人欧美一区二区三区1314| 欧美性极品少妇| 国产一区二区看久久| 亚洲一区二区av在线| 久久久亚洲综合| 91久久奴性调教| 国产精品中文字幕日韩精品| 亚洲最大的成人av| 精品国一区二区三区| 色成人在线视频| 国产一区二区三区四区五区入口| 一区二区三区小说| 欧美精品一区二区三区很污很色的| 91网站最新地址| 国产又粗又猛又爽又黄91精品| 一区二区三区在线观看动漫| 久久九九全国免费| 欧美日韩免费观看一区三区| 国产成人免费在线观看不卡| av电影在线观看一区| 毛片不卡一区二区| 亚洲欧美偷拍卡通变态| 欧美精品一区二区久久婷婷 | 视频一区视频二区中文| 国产精品久久久久影院色老大| 欧美精品一二三区| 99在线精品视频| 国产一区二区三区蝌蚪| 丝袜美腿一区二区三区| 综合欧美亚洲日本| 国产亚洲一区二区三区| 日韩午夜激情电影| 欧美性色黄大片| 99精品视频一区| 国产一区二区在线观看免费| 日韩精品乱码免费| 一区二区三区丝袜| 国产精品你懂的| 久久久久久久久久久久久夜| 这里只有精品免费| 日本韩国精品一区二区在线观看| 国产成人a级片| 精品伊人久久久久7777人| 亚洲国产精品久久一线不卡| 亚洲欧美日韩国产手机在线| 欧美国产乱子伦 | 国产精品18久久久久| 免费黄网站欧美| 日韩激情av在线| 香蕉成人伊视频在线观看| 一区二区三区欧美日韩| 亚洲欧美激情插| 亚洲视频综合在线| 国产精品久久久久久一区二区三区| 精品国产不卡一区二区三区| 91精品国产综合久久久久| 欧美在线高清视频| 日本二三区不卡| 色女孩综合影院| 91麻豆精品视频| 91久久精品一区二区二区| 色综合久久综合网97色综合| 色综合久久久久综合体| 成人av网站免费| 99久久99久久精品国产片果冻| 成人性生交大片免费看中文| 国产福利一区二区三区视频 | 久久精品人人爽人人爽| 精品国产乱码久久久久久牛牛| 日韩精品一区二| 亚洲精品在线网站| 久久久99精品久久| 国产欧美日韩激情| 中文字幕一区二区三区精华液| 亚洲欧洲在线观看av| 亚洲日本成人在线观看| 亚洲激情av在线| 天天影视色香欲综合网老头| 日本中文字幕不卡| 激情久久五月天| 成人视屏免费看| 91麻豆蜜桃一区二区三区| 欧美色综合网站| 欧美一区二区三区四区五区 | 国产福利精品一区|