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

📄 init.c

📁 一个2.4.21版本的嵌入式linux内核
💻 C
📖 第 1 页 / 共 5 页
字号:
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/sis/init.c,v 1.3 2002/24/04 01:16:16 dawes Exp $ *//* * Mode switching code (CRT1 section) for SiS 300/540/630/730/315/550/650/740/330 * (Universal module for Linux kernel framebuffer and XFree86 4.x) * * Assembler-To-C translation * Copyright 2002 by Thomas Winischhofer <thomas@winischhofer.net> * Minor parts Copyright SiS, Inc. * * Based on BIOS *     1.10.07, 1.10a for 650/CH7019 *     1.11.21a for 740/CH7019 *     1.11.05 for 650/LVDS (w/o Chrontel) *     1.07.1b, 1.11.6s, 1.11.6w, 1.11.7w, 1.11.8r for 650/301(B/LV) *     2.04.50 (I) and 2.04.5c (II) for 630/301(B) *     2.06.50 for 630/301B (dual VGA) *     2.02.3b, 2.03.02, 2.04.5c, 2.07a and 2.08.b3 for 630/LVDS/LVDS+CH7005 *     2.04.5c, 2.04.6c for 730+LVDS+CH7005 *     1.09b for 315/301(B) *     1.16.51 for 300+301LV (ECS A907) *     1.01.03 for 330 (Xabre 400) * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of the copyright holder not be used in * advertising or publicity pertaining to distribution of the software without * specific, written prior permission.  The copyright holder makes no representations * about the suitability of this software for any purpose.  It is provided * "as is" without express or implied warranty. * * THE COPYRIGHT HOLDER DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. * * TW says: This code looks awful, I know. But please don't do anything about * this otherwise debugging will be hell. * The code is extremely fragile as regards the different chipsets, different * video bridges and combinations thereof. If anything is changed, extreme * care has to be taken that that change doesn't break it for other chipsets, * bridges or combinations thereof. * All comments in this file are by me, regardless if they are marked TW or not. * */ #include "init.h"#ifdef SIS300#include "300vtbl.h"#endif#ifdef SIS315H#include "310vtbl.h"#endif#ifdef LINUX_XF86BOOLEAN SiSBIOSSetMode(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,                       ScrnInfoPtr pScrn, DisplayModePtr mode, BOOLEAN IsCustom);DisplayModePtr SiSBuildBuiltInModeList(ScrnInfoPtr pScrn);#ifdef SISDUALHEAD /* TW: For dual head */BOOLEAN SiSBIOSSetModeCRT1(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,                       ScrnInfoPtr pScrn, DisplayModePtr mode, BOOLEAN IsCustom);BOOLEAN SiSBIOSSetModeCRT2(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,                       ScrnInfoPtr pScrn, DisplayModePtr mode);#endif /* dual head */#endif /* linux_xf86 */#ifdef LINUXBIOSBOOLEAN SiSInit(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);#endif#ifdef LINUX_XF86BOOLEAN SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,                   ScrnInfoPtr pScrn,USHORT ModeNo, BOOLEAN dosetpitch);#elseBOOLEAN SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension,                   USHORT ModeNo);#endif#if defined(ALLOC_PRAGMA)#pragma alloc_text(PAGE,SiSSetMode)#pragma alloc_text(PAGE,SiSInit)#endifstatic ULONG GetDRAMSize(SiS_Private *SiS_Pr,                         PSIS_HW_DEVICE_INFO HwDeviceExtension);static void DelaySeconds(int seconds);void SiS_DebugCode(SiS_Private *SiS_Pr, UCHAR code);static voidDelaySeconds(int seconds){  int i;#ifdef WIN2000  int j;#endif  for (i=0;i<seconds;i++) {#ifdef TC    delay(1000);#endif#ifdef WIN2000    for (j=0;j<20000;j++)      VideoPortStallExecution(50);#endif#ifdef WINCE_HEADER#endif#ifdef LINUX_KERNEL#endif  }}voidSiS_DebugCode(SiS_Private *SiS_Pr, UCHAR code){  OutPortByte(0x80, code);  DelaySeconds(0x3);}#ifdef SIS300static voidInitTo300Pointer(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension){   SiS_Pr->SiS_SModeIDTable  = (SiS_StStruct *)SiS300_SModeIDTable;   SiS_Pr->SiS_VBModeIDTable = (SiS_VBModeStruct *)SiS300_VBModeIDTable;   SiS_Pr->SiS_StandTable    = (SiS_StandTableStruct *)SiS300_StandTable;   SiS_Pr->SiS_EModeIDTable  = (SiS_ExtStruct *)SiS300_EModeIDTable;   SiS_Pr->SiS_RefIndex      = (SiS_Ext2Struct *)SiS300_RefIndex;   SiS_Pr->SiS_CRT1Table     = (SiS_CRT1TableStruct *)SiS300_CRT1Table;   if(HwDeviceExtension->jChipType == SIS_300) {      SiS_Pr->SiS_MCLKData_0    = (SiS_MCLKDataStruct *)SiS300_MCLKData_300; /* 300 */   } else {      SiS_Pr->SiS_MCLKData_0    = (SiS_MCLKDataStruct *)SiS300_MCLKData_630; /* 630, 730 */   }   SiS_Pr->SiS_ECLKData      = (SiS_ECLKDataStruct *)SiS300_ECLKData;   SiS_Pr->SiS_VCLKData      = (SiS_VCLKDataStruct *)SiS300_VCLKData;   SiS_Pr->SiS_VBVCLKData    = (SiS_VBVCLKDataStruct *)SiS300_VCLKData;   SiS_Pr->SiS_ScreenOffset  = SiS300_ScreenOffset;   SiS_Pr->SiS_StResInfo     = (SiS_StResInfoStruct *)SiS300_StResInfo;   SiS_Pr->SiS_ModeResInfo   = (SiS_ModeResInfoStruct *)SiS300_ModeResInfo;   SiS_Pr->pSiS_OutputSelect = &SiS300_OutputSelect;   SiS_Pr->pSiS_SoftSetting  = &SiS300_SoftSetting;   SiS_Pr->SiS_SR15  = SiS300_SR15;#ifndef LINUX_XF86   SiS_Pr->pSiS_SR07 = &SiS300_SR07;   SiS_Pr->SiS_CR40  = SiS300_CR40;   SiS_Pr->SiS_CR49  = SiS300_CR49;   SiS_Pr->pSiS_SR1F = &SiS300_SR1F;   SiS_Pr->pSiS_SR21 = &SiS300_SR21;   SiS_Pr->pSiS_SR22 = &SiS300_SR22;   SiS_Pr->pSiS_SR23 = &SiS300_SR23;   SiS_Pr->pSiS_SR24 = &SiS300_SR24;   SiS_Pr->SiS_SR25  = SiS300_SR25;   SiS_Pr->pSiS_SR31 = &SiS300_SR31;   SiS_Pr->pSiS_SR32 = &SiS300_SR32;   SiS_Pr->pSiS_SR33 = &SiS300_SR33;   SiS_Pr->pSiS_CRT2Data_1_2  = &SiS300_CRT2Data_1_2;   SiS_Pr->pSiS_CRT2Data_4_D  = &SiS300_CRT2Data_4_D;   SiS_Pr->pSiS_CRT2Data_4_E  = &SiS300_CRT2Data_4_E;   SiS_Pr->pSiS_CRT2Data_4_10 = &SiS300_CRT2Data_4_10;   SiS_Pr->pSiS_RGBSenseData    = &SiS300_RGBSenseData;   SiS_Pr->pSiS_VideoSenseData  = &SiS300_VideoSenseData;   SiS_Pr->pSiS_YCSenseData     = &SiS300_YCSenseData;   SiS_Pr->pSiS_RGBSenseData2   = &SiS300_RGBSenseData2;   SiS_Pr->pSiS_VideoSenseData2 = &SiS300_VideoSenseData2;   SiS_Pr->pSiS_YCSenseData2    = &SiS300_YCSenseData2;#endif   SiS_Pr->SiS_NTSCPhase  = SiS300_NTSCPhase;   SiS_Pr->SiS_PALPhase   = SiS300_PALPhase;   SiS_Pr->SiS_NTSCPhase2 = SiS300_NTSCPhase2;   SiS_Pr->SiS_PALPhase2  = SiS300_PALPhase2;   SiS_Pr->SiS_PALMPhase  = SiS300_PALMPhase;   SiS_Pr->SiS_PALNPhase  = SiS300_PALNPhase;   SiS_Pr->SiS_PALMPhase2 = SiS300_PALMPhase2;   SiS_Pr->SiS_PALNPhase2 = SiS300_PALNPhase2;   SiS_Pr->SiS_StLCD1024x768Data    = (SiS_LCDDataStruct *)SiS300_StLCD1024x768Data;   SiS_Pr->SiS_ExtLCD1024x768Data   = (SiS_LCDDataStruct *)SiS300_ExtLCD1024x768Data;   SiS_Pr->SiS_St2LCD1024x768Data   = (SiS_LCDDataStruct *)SiS300_St2LCD1024x768Data;   SiS_Pr->SiS_StLCD1280x1024Data   = (SiS_LCDDataStruct *)SiS300_StLCD1280x1024Data;   SiS_Pr->SiS_ExtLCD1280x1024Data  = (SiS_LCDDataStruct *)SiS300_ExtLCD1280x1024Data;   SiS_Pr->SiS_St2LCD1280x1024Data  = (SiS_LCDDataStruct *)SiS300_St2LCD1280x1024Data;   SiS_Pr->SiS_NoScaleData1024x768  = (SiS_LCDDataStruct *)SiS300_NoScaleData1024x768;   SiS_Pr->SiS_NoScaleData1280x1024 = (SiS_LCDDataStruct *)SiS300_NoScaleData1280x1024;   SiS_Pr->SiS_LCD1280x960Data      = (SiS_LCDDataStruct *)SiS300_LCD1280x960Data;   SiS_Pr->SiS_ExtLCD1400x1050Data  = (SiS_LCDDataStruct *)SiS300_ExtLCD1400x1050Data;   SiS_Pr->SiS_ExtLCD1600x1200Data  = (SiS_LCDDataStruct *)SiS300_ExtLCD1600x1200Data;   SiS_Pr->SiS_StLCD1400x1050Data   = (SiS_LCDDataStruct *)SiS300_StLCD1400x1050Data;   SiS_Pr->SiS_StLCD1600x1200Data   = (SiS_LCDDataStruct *)SiS300_StLCD1600x1200Data;   SiS_Pr->SiS_NoScaleData1400x1050 = (SiS_LCDDataStruct *)SiS300_NoScaleData1400x1050;   SiS_Pr->SiS_NoScaleData1600x1200 = (SiS_LCDDataStruct *)SiS300_NoScaleData1600x1200;   SiS_Pr->SiS_NoScaleData          = (SiS_LCDDataStruct *)SiS300_NoScaleData;   SiS_Pr->SiS_StPALData   = (SiS_TVDataStruct *)SiS300_StPALData;   SiS_Pr->SiS_ExtPALData  = (SiS_TVDataStruct *)SiS300_ExtPALData;   SiS_Pr->SiS_StNTSCData  = (SiS_TVDataStruct *)SiS300_StNTSCData;   SiS_Pr->SiS_ExtNTSCData = (SiS_TVDataStruct *)SiS300_ExtNTSCData;/* SiS_Pr->SiS_St1HiTVData = (SiS_TVDataStruct *)SiS300_St1HiTVData;  */   SiS_Pr->SiS_St2HiTVData = (SiS_TVDataStruct *)SiS300_St2HiTVData;   SiS_Pr->SiS_ExtHiTVData = (SiS_TVDataStruct *)SiS300_ExtHiTVData;   SiS_Pr->SiS_NTSCTiming     = SiS300_NTSCTiming;   SiS_Pr->SiS_PALTiming      = SiS300_PALTiming;   SiS_Pr->SiS_HiTVSt1Timing  = SiS300_HiTVSt1Timing;   SiS_Pr->SiS_HiTVSt2Timing  = SiS300_HiTVSt2Timing;   SiS_Pr->SiS_HiTVTextTiming = SiS300_HiTVTextTiming;   SiS_Pr->SiS_HiTVGroup3Data = SiS300_HiTVGroup3Data;   SiS_Pr->SiS_HiTVGroup3Simu = SiS300_HiTVGroup3Simu;   SiS_Pr->SiS_HiTVGroup3Text = SiS300_HiTVGroup3Text;   SiS_Pr->SiS_PanelDelayTbl     = (SiS_PanelDelayTblStruct *)SiS300_PanelDelayTbl;   SiS_Pr->SiS_PanelDelayTblLVDS = (SiS_PanelDelayTblStruct *)SiS300_PanelDelayTblLVDS;   SiS_Pr->SiS_LVDS800x600Data_1   = (SiS_LVDSDataStruct *)SiS300_LVDS800x600Data_1;   SiS_Pr->SiS_LVDS800x600Data_2   = (SiS_LVDSDataStruct *)SiS300_LVDS800x600Data_2;   SiS_Pr->SiS_LVDS1024x768Data_1  = (SiS_LVDSDataStruct *)SiS300_LVDS1024x768Data_1;   SiS_Pr->SiS_LVDS1024x768Data_2  = (SiS_LVDSDataStruct *)SiS300_LVDS1024x768Data_2;   SiS_Pr->SiS_LVDS1280x1024Data_1 = (SiS_LVDSDataStruct *)SiS300_LVDS1280x1024Data_1;   SiS_Pr->SiS_LVDS1280x1024Data_2 = (SiS_LVDSDataStruct *)SiS300_LVDS1280x1024Data_2;   SiS_Pr->SiS_LVDS1280x960Data_1  = (SiS_LVDSDataStruct *)SiS300_LVDS1280x1024Data_1;   SiS_Pr->SiS_LVDS1280x960Data_2  = (SiS_LVDSDataStruct *)SiS300_LVDS1280x1024Data_2;   SiS_Pr->SiS_LVDS1400x1050Data_1 = (SiS_LVDSDataStruct *)SiS300_LVDS1400x1050Data_1;   SiS_Pr->SiS_LVDS1400x1050Data_2 = (SiS_LVDSDataStruct *)SiS300_LVDS1400x1050Data_2;   SiS_Pr->SiS_LVDS1600x1200Data_1 = (SiS_LVDSDataStruct *)SiS300_LVDS1600x1200Data_1;   SiS_Pr->SiS_LVDS1600x1200Data_2 = (SiS_LVDSDataStruct *)SiS300_LVDS1600x1200Data_2;   SiS_Pr->SiS_LVDS1280x768Data_1  = (SiS_LVDSDataStruct *)SiS300_LVDS1280x768Data_1;   SiS_Pr->SiS_LVDS1280x768Data_2  = (SiS_LVDSDataStruct *)SiS300_LVDS1280x768Data_2;   SiS_Pr->SiS_LVDS1024x600Data_1  = (SiS_LVDSDataStruct *)SiS300_LVDS1024x600Data_1;   SiS_Pr->SiS_LVDS1024x600Data_2  = (SiS_LVDSDataStruct *)SiS300_LVDS1024x600Data_2;   SiS_Pr->SiS_LVDS1152x768Data_1  = (SiS_LVDSDataStruct *)SiS300_LVDS1152x768Data_1;   SiS_Pr->SiS_LVDS1152x768Data_2  = (SiS_LVDSDataStruct *)SiS300_LVDS1152x768Data_2;   SiS_Pr->SiS_LVDSXXXxXXXData_1   = (SiS_LVDSDataStruct *)SiS300_LVDSXXXxXXXData_1;   SiS_Pr->SiS_LVDS320x480Data_1   = (SiS_LVDSDataStruct *)SiS300_LVDS320x480Data_1;   SiS_Pr->SiS_LVDS640x480Data_1   = (SiS_LVDSDataStruct *)SiS300_LVDS640x480Data_1;   SiS_Pr->SiS_LCDA1400x1050Data_1 = (SiS_LVDSDataStruct *)SiS300_LCDA1400x1050Data_1;   SiS_Pr->SiS_LCDA1400x1050Data_2 = (SiS_LVDSDataStruct *)SiS300_LCDA1400x1050Data_2;   SiS_Pr->SiS_LCDA1600x1200Data_1 = (SiS_LVDSDataStruct *)SiS300_LCDA1600x1200Data_1;   SiS_Pr->SiS_LCDA1600x1200Data_2 = (SiS_LVDSDataStruct *)SiS300_LCDA1600x1200Data_2;   SiS_Pr->SiS_CHTVUNTSCData = (SiS_LVDSDataStruct *)SiS300_CHTVUNTSCData;   SiS_Pr->SiS_CHTVONTSCData = (SiS_LVDSDataStruct *)SiS300_CHTVONTSCData;   SiS_Pr->SiS_CHTVUPALData  = (SiS_LVDSDataStruct *)SiS300_CHTVUPALData;   SiS_Pr->SiS_CHTVOPALData  = (SiS_LVDSDataStruct *)SiS300_CHTVOPALData;   SiS_Pr->SiS_CHTVUPALMData = (SiS_LVDSDataStruct *)SiS300_CHTVUNTSCData; /* not supported on 300 series */   SiS_Pr->SiS_CHTVOPALMData = (SiS_LVDSDataStruct *)SiS300_CHTVONTSCData; /* not supported on 300 series */   SiS_Pr->SiS_CHTVUPALNData = (SiS_LVDSDataStruct *)SiS300_CHTVUPALData;  /* not supported on 300 series */   SiS_Pr->SiS_CHTVOPALNData = (SiS_LVDSDataStruct *)SiS300_CHTVOPALData;  /* not supported on 300 series */   SiS_Pr->SiS_CHTVSOPALData = (SiS_LVDSDataStruct *)SiS300_CHTVSOPALData;   SiS_Pr->SiS_PanelType00_1 = (SiS_LVDSDesStruct *)SiS300_PanelType00_1;   SiS_Pr->SiS_PanelType01_1 = (SiS_LVDSDesStruct *)SiS300_PanelType01_1;   SiS_Pr->SiS_PanelType02_1 = (SiS_LVDSDesStruct *)SiS300_PanelType02_1;   SiS_Pr->SiS_PanelType03_1 = (SiS_LVDSDesStruct *)SiS300_PanelType03_1;   SiS_Pr->SiS_PanelType04_1 = (SiS_LVDSDesStruct *)SiS300_PanelType04_1;   SiS_Pr->SiS_PanelType05_1 = (SiS_LVDSDesStruct *)SiS300_PanelType05_1;   SiS_Pr->SiS_PanelType06_1 = (SiS_LVDSDesStruct *)SiS300_PanelType06_1;   SiS_Pr->SiS_PanelType07_1 = (SiS_LVDSDesStruct *)SiS300_PanelType07_1;   SiS_Pr->SiS_PanelType08_1 = (SiS_LVDSDesStruct *)SiS300_PanelType08_1;   SiS_Pr->SiS_PanelType09_1 = (SiS_LVDSDesStruct *)SiS300_PanelType09_1;   SiS_Pr->SiS_PanelType0a_1 = (SiS_LVDSDesStruct *)SiS300_PanelType0a_1;   SiS_Pr->SiS_PanelType0b_1 = (SiS_LVDSDesStruct *)SiS300_PanelType0b_1;   SiS_Pr->SiS_PanelType0c_1 = (SiS_LVDSDesStruct *)SiS300_PanelType0c_1;

⌨️ 快捷键说明

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