1209ff23fSmrg/* 2209ff23fSmrg * Copyright 2007 Egbert Eich <eich@novell.com> 3209ff23fSmrg * Copyright 2007 Luc Verhaegen <lverhaegen@novell.com> 4209ff23fSmrg * Copyright 2007 Matthias Hopf <mhopf@novell.com> 5209ff23fSmrg * Copyright 2007 Advanced Micro Devices, Inc. 6209ff23fSmrg * 7209ff23fSmrg * Permission is hereby granted, free of charge, to any person obtaining a 8209ff23fSmrg * copy of this software and associated documentation files (the "Software"), 9209ff23fSmrg * to deal in the Software without restriction, including without limitation 10209ff23fSmrg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11209ff23fSmrg * and/or sell copies of the Software, and to permit persons to whom the 12209ff23fSmrg * Software is furnished to do so, subject to the following conditions: 13209ff23fSmrg * 14209ff23fSmrg * The above copyright notice and this permission notice shall be included in 15209ff23fSmrg * all copies or substantial portions of the Software. 16209ff23fSmrg * 17209ff23fSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18209ff23fSmrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19209ff23fSmrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20209ff23fSmrg * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 21209ff23fSmrg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 22209ff23fSmrg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23209ff23fSmrg * OTHER DEALINGS IN THE SOFTWARE. 24209ff23fSmrg */ 25209ff23fSmrg 26209ff23fSmrg 27209ff23fSmrg#ifndef RHD_ATOMBIOS_H_ 28209ff23fSmrg# define RHD_ATOMBIOS_H_ 29209ff23fSmrg 30209ff23fSmrg//#include "radeon.h" 31209ff23fSmrg 32209ff23fSmrg# ifdef ATOM_BIOS 33209ff23fSmrg 34209ff23fSmrgtypedef enum _AtomBiosRequestID { 35209ff23fSmrg ATOMBIOS_INIT, 36209ff23fSmrg ATOMBIOS_TEARDOWN, 37209ff23fSmrg# ifdef ATOM_BIOS_PARSER 38209ff23fSmrg ATOMBIOS_EXEC, 39209ff23fSmrg#endif 40209ff23fSmrg ATOMBIOS_ALLOCATE_FB_SCRATCH, 41209ff23fSmrg ATOMBIOS_GET_CONNECTORS, 42209ff23fSmrg ATOMBIOS_GET_PANEL_MODE, 43209ff23fSmrg ATOMBIOS_GET_PANEL_EDID, 44209ff23fSmrg GET_DEFAULT_ENGINE_CLOCK, 45209ff23fSmrg GET_DEFAULT_MEMORY_CLOCK, 46209ff23fSmrg GET_MAX_PIXEL_CLOCK_PLL_OUTPUT, 47209ff23fSmrg GET_MIN_PIXEL_CLOCK_PLL_OUTPUT, 48209ff23fSmrg GET_MAX_PIXEL_CLOCK_PLL_INPUT, 49209ff23fSmrg GET_MIN_PIXEL_CLOCK_PLL_INPUT, 50209ff23fSmrg GET_MAX_PIXEL_CLK, 51209ff23fSmrg GET_REF_CLOCK, 52209ff23fSmrg GET_FW_FB_START, 53209ff23fSmrg GET_FW_FB_SIZE, 54209ff23fSmrg ATOM_TMDS_FREQUENCY, 55209ff23fSmrg ATOM_TMDS_PLL_CHARGE_PUMP, 56209ff23fSmrg ATOM_TMDS_PLL_DUTY_CYCLE, 57209ff23fSmrg ATOM_TMDS_PLL_VCO_GAIN, 58209ff23fSmrg ATOM_TMDS_PLL_VOLTAGE_SWING, 59209ff23fSmrg ATOM_LVDS_SUPPORTED_REFRESH_RATE, 60209ff23fSmrg ATOM_LVDS_OFF_DELAY, 61209ff23fSmrg ATOM_LVDS_SEQ_DIG_ONTO_DE, 62209ff23fSmrg ATOM_LVDS_SEQ_DE_TO_BL, 63209ff23fSmrg ATOM_LVDS_DITHER, 64209ff23fSmrg ATOM_LVDS_DUALLINK, 65209ff23fSmrg ATOM_LVDS_24BIT, 66209ff23fSmrg ATOM_LVDS_GREYLVL, 67209ff23fSmrg ATOM_LVDS_FPDI, 68209ff23fSmrg ATOM_GPIO_QUERIES, 69209ff23fSmrg ATOM_GPIO_I2C_CLK_MASK, 70209ff23fSmrg ATOM_DAC1_BG_ADJ, 71209ff23fSmrg ATOM_DAC1_DAC_ADJ, 72209ff23fSmrg ATOM_DAC1_FORCE, 73209ff23fSmrg ATOM_DAC2_CRTC2_BG_ADJ, 74209ff23fSmrg ATOM_DAC2_CRTC2_DAC_ADJ, 75209ff23fSmrg ATOM_DAC2_CRTC2_FORCE, 76209ff23fSmrg ATOM_DAC2_CRTC2_MUX_REG_IND, 77209ff23fSmrg ATOM_DAC2_CRTC2_MUX_REG_INFO, 78209ff23fSmrg ATOMBIOS_GET_CV_MODES, 79209ff23fSmrg FUNC_END 80209ff23fSmrg} AtomBiosRequestID; 81209ff23fSmrg 82209ff23fSmrgtypedef enum _AtomBiosResult { 83209ff23fSmrg ATOM_SUCCESS, 84209ff23fSmrg ATOM_FAILED, 85209ff23fSmrg ATOM_NOT_IMPLEMENTED 86209ff23fSmrg} AtomBiosResult; 87209ff23fSmrg 88209ff23fSmrgtypedef struct AtomExec { 89209ff23fSmrg int index; 90209ff23fSmrg pointer pspace; 91209ff23fSmrg pointer *dataSpace; 92209ff23fSmrg} AtomExecRec, *AtomExecPtr; 93209ff23fSmrg 94209ff23fSmrgtypedef struct AtomFb { 95209ff23fSmrg unsigned int start; 96209ff23fSmrg unsigned int size; 97209ff23fSmrg} AtomFbRec, *AtomFbPtr; 98209ff23fSmrg 99209ff23fSmrgtypedef union AtomBiosArg 100209ff23fSmrg{ 101209ff23fSmrg uint32_t val; 102209ff23fSmrg struct rhdConnectorInfo *connectorInfo; 103209ff23fSmrg unsigned char* EDIDBlock; 104209ff23fSmrg atomBiosHandlePtr atomhandle; 105209ff23fSmrg DisplayModePtr modes; 106209ff23fSmrg AtomExecRec exec; 107209ff23fSmrg AtomFbRec fb; 10868105dcbSveego ScrnInfoPtr pScrn; 109209ff23fSmrg} AtomBiosArgRec, *AtomBiosArgPtr; 110209ff23fSmrg 111209ff23fSmrgextern AtomBiosResult 11268105dcbSveegoRHDAtomBiosFunc(ScrnInfoPtr pScrn, atomBiosHandlePtr handle, 113209ff23fSmrg AtomBiosRequestID id, AtomBiosArgPtr data); 114209ff23fSmrg 115209ff23fSmrgextern Bool 116209ff23fSmrgRADEONGetATOMConnectorInfoFromBIOSObject (ScrnInfoPtr pScrn); 117209ff23fSmrgextern Bool 118209ff23fSmrgRADEONGetATOMConnectorInfoFromBIOSConnectorTable (ScrnInfoPtr pScrn); 119209ff23fSmrg 120209ff23fSmrgextern int 121ad43ddacSmrgatombios_clk_gating_setup(ScrnInfoPtr pScrn, Bool enable); 122209ff23fSmrg 123209ff23fSmrgextern int 124ad43ddacSmrgatombios_static_pwrmgt_setup(ScrnInfoPtr pScrn, Bool enable); 125ad43ddacSmrg 126ad43ddacSmrgextern int 127ad43ddacSmrgatombios_set_engine_clock(ScrnInfoPtr pScrn, uint32_t engclock); 128ad43ddacSmrg 129ad43ddacSmrgextern int 130ad43ddacSmrgatombios_set_memory_clock(ScrnInfoPtr pScrn, uint32_t memclock); 131209ff23fSmrg 132209ff23fSmrgextern Bool 133209ff23fSmrgRADEONGetATOMTVInfo(xf86OutputPtr output); 134209ff23fSmrg 135209ff23fSmrgextern int 136b7e1c893Smrgatombios_external_tmds_setup(xf86OutputPtr output, int action); 137209ff23fSmrg 138209ff23fSmrgextern void 139209ff23fSmrgatombios_get_command_table_version(atomBiosHandlePtr atomBIOS, int index, int *major, int *minor); 140209ff23fSmrg 141b7e1c893Smrgextern xf86MonPtr 142b7e1c893Smrgradeon_atom_get_edid(xf86OutputPtr output); 143b7e1c893Smrg 144209ff23fSmrgBool 145209ff23fSmrgrhdAtomASICInit(atomBiosHandlePtr handle); 146209ff23fSmrg 147209ff23fSmrg# include "xf86int10.h" 148209ff23fSmrg# ifdef ATOM_BIOS_PARSER 149209ff23fSmrg# define INT8 INT8 150209ff23fSmrg# define INT16 INT16 151209ff23fSmrg# define INT32 INT32 152209ff23fSmrg# include "CD_Common_Types.h" 153209ff23fSmrg# else 154209ff23fSmrg# ifndef ULONG 155209ff23fSmrgtypedef unsigned int ULONG; 156209ff23fSmrg# define ULONG ULONG 157209ff23fSmrg# endif 158209ff23fSmrg# ifndef UCHAR 159209ff23fSmrgtypedef unsigned char UCHAR; 160209ff23fSmrg# define UCHAR UCHAR 161209ff23fSmrg# endif 162209ff23fSmrg# ifndef USHORT 163209ff23fSmrgtypedef unsigned short USHORT; 164209ff23fSmrg# define USHORT USHORT 165209ff23fSmrg# endif 166209ff23fSmrg# endif 167209ff23fSmrg 168209ff23fSmrg# include "atombios.h" 169209ff23fSmrg# include "ObjectID.h" 170209ff23fSmrg 171209ff23fSmrg 172209ff23fSmrg/* 173209ff23fSmrg * This works around a bug in atombios.h where 174209ff23fSmrg * ATOM_MAX_SUPPORTED_DEVICE_INFO is specified incorrectly. 175209ff23fSmrg */ 176209ff23fSmrg 177209ff23fSmrg#define ATOM_MAX_SUPPORTED_DEVICE_INFO_HD (ATOM_DEVICE_RESERVEDF_INDEX+1) 178209ff23fSmrgtypedef struct _ATOM_SUPPORTED_DEVICES_INFO_HD 179209ff23fSmrg{ 180209ff23fSmrg ATOM_COMMON_TABLE_HEADER sHeader; 181209ff23fSmrg USHORT usDeviceSupport; 182209ff23fSmrg ATOM_CONNECTOR_INFO_I2C asConnInfo[ATOM_MAX_SUPPORTED_DEVICE_INFO_HD]; 183209ff23fSmrg ATOM_CONNECTOR_INC_SRC_BITMAP asIntSrcInfo[ATOM_MAX_SUPPORTED_DEVICE_INFO_HD]; 184209ff23fSmrg} ATOM_SUPPORTED_DEVICES_INFO_HD; 185209ff23fSmrg 186209ff23fSmrgtypedef struct _atomDataTables 187209ff23fSmrg{ 188209ff23fSmrg unsigned char *UtilityPipeLine; 189209ff23fSmrg ATOM_MULTIMEDIA_CAPABILITY_INFO *MultimediaCapabilityInfo; 190209ff23fSmrg ATOM_MULTIMEDIA_CONFIG_INFO *MultimediaConfigInfo; 191209ff23fSmrg ATOM_STANDARD_VESA_TIMING *StandardVESA_Timing; 192209ff23fSmrg union { 193209ff23fSmrg void *base; 194209ff23fSmrg ATOM_FIRMWARE_INFO *FirmwareInfo; 195209ff23fSmrg ATOM_FIRMWARE_INFO_V1_2 *FirmwareInfo_V_1_2; 196209ff23fSmrg ATOM_FIRMWARE_INFO_V1_3 *FirmwareInfo_V_1_3; 197209ff23fSmrg ATOM_FIRMWARE_INFO_V1_4 *FirmwareInfo_V_1_4; 1980974d292Smrg ATOM_FIRMWARE_INFO_V2_1 *FirmwareInfo_V_2_1; 199209ff23fSmrg } FirmwareInfo; 200209ff23fSmrg ATOM_DAC_INFO *DAC_Info; 201209ff23fSmrg union { 202209ff23fSmrg void *base; 203209ff23fSmrg ATOM_LVDS_INFO *LVDS_Info; 204209ff23fSmrg ATOM_LVDS_INFO_V12 *LVDS_Info_v12; 205209ff23fSmrg } LVDS_Info; 206209ff23fSmrg ATOM_TMDS_INFO *TMDS_Info; 207b7e1c893Smrg union { 208b7e1c893Smrg void *base; 209b7e1c893Smrg ATOM_ANALOG_TV_INFO *AnalogTV_Info; 210b7e1c893Smrg ATOM_ANALOG_TV_INFO_V1_2 *AnalogTV_Info_v1_2; 211b7e1c893Smrg } AnalogTV_Info; 212209ff23fSmrg union { 213209ff23fSmrg void *base; 214209ff23fSmrg ATOM_SUPPORTED_DEVICES_INFO *SupportedDevicesInfo; 215209ff23fSmrg ATOM_SUPPORTED_DEVICES_INFO_2 *SupportedDevicesInfo_2; 216209ff23fSmrg ATOM_SUPPORTED_DEVICES_INFO_2d1 *SupportedDevicesInfo_2d1; 217209ff23fSmrg ATOM_SUPPORTED_DEVICES_INFO_HD *SupportedDevicesInfo_HD; 218209ff23fSmrg } SupportedDevicesInfo; 219209ff23fSmrg ATOM_GPIO_I2C_INFO *GPIO_I2C_Info; 220209ff23fSmrg ATOM_VRAM_USAGE_BY_FIRMWARE *VRAM_UsageByFirmware; 221209ff23fSmrg ATOM_GPIO_PIN_LUT *GPIO_Pin_LUT; 222209ff23fSmrg ATOM_VESA_TO_INTENAL_MODE_LUT *VESA_ToInternalModeLUT; 223209ff23fSmrg union { 224209ff23fSmrg void *base; 225209ff23fSmrg ATOM_COMPONENT_VIDEO_INFO *ComponentVideoInfo; 226209ff23fSmrg ATOM_COMPONENT_VIDEO_INFO_V21 *ComponentVideoInfo_v21; 227209ff23fSmrg } ComponentVideoInfo; 228209ff23fSmrg/**/unsigned char *PowerPlayInfo; 229209ff23fSmrg COMPASSIONATE_DATA *CompassionateData; 230209ff23fSmrg ATOM_DISPLAY_DEVICE_PRIORITY_INFO *SaveRestoreInfo; 231209ff23fSmrg/**/unsigned char *PPLL_SS_Info; 232209ff23fSmrg ATOM_OEM_INFO *OemInfo; 233209ff23fSmrg ATOM_XTMDS_INFO *XTMDS_Info; 234209ff23fSmrg ATOM_ASIC_MVDD_INFO *MclkSS_Info; 235209ff23fSmrg ATOM_OBJECT_HEADER *Object_Header; 236209ff23fSmrg INDIRECT_IO_ACCESS *IndirectIOAccess; 237209ff23fSmrg ATOM_MC_INIT_PARAM_TABLE *MC_InitParameter; 238209ff23fSmrg/**/unsigned char *ASIC_VDDC_Info; 239209ff23fSmrg ATOM_ASIC_INTERNAL_SS_INFO *ASIC_InternalSS_Info; 240209ff23fSmrg/**/unsigned char *TV_VideoMode; 241209ff23fSmrg union { 242209ff23fSmrg void *base; 243209ff23fSmrg ATOM_VRAM_INFO_V2 *VRAM_Info_v2; 244209ff23fSmrg ATOM_VRAM_INFO_V3 *VRAM_Info_v3; 245209ff23fSmrg } VRAM_Info; 246209ff23fSmrg ATOM_MEMORY_TRAINING_INFO *MemoryTrainingInfo; 247209ff23fSmrg union { 248209ff23fSmrg void *base; 249209ff23fSmrg ATOM_INTEGRATED_SYSTEM_INFO *IntegratedSystemInfo; 250209ff23fSmrg ATOM_INTEGRATED_SYSTEM_INFO_V2 *IntegratedSystemInfo_v2; 251209ff23fSmrg } IntegratedSystemInfo; 252209ff23fSmrg ATOM_ASIC_PROFILING_INFO *ASIC_ProfilingInfo; 253209ff23fSmrg ATOM_VOLTAGE_OBJECT_INFO *VoltageObjectInfo; 254209ff23fSmrg ATOM_POWER_SOURCE_INFO *PowerSourceInfo; 255209ff23fSmrg} atomDataTables, *atomDataTablesPtr; 256209ff23fSmrg 257209ff23fSmrgtypedef struct _atomBiosHandle { 25868105dcbSveego ScrnInfoPtr pScrn; 259209ff23fSmrg unsigned char *BIOSBase; 260209ff23fSmrg atomDataTablesPtr atomDataPtr; 261209ff23fSmrg unsigned int cmd_offset; 262209ff23fSmrg pointer *scratchBase; 263209ff23fSmrg uint32_t fbBase; 264209ff23fSmrg#if XSERVER_LIBPCIACCESS 265209ff23fSmrg struct pci_device *device; 266209ff23fSmrg#else 267209ff23fSmrg PCITAG PciTag; 268209ff23fSmrg#endif 269209ff23fSmrg unsigned int BIOSImageSize; 270209ff23fSmrg} atomBiosHandleRec; 271209ff23fSmrg 272209ff23fSmrg# endif 273209ff23fSmrg 274209ff23fSmrgextern Bool 275ad43ddacSmrgRADEONATOMGetTVTimings(ScrnInfoPtr pScrn, int index, DisplayModePtr mode); 276ad43ddacSmrg 277ad43ddacSmrgextern void 278ad43ddacSmrgRADEONATOMGetIGPInfo(ScrnInfoPtr pScrn); 279ad43ddacSmrg 280ad43ddacSmrgextern Bool 281ad43ddacSmrgRADEONGetATOMClockInfo(ScrnInfoPtr pScrn); 282209ff23fSmrg 283b7e1c893Smrgextern uint32_t 284b7e1c893Smrgradeon_get_device_index(uint32_t device_support); 285b7e1c893Smrgextern radeon_encoder_ptr 286b7e1c893Smrgradeon_get_encoder(xf86OutputPtr output); 287b7e1c893Smrgextern Bool 288b7e1c893Smrgradeon_add_encoder(ScrnInfoPtr pScrn, uint32_t encoder_id, uint32_t device_support); 289b7e1c893Smrgextern uint32_t 290b7e1c893Smrgradeon_get_encoder_id_from_supported_device(ScrnInfoPtr pScrn, uint32_t supported_device, int dac); 291b7e1c893Smrg 2920974d292Smrgvoid atombios_set_output_crtc_source(xf86OutputPtr output); 293209ff23fSmrg#endif /* RHD_ATOMBIOS_H_ */ 294