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

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

?? ide-cd.c

?? ep9315平臺下硬盤驅動的源碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
			s = buf;		} else {			int lo = 0, mid, hi = ARY_LEN(sense_data_texts);			unsigned long key = (sense->sense_key << 16);			key |= (sense->asc << 8);			if (!(sense->ascq >= 0x80 && sense->ascq <= 0xdd))				key |= sense->ascq;			s = NULL;			while (hi > lo) {				mid = (lo + hi) / 2;				if (sense_data_texts[mid].asc_ascq == key ||				    sense_data_texts[mid].asc_ascq == (0xff0000|key)) {					s = sense_data_texts[mid].text;					break;				}				else if (sense_data_texts[mid].asc_ascq > key)					hi = mid;				else					lo = mid+1;			}		}		if (s == NULL) {			if (sense->asc > 0x80)				s = "(vendor-specific error)";			else				s = "(reserved error code)";		}		printk("  %s -- (asc=0x%02x, ascq=0x%02x)\n",			s, sense->asc, sense->ascq);		if (failed_command != NULL) {			int lo=0, mid, hi= ARY_LEN (packet_command_texts);			s = NULL;			while (hi > lo) {				mid = (lo + hi) / 2;				if (packet_command_texts[mid].packet_command ==				    failed_command->c[0]) {					s = packet_command_texts[mid].text;					break;				}				if (packet_command_texts[mid].packet_command >				    failed_command->c[0])					hi = mid;				else					lo = mid+1;			}			printk ("  The failed \"%s\" packet command was: \n  \"", s);			for (i=0; i<sizeof (failed_command->c); i++)				printk ("%02x ", failed_command->c[i]);			printk ("\"\n");		}		/* The SKSV bit specifies validity of the sense_key_specific		 * in the next two commands. It is bit 7 of the first byte.		 * In the case of NOT_READY, if SKSV is set the drive can		 * give us nice ETA readings.		 */		if (sense->sense_key == NOT_READY && (sense->sks[0] & 0x80)) {			int progress = (sense->sks[1] << 8 | sense->sks[2]) * 100;			printk("  Command is %02d%% complete\n", progress / 0xffff);		}		if (sense->sense_key == ILLEGAL_REQUEST &&		    (sense->sks[0] & 0x80) != 0) {			printk("  Error in %s byte %d",				(sense->sks[0] & 0x40) != 0 ?				"command packet" : "command data",				(sense->sks[1] << 8) + sense->sks[2]);			if ((sense->sks[0] & 0x40) != 0)				printk (" bit %d", sense->sks[0] & 0x07);			printk ("\n");		}	}#else /* not VERBOSE_IDE_CD_ERRORS */	/* Suppress printing unit attention and `in progress of becoming ready'	   errors when we're not being verbose. */	if (sense->sense_key == UNIT_ATTENTION ||	    (sense->sense_key == NOT_READY && (sense->asc == 4 ||						sense->asc == 0x3a)))		return;	printk("%s: error code: 0x%02x  sense_key: 0x%02x  asc: 0x%02x  ascq: 0x%02x\n",		drive->name,		sense->error_code, sense->sense_key,		sense->asc, sense->ascq);#endif /* not VERBOSE_IDE_CD_ERRORS */}static void cdrom_queue_request_sense(ide_drive_t *drive, 				      struct completion *wait,				      struct request_sense *sense,				      struct packet_command *failed_command){	struct cdrom_info *info		= drive->driver_data;	struct packet_command *pc	= &info->request_sense_pc;	struct request *rq;	if (sense == NULL)		sense = &info->sense_data;	memset(pc, 0, sizeof(struct packet_command));	pc->c[0] = GPCMD_REQUEST_SENSE;	pc->c[4] = pc->buflen = 18;	pc->buffer = (char *) sense;	pc->sense = (struct request_sense *) failed_command;	/* stuff the sense request in front of our current request */	rq = &info->request_sense_request;	ide_init_drive_cmd(rq);	rq->cmd = REQUEST_SENSE_COMMAND;	rq->buffer = (char *) pc;	rq->waiting = wait;	(void) ide_do_drive_cmd(drive, rq, ide_preempt);}/* * This is our end_request replacement function. */static int ide_cdrom_end_request (ide_drive_t *drive, int uptodate){	struct request *rq;	unsigned long flags;	int ret = 1;	spin_lock_irqsave(&io_request_lock, flags);	rq = HWGROUP(drive)->rq;	/*	 * decide whether to reenable DMA -- 3 is a random magic for now,	 * if we DMA timeout more than 3 times, just stay in PIO	 */	if (drive->state == DMA_PIO_RETRY && drive->retry_pio <= 3) {		drive->state = 0;		HWGROUP(drive)->hwif->ide_dma_on(drive);	}	if (!end_that_request_first(rq, uptodate, drive->name)) {		add_blkdev_randomness(MAJOR(rq->rq_dev));		blkdev_dequeue_request(rq);		HWGROUP(drive)->rq = NULL;		end_that_request_last(rq);		ret = 0;	}	spin_unlock_irqrestore(&io_request_lock, flags);	return ret;}/* * Error reporting, in human readable form (luxurious, but a memory hog). */byte ide_cdrom_dump_status (ide_drive_t *drive, const char *msg, byte stat){	unsigned long flags;	atapi_status_t status;	atapi_error_t error;	status.all = stat;	local_irq_set(flags);	printk("%s: %s: status=0x%02x", drive->name, msg, stat);#if FANCY_STATUS_DUMPS	printk(" { ");	if (status.b.bsy)		printk("Busy ");	else {		if (status.b.drdy)	printk("DriveReady ");		if (status.b.df)	printk("DeviceFault ");		if (status.b.dsc)	printk("SeekComplete ");		if (status.b.drq)	printk("DataRequest ");		if (status.b.corr)	printk("CorrectedError ");		if (status.b.idx)	printk("Index ");		if (status.b.check)	printk("Error ");	}	printk("}");#endif	/* FANCY_STATUS_DUMPS */	printk("\n");	if ((status.all & (status.b.bsy|status.b.check)) == status.b.check) {		error.all = HWIF(drive)->INB(IDE_ERROR_REG);		printk("%s: %s: error=0x%02x", drive->name, msg, error.all);#if FANCY_STATUS_DUMPS		if (error.b.ili)	printk("IllegalLengthIndication ");		if (error.b.eom)	printk("EndOfMedia ");		if (error.b.abrt)	printk("Aborted Command ");		if (error.b.mcr)	printk("MediaChangeRequested ");		if (error.b.sense_key)	printk("LastFailedSense 0x%02x ",						error.b.sense_key);#endif	/* FANCY_STATUS_DUMPS */		printk("\n");	}	local_irq_restore(flags);	return error.all;}/* * ide_error() takes action based on the error returned by the drive. */ide_startstop_t ide_cdrom_error (ide_drive_t *drive, const char *msg, byte stat){	struct request *rq;	byte err;	err = ide_cdrom_dump_status(drive, msg, stat);	if (drive == NULL || (rq = HWGROUP(drive)->rq) == NULL)		return ide_stopped;	/* retry only "normal" I/O: */	if (rq->cmd == IDE_DRIVE_CMD || rq->cmd == IDE_DRIVE_TASK) {		rq->errors = 1;		ide_end_drive_cmd(drive, stat, err);		return ide_stopped;	}	if (stat & BUSY_STAT || ((stat & WRERR_STAT) && !drive->nowerr)) {		/* other bits are useless when BUSY */		rq->errors |= ERROR_RESET;	} else {		/* add decoding error stuff */	}	if (HWIF(drive)->INB(IDE_STATUS_REG) & (BUSY_STAT|DRQ_STAT))		/* force an abort */		HWIF(drive)->OUTB(WIN_IDLEIMMEDIATE,IDE_COMMAND_REG);	if (rq->errors >= ERROR_MAX) {		DRIVER(drive)->end_request(drive, 0);	} else {		if ((rq->errors & ERROR_RESET) == ERROR_RESET) {			++rq->errors;			return ide_do_reset(drive);		}		++rq->errors;	}	return ide_stopped;}ide_startstop_t ide_cdrom_abort (ide_drive_t *drive, const char *msg){	struct request *rq;	if (drive == NULL || (rq = HWGROUP(drive)->rq) == NULL)		return ide_stopped;	/* retry only "normal" I/O: */	if (rq->cmd == IDE_DRIVE_CMD || rq->cmd == IDE_DRIVE_TASK) {		rq->errors = 1;		ide_end_drive_cmd(drive, BUSY_STAT, 0);		return ide_stopped;	}	rq->errors |= ERROR_RESET;	DRIVER(drive)->end_request(drive, 0);	return ide_stopped;}static void cdrom_end_request (ide_drive_t *drive, int uptodate){	struct request *rq = HWGROUP(drive)->rq;	if (rq->cmd == REQUEST_SENSE_COMMAND && uptodate) {		struct packet_command *pc = (struct packet_command *) rq->buffer;		cdrom_analyze_sense_data(drive,			(struct packet_command *) pc->sense,			(struct request_sense *) (pc->buffer - pc->c[4]));	}	if (blk_fs_request(rq) && !rq->current_nr_sectors)		uptodate = 1;	ide_cdrom_end_request(drive, uptodate);}/* Returns 0 if the request should be continued.   Returns 1 if the request was ended. */static int cdrom_decode_status (ide_startstop_t *startstop, ide_drive_t *drive,				int good_stat, int *stat_ret){	struct request *rq = HWGROUP(drive)->rq;	int stat, err, sense_key;	struct packet_command *pc;		/* Check for errors. */	*stat_ret = stat = HWIF(drive)->INB(IDE_STATUS_REG);	if (OK_STAT (stat, good_stat, BAD_R_STAT))		return 0;	/* Get the IDE error register. */	err = HWIF(drive)->INB(IDE_ERROR_REG);	sense_key = err >> 4;	if (rq == NULL) {		printk("%s: missing rq in cdrom_decode_status\n", drive->name);		*startstop = ide_stopped;		return 1;	}	if (rq->cmd == REQUEST_SENSE_COMMAND) {		/* We got an error trying to get sense info		   from the drive (probably while trying		   to recover from a former error).  Just give up. */		pc = (struct packet_command *) rq->buffer;		pc->stat = 1;		cdrom_end_request(drive, 1);		*startstop = DRIVER(drive)->error(drive, "request sense failure", stat);		return 1;	} else if (rq->cmd == PACKET_COMMAND) {		/* All other functions, except for READ. */		struct completion *wait = NULL;		pc = (struct packet_command *) rq->buffer;		/* Check for tray open. */		if (sense_key == NOT_READY) {			cdrom_saw_media_change (drive);		} else if (sense_key == UNIT_ATTENTION) {			/* Check for media change. */			cdrom_saw_media_change (drive);			/*printk("%s: media changed\n",drive->name);*/			return 0;		} else if (!pc->quiet) {			/* Otherwise, print an error. */			ide_dump_status(drive, "packet command error", stat);		}				/* Set the error flag and complete the request.		   Then, if we have a CHECK CONDITION status,		   queue a request sense command.  We must be careful,		   though: we don't want the thread in		   cdrom_queue_packet_command to wake up until		   the request sense has completed.  We do this		   by transferring the semaphore from the packet		   command request to the request sense request. */		if ((stat & ERR_STAT) != 0) {			wait = rq->waiting;			rq->waiting = NULL;		}		pc->stat = 1;		cdrom_end_request(drive, 1);		if ((stat & ERR_STAT) != 0)			cdrom_queue_request_sense(drive, wait, pc->sense, pc);	} else if (blk_fs_request(rq)) {		/* Handle errors from READ and WRITE requests. */	  int do_end_request = 0;		if (sense_key == NOT_READY) {			/* Tray open. */			cdrom_saw_media_change (drive);			/* Fail the request. */			printk ("%s: tray open\n", drive->name);			//cdrom_end_request(drive, 0);                        do_end_request = 1;		} else if (sense_key == UNIT_ATTENTION) {			/* Media change. */			cdrom_saw_media_change (drive);			/* Arrange to retry the request.			   But be sure to give up if we've retried			   too many times. */			if (++rq->errors > ERROR_MAX)			  //cdrom_end_request(drive, 0);                          do_end_request = 1;		} else if (sense_key == ILLEGAL_REQUEST ||			   sense_key == DATA_PROTECT) {			/* No point in retrying after an illegal			   request or data protect error.*/			ide_dump_status (drive, "command error", stat);			//cdrom_end_request(drive, 0);                        do_end_request = 1;		} else if (sense_key == MEDIUM_ERROR) {		  /* No point in re-trying a zillion times on a bad sector...                   * If we got here the error is not correctable.                   */ 		  ide_dump_status (drive, "media error (bad sector)", stat);                  do_end_request = 1;		} else if ((err & ~ABRT_ERR) != 0) {			/* Go to the default handler			   for other errors. */			*startstop = DRIVER(drive)->error(drive, "cdrom_decode_status", stat);			return 1;		} else if ((++rq->errors > ERROR_MAX)) {			/* We've racked up too many retries.  Abort. */			//cdrom_end_request(drive, 0);		  do_end_request = 1;		}                if(do_end_request)		  cdrom_end_request(drive, 0);		/* If we got a CHECK_CONDITION status,		   queue a request sense command. */		if ((stat & ERR_STAT) != 0)			cdrom_queue_request_sense(drive, NULL, NULL, NULL);	}	/* Retry, or handle the next request. */	*startstop = ide_stopped;	return 1;}static int cdrom_timer_expiry(ide_drive_t *drive)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩在线直播| 亚洲精品国产第一综合99久久 | 午夜精品久久久| 日韩电影在线一区二区三区| 久久精品理论片| 国产.欧美.日韩| 精品国产欧美一区二区| 国产亚洲综合在线| 亚洲欧美电影院| 麻豆精品一二三| 91在线视频观看| 欧美一区二区在线不卡| 亚洲国产电影在线观看| 亚洲成av人片观看| 国产风韵犹存在线视精品| 在线亚洲一区二区| 精品久久久久久久一区二区蜜臀| 国产精品无遮挡| 日韩精品久久理论片| 成人激情av网| 欧美一区二区观看视频| 一区在线中文字幕| 免费看欧美女人艹b| caoporen国产精品视频| 日韩小视频在线观看专区| 国产精品三级久久久久三级| 人人超碰91尤物精品国产| 99r国产精品| 久久影院午夜论| 亚洲图片欧美一区| 懂色一区二区三区免费观看| 欧美一区二区不卡视频| 日韩毛片一二三区| 黄页视频在线91| 色爱区综合激月婷婷| 国产偷v国产偷v亚洲高清| 日韩黄色免费电影| proumb性欧美在线观看| 久久综合久久久久88| 日韩精品欧美精品| 一本久久综合亚洲鲁鲁五月天| 久久品道一品道久久精品| 午夜一区二区三区视频| 成人午夜激情视频| 精品国内片67194| 婷婷久久综合九色综合伊人色| 99久久婷婷国产| 久久久www免费人成精品| 青青草视频一区| 欧美日韩视频在线一区二区| 亚洲欧美在线视频观看| 国产成人免费av在线| 日韩欧美在线1卡| 亚洲18色成人| 一本久久a久久免费精品不卡| 国产精品对白交换视频| 国产一区二区三区四区五区入口| 337p亚洲精品色噜噜噜| 亚洲国产视频a| 在线观看欧美黄色| **欧美大码日韩| 波波电影院一区二区三区| 国产亚洲一本大道中文在线| 狠狠色综合日日| 欧美xxxxx牲另类人与| 日本成人在线视频网站| 欧美精品v国产精品v日韩精品| 一区二区三区91| 在线观看视频欧美| 一二三区精品福利视频| 在线观看www91| 亚洲一卡二卡三卡四卡五卡| 日本精品一级二级| 亚洲女性喷水在线观看一区| 92国产精品观看| 亚洲美女淫视频| 在线观看亚洲专区| 亚洲成人1区2区| 在线综合+亚洲+欧美中文字幕| 日日夜夜一区二区| 日韩三级视频在线看| 蜜臀久久久99精品久久久久久| 日韩欧美视频一区| 韩国精品主播一区二区在线观看 | 国产激情一区二区三区四区| 久久在线观看免费| 成人免费电影视频| 亚洲欧美日韩国产综合| 欧美中文字幕亚洲一区二区va在线| 亚洲香肠在线观看| 5858s免费视频成人| 国产综合成人久久大片91| 国产日韩精品一区二区三区在线| 成人免费视频国产在线观看| 亚洲三级在线看| 欧美丝袜第三区| 另类小说欧美激情| 国产女主播一区| 91免费版在线| 日精品一区二区| 久久这里只有精品6| 91婷婷韩国欧美一区二区| 亚洲国产日韩在线一区模特| 日韩免费观看2025年上映的电影| 国产精品一区二区无线| 亚洲色图视频网站| 在线播放中文字幕一区| 国产美女在线精品| 日韩毛片高清在线播放| 欧美精品久久一区| 国产精品一二三四五| 一区二区三区欧美久久| 欧美一卡二卡三卡四卡| 成人在线视频一区| 亚洲精选一二三| 日韩三级免费观看| 99久久国产免费看| 性欧美疯狂xxxxbbbb| 国产亚洲一区二区三区在线观看 | 一区二区欧美国产| 欧美mv日韩mv国产| av不卡免费在线观看| 天天操天天色综合| 国产女人aaa级久久久级| 欧美少妇xxx| 国产成人一区二区精品非洲| 亚洲无线码一区二区三区| 精品理论电影在线观看| 色视频一区二区| 国内精品久久久久影院薰衣草| 亚洲三级在线播放| 26uuu国产电影一区二区| 中文字幕不卡在线| 欧美日韩国产a| 成人高清在线视频| 蜜臀久久久99精品久久久久久| 亚洲日本中文字幕区| 亚洲精品一区二区三区蜜桃下载| 色综合久久天天综合网| 国产乱妇无码大片在线观看| 亚洲成av人片在线观看无码| 国产精品视频免费看| 日韩一级大片在线| 欧美在线制服丝袜| 成人精品一区二区三区中文字幕| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲精品成人少妇| 欧美激情一区二区三区四区| 日韩一区二区三区视频| 欧美亚洲日本国产| www.欧美日韩| 国产一区二区久久| 日韩电影网1区2区| 亚洲一区二区美女| 亚洲精品日韩综合观看成人91| 久久久久久久久99精品| 日韩欧美三级在线| 67194成人在线观看| 在线观看日韩精品| 91亚洲男人天堂| 成人精品国产免费网站| 国产乱淫av一区二区三区| 免费观看在线色综合| 亚洲不卡在线观看| 一区二区三区高清在线| 亚洲精品国产品国语在线app| 国产精品久久久久久久久搜平片| 欧美精品一区二区在线观看| 欧美一区二区播放| 欧美一区二区视频在线观看2020 | 免费不卡在线视频| 丝袜亚洲另类丝袜在线| 亚洲综合免费观看高清完整版| 最新久久zyz资源站| 国产精品久久久久久久久快鸭| 日本一区二区三区四区| 久久综合999| 久久久久久久久久美女| 久久网这里都是精品| 精品国精品自拍自在线| 精品国产乱码久久久久久久久| 日韩午夜电影av| 欧美不卡在线视频| 亚洲精品在线三区| 久久久一区二区三区| 欧美电影免费观看高清完整版在线| 色噜噜狠狠一区二区三区果冻| 99视频在线精品| 91丝袜呻吟高潮美腿白嫩在线观看| www.日本不卡| 日本大香伊一区二区三区| 在线精品观看国产| 欧美欧美欧美欧美| 欧美一区二区三区视频| 日韩欧美一区中文| 国产亚洲精品精华液| 国产精品色在线观看| 亚洲欧洲综合另类| 亚洲一区二区中文在线| 日韩av一区二区三区四区|