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

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

?? sis5513.c

?? ep9315平臺下硬盤驅動的源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
		case XFER_UDMA_6:		case XFER_UDMA_5:		case XFER_UDMA_4:		case XFER_UDMA_3:		case XFER_UDMA_2:		case XFER_UDMA_1:		case XFER_UDMA_0:			if (chipset_family >= ATA_133) {				regdw |= 0x04;				regdw &= 0xfffff00f;				/* check if ATA133 enable */				if (regdw & 0x08) {					regdw |= (unsigned long)cycle_time_value[ATA_133-ATA_00][speed-XFER_UDMA_0] << 4;					regdw |= (unsigned long)cvs_time_value[ATA_133-ATA_00][speed-XFER_UDMA_0] << 8;				} else {				/* if ATA133 disable, we should not set speed above UDMA5 */					if (speed > XFER_UDMA_5)						speed = XFER_UDMA_5;					regdw |= (unsigned long)cycle_time_value[ATA_100-ATA_00][speed-XFER_UDMA_0] << 4;					regdw |= (unsigned long)cvs_time_value[ATA_100-ATA_00][speed-XFER_UDMA_0] << 8;				}				pci_write_config_dword(dev, (unsigned long)drive_pci, regdw);			} else {				/* Force the UDMA bit on if we want to use UDMA */				reg |= 0x80;				/* clean reg cycle time bits */				reg &= ~((0xFF >> (8 - cycle_time_range[chipset_family]))					 << cycle_time_offset[chipset_family]);				/* set reg cycle time bits */				reg |= cycle_time_value[chipset_family-ATA_00][speed-XFER_UDMA_0]					<< cycle_time_offset[chipset_family];				pci_write_config_byte(dev, drive_pci+1, reg);			}			break;		case XFER_MW_DMA_2:		case XFER_MW_DMA_1:		case XFER_MW_DMA_0:		case XFER_SW_DMA_2:		case XFER_SW_DMA_1:		case XFER_SW_DMA_0:			break;		case XFER_PIO_4: return((int) config_chipset_for_pio(drive, 4));		case XFER_PIO_3: return((int) config_chipset_for_pio(drive, 3));		case XFER_PIO_2: return((int) config_chipset_for_pio(drive, 2));		case XFER_PIO_1: return((int) config_chipset_for_pio(drive, 1));		case XFER_PIO_0:		default:	 return((int) config_chipset_for_pio(drive, 0));		}#ifdef DEBUG	sis5513_load_verify_registers(dev, "sis5513_tune_chipset end");#endif	return ((int) ide_config_drive_speed(drive, speed));}static void sis5513_tune_drive (ide_drive_t *drive, u8 pio){	(void) config_chipset_for_pio(drive, pio);}/* * ((id->hw_config & 0x4000|0x2000) && (HWIF(drive)->udma_four)) */static int config_chipset_for_dma (ide_drive_t *drive){	u8 speed	= ide_dma_speed(drive, sis5513_ratemask(drive));#ifdef DEBUG	printk("SIS5513: config_chipset_for_dma, drive %d, ultra %x\n",	       drive->dn, drive->id->dma_ultra);#endif	if (!(speed))		return 0;	sis5513_tune_chipset(drive, speed);	return ide_dma_enable(drive);}static int sis5513_config_drive_xfer_rate (ide_drive_t *drive){	ide_hwif_t *hwif	= HWIF(drive);	struct hd_driveid *id	= drive->id;	drive->init_speed = 0;	if ((id->capability & 1) && 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) {			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:		sis5513_tune_drive(drive, 5);		return hwif->ide_dma_off_quietly(drive);	}	return hwif->ide_dma_on(drive);}/* initiates/aborts (U)DMA read/write operations on a drive. */static int sis5513_config_xfer_rate (ide_drive_t *drive){	config_drive_art_rwp(drive);	config_art_rwp_pio(drive, 5);	return sis5513_config_drive_xfer_rate(drive);}/* Chip detection and general config */static unsigned int __init init_chipset_sis5513 (struct pci_dev *dev, const char *name){	struct pci_dev *host;	int i = 0;	/* Find the chip */	for (i = 0; i < ARRAY_SIZE(SiSHostChipInfo) && !host_dev; i++) {		host = pci_find_device (PCI_VENDOR_ID_SI,					SiSHostChipInfo[i].host_id,					NULL);		if (!host)			continue;		host_dev = host;		chipset_family = SiSHostChipInfo[i].chipset_family;			/* check 100/133 chipset family */		if (chipset_family == ATA_133) {			u32 reg54h;			u16 reg02h;			pci_read_config_dword(dev, 0x54, &reg54h);			pci_write_config_dword(dev, 0x54, (reg54h & 0x7fffffff));			pci_read_config_word(dev, 0x02, &reg02h);			pci_write_config_dword(dev, 0x54, reg54h);			/* devid 5518 here means SiS962 or later			   which supports ATA133 */			if (reg02h != 0x5518) {				u8 reg49h;				unsigned long sbrev;				/* SiS961 family */		/*		 * FIXME !!! GAK!!!!!!!!!! PCI DIRECT POKING 		 */				outl(0x80001008, 0x0cf8);				sbrev = inl(0x0cfc);				pci_read_config_byte(dev, 0x49, &reg49h);				if (((sbrev & 0xff) == 0x10) && (reg49h & 0x80))					chipset_family = ATA_133a;				else					chipset_family = ATA_100;			}		}		printk(SiSHostChipInfo[i].name);		printk("    %s controller", chipset_capability[chipset_family]);		printk("\n");#ifdef DEBUG		sis5513_print_registers(dev, "pci_init_sis5513 start");#endif		if (SiSHostChipInfo[i].flags & SIS5513_LATENCY) {			u8 latency = (chipset_family == ATA_100)? 0x80 : 0x10; /* Lacking specs */			pci_write_config_byte(dev, PCI_LATENCY_TIMER, latency);		}	}	/* Make general config ops here	   1/ tell IDE channels to operate in Compatibility mode only	   2/ tell old chips to allow per drive IDE timings */	if (host_dev) {		u8 reg;		u16 regw;		switch(chipset_family) {			case ATA_133:				/* SiS962 operation mode */				pci_read_config_word(dev, 0x50, &regw);				if (regw & 0x08)					pci_write_config_word(dev, 0x50, regw&0xfff7);				pci_read_config_word(dev, 0x52, &regw);				if (regw & 0x08)					pci_write_config_word(dev, 0x52, regw&0xfff7);				break;			case ATA_133a:			case ATA_100:				/* Set compatibility bit */				pci_read_config_byte(dev, 0x49, &reg);				if (!(reg & 0x01)) {					pci_write_config_byte(dev, 0x49, reg|0x01);				}				break;			case ATA_100a:			case ATA_66:				/* On ATA_66 chips the bit was elsewhere */				pci_read_config_byte(dev, 0x52, &reg);				if (!(reg & 0x04)) {					pci_write_config_byte(dev, 0x52, reg|0x04);				}				break;			case ATA_33:				/* On ATA_33 we didn't have a single bit to set */				pci_read_config_byte(dev, 0x09, &reg);				if ((reg & 0x0f) != 0x00) {					pci_write_config_byte(dev, 0x09, reg&0xf0);				}			case ATA_16:				/* force per drive recovery and active timings				   needed on ATA_33 and below chips */				pci_read_config_byte(dev, 0x52, &reg);				if (!(reg & 0x08)) {					pci_write_config_byte(dev, 0x52, reg|0x08);				}				break;			case ATA_00:			default: break;		}#if defined(DISPLAY_SIS_TIMINGS) && defined(CONFIG_PROC_FS)		if (!sis_proc) {			sis_proc = 1;			bmide_dev = dev;			ide_pci_register_host_proc(&sis_procs[0]);		}#endif	}#ifdef DEBUG	sis5513_load_verify_registers(dev, "pci_init_sis5513 end");#endif	return 0;}static unsigned int __init ata66_sis5513 (ide_hwif_t *hwif){	u8 ata66 = 0;	if (chipset_family >= ATA_133) {		u16 regw = 0;		u16 reg_addr = hwif->channel ? 0x52: 0x50;		pci_read_config_word(hwif->pci_dev, reg_addr, &regw);		ata66 = (regw & 0x8000) ? 0 : 1;	} else if (chipset_family >= ATA_66) {		u8 reg48h = 0;		u8 mask = hwif->channel ? 0x20 : 0x10;		pci_read_config_byte(hwif->pci_dev, 0x48, &reg48h);		ata66 = (reg48h & mask) ? 0 : 1;	}        return ata66;}static void __init init_hwif_sis5513 (ide_hwif_t *hwif){	hwif->autodma = 0;	if (!hwif->irq)		hwif->irq = hwif->channel ? 15 : 14;	hwif->tuneproc = &sis5513_tune_drive;	hwif->speedproc = &sis5513_tune_chipset;	if (!(hwif->dma_base)) {		hwif->drives[0].autotune = 1;		hwif->drives[1].autotune = 1;		return;	}	hwif->atapi_dma = 1;	hwif->ultra_mask = 0x7f;	hwif->mwdma_mask = 0x07;	hwif->swdma_mask = 0x07;	if (!host_dev)		return;	if (!(hwif->udma_four))		hwif->udma_four = ata66_sis5513(hwif);	if (chipset_family > ATA_16) {		hwif->ide_dma_check = &sis5513_config_xfer_rate;		if (!noautodma)			hwif->autodma = 1;	}	hwif->drives[0].autodma = hwif->autodma;	hwif->drives[1].autodma = hwif->autodma;	return;}static void __init init_dma_sis5513 (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 sis5513_init_one(struct pci_dev *dev, const struct pci_device_id *id){	ide_pci_device_t *d = &sis5513_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 sis5513_pci_tbl[] __devinitdata = {	{ PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5513, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},	{ 0, },};static struct pci_driver driver = {	.name		= "SIS IDE",	.id_table	= sis5513_pci_tbl,	.probe		= sis5513_init_one,};static int sis5513_ide_init(void){	return ide_pci_register_driver(&driver);}static void sis5513_ide_exit(void){	ide_pci_unregister_driver(&driver);}module_init(sis5513_ide_init);module_exit(sis5513_ide_exit);MODULE_AUTHOR("Lionel Bouton, L C Chang, Andre Hedrick");MODULE_DESCRIPTION("PCI driver module for SIS IDE");MODULE_LICENSE("GPL");EXPORT_NO_SYMBOLS;/* * TODO: *	- Get ridden of SisHostChipInfo[] completness dependancy. *	- Study drivers/ide/ide-timing.h. *	- Are there pre-ATA_16 SiS5513 chips ? -> tune init code for them *	  or remove ATA_00 define *	- More checks in the config registers (force values instead of *	  relying on the BIOS setting them correctly). *	- Further optimisations ? *	  . for example ATA66+ regs 0x48 & 0x4A */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
白白色 亚洲乱淫| 国产精品久久久久7777按摩| 久久久99久久精品欧美| 亚洲精品视频免费观看| 美女高潮久久久| 欧美体内she精高潮| 2020日本不卡一区二区视频| 亚洲国产成人高清精品| 成+人+亚洲+综合天堂| 精品卡一卡二卡三卡四在线| 亚洲欧美日韩久久| 国产麻豆欧美日韩一区| 5858s免费视频成人| 一区在线中文字幕| 国产成人精品一区二区三区四区| 91精品国产综合久久久久久漫画| 亚洲素人一区二区| 成人一区二区三区中文字幕| 日韩一区二区电影| 亚洲成精国产精品女| 91福利资源站| 亚洲黄网站在线观看| 成人av动漫网站| 亚洲国产精品激情在线观看| 久久66热偷产精品| 精品国产伦一区二区三区免费| 亚洲国产综合在线| 欧美日韩一区二区在线视频| 一区二区成人在线| 日本丰满少妇一区二区三区| 国产精品久久久久久久久免费相片| 国产精品一区久久久久| 精品国产电影一区二区| 精品一区二区在线免费观看| 日韩精品一区二区三区四区| 麻豆精品视频在线| 欧美大片免费久久精品三p| 免费精品视频在线| 日韩美女一区二区三区四区| 老司机精品视频线观看86| 日韩欧美电影一区| 国产一区二区三区免费看| 久久精品一二三| 成人不卡免费av| 亚洲欧洲综合另类| 欧美日韩精品专区| 久久99热这里只有精品| 久久色在线视频| 高清不卡一二三区| 亚洲欧美偷拍另类a∨色屁股| 97久久精品人人澡人人爽| 亚洲精品你懂的| 欧美日韩国产一区| 国内一区二区在线| 国产精品国产精品国产专区不蜜| 色狠狠色噜噜噜综合网| 婷婷成人综合网| 久久夜色精品一区| 99re这里只有精品首页| 亚洲va欧美va人人爽午夜| 日韩一卡二卡三卡国产欧美| 国产精品456露脸| 亚洲美女一区二区三区| 日韩欧美一级在线播放| 国产成人免费视频一区| 一区二区三区高清不卡| 精品久久久久久久一区二区蜜臀| 懂色av中文字幕一区二区三区| 怡红院av一区二区三区| 日韩精品中文字幕在线不卡尤物| 不卡一区二区在线| 日韩 欧美一区二区三区| 亚洲国产精品成人综合| 欧美精品乱码久久久久久按摩| 国产精品一区二区免费不卡 | 成人免费在线观看入口| 欧美日韩在线播| 丰满放荡岳乱妇91ww| 日韩专区在线视频| 日韩毛片精品高清免费| 日韩欧美在线1卡| 色域天天综合网| 国产在线精品免费| 亚洲国产日产av| 国产亚洲欧美一级| 宅男噜噜噜66一区二区66| 成人国产免费视频| 国内久久精品视频| 石原莉奈在线亚洲二区| 亚洲青青青在线视频| 国产亚洲精品福利| 日韩欧美自拍偷拍| 欧美三级电影精品| 91视频在线观看| 国产精品系列在线观看| 日本不卡高清视频| 亚洲影院理伦片| 综合中文字幕亚洲| 国产精品无人区| 久久精品人人做人人综合| 日韩欧美中文字幕一区| 欧美日韩五月天| 欧美自拍丝袜亚洲| 在线观看亚洲一区| 在线免费观看日韩欧美| 91女人视频在线观看| 欧洲亚洲精品在线| 国产91精品露脸国语对白| 国内精品国产成人国产三级粉色| 日韩精品一级中文字幕精品视频免费观看 | 精品国产露脸精彩对白| 91麻豆精品国产| 欧美区视频在线观看| 欧美午夜精品久久久久久孕妇| 成人涩涩免费视频| 成人黄页在线观看| 99视频精品全部免费在线| 成人黄色小视频在线观看| 懂色av一区二区三区蜜臀| 国产精品中文字幕一区二区三区| 久久成人av少妇免费| 激情久久五月天| 国产精品资源在线看| 国产成人综合网站| 成人av在线影院| 99国产欧美久久久精品| 日本电影欧美片| 777午夜精品视频在线播放| 91精品国产综合久久精品app| 欧美理论电影在线| 日韩免费观看高清完整版| 2021中文字幕一区亚洲| 亚洲国产精品av| 一区二区在线电影| 视频一区二区国产| 精品一区二区三区视频| 国产综合色产在线精品| 成人黄色免费短视频| 在线观看亚洲a| 日韩精品一区二区三区中文精品| 久久久久久久久久久久久久久99 | 欧美一区二区网站| 精品福利一区二区三区| 国产精品色哟哟网站| 一区二区三区成人| 麻豆精品新av中文字幕| 不卡av电影在线播放| 884aa四虎影成人精品一区| 久久久高清一区二区三区| 亚洲欧美一区二区三区孕妇| 日韩国产高清在线| 国产aⅴ综合色| 欧美日韩视频第一区| 久久久久久久综合色一本| 麻豆成人久久精品二区三区红| 国产一区二区精品久久91| 色哟哟日韩精品| 精品少妇一区二区三区免费观看 | 最新国产精品久久精品| 午夜伦欧美伦电影理论片| 国产成人小视频| 欧美色网一区二区| 国产情人综合久久777777| 亚洲影视资源网| 成人av集中营| 久久这里只有精品视频网| 亚洲国产欧美一区二区三区丁香婷| 久久国产人妖系列| 欧美日韩一区二区三区在线看| 国产欧美精品一区二区色综合朱莉 | 欧美三电影在线| 亚洲国产成人私人影院tom| 日韩中文字幕亚洲一区二区va在线| 国产精品一区二区不卡| 欧美日产国产精品| 亚洲欧美偷拍三级| 成人综合激情网| 精品久久久久久久久久久院品网 | 欧美日韩免费不卡视频一区二区三区| 久久精品视频一区二区三区| 天天综合天天做天天综合| 一本色道久久综合亚洲精品按摩 | 国产一区不卡视频| 9191精品国产综合久久久久久| 亚洲乱码国产乱码精品精98午夜| 国产美女视频91| 337p粉嫩大胆色噜噜噜噜亚洲| 污片在线观看一区二区 | 成人福利视频在线看| 久久久久久夜精品精品免费| 开心九九激情九九欧美日韩精美视频电影| 91啪亚洲精品| 亚洲日本电影在线| 91在线观看美女| 亚洲欧美另类久久久精品2019| 成人免费毛片aaaaa**| 中文字幕精品三区| youjizz久久| 亚洲人成小说网站色在线| 91色在线porny|