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

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

?? usb-ohci-pci.c

?? linux和2410結合開發 用他可以生成2410所需的zImage文件
?? C
字號:
#include <linux/module.h>#include <linux/init.h>#include <linux/pci.h>#include <linux/kernel.h>#include <linux/slab.h>#include <linux/delay.h>#include <linux/interrupt.h>  /* for in_interrupt() */#undef DEBUG#include <linux/usb.h>#include "usb-ohci.h"#ifdef CONFIG_PMAC_PBOOK#include <asm/machdep.h>#include <asm/pmac_feature.h>#include <asm/pci-bridge.h>#ifndef CONFIG_PM#define CONFIG_PM#endif#endif/*-------------------------------------------------------------------------*//* Increment the module usage count, start the control thread and * return success. */static struct pci_driver ohci_pci_driver;static int __devinithc_found_ohci (struct pci_dev *dev, int irq,	void *mem_base, const struct pci_device_id *id){	u8 latency, limit;	ohci_t * ohci;	int ret;		printk(KERN_INFO __FILE__ ": usb-%s, %s\n", dev->slot_name, dev->name);	/* bad pci latencies can contribute to overruns */ 	pci_read_config_byte (dev, PCI_LATENCY_TIMER, &latency);	if (latency) {		pci_read_config_byte (dev, PCI_MAX_LAT, &limit);		if (limit && limit < latency) {			dbg ("PCI latency reduced to max %d", limit);			pci_write_config_byte (dev, PCI_LATENCY_TIMER, limit);			latency = limit;		}	}	ret = hc_add_ohci(dev, irq, mem_base, id->driver_data,			   &ohci, ohci_pci_driver.name, dev->slot_name);	if (ret == 0)		ohci->pci_latency = latency;	return ret;}/*-------------------------------------------------------------------------*/#ifdef	CONFIG_PM/* controller died; cleanup debris, then restart *//* must not be called from interrupt context */static void hc_restart (ohci_t *ohci){	int temp;	int i;	if (ohci->pci_latency)		pci_write_config_byte (ohci->ohci_dev, PCI_LATENCY_TIMER, ohci->pci_latency);	ohci->disabled = 1;	ohci->sleeping = 0;	if (ohci->bus->root_hub)		usb_disconnect (&ohci->bus->root_hub);		/* empty the interrupt branches */	for (i = 0; i < NUM_INTS; i++) ohci->ohci_int_load[i] = 0;	for (i = 0; i < NUM_INTS; i++) ohci->hcca->int_table[i] = 0;		/* no EDs to remove */	ohci->ed_rm_list [0] = NULL;	ohci->ed_rm_list [1] = NULL;	/* empty control and bulk lists */	 	ohci->ed_isotail     = NULL;	ohci->ed_controltail = NULL;	ohci->ed_bulktail    = NULL;	if ((temp = hc_reset (ohci)) < 0 || (temp = hc_start (ohci)) < 0) {		err ("can't restart usb-%s, %d", ohci->ohci_dev->slot_name, temp);	} else		dbg ("restart usb-%s completed", ohci->ohci_dev->slot_name);}#endif	/* CONFIG_PM *//*-------------------------------------------------------------------------*//* configured so that an OHCI device is always provided *//* always called with process context; sleeping is OK */static int __devinitohci_pci_probe (struct pci_dev *dev, const struct pci_device_id *id){	unsigned long mem_resource, mem_len;	void *mem_base;	if (pci_enable_device(dev) < 0)		return -ENODEV;        if (!dev->irq) {        	err("found OHCI device with no IRQ assigned. check BIOS settings!");   	        return -ENODEV;        }		/* we read its hardware registers as memory */	mem_resource = pci_resource_start(dev, 0);	mem_len = pci_resource_len(dev, 0);	if (!request_mem_region (mem_resource, mem_len, ohci_pci_driver.name)) {		dbg ("controller already in use");		return -EBUSY;	}	mem_base = ioremap_nocache (mem_resource, mem_len);	if (!mem_base) {		err("Error mapping OHCI memory");		return -EFAULT;	}	/* controller writes into our memory */	pci_set_master (dev);	return hc_found_ohci (dev, dev->irq, mem_base, id);} /*-------------------------------------------------------------------------*//* may be called from interrupt context [interface spec] *//* may be called without controller present *//* may be called with controller, bus, and devices active */static void __devexitohci_pci_remove (struct pci_dev *dev){	ohci_t		*ohci = (ohci_t *) pci_get_drvdata(dev);	dbg ("remove %s controller usb-%s%s%s",		hcfs2string (ohci->hc_control & OHCI_CTRL_HCFS),		dev->slot_name,		ohci->disabled ? " (disabled)" : "",		in_interrupt () ? " in interrupt" : ""		);	hc_remove_ohci(ohci);	release_mem_region (pci_resource_start (dev, 0), pci_resource_len (dev, 0));}#ifdef	CONFIG_PM/*-------------------------------------------------------------------------*/static intohci_pci_suspend (struct pci_dev *dev, u32 state){	ohci_t			*ohci = (ohci_t *) pci_get_drvdata(dev);	unsigned long		flags;	u16 cmd;	if ((ohci->hc_control & OHCI_CTRL_HCFS) != OHCI_USB_OPER) {		dbg ("can't suspend usb-%s (state is %s)", dev->slot_name,			hcfs2string (ohci->hc_control & OHCI_CTRL_HCFS));		return -EIO;	}	/* act as if usb suspend can always be used */	info ("USB suspend: usb-%s", dev->slot_name);	ohci->sleeping = 1;	/* First stop processing */  	spin_lock_irqsave (&usb_ed_lock, flags);	ohci->hc_control &= ~(OHCI_CTRL_PLE|OHCI_CTRL_CLE|OHCI_CTRL_BLE|OHCI_CTRL_IE);	writel (ohci->hc_control, &ohci->regs->control);	writel (OHCI_INTR_SF, &ohci->regs->intrstatus);	(void) readl (&ohci->regs->intrstatus);  	spin_unlock_irqrestore (&usb_ed_lock, flags);	/* Wait a frame or two */	mdelay(1);	if (!readl (&ohci->regs->intrstatus) & OHCI_INTR_SF)		mdelay (1);		#ifdef CONFIG_PMAC_PBOOK	if (_machine == _MACH_Pmac)		disable_irq (ohci->irq);	/* else, 2.4 assumes shared irqs -- don't disable */#endif	/* Enable remote wakeup */	writel (readl(&ohci->regs->intrenable) | OHCI_INTR_RD, &ohci->regs->intrenable);	/* Suspend chip and let things settle down a bit */	ohci->hc_control = OHCI_USB_SUSPEND;	writel (ohci->hc_control, &ohci->regs->control);	(void) readl (&ohci->regs->control);	mdelay (500); /* No schedule here ! */	switch (readl (&ohci->regs->control) & OHCI_CTRL_HCFS) {		case OHCI_USB_RESET:			dbg("Bus in reset phase ???");			break;		case OHCI_USB_RESUME:			dbg("Bus in resume phase ???");			break;		case OHCI_USB_OPER:			dbg("Bus in operational phase ???");			break;		case OHCI_USB_SUSPEND:			dbg("Bus suspended");			break;	}	/* In some rare situations, Apple's OHCI have happily trashed	 * memory during sleep. We disable it's bus master bit during	 * suspend	 */	pci_read_config_word (dev, PCI_COMMAND, &cmd);	cmd &= ~PCI_COMMAND_MASTER;	pci_write_config_word (dev, PCI_COMMAND, cmd);#ifdef CONFIG_PMAC_PBOOK	{	   	struct device_node	*of_node;		/* Disable USB PAD & cell clock */		of_node = pci_device_to_OF_node (ohci->ohci_dev);		if (of_node)			pmac_call_feature(PMAC_FTR_USB_ENABLE, of_node, 0, 0);	}#endif	return 0;}/*-------------------------------------------------------------------------*/static intohci_pci_resume (struct pci_dev *dev){	ohci_t		*ohci = (ohci_t *) pci_get_drvdata(dev);	int		temp;	unsigned long	flags;	/* guard against multiple resumes */	atomic_inc (&ohci->resume_count);	if (atomic_read (&ohci->resume_count) != 1) {		err ("concurrent PCI resumes for usb-%s", dev->slot_name);		atomic_dec (&ohci->resume_count);		return 0;	}#ifdef CONFIG_PMAC_PBOOK	{		struct device_node *of_node;		/* Re-enable USB PAD & cell clock */		of_node = pci_device_to_OF_node (ohci->ohci_dev);		if (of_node)			pmac_call_feature(PMAC_FTR_USB_ENABLE, of_node, 0, 1);	}#endif	/* did we suspend, or were we powered off? */	ohci->hc_control = readl (&ohci->regs->control);	temp = ohci->hc_control & OHCI_CTRL_HCFS;#ifdef DEBUG	/* the registers may look crazy here */	ohci_dump_status (ohci);#endif	/* Re-enable bus mastering */	pci_set_master(ohci->ohci_dev);		switch (temp) {	case OHCI_USB_RESET:	// lost power		info ("USB restart: usb-%s", dev->slot_name);		hc_restart (ohci);		break;	case OHCI_USB_SUSPEND:	// host wakeup	case OHCI_USB_RESUME:	// remote wakeup		info ("USB continue: usb-%s from %s wakeup", dev->slot_name,			(temp == OHCI_USB_SUSPEND)				? "host" : "remote");		ohci->hc_control = OHCI_USB_RESUME;		writel (ohci->hc_control, &ohci->regs->control);		(void) readl (&ohci->regs->control);		mdelay (20); /* no schedule here ! */		/* Some controllers (lucent) need a longer delay here */		mdelay (15);		temp = readl (&ohci->regs->control);		temp = ohci->hc_control & OHCI_CTRL_HCFS;		if (temp != OHCI_USB_RESUME) {			err ("controller usb-%s won't resume", dev->slot_name);			ohci->disabled = 1;			return -EIO;		}		/* Some chips likes being resumed first */		writel (OHCI_USB_OPER, &ohci->regs->control);		(void) readl (&ohci->regs->control);		mdelay (3);		/* Then re-enable operations */		spin_lock_irqsave (&usb_ed_lock, flags);		ohci->disabled = 0;		ohci->sleeping = 0;		ohci->hc_control = OHCI_CONTROL_INIT | OHCI_USB_OPER;		if (!ohci->ed_rm_list[0] && !ohci->ed_rm_list[1]) {			if (ohci->ed_controltail)				ohci->hc_control |= OHCI_CTRL_CLE;			if (ohci->ed_bulktail)				ohci->hc_control |= OHCI_CTRL_BLE;		}		writel (ohci->hc_control, &ohci->regs->control);		writel (OHCI_INTR_SF, &ohci->regs->intrstatus);		writel (OHCI_INTR_SF, &ohci->regs->intrenable);		/* Check for a pending done list */		writel (OHCI_INTR_WDH, &ohci->regs->intrdisable);			(void) readl (&ohci->regs->intrdisable);		spin_unlock_irqrestore (&usb_ed_lock, flags);#ifdef CONFIG_PMAC_PBOOK		if (_machine == _MACH_Pmac)			enable_irq (ohci->irq);#endif		if (ohci->hcca->done_head)			dl_done_list (ohci, dl_reverse_done_list (ohci));		writel (OHCI_INTR_WDH, &ohci->regs->intrenable); 		writel (OHCI_BLF, &ohci->regs->cmdstatus); /* start bulk list */		writel (OHCI_CLF, &ohci->regs->cmdstatus); /* start Control list */		break;	default:		warn ("odd PCI resume for usb-%s", dev->slot_name);	}	/* controller is operational, extra resumes are harmless */	atomic_dec (&ohci->resume_count);	return 0;}#endif	/* CONFIG_PM *//*-------------------------------------------------------------------------*/static const struct pci_device_id __devinitdata ohci_pci_ids [] = { {	/*	 * AMD-756 [Viper] USB has a serious erratum when used with	 * lowspeed devices like mice.	 */	vendor:		0x1022,	device:		0x740c,	subvendor:	PCI_ANY_ID,	subdevice:	PCI_ANY_ID,	driver_data:	OHCI_QUIRK_AMD756,} , {	/* handle any USB OHCI controller */	class: 		((PCI_CLASS_SERIAL_USB << 8) | 0x10),	class_mask: 	~0,	/* no matter who makes it */	vendor:		PCI_ANY_ID,	device:		PCI_ANY_ID,	subvendor:	PCI_ANY_ID,	subdevice:	PCI_ANY_ID,	}, { /* end: all zeroes */ }};MODULE_DEVICE_TABLE (pci, ohci_pci_ids);static struct pci_driver ohci_pci_driver = {	name:		"usb-ohci",	id_table:	&ohci_pci_ids [0],	probe:		ohci_pci_probe,	remove:		__devexit_p(ohci_pci_remove),#ifdef	CONFIG_PM	suspend:	ohci_pci_suspend,	resume:		ohci_pci_resume,#endif	/* PM */}; /*-------------------------------------------------------------------------*/static int __init ohci_hcd_init (void) {	return pci_module_init (&ohci_pci_driver);}/*-------------------------------------------------------------------------*/static void __exit ohci_hcd_cleanup (void) {		pci_unregister_driver (&ohci_pci_driver);}module_init (ohci_hcd_init);module_exit (ohci_hcd_cleanup);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲一区二区三区四区| 一区二区三区在线观看网站| 成人国产精品免费网站| 亚洲一区二区三区激情| 亚洲国产精品二十页| 欧美一区二区二区| 日本韩国精品在线| 不卡视频在线观看| 激情五月激情综合网| 视频精品一区二区| 亚洲一区在线观看免费| 国产精品美女久久久久久2018| 日韩一区二区三区在线| 在线观看视频一区二区 | 爽好久久久欧美精品| 中文字幕一区二区三区视频 | 一区二区三区欧美亚洲| 国产亚洲欧美色| 欧美一区二区视频免费观看| 在线亚洲+欧美+日本专区| 懂色中文一区二区在线播放| 狠狠色丁香久久婷婷综合_中| 婷婷国产在线综合| 亚洲国产成人av| 一级精品视频在线观看宜春院| 国产精品入口麻豆九色| 久久久.com| 国产亚洲一区二区三区四区| 日韩欧美国产麻豆| 日韩小视频在线观看专区| 欧美日韩午夜在线视频| 欧洲中文字幕精品| 欧美色电影在线| 欧美午夜电影在线播放| 欧美午夜精品久久久久久孕妇| 色视频一区二区| 在线视频亚洲一区| 欧日韩精品视频| 欧美午夜精品免费| 欧美精品一卡二卡| 欧美精品久久一区| 91精品国产一区二区三区香蕉 | 日韩欧美专区在线| 精品久久久久久久人人人人传媒| 日韩女优电影在线观看| 精品1区2区在线观看| 2欧美一区二区三区在线观看视频| 精品久久久久香蕉网| 国产亚洲欧洲一区高清在线观看| 久久色视频免费观看| 久久精品人人做人人爽97| 国产精品妹子av| 亚洲欧美日韩国产另类专区| 亚洲欧美另类小说| 舔着乳尖日韩一区| 久久国产夜色精品鲁鲁99| 国产精品小仙女| 99精品久久99久久久久| 欧美日韩在线播放三区四区| 91精品国产综合久久精品麻豆| 日韩午夜中文字幕| 国产欧美日产一区| 亚洲精品免费电影| 日日摸夜夜添夜夜添精品视频| 久久99国内精品| 成人国产精品免费网站| 欧美亚洲另类激情小说| 日韩一本二本av| 国产精品日韩精品欧美在线| 亚洲资源中文字幕| 久久成人免费网站| 99re这里只有精品首页| 欧美日本视频在线| 久久精子c满五个校花| 亚洲欧美日韩在线| 久久精品国产色蜜蜜麻豆| 成人丝袜18视频在线观看| 在线一区二区三区做爰视频网站| 日韩一级片网址| 亚洲日本电影在线| 蜜桃av一区二区在线观看| 不卡欧美aaaaa| 日韩欧美中文一区| 亚洲视频中文字幕| 久草在线在线精品观看| 91在线视频官网| 欧美大度的电影原声| 中文字幕一区二区三区不卡 | 免费不卡在线视频| 91美女在线观看| 精品国一区二区三区| 亚洲另类在线一区| 国产精品资源网| 欧美精品亚洲二区| 最新国产成人在线观看| 久久国产精品一区二区| 91精彩视频在线| 国产日本亚洲高清| 另类欧美日韩国产在线| 色94色欧美sute亚洲13| 欧美激情在线观看视频免费| 日本一不卡视频| 色婷婷香蕉在线一区二区| 久久久亚洲欧洲日产国码αv| 天天操天天干天天综合网| 99久久精品一区二区| 26uuu国产电影一区二区| 亚洲成人你懂的| 91亚洲大成网污www| 久久久www成人免费无遮挡大片 | 成人av免费在线观看| 精品伦理精品一区| 日韩激情视频在线观看| 在线观看av一区二区| 亚洲人成在线播放网站岛国| 国产一区啦啦啦在线观看| 日韩一级完整毛片| 日本欧美在线看| 欧美日韩国产大片| 亚洲午夜av在线| 欧美亚洲综合在线| 亚洲精品ww久久久久久p站| 成人av综合在线| 欧美国产一区二区| 国产成人av资源| 国产亚洲综合av| 国产精品资源在线观看| 久久婷婷综合激情| 国产呦萝稀缺另类资源| 精品国产精品网麻豆系列| 久久精品国内一区二区三区| 日韩亚洲国产中文字幕欧美| 理论片日本一区| 欧美精品一区二区三区久久久| 蜜桃av噜噜一区| 精品奇米国产一区二区三区| 日本三级韩国三级欧美三级| 日韩欧美区一区二| 久久99精品久久久久久| 久久久亚洲国产美女国产盗摄 | 亚洲精品一卡二卡| 色伊人久久综合中文字幕| 亚洲精品成人悠悠色影视| 91激情在线视频| 亚洲一二三专区| 欧美精选午夜久久久乱码6080| 日韩电影在线一区二区| 日韩一级黄色片| 国产精品乡下勾搭老头1| 国产精品国产成人国产三级 | 国产精品一区二区三区四区| 亚洲国产成人一区二区三区| 99综合影院在线| 亚洲影视在线观看| 91精品国产高清一区二区三区| 免费的国产精品| 欧美激情一区二区三区不卡 | 色噜噜狠狠色综合中国| 亚洲第一激情av| 精品国产伦一区二区三区观看方式| 国产一区福利在线| 亚洲欧洲成人自拍| 欧美精品一卡二卡| 国产精品资源在线看| 亚洲色图一区二区| 91精品福利在线一区二区三区| 国产一区二区三区久久久| 亚洲欧洲另类国产综合| 欧美绝品在线观看成人午夜影视| 韩国欧美国产一区| 亚洲免费观看视频| 欧美电影精品一区二区| av电影天堂一区二区在线| 首页欧美精品中文字幕| 欧美激情在线一区二区三区| 欧美色涩在线第一页| 国产成人aaa| 丝瓜av网站精品一区二区| 国产丝袜在线精品| 欧美喷水一区二区| 成人久久久精品乱码一区二区三区| 亚洲成人av福利| 中文一区二区在线观看| 91精品午夜视频| 91一区一区三区| 久久爱另类一区二区小说| 一区二区三区在线视频观看58| 精品成人一区二区| 欧美专区日韩专区| 成人综合在线观看| 免费在线观看成人| 一区二区三区精品视频在线| 久久精品夜色噜噜亚洲aⅴ| 欧美午夜免费电影| 不卡视频在线看| 国产在线视视频有精品| 亚洲成人1区2区| 亚洲精品v日韩精品| 国产亚洲精品中文字幕| 91精品国产入口|