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

📄 init.c

📁 该文件是rt_linux
💻 C
📖 第 1 页 / 共 5 页
字号:
                    *((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(SiS_Private *SiS_Pr, ULONG FBAddress){   PULONG  pVideoMemory;   pVideoMemory = (PULONG)FBAddress;   pVideoMemory[0] = 0x01234567L;   pVideoMemory[1] = 0x456789ABL;   pVideoMemory[2] = 0x89ABCDEFL;   pVideoMemory[3] = 0xCDEF0123L;   if (pVideoMemory[3]==0xCDEF0123L) {  /* Channel A 128bit */     return(4);   }   if (pVideoMemory[1]==0x456789ABL) {  /* Channel B 64bit */     return(2);   }   return(1);}#endif/* ===============  SiS 300 dram sizing end    =============== *//* ============  SiS 310/325 dram sizing begin  ============== */#ifdef SIS315H/* TW: Moved Get310DRAMType further down */voidSiS_Delay15us(SiS_Private *SiS_Pr, ULONG ulMicrsoSec){}voidSiS_SDR_MRS(SiS_Private *SiS_Pr, ){   USHORT  data;   data = SiS_GetReg1(SiS_Pr->SiS_P3c4,0x16);   data &= 0x3F;          		        /* SR16 D7=0, D6=0 */   SiS_SetReg1(SiS_Pr->SiS_P3c4,0x16,data);   	/* enable mode register set(MRS) low */   SiS_Delay15us(SiS_Pr, 0x100);   data |= 0x80;          		        /* SR16 D7=1, D6=0 */   SiS_SetReg1(SiS_Pr->SiS_P3c4,0x16,data);   	/* enable mode register set(MRS) high */   SiS_Delay15us(SiS_Pr, 0x100);}voidSiS_DDR_MRS(SiS_Private *SiS_Pr){   USHORT  data;   /* SR16 <- 1F,DF,2F,AF */   /* enable DLL of DDR SD/SGRAM , SR16 D4=1 */   data=SiS_GetReg1(SiS_Pr->SiS_P3c4,0x16);   data &= 0x0F;   data |= 0x10;   SiS_SetReg1(SiS_Pr->SiS_P3c4,0x16,data);   if (!(SiS_Pr->SiS_SR15[1][SiS_Pr->SiS_RAMType] & 0x10))     data &= 0x0F;   /* SR16 D7=1,D6=1 */   data |= 0xC0;   SiS_SetReg1(SiS_Pr->SiS_P3c4,0x16,data);      /* SR16 D7=1,D6=0,D5=1,D4=0 */   data &= 0x0F;   data |= 0x20;   SiS_SetReg1(SiS_Pr->SiS_P3c4,0x16,data);   if (!(SiS_Pr->SiS_SR15[1][SiS_Pr->SiS_RAMType] & 0x10))     data &= 0x0F;   /* SR16 D7=1 */   data |= 0x80;   SiS_SetReg1(SiS_Pr->SiS_P3c4,0x16,data);}voidSiS_SetDRAMModeRegister(SiS_Private *SiS_Pr, UCHAR *ROMAddr, PSIS_HW_DEVICE_INFO HwDeviceExtension){    if (SiS_Get310DRAMType(ROMAddr,HwDeviceExtension) < 2)        SiS_SDR_MRS(SiS_Pr);    else        /* SR16 <- 0F,CF,0F,8F */        SiS_DDR_MRS(SiS_Pr);}voidSiS_DisableRefresh(SiS_Private *SiS_Pr){   SiS_SetRegAND(SiS_Pr->SiS_P3c4,0x17,0xF8);   SiS_SetRegOR(SiS_Pr->SiS_P3c4,0x19,0x03);}voidSiS_EnableRefresh(SiS_Private *SiS_Pr, UCHAR *ROMAddr){   SiS_SetReg1(SiS_Pr->SiS_P3c4,0x17,SiS_Pr->SiS_SR15[2][SiS_Pr->SiS_RAMType]);   SiS_SetReg1(SiS_Pr->SiS_P3c4,0x19,SiS_Pr->SiS_SR15[4][SiS_Pr->SiS_RAMType]);}voidSiS_DisableChannelInterleaving(SiS_Private *SiS_Pr, int index,                               USHORT SiS_DDRDRAM_TYPE[][5]){   USHORT  data;   data=SiS_GetReg1(SiS_Pr->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;     break;   }   SiS_SetReg1(SiS_Pr->SiS_P3c4,0x15,data);}voidSiS_SetDRAMSizingType(SiS_Private *SiS_Pr, int index, USHORT DRAMTYPE_TABLE[][5]){   SiS_SetReg1(SiS_Pr->SiS_P3c4,0x13,DRAMTYPE_TABLE[index][4]);   /* should delay 50 ns */}voidSiS_CheckBusWidth_310(SiS_Private *SiS_Pr, UCHAR *ROMAddress,ULONG FBAddress,                      PSIS_HW_DEVICE_INFO HwDeviceExtension){   USHORT  data;   PULONG volatile pVideoMemory;   pVideoMemory = (PULONG)FBAddress;   if(SiS_Get310DRAMType(ROMAddress,HwDeviceExtension) < 2) {     SiS_SetReg1(SiS_Pr->SiS_P3c4,0x13,0x00);     SiS_SetReg1(SiS_Pr->SiS_P3c4,0x14,0x12);     /* should delay */     SiS_SDR_MRS(SiS_Pr);     SiS_Pr->SiS_ChannelAB = 0;     SiS_Pr->SiS_DataBusWidth = 128;     pVideoMemory[0] = 0x01234567L;     pVideoMemory[1] = 0x456789ABL;     pVideoMemory[2] = 0x89ABCDEFL;     pVideoMemory[3] = 0xCDEF0123L;     pVideoMemory[4] = 0x55555555L;     pVideoMemory[5] = 0x55555555L;     pVideoMemory[6] = 0xFFFFFFFFL;     pVideoMemory[7] = 0xFFFFFFFFL;     if ((pVideoMemory[3]!=0xCDEF0123L) || (pVideoMemory[2] != 0x89ABCDEFL)) {       /*Channel A 64Bit */       SiS_Pr->SiS_DataBusWidth = 64;       SiS_Pr->SiS_ChannelAB = 0;       data=SiS_GetReg1(SiS_Pr->SiS_P3c4,0x14);       SiS_SetReg1(SiS_Pr->SiS_P3c4,0x14,(USHORT)(data & 0xFD));     }     if ((pVideoMemory[1]!=0x456789ABL) || (pVideoMemory[0] != 0x01234567L)) {       /*Channel B 64Bit */       SiS_Pr->SiS_DataBusWidth = 64;       SiS_Pr->SiS_ChannelAB = 1;       data=SiS_GetReg1(SiS_Pr->SiS_P3c4,0x14);       SiS_SetReg1(SiS_Pr->SiS_P3c4,0x14,(USHORT)((data&0xFD)|0x01));     }     return;   } else {     /* DDR Dual channel */     SiS_SetReg1(SiS_Pr->SiS_P3c4,0x13,0x00);     SiS_SetReg1(SiS_Pr->SiS_P3c4,0x14,0x02); /* Channel A, 64bit */     /* should delay */     SiS_DDR_MRS(SiS_Pr);     SiS_Pr->SiS_ChannelAB = 0;     SiS_Pr->SiS_DataBusWidth = 64;     pVideoMemory[0] = 0x01234567L;     pVideoMemory[1] = 0x456789ABL;     pVideoMemory[2] = 0x89ABCDEFL;     pVideoMemory[3] = 0xCDEF0123L;     pVideoMemory[4] = 0x55555555L;     pVideoMemory[5] = 0x55555555L;     pVideoMemory[6] = 0xAAAAAAAAL;     pVideoMemory[7] = 0xAAAAAAAAL;     if (pVideoMemory[1] == 0x456789ABL) {       if (pVideoMemory[0] == 0x01234567L) {         /* Channel A 64bit */         return;       }     } else {       if (pVideoMemory[0] == 0x01234567L) {         /* Channel A 32bit */         SiS_Pr->SiS_DataBusWidth = 32;         SiS_SetReg1(SiS_Pr->SiS_P3c4,0x14,0x00);         return;       }     }     SiS_SetReg1(SiS_Pr->SiS_P3c4,0x14,0x03); /* Channel B, 64bit */     SiS_DDR_MRS(SiS_Pr);     SiS_Pr->SiS_ChannelAB = 1;     SiS_Pr->SiS_DataBusWidth = 64;     pVideoMemory[0] = 0x01234567L;     pVideoMemory[1] = 0x456789ABL;     pVideoMemory[2] = 0x89ABCDEFL;     pVideoMemory[3] = 0xCDEF0123L;     pVideoMemory[4] = 0x55555555L;     pVideoMemory[5] = 0x55555555L;     pVideoMemory[6] = 0xAAAAAAAAL;     pVideoMemory[7] = 0xAAAAAAAAL;     if (pVideoMemory[1] == 0x456789ABL) {       /* Channel B 64 */       if (pVideoMemory[0] == 0x01234567L) {         /* Channel B 64bit */         return;       } else {         /* error */       }     } else {       if (pVideoMemory[0] == 0x01234567L) {         /* Channel B 32 */         SiS_Pr->SiS_DataBusWidth = 32;         SiS_SetReg1(SiS_Pr->SiS_P3c4,0x14,0x01);       } else {         /* error */       }     }   }}intSiS_SetRank(SiS_Private *SiS_Pr, int index,UCHAR RankNo,USHORT DRAMTYPE_TABLE[][5]){  USHORT  data;  int RankSize;  if ((RankNo==2)&&(DRAMTYPE_TABLE[index][0]==2))         return 0;  RankSize = DRAMTYPE_TABLE[index][3]/2 * SiS_Pr->SiS_DataBusWidth / 32;  if (RankNo * RankSize <= 128) {    data = 0;    while((RankSize >>= 1) > 0) {      data += 0x10;    }    data |= (RankNo - 1) << 2;    data |= (SiS_Pr->SiS_DataBusWidth / 64) & 2;    data |= SiS_Pr->SiS_ChannelAB;    SiS_SetReg1(SiS_Pr->SiS_P3c4,0x14,data);    /* should delay */    SiS_SDR_MRS(SiS_Pr);    return 1;  } else    return 0;}intSiS_SetDDRChannel(SiS_Private *SiS_Pr, int index,UCHAR ChannelNo,                  USHORT DRAMTYPE_TABLE[][5]){  USHORT  data;  int RankSize;  RankSize = DRAMTYPE_TABLE[index][3]/2 * SiS_Pr->SiS_DataBusWidth / 32;  /* RankSize = DRAMTYPE_TABLE[index][3]; */  if (ChannelNo * RankSize <= 128) {    data = 0;    while((RankSize >>= 1) > 0) {      data += 0x10;    }    if(ChannelNo == 2) data |= 0x0C;    data |= (SiS_Pr->SiS_DataBusWidth / 32) & 2;    data |= SiS_Pr->SiS_ChannelAB;    SiS_SetReg1(SiS_Pr->SiS_P3c4,0x14,data);    /* should delay */    SiS_DDR_MRS(SiS_Pr);    return 1;  } else    return 0;}intSiS_CheckColumn(SiS_Private *SiS_Pr, int

⌨️ 快捷键说明

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