Home | History | Annotate | Line # | Download | only in src
      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