diff options
Diffstat (limited to 'src/radeon_atombios.h')
-rw-r--r-- | src/radeon_atombios.h | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/src/radeon_atombios.h b/src/radeon_atombios.h new file mode 100644 index 0000000..33925a5 --- /dev/null +++ b/src/radeon_atombios.h @@ -0,0 +1,235 @@ +/* + * Copyright 2007 Egbert Eich <eich@novell.com> + * Copyright 2007 Luc Verhaegen <lverhaegen@novell.com> + * Copyright 2007 Matthias Hopf <mhopf@novell.com> + * Copyright 2007 Advanced Micro Devices, Inc. + * + * 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 + * 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 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 NONINFRINGEMENT. IN NO EVENT SHALL + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) 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. + */ + + +#ifndef RHD_ATOMBIOS_H_ +# define RHD_ATOMBIOS_H_ + +//#include "radeon.h" + +# ifdef ATOM_BIOS + +typedef enum _AtomBiosRequestID { + ATOMBIOS_INIT, + ATOMBIOS_TEARDOWN, +# ifdef ATOM_BIOS_PARSER + ATOMBIOS_EXEC, +#endif + ATOMBIOS_ALLOCATE_FB_SCRATCH, + ATOMBIOS_GET_CONNECTORS, + ATOMBIOS_GET_PANEL_MODE, + ATOMBIOS_GET_PANEL_EDID, + GET_DEFAULT_ENGINE_CLOCK, + GET_DEFAULT_MEMORY_CLOCK, + GET_MAX_PIXEL_CLOCK_PLL_OUTPUT, + GET_MIN_PIXEL_CLOCK_PLL_OUTPUT, + GET_MAX_PIXEL_CLOCK_PLL_INPUT, + GET_MIN_PIXEL_CLOCK_PLL_INPUT, + GET_MAX_PIXEL_CLK, + GET_REF_CLOCK, + GET_FW_FB_START, + GET_FW_FB_SIZE, + ATOM_TMDS_FREQUENCY, + ATOM_TMDS_PLL_CHARGE_PUMP, + ATOM_TMDS_PLL_DUTY_CYCLE, + ATOM_TMDS_PLL_VCO_GAIN, + ATOM_TMDS_PLL_VOLTAGE_SWING, + ATOM_LVDS_SUPPORTED_REFRESH_RATE, + ATOM_LVDS_OFF_DELAY, + ATOM_LVDS_SEQ_DIG_ONTO_DE, + ATOM_LVDS_SEQ_DE_TO_BL, + ATOM_LVDS_DITHER, + ATOM_LVDS_DUALLINK, + ATOM_LVDS_24BIT, + ATOM_LVDS_GREYLVL, + ATOM_LVDS_FPDI, + ATOM_GPIO_QUERIES, + ATOM_GPIO_I2C_CLK_MASK, + ATOM_DAC1_BG_ADJ, + ATOM_DAC1_DAC_ADJ, + ATOM_DAC1_FORCE, + ATOM_DAC2_CRTC2_BG_ADJ, + ATOM_DAC2_CRTC2_DAC_ADJ, + ATOM_DAC2_CRTC2_FORCE, + ATOM_DAC2_CRTC2_MUX_REG_IND, + ATOM_DAC2_CRTC2_MUX_REG_INFO, + FUNC_END +} AtomBiosRequestID; + +typedef enum _AtomBiosResult { + ATOM_SUCCESS, + ATOM_FAILED, + ATOM_NOT_IMPLEMENTED +} AtomBiosResult; + +typedef struct AtomExec { + int index; + pointer pspace; + pointer *dataSpace; +} AtomExecRec, *AtomExecPtr; + +typedef struct AtomFb { + unsigned int start; + unsigned int size; +} AtomFbRec, *AtomFbPtr; + +typedef union AtomBiosArg +{ + CARD32 val; + struct rhdConnectorInfo *connectorInfo; + unsigned char* EDIDBlock; + atomBiosHandlePtr atomhandle; + DisplayModePtr mode; + AtomExecRec exec; + AtomFbRec fb; +} AtomBiosArgRec, *AtomBiosArgPtr; + +extern AtomBiosResult +RHDAtomBiosFunc(int scrnIndex, atomBiosHandlePtr handle, + AtomBiosRequestID id, AtomBiosArgPtr data); + +# include "xf86int10.h" +# ifdef ATOM_BIOS_PARSER +# define INT8 INT8 +# define INT16 INT16 +# define INT32 INT32 +# include "CD_Common_Types.h" +# else +# ifndef ULONG +typedef unsigned int ULONG; +# define ULONG ULONG +# endif +# ifndef UCHAR +typedef unsigned char UCHAR; +# define UCHAR UCHAR +# endif +# ifndef USHORT +typedef unsigned short USHORT; +# define USHORT USHORT +# endif +# endif + +# include "atombios.h" +# include "ObjectID.h" + + +/* + * This works around a bug in atombios.h where + * ATOM_MAX_SUPPORTED_DEVICE_INFO is specified incorrectly. + */ + +#define ATOM_MAX_SUPPORTED_DEVICE_INFO_HD (ATOM_DEVICE_RESERVEDF_INDEX+1) +typedef struct _ATOM_SUPPORTED_DEVICES_INFO_HD +{ + ATOM_COMMON_TABLE_HEADER sHeader; + USHORT usDeviceSupport; + ATOM_CONNECTOR_INFO_I2C asConnInfo[ATOM_MAX_SUPPORTED_DEVICE_INFO_HD]; + ATOM_CONNECTOR_INC_SRC_BITMAP asIntSrcInfo[ATOM_MAX_SUPPORTED_DEVICE_INFO_HD]; +} ATOM_SUPPORTED_DEVICES_INFO_HD; + +typedef struct _atomDataTables +{ + unsigned char *UtilityPipeLine; + ATOM_MULTIMEDIA_CAPABILITY_INFO *MultimediaCapabilityInfo; + ATOM_MULTIMEDIA_CONFIG_INFO *MultimediaConfigInfo; + ATOM_STANDARD_VESA_TIMING *StandardVESA_Timing; + union { + void *base; + ATOM_FIRMWARE_INFO *FirmwareInfo; + ATOM_FIRMWARE_INFO_V1_2 *FirmwareInfo_V_1_2; + ATOM_FIRMWARE_INFO_V1_3 *FirmwareInfo_V_1_3; + ATOM_FIRMWARE_INFO_V1_4 *FirmwareInfo_V_1_4; + } FirmwareInfo; + ATOM_DAC_INFO *DAC_Info; + union { + void *base; + ATOM_LVDS_INFO *LVDS_Info; + ATOM_LVDS_INFO_V12 *LVDS_Info_v12; + } LVDS_Info; + ATOM_TMDS_INFO *TMDS_Info; + ATOM_ANALOG_TV_INFO *AnalogTV_Info; + union { + void *base; + ATOM_SUPPORTED_DEVICES_INFO *SupportedDevicesInfo; + ATOM_SUPPORTED_DEVICES_INFO_2 *SupportedDevicesInfo_2; + ATOM_SUPPORTED_DEVICES_INFO_2d1 *SupportedDevicesInfo_2d1; + ATOM_SUPPORTED_DEVICES_INFO_HD *SupportedDevicesInfo_HD; + } SupportedDevicesInfo; + ATOM_GPIO_I2C_INFO *GPIO_I2C_Info; + ATOM_VRAM_USAGE_BY_FIRMWARE *VRAM_UsageByFirmware; + ATOM_GPIO_PIN_LUT *GPIO_Pin_LUT; + ATOM_VESA_TO_INTENAL_MODE_LUT *VESA_ToInternalModeLUT; + union { + void *base; + ATOM_COMPONENT_VIDEO_INFO *ComponentVideoInfo; + ATOM_COMPONENT_VIDEO_INFO_V21 *ComponentVideoInfo_v21; + } ComponentVideoInfo; +/**/unsigned char *PowerPlayInfo; + COMPASSIONATE_DATA *CompassionateData; + ATOM_DISPLAY_DEVICE_PRIORITY_INFO *SaveRestoreInfo; +/**/unsigned char *PPLL_SS_Info; + ATOM_OEM_INFO *OemInfo; + ATOM_XTMDS_INFO *XTMDS_Info; + ATOM_ASIC_MVDD_INFO *MclkSS_Info; + ATOM_OBJECT_HEADER *Object_Header; + INDIRECT_IO_ACCESS *IndirectIOAccess; + ATOM_MC_INIT_PARAM_TABLE *MC_InitParameter; +/**/unsigned char *ASIC_VDDC_Info; + ATOM_ASIC_INTERNAL_SS_INFO *ASIC_InternalSS_Info; +/**/unsigned char *TV_VideoMode; + union { + void *base; + ATOM_VRAM_INFO_V2 *VRAM_Info_v2; + ATOM_VRAM_INFO_V3 *VRAM_Info_v3; + } VRAM_Info; + ATOM_MEMORY_TRAINING_INFO *MemoryTrainingInfo; + union { + void *base; + ATOM_INTEGRATED_SYSTEM_INFO *IntegratedSystemInfo; + ATOM_INTEGRATED_SYSTEM_INFO_V2 *IntegratedSystemInfo_v2; + } IntegratedSystemInfo; + ATOM_ASIC_PROFILING_INFO *ASIC_ProfilingInfo; + ATOM_VOLTAGE_OBJECT_INFO *VoltageObjectInfo; + ATOM_POWER_SOURCE_INFO *PowerSourceInfo; +} atomDataTables, *atomDataTablesPtr; + +typedef struct _atomBiosHandle { + int scrnIndex; + unsigned char *BIOSBase; + atomDataTablesPtr atomDataPtr; + unsigned int cmd_offset; + pointer *scratchBase; + CARD32 fbBase; +#if XSERVER_LIBPCIACCESS + struct pci_device *device; +#else + PCITAG PciTag; +#endif + unsigned int BIOSImageSize; +} atomBiosHandleRec; + +# endif + +#endif /* RHD_ATOMBIOS_H_ */ |