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

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

?? cmd64x.c

?? ep9315平臺下硬盤驅動的源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
		(void) pci_write_config_byte(dev, pciU, regU);		(void) pci_read_config_byte(dev, pciD, &regD);		(void) pci_read_config_byte(dev, pciU, &regU);	}	switch(speed) {		case XFER_UDMA_5:	regU |= (unit ? 0x0A : 0x05); break;		case XFER_UDMA_4:	regU |= (unit ? 0x4A : 0x15); break;		case XFER_UDMA_3:	regU |= (unit ? 0x8A : 0x25); break;		case XFER_UDMA_2:	regU |= (unit ? 0x42 : 0x11); break;		case XFER_UDMA_1:	regU |= (unit ? 0x82 : 0x21); break;		case XFER_UDMA_0:	regU |= (unit ? 0xC2 : 0x31); break;		case XFER_MW_DMA_2:	regD |= (unit ? 0x40 : 0x10); break;		case XFER_MW_DMA_1:	regD |= (unit ? 0x80 : 0x20); break;		case XFER_MW_DMA_0:	regD |= (unit ? 0xC0 : 0x30); break;		case XFER_SW_DMA_2:	regD |= (unit ? 0x40 : 0x10); break;		case XFER_SW_DMA_1:	regD |= (unit ? 0x80 : 0x20); break;		case XFER_SW_DMA_0:	regD |= (unit ? 0xC0 : 0x30); break;		case XFER_PIO_4:	cmd64x_tuneproc(drive, 4); break;		case XFER_PIO_3:	cmd64x_tuneproc(drive, 3); break;		case XFER_PIO_2:	cmd64x_tuneproc(drive, 2); break;		case XFER_PIO_1:	cmd64x_tuneproc(drive, 1); break;		case XFER_PIO_0:	cmd64x_tuneproc(drive, 0); break;		default:			return 1;	}	if (speed > XFER_PIO_4) {		(void) pci_write_config_byte(dev, pciU, regU);		regD |= (unit ? 0x40 : 0x20);		(void) pci_write_config_byte(dev, pciD, regD);	}	return (ide_config_drive_speed(drive, speed));}static int config_chipset_for_dma (ide_drive_t *drive){	u8 speed	= ide_dma_speed(drive, cmd64x_ratemask(drive));	config_chipset_for_pio(drive, !speed);	if (!speed)		return 0;	if(ide_set_xfer_rate(drive, speed))		return 0; 	if (!drive->init_speed)		drive->init_speed = speed;	return ide_dma_enable(drive);}static int cmd64x_config_drive_for_dma (ide_drive_t *drive){	ide_hwif_t *hwif	= HWIF(drive);	struct hd_driveid *id	= drive->id;	if ((id->capability & 1) != 0 && drive->autodma) {		/* Consult the list of known "bad" drives */		if (hwif->ide_dma_bad_drive(drive))			goto fast_ata_pio;		if ((id->field_valid & 4) && cmd64x_ratemask(drive)) {			if (id->dma_ultra & hwif->ultra_mask) {				/* Force if Capable UltraDMA */				int dma = config_chipset_for_dma(drive);				if ((id->field_valid & 2) && !dma)					goto try_dma_modes;			}		} else if (id->field_valid & 2) {try_dma_modes:			if ((id->dma_mword & hwif->mwdma_mask) ||			    (id->dma_1word & hwif->swdma_mask)) {				/* Force if Capable regular DMA modes */				if (!config_chipset_for_dma(drive))					goto no_dma_set;			}		} else if (hwif->ide_dma_good_drive(drive) &&			   (id->eide_dma_time < 150)) {			/* Consult the list of known "good" drives */			if (!config_chipset_for_dma(drive))				goto no_dma_set;		} else {			goto fast_ata_pio;		}	} else if ((id->capability & 8) || (id->field_valid & 2)) {fast_ata_pio:no_dma_set:		config_chipset_for_pio(drive, 1);		return hwif->ide_dma_off_quietly(drive);	}	return hwif->ide_dma_on(drive);}static int cmd64x_alt_dma_status (struct pci_dev *dev){	switch(dev->device) {		case PCI_DEVICE_ID_CMD_648:		case PCI_DEVICE_ID_CMD_649:			return 1;		default:			break;	}	return 0;}static int cmd64x_ide_dma_end (ide_drive_t *drive){	u8 dma_stat = 0, dma_cmd = 0;	ide_hwif_t *hwif	= HWIF(drive);	struct pci_dev *dev	= hwif->pci_dev;	drive->waiting_for_dma = 0;	/* read DMA command state */	dma_cmd = hwif->INB(hwif->dma_command);	/* stop DMA */	hwif->OUTB((dma_cmd & ~1), hwif->dma_command);	/* get DMA status */	dma_stat = hwif->INB(hwif->dma_status);	/* clear the INTR & ERROR bits */	hwif->OUTB(dma_stat|6, hwif->dma_status);	if (cmd64x_alt_dma_status(dev)) {		u8 dma_intr	= 0;		u8 dma_mask	= (hwif->channel) ? ARTTIM23_INTR_CH1 :						    CFR_INTR_CH0;		u8 dma_reg	= (hwif->channel) ? ARTTIM2 : CFR;		(void) pci_read_config_byte(dev, dma_reg, &dma_intr);		/* clear the INTR bit */		(void) pci_write_config_byte(dev, dma_reg, dma_intr|dma_mask);	}	/* purge DMA mappings */	ide_destroy_dmatable(drive);	/* verify good DMA status */	return (dma_stat & 7) != 4;}static int cmd64x_ide_dma_test_irq (ide_drive_t *drive){	ide_hwif_t *hwif		= HWIF(drive);	struct pci_dev *dev		= hwif->pci_dev;        u8 dma_alt_stat = 0, mask	= (hwif->channel) ? MRDMODE_INTR_CH1 :							    MRDMODE_INTR_CH0;	u8 dma_stat = hwif->INB(hwif->dma_status);	(void) pci_read_config_byte(dev, MRDMODE, &dma_alt_stat);#ifdef DEBUG	printk("%s: dma_stat: 0x%02x dma_alt_stat: "		"0x%02x mask: 0x%02x\n", drive->name,		dma_stat, dma_alt_stat, mask);#endif	if (!(dma_alt_stat & mask))		return 0;	/* return 1 if INTR asserted */	if ((dma_stat & 4) == 4)		return 1;	return 0;}/* * ASUS P55T2P4D with CMD646 chipset revision 0x01 requires the old * event order for DMA transfers. */static int cmd646_1_ide_dma_end (ide_drive_t *drive){	ide_hwif_t *hwif = HWIF(drive);	u8 dma_stat = 0, dma_cmd = 0;	drive->waiting_for_dma = 0;	/* get DMA status */	dma_stat = hwif->INB(hwif->dma_status);	/* read DMA command state */	dma_cmd = hwif->INB(hwif->dma_command);	/* stop DMA */	hwif->OUTB((dma_cmd & ~1), hwif->dma_command);	/* clear the INTR & ERROR bits */	hwif->OUTB(dma_stat|6, hwif->dma_status);	/* and free any DMA resources */	ide_destroy_dmatable(drive);	/* verify good DMA status */	return (dma_stat & 7) != 4;}static unsigned int __init init_chipset_cmd64x (struct pci_dev *dev, const char *name){	u32 class_rev = 0;	u8 mrdmode = 0;	pci_read_config_dword(dev, PCI_CLASS_REVISION, &class_rev);	class_rev &= 0xff;#ifdef __i386__	if (dev->resource[PCI_ROM_RESOURCE].start) {		pci_write_config_byte(dev, PCI_ROM_ADDRESS, dev->resource[PCI_ROM_RESOURCE].start | PCI_ROM_ADDRESS_ENABLE);		printk(KERN_INFO "%s: ROM enabled at 0x%08lx\n", name, dev->resource[PCI_ROM_RESOURCE].start);	}#endif	switch(dev->device) {		case PCI_DEVICE_ID_CMD_643:			break;		case PCI_DEVICE_ID_CMD_646:			printk(KERN_INFO "%s: chipset revision 0x%02X, ", name, class_rev);			switch(class_rev) {				case 0x07:				case 0x05:					printk("UltraDMA Capable");					break;				case 0x03:					printk("MultiWord DMA Force Limited");					break;				case 0x01:				default:					printk("MultiWord DMA Limited, IRQ workaround enabled");					break;				}			printk("\n");                        break;		case PCI_DEVICE_ID_CMD_648:		case PCI_DEVICE_ID_CMD_649:			break;		default:			break;	}	/* Set a good latency timer and cache line size value. */	(void) pci_write_config_byte(dev, PCI_LATENCY_TIMER, 64);#ifdef __sparc_v9__	(void) pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, 0x10);#endif	/* Setup interrupts. */	(void) pci_read_config_byte(dev, MRDMODE, &mrdmode);	mrdmode &= ~(0x30);	(void) pci_write_config_byte(dev, MRDMODE, mrdmode);	/* Use MEMORY READ LINE for reads.	 * NOTE: Although not mentioned in the PCI0646U specs,	 *       these bits are write only and won't be read	 *       back as set or not.  The PCI0646U2 specs clarify	 *       this point.	 */	(void) pci_write_config_byte(dev, MRDMODE, mrdmode | 0x02);	/* Set reasonable active/recovery/address-setup values. */	(void) pci_write_config_byte(dev, ARTTIM0,  0x40);	(void) pci_write_config_byte(dev, DRWTIM0,  0x3f);	(void) pci_write_config_byte(dev, ARTTIM1,  0x40);	(void) pci_write_config_byte(dev, DRWTIM1,  0x3f);#ifdef __i386__	(void) pci_write_config_byte(dev, ARTTIM23, 0x1c);#else	(void) pci_write_config_byte(dev, ARTTIM23, 0x5c);#endif	(void) pci_write_config_byte(dev, DRWTIM23, 0x3f);	(void) pci_write_config_byte(dev, DRWTIM3,  0x3f);#ifdef CONFIG_PPC	(void) pci_write_config_byte(dev, UDIDETCR0, 0xf0);#endif /* CONFIG_PPC */#if defined(DISPLAY_CMD64X_TIMINGS) && defined(CONFIG_PROC_FS)	cmd_devs[n_cmd_devs++] = dev;	if (!cmd64x_proc) {		cmd64x_proc = 1;		ide_pci_register_host_proc(&cmd64x_procs[0]);	}#endif /* DISPLAY_CMD64X_TIMINGS && CONFIG_PROC_FS */	return 0;}static unsigned int __init ata66_cmd64x (ide_hwif_t *hwif){	u8 ata66 = 0, mask = (hwif->channel) ? 0x02 : 0x01;	switch(hwif->pci_dev->device) {		case PCI_DEVICE_ID_CMD_643:		case PCI_DEVICE_ID_CMD_646:			return ata66;		default:			break;	}	pci_read_config_byte(hwif->pci_dev, BMIDECSR, &ata66);	return (ata66 & mask) ? 1 : 0;}static void __init init_hwif_cmd64x (ide_hwif_t *hwif){	struct pci_dev *dev	= hwif->pci_dev;	unsigned int class_rev;	hwif->autodma = 0;	pci_read_config_dword(dev, PCI_CLASS_REVISION, &class_rev);	class_rev &= 0xff;	hwif->tuneproc  = &cmd64x_tuneproc;	hwif->speedproc = &cmd64x_tune_chipset;	if (!hwif->dma_base) {		hwif->drives[0].autotune = 1;		hwif->drives[1].autotune = 1;		return;	}	hwif->atapi_dma = 1;	hwif->ultra_mask = 0x3f;	hwif->mwdma_mask = 0x07;	hwif->swdma_mask = 0x07;	if (dev->device == PCI_DEVICE_ID_CMD_643)		hwif->ultra_mask = 0x80;	if (dev->device == PCI_DEVICE_ID_CMD_646)		hwif->ultra_mask = (class_rev > 0x04) ? 0x07 : 0x80;	if (dev->device == PCI_DEVICE_ID_CMD_648)		hwif->ultra_mask = 0x1f;	hwif->ide_dma_check = &cmd64x_config_drive_for_dma;	if (!(hwif->udma_four))		hwif->udma_four = ata66_cmd64x(hwif);	if (dev->device == PCI_DEVICE_ID_CMD_646) {		hwif->chipset = ide_cmd646;		if (class_rev == 0x01) {			hwif->ide_dma_end = &cmd646_1_ide_dma_end;		} else {			hwif->ide_dma_end = &cmd64x_ide_dma_end;			hwif->ide_dma_test_irq = &cmd64x_ide_dma_test_irq;		}	} else {		hwif->ide_dma_end = &cmd64x_ide_dma_end;		hwif->ide_dma_test_irq = &cmd64x_ide_dma_test_irq;	}	if (!noautodma)		hwif->autodma = 1;	hwif->drives[0].autodma = hwif->autodma;	hwif->drives[1].autodma = hwif->autodma;}static void __init init_dma_cmd64x (ide_hwif_t *hwif, unsigned long dmabase){	ide_setup_dma(hwif, dmabase, 8);}extern void ide_setup_pci_device(struct pci_dev *, ide_pci_device_t *);static int __devinit cmd64x_init_one(struct pci_dev *dev, const struct pci_device_id *id){	ide_pci_device_t *d = &cmd64x_chipsets[id->driver_data];	if (dev->device != d->device)		BUG();	ide_setup_pci_device(dev, d);	MOD_INC_USE_COUNT;	return 0;}static struct pci_device_id cmd64x_pci_tbl[] __devinitdata = {	{ PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_643, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},	{ PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_646, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},	{ PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_648, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2},	{ PCI_VENDOR_ID_CMD, PCI_DEVICE_ID_CMD_649, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3},	{ 0, },};static struct pci_driver driver = {	.name		= "CMD64x IDE",	.id_table	= cmd64x_pci_tbl,	.probe		= cmd64x_init_one,};static int cmd64x_ide_init(void){	return ide_pci_register_driver(&driver);}static void cmd64x_ide_exit(void){	ide_pci_unregister_driver(&driver);}module_init(cmd64x_ide_init);module_exit(cmd64x_ide_exit);MODULE_AUTHOR("Eddie Dost, David Miller, Andre Hedrick");MODULE_DESCRIPTION("PCI driver module for CMD64x IDE");MODULE_LICENSE("GPL");EXPORT_NO_SYMBOLS;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美人与z0zoxxxx视频| 在线不卡的av| 日韩国产欧美三级| 国产成人午夜精品5599| 欧洲av一区二区嗯嗯嗯啊| 国产成人综合自拍| 国产精品一品视频| 国产一区二区三区久久悠悠色av | 91蜜桃在线免费视频| 国产999精品久久久久久绿帽| 久久精品国产免费| 国产在线精品一区二区夜色 | 亚洲精品一区二区三区蜜桃下载| 欧美一区二区三区婷婷月色 | 国产成人av一区二区| 粉嫩高潮美女一区二区三区 | 一区二区三区四区乱视频| 亚洲欧美福利一区二区| 亚洲一区二区在线视频| 亚洲一本大道在线| 久久精品国产99久久6| 国产高清精品久久久久| av电影在线观看一区| 欧美色男人天堂| 日韩女同互慰一区二区| 久久精品亚洲精品国产欧美kt∨ | 日本精品一区二区三区四区的功能| aaa国产一区| 欧美日韩成人一区| 欧美精品一区二区三区在线播放| 国产亚洲婷婷免费| 国产精品网站在线| 亚洲一区在线电影| 国产一区在线视频| 91色porny在线视频| 日韩视频在线永久播放| 国产精品美女久久久久av爽李琼| 亚洲国产一区视频| 国产成人精品影视| 欧美日韩视频不卡| 国产精品私人影院| 蜜臀久久99精品久久久久宅男 | 精品国产网站在线观看| 成人欧美一区二区三区黑人麻豆| 五月激情丁香一区二区三区| 国产一区91精品张津瑜| 色成人在线视频| 日韩亚洲欧美综合| 亚洲丝袜美腿综合| 久久99精品国产麻豆婷婷| 粉嫩欧美一区二区三区高清影视| 色狠狠桃花综合| 精品av久久707| 水蜜桃久久夜色精品一区的特点| 粉嫩一区二区三区在线看| 日韩久久久精品| 亚洲自拍偷拍九九九| 成人av网在线| 欧美性xxxxxxxx| 亚洲人成伊人成综合网小说| 国产在线精品一区二区不卡了 | 国产自产视频一区二区三区 | 日av在线不卡| 色999日韩国产欧美一区二区| 欧美精品一区二区久久婷婷| 亚洲成人免费看| 在线亚洲一区观看| 综合久久国产九一剧情麻豆| 国产盗摄精品一区二区三区在线 | 欧美日本免费一区二区三区| 国产精品剧情在线亚洲| 国产伦理精品不卡| 久久色中文字幕| 国产乱码精品一区二区三区忘忧草| 欧美吞精做爰啪啪高潮| 亚洲精品视频一区| 色综合天天综合给合国产| 久久亚洲私人国产精品va媚药| 亚洲一区二区三区四区五区中文| 91免费版在线| 亚洲卡通欧美制服中文| 成人黄色电影在线| 日韩久久精品一区| 国模冰冰炮一区二区| 日韩视频免费直播| 极品少妇xxxx偷拍精品少妇| 久久伊人蜜桃av一区二区| 欧美老女人第四色| 午夜激情一区二区| 日韩午夜在线影院| 精东粉嫩av免费一区二区三区| 国产精品久久久久久久久免费丝袜| 寂寞少妇一区二区三区| 欧美韩国日本不卡| www.综合网.com| 亚洲综合一区在线| 欧美日本一区二区三区四区| 免费看欧美女人艹b| 日韩欧美专区在线| 国产成人午夜片在线观看高清观看| 国产清纯白嫩初高生在线观看91 | 97se亚洲国产综合在线| 成人免费在线观看入口| 欧美性感一类影片在线播放| 强制捆绑调教一区二区| 国产网红主播福利一区二区| 91女神在线视频| 亚洲成人av在线电影| 久久影院电视剧免费观看| 99综合电影在线视频| 亚洲亚洲精品在线观看| 精品日韩欧美一区二区| 成人性生交大片免费| 亚洲一区二区三区四区五区中文| 欧美一区二区高清| 成人av在线网站| 三级精品在线观看| 国产精品久久国产精麻豆99网站| 欧洲av一区二区嗯嗯嗯啊| 久久精品国产第一区二区三区| 国产视频一区二区在线| 99视频精品在线| 美女视频黄频大全不卡视频在线播放| 久久亚洲捆绑美女| 欧美性欧美巨大黑白大战| 国产一区二区三区不卡在线观看| 国产精品久久久一本精品| 欧美精品电影在线播放| 99精品国产视频| 成人成人成人在线视频| 久久爱另类一区二区小说| 艳妇臀荡乳欲伦亚洲一区| 国产三级三级三级精品8ⅰ区| 欧美美女直播网站| 91在线观看美女| 亚洲乱码一区二区三区在线观看| 在线观看日韩av先锋影音电影院| 国产成人精品三级| 日韩精品成人一区二区三区| 最新热久久免费视频| 久久中文娱乐网| 日本韩国精品一区二区在线观看| 韩国v欧美v亚洲v日本v| 亚洲h动漫在线| 一区二区三区丝袜| 亚洲人成伊人成综合网小说| 久久久久久免费毛片精品| 91精品国产综合久久精品图片| 色妞www精品视频| 不卡区在线中文字幕| 天天综合天天综合色| 一区二区三区精品视频在线| 国产精品久久久久久久久免费樱桃 | 国产精品久久久久影院亚瑟| 欧美一级高清大全免费观看| 欧美三级电影网| 91视视频在线观看入口直接观看www | 三级欧美韩日大片在线看| 亚洲最大的成人av| 亚洲男帅同性gay1069| 国产精品拍天天在线| 久久综合狠狠综合久久综合88 | 久久66热re国产| 日韩电影免费在线观看网站| 亚洲日本中文字幕区| 国产精品久久久久9999吃药| 国产精品嫩草影院av蜜臀| 欧美高清在线一区二区| 国产精品网友自拍| ...中文天堂在线一区| 最新热久久免费视频| 亚洲欧洲制服丝袜| 亚洲综合在线视频| 日韩一区精品字幕| 久久99国产精品免费网站| 韩国视频一区二区| 国产传媒日韩欧美成人| 99免费精品在线| 欧美性色综合网| 日韩欧美国产成人一区二区| 久久综合九色综合97婷婷女人 | 国产精品18久久久久久久久| 国产成人一区在线| 91浏览器在线视频| 91精品国产色综合久久不卡电影| 精品欧美一区二区三区精品久久 | 日韩码欧中文字| 亚洲高清视频中文字幕| 另类欧美日韩国产在线| 国产精品69毛片高清亚洲| 久久精品国产亚洲高清剧情介绍| 激情文学综合插| 成人激情综合网站| 欧美日韩一区精品| 精品国产乱码久久久久久蜜臀| 国产精品剧情在线亚洲| 日本三级韩国三级欧美三级| 岛国精品一区二区| 欧美一级二级在线观看| 中文字幕视频一区|