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

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

?? xirc2ps_cs.c

?? pcmcia驅動源代碼,直接可以在linux2.6下使用 !
?? C
?? 第 1 頁 / 共 4 頁
字號:
static intmii_getbit(kio_addr_t ioaddr){    unsigned d;    PutByte(XIRCREG2_GPR2, 4|0); /* drive MDCK low */    udelay(1);    d = GetByte(XIRCREG2_GPR2); /* read MDIO */    PutByte(XIRCREG2_GPR2, 4|1); /* drive MDCK high again */    udelay(1);    return d & 0x20; /* read MDIO */}static voidmii_wbits(kio_addr_t ioaddr, unsigned data, int len){    unsigned m = 1 << (len-1);    for (; m; m >>= 1)	mii_putbit(ioaddr, data & m);}static unsignedmii_rd(kio_addr_t ioaddr,	u_char phyaddr, u_char phyreg){    int i;    unsigned data=0, m;    SelectPage(2);    for (i=0; i < 32; i++)		/* 32 bit preamble */	mii_putbit(ioaddr, 1);    mii_wbits(ioaddr, 0x06, 4); 	/* Start and opcode for read */    mii_wbits(ioaddr, phyaddr, 5);	/* PHY address to be accessed */    mii_wbits(ioaddr, phyreg, 5);	/* PHY register to read */    mii_idle(ioaddr);			/* turn around */    mii_getbit(ioaddr);    for (m = 1<<15; m; m >>= 1)	if (mii_getbit(ioaddr))	    data |= m;    mii_idle(ioaddr);    return data;}static voidmii_wr(kio_addr_t ioaddr, u_char phyaddr, u_char phyreg, unsigned data, int len){    int i;    SelectPage(2);    for (i=0; i < 32; i++)		/* 32 bit preamble */	mii_putbit(ioaddr, 1);    mii_wbits(ioaddr, 0x05, 4); 	/* Start and opcode for write */    mii_wbits(ioaddr, phyaddr, 5);	/* PHY address to be accessed */    mii_wbits(ioaddr, phyreg, 5);	/* PHY Register to write */    mii_putbit(ioaddr, 1);		/* turn around */    mii_putbit(ioaddr, 0);    mii_wbits(ioaddr, data, len);	/* And write the data */    mii_idle(ioaddr);}/*============= Main bulk of functions	=========================*//**************** * xirc2ps_attach() creates an "instance" of the driver, allocating * local data structures for one device.  The device is registered * with Card Services. * * The dev_link structure is initialized, but we don't actually * configure the card at this point -- we wait until we receive a * card insertion event. */static intxirc2ps_probe(struct pcmcia_device *link){    struct net_device *dev;    local_info_t *local;    DEBUG(0, "attach()\n");    /* Allocate the device structure */    dev = alloc_etherdev(sizeof(local_info_t));    if (!dev)	    return -ENOMEM;    local = netdev_priv(dev);    local->dev = dev;    local->p_dev = link;    link->priv = dev;    /* General socket configuration */    link->conf.Attributes = CONF_ENABLE_IRQ;    link->conf.IntType = INT_MEMORY_AND_IO;    link->conf.ConfigIndex = 1;    link->irq.Handler = xirc2ps_interrupt;    link->irq.Instance = dev;    /* Fill in card specific entries */    SET_MODULE_OWNER(dev);    dev->hard_start_xmit = &do_start_xmit;    dev->set_config = &do_config;    dev->get_stats = &do_get_stats;    dev->do_ioctl = &do_ioctl;    SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops);    dev->set_multicast_list = &set_multicast_list;    dev->open = &do_open;    dev->stop = &do_stop;#ifdef HAVE_TX_TIMEOUT    dev->tx_timeout = do_tx_timeout;    dev->watchdog_timeo = TX_TIMEOUT;    INIT_WORK(&local->tx_timeout_task, xirc2ps_tx_timeout_task);#endif    return xirc2ps_config(link);} /* xirc2ps_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 voidxirc2ps_detach(struct pcmcia_device *link){    struct net_device *dev = link->priv;    DEBUG(0, "detach(0x%p)\n", link);    if (link->dev_node)	unregister_netdev(dev);    xirc2ps_release(link);    free_netdev(dev);} /* xirc2ps_detach *//**************** * Detect the type of the card. s is the buffer with the data of tuple 0x20 * Returns: 0 := not supported *		       mediaid=11 and prodid=47 * Media-Id bits: *  Ethernet	    0x01 *  Tokenring	    0x02 *  Arcnet	    0x04 *  Wireless	    0x08 *  Modem	    0x10 *  GSM only	    0x20 * Prod-Id bits: *  Pocket	    0x10 *  External	    0x20 *  Creditcard	    0x40 *  Cardbus	    0x80 * */static intset_card_type(struct pcmcia_device *link, const void *s){    struct net_device *dev = link->priv;    local_info_t *local = netdev_priv(dev);  #ifdef PCMCIA_DEBUG    unsigned cisrev = ((const unsigned char *)s)[2];  #endif    unsigned mediaid= ((const unsigned char *)s)[3];    unsigned prodid = ((const unsigned char *)s)[4];    DEBUG(0, "cisrev=%02x mediaid=%02x prodid=%02x\n",	  cisrev, mediaid, prodid);    local->mohawk = 0;    local->dingo = 0;    local->modem = 0;    local->card_type = XIR_UNKNOWN;    if (!(prodid & 0x40)) {	printk(KNOT_XIRC "Ooops: Not a creditcard\n");	return 0;    }    if (!(mediaid & 0x01)) {	printk(KNOT_XIRC "Not an Ethernet card\n");	return 0;    }    if (mediaid & 0x10) {	local->modem = 1;	switch(prodid & 15) {	  case 1: local->card_type = XIR_CEM   ; break;	  case 2: local->card_type = XIR_CEM2  ; break;	  case 3: local->card_type = XIR_CEM3  ; break;	  case 4: local->card_type = XIR_CEM33 ; break;	  case 5: local->card_type = XIR_CEM56M;		  local->mohawk = 1;		  break;	  case 6:	  case 7: /* 7 is the RealPort 10/56 */		  local->card_type = XIR_CEM56 ;		  local->mohawk = 1;		  local->dingo = 1;		  break;	}    } else {	switch(prodid & 15) {	  case 1: local->card_type = has_ce2_string(link)? XIR_CE2 : XIR_CE ;		  break;	  case 2: local->card_type = XIR_CE2; break;	  case 3: local->card_type = XIR_CE3;		  local->mohawk = 1;		  break;	}    }    if (local->card_type == XIR_CE || local->card_type == XIR_CEM) {	printk(KNOT_XIRC "Sorry, this is an old CE card\n");	return 0;    }    if (local->card_type == XIR_UNKNOWN)	printk(KNOT_XIRC "unknown card (mediaid=%02x prodid=%02x)\n",	       mediaid, prodid);    return 1;}/**************** * There are some CE2 cards out which claim to be a CE card. * This function looks for a "CE2" in the 3rd version field. * Returns: true if this is a CE2 */static inthas_ce2_string(struct pcmcia_device * p_dev){	if (p_dev->prod_id[2] && strstr(p_dev->prod_id[2], "CE2"))		return 1;	return 0;}/**************** * xirc2ps_config() is scheduled to run after a CARD_INSERTION event * is received, to configure the PCMCIA socket, and to make the * ethernet device available to the system. */static intxirc2ps_config(struct pcmcia_device * link){    struct net_device *dev = link->priv;    local_info_t *local = netdev_priv(dev);    tuple_t tuple;    cisparse_t parse;    kio_addr_t ioaddr;    int err, i;    u_char buf[64];    cistpl_lan_node_id_t *node_id = (cistpl_lan_node_id_t*)parse.funce.data;    cistpl_cftable_entry_t *cf = &parse.cftable_entry;    local->dingo_ccr = NULL;    DEBUG(0, "config(0x%p)\n", link);    /*     * This reads the card's CONFIG tuple to find its configuration     * registers.     */    tuple.Attributes = 0;    tuple.TupleData = buf;    tuple.TupleDataMax = 64;    tuple.TupleOffset = 0;    /* Is this a valid	card */    tuple.DesiredTuple = CISTPL_MANFID;    if ((err=first_tuple(link, &tuple, &parse))) {	printk(KNOT_XIRC "manfid not found in CIS\n");	goto failure;    }    switch(parse.manfid.manf) {      case MANFID_XIRCOM:	local->manf_str = "Xircom";	break;      case MANFID_ACCTON:	local->manf_str = "Accton";	break;      case MANFID_COMPAQ:      case MANFID_COMPAQ2:	local->manf_str = "Compaq";	break;      case MANFID_INTEL:	local->manf_str = "Intel";	break;      case MANFID_TOSHIBA:	local->manf_str = "Toshiba";	break;      default:	printk(KNOT_XIRC "Unknown Card Manufacturer ID: 0x%04x\n",	       (unsigned)parse.manfid.manf);	goto failure;    }    DEBUG(0, "found %s card\n", local->manf_str);    if (!set_card_type(link, buf)) {	printk(KNOT_XIRC "this card is not supported\n");	goto failure;    }    /* get the ethernet address from the CIS */    tuple.DesiredTuple = CISTPL_FUNCE;    for (err = first_tuple(link, &tuple, &parse); !err;			     err = next_tuple(link, &tuple, &parse)) {	/* Once I saw two CISTPL_FUNCE_LAN_NODE_ID entries:	 * the first one with a length of zero the second correct -	 * so I skip all entries with length 0 */	if (parse.funce.type == CISTPL_FUNCE_LAN_NODE_ID	    && ((cistpl_lan_node_id_t *)parse.funce.data)->nb)	    break;    }    if (err) { /* not found: try to get the node-id from tuple 0x89 */	tuple.DesiredTuple = 0x89;  /* data layout looks like tuple 0x22 */	if ((err = pcmcia_get_first_tuple(link, &tuple)) == 0 &&		(err = pcmcia_get_tuple_data(link, &tuple)) == 0) {	    if (tuple.TupleDataLen == 8 && *buf == CISTPL_FUNCE_LAN_NODE_ID)		memcpy(&parse, buf, 8);	    else		err = -1;	}    }    if (err) { /* another try	(James Lehmer's CE2 version 4.1)*/	tuple.DesiredTuple = CISTPL_FUNCE;	for (err = first_tuple(link, &tuple, &parse); !err;				 err = next_tuple(link, &tuple, &parse)) {	    if (parse.funce.type == 0x02 && parse.funce.data[0] == 1		&& parse.funce.data[1] == 6 && tuple.TupleDataLen == 13) {		buf[1] = 4;		memcpy(&parse, buf+1, 8);		break;	    }	}    }    if (err) {	printk(KNOT_XIRC "node-id not found in CIS\n");	goto failure;    }    node_id = (cistpl_lan_node_id_t *)parse.funce.data;    if (node_id->nb != 6) {	printk(KNOT_XIRC "malformed node-id in CIS\n");	goto failure;    }    for (i=0; i < 6; i++)	dev->dev_addr[i] = node_id->id[i];    link->io.IOAddrLines =10;    link->io.Attributes1 = IO_DATA_PATH_WIDTH_16;    link->irq.Attributes = IRQ_HANDLE_PRESENT;    link->irq.IRQInfo1 = IRQ_LEVEL_ID;    if (local->modem) {	int pass;	if (do_sound) {	    link->conf.Attributes |= CONF_ENABLE_SPKR;	    link->conf.Status |= CCSR_AUDIO_ENA;	}	link->irq.Attributes |= IRQ_TYPE_DYNAMIC_SHARING|IRQ_FIRST_SHARED ;	link->io.NumPorts2 = 8;	link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;	if (local->dingo) {	    /* Take the Modem IO port from the CIS and scan for a free	     * Ethernet port */	    link->io.NumPorts1 = 16; /* no Mako stuff anymore */	    tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;	    for (err = first_tuple(link, &tuple, &parse); !err;				 err = next_tuple(link, &tuple, &parse)) {		if (cf->io.nwin > 0  &&  (cf->io.win[0].base & 0xf) == 8) {		    for (ioaddr = 0x300; ioaddr < 0x400; ioaddr += 0x10) {			link->conf.ConfigIndex = cf->index ;			link->io.BasePort2 = cf->io.win[0].base;			link->io.BasePort1 = ioaddr;			if (!(err=pcmcia_request_io(link, &link->io)))			    goto port_found;		    }		}	    }	} else {	    link->io.NumPorts1 = 18;	    /* We do 2 passes here: The first one uses the regular mapping and	     * the second tries again, thereby considering that the 32 ports are	     * mirrored every 32 bytes. Actually we use a mirrored port for	     * the Mako if (on the first pass) the COR bit 5 is set.	     */	    for (pass=0; pass < 2; pass++) {		tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;		for (err = first_tuple(link, &tuple, &parse); !err;				     err = next_tuple(link, &tuple, &parse)){		    if (cf->io.nwin > 0  &&  (cf->io.win[0].base & 0xf) == 8){			link->conf.ConfigIndex = cf->index ;			link->io.BasePort2 = cf->io.win[0].base;			link->io.BasePort1 = link->io.BasePort2				    + (pass ? (cf->index & 0x20 ? -24:8)					    : (cf->index & 0x20 ?   8:-24));			if (!(err=pcmcia_request_io(link, &link->io)))			    goto port_found;		    }		}	    }	    /* if special option:	     * try to configure as Ethernet only.	     * .... */	}	printk(KNOT_XIRC "no ports available\n");    } else {	link->irq.Attributes |= IRQ_TYPE_EXCLUSIVE;	link->io.NumPorts1 = 16;	for (ioaddr = 0x300; ioaddr < 0x400; ioaddr += 0x10) {	    link->io.BasePort1 = ioaddr;	    if (!(err=pcmcia_request_io(link, &link->io)))		goto port_found;	}	link->io.BasePort1 = 0; /* let CS decide */	if ((err=pcmcia_request_io(link, &link->io))) {	    cs_error(link, RequestIO, err);	    goto config_error;	}    }  port_found:    if (err)	 goto config_error;    /****************     * Now allocate an interrupt line.	Note that this does not     * actually assign a handler to the interrupt.     */    if ((err=pcmcia_request_irq(link, &link->irq))) {	cs_error(link, RequestIRQ, err);	goto config_error;    }    /****************     * This actually configures the PCMCIA socket -- setting up     * the I/O windows and the interrupt mapping.     */    if ((err=pcmcia_request_configuration(link, &link->conf))) {	cs_error(link, RequestConfiguration, err);	goto config_error;    }    if (local->dingo) {	conf_reg_t reg;	win_req_t req;	memreq_t mem;	/* Reset the modem's BAR to the correct value	 * This is necessary because in the RequestConfiguration call,	 * the base address of the ethernet port (BasePort1) is written	 * to the BAR registers of the modem.	 */	reg.Action = CS_WRITE;	reg.Offset = CISREG_IOBASE_0;	reg.Value = link->io.BasePort2 & 0xff;	if ((err = pcmcia_access_configuration_register(link, &reg))) {	    cs_error(link, AccessConfigurationRegister, err);	    goto config_error;	}	reg.Action = CS_WRITE;	reg.Offset = CISREG_IOBASE_1;	reg.Value = (link->io.BasePort2 >> 8) & 0xff;	if ((err = pcmcia_access_configuration_register(link, &reg))) {	    cs_error(link, AccessConfigurationRegister, err);	    goto config_error;	}	/* There is no config entry for the Ethernet part which	 * is at 0x0800. So we allocate a window into the attribute	 * memory and write direct to the CIS registers	 */	req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE;	req.Base = req.Size = 0;	req.AccessSpeed = 0;	if ((err = pcmcia_request_window(&link, &req, &link->win))) {	    cs_error(link, RequestWindow, err);	    goto config_error;	}	local->dingo_ccr = ioremap(req.Base,0x1000) + 0x0800;	mem.CardOffset = 0x0;	mem.Page = 0;	if ((err = pcmcia_map_mem_page(link->win, &mem))) {	    cs_error(link, MapMemPage, err);	    goto config_error;	}	/* Setup the CCRs; there are no infos in the CIS about the Ethernet	 * part.	 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91久久奴性调教| 91精品国产免费| 欧美日本在线视频| 国产欧美日韩激情| 三级成人在线视频| 99综合影院在线| 久久嫩草精品久久久精品| 亚洲午夜久久久| 91小视频在线观看| 久久综合精品国产一区二区三区| 午夜视频在线观看一区| 91最新地址在线播放| 国产亚洲女人久久久久毛片| 日韩在线播放一区二区| 色8久久精品久久久久久蜜 | 菠萝蜜视频在线观看一区| 制服丝袜亚洲精品中文字幕| 中文字幕欧美一区| 成人高清在线视频| 国产拍欧美日韩视频二区| 久久精品国产一区二区三区免费看| 在线观看91视频| 夜夜亚洲天天久久| 91久久精品网| 一区二区三区在线不卡| 99国产精品国产精品久久| 国产精品久久综合| 成人在线综合网站| 国产精品污网站| 成人黄动漫网站免费app| 欧美激情一区二区三区四区| 国产乱子伦一区二区三区国色天香 | 国产在线看一区| 精品国产一区二区国模嫣然| 九九**精品视频免费播放| 久久丝袜美腿综合| 国产成人在线色| 国产精品乱码一区二区三区软件 | 91视频在线观看免费| 国产精品日韩精品欧美在线| 91在线国产福利| 亚洲午夜久久久久久久久电影院 | 国产成人自拍网| 国产精品久久久久久久久免费樱桃 | 亚洲欧美激情插| 在线观看视频一区| 免费一区二区视频| 国产亚洲午夜高清国产拍精品 | 国产一区二区不卡在线| 国产农村妇女精品| 色视频成人在线观看免| 天堂一区二区在线| 久久精品一级爱片| 97久久人人超碰| 视频一区中文字幕| 久久精品夜色噜噜亚洲a∨| 91丨porny丨中文| 午夜精彩视频在线观看不卡| 欧美草草影院在线视频| 成人91在线观看| 天天影视网天天综合色在线播放| 日韩精品中文字幕一区二区三区| 国产成人免费在线视频| 亚洲欧美色图小说| 日韩视频免费观看高清在线视频| 国产91丝袜在线播放九色| 一区二区三区四区av| 精品日产卡一卡二卡麻豆| av一区二区三区在线| 五月婷婷久久丁香| 国产欧美日韩精品在线| 欧美高清www午色夜在线视频| 极品少妇xxxx精品少妇| 亚洲一区二区四区蜜桃| 国产亚洲精品bt天堂精选| 欧美日韩在线不卡| 高清在线不卡av| 日韩电影在线观看电影| 国产精品美女久久久久久久久| 欧美丰满少妇xxxbbb| 不卡大黄网站免费看| 久久99精品一区二区三区三区| 亚洲精品中文字幕在线观看| 久久综合丝袜日本网| 欧美日韩国产另类不卡| 91丝袜呻吟高潮美腿白嫩在线观看| 免费人成在线不卡| 一区二区三区欧美久久| 亚洲国产成人午夜在线一区| 欧美一区二区三区四区在线观看| 91视频在线看| 成人av影院在线| 极品销魂美女一区二区三区| 爽好久久久欧美精品| 一区二区三区波多野结衣在线观看 | 石原莉奈在线亚洲三区| 亚洲伦在线观看| 国产精品人成在线观看免费| 久久久天堂av| www日韩大片| 欧美成人伊人久久综合网| 欧美精品第1页| 欧美日韩免费高清一区色橹橹 | 欧美大片一区二区| 91精品国产色综合久久ai换脸| 欧美视频一区二区三区| 日本精品免费观看高清观看| 国产成人午夜片在线观看高清观看| 麻豆91免费看| 麻豆91精品91久久久的内涵| 日韩av中文字幕一区二区三区| 亚洲高清久久久| 亚洲大片精品永久免费| 亚洲gay无套男同| 五月婷婷欧美视频| 日韩国产欧美视频| 麻豆精品久久久| 国产精品一区在线观看乱码| 激情综合色丁香一区二区| 精品一区二区三区av| 久久国产成人午夜av影院| 狠狠色综合色综合网络| 韩国av一区二区三区在线观看| 韩日欧美一区二区三区| 国产精品一区二区x88av| 粉嫩av一区二区三区在线播放 | 亚洲人成小说网站色在线 | 欧美精品在线观看一区二区| 3d动漫精品啪啪1区2区免费| 欧美丰满嫩嫩电影| 久久综合色一综合色88| 国产精品嫩草99a| 亚洲综合清纯丝袜自拍| 男女视频一区二区| 精品一区二区久久久| 国产在线视视频有精品| 成人精品在线视频观看| 欧美性videosxxxxx| 日韩精品一区在线| 国产精品素人视频| 亚洲成人免费视| 国产一区二区视频在线| 91麻豆精品在线观看| 欧美久久久久免费| 久久久精品国产99久久精品芒果| 日本成人超碰在线观看| 国产高清视频一区| 欧美亚洲一区二区在线| 欧美精品一区二区高清在线观看| 中文字幕在线观看不卡视频| 五月婷婷色综合| 99在线精品观看| 欧美xxxxxxxxx| 亚洲精品视频免费看| 九九九精品视频| 91福利在线播放| 国产视频一区二区在线观看| 亚洲综合丁香婷婷六月香| 国产在线一区二区综合免费视频| 欧美在线一区二区三区| 久久精品一区二区| 日韩精品电影在线| 99久久99久久精品国产片果冻| 日韩欧美区一区二| 亚洲国产精品久久不卡毛片| 国产高清精品网站| 欧美大片一区二区| 亚洲成人精品一区| a级精品国产片在线观看| 精品少妇一区二区三区在线播放| 一区二区三区四区在线播放| 国产aⅴ精品一区二区三区色成熟| 欧美一区中文字幕| 洋洋成人永久网站入口| 成人毛片老司机大片| 久久久久88色偷偷免费| 奇米影视一区二区三区| 欧美性色欧美a在线播放| 中文字幕一区在线观看视频| 国产乱一区二区| 久久色中文字幕| 乱一区二区av| 7777精品伊人久久久大香线蕉完整版 | 成人av在线电影| 国产色产综合产在线视频| 麻豆久久一区二区| 3d成人h动漫网站入口| 一区二区三区四区不卡在线 | 一区二区三区在线视频免费| www.av亚洲| 国产精品久久久久影院| 国产98色在线|日韩| 久久久综合激的五月天| 久久精品国产99久久6| 91精品婷婷国产综合久久| 丝袜美腿亚洲色图| 欧美一区二区在线免费播放| 日本大胆欧美人术艺术动态| 91精品国产综合久久久久久漫画| 性久久久久久久|