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

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

?? ht6560b.c

?? 一個2.4.21版本的嵌入式linux內核
?? C
字號:
/* *  linux/drivers/ide/legacy/ht6560b.c		Version 0.07	Feb  1, 2000 * *  Copyright (C) 1995-2000  Linus Torvalds & author (see below) *//* * *  Version 0.01        Initial version hacked out of ide.c * *  Version 0.02        Added support for PIO modes, auto-tune * *  Version 0.03        Some cleanups * *  Version 0.05        PIO mode cycle timings auto-tune using bus-speed * *  Version 0.06        Prefetch mode now defaults no OFF. To set *                      prefetch mode OFF/ON use "hdparm -p8/-p9". *                      Unmask irq is disabled when prefetch mode *                      is enabled. * *  Version 0.07        Trying to fix CD-ROM detection problem. *                      "Prefetch" mode bit OFF for ide disks and *                      ON for anything else. * * *  HT-6560B EIDE-controller support *  To activate controller support use kernel parameter "ide0=ht6560b". *  Use hdparm utility to enable PIO mode support. * *  Author:    Mikko Ala-Fossi            <maf@iki.fi> *             Jan Evert van Grootheest   <janevert@iae.nl> * *  Try:  http://www.maf.iki.fi/~maf/ht6560b/ */#define HT6560B_VERSION "v0.07"#undef REALLY_SLOW_IO		/* most systems can safely undef this */#include <linux/module.h>#include <linux/config.h>#include <linux/types.h>#include <linux/kernel.h>#include <linux/delay.h>#include <linux/timer.h>#include <linux/mm.h>#include <linux/ioport.h>#include <linux/blkdev.h>#include <linux/hdreg.h>#include <linux/ide.h>#include <linux/init.h>#include <asm/io.h>#ifdef CONFIG_BLK_DEV_HT6560B_MODULE# define _IDE_C# include "ide_modes.h"# undef _IDE_C#else# include "ide_modes.h"#endif /* CONFIG_BLK_DEV_HT6560B_MODULE *//* #define DEBUG */  /* remove comments for DEBUG messages *//* * The special i/o-port that HT-6560B uses to configuration: *    bit0 (0x01): "1" selects secondary interface *    bit2 (0x04): "1" enables FIFO function *    bit5 (0x20): "1" enables prefetched data read function  (???) * * The special i/o-port that HT-6560A uses to configuration: *    bit0 (0x01): "1" selects secondary interface *    bit1 (0x02): "1" enables prefetched data read function *    bit2 (0x04): "0" enables multi-master system	      (?) *    bit3 (0x08): "1" 3 cycle time, "0" 2 cycle time	      (?) */#define HT_CONFIG_PORT	  0x3e6#define HT_CONFIG(drivea) (u8)(((drivea)->drive_data & 0xff00) >> 8)/* * FIFO + PREFETCH (both a/b-model) */#define HT_CONFIG_DEFAULT 0x1c /* no prefetch *//* #define HT_CONFIG_DEFAULT 0x3c */ /* with prefetch */#define HT_SECONDARY_IF	  0x01#define HT_PREFETCH_MODE  0x20/* * ht6560b Timing values: * * I reviewed some assembler source listings of htide drivers and found * out how they setup those cycle time interfacing values, as they at Holtek * call them. IDESETUP.COM that is supplied with the drivers figures out * optimal values and fetches those values to drivers. I found out that * they use IDE_SELECT_REG to fetch timings to the ide board right after * interface switching. After that it was quite easy to add code to * ht6560b.c. * * IDESETUP.COM gave me values 0x24, 0x45, 0xaa, 0xff that worked fine * for hda and hdc. But hdb needed higher values to work, so I guess * that sometimes it is necessary to give higher value than IDESETUP * gives.   [see cmd640.c for an extreme example of this. -ml] * * Perhaps I should explain something about these timing values: * The higher nibble of value is the Recovery Time  (rt) and the lower nibble * of the value is the Active Time  (at). Minimum value 2 is the fastest and * the maximum value 15 is the slowest. Default values should be 15 for both. * So 0x24 means 2 for rt and 4 for at. Each of the drives should have * both values, and IDESETUP gives automatically rt=15 st=15 for CDROMs or * similar. If value is too small there will be all sorts of failures. * * Timing byte consists of *	High nibble:  Recovery Cycle Time  (rt) *	     The valid values range from 2 to 15. The default is 15. * *	Low nibble:   Active Cycle Time	   (at) *	     The valid values range from 2 to 15. The default is 15. * * You can obtain optimized timing values by running Holtek IDESETUP.COM * for DOS. DOS drivers get their timing values from command line, where * the first value is the Recovery Time and the second value is the * Active Time for each drive. Smaller value gives higher speed. * In case of failures you should probably fall back to a higher value. */#define HT_TIMING(drivea) (u8)((drivea)->drive_data & 0x00ff)#define HT_TIMING_DEFAULT 0xff/* * This routine handles interface switching for the peculiar hardware design * on the F.G.I./Holtek HT-6560B VLB IDE interface. * The HT-6560B can only enable one IDE port at a time, and requires a * silly sequence (below) whenever we switch between primary and secondary. *//* * This routine is invoked from ide.c to prepare for access to a given drive. */static void ht6560b_selectproc (ide_drive_t *drive){	unsigned long flags;	static u8 current_select = 0;	static u8 current_timing = 0;	u8 select, timing;		local_irq_save(flags);		select = HT_CONFIG(drive);	timing = HT_TIMING(drive);		if (select != current_select || timing != current_timing) {		current_select = select;		current_timing = timing;		if (drive->media != ide_disk || !drive->present)			select |= HT_PREFETCH_MODE;		(void) HWIF(drive)->INB(HT_CONFIG_PORT);		(void) HWIF(drive)->INB(HT_CONFIG_PORT);		(void) HWIF(drive)->INB(HT_CONFIG_PORT);		(void) HWIF(drive)->INB(HT_CONFIG_PORT);		HWIF(drive)->OUTB(select, HT_CONFIG_PORT);		/*		 * Set timing for this drive:		 */		HWIF(drive)->OUTB(timing, IDE_SELECT_REG);		(void) HWIF(drive)->INB(IDE_STATUS_REG);#ifdef DEBUG		printk("ht6560b: %s: select=%#x timing=%#x\n",			drive->name, select, timing);#endif	}	local_irq_restore(flags);}/* * Autodetection and initialization of ht6560b */static int __init try_to_init_ht6560b(void){	u8 orig_value;	int i;		/* Autodetect ht6560b */	if ((orig_value = inb(HT_CONFIG_PORT)) == 0xff)		return 0;		for (i=3;i>0;i--) {		outb(0x00, HT_CONFIG_PORT);		if (!( (~inb(HT_CONFIG_PORT)) & 0x3f )) {			outb(orig_value, HT_CONFIG_PORT);			return 0;		}	}	outb(0x00, HT_CONFIG_PORT);	if ((~inb(HT_CONFIG_PORT))& 0x3f) {		outb(orig_value, HT_CONFIG_PORT);		return 0;	}	/*	 * Ht6560b autodetected	 */	outb(HT_CONFIG_DEFAULT, HT_CONFIG_PORT);	outb(HT_TIMING_DEFAULT, 0x1f6);  /* IDE_SELECT_REG */	(void) inb(0x1f7);               /* IDE_STATUS_REG */		printk("\nht6560b " HT6560B_VERSION	       ": chipset detected and initialized"#ifdef DEBUG	       " with debug enabled"#endif		);	return 1;}static u8 ht_pio2timings(ide_drive_t *drive, u8 pio){	int active_time, recovery_time;	int active_cycles, recovery_cycles;	ide_pio_data_t d;	int bus_speed = system_bus_clock();	        if (pio) {		pio = ide_get_best_pio_mode(drive, pio, 5, &d);				/*		 *  Just like opti621.c we try to calculate the		 *  actual cycle time for recovery and activity		 *  according system bus speed.		 */		active_time = ide_pio_timings[pio].active_time;		recovery_time = d.cycle_time 			- active_time			- ide_pio_timings[pio].setup_time;		/*		 *  Cycle times should be Vesa bus cycles		 */		active_cycles   = (active_time   * bus_speed + 999) / 1000;		recovery_cycles = (recovery_time * bus_speed + 999) / 1000;		/*		 *  Upper and lower limits		 */		if (active_cycles   < 2)  active_cycles   = 2;		if (recovery_cycles < 2)  recovery_cycles = 2;		if (active_cycles   > 15) active_cycles   = 15;		if (recovery_cycles > 15) recovery_cycles = 0;  /* 0==16 */		#ifdef DEBUG		printk("ht6560b: drive %s setting pio=%d recovery=%d (%dns) active=%d (%dns)\n", drive->name, pio, recovery_cycles, recovery_time, active_cycles, active_time);#endif				return (u8)((recovery_cycles << 4) | active_cycles);	} else {		#ifdef DEBUG		printk("ht6560b: drive %s setting pio=0\n", drive->name);#endif				return HT_TIMING_DEFAULT;    /* default setting */	}}/* *  Enable/Disable so called prefetch mode */static void ht_set_prefetch(ide_drive_t *drive, u8 state){	unsigned long flags;	int t = HT_PREFETCH_MODE << 8;		spin_lock_irqsave(&io_request_lock, flags);		/*	 *  Prefetch mode and unmask irq seems to conflict	 */	if (state) {		drive->drive_data |= t;   /* enable prefetch mode */		drive->no_unmask = 1;		drive->unmask = 0;	} else {		drive->drive_data &= ~t;  /* disable prefetch mode */		drive->no_unmask = 0;	}		spin_unlock_irqrestore(&io_request_lock, flags);	#ifdef DEBUG	printk("ht6560b: drive %s prefetch mode %sabled\n", drive->name, (state ? "en" : "dis"));#endif}static void tune_ht6560b (ide_drive_t *drive, u8 pio){	unsigned long flags;	u8 timing;		switch (pio) {	case 8:         /* set prefetch off */	case 9:         /* set prefetch on */		ht_set_prefetch(drive, pio & 1);		return;	}		timing = ht_pio2timings(drive, pio);		spin_lock_irqsave(&io_request_lock, flags);		drive->drive_data &= 0xff00;	drive->drive_data |= timing;		spin_unlock_irqrestore(&io_request_lock, flags);	#ifdef DEBUG	printk("ht6560b: drive %s tuned to pio mode %#x timing=%#x\n", drive->name, pio, timing);#endif}void __init probe_ht6560b (void){	int t;		request_region(HT_CONFIG_PORT, 1, ide_hwifs[0].name);	ide_hwifs[0].chipset = ide_ht6560b;	ide_hwifs[1].chipset = ide_ht6560b;	ide_hwifs[0].selectproc = &ht6560b_selectproc;	ide_hwifs[1].selectproc = &ht6560b_selectproc;	ide_hwifs[0].tuneproc = &tune_ht6560b;	ide_hwifs[1].tuneproc = &tune_ht6560b;	ide_hwifs[0].serialized = 1;  /* is this needed? */	ide_hwifs[1].serialized = 1;  /* is this needed? */	ide_hwifs[0].mate = &ide_hwifs[1];	ide_hwifs[1].mate = &ide_hwifs[0];	ide_hwifs[1].channel = 1;				/*	 * Setting default configurations for drives	 */	t = (HT_CONFIG_DEFAULT << 8);	t |= HT_TIMING_DEFAULT;	ide_hwifs[0].drives[0].drive_data = t;	ide_hwifs[0].drives[1].drive_data = t;	t |= (HT_SECONDARY_IF << 8);	ide_hwifs[1].drives[0].drive_data = t;	ide_hwifs[1].drives[1].drive_data = t;#ifndef HWIF_PROBE_CLASSIC_METHOD	probe_hwif_init(&ide_hwifs[0]);	probe_hwif_init(&ide_hwifs[1]);#endif /* HWIF_PROBE_CLASSIC_METHOD */}void __init ht6560b_release (void){	if (ide_hwifs[0].chipset != ide_ht6560b &&	    ide_hwifs[1].chipset != ide_ht6560b)                return;	ide_hwifs[0].chipset = ide_unknown;	ide_hwifs[1].chipset = ide_unknown;	ide_hwifs[0].tuneproc = NULL;	ide_hwifs[1].tuneproc = NULL;	ide_hwifs[0].selectproc = NULL;	ide_hwifs[1].selectproc = NULL;	ide_hwifs[0].serialized = 0;	ide_hwifs[1].serialized = 0;	ide_hwifs[0].mate = NULL;	ide_hwifs[1].mate = NULL;	ide_hwifs[0].drives[0].drive_data = 0;	ide_hwifs[0].drives[1].drive_data = 0;	ide_hwifs[1].drives[0].drive_data = 0;	ide_hwifs[1].drives[1].drive_data = 0;	release_region(HT_CONFIG_PORT, 1);}#ifndef MODULE/* * init_ht6560b: * * called by ide.c when parsing command line */void __init init_ht6560b (void){	if (check_region(HT_CONFIG_PORT,1)) {		printk(KERN_NOTICE "%s: HT_CONFIG_PORT not found\n",			__FUNCTION__);		return;	}	if (!try_to_init_ht6560b()) {                printk(KERN_NOTICE "%s: HBA not found\n", __FUNCTION__);		return;	}	probe_ht6560b();}#elseMODULE_AUTHOR("See Local File");MODULE_DESCRIPTION("HT-6560B EIDE-controller support");MODULE_LICENSE("GPL");int __init ht6560b_mod_init(void){	if (check_region(HT_CONFIG_PORT,1)) {		printk(KERN_NOTICE "%s: HT_CONFIG_PORT not found\n",			__FUNCTION__);		return -ENODEV;	}	if (!try_to_init_ht6560b()) {		printk(KERN_NOTICE "%s: HBA not found\n", __FUNCTION__);		return -ENODEV;	}	probe_ht6560b();        if (ide_hwifs[0].chipset != ide_ht6560b &&            ide_hwifs[1].chipset != ide_ht6560b) {                ht6560b_release();                return -ENODEV;        }        return 0;}module_init(ht6560b_mod_init);void __init ht6560b_mod_exit(void){        ht6560b_release();}module_exit(ht6560b_mod_exit);#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av资源下载| 成人在线一区二区三区| 欧美一区日韩一区| 日韩电影在线免费看| 欧美mv和日韩mv国产网站| 国产在线精品一区二区夜色| 国产区在线观看成人精品| thepron国产精品| 亚洲高清免费观看 | 国产成人超碰人人澡人人澡| 国产日产亚洲精品系列| 色哟哟一区二区三区| 亚洲一区二区成人在线观看| 7777精品伊人久久久大香线蕉的| 久久国产精品99精品国产| 亚洲国产高清在线| 欧美日韩综合在线| 国产精品18久久久久久久久| 亚洲久草在线视频| 日韩精品一区二区三区中文不卡 | 欧美亚洲自拍偷拍| 蜜芽一区二区三区| 中文字幕在线不卡一区二区三区| 欧美日韩国产精品成人| 在线精品视频免费观看| 亚洲成人一区二区| 精品日韩欧美一区二区| 99久久久无码国产精品| 视频一区视频二区在线观看| 久久综合久久综合久久综合| 色婷婷久久一区二区三区麻豆| 男女性色大片免费观看一区二区| 国产精品免费观看视频| 91麻豆精品国产91久久久资源速度 | 成人美女在线视频| 日韩经典中文字幕一区| 国产精品美女久久久久久2018| 欧美日韩色综合| 成人激情小说乱人伦| 日韩高清不卡在线| 亚洲视频免费看| 久久综合色婷婷| 国产精品乱人伦| 欧美日韩电影在线| 国产精品一区二区三区四区 | 一本色道久久加勒比精品| 美国十次综合导航| 一区二区三区精品视频在线| 国产欧美视频一区二区三区| 9191久久久久久久久久久| 色视频欧美一区二区三区| 国产精品一级二级三级| 麻豆精品视频在线观看视频| 亚洲影院在线观看| 亚洲精品一二三| 国产精品第13页| 国产精品美女久久久久久| 久久亚洲二区三区| 欧美videos大乳护士334| 欧美一区日韩一区| 91精品国产高清一区二区三区蜜臀| 91美女片黄在线观看91美女| 成人av电影在线观看| 日本午夜一本久久久综合| 图片区日韩欧美亚洲| 亚洲国产精品成人综合| 久久一区二区三区四区| 日韩欧美亚洲一区二区| 欧美一级二级在线观看| 在线综合视频播放| 51精品国自产在线| 在线不卡免费欧美| 欧美一级高清片在线观看| 在线不卡中文字幕播放| 在线不卡中文字幕| 91精品午夜视频| 日韩精品一区二区三区三区免费| 日韩视频一区二区三区在线播放| 欧美男生操女生| 日韩一区二区精品在线观看| 欧美大片拔萝卜| 久久午夜羞羞影院免费观看| 国产人久久人人人人爽| 中文字幕av一区二区三区| 一区在线观看免费| 亚洲美女电影在线| 亚洲精品高清在线| 视频一区二区三区入口| 国产馆精品极品| 国内精品在线播放| 国产精品亚洲午夜一区二区三区 | 日韩一区二区精品| 欧美视频一区二区三区在线观看| 91免费观看国产| 久久午夜色播影院免费高清| 亚洲电影欧美电影有声小说| 久久久夜色精品亚洲| 国产三级三级三级精品8ⅰ区| 国产片一区二区| 一区二区三区日韩精品| 婷婷激情综合网| 国产一区二区91| 极品瑜伽女神91| 国产一区美女在线| 成人午夜视频网站| 欧美做爰猛烈大尺度电影无法无天| 欧美日高清视频| 精品国产乱码久久久久久浪潮 | 欧美亚洲国产bt| 日韩一区二区三区视频| 欧美激情综合网| 婷婷久久综合九色综合绿巨人| 国产一区二区在线电影| 色老汉一区二区三区| 日韩午夜激情免费电影| 日本一区二区三区国色天香| 亚欧色一区w666天堂| 国产高清视频一区| 欧美日韩一级片在线观看| 久久久久久97三级| 午夜电影久久久| 国产激情一区二区三区| 91丨porny丨最新| 欧美精品一区二| 国产精品久久久久久久久搜平片 | 丰满岳乱妇一区二区三区| 91久久精品日日躁夜夜躁欧美| 日韩欧美第一区| 亚洲女爱视频在线| 激情五月激情综合网| 欧美性xxxxx极品少妇| 久久综合九色综合97婷婷女人| 亚洲国产一区二区在线播放| 成人国产精品免费观看动漫| 日韩精品一区二区三区视频在线观看| 一区二区三区国产豹纹内裤在线| 国产精品一区二区三区乱码| 日韩视频在线一区二区| 亚洲国产成人av网| 91首页免费视频| 欧美高清在线精品一区| 久久99精品久久久久久久久久久久| 在线观看日韩高清av| 中文字幕精品一区二区精品绿巨人 | 色丁香久综合在线久综合在线观看| www亚洲一区| 日本一不卡视频| 欧美日韩美女一区二区| 国产一区二区在线观看视频| 欧美精品九九99久久| 亚洲精选一二三| 91丨九色丨黑人外教| 国产精品久久久久久久久搜平片| 国产成人在线影院| 精品精品欲导航| 九九视频精品免费| 欧美成人一区二区三区在线观看| 日韩精品电影一区亚洲| 欧美探花视频资源| 亚洲午夜久久久久| 欧美日韩一级二级| 亚洲成精国产精品女| 欧美在线不卡一区| 午夜激情综合网| 欧美一级国产精品| 久久精品国产久精国产爱| 精品久久免费看| 国产电影精品久久禁18| 久久久亚洲精品一区二区三区| 韩国av一区二区三区四区| 国产婷婷色一区二区三区在线| 国产一区二区三区日韩| 国产日产欧美一区二区视频| 高清成人在线观看| 国产精品天美传媒沈樵| 成人av在线网站| 亚洲精品国产一区二区精华液| 欧美主播一区二区三区美女| 午夜伦理一区二区| 欧美一级夜夜爽| 国产精品一区专区| 亚洲视频每日更新| 欧美色手机在线观看| 日本vs亚洲vs韩国一区三区二区| 精品国产乱码久久| 成人免费精品视频| 亚洲国产日韩在线一区模特| 在线电影欧美成精品| 国产一区二三区| 亚洲欧洲99久久| 欧美日韩和欧美的一区二区| 久久精品99国产精品| 国产精品丝袜在线| 精品视频一区三区九区| 精品亚洲成a人| 中文字幕在线播放不卡一区| 欧美日韩大陆在线| 国产传媒日韩欧美成人| 亚洲久本草在线中文字幕| 欧美一区三区二区|