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

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

?? fdomain.c

?? <Linux1.0核心游記>電子書+書后源碼+Linux1.0源碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
	    if (data_count == 1) {	       *current_SC->SCp.ptr++ = inb( Read_FIFO_port );	       --current_SC->SCp.this_residual;	    } else {	       data_count >>= 1; /* Number of words */	       insw( Read_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	     && 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;	 }      }   }      if (done) {#if EVERY_ACCESS      printk( " ** IN DONE %d ** ", current_SC->SCp.have_data_in );#endif#if ERRORS_ONLY      if (current_SC->cmnd[0] == REQUEST_SENSE && !current_SC->SCp.Status) {	 if ((unsigned char)(*((char *)current_SC->request_buffer+2)) & 0x0f) {	    unsigned char key;	    unsigned char code;	    unsigned char qualifier;	    key = (unsigned char)(*((char *)current_SC->request_buffer + 2))		  & 0x0f;	    code = (unsigned char)(*((char *)current_SC->request_buffer + 12));	    qualifier = (unsigned char)(*((char *)current_SC->request_buffer					  + 13));	    if (!(key == UNIT_ATTENTION && (code == 0x29 || !code))		&& !(key == NOT_READY		     && code == 0x04		     && (!qualifier || qualifier == 0x02 || qualifier == 0x01))		&& !(key == ILLEGAL_REQUEST && (code == 0x25						|| code == 0x24						|| !code)))		  		  printk( "Future Domain: REQUEST SENSE "			  "Key = %x, Code = %x, Qualifier = %x\n",			  key, code, qualifier );	 }      }#endif#if EVERY_ACCESS      printk( "BEFORE MY_DONE. . ." );#endif      my_done( (current_SC->SCp.Status & 0xff)	       | ((current_SC->SCp.Message & 0xff) << 8) | (DID_OK << 16) );#if EVERY_ACCESS      printk( "RETURNING.\n" );#endif         } else {      if (current_SC->SCp.phase & disconnect) {	 outb( 0xd0 | FIFO_COUNT, Interrupt_Cntl_port );	 outb( 0x00, SCSI_Cntl_port );      } else {	 outb( 0x90 | FIFO_COUNT, Interrupt_Cntl_port );      }   }#if DEBUG_RACE   in_interrupt_flag = 0;#endif   return;}int fdomain_16x0_queue( Scsi_Cmnd * SCpnt, void (*done)(Scsi_Cmnd *)){   if (in_command) {      panic( "Future Domain: fdomain_16x0_queue() NOT REENTRANT!\n" );   }#if EVERY_ACCESS   printk( "queue: target = %d cmnd = 0x%02x pieces = %d size = %u\n",	   SCpnt->target,	   *(unsigned char *)SCpnt->cmnd,	   SCpnt->use_sg,	   SCpnt->request_bufflen );#endif   fdomain_make_bus_idle();   current_SC            = SCpnt; /* Save this for the done function */   current_SC->scsi_done = done;   /* Initialize static data */   if (current_SC->use_sg) {      current_SC->SCp.buffer =	    (struct scatterlist *)current_SC->request_buffer;      current_SC->SCp.ptr              = current_SC->SCp.buffer->address;      current_SC->SCp.this_residual    = current_SC->SCp.buffer->length;      current_SC->SCp.buffers_residual = current_SC->use_sg - 1;   } else {      current_SC->SCp.ptr              = (char *)current_SC->request_buffer;      current_SC->SCp.this_residual    = current_SC->request_bufflen;      current_SC->SCp.buffer           = NULL;      current_SC->SCp.buffers_residual = 0;   }	       current_SC->SCp.Status              = 0;   current_SC->SCp.Message             = 0;   current_SC->SCp.have_data_in        = 0;   current_SC->SCp.sent_command        = 0;   current_SC->SCp.phase               = in_arbitration;   /* Start arbitration */   outb( 0x00, Interrupt_Cntl_port );   outb( 0x00, SCSI_Cntl_port );              /* Disable data drivers */   outb( adapter_mask, SCSI_Data_NoACK_port ); /* Set our id bit */   ++in_command;   outb( 0x20, Interrupt_Cntl_port );   outb( 0x14 | PARITY_MASK, TMC_Cntl_port ); /* Start arbitration */   return 0;}/* The following code, which simulates the old-style command function, was   taken from Tommy Thorn's aha1542.c file.  This code is Copyright (C)   1992 Tommy Thorn. */static volatile int internal_done_flag    = 0;static volatile int internal_done_errcode = 0;static void internal_done( Scsi_Cmnd *SCpnt ){    internal_done_errcode = SCpnt->result;    ++internal_done_flag;}int fdomain_16x0_command( Scsi_Cmnd *SCpnt ){    fdomain_16x0_queue( SCpnt, internal_done );    while (!internal_done_flag)	  ;    internal_done_flag = 0;    return internal_done_errcode;}/* End of code derived from Tommy Thorn's work. */void print_info( Scsi_Cmnd *SCpnt ){   unsigned int imr;   unsigned int irr;   unsigned int isr;      print_banner();   switch (SCpnt->SCp.phase) {   case in_arbitration: printk( "arbitration " ); break;   case in_selection:   printk( "selection " );   break;   case in_other:       printk( "other " );       break;   default:             printk( "unknown " );     break;   }   printk( "(%d), target = %d cmnd = 0x%02x pieces = %d size = %u\n",	   SCpnt->SCp.phase,	   SCpnt->target,	   *(unsigned char *)SCpnt->cmnd,	   SCpnt->use_sg,	   SCpnt->request_bufflen );   printk( "sent_command = %d, have_data_in = %d, timeout = %d\n",	   SCpnt->SCp.sent_command,	   SCpnt->SCp.have_data_in,	   SCpnt->timeout );#if DEBUG_RACE   printk( "in_interrupt_flag = %d\n", in_interrupt_flag );#endif   imr = (inb( 0x0a1 ) << 8) + inb( 0x21 );   outb( 0x0a, 0xa0 );   irr = inb( 0xa0 ) << 8;   outb( 0x0a, 0x20 );   irr += inb( 0x20 );   outb( 0x0b, 0xa0 );   isr = inb( 0xa0 ) << 8;   outb( 0x0b, 0x20 );   isr += inb( 0x20 );				/* Print out interesting information */   printk( "IMR = 0x%04x", imr );   if (imr & (1 << interrupt_level))	 printk( " (masked)" );   printk( ", IRR = 0x%04x, ISR = 0x%04x\n", irr, isr );   printk( "SCSI Status      = 0x%02x\n", inb( SCSI_Status_port ) );   printk( "TMC Status       = 0x%02x", inb( TMC_Status_port ) );   if (inb( TMC_Status_port & 1))	 printk( " (interrupt)" );   printk( "\n" );   printk( "Interrupt Status = 0x%02x", inb( Interrupt_Status_port ) );   if (inb( Interrupt_Status_port ) & 0x08)	 printk( " (enabled)" );   printk( "\n" );   if (chip == tmc18c50) {      printk( "FIFO Status      = 0x%02x\n", inb( port_base + FIFO_Status ) );      printk( "Int. Condition   = 0x%02x\n",	      inb( port_base + Interrupt_Cond ) );   }   printk( "Configuration 1  = 0x%02x\n", inb( port_base + Configuration1 ) );   if (chip == tmc18c50)	 printk( "Configuration 2  = 0x%02x\n",		 inb( port_base + Configuration2 ) );}int fdomain_16x0_abort( Scsi_Cmnd *SCpnt, int code ){#if EVERY_ACCESS || ERRORS_ONLY || DEBUG_ABORT   printk( "Future Domain: Abort " );#endif   cli();   if (!in_command) {#if EVERY_ACCESS || ERRORS_ONLY      printk( " (not in command)\n" );#endif      sti();      return 0;   } else {#if EVERY_ACCESS || ERRORS_ONLY      printk( " code = %d\n", code );#endif   }#if DEBUG_ABORT   print_info( SCpnt );#endif   fdomain_make_bus_idle();   current_SC->SCp.phase |= aborted;   current_SC->result = code ? code : DID_ABORT;   sti();      /* Aborts are not done well. . . */   my_done( code << 16 );   return 0;}int fdomain_16x0_reset( Scsi_Cmnd *SCpnt ){#if DEBUG_RESET   static int called_once = 0;#endif#if ERRORS_ONLY   printk( "Future Domain: SCSI Bus Reset\n" );#endif#if DEBUG_RESET   if (called_once) print_info( current_SC );   called_once = 1;#endif      outb( 1, SCSI_Cntl_port );   do_pause( 2 );   outb( 0, SCSI_Cntl_port );   do_pause( 115 );   outb( 0, SCSI_Mode_Cntl_port );   outb( PARITY_MASK, TMC_Cntl_port );   /* Unless this is the very first call (i.e., SCPnt == NULL), everything      is probably hosed at this point.  We will, however, try to keep      things going by informing the high-level code that we need help. */   if (SCpnt)	 SCpnt->flags |= NEEDS_JUMPSTART;      return 0;}int fdomain_16x0_biosparam( int size, int dev, int *info_array ){   int    drive;   struct drive_info {      unsigned short cylinders;      unsigned char  heads;      unsigned char  sectors;   } *i;      /* NOTES:      The RAM area starts at 0x1f00 from the bios_base address.      For BIOS Version 2.0:            The drive parameter table seems to start at 0x1f30.      The first byte's purpose is not known.      Next is the cylinder, head, and sector information.      The last 4 bytes appear to be the drive's size in sectors.      The other bytes in the drive parameter table are unknown.      If anyone figures them out, please send me mail, and I will      update these notes.      Tape drives do not get placed in this table.      There is another table at 0x1fea:      If the byte is 0x01, then the SCSI ID is not in use.      If the byte is 0x18 or 0x48, then the SCSI ID is in use,      although tapes don't seem to be in this table.  I haven't      seen any other numbers (in a limited sample).      0x1f2d is a drive count (i.e., not including tapes)      The table at 0x1fcc are I/O ports addresses for the various      operations.  I calculate these by hand in this driver code.      For BIOS Version 3.2:      The drive parameter table starts at 0x1f70.  Each entry is      0x0a bytes long.  Heads are one less than we need to report.    */   drive = MINOR(dev) / 16;   if (bios_major == 2) {      i = (struct drive_info *)( (char *)bios_base + 0x1f31 + drive * 25 );      info_array[0] = i->heads;      info_array[1] = i->sectors;      info_array[2] = i->cylinders;   } else if (bios_major == 3) { /* Appears to be the same for 3.0 and 3.2 */      i = (struct drive_info *)( (char *)bios_base + 0x1f71 + drive * 10 );      info_array[0] = i->heads + 1;      info_array[1] = i->sectors;      info_array[2] = i->cylinders;   } else {      /* How the data is stored in the RAM area is very BIOS-dependent.         Therefore, assume a version 3 layout, and check for validity. */            i = (struct drive_info *)( (char *)bios_base + 0x1f71 + drive * 10 );      info_array[0] = i->heads + 1;      info_array[1] = i->sectors;      info_array[2] = i->cylinders;      if (!info_array[0]	  || !info_array[1]	  || !info_array[2]	  || info_array[2] > 1024 /* DOS uses only 10 bits.				     Should this be changed				     to support larger drives?				     I.e., will the controller				     "do the right thing"?				   */	  ) {	 	 info_array[0]	       = info_array[1]	       = info_array[2]	       = 0;      }   }      return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区在线视频| 人禽交欧美网站| 国产成人自拍网| 欧美一区二区在线看| 亚洲成人一区在线| 欧美日韩综合色| 国产精品天天摸av网| 日韩vs国产vs欧美| 制服丝袜日韩国产| 午夜精品123| 91蜜桃免费观看视频| 欧美精品一区二区久久久 | 久久久精品综合| 久久超碰97中文字幕| 欧美v日韩v国产v| 蜜桃av噜噜一区| 精品国精品国产尤物美女| 精品一区二区免费看| 久久久久久久久久久久久夜| 国产麻豆成人精品| 中国色在线观看另类| 不卡电影一区二区三区| 17c精品麻豆一区二区免费| 91麻豆免费看| 一区二区三区美女| 欧美三级三级三级| 美女精品自拍一二三四| 欧美精品一区男女天堂| 岛国一区二区三区| 亚洲猫色日本管| 欧美亚洲免费在线一区| 亚洲精品高清视频在线观看| 欧美中文字幕一区二区三区| 一区二区三区四区高清精品免费观看| 色婷婷国产精品| 日韩av一区二区三区四区| 日韩精品一区二区三区视频 | 国产偷国产偷亚洲高清人白洁 | 亚洲天堂网中文字| 欧美系列日韩一区| 美腿丝袜在线亚洲一区| 日韩欧美精品在线视频| 成人动漫一区二区在线| 国产亲近乱来精品视频| 91久久人澡人人添人人爽欧美| 婷婷久久综合九色综合伊人色| 91精品国产91久久综合桃花 | 性做久久久久久| 精品国产3级a| 91视频观看视频| 麻豆精品新av中文字幕| 国产精品国产三级国产| 欧美精品乱码久久久久久按摩 | 日韩精品中午字幕| 99久久国产综合色|国产精品| 日韩精品欧美精品| 国产亚洲人成网站| 欧美日韩成人综合| 99免费精品视频| 免费观看30秒视频久久| 亚洲精品免费电影| 久久综合丝袜日本网| 欧美日韩精品二区第二页| 国产很黄免费观看久久| 日日夜夜精品视频天天综合网| 中文字幕巨乱亚洲| 欧美一区二区视频在线观看2020| 国产成人亚洲综合a∨婷婷图片| 亚洲欧洲综合另类| 久久久久久久久一| 欧美一区二区三区爱爱| 色婷婷精品久久二区二区蜜臂av| 国产乱子轮精品视频| 午夜伊人狠狠久久| 亚洲免费在线观看视频| 国产日韩综合av| 欧美一级国产精品| 欧美三级中文字幕在线观看| 97se亚洲国产综合自在线不卡 | 欧美一区二区三区免费在线看| 色视频一区二区| av日韩在线网站| 日本女人一区二区三区| 国产精品麻豆视频| 2021久久国产精品不只是精品| 7777精品伊人久久久大香线蕉超级流畅 | 欧美一区二区三区四区高清| 日本道在线观看一区二区| 久久99国产精品免费网站| 一区二区三区在线免费| 中文字幕综合网| |精品福利一区二区三区| 国产欧美一区二区精品忘忧草 | 欧美激情综合网| 精品少妇一区二区三区免费观看| 欧美日韩日日摸| 欧美日韩三级在线| 欧美日韩亚洲综合在线| 欧美日韩精品免费观看视频| 欧美色倩网站大全免费| 欧美性做爰猛烈叫床潮| 在线观看www91| 欧美日韩三级在线| 欧美精品久久天天躁| 欧美一级欧美三级在线观看| 欧美精品1区2区3区| 日本二三区不卡| 成人h动漫精品| 91色九色蝌蚪| 91福利区一区二区三区| 欧美日韩一区三区四区| 在线播放国产精品二区一二区四区| 欧美日韩中字一区| 欧美一级精品在线| 国产日韩v精品一区二区| 国产欧美日韩不卡| 亚洲色图.com| 亚洲123区在线观看| 另类小说视频一区二区| 日韩高清在线电影| 国产一区二区三区四区五区美女| 粉嫩av一区二区三区粉嫩 | 亚洲日本在线a| 夜夜嗨av一区二区三区网页| 天堂久久久久va久久久久| 一区二区三区中文字幕精品精品| 国产精品午夜在线| 亚洲一区视频在线| 久久精品国产久精国产| 成人一区在线看| 欧美午夜在线一二页| 日韩视频一区二区三区在线播放| 欧美国产日本视频| 亚洲国产精品人人做人人爽| 蜜臀av国产精品久久久久| 成人黄色免费短视频| 色狠狠色噜噜噜综合网| 69av一区二区三区| 亚洲国产成人自拍| 亚洲超丰满肉感bbw| 国产成人综合自拍| 欧美日韩一区二区三区免费看| 日韩精品最新网址| 亚洲精品久久久蜜桃| 久久精品国产99国产| 色婷婷av一区二区三区之一色屋| 91麻豆精品国产91久久久 | 色综合咪咪久久| 欧美成人r级一区二区三区| 成人免费一区二区三区视频| 丝袜美腿一区二区三区| 成人激情黄色小说| 日韩午夜av一区| 亚洲精选视频免费看| 国产在线播放一区三区四| 一区二区三区 在线观看视频| 中文字幕在线不卡一区| 国产综合色精品一区二区三区| 欧美性大战久久久久久久蜜臀| 中文字幕av不卡| 成人免费高清视频| 亚洲国产精品ⅴa在线观看| 国产一区二区剧情av在线| 日韩精品一区二区三区四区视频| 日韩av一级电影| 日韩一级黄色大片| 老司机午夜精品| 日韩午夜在线影院| 紧缚奴在线一区二区三区| 日韩欧美123| 精品影视av免费| 久久一夜天堂av一区二区三区| 久久国产精品72免费观看| 日韩久久久久久| 国模大尺度一区二区三区| 久久久久成人黄色影片| 国产成人免费在线视频| 中文字幕av一区二区三区高| 成人aaaa免费全部观看| 亚洲蜜臀av乱码久久精品| 欧美影视一区在线| 日韩精品1区2区3区| 欧美电影免费观看高清完整版 | 日本欧洲一区二区| 亚洲精品一区二区三区蜜桃下载 | 久久免费电影网| 成人动漫在线一区| 一区二区三区四区亚洲| 欧美日韩视频在线第一区| 免费高清在线视频一区·| 国产亚洲一二三区| 色综合久久综合网97色综合| 视频一区欧美日韩| 久久夜色精品国产欧美乱极品| 国产成人av一区| 亚洲男人天堂一区| 欧美一区二区啪啪| 丰满少妇在线播放bd日韩电影| 亚洲影视在线观看| 亚洲精品一线二线三线|