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

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

?? st.c

?? <Linux1.0核心游記>電子書+書后源碼+Linux1.0源碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
      printk(	"st%d: Density %x, tape length: %x, blocksize: %d, drv buffer: %d\n",	     dev, STp->density, (STp->buffer)->b_data[5] * 65536 +	     (STp->buffer)->b_data[6] * 256 + (STp->buffer)->b_data[7],	     STp->block_size, STp->drv_buffer);#endif      if (STp->block_size > ST_BUFFER_SIZE) {	printk("st%d: Blocksize %d too large for buffer.\n", dev,	       STp->block_size);	(STp->buffer)->in_use = 0;	STp->in_use = 0;	return (-EIO);      }    }    else      STp->block_size = ST_BLOCK_SIZE;    if (STp->block_size > 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;#ifdef DEBUG    printk("st%d: Block size: %d, buffer size: %d (%d blocks).\n", dev,	   STp->block_size, (STp->buffer)->buffer_size,	   (STp->buffer)->buffer_blocks);#endif    if ((STp->buffer)->b_data[2] & 0x80) {      STp->write_prot = 1;#ifdef DEBUG      printk( "st%d: Write protected\n", dev);#endif    }    return 0;}/* Close the device*/	static voidscsi_tape_close(struct inode * inode, struct file * filp){    int dev;    int result;    int rewind;    static unsigned char cmd[10];    Scsi_Cmnd * SCpnt;    Scsi_Tape * STp;       dev = MINOR(inode->i_rdev);    rewind = (dev & 0x80) == 0;    dev = dev & 127;    STp = &(scsi_tapes[dev]);    if ( STp->rw == ST_WRITING) {      result = flush_write_buffer(dev);#ifdef DEBUG      printk("st%d: File length %d bytes.\n", dev, filp->f_pos);#endif      if (result == 0 || result == (-ENOSPC)) {	SCpnt = allocate_device(NULL, (STp->device)->index, 1);	SCpnt->sense_buffer[0] = 0;	memset(cmd, 0, 10);	cmd[0] = WRITE_FILEMARKS;	cmd[4] = 1;	SCpnt->request.dev = dev;	scsi_do_cmd( SCpnt,		    (void *) cmd, (void *) (STp->buffer)->b_data,		    ST_BLOCK_SIZE, st_sleep_done, ST_TIMEOUT, MAX_RETRIES);	if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) );	if ((STp->buffer)->last_result_fatal != 0)	  printk("st%d: Error on write filemark.\n", dev);	SCpnt->request.dev = -1;  /* Mark as not busy */      }#ifdef DEBUG      printk("st%d: Buffer flushed, EOF written\n", dev);#endif    }    else if (!rewind) {#ifndef ST_IN_FILE_POS      if ((STp->eof == ST_FM) && !STp->eof_hit)	st_int_ioctl(inode, filp, MTBSF, 1); /* Back over the EOF hit */#else      flush_buffer(inode, filp, 0);#endif    }    if (rewind)      st_int_ioctl(inode, filp, MTREW, 1);    (STp->buffer)->in_use = 0;    STp->in_use = 0;    return;}/* Write command */	static intst_write(struct inode * inode, struct file * filp, char * buf, int count){    int dev;    int total, do_count, blks, retval, transfer;    int write_threshold;    static unsigned char cmd[10];    char *b_point;    Scsi_Cmnd * SCpnt;    Scsi_Tape * STp;    dev = MINOR(inode->i_rdev) & 127;    STp = &(scsi_tapes[dev]);#ifdef DEBUG    if (!STp->in_use) {      printk("st%d: Incorrect device.\n", dev);      return (-EIO);    }#endif    if (STp->write_prot)      return (-EACCES);    if (STp->block_size == 0 && count > ST_BUFFER_SIZE)      return (-EOVERFLOW);    if (STp->rw == ST_READING) {      retval = flush_buffer(inode, filp, 0);      if (retval)	return retval;      STp->rw = ST_WRITING;    }#if ST_WRITE_THRESHOLD_BLOCKS < ST_BUFFER_BLOCKS    if ((STp->buffer)->writing) {      write_behind_check(dev);      if ((STp->buffer)->last_result_fatal) {#ifdef DEBUG	printk("st%d: Async write error %x.\n", dev,	       (STp->buffer)->last_result);#endif	if ((STp->buffer)->last_result == INT_MAX) {	  retval = (-ENOSPC);  /* All has been written */	  STp->eof = ST_EOM_OK;	}	else	  retval = (-EIO);	return retval;      }    }#endif    if (STp->eof == ST_EOM_OK)      return (-ENOSPC);    else if (STp->eof == ST_EOM_ERROR)      return (-EIO);#ifdef ST_NO_DELAYED_WRITES    if (STp->block_size != 0 && (count % STp->block_size) != 0)      return (-EIO);   /* Write must be integral number of blocks */    write_threshold = 1;#else    write_threshold = (STp->buffer)->buffer_size;#endif    SCpnt = allocate_device(NULL, (STp->device)->index, 1);    total = count;    memset(cmd, 0, 10);    cmd[0] = WRITE_6;    cmd[1] = (STp->block_size != 0);    STp->rw = ST_WRITING;    b_point = buf;    while(#if ST_WRITE_THRESHOLD_BLOCKS  < ST_BUFFER_BLOCKS	  STp->block_size != 0 &&	  ((STp->buffer)->buffer_bytes + count) >	  write_threshold)#else	  (STp->block_size == 0 && count > 0) ||	  ((STp->buffer)->buffer_bytes + count) >=	  write_threshold)#endif    {      if (STp->block_size == 0)	do_count = count;      else {	do_count = (STp->buffer)->buffer_size - (STp->buffer)->buffer_bytes;	if (do_count > count)	  do_count = count;      }      memcpy_fromfs((STp->buffer)->b_data +		    (STp->buffer)->buffer_bytes, b_point, do_count);      if (STp->block_size == 0)        blks = do_count;      else	blks = ((STp->buffer)->buffer_bytes + do_count) /	  STp->block_size;      cmd[2] = blks >> 16;      cmd[3] = blks >> 8;      cmd[4] = blks;      SCpnt->sense_buffer[0] = 0;      SCpnt->request.dev = dev;      scsi_do_cmd (SCpnt,		   (void *) cmd, (STp->buffer)->b_data,		   (STp->buffer)->buffer_size,		   st_sleep_done, ST_TIMEOUT, MAX_RETRIES);      if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) );      if ((STp->buffer)->last_result_fatal != 0) {#ifdef DEBUG	printk("st%d: Error on write:\n", dev);#endif	if ((SCpnt->sense_buffer[0] & 0x70) == 0x70 &&	    (SCpnt->sense_buffer[2] & 0x40)) {	  if (STp->block_size != 0 && (SCpnt->sense_buffer[0] & 0x80) != 0)	    transfer = (SCpnt->sense_buffer[3] << 24) |	      (SCpnt->sense_buffer[4] << 16) |		(SCpnt->sense_buffer[5] << 8) | SCpnt->sense_buffer[6];	  else if (STp->block_size == 0 &&		   (SCpnt->sense_buffer[2] & 0x0f) == VOLUME_OVERFLOW)	    transfer = do_count;	  else	    transfer = 0;	  if (STp->block_size != 0)	    transfer *= STp->block_size;	  if (transfer <= do_count) {	    filp->f_pos += do_count - transfer;	    count -= do_count - transfer;	    STp->eof = ST_EOM_OK;	    retval = (-ENOSPC); /* EOM within current request */#ifdef DEBUG	    printk("st%d: EOM with %d bytes unwritten.\n",		   dev, transfer);#endif	  }	  else {	    STp->eof = ST_EOM_ERROR;	    retval = (-EIO); /* EOM for old data */#ifdef DEBUG	    printk("st%d: EOM with lost data.\n", dev);#endif	  }	}	else	  retval = (-EIO);	SCpnt->request.dev = -1;  /* Mark as not busy */	(STp->buffer)->buffer_bytes = 0;	STp->dirty = 0;	if (count < total)	  return total - count;	else	  return retval;      }      filp->f_pos += do_count;      b_point += do_count;      count -= do_count;      (STp->buffer)->buffer_bytes = 0;      STp->dirty = 0;    }    if (count != 0) {      STp->dirty = 1;      memcpy_fromfs((STp->buffer)->b_data +		    (STp->buffer)->buffer_bytes,b_point,count);      filp->f_pos += count;      (STp->buffer)->buffer_bytes += count;      count = 0;    }    if ((STp->buffer)->last_result_fatal != 0) {      SCpnt->request.dev = -1;      return (STp->buffer)->last_result_fatal;    }#if ST_WRITE_THRESHOLD_BLOCKS < ST_BUFFER_BLOCKS    if ((STp->buffer)->buffer_bytes >= ST_WRITE_THRESHOLD ||	STp->block_size == 0) {      /* Schedule an asynchronous write */      if (STp->block_size == 0)	(STp->buffer)->writing = (STp->buffer)->buffer_bytes;      else	(STp->buffer)->writing = ((STp->buffer)->buffer_bytes /	  STp->block_size) * STp->block_size;      STp->dirty = 0;      if (STp->block_size == 0)	blks = (STp->buffer)->writing;      else	blks = (STp->buffer)->writing / STp->block_size;      cmd[2] = blks >> 16;      cmd[3] = blks >> 8;      cmd[4] = blks;      SCpnt->result = (STp->buffer)->last_result = -1;      SCpnt->sense_buffer[0] = 0;      SCpnt->request.dev = dev;      scsi_do_cmd (SCpnt,		   (void *) cmd, (STp->buffer)->b_data,		   (STp->buffer)->writing,		   st_sleep_done, ST_TIMEOUT, MAX_RETRIES);    }    else#endif      SCpnt->request.dev = -1;  /* Mark as not busy */    return( total);}   /* Read command */	static intst_read(struct inode * inode, struct file * filp, char * buf, int count){    int dev;    int total;    int transfer, blks, bytes;    static unsigned char cmd[10];    Scsi_Cmnd * SCpnt;    Scsi_Tape * STp;    dev = MINOR(inode->i_rdev) & 127;    STp = &(scsi_tapes[dev]);#ifdef DEBUG    if (!STp->in_use) {      printk("st%d: Incorrect device.\n", dev);      return (-EIO);    }#endif    if (STp->block_size == 0 && count > ST_BUFFER_SIZE)      return (-EOVERFLOW);    if (STp->rw == ST_WRITING) {      transfer = flush_buffer(inode, filp, 0);      if (transfer)	return transfer;      STp->rw = ST_READING;    }#ifdef DEBUG    if (STp->eof != ST_NOEOF)      printk("st%d: EOF flag up. Bytes %d\n", dev,	     (STp->buffer)->buffer_bytes);#endif    if (((STp->buffer)->buffer_bytes == 0) &&	STp->eof == ST_EOM_OK)  /* EOM or Blank Check */      return (-EIO);    STp->rw = ST_READING;    SCpnt = allocate_device(NULL, (STp->device)->index, 1);    for (total = 0; total < count; ) {      if ((STp->buffer)->buffer_bytes == 0 &&	  STp->eof == ST_NOEOF) {	memset(cmd, 0, 10);	cmd[0] = READ_6;	cmd[1] = (STp->block_size != 0);	if (STp->block_size == 0)	  blks = bytes = count;	else {	  blks = (STp->buffer)->buffer_blocks;	  bytes = blks * STp->block_size;	}	cmd[2] = blks >> 16;	cmd[3] = blks >> 8;	cmd[4] = blks;	SCpnt->sense_buffer[0] = 0;	SCpnt->request.dev = dev;	scsi_do_cmd (SCpnt,		     (void *) cmd, (STp->buffer)->b_data,		     (STp->buffer)->buffer_size,		     st_sleep_done, ST_TIMEOUT, MAX_RETRIES);	if (SCpnt->request.dev == dev) sleep_on( &(STp->waiting) );	(STp->buffer)->read_pointer = 0;	STp->eof_hit = 0;	if ((STp->buffer)->last_result_fatal) {#ifdef DEBUG	  printk("st%d: Sense: %2x %2x %2x %2x %2x %2x %2x %2x\n", dev,		 SCpnt->sense_buffer[0], SCpnt->sense_buffer[1],		 SCpnt->sense_buffer[2], SCpnt->sense_buffer[3],		 SCpnt->sense_buffer[4], SCpnt->sense_buffer[5],		 SCpnt->sense_buffer[6], SCpnt->sense_buffer[7]);#endif	  if ((SCpnt->sense_buffer[0] & 0x70) == 0x70) { /* extended sense */	    if ((SCpnt->sense_buffer[2] & 0xe0) != 0) { /* EOF, EOM, or ILI */	      if ((SCpnt->sense_buffer[0] & 0x80) != 0)		transfer = (SCpnt->sense_buffer[3] << 24) |		  (SCpnt->sense_buffer[4] << 16) |		    (SCpnt->sense_buffer[5] << 8) | SCpnt->sense_buffer[6];	      else		transfer = 0;	      if (STp->block_size == 0 &&		  (SCpnt->sense_buffer[2] & 0x0f) == MEDIUM_ERROR)		transfer = bytes;	      if (SCpnt->sense_buffer[2] & 0x20) {		if (STp->block_size == 0) {		  if (transfer <= 0)		    transfer = 0;		  (STp->buffer)->buffer_bytes = count - transfer;		}		else {		  printk("st%d: Incorrect block size.\n", dev);		  SCpnt->request.dev = -1;  /* Mark as not busy */		  return (-EIO);		}	      }	      else if (SCpnt->sense_buffer[2] & 0x40) {		STp->eof = ST_EOM_OK;		if (STp->block_size == 0)		  (STp->buffer)->buffer_bytes = count - transfer;		else		  (STp->buffer)->buffer_bytes =		    ((STp->buffer)->buffer_blocks - transfer) *		      STp->block_size;#ifdef DEBUG		printk("st%d: EOM detected (%d bytes read).\n", dev,		       (STp->buffer)->buffer_bytes);#endif	      }	      else if (SCpnt->sense_buffer[2] & 0x80) {		STp->eof = ST_FM;		if (STp->block_size == 0)		  (STp->buffer)->buffer_bytes = 0;		else		  (STp->buffer)->buffer_bytes =		    ((STp->buffer)->buffer_blocks - transfer) *		      STp->block_size;#ifdef DEBUG		printk(		 "st%d: EOF detected (%d bytes read, transferred %d bytes).\n",		       dev, (STp->buffer)->buffer_bytes, total);#endif	      } /* end of EOF, EOM, ILI test */	    }	    else { /* nonzero sense key */#ifdef DEBUG	      printk("st%d: Tape error while reading.\n", dev);#endif	      SCpnt->request.dev = -1;	      if (total)		return total;	      else		return -EIO;	    }	  }	  else {	    transfer = (STp->buffer)->last_result_fatal;	    SCpnt->request.dev = -1;  /* Mark as not busy */	    return transfer;	  }	}	else /* Read successful */	  (STp->buffer)->buffer_bytes = bytes;      } /* if ((STp->buffer)->buffer_bytes == 0 &&	   STp->eof == ST_NOEOF) */      if ((STp->buffer)->buffer_bytes > 0) {#ifdef DEBUG	if (STp->eof != ST_NOEOF)	  printk("st%d: EOF up. Left %d, needed %d.\n", dev,		 (STp->buffer)->buffer_bytes, count - total);#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美精品区一区二区三区 | 视频一区中文字幕| 中文字幕一区二区三区四区不卡| 亚洲一区二区影院| 国产精品日韩精品欧美在线| 久久久久久久久久看片| 亚洲精品一区二区三区精华液| 91久久精品日日躁夜夜躁欧美| 91在线视频官网| av电影在线观看一区| 色哟哟精品一区| 91黄色免费版| 欧美日韩三级一区| 欧美一级夜夜爽| 精品免费国产二区三区| 久久精品在线免费观看| 亚洲国产成人午夜在线一区| 18成人在线视频| 亚洲裸体xxx| 亚洲成人免费电影| 老司机精品视频线观看86 | 欧美日韩国产精品成人| 欧美日韩精品欧美日韩精品| 日韩欧美一级精品久久| 久久这里只有精品6| 欧美激情综合网| 一区二区三区**美女毛片| 亚洲国产aⅴ成人精品无吗| 日韩精品一级中文字幕精品视频免费观看 | 成人欧美一区二区三区白人| 亚洲视频每日更新| 日日夜夜精品视频天天综合网| 蜜臀av性久久久久蜜臀av麻豆| 九色综合狠狠综合久久| eeuss鲁一区二区三区| 91成人免费网站| 欧美刺激脚交jootjob| 国产欧美日韩在线| 一区二区三区资源| 青青草精品视频| 国产91在线观看| 欧美亚洲禁片免费| 久久久亚洲高清| 一级女性全黄久久生活片免费| 日本欧美大码aⅴ在线播放| 国产精品一品二品| 欧美在线免费观看视频| 精品日韩av一区二区| 亚洲视频在线一区二区| 麻豆91在线看| 在线观看日韩国产| 久久亚洲一级片| 亚洲一区国产视频| 国产精品一二三在| 精品视频在线看| 国产精品久久综合| 蜜桃视频一区二区| 91在线视频免费91| 337p日本欧洲亚洲大胆精品 | 日韩专区中文字幕一区二区| 国产精品乡下勾搭老头1| 欧美日韩高清不卡| 亚洲同性同志一二三专区| jlzzjlzz欧美大全| 欧美一级一区二区| 一区二区三区久久| 高清国产午夜精品久久久久久| 欧美丰满高潮xxxx喷水动漫| 成人欧美一区二区三区白人| 国产综合色精品一区二区三区| 欧美性色黄大片| 国产精品入口麻豆九色| 国产真实乱子伦精品视频| 欧美性猛交xxxx黑人交| 国产精品久久久久久亚洲伦| 狠狠色丁香久久婷婷综| 欧美日韩国产乱码电影| 亚洲黄色录像片| 99久久综合99久久综合网站| 国产日本一区二区| 韩国女主播成人在线| 6080日韩午夜伦伦午夜伦| 亚洲精品欧美在线| av动漫一区二区| 国产精品天美传媒沈樵| 国产在线一区二区| 日韩欧美区一区二| 日韩av在线免费观看不卡| 欧美亚洲动漫制服丝袜| 亚洲摸摸操操av| 99久久精品免费看国产| 国产精品狼人久久影院观看方式| 黄色小说综合网站| 欧美成人a∨高清免费观看| 奇米影视一区二区三区| 欧美一区二视频| 秋霞影院一区二区| 777久久久精品| 日韩精品一区第一页| 56国语精品自产拍在线观看| 亚洲一区av在线| 欧美色中文字幕| 五月婷婷另类国产| 欧美精品777| 免费成人小视频| 精品国产免费久久| 国内精品国产成人国产三级粉色| 日韩精品一区二区在线| 麻豆91免费看| 久久综合九色综合97婷婷| 国产一区二区三区日韩| 2021中文字幕一区亚洲| 国产福利一区二区三区视频| 欧美国产日韩a欧美在线观看| 成人开心网精品视频| 国产精品电影院| 欧美在线免费观看亚洲| 日韩一区精品字幕| 日韩精品中文字幕一区| 国产精品性做久久久久久| 国产精品嫩草影院av蜜臀| 色哟哟亚洲精品| 日韩国产成人精品| 欧美精品一区二区在线播放| 国产精品1024久久| 亚洲视频免费在线| 欧美高清视频不卡网| 久久99久久精品欧美| 国产精品午夜春色av| 日本高清免费不卡视频| 青青草97国产精品免费观看| 26uuu国产一区二区三区| 成人福利电影精品一区二区在线观看| 青娱乐精品视频| 国产免费成人在线视频| 99国产精品99久久久久久| 亚洲va中文字幕| 精品国产sm最大网站| 972aa.com艺术欧美| 午夜精品一区二区三区电影天堂| 欧美成人video| 色综合色狠狠天天综合色| 奇米888四色在线精品| 国产精品嫩草久久久久| 欧美日韩免费观看一区三区| 国产一区二区三区日韩 | aa级大片欧美| 日韩av在线发布| 中文字幕日韩精品一区| 91精品国产免费| 成人理论电影网| 日韩经典中文字幕一区| 国产精品久久久久久久午夜片| 欧美日韩一级视频| 国产精品影音先锋| 亚洲午夜视频在线| 久久精品视频一区二区三区| 91福利视频久久久久| 国产一区二区三区香蕉| 亚洲国产毛片aaaaa无费看| 亚洲精品一区二区三区福利 | 中文av一区二区| 欧美一区二区三区精品| 一本色道久久综合亚洲精品按摩| 久久成人av少妇免费| 亚洲视频精选在线| 久久免费午夜影院| 911精品产国品一二三产区| 99riav一区二区三区| 国内精品国产三级国产a久久| 亚洲成人黄色影院| 中文字幕一区在线| 精品国产区一区| 91精品免费观看| 在线视频观看一区| 成人白浆超碰人人人人| 蜜臀av性久久久久蜜臀av麻豆| 亚洲综合一二区| 亚洲丝袜美腿综合| 久久精品在这里| 欧美成人aa大片| 欧美一区二区三区电影| 欧美日韩一级二级| 日本精品视频一区二区三区| 高清不卡一区二区| 精品中文字幕一区二区小辣椒| 五月天网站亚洲| 亚洲成人手机在线| 一区二区三区欧美日韩| 国产精品久久久久久久久久久免费看 | 国产精品视频一二三区| 精品国产乱码久久久久久闺蜜 | 国产精品久久久久婷婷| 国产性天天综合网| 日韩一区二区三区在线| 欧美精品久久一区| 国产精品成人网| 久久久www免费人成精品| 26uuu欧美| 欧美videossexotv100|