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

📄 radeon_driver.c

📁 ati driver
💻 C
📖 第 1 页 / 共 5 页
字号:
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c,v 1.110 2003/10/30 17:36:58 tsi Exp $ *//* * Copyright 2000 ATI Technologies Inc., Markham, Ontario, and *                VA Linux Systems Inc., Fremont, California. * * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation on the rights to use, copy, modify, merge, * publish, distribute, sublicense, and/or sell copies of the Software, * and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice (including the * next paragraph) shall be included in all copies or substantial * portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NON-INFRINGEMENT.  IN NO EVENT SHALL ATI, VA LINUX SYSTEMS AND/OR * THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. *//* * Authors: *   Kevin E. Martin <martin@xfree86.org> *   Rickard E. Faith <faith@valinux.com> *   Alan Hourihane <alanh@fairlite.demon.co.uk> * * Credits: * *   Thanks to Ani Joshi <ajoshi@shell.unixbox.com> for providing source *   code to his Radeon driver.  Portions of this file are based on the *   initialization code for that driver. * * References: * * !!!! FIXME !!!! *   RAGE 128 VR/ RAGE 128 GL Register Reference Manual (Technical *   Reference Manual P/N RRG-G04100-C Rev. 0.04), ATI Technologies: April *   1999. * *   RAGE 128 Software Development Manual (Technical Reference Manual P/N *   SDK-G04000 Rev. 0.01), ATI Technologies: June 1999. * * This server does not yet support these XFree86 4.0 features: * !!!! FIXME !!!! *   DDC1 & DDC2 *   shadowfb (Note: dri uses shadowfb for another purpose in radeon_dri.c) *   overlay planes * * Modified by Marc Aurele La France (tsi@xfree86.org) for ATI driver merge. */				/* Driver data structures */#include "radeon.h"#include "radeon_macros.h"#include "radeon_probe.h"#include "radeon_reg.h"#include "radeon_version.h"#ifdef XF86DRI#define _XF86DRI_SERVER_#include "radeon_dri.h"#include "radeon_sarea.h"#endif#include "fb.h"				/* colormap initialization */#include "micmap.h"#include "dixstruct.h"				/* X and server generic header files */#include "xf86.h"#include "xf86_OSproc.h"#include "xf86PciInfo.h"#include "xf86RAC.h"#include "xf86Resources.h"#include "xf86cmap.h"#include "vbe.h"				/* fbdevhw * vgaHW definitions */#include "fbdevhw.h"#include "vgaHW.h"#ifndef MAX#define MAX(a,b) ((a)>(b)?(a):(b))#endif#ifndef MIN#define MIN(a,b) ((a)>(b)?(b):(a))#endif				/* Forward definitions for driver functions */static Bool RADEONCloseScreen(int scrnIndex, ScreenPtr pScreen);static Bool RADEONSaveScreen(ScreenPtr pScreen, int mode);static void RADEONSave(ScrnInfoPtr pScrn);static void RADEONRestore(ScrnInfoPtr pScrn);static Bool RADEONModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode);static void RADEONDisplayPowerManagementSet(ScrnInfoPtr pScrn,					    int PowerManagementMode,					    int flags);static void RADEONInitDispBandwidth(ScrnInfoPtr pScrn);typedef enum {    OPTION_NOACCEL,    OPTION_SW_CURSOR,    OPTION_DAC_6BIT,    OPTION_DAC_8BIT,#ifdef XF86DRI    OPTION_IS_PCI,    OPTION_BUS_TYPE,    OPTION_CP_PIO,    OPTION_USEC_TIMEOUT,    OPTION_AGP_MODE,    OPTION_AGP_FW,    OPTION_GART_SIZE,    OPTION_RING_SIZE,    OPTION_BUFFER_SIZE,    OPTION_DEPTH_MOVE,    OPTION_PAGE_FLIP,    OPTION_NO_BACKBUFFER,#endif    OPTION_PANEL_OFF,    OPTION_DDC_MODE,    OPTION_MONITOR_LAYOUT,    OPTION_IGNORE_EDID,    OPTION_CRTC2_OVERLAY,    OPTION_CLONE_MODE,    OPTION_CLONE_HSYNC,    OPTION_CLONE_VREFRESH,    OPTION_FBDEV,    OPTION_VIDEO_KEY,    OPTION_DISP_PRIORITY,    OPTION_PANEL_SIZE} RADEONOpts;const OptionInfoRec RADEONOptions[] = {    { OPTION_NOACCEL,        "NoAccel",          OPTV_BOOLEAN, {0}, FALSE },    { OPTION_SW_CURSOR,      "SWcursor",         OPTV_BOOLEAN, {0}, FALSE },    { OPTION_DAC_6BIT,       "Dac6Bit",          OPTV_BOOLEAN, {0}, FALSE },    { OPTION_DAC_8BIT,       "Dac8Bit",          OPTV_BOOLEAN, {0}, TRUE  },#ifdef XF86DRI    { OPTION_IS_PCI,         "ForcePCIMode",     OPTV_BOOLEAN, {0}, FALSE },    { OPTION_BUS_TYPE,       "BusType",          OPTV_ANYSTR,  {0}, FALSE },    { OPTION_CP_PIO,         "CPPIOMode",        OPTV_BOOLEAN, {0}, FALSE },    { OPTION_USEC_TIMEOUT,   "CPusecTimeout",    OPTV_INTEGER, {0}, FALSE },    { OPTION_AGP_MODE,       "AGPMode",          OPTV_INTEGER, {0}, FALSE },    { OPTION_AGP_FW,         "AGPFastWrite",     OPTV_BOOLEAN, {0}, FALSE },    { OPTION_GART_SIZE,      "AGPSize",          OPTV_INTEGER, {0}, FALSE },    { OPTION_GART_SIZE,      "GARTSize",         OPTV_INTEGER, {0}, FALSE },    { OPTION_RING_SIZE,      "RingSize",         OPTV_INTEGER, {0}, FALSE },    { OPTION_BUFFER_SIZE,    "BufferSize",       OPTV_INTEGER, {0}, FALSE },    { OPTION_DEPTH_MOVE,     "EnableDepthMoves", OPTV_BOOLEAN, {0}, FALSE },    { OPTION_PAGE_FLIP,      "EnablePageFlip",   OPTV_BOOLEAN, {0}, FALSE },    { OPTION_NO_BACKBUFFER,  "NoBackBuffer",     OPTV_BOOLEAN, {0}, FALSE },#endif    { OPTION_PANEL_OFF,      "PanelOff",         OPTV_BOOLEAN, {0}, FALSE },    { OPTION_DDC_MODE,       "DDCMode",          OPTV_BOOLEAN, {0}, FALSE },    { OPTION_MONITOR_LAYOUT, "MonitorLayout",    OPTV_ANYSTR,  {0}, FALSE },    { OPTION_IGNORE_EDID,    "IgnoreEDID",       OPTV_BOOLEAN, {0}, FALSE },    { OPTION_CRTC2_OVERLAY , "OverlayOnCRTC2",   OPTV_BOOLEAN, {0}, FALSE },    { OPTION_CLONE_MODE,     "CloneMode",        OPTV_ANYSTR,  {0}, FALSE },    { OPTION_CLONE_HSYNC,    "CloneHSync",       OPTV_ANYSTR,  {0}, FALSE },    { OPTION_CLONE_VREFRESH, "CloneVRefresh",    OPTV_ANYSTR,  {0}, FALSE },    { OPTION_FBDEV,          "UseFBDev",         OPTV_BOOLEAN, {0}, FALSE },    { OPTION_VIDEO_KEY,      "VideoKey",         OPTV_INTEGER, {0}, FALSE },    { OPTION_DISP_PRIORITY,  "DisplayPriority",  OPTV_ANYSTR,  {0}, FALSE },    { OPTION_PANEL_SIZE,     "PanelSize",        OPTV_ANYSTR,  {0}, FALSE },    { -1,                    NULL,               OPTV_NONE,    {0}, FALSE }};static const char *vgahwSymbols[] = {    "vgaHWFreeHWRec",    "vgaHWGetHWRec",    "vgaHWGetIndex",    "vgaHWLock",    "vgaHWRestore",    "vgaHWSave",    "vgaHWUnlock",    "vgaHWGetIOBase",    NULL};static const char *fbdevHWSymbols[] = {    "fbdevHWInit",    "fbdevHWUseBuildinMode",    "fbdevHWGetVidmem",    "fbdevHWDPMSSet",    /* colormap */    "fbdevHWLoadPalette",    /* ScrnInfo hooks */    "fbdevHWAdjustFrame",    "fbdevHWEnterVT",    "fbdevHWLeaveVT",    "fbdevHWModeInit",    "fbdevHWRestore",    "fbdevHWSave",    "fbdevHWSwitchMode",    "fbdevHWValidMode",    "fbdevHWMapMMIO",    "fbdevHWMapVidmem",    "fbdevHWUnmapMMIO",    "fbdevHWUnmapVidmem",    NULL};static const char *ddcSymbols[] = {    "xf86PrintEDID",    "xf86DoEDID_DDC1",    "xf86DoEDID_DDC2",    NULL};static const char *fbSymbols[] = {    "fbScreenInit",    "fbPictureInit",    NULL};static const char *xaaSymbols[] = {    "XAACreateInfoRec",    "XAADestroyInfoRec",    "XAAInit",    NULL};#if 0static const char *xf8_32bppSymbols[] = {    "xf86Overlay8Plus32Init",    NULL};#endifstatic const char *ramdacSymbols[] = {    "xf86CreateCursorInfoRec",    "xf86DestroyCursorInfoRec",    "xf86ForceHWCursor",    "xf86InitCursor",    NULL};#ifdef XF86DRIstatic const char *drmSymbols[] = {    "drmGetInterruptFromBusID",    "drmCtlInstHandler",    "drmCtlUninstHandler",    "drmAddBufs",    "drmAddMap",    "drmAgpAcquire",    "drmAgpAlloc",    "drmAgpBase",    "drmAgpBind",    "drmAgpDeviceId",    "drmAgpEnable",    "drmAgpFree",    "drmAgpGetMode",    "drmAgpRelease",    "drmAgpUnbind",    "drmAgpVendorId",    "drmCommandNone",    "drmCommandRead",    "drmCommandWrite",    "drmCommandWriteRead",    "drmDMA",    "drmFreeVersion",    "drmGetLibVersion",    "drmGetVersion",    "drmMap",    "drmMapBufs",    "drmRadeonCleanupCP",    "drmRadeonClear",    "drmRadeonFlushIndirectBuffer",    "drmRadeonInitCP",    "drmRadeonResetCP",    "drmRadeonStartCP",    "drmRadeonStopCP",    "drmRadeonWaitForIdleCP",    "drmScatterGatherAlloc",    "drmScatterGatherFree",    "drmUnmap",    "drmUnmapBufs",    NULL};static const char *driSymbols[] = {    "DRICloseScreen",    "DRICreateInfoRec",    "DRIDestroyInfoRec",    "DRIFinishScreenInit",    "DRIGetContext",    "DRIGetDeviceInfo",    "DRIGetSAREAPrivate",    "DRILock",    "DRIQueryVersion",    "DRIScreenInit",    "DRIUnlock",    "GlxSetVisualConfigs",    NULL};static const char *driShadowFBSymbols[] = {    "ShadowFBInit",    NULL};#endifstatic const char *vbeSymbols[] = {    "VBEInit",    "vbeDoEDID",    NULL};static const char *int10Symbols[] = {    "xf86InitInt10",    "xf86FreeInt10",    "xf86int10Addr",    NULL};static const char *i2cSymbols[] = {    "xf86CreateI2CBusRec",    "xf86I2CBusInit",    NULL};void RADEONLoaderRefSymLists(void){    /*     * Tell the loader about symbols from other modules that this module might     * refer to.     */    xf86LoaderRefSymLists(vgahwSymbols,			  fbSymbols,			  xaaSymbols,#if 0			  xf8_32bppSymbols,#endif			  ramdacSymbols,#ifdef XF86DRI			  drmSymbols,			  driSymbols,			  driShadowFBSymbols,#endif			  fbdevHWSymbols,			  vbeSymbols,			  int10Symbols,			  i2cSymbols,			  ddcSymbols,			  NULL);}/* Established timings from EDID standard */static struct{    int hsize;    int vsize;    int refresh;} est_timings[] = {    {1280, 1024, 75},    {1024, 768, 75},    {1024, 768, 70},    {1024, 768, 60},    {1024, 768, 87},    {832, 624, 75},    {800, 600, 75},    {800, 600, 72},	    {800, 600, 60},    {800, 600, 56},    {640, 480, 75},    {640, 480, 72},    {640, 480, 67},    {640, 480, 60},    {720, 400, 88},    {720, 400, 70},};static const RADEONTMDSPll default_tmds_pll[CHIP_FAMILY_LAST][4] = {    {{0, 0}, {0, 0}, {0, 0}, {0, 0}},				/*CHIP_FAMILY_UNKNOW*/    {{0, 0}, {0, 0}, {0, 0}, {0, 0}},				/*CHIP_FAMILY_LEGACY*/    {{12000, 0xa1b}, {0xffffffff, 0xa3f}, {0, 0}, {0, 0}},	/*CHIP_FAMILY_RADEON*/    {{12000, 0xa1b}, {0xffffffff, 0xa3f}, {0, 0}, {0, 0}},	/*CHIP_FAMILY_RV100*/    {{0, 0}, {0, 0}, {0, 0}, {0, 0}},				/*CHIP_FAMILY_RS100*/    {{15000, 0xa1b}, {0xffffffff, 0xa3f}, {0, 0}, {0, 0}},	/*CHIP_FAMILY_RV200*/    {{12000, 0xa1b}, {0xffffffff, 0xa3f}, {0, 0}, {0, 0}},	/*CHIP_FAMILY_RS200*/    {{15000, 0xa1b}, {0xffffffff, 0xa3f}, {0, 0}, {0, 0}},	/*CHIP_FAMILY_R200*/    {{15500, 0x81b}, {0xffffffff, 0x83f}, {0, 0}, {0, 0}},	/*CHIP_FAMILY_RV250*/    {{0, 0}, {0, 0}, {0, 0}, {0, 0}},				/*CHIP_FAMILY_RS300*/    {{13000, 0x400f4}, {15000, 0x400f7}, {0xffffffff, 0x400f7/*0x40111*/}, {0, 0}},	/*CHIP_FAMILY_RV280*/    {{0xffffffff, 0xb01cb}, {0, 0}, {0, 0}, {0, 0}},		/*CHIP_FAMILY_R300*/    {{0xffffffff, 0xb01cb}, {0, 0}, {0, 0}, {0, 0}},		/*CHIP_FAMILY_R350*/    {{15000, 0xb0155}, {0xffffffff, 0xb01cb}, {0, 0}, {0, 0}},	/*CHIP_FAMILY_RV350*/};extern int gRADEONEntityIndex;struct RADEONInt10Save {	CARD32 MEM_CNTL;	CARD32 MEMSIZE;	CARD32 MPP_TB_CONFIG;};static Bool RADEONMapMMIO(ScrnInfoPtr pScrn);static Bool RADEONUnmapMMIO(ScrnInfoPtr pScrn);static RADEONEntPtr RADEONEntPriv(ScrnInfoPtr pScrn){    DevUnion     *pPriv;    RADEONInfoPtr  info   = RADEONPTR(pScrn);    pPriv = xf86GetEntityPrivate(info->pEnt->index,                                 gRADEONEntityIndex);    return pPriv->ptr;}static voidRADEONPreInt10Save(ScrnInfoPtr pScrn, void **pPtr){    RADEONInfoPtr  info   = RADEONPTR(pScrn);    unsigned char *RADEONMMIO = info->MMIO;    CARD32 CardTmp;    static struct RADEONInt10Save SaveStruct = { 0, 0, 0 };    /* Save the values and zap MEM_CNTL */

⌨️ 快捷键说明

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