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

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

?? fdomain.c

?? LINUX1.0源代碼,代碼條理清晰
?? C
?? 第 1 頁 / 共 4 頁
字號:
   return 1;
}

void my_done( int error )
{
   if (in_command) {
      in_command = 0;
      outb( 0x00, Interrupt_Cntl_port );
      fdomain_make_bus_idle();
      current_SC->result = error;
      if (current_SC->scsi_done)
	    current_SC->scsi_done( current_SC );
      else panic( "Future Domain: current_SC->scsi_done() == NULL" );
   } else {
      panic( "Future Domain: my_done() called outside of command\n" );
   }
#if DEBUG_RACE
   in_interrupt_flag = 0;
#endif
}

void fdomain_16x0_intr( int unused )
{
   int      status;
   int      done = 0;
   unsigned data_count;

   sti();
   
   outb( 0x00, Interrupt_Cntl_port );

   /* We usually have one spurious interrupt after each command.  Ignore it. */
   if (!in_command || !current_SC) {	/* Spurious interrupt */
#if EVERY_ACCESS
      printk( "Spurious interrupt, in_command = %d, current_SC = %x\n",
	      in_command, current_SC );
#endif
      return;
   }

   /* Abort calls my_done, so we do nothing here. */
   if (current_SC->SCp.phase & aborted) {
#if DEBUG_ABORT
      printk( "Interrupt after abort, ignoring\n" );
#endif
      /*
      return; */
   }

#if DEBUG_RACE
   ++in_interrupt_flag;
#endif

   if (current_SC->SCp.phase & in_arbitration) {
      status = inb( TMC_Status_port );        /* Read adapter status */
      if (!(status & 0x02)) {
#if EVERY_ACCESS
	 printk( " AFAIL " );
#endif
	 my_done( DID_BUS_BUSY << 16 );
	 return;
      }
      current_SC->SCp.phase = in_selection;
      
      outb( 0x40 | FIFO_COUNT, Interrupt_Cntl_port );

      outb( 0x82, SCSI_Cntl_port ); /* Bus Enable + Select */
      outb( adapter_mask | (1 << current_SC->target), SCSI_Data_NoACK_port );
      
      /* Stop arbitration and enable parity */
      outb( 0x10 | PARITY_MASK, TMC_Cntl_port );
#if DEBUG_RACE
      in_interrupt_flag = 0;
#endif
      return;
   } else if (current_SC->SCp.phase & in_selection) {
      status = inb( SCSI_Status_port );
      if (!(status & 0x01)) {
	 /* Try again, for slow devices */
	 if (fdomain_select( current_SC->target )) {
#if EVERY_ACCESS
	    printk( " SFAIL " );
#endif
	    my_done( DID_NO_CONNECT << 16 );
	    return;
	 } else {
#if EVERY_ACCESS
	    printk( " AltSel " );
#endif
	    /* Stop arbitration and enable parity */
	    outb( 0x10 | PARITY_MASK, TMC_Cntl_port );
	 }
      }
      current_SC->SCp.phase = in_other;
      outb( 0x90 | FIFO_COUNT, Interrupt_Cntl_port );
      outb( 0x80, SCSI_Cntl_port );
#if DEBUG_RACE
      in_interrupt_flag = 0;
#endif
      return;
   }
   
   /* current_SC->SCp.phase == in_other: this is the body of the routine */
   
   status = inb( SCSI_Status_port );
   
   if (status & 0x10) {	/* REQ */
      
      switch (status & 0x0e) {
       
      case 0x08:		/* COMMAND OUT */
	 outb( current_SC->cmnd[current_SC->SCp.sent_command++],
	       Write_SCSI_Data_port );
#if EVERY_ACCESS
	 printk( "CMD = %x,",
		 current_SC->cmnd[ current_SC->SCp.sent_command - 1] );
#endif
	 break;
      case 0x00:		/* DATA OUT -- tmc18c50 only */
	 if (chip != tmc1800 && !current_SC->SCp.have_data_in) {
	    current_SC->SCp.have_data_in = -1;
	    outb( 0xd0 | PARITY_MASK, TMC_Cntl_port );
	 }
	 break;
      case 0x04:		/* DATA IN -- tmc18c50 only */
	 if (chip != tmc1800 && !current_SC->SCp.have_data_in) {
	    current_SC->SCp.have_data_in = 1;
	    outb( 0x90 | PARITY_MASK, TMC_Cntl_port );
	 }
	 break;
      case 0x0c:		/* STATUS IN */
	 current_SC->SCp.Status = inb( Read_SCSI_Data_port );
#if EVERY_ACCESS
	 printk( "Status = %x, ", current_SC->SCp.Status );
#endif
#if ERRORS_ONLY
	 if (current_SC->SCp.Status && current_SC->SCp.Status != 2) {
	    printk( "Future Domain: target = %d, command = %x, "
		    "Status = %x\n",
		    current_SC->target, current_SC->cmnd[0],
		    current_SC->SCp.Status );
	 }
#endif
	       break;
      case 0x0a:		/* MESSAGE OUT */
	 outb( MESSAGE_REJECT, Write_SCSI_Data_port ); /* Reject */
	 break;
      case 0x0e:		/* MESSAGE IN */
	 current_SC->SCp.Message = inb( Read_SCSI_Data_port );
#if EVERY_ACCESS
	 printk( "Message = %x, ", current_SC->SCp.Message );
#endif
	 if (!current_SC->SCp.Message) ++done;
#if DEBUG_MESSAGES || EVERY_ACCESS
	 if (current_SC->SCp.Message) {
	    printk( "Future Domain: Message = %x\n",
		    current_SC->SCp.Message );
	 }
#endif
	 break;
      }
   }

   if (chip == tmc1800
       && !current_SC->SCp.have_data_in
       && (current_SC->SCp.sent_command
	   >= COMMAND_SIZE( current_SC->cmnd[ 0 ] ))) {
				/* We have to get the FIFO direction
				   correct, so I've made a table based
				   on the SCSI Standard of which commands
				   appear to require a DATA OUT phase.
				 */
      /*
	p. 94: Command for all device types
	CHANGE DEFINITION            40 DATA OUT
	COMPARE                      39 DATA OUT
	COPY                         18 DATA OUT
	COPY AND VERIFY              3a DATA OUT
	INQUIRY                      12 
	LOG SELECT                   4c DATA OUT
	LOG SENSE                    4d
	MODE SELECT (6)              15 DATA OUT
	MODE SELECT (10)             55 DATA OUT
	MODE SENSE (6)               1a
	MODE SENSE (10)              5a
	READ BUFFER                  3c
	RECEIVE DIAGNOSTIC RESULTS   1c
	REQUEST SENSE                03
	SEND DIAGNOSTIC              1d DATA OUT
	TEST UNIT READY              00
	WRITE BUFFER                 3b DATA OUT

	p.178: Commands for direct-access devices (not listed on p. 94)
	FORMAT UNIT                  04 DATA OUT
	LOCK-UNLOCK CACHE            36
	PRE-FETCH                    34
	PREVENT-ALLOW MEDIUM REMOVAL 1e
	READ (6)/RECEIVE             08
	READ (10)                    3c
	READ CAPACITY                25
	READ DEFECT DATA (10)        37
	READ LONG                    3e
	REASSIGN BLOCKS              07 DATA OUT
	RELEASE                      17
	RESERVE                      16 DATA OUT
	REZERO UNIT/REWIND           01
	SEARCH DATA EQUAL (10)       31 DATA OUT
	SEARCH DATA HIGH (10)        30 DATA OUT
	SEARCH DATA LOW (10)         32 DATA OUT
	SEEK (6)                     0b
	SEEK (10)                    2b
	SET LIMITS (10)              33
	START STOP UNIT              1b
	SYNCHRONIZE CACHE            35
	VERIFY (10)                  2f
	WRITE (6)/PRINT/SEND         0a DATA OUT
	WRITE (10)/SEND              2a DATA OUT
	WRITE AND VERIFY (10)        2e DATA OUT
	WRITE LONG                   3f DATA OUT
	WRITE SAME                   41 DATA OUT ?

	p. 261: Commands for sequential-access devices (not previously listed)
	ERASE                        19
	LOAD UNLOAD                  1b
	LOCATE                       2b
	READ BLOCK LIMITS            05
	READ POSITION                34
	READ REVERSE                 0f
	RECOVER BUFFERED DATA        14
	SPACE                        11
	WRITE FILEMARKS              10 ?

	p. 298: Commands for printer devices (not previously listed)
	****** NOT SUPPORTED BY THIS DRIVER, since 0b is SEEK (6) *****
	SLEW AND PRINT               0b DATA OUT  -- same as seek
	STOP PRINT                   1b
	SYNCHRONIZE BUFFER           10

	p. 315: Commands for processor devices (not previously listed)
	
	p. 321: Commands for write-once devices (not previously listed)
	MEDIUM SCAN                  38
	READ (12)                    a8
	SEARCH DATA EQUAL (12)       b1 DATA OUT
	SEARCH DATA HIGH (12)        b0 DATA OUT
	SEARCH DATA LOW (12)         b2 DATA OUT
	SET LIMITS (12)              b3
	VERIFY (12)                  af
	WRITE (12)                   aa DATA OUT
	WRITE AND VERIFY (12)        ae DATA OUT

	p. 332: Commands for CD-ROM devices (not previously listed)
	PAUSE/RESUME                 4b
	PLAY AUDIO (10)              45
	PLAY AUDIO (12)              a5
	PLAY AUDIO MSF               47
	PLAY TRACK RELATIVE (10)     49
	PLAY TRACK RELATIVE (12)     a9
	READ HEADER                  44
	READ SUB-CHANNEL             42
	READ TOC                     43

	p. 370: Commands for scanner devices (not previously listed)
	GET DATA BUFFER STATUS       34
	GET WINDOW                   25
	OBJECT POSITION              31
	SCAN                         1b
	SET WINDOW                   24 DATA OUT

	p. 391: Commands for optical memory devices (not listed)
	ERASE (10)                   2c
	ERASE (12)                   ac
	MEDIUM SCAN                  38 DATA OUT
	READ DEFECT DATA (12)        b7
	READ GENERATION              29
	READ UPDATED BLOCK           2d
	UPDATE BLOCK                 3d DATA OUT

	p. 419: Commands for medium changer devices (not listed)
	EXCHANGE MEDIUM              46
	INITIALIZE ELEMENT STATUS    07
	MOVE MEDIUM                  a5
	POSITION TO ELEMENT          2b
	READ ELEMENT STATUS          b8
	REQUEST VOL. ELEMENT ADDRESS b5
	SEND VOLUME TAG              b6 DATA OUT

	p. 454: Commands for communications devices (not listed previously)
	GET MESSAGE (6)              08
	GET MESSAGE (10)             28
	GET MESSAGE (12)             a8
      */
	
      switch (current_SC->cmnd[0]) {
      case CHANGE_DEFINITION: case COMPARE:         case COPY:
      case COPY_VERIFY:       case LOG_SELECT:      case MODE_SELECT:
      case MODE_SELECT_10:    case SEND_DIAGNOSTIC: case WRITE_BUFFER:

      case FORMAT_UNIT:       case REASSIGN_BLOCKS: case RESERVE:
      case SEARCH_EQUAL:      case SEARCH_HIGH:     case SEARCH_LOW:
      case WRITE_6:           case WRITE_10:        case WRITE_VERIFY:
      case 0x3f:              case 0x41:

      case 0xb1:              case 0xb0:            case 0xb2:
      case 0xaa:              case 0xae:

      case 0x24:

      case 0x38:              case 0x3d:

      case 0xb6:
	 
      case 0xea:		/* alternate number for WRITE LONG */
	 
	 current_SC->SCp.have_data_in = -1;
	 outb( 0xd0 | PARITY_MASK, TMC_Cntl_port );
	 break;

      case 0x00:
      default:
	 
	 current_SC->SCp.have_data_in = 1;
	 outb( 0x90 | PARITY_MASK, TMC_Cntl_port );
	 break;
      }
   }

   if (current_SC->SCp.have_data_in == -1) { /* DATA OUT */
      while ( (data_count = 0x2000 - inw( FIFO_Data_Count_port )) > 512 ) {
#if EVERY_ACCESS
	 printk( "DC=%d, ", data_count ) ;
#endif
	 if (data_count > current_SC->SCp.this_residual)
	       data_count = current_SC->SCp.this_residual;
	 if (data_count > 0) {
#if EVERY_ACCESS
	    printk( "%d OUT, ", data_count );
#endif
	    if (data_count == 1) {
	       outb( *current_SC->SCp.ptr++, Write_FIFO_port );
	       --current_SC->SCp.this_residual;
	    } else {
	       data_count >>= 1;
	       outsw( Write_FIFO_port, current_SC->SCp.ptr, data_count );
	       current_SC->SCp.ptr += 2 * data_count;
	       current_SC->SCp.this_residual -= 2 * data_count;
	    }
	 }
	 if (!current_SC->SCp.this_residual) {
	    if (current_SC->SCp.buffers_residual) {
	       --current_SC->SCp.buffers_residual;
	       ++current_SC->SCp.buffer;
	       current_SC->SCp.ptr = current_SC->SCp.buffer->address;
	       current_SC->SCp.this_residual = current_SC->SCp.buffer->length;
	    } else
		  break;
	 }
      }
   }
   
   if (current_SC->SCp.have_data_in == 1) { /* DATA IN */
      while ((data_count = inw( FIFO_Data_Count_port )) > 0) {
#if EVERY_ACCESS
	 printk( "DC=%d, ", data_count );
#endif
	 if (data_count > current_SC->SCp.this_residual)
	       data_count = current_SC->SCp.this_residual;
	 if (data_count) {
#if EVERY_ACCESS
	    printk( "%d IN, ", data_count );
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品免费久久久久| 国产精品91一区二区| 亚洲一卡二卡三卡四卡五卡| 国产亚洲一二三区| wwwwww.欧美系列| 精品国产乱码久久久久久浪潮 | 欧美性受极品xxxx喷水| 91免费在线看| 91亚洲午夜精品久久久久久| av成人动漫在线观看| av中文字幕亚洲| 色综合久久中文字幕综合网| 91丝袜呻吟高潮美腿白嫩在线观看| 99视频精品全部免费在线| 97se亚洲国产综合自在线观| 91女人视频在线观看| 一本大道av一区二区在线播放| 色天使久久综合网天天| 欧美日韩一区视频| 欧美精品777| 欧美一卡二卡在线观看| 日韩美女在线视频| 国产视频一区二区在线| 国产精品久久久久久久久免费桃花| 日本一区二区免费在线观看视频| 国产精品乱码一区二区三区软件 | 日韩av午夜在线观看| 免费在线观看不卡| 国产精品一级片在线观看| 99久久综合精品| 日本韩国欧美在线| 日韩欧美国产综合| 国产人妖乱国产精品人妖| 亚洲人成7777| 奇米精品一区二区三区四区| 国产一区不卡视频| 97精品视频在线观看自产线路二| 色婷婷综合久久久久中文一区二区 | 国产精品色婷婷久久58| 亚洲精品乱码久久久久久久久 | 亚洲图片欧美视频| 蜜桃久久久久久| 成人开心网精品视频| 欧美视频中文字幕| 国产亚洲欧美色| 亚洲一区二区视频在线观看| 精品一区二区三区影院在线午夜 | 欧美一区二区三区在线电影| 久久久久久久久久久电影| 亚洲美女视频在线| 久久99精品网久久| 色综合久久88色综合天天6| 日韩一区二区三区视频| 国产精品你懂的| 丝袜诱惑亚洲看片| 国产精品小仙女| 欧美日韩一区二区三区四区 | 国产精品久久久久影院色老大| 亚洲一区在线视频| 国产一区二区h| 555www色欧美视频| 亚洲视频一区二区在线观看| 伦理电影国产精品| 欧美在线综合视频| 国产区在线观看成人精品| 亚瑟在线精品视频| 成av人片一区二区| 日韩三级高清在线| 亚洲第一激情av| 成人国产一区二区三区精品| 日韩欧美第一区| 亚洲国产wwwccc36天堂| 成年人国产精品| 国产亚洲一区二区在线观看| 丝袜诱惑亚洲看片| 欧美性猛交xxxx黑人交| 亚洲欧洲精品天堂一级| 国产一区二区三区四区五区美女| 538在线一区二区精品国产| 亚洲夂夂婷婷色拍ww47| 白白色亚洲国产精品| 亚洲精品在线观看网站| 日本中文字幕一区二区视频| 91久久精品一区二区| 国产精品家庭影院| 久久av中文字幕片| 91麻豆精品国产91久久久使用方法 | 国产精品久久久久精k8 | 日本道色综合久久| 国产精品美女久久久久久久网站| 国产在线乱码一区二区三区| 欧美一区二区三区免费在线看| 亚洲裸体xxx| caoporen国产精品视频| 国产精品午夜春色av| 国产成人免费av在线| 久久久久久久久岛国免费| 精品制服美女久久| 欧美大片日本大片免费观看| 免费观看在线综合| 欧美大尺度电影在线| 免费观看91视频大全| 日韩欧美国产三级| 美女视频免费一区| 久久综合久久综合久久| 狠狠色丁香婷婷综合| 久久精子c满五个校花| 国产91清纯白嫩初高中在线观看| 国产欧美一区二区精品性色超碰| 国产一区二区三区在线观看免费视频| 精品三级在线看| 国产一区在线视频| 国产日韩欧美激情| 99r精品视频| 一区二区三区在线视频免费观看| 在线中文字幕一区| 一区二区视频在线| 欧洲生活片亚洲生活在线观看| 亚洲精品久久久久久国产精华液| 欧美体内she精视频| 奇米一区二区三区| 久久久久99精品国产片| 成人免费看视频| 一区二区三区在线免费| 欧美日韩精品一区二区天天拍小说 | 久久久久久久久99精品| 成人午夜精品在线| 亚洲裸体在线观看| 6080yy午夜一二三区久久| 久久精品国产亚洲高清剧情介绍| 久久―日本道色综合久久| 成人av在线资源网站| 亚洲男人电影天堂| 91精选在线观看| 国产精品一区免费视频| 亚洲图片激情小说| 91麻豆精品国产91久久久久久久久 | 综合中文字幕亚洲| 欧美日韩亚洲综合在线 | 在线免费观看不卡av| 日本视频一区二区三区| 欧美极品另类videosde| 日本韩国欧美国产| 久色婷婷小香蕉久久| 国产精品久久一级| 欧美精品aⅴ在线视频| 国产超碰在线一区| 亚洲国产综合人成综合网站| 日韩视频免费观看高清在线视频| 粉嫩欧美一区二区三区高清影视| 亚洲欧美成aⅴ人在线观看| 4438x亚洲最大成人网| 丁香啪啪综合成人亚洲小说| 无码av免费一区二区三区试看 | 日本不卡中文字幕| 亚洲欧洲国产专区| 日韩精品中文字幕一区二区三区| 成人av资源在线观看| 秋霞电影一区二区| 《视频一区视频二区| 日韩一区国产二区欧美三区| 成人免费看片app下载| 七七婷婷婷婷精品国产| 亚洲免费观看高清完整版在线观看熊 | 99精品在线免费| 精一区二区三区| 亚洲伊人伊色伊影伊综合网| 国产欧美一区二区在线观看| 欧美一区二区三区视频| 99久久久久久| 久久99久久久久| 亚洲综合在线电影| 中文字幕欧美区| 日韩三级视频在线看| 在线观看日产精品| 国产精品亚洲第一| 美洲天堂一区二卡三卡四卡视频| 亚洲欧美中日韩| 2020国产精品自拍| 欧美精品18+| 欧美在线观看一二区| 91在线视频免费观看| 国产激情一区二区三区四区| 美国三级日本三级久久99| 亚洲国产综合人成综合网站| 国产精品九色蝌蚪自拍| 久久久国产一区二区三区四区小说| 欧美一级艳片视频免费观看| 欧美三级在线看| 99久久综合99久久综合网站| 国产一区视频网站| 久久激五月天综合精品| 天堂影院一区二区| 午夜精品久久久久久久久| 夜夜爽夜夜爽精品视频| 亚洲免费在线看| 综合电影一区二区三区| 中文字幕在线免费不卡| 国产精品污www在线观看| 久久精品夜色噜噜亚洲a∨|