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

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

?? ide-cs.c

?? linux和2410結(jié)合開發(fā) 用他可以生成2410所需的zImage文件
?? C
字號:
/*======================================================================    A driver for PCMCIA IDE/ATA disk cards    ide_cs.c 1.26 1999/11/16 02:10:49    The contents of this file are subject to the Mozilla Public    License Version 1.1 (the "License"); you may not use this file    except in compliance with the License. You may obtain a copy of    the License at http://www.mozilla.org/MPL/    Software distributed under the License is distributed on an "AS    IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or    implied. See the License for the specific language governing    rights and limitations under the License.    The initial developer of the original code is David A. Hinds    <dhinds@pcmcia.sourceforge.org>.  Portions created by David A. Hinds    are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.    Alternatively, the contents of this file may be used under the    terms of the GNU General Public License version 2 (the "GPL"), in which    case the provisions of the GPL are applicable instead of the    above.  If you wish to allow the use of your version of this file    only under the terms of the GPL and not to allow others to use    your version of this file under the MPL, indicate your decision    by deleting the provisions above and replace them with the notice    and other provisions required by the GPL.  If you do not delete    the provisions above, a recipient may use your version of this    file under either the MPL or the GPL.    ======================================================================*/#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/sched.h>#include <linux/ptrace.h>#include <linux/slab.h>#include <linux/string.h>#include <linux/timer.h>#include <linux/ioport.h>#include <linux/hdreg.h>#include <linux/major.h>#include <asm/io.h>#include <asm/system.h>#include <pcmcia/version.h>#include <pcmcia/cs_types.h>#include <pcmcia/cs.h>#include <pcmcia/cistpl.h>#include <pcmcia/ds.h>#include <pcmcia/cisreg.h>#ifdef PCMCIA_DEBUGstatic int pc_debug = PCMCIA_DEBUG;MODULE_PARM(pc_debug, "i");#define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args)static char *version ="ide_cs.c 1.26 1999/11/16 02:10:49 (David Hinds)";#else#define DEBUG(n, args...)#endif/*====================================================================*//* Parameters that can be set with 'insmod' *//* Bit map of interrupts to choose from */static u_int irq_mask = 0xdeb8;static int irq_list[4] = { -1 };MODULE_PARM(irq_mask, "i");MODULE_PARM(irq_list, "1-4i");MODULE_LICENSE("GPL");/*====================================================================*/static const char ide_major[] = {    IDE0_MAJOR, IDE1_MAJOR, IDE2_MAJOR, IDE3_MAJOR,#ifdef IDE4_MAJOR    IDE4_MAJOR, IDE5_MAJOR#endif};typedef struct ide_info_t {    dev_link_t	link;    int		ndev;    dev_node_t	node;    int		hd;} ide_info_t;static void ide_config(dev_link_t *link);static void ide_release(u_long arg);static int ide_event(event_t event, int priority,		     event_callback_args_t *args);static dev_info_t dev_info = "ide-cs";static dev_link_t *ide_attach(void);static void ide_detach(dev_link_t *);static dev_link_t *dev_list = NULL;/*====================================================================*/static void cs_error(client_handle_t handle, int func, int ret){    error_info_t err = { func, ret };    CardServices(ReportError, handle, &err);}/*======================================================================    ide_attach() creates an "instance" of the driver, allocating    local data structures for one device.  The device is registered    with Card Services.======================================================================*/static dev_link_t *ide_attach(void){    ide_info_t *info;    dev_link_t *link;    client_reg_t client_reg;    int i, ret;        DEBUG(0, "ide_attach()\n");    /* Create new ide device */    info = kmalloc(sizeof(*info), GFP_KERNEL);    if (!info) return NULL;    memset(info, 0, sizeof(*info));    link = &info->link; link->priv = info;    link->release.function = &ide_release;    link->release.data = (u_long)link;    link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;    link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;    link->io.IOAddrLines = 3;    link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;    link->irq.IRQInfo1 = IRQ_INFO2_VALID|IRQ_LEVEL_ID;    if (irq_list[0] == -1)	link->irq.IRQInfo2 = irq_mask;    else	for (i = 0; i < 4; i++)	    link->irq.IRQInfo2 |= 1 << irq_list[i];    link->conf.Attributes = CONF_ENABLE_IRQ;    link->conf.Vcc = 50;    link->conf.IntType = INT_MEMORY_AND_IO;        /* Register with Card Services */    link->next = dev_list;    dev_list = link;    client_reg.dev_info = &dev_info;    client_reg.Attributes = INFO_IO_CLIENT | INFO_CARD_SHARE;    client_reg.EventMask =	CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |	CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |	CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;    client_reg.event_handler = &ide_event;    client_reg.Version = 0x0210;    client_reg.event_callback_args.client_data = link;    ret = CardServices(RegisterClient, &link->handle, &client_reg);    if (ret != CS_SUCCESS) {	cs_error(link->handle, RegisterClient, ret);	ide_detach(link);	return NULL;    }        return link;} /* ide_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 ide_detach(dev_link_t *link){    dev_link_t **linkp;    int ret;    DEBUG(0, "ide_detach(0x%p)\n", link);        /* Locate device structure */    for (linkp = &dev_list; *linkp; linkp = &(*linkp)->next)	if (*linkp == link) break;    if (*linkp == NULL)	return;    del_timer(&link->release);    if (link->state & DEV_CONFIG)	ide_release((u_long)link);        if (link->handle) {	ret = CardServices(DeregisterClient, link->handle);	if (ret != CS_SUCCESS)	    cs_error(link->handle, DeregisterClient, ret);    }        /* Unlink, free device structure */    *linkp = link->next;    kfree(link->priv);    } /* ide_detach *//*======================================================================    ide_config() is scheduled to run after a CARD_INSERTION event    is received, to configure the PCMCIA socket, and to make the    ide device available to the system.======================================================================*/#define CS_CHECK(fn, args...) \while ((last_ret=CardServices(last_fn=(fn), args))!=0) goto cs_failed#define CFG_CHECK(fn, args...) \if (CardServices(fn, args) != 0) goto next_entryvoid ide_config(dev_link_t *link){    client_handle_t handle = link->handle;    ide_info_t *info = link->priv;    tuple_t tuple;    u_short buf[128];    cisparse_t parse;    config_info_t conf;    cistpl_cftable_entry_t *cfg = &parse.cftable_entry;    cistpl_cftable_entry_t dflt = { 0 };    int i, pass, last_ret, last_fn, hd=-1, io_base, ctl_base;    DEBUG(0, "ide_config(0x%p)\n", link);        tuple.TupleData = (cisdata_t *)buf;    tuple.TupleOffset = 0; tuple.TupleDataMax = 255;    tuple.Attributes = 0;    tuple.DesiredTuple = CISTPL_CONFIG;    CS_CHECK(GetFirstTuple, handle, &tuple);    CS_CHECK(GetTupleData, handle, &tuple);    CS_CHECK(ParseTuple, handle, &tuple, &parse);    link->conf.ConfigBase = parse.config.base;    link->conf.Present = parse.config.rmask[0];        /* Configure card */    link->state |= DEV_CONFIG;    /* Not sure if this is right... look up the current Vcc */    CS_CHECK(GetConfigurationInfo, handle, &conf);    link->conf.Vcc = conf.Vcc;        pass = io_base = ctl_base = 0;    tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;    tuple.Attributes = 0;    CS_CHECK(GetFirstTuple, handle, &tuple);    while (1) {	CFG_CHECK(GetTupleData, handle, &tuple);	CFG_CHECK(ParseTuple, handle, &tuple, &parse);	/* Check for matching Vcc, unless we're desperate */	if (!pass) {	    if (cfg->vcc.present & (1<<CISTPL_POWER_VNOM)) {		if (conf.Vcc != cfg->vcc.param[CISTPL_POWER_VNOM]/10000)		    goto next_entry;	    } else if (dflt.vcc.present & (1<<CISTPL_POWER_VNOM)) {		if (conf.Vcc != dflt.vcc.param[CISTPL_POWER_VNOM]/10000)		    goto next_entry;	    }	}		if (cfg->vpp1.present & (1<<CISTPL_POWER_VNOM))	    link->conf.Vpp1 = link->conf.Vpp2 =		cfg->vpp1.param[CISTPL_POWER_VNOM]/10000;	else if (dflt.vpp1.present & (1<<CISTPL_POWER_VNOM))	    link->conf.Vpp1 = link->conf.Vpp2 =		dflt.vpp1.param[CISTPL_POWER_VNOM]/10000;		if ((cfg->io.nwin > 0) || (dflt.io.nwin > 0)) {	    cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt.io;	    link->conf.ConfigIndex = cfg->index;	    link->io.BasePort1 = io->win[0].base;	    link->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;	    if (!(io->flags & CISTPL_IO_16BIT))		link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;	    if (io->nwin == 2) {		link->io.NumPorts1 = 8;		link->io.BasePort2 = io->win[1].base;		link->io.NumPorts2 = 1;		CFG_CHECK(RequestIO, link->handle, &link->io);		io_base = link->io.BasePort1;		ctl_base = link->io.BasePort2;	    } else if ((io->nwin == 1) && (io->win[0].len >= 16)) {		link->io.NumPorts1 = io->win[0].len;		link->io.NumPorts2 = 0;		CFG_CHECK(RequestIO, link->handle, &link->io);		io_base = link->io.BasePort1;		ctl_base = link->io.BasePort1+0x0e;	    } else goto next_entry;	    /* If we've got this far, we're done */	    break;	}	    next_entry:	if (cfg->flags & CISTPL_CFTABLE_DEFAULT) dflt = *cfg;	if (pass) {	    CS_CHECK(GetNextTuple, handle, &tuple);	} else if (CardServices(GetNextTuple, handle, &tuple) != 0) {	    CS_CHECK(GetFirstTuple, handle, &tuple);	    memset(&dflt, 0, sizeof(dflt));	    pass++;	}    }        CS_CHECK(RequestIRQ, handle, &link->irq);    CS_CHECK(RequestConfiguration, handle, &link->conf);    /* deal with brain dead IDE resource management */    release_region(link->io.BasePort1, link->io.NumPorts1);    if (link->io.NumPorts2)	release_region(link->io.BasePort2, link->io.NumPorts2);    /* retry registration in case device is still spinning up */    for (i = 0; i < 10; i++) {	hd = ide_register(io_base, ctl_base, link->irq.AssignedIRQ);	if (hd >= 0) break;	if (link->io.NumPorts1 == 0x20) {	    hd = ide_register(io_base+0x10, ctl_base+0x10,			      link->irq.AssignedIRQ);	    if (hd >= 0) {		io_base += 0x10; ctl_base += 0x10;		break;	    }	}	__set_current_state(TASK_UNINTERRUPTIBLE);	schedule_timeout(HZ/10);    }        if (hd < 0) {	printk(KERN_NOTICE "ide_cs: ide_register() at 0x%03x & 0x%03x"	       ", irq %u failed\n", io_base, ctl_base,	       link->irq.AssignedIRQ);	goto failed;    }    MOD_INC_USE_COUNT;    info->ndev = 1;    sprintf(info->node.dev_name, "hd%c", 'a'+(hd*2));    info->node.major = ide_major[hd];    info->node.minor = 0;    info->hd = hd;    link->dev = &info->node;    printk(KERN_INFO "ide_cs: %s: Vcc = %d.%d, Vpp = %d.%d\n",	   info->node.dev_name, link->conf.Vcc/10, link->conf.Vcc%10,	   link->conf.Vpp1/10, link->conf.Vpp1%10);    link->state &= ~DEV_CONFIG_PENDING;    return;    cs_failed:    cs_error(link->handle, last_fn, last_ret);failed:    ide_release((u_long)link);} /* ide_config *//*======================================================================    After a card is removed, ide_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.    ======================================================================*/void ide_release(u_long arg){    dev_link_t *link = (dev_link_t *)arg;    ide_info_t *info = link->priv;        DEBUG(0, "ide_release(0x%p)\n", link);    if (info->ndev) {	ide_unregister(info->hd);	MOD_DEC_USE_COUNT;    }    request_region(link->io.BasePort1, link->io.NumPorts1,"ide-cs");    if (link->io.NumPorts2)	request_region(link->io.BasePort2, link->io.NumPorts2,"ide-cs");        info->ndev = 0;    link->dev = NULL;        CardServices(ReleaseConfiguration, link->handle);    CardServices(ReleaseIO, link->handle, &link->io);    CardServices(ReleaseIRQ, link->handle, &link->irq);        link->state &= ~DEV_CONFIG;} /* ide_release *//*======================================================================    The card status event handler.  Mostly, this schedules other    stuff to run after an event is received.  A CARD_REMOVAL event    also sets some flags to discourage the ide drivers from    talking to the ports.    ======================================================================*/int ide_event(event_t event, int priority,	      event_callback_args_t *args){    dev_link_t *link = args->client_data;    DEBUG(1, "ide_event(0x%06x)\n", event);        switch (event) {    case CS_EVENT_CARD_REMOVAL:	link->state &= ~DEV_PRESENT;	if (link->state & DEV_CONFIG)	    mod_timer(&link->release, jiffies + HZ/20);	break;    case CS_EVENT_CARD_INSERTION:	link->state |= DEV_PRESENT | DEV_CONFIG_PENDING;	ide_config(link);	break;    case CS_EVENT_PM_SUSPEND:	link->state |= DEV_SUSPEND;	/* Fall through... */    case CS_EVENT_RESET_PHYSICAL:	if (link->state & DEV_CONFIG)	    CardServices(ReleaseConfiguration, link->handle);	break;    case CS_EVENT_PM_RESUME:	link->state &= ~DEV_SUSPEND;	/* Fall through... */    case CS_EVENT_CARD_RESET:	if (DEV_OK(link))	    CardServices(RequestConfiguration, link->handle, &link->conf);	break;    }    return 0;} /* ide_event *//*====================================================================*/static int __init init_ide_cs(void){    servinfo_t serv;    DEBUG(0, "%s\n", version);    CardServices(GetCardServicesInfo, &serv);    if (serv.Revision != CS_RELEASE_CODE) {	printk(KERN_NOTICE "ide_cs: Card Services release "	       "does not match!\n");	return -1;    }    register_pccard_driver(&dev_info, &ide_attach, &ide_detach);    return 0;}static void __exit exit_ide_cs(void){    DEBUG(0, "ide_cs: unloading\n");    unregister_pccard_driver(&dev_info);    while (dev_list != NULL)	ide_detach(dev_list);}module_init(init_ide_cs);module_exit(exit_ide_cs);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
夜夜操天天操亚洲| 久久综合网色—综合色88| 在线播放中文字幕一区| 久久理论电影网| 一区二区三区四区五区视频在线观看| 亚洲午夜在线电影| 国产91在线观看| 日韩欧美另类在线| 亚洲精品videosex极品| 国产成人一区在线| 欧美一区二区三区在| 有码一区二区三区| 99久久99久久精品国产片果冻 | 欧美不卡一区二区| 一区二区高清在线| 国产69精品久久久久毛片| 日韩免费成人网| 秋霞国产午夜精品免费视频| 欧美视频一区在线观看| 亚洲欧洲另类国产综合| 韩国一区二区视频| 日韩视频不卡中文| 日本伊人色综合网| 精品视频1区2区3区| 亚洲另类在线视频| 99国产精品视频免费观看| 国产日韩欧美精品在线| 国产在线播放一区三区四| 在线不卡免费欧美| 免费亚洲电影在线| 欧美一区二区美女| 极品美女销魂一区二区三区| 在线不卡一区二区| 日本成人超碰在线观看| 欧美老女人第四色| 偷拍亚洲欧洲综合| 欧美日韩免费一区二区三区 | 精品国产凹凸成av人导航| 亚洲成av人**亚洲成av**| 91久久久免费一区二区| 亚洲一区二区欧美| 欧美日韩午夜影院| 日本 国产 欧美色综合| 欧美大白屁股肥臀xxxxxx| 免费观看日韩电影| 国产日韩亚洲欧美综合| 国产成人av电影| 综合婷婷亚洲小说| 欧美日韩国产综合草草| 久久99精品国产.久久久久久| 亚洲精品一区二区精华| 成人中文字幕合集| 亚洲欧美国产三级| 欧美日本一区二区在线观看| 日韩avvvv在线播放| 精品欧美久久久| 成人av网站在线| 亚洲成人你懂的| 日韩美一区二区三区| 成人久久18免费网站麻豆 | 五月婷婷另类国产| 日韩免费观看2025年上映的电影| 国产一区二区三区最好精华液| 国产精品网曝门| 91久久一区二区| 精品午夜一区二区三区在线观看| 国产丝袜欧美中文另类| 99re热这里只有精品免费视频| 亚洲曰韩产成在线| 久久久久久久久久美女| 日本乱人伦aⅴ精品| 美女脱光内衣内裤视频久久影院| 国产三区在线成人av| 日本高清成人免费播放| 国产麻豆成人精品| 亚洲电影视频在线| 国产欧美综合在线| 4438x成人网最大色成网站| 国产精品白丝jk黑袜喷水| 亚洲综合999| 久久男人中文字幕资源站| 91福利社在线观看| 国产成人av一区二区| 日韩精品国产精品| 亚洲人成网站色在线观看| 亚洲精品在线观看网站| 欧美视频一区在线| 91女厕偷拍女厕偷拍高清| 国内精品久久久久影院一蜜桃| 亚洲综合偷拍欧美一区色| 久久婷婷一区二区三区| 欧美军同video69gay| 99精品欧美一区二区三区小说 | 一区二区免费在线播放| 久久久99精品久久| 91精品国产综合久久久久久久久久| 成人av电影在线播放| 国产伦精品一区二区三区免费| 午夜成人在线视频| 伊人夜夜躁av伊人久久| 国产精品―色哟哟| 精品国产露脸精彩对白| 日韩一卡二卡三卡四卡| 欧美日韩一级片在线观看| 91视频在线看| jvid福利写真一区二区三区| 国产精品影视天天线| 久久精品国产澳门| 青青国产91久久久久久| 午夜精品久久一牛影视| 亚洲一区二区综合| 一区二区三区蜜桃| 亚洲最大色网站| 亚洲尤物在线视频观看| 亚洲第一在线综合网站| 亚洲成人免费影院| 亚洲成在线观看| 亚洲一二三四区不卡| 五月综合激情婷婷六月色窝| 日韩精品一二三| 美腿丝袜亚洲色图| 国产美女精品人人做人人爽| 国产剧情av麻豆香蕉精品| 国产一区二区91| 丁香桃色午夜亚洲一区二区三区| 国产成人亚洲综合a∨猫咪| 国产成人aaa| 色综合天天综合狠狠| 在线精品观看国产| 欧美久久久影院| 日韩精品一区二区三区在线播放| 精品福利在线导航| 久久久国际精品| 国产精品九色蝌蚪自拍| 亚洲国产中文字幕在线视频综合| 亚洲成av人片观看| 韩国成人在线视频| 91在线免费看| 欧美人体做爰大胆视频| 精品国产乱码久久久久久老虎| 国产欧美一区二区精品婷婷| 亚洲日本在线视频观看| 午夜精品福利一区二区蜜股av| 九色综合狠狠综合久久| 国产成人精品免费| 欧美日韩一区成人| 国产亚洲欧美一区在线观看| 亚洲视频图片小说| 亚洲成人免费电影| 国产精品99久久久久久似苏梦涵| av中文字幕在线不卡| 欧美日韩不卡一区二区| 久久精品一区二区三区不卡| 亚洲另类在线视频| 狠狠色丁香久久婷婷综| 色综合久久久久网| 欧美大胆一级视频| 亚洲狠狠丁香婷婷综合久久久| 精品在线免费观看| 91成人在线免费观看| 精品免费视频.| 亚洲福利视频一区二区| 国产精品自拍一区| 欧美日韩国产一区二区三区地区| 久久无码av三级| 日韩黄色免费网站| 99久久精品99国产精品| 亚洲精品一区二区三区在线观看| 亚洲视频电影在线| 国产高清在线观看免费不卡| 欧美乱妇15p| 亚洲天堂网中文字| 国产一区二区三区四区五区美女| 欧美在线免费观看视频| 欧美激情艳妇裸体舞| 美腿丝袜在线亚洲一区| 欧美午夜精品一区| 国产精品久久国产精麻豆99网站| 激情综合网av| 91精品国产综合久久久久久久 | 欧美综合天天夜夜久久| 国产日韩精品一区二区三区| 日韩国产一二三区| 欧美在线影院一区二区| 国产精品传媒在线| 国产成人啪午夜精品网站男同| 欧美一区二区三区四区在线观看| 一区二区三区在线播| 91欧美一区二区| 亚洲天堂免费看| 成人精品免费看| 欧美激情一区二区三区全黄| 国产精品性做久久久久久| 久久婷婷国产综合精品青草| 免费人成精品欧美精品| 日韩欧美国产精品一区| 日本不卡一区二区三区| 91精品国产综合久久香蕉的特点| 日韩精品一级中文字幕精品视频免费观看 | 欧美午夜精品电影|