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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ibmtr_cs.c

?? pcmcia驅(qū)動(dòng)源代碼,直接可以在linux2.6下使用 !
?? C
字號(hào):
/*======================================================================    A PCMCIA token-ring driver for IBM-based cards    This driver supports the IBM PCMCIA Token-Ring Card.    Written by Steve Kipisz, kipisz@vnet.ibm.com or                             bungy@ibm.net    Written 1995,1996.    This code is based on pcnet_cs.c from David Hinds.        V2.2.0 February 1999 - Mike Phillips phillim@amtrak.com    Linux V2.2.x presented significant changes to the underlying    ibmtr.c code.  Mainly the code became a lot more organized and    modular.    This caused the old PCMCIA Token Ring driver to give up and go     home early. Instead of just patching the old code to make it     work, the PCMCIA code has been streamlined, updated and possibly    improved.    This code now only contains code required for the Card Services.    All we do here is set the card up enough so that the real ibmtr.c    driver can find it and work with it properly.    i.e. We set up the io port, irq, mmio memory and shared ram    memory.  This enables ibmtr_probe in ibmtr.c to find the card and    configure it as though it was a normal ISA and/or PnP card.    CHANGES    v2.2.5 April 1999 Mike Phillips (phillim@amtrak.com)    Obscure bug fix, required changed to ibmtr.c not ibmtr_cs.c        v2.2.7 May 1999 Mike Phillips (phillim@amtrak.com)    Updated to version 2.2.7 to match the first version of the kernel    that the modification to ibmtr.c were incorporated into.        v2.2.17 July 2000 Burt Silverman (burts@us.ibm.com)    Address translation feature of PCMCIA controller is usable so    memory windows can be placed in High memory (meaning above    0xFFFFF.)======================================================================*/#include <linux/kernel.h>#include <linux/init.h>#include <linux/ptrace.h>#include <linux/slab.h>#include <linux/string.h>#include <linux/timer.h>#include <linux/module.h>#include <linux/ethtool.h>#include <linux/netdevice.h>#include <linux/trdevice.h>#include <linux/ibmtr.h>#include <pcmcia/cs_types.h>#include <pcmcia/cs.h>#include <pcmcia/cistpl.h>#include <pcmcia/ds.h>#include <asm/uaccess.h>#include <asm/io.h>#include <asm/system.h>#define PCMCIA#include "../tokenring/ibmtr.c"#ifdef PCMCIA_DEBUGstatic int pc_debug = PCMCIA_DEBUG;module_param(pc_debug, int, 0);#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)static char *version ="ibmtr_cs.c 1.10   1996/01/06 05:19:00 (Steve Kipisz)\n""           2.2.7  1999/05/03 12:00:00 (Mike Phillips)\n""           2.4.2  2001/30/28 Midnight (Burt Silverman)\n";#else#define DEBUG(n, args...)#endif/*====================================================================*//* Parameters that can be set with 'insmod' *//* MMIO base address */static u_long mmiobase = 0xce000;/* SRAM base address */static u_long srambase = 0xd0000;/* SRAM size 8,16,32,64 */static u_long sramsize = 64;/* Ringspeed 4,16 */static int ringspeed = 16;module_param(mmiobase, ulong, 0);module_param(srambase, ulong, 0);module_param(sramsize, ulong, 0);module_param(ringspeed, int, 0);MODULE_LICENSE("GPL");/*====================================================================*/static int ibmtr_config(struct pcmcia_device *link);static void ibmtr_hw_setup(struct net_device *dev, u_int mmiobase);static void ibmtr_release(struct pcmcia_device *link);static void ibmtr_detach(struct pcmcia_device *p_dev);/*====================================================================*/typedef struct ibmtr_dev_t {	struct pcmcia_device	*p_dev;    struct net_device	*dev;    dev_node_t          node;    window_handle_t     sram_win_handle;    struct tok_info	*ti;} ibmtr_dev_t;static void netdev_get_drvinfo(struct net_device *dev,			       struct ethtool_drvinfo *info){	strcpy(info->driver, "ibmtr_cs");}static const struct ethtool_ops netdev_ethtool_ops = {	.get_drvinfo		= netdev_get_drvinfo,};/*======================================================================    ibmtr_attach() creates an "instance" of the driver, allocating    local data structures for one device.  The device is registered    with Card Services.======================================================================*/static int __devinit ibmtr_attach(struct pcmcia_device *link){    ibmtr_dev_t *info;    struct net_device *dev;    DEBUG(0, "ibmtr_attach()\n");    /* Create new token-ring device */    info = kmalloc(sizeof(*info), GFP_KERNEL);     if (!info) return -ENOMEM;    memset(info,0,sizeof(*info));    dev = alloc_trdev(sizeof(struct tok_info));    if (!dev) {	kfree(info);	return -ENOMEM;    }    info->p_dev = link;    link->priv = info;    info->ti = netdev_priv(dev);    link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;    link->io.NumPorts1 = 4;    link->io.IOAddrLines = 16;    link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;    link->irq.IRQInfo1 = IRQ_LEVEL_ID;    link->irq.Handler = &tok_interrupt;    link->conf.Attributes = CONF_ENABLE_IRQ;    link->conf.IntType = INT_MEMORY_AND_IO;    link->conf.Present = PRESENT_OPTION;    link->irq.Instance = info->dev = dev;    SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops);    return ibmtr_config(link);} /* ibmtr_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 ibmtr_detach(struct pcmcia_device *link){    struct ibmtr_dev_t *info = link->priv;    struct net_device *dev = info->dev;    DEBUG(0, "ibmtr_detach(0x%p)\n", link);    if (link->dev_node)	unregister_netdev(dev);    {	struct tok_info *ti = netdev_priv(dev);	del_timer_sync(&(ti->tr_timer));    }    ibmtr_release(link);    free_netdev(dev);    kfree(info);} /* ibmtr_detach *//*======================================================================    ibmtr_config() is scheduled to run after a CARD_INSERTION event    is received, to configure the PCMCIA socket, and to make the    token-ring device available to the system.======================================================================*/#define CS_CHECK(fn, ret) \do { last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; } while (0)static int __devinit ibmtr_config(struct pcmcia_device *link){    ibmtr_dev_t *info = link->priv;    struct net_device *dev = info->dev;    struct tok_info *ti = netdev_priv(dev);    win_req_t req;    memreq_t mem;    int i, last_ret, last_fn;    DEBUG(0, "ibmtr_config(0x%p)\n", link);    link->conf.ConfigIndex = 0x61;    /* Determine if this is PRIMARY or ALTERNATE. */    /* Try PRIMARY card at 0xA20-0xA23 */    link->io.BasePort1 = 0xA20;    i = pcmcia_request_io(link, &link->io);    if (i != CS_SUCCESS) {	/* Couldn't get 0xA20-0xA23.  Try ALTERNATE at 0xA24-0xA27. */	link->io.BasePort1 = 0xA24;	CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io));    }    dev->base_addr = link->io.BasePort1;    CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));    dev->irq = link->irq.AssignedIRQ;    ti->irq = link->irq.AssignedIRQ;    ti->global_int_enable=GLOBAL_INT_ENABLE+((dev->irq==9) ? 2 : dev->irq);    /* Allocate the MMIO memory window */    req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM|WIN_ENABLE;    req.Attributes |= WIN_USE_WAIT;    req.Base = 0;     req.Size = 0x2000;    req.AccessSpeed = 250;    CS_CHECK(RequestWindow, pcmcia_request_window(&link, &req, &link->win));    mem.CardOffset = mmiobase;    mem.Page = 0;    CS_CHECK(MapMemPage, pcmcia_map_mem_page(link->win, &mem));    ti->mmio = ioremap(req.Base, req.Size);    /* Allocate the SRAM memory window */    req.Attributes = WIN_DATA_WIDTH_16|WIN_MEMORY_TYPE_CM|WIN_ENABLE;    req.Attributes |= WIN_USE_WAIT;    req.Base = 0;    req.Size = sramsize * 1024;    req.AccessSpeed = 250;    CS_CHECK(RequestWindow, pcmcia_request_window(&link, &req, &info->sram_win_handle));    mem.CardOffset = srambase;    mem.Page = 0;    CS_CHECK(MapMemPage, pcmcia_map_mem_page(info->sram_win_handle, &mem));    ti->sram_base = mem.CardOffset >> 12;    ti->sram_virt = ioremap(req.Base, req.Size);    ti->sram_phys = req.Base;    CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));    /*  Set up the Token-Ring Controller Configuration Register and        turn on the card.  Check the "Local Area Network Credit Card        Adapters Technical Reference"  SC30-3585 for this info.  */    ibmtr_hw_setup(dev, mmiobase);    link->dev_node = &info->node;    SET_NETDEV_DEV(dev, &handle_to_dev(link));    i = ibmtr_probe_card(dev);    if (i != 0) {	printk(KERN_NOTICE "ibmtr_cs: register_netdev() failed\n");	link->dev_node = NULL;	goto failed;    }    strcpy(info->node.dev_name, dev->name);    printk(KERN_INFO "%s: port %#3lx, irq %d,",           dev->name, dev->base_addr, dev->irq);    printk (" mmio %#5lx,", (u_long)ti->mmio);    printk (" sram %#5lx,", (u_long)ti->sram_base << 12);    printk ("\n" KERN_INFO "  hwaddr=");    for (i = 0; i < TR_ALEN; i++)        printk("%02X", dev->dev_addr[i]);    printk("\n");    return 0;cs_failed:    cs_error(link, last_fn, last_ret);failed:    ibmtr_release(link);    return -ENODEV;} /* ibmtr_config *//*======================================================================    After a card is removed, ibmtr_release() will unregister the net    device, and release the PCMCIA configuration.  If the device is    still open, this will be postponed until it is closed.======================================================================*/static void ibmtr_release(struct pcmcia_device *link){	ibmtr_dev_t *info = link->priv;	struct net_device *dev = info->dev;	DEBUG(0, "ibmtr_release(0x%p)\n", link);	if (link->win) {		struct tok_info *ti = netdev_priv(dev);		iounmap(ti->mmio);		pcmcia_release_window(info->sram_win_handle);	}	pcmcia_disable_device(link);}static int ibmtr_suspend(struct pcmcia_device *link){	ibmtr_dev_t *info = link->priv;	struct net_device *dev = info->dev;	if (link->open)		netif_device_detach(dev);	return 0;}static int ibmtr_resume(struct pcmcia_device *link){	ibmtr_dev_t *info = link->priv;	struct net_device *dev = info->dev;	if (link->open) {		ibmtr_probe(dev);	/* really? */		netif_device_attach(dev);	}	return 0;}/*====================================================================*/static void ibmtr_hw_setup(struct net_device *dev, u_int mmiobase){    int i;    /* Bizarre IBM behavior, there are 16 bits of information we       need to set, but the card only allows us to send 4 bits at a        time.  For each byte sent to base_addr, bits 7-4 tell the       card which part of the 16 bits we are setting, bits 3-0 contain        the actual information */    /* First nibble provides 4 bits of mmio */    i = (mmiobase >> 16) & 0x0F;    outb(i, dev->base_addr);    /* Second nibble provides 3 bits of mmio */    i = 0x10 | ((mmiobase >> 12) & 0x0E);    outb(i, dev->base_addr);    /* Third nibble, hard-coded values */    i = 0x26;    outb(i, dev->base_addr);    /* Fourth nibble sets shared ram page size */    /* 8 = 00, 16 = 01, 32 = 10, 64 = 11 */              i = (sramsize >> 4) & 0x07;    i = ((i == 4) ? 3 : i) << 2;    i |= 0x30;    if (ringspeed == 16)	i |= 2;    if (dev->base_addr == 0xA24)	i |= 1;    outb(i, dev->base_addr);    /* 0x40 will release the card for use */    outb(0x40, dev->base_addr);    return;}static struct pcmcia_device_id ibmtr_ids[] = {	PCMCIA_DEVICE_PROD_ID12("3Com", "TokenLink Velocity PC Card", 0x41240e5b, 0x82c3734e),	PCMCIA_DEVICE_PROD_ID12("IBM", "TOKEN RING", 0xb569a6e5, 0xbf8eed47),	PCMCIA_DEVICE_NULL,};MODULE_DEVICE_TABLE(pcmcia, ibmtr_ids);static struct pcmcia_driver ibmtr_cs_driver = {	.owner		= THIS_MODULE,	.drv		= {		.name	= "ibmtr_cs",	},	.probe		= ibmtr_attach,	.remove		= ibmtr_detach,	.id_table       = ibmtr_ids,	.suspend	= ibmtr_suspend,	.resume		= ibmtr_resume,};static int __init init_ibmtr_cs(void){	return pcmcia_register_driver(&ibmtr_cs_driver);}static void __exit exit_ibmtr_cs(void){	pcmcia_unregister_driver(&ibmtr_cs_driver);}module_init(init_ibmtr_cs);module_exit(exit_ibmtr_cs);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产美女视频91| 亚洲成人av在线电影| 欧美精品乱人伦久久久久久| 91免费看片在线观看| 国产成人av自拍| 国产福利不卡视频| 国产成人免费9x9x人网站视频| 久久国产精品免费| 国产一区二区不卡| 粉嫩一区二区三区在线看| 国产丶欧美丶日本不卡视频| 国产精品一级二级三级| 成人综合婷婷国产精品久久蜜臀 | 久久精品国产亚洲高清剧情介绍| 亚洲国产精品尤物yw在线观看| 一区二区三区精品在线| 亚洲国产综合色| 美女在线一区二区| 国精品**一区二区三区在线蜜桃| 激情综合网天天干| 波多野结衣亚洲一区| 在线观看日韩毛片| 7777精品伊人久久久大香线蕉最新版| 宅男在线国产精品| 2020国产精品| 综合电影一区二区三区| 一区二区三区丝袜| 精品在线观看免费| 91视频免费观看| 在线成人免费观看| 国产日韩欧美不卡| 亚洲综合一二区| 九九视频精品免费| 99久久精品国产观看| 欧美日韩色一区| 久久久精品黄色| 一区二区三区四区高清精品免费观看 | 国产成人三级在线观看| 日本乱人伦一区| 精品国产乱码久久久久久久 | 色女孩综合影院| 欧美videos中文字幕| 亚洲同性gay激情无套| 青青草97国产精品免费观看无弹窗版 | 韩国成人在线视频| 色中色一区二区| 久久综合久久综合久久综合| 亚洲人亚洲人成电影网站色| 美女脱光内衣内裤视频久久网站| 成人午夜视频免费看| 欧美欧美欧美欧美首页| 国产精品进线69影院| 美女网站一区二区| 欧美性猛交xxxx乱大交退制版| 欧美mv日韩mv国产| 亚洲大片免费看| 91婷婷韩国欧美一区二区| www国产精品av| 日韩影院精彩在线| 91精品福利视频| 中文字幕一区二区三区在线播放| 久久se精品一区二区| 欧美日韩国产小视频| 亚洲精选视频在线| 91视频一区二区| 亚洲色图制服丝袜| 白白色 亚洲乱淫| 亚洲国产精品成人综合| 狠狠色综合播放一区二区| 9191久久久久久久久久久| 国产精品夫妻自拍| 成人的网站免费观看| 国产女主播一区| 国产成人免费在线| 国产精品久久影院| 成人av电影在线观看| 国产精品久久久久久久久晋中| 国产精品一区免费在线观看| 欧美精品一区二区久久婷婷| 久久国产视频网| 337p粉嫩大胆色噜噜噜噜亚洲| 乱一区二区av| 久久精品一区二区三区不卡| 国产一区二区三区不卡在线观看| 精品三级在线看| 国产激情精品久久久第一区二区| 国产欧美一区二区精品仙草咪| 国精品**一区二区三区在线蜜桃 | 99久久国产综合精品麻豆| 最好看的中文字幕久久| 色综合久久久久综合| 一区二区三区久久| 91麻豆精品国产91久久久| 老司机精品视频在线| 精品国产乱码久久| 成人免费高清在线观看| 亚洲乱码中文字幕| 91麻豆精品91久久久久同性| 久久精品国产亚洲一区二区三区| 国产日韩欧美电影| 欧美性xxxxx极品少妇| 日本午夜一区二区| 久久精品人人做人人综合| 成人精品高清在线| 亚洲成人av资源| 久久精品男人的天堂| 在线免费一区三区| 久久精品国产99国产| 国产精品久久久久久一区二区三区| 91免费视频大全| 韩国毛片一区二区三区| 国产精品福利在线播放| 欧美日韩电影在线| 国产成人午夜精品影院观看视频| 一区二区三区精品久久久| 久久夜色精品一区| 在线观看精品一区| 国产成人av一区二区三区在线| 亚洲综合在线免费观看| 国产亚洲视频系列| 欧美日韩一卡二卡三卡 | 日韩午夜av电影| 91丨九色丨黑人外教| 久久精品国产99国产| 亚洲图片欧美综合| ●精品国产综合乱码久久久久| 欧美一区二区国产| 日本韩国欧美在线| 不卡在线观看av| 久久国产精品免费| 日韩成人免费电影| 亚洲精选视频免费看| 国产精品久久久久久久久久久免费看 | 欧美日韩一区精品| www.综合网.com| 国产成人高清在线| 国产在线精品一区二区不卡了| 亚洲综合图片区| 亚洲欧美视频一区| 国产精品视频九色porn| 精品国产一区a| 日韩欧美在线综合网| 久久久久久久免费视频了| 欧美三级在线视频| 在线这里只有精品| 91蜜桃免费观看视频| aaa欧美大片| 成人avav影音| 91丨九色丨黑人外教| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产精品久久久久影院亚瑟| 久久综合九色综合欧美就去吻| 日韩一二三区视频| 日韩精品专区在线影院重磅| 777色狠狠一区二区三区| 91激情五月电影| 精品视频在线免费观看| 欧美在线999| 欧美揉bbbbb揉bbbbb| 欧美偷拍一区二区| 欧美福利视频导航| 日韩丝袜美女视频| 欧美videossexotv100| 久久久精品日韩欧美| 日本一区二区三区久久久久久久久不 | 青青草成人在线观看| 精品一二三四区| 国产v综合v亚洲欧| 99久久精品费精品国产一区二区| 色婷婷av一区二区三区之一色屋| 日本韩国欧美三级| 欧美精品久久99久久在免费线 | 成人18精品视频| 欧美性生活一区| ww久久中文字幕| 亚洲天堂免费在线观看视频| 一区二区三区小说| 免费成人美女在线观看.| 国产在线精品视频| 91美女视频网站| 日韩一区二区高清| 国产精品乱人伦| 亚洲一区二区三区四区在线| 免费在线看成人av| 成人开心网精品视频| 欧美日韩在线三区| 国产婷婷色一区二区三区四区 | www久久精品| 亚洲一区二区三区四区在线观看 | 中文字幕一区二区三区色视频 | 精品久久久久久综合日本欧美| 国产日韩精品一区二区三区| 亚洲自拍偷拍麻豆| 久久成人精品无人区| 91麻豆精品在线观看| 精品免费视频.| 亚洲一区在线视频观看| 国产精品99精品久久免费| 欧美视频一区在线| 国产精品蜜臀在线观看|