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

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

?? s3gendac.c

?? 基于組件方式開發操作系統的OSKIT源代碼
?? C
字號:
/* $XFree86: xc/programs/Xserver/hw/xfree86/common_hw/S3gendac.c,v 3.23.2.2 1997/05/11 02:56:20 dawes Exp $ */ /* * Progaming of the S3 gendac programable clocks, from the S3 Gendac * programing documentation by S3 Inc.  * Jon Tombs <jon@esix2.us.es> * Also used for GenDAC and GenDAC-like chips on non-S3 chipsets. *//* $XConsortium: S3gendac.c /main/16 1996/10/25 14:11:48 kaleb $ */ #include <math.h>#include "Xfuncproto.h"#include "S3gendac.h" #include "compiler.h"#define NO_OSLIB_PROTOTYPES#include "xf86.h"#include "xf86_OSlib.h"#include "xf86_HWlib.h"#define CLK_MCLK         10#define PLL_S3GENDAC      1#define PLL_S3TRIO        2#define PLL_ET4000GENDAC  3#define PLL_ARK2000GENDAC 4#define PLL_ET6000        5extern int vgaIOBase;static void setS3gendacpll(#if NeedFunctionPrototypesint reg, unsigned char data1, unsigned char data2#endif);static void settriopll(#if NeedFunctionPrototypesint reg, unsigned char data1, unsigned char data2#endif);static void setET4000gendacpll(#if NeedFunctionPrototypesint reg, unsigned char data1, unsigned char data2#endif);static void setET6000pll(#if NeedFunctionPrototypesint reg, unsigned char data1, unsigned char data2#endif);static void setARK2000gendacpll(#if NeedFunctionPrototypesint reg, unsigned char data1, unsigned char data2#endif);static int commonSetClock( #if NeedFunctionPrototypes   long freq, int clock,   int min_m, int min_n1, int max_n1, int min_n2, int max_n2, int pll_type,   long freq_min, long freq_max#endif);     intS3gendacSetClock(freq, clk)long freq;int clk;{   return commonSetClock(freq, clk, 1, 1, 31, 0, 3, PLL_S3GENDAC, 100000, 250000);}intET4000gendacSetClock(freq, clk)long freq;int clk;{   return commonSetClock(freq, clk, 1, 1, 31, 0, 3, PLL_ET4000GENDAC, 100000, 270000);}intET6000SetClock(freq, clk)long freq;int clk;{   return commonSetClock(freq, clk, 1, 1, 31, 0, 3, PLL_ET6000, 100000, 270000);}intET4000gendacSetpixmuxClock(freq, clk)long freq;int clk;{   return commonSetClock(freq, clk, 1, 1, 31, 2, 3, PLL_ET4000GENDAC, 100000, 270000);}intARK2000gendacSetClock(freq, clk)long freq;int clk;{   return commonSetClock(freq, clk, 1, 1, 31, 0, 3, PLL_ARK2000GENDAC, 100000, 270000);}intICS5342SetClock(freq, clk)long freq;int clk;{   return commonSetClock(freq, clk, 1, 1, 31, 1, 3, PLL_S3GENDAC, 100000, 270000);}intS3TrioSetClock(freq, clk)long freq;int clk;{   return commonSetClock(freq, clk, 1, 1, 31, 0, 3, PLL_S3TRIO, 135000, 270000);}intS3Trio64V2SetClock(freq, clk)long freq;int clk;{   return commonSetClock(freq, clk, 1, 1, 31, 0, 4, PLL_S3TRIO, 170000, 340000);}intS3ViRGE_VXSetClock(freq, clk)long freq;int clk;{   if (clk != CLK_MCLK)      return commonSetClock(freq, clk, 0, 0, 31, 0, 4, PLL_S3TRIO, 220000, 440000);   else      return commonSetClock(freq, clk, 0, 0, 31, 0, 3, PLL_S3TRIO, 220000, 440000);}intS3AuroraSetClock(freq, clk)long freq;int clk;{   if (clk == CLK_MCLK)      return commonSetClock(freq, clk, 1, 1, 31, 0, 3, PLL_S3TRIO, 135000, 270000);   else      return commonSetClock(freq, clk, 1, 1, 63, 0, 3, PLL_S3TRIO, 135000, 270000);}int#if NeedFunctionPrototypescommonCalcClock(long freq, int min_m, int min_n1, int max_n1, int min_n2, int max_n2, 		long freq_min, long freq_max,		unsigned char * mdiv, unsigned char * ndiv)#elsecommonCalcClock(freq, min_m, min_n1, max_n1, min_n2, max_n2, 		freq_min, freq_max, mdiv, ndiv)long freq;int min_m, min_n1, max_n1, min_n2, max_n2;long freq_min, freq_max;unsigned char *mdiv, *ndiv;#endif{   double ffreq, ffreq_min, ffreq_max;   double div, diff, best_diff;   unsigned int m;   unsigned char n1, n2;   unsigned char best_n1=16+2, best_n2=2, best_m=125+2;   ffreq     = freq     / 1000.0 / BASE_FREQ;   ffreq_min = freq_min / 1000.0 / BASE_FREQ;   ffreq_max = freq_max / 1000.0 / BASE_FREQ;   if (ffreq < ffreq_min / (1<<max_n2)) {      ErrorF("invalid frequency %1.3f MHz  [freq >= %1.3f MHz]\n", 	     ffreq*BASE_FREQ, ffreq_min*BASE_FREQ / (1<<max_n2));      ffreq = ffreq_min / (1<<max_n2);   }   if (ffreq > ffreq_max / (1<<min_n2)) {      ErrorF("invalid frequency %1.3f MHz  [freq <= %1.3f MHz]\n", 	     ffreq*BASE_FREQ, ffreq_max*BASE_FREQ / (1<<min_n2));      ffreq = ffreq_max / (1<<min_n2);   }   /* work out suitable timings */   best_diff = ffreq;      for (n2=min_n2; n2<=max_n2; n2++) {      for (n1 = min_n1+2; n1 <= max_n1+2; n1++) {	 m = (int)(ffreq * n1 * (1<<n2) + 0.5) ;	 if (m < min_m+2 || m > 127+2) 	    continue;	 div = (double)(m) / (double)(n1);	 	 if ((div >= ffreq_min) &&	     (div <= ffreq_max)) {	    diff = ffreq - div / (1<<n2);	    if (diff < 0.0) 	       diff = -diff;	    if (diff < best_diff) {	       best_diff = diff;	       best_m    = m;	       best_n1   = n1;	       best_n2   = n2;	    }	 }      }   }   #if EXTENDED_DEBUG   ErrorF("Clock parameters for %1.6f MHz: m=%d, n1=%d, n2=%d\n",	  ((double)(best_m) / (double)(best_n1) / (1 << best_n2)) * BASE_FREQ,	  best_m-2, best_n1-2, best_n2);#endif     if (max_n1 == 63)      *ndiv = (best_n1 - 2) | (best_n2 << 6);   else      *ndiv = (best_n1 - 2) | (best_n2 << 5);   *mdiv = best_m - 2;}  static int#if NeedFunctionPrototypescommonSetClock(long freq, int clk, int min_m, int min_n1, int max_n1, int min_n2, 	       int max_n2, int pll_type, long freq_min, long freq_max)#elsecommonSetClock(freq, clk, min_m, min_n1, max_n1, min_n2, max_n2, pll_type, 	       freq_min, freq_max)long freq;int clk;int min_m, min_n1, max_n1, min_n2, max_n2, pll_type;long freq_min, freq_max;#endif{   unsigned char m, n;   commonCalcClock(freq, min_m, min_n1, max_n1, min_n2, max_n2, freq_min, 		   freq_max, &m, &n);   switch(pll_type)   {     case PLL_S3GENDAC:         setS3gendacpll(clk, m, n);         break;     case PLL_S3TRIO:         settriopll(clk, m, n);         break;     case PLL_ET4000GENDAC:         setET4000gendacpll(clk, m, n);         break;     case PLL_ARK2000GENDAC:         setARK2000gendacpll(clk, m, n);         break;     case PLL_ET6000:         setET6000pll(clk, m, n);         break;     default:          ErrorF("Internal error: unknown pll_type in S3gendac.c");         return -1;    }   return 0;}	   static void#if NeedFunctionPrototypessetS3gendacpll(int reg, unsigned char data1, unsigned char data2)#elsesetS3gendacpll(reg, data1, data2)int reg;unsigned char data1;unsigned char data2;#endif{   unsigned char tmp, tmp1;   int vgaCRIndex = vgaIOBase + 4;   int vgaCRReg = vgaIOBase + 5;		   /* set RS2 via CR55, yuck */   outb(vgaCRIndex, 0x55);   tmp = inb(vgaCRReg) & 0xFC;   outb(vgaCRReg, tmp | 0x01);     tmp1 = inb(GENDAC_INDEX);   outb(GENDAC_INDEX, reg);   outb(GENDAC_DATA, data1);   outb(GENDAC_DATA, data2);   /* Now clean up our mess */   outb(GENDAC_INDEX, tmp1);     outb(vgaCRReg, tmp);}static void#if NeedFunctionPrototypessetET4000gendacpll(int reg, unsigned char data1, unsigned char data2)#elsesetET4000gendacpll(reg, data1, data2)int reg;unsigned char data1;unsigned char data2;#endif{   unsigned char tmp, tmp1;   int vgaCRIndex = vgaIOBase + 4;   int vgaCRReg = vgaIOBase + 5;		   /* set RS2 via CR31 */   outb(vgaCRIndex, 0x31);   tmp = inb(vgaCRReg) & 0xBF;   outb(vgaCRReg, tmp | 0x40);     tmp1 = inb(GENDAC_INDEX);   outb(GENDAC_INDEX, reg);   outb(GENDAC_DATA, data1);   outb(GENDAC_DATA, data2);   /* Now clean up our mess */   outb(GENDAC_INDEX, tmp1);     outb(vgaCRReg, tmp);}static void#if NeedFunctionPrototypessetET6000pll(int reg, unsigned char data1, unsigned char data2)#elsesetET6000pll(reg, data1, data2)int reg;unsigned char data1;unsigned char data2;#endif{   /* Tseng Labs engineers were wise enough to use the same    * PLL scheme used in other standard GenDACs -- good!    * Clocks 0..7 are pixel clocks, clock 10 is the memory clock    */   unsigned long PCIIOBase  = 0xDEADBEEF;   unsigned char tmp;   int vgaCRIndex = vgaIOBase + 4;   int vgaCRReg = vgaIOBase + 5;   /* get PCI IO base address first */   outb(vgaCRIndex, 0x21);   PCIIOBase = (inb(vgaCRReg)<<8);   outb(vgaCRIndex, 0x22);   PCIIOBase += (inb(vgaCRReg)<<16);   outb(vgaCRIndex, 0x23);   PCIIOBase += (inb(vgaCRReg)<<24);#if EXTENDED_DEBUG   ErrorF("ET6000: PCIIOBase: 0x%lX ; M/N parameters: 0x%X 0x%X ; clk index: %d\n",           PCIIOBase, data1, data2, reg);#endif   /* set the PLL parameters for specified clock */   tmp = inb(PCIIOBase+0x67); /* remember old CLKDAC index register pointer */   outb(PCIIOBase+0x67, reg);   outb(PCIIOBase+0x69, data1);   outb(PCIIOBase+0x69, data2);   /* restore old index register */   outb(PCIIOBase+0x67, tmp);}static void#if NeedFunctionPrototypessetARK2000gendacpll(int reg, unsigned char data1, unsigned char data2)#elsesetARK2000gendacpll(reg, data1, data2)int reg;unsigned char data1;unsigned char data2;#endif{   unsigned char tmp, tmp1;   int vgaCRIndex = vgaIOBase + 4;   int vgaCRReg = vgaIOBase + 5;		   /* set RS2 via CR1C, bit 0x80 */   outb(vgaCRIndex, 0x1C);   tmp = inb(vgaCRReg) & ~0x80;   outb(vgaCRReg, tmp | 0x80);     tmp1 = inb(GENDAC_INDEX);   outb(GENDAC_INDEX, reg);   outb(GENDAC_DATA, data1);   outb(GENDAC_DATA, data2);   /* Now clean up our mess */   outb(GENDAC_INDEX, tmp1);     outb(vgaCRReg, tmp);}static void#if NeedFunctionPrototypessettriopll(int clk, unsigned char m, unsigned char n)#elsesettriopll(clk, m, n)     int clk;     unsigned char m;     unsigned char n;#endif{   unsigned char tmp;   int index2;   /*    * simlulate S3 GENDAC clock numbers:    * 0,1 for fixed 25 and 28 MHz clocks    * 2-8 free programmable    * 10  MCLK    */   if (clk < 2) {      tmp = inb(0x3cc);      outb(0x3c2, (tmp & 0xf3) | (clk << 2));   }   else {      tmp = inb(0x3cc);      outb(0x3c2, tmp | 0x0c);      outb(0x3c4, 0x08);      outb(0x3c5, 0x06);  /* unlock extended CR9-CR18 */      if (clk != CLK_MCLK) {  /* DCLK */	 outb(0x3c4, 0x12);	 outb(0x3c5, n);	 outb(0x3c4, 0x13);	 outb(0x3c5, m);	 outb(0x3c4, 0x15);	 tmp = inb(0x3c5) & ~0x21;	 outb(0x3c5, tmp | 0x02);	 outb(0x3c5, tmp | 0x22);	 outb(0x3c5, tmp | 0x02);      }      else {		/* MCLK */	 index2 = 0x10;	 outb(0x3c4, 0x10);	 outb(0x3c5, n);	 outb(0x3c4, 0x11);	 outb(0x3c5, m);	 outb(0x3c4, 0x1a);	 outb(0x3c5, n);	 outb(0x3c4, 0x15);	 tmp = inb(0x3c5) & ~0x21;	 outb(0x3c5, tmp | 0x01);	 outb(0x3c5, tmp | 0x21);	 outb(0x3c5, tmp | 0x01);	 outb(0x3c5, tmp);      }      outb(0x3c4, 0x08);      outb(0x3c5, 0x00);  /* lock extended CR9-CR18 */         }}int#if NeedFunctionPrototypesgendacMNToClock(unsigned char m,unsigned char n)#elsegendacMNToClock(m,n)     unsigned char m;     unsigned char n;#endif{	int rtn;	rtn = (1431818 * (m + 2) / ((n & 0x1f)+2) /		(1 << ((n & 0x60) >> 5))) / 100;	return rtn;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人激情社区| 麻豆精品一区二区三区| 久久久久久久久久久黄色| 69堂亚洲精品首页| 欧美日韩亚洲综合一区| 在线观看日产精品| 91久久精品一区二区| 99vv1com这只有精品| av资源站一区| 在线一区二区三区四区| 一本一道波多野结衣一区二区 | 欧美无砖砖区免费| 欧美三级日韩三级国产三级| 欧美婷婷六月丁香综合色| 一本色道综合亚洲| 精品视频在线免费看| 欧美人妖巨大在线| 日韩一区二区在线观看视频播放| 91精品国产入口| 精品国产制服丝袜高跟| 久久一留热品黄| 国产精品嫩草久久久久| 亚洲三级在线免费| 亚洲成人自拍偷拍| 久久99精品国产91久久来源| 国产一区在线精品| 成人午夜在线视频| 欧美在线免费播放| 在线观看91精品国产麻豆| 欧美成人在线直播| 国产目拍亚洲精品99久久精品| 国产精品久久久久久一区二区三区| 日韩美女视频19| 五月婷婷综合网| 精品一区免费av| 97精品久久久久中文字幕 | 亚洲欧美另类久久久精品2019| 亚洲宅男天堂在线观看无病毒| 日韩国产欧美在线视频| 国产一区二区精品久久| eeuss国产一区二区三区| 欧美日韩一区二区三区在线| 日韩一区二区三区电影在线观看 | 亚洲视频免费在线观看| 亚洲成av人影院在线观看网| 精久久久久久久久久久| 99久久夜色精品国产网站| 欧美日韩国产另类不卡| 久久精品亚洲精品国产欧美kt∨| 亚洲码国产岛国毛片在线| 亚洲成av人**亚洲成av**| 国产精品一区二区你懂的| 色欧美日韩亚洲| 精品国偷自产国产一区| 一区免费观看视频| 蜜臀久久久久久久| www.欧美日韩国产在线| 5566中文字幕一区二区电影| 国产亚洲欧美一区在线观看| 一区二区三区毛片| 国产乱码字幕精品高清av| 欧亚一区二区三区| 久久久精品tv| 午夜一区二区三区视频| 国产精品资源网| 欧美精品一级二级三级| 欧美国产日韩在线观看| 日韩av午夜在线观看| 成人av网在线| 欧美mv日韩mv国产网站| 亚洲国产视频直播| 成人app下载| 精品国产亚洲一区二区三区在线观看| 玉足女爽爽91| 成人永久免费视频| 精品福利视频一区二区三区| 亚洲一区二区偷拍精品| 成人黄色av电影| 欧美精品一区二区三| 五月婷婷激情综合网| 一本一道波多野结衣一区二区| 久久婷婷成人综合色| 日本vs亚洲vs韩国一区三区| 色欧美日韩亚洲| 中文字幕日韩av资源站| 久久精品国产亚洲高清剧情介绍| 欧美色图激情小说| 亚洲乱码国产乱码精品精可以看 | 欧美日韩黄色一区二区| 亚洲视频在线观看一区| 本田岬高潮一区二区三区| 精品国产乱码久久久久久蜜臀| 秋霞国产午夜精品免费视频| 欧美日韩成人在线一区| 亚洲1区2区3区4区| 欧美午夜一区二区三区 | 欧美在线综合视频| 最新热久久免费视频| 国产精品18久久久久久vr| 欧美一区2区视频在线观看| 亚洲成a人v欧美综合天堂| 欧美在线|欧美| 亚洲婷婷在线视频| 99久久久久久| 国产精品大尺度| 91丨porny丨在线| 中文字幕在线不卡一区二区三区| 成人久久18免费网站麻豆| 国产精品三级av| 丁香另类激情小说| 中文字幕永久在线不卡| 成人av网站免费观看| 一色屋精品亚洲香蕉网站| 99视频热这里只有精品免费| 国产精品区一区二区三区| 大白屁股一区二区视频| 日本一区二区成人在线| youjizz久久| 中文字幕亚洲精品在线观看| 91蜜桃免费观看视频| 亚洲老妇xxxxxx| 欧美色综合网站| 日本不卡一区二区| 精品精品国产高清一毛片一天堂| 国产乱国产乱300精品| 中文字幕乱码久久午夜不卡| 一本在线高清不卡dvd| 亚洲成人综合网站| 精品国产乱码久久久久久影片| 国产精品1024| 日韩毛片一二三区| 在线不卡免费欧美| 激情六月婷婷久久| 国产精品久久久久久久久久久免费看| 日本韩国欧美在线| 五月综合激情网| 国产午夜三级一区二区三| www.综合网.com| 首页国产丝袜综合| 国产视频一区在线观看 | 国产精品久久久久久亚洲伦| 91极品视觉盛宴| 日韩高清不卡一区二区| 久久精品综合网| 欧美性高清videossexo| 久久99久久99| 亚洲欧美一区二区三区久本道91 | 亚洲精品五月天| 日韩欧美另类在线| av在线不卡电影| 五月激情六月综合| 亚洲精品在线电影| 色综合久久中文综合久久牛| 久久成人久久爱| 综合欧美一区二区三区| 日韩欧美一区二区视频| 成人精品gif动图一区| 日本系列欧美系列| 一色屋精品亚洲香蕉网站| 日韩视频在线一区二区| 91色.com| 久久97超碰国产精品超碰| 一区二区三区四区中文字幕| 日韩欧美成人一区二区| 日本韩国欧美三级| 国产美女久久久久| 亚洲高清中文字幕| 国产精品你懂的| 精品日韩在线观看| 欧美天堂一区二区三区| 成人中文字幕电影| 免费人成在线不卡| 一区二区在线电影| 日本一区二区不卡视频| 日韩欧美激情四射| 欧美日韩国产一级| 91色婷婷久久久久合中文| 国产激情一区二区三区桃花岛亚洲| 日韩高清中文字幕一区| 亚洲美女区一区| 18欧美亚洲精品| 国产视频亚洲色图| 欧美mv日韩mv亚洲| 日韩一区二区三| 欧美美女bb生活片| 色噜噜狠狠成人网p站| 成人免费视频播放| 国产精品自在在线| 久久aⅴ国产欧美74aaa| 秋霞成人午夜伦在线观看| 亚洲一区二区三区视频在线| 亚洲天堂久久久久久久| 欧美国产日韩亚洲一区| 国产亚洲欧洲997久久综合 | 亚洲高清不卡在线| 一区二区久久久| 一区二区三区免费| 亚洲人快播电影网| 亚洲视频在线一区| 综合久久久久久|