1 /* 2 * Copyright 2007 Egbert Eich <eich (at) novell.com> 3 * Copyright 2007 Luc Verhaegen <lverhaegen (at) novell.com> 4 * Copyright 2007 Matthias Hopf <mhopf (at) novell.com> 5 * Copyright 2007 Advanced Micro Devices, Inc. 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a 8 * copy of this software and associated documentation files (the "Software"), 9 * to deal in the Software without restriction, including without limitation 10 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 11 * and/or sell copies of the Software, and to permit persons to whom the 12 * Software is furnished to do so, subject to the following conditions: 13 * 14 * The above copyright notice and this permission notice shall be included in 15 * all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 20 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 * OTHER DEALINGS IN THE SOFTWARE. 24 */ 25 26 27 #ifndef RHD_ATOMBIOS_H_ 28 # define RHD_ATOMBIOS_H_ 29 30 //#include "radeon.h" 31 32 # ifdef ATOM_BIOS 33 34 typedef enum _AtomBiosRequestID { 35 ATOMBIOS_INIT, 36 ATOMBIOS_TEARDOWN, 37 # ifdef ATOM_BIOS_PARSER 38 ATOMBIOS_EXEC, 39 #endif 40 ATOMBIOS_ALLOCATE_FB_SCRATCH, 41 ATOMBIOS_GET_CONNECTORS, 42 ATOMBIOS_GET_PANEL_MODE, 43 ATOMBIOS_GET_PANEL_EDID, 44 GET_DEFAULT_ENGINE_CLOCK, 45 GET_DEFAULT_MEMORY_CLOCK, 46 GET_MAX_PIXEL_CLOCK_PLL_OUTPUT, 47 GET_MIN_PIXEL_CLOCK_PLL_OUTPUT, 48 GET_MAX_PIXEL_CLOCK_PLL_INPUT, 49 GET_MIN_PIXEL_CLOCK_PLL_INPUT, 50 GET_MAX_PIXEL_CLK, 51 GET_REF_CLOCK, 52 GET_FW_FB_START, 53 GET_FW_FB_SIZE, 54 ATOM_TMDS_FREQUENCY, 55 ATOM_TMDS_PLL_CHARGE_PUMP, 56 ATOM_TMDS_PLL_DUTY_CYCLE, 57 ATOM_TMDS_PLL_VCO_GAIN, 58 ATOM_TMDS_PLL_VOLTAGE_SWING, 59 ATOM_LVDS_SUPPORTED_REFRESH_RATE, 60 ATOM_LVDS_OFF_DELAY, 61 ATOM_LVDS_SEQ_DIG_ONTO_DE, 62 ATOM_LVDS_SEQ_DE_TO_BL, 63 ATOM_LVDS_DITHER, 64 ATOM_LVDS_DUALLINK, 65 ATOM_LVDS_24BIT, 66 ATOM_LVDS_GREYLVL, 67 ATOM_LVDS_FPDI, 68 ATOM_GPIO_QUERIES, 69 ATOM_GPIO_I2C_CLK_MASK, 70 ATOM_DAC1_BG_ADJ, 71 ATOM_DAC1_DAC_ADJ, 72 ATOM_DAC1_FORCE, 73 ATOM_DAC2_CRTC2_BG_ADJ, 74 ATOM_DAC2_CRTC2_DAC_ADJ, 75 ATOM_DAC2_CRTC2_FORCE, 76 ATOM_DAC2_CRTC2_MUX_REG_IND, 77 ATOM_DAC2_CRTC2_MUX_REG_INFO, 78 ATOMBIOS_GET_CV_MODES, 79 FUNC_END 80 } AtomBiosRequestID; 81 82 typedef enum _AtomBiosResult { 83 ATOM_SUCCESS, 84 ATOM_FAILED, 85 ATOM_NOT_IMPLEMENTED 86 } AtomBiosResult; 87 88 typedef struct AtomExec { 89 int index; 90 pointer pspace; 91 pointer *dataSpace; 92 } AtomExecRec, *AtomExecPtr; 93 94 typedef struct AtomFb { 95 unsigned int start; 96 unsigned int size; 97 } AtomFbRec, *AtomFbPtr; 98 99 typedef union AtomBiosArg 100 { 101 uint32_t val; 102 struct rhdConnectorInfo *connectorInfo; 103 unsigned char* EDIDBlock; 104 atomBiosHandlePtr atomhandle; 105 DisplayModePtr modes; 106 AtomExecRec exec; 107 AtomFbRec fb; 108 ScrnInfoPtr pScrn; 109 } AtomBiosArgRec, *AtomBiosArgPtr; 110 111 extern AtomBiosResult 112 RHDAtomBiosFunc(ScrnInfoPtr pScrn, atomBiosHandlePtr handle, 113 AtomBiosRequestID id, AtomBiosArgPtr data); 114 115 extern Bool 116 RADEONGetATOMConnectorInfoFromBIOSObject (ScrnInfoPtr pScrn); 117 extern Bool 118 RADEONGetATOMConnectorInfoFromBIOSConnectorTable (ScrnInfoPtr pScrn); 119 120 extern int 121 atombios_clk_gating_setup(ScrnInfoPtr pScrn, Bool enable); 122 123 extern int 124 atombios_static_pwrmgt_setup(ScrnInfoPtr pScrn, Bool enable); 125 126 extern int 127 atombios_set_engine_clock(ScrnInfoPtr pScrn, uint32_t engclock); 128 129 extern int 130 atombios_set_memory_clock(ScrnInfoPtr pScrn, uint32_t memclock); 131 132 extern Bool 133 RADEONGetATOMTVInfo(xf86OutputPtr output); 134 135 extern int 136 atombios_external_tmds_setup(xf86OutputPtr output, int action); 137 138 extern void 139 atombios_get_command_table_version(atomBiosHandlePtr atomBIOS, int index, int *major, int *minor); 140 141 extern xf86MonPtr 142 radeon_atom_get_edid(xf86OutputPtr output); 143 144 Bool 145 rhdAtomASICInit(atomBiosHandlePtr handle); 146 147 # include "xf86int10.h" 148 # ifdef ATOM_BIOS_PARSER 149 # define INT8 INT8 150 # define INT16 INT16 151 # define INT32 INT32 152 # include "CD_Common_Types.h" 153 # else 154 # ifndef ULONG 155 typedef unsigned int ULONG; 156 # define ULONG ULONG 157 # endif 158 # ifndef UCHAR 159 typedef unsigned char UCHAR; 160 # define UCHAR UCHAR 161 # endif 162 # ifndef USHORT 163 typedef unsigned short USHORT; 164 # define USHORT USHORT 165 # endif 166 # endif 167 168 # include "atombios.h" 169 # include "ObjectID.h" 170 171 172 /* 173 * This works around a bug in atombios.h where 174 * ATOM_MAX_SUPPORTED_DEVICE_INFO is specified incorrectly. 175 */ 176 177 #define ATOM_MAX_SUPPORTED_DEVICE_INFO_HD (ATOM_DEVICE_RESERVEDF_INDEX+1) 178 typedef struct _ATOM_SUPPORTED_DEVICES_INFO_HD 179 { 180 ATOM_COMMON_TABLE_HEADER sHeader; 181 USHORT usDeviceSupport; 182 ATOM_CONNECTOR_INFO_I2C asConnInfo[ATOM_MAX_SUPPORTED_DEVICE_INFO_HD]; 183 ATOM_CONNECTOR_INC_SRC_BITMAP asIntSrcInfo[ATOM_MAX_SUPPORTED_DEVICE_INFO_HD]; 184 } ATOM_SUPPORTED_DEVICES_INFO_HD; 185 186 typedef struct _atomDataTables 187 { 188 unsigned char *UtilityPipeLine; 189 ATOM_MULTIMEDIA_CAPABILITY_INFO *MultimediaCapabilityInfo; 190 ATOM_MULTIMEDIA_CONFIG_INFO *MultimediaConfigInfo; 191 ATOM_STANDARD_VESA_TIMING *StandardVESA_Timing; 192 union { 193 void *base; 194 ATOM_FIRMWARE_INFO *FirmwareInfo; 195 ATOM_FIRMWARE_INFO_V1_2 *FirmwareInfo_V_1_2; 196 ATOM_FIRMWARE_INFO_V1_3 *FirmwareInfo_V_1_3; 197 ATOM_FIRMWARE_INFO_V1_4 *FirmwareInfo_V_1_4; 198 ATOM_FIRMWARE_INFO_V2_1 *FirmwareInfo_V_2_1; 199 } FirmwareInfo; 200 ATOM_DAC_INFO *DAC_Info; 201 union { 202 void *base; 203 ATOM_LVDS_INFO *LVDS_Info; 204 ATOM_LVDS_INFO_V12 *LVDS_Info_v12; 205 } LVDS_Info; 206 ATOM_TMDS_INFO *TMDS_Info; 207 union { 208 void *base; 209 ATOM_ANALOG_TV_INFO *AnalogTV_Info; 210 ATOM_ANALOG_TV_INFO_V1_2 *AnalogTV_Info_v1_2; 211 } AnalogTV_Info; 212 union { 213 void *base; 214 ATOM_SUPPORTED_DEVICES_INFO *SupportedDevicesInfo; 215 ATOM_SUPPORTED_DEVICES_INFO_2 *SupportedDevicesInfo_2; 216 ATOM_SUPPORTED_DEVICES_INFO_2d1 *SupportedDevicesInfo_2d1; 217 ATOM_SUPPORTED_DEVICES_INFO_HD *SupportedDevicesInfo_HD; 218 } SupportedDevicesInfo; 219 ATOM_GPIO_I2C_INFO *GPIO_I2C_Info; 220 ATOM_VRAM_USAGE_BY_FIRMWARE *VRAM_UsageByFirmware; 221 ATOM_GPIO_PIN_LUT *GPIO_Pin_LUT; 222 ATOM_VESA_TO_INTENAL_MODE_LUT *VESA_ToInternalModeLUT; 223 union { 224 void *base; 225 ATOM_COMPONENT_VIDEO_INFO *ComponentVideoInfo; 226 ATOM_COMPONENT_VIDEO_INFO_V21 *ComponentVideoInfo_v21; 227 } ComponentVideoInfo; 228 /**/unsigned char *PowerPlayInfo; 229 COMPASSIONATE_DATA *CompassionateData; 230 ATOM_DISPLAY_DEVICE_PRIORITY_INFO *SaveRestoreInfo; 231 /**/unsigned char *PPLL_SS_Info; 232 ATOM_OEM_INFO *OemInfo; 233 ATOM_XTMDS_INFO *XTMDS_Info; 234 ATOM_ASIC_MVDD_INFO *MclkSS_Info; 235 ATOM_OBJECT_HEADER *Object_Header; 236 INDIRECT_IO_ACCESS *IndirectIOAccess; 237 ATOM_MC_INIT_PARAM_TABLE *MC_InitParameter; 238 /**/unsigned char *ASIC_VDDC_Info; 239 ATOM_ASIC_INTERNAL_SS_INFO *ASIC_InternalSS_Info; 240 /**/unsigned char *TV_VideoMode; 241 union { 242 void *base; 243 ATOM_VRAM_INFO_V2 *VRAM_Info_v2; 244 ATOM_VRAM_INFO_V3 *VRAM_Info_v3; 245 } VRAM_Info; 246 ATOM_MEMORY_TRAINING_INFO *MemoryTrainingInfo; 247 union { 248 void *base; 249 ATOM_INTEGRATED_SYSTEM_INFO *IntegratedSystemInfo; 250 ATOM_INTEGRATED_SYSTEM_INFO_V2 *IntegratedSystemInfo_v2; 251 } IntegratedSystemInfo; 252 ATOM_ASIC_PROFILING_INFO *ASIC_ProfilingInfo; 253 ATOM_VOLTAGE_OBJECT_INFO *VoltageObjectInfo; 254 ATOM_POWER_SOURCE_INFO *PowerSourceInfo; 255 } atomDataTables, *atomDataTablesPtr; 256 257 typedef struct _atomBiosHandle { 258 ScrnInfoPtr pScrn; 259 unsigned char *BIOSBase; 260 atomDataTablesPtr atomDataPtr; 261 unsigned int cmd_offset; 262 pointer *scratchBase; 263 uint32_t fbBase; 264 #if XSERVER_LIBPCIACCESS 265 struct pci_device *device; 266 #else 267 PCITAG PciTag; 268 #endif 269 unsigned int BIOSImageSize; 270 } atomBiosHandleRec; 271 272 # endif 273 274 extern Bool 275 RADEONATOMGetTVTimings(ScrnInfoPtr pScrn, int index, DisplayModePtr mode); 276 277 extern void 278 RADEONATOMGetIGPInfo(ScrnInfoPtr pScrn); 279 280 extern Bool 281 RADEONGetATOMClockInfo(ScrnInfoPtr pScrn); 282 283 extern uint32_t 284 radeon_get_device_index(uint32_t device_support); 285 extern radeon_encoder_ptr 286 radeon_get_encoder(xf86OutputPtr output); 287 extern Bool 288 radeon_add_encoder(ScrnInfoPtr pScrn, uint32_t encoder_id, uint32_t device_support); 289 extern uint32_t 290 radeon_get_encoder_id_from_supported_device(ScrnInfoPtr pScrn, uint32_t supported_device, int dac); 291 292 void atombios_set_output_crtc_source(xf86OutputPtr output); 293 #endif /* RHD_ATOMBIOS_H_ */ 294