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

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

?? ide-features.c

?? linux和2410結合開發 用他可以生成2410所需的zImage文件
?? C
字號:
/* * linux/drivers/block/ide-features.c	Version 0.04	June 9, 2000 * *  Copyright (C) 1999-2000	Linus Torvalds & authors (see below) *   *  Copyright (C) 1999-2000	Andre Hedrick <andre@linux-ide.org> * *  Extracts if ide.c to address the evolving transfer rate code for *  the SETFEATURES_XFER callouts.  Various parts of any given function *  are credited to previous ATA-IDE maintainers. * *  Auto-CRC downgrade for Ultra DMA(ing) * *  May be copied or modified under the terms of the GNU General Public License */#include <linux/config.h>#define __NO_VERSION__#include <linux/module.h>#include <linux/types.h>#include <linux/string.h>#include <linux/kernel.h>#include <linux/timer.h>#include <linux/mm.h>#include <linux/interrupt.h>#include <linux/major.h>#include <linux/errno.h>#include <linux/genhd.h>#include <linux/blkpg.h>#include <linux/slab.h>#include <linux/pci.h>#include <linux/delay.h>#include <linux/hdreg.h>#include <linux/ide.h>#include <asm/byteorder.h>#include <asm/irq.h>#include <asm/uaccess.h>#include <asm/io.h>#include <asm/bitops.h>/* * A Verbose noise maker for debugging on the attempted transfer rates. */char *ide_xfer_verbose (byte xfer_rate){	switch(xfer_rate) {		case XFER_UDMA_7:	return("UDMA 7");		case XFER_UDMA_6:	return("UDMA 6");		case XFER_UDMA_5:	return("UDMA 5");		case XFER_UDMA_4:	return("UDMA 4");		case XFER_UDMA_3:	return("UDMA 3");		case XFER_UDMA_2:	return("UDMA 2");		case XFER_UDMA_1:	return("UDMA 1");		case XFER_UDMA_0:	return("UDMA 0");		case XFER_MW_DMA_2:	return("MW DMA 2");		case XFER_MW_DMA_1:	return("MW DMA 1");		case XFER_MW_DMA_0:	return("MW DMA 0");		case XFER_SW_DMA_2:	return("SW DMA 2");		case XFER_SW_DMA_1:	return("SW DMA 1");		case XFER_SW_DMA_0:	return("SW DMA 0");		case XFER_PIO_4:	return("PIO 4");		case XFER_PIO_3:	return("PIO 3");		case XFER_PIO_2:	return("PIO 2");		case XFER_PIO_1:	return("PIO 1");		case XFER_PIO_0:	return("PIO 0");		case XFER_PIO_SLOW:	return("PIO SLOW");		default:		return("XFER ERROR");	}}/* * */char *ide_media_verbose (ide_drive_t *drive){	switch (drive->media) {		case ide_scsi:		return("scsi   ");		case ide_disk:		return("disk   ");		case ide_optical:	return("optical");		case ide_cdrom:		return("cdrom  ");		case ide_tape:		return("tape   ");		case ide_floppy:	return("floppy ");		default:		return("???????");	}}/* * A Verbose noise maker for debugging on the attempted dmaing calls. */char *ide_dmafunc_verbose (ide_dma_action_t dmafunc){	switch (dmafunc) {		case ide_dma_read:		return("ide_dma_read");		case ide_dma_write:		return("ide_dma_write");		case ide_dma_begin:		return("ide_dma_begin");		case ide_dma_end:		return("ide_dma_end:");		case ide_dma_check:		return("ide_dma_check");		case ide_dma_on:		return("ide_dma_on");		case ide_dma_off:		return("ide_dma_off");		case ide_dma_off_quietly:	return("ide_dma_off_quietly");		case ide_dma_test_irq:		return("ide_dma_test_irq");		case ide_dma_bad_drive:		return("ide_dma_bad_drive");		case ide_dma_good_drive:	return("ide_dma_good_drive");		case ide_dma_verbose:		return("ide_dma_verbose");		case ide_dma_retune:		return("ide_dma_retune");		case ide_dma_lostirq:		return("ide_dma_lostirq");		case ide_dma_timeout:		return("ide_dma_timeout");		default:			return("unknown");	}}/* * */byte ide_auto_reduce_xfer (ide_drive_t *drive){	if (!drive->crc_count)		return drive->current_speed;	drive->crc_count = 0;	switch(drive->current_speed) {		case XFER_UDMA_7:	return XFER_UDMA_6;		case XFER_UDMA_6:	return XFER_UDMA_5;		case XFER_UDMA_5:	return XFER_UDMA_4;		case XFER_UDMA_4:	return XFER_UDMA_3;		case XFER_UDMA_3:	return XFER_UDMA_2;		case XFER_UDMA_2:	return XFER_UDMA_1;		case XFER_UDMA_1:	return XFER_UDMA_0;		case XFER_UDMA_0:			if (drive->id->dma_mword & 0x0004) return XFER_MW_DMA_2;			else if (drive->id->dma_mword & 0x0002) return XFER_MW_DMA_1;			else if (drive->id->dma_mword & 0x0001) return XFER_MW_DMA_0;			else return XFER_PIO_4;		case XFER_MW_DMA_2:	return XFER_MW_DMA_1;		case XFER_MW_DMA_1:	return XFER_MW_DMA_0;		case XFER_MW_DMA_0:			if (drive->id->dma_1word & 0x0004) return XFER_SW_DMA_2;			else if (drive->id->dma_1word & 0x0002) return XFER_SW_DMA_1;			else if (drive->id->dma_1word & 0x0001) return XFER_SW_DMA_0;			else return XFER_PIO_4;		case XFER_SW_DMA_2:	return XFER_SW_DMA_1;		case XFER_SW_DMA_1:	return XFER_SW_DMA_0;		case XFER_SW_DMA_0:			{				return XFER_PIO_4;			}		case XFER_PIO_4:	return XFER_PIO_3;		case XFER_PIO_3:	return XFER_PIO_2;		case XFER_PIO_2:	return XFER_PIO_1;		case XFER_PIO_1:	return XFER_PIO_0;		case XFER_PIO_0:		default:		return XFER_PIO_SLOW;	}}/* * Update the  */int ide_driveid_update (ide_drive_t *drive){	/*	 * Re-read drive->id for possible DMA mode	 * change (copied from ide-probe.c)	 */	struct hd_driveid *id;	unsigned long timeout, flags;	SELECT_MASK(HWIF(drive), drive, 1);	if (IDE_CONTROL_REG)		OUT_BYTE(drive->ctl,IDE_CONTROL_REG);	ide_delay_50ms();	OUT_BYTE(WIN_IDENTIFY, IDE_COMMAND_REG);	timeout = jiffies + WAIT_WORSTCASE;	do {		if (0 < (signed long)(jiffies - timeout)) {			SELECT_MASK(HWIF(drive), drive, 0);			return 0;	/* drive timed-out */		}		ide_delay_50ms();	/* give drive a breather */	} while (IN_BYTE(IDE_ALTSTATUS_REG) & BUSY_STAT);	ide_delay_50ms();	/* wait for IRQ and DRQ_STAT */	if (!OK_STAT(GET_STAT(),DRQ_STAT,BAD_R_STAT)) {		SELECT_MASK(HWIF(drive), drive, 0);		printk("%s: CHECK for good STATUS\n", drive->name);		return 0;	}	__save_flags(flags);	/* local CPU only */	__cli();		/* local CPU only; some systems need this */	SELECT_MASK(HWIF(drive), drive, 0);	id = kmalloc(SECTOR_WORDS*4, GFP_ATOMIC);	if (!id) {		__restore_flags(flags);	/* local CPU only */		return 0;	}	ide_input_data(drive, id, SECTOR_WORDS);	(void) GET_STAT();	/* clear drive IRQ */	ide__sti();		/* local CPU only */	__restore_flags(flags);	/* local CPU only */	ide_fix_driveid(id);	if (id) {		drive->id->dma_ultra = id->dma_ultra;		drive->id->dma_mword = id->dma_mword;		drive->id->dma_1word = id->dma_1word;		/* anything more ? */		kfree(id);	}	return 1;}/* * Verify that we are doing an approved SETFEATURES_XFER with respect * to the hardware being able to support request.  Since some hardware * can improperly report capabilties, we check to see if the host adapter * in combination with the device (usually a disk) properly detect * and acknowledge each end of the ribbon. */int ide_ata66_check (ide_drive_t *drive, byte cmd, byte nsect, byte feature){	if ((cmd == WIN_SETFEATURES) &&	    (nsect > XFER_UDMA_2) &&	    (feature == SETFEATURES_XFER)) {		if (!HWIF(drive)->udma_four) {			printk("%s: Speed warnings UDMA 3/4/5 is not functional.\n", HWIF(drive)->name);			return 1;		}#ifndef CONFIG_IDEDMA_IVB		if ((drive->id->hw_config & 0x6000) == 0) {#else /* !CONFIG_IDEDMA_IVB */		if (((drive->id->hw_config & 0x2000) == 0) ||		    ((drive->id->hw_config & 0x4000) == 0)) {#endif /* CONFIG_IDEDMA_IVB */			printk("%s: Speed warnings UDMA 3/4/5 is not functional.\n", drive->name);			return 1;		}	}	return 0;}/* * Backside of HDIO_DRIVE_CMD call of SETFEATURES_XFER. * 1 : Safe to update drive->id DMA registers. * 0 : OOPs not allowed. */int set_transfer (ide_drive_t *drive, byte cmd, byte nsect, byte feature){	if ((cmd == WIN_SETFEATURES) &&	    (nsect >= XFER_SW_DMA_0) &&	    (feature == SETFEATURES_XFER) &&	    (drive->id->dma_ultra ||	     drive->id->dma_mword ||	     drive->id->dma_1word))		return 1;	return 0;}/* *  All hosts that use the 80c ribbon mus use! */byte eighty_ninty_three (ide_drive_t *drive){	return ((byte) ((HWIF(drive)->udma_four) &&#ifndef CONFIG_IDEDMA_IVB			(drive->id->hw_config & 0x4000) &&#endif /* CONFIG_IDEDMA_IVB */			(drive->id->hw_config & 0x6000)) ? 1 : 0);}/* * Similar to ide_wait_stat(), except it never calls ide_error internally. * This is a kludge to handle the new ide_config_drive_speed() function, * and should not otherwise be used anywhere.  Eventually, the tuneproc's * should be updated to return ide_startstop_t, in which case we can get * rid of this abomination again.  :)   -ml * * It is gone.......... * * const char *msg == consider adding for verbose errors. */int ide_config_drive_speed (ide_drive_t *drive, byte speed){	ide_hwif_t *hwif = HWIF(drive);	int	i, error = 1;	byte stat;#if defined(CONFIG_BLK_DEV_IDEDMA) && !defined(CONFIG_DMA_NONPCI)	byte unit = (drive->select.b.unit & 0x01);	outb(inb(hwif->dma_base+2) & ~(1<<(5+unit)), hwif->dma_base+2);#endif /* (CONFIG_BLK_DEV_IDEDMA) && !(CONFIG_DMA_NONPCI) */	/*	 * Don't use ide_wait_cmd here - it will	 * attempt to set_geometry and recalibrate,	 * but for some reason these don't work at	 * this point (lost interrupt).	 */        /*         * Select the drive, and issue the SETFEATURES command         */	disable_irq(hwif->irq);	/* disable_irq_nosync ?? */	udelay(1);	SELECT_DRIVE(HWIF(drive), drive);	SELECT_MASK(HWIF(drive), drive, 0);	udelay(1);	if (IDE_CONTROL_REG)		OUT_BYTE(drive->ctl | 2, IDE_CONTROL_REG);	OUT_BYTE(speed, IDE_NSECTOR_REG);	OUT_BYTE(SETFEATURES_XFER, IDE_FEATURE_REG);	OUT_BYTE(WIN_SETFEATURES, IDE_COMMAND_REG);	if ((IDE_CONTROL_REG) && (drive->quirk_list == 2))		OUT_BYTE(drive->ctl, IDE_CONTROL_REG);	udelay(1);	/*	 * Wait for drive to become non-BUSY	 */	if ((stat = GET_STAT()) & BUSY_STAT) {		unsigned long flags, timeout;		__save_flags(flags);	/* local CPU only */		ide__sti();		/* local CPU only -- for jiffies */		timeout = jiffies + WAIT_CMD;		while ((stat = GET_STAT()) & BUSY_STAT) {			if (0 < (signed long)(jiffies - timeout))				break;		}		__restore_flags(flags); /* local CPU only */	}	/*	 * Allow status to settle, then read it again.	 * A few rare drives vastly violate the 400ns spec here,	 * so we'll wait up to 10usec for a "good" status	 * rather than expensively fail things immediately.	 * This fix courtesy of Matthew Faupel & Niccolo Rigacci.	 */	for (i = 0; i < 10; i++) {		udelay(1);		if (OK_STAT((stat = GET_STAT()), DRIVE_READY, BUSY_STAT|DRQ_STAT|ERR_STAT)) {			error = 0;			break;		}	}	SELECT_MASK(HWIF(drive), drive, 0);	enable_irq(hwif->irq);	if (error) {		(void) ide_dump_status(drive, "set_drive_speed_status", stat);		return error;	}	drive->id->dma_ultra &= ~0xFF00;	drive->id->dma_mword &= ~0x0F00;	drive->id->dma_1word &= ~0x0F00;#if defined(CONFIG_BLK_DEV_IDEDMA) && !defined(CONFIG_DMA_NONPCI)	if (speed > XFER_PIO_4) {		outb(inb(hwif->dma_base+2)|(1<<(5+unit)), hwif->dma_base+2);	} else {		outb(inb(hwif->dma_base+2) & ~(1<<(5+unit)), hwif->dma_base+2);	}#endif /* (CONFIG_BLK_DEV_IDEDMA) && !(CONFIG_DMA_NONPCI) */	switch(speed) {		case XFER_UDMA_7:   drive->id->dma_ultra |= 0x8080; break;		case XFER_UDMA_6:   drive->id->dma_ultra |= 0x4040; break;		case XFER_UDMA_5:   drive->id->dma_ultra |= 0x2020; break;		case XFER_UDMA_4:   drive->id->dma_ultra |= 0x1010; break;		case XFER_UDMA_3:   drive->id->dma_ultra |= 0x0808; break;		case XFER_UDMA_2:   drive->id->dma_ultra |= 0x0404; break;		case XFER_UDMA_1:   drive->id->dma_ultra |= 0x0202; break;		case XFER_UDMA_0:   drive->id->dma_ultra |= 0x0101; break;		case XFER_MW_DMA_2: drive->id->dma_mword |= 0x0404; break;		case XFER_MW_DMA_1: drive->id->dma_mword |= 0x0202; break;		case XFER_MW_DMA_0: drive->id->dma_mword |= 0x0101; break;		case XFER_SW_DMA_2: drive->id->dma_1word |= 0x0404; break;		case XFER_SW_DMA_1: drive->id->dma_1word |= 0x0202; break;		case XFER_SW_DMA_0: drive->id->dma_1word |= 0x0101; break;		default: break;	}	return error;}EXPORT_SYMBOL(ide_auto_reduce_xfer);EXPORT_SYMBOL(ide_driveid_update);EXPORT_SYMBOL(ide_ata66_check);EXPORT_SYMBOL(set_transfer);EXPORT_SYMBOL(eighty_ninty_three);EXPORT_SYMBOL(ide_config_drive_speed);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月综合激情网| 久久精品一区二区三区不卡牛牛 | 色天使色偷偷av一区二区 | 国产日韩欧美在线一区| 久久日韩精品一区二区五区| 26uuu色噜噜精品一区| 最新日韩在线视频| 国产精品乱人伦中文| 亚洲免费观看高清完整版在线观看熊| 中文字幕在线观看一区二区| 国产精品国产成人国产三级| 一区二区三区精品视频在线| 亚洲成人免费电影| 老司机精品视频线观看86| 国产乱子伦一区二区三区国色天香| 精久久久久久久久久久| 成人黄色网址在线观看| 欧美午夜电影在线播放| 欧美成人bangbros| 国产精品美女一区二区三区| 国产一区二区三区精品视频| 国产盗摄精品一区二区三区在线| 成人黄色小视频| 欧美日韩激情一区二区| 成人的网站免费观看| 国产suv精品一区二区883| 色综合天天天天做夜夜夜夜做| 欧美一a一片一级一片| 精品成a人在线观看| 日韩高清不卡一区二区三区| 国产在线观看免费一区| 91国在线观看| 精品sm在线观看| 亚洲与欧洲av电影| 国产一本一道久久香蕉| 91福利视频久久久久| 2020日本不卡一区二区视频| 亚洲精品国产第一综合99久久 | 蜜桃在线一区二区三区| www.在线成人| 欧美一二三四在线| 一区二区三区自拍| 国产成人在线视频网址| 欧美美女一区二区三区| 中文字幕在线观看一区| 久久国产精品免费| 欧美性欧美巨大黑白大战| 亚洲国产精品成人综合色在线婷婷| 亚洲成av人片一区二区三区| www.色精品| 国产蜜臀97一区二区三区| 麻豆国产欧美一区二区三区| 91精彩视频在线| 日韩美女啊v在线免费观看| 国内外成人在线视频| 欧美日韩精品一二三区| 一区二区欧美视频| 91日韩在线专区| 亚洲欧美在线高清| 不卡av在线免费观看| 亚洲国产高清在线| 国产精品1区2区3区在线观看| 日韩视频中午一区| 麻豆中文一区二区| 日韩欧美一区二区视频| 美国三级日本三级久久99| 欧美男女性生活在线直播观看| 亚洲品质自拍视频| 在线一区二区三区四区| 有码一区二区三区| 在线视频国产一区| 亚洲国产欧美在线人成| 欧美在线免费观看视频| 久久精品国产亚洲aⅴ| 欧美日韩成人高清| 美女一区二区视频| 精品av综合导航| 国产精品系列在线播放| 国产欧美日韩精品a在线观看| 国产成人精品免费| 中文字幕精品一区二区三区精品| 成人免费毛片app| 综合久久综合久久| 欧美日免费三级在线| 日韩在线a电影| 精品美女一区二区三区| 丁香婷婷综合激情五月色| 国产精品欧美久久久久一区二区| 91亚洲精品久久久蜜桃网站| 亚洲国产精品久久久久婷婷884| 欧美久久久久久蜜桃| 国内精品伊人久久久久av影院| 久久综合久久综合久久综合| 成人免费观看av| 亚洲午夜国产一区99re久久| 欧美r级电影在线观看| 高清不卡在线观看| 亚洲午夜久久久久久久久电影网| 日韩一区二区免费视频| 成人高清免费观看| 亚瑟在线精品视频| 国产色综合久久| 欧美日韩在线不卡| 国产高清不卡二三区| 亚洲国产精品精华液网站| 精品国产区一区| 成人福利电影精品一区二区在线观看 | www.亚洲免费av| 日韩有码一区二区三区| 国产欧美精品一区aⅴ影院| 欧洲人成人精品| 一本色道久久综合狠狠躁的推荐| 免费成人在线视频观看| 国产精品久久久一本精品 | 日韩福利电影在线观看| 中文字幕乱码一区二区免费| 欧美三级电影网站| 国产传媒久久文化传媒| 亚洲午夜电影网| 国产视频亚洲色图| 日韩欧美色综合网站| 在线看不卡av| 国产高清不卡一区二区| 美女视频黄 久久| 亚洲精品中文字幕乱码三区| 日韩美女主播在线视频一区二区三区| 国产精品白丝jk白祙喷水网站| 亚洲成a人片在线观看中文| 国产亚洲福利社区一区| 88在线观看91蜜桃国自产| 粉嫩aⅴ一区二区三区四区| 午夜精品在线看| 亚洲人吸女人奶水| 国产精品午夜在线| 久久久噜噜噜久久人人看| 91精品国产色综合久久ai换脸| 欧美综合色免费| 99国产精品国产精品毛片| 国产成人综合在线观看| 久久成人18免费观看| 蜜桃视频在线观看一区二区| 香蕉久久一区二区不卡无毒影院 | 欧美中文字幕亚洲一区二区va在线 | 麻豆中文一区二区| 免费看日韩a级影片| 日本在线不卡视频一二三区| 亚洲一区二区在线观看视频| 亚洲欧美国产毛片在线| 一区二区在线免费| 亚洲综合视频在线| 香蕉成人啪国产精品视频综合网| 亚洲在线一区二区三区| 亚洲在线视频一区| 五月综合激情日本mⅴ| 三级在线观看一区二区| 日韩高清在线不卡| 免费成人结看片| 国产中文字幕精品| 成人激情免费电影网址| 97se亚洲国产综合在线| 在线免费av一区| 日韩亚洲欧美一区二区三区| 精品国产乱码91久久久久久网站| 2021久久国产精品不只是精品| 欧美韩日一区二区三区| 亚洲欧美日韩在线不卡| 亚洲成年人网站在线观看| 青草av.久久免费一区| 国产曰批免费观看久久久| 粉嫩13p一区二区三区| 欧美成人乱码一区二区三区| 欧美大白屁股肥臀xxxxxx| 国产亚洲成av人在线观看导航| 国产亚洲欧美日韩在线一区| 亚洲六月丁香色婷婷综合久久 | 激情综合网av| 91在线丨porny丨国产| 91精品欧美一区二区三区综合在 | 欧美日韩mp4| 久久―日本道色综合久久| 亚洲人成网站在线| 久久精品国产在热久久| www.日韩大片| 日韩一区二区三区四区| 国产精品国产三级国产专播品爱网 | 色综合网站在线| 欧美大度的电影原声| 亚洲丝袜自拍清纯另类| 毛片一区二区三区| 色噜噜夜夜夜综合网| 26uuu久久综合| 亚洲成a人片在线不卡一二三区| 国产精品亚洲一区二区三区妖精 | 精品少妇一区二区三区在线视频 | 制服丝袜亚洲色图| 国产精品欧美一区二区三区| 免费观看久久久4p| 欧美中文字幕一区二区三区亚洲| 国产亚洲欧美色| 久久国产麻豆精品|