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

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

?? sl811_cs.c

?? host usb 主設備程序 支持sd卡 mouse keyboard 的最單單的驅動程序 gcc編譯
?? C
字號:
/* * PCMCIA driver for SL811HS (as found in REX-CFU1U) * Filename: sl811_cs.c * Author:   Yukio Yamamoto * *  Port to sl811-hcd and 2.6.x by *    Botond Botyanszki <boti@rocketmail.com> *    Simon Pickering * *  Last update: 2005-05-12 */#include <linux/kernel.h>#include <linux/module.h>#include <linux/init.h>#include <linux/ptrace.h>#include <linux/slab.h>#include <linux/string.h>#include <linux/timer.h>#include <linux/ioport.h>#include <linux/platform_device.h>#include <pcmcia/cs_types.h>#include <pcmcia/cs.h>#include <pcmcia/cistpl.h>#include <pcmcia/cisreg.h>#include <pcmcia/ds.h>#include <linux/usb/sl811.h>MODULE_AUTHOR("Botond Botyanszki");MODULE_DESCRIPTION("REX-CFU1U PCMCIA driver for 2.6");MODULE_LICENSE("GPL");/*====================================================================*//* MACROS                                                             *//*====================================================================*/#if defined(DEBUG) || defined(PCMCIA_DEBUG)static int pc_debug = 0;module_param(pc_debug, int, 0644);#define DBG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG "sl811_cs: " args)#else#define DBG(n, args...) do{}while(0)#endif	/* no debugging */#define INFO(args...) printk(KERN_INFO "sl811_cs: " args)#define INT_MODULE_PARM(n, v) static int n = v; module_param(n, int, 0444)#define CS_CHECK(fn, ret) \	do { \		last_fn = (fn); \		if ((last_ret = (ret)) != 0) \			goto cs_failed; \	} while (0)/*====================================================================*//* VARIABLES                                                          *//*====================================================================*/static const char driver_name[DEV_NAME_LEN]  = "sl811_cs";typedef struct local_info_t {	struct pcmcia_device	*p_dev;	dev_node_t		node;} local_info_t;static void sl811_cs_release(struct pcmcia_device * link);/*====================================================================*/static void release_platform_dev(struct device * dev){	DBG(0, "sl811_cs platform_dev release\n");	dev->parent = NULL;}static struct sl811_platform_data platform_data = {	.potpg		= 100,	.power		= 50,		/* == 100mA */	// .reset	= ... FIXME:  invoke CF reset on the card};static struct resource resources[] = {	[0] = {		.flags	= IORESOURCE_IRQ,	},	[1] = {		// .name   = "address",		.flags	= IORESOURCE_IO,	},	[2] = {		// .name   = "data",		.flags	= IORESOURCE_IO,	},};extern struct platform_driver sl811h_driver;static struct platform_device platform_dev = {	.id			= -1,	.dev = {		.platform_data = &platform_data,		.release       = release_platform_dev,	},	.resource		= resources,	.num_resources		= ARRAY_SIZE(resources),};static int sl811_hc_init(struct device *parent, ioaddr_t base_addr, int irq){	if (platform_dev.dev.parent)		return -EBUSY;	platform_dev.dev.parent = parent;	/* finish seting up the platform device */	resources[0].start = irq;	resources[1].start = base_addr;	resources[1].end = base_addr;	resources[2].start = base_addr + 1;	resources[2].end   = base_addr + 1;	/* The driver core will probe for us.  We know sl811-hcd has been	 * initialized already because of the link order dependency created	 * by referencing "sl811h_driver".	 */	platform_dev.name = sl811h_driver.driver.name;	return platform_device_register(&platform_dev);}/*====================================================================*/static void sl811_cs_detach(struct pcmcia_device *link){	DBG(0, "sl811_cs_detach(0x%p)\n", link);	sl811_cs_release(link);	/* This points to the parent local_info_t struct */	kfree(link->priv);}static void sl811_cs_release(struct pcmcia_device * link){	DBG(0, "sl811_cs_release(0x%p)\n", link);	pcmcia_disable_device(link);	platform_device_unregister(&platform_dev);}static int sl811_cs_config(struct pcmcia_device *link){	struct device		*parent = &handle_to_dev(link);	local_info_t		*dev = link->priv;	tuple_t			tuple;	cisparse_t		parse;	int			last_fn, last_ret;	u_char			buf[64];	config_info_t		conf;	cistpl_cftable_entry_t	dflt = { 0 };	DBG(0, "sl811_cs_config(0x%p)\n", link);	/* Look up the current Vcc */	CS_CHECK(GetConfigurationInfo,			pcmcia_get_configuration_info(link, &conf));	tuple.Attributes = 0;	tuple.TupleData = buf;	tuple.TupleDataMax = sizeof(buf);	tuple.TupleOffset = 0;	tuple.DesiredTuple = CISTPL_CFTABLE_ENTRY;	CS_CHECK(GetFirstTuple, pcmcia_get_first_tuple(link, &tuple));	while (1) {		cistpl_cftable_entry_t	*cfg = &(parse.cftable_entry);		if (pcmcia_get_tuple_data(link, &tuple) != 0				|| pcmcia_parse_tuple(link, &tuple, &parse)						!= 0)			goto next_entry;		if (cfg->flags & CISTPL_CFTABLE_DEFAULT) {			dflt = *cfg;		}		if (cfg->index == 0)			goto next_entry;		link->conf.ConfigIndex = cfg->index;		/* Use power settings for Vcc and Vpp if present */		/*  Note that the CIS values need to be rescaled */		if (cfg->vcc.present & (1<<CISTPL_POWER_VNOM)) {			if (cfg->vcc.param[CISTPL_POWER_VNOM]/10000					!= conf.Vcc)				goto next_entry;		} else if (dflt.vcc.present & (1<<CISTPL_POWER_VNOM)) {			if (dflt.vcc.param[CISTPL_POWER_VNOM]/10000					!= conf.Vcc)				goto next_entry;		}		if (cfg->vpp1.present & (1<<CISTPL_POWER_VNOM))			link->conf.Vpp =				cfg->vpp1.param[CISTPL_POWER_VNOM]/10000;		else if (dflt.vpp1.present & (1<<CISTPL_POWER_VNOM))			link->conf.Vpp =				dflt.vpp1.param[CISTPL_POWER_VNOM]/10000;		/* we need an interrupt */		if (cfg->irq.IRQInfo1 || dflt.irq.IRQInfo1)			link->conf.Attributes |= CONF_ENABLE_IRQ;		/* IO window settings */		link->io.NumPorts1 = link->io.NumPorts2 = 0;		if ((cfg->io.nwin > 0) || (dflt.io.nwin > 0)) {			cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt.io;			link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;			link->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;			link->io.BasePort1 = io->win[0].base;			link->io.NumPorts1 = io->win[0].len;			if (pcmcia_request_io(link, &link->io) != 0)				goto next_entry;		}		break;next_entry:		pcmcia_disable_device(link);		last_ret = pcmcia_get_next_tuple(link, &tuple);	}	/* require an IRQ and two registers */	if (!link->io.NumPorts1 || link->io.NumPorts1 < 2)		goto cs_failed;	if (link->conf.Attributes & CONF_ENABLE_IRQ)		CS_CHECK(RequestIRQ,			pcmcia_request_irq(link, &link->irq));	else		goto cs_failed;	CS_CHECK(RequestConfiguration,		pcmcia_request_configuration(link, &link->conf));	sprintf(dev->node.dev_name, driver_name);	dev->node.major = dev->node.minor = 0;	link->dev_node = &dev->node;	printk(KERN_INFO "%s: index 0x%02x: ",	       dev->node.dev_name, link->conf.ConfigIndex);	if (link->conf.Vpp)		printk(", Vpp %d.%d", link->conf.Vpp/10, link->conf.Vpp%10);	printk(", irq %d", link->irq.AssignedIRQ);	printk(", io 0x%04x-0x%04x", link->io.BasePort1,	       link->io.BasePort1+link->io.NumPorts1-1);	printk("\n");	if (sl811_hc_init(parent, link->io.BasePort1, link->irq.AssignedIRQ)			< 0) {cs_failed:		printk("sl811_cs_config failed\n");		cs_error(link, last_fn, last_ret);		sl811_cs_release(link);		return  -ENODEV;	}	return 0;}static int sl811_cs_probe(struct pcmcia_device *link){	local_info_t *local;	local = kmalloc(sizeof(local_info_t), GFP_KERNEL);	if (!local)		return -ENOMEM;	memset(local, 0, sizeof(local_info_t));	local->p_dev = link;	link->priv = local;	/* Initialize */	link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;	link->irq.IRQInfo1 = IRQ_INFO2_VALID|IRQ_LEVEL_ID;	link->irq.Handler = NULL;	link->conf.Attributes = 0;	link->conf.IntType = INT_MEMORY_AND_IO;	return sl811_cs_config(link);}static struct pcmcia_device_id sl811_ids[] = {	PCMCIA_DEVICE_MANF_CARD(0xc015, 0x0001), /* RATOC USB HOST CF+ Card */	PCMCIA_DEVICE_NULL,};MODULE_DEVICE_TABLE(pcmcia, sl811_ids);static struct pcmcia_driver sl811_cs_driver = {	.owner		= THIS_MODULE,	.drv		= {		.name	= (char *)driver_name,	},	.probe		= sl811_cs_probe,	.remove		= sl811_cs_detach,	.id_table	= sl811_ids,};/*====================================================================*/static int __init init_sl811_cs(void){	return pcmcia_register_driver(&sl811_cs_driver);}module_init(init_sl811_cs);static void __exit exit_sl811_cs(void){	pcmcia_unregister_driver(&sl811_cs_driver);}module_exit(exit_sl811_cs);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久户外露出 | 99re66热这里只有精品3直播 | 91精品国产一区二区| 99久久免费国产| www.66久久| 日本久久一区二区| 欧美在线观看禁18| 欧美福利电影网| 欧美videos大乳护士334| 精品国精品国产| 久久久国际精品| 国产精品成人免费| 一二三四区精品视频| 日本不卡中文字幕| 极品少妇xxxx偷拍精品少妇| 国产精一区二区三区| eeuss国产一区二区三区| jizz一区二区| 欧美日韩成人一区| 久久人人爽人人爽| 一卡二卡三卡日韩欧美| 美女在线一区二区| 成人开心网精品视频| 欧美三级在线看| 久久综合视频网| 亚洲精品成人少妇| 老色鬼精品视频在线观看播放| 极品少妇一区二区| 日本韩国精品在线| 精品免费视频一区二区| 亚洲精品视频在线观看网站| 日韩精品成人一区二区在线| 成人高清视频免费观看| 欧美日韩亚洲另类| 国产精品免费久久久久| 丝袜亚洲另类丝袜在线| av在线不卡电影| 欧美一区二区三区四区高清| 中文字幕在线一区免费| 蜜臀av一区二区| 色综合久久天天综合网| 2014亚洲片线观看视频免费| 亚洲成av人影院| 成人的网站免费观看| 精品国产一区二区在线观看| 亚洲狠狠爱一区二区三区| 成人国产精品免费网站| 欧美一区二区三区系列电影| 亚洲精品国产高清久久伦理二区| 韩国毛片一区二区三区| 欧美精品一二三区| 亚洲综合激情小说| 91丨porny丨国产| 国产欧美日韩精品a在线观看| 五月天网站亚洲| 色综合中文字幕国产| 欧美一区二区三区在| 亚洲电影一级片| 欧美亚洲动漫精品| 亚洲午夜羞羞片| 欧美性感一类影片在线播放| 亚洲视频一区二区免费在线观看| 国产一区二区免费在线| 日韩欧美你懂的| 免费视频一区二区| 欧美午夜寂寞影院| 亚洲成人资源网| 在线欧美小视频| 亚洲小说春色综合另类电影| 欧美在线你懂得| 亚洲一区二区三区中文字幕在线| 97se亚洲国产综合自在线不卡| 国产人伦精品一区二区| 国产一区二区在线观看免费| 精品国内片67194| 国产精品一区免费视频| 久久精品一区二区三区四区| 国产精品一区二区免费不卡| 久久影院午夜片一区| 国产99精品国产| 国产精品久久久一区麻豆最新章节| 国产一区二区三区黄视频 | 精品国产成人系列| 精品亚洲国产成人av制服丝袜| 9191久久久久久久久久久| 视频精品一区二区| 日韩一区二区三区视频在线观看| 免费观看成人鲁鲁鲁鲁鲁视频| 日韩欧美二区三区| 高清av一区二区| 亚洲乱码一区二区三区在线观看| 色激情天天射综合网| 日本欧美韩国一区三区| 亚洲精品一区二区三区香蕉| 国产不卡视频一区二区三区| 亚洲欧洲国产日本综合| 欧美另类一区二区三区| 久久爱另类一区二区小说| 国产精品欧美久久久久无广告| 91麻豆精东视频| 免费成人在线观看视频| 亚洲国产精品v| 欧美日本在线观看| 国产激情一区二区三区四区| 亚洲免费在线播放| 7799精品视频| 不卡的av网站| 视频一区欧美日韩| 亚洲丝袜制服诱惑| 欧美大片免费久久精品三p| 波多野结衣中文字幕一区二区三区| 亚洲一区在线观看免费观看电影高清| 欧美日本在线观看| www.成人网.com| 韩国v欧美v日本v亚洲v| 一区二区三区成人| 国产女主播视频一区二区| 欧美精选午夜久久久乱码6080| 成人免费视频一区| 日韩高清一级片| 椎名由奈av一区二区三区| 欧美videos中文字幕| 欧美写真视频网站| 成人开心网精品视频| 国产综合成人久久大片91| 亚洲国产一区二区三区| 亚洲国产精品黑人久久久| 在线播放视频一区| 在线欧美一区二区| 成人精品视频网站| 国产精品2024| 久久99久久99| 首页欧美精品中文字幕| 亚洲制服丝袜一区| 亚洲婷婷综合久久一本伊一区| 精品国产一区二区三区四区四| 欧美日韩一级黄| 色综合欧美在线视频区| 99视频热这里只有精品免费| 国模冰冰炮一区二区| 麻豆精品在线观看| 麻豆精品久久久| 美女在线视频一区| 久久精品国产99久久6| 日本少妇一区二区| 奇米四色…亚洲| 蜜臀久久99精品久久久画质超高清 | 成人一区二区三区视频 | 中日韩av电影| 久久久久久久精| 久久中文字幕电影| 久久色成人在线| 久久久久久久久久久久久久久99 | 日韩av电影一区| 日本午夜一区二区| 麻豆精品一区二区| 久久99在线观看| 国产成人一区二区精品非洲| 国产成人精品免费| 91丨porny丨中文| 欧美在线免费观看视频| 777午夜精品免费视频| 欧美一区二区三级| 亚洲精品一区二区精华| 欧美国产乱子伦| 亚洲视频 欧洲视频| 一区二区三区精品视频| 日韩激情视频网站| 国产一区二区三区免费观看| 成人午夜免费视频| 欧洲视频一区二区| 欧美一区二区三区免费视频| 欧美va亚洲va香蕉在线| 国产亚洲一区二区在线观看| 中文字幕一区二区不卡| 亚洲一卡二卡三卡四卡 | 国产成人精品一区二区三区四区 | 成人av手机在线观看| 欧美写真视频网站| 欧美tk丨vk视频| 中文字幕一区二区三区蜜月| 亚洲一区二区在线免费看| 久久se精品一区精品二区| 波多野结衣亚洲| 5858s免费视频成人| 中文字幕成人av| 日韩一区精品视频| 大白屁股一区二区视频| 欧美猛男超大videosgay| 久久综合av免费| 亚洲大尺度视频在线观看| 国产在线视视频有精品| 色琪琪一区二区三区亚洲区| 欧美一区二区美女| 一区二区三区 在线观看视频| 麻豆精品久久久| 精品污污网站免费看| 国产欧美日韩综合精品一区二区| 亚洲激情自拍视频| 成人免费视频免费观看|