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

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

?? ide-taskfile.c

?? ep9315平臺下硬盤驅動的源碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
EXPORT_SYMBOL(ide_wait_cmd_task);/* * FIXME : this needs to map into at taskfile. <andre@linux-ide.org> */int ide_task_ioctl (ide_drive_t *drive, struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg){	int err = 0;	u8 args[7], *argbuf = args;	int argsize = 7;	if (copy_from_user(args, (void *)arg, 7))		return -EFAULT;	err = ide_wait_cmd_task(drive, argbuf);	if (copy_to_user((void *)arg, argbuf, argsize))		err = -EFAULT;	return err;}EXPORT_SYMBOL(ide_task_ioctl);/* * NOTICE: This is additions from IBM to provide a discrete interface, * for selective taskregister access operations.  Nice JOB Klaus!!! * Glad to be able to work and co-develop this with you and IBM. */ide_startstop_t flagged_taskfile (ide_drive_t *drive, ide_task_t *task){	ide_hwif_t *hwif	= HWIF(drive);	task_struct_t *taskfile	= (task_struct_t *) task->tfRegister;	hob_struct_t *hobfile	= (hob_struct_t *) task->hobRegister;#if DEBUG_TASKFILE	u8 status;#endif#ifdef CONFIG_IDE_TASK_IOCTL_DEBUG	void debug_taskfile(drive, task);#endif /* CONFIG_IDE_TASK_IOCTL_DEBUG */	/*	 * (ks) Check taskfile in/out flags.	 * If set, then execute as it is defined.	 * If not set, then define default settings.	 * The default values are:	 *	write and read all taskfile registers (except data) 	 *	write and read the hob registers (sector,nsector,lcyl,hcyl)	 */	if (task->tf_out_flags.all == 0) {		task->tf_out_flags.all = IDE_TASKFILE_STD_OUT_FLAGS;		if (drive->addressing == 1)			task->tf_out_flags.all |= (IDE_HOB_STD_OUT_FLAGS << 8);        }	if (task->tf_in_flags.all == 0) {		task->tf_in_flags.all = IDE_TASKFILE_STD_IN_FLAGS;		if (drive->addressing == 1)			task->tf_in_flags.all |= (IDE_HOB_STD_IN_FLAGS  << 8);        }	/* ALL Command Block Executions SHALL clear nIEN, unless otherwise */	if (IDE_CONTROL_REG)		/* clear nIEN */		hwif->OUTB(drive->ctl, IDE_CONTROL_REG);	SELECT_MASK(drive, 0);#if DEBUG_TASKFILE	status = hwif->INB(IDE_STATUS_REG);	if (status & 0x80) {		printk("flagged_taskfile -> Bad status. Status = %02x. wait 100 usec ...\n", status);		udelay(100);		status = hwif->INB(IDE_STATUS_REG);		printk("flagged_taskfile -> Status = %02x\n", status);	}#endif	if (task->tf_out_flags.b.data) {		u16 data =  taskfile->data + (hobfile->data << 8);		hwif->OUTW(data, IDE_DATA_REG);	}	/* (ks) send hob registers first */	if (task->tf_out_flags.b.nsector_hob)		hwif->OUTB(hobfile->sector_count, IDE_NSECTOR_REG);	if (task->tf_out_flags.b.sector_hob)		hwif->OUTB(hobfile->sector_number, IDE_SECTOR_REG);	if (task->tf_out_flags.b.lcyl_hob)		hwif->OUTB(hobfile->low_cylinder, IDE_LCYL_REG);	if (task->tf_out_flags.b.hcyl_hob)		hwif->OUTB(hobfile->high_cylinder, IDE_HCYL_REG);	/* (ks) Send now the standard registers */	if (task->tf_out_flags.b.error_feature)		hwif->OUTB(taskfile->feature, IDE_FEATURE_REG);	/* refers to number of sectors to transfer */	if (task->tf_out_flags.b.nsector)		hwif->OUTB(taskfile->sector_count, IDE_NSECTOR_REG);	/* refers to sector offset or start sector */	if (task->tf_out_flags.b.sector)		hwif->OUTB(taskfile->sector_number, IDE_SECTOR_REG);	if (task->tf_out_flags.b.lcyl)		hwif->OUTB(taskfile->low_cylinder, IDE_LCYL_REG);	if (task->tf_out_flags.b.hcyl)		hwif->OUTB(taskfile->high_cylinder, IDE_HCYL_REG);        /*	 * (ks) In the flagged taskfile approch, we will used all specified	 * registers and the register value will not be changed. Except the	 * select bit (master/slave) in the drive_head register. We must make	 * sure that the desired drive is selected.	 */	hwif->OUTB(taskfile->device_head | drive->select.all, IDE_SELECT_REG);	switch(task->data_phase) {   	        case TASKFILE_OUT_DMAQ:		case TASKFILE_OUT_DMA:			hwif->ide_dma_write(drive);			break;		case TASKFILE_IN_DMAQ:		case TASKFILE_IN_DMA:			hwif->ide_dma_read(drive);			break;	        default: 			if (task->handler == NULL)				return ide_stopped;			/* Issue the command */			ide_execute_command(drive, taskfile->command, task->handler, WAIT_WORSTCASE, NULL);			if (task->prehandler != NULL)				return task->prehandler(drive, HWGROUP(drive)->rq);	}	return ide_started;}EXPORT_SYMBOL(flagged_taskfile);ide_startstop_t flagged_task_no_data_intr (ide_drive_t *drive){	ide_hwif_t *hwif = HWIF(drive);	u8 stat;	local_irq_enable();	if (!OK_STAT(stat = hwif->INB(IDE_STATUS_REG), READY_STAT, BAD_STAT)) {		if (stat & ERR_STAT) {			return DRIVER(drive)->error(drive, "flagged_task_no_data_intr", stat);		}		/*		 * (ks) Unexpected ATA data phase detected.		 * This should not happen. But, it can !		 * I am not sure, which function is best to clean up		 * this situation.  I choose: ide_error(...)		 */ 		return DRIVER(drive)->error(drive, "flagged_task_no_data_intr (unexpected phase)", stat); 	}	ide_end_drive_cmd(drive, stat, hwif->INB(IDE_ERROR_REG));	return ide_stopped;}/* * Handler for command with PIO data-in phase */ide_startstop_t flagged_task_in_intr (ide_drive_t *drive){	ide_hwif_t *hwif	= HWIF(drive);	u8 stat			= hwif->INB(IDE_STATUS_REG);	struct request *rq	= HWGROUP(drive)->rq;	char *pBuf		= NULL;	int retries             = 5;	if (rq->current_nr_sectors == 0) 		return DRIVER(drive)->error(drive, "flagged_task_in_intr (no data requested)", stat); 	if (!OK_STAT(stat, DATA_READY, BAD_R_STAT)) {		if (stat & ERR_STAT) {			return DRIVER(drive)->error(drive, "flagged_task_in_intr", stat);		}		/*		 * (ks) Unexpected ATA data phase detected.		 * This should not happen. But, it can !		 * I am not sure, which function is best to clean up		 * this situation.  I choose: ide_error(...)		 */		return DRIVER(drive)->error(drive, "flagged_task_in_intr (unexpected data phase)", stat); 	}	pBuf = rq->buffer + ((rq->nr_sectors - rq->current_nr_sectors) * SECTOR_SIZE);	DTF("Read - rq->current_nr_sectors: %d, status: %02x\n", (int) rq->current_nr_sectors, stat);	taskfile_input_data(drive, pBuf, SECTOR_WORDS);	if (--rq->current_nr_sectors != 0) {		/*                 * (ks) We don't know which command was executed. 		 * So, we wait the 'WORSTCASE' value.                 */		ide_set_handler(drive, &flagged_task_in_intr,  WAIT_WORSTCASE, NULL);		return ide_started;	}	/*	 * (ks) Last sector was transfered, wait until drive is ready. 	 * This can take up to 10 usec. We willl wait max 50 us.	 */	while (((stat = hwif->INB(IDE_STATUS_REG)) & BUSY_STAT) && retries--)		udelay(10);	ide_end_drive_cmd (drive, stat, hwif->INB(IDE_ERROR_REG));	return ide_stopped;}ide_startstop_t flagged_task_mulin_intr (ide_drive_t *drive){	ide_hwif_t *hwif	= HWIF(drive);	u8 stat			= hwif->INB(IDE_STATUS_REG);	struct request *rq	= HWGROUP(drive)->rq;	char *pBuf		= NULL;	int retries             = 5;	unsigned int msect, nsect;	if (rq->current_nr_sectors == 0) 		return DRIVER(drive)->error(drive, "flagged_task_mulin_intr (no data requested)", stat); 	msect = drive->mult_count;	if (msect == 0) 		return DRIVER(drive)->error(drive, "flagged_task_mulin_intr (multimode not set)", stat); 	if (!OK_STAT(stat, DATA_READY, BAD_R_STAT)) {		if (stat & ERR_STAT) {			return DRIVER(drive)->error(drive, "flagged_task_mulin_intr", stat);		}		/*		 * (ks) Unexpected ATA data phase detected.		 * This should not happen. But, it can !		 * I am not sure, which function is best to clean up		 * this situation.  I choose: ide_error(...)		 */		return DRIVER(drive)->error(drive, "flagged_task_mulin_intr (unexpected data phase)", stat); 	}	nsect = (rq->current_nr_sectors > msect) ? msect : rq->current_nr_sectors;	pBuf = rq->buffer + ((rq->nr_sectors - rq->current_nr_sectors) * SECTOR_SIZE);	DTF("Multiread: %p, nsect: %d , rq->current_nr_sectors: %ld\n",	    pBuf, nsect, rq->current_nr_sectors);	taskfile_input_data(drive, pBuf, nsect * SECTOR_WORDS);	rq->current_nr_sectors -= nsect;	if (rq->current_nr_sectors != 0) {		/*                 * (ks) We don't know which command was executed. 		 * So, we wait the 'WORSTCASE' value.                 */		ide_set_handler(drive, &flagged_task_mulin_intr,  WAIT_WORSTCASE, NULL);		return ide_started;	}	/*	 * (ks) Last sector was transfered, wait until drive is ready. 	 * This can take up to 10 usec. We willl wait max 50 us.	 */	while (((stat = hwif->INB(IDE_STATUS_REG)) & BUSY_STAT) && retries--)		udelay(10);	ide_end_drive_cmd (drive, stat, hwif->INB(IDE_ERROR_REG));	return ide_stopped;}/* * Pre handler for command with PIO data-out phase */ide_startstop_t flagged_pre_task_out_intr (ide_drive_t *drive, struct request *rq){	ide_hwif_t *hwif	= HWIF(drive);	u8 stat			= hwif->INB(IDE_STATUS_REG);	ide_startstop_t startstop;	if (!rq->current_nr_sectors) {		return DRIVER(drive)->error(drive, "flagged_pre_task_out_intr (write data not specified)", stat);	}	if (ide_wait_stat(&startstop, drive, DATA_READY,			BAD_W_STAT, WAIT_DRQ)) {		printk(KERN_ERR "%s: No DRQ bit after issuing write command.\n", drive->name);		return startstop;	}	taskfile_output_data(drive, rq->buffer, SECTOR_WORDS);	--rq->current_nr_sectors;	return ide_started;}ide_startstop_t flagged_task_out_intr (ide_drive_t *drive){	ide_hwif_t *hwif	= HWIF(drive);	u8 stat			= hwif->INB(IDE_STATUS_REG);	struct request *rq	= HWGROUP(drive)->rq;	char *pBuf		= NULL;	if (!OK_STAT(stat, DRIVE_READY, BAD_W_STAT)) 		return DRIVER(drive)->error(drive, "flagged_task_out_intr", stat);		if (!rq->current_nr_sectors) { 		ide_end_drive_cmd (drive, stat, hwif->INB(IDE_ERROR_REG));		return ide_stopped;	}	if (!OK_STAT(stat, DATA_READY, BAD_W_STAT)) {		/*		 * (ks) Unexpected ATA data phase detected.		 * This should not happen. But, it can !		 * I am not sure, which function is best to clean up		 * this situation.  I choose: ide_error(...)		 */		return DRIVER(drive)->error(drive, "flagged_task_out_intr (unexpected data phase)", stat); 	}	pBuf = rq->buffer + ((rq->nr_sectors - rq->current_nr_sectors) * SECTOR_SIZE);	DTF("Write - rq->current_nr_sectors: %d, status: %02x\n",		(int) rq->current_nr_sectors, stat);	taskfile_output_data(drive, pBuf, SECTOR_WORDS);	--rq->current_nr_sectors;	/*	 * (ks) We don't know which command was executed. 	 * So, we wait the 'WORSTCASE' value.	 */	ide_set_handler(drive, &flagged_task_out_intr, WAIT_WORSTCASE, NULL);	return ide_started;}ide_startstop_t flagged_pre_task_mulout_intr (ide_drive_t *drive, struct request *rq){	ide_hwif_t *hwif	= HWIF(drive);	u8 stat			= hwif->INB(IDE_STATUS_REG);	char *pBuf		= NULL;	ide_startstop_t startstop;	unsigned int msect, nsect;	if (!rq->current_nr_sectors) 		return DRIVER(drive)->error(drive, "flagged_pre_task_mulout_intr (write data not specified)", stat);	msect = drive->mult_count;	if (msect == 0)		return DRIVER(drive)->error(drive, "flagged_pre_task_mulout_intr (multimode not set)", stat);	if (ide_wait_stat(&startstop, drive, DATA_READY,			BAD_W_STAT, WAIT_DRQ)) {		printk(KERN_ERR "%s: No DRQ bit after issuing write command.\n", drive->name);		return startstop;	}	nsect = (rq->current_nr_sectors > msect) ? msect : rq->current_nr_sectors;	pBuf = rq->buffer + ((rq->nr_sectors - rq->current_nr_sectors) * SECTOR_SIZE);	DTF("Multiwrite: %p, nsect: %d , rq->current_nr_sectors: %ld\n",	    pBuf, nsect, rq->current_nr_sectors);	taskfile_output_data(drive, pBuf, nsect * SECTOR_WORDS);	rq->current_nr_sectors -= nsect;	return ide_started;}ide_startstop_t flagged_task_mulout_intr (ide_drive_t *drive){	ide_hwif_t *hwif	= HWIF(drive);	u8 stat			= hwif->INB(IDE_STATUS_REG);	struct request *rq	= HWGROUP(drive)->rq;	char *pBuf		= NULL;	unsigned int msect, nsect;	msect = drive->mult_count;	if (msect == 0)		return DRIVER(drive)->error(drive, "flagged_task_mulout_intr (multimode not set)", stat);	if (!OK_STAT(stat, DRIVE_READY, BAD_W_STAT)) 		return DRIVER(drive)->error(drive, "flagged_task_mulout_intr", stat);		if (!rq->current_nr_sectors) { 		ide_end_drive_cmd (drive, stat, hwif->INB(IDE_ERROR_REG));		return ide_stopped;	}	if (!OK_STAT(stat, DATA_READY, BAD_W_STAT)) {		/*		 * (ks) Unexpected ATA data phase detected.		 * This should not happen. But, it can !		 * I am not sure, which function is best to clean up		 * this situation.  I choose: ide_error(...)		 */		return DRIVER(drive)->error(drive, "flagged_task_mulout_intr (unexpected data phase)", stat); 	}	nsect = (rq->current_nr_sectors > msect) ? msect : rq->current_nr_sectors;	pBuf = rq->buffer + ((rq->nr_sectors - rq->current_nr_sectors) * SECTOR_SIZE);	DTF("Multiwrite: %p, nsect: %d , rq->current_nr_sectors: %ld\n",	    pBuf, nsect, rq->current_nr_sectors);	taskfile_output_data(drive, pBuf, nsect * SECTOR_WORDS);	rq->current_nr_sectors -= nsect;	/*	 * (ks) We don't know which command was executed. 	 * So, we wait the 'WORSTCASE' value.	 */	ide_set_handler(drive, &flagged_task_mulout_intr, WAIT_WORSTCASE, NULL);	return ide_started;}/* * Beginning of Taskfile OPCODE Library and feature sets. */#ifdef CONFIG_PKT_TASK_IOCTLint pkt_taskfile_ioctl (ide_drive_t *drive, struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg){#if 0	switch(req_task->data_phase) {		case TASKFILE_P_OUT_DMAQ:		case TASKFILE_P_IN_DMAQ:		case TASKFILE_P_OUT_DMA:		case TASKFILE_P_IN_DMA:		case TASKFILE_P_OUT:		case TASKFILE_P_IN:	}#endif	return -ENOMSG;}EXPORT_SYMBOL(pkt_taskfile_ioctl);#endif /* CONFIG_PKT_TASK_IOCTL */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产久精国产| 欧美二区在线观看| 欧美日本精品一区二区三区| 久久久国产精品午夜一区ai换脸| 亚洲午夜免费福利视频| 粉嫩蜜臀av国产精品网站| 欧美日韩色一区| 亚洲人成网站色在线观看| 国产麻豆成人精品| 91精品国产全国免费观看| 亚洲男人的天堂在线aⅴ视频| 国产伦理精品不卡| 91精品国产综合久久久久久久久久| 亚洲欧洲一区二区在线播放| 国产成人aaa| 久久久久国产一区二区三区四区| 免费视频最近日韩| 欧美日韩国产a| 亚洲最新视频在线播放| caoporn国产一区二区| 久久久久久日产精品| 久久99九九99精品| 日韩一区和二区| 日韩中文字幕不卡| 欧美在线视频日韩| 亚洲精品伦理在线| 91丝袜美腿高跟国产极品老师| 中文字幕第一区综合| 国产 欧美在线| 国产偷v国产偷v亚洲高清| 91麻豆.com| 国产精品久久久久久久浪潮网站 | 精品在线免费视频| 欧美福利视频导航| 日韩综合小视频| 日韩欧美国产午夜精品| 美国十次综合导航| 日韩一区二区三区电影| 韩国在线一区二区| 久久蜜桃av一区精品变态类天堂| 国产一区啦啦啦在线观看| 久久久久久黄色| 北条麻妃一区二区三区| 亚洲美女视频在线| 欧美日韩国产高清一区二区三区| 亚洲国产精品久久久久秋霞影院| 欧美日韩免费不卡视频一区二区三区| 亚洲成人动漫在线免费观看| 91精品久久久久久蜜臀| 精品一区二区免费在线观看| 26uuu亚洲综合色欧美 | 91在线视频观看| 亚洲激情图片一区| 在线不卡免费欧美| 极品少妇xxxx精品少妇偷拍| 国产婷婷色一区二区三区在线| 99re8在线精品视频免费播放| 一区二区三区在线观看动漫| 91精品国产色综合久久| 岛国av在线一区| 亚洲国产欧美一区二区三区丁香婷| 在线观看av一区二区| 麻豆91小视频| 亚洲欧洲综合另类| 日韩午夜电影av| av一区二区不卡| 日本中文在线一区| 国产精品天天摸av网| 在线观看91视频| 国产福利91精品一区二区三区| 亚洲一区二区三区视频在线| 欧美一级理论性理论a| 丁香激情综合五月| 婷婷六月综合网| 欧美国产精品一区| 日韩一区二区三区在线视频| www.日韩精品| 精品无人码麻豆乱码1区2区| 亚洲制服丝袜在线| 久久久99久久| 91精品国产综合久久久蜜臀粉嫩 | 中文字幕av一区二区三区| 欧美剧在线免费观看网站| 粉嫩aⅴ一区二区三区四区 | 亚洲精品成人精品456| 精品精品国产高清a毛片牛牛 | 色综合久久久久综合体| 狠狠色丁香婷综合久久| 午夜在线成人av| 亚洲天堂免费看| 国产欧美日韩亚州综合| 日韩一区二区三区电影| 欧美日韩免费电影| 色香色香欲天天天影视综合网| 成人夜色视频网站在线观看| 久久国产福利国产秒拍| 日本成人在线网站| 亚洲va欧美va人人爽| 一区二区欧美国产| 成人免费在线观看入口| 国产精品久久一级| 国产夜色精品一区二区av| 日韩免费一区二区| 制服丝袜亚洲播放| 欧美日韩成人在线一区| 欧美视频在线观看一区二区| 91国在线观看| 欧美午夜片在线观看| 色一情一伦一子一伦一区| 色综合欧美在线视频区| 色先锋aa成人| 91行情网站电视在线观看高清版| 99精品久久99久久久久| 99久久久无码国产精品| 91在线观看美女| 日本久久精品电影| 在线视频综合导航| 欧美综合久久久| 欧美日本视频在线| 欧美一区二区三区在线| 日韩视频在线观看一区二区| 日韩免费高清av| 久久男人中文字幕资源站| 久久久精品综合| 久久久99精品久久| 国产精品麻豆久久久| 亚洲丝袜另类动漫二区| 亚洲综合区在线| 青青草伊人久久| 国产美女精品人人做人人爽| 成人午夜电影小说| 91麻豆国产香蕉久久精品| 在线视频一区二区免费| 欧美精品777| 精品国产人成亚洲区| 国产欧美日韩在线看| 亚洲激情图片小说视频| 免费在线观看不卡| 国产成人亚洲综合色影视| 91欧美一区二区| 制服丝袜一区二区三区| 国产欧美日韩中文久久| 国产91精品一区二区麻豆网站| av一区二区三区| 激情久久五月天| 日韩国产欧美视频| 日韩欧美一级片| 最新国产成人在线观看| 国产一区二区网址| 欧美一区国产二区| 亚洲高清免费一级二级三级| av不卡免费在线观看| 国产午夜精品福利| 久久精品国产99国产| 欧美一区二区三区成人| 亚洲成av人片一区二区| 色婷婷精品久久二区二区蜜臀av| 国产精品美女一区二区在线观看| 国产九色sp调教91| 久久久噜噜噜久久人人看 | 一区二区三区欧美久久| 成人精品视频网站| 国产日产亚洲精品系列| 激情六月婷婷久久| 久久久久久电影| 国产999精品久久| 中日韩av电影| 99re热这里只有精品免费视频| 中文字幕在线观看一区二区| 成人一区二区在线观看| 国产日韩精品一区二区三区| 国产成人日日夜夜| 欧美国产日韩a欧美在线观看| 成人免费看的视频| 亚洲婷婷综合久久一本伊一区| 97se亚洲国产综合自在线| 亚洲精品国产高清久久伦理二区| 一道本成人在线| 午夜精品久久久久久久| 欧美欧美欧美欧美首页| 蜜臀av一区二区在线免费观看| 精品国产一区二区三区久久久蜜月 | 国产精品成人免费| 91在线观看美女| 亚洲www啪成人一区二区麻豆| 欧美一级片免费看| 狠狠色丁香婷婷综合| 国产精品三级av在线播放| 色又黄又爽网站www久久| 亚洲一区二区3| 日韩视频一区二区三区在线播放| 韩国女主播一区二区三区| 中文字幕免费一区| 在线视频一区二区免费| 蜜桃传媒麻豆第一区在线观看| 久久精品视频在线免费观看 | 色诱亚洲精品久久久久久| 亚洲电影在线播放| 2020日本不卡一区二区视频| 99久久精品国产毛片|