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

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

?? fdomain.c

?? linux 1.0 源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
      are using ISA boards, but Future Domain provides the MCA ID      anyway.  We can use this ID to ensure that this is a Future      Domain TMC-1660/TMC-1680.    */   if (inb( port + LSB_ID_Code ) != 0xe9) { /* test for 0x6127 id */      if (inb( port + LSB_ID_Code ) != 0x27) return 0;      if (inb( port + MSB_ID_Code ) != 0x61) return 0;      chip = tmc1800;   } else {			            /* test for 0xe960 id */      if (inb( port + MSB_ID_Code ) != 0x60) return 0;      chip = tmc18c50;   }   /* We have a valid MCA ID for a TMC-1660/TMC-1680 Future Domain board.      Now, check to be sure the bios_base matches these ports.  If someone      was unlucky enough to have purchased more than one Future Domain      board, then they will have to modify this code, as we only detect one      board here.  [The one with the lowest bios_base.]  */   options = inb( port + Configuration1 );#if DEBUG_DETECT   printk( " Options = %x\n", options );#endif				/* Check for board with lowest bios_base. */   if (addresses[ (options & 0xc0) >> 6 ] != bios_base)	 return 0;   interrupt_level = ints[ (options & 0x0e) >> 1 ];   return 1;}static int fdomain_test_loopback( void ){   int i;   int result;   for (i = 0; i < 255; i++) {      outb( i, port_base + Write_Loopback );      result = inb( port_base + Read_Loopback );      if (i != result)	    return 1;   }   return 0;}int fdomain_16x0_detect( int hostnum ){   int              i, j;   int              flag = 0;   struct sigaction sa;   int              retcode;#if DO_DETECT   const int        buflen = 255;   Scsi_Cmnd        SCinit;   unsigned char    do_inquiry[] =       { INQUIRY, 0, 0, 0, buflen, 0 };   unsigned char    do_request_sense[] = { REQUEST_SENSE, 0, 0, 0, buflen, 0 };   unsigned char    do_read_capacity[] = { READ_CAPACITY,					   0, 0, 0, 0, 0, 0, 0, 0, 0 };   unsigned char    buf[buflen];#endif#if DEBUG_DETECT   printk( "fdomain_16x0_detect()," );#endif   for (i = 0; !bios_base && i < ADDRESS_COUNT; i++) {#if DEBUG_DETECT      printk( " %x(%x),", (unsigned)addresses[i], (unsigned)bios_base );#endif      for (j = 0; !bios_base && j < SIGNATURE_COUNT; j++) {	 if (!memcmp( ((char *)addresses[i] + signatures[j].sig_offset),		      signatures[j].signature, signatures[j].sig_length )) {	    bios_major = signatures[j].major_bios_version;	    bios_minor = signatures[j].minor_bios_version;	    bios_base = addresses[i];	 }      }   }   if (!bios_base) {#if DEBUG_DETECT      printk( " FAILED: NO BIOS\n" );#endif      return 0;   }   if (bios_major == 2) {      /* The TMC-1660/TMC-1680 has a RAM area just after the BIOS ROM.	 Assuming the ROM is enabled (otherwise we wouldn't have been	 able to read the ROM signature :-), then the ROM sets up the	 RAM area with some magic numbers, such as a list of port	 base addresses and a list of the disk "geometry" reported to	 DOS (this geometry has nothing to do with physical geometry).       */      port_base = *((char *)bios_base + 0x1fcc)	    + (*((char *)bios_base + 0x1fcd) << 8);   #if DEBUG_DETECT      printk( " %x,", port_base );#endif      for (flag = 0, i = 0; !flag && i < PORT_COUNT; i++) {	 if (port_base == ports[i])	       ++flag;      }      if (flag)	    flag = fdomain_is_valid_port( port_base );   }   if (!flag) {			/* Cannot get port base from BIOS RAM */            /* This is a bad sign.  It usually means that someone patched the	 BIOS signature list (the signatures variable) to contain a BIOS	 signature for a board *OTHER THAN* the TMC-1660/TMC-1680.  It	 also means that we don't have a Version 2.0 BIOS :-)       */      #if DEBUG_DETECT      if (bios_major != 2) printk( " RAM FAILED, " );#endif      /* Anyway, the alternative to finding the address in the RAM is	 to just search through every possible port address for one	 that is attached to the Future Domain card.  Don't panic,	 though, about reading all these random port addresses--there	 are rumors that the Future Domain BIOS does something very	 similar.	 Do not, however, check ports which the kernel knows are being used         by another driver.       */      for (i = 0; !flag && i < PORT_COUNT; i++) {	 port_base = ports[i];	 if (check_region( port_base, 0x10 )) {#if DEBUG_DETECT	    printf( " (%x inuse),", port_base );#endif	    continue;	 }#if DEBUG_DETECT	 printk( " %x,", port_base );#endif	 flag = fdomain_is_valid_port( port_base );      }   }   if (!flag) {#if DEBUG_DETECT      printk( " FAILED: NO PORT\n" );#endif      return 0;		/* Cannot find valid set of ports */   }   print_banner();   SCSI_Mode_Cntl_port   = port_base + SCSI_Mode_Cntl;   FIFO_Data_Count_port  = port_base + FIFO_Data_Count;   Interrupt_Cntl_port   = port_base + Interrupt_Cntl;   Interrupt_Status_port = port_base + Interrupt_Status;   Read_FIFO_port        = port_base + Read_FIFO;   Read_SCSI_Data_port   = port_base + Read_SCSI_Data;   SCSI_Cntl_port        = port_base + SCSI_Cntl;   SCSI_Data_NoACK_port  = port_base + SCSI_Data_NoACK;   SCSI_Status_port      = port_base + SCSI_Status;   TMC_Cntl_port         = port_base + TMC_Cntl;   TMC_Status_port       = port_base + TMC_Status;   Write_FIFO_port       = port_base + Write_FIFO;   Write_SCSI_Data_port  = port_base + Write_SCSI_Data;   fdomain_16x0_reset( NULL );   if (fdomain_test_loopback()) {#if DEBUG_DETECT      printk( "Future Domain: LOOPBACK TEST FAILED, FAILING DETECT!\n" );#endif      return 0;   }   this_host = hostnum;				/* Log IRQ with kernel */      if (!interrupt_level) {      panic( "Future Domain: *NO* interrupt level selected!\n" );   } else {      /* Register the IRQ with the kernel */      sa.sa_handler  = fdomain_16x0_intr;      sa.sa_flags    = SA_INTERRUPT;      sa.sa_mask     = 0;      sa.sa_restorer = NULL;            retcode = irqaction( interrupt_level, &sa );      if (retcode < 0) {	 if (retcode == -EINVAL) {	    printk( "Future Domain: IRQ %d is bad!\n", interrupt_level );	    printk( "               This shouldn't happen!\n" );	    printk( "               Send mail to faith@cs.unc.edu\n" );	 } else if (retcode == -EBUSY) {	    printk( "Future Domain: IRQ %d is already in use!\n",		    interrupt_level );	    printk( "               Please use another IRQ!\n" );	 } else {	    printk( "Future Domain: Error getting IRQ %d\n", interrupt_level );	    printk( "               This shouldn't happen!\n" );	    printk( "               Send mail to faith@cs.unc.edu\n" );	 }	 panic( "Future Domain: Driver requires interruptions\n" );      } else {	 printk( "Future Domain: IRQ %d requested from kernel\n",		 interrupt_level );      }   }				/* Log I/O ports with kernel */   snarf_region( port_base, 0x10 );   if ((bios_major == 3 && bios_minor >= 2) || bios_major < 0) {      adapter_mask = 0x80;      scsi_hosts[this_host].this_id = 7;   }   #if DO_DETECT   /* These routines are here because of the way the SCSI bus behaves after      a reset.  This appropriate behavior was not handled correctly by the      higher level SCSI routines when I first wrote this driver.  Now,      however, correct scan routines are part of scsi.c and these routines      are no longer needed.  However, this code is still good for      debugging.  */   SCinit.request_buffer  = SCinit.buffer = buf;   SCinit.request_bufflen = SCinit.bufflen = sizeof(buf)-1;   SCinit.use_sg          = 0;   SCinit.lun             = 0;   printk( "Future Domain detection routine scanning for devices:\n" );   for (i = 0; i < 8; i++) {      SCinit.target = i;      if (i == scsi_hosts[this_host].this_id) /* Skip host adapter */	    continue;      memcpy(SCinit.cmnd, do_request_sense, sizeof(do_request_sense));      retcode = fdomain_16x0_command(&SCinit);      if (!retcode) {	 memcpy(SCinit.cmnd, do_inquiry, sizeof(do_inquiry));	 retcode = fdomain_16x0_command(&SCinit);	 if (!retcode) {	    printk( "     SCSI ID %d: ", i );	    for (j = 8; j < (buf[4] < 32 ? buf[4] : 32); j++)		  printk( "%c", buf[j] >= 20 ? buf[j] : ' ' );	    memcpy(SCinit.cmnd, do_read_capacity, sizeof(do_read_capacity));	    retcode = fdomain_16x0_command(&SCinit);	    if (!retcode) {	       unsigned long blocks, size, capacity;	       	       blocks = (buf[0] << 24) | (buf[1] << 16)		     | (buf[2] << 8) | buf[3];	       size = (buf[4] << 24) | (buf[5] << 16) | (buf[6] << 8) | buf[7];	       capacity = +( +(blocks / 1024L) * +(size * 10L)) / 1024L;	       	       printk( "%lu MB (%lu byte blocks)",		       ((capacity + 5L) / 10L), size );	    } else {	       memcpy(SCinit.cmnd, do_request_sense, sizeof(do_request_sense));	       retcode = fdomain_16x0_command(&SCinit);	    }	    printk ("\n" );	 } else {	    memcpy(SCinit.cmnd, do_request_sense, sizeof(do_request_sense));	    retcode = fdomain_16x0_command(&SCinit);	 }      }   }#endif   return 1;}const char *fdomain_16x0_info(void){   static char buffer[80];   char        *pt;      strcpy( buffer, "Future Domain: TMC-16x0 SCSI driver, version" );   if (strchr( VERSION, ':')) { /* Assume VERSION is an RCS Revision string */      strcat( buffer, strchr( VERSION, ':' ) + 1 );      pt = strrchr( buffer, '$') - 1;      if (!pt)  		/* Stripped RCS Revision string? */	    pt = buffer + strlen( buffer ) - 1;      if (*pt != ' ')	    ++pt;      *pt++ = '\n';      *pt = '\0';   } else {			/* Assume VERSION is a number */      strcat( buffer, " " VERSION "\n" );   }         return buffer;}#if 0static int fdomain_arbitrate( void ){   int           status = 0;   unsigned long timeout;#if EVERY_ACCESS   printk( "fdomain_arbitrate()\n" );#endif      outb( 0x00, SCSI_Cntl_port );              /* Disable data drivers */   outb( adapter_mask, port_base + SCSI_Data_NoACK ); /* Set our id bit */   outb( 0x04 | PARITY_MASK, TMC_Cntl_port ); /* Start arbitration */   timeout = jiffies + 50;	              /* 500 mS */   while (jiffies < timeout) {      status = inb( TMC_Status_port );        /* Read adapter status */      if (status & 0x02)		      /* Arbitration complete */	    return 0;	   }   /* Make bus idle */   fdomain_make_bus_idle();#if EVERY_ACCESS   printk( "Arbitration failed, status = %x\n", status );#endif#if ERRORS_ONLY   printk( "Future Domain: Arbitration failed, status = %x", status );#endif   return 1;}#endifstatic int fdomain_select( int target ){   int           status;   unsigned long timeout;   outb( 0x82, SCSI_Cntl_port ); /* Bus Enable + Select */   outb( adapter_mask | (1 << target), SCSI_Data_NoACK_port );   /* Stop arbitration and enable parity */   outb( PARITY_MASK, TMC_Cntl_port );    timeout = jiffies + 25;	        /* 250mS */   while (jiffies < timeout) {      status = inb( SCSI_Status_port ); /* Read adapter status */      if (status & 1) {		        /* Busy asserted */	 /* Enable SCSI Bus (on error, should make bus idle with 0) */	 outb( 0x80, SCSI_Cntl_port );	 return 0;      }   }   /* Make bus idle */   fdomain_make_bus_idle();#if EVERY_ACCESS   if (!target) printk( "Selection failed\n" );#endif#if ERRORS_ONLY   if (!target) printk( "Future Domain: Selection failed" );#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产综合久久久蜜臀粉嫩| 亚洲h在线观看| 亚洲成人7777| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 日韩一区二区三区免费观看| 亚洲欧美怡红院| 国产成人亚洲综合a∨猫咪| 91精品麻豆日日躁夜夜躁| 亚洲视频一二三| 国产suv一区二区三区88区| 91精品婷婷国产综合久久竹菊| 亚洲日本免费电影| 99免费精品视频| 中文一区在线播放| 高清视频一区二区| 精品国产一区二区精华| 裸体歌舞表演一区二区| 91精品视频网| 青青草伊人久久| 欧美一级搡bbbb搡bbbb| 奇米888四色在线精品| 欧美日韩高清一区二区三区| 亚洲综合在线第一页| 91国产免费观看| 一区二区三区四区五区视频在线观看| 成人动漫精品一区二区| 国产精品久久久一本精品| 国产一区二区按摩在线观看| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 日韩欧美另类在线| 玖玖九九国产精品| 精品国产99国产精品| 精品一区二区三区免费观看| 欧美刺激午夜性久久久久久久| 日本三级亚洲精品| 欧美刺激脚交jootjob| 精品一区二区国语对白| 久久久精品国产免大香伊| 国产a级毛片一区| 中文字幕一区免费在线观看 | 欧美一区二区精美| 久久99精品久久只有精品| 精品成人a区在线观看| 国产精品中文字幕欧美| 国产精品久99| 欧美日韩在线一区二区| 青青青伊人色综合久久| 久久久一区二区三区捆绑**| 成+人+亚洲+综合天堂| 亚洲一线二线三线视频| 欧美一区二区三区四区在线观看| 国产一区二区三区四| 亚洲欧洲av一区二区三区久久| 欧美中文字幕不卡| 美女网站色91| 国产精品久久夜| 欧美久久一二区| 国产一区二区0| 亚洲综合精品自拍| 久久综合视频网| 色综合色狠狠综合色| 免费欧美在线视频| 中文字幕一区三区| 日韩视频一区二区三区在线播放 | 国产一区在线观看视频| 日韩理论电影院| 91精品国产综合久久久久| 成人免费观看av| 美腿丝袜亚洲色图| 亚洲美女免费视频| 久久久精品免费网站| 精品视频色一区| 国产99一区视频免费| 日本成人在线不卡视频| **欧美大码日韩| 2014亚洲片线观看视频免费| 欧美少妇bbb| 波多野结衣中文字幕一区| 蜜桃av噜噜一区二区三区小说| 亚洲三级电影网站| 久久九九国产精品| 欧美久久一二区| 色成年激情久久综合| 国产高清视频一区| 蜜桃视频一区二区| 午夜久久久久久久久 | 国产色综合久久| 日韩一区二区电影网| 欧美日韩色一区| 日本福利一区二区| 9人人澡人人爽人人精品| 国产呦精品一区二区三区网站| 午夜欧美在线一二页| 一区二区久久久久久| 国产精品久久精品日日| 国产欧美一二三区| 国产丝袜美腿一区二区三区| 精品久久久三级丝袜| 91精品国产色综合久久不卡电影| 在线一区二区三区| 色哟哟亚洲精品| 91网站最新地址| 99在线精品免费| 成人午夜视频福利| av毛片久久久久**hd| 成人久久视频在线观看| 丁香桃色午夜亚洲一区二区三区| 精品亚洲国产成人av制服丝袜| 伦理电影国产精品| 精品一区二区三区久久| 国产一区在线看| 国产成人亚洲精品青草天美| 国产成人免费网站| 国产91在线观看| 不卡视频一二三四| 91视频在线观看| 色综合久久六月婷婷中文字幕| 97久久超碰精品国产| 色婷婷精品久久二区二区蜜臂av| 一本色道亚洲精品aⅴ| 欧美在线一二三四区| 欧美精品色一区二区三区| 8x8x8国产精品| 26uuu精品一区二区在线观看| 国产日韩一级二级三级| 中文字幕日本不卡| 一区二区三区精品在线| 日韩高清不卡一区| 九色porny丨国产精品| 国产91综合一区在线观看| 91啪亚洲精品| 91 com成人网| 国产欧美精品一区aⅴ影院| 亚洲狼人国产精品| 午夜婷婷国产麻豆精品| 国产精品一二三四区| 日本乱人伦一区| 日韩欧美在线网站| 日本一区二区三区四区| 亚洲一区二区三区视频在线播放| 日本美女一区二区三区| 国产传媒欧美日韩成人| 欧美伊人精品成人久久综合97| 8x8x8国产精品| 中文乱码免费一区二区| 日韩va欧美va亚洲va久久| 国产成人综合精品三级| 欧美日韩国产欧美日美国产精品| 日韩精品中文字幕在线一区| 日韩毛片视频在线看| 美女视频免费一区| 91麻豆国产精品久久| 精品三级av在线| 亚洲男帅同性gay1069| 麻豆国产欧美日韩综合精品二区| 成人app在线| 精品国产百合女同互慰| 亚洲国产综合91精品麻豆| 国产成人精品亚洲777人妖| 精品视频在线免费看| 国产精品女主播av| 精品无人码麻豆乱码1区2区| 在线视频亚洲一区| 中文字幕欧美激情一区| 久久69国产一区二区蜜臀| 91福利社在线观看| 中文字幕精品一区二区精品绿巨人 | 久久欧美中文字幕| 五月婷婷另类国产| 在线一区二区三区四区| 国产精品国产三级国产有无不卡 | 中文在线资源观看网站视频免费不卡| 亚洲午夜免费电影| 91香蕉视频污在线| 欧美激情一二三区| 韩国av一区二区三区四区| 7777女厕盗摄久久久| 亚洲午夜羞羞片| 欧美在线短视频| 亚洲免费av高清| 91丨porny丨蝌蚪视频| 中文字幕av一区二区三区| 国产麻豆成人精品| 26uuu亚洲综合色欧美| 免费视频一区二区| 日韩午夜av电影| 蜜桃视频免费观看一区| 日韩午夜激情电影| 久久成人久久爱| 日韩欧美亚洲另类制服综合在线| 亚洲一区二区欧美激情| 欧美午夜寂寞影院| 亚洲一区二区三区在线| 欧美日韩在线不卡| 亚洲成人777| 91精品国产色综合久久ai换脸 | 国产欧美日韩卡一| 国产成人午夜电影网| 中日韩av电影| 91在线云播放|