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

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

?? smc91c92_cs.c

?? pcmcia驅動源代碼,直接可以在linux2.6下使用 !
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*======================================================================    A PCMCIA ethernet driver for SMC91c92-based cards.    This driver supports Megahertz PCMCIA ethernet cards; and    Megahertz, Motorola, Ositech, and Psion Dacom ethernet/modem    multifunction cards.    Copyright (C) 1999 David A. Hinds -- dahinds@users.sourceforge.net    smc91c92_cs.c 1.122 2002/10/25 06:26:39    This driver contains code written by Donald Becker    (becker@scyld.com), Rowan Hughes (x-csrdh@jcu.edu.au),    David Hinds (dahinds@users.sourceforge.net), and Erik Stahlman    (erik@vt.edu).  Donald wrote the SMC 91c92 code using parts of    Erik's SMC 91c94 driver.  Rowan wrote a similar driver, and I've    incorporated some parts of his driver here.  I (Dave) wrote most    of the PCMCIA glue code, and the Ositech support code.  Kelly    Stephens (kstephen@holli.com) added support for the Motorola    Mariner, with help from Allen Brost.    This software may be used and distributed according to the terms of    the GNU General Public License, incorporated herein by reference.======================================================================*/#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/slab.h>#include <linux/string.h>#include <linux/timer.h>#include <linux/interrupt.h>#include <linux/delay.h>#include <linux/crc32.h>#include <linux/netdevice.h>#include <linux/etherdevice.h>#include <linux/skbuff.h>#include <linux/if_arp.h>#include <linux/ioport.h>#include <linux/ethtool.h>#include <linux/mii.h>#include <linux/jiffies.h>#include <pcmcia/cs_types.h>#include <pcmcia/cs.h>#include <pcmcia/cistpl.h>#include <pcmcia/cisreg.h>#include <pcmcia/ciscode.h>#include <pcmcia/ds.h>#include <pcmcia/ss.h>#include <asm/io.h>#include <asm/system.h>#include <asm/uaccess.h>/* Ositech Seven of Diamonds firmware */#include "ositech.h"/*====================================================================*/static const char *if_names[] = { "auto", "10baseT", "10base2"};/* Module parameters */MODULE_DESCRIPTION("SMC 91c92 series PCMCIA ethernet driver");MODULE_LICENSE("GPL");#define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0)/*  Transceiver/media type.   0 = auto   1 = 10baseT (and autoselect if #define AUTOSELECT),   2 = AUI/10base2,*/INT_MODULE_PARM(if_port, 0);#ifdef PCMCIA_DEBUGINT_MODULE_PARM(pc_debug, PCMCIA_DEBUG);static const char *version ="smc91c92_cs.c 1.123 2006/11/09 Donald Becker, becker@scyld.com.\n";#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)#else#define DEBUG(n, args...)#endif#define DRV_NAME	"smc91c92_cs"#define DRV_VERSION	"1.123"/*====================================================================*//* Operational parameter that usually are not changed. *//* Time in jiffies before concluding Tx hung */#define TX_TIMEOUT		((400*HZ)/1000)/* Maximum events (Rx packets, etc.) to handle at each interrupt. */#define INTR_WORK		4/* Times to check the check the chip before concluding that it doesn't   currently have room for another Tx packet. */#define MEMORY_WAIT_TIME       	8struct smc_private {	struct pcmcia_device	*p_dev;    spinlock_t			lock;    u_short			manfid;    u_short			cardid;    struct net_device_stats	stats;    dev_node_t			node;    struct sk_buff		*saved_skb;    int				packets_waiting;    void			__iomem *base;    u_short			cfg;    struct timer_list		media;    int				watchdog, tx_err;    u_short			media_status;    u_short			fast_poll;    u_short			link_status;    struct mii_if_info		mii_if;    int				duplex;    int				rx_ovrn;};struct smc_cfg_mem {    tuple_t tuple;    cisparse_t parse;    u_char buf[255];};/* Special definitions for Megahertz multifunction cards */#define MEGAHERTZ_ISR		0x0380/* Special function registers for Motorola Mariner */#define MOT_LAN			0x0000#define MOT_UART		0x0020#define MOT_EEPROM		0x20#define MOT_NORMAL \(COR_LEVEL_REQ | COR_FUNC_ENA | COR_ADDR_DECODE | COR_IREQ_ENA)/* Special function registers for Ositech cards */#define OSITECH_AUI_CTL		0x0c#define OSITECH_PWRDOWN		0x0d#define OSITECH_RESET		0x0e#define OSITECH_ISR		0x0f#define OSITECH_AUI_PWR		0x0c#define OSITECH_RESET_ISR	0x0e#define OSI_AUI_PWR		0x40#define OSI_LAN_PWRDOWN		0x02#define OSI_MODEM_PWRDOWN	0x01#define OSI_LAN_RESET		0x02#define OSI_MODEM_RESET		0x01/* Symbolic constants for the SMC91c9* series chips, from Erik Stahlman. */#define	BANK_SELECT		14		/* Window select register. */#define SMC_SELECT_BANK(x)  { outw(x, ioaddr + BANK_SELECT); }/* Bank 0 registers. */#define	TCR 		0	/* transmit control register */#define	 TCR_CLEAR	0	/* do NOTHING */#define  TCR_ENABLE	0x0001	/* if this is 1, we can transmit */#define	 TCR_PAD_EN	0x0080	/* pads short packets to 64 bytes */#define  TCR_MONCSN	0x0400  /* Monitor Carrier. */#define  TCR_FDUPLX	0x0800  /* Full duplex mode. */#define	 TCR_NORMAL TCR_ENABLE | TCR_PAD_EN#define EPH		2	/* Ethernet Protocol Handler report. */#define  EPH_TX_SUC	0x0001#define  EPH_SNGLCOL	0x0002#define  EPH_MULCOL	0x0004#define  EPH_LTX_MULT	0x0008#define  EPH_16COL	0x0010#define  EPH_SQET	0x0020#define  EPH_LTX_BRD	0x0040#define  EPH_TX_DEFR	0x0080#define  EPH_LAT_COL	0x0200#define  EPH_LOST_CAR	0x0400#define  EPH_EXC_DEF	0x0800#define  EPH_CTR_ROL	0x1000#define  EPH_RX_OVRN	0x2000#define  EPH_LINK_OK	0x4000#define  EPH_TX_UNRN	0x8000#define MEMINFO		8	/* Memory Information Register */#define MEMCFG		10	/* Memory Configuration Register *//* Bank 1 registers. */#define CONFIG			0#define  CFG_MII_SELECT		0x8000	/* 91C100 only */#define  CFG_NO_WAIT		0x1000#define  CFG_FULL_STEP		0x0400#define  CFG_SET_SQLCH		0x0200#define  CFG_AUI_SELECT	 	0x0100#define  CFG_16BIT		0x0080#define  CFG_DIS_LINK		0x0040#define  CFG_STATIC		0x0030#define  CFG_IRQ_SEL_1		0x0004#define  CFG_IRQ_SEL_0		0x0002#define BASE_ADDR		2#define	ADDR0			4#define	GENERAL			10#define	CONTROL			12#define  CTL_STORE		0x0001#define  CTL_RELOAD		0x0002#define  CTL_EE_SELECT		0x0004#define  CTL_TE_ENABLE		0x0020#define  CTL_CR_ENABLE		0x0040#define  CTL_LE_ENABLE		0x0080#define  CTL_AUTO_RELEASE	0x0800#define	 CTL_POWERDOWN		0x2000/* Bank 2 registers. */#define MMU_CMD		0#define	 MC_ALLOC	0x20  	/* or with number of 256 byte packets */#define	 MC_RESET	0x40#define  MC_RELEASE  	0x80  	/* remove and release the current rx packet */#define  MC_FREEPKT  	0xA0  	/* Release packet in PNR register */#define  MC_ENQUEUE	0xC0 	/* Enqueue the packet for transmit */#define	PNR_ARR		2#define FIFO_PORTS	4#define  FP_RXEMPTY	0x8000#define	POINTER		6#define  PTR_AUTO_INC	0x0040#define  PTR_READ	0x2000#define	 PTR_AUTOINC 	0x4000#define	 PTR_RCV	0x8000#define	DATA_1		8#define	INTERRUPT	12#define  IM_RCV_INT		0x1#define	 IM_TX_INT		0x2#define	 IM_TX_EMPTY_INT	0x4#define	 IM_ALLOC_INT		0x8#define	 IM_RX_OVRN_INT		0x10#define	 IM_EPH_INT		0x20#define	RCR		4enum RxCfg { RxAllMulti = 0x0004, RxPromisc = 0x0002,	     RxEnable = 0x0100, RxStripCRC = 0x0200};#define  RCR_SOFTRESET	0x8000 	/* resets the chip */#define	 RCR_STRIP_CRC	0x200	/* strips CRC */#define  RCR_ENABLE	0x100	/* IFF this is set, we can receive packets */#define  RCR_ALMUL	0x4 	/* receive all multicast packets */#define	 RCR_PROMISC	0x2	/* enable promiscuous mode *//* the normal settings for the RCR register : */#define	 RCR_NORMAL	(RCR_STRIP_CRC | RCR_ENABLE)#define  RCR_CLEAR	0x0		/* set it to a base state */#define	COUNTER		6/* BANK 3 -- not the same values as in smc9194! */#define	MULTICAST0	0#define	MULTICAST2	2#define	MULTICAST4	4#define	MULTICAST6	6#define MGMT    	8#define REVISION	0x0a/* Transmit status bits. */#define TS_SUCCESS 0x0001#define TS_16COL   0x0010#define TS_LATCOL  0x0200#define TS_LOSTCAR 0x0400/* Receive status bits. */#define RS_ALGNERR	0x8000#define RS_BADCRC	0x2000#define RS_ODDFRAME	0x1000#define RS_TOOLONG	0x0800#define RS_TOOSHORT	0x0400#define RS_MULTICAST	0x0001#define RS_ERRORS	(RS_ALGNERR | RS_BADCRC | RS_TOOLONG | RS_TOOSHORT)#define set_bits(v, p) outw(inw(p)|(v), (p))#define mask_bits(v, p) outw(inw(p)&(v), (p))/*====================================================================*/static void smc91c92_detach(struct pcmcia_device *p_dev);static int smc91c92_config(struct pcmcia_device *link);static void smc91c92_release(struct pcmcia_device *link);static int smc_open(struct net_device *dev);static int smc_close(struct net_device *dev);static int smc_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);static void smc_tx_timeout(struct net_device *dev);static int smc_start_xmit(struct sk_buff *skb, struct net_device *dev);static irqreturn_t smc_interrupt(int irq, void *dev_id);static void smc_rx(struct net_device *dev);static struct net_device_stats *smc_get_stats(struct net_device *dev);static void set_rx_mode(struct net_device *dev);static int s9k_config(struct net_device *dev, struct ifmap *map);static void smc_set_xcvr(struct net_device *dev, int if_port);static void smc_reset(struct net_device *dev);static void media_check(u_long arg);static void mdio_sync(kio_addr_t addr);static int mdio_read(struct net_device *dev, int phy_id, int loc);static void mdio_write(struct net_device *dev, int phy_id, int loc, int value);static int smc_link_ok(struct net_device *dev);static const struct ethtool_ops ethtool_ops;/*======================================================================  smc91c92_attach() creates an "instance" of the driver, allocating  local data structures for one device.  The device is registered  with Card Services.======================================================================*/static int smc91c92_probe(struct pcmcia_device *link){    struct smc_private *smc;    struct net_device *dev;    DEBUG(0, "smc91c92_attach()\n");    /* Create new ethernet device */    dev = alloc_etherdev(sizeof(struct smc_private));    if (!dev)	return -ENOMEM;    smc = netdev_priv(dev);    smc->p_dev = link;    link->priv = dev;    spin_lock_init(&smc->lock);    link->io.NumPorts1 = 16;    link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;    link->io.IOAddrLines = 4;    link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;    link->irq.IRQInfo1 = IRQ_LEVEL_ID;    link->irq.Handler = &smc_interrupt;    link->irq.Instance = dev;    link->conf.Attributes = CONF_ENABLE_IRQ;    link->conf.IntType = INT_MEMORY_AND_IO;    /* The SMC91c92-specific entries in the device structure. */    SET_MODULE_OWNER(dev);    dev->hard_start_xmit = &smc_start_xmit;    dev->get_stats = &smc_get_stats;    dev->set_config = &s9k_config;    dev->set_multicast_list = &set_rx_mode;    dev->open = &smc_open;    dev->stop = &smc_close;    dev->do_ioctl = &smc_ioctl;    SET_ETHTOOL_OPS(dev, &ethtool_ops);#ifdef HAVE_TX_TIMEOUT    dev->tx_timeout = smc_tx_timeout;    dev->watchdog_timeo = TX_TIMEOUT;#endif    smc->mii_if.dev = dev;    smc->mii_if.mdio_read = mdio_read;    smc->mii_if.mdio_write = mdio_write;    smc->mii_if.phy_id_mask = 0x1f;    smc->mii_if.reg_num_mask = 0x1f;    return smc91c92_config(link);} /* smc91c92_attach *//*======================================================================    This deletes a driver "instance".  The device is de-registered    with Card Services.  If it has been released, all local data    structures are freed.  Otherwise, the structures will be freed    when the device is released.======================================================================*/static void smc91c92_detach(struct pcmcia_device *link){    struct net_device *dev = link->priv;    DEBUG(0, "smc91c92_detach(0x%p)\n", link);    if (link->dev_node)	unregister_netdev(dev);    smc91c92_release(link);    free_netdev(dev);} /* smc91c92_detach *//*====================================================================*/static int cvt_ascii_address(struct net_device *dev, char *s){    int i, j, da, c;    if (strlen(s) != 12)	return -1;    for (i = 0; i < 6; i++) {	da = 0;	for (j = 0; j < 2; j++) {	    c = *s++;	    da <<= 4;	    da += ((c >= '0') && (c <= '9')) ?		(c - '0') : ((c & 0x0f) + 9);	}	dev->dev_addr[i] = da;    }    return 0;}/*====================================================================*/static int first_tuple(struct pcmcia_device *handle, tuple_t *tuple,		cisparse_t *parse){	int i;	if ((i = pcmcia_get_first_tuple(handle, tuple)) != CS_SUCCESS ||			(i = pcmcia_get_tuple_data(handle, tuple)) != CS_SUCCESS)		return i;	return pcmcia_parse_tuple(handle, tuple, parse);}static int next_tuple(struct pcmcia_device *handle, tuple_t *tuple,		cisparse_t *parse){	int i;	if ((i = pcmcia_get_next_tuple(handle, tuple)) != CS_SUCCESS ||			(i = pcmcia_get_tuple_data(handle, tuple)) != CS_SUCCESS)		return i;	return pcmcia_parse_tuple(handle, tuple, parse);}/*======================================================================    Configuration stuff for Megahertz cards    mhz_3288_power() is used to power up a 3288's ethernet chip.    mhz_mfc_config() handles socket setup for multifunction (1144    and 3288) cards.  mhz_setup() gets a card's hardware ethernet    address.======================================================================*/static int mhz_3288_power(struct pcmcia_device *link){    struct net_device *dev = link->priv;    struct smc_private *smc = netdev_priv(dev);    u_char tmp;    /* Read the ISR twice... */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女免费视频一区| 亚洲国产一区二区a毛片| 欧美亚洲另类激情小说| 成人国产视频在线观看| 丁香婷婷综合网| 国产精品996| fc2成人免费人成在线观看播放 | 波波电影院一区二区三区| 精品影视av免费| 韩国精品主播一区二区在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 天天爽夜夜爽夜夜爽精品视频| 午夜激情一区二区三区| 免费人成黄页网站在线一区二区| 美女视频黄久久| 国产激情一区二区三区四区 | 国产精品女同一区二区三区| 国产亚洲精品aa午夜观看| 国产日韩v精品一区二区| 国产精品久久三| 亚洲尤物在线视频观看| 免费观看在线综合色| 久久精品国产亚洲a| 高清beeg欧美| 欧美日韩国产综合久久| 精品国精品国产| 久久久精品人体av艺术| 高清久久久久久| 国产iv一区二区三区| 奇米777欧美一区二区| 九一九一国产精品| 成人精品亚洲人成在线| 欧美系列亚洲系列| 久久久久久一二三区| 亚洲午夜羞羞片| 国产精品888| 91麻豆精品国产91久久久久久久久| 欧美刺激午夜性久久久久久久| 国产精品麻豆视频| 免费不卡在线观看| 91香蕉视频mp4| 日韩精品专区在线影院观看 | 日本一区二区免费在线| 五月婷婷久久丁香| 成人av电影观看| 国产美女久久久久| 精品久久一二三区| 成人性生交大片免费看视频在线 | 亚洲一区二区三区四区在线免费观看| 亚洲bt欧美bt精品777| 国产高清一区日本| 欧美一区二区视频在线观看 | 久久日韩粉嫩一区二区三区| 伊人色综合久久天天| 国产福利91精品| 精品蜜桃在线看| 亚洲bt欧美bt精品| 欧美三级欧美一级| 亚洲日本中文字幕区| 亚洲精品亚洲人成人网 | 久久久久久9999| 中文字幕一区二区三区乱码在线| 日韩av一二三| 欧美午夜在线观看| 亚洲视频综合在线| 成人一区在线观看| 久久综合久久鬼色中文字| 丝袜国产日韩另类美女| 色综合视频在线观看| 国产精品青草久久| 国产另类ts人妖一区二区| 日韩免费性生活视频播放| 亚洲大片免费看| 欧美日韩精品一二三区| 亚洲综合色网站| 欧美系列日韩一区| 亚洲国产一区视频| 欧美精品久久一区二区三区| 欧美mv日韩mv| 国产另类ts人妖一区二区| 一区二区三区四区中文字幕| 日韩电影在线看| 91精品国产综合久久福利| 日韩成人精品在线| 91精品国产综合久久精品app| 亚洲福利一区二区三区| 欧美老人xxxx18| 美女脱光内衣内裤视频久久网站| 日韩一卡二卡三卡四卡| 国产一区在线看| 国产精品久久久久久久久晋中 | proumb性欧美在线观看| 国产亚洲综合av| 91在线播放网址| 亚洲电影第三页| 久久久久久一级片| 国产suv一区二区三区88区| 日韩三级av在线播放| 精品乱人伦小说| 亚洲一级在线观看| 91国产福利在线| 免费精品视频在线| 中文字幕免费观看一区| 色婷婷av一区二区三区大白胸| 亚洲综合视频在线观看| 欧美xxxxxxxxx| 91香蕉视频在线| 另类中文字幕网| 亚洲免费观看视频| 日韩欧美精品三级| 91网站视频在线观看| 青草国产精品久久久久久| 久久久www成人免费毛片麻豆| 91网上在线视频| 久久er99热精品一区二区| 国产精品久久久久久久久快鸭 | 91免费视频网址| 欧美一卡二卡在线观看| 一区二区三区中文在线| 色综合久久88色综合天天6| 免费欧美日韩国产三级电影| 中文字幕日韩精品一区| 精品美女一区二区| 欧美视频第二页| eeuss鲁片一区二区三区| 日精品一区二区三区| 国产精品麻豆久久久| 精品少妇一区二区三区在线播放 | 视频一区二区三区中文字幕| 国产日韩视频一区二区三区| 欧美剧情电影在线观看完整版免费励志电影| 国产一区二区在线电影| 日韩国产高清在线| 中文字幕一区三区| 91在线观看高清| 中文一区一区三区高中清不卡| 欧美久久久久免费| 日本韩国一区二区三区| 日本成人在线一区| 亚洲一二三区视频在线观看| 中文字幕日韩欧美一区二区三区| 欧美哺乳videos| 日韩一级黄色大片| 91麻豆精品国产91久久久久久| 在线看国产一区| 99久久精品免费看| 成人精品鲁一区一区二区| 国产精品资源站在线| 久久99国产精品尤物| 极品少妇一区二区| 毛片av一区二区| 精品一区二区三区日韩| 久草这里只有精品视频| 麻豆精品精品国产自在97香蕉| 蜜桃av一区二区三区电影| 男女男精品视频网| 美女视频一区二区| 国产一区二区三区久久悠悠色av| 久久国产精品99精品国产| 精品一区二区三区在线观看 | 激情文学综合网| 久久国内精品视频| 韩国成人在线视频| 国产成人精品亚洲日本在线桃色| 国产一区二区不卡在线| 成人黄色在线网站| 91免费精品国自产拍在线不卡| 日本韩国欧美一区二区三区| 99精品视频在线观看免费| 色综合久久久久网| 欧美一区二区三区在| 久久久久久久久久美女| 中文字幕中文字幕中文字幕亚洲无线| 综合激情成人伊人| 亚洲成人在线免费| 国产在线播精品第三| 99vv1com这只有精品| 欧美日韩一级视频| 精品福利一二区| 亚洲天堂精品在线观看| 日韩中文字幕1| 国产美女精品人人做人人爽| eeuss鲁一区二区三区| 91麻豆精品国产91久久久久久久久 | 国产精品毛片无遮挡高清| 亚洲欧洲性图库| 免费的成人av| aaa亚洲精品一二三区| 91精品婷婷国产综合久久性色| 久久影院午夜论| 亚洲国产成人精品视频| 国产精品一二三四| 欧美精品一二三四| 国产精品激情偷乱一区二区∴| 亚洲在线观看免费| 国产美女一区二区三区| 欧美美女一区二区| 中文字幕中文字幕一区二区| 日本不卡一区二区三区高清视频| 99国产精品一区|