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

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

?? pci_utils.c

?? 話帶數據中傳真解調程序
?? C
字號:
/* * *	General PCI utilities. * *  Copyright (c) 1999 Richard J.M. Close *  Copyright (c) 1999 Pavel Machek <pavel@suse.cz> *  Copyright (c) 1999 Jamie Lokier * *	Can be freely distributed and used under the terms of the GNU GPL. */#include "pci_utils.h"/********************************************************************************** PCI utilities.**********************************************************************************/// Initialises stuff used by PCI routines in this file.// This must be called prior to using any other routines.void init_pci(void){   modem_found = false;  io_cnt = 0;  htype0_cnt = 6;  pacc = pci_alloc();  pacc->error = die;  pci_filter_init(pacc, &filter);  pci_init(pacc);  scan_devices();  sort_them();}void cleanup_pci (void){  pci_cleanup(pacc);}unsigned int get_pcimodem_irq (void){   return modem_dev->dev->irq;}struct device *scan_device(struct pci_dev *p){  int how_much = 0x40; /* First 64 bytes. */  struct device *d;  if (!pci_filter_match(&filter, p))    return NULL;  d = xmalloc(sizeof(struct device));  bzero(d, sizeof(*d));  d->dev = p;  if (!pci_read_block(p, 0, d->config, how_much))    die("Unable to read %d bytes of configuration space.", how_much);  if (how_much < 128 && (d->config[PCI_HEADER_TYPE] & 0x7f) == PCI_HEADER_TYPE_CARDBUS)    {      /* For cardbus bridges, we need to fetch 64 bytes more to get the full standard header... */      if (!pci_read_block(p, 0, d->config+64, 64))	die("Unable to read cardbus bridge extension data.");      how_much = 128;    }  d->config_cnt = how_much;  pci_setup_cache(p, d->config, d->config_cnt);  pci_fill_info(p, PCI_FILL_IDENT | PCI_FILL_IRQ | PCI_FILL_BASES | PCI_FILL_ROM_BASE);  return d;}voidscan_devices(void){  struct device *d;  struct pci_dev *p;  pci_scan_bus(pacc);  for(p=pacc->devices; p; p=p->next)    if (d = scan_device(p))      {	d->next = first_dev;	first_dev = d;      }}intcheck_root(void){  int is_root = -1;  if (is_root < 0)    is_root = !geteuid();  return is_root;}intconfig_fetch(struct device *d, unsigned int pos, unsigned int len){  if (pos + len < d->config_cnt)    return 1;  if (pacc->method != PCI_ACCESS_DUMP && !check_root())    return 0;  return pci_read_block(d->dev, pos, d->config + pos, len);}/* Config space accesses */inline byteget_conf_byte(struct device *d, unsigned int pos){  return d->config[pos];}wordget_conf_word(struct device *d, unsigned int pos){  return d->config[pos] | (d->config[pos+1] << 8);}unsigned longget_conf_long(struct device *d, unsigned int pos){  return d->config[pos] |    (d->config[pos+1] << 8) |    (d->config[pos+2] << 16) |    (d->config[pos+3] << 24);}/* Sorting */intcompare_them(const void *A, const void *B){  const struct pci_dev *a = (*(const struct device **)A)->dev;  const struct pci_dev *b = (*(const struct device **)B)->dev;  if (a->bus < b->bus)    return -1;  if (a->bus > b->bus)    return 1;  if (a->dev < b->dev)    return -1;  if (a->dev > b->dev)    return 1;  if (a->func < b->func)    return -1;  if (a->func > b->func)    return 1;  return 0;}voidsort_them(void){  struct device **index, **h, **last_dev;  int cnt;  struct device *d;  cnt = 0;  for(d=first_dev; d; d=d->next)    cnt++;  h = index = alloca(sizeof(struct device *) * cnt);  for(d=first_dev; d; d=d->next)    *h++ = d;  qsort(index, cnt, sizeof(struct device *), compare_them);  last_dev = &first_dev;  h = index;  while (cnt--)    {      *last_dev = *h;      last_dev = &(*h)->next;      h++;    }  *last_dev = NULL;}/* Normal output */voidshow_bases(struct device *d, int cnt){  struct pci_dev *p = d->dev;  word cmd = get_conf_word(d, PCI_COMMAND);  int i;  for(i=0; i<cnt; i++)    {      pciaddr_t pos = p->base_addr[i];      u32 flg = get_conf_long(d, PCI_BASE_ADDRESS_0 + 4*i);      if (flg == 0xffffffff)	flg = 0;      if (!pos && !flg) continue;      printf("\tRegion %d: ", i);      if (pos && !flg)			/* Reported by the OS, but not by the device */	{	  printf("[virtual] ");	  flg = pos;	}      if (flg & PCI_BASE_ADDRESS_SPACE_IO)	{	  pciaddr_t a = pos & PCI_BASE_ADDRESS_IO_MASK;	  printf("I/O ports at ");	  if (a) {	    printf(IO_FORMAT, a); 	  }	  else if (flg & PCI_BASE_ADDRESS_IO_MASK)	    printf("<ignored>");	  else	    printf("<unassigned>");	  if (!(cmd & PCI_COMMAND_IO))	    printf(" [disabled]");	}      else	{	  int t = flg & PCI_BASE_ADDRESS_MEM_TYPE_MASK;	  pciaddr_t a = pos & PCI_ADDR_MEM_MASK;	  int done = 0;	  u32 z = 0;	  printf("Memory at ");	  if (t == PCI_BASE_ADDRESS_MEM_TYPE_64)	    {	      if (i >= cnt - 1)		{		  printf("<invalid-64bit-slot>\n");		  done = 1;		}	      else		{		  i++;		  z = get_conf_long(d, PCI_BASE_ADDRESS_0 + 4*i);		  if (buscentric_view)		    {		      if (a || z)			printf("%08x" ADDR_FORMAT, z, a);		      else			printf("<unassigned>");		      done = 1;		    }		}	    }	  if (!done)	    {	      if (a)		printf(ADDR_FORMAT, a);	      else		printf(((flg & PCI_BASE_ADDRESS_MEM_MASK) || z) ? "<ignored>" : "<unassigned>");	    }	  printf(" (%s, %sprefetchable)",		 (t == PCI_BASE_ADDRESS_MEM_TYPE_32) ? "32-bit" :		 (t == PCI_BASE_ADDRESS_MEM_TYPE_64) ? "64-bit" :		 (t == PCI_BASE_ADDRESS_MEM_TYPE_1M) ? "low-1M" : "type 3",		 (flg & PCI_BASE_ADDRESS_MEM_PREFETCH) ? "" : "non-");	  if (!(cmd & PCI_COMMAND_MEMORY))	    printf(" [disabled]");	}      putchar('\n');    }}voidshow_htype0(struct device *d){  unsigned long rom = d->dev->rom_base_addr;  show_bases(d, htype0_cnt);  if (rom & 1)    printf("\tExpansion ROM at %08lx%s\n", rom & PCI_ROM_ADDRESS_MASK,	   (rom & PCI_ROM_ADDRESS_ENABLE) ? "" : " [disabled]");  if (get_conf_word(d, PCI_STATUS) & PCI_STATUS_CAP_LIST)    {      int where = get_conf_byte(d, PCI_CAPABILITY_LIST);      while (where)	{	  int id, next, cap;	  printf("\tCapabilities: ");	  if (!config_fetch(d, where, 4))	    {	      puts("<available only to root>");	      break;	    }	  id = get_conf_byte(d, where + PCI_CAP_LIST_ID);	  next = get_conf_byte(d, where + PCI_CAP_LIST_NEXT);	  cap = get_conf_word(d, where + PCI_CAP_FLAGS);	  printf("[%02x] ", where);	  if (id == 0xff)	    {	      printf("<chain broken>\n");	      break;	    }	  switch (id)	    {	    case PCI_CAP_ID_PM:	       printf("Power Management version %d\n", cap & PCI_PM_CAP_VER_MASK);	      break;	    case PCI_CAP_ID_AGP:	      break;	    default:	      printf("#%02x [%04x]", id, cap);	    }	  where = next;	}    }}struct bus *find_bus(struct bridge *b, unsigned int n){  struct bus *bus;  for(bus=b->first_bus; bus; bus=bus->sibling)    if (bus->number == n)      break;  return bus;}struct bus *new_bus(struct bridge *b, unsigned int n){  struct bus *bus = xmalloc(sizeof(struct bus));  bus = xmalloc(sizeof(struct bus));  bus->number = n;  bus->sibling = b->first_bus;  bus->first_dev = NULL;  bus->last_dev = &bus->first_dev;  b->first_bus = bus;  return bus;}voidinsert_dev(struct device *d, struct bridge *b){  struct pci_dev *p = d->dev;  struct bus *bus;  if (! (bus = find_bus(b, p->bus)))    {      struct bridge *c;      for(c=b->child; c; c=c->next)	if (c->secondary <= p->bus && p->bus <= c->subordinate)	  return insert_dev(d, c);      bus = new_bus(b, p->bus);    }  /* Simple insertion at the end _does_ guarantee the correct order as the   * original device list was sorted by (bus, devfn) lexicographically   * and all devices on the new list have the same bus number.   */  *bus->last_dev = d;  bus->last_dev = &d->next;  d->next = NULL;}/* Bus mapping mode */voiddo_map_bridges(int bus, int min, int max){  struct bus_info *bi = bus_info + bus;  struct bus_bridge *b;  bi->guestbook = 1;  for(b=bi->bridges; b; b=b->next)    {      if (bus_info[b->first].guestbook)	b->bug = 1;      else if (b->first < min || b->last > max)	b->bug = 2;      else	{	  bus_info[b->first].via = b;	  do_map_bridges(b->first, b->first, b->last);	}    }}/*  Show hexadecimal dump of first 64 bytes of the PCI configuration space    (the standard header). Useful for debugging of drivers and lspci itself. */voidshow_pcihex_dump(struct device *d){  unsigned int i;  printf("Command reg: ");   printf(" %02x", get_conf_byte(d, 5));  printf(" %02x", get_conf_byte(d, 4));  putchar('\t');  printf("Status reg: ");   printf(" %02x", get_conf_byte(d, 7));  printf(" %02x", get_conf_byte(d, 6));  putchar('\n');    /* Note! the byte order is lsb msb */    printf("Base address regs: ");   for(i=0x10; i<0x24; i++){	printf(" %02x", get_conf_byte(d, i));  }  putchar('\n');}/* Find any known any Lucent modems. */int find_modem(void){  struct device *d;  int i;  for(d=first_dev; d; d=d->next) {	struct pci_dev *p = d->dev;	/* Only cards with vendor ID = Lucent!. */	if (p->vendor_id == 0x11c1) {	  modem_dev = d;	  modem_found = true;	  io_cnt = 0;	  /* Record I/O addresses. */	  for(i=0; i<htype0_cnt; i++){		pciaddr_t pos = p->base_addr[i];		u32 flg = get_conf_long(d, PCI_BASE_ADDRESS_0 + 4*i);		if (flg == 0xffffffff) flg = 0;		if (!pos && !flg) continue;		if (flg & PCI_BASE_ADDRESS_SPACE_IO)		  {		  io_address[i] = pos & PCI_BASE_ADDRESS_IO_MASK;                  io_length[i] = (io_address[i] < 0x3f8) ? 8 : 256;		  io_cnt = i;		  }	  }	}  }  return modem_found;}// Show any found modem.void show_pcimodem(void){  int c;  struct pci_dev *p = modem_dev->dev;  byte classbuf[128], devbuf[128];  unsigned int irq = p->irq;  byte latency = get_conf_byte( modem_dev, PCI_LATENCY_TIMER);  word status = get_conf_word( modem_dev, PCI_STATUS);  word cmd = get_conf_word( modem_dev, PCI_COMMAND);  byte max_lat, min_gnt;  word subsys_v, subsys_d;  char ssnamebuf[256];  printf("%02x:%02x.%x %s: %s",	    p->bus,	    p->dev,	    p->func,	    pci_lookup_name(pacc, classbuf, sizeof(classbuf),			 PCI_LOOKUP_CLASS,			 get_conf_word( modem_dev, PCI_CLASS_DEVICE), 0),	    pci_lookup_name(pacc, devbuf, sizeof(devbuf),			 PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE,			 p->vendor_id, p->device_id));   if (c = get_conf_byte( modem_dev, PCI_REVISION_ID))	 printf(" (rev %02x)", c);  if (c = get_conf_byte( modem_dev, PCI_CLASS_PROG))     printf(" (prog-if %02x)", c);  putchar('\n');  // Only cards with device ID 0x44* are mars chipset based.  if ((p->device_id & 0xfff0) == 0x440)	 printf("Mars chipset detected.\n");  else	 printf("Warning: your modem does not have a mars chipset.\n");  max_lat = get_conf_byte( modem_dev, PCI_MAX_LAT);  min_gnt = get_conf_byte( modem_dev, PCI_MIN_GNT);  subsys_v = get_conf_word( modem_dev, PCI_SUBSYSTEM_VENDOR_ID);  subsys_d = get_conf_word( modem_dev, PCI_SUBSYSTEM_ID);  if (subsys_v && subsys_v != 0xffff)     printf("\tSubsystem: %s\n",           pci_lookup_name(pacc, ssnamebuf, sizeof(ssnamebuf),		   PCI_LOOKUP_SUBSYSTEM | PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE,		   subsys_v, subsys_d));  printf("\tFlags: ");  if (cmd & PCI_COMMAND_MASTER)     printf("bus master, ");  if (cmd & PCI_COMMAND_VGA_PALETTE)	 printf("VGA palette snoop, ");  if (cmd & PCI_COMMAND_WAIT)   	 printf("stepping, ");  if (cmd & PCI_COMMAND_FAST_BACK)	 printf("fast Back2Back, ");  if (status & PCI_STATUS_66MHZ)	 printf("66Mhz, ");  if (status & PCI_STATUS_UDF)	 printf("user-definable features, ");     printf("%s devsel",	        ((status & PCI_STATUS_DEVSEL_MASK) == PCI_STATUS_DEVSEL_SLOW) ? "slow" :	        ((status & PCI_STATUS_DEVSEL_MASK) == PCI_STATUS_DEVSEL_MEDIUM) ? "medium" :	        ((status & PCI_STATUS_DEVSEL_MASK) == PCI_STATUS_DEVSEL_FAST) ? "fast" : "??");  if (cmd & PCI_COMMAND_MASTER)	 printf(", latency %d", latency);  if (irq)	 printf(", IRQ " IRQ_FORMAT, irq);  putchar('\n');  show_htype0( modem_dev);}void redisplay_modem_regs(void) {	/* Re-scan device. */	printf ("Registers now contain:\n");	pci_scan_bus(pacc);	modem_dev = scan_device(modem_dev->dev);	/* Show the hex. */	show_pcihex_dump(modem_dev); }voidset_modem_cont_reg(void) {   /* value input by user. */   int input = 0;   /* CR input after first char. */   char trash;    /* Allow user to set control register. */   printf ("Set control register (value in hex): ");   scanf ("%x%c", &input, &trash);   printf ("Writing %x to control register.\n", input);   /* command register is at address 04. */   pci_write_word(modem_dev->dev, 0x04, input); }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美videossexotv100| 久久精品国产第一区二区三区| 精品视频1区2区| 日韩中文字幕区一区有砖一区| 日韩欧美一级二级三级| 久久国产麻豆精品| 欧美国产精品一区二区| av在线播放成人| 亚洲欧美中日韩| 一区二区三区免费在线观看| 成人激情文学综合网| 国产真实精品久久二三区| 亚洲欧美日韩中文播放| 久久亚洲精华国产精华液| 91电影在线观看| 精品蜜桃在线看| 91美女在线看| 豆国产96在线|亚洲| 国产一区不卡精品| 久久精品国产99久久6| 日韩成人av影视| 亚洲成在人线在线播放| 亚洲免费观看高清在线观看| 国产精品免费av| 久久九九国产精品| 精品成a人在线观看| 在线播放中文一区| 欧美最猛黑人xxxxx猛交| 日韩av中文字幕一区二区三区| 欧美一级片在线看| 欧美丝袜自拍制服另类| 美女爽到高潮91| 国产精品美女久久久久久2018 | 婷婷久久综合九色综合绿巨人 | gogo大胆日本视频一区| 国产精品123| 国产乱对白刺激视频不卡| 久久99精品久久久久久动态图| 无码av免费一区二区三区试看| 蜜臀精品久久久久久蜜臀| 日韩一区二区在线看| 91麻豆精品国产91久久久久 | 久久久久国产精品免费免费搜索| 日韩一级精品视频在线观看| 欧美一级欧美三级在线观看| 3d动漫精品啪啪一区二区竹菊| 欧美日韩1区2区| 日韩欧美一区中文| 1区2区3区国产精品| 亚洲人精品午夜| 亚洲精品网站在线观看| 亚洲精品少妇30p| 国产精品久久久久影院老司 | 午夜成人在线视频| 久久精品在线观看| 色偷偷久久一区二区三区| av电影在线观看不卡| 日本中文字幕不卡| 爽爽淫人综合网网站| 麻豆精品久久精品色综合| 狠狠色丁香婷婷综合久久片| 国产盗摄视频一区二区三区| 99精品视频一区二区三区| 色av成人天堂桃色av| 欧美日韩国产中文| 精品国产一区二区三区久久影院| 国产亚洲精品aa午夜观看| 亚洲人成网站精品片在线观看| 亚洲成人动漫在线观看| 奇米一区二区三区| 国产成人免费9x9x人网站视频| av福利精品导航| 欧美日韩免费不卡视频一区二区三区| 欧美一区二区视频网站| 国产亚洲综合av| 亚洲精选一二三| 美女被吸乳得到大胸91| 成人精品一区二区三区四区 | 欧美成人精精品一区二区频| 国产欧美综合色| 亚洲丰满少妇videoshd| 国产精品资源网站| 久久久久久久久一| 亚洲视频免费在线| 日av在线不卡| 成人av在线播放网站| 在线播放亚洲一区| 国产精品毛片大码女人| 三级成人在线视频| 日韩中文字幕麻豆| 94色蜜桃网一区二区三区| 日韩免费观看高清完整版| 亚洲欧美日韩一区二区三区在线观看| 日韩专区欧美专区| 色综合久久综合网| ww亚洲ww在线观看国产| 亚洲一区二区五区| 国产成人精品三级| 欧美男男青年gay1069videost| 中文一区在线播放| 美女视频免费一区| 欧美日韩精品一区二区天天拍小说| 国产日韩欧美a| 免费在线观看日韩欧美| 在线视频综合导航| 国产色产综合色产在线视频| 日韩va亚洲va欧美va久久| 91视频观看视频| 日本一区二区三区电影| 奇米影视一区二区三区小说| 91久久精品一区二区三| 国产午夜久久久久| 日本不卡视频在线| 91成人在线精品| 国产精品久久久久影院亚瑟| 国产乱色国产精品免费视频| 欧美精品色一区二区三区| 国产精品毛片高清在线完整版 | 国产九九视频一区二区三区| 欧美精品在欧美一区二区少妇| 国产精品久久久久久久久动漫| 国产麻豆日韩欧美久久| 91精品国产日韩91久久久久久| 一卡二卡三卡日韩欧美| www.一区二区| 中文字幕乱码亚洲精品一区| 国产在线不卡一卡二卡三卡四卡| 成人自拍视频在线观看| 欧美性猛交xxxxxxxx| 久久久久久毛片| 中文字幕日本不卡| 精东粉嫩av免费一区二区三区| 欧美日韩一级片在线观看| 亚洲国产精品高清| 国产精品99久久久久久有的能看 | 日韩精品一级中文字幕精品视频免费观看 | 在线这里只有精品| 亚洲精品美腿丝袜| jlzzjlzz亚洲女人18| 国产精品国产三级国产普通话三级| 黑人巨大精品欧美黑白配亚洲| 日韩精品一区二区三区中文精品| 舔着乳尖日韩一区| 欧美肥妇毛茸茸| 日本欧美一区二区在线观看| 制服视频三区第一页精品| 日韩电影免费一区| 日韩精品最新网址| 国产一区亚洲一区| 国产欧美一区视频| 99精品视频中文字幕| 亚洲欧洲在线观看av| 99国产精品99久久久久久| 亚洲欧美一区二区三区国产精品 | 日本午夜一本久久久综合| 日韩欧美一区二区久久婷婷| 久久疯狂做爰流白浆xx| 久久久精品欧美丰满| 成人黄色小视频在线观看| 亚洲天堂精品在线观看| 欧美午夜一区二区三区免费大片| 天天av天天翘天天综合网 | 热久久一区二区| 欧美一区二区精品| 国产剧情一区在线| 国产亚洲欧美色| 99在线精品免费| 日韩精品福利网| 国产亚洲欧洲997久久综合 | 欧美综合一区二区三区| 国产亚洲一二三区| 亚洲精品成人天堂一二三| 亚洲综合色网站| 麻豆精品视频在线观看| 在线观看一区日韩| 日韩一级高清毛片| 婷婷综合五月天| 欧美在线视频日韩| 一个色妞综合视频在线观看| 97aⅴ精品视频一二三区| 国产偷国产偷精品高清尤物| 久久国内精品自在自线400部| 91精品国产一区二区三区蜜臀| 亚洲精品免费在线播放| 色老汉一区二区三区| 亚洲一区二区视频| 欧美日韩中字一区| 亚洲成人自拍一区| 日韩精品一区二区三区在线播放| 免费成人av资源网| 国产日韩三级在线| 97se亚洲国产综合自在线观| 亚洲成精国产精品女| 日韩欧美一级二级三级久久久| 麻豆91小视频| 中文字幕欧美一| 欧美日韩一区国产| 久草在线在线精品观看| 国产精品水嫩水嫩| 在线观看91av|