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

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

?? sr_ioctl.c

?? linux 1.0 源代碼
?? C
字號:
#include <linux/kernel.h>#include <linux/sched.h>#include <linux/fs.h>#include <asm/segment.h>#include <linux/errno.h>#include "../block/blk.h"#include "scsi.h"#include "hosts.h"#include "sr.h"#include "scsi_ioctl.h"#include <linux/cdrom.h>#define IOCTL_RETRIES 3/* The CDROM is fairly slow, so we need a little extra time */#define IOCTL_TIMEOUT 200extern int scsi_ioctl (Scsi_Device *dev, int cmd, void *arg);static void sr_ioctl_done(Scsi_Cmnd * SCpnt){  struct request * req;  struct task_struct * p;    req = &SCpnt->request;  req->dev = 0xfffe; /* Busy, but indicate request done */    if ((p = req->waiting) != NULL) {    req->waiting = NULL;    p->state = TASK_RUNNING;    if (p->counter > current->counter)      need_resched = 1;  }}/* We do our own retries because we want to know what the specific   error code is.  Normally the UNIT_ATTENTION code will automatically   clear after one error */static int do_ioctl(int target, unsigned char * sr_cmd, void * buffer, unsigned buflength){	Scsi_Cmnd * SCpnt;	int result;	SCpnt = allocate_device(NULL, scsi_CDs[target].device->index, 1);	scsi_do_cmd(SCpnt,		    (void *) sr_cmd, buffer, buflength, sr_ioctl_done, 		    IOCTL_TIMEOUT, IOCTL_RETRIES);	if (SCpnt->request.dev != 0xfffe){	  SCpnt->request.waiting = current;	  current->state = TASK_UNINTERRUPTIBLE;	  while (SCpnt->request.dev != 0xfffe) schedule();	};	result = SCpnt->result;/* Minimal error checking.  Ignore cases we know about, and report the rest. */	if(driver_byte(result) != 0)	  switch(SCpnt->sense_buffer[2] & 0xf) {	  case UNIT_ATTENTION:	    scsi_CDs[target].device->changed = 1;	    printk("Disc change detected.\n");	    break;	  case NOT_READY: /* This happens if there is no disc in drive */	    printk("CDROM not ready.  Make sure there is a disc in the drive.\n");	    break;	  case ILLEGAL_REQUEST:	    printk("CDROM (ioctl) reports ILLEGAL REQUEST.\n");	    break;	  default:	    printk("SCSI CD error: host %d id %d lun %d return code = %03x\n", 		   scsi_CDs[target].device->host->host_no, 		   scsi_CDs[target].device->id,		   scsi_CDs[target].device->lun,		   result);	    printk("\tSense class %x, sense error %x, extended sense %x\n",		   sense_class(SCpnt->sense_buffer[0]), 		   sense_error(SCpnt->sense_buffer[0]),		   SCpnt->sense_buffer[2] & 0xf);	    	};	result = SCpnt->result;	SCpnt->request.dev = -1; /* Deallocate */	wake_up(&scsi_devices[SCpnt->index].device_wait);	/* Wake up a process waiting for device*/      	return result;}int sr_ioctl(struct inode * inode, struct file * file, unsigned int cmd, unsigned long arg){        u_char 	sr_cmd[10];	int dev = inode->i_rdev;	int result, target;	target = MINOR(dev);	if (target >= NR_SR) return -ENODEV;	switch (cmd) 		{		/* Sun-compatible */		case CDROMPAUSE:			sr_cmd[0] = SCMD_PAUSE_RESUME;			sr_cmd[1] = scsi_CDs[target].device->lun << 5;			sr_cmd[2] = sr_cmd[3] = sr_cmd[4] = 0;			sr_cmd[5] = sr_cmd[6] = sr_cmd[7] = 0;			sr_cmd[8] = 0;			sr_cmd[9] = 0;			result = do_ioctl(target, sr_cmd, NULL, 255);			return result;		case CDROMRESUME:			sr_cmd[0] = SCMD_PAUSE_RESUME;			sr_cmd[1] = scsi_CDs[target].device->lun << 5;			sr_cmd[2] = sr_cmd[3] = sr_cmd[4] = 0;			sr_cmd[5] = sr_cmd[6] = sr_cmd[7] = 0;			sr_cmd[8] = 1;			sr_cmd[9] = 0;			result = do_ioctl(target, sr_cmd, NULL, 255);			return result;		case CDROMPLAYMSF:			{			struct cdrom_msf msf;			memcpy_fromfs(&msf, (void *) arg, sizeof(msf));			sr_cmd[0] = SCMD_PLAYAUDIO_MSF;			sr_cmd[1] = scsi_CDs[target].device->lun << 5;			sr_cmd[2] = 0;			sr_cmd[3] = msf.cdmsf_min0;			sr_cmd[4] = msf.cdmsf_sec0;			sr_cmd[5] = msf.cdmsf_frame0;			sr_cmd[6] = msf.cdmsf_min1;			sr_cmd[7] = msf.cdmsf_sec1;			sr_cmd[8] = msf.cdmsf_frame1;			sr_cmd[9] = 0;			result = do_ioctl(target, sr_cmd, NULL, 255);			return result;			}		case CDROMPLAYTRKIND:			{			struct cdrom_ti ti;			memcpy_fromfs(&ti, (void *) arg, sizeof(ti));			sr_cmd[0] = SCMD_PLAYAUDIO_TI;			sr_cmd[1] = scsi_CDs[target].device->lun << 5;			sr_cmd[2] = 0;			sr_cmd[3] = 0;			sr_cmd[4] = ti.cdti_trk0;			sr_cmd[5] = ti.cdti_ind0;			sr_cmd[6] = 0;			sr_cmd[7] = ti.cdti_trk1;			sr_cmd[8] = ti.cdti_ind1;			sr_cmd[9] = 0;			result = do_ioctl(target, sr_cmd, NULL, 255);			return result;			}		case CDROMREADTOCHDR:			{			struct cdrom_tochdr tochdr;			char * buffer;			sr_cmd[0] = SCMD_READ_TOC;			sr_cmd[1] = ((scsi_CDs[target].device->lun) << 5) | 0x02;    /* MSF format */			sr_cmd[2] = sr_cmd[3] = sr_cmd[4] = sr_cmd[5] = 0;			sr_cmd[6] = 0;			sr_cmd[7] = 0;              /* MSB of length (12) */			sr_cmd[8] = 12;             /* LSB of length */			sr_cmd[9] = 0;			buffer = (unsigned char *) scsi_malloc(512);			if(!buffer) return -ENOMEM;			result = do_ioctl(target, sr_cmd, buffer, 12);			tochdr.cdth_trk0 = buffer[2];			tochdr.cdth_trk1 = buffer[3];			scsi_free(buffer, 512);			verify_area (VERIFY_WRITE, (void *) arg, sizeof (struct cdrom_tochdr));			memcpy_tofs ((void *) arg, &tochdr, sizeof (struct cdrom_tochdr));						return result;		        }		case CDROMREADTOCENTRY:			{			struct cdrom_tocentry tocentry;			char * buffer;			verify_area (VERIFY_READ, (void *) arg, sizeof (struct cdrom_tocentry));			memcpy_fromfs (&tocentry, (void *) arg, sizeof (struct cdrom_tocentry));			sr_cmd[0] = SCMD_READ_TOC;			sr_cmd[1] = ((scsi_CDs[target].device->lun) << 5) | 0x02;    /* MSF format */			sr_cmd[2] = sr_cmd[3] = sr_cmd[4] = sr_cmd[5] = 0;			sr_cmd[6] = tocentry.cdte_track;			sr_cmd[7] = 0;             /* MSB of length (12)  */			sr_cmd[8] = 12;            /* LSB of length */			sr_cmd[9] = 0;			buffer = (unsigned char *) scsi_malloc(512);			if(!buffer) return -ENOMEM;			result = do_ioctl (target, sr_cmd, buffer, 12);			if (tocentry.cdte_format == CDROM_MSF) {			  tocentry.cdte_addr.msf.minute = buffer[9];			  tocentry.cdte_addr.msf.second = buffer[10];			  tocentry.cdte_addr.msf.frame = buffer[11];			  tocentry.cdte_ctrl = buffer[5] & 0xf;			}			else			  tocentry.cdte_addr.lba = (int) buffer[0];			scsi_free(buffer, 512);			verify_area (VERIFY_WRITE, (void *) arg, sizeof (struct cdrom_tocentry));			memcpy_tofs ((void *) arg, &tocentry, sizeof (struct cdrom_tocentry));			return result;		        }		case CDROMSTOP:		        sr_cmd[0] = START_STOP;			sr_cmd[1] = ((scsi_CDs[target].device->lun) << 5) | 1;			sr_cmd[2] = sr_cmd[3] = sr_cmd[5] = 0;			sr_cmd[4] = 0;			result = do_ioctl(target, sr_cmd, NULL, 255);			return result;					case CDROMSTART:		        sr_cmd[0] = START_STOP;			sr_cmd[1] = ((scsi_CDs[target].device->lun) << 5) | 1;			sr_cmd[2] = sr_cmd[3] = sr_cmd[5] = 0;			sr_cmd[4] = 1;			result = do_ioctl(target, sr_cmd, NULL, 255);			return result;		case CDROMEJECT:			if (scsi_CDs[target].device -> access_count == 1)			  sr_ioctl (inode, NULL, SCSI_IOCTL_DOORUNLOCK, 0);		        sr_cmd[0] = START_STOP;			sr_cmd[1] = ((scsi_CDs[target].device -> lun) << 5) | 1;			sr_cmd[2] = sr_cmd[3] = sr_cmd[5] = 0;			sr_cmd[4] = 0x02;			if (!(result = do_ioctl(target, sr_cmd, NULL, 255)))			  scsi_CDs[target].device -> changed = 1;			return result;		case CDROMVOLCTRL:			{			  char * buffer, * mask;			  struct cdrom_volctrl volctrl;			  verify_area (VERIFY_READ, (void *) arg, sizeof (struct cdrom_volctrl));			  memcpy_fromfs (&volctrl, (void *) arg, sizeof (struct cdrom_volctrl));			  /* First we get the current params so we can just twiddle the volume */			  sr_cmd[0] = MODE_SENSE;			  sr_cmd[1] = (scsi_CDs[target].device -> lun) << 5;			  sr_cmd[2] = 0xe;    /* Want mode page 0xe, CDROM audio params */			  sr_cmd[3] = 0;			  sr_cmd[4] = 28;			  sr_cmd[5] = 0;			  buffer = (unsigned char *) scsi_malloc(512);			  if(!buffer) return -ENOMEM;			  if ((result = do_ioctl (target, sr_cmd, buffer, 28))) {			    printk ("Hosed while obtaining audio mode page\n");			    scsi_free(buffer, 512);			    return result;			  }			  sr_cmd[0] = MODE_SENSE;			  sr_cmd[1] = (scsi_CDs[target].device -> lun) << 5;			  sr_cmd[2] = 0x4e;   /* Want the mask for mode page 0xe */			  sr_cmd[3] = 0;			  sr_cmd[4] = 28;			  sr_cmd[5] = 0;			  mask = (unsigned char *) scsi_malloc(512);			  if(!mask) {			    scsi_free(buffer, 512);			    return -ENOMEM;			  };			  if ((result = do_ioctl (target, sr_cmd, mask, 28))) {			    printk ("Hosed while obtaining mask for audio mode page\n");			    scsi_free(buffer, 512);			    scsi_free(mask, 512);			    return result;			  }			  /* Now mask and substitute our own volume and reuse the rest */			  buffer[0] = 0;  /* Clear reserved field */			  buffer[21] = volctrl.channel0 & mask[21];			  buffer[23] = volctrl.channel1 & mask[23];			  buffer[25] = volctrl.channel2 & mask[25];			  buffer[27] = volctrl.channel3 & mask[27];			  sr_cmd[0] = MODE_SELECT;			  sr_cmd[1] = ((scsi_CDs[target].device -> lun) << 5) | 0x10;    /* Params are SCSI-2 */			  sr_cmd[2] = sr_cmd[3] = 0;			  sr_cmd[4] = 28;			  sr_cmd[5] = 0;			  result = do_ioctl (target, sr_cmd, buffer, 28);			  scsi_free(buffer, 512);			  scsi_free(mask, 512);			  return result;			}		case CDROMSUBCHNL:			{			  struct cdrom_subchnl subchnl;			  char * buffer;			  			  sr_cmd[0] = SCMD_READ_SUBCHANNEL;			  sr_cmd[1] = ((scsi_CDs[target].device->lun) << 5) | 0x02;    /* MSF format */			  sr_cmd[2] = 0x40;    /* I do want the subchannel info */			  sr_cmd[3] = 0x01;    /* Give me current position info */			  sr_cmd[4] = sr_cmd[5] = 0;			  sr_cmd[6] = 0;			  sr_cmd[7] = 0;			  sr_cmd[8] = 16;			  sr_cmd[9] = 0;			  buffer = (unsigned char*) scsi_malloc(512);			  if(!buffer) return -ENOMEM;			  result = do_ioctl(target, sr_cmd, buffer, 16);			  subchnl.cdsc_audiostatus = buffer[1];			  subchnl.cdsc_format = CDROM_MSF;			  subchnl.cdsc_ctrl = buffer[5] & 0xf;			  subchnl.cdsc_trk = buffer[6];			  subchnl.cdsc_ind = buffer[7];			  subchnl.cdsc_reladdr.msf.minute = buffer[13];			  subchnl.cdsc_reladdr.msf.second = buffer[14];			  subchnl.cdsc_reladdr.msf.frame = buffer[15];			  subchnl.cdsc_absaddr.msf.minute = buffer[9];			  subchnl.cdsc_absaddr.msf.second = buffer[10];			  subchnl.cdsc_absaddr.msf.frame = buffer[11];			  scsi_free(buffer, 512);			  verify_area (VERIFY_WRITE, (void *) arg, sizeof (struct cdrom_subchnl));			  memcpy_tofs ((void *) arg, &subchnl, sizeof (struct cdrom_subchnl));			  return result;			}		case CDROMREADMODE2:			return -EINVAL;		case CDROMREADMODE1:			return -EINVAL;		RO_IOCTLS(dev,arg);		default:			return scsi_ioctl(scsi_CDs[target].device,cmd,(void *) arg);		}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀av性久久久久av蜜臀妖精| 国产美女一区二区三区| 久久超碰97人人做人人爱| 国产xxx精品视频大全| 欧美亚洲动漫另类| 国产亚洲成年网址在线观看| 性做久久久久久免费观看欧美| 粉嫩一区二区三区在线看| 欧美一区二区成人| 亚洲激情在线播放| 成人免费毛片app| 日韩午夜激情av| 亚洲一区二区三区四区在线| 99视频一区二区| 精品成人a区在线观看| 香蕉久久夜色精品国产使用方法 | av中文一区二区三区| 67194成人在线观看| 亚洲欧美日韩人成在线播放| 国产激情视频一区二区三区欧美| 欧美一区三区二区| 亚洲国产婷婷综合在线精品| 99久久99久久久精品齐齐| 久久―日本道色综合久久| 老色鬼精品视频在线观看播放| 欧美性做爰猛烈叫床潮| 亚洲欧美综合另类在线卡通| 国产一区二区三区精品视频| 欧美精品一区二区三区四区 | 久久久久久综合| 欧美一区二区久久| 国产精品久久久久影视| 国产精品99久久久久久宅男| 中文字幕不卡的av| 成人免费精品视频| 亚洲精品一区二区三区四区高清| 樱桃国产成人精品视频| 毛片av一区二区| 天天综合日日夜夜精品| 久久综合色8888| 99在线视频精品| 亚洲国产精品激情在线观看| 久久亚洲一区二区三区四区| 狠狠色丁香婷综合久久| 亚洲欧洲一区二区在线播放| 日韩午夜电影在线观看| 国产综合色在线视频区| 国产精品护士白丝一区av| 欧美亚日韩国产aⅴ精品中极品| 另类调教123区| 亚洲欧美aⅴ...| 国产欧美一区二区精品婷婷| 日韩一区和二区| 91国偷自产一区二区开放时间 | 91麻豆精品国产91| 亚洲精品国产无天堂网2021| 在线观看www91| 日韩电影在线一区二区三区| 日韩欧美国产三级电影视频| 国产盗摄一区二区三区| 日韩一区欧美小说| 欧美精品视频www在线观看| 久久国产精品99久久人人澡| 国产欧美中文在线| 欧美午夜精品久久久| 久久国产精品72免费观看| 国产欧美日韩久久| 在线精品亚洲一区二区不卡| 免费在线观看视频一区| 国产精品成人午夜| 69堂亚洲精品首页| 99精品视频一区二区三区| 三级在线观看一区二区| 欧美国产激情二区三区| 欧美亚洲日本国产| 国产精品一区二区无线| 一区二区三区毛片| 久久久久国色av免费看影院| 色哟哟在线观看一区二区三区| 日韩成人一级大片| √…a在线天堂一区| 日韩欧美资源站| 91丝袜国产在线播放| 精品一区免费av| 一区二区三区日韩精品视频| 2024国产精品| 欧美精品日韩一本| 91色婷婷久久久久合中文| 韩国在线一区二区| 视频一区免费在线观看| 中文字幕一区二区三区不卡在线| 日韩视频123| 欧美日韩亚洲综合一区二区三区| 国产精品一线二线三线精华| 日日夜夜一区二区| 亚洲精品videosex极品| 中文一区二区在线观看| 精品盗摄一区二区三区| 欧美精品久久一区二区三区| 91久久精品午夜一区二区| 国产盗摄视频一区二区三区| 麻豆精品一二三| 视频一区二区中文字幕| 亚洲一区二区三区在线看| 亚洲色欲色欲www| 国产精品乱码人人做人人爱| 久久久影视传媒| 久久丝袜美腿综合| 精品国产自在久精品国产| 在线播放亚洲一区| 欧美日韩国产高清一区二区三区| 日本丰满少妇一区二区三区| 91在线无精精品入口| 成人av电影观看| 风流少妇一区二区| 丰满放荡岳乱妇91ww| 成人高清在线视频| 大胆欧美人体老妇| 99视频精品全部免费在线| 99精品一区二区| 97久久精品人人澡人人爽| 不卡的av网站| 91丨九色丨蝌蚪丨老版| 在线亚洲一区二区| 日本福利一区二区| 欧美日本一道本| 日韩一卡二卡三卡四卡| 久久尤物电影视频在线观看| 国产无一区二区| 国产精品人成在线观看免费| 自拍偷自拍亚洲精品播放| 亚洲精品乱码久久久久久黑人| 一区二区三区欧美视频| 香蕉久久夜色精品国产使用方法| 日韩av一区二区在线影视| 欧美aaaaaa午夜精品| 国模套图日韩精品一区二区| 成人性生交大合| 色婷婷国产精品久久包臀| 欧美日韩在线播放三区四区| 欧美一级在线免费| 久久久午夜精品理论片中文字幕| 国产精品美日韩| 亚洲一区日韩精品中文字幕| 青青国产91久久久久久| 激情伊人五月天久久综合| 成人黄色一级视频| 欧美日韩久久不卡| 久久久久久亚洲综合影院红桃 | 91美女片黄在线观看| 欧美日韩国产123区| xnxx国产精品| 亚洲最大色网站| 黄页视频在线91| 91亚洲国产成人精品一区二三| 91精品国产高清一区二区三区| 久久日韩粉嫩一区二区三区| 一二三四社区欧美黄| 九九精品视频在线看| 色婷婷久久久久swag精品| 欧美xxxxxxxx| 亚洲一级在线观看| 国产河南妇女毛片精品久久久| 在线看日本不卡| 中文字幕二三区不卡| 麻豆精品视频在线| 91福利在线免费观看| 欧美va在线播放| 亚洲一区二区三区精品在线| 国产99久久久精品| 日韩欧美黄色影院| 亚洲最新视频在线观看| 成人av电影在线播放| 久久综合色8888| 秋霞影院一区二区| 欧美性猛交xxxx黑人交| 中文字幕欧美日韩一区| 美女精品自拍一二三四| 欧美日韩一区在线| 综合激情网...| 豆国产96在线|亚洲| 精品久久久久久久久久久院品网| 亚洲国产wwwccc36天堂| 92精品国产成人观看免费| 国产精品视频一二| 国产在线播放一区三区四| 欧美另类久久久品| 亚洲国产精品一区二区www| 91在线观看污| 日本一区二区不卡视频| 国产一区二区影院| 欧美videofree性高清杂交| 视频一区二区中文字幕| 777欧美精品| 性欧美大战久久久久久久久| 91激情在线视频| 亚洲乱码国产乱码精品精98午夜 | 亚洲久本草在线中文字幕| 成人av电影免费在线播放| 日本一区二区免费在线|