radeon_probe.h revision 40732134
1209ff23fSmrg/* 2209ff23fSmrg * Copyright 2000 ATI Technologies Inc., Markham, Ontario, and 3209ff23fSmrg * VA Linux Systems Inc., Fremont, California. 4209ff23fSmrg * 5209ff23fSmrg * All Rights Reserved. 6209ff23fSmrg * 7209ff23fSmrg * Permission is hereby granted, free of charge, to any person obtaining 8209ff23fSmrg * a copy of this software and associated documentation files (the 9209ff23fSmrg * "Software"), to deal in the Software without restriction, including 10209ff23fSmrg * without limitation on the rights to use, copy, modify, merge, 11209ff23fSmrg * publish, distribute, sublicense, and/or sell copies of the Software, 12209ff23fSmrg * and to permit persons to whom the Software is furnished to do so, 13209ff23fSmrg * subject to the following conditions: 14209ff23fSmrg * 15209ff23fSmrg * The above copyright notice and this permission notice (including the 16209ff23fSmrg * next paragraph) shall be included in all copies or substantial 17209ff23fSmrg * portions of the Software. 18209ff23fSmrg * 19209ff23fSmrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20209ff23fSmrg * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 21209ff23fSmrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22209ff23fSmrg * NON-INFRINGEMENT. IN NO EVENT SHALL ATI, VA LINUX SYSTEMS AND/OR 23209ff23fSmrg * THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 24209ff23fSmrg * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25209ff23fSmrg * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 26209ff23fSmrg * DEALINGS IN THE SOFTWARE. 27209ff23fSmrg */ 28209ff23fSmrg 29209ff23fSmrg/* 30209ff23fSmrg * Authors: 31209ff23fSmrg * Kevin E. Martin <martin@xfree86.org> 32209ff23fSmrg * 33209ff23fSmrg * Modified by Marc Aurele La France <tsi@xfree86.org> for ATI driver merge. 34209ff23fSmrg */ 35209ff23fSmrg 36209ff23fSmrg#ifndef _RADEON_PROBE_H_ 37209ff23fSmrg#define _RADEON_PROBE_H_ 1 38209ff23fSmrg 39209ff23fSmrg#include <stdint.h> 40209ff23fSmrg#include "xf86str.h" 41209ff23fSmrg#include "xf86DDC.h" 42209ff23fSmrg#include "randrstr.h" 43209ff23fSmrg 44209ff23fSmrg#include "xf86Crtc.h" 45209ff23fSmrg 46209ff23fSmrg#ifdef USE_EXA 47209ff23fSmrg#include "exa.h" 48209ff23fSmrg#endif 49209ff23fSmrg#ifdef USE_XAA 50209ff23fSmrg#include "xaa.h" 51209ff23fSmrg#endif 52209ff23fSmrg 53209ff23fSmrgextern DriverRec RADEON; 54209ff23fSmrg 55ad43ddacSmrg#define RADEON_MAX_CRTC 6 56b7e1c893Smrg#define RADEON_MAX_BIOS_CONNECTOR 16 57b7e1c893Smrg 5840732134Srjstypedef enum { 5940732134Srjs CHIP_FAMILY_UNKNOW, 6040732134Srjs CHIP_FAMILY_LEGACY, 6140732134Srjs CHIP_FAMILY_RADEON, 6240732134Srjs CHIP_FAMILY_RV100, 6340732134Srjs CHIP_FAMILY_RS100, /* U1 (IGP320M) or A3 (IGP320)*/ 6440732134Srjs CHIP_FAMILY_RV200, 6540732134Srjs CHIP_FAMILY_RS200, /* U2 (IGP330M/340M/350M) or A4 (IGP330/340/345/350), RS250 (IGP 7000) */ 6640732134Srjs CHIP_FAMILY_R200, 6740732134Srjs CHIP_FAMILY_RV250, 6840732134Srjs CHIP_FAMILY_RS300, /* RS300/RS350 */ 6940732134Srjs CHIP_FAMILY_RV280, 7040732134Srjs CHIP_FAMILY_R300, 7140732134Srjs CHIP_FAMILY_R350, 7240732134Srjs CHIP_FAMILY_RV350, 7340732134Srjs CHIP_FAMILY_RV380, /* RV370/RV380/M22/M24 */ 7440732134Srjs CHIP_FAMILY_R420, /* R420/R423/M18 */ 7540732134Srjs CHIP_FAMILY_RV410, /* RV410, M26 */ 7640732134Srjs CHIP_FAMILY_RS400, /* xpress 200, 200m (RS400) Intel */ 7740732134Srjs CHIP_FAMILY_RS480, /* xpress 200, 200m (RS410/480/482/485) AMD */ 7840732134Srjs CHIP_FAMILY_RV515, /* rv515 */ 7940732134Srjs CHIP_FAMILY_R520, /* r520 */ 8040732134Srjs CHIP_FAMILY_RV530, /* rv530 */ 8140732134Srjs CHIP_FAMILY_R580, /* r580 */ 8240732134Srjs CHIP_FAMILY_RV560, /* rv560 */ 8340732134Srjs CHIP_FAMILY_RV570, /* rv570 */ 8440732134Srjs CHIP_FAMILY_RS600, 8540732134Srjs CHIP_FAMILY_RS690, 8640732134Srjs CHIP_FAMILY_RS740, 8740732134Srjs CHIP_FAMILY_R600, /* r600 */ 8840732134Srjs CHIP_FAMILY_RV610, 8940732134Srjs CHIP_FAMILY_RV630, 9040732134Srjs CHIP_FAMILY_RV670, 9140732134Srjs CHIP_FAMILY_RV620, 9240732134Srjs CHIP_FAMILY_RV635, 9340732134Srjs CHIP_FAMILY_RS780, 9440732134Srjs CHIP_FAMILY_RS880, 9540732134Srjs CHIP_FAMILY_RV770, /* r700 */ 9640732134Srjs CHIP_FAMILY_RV730, 9740732134Srjs CHIP_FAMILY_RV710, 9840732134Srjs CHIP_FAMILY_RV740, 9940732134Srjs CHIP_FAMILY_CEDAR, /* evergreen */ 10040732134Srjs CHIP_FAMILY_REDWOOD, 10140732134Srjs CHIP_FAMILY_JUNIPER, 10240732134Srjs CHIP_FAMILY_CYPRESS, 10340732134Srjs CHIP_FAMILY_HEMLOCK, 10440732134Srjs CHIP_FAMILY_PALM, 10540732134Srjs CHIP_FAMILY_SUMO, 10640732134Srjs CHIP_FAMILY_SUMO2, 10740732134Srjs CHIP_FAMILY_BARTS, 10840732134Srjs CHIP_FAMILY_TURKS, 10940732134Srjs CHIP_FAMILY_CAICOS, 11040732134Srjs CHIP_FAMILY_CAYMAN, 11140732134Srjs CHIP_FAMILY_ARUBA, 11240732134Srjs CHIP_FAMILY_LAST 11340732134Srjs} RADEONChipFamily; 11440732134Srjs 11540732134Srjstypedef struct { 11640732134Srjs uint32_t pci_device_id; 11740732134Srjs RADEONChipFamily chip_family; 11840732134Srjs int mobility; 11940732134Srjs int igp; 12040732134Srjs int nocrtc2; 12140732134Srjs int nointtvout; 12240732134Srjs int singledac; 12340732134Srjs} RADEONCardInfo; 12440732134Srjs 125209ff23fSmrgtypedef enum 126209ff23fSmrg{ 127209ff23fSmrg MT_UNKNOWN = -1, 128209ff23fSmrg MT_NONE = 0, 129209ff23fSmrg MT_CRT = 1, 130209ff23fSmrg MT_LCD = 2, 131209ff23fSmrg MT_DFP = 3, 132209ff23fSmrg MT_CTV = 4, 133209ff23fSmrg MT_STV = 5, 134209ff23fSmrg MT_CV = 6, 135209ff23fSmrg MT_HDMI = 7, // this should really just be MT_DFP 136209ff23fSmrg MT_DP = 8 137209ff23fSmrg} RADEONMonitorType; 138209ff23fSmrg 139209ff23fSmrgtypedef enum 140209ff23fSmrg{ 141209ff23fSmrg CONNECTOR_NONE, 142209ff23fSmrg CONNECTOR_VGA, 143209ff23fSmrg CONNECTOR_DVI_I, 144209ff23fSmrg CONNECTOR_DVI_D, 145209ff23fSmrg CONNECTOR_DVI_A, 146209ff23fSmrg CONNECTOR_STV, 147209ff23fSmrg CONNECTOR_CTV, 148209ff23fSmrg CONNECTOR_LVDS, 149209ff23fSmrg CONNECTOR_DIGITAL, 150209ff23fSmrg CONNECTOR_SCART, 151209ff23fSmrg CONNECTOR_HDMI_TYPE_A, 152209ff23fSmrg CONNECTOR_HDMI_TYPE_B, 153209ff23fSmrg CONNECTOR_0XC, 154209ff23fSmrg CONNECTOR_0XD, 155209ff23fSmrg CONNECTOR_DIN, 156209ff23fSmrg CONNECTOR_DISPLAY_PORT, 157ad43ddacSmrg CONNECTOR_EDP, 158209ff23fSmrg CONNECTOR_UNSUPPORTED 159209ff23fSmrg} RADEONConnectorType; 160209ff23fSmrg 161209ff23fSmrgtypedef enum 162209ff23fSmrg{ 163209ff23fSmrg DVI_AUTO, 164209ff23fSmrg DVI_DIGITAL, 165209ff23fSmrg DVI_ANALOG 166209ff23fSmrg} RADEONDviType; 167209ff23fSmrg 168209ff23fSmrgtypedef enum 169209ff23fSmrg{ 170209ff23fSmrg RMX_OFF, 171209ff23fSmrg RMX_FULL, 172b7e1c893Smrg RMX_CENTER, 173b7e1c893Smrg RMX_ASPECT 174209ff23fSmrg} RADEONRMXType; 175209ff23fSmrg 176209ff23fSmrgtypedef struct { 177209ff23fSmrg uint32_t freq; 178209ff23fSmrg uint32_t value; 179209ff23fSmrg}RADEONTMDSPll; 180209ff23fSmrg 181209ff23fSmrg/* standards */ 182209ff23fSmrgtypedef enum 183209ff23fSmrg{ 184209ff23fSmrg TV_STD_NTSC = 1, 185209ff23fSmrg TV_STD_PAL = 2, 186209ff23fSmrg TV_STD_PAL_M = 4, 187209ff23fSmrg TV_STD_PAL_60 = 8, 188209ff23fSmrg TV_STD_NTSC_J = 16, 189209ff23fSmrg TV_STD_SCART_PAL = 32, 190209ff23fSmrg TV_STD_SECAM = 64, 191209ff23fSmrg TV_STD_PAL_CN = 128, 192209ff23fSmrg} TVStd; 193209ff23fSmrg 194209ff23fSmrgtypedef struct 195209ff23fSmrg{ 196209ff23fSmrg Bool valid; 197209ff23fSmrg uint32_t mask_clk_reg; 198209ff23fSmrg uint32_t mask_data_reg; 199b7e1c893Smrg uint32_t a_clk_reg; 200b7e1c893Smrg uint32_t a_data_reg; 201209ff23fSmrg uint32_t put_clk_reg; 202209ff23fSmrg uint32_t put_data_reg; 203209ff23fSmrg uint32_t get_clk_reg; 204209ff23fSmrg uint32_t get_data_reg; 205209ff23fSmrg uint32_t mask_clk_mask; 206209ff23fSmrg uint32_t mask_data_mask; 207209ff23fSmrg uint32_t put_clk_mask; 208209ff23fSmrg uint32_t put_data_mask; 209209ff23fSmrg uint32_t get_clk_mask; 210209ff23fSmrg uint32_t get_data_mask; 211b7e1c893Smrg uint32_t a_clk_mask; 212b7e1c893Smrg uint32_t a_data_mask; 213b7e1c893Smrg int hw_line; 214b7e1c893Smrg Bool hw_capable; 215209ff23fSmrg} RADEONI2CBusRec, *RADEONI2CBusPtr; 216209ff23fSmrg 2172f39173dSmrgenum radeon_pll_algo { 2182f39173dSmrg RADEON_PLL_OLD, 2192f39173dSmrg RADEON_PLL_NEW 2202f39173dSmrg}; 2212f39173dSmrg 222209ff23fSmrgtypedef struct _RADEONCrtcPrivateRec { 223b7e1c893Smrg void *crtc_rotate_mem; 224b7e1c893Smrg void *cursor_mem; 225209ff23fSmrg int crtc_id; 226209ff23fSmrg int binding; 227209ff23fSmrg uint32_t cursor_offset; 228209ff23fSmrg /* Lookup table values to be set when the CRTC is enabled */ 229b7e1c893Smrg uint16_t lut_r[256], lut_g[256], lut_b[256]; 230209ff23fSmrg 231209ff23fSmrg uint32_t crtc_offset; 232209ff23fSmrg int can_tile; 233209ff23fSmrg Bool enabled; 234b7e1c893Smrg Bool initialized; 235ad43ddacSmrg Bool scaler_enabled; 236ad43ddacSmrg float vsc; 237ad43ddacSmrg float hsc; 238ad43ddacSmrg int pll_id; 2392f39173dSmrg enum radeon_pll_algo pll_algo; 240209ff23fSmrg} RADEONCrtcPrivateRec, *RADEONCrtcPrivatePtr; 241209ff23fSmrg 242b7e1c893Smrgtypedef struct _radeon_encoder { 243b7e1c893Smrg uint16_t encoder_id; 244209ff23fSmrg int devices; 245209ff23fSmrg void *dev_priv; 246b7e1c893Smrg} radeon_encoder_rec, *radeon_encoder_ptr; 247b7e1c893Smrg 248b7e1c893Smrgtypedef struct _radeon_tvout { 249b7e1c893Smrg /* TV out */ 250b7e1c893Smrg TVStd default_tvStd; 251b7e1c893Smrg TVStd tvStd; 252b7e1c893Smrg int hPos; 253b7e1c893Smrg int vPos; 254b7e1c893Smrg int hSize; 255b7e1c893Smrg float TVRefClk; 256b7e1c893Smrg int SupportedTVStds; 257b7e1c893Smrg Bool tv_on; 258b7e1c893Smrg} radeon_tvout_rec, *radeon_tvout_ptr; 259b7e1c893Smrg 260b7e1c893Smrgtypedef struct _radeon_native_mode { 261209ff23fSmrg /* panel stuff */ 262209ff23fSmrg int PanelXRes; 263209ff23fSmrg int PanelYRes; 264209ff23fSmrg int HOverPlus; 265209ff23fSmrg int HSyncWidth; 266209ff23fSmrg int HBlank; 267209ff23fSmrg int VOverPlus; 268209ff23fSmrg int VSyncWidth; 269209ff23fSmrg int VBlank; 270b7e1c893Smrg int Flags; 271209ff23fSmrg int DotClock; 272b7e1c893Smrg} radeon_native_mode_rec, *radeon_native_mode_ptr; 273b7e1c893Smrg 274b7e1c893Smrgtypedef struct _radeon_tvdac { 275b7e1c893Smrg // tv dac 276b7e1c893Smrg uint32_t ps2_tvdac_adj; 277b7e1c893Smrg uint32_t pal_tvdac_adj; 278b7e1c893Smrg uint32_t ntsc_tvdac_adj; 279b7e1c893Smrg} radeon_tvdac_rec, *radeon_tvdac_ptr; 280b7e1c893Smrg 281b7e1c893Smrgtypedef struct _radeon_tmds { 282b7e1c893Smrg // tmds 283209ff23fSmrg RADEONTMDSPll tmds_pll[4]; 284b7e1c893Smrg} radeon_tmds_rec, *radeon_tmds_ptr; 285b7e1c893Smrg 286b7e1c893Smrgtypedef struct _radeon_lvds { 287b7e1c893Smrg // panel mode 288b7e1c893Smrg radeon_native_mode_rec native_mode; 289b7e1c893Smrg // lvds 290b7e1c893Smrg int PanelPwrDly; 291b7e1c893Smrg int lvds_misc; 292b7e1c893Smrg int lvds_ss_id; 293b7e1c893Smrg} radeon_lvds_rec, *radeon_lvds_ptr; 294b7e1c893Smrg 295b7e1c893Smrgtypedef struct _radeon_dvo { 296209ff23fSmrg /* dvo */ 297c503f109Smrg I2CBusPtr pI2CBus; 298209ff23fSmrg I2CDevPtr DVOChip; 299209ff23fSmrg RADEONI2CBusRec dvo_i2c; 300209ff23fSmrg int dvo_i2c_slave_addr; 301209ff23fSmrg Bool dvo_duallink; 302b7e1c893Smrg} radeon_dvo_rec, *radeon_dvo_ptr; 303b7e1c893Smrg 304b7e1c893Smrgtypedef struct { 305b7e1c893Smrg RADEONConnectorType ConnectorType; 306b7e1c893Smrg Bool valid; 307b7e1c893Smrg int output_id; 308b7e1c893Smrg int devices; 309b7e1c893Smrg int hpd_mask; 310b7e1c893Smrg RADEONI2CBusRec ddc_i2c; 311209ff23fSmrg int igp_lane_info; 312b7e1c893Smrg Bool shared_ddc; 313b7e1c893Smrg int i2c_line_mux; 314b7e1c893Smrg Bool load_detection; 315b7e1c893Smrg Bool linkb; 316b7e1c893Smrg uint16_t connector_object; 317ad43ddacSmrg uint16_t connector_object_id; 318ad43ddacSmrg uint8_t ucI2cId; 319ad43ddacSmrg uint8_t hpd_id; 320b7e1c893Smrg} RADEONBIOSConnector; 321209ff23fSmrg 322b7e1c893Smrgtypedef struct _RADEONOutputPrivateRec { 323b7e1c893Smrg uint16_t connector_id; 324b7e1c893Smrg uint32_t devices; 325b7e1c893Smrg uint32_t active_device; 326209ff23fSmrg Bool enabled; 327b7e1c893Smrg 328b7e1c893Smrg int load_detection; 329b7e1c893Smrg 330b7e1c893Smrg // DVI/HDMI 331b7e1c893Smrg Bool coherent_mode; 332b7e1c893Smrg Bool linkb; 333b7e1c893Smrg 334b7e1c893Smrg RADEONConnectorType ConnectorType; 335ad43ddacSmrg uint16_t connector_object_id; 336b7e1c893Smrg RADEONDviType DVIType; 337b7e1c893Smrg RADEONMonitorType MonType; 338b7e1c893Smrg 339b7e1c893Smrg // DDC info 340b7e1c893Smrg I2CBusPtr pI2CBus; 341b7e1c893Smrg RADEONI2CBusRec ddc_i2c; 342b7e1c893Smrg Bool shared_ddc; 343ad43ddacSmrg 344ad43ddacSmrg Bool custom_edid; 345ad43ddacSmrg xf86MonPtr custom_mon; 346b7e1c893Smrg // router info 347b7e1c893Smrg // HDP info 348b7e1c893Smrg 349b7e1c893Smrg // panel mode 350b7e1c893Smrg radeon_native_mode_rec native_mode; 351b7e1c893Smrg 352b7e1c893Smrg // RMX 353b7e1c893Smrg RADEONRMXType rmx_type; 354b7e1c893Smrg int Flags; 355b7e1c893Smrg 356b7e1c893Smrg //tvout - move to encoder 357b7e1c893Smrg radeon_tvout_rec tvout; 358b7e1c893Smrg 359b7e1c893Smrg /* dce 3.x dig block */ 360b7e1c893Smrg int igp_lane_info; 361ad43ddacSmrg int dig_encoder; 362b7e1c893Smrg 363b7e1c893Smrg int pixel_clock; 364ad43ddacSmrg 365ad43ddacSmrg /* DP - aux bus*/ 366ad43ddacSmrg I2CBusPtr dp_pI2CBus; 367ad43ddacSmrg uint8_t ucI2cId; 368ad43ddacSmrg char dp_bus_name[20]; 369ad43ddacSmrg uint32_t dp_i2c_addr; 370ad43ddacSmrg Bool dp_i2c_running; 371ad43ddacSmrg /* DP - general config */ 372ad43ddacSmrg uint8_t dpcd[8]; 373ad43ddacSmrg int dp_lane_count; 374ad43ddacSmrg int dp_clock; 375ad43ddacSmrg uint8_t hpd_id; 376ad43ddacSmrg int pll_id; 377209ff23fSmrg} RADEONOutputPrivateRec, *RADEONOutputPrivatePtr; 378209ff23fSmrg 379209ff23fSmrgstruct avivo_pll_state { 380209ff23fSmrg uint32_t ref_div_src; 381209ff23fSmrg uint32_t ref_div; 382209ff23fSmrg uint32_t fb_div; 383209ff23fSmrg uint32_t post_div_src; 384209ff23fSmrg uint32_t post_div; 385209ff23fSmrg uint32_t ext_ppll_cntl; 386209ff23fSmrg uint32_t pll_cntl; 387209ff23fSmrg uint32_t int_ss_cntl; 388209ff23fSmrg}; 389209ff23fSmrg 390209ff23fSmrgstruct avivo_crtc_state { 391209ff23fSmrg uint32_t pll_source; 392209ff23fSmrg uint32_t h_total; 393209ff23fSmrg uint32_t h_blank_start_end; 394209ff23fSmrg uint32_t h_sync_a; 395209ff23fSmrg uint32_t h_sync_a_cntl; 396209ff23fSmrg uint32_t h_sync_b; 397209ff23fSmrg uint32_t h_sync_b_cntl; 398209ff23fSmrg uint32_t v_total; 399209ff23fSmrg uint32_t v_blank_start_end; 400209ff23fSmrg uint32_t v_sync_a; 401209ff23fSmrg uint32_t v_sync_a_cntl; 402209ff23fSmrg uint32_t v_sync_b; 403209ff23fSmrg uint32_t v_sync_b_cntl; 404209ff23fSmrg uint32_t control; 405209ff23fSmrg uint32_t blank_control; 406209ff23fSmrg uint32_t interlace_control; 407209ff23fSmrg uint32_t stereo_control; 408209ff23fSmrg uint32_t cursor_control; 409209ff23fSmrg}; 410209ff23fSmrg 411209ff23fSmrgstruct avivo_grph_state { 412209ff23fSmrg uint32_t enable; 413209ff23fSmrg uint32_t control; 414921a55d8Smrg uint32_t swap_control; 415209ff23fSmrg uint32_t prim_surf_addr; 416209ff23fSmrg uint32_t sec_surf_addr; 417209ff23fSmrg uint32_t pitch; 418921a55d8Smrg uint32_t prim_surf_addr_hi; 419921a55d8Smrg uint32_t sec_surf_addr_hi; 420209ff23fSmrg uint32_t x_offset; 421209ff23fSmrg uint32_t y_offset; 422209ff23fSmrg uint32_t x_start; 423209ff23fSmrg uint32_t y_start; 424209ff23fSmrg uint32_t x_end; 425209ff23fSmrg uint32_t y_end; 426209ff23fSmrg 427b7e1c893Smrg uint32_t desktop_height; 428209ff23fSmrg uint32_t viewport_start; 429209ff23fSmrg uint32_t viewport_size; 430b7e1c893Smrg uint32_t mode_data_format; 431209ff23fSmrg}; 432209ff23fSmrg 433921a55d8Smrgstruct dce4_main_block_state { 434921a55d8Smrg struct avivo_grph_state grph; 435921a55d8Smrg uint32_t scl[6]; 436921a55d8Smrg uint32_t crtc[15]; 437921a55d8Smrg uint32_t fmt[10]; 438921a55d8Smrg uint32_t dig[20]; 439921a55d8Smrg}; 440921a55d8Smrg 441921a55d8Smrgstruct dce4_state 442921a55d8Smrg{ 443921a55d8Smrg 444921a55d8Smrg uint32_t vga1_cntl; 445921a55d8Smrg uint32_t vga2_cntl; 446921a55d8Smrg uint32_t vga3_cntl; 447921a55d8Smrg uint32_t vga4_cntl; 448921a55d8Smrg uint32_t vga5_cntl; 449921a55d8Smrg uint32_t vga6_cntl; 450921a55d8Smrg uint32_t vga_render_control; 451921a55d8Smrg 452921a55d8Smrg struct dce4_main_block_state block[6]; 453921a55d8Smrg 454921a55d8Smrg uint32_t vga_pll[3][3]; 455921a55d8Smrg uint32_t pll[2][15]; 456921a55d8Smrg uint32_t pll_route[6]; 457921a55d8Smrg 458921a55d8Smrg uint32_t dac[2][26]; 459921a55d8Smrg uint32_t uniphy[6][10]; 460921a55d8Smrg 461921a55d8Smrg uint32_t dig[20]; 462921a55d8Smrg}; 463921a55d8Smrg 464209ff23fSmrgstruct avivo_state 465209ff23fSmrg{ 466209ff23fSmrg uint32_t hdp_fb_location; 467209ff23fSmrg uint32_t mc_memory_map; 468209ff23fSmrg uint32_t vga_memory_base; 469209ff23fSmrg uint32_t vga_fb_start; 470209ff23fSmrg 471209ff23fSmrg uint32_t vga1_cntl; 472209ff23fSmrg uint32_t vga2_cntl; 473921a55d8Smrg uint32_t vga3_cntl; 474921a55d8Smrg uint32_t vga4_cntl; 475921a55d8Smrg uint32_t vga5_cntl; 476921a55d8Smrg uint32_t vga6_cntl; 477ad43ddacSmrg uint32_t vga_render_control; 478209ff23fSmrg 479209ff23fSmrg uint32_t crtc_master_en; 480209ff23fSmrg uint32_t crtc_tv_control; 481b7e1c893Smrg uint32_t dc_lb_memory_split; 482209ff23fSmrg 483921a55d8Smrg struct avivo_pll_state pll[2]; 484209ff23fSmrg 485b7e1c893Smrg struct avivo_pll_state vga25_ppll; 486b7e1c893Smrg struct avivo_pll_state vga28_ppll; 487b7e1c893Smrg struct avivo_pll_state vga41_ppll; 488b7e1c893Smrg 489921a55d8Smrg struct avivo_crtc_state crtc[2]; 490209ff23fSmrg 491921a55d8Smrg struct avivo_grph_state grph[2]; 492209ff23fSmrg 493209ff23fSmrg /* DDIA block on RS6xx chips */ 494209ff23fSmrg uint32_t ddia[37]; 495209ff23fSmrg 496209ff23fSmrg /* scalers */ 497209ff23fSmrg uint32_t d1scl[40]; 498209ff23fSmrg uint32_t d2scl[40]; 499209ff23fSmrg uint32_t dxscl[6+2]; 500209ff23fSmrg 501209ff23fSmrg /* dac regs */ 502209ff23fSmrg uint32_t daca[26]; 503209ff23fSmrg uint32_t dacb[26]; 504209ff23fSmrg 505209ff23fSmrg /* tmdsa */ 506209ff23fSmrg uint32_t tmdsa[31]; 507209ff23fSmrg 508209ff23fSmrg /* lvtma */ 509209ff23fSmrg uint32_t lvtma[39]; 510209ff23fSmrg 511209ff23fSmrg /* dvoa */ 512209ff23fSmrg uint32_t dvoa[16]; 513209ff23fSmrg 514b7e1c893Smrg /* DCE3+ chips */ 515209ff23fSmrg uint32_t fmt1[18]; 516209ff23fSmrg uint32_t fmt2[18]; 517209ff23fSmrg uint32_t dig1[19]; 518209ff23fSmrg uint32_t dig2[19]; 519209ff23fSmrg uint32_t hdmi1[57]; 520209ff23fSmrg uint32_t hdmi2[57]; 521209ff23fSmrg uint32_t aux_cntl1[14]; 522209ff23fSmrg uint32_t aux_cntl2[14]; 523209ff23fSmrg uint32_t aux_cntl3[14]; 524209ff23fSmrg uint32_t aux_cntl4[14]; 525b7e1c893Smrg uint32_t aux_cntl5[14]; 526b7e1c893Smrg uint32_t aux_cntl6[14]; 527209ff23fSmrg uint32_t phy[10]; 528209ff23fSmrg uint32_t uniphy1[8]; 529209ff23fSmrg uint32_t uniphy2[8]; 530b7e1c893Smrg uint32_t uniphy3[8]; 531b7e1c893Smrg uint32_t uniphy4[8]; 532b7e1c893Smrg uint32_t uniphy5[8]; 533b7e1c893Smrg uint32_t uniphy6[8]; 534209ff23fSmrg 535209ff23fSmrg}; 536209ff23fSmrg 537209ff23fSmrg/* 538209ff23fSmrg * Maximum length of horizontal/vertical code timing tables for state storage 539209ff23fSmrg */ 540209ff23fSmrg#define MAX_H_CODE_TIMING_LEN 32 541209ff23fSmrg#define MAX_V_CODE_TIMING_LEN 32 542209ff23fSmrg 543209ff23fSmrgtypedef struct { 544209ff23fSmrg struct avivo_state avivo; 545921a55d8Smrg struct dce4_state dce4; 546209ff23fSmrg 547209ff23fSmrg /* Common registers */ 548209ff23fSmrg uint32_t ovr_clr; 549209ff23fSmrg uint32_t ovr_wid_left_right; 550209ff23fSmrg uint32_t ovr_wid_top_bottom; 551209ff23fSmrg uint32_t ov0_scale_cntl; 552209ff23fSmrg uint32_t mpp_tb_config; 553209ff23fSmrg uint32_t mpp_gp_config; 554209ff23fSmrg uint32_t subpic_cntl; 555209ff23fSmrg uint32_t viph_control; 556209ff23fSmrg uint32_t i2c_cntl_1; 557209ff23fSmrg uint32_t gen_int_cntl; 558209ff23fSmrg uint32_t cap0_trig_cntl; 559209ff23fSmrg uint32_t cap1_trig_cntl; 560209ff23fSmrg uint32_t bus_cntl; 561209ff23fSmrg 562209ff23fSmrg uint32_t bios_0_scratch; 563209ff23fSmrg uint32_t bios_1_scratch; 564209ff23fSmrg uint32_t bios_2_scratch; 565209ff23fSmrg uint32_t bios_3_scratch; 566209ff23fSmrg uint32_t bios_4_scratch; 567209ff23fSmrg uint32_t bios_5_scratch; 568209ff23fSmrg uint32_t bios_6_scratch; 569209ff23fSmrg uint32_t bios_7_scratch; 570209ff23fSmrg 571209ff23fSmrg uint32_t surface_cntl; 572209ff23fSmrg uint32_t surfaces[8][3]; 573209ff23fSmrg uint32_t mc_agp_location; 574209ff23fSmrg uint32_t mc_agp_location_hi; 575209ff23fSmrg uint32_t mc_fb_location; 576209ff23fSmrg uint32_t display_base_addr; 577209ff23fSmrg uint32_t display2_base_addr; 578209ff23fSmrg uint32_t ov0_base_addr; 579209ff23fSmrg 580209ff23fSmrg /* Other registers to save for VT switches */ 581209ff23fSmrg uint32_t dp_datatype; 582209ff23fSmrg uint32_t rbbm_soft_reset; 583209ff23fSmrg uint32_t clock_cntl_index; 584209ff23fSmrg uint32_t amcgpio_en_reg; 585209ff23fSmrg uint32_t amcgpio_mask; 586209ff23fSmrg 587209ff23fSmrg /* CRTC registers */ 588209ff23fSmrg uint32_t crtc_gen_cntl; 589209ff23fSmrg uint32_t crtc_ext_cntl; 590209ff23fSmrg uint32_t dac_cntl; 591209ff23fSmrg uint32_t crtc_h_total_disp; 592209ff23fSmrg uint32_t crtc_h_sync_strt_wid; 593209ff23fSmrg uint32_t crtc_v_total_disp; 594209ff23fSmrg uint32_t crtc_v_sync_strt_wid; 595209ff23fSmrg uint32_t crtc_offset; 596209ff23fSmrg uint32_t crtc_offset_cntl; 597209ff23fSmrg uint32_t crtc_pitch; 598209ff23fSmrg uint32_t disp_merge_cntl; 599209ff23fSmrg uint32_t grph_buffer_cntl; 600209ff23fSmrg uint32_t crtc_more_cntl; 601209ff23fSmrg uint32_t crtc_tile_x0_y0; 602209ff23fSmrg 603209ff23fSmrg /* CRTC2 registers */ 604209ff23fSmrg uint32_t crtc2_gen_cntl; 605209ff23fSmrg uint32_t dac_macro_cntl; 606209ff23fSmrg uint32_t dac2_cntl; 607209ff23fSmrg uint32_t disp_output_cntl; 608209ff23fSmrg uint32_t disp_tv_out_cntl; 609209ff23fSmrg uint32_t disp_hw_debug; 610209ff23fSmrg uint32_t disp2_merge_cntl; 611209ff23fSmrg uint32_t grph2_buffer_cntl; 612209ff23fSmrg uint32_t crtc2_h_total_disp; 613209ff23fSmrg uint32_t crtc2_h_sync_strt_wid; 614209ff23fSmrg uint32_t crtc2_v_total_disp; 615209ff23fSmrg uint32_t crtc2_v_sync_strt_wid; 616209ff23fSmrg uint32_t crtc2_offset; 617209ff23fSmrg uint32_t crtc2_offset_cntl; 618209ff23fSmrg uint32_t crtc2_pitch; 619209ff23fSmrg uint32_t crtc2_tile_x0_y0; 620209ff23fSmrg 621209ff23fSmrg /* Flat panel registers */ 622209ff23fSmrg uint32_t fp_crtc_h_total_disp; 623209ff23fSmrg uint32_t fp_crtc_v_total_disp; 624209ff23fSmrg uint32_t fp_gen_cntl; 625209ff23fSmrg uint32_t fp2_gen_cntl; 626209ff23fSmrg uint32_t fp_h_sync_strt_wid; 627209ff23fSmrg uint32_t fp_h2_sync_strt_wid; 628209ff23fSmrg uint32_t fp_horz_stretch; 629209ff23fSmrg uint32_t fp_horz_vert_active; 630209ff23fSmrg uint32_t fp_panel_cntl; 631209ff23fSmrg uint32_t fp_v_sync_strt_wid; 632209ff23fSmrg uint32_t fp_v2_sync_strt_wid; 633209ff23fSmrg uint32_t fp_vert_stretch; 634209ff23fSmrg uint32_t lvds_gen_cntl; 635209ff23fSmrg uint32_t lvds_pll_cntl; 636209ff23fSmrg uint32_t tmds_pll_cntl; 637209ff23fSmrg uint32_t tmds_transmitter_cntl; 638209ff23fSmrg 639209ff23fSmrg /* Computed values for PLL */ 640209ff23fSmrg uint32_t dot_clock_freq; 641209ff23fSmrg uint32_t pll_output_freq; 642209ff23fSmrg int feedback_div; 643209ff23fSmrg int reference_div; 644209ff23fSmrg int post_div; 645209ff23fSmrg 646209ff23fSmrg /* PLL registers */ 647209ff23fSmrg unsigned ppll_ref_div; 648209ff23fSmrg unsigned ppll_div_3; 649209ff23fSmrg uint32_t htotal_cntl; 650209ff23fSmrg uint32_t vclk_ecp_cntl; 651209ff23fSmrg 652209ff23fSmrg /* Computed values for PLL2 */ 653209ff23fSmrg uint32_t dot_clock_freq_2; 654209ff23fSmrg uint32_t pll_output_freq_2; 655209ff23fSmrg int feedback_div_2; 656209ff23fSmrg int reference_div_2; 657209ff23fSmrg int post_div_2; 658209ff23fSmrg 659209ff23fSmrg /* PLL2 registers */ 660209ff23fSmrg uint32_t p2pll_ref_div; 661209ff23fSmrg uint32_t p2pll_div_0; 662209ff23fSmrg uint32_t htotal_cntl2; 663209ff23fSmrg uint32_t pixclks_cntl; 664209ff23fSmrg 665209ff23fSmrg /* Pallet */ 666209ff23fSmrg Bool palette_valid; 66740732134Srjs Bool palette_saved[2]; 66840732134Srjs uint32_t palette[2][256]; 669209ff23fSmrg 670209ff23fSmrg uint32_t disp2_req_cntl1; 671209ff23fSmrg uint32_t disp2_req_cntl2; 672209ff23fSmrg uint32_t dmif_mem_cntl1; 673209ff23fSmrg uint32_t disp1_req_cntl1; 674209ff23fSmrg 675209ff23fSmrg uint32_t fp_2nd_gen_cntl; 676209ff23fSmrg uint32_t fp2_2_gen_cntl; 677209ff23fSmrg uint32_t tmds2_cntl; 678209ff23fSmrg uint32_t tmds2_transmitter_cntl; 679209ff23fSmrg 680209ff23fSmrg 681209ff23fSmrg /* TV out registers */ 682209ff23fSmrg uint32_t tv_master_cntl; 683209ff23fSmrg uint32_t tv_htotal; 684209ff23fSmrg uint32_t tv_hsize; 685209ff23fSmrg uint32_t tv_hdisp; 686209ff23fSmrg uint32_t tv_hstart; 687209ff23fSmrg uint32_t tv_vtotal; 688209ff23fSmrg uint32_t tv_vdisp; 689209ff23fSmrg uint32_t tv_timing_cntl; 690209ff23fSmrg uint32_t tv_vscaler_cntl1; 691209ff23fSmrg uint32_t tv_vscaler_cntl2; 692209ff23fSmrg uint32_t tv_sync_size; 693209ff23fSmrg uint32_t tv_vrestart; 694209ff23fSmrg uint32_t tv_hrestart; 695209ff23fSmrg uint32_t tv_frestart; 696209ff23fSmrg uint32_t tv_ftotal; 697209ff23fSmrg uint32_t tv_clock_sel_cntl; 698209ff23fSmrg uint32_t tv_clkout_cntl; 699209ff23fSmrg uint32_t tv_data_delay_a; 700209ff23fSmrg uint32_t tv_data_delay_b; 701209ff23fSmrg uint32_t tv_dac_cntl; 702209ff23fSmrg uint32_t tv_pll_cntl; 703209ff23fSmrg uint32_t tv_pll_cntl1; 704209ff23fSmrg uint32_t tv_pll_fine_cntl; 705209ff23fSmrg uint32_t tv_modulator_cntl1; 706209ff23fSmrg uint32_t tv_modulator_cntl2; 707209ff23fSmrg uint32_t tv_frame_lock_cntl; 708209ff23fSmrg uint32_t tv_pre_dac_mux_cntl; 709209ff23fSmrg uint32_t tv_rgb_cntl; 710209ff23fSmrg uint32_t tv_y_saw_tooth_cntl; 711209ff23fSmrg uint32_t tv_y_rise_cntl; 712209ff23fSmrg uint32_t tv_y_fall_cntl; 713209ff23fSmrg uint32_t tv_uv_adr; 714209ff23fSmrg uint32_t tv_upsamp_and_gain_cntl; 715209ff23fSmrg uint32_t tv_gain_limit_settings; 716209ff23fSmrg uint32_t tv_linear_gain_settings; 717209ff23fSmrg uint32_t tv_crc_cntl; 718209ff23fSmrg uint32_t tv_sync_cntl; 719209ff23fSmrg uint32_t gpiopad_a; 720209ff23fSmrg uint32_t pll_test_cntl; 721209ff23fSmrg 722209ff23fSmrg uint16_t h_code_timing[MAX_H_CODE_TIMING_LEN]; 723209ff23fSmrg uint16_t v_code_timing[MAX_V_CODE_TIMING_LEN]; 724209ff23fSmrg 725209ff23fSmrg} RADEONSaveRec, *RADEONSavePtr; 726209ff23fSmrg 727209ff23fSmrgtypedef struct 728209ff23fSmrg{ 729209ff23fSmrg Bool HasSecondary; 730209ff23fSmrg Bool HasCRTC2; /* All cards except original Radeon */ 731209ff23fSmrg /* 732209ff23fSmrg * The next two are used to make sure CRTC2 is restored before CRTC_EXT, 733209ff23fSmrg * otherwise it could lead to blank screens. 734209ff23fSmrg */ 735209ff23fSmrg Bool IsSecondaryRestored; 736209ff23fSmrg Bool RestorePrimary; 737209ff23fSmrg 738209ff23fSmrg Bool ReversedDAC; /* TVDAC used as primary dac */ 739209ff23fSmrg Bool ReversedTMDS; /* DDC_DVI is used for external TMDS */ 740209ff23fSmrg xf86CrtcPtr pCrtc[RADEON_MAX_CRTC]; 741209ff23fSmrg RADEONCrtcPrivatePtr Controller[RADEON_MAX_CRTC]; 742209ff23fSmrg 743209ff23fSmrg ScrnInfoPtr pSecondaryScrn; 744209ff23fSmrg ScrnInfoPtr pPrimaryScrn; 745209ff23fSmrg 746209ff23fSmrg RADEONSaveRec ModeReg; /* Current mode */ 747209ff23fSmrg RADEONSaveRec SavedReg; /* Original (text) mode */ 748209ff23fSmrg 749209ff23fSmrg void *MMIO; /* Map of MMIO region */ 7502f39173dSmrg int MMIO_cnt; /* Map of FB region refcount */ 7512f39173dSmrg void *FB; /* Map of FB region */ 7522f39173dSmrg int FB_cnt; /* Map of FB region refcount */ 753ad43ddacSmrg int fd; /* for sharing across zaphod heads */ 75440732134Srjs unsigned long fd_wakeup_registered; /* server generation for which fd has been registered for wakeup handling */ 755921a55d8Smrg int dri2_info_cnt; 756209ff23fSmrg} RADEONEntRec, *RADEONEntPtr; 757209ff23fSmrg 758209ff23fSmrg/* radeon_probe.c */ 759209ff23fSmrgextern PciChipsets RADEONPciChipsets[]; 760209ff23fSmrg 761209ff23fSmrg/* radeon_driver.c */ 762209ff23fSmrgextern Bool RADEONPreInit(ScrnInfoPtr, int); 763209ff23fSmrgextern Bool RADEONScreenInit(int, ScreenPtr, int, char **); 764209ff23fSmrgextern Bool RADEONSwitchMode(int, DisplayModePtr, int); 765209ff23fSmrg#ifdef X_XF86MiscPassMessage 766209ff23fSmrgextern Bool RADEONHandleMessage(int, const char*, const char*, 767209ff23fSmrg char**); 768209ff23fSmrg#endif 769209ff23fSmrgextern void RADEONAdjustFrame(int, int, int, int); 770209ff23fSmrgextern Bool RADEONEnterVT(int, int); 771209ff23fSmrgextern void RADEONLeaveVT(int, int); 772209ff23fSmrgextern void RADEONFreeScreen(int, int); 773209ff23fSmrgextern ModeStatus RADEONValidMode(int, DisplayModePtr, Bool, int); 774209ff23fSmrg 775209ff23fSmrgextern const OptionInfoRec *RADEONOptionsWeak(void); 776209ff23fSmrg 777ad43ddacSmrg#ifdef XF86DRM_MODE 778ad43ddacSmrgextern Bool RADEONPreInit_KMS(ScrnInfoPtr, int); 779ad43ddacSmrgextern Bool RADEONScreenInit_KMS(int, ScreenPtr, int, char **); 780ad43ddacSmrgextern Bool RADEONSwitchMode_KMS(int, DisplayModePtr, int); 781ad43ddacSmrgextern void RADEONAdjustFrame_KMS(int, int, int, int); 782ad43ddacSmrgextern Bool RADEONEnterVT_KMS(int, int); 783ad43ddacSmrgextern void RADEONLeaveVT_KMS(int, int); 784ad43ddacSmrgextern void RADEONFreeScreen_KMS(int scrnIndex, int flags); 785ad43ddacSmrg#endif 786ad43ddacSmrg 787209ff23fSmrg#endif /* _RADEON_PROBE_H_ */ 788