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

📄 init.c

📁 linux下的VIDEO接口驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
   SiS_UnLockCRT2(HwDeviceExtension, BaseAddr);   SiS_SetReg1(SiS_Part1Port,0x00,0x00);   SiS_SetReg1(SiS_Part1Port,0x02,*pSiS_CRT2Data_1_2);#ifdef SIS315H                            /* 05/02/01 ynlai  for sis550 */   if((HwDeviceExtension->jChipType == SIS_315H) ||      (HwDeviceExtension->jChipType == SIS_315PRO) ||      (HwDeviceExtension->jChipType == SIS_550)||      (HwDeviceExtension->jChipType == SIS_640)||   /* 08/20/01 chiawen for 640/740 */      (HwDeviceExtension->jChipType == SIS_740)||   /* 09/03/01 chiawen for 640/740 */      (HwDeviceExtension->jChipType == SIS_650))    /* 09/03/01 chiawen for 650 */     	SiS_SetReg1(SiS_Part1Port,0x2E,0x08); /* use VB */#endif   temp=*pSiS_SR32;   if(!SiS_BridgeIsOn(BaseAddr)) {     	temp=temp&0xEF;   }   SiS_SetReg1(SiS_P3c4,0x32,temp);#ifdef SIS315H   if ((HwDeviceExtension->jChipType == SIS_315H) ||       (HwDeviceExtension->jChipType == SIS_315PRO)) {     HwDeviceExtension->pQueryVGAConfigSpace(HwDeviceExtension,0x50,0,&Temp);  /* Get */     Temp >>= 20;     Temp &= 0xF;     if (Temp!=1) {     	SiS_SetReg1(SiS_P3c4,0x25,SiS_SR25[1]);     	SiS_SetReg1(SiS_P3d4,0x49,SiS_CR49[1]);     }     SiS_SetReg1(SiS_P3c4,0x27,0x1F);     SiS_SetReg1(SiS_P3c4,0x31,*pSiS_SR31);     SiS_SetReg1(SiS_P3c4,0x32,*pSiS_SR32);     SiS_SetReg1(SiS_P3c4,0x33,*pSiS_SR33);   }#endif   if (SiS_BridgeIsOn(BaseAddr)==1) {     	if(SiS_IF_DEF_LVDS==0) {       		SiS_SetReg1(SiS_Part2Port,0x00,0x1C);       		SiS_SetReg1(SiS_Part4Port,0x0D,*pSiS_CRT2Data_4_D);       		SiS_SetReg1(SiS_Part4Port,0x0E,*pSiS_CRT2Data_4_E);       		SiS_SetReg1(SiS_Part4Port,0x10,*pSiS_CRT2Data_4_10);       		SiS_SetReg1(SiS_Part4Port,0x0F,0x3F);     	}     	SiS_LockCRT2(HwDeviceExtension, BaseAddr);   }   SiS_SetReg1(SiS_P3d4,0x83,0x00);/*   SetDefExt1Regs end */#ifdef SIS315H   if ((HwDeviceExtension->jChipType==SIS_315H)||       (HwDeviceExtension->jChipType==SIS_315PRO)) { /* 05/02/01 ynlai */       	if (HwDeviceExtension->bSkipDramSizing==TRUE) {         	SiS_SetDRAMModeRegister(ROMAddr);         	pSR = HwDeviceExtension->pSR;         	if (pSR!=NULL) {           		while (pSR->jIdx!=0xFF) {             			SiS_SetReg1(SiS_P3c4,pSR->jIdx,pSR->jVal);             			pSR++;           		}         	}       } else SiS_SetDRAMSize_310(HwDeviceExtension);   }#endif#ifdef SIS315H   if((HwDeviceExtension->jChipType==SIS_550)){ /* 05/02/01 ynlai For SiS 550 */       /* SetDRAMConfig begin *//*     SiS_SetReg1(SiS_P3c4,0x12,SR12);       SiS_SetReg1(SiS_P3c4,0x13,SR13);       SiS_SetReg1(SiS_P3c4,0x14,SR14);       SiS_SetReg1(SiS_P3c4,0x16,SR16);       SiS_SetReg1(SiS_P3c4,0x17,SR17);       SiS_SetReg1(SiS_P3c4,0x18,SR18);       SiS_SetReg1(SiS_P3c4,0x19,SR19);       SiS_SetReg1(SiS_P3c4,0x1A,SR1A);   */       /* SetDRAMConfig end */   }#endif#ifdef SIS300   if( HwDeviceExtension->jChipType==SIS_300) {       /* For SiS 300 Chip  */       	if (HwDeviceExtension->bSkipDramSizing==TRUE) {/*       	SiS_SetDRAMModeRegister(ROMAddr);         	temp = (HwDeviceExtension->pSR)->jVal;         	SiS_SetReg1(SiS_P3c4,0x13,temp);         	temp = (HwDeviceExtension->pSR)->jVal;         	SiS_SetReg1(SiS_P3c4,0x14,temp);   */       } else {#ifdef TC         	SiS_SetReg1(SiS_P3c4,0x13,SR13);         	SiS_SetReg1(SiS_P3c4,0x14,SR14);         	SiS_SetRegANDOR(SiS_P3c4,0x15,0xFF,0x04);#else         	SiS_SetDRAMSize_300(HwDeviceExtension);         	SiS_SetDRAMSize_300(HwDeviceExtension);#endif       }   }   if((HwDeviceExtension->jChipType==SIS_540)||       /* For SiS 630/540/730 Chip  */      (HwDeviceExtension->jChipType==SIS_630)||      (HwDeviceExtension->jChipType==SIS_730)){       	/* SetDRAMConfig begin */#if 0     	SiS_SetReg1(SiS_P3c4,0x12,SR12);       	SiS_SetReg1(SiS_P3c4,0x13,SR13);       	SiS_SetReg1(SiS_P3c4,0x14,SR14);       	SiS_SetReg1(SiS_P3c4,0x16,SR16);       	SiS_SetReg1(SiS_P3c4,0x17,SR17);       	SiS_SetReg1(SiS_P3c4,0x18,SR18);       	SiS_SetReg1(SiS_P3c4,0x19,SR19);       	SiS_SetReg1(SiS_P3c4,0x1A,SR1A);#endif       	/* SetDRAMConfig end */   }/* SetDRAMSize end */#endif /* SIS300 *//*   SetDefExt2Regs begin  */#if 0   AGP=1;   temp=(UCHAR)SiS_GetReg1(SiS_P3c4,0x3A);   temp=temp&0x30;   if(temp==0x30) AGP=0;   if(AGP==0) *pSiS_SR21=*pSiS_SR21&0xEF;   SiS_SetReg1(SiS_P3c4,0x21,*pSiS_SR21);   if(AGP==1) *pSiS_SR22=*pSiS_SR22&0x20;   SiS_SetReg1(SiS_P3c4,0x22,*pSiS_SR22);#endif   SiS_SetReg1(SiS_P3c4,0x21,*pSiS_SR21);   SiS_SetReg1(SiS_P3c4,0x22,*pSiS_SR22);/*   SetDefExt2Regs end  */#if 0   SiS_SetReg3(SiS_P3c6,0xff);   SiS_ClearDAC(SiS_P3c8);        /* [ynlai] 05/22/01 */#endif   SiS_DetectMonitor(HwDeviceExtension,BaseAddr);   SiS_GetSenseStatus(HwDeviceExtension,ROMAddr);      /* sense CRT2 */   return(TRUE);}voidSiS_Set_LVDS_TRUMPION(PSIS_HW_DEVICE_INFO HwDeviceExtension){  USHORT temp=0;#ifdef SiS300  if ((HwDeviceExtension->jChipType == SIS_540)||      (HwDeviceExtension->jChipType == SIS_630)||      (HwDeviceExtension->jChipType == SIS_730)) {        /* TW: Read POWER_ON_TRAP and copy to CR37 */    	temp = (UCHAR)SiS_GetReg1(SiS_P3c4,0x1A);    	temp=(temp&0xE0)>>4;   	SiS_SetRegANDOR(SiS_P3d4,0x37,0xF1,temp);   }#endif   /* Set globals SiS_IF_DEF... */   SiSSetLVDSetc(HwDeviceExtension, 0);}/* ===============  for 300 dram sizing begin  =============== */#ifdef SIS300voidSiS_SetDRAMSize_300(PSIS_HW_DEVICE_INFO HwDeviceExtension){   /*ULONG   ROMAddr  = (ULONG)HwDeviceExtension->pjVirtualRomBase;*/   ULONG   FBAddr   = (ULONG)HwDeviceExtension->pjVideoMemoryAddress;   /*USHORT  BaseAddr = (USHORT)HwDeviceExtension->ulIOAddress;*/   USHORT  SR13,SR14=0,buswidth,Done;   SHORT   i,j,k;   USHORT  data, TotalCapacity, PhysicalAdrOtherPage=0;   ULONG   Addr;   UCHAR   temp;   int PseudoRankCapacity,PseudoTotalCapacity,PseudoAdrPinCount;   int RankCapacity,AdrPinCount,BankNumHigh,BankNumMid,MB2Bank;   /*int PageCapacity,PhysicalAdrHigh,PhysicalAdrHalfPage,PhysicalAdrAnotherPage;*/   int PageCapacity,PhysicalAdrHigh,PhysicalAdrHalfPage;   SiSSetMode(HwDeviceExtension,0x2e);   data=SiS_GetReg1(SiS_P3c4,0x1);   data=data|0x20;   SiS_SetReg1(SiS_P3c4,0x01,data);                    /* Turn OFF Display  */   SiS_SetReg1(SiS_P3c4,0x13,0x00);   SiS_SetReg1(SiS_P3c4,0x14,0xBF);   buswidth=SiS_ChkBUSWidth_300(FBAddr);   MB2Bank=16;   Done=0;   for(i=6;i>=0;i--) {      if(Done==1) break;      PseudoRankCapacity=1<<i;      for(j=4;j>=1;j--) {         if(Done==1) break;         PseudoTotalCapacity=PseudoRankCapacity*j;         PseudoAdrPinCount=15-j;         if(PseudoTotalCapacity <= 64) {            for(k=0;k<=16;k++) {               if(Done==1) break;               RankCapacity=buswidth*SiS_DRAMType[k][3];               AdrPinCount=SiS_DRAMType[k][2]+SiS_DRAMType[k][0];               if(RankCapacity==PseudoRankCapacity)                 if(AdrPinCount<=PseudoAdrPinCount) {                    if(j==3) {             /* Rank No */                       BankNumHigh=RankCapacity*MB2Bank*3-1;                       BankNumMid=RankCapacity*MB2Bank*1-1;                    }                    else {                       BankNumHigh=RankCapacity*MB2Bank*j-1;                       BankNumMid=RankCapacity*MB2Bank*j/2-1;                    }                    PageCapacity=(1<<SiS_DRAMType[k][1])*buswidth*4;                    PhysicalAdrHigh =BankNumHigh;                    PhysicalAdrHalfPage=(PageCapacity/2+PhysicalAdrHigh)%PageCapacity;                    PhysicalAdrOtherPage=PageCapacity*SiS_DRAMType[k][2]+PhysicalAdrHigh;                    /* Write data */                    /*Test */                    temp=(UCHAR)SiS_GetReg1(SiS_P3c4,0x15);                    SiS_SetReg1(SiS_P3c4,0x15,(USHORT)(temp&0xFB));                    temp=(UCHAR)SiS_GetReg1(SiS_P3c4,0x15);                    SiS_SetReg1(SiS_P3c4,0x15,(USHORT)(temp|0x04));                    /*Test */                    TotalCapacity=SiS_DRAMType[k][3]*buswidth;                    SR13=SiS_DRAMType[k][4];                    if(buswidth==4) SR14=(TotalCapacity-1)|0x80;                    if(buswidth==2) SR14=(TotalCapacity-1)|0x40;                    if(buswidth==1) SR14=(TotalCapacity-1)|0x00;                    SiS_SetReg1(SiS_P3c4,0x13,SR13);                    SiS_SetReg1(SiS_P3c4,0x14,SR14);                    Addr=FBAddr+(BankNumHigh)*64*1024+PhysicalAdrHigh;                    *((USHORT *)(Addr)) = (USHORT) PhysicalAdrHigh;                    Addr=FBAddr+(BankNumMid)*64*1024+PhysicalAdrHigh;                    *((USHORT *)(Addr)) = (USHORT) BankNumMid;                    Addr=FBAddr+(BankNumHigh)*64*1024+PhysicalAdrHalfPage;                    *((USHORT *)(Addr)) = (USHORT) PhysicalAdrHalfPage;                    Addr=FBAddr+(BankNumHigh)*64*1024+PhysicalAdrOtherPage;                    *((USHORT *)(Addr))=PhysicalAdrOtherPage;                    /* Read data */                    Addr=FBAddr+(BankNumHigh)*64*1024+PhysicalAdrHigh;                    data=*((USHORT *)(Addr));                    if(data==PhysicalAdrHigh) Done=1;                 }  /* if struct */            }  /* for loop (k) */         }  /* if struct */      }  /* for loop (j) */   }  /* for loop (i) */}USHORTSiS_ChkBUSWidth_300(ULONG FBAddress){   /*USHORT  data;*/   PULONG  pVideoMemory;   pVideoMemory = (PULONG) FBAddress;   pVideoMemory[0] = 0x01234567L;   pVideoMemory[1] = 0x456789ABL;   pVideoMemory[2] = 0x89ABCDEFL;   pVideoMemory[3] = 0xCDEF0123L;   if (pVideoMemory[3]==0xCDEF0123L) { /*ChannelA128Bit */     return(4);   }   if (pVideoMemory[1]==0x456789ABL) {  /*ChannelB64Bit */     return(2);   }   return(1);}#endif/* ===============  for 300 dram sizing end    =============== *//* ===============  310 dram sizing begin ==================== */#ifdef SIS315H/* TW: Moved Get310DRAMType further down */voidSiS_Delay15us(ULONG ulMicrsoSec){}voidSiS_SDR_MRS(void){   USHORT  data;   data=SiS_GetReg1(SiS_P3c4,0x16);   data=data & 0x3F;          /*/ SR16 D7=0,D6=0 */   SiS_SetReg1(SiS_P3c4,0x16,data);   /*/ enable mode register set(MRS) low */   SiS_Delay15us(0x100);   data=data | 0x80;          /*/ SR16 D7=1,D6=0 */   SiS_SetReg1(SiS_P3c4,0x16,data);   /*/ enable mode register set(MRS) high */   SiS_Delay15us(0x100);}voidSiS_DDR_MRS(void){   USHORT  data;   /* SR16 <- 1F,DF,2F,AF */   /* enable DLL of DDR SD/SGRAM , SR16 D4=1 */   data=SiS_GetReg1(SiS_P3c4,0x16);   data &= 0x0F;   data |= 0x10;   SiS_SetReg1(SiS_P3c4,0x16,data);   if (!(SiS_SR15[1][SiS_RAMType] & 0x10))   {     data &= 0x0F;   }   /* SR16 D7=1,D6=1 */   data |= 0xC0;   SiS_SetReg1(SiS_P3c4,0x16,data);      /* SR16 D7=1,D6=0,D5=1,D4=0 */   data &= 0x0F;   data |= 0x20;   SiS_SetReg1(SiS_P3c4,0x16,data);   if (!(SiS_SR15[1][SiS_RAMType] & 0x10)) {     data &= 0x0F;   }   /* SR16 D7=1 */   data |= 0x80;   SiS_SetReg1(SiS_P3c4,0x16,data);}voidSiS_SetDRAMModeRegister(ULONG ROMAddr){    if (SiS_Get310DRAMType(ROMAddr)<2) {      SiS_SDR_MRS();    } else {      /* SR16 <- 0F,CF,0F,8F */      SiS_DDR_MRS();    }}voidSiS_DisableRefresh(void){   USHORT  data;   data=SiS_GetReg1(SiS_P3c4,0x17);   data &= 0xF8;   SiS_SetReg1(SiS_P3c4,0x17,data);   data=SiS_GetReg1(SiS_P3c4,0x19);   data |= 0x03;   SiS_SetReg1(SiS_P3c4,0x19,data);}voidSiS_EnableRefresh(ULONG ROMAddr){   SiS_SetReg1(SiS_P3c4,0x17,SiS_SR15[2][SiS_RAMType]);  /* SR17 */   SiS_SetReg1(SiS_P3c4,0x19,SiS_SR15[4][SiS_RAMType]);  /* SR19 */}voidSiS_DisableChannelInterleaving(int index,USHORT SiS_DDRDRAM_TYPE[][5]){   USHORT  data;   data=SiS_GetReg1(SiS_P3c4,0x15);   data &= 0x1F;   switch (SiS_DDRDRAM_TYPE[index][3])   {     case 64: data |= 0;              break;     case 32: data |= 0x20;              break;     case 16: data |= 0x40;              break;     case 4:  data |= 0x60;

⌨️ 快捷键说明

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