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

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

?? st.c

?? linux 1.0 源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
	transfer = (STp->buffer)->buffer_bytes < count - total ?	  (STp->buffer)->buffer_bytes : count - total;	memcpy_tofs(buf, (STp->buffer)->b_data +		    (STp->buffer)->read_pointer,transfer);	filp->f_pos += transfer;	buf += transfer;	total += transfer;	(STp->buffer)->buffer_bytes -= transfer;	(STp->buffer)->read_pointer += transfer;      }      else if (STp->eof != ST_NOEOF) {	STp->eof_hit = 1;	SCpnt->request.dev = -1;  /* Mark as not busy */	if (total == 0 && STp->eof == ST_FM)	  STp->eof = 0;	if (total == 0 && STp->eof == ST_EOM_OK)	  return (-EIO);  /* ST_EOM_ERROR not used in read */	return total;      }      if (STp->block_size == 0)	count = total;  /* Read only one variable length block */    } /* for (total = 0; total < count; ) */    SCpnt->request.dev = -1;  /* Mark as not busy */    return total;}/* Internal ioctl function */	static intst_int_ioctl(struct inode * inode,struct file * file,	     unsigned int cmd_in, unsigned long arg){   int dev = MINOR(inode->i_rdev);   int timeout = ST_LONG_TIMEOUT;   long ltmp;   int ioctl_result;   unsigned char cmd[10];   Scsi_Cmnd * SCpnt;   Scsi_Tape * STp;   dev = dev & 127;   STp = &(scsi_tapes[dev]);   memset(cmd, 0, 10);   switch (cmd_in) {     case MTFSF:     case MTFSFM:       cmd[0] = SPACE;       cmd[1] = 0x01; /* Space FileMarks */       cmd[2] = (arg >> 16);       cmd[3] = (arg >> 8);       cmd[4] = arg;#ifdef DEBUG       printk("st%d: Spacing tape forward over %d filemarks.\n", dev,	      cmd[2] * 65536 + cmd[3] * 256 + cmd[4]);#endif       break;      case MTBSF:     case MTBSFM:       cmd[0] = SPACE;       cmd[1] = 0x01; /* Space FileMarks */       ltmp = (-arg);       cmd[2] = (ltmp >> 16);       cmd[3] = (ltmp >> 8);       cmd[4] = ltmp;#ifdef DEBUG       if (cmd[2] & 0x80)	 ltmp = 0xff000000;       ltmp = ltmp | (cmd[2] << 16) | (cmd[3] << 8) | cmd[4];       printk("st%d: Spacing tape backward over %d filemarks.\n", dev, (-ltmp));#endif       break;       case MTFSR:       cmd[0] = SPACE;       cmd[1] = 0x00; /* Space Blocks */       cmd[2] = (arg >> 16);       cmd[3] = (arg >> 8);       cmd[4] = arg;#ifdef DEBUG       printk("st%d: Spacing tape forward %d blocks.\n", dev,	      cmd[2] * 65536 + cmd[3] * 256 + cmd[4]);#endif       break;      case MTBSR:       cmd[0] = SPACE;       cmd[1] = 0x00; /* Space Blocks */       ltmp = (-arg);       cmd[2] = (ltmp >> 16);       cmd[3] = (ltmp >> 8);       cmd[4] = ltmp;#ifdef DEBUG       if (cmd[2] & 0x80)	 ltmp = 0xff000000;       ltmp = ltmp | (cmd[2] << 16) | (cmd[3] << 8) | cmd[4];       printk("st%d: Spacing tape backward %d blocks.\n", dev, (-ltmp));#endif       break;      case MTWEOF:       if (STp->write_prot)	 return (-EACCES);       cmd[0] = WRITE_FILEMARKS;       cmd[2] = (arg >> 16);       cmd[3] = (arg >> 8);       cmd[4] = arg;       timeout = ST_TIMEOUT;#ifdef DEBUG       printk("st%d: Writing %d filemarks.\n", dev,	      cmd[2] * 65536 + cmd[3] * 256 + cmd[4]);#endif       break;      case MTREW:       cmd[0] = REZERO_UNIT;#ifdef ST_NOWAIT       cmd[1] = 1;  /* Don't wait for completion */       timeout = ST_TIMEOUT;#endif#ifdef DEBUG       printk("st%d: Rewinding tape.\n", dev);#endif       break;      case MTOFFL:       cmd[0] = START_STOP;#ifdef ST_NOWAIT       cmd[1] = 1;  /* Don't wait for completion */       timeout = ST_TIMEOUT;#endif#ifdef DEBUG       printk("st%d: Unloading tape.\n", dev);#endif       break;      case MTNOP:#ifdef DEBUG       printk("st%d: No op on tape.\n", dev);#endif       return 0;  /* Should do something ? */       break;     case MTRETEN:       cmd[0] = START_STOP;#ifdef ST_NOWAIT       cmd[1] = 1;  /* Don't wait for completion */       timeout = ST_TIMEOUT;#endif       cmd[4] = 3;#ifdef DEBUG       printk("st%d: Retensioning tape.\n", dev);#endif       break;      case MTEOM:       cmd[0] = SPACE;       cmd[1] = 3;#ifdef DEBUG       printk("st%d: Spacing to end of recorded medium.\n", dev);#endif       break;      case MTERASE:       if (STp->write_prot)	 return (-EACCES);       cmd[0] = ERASE;       cmd[1] = 1;  /* To the end of tape */#ifdef DEBUG       printk("st%d: Erasing tape.\n", dev);#endif       break;     case MTSEEK:       if ((STp->device)->scsi_level < SCSI_2) {	 cmd[0] = QFA_SEEK_BLOCK;	 cmd[2] = (arg >> 16);	 cmd[3] = (arg >> 8);	 cmd[4] = arg;	 cmd[5] = 0;       }       else {	 cmd[0] = SEEK_10;	 cmd[1] = 4;	 cmd[3] = (arg >> 24);	 cmd[4] = (arg >> 16);	 cmd[5] = (arg >> 8);	 cmd[6] = arg;       }#ifdef ST_NOWAIT       cmd[1] |= 1;  /* Don't wait for completion */       timeout = ST_TIMEOUT;#endif#ifdef DEBUG       printk("st%d: Seeking tape to block %d.\n", dev, arg);#endif       break;     case MTSETBLK:  /* Set block length */     case MTSETDENSITY: /* Set tape density */     case MTSETDRVBUFFER: /* Set drive buffering */       if (STp->dirty || (STp->buffer)->buffer_bytes != 0)	 return (-EIO);   /* Not allowed if data in buffer */       if (cmd_in == MTSETBLK &&	   arg != 0 &&	   (arg < STp->min_block || arg > STp->max_block ||	    arg > ST_BUFFER_SIZE)) {	 printk("st%d: Illegal block size.\n", dev);	 return (-EINVAL);       }       cmd[0] = MODE_SELECT;       cmd[4] = 12;       memset((STp->buffer)->b_data, 0, 12);       if (cmd_in == MTSETDRVBUFFER)	 (STp->buffer)->b_data[2] = (arg & 7) << 4;       else	 (STp->buffer)->b_data[2] = 	   STp->drv_buffer << 4;       (STp->buffer)->b_data[3] = 8;     /* block descriptor length */       if (cmd_in == MTSETDENSITY)	 (STp->buffer)->b_data[4] = arg;       else	 (STp->buffer)->b_data[4] = STp->density;       if (cmd_in == MTSETBLK)	 ltmp = arg;       else	 ltmp = STp->block_size;       (STp->buffer)->b_data[9] = (ltmp >> 16);       (STp->buffer)->b_data[10] = (ltmp >> 8);       (STp->buffer)->b_data[11] = ltmp;       timeout = ST_TIMEOUT;#ifdef DEBUG       if (cmd_in == MTSETBLK)	 printk("st%d: Setting block size to %d bytes.\n", dev,		(STp->buffer)->b_data[9] * 65536 +		(STp->buffer)->b_data[10] * 256 +		(STp->buffer)->b_data[11]);       else if (cmd_in == MTSETDENSITY)	 printk("st%d: Setting density code to %x.\n", dev,		(STp->buffer)->b_data[4]);       else	 printk("st%d: Setting drive buffer code to %d.\n", dev,		((STp->buffer)->b_data[2] >> 4) & 7);#endif       break;     default:       printk("st%d: Unknown st_ioctl command %x.\n", dev, cmd_in);       return (-ENOSYS);     }   SCpnt = allocate_device(NULL, (STp->device)->index, 1);   SCpnt->sense_buffer[0] = 0;   SCpnt->request.dev = dev;   scsi_do_cmd(SCpnt,	       (void *) cmd, (void *) (STp->buffer)->b_data, ST_BLOCK_SIZE,	       st_sleep_done, timeout, MAX_RETRIES);   if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) );   ioctl_result = (STp->buffer)->last_result_fatal;   SCpnt->request.dev = -1;  /* Mark as not busy */   if (!ioctl_result) {     if (cmd_in == MTBSFM)       ioctl_result = st_int_ioctl(inode, file, MTFSF, 1);     else if (cmd_in == MTFSFM)       ioctl_result = st_int_ioctl(inode, file, MTBSF, 1);     else if (cmd_in == MTSETBLK) {       STp->block_size = arg;       if (arg != 0) {	 (STp->buffer)->buffer_blocks =	   ST_BUFFER_SIZE / STp->block_size;	 (STp->buffer)->buffer_size =	   (STp->buffer)->buffer_blocks * STp->block_size;       }       else {	 (STp->buffer)->buffer_blocks = 1;	 (STp->buffer)->buffer_size = ST_BUFFER_SIZE;       }       (STp->buffer)->buffer_bytes =	 (STp->buffer)->read_pointer = 0;     }     else if (cmd_in == MTSETDRVBUFFER)       STp->drv_buffer = arg;     else if (cmd_in == MTSETDENSITY)       STp->density = arg;     if (cmd_in == MTEOM || cmd_in == MTWEOF) {       STp->eof = ST_EOM_OK;       STp->eof_hit = 0;     }     else if (cmd_in != MTSETBLK && cmd_in != MTNOP) {       STp->eof = ST_NOEOF;       STp->eof_hit = 0;     }   }   return ioctl_result ;}/* The ioctl command */	static intst_ioctl(struct inode * inode,struct file * file,	 unsigned int cmd_in, unsigned long arg){   int dev = MINOR(inode->i_rdev);   int i, cmd, result;   struct mtop mtc;   struct mtpos mt_pos;   unsigned char scmd[10];   Scsi_Cmnd *SCpnt;   Scsi_Tape *STp;   dev = dev & 127;   STp = &(scsi_tapes[dev]);#ifdef DEBUG   if (!STp->in_use) {     printk("st%d: Incorrect device.\n", dev);     return (-EIO);   }#endif   cmd = cmd_in & IOCCMD_MASK;   if (cmd == (MTIOCTOP & IOCCMD_MASK)) {     if (((cmd_in & IOCSIZE_MASK) >> IOCSIZE_SHIFT) != sizeof(mtc))       return (-EINVAL);     i = verify_area(VERIFY_WRITE, (void *)arg, sizeof(mtc));     if (i)        return i;     memcpy_fromfs((char *) &mtc, (char *)arg, sizeof(struct mtop));     i = flush_buffer(inode, file, mtc.mt_op == MTSEEK ||		      mtc.mt_op == MTREW || mtc.mt_op == MTOFFL ||		      mtc.mt_op == MTRETEN || mtc.mt_op == MTEOM);     if (i < 0)       return i;     return st_int_ioctl(inode, file, mtc.mt_op, mtc.mt_count);   }   else if (cmd == (MTIOCGET & IOCCMD_MASK)) {     if (((cmd_in & IOCSIZE_MASK) >> IOCSIZE_SHIFT) != sizeof(struct mtget))       return (-EINVAL);     i = verify_area(VERIFY_WRITE, (void *)arg, sizeof(struct mtget));     if (i)       return i;     memcpy_tofs((char *)arg, (char *)(STp->buffer)->mt_status,		 sizeof(struct mtget));     return 0;   }   else if (cmd == (MTIOCPOS & IOCCMD_MASK)) {#ifdef DEBUG     printk("st%d: get tape position.\n", dev);#endif     if (((cmd_in & IOCSIZE_MASK) >> IOCSIZE_SHIFT) != sizeof(struct mtpos))       return (-EINVAL);     i = flush_buffer(inode, file, 0);     if (i < 0)       return i;     i = verify_area(VERIFY_WRITE, (void *)arg, sizeof(struct mtpos));     if (i)       return i;     SCpnt = allocate_device(NULL, (STp->device)->index, 1);     SCpnt->sense_buffer[0]=0;     memset (scmd, 0, 10);     if ((STp->device)->scsi_level < SCSI_2) {       scmd[0] = QFA_REQUEST_BLOCK;       scmd[4] = 3;     }     else {       scmd[0] = READ_POSITION;       scmd[1] = 1;     }     SCpnt->request.dev = dev;     SCpnt->sense_buffer[0] = 0;     scsi_do_cmd(SCpnt,		 (void *) scmd, (void *) (STp->buffer)->b_data,		 ST_BLOCK_SIZE, st_sleep_done, ST_TIMEOUT, MAX_READY_RETRIES);     if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) );          if ((STp->buffer)->last_result_fatal != 0) {       mt_pos.mt_blkno = (-1);#ifdef DEBUG       printk("st%d: Can't read tape position.\n", dev);#endif       result = (-EIO);     }     else {       result = 0;       if ((STp->device)->scsi_level < SCSI_2)	 mt_pos.mt_blkno = ((STp->buffer)->b_data[0] << 16) 	   + ((STp->buffer)->b_data[1] << 8) 	     + (STp->buffer)->b_data[2];       else	 mt_pos.mt_blkno = ((STp->buffer)->b_data[4] << 24)	   + ((STp->buffer)->b_data[5] << 16) 	     + ((STp->buffer)->b_data[6] << 8) 	       + (STp->buffer)->b_data[7];     }     SCpnt->request.dev = -1;  /* Mark as not busy */     memcpy_tofs((char *)arg, (char *) (&mt_pos), sizeof(struct mtpos));     return result;   }   else     return scsi_ioctl(STp->device, cmd_in, (void *) arg);}static struct file_operations st_fops = {   NULL,            /* lseek - default */   st_read,         /* read - general block-dev read */   st_write,        /* write - general block-dev write */   NULL,            /* readdir - bad */   NULL,            /* select */   st_ioctl,        /* ioctl */   NULL,            /* mmap */   scsi_tape_open,  /* open */   scsi_tape_close, /* release */   NULL		    /* fsync */};void st_attach(Scsi_Device * SDp){  scsi_tapes[NR_ST++].device = SDp;  if(NR_ST > MAX_ST) panic ("scsi_devices corrupt (st)");};unsigned long st_init1(unsigned long mem_start, unsigned long mem_end){  scsi_tapes = (Scsi_Tape *) mem_start;  mem_start += MAX_ST * sizeof(Scsi_Tape);  return mem_start;};/* Driver initialization */unsigned long st_init(unsigned long mem_start, unsigned long mem_end){  int i;  if (register_chrdev(MAJOR_NR,"st",&st_fops)) {    printk("Unable to get major %d for SCSI tapes\n",MAJOR_NR);    return mem_start;  }  if (NR_ST == 0) return mem_start;#ifdef DEBUG  printk("st: Init tape.\n");#endif  for (i=0; i < NR_ST; ++i) {    scsi_tapes[i].capacity = 0xfffff;    scsi_tapes[i].dirty = 0;    scsi_tapes[i].rw = ST_IDLE;    scsi_tapes[i].eof = ST_NOEOF;    scsi_tapes[i].waiting = NULL;    scsi_tapes[i].in_use = 0;    scsi_tapes[i].drv_buffer = 1;  /* Try buffering if no mode sense */    scsi_tapes[i].density = 0;  }  /* Allocate the buffers */  if (NR_ST == 1)    st_nbr_buffers = 1;  else    st_nbr_buffers = 2;  for (i=0; i < st_nbr_buffers; i++) {    st_buffers[i] = (ST_buffer *) mem_start;#ifdef DEBUG    printk("st: Buffer address: %p\n", st_buffers[i]);#endif    mem_start += sizeof(ST_buffer) - 1 + ST_BUFFER_BLOCKS * ST_BLOCK_SIZE;    st_buffers[i]->mt_status = (struct mtget *) mem_start;    mem_start += sizeof(struct mtget);    st_buffers[i]->in_use = 0;    st_buffers[i]->writing = 0;    /* "generic" status */    memset((void *) st_buffers[i]->mt_status, 0, sizeof(struct mtget));    st_buffers[i]->mt_status->mt_type = MT_ISSCSI1;  }  return mem_start;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产禁国产网站cc| 欧美日韩国产电影| 美女视频黄 久久| 日本中文在线一区| 亚洲小少妇裸体bbw| 亚洲精品视频在线看| 一区二区三区在线视频免费| 亚洲伊人色欲综合网| 亚洲一区二区黄色| 亚洲成人av一区二区| 视频一区在线播放| 蜜臀av性久久久久蜜臀aⅴ流畅| 免费观看91视频大全| 另类欧美日韩国产在线| 久久av中文字幕片| 国产精品性做久久久久久| 成人免费毛片aaaaa**| 99精品视频一区二区| 欧美性猛交xxxx黑人交| 日韩一区二区在线看| 久久久噜噜噜久久中文字幕色伊伊| 中文字幕精品一区二区精品绿巨人 | 精品国产一区久久| 久久亚洲综合av| 国产亚洲欧美日韩在线一区| 亚洲色图另类专区| 亚洲gay无套男同| 久久99国产精品久久99| 成人黄色小视频| 欧美精品tushy高清| 国产天堂亚洲国产碰碰| 亚洲精品美国一| 寂寞少妇一区二区三区| 99久久免费精品高清特色大片| 欧美日韩国产首页| 国产精品久久久久aaaa樱花 | 92国产精品观看| 91精品国产免费| 国产精品天美传媒| 爽好多水快深点欧美视频| 国产福利91精品| 3d成人动漫网站| 中文字幕一区二区三区精华液| 图片区日韩欧美亚洲| 成人黄动漫网站免费app| 欧美精品黑人性xxxx| 亚洲色图色小说| 国产精品小仙女| 51精品国自产在线| 亚洲色图一区二区三区| 国产iv一区二区三区| 日韩精品中文字幕在线不卡尤物| 亚洲一区在线视频观看| 国产成人一级电影| 欧美一区2区视频在线观看| 亚洲色图在线看| 成人免费福利片| 久久久久亚洲综合| 日韩精品电影在线观看| 在线看日韩精品电影| 国产精品久久久久一区二区三区 | 久久综合九色综合97婷婷| 亚洲一级二级三级| 9色porny自拍视频一区二区| 久久精品亚洲精品国产欧美kt∨| 石原莉奈一区二区三区在线观看 | 精品国产制服丝袜高跟| 亚洲色图在线播放| 91麻豆6部合集magnet| 国产精品女主播在线观看| 国产在线精品不卡| 亚洲精品一区二区在线观看| 久久电影网电视剧免费观看| 日韩精品一区二| 蜜臂av日日欢夜夜爽一区| 欧美精品久久99久久在免费线| 午夜精品在线看| 欧美午夜在线一二页| 亚洲动漫第一页| 欧美一级日韩一级| 亚洲一区二区三区四区在线免费观看 | 国产美女一区二区三区| 26uuu国产一区二区三区| 蜜桃久久久久久久| 久久亚洲影视婷婷| 国产**成人网毛片九色 | 久久精品亚洲麻豆av一区二区 | 综合久久久久久| 色一情一乱一乱一91av| 亚洲黄色在线视频| 欧美日韩一级视频| 日本亚洲电影天堂| 久久久久久久久久久99999| 国产麻豆9l精品三级站| 国产精品乱码一区二三区小蝌蚪| 成人激情午夜影院| 亚洲成人动漫在线免费观看| 日韩一卡二卡三卡国产欧美| 国产精品99久久久久久久女警| 中文字幕亚洲精品在线观看| 在线精品视频免费观看| 青娱乐精品视频| 国产精品伦一区二区三级视频| 在线一区二区三区四区| 美腿丝袜亚洲一区| 亚洲欧洲日产国码二区| 欧美色中文字幕| 国产乱码精品一区二区三区忘忧草| 国产精品乱人伦一区二区| 欧美色网站导航| 国产成人在线视频网站| 亚洲国产综合人成综合网站| 欧美一区二区三区啪啪| 成人av片在线观看| 日韩av网站免费在线| 国产精品美女久久福利网站| 欧美区视频在线观看| 丁香桃色午夜亚洲一区二区三区| 亚洲综合一区二区精品导航| 精品va天堂亚洲国产| 91成人在线观看喷潮| 国产伦精品一区二区三区免费迷| 亚洲国产精品久久人人爱| 精品国产一区二区三区av性色| 色偷偷一区二区三区| 国产精品91一区二区| 婷婷久久综合九色综合绿巨人| 欧美国产欧美综合| 日韩视频123| 欧美亚洲综合色| av电影在线观看完整版一区二区| 另类成人小视频在线| 亚洲电影在线免费观看| 亚洲精选视频免费看| 国产精品毛片高清在线完整版| 日韩美女在线视频| 91精品国产综合久久福利| 色婷婷综合久久久中文一区二区 | 777午夜精品视频在线播放| fc2成人免费人成在线观看播放| 久久精工是国产品牌吗| 三级在线观看一区二区| 午夜视频一区在线观看| 亚洲自拍偷拍麻豆| 亚洲最大色网站| 亚洲在线中文字幕| 亚洲精品国产一区二区三区四区在线| 亚洲国产精品99久久久久久久久 | 91福利在线免费观看| 97se亚洲国产综合自在线不卡| 成人性生交大片免费看在线播放 | 日本精品免费观看高清观看| 99久久综合精品| 成人aa视频在线观看| 国产成人一级电影| 菠萝蜜视频在线观看一区| 成人三级伦理片| av中文字幕亚洲| 91久久精品一区二区三区| 日本精品视频一区二区| 欧美性三三影院| 日韩一区二区电影网| 久久伊人中文字幕| 国产精品无人区| 亚洲精品免费一二三区| 亚洲福利一二三区| 免费高清在线一区| 国产主播一区二区| 成人午夜伦理影院| 在线一区二区三区四区| 欧美男男青年gay1069videost| 日韩视频一区在线观看| 久久免费偷拍视频| 亚洲四区在线观看| 五月开心婷婷久久| 国内精品伊人久久久久av影院 | 视频一区二区中文字幕| 久久99久久99精品免视看婷婷| 国产乱码一区二区三区| 一本色道久久综合精品竹菊| 在线综合亚洲欧美在线视频| 久久午夜羞羞影院免费观看| 亚洲婷婷在线视频| 日韩激情在线观看| 成人在线视频一区二区| 欧美日韩国产三级| 国产日韩欧美制服另类| 一区二区成人在线视频| 激情综合亚洲精品| 色婷婷亚洲综合| 久久久久九九视频| 亚洲一区在线播放| 国产成人精品网址| 在线不卡欧美精品一区二区三区| 国产三级三级三级精品8ⅰ区| 亚洲国产精品一区二区www在线| 国产在线播放一区| 欧美日韩电影在线播放| 国产精品不卡在线| 激情综合色综合久久|