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

📄 init301.c

📁 内核linux2.4.20,可跟rtlinux3.2打补丁 组成实时linux系统,编译内核
💻 C
📖 第 1 页 / 共 5 页
字号:
	SiS_SetFlag = SiS_SetFlag | ProgrammingCRT2;	RefreshRateTableIndex = SiS_GetRatePtrCRT2 (ROMAddr, CRT1ModeNo, ModeIdIndex);	/* Set REFIndex-> for crt1 refreshrate */	index =	    SiS_GetVCLK2Ptr (ROMAddr, CRT2ModeNo, ModeIdIndex,			     RefreshRateTableIndex, HwDeviceExtension);	temp1 = SiS_VCLKData[index].CLOCK;	/* Get VCLK  */	temp2 = SiS_GetColorDepth (ROMAddr, CRT2ModeNo, ModeIdIndex);#ifdef CONFIG_FB_SIS_315	index = SiS_Get310DRAMType (ROMAddr);#endif	temp3 = SiS_MCLKData[index].CLOCK;	/* Get MCLK  */	if ((temp * temp1 * temp2) % (16 * temp3) == 0)		temp = temp * temp1 * temp2 / (16 * temp3);	/* CRT1 Request period * TCLK*BytePerPixel/(MCLK*16) */	else		temp = temp * temp1 * temp2 / (16 * temp3) + 1;	/* CRT1 Request period * TCLK*BytePerPixel/(MCLK*16) */	if (temp > 0x37)		temp = 0x37;	SiS_SetRegANDOR (SiS_Part1Port, 0x02, ~0x3F, temp);}voidSiS_GetLVDSDesData (ULONG ROMAddr, USHORT ModeNo, USHORT ModeIdIndex,		    USHORT RefreshRateTableIndex){	USHORT modeflag;	USHORT PanelIndex, ResIndex;	SiS_LVDSDesStruct *PanelDesPtr = NULL;	if ((SiS_IF_DEF_LVDS == 0)	    && ((SiS_VBType & VB_SIS301B) || (SiS_VBType & VB_SIS302B))) {	/*301b *//*for test */		SiS_GetLVDSDesPtrA (ROMAddr, ModeNo, ModeIdIndex,				    RefreshRateTableIndex, &PanelIndex,				    &ResIndex);		switch (PanelIndex) {		case 0:			PanelDesPtr = LVDS1024x768Des_1;			break;		case 1:			PanelDesPtr = LVDS1280x1024Des_1;			break;		case 2:			PanelDesPtr = LVDS1280x960Des_1;			break;		case 3:			PanelDesPtr = LVDS1024x768Des_2;			break;		case 4:			PanelDesPtr = LVDS1280x1024Des_2;			break;		case 5:			PanelDesPtr = LVDS1280x960Des_2;			break;		}	} else {		SiS_GetLVDSDesPtr (ROMAddr, ModeNo, ModeIdIndex,				   RefreshRateTableIndex, &PanelIndex,				   &ResIndex);		switch (PanelIndex) {		case 0:			PanelDesPtr = SiS_PanelType00_1;			break;		case 1:			PanelDesPtr = SiS_PanelType01_1;			break;		case 2:			PanelDesPtr = SiS_PanelType02_1;			break;		case 3:			PanelDesPtr = SiS_PanelType03_1;			break;		case 4:			PanelDesPtr = SiS_PanelType04_1;			break;		case 5:			PanelDesPtr = SiS_PanelType05_1;			break;		case 6:			PanelDesPtr = SiS_PanelType06_1;			break;		case 7:			PanelDesPtr = SiS_PanelType07_1;			break;		case 8:			PanelDesPtr = SiS_PanelType08_1;			break;		case 9:			PanelDesPtr = SiS_PanelType09_1;			break;		case 10:			PanelDesPtr = SiS_PanelType0a_1;			break;		case 11:			PanelDesPtr = SiS_PanelType0b_1;			break;		case 12:			PanelDesPtr = SiS_PanelType0c_1;			break;		case 13:			PanelDesPtr = SiS_PanelType0d_1;			break;		case 14:			PanelDesPtr = SiS_PanelType0e_1;			break;		case 15:			PanelDesPtr = SiS_PanelType0f_1;			break;		case 16:			PanelDesPtr = SiS_PanelType00_2;			break;		case 17:			PanelDesPtr = SiS_PanelType01_2;			break;		case 18:			PanelDesPtr = SiS_PanelType02_2;			break;		case 19:			PanelDesPtr = SiS_PanelType03_2;			break;		case 20:			PanelDesPtr = SiS_PanelType04_2;			break;		case 21:			PanelDesPtr = SiS_PanelType05_2;			break;		case 22:			PanelDesPtr = SiS_PanelType06_2;			break;		case 23:			PanelDesPtr = SiS_PanelType07_2;			break;		case 24:			PanelDesPtr = SiS_PanelType08_2;			break;		case 25:			PanelDesPtr = SiS_PanelType09_2;			break;		case 26:			PanelDesPtr = SiS_PanelType0a_2;			break;		case 27:			PanelDesPtr = SiS_PanelType0b_2;			break;		case 28:			PanelDesPtr = SiS_PanelType0c_2;			break;		case 29:			PanelDesPtr = SiS_PanelType0d_2;			break;		case 30:			PanelDesPtr = SiS_PanelType0e_2;			break;		case 31:			PanelDesPtr = SiS_PanelType0f_2;			break;		case 32:			PanelDesPtr = SiS_CHTVUNTSCDesData;			break;		case 33:			PanelDesPtr = SiS_CHTVONTSCDesData;			break;		case 34:			PanelDesPtr = SiS_CHTVUPALDesData;			break;		case 35:			PanelDesPtr = SiS_CHTVOPALDesData;			break;		}	}	SiS_LCDHDES = (PanelDesPtr + ResIndex)->LCDHDES;	SiS_LCDVDES = (PanelDesPtr + ResIndex)->LCDVDES;	if (SiS_LCDInfo & LCDNonExpanding) {		if (SiS_LCDResInfo >= Panel1024x768) {			if (ModeNo <= 0x13) {				modeflag =				    SiS_SModeIDTable[ModeIdIndex].St_ModeFlag;				if (!(modeflag & HalfDCLK)) {					SiS_LCDHDES = 320;				}			}		}	}	return;}voidSiS_GetLVDSDesPtr (ULONG ROMAddr, USHORT ModeNo, USHORT ModeIdIndex,		   USHORT RefreshRateTableIndex, USHORT * PanelIndex,		   USHORT * ResIndex){	USHORT tempbx, tempal;	tempbx = 0;	if (SiS_IF_DEF_CH7005 == 1) {		if (!(SiS_VBInfo & SetCRT2ToLCD)) {			tempbx = 32;			if (SiS_VBInfo & SetPALTV)				tempbx = tempbx + 2;			if (SiS_VBInfo & SetCHTVOverScan)				tempbx = tempbx + 1;		}	}	if (SiS_VBInfo & SetCRT2ToLCD) {		tempbx = SiS_LCDTypeInfo;		if (SiS_LCDInfo & LCDNonExpanding) {			tempbx = tempbx + 16;		}	}	if (ModeNo <= 0x13) {		tempal = SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;	} else {		tempal = SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;	}	tempal = tempal & 0x1F;	*PanelIndex = tempbx;	*ResIndex = tempal;}/*301b*/voidSiS_GetLVDSDesPtrA (ULONG ROMAddr, USHORT ModeNo, USHORT ModeIdIndex,		    USHORT RefreshRateTableIndex, USHORT * PanelIndex,		    USHORT * ResIndex){	USHORT tempbx, tempal;	tempbx = 0;	tempbx = SiS_LCDResInfo;	tempbx = tempbx - Panel1024x768;	if (SiS_LCDInfo & LCDNonExpanding) {		tempbx = tempbx + 3;	}	if (ModeNo <= 0x13) {		tempal = SiS_SModeIDTable[ModeIdIndex].St_CRT2CRTC;	} else {		tempal = SiS_RefIndex[RefreshRateTableIndex].Ext_CRT2CRTC;	}	tempal = tempal & 0x1F;	*PanelIndex = tempbx;	*ResIndex = tempal;}/*end 301b*/voidSiS_SetCRT2ModeRegs (USHORT BaseAddr, USHORT ModeNo,		     PSIS_HW_DEVICE_INFO HwDeviceExtension){	USHORT i, j;	USHORT tempcl, tempah;/*301b*/	if (((SiS_VBType & VB_SIS301B) || (SiS_VBType & VB_SIS302B))	    && (SiS_VBInfo & SetCRT2ToLCDA)) {		SiS_SetRegANDOR (SiS_Part1Port, 0x00, ~0x050, 0x40);		SiS_SetRegAND (SiS_Part1Port, 0x2E, 0xF7);		SiS_SetRegANDOR (SiS_Part1Port, 0x13, 0xFB, 0x04);		SiS_SetRegANDOR (SiS_Part1Port, 0x2c, 0xCF, 0x30);		SiS_SetRegANDOR (SiS_Part4Port, 0x21, 0x3F, 0xC0);		SiS_SetRegANDOR (SiS_Part4Port, 0x23, 0x7F, 0x00);	}	/*end 301b */	else {		for (i = 0, j = 4; i < 3; i++, j++)			SiS_SetReg1 (SiS_Part1Port, j, 0);		tempcl = SiS_ModeType;		if (HwDeviceExtension->jChipType < SIS_315H) {	/* 300 series */			if (ModeNo > 0x13) {				tempcl = tempcl - ModeVGA;				if ((tempcl > 0) || (tempcl == 0)) {					tempah = ((0x010 >> tempcl) | 0x080);				}			} else {				tempah = 0x080;			}			if (SiS_VBInfo & SetInSlaveMode) {				tempah = (tempah ^ 0x0A0);			}		} else {	/* 310 series */			if (ModeNo > 0x13) {				tempcl = tempcl - ModeVGA;				if ((tempcl > 0) || (tempcl == 0)) {					tempah = (0x008 >> tempcl);					if (tempah == 0)						tempah = 1;					tempah |= 0x040;				}			} else {				tempah = 0x040;			}			if (SiS_VBInfo & SetInSlaveMode) {				tempah = (tempah ^ 0x050);			}		}		if (SiS_VBInfo & CRT2DisplayFlag) {			tempah = 0;		}		SiS_SetReg1 (SiS_Part1Port, 0x00, tempah);		if (SiS_IF_DEF_LVDS == 0) {	/* ifdef 301 */			tempah = 0x01;			if (!(SiS_VBInfo & SetInSlaveMode)) {				tempah = (tempah | 0x02);			}			if (!(SiS_VBInfo & SetCRT2ToRAMDAC)) {				tempah = (tempah ^ 0x05);				if (!(SiS_VBInfo & SetCRT2ToLCD)) {					tempah = (tempah ^ 0x01);				}			}			tempcl = tempah;	/* 05/03/01 ynlai for TV display bug */			if (HwDeviceExtension->jChipType < SIS_315H) {	/* 300 series */				tempah = (tempah << 5) & 0xFF;				if (SiS_VBInfo & CRT2DisplayFlag) {					tempah = 0;				}				SiS_SetReg1 (SiS_Part1Port, 0x01, tempah);				tempah = tempah >> 5;			} else {	/* 310 series */				if (SiS_VBInfo & CRT2DisplayFlag) {					tempah = 0;				}				tempah =				    (SiS_GetReg1 (SiS_Part1Port, 0x2E) & 0xF8) |				    tempah;				SiS_SetReg1 (SiS_Part1Port, 0x2E, tempah);				tempah = tempcl;			}			if ((SiS_ModeType == ModeVGA)			    && (!(SiS_VBInfo & SetInSlaveMode))) {				tempah = tempah | 0x010;			}			if (SiS_LCDResInfo == Panel1024x768)				tempah = tempah | 0x080;			if ((SiS_LCDResInfo == Panel1280x1024)			    || (SiS_LCDResInfo == Panel1280x960)) {				tempah = tempah | 0x080;			}			if (SiS_VBInfo & SetCRT2ToTV) {				if (SiS_VBInfo & SetInSlaveMode) {					if (					    ((SiS_VBType & VB_SIS301B)					     || (SiS_VBType & VB_SIS302B))) {	/*301b */						if (SiS_SetFlag & TVSimuMode)							tempah = tempah | 0x020;					} else						tempah = tempah | 0x020;				}			}			SiS_SetRegANDOR (SiS_Part4Port, 0x0D, ~0x0BF, tempah);			tempah = 0;			if (SiS_VBInfo & SetCRT2ToTV) {				if (SiS_VBInfo & SetInSlaveMode) {					if (					    ((SiS_VBType & VB_SIS301B)					     || (SiS_VBType & VB_SIS302B))) {	/*301b */						{							SiS_SetFlag =							    SiS_SetFlag |							    RPLLDIV2XO;							tempah = tempah | 0x40;						}					} else {						if (!(SiS_SetFlag & TVSimuMode)) {							if (!							    (SiS_VBInfo &							     SetCRT2ToHiVisionTV))							{								SiS_SetFlag =								    SiS_SetFlag								    |								    RPLLDIV2XO;								tempah =								    tempah |								    0x40;							}						}					}				} else {					SiS_SetFlag = SiS_SetFlag | RPLLDIV2XO;					tempah = tempah | 0x40;				}			}			if (SiS_LCDResInfo == Panel1280x1024)				tempah = tempah | 0x80;			if (SiS_LCDResInfo == Panel1280x960)				tempah = tempah | 0x80;			SiS_SetReg1 (SiS_Part4Port, 0x0C, tempah);		} else {			/*LVDS*/ tempah = 0;			if (!(SiS_VBInfo & SetInSlaveMode)) {				tempah = tempah | 0x02;			}			SiS_SetRegANDOR (SiS_Part1Port, 0x2e, 0xF0, tempah);		}	}/*301b*/	if (((SiS_VBType & VB_SIS301B) || (SiS_VBType & VB_SIS302B))	    && (!(SiS_VBInfo & SetCRT2ToLCDA))) {		if (SiS_IsDualEdge (BaseAddr))			SiS_SetRegANDOR (SiS_Part1Port, 0x13, 0xFB, 0x00);		else			SiS_SetRegANDOR (SiS_Part1Port, 0x13, 0xFF, 0x00);		if (SiS_IsDualEdge (BaseAddr))			SiS_SetRegANDOR (SiS_Part1Port, 0x2c, 0xCF, 0x00);		else			SiS_SetRegANDOR (SiS_Part1Port, 0x2c, 0xFF, 0x00);		if (SiS_IsDualEdge (BaseAddr))			SiS_SetRegANDOR (SiS_Part4Port, 0x21, 0x3F, 0x00);		else			SiS_SetRegANDOR (SiS_Part4Port, 0x21, 0xFF, 0x00);		if (SiS_IsDualEdge (BaseAddr))			SiS_SetRegANDOR (SiS_Part4Port, 0x23, 0xFF, 0x80);		else			SiS_SetRegANDOR (SiS_Part4Port, 0x23, 0xFF, 0x00);	}/*end 301b*/}voidSiS_GetCRT2Data (ULONG ROMAddr, USHORT ModeNo, USHORT ModeIdIndex,		 USHORT RefreshRateTableIndex){	if (SiS_IF_DEF_LVDS == 0) {	/*301  */		if ((SiS_VBType & VB_SIS301B) || (SiS_VBType & VB_SIS302B)) {			if (SiS_VBInfo & SetCRT2ToLCDA)				SiS_GetCRT2DataLVDS (ROMAddr, ModeNo,						     ModeIdIndex,						     RefreshRateTableIndex);			else				SiS_GetCRT2Data301 (ROMAddr, ModeNo,						    ModeIdIndex,						    RefreshRateTableIndex);		} else			SiS_GetCRT2Data301 (ROMAddr, ModeNo, ModeIdIndex,					    RefreshRateTableIndex);		return;	} else {		/*LVDS */		SiS_GetCRT2DataLVDS (ROMAddr, ModeNo, ModeIdIndex,				     RefreshRateTableIndex);		return;	}}voidSiS_GetCRT2DataLVDS (ULONG ROMAddr, USHORT ModeNo, USHORT ModeIdIndex,		     USHORT RefreshRateTableIndex){	USHORT tempax, tempbx;	USHORT CRT2Index, ResIndex;	SiS_LVDSDataStruct *LVDSData = NULL;	SiS_GetCRT2ResInfo (ROMAddr, ModeNo, ModeIdIndex);	/*301b */	if (((SiS_VBType & VB_SIS301B) || (SiS_VBType & VB_SIS302B))	    && (SiS_VBInfo & SetCRT2ToLCDA)) {		SiS_GetCRT2PtrA (ROMAddr, ModeNo, ModeIdIndex,				 RefreshRateTableIndex, &CRT2Index, &ResIndex);		switch (CRT2Index) {		case 0:			LVDSData = SiS_LVDS1024x768Data_1;			break;		case 1:			LVDSData = SiS_LVDS1280x1024Data_1;			break;		case 2:			LVDSData = SiS_LVDS1280x1024Data_1;			break;			/*  case  2:  LVDSData=SiS_LVDS1280x960Data_1;  break; */		case 3:			LVDSData = SiS_LVDS1024x768Data_2;			break;		case 4:			LVDSData = SiS_LVDS1280x1024Data_2;			break;

⌨️ 快捷键说明

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