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

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

?? fdomain.c

?? <Linux1.0核心游記>電子書+書后源碼+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| 欧美一级国产精品| 国产亚洲欧美一区在线观看| 亚洲国产综合色| 丁香天五香天堂综合| 国产精品你懂的在线| 成人黄色av电影| 制服丝袜av成人在线看| 99久久精品国产网站| 丁香六月综合激情| 国产亚洲综合在线| 国产精品久久久久久久久动漫 | 日韩在线卡一卡二| 免费一级片91| 欧美另类videos死尸| 亚洲欧美二区三区| 中文字幕高清一区| 国产精品久久夜| 国产日韩欧美综合一区| 五月天激情综合| 欧美色网站导航| 一区二区三区日韩精品视频| 欧美在线综合视频| 国产麻豆精品久久一二三| 亚洲成av人片一区二区三区| 高清不卡一二三区| 国产精品久久久久久久久图文区| 日韩成人一级大片| 18欧美亚洲精品| 91久久人澡人人添人人爽欧美 | 国产成人综合在线观看| 精品系列免费在线观看| 99re成人精品视频| 日韩免费电影一区| 日韩精品一区二区三区中文不卡| 欧美国产禁国产网站cc| 粉嫩13p一区二区三区| 久久九九久久九九| 精品一区二区av| 欧美日韩一区小说| 亚洲成人av中文| 日韩女优视频免费观看| 国产精品系列在线观看| 国产精品每日更新| 欧美亚洲综合久久| 国产精品综合一区二区三区| 一区二区理论电影在线观看| 免费在线看一区| 久久影院午夜片一区| 国产精品系列在线播放| 最新不卡av在线| 精品视频1区2区3区| 久久精品999| 国产精品伦理一区二区| 日本韩国一区二区三区视频| 天堂午夜影视日韩欧美一区二区| 九九精品一区二区| 欧美一区二区在线视频| 蜜臀a∨国产成人精品| 欧美日韩一区久久| 亚洲午夜日本在线观看| 国产自产高清不卡| 欧美国产综合色视频| 天堂va蜜桃一区二区三区漫画版 | 福利91精品一区二区三区| 97久久精品人人爽人人爽蜜臀| 亚洲一区二区av电影| 亚洲精品一区二区三区四区高清 | 日韩精品福利网| 国产午夜精品在线观看| 在线观看网站黄不卡| 美美哒免费高清在线观看视频一区二区| 欧美激情资源网| 日韩亚洲欧美一区二区三区| 91年精品国产| 国产乱码精品一品二品| 亚洲午夜一二三区视频| 国产精品网曝门| 91亚洲国产成人精品一区二区三 | 欧洲一区在线观看| 久久精品国产免费| 国产欧美日韩亚州综合| 91影院在线免费观看| 91美女在线看| 午夜精品免费在线| 亚洲精品免费一二三区| 久久99九九99精品| 国产欧美日韩激情| 国产精品18久久久| 久久久99久久| 午夜国产精品一区| 欧美一级免费观看| 日韩黄色一级片| 亚洲国产精品成人久久综合一区| 国产美女精品在线| 亚洲综合一区二区| 亚洲日本在线天堂| 国产精品美女久久久久久| 久久青草国产手机看片福利盒子| 91精品国产全国免费观看 | 色婷婷av久久久久久久| 国产成人免费视频一区| 国产乱码精品一品二品| 国产一区二区三区四区在线观看| 蜜芽一区二区三区| 日本三级韩国三级欧美三级| 亚洲aaa精品| 亚洲国产一区二区三区青草影视| 一区二区三区电影在线播| 亚洲精品国产高清久久伦理二区| 国产精品美女久久久久久| 国产精品麻豆久久久| 亚洲欧美在线aaa| 亚洲欧美偷拍另类a∨色屁股| 综合激情网...| 亚洲一区二区欧美激情| 亚洲高清不卡在线观看| 青青草精品视频| 国产毛片一区二区| 成人一区二区视频| 99国产欧美另类久久久精品| 在线观看一区二区精品视频| 欧美体内she精高潮| 欧美精品日韩精品| 欧美成人一区二区三区| 国产色爱av资源综合区| 中文字幕在线不卡| 亚洲伊人色欲综合网| 日本亚洲天堂网| 国产高清在线观看免费不卡| 国产.欧美.日韩| 色先锋久久av资源部| 91精品国产综合久久福利软件| 欧美成人性福生活免费看| 国产日韩精品一区二区三区在线| 国产精品久久久久久久蜜臀| 夜夜嗨av一区二区三区网页| 日本系列欧美系列| 国产 日韩 欧美大片| 色国产综合视频| 日韩欧美一二三四区| 国产精品色一区二区三区| 亚洲国产精品视频| 国产精品一区二区在线观看网站| 99re热视频精品| 欧美大片在线观看一区二区| 国产精品美日韩| 免费精品视频最新在线| 91蜜桃在线观看| 91精品国产乱码久久蜜臀| 国产精品你懂的| 蜜臀av性久久久久av蜜臀妖精 | 国产麻豆精品视频| 欧美视频在线观看一区| 国产欧美日韩在线看| 日韩福利视频网| 99国产精品一区| 久久综合精品国产一区二区三区| 亚洲美女免费视频| 国产精品99久久久| 日韩一区二区麻豆国产| 亚洲精品精品亚洲| 国产成人免费视频| 日韩一区二区在线看| 亚洲精品视频在线观看网站| 国产成人8x视频一区二区| 欧美一二三区在线| 亚洲国产精品一区二区久久| aaa国产一区| 国产欧美中文在线| 久久 天天综合| 91精品国产欧美一区二区| 亚洲在线中文字幕| 99久久伊人精品| 国产人妖乱国产精品人妖| 久久精工是国产品牌吗| 欧美日韩日日摸| 一区二区三区高清| 色老头久久综合| 日韩伦理电影网| 国产一区二区在线看| 欧美一区二区三区免费观看视频| 亚洲一区二区五区| 99精品国产热久久91蜜凸| 国产精品三级av| 懂色av一区二区三区免费看| www亚洲一区| 国产精品中文有码| 久久久亚洲精品石原莉奈| 久久国产人妖系列| 欧美一二区视频| 激情都市一区二区| 精品国产百合女同互慰| 精品一区二区三区免费观看 | 一区二区三区精品视频在线| 99久久er热在这里只有精品15| 国产精品久久久久久久午夜片 | 国产一区二区在线电影|