⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init301.c

📁 该文件是rt_linux
💻 C
📖 第 1 页 / 共 5 页
字号:
  temp = tempcx & 0x00FF;  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1B,temp);      	/* Part1_1Bh; TW: Panel Link Vertical Display Enable Start  */  /* 3. Additional horizontal setup (scaling, etc) */  tempecx = SiS_Pr->SiS_VGAHDE;  if(HwDeviceExtension->jChipType >= SIS_315H) {     if(modeflag & HalfDCLK)        tempecx >>= 1;  }  tempebx = SiS_Pr->SiS_HDE;  if(tempecx == tempebx) tempeax = 0xFFFF;  else {     tempeax = tempecx;     tempeax <<= 16;     temp = (USHORT)(tempeax % tempebx);     tempeax = tempeax / tempebx;     if(HwDeviceExtension->jChipType >= SIS_315H) {         if(temp) tempeax++;     }  }  tempecx = tempeax;  if (HwDeviceExtension->jChipType >= SIS_315H) {      tempeax = SiS_Pr->SiS_VGAHDE;      if(modeflag & HalfDCLK)          tempeax >>= 1;      tempeax <<= 16;      tempeax = (tempeax / tempecx) - 1;  } else {      tempeax = ((SiS_Pr->SiS_VGAHT << 16) / tempecx) - 1;  }  tempecx <<= 16;  tempecx |= (tempeax & 0xFFFF);  temp = (USHORT)(tempecx & 0x00FF);  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1F,temp);  	 /* Part1_1Fh; TW: Panel Link DDA Operational Number in each horiz. line */  tempbx = SiS_Pr->SiS_VDE;  if (HwDeviceExtension->jChipType >= SIS_315H) {      tempeax = (SiS_Pr->SiS_VGAVDE << 18) / tempvcfact;      tempbx = (USHORT)(tempeax & 0x0FFFF);  } else {      tempax = SiS_Pr->SiS_VGAVDE << 6;      tempbx = push1;      tempbx &= 0x3f;      if(tempbx == 0) tempbx = 64;      tempax = tempax / tempbx;      tempbx = tempax;  }  if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768) tempbx--;  if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA)                 tempbx = 1;  temp = ((tempbx & 0xFF00) >> 8) << 3;  temp |= (USHORT)((tempecx & 0x0700) >> 8);  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x20,temp);  	/* Part1_20h; TW: Overflow register */  temp = tempbx & 0x00FF;  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x21,temp);  	/* Part1_21h; TW: Panel Link Vertical Accumulator Register */  tempecx >>= 16;                               /* BPLHCFACT  */  if(HwDeviceExtension->jChipType < SIS_315H) {      if(modeflag & HalfDCLK) tempecx >>= 1;  }  temp = (USHORT)((tempecx & 0xFF00) >> 8);  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x22,temp);     	/* Part1_22h; TW: Panel Link Horizontal Scaling Factor High */  temp = (USHORT)(tempecx & 0x00FF);  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x23,temp);         /* Part1_22h; TW: Panel Link Horizontal Scaling Factor Low */  /* 630/301B and 630/LVDS do something for 640x480 panels here */  /* TW: DSTN/FSTN initialisation - hardcoded for 320x480 panel */  if(SiS_Pr->SiS_IF_DEF_DSTN){     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1E,0x01);     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x25,0x00);     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x26,0x00);     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x27,0x00);     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x28,0x87);     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x29,0x5A);     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2A,0x4B);     	SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x44,~0x007,0x03);     	tempbx = SiS_Pr->SiS_HDE + 64;                       	/*Blps = lcdhdee(lcdhdes+HDE) + 64*/     	temp = tempbx & 0x00FF;     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x38,temp);     	temp=((tempbx & 0xFF00) >> 8) << 3;     	SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x35,~0x078,temp);     	tempbx += 32;		                     		/*Blpe=lBlps+32*/     	temp = tempbx & 0x00FF;     	if(SiS_Pr->SiS_IF_DEF_FSTN)  temp=0;     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x39,temp);     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3A,0x00);        	/*Bflml=0*/     	SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x007,0x00);     	tempbx = SiS_Pr->SiS_VDE / 2;     	temp = tempbx & 0x00FF;     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3B,temp);     	temp = ((tempbx & 0xFF00) >> 8) << 3;     	SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x038,temp);     	tempeax = SiS_Pr->SiS_HDE << 2;                       	/* BDxFIFOSTOP = (HDE*4)/128 */     	tempebx = 128;     	temp = (USHORT)(tempeax % tempebx);     	tempeax = tempeax / tempebx;     	if(temp != 0)  tempeax++;     	temp = (USHORT)(tempeax & 0x003F);     	SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x45,~0x0FF,temp);     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3F,0x00);         	/* BDxWadrst0 */     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3E,0x00);     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x3D,0x10);     	SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x040,0x00);     	tempax = SiS_Pr->SiS_HDE >> 4;                        	/* BDxWadroff = HDE*4/8/8 */     	pushcx = tempax;     	temp = tempax & 0x00FF;     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x43,temp);     	temp = ((tempax & 0xFF00) >> 8) << 3;     	SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x44,~0x0F8,temp);     	tempax = SiS_Pr->SiS_VDE;                             /*BDxWadrst1 = BDxWadrst0 + BDxWadroff * VDE */     	tempeax = (tempax * pushcx);     	tempebx = 0x00100000 + tempeax;     	temp = (USHORT)tempebx & 0x000000FF;     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x42,temp);     	temp = (USHORT)((tempebx & 0x0000FF00)>>8);     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x41,temp);     	temp = (USHORT)((tempebx & 0x00FF0000)>>16);     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x40,temp);     	temp = (USHORT)(((tempebx & 0x01000000)>>24) << 7);     	SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x3C,~0x080,temp);     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2F,0x03);     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x03,0x50);     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x04,0x00);     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2F,0x01);     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x13,0x00);     	SiS_SetReg1(SiS_Pr->SiS_P3c4,0x05,0x86);        /* Unlock */     	SiS_SetReg1(SiS_Pr->SiS_P3c4,0x1e,0x62);     	if(SiS_Pr->SiS_IF_DEF_FSTN){         	SiS_SetReg1(SiS_Pr->SiS_P3c4,0x2b,0x1b);         	SiS_SetReg1(SiS_Pr->SiS_P3c4,0x2c,0xe3);         	SiS_SetReg1(SiS_Pr->SiS_P3c4,0x1e,0x62);         	SiS_SetReg1(SiS_Pr->SiS_P3c4,0x2e,0x04);         	SiS_SetReg1(SiS_Pr->SiS_P3c4,0x2f,0x42);         	SiS_SetReg1(SiS_Pr->SiS_P3c4,0x32,0x01);         	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2b,0x02);         	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2c,0x00);         	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2d,0x00);     	}     	SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0x0f,0x30);     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1e,0x7d);     	SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x2e,0xe0);  }  return;}#ifdef SIS315HvoidSiS_CRT2AutoThreshold(SiS_Private *SiS_Pr, USHORT BaseAddr){  SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x01,0x40);}#endif/* TW: For LVDS / 302b/lv - LCDA (this must only be called on 310/325 series!) *//* TW: Double-checked against 650/LVDS and 650/301 BIOS */voidSiS_SetGroup1_LCDA(SiS_Private *SiS_Pr, USHORT  BaseAddr,UCHAR *ROMAddr,USHORT ModeNo,USHORT ModeIdIndex,                   PSIS_HW_DEVICE_INFO HwDeviceExtension,USHORT RefreshRateTableIndex){  USHORT modeflag,resinfo;  USHORT push1,push2,tempax,tempbx,tempcx,temp;  ULONG tempeax=0,tempebx,tempecx,tempvcfact;  if(SiS_Pr->SiS_IF_DEF_LVDS == 1)					/* TW: From 650/LVDS BIOS */      SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x13,0xfb,0x04);      	/* TW: From 650/LVDS BIOS */  if(SiS_Pr->SiS_IF_DEF_LVDS == 1)					/* TW: From 650/LVDS 1.10.07 */     SiS_SetRegOR(SiS_Pr->SiS_Part1Port,0x2D,0x00);			/* TW: From 650/LVDS 1.10.07 */  else     SiS_SetRegAND(SiS_Pr->SiS_Part1Port,0x2D,0x0f);			/* TW: From 650/301Lvx 1.10.6s */  if(ModeNo<=0x13) {    modeflag = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;    resinfo = SiS_Pr->SiS_SModeIDTable[ModeIdIndex].St_ResInfo;  } else {    modeflag = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_ModeFlag;    resinfo = SiS_Pr->SiS_EModeIDTable[ModeIdIndex].Ext_RESINFO;  }  tempax = SiS_Pr->SiS_LCDHDES;  tempbx = SiS_Pr->SiS_HDE;  tempcx = SiS_Pr->SiS_HT;  if(SiS_Pr->SiS_LCDInfo & LCDNonExpanding) {        if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768)       tempbx = 1024;	else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) tempbx = 1400;	else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200) tempbx = 1600;	else 							      tempbx = 1280;  }  tempcx -= tempbx;                        	            	/* HT-HDE  */  push1 = tempax;  tempax += tempbx;	                                    	/* lcdhdee  */  tempbx = SiS_Pr->SiS_HT;  if(tempax >= tempbx)	tempax -= tempbx;  push2 = tempax;						/* push ax   lcdhdee  */  tempcx >>= 2;  /* TW: Inserted from 650/301LVx 1.10.6s */  if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {      if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {          if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600)        tempcx = 0x28;	  else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050) tempcx = 0x30;	  else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768)  tempcx = 0x18;	  else                                                          tempcx = 0x30;      }  }  tempcx += tempax;  	                                  	/* lcdhrs  */  if(tempcx >= tempbx) tempcx -= tempbx;                                                           	/* v ah,cl  */  tempax = tempcx;  tempax >>= 3;   	                                     	/* BPLHRS */  temp = tempax & 0x00FF;  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x14,temp);                 	/* Part1_14h  */  temp += 10;  temp &= 0x1F;  temp |= ((tempcx & 0x07) << 5);  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x15,temp);                         /* Part1_15h  */  tempbx = push2;                                          	/* lcdhdee  */  tempcx = push1;                                          	/* lcdhdes  */  temp = (tempcx & 0x00FF);  temp &= 0x07;                                  		/* BPLHDESKEW  */  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1A,temp);                         /* Part1_1Ah  */  tempcx >>= 3;   	                                     	/* BPLHDES */  temp = tempcx & 0x00FF;  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x16,temp);                         /* Part1_16h  */  if(tempbx & 0x07) tempbx += 8;  tempbx >>= 3;                                        		/* BPLHDEE  */  temp = tempbx & 0x00FF;  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x17,temp);                        	/* Part1_17h  */  tempcx = SiS_Pr->SiS_VGAVT;  tempbx = SiS_Pr->SiS_VGAVDE;  tempcx -= tempbx; 	                                   	/* GAVT-VGAVDE  */  tempbx = SiS_Pr->SiS_LCDVDES;                                	/* VGAVDES  */  push1 = tempbx;                                      		/* push bx temppush1 */  if(SiS_Pr->SiS_IF_DEF_TRUMPION == 0){    if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768)        tempax = 768;    else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024)  tempax = 1024;    else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050)  tempax = 1050;    else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1600x1200)  tempax = 1200;    else                                                           tempax = 960;#if 0   /* TW: Removed (650/LVDS BIOS) */    if(SiS_Pr->SiS_IF_DEF_CH70xx == 1) {      if(SiS_Pr->SiS_VBInfo & SetCRT2ToTV) {        tempax = SiS_Pr->SiS_VGAVDE;      }    }#endif  } else tempax = SiS_Pr->SiS_VGAVDE;  /* Trumpion */  tempbx += tempax;  tempax = SiS_Pr->SiS_VT;                                    	/* VT  */  if(tempbx >= tempax)  tempbx -= tempax;  push2 = tempbx;                                      		/* push bx  temppush2  */  tempcx >>= 2;	/* TO CHECK - was 1 */  /* TW: Inserted from 650/301LVx 1.10.6s */  if(SiS_Pr->SiS_VBInfo & SetCRT2ToLCDA) {      if(SiS_Pr->SiS_LCDResInfo != SiS_Pr->SiS_Panel640x480) {          if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600)         tempcx = 1;	  else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1024x768)   tempcx = 3;	  else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x768)   tempcx = 3;	  else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1280x1024)  tempcx = 1;	  else if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel1400x1050)  tempcx = 1;	  else                                                           tempcx = 0x0057;      }  }  tempbx += tempcx;  tempbx++;                                                	/* BPLVRS  */  if(tempbx >= tempax)   tempbx -= tempax;  temp = tempbx & 0x00FF;  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x18,temp);                         /* Part1_18h  */  tempcx >>= 3;  tempcx += tempbx;  tempcx++;                                                	/* BPLVRE  */  temp = tempcx & 0x00FF;  temp &= 0x0F;  if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {     /* TW: Inserted from 650/LVDS BIOS */     SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0xf0,temp);  } else {     /* TW: Inserted from 650/301LVx 1.10.6s */     temp |= 0xC0;     SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x19,0xF0,temp);             /* Part1_19h  */  }  temp = (tempbx & 0xFF00) >> 8;  temp &= 0x07;  temp <<= 3;  		                               		/* BPLDESKEW =0 */  tempbx = SiS_Pr->SiS_VGAVDE;  if(tempbx != SiS_Pr->SiS_VDE)              temp |= 0x40;  if(SiS_Pr->SiS_SetFlag & EnableLVDSDDA)    temp |= 0x40;  if(SiS_Pr->SiS_IF_DEF_LVDS == 1) {      /* TW: Inserted from 650/LVDS 1.10.07 */      if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit)  temp |= 0x80;      SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x1A,0x87,temp);            /* Part1_1Ah */  } else {      /* TW: Inserted from 650/301LVx 1.10.6s */      if(SiS_Pr->SiS_LCDInfo & LCDRGB18Bit) {          if(SiS_GetReg1(SiS_Pr->SiS_Part1Port,0x00) & 0x01) temp |= 0x80;      }      SiS_SetRegANDOR(SiS_Pr->SiS_Part1Port,0x1A,0x87,temp);            /* Part1_1Ah */  }  tempbx = push2;                                      		/* p bx temppush2 BPLVDEE  */  tempcx = push1;                                      		/* pop cx temppush1 NPLVDES */  push1 = (USHORT)(tempeax & 0xFFFF);  if(!(SiS_Pr->SiS_VBInfo & SetInSlaveMode)) {    if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel800x600) {      if(resinfo == 7) tempcx++;    }    /* TW: Inserted from 650/301LVx+LVDS BIOSes */    if(SiS_Pr->SiS_LCDResInfo == SiS_Pr->SiS_Panel640x480) {        tempbx = SiS_Pr->SiS_VGAVDE;	tempcx = tempbx;        tempbx--;    }  }  temp = (tempbx & 0xFF00) >> 8;  temp &= 0x07;  temp <<= 3;  temp = temp | (((tempcx & 0xFF00) >> 8) & 0x07);  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1D,temp);                          /* Part1_1Dh */  temp = tempbx & 0x00FF;  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1C,temp);                          /* Part1_1Ch  */  temp = tempcx & 0x00FF;  SiS_SetReg1(SiS_Pr->SiS_Part1Port,0x1B,temp);                          /* Part1_1Bh  */  tempecx = SiS_Pr

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -