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

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

?? fdomain.c

?? linux 1.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一区二区在线观看| 亚洲综合视频网| 亚洲国产成人91porn| 一区二区高清免费观看影视大全| 亚洲欧美自拍偷拍色图| 亚洲乱码精品一二三四区日韩在线| 国产精品激情偷乱一区二区∴| 国产精品麻豆网站| 亚洲少妇最新在线视频| 亚洲第一av色| 蜜臀va亚洲va欧美va天堂| 韩国成人精品a∨在线观看| 狠狠色2019综合网| 成人黄色片在线观看| 91论坛在线播放| 欧美丰满嫩嫩电影| 精品久久国产老人久久综合| 久久久亚洲精华液精华液精华液| 国产日产欧产精品推荐色 | 欧美一级片在线| 欧美电视剧在线观看完整版| 国产亚洲一区二区三区四区| 成人免费一区二区三区视频| 亚洲成人自拍偷拍| 国产一区二区三区综合| 97久久精品人人做人人爽50路| 欧美亚洲免费在线一区| 日韩欧美在线影院| 亚洲人成影院在线观看| 蜜臀精品久久久久久蜜臀| 成人教育av在线| 制服丝袜av成人在线看| 欧美韩国日本综合| 日韩精品福利网| 国产成人在线视频网站| 欧美伊人久久大香线蕉综合69| 日韩一级高清毛片| 自拍偷拍欧美激情| 美女视频黄频大全不卡视频在线播放| 福利一区在线观看| 欧美一区二区三区人| 日韩一区有码在线| 国产一区二区三区四区五区入口| 色八戒一区二区三区| 久久综合丝袜日本网| 日韩中文字幕不卡| 91蜜桃在线观看| 久久精品视频在线看| 午夜视频一区二区| 色综合视频一区二区三区高清| 日韩精品自拍偷拍| 午夜精彩视频在线观看不卡| 成年人国产精品| 精品国产乱码久久久久久久| 午夜激情久久久| 在线视频中文字幕一区二区| 亚洲欧洲另类国产综合| 国产福利精品一区| 久久婷婷一区二区三区| 另类专区欧美蜜桃臀第一页| 欧美群妇大交群的观看方式| 亚洲乱码一区二区三区在线观看| 波多野结衣一区二区三区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 国产一区二区在线观看视频| 日韩西西人体444www| 日韩高清一区在线| 欧美精品高清视频| 三级一区在线视频先锋| 欧美日韩国产区一| 亚洲电影在线免费观看| 欧美日韩精品一区二区在线播放| 亚洲乱码国产乱码精品精的特点| av亚洲精华国产精华精华| 国产精品女人毛片| 99久久er热在这里只有精品66| 欧美国产成人精品| 99久久免费视频.com| 中文字幕在线不卡| 色狠狠一区二区| 天天综合日日夜夜精品| 欧美美女视频在线观看| 日韩av不卡在线观看| 日韩欧美电影一二三| 韩国一区二区视频| 国产精品久久久久影视| 日本精品视频一区二区| 亚洲电影你懂得| 久久女同互慰一区二区三区| 成人夜色视频网站在线观看| 最新高清无码专区| 在线观看91av| 国产精品456露脸| 亚洲免费在线观看视频| 欧美日本韩国一区| 久久99精品国产91久久来源| 国产日韩欧美精品电影三级在线| www.成人网.com| 亚洲成人av在线电影| 欧美电视剧免费全集观看| 成人一区二区在线观看| 性做久久久久久| 久久亚洲一级片| 91久久精品一区二区三区| 日韩vs国产vs欧美| 中文字幕日韩精品一区| 6080国产精品一区二区| 国产成人在线免费观看| 亚洲成人免费在线观看| 亚洲精品在线网站| 在线视频一区二区三区| 国产剧情一区二区三区| 一区二区三区在线观看视频| 精品奇米国产一区二区三区| 色综合久久久久综合体| 看电影不卡的网站| 亚洲视频香蕉人妖| 久久午夜色播影院免费高清| 欧美人妇做爰xxxⅹ性高电影| 成人va在线观看| 精品影院一区二区久久久| 一区二区在线观看av| 久久久影院官网| 欧美一级高清片| 色av综合在线| 91亚洲精品久久久蜜桃| 国产精华液一区二区三区| 日产国产欧美视频一区精品| 亚洲欧美一区二区三区孕妇| 国产欧美日韩在线观看| 日韩美女视频在线| 666欧美在线视频| 欧美日韩一区二区欧美激情| 91在线免费看| 成人爽a毛片一区二区免费| 精品无码三级在线观看视频| 亚洲成人av一区| 亚洲丶国产丶欧美一区二区三区| 亚洲精品日韩专区silk| 国产视频911| 国产校园另类小说区| 精品1区2区在线观看| 欧美成人一区二区| 欧美日韩的一区二区| 欧美日韩激情在线| 欧美综合色免费| 欧美综合在线视频| 在线观看日韩一区| 欧美午夜片在线观看| 日本精品视频一区二区| 欧洲一区二区av| 欧美视频精品在线| 欧美久久久久中文字幕| 欧美日本一区二区三区四区| 欧美三级一区二区| 欧美一区二区三区四区五区| 欧美乱熟臀69xxxxxx| 欧美日本一道本在线视频| 日韩一级视频免费观看在线| 日韩欧美一区在线观看| www国产精品av| 国产欧美日韩亚州综合| 国产精品久久网站| 亚洲综合男人的天堂| 日本免费新一区视频| 精久久久久久久久久久| 成人免费福利片| 色综合一个色综合| 欧美日韩国产三级| 亚洲精品在线观看网站| 国产精品久线在线观看| 亚洲乱码国产乱码精品精98午夜 | 欧美精品电影在线播放| 欧美一卡二卡在线| 国产午夜精品一区二区三区视频| 国产精品传媒入口麻豆| 亚洲无人区一区| 免费精品视频最新在线| 国产精品亚洲视频| 91在线观看下载| 欧美老肥妇做.爰bbww视频| 欧美变态tickle挠乳网站| 国产精品美女一区二区在线观看| 一区二区三区在线观看视频| 精品一区二区三区视频| 97se亚洲国产综合自在线观| 欧美日韩成人综合| 亚洲国产电影在线观看| 亚洲午夜精品17c| 国产精品白丝jk白祙喷水网站| 成人国产精品免费观看| 欧美一区永久视频免费观看| 国产精品久久久久久亚洲毛片 | 99视频在线精品| 日韩一区二区在线观看视频| 1024成人网| 国产一区二区三区美女|