radeon_probe.h revision 68105dcb
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 4668105dcbSveego#include "compat-api.h" 47209ff23fSmrg#ifdef USE_EXA 48209ff23fSmrg#include "exa.h" 49209ff23fSmrg#endif 50209ff23fSmrg#ifdef USE_XAA 51209ff23fSmrg#include "xaa.h" 52209ff23fSmrg#endif 53209ff23fSmrg 54209ff23fSmrgextern DriverRec RADEON; 55209ff23fSmrg 56ad43ddacSmrg#define RADEON_MAX_CRTC 6 57b7e1c893Smrg#define RADEON_MAX_BIOS_CONNECTOR 16 58b7e1c893Smrg 5940732134Srjstypedef enum { 6040732134Srjs CHIP_FAMILY_UNKNOW, 6140732134Srjs CHIP_FAMILY_LEGACY, 6240732134Srjs CHIP_FAMILY_RADEON, 6340732134Srjs CHIP_FAMILY_RV100, 6440732134Srjs CHIP_FAMILY_RS100, /* U1 (IGP320M) or A3 (IGP320)*/ 6540732134Srjs CHIP_FAMILY_RV200, 6640732134Srjs CHIP_FAMILY_RS200, /* U2 (IGP330M/340M/350M) or A4 (IGP330/340/345/350), RS250 (IGP 7000) */ 6740732134Srjs CHIP_FAMILY_R200, 6840732134Srjs CHIP_FAMILY_RV250, 6940732134Srjs CHIP_FAMILY_RS300, /* RS300/RS350 */ 7040732134Srjs CHIP_FAMILY_RV280, 7140732134Srjs CHIP_FAMILY_R300, 7240732134Srjs CHIP_FAMILY_R350, 7340732134Srjs CHIP_FAMILY_RV350, 7440732134Srjs CHIP_FAMILY_RV380, /* RV370/RV380/M22/M24 */ 7540732134Srjs CHIP_FAMILY_R420, /* R420/R423/M18 */ 7640732134Srjs CHIP_FAMILY_RV410, /* RV410, M26 */ 7740732134Srjs CHIP_FAMILY_RS400, /* xpress 200, 200m (RS400) Intel */ 7840732134Srjs CHIP_FAMILY_RS480, /* xpress 200, 200m (RS410/480/482/485) AMD */ 7940732134Srjs CHIP_FAMILY_RV515, /* rv515 */ 8040732134Srjs CHIP_FAMILY_R520, /* r520 */ 8140732134Srjs CHIP_FAMILY_RV530, /* rv530 */ 8240732134Srjs CHIP_FAMILY_R580, /* r580 */ 8340732134Srjs CHIP_FAMILY_RV560, /* rv560 */ 8440732134Srjs CHIP_FAMILY_RV570, /* rv570 */ 8540732134Srjs CHIP_FAMILY_RS600, 8640732134Srjs CHIP_FAMILY_RS690, 8740732134Srjs CHIP_FAMILY_RS740, 8840732134Srjs CHIP_FAMILY_R600, /* r600 */ 8940732134Srjs CHIP_FAMILY_RV610, 9040732134Srjs CHIP_FAMILY_RV630, 9140732134Srjs CHIP_FAMILY_RV670, 9240732134Srjs CHIP_FAMILY_RV620, 9340732134Srjs CHIP_FAMILY_RV635, 9440732134Srjs CHIP_FAMILY_RS780, 9540732134Srjs CHIP_FAMILY_RS880, 9640732134Srjs CHIP_FAMILY_RV770, /* r700 */ 9740732134Srjs CHIP_FAMILY_RV730, 9840732134Srjs CHIP_FAMILY_RV710, 9940732134Srjs CHIP_FAMILY_RV740, 10040732134Srjs CHIP_FAMILY_CEDAR, /* evergreen */ 10140732134Srjs CHIP_FAMILY_REDWOOD, 10240732134Srjs CHIP_FAMILY_JUNIPER, 10340732134Srjs CHIP_FAMILY_CYPRESS, 10440732134Srjs CHIP_FAMILY_HEMLOCK, 10540732134Srjs CHIP_FAMILY_PALM, 10640732134Srjs CHIP_FAMILY_SUMO, 10740732134Srjs CHIP_FAMILY_SUMO2, 10840732134Srjs CHIP_FAMILY_BARTS, 10940732134Srjs CHIP_FAMILY_TURKS, 11040732134Srjs CHIP_FAMILY_CAICOS, 11140732134Srjs CHIP_FAMILY_CAYMAN, 11240732134Srjs CHIP_FAMILY_ARUBA, 11340732134Srjs CHIP_FAMILY_LAST 11440732134Srjs} RADEONChipFamily; 11540732134Srjs 11640732134Srjstypedef struct { 11740732134Srjs uint32_t pci_device_id; 11840732134Srjs RADEONChipFamily chip_family; 11940732134Srjs int mobility; 12040732134Srjs int igp; 12140732134Srjs int nocrtc2; 12240732134Srjs int nointtvout; 12340732134Srjs int singledac; 12440732134Srjs} RADEONCardInfo; 12540732134Srjs 126209ff23fSmrgtypedef enum 127209ff23fSmrg{ 128209ff23fSmrg MT_UNKNOWN = -1, 129209ff23fSmrg MT_NONE = 0, 130209ff23fSmrg MT_CRT = 1, 131209ff23fSmrg MT_LCD = 2, 132209ff23fSmrg MT_DFP = 3, 133209ff23fSmrg MT_CTV = 4, 134209ff23fSmrg MT_STV = 5, 135209ff23fSmrg MT_CV = 6, 136209ff23fSmrg MT_HDMI = 7, // this should really just be MT_DFP 137209ff23fSmrg MT_DP = 8 138209ff23fSmrg} RADEONMonitorType; 139209ff23fSmrg 140209ff23fSmrgtypedef enum 141209ff23fSmrg{ 142209ff23fSmrg CONNECTOR_NONE, 143209ff23fSmrg CONNECTOR_VGA, 144209ff23fSmrg CONNECTOR_DVI_I, 145209ff23fSmrg CONNECTOR_DVI_D, 146209ff23fSmrg CONNECTOR_DVI_A, 147209ff23fSmrg CONNECTOR_STV, 148209ff23fSmrg CONNECTOR_CTV, 149209ff23fSmrg CONNECTOR_LVDS, 150209ff23fSmrg CONNECTOR_DIGITAL, 151209ff23fSmrg CONNECTOR_SCART, 152209ff23fSmrg CONNECTOR_HDMI_TYPE_A, 153209ff23fSmrg CONNECTOR_HDMI_TYPE_B, 154209ff23fSmrg CONNECTOR_0XC, 155209ff23fSmrg CONNECTOR_0XD, 156209ff23fSmrg CONNECTOR_DIN, 157209ff23fSmrg CONNECTOR_DISPLAY_PORT, 158ad43ddacSmrg CONNECTOR_EDP, 159209ff23fSmrg CONNECTOR_UNSUPPORTED 160209ff23fSmrg} RADEONConnectorType; 161209ff23fSmrg 162209ff23fSmrgtypedef enum 163209ff23fSmrg{ 164209ff23fSmrg DVI_AUTO, 165209ff23fSmrg DVI_DIGITAL, 166209ff23fSmrg DVI_ANALOG 167209ff23fSmrg} RADEONDviType; 168209ff23fSmrg 169209ff23fSmrgtypedef enum 170209ff23fSmrg{ 171209ff23fSmrg RMX_OFF, 172209ff23fSmrg RMX_FULL, 173b7e1c893Smrg RMX_CENTER, 174b7e1c893Smrg RMX_ASPECT 175209ff23fSmrg} RADEONRMXType; 176209ff23fSmrg 177209ff23fSmrgtypedef struct { 178209ff23fSmrg uint32_t freq; 179209ff23fSmrg uint32_t value; 180209ff23fSmrg}RADEONTMDSPll; 181209ff23fSmrg 182209ff23fSmrg/* standards */ 183209ff23fSmrgtypedef enum 184209ff23fSmrg{ 185209ff23fSmrg TV_STD_NTSC = 1, 186209ff23fSmrg TV_STD_PAL = 2, 187209ff23fSmrg TV_STD_PAL_M = 4, 188209ff23fSmrg TV_STD_PAL_60 = 8, 189209ff23fSmrg TV_STD_NTSC_J = 16, 190209ff23fSmrg TV_STD_SCART_PAL = 32, 191209ff23fSmrg TV_STD_SECAM = 64, 192209ff23fSmrg TV_STD_PAL_CN = 128, 193209ff23fSmrg} TVStd; 194209ff23fSmrg 195209ff23fSmrgtypedef struct 196209ff23fSmrg{ 197209ff23fSmrg Bool valid; 198209ff23fSmrg uint32_t mask_clk_reg; 199209ff23fSmrg uint32_t mask_data_reg; 200b7e1c893Smrg uint32_t a_clk_reg; 201b7e1c893Smrg uint32_t a_data_reg; 202209ff23fSmrg uint32_t put_clk_reg; 203209ff23fSmrg uint32_t put_data_reg; 204209ff23fSmrg uint32_t get_clk_reg; 205209ff23fSmrg uint32_t get_data_reg; 206209ff23fSmrg uint32_t mask_clk_mask; 207209ff23fSmrg uint32_t mask_data_mask; 208209ff23fSmrg uint32_t put_clk_mask; 209209ff23fSmrg uint32_t put_data_mask; 210209ff23fSmrg uint32_t get_clk_mask; 211209ff23fSmrg uint32_t get_data_mask; 212b7e1c893Smrg uint32_t a_clk_mask; 213b7e1c893Smrg uint32_t a_data_mask; 214b7e1c893Smrg int hw_line; 215b7e1c893Smrg Bool hw_capable; 216209ff23fSmrg} RADEONI2CBusRec, *RADEONI2CBusPtr; 217209ff23fSmrg 2182f39173dSmrgenum radeon_pll_algo { 2192f39173dSmrg RADEON_PLL_OLD, 2202f39173dSmrg RADEON_PLL_NEW 2212f39173dSmrg}; 2222f39173dSmrg 223209ff23fSmrgtypedef struct _RADEONCrtcPrivateRec { 224b7e1c893Smrg void *crtc_rotate_mem; 225b7e1c893Smrg void *cursor_mem; 226209ff23fSmrg int crtc_id; 227209ff23fSmrg int binding; 228209ff23fSmrg uint32_t cursor_offset; 229209ff23fSmrg /* Lookup table values to be set when the CRTC is enabled */ 230b7e1c893Smrg uint16_t lut_r[256], lut_g[256], lut_b[256]; 231209ff23fSmrg 232209ff23fSmrg uint32_t crtc_offset; 233209ff23fSmrg int can_tile; 234209ff23fSmrg Bool enabled; 235b7e1c893Smrg Bool initialized; 236ad43ddacSmrg Bool scaler_enabled; 237ad43ddacSmrg float vsc; 238ad43ddacSmrg float hsc; 239ad43ddacSmrg int pll_id; 2402f39173dSmrg enum radeon_pll_algo pll_algo; 241209ff23fSmrg} RADEONCrtcPrivateRec, *RADEONCrtcPrivatePtr; 242209ff23fSmrg 243b7e1c893Smrgtypedef struct _radeon_encoder { 244b7e1c893Smrg uint16_t encoder_id; 245209ff23fSmrg int devices; 246209ff23fSmrg void *dev_priv; 247b7e1c893Smrg} radeon_encoder_rec, *radeon_encoder_ptr; 248b7e1c893Smrg 249b7e1c893Smrgtypedef struct _radeon_tvout { 250b7e1c893Smrg /* TV out */ 251b7e1c893Smrg TVStd default_tvStd; 252b7e1c893Smrg TVStd tvStd; 253b7e1c893Smrg int hPos; 254b7e1c893Smrg int vPos; 255b7e1c893Smrg int hSize; 256b7e1c893Smrg float TVRefClk; 257b7e1c893Smrg int SupportedTVStds; 258b7e1c893Smrg Bool tv_on; 259b7e1c893Smrg} radeon_tvout_rec, *radeon_tvout_ptr; 260b7e1c893Smrg 261b7e1c893Smrgtypedef struct _radeon_native_mode { 262209ff23fSmrg /* panel stuff */ 263209ff23fSmrg int PanelXRes; 264209ff23fSmrg int PanelYRes; 265209ff23fSmrg int HOverPlus; 266209ff23fSmrg int HSyncWidth; 267209ff23fSmrg int HBlank; 268209ff23fSmrg int VOverPlus; 269209ff23fSmrg int VSyncWidth; 270209ff23fSmrg int VBlank; 271b7e1c893Smrg int Flags; 272209ff23fSmrg int DotClock; 273b7e1c893Smrg} radeon_native_mode_rec, *radeon_native_mode_ptr; 274b7e1c893Smrg 275b7e1c893Smrgtypedef struct _radeon_tvdac { 276b7e1c893Smrg // tv dac 277b7e1c893Smrg uint32_t ps2_tvdac_adj; 278b7e1c893Smrg uint32_t pal_tvdac_adj; 279b7e1c893Smrg uint32_t ntsc_tvdac_adj; 280b7e1c893Smrg} radeon_tvdac_rec, *radeon_tvdac_ptr; 281b7e1c893Smrg 282b7e1c893Smrgtypedef struct _radeon_tmds { 283b7e1c893Smrg // tmds 284209ff23fSmrg RADEONTMDSPll tmds_pll[4]; 285b7e1c893Smrg} radeon_tmds_rec, *radeon_tmds_ptr; 286b7e1c893Smrg 287b7e1c893Smrgtypedef struct _radeon_lvds { 288b7e1c893Smrg // panel mode 289b7e1c893Smrg radeon_native_mode_rec native_mode; 290b7e1c893Smrg // lvds 291b7e1c893Smrg int PanelPwrDly; 292b7e1c893Smrg int lvds_misc; 293b7e1c893Smrg int lvds_ss_id; 294b7e1c893Smrg} radeon_lvds_rec, *radeon_lvds_ptr; 295b7e1c893Smrg 296b7e1c893Smrgtypedef struct _radeon_dvo { 297209ff23fSmrg /* dvo */ 298c503f109Smrg I2CBusPtr pI2CBus; 299209ff23fSmrg I2CDevPtr DVOChip; 300209ff23fSmrg RADEONI2CBusRec dvo_i2c; 301209ff23fSmrg int dvo_i2c_slave_addr; 302209ff23fSmrg Bool dvo_duallink; 303b7e1c893Smrg} radeon_dvo_rec, *radeon_dvo_ptr; 304b7e1c893Smrg 305b7e1c893Smrgtypedef struct { 306b7e1c893Smrg RADEONConnectorType ConnectorType; 307b7e1c893Smrg Bool valid; 308b7e1c893Smrg int output_id; 309b7e1c893Smrg int devices; 310b7e1c893Smrg int hpd_mask; 311b7e1c893Smrg RADEONI2CBusRec ddc_i2c; 312209ff23fSmrg int igp_lane_info; 313b7e1c893Smrg Bool shared_ddc; 314b7e1c893Smrg int i2c_line_mux; 315b7e1c893Smrg Bool load_detection; 316b7e1c893Smrg Bool linkb; 317b7e1c893Smrg uint16_t connector_object; 318ad43ddacSmrg uint16_t connector_object_id; 319ad43ddacSmrg uint8_t ucI2cId; 320ad43ddacSmrg uint8_t hpd_id; 321b7e1c893Smrg} RADEONBIOSConnector; 322209ff23fSmrg 323b7e1c893Smrgtypedef struct _RADEONOutputPrivateRec { 324b7e1c893Smrg uint16_t connector_id; 325b7e1c893Smrg uint32_t devices; 326b7e1c893Smrg uint32_t active_device; 327209ff23fSmrg Bool enabled; 328b7e1c893Smrg 329b7e1c893Smrg int load_detection; 330b7e1c893Smrg 331b7e1c893Smrg // DVI/HDMI 332b7e1c893Smrg Bool coherent_mode; 333b7e1c893Smrg Bool linkb; 334b7e1c893Smrg 335b7e1c893Smrg RADEONConnectorType ConnectorType; 336ad43ddacSmrg uint16_t connector_object_id; 337b7e1c893Smrg RADEONDviType DVIType; 338b7e1c893Smrg RADEONMonitorType MonType; 339b7e1c893Smrg 340b7e1c893Smrg // DDC info 341b7e1c893Smrg I2CBusPtr pI2CBus; 342b7e1c893Smrg RADEONI2CBusRec ddc_i2c; 343b7e1c893Smrg Bool shared_ddc; 344ad43ddacSmrg 345ad43ddacSmrg Bool custom_edid; 346ad43ddacSmrg xf86MonPtr custom_mon; 347b7e1c893Smrg // router info 348b7e1c893Smrg // HDP info 349b7e1c893Smrg 350b7e1c893Smrg // panel mode 351b7e1c893Smrg radeon_native_mode_rec native_mode; 352b7e1c893Smrg 353b7e1c893Smrg // RMX 354b7e1c893Smrg RADEONRMXType rmx_type; 355b7e1c893Smrg int Flags; 356b7e1c893Smrg 357b7e1c893Smrg //tvout - move to encoder 358b7e1c893Smrg radeon_tvout_rec tvout; 359b7e1c893Smrg 360b7e1c893Smrg /* dce 3.x dig block */ 361b7e1c893Smrg int igp_lane_info; 362ad43ddacSmrg int dig_encoder; 363b7e1c893Smrg 364b7e1c893Smrg int pixel_clock; 365ad43ddacSmrg 366ad43ddacSmrg /* DP - aux bus*/ 367ad43ddacSmrg I2CBusPtr dp_pI2CBus; 368ad43ddacSmrg uint8_t ucI2cId; 369ad43ddacSmrg char dp_bus_name[20]; 370ad43ddacSmrg uint32_t dp_i2c_addr; 371ad43ddacSmrg Bool dp_i2c_running; 372ad43ddacSmrg /* DP - general config */ 373ad43ddacSmrg uint8_t dpcd[8]; 374ad43ddacSmrg int dp_lane_count; 375ad43ddacSmrg int dp_clock; 376ad43ddacSmrg uint8_t hpd_id; 377ad43ddacSmrg int pll_id; 378209ff23fSmrg} RADEONOutputPrivateRec, *RADEONOutputPrivatePtr; 379209ff23fSmrg 380209ff23fSmrgstruct avivo_pll_state { 381209ff23fSmrg uint32_t ref_div_src; 382209ff23fSmrg uint32_t ref_div; 383209ff23fSmrg uint32_t fb_div; 384209ff23fSmrg uint32_t post_div_src; 385209ff23fSmrg uint32_t post_div; 386209ff23fSmrg uint32_t ext_ppll_cntl; 387209ff23fSmrg uint32_t pll_cntl; 388209ff23fSmrg uint32_t int_ss_cntl; 389209ff23fSmrg}; 390209ff23fSmrg 391209ff23fSmrgstruct avivo_crtc_state { 392209ff23fSmrg uint32_t pll_source; 393209ff23fSmrg uint32_t h_total; 394209ff23fSmrg uint32_t h_blank_start_end; 395209ff23fSmrg uint32_t h_sync_a; 396209ff23fSmrg uint32_t h_sync_a_cntl; 397209ff23fSmrg uint32_t h_sync_b; 398209ff23fSmrg uint32_t h_sync_b_cntl; 399209ff23fSmrg uint32_t v_total; 400209ff23fSmrg uint32_t v_blank_start_end; 401209ff23fSmrg uint32_t v_sync_a; 402209ff23fSmrg uint32_t v_sync_a_cntl; 403209ff23fSmrg uint32_t v_sync_b; 404209ff23fSmrg uint32_t v_sync_b_cntl; 405209ff23fSmrg uint32_t control; 406209ff23fSmrg uint32_t blank_control; 407209ff23fSmrg uint32_t interlace_control; 408209ff23fSmrg uint32_t stereo_control; 409209ff23fSmrg uint32_t cursor_control; 410209ff23fSmrg}; 411209ff23fSmrg 412209ff23fSmrgstruct avivo_grph_state { 413209ff23fSmrg uint32_t enable; 414209ff23fSmrg uint32_t control; 415921a55d8Smrg uint32_t swap_control; 416209ff23fSmrg uint32_t prim_surf_addr; 417209ff23fSmrg uint32_t sec_surf_addr; 418209ff23fSmrg uint32_t pitch; 419921a55d8Smrg uint32_t prim_surf_addr_hi; 420921a55d8Smrg uint32_t sec_surf_addr_hi; 421209ff23fSmrg uint32_t x_offset; 422209ff23fSmrg uint32_t y_offset; 423209ff23fSmrg uint32_t x_start; 424209ff23fSmrg uint32_t y_start; 425209ff23fSmrg uint32_t x_end; 426209ff23fSmrg uint32_t y_end; 427209ff23fSmrg 428b7e1c893Smrg uint32_t desktop_height; 429209ff23fSmrg uint32_t viewport_start; 430209ff23fSmrg uint32_t viewport_size; 431b7e1c893Smrg uint32_t mode_data_format; 432209ff23fSmrg}; 433209ff23fSmrg 434921a55d8Smrgstruct dce4_main_block_state { 435921a55d8Smrg struct avivo_grph_state grph; 436921a55d8Smrg uint32_t scl[6]; 437921a55d8Smrg uint32_t crtc[15]; 438921a55d8Smrg uint32_t fmt[10]; 439921a55d8Smrg uint32_t dig[20]; 440921a55d8Smrg}; 441921a55d8Smrg 442921a55d8Smrgstruct dce4_state 443921a55d8Smrg{ 444921a55d8Smrg 445921a55d8Smrg uint32_t vga1_cntl; 446921a55d8Smrg uint32_t vga2_cntl; 447921a55d8Smrg uint32_t vga3_cntl; 448921a55d8Smrg uint32_t vga4_cntl; 449921a55d8Smrg uint32_t vga5_cntl; 450921a55d8Smrg uint32_t vga6_cntl; 451921a55d8Smrg uint32_t vga_render_control; 452921a55d8Smrg 453921a55d8Smrg struct dce4_main_block_state block[6]; 454921a55d8Smrg 455921a55d8Smrg uint32_t vga_pll[3][3]; 456921a55d8Smrg uint32_t pll[2][15]; 457921a55d8Smrg uint32_t pll_route[6]; 458921a55d8Smrg 459921a55d8Smrg uint32_t dac[2][26]; 460921a55d8Smrg uint32_t uniphy[6][10]; 461921a55d8Smrg 462921a55d8Smrg uint32_t dig[20]; 463921a55d8Smrg}; 464921a55d8Smrg 465209ff23fSmrgstruct avivo_state 466209ff23fSmrg{ 467209ff23fSmrg uint32_t hdp_fb_location; 468209ff23fSmrg uint32_t mc_memory_map; 469209ff23fSmrg uint32_t vga_memory_base; 470209ff23fSmrg uint32_t vga_fb_start; 471209ff23fSmrg 472209ff23fSmrg uint32_t vga1_cntl; 473209ff23fSmrg uint32_t vga2_cntl; 474921a55d8Smrg uint32_t vga3_cntl; 475921a55d8Smrg uint32_t vga4_cntl; 476921a55d8Smrg uint32_t vga5_cntl; 477921a55d8Smrg uint32_t vga6_cntl; 478ad43ddacSmrg uint32_t vga_render_control; 479209ff23fSmrg 480209ff23fSmrg uint32_t crtc_master_en; 481209ff23fSmrg uint32_t crtc_tv_control; 482b7e1c893Smrg uint32_t dc_lb_memory_split; 483209ff23fSmrg 484921a55d8Smrg struct avivo_pll_state pll[2]; 485209ff23fSmrg 486b7e1c893Smrg struct avivo_pll_state vga25_ppll; 487b7e1c893Smrg struct avivo_pll_state vga28_ppll; 488b7e1c893Smrg struct avivo_pll_state vga41_ppll; 489b7e1c893Smrg 490921a55d8Smrg struct avivo_crtc_state crtc[2]; 491209ff23fSmrg 492921a55d8Smrg struct avivo_grph_state grph[2]; 493209ff23fSmrg 494209ff23fSmrg /* DDIA block on RS6xx chips */ 495209ff23fSmrg uint32_t ddia[37]; 496209ff23fSmrg 497209ff23fSmrg /* scalers */ 498209ff23fSmrg uint32_t d1scl[40]; 499209ff23fSmrg uint32_t d2scl[40]; 500209ff23fSmrg uint32_t dxscl[6+2]; 501209ff23fSmrg 502209ff23fSmrg /* dac regs */ 503209ff23fSmrg uint32_t daca[26]; 504209ff23fSmrg uint32_t dacb[26]; 505209ff23fSmrg 506209ff23fSmrg /* tmdsa */ 507209ff23fSmrg uint32_t tmdsa[31]; 508209ff23fSmrg 509209ff23fSmrg /* lvtma */ 510209ff23fSmrg uint32_t lvtma[39]; 511209ff23fSmrg 512209ff23fSmrg /* dvoa */ 513209ff23fSmrg uint32_t dvoa[16]; 514209ff23fSmrg 515b7e1c893Smrg /* DCE3+ chips */ 516209ff23fSmrg uint32_t fmt1[18]; 517209ff23fSmrg uint32_t fmt2[18]; 518209ff23fSmrg uint32_t dig1[19]; 519209ff23fSmrg uint32_t dig2[19]; 520209ff23fSmrg uint32_t hdmi1[57]; 521209ff23fSmrg uint32_t hdmi2[57]; 522209ff23fSmrg uint32_t aux_cntl1[14]; 523209ff23fSmrg uint32_t aux_cntl2[14]; 524209ff23fSmrg uint32_t aux_cntl3[14]; 525209ff23fSmrg uint32_t aux_cntl4[14]; 526b7e1c893Smrg uint32_t aux_cntl5[14]; 527b7e1c893Smrg uint32_t aux_cntl6[14]; 528209ff23fSmrg uint32_t phy[10]; 529209ff23fSmrg uint32_t uniphy1[8]; 530209ff23fSmrg uint32_t uniphy2[8]; 531b7e1c893Smrg uint32_t uniphy3[8]; 532b7e1c893Smrg uint32_t uniphy4[8]; 533b7e1c893Smrg uint32_t uniphy5[8]; 534b7e1c893Smrg uint32_t uniphy6[8]; 535209ff23fSmrg 536209ff23fSmrg}; 537209ff23fSmrg 538209ff23fSmrg/* 539209ff23fSmrg * Maximum length of horizontal/vertical code timing tables for state storage 540209ff23fSmrg */ 541209ff23fSmrg#define MAX_H_CODE_TIMING_LEN 32 542209ff23fSmrg#define MAX_V_CODE_TIMING_LEN 32 543209ff23fSmrg 544209ff23fSmrgtypedef struct { 545209ff23fSmrg struct avivo_state avivo; 546921a55d8Smrg struct dce4_state dce4; 547209ff23fSmrg 548209ff23fSmrg /* Common registers */ 549209ff23fSmrg uint32_t ovr_clr; 550209ff23fSmrg uint32_t ovr_wid_left_right; 551209ff23fSmrg uint32_t ovr_wid_top_bottom; 552209ff23fSmrg uint32_t ov0_scale_cntl; 553209ff23fSmrg uint32_t mpp_tb_config; 554209ff23fSmrg uint32_t mpp_gp_config; 555209ff23fSmrg uint32_t subpic_cntl; 556209ff23fSmrg uint32_t viph_control; 557209ff23fSmrg uint32_t i2c_cntl_1; 558209ff23fSmrg uint32_t gen_int_cntl; 559209ff23fSmrg uint32_t cap0_trig_cntl; 560209ff23fSmrg uint32_t cap1_trig_cntl; 561209ff23fSmrg uint32_t bus_cntl; 562209ff23fSmrg 563209ff23fSmrg uint32_t bios_0_scratch; 564209ff23fSmrg uint32_t bios_1_scratch; 565209ff23fSmrg uint32_t bios_2_scratch; 566209ff23fSmrg uint32_t bios_3_scratch; 567209ff23fSmrg uint32_t bios_4_scratch; 568209ff23fSmrg uint32_t bios_5_scratch; 569209ff23fSmrg uint32_t bios_6_scratch; 570209ff23fSmrg uint32_t bios_7_scratch; 571209ff23fSmrg 572209ff23fSmrg uint32_t surface_cntl; 573209ff23fSmrg uint32_t surfaces[8][3]; 574209ff23fSmrg uint32_t mc_agp_location; 575209ff23fSmrg uint32_t mc_agp_location_hi; 576209ff23fSmrg uint32_t mc_fb_location; 577209ff23fSmrg uint32_t display_base_addr; 578209ff23fSmrg uint32_t display2_base_addr; 579209ff23fSmrg uint32_t ov0_base_addr; 580209ff23fSmrg 581209ff23fSmrg /* Other registers to save for VT switches */ 582209ff23fSmrg uint32_t dp_datatype; 583209ff23fSmrg uint32_t rbbm_soft_reset; 584209ff23fSmrg uint32_t clock_cntl_index; 585209ff23fSmrg uint32_t amcgpio_en_reg; 586209ff23fSmrg uint32_t amcgpio_mask; 587209ff23fSmrg 588209ff23fSmrg /* CRTC registers */ 589209ff23fSmrg uint32_t crtc_gen_cntl; 590209ff23fSmrg uint32_t crtc_ext_cntl; 591209ff23fSmrg uint32_t dac_cntl; 592209ff23fSmrg uint32_t crtc_h_total_disp; 593209ff23fSmrg uint32_t crtc_h_sync_strt_wid; 594209ff23fSmrg uint32_t crtc_v_total_disp; 595209ff23fSmrg uint32_t crtc_v_sync_strt_wid; 596209ff23fSmrg uint32_t crtc_offset; 597209ff23fSmrg uint32_t crtc_offset_cntl; 598209ff23fSmrg uint32_t crtc_pitch; 599209ff23fSmrg uint32_t disp_merge_cntl; 600209ff23fSmrg uint32_t grph_buffer_cntl; 601209ff23fSmrg uint32_t crtc_more_cntl; 602209ff23fSmrg uint32_t crtc_tile_x0_y0; 603209ff23fSmrg 604209ff23fSmrg /* CRTC2 registers */ 605209ff23fSmrg uint32_t crtc2_gen_cntl; 606209ff23fSmrg uint32_t dac_macro_cntl; 607209ff23fSmrg uint32_t dac2_cntl; 608209ff23fSmrg uint32_t disp_output_cntl; 609209ff23fSmrg uint32_t disp_tv_out_cntl; 610209ff23fSmrg uint32_t disp_hw_debug; 611209ff23fSmrg uint32_t disp2_merge_cntl; 612209ff23fSmrg uint32_t grph2_buffer_cntl; 613209ff23fSmrg uint32_t crtc2_h_total_disp; 614209ff23fSmrg uint32_t crtc2_h_sync_strt_wid; 615209ff23fSmrg uint32_t crtc2_v_total_disp; 616209ff23fSmrg uint32_t crtc2_v_sync_strt_wid; 617209ff23fSmrg uint32_t crtc2_offset; 618209ff23fSmrg uint32_t crtc2_offset_cntl; 619209ff23fSmrg uint32_t crtc2_pitch; 620209ff23fSmrg uint32_t crtc2_tile_x0_y0; 621209ff23fSmrg 622209ff23fSmrg /* Flat panel registers */ 623209ff23fSmrg uint32_t fp_crtc_h_total_disp; 624209ff23fSmrg uint32_t fp_crtc_v_total_disp; 625209ff23fSmrg uint32_t fp_gen_cntl; 626209ff23fSmrg uint32_t fp2_gen_cntl; 627209ff23fSmrg uint32_t fp_h_sync_strt_wid; 628209ff23fSmrg uint32_t fp_h2_sync_strt_wid; 629209ff23fSmrg uint32_t fp_horz_stretch; 630209ff23fSmrg uint32_t fp_horz_vert_active; 631209ff23fSmrg uint32_t fp_panel_cntl; 632209ff23fSmrg uint32_t fp_v_sync_strt_wid; 633209ff23fSmrg uint32_t fp_v2_sync_strt_wid; 634209ff23fSmrg uint32_t fp_vert_stretch; 635209ff23fSmrg uint32_t lvds_gen_cntl; 636209ff23fSmrg uint32_t lvds_pll_cntl; 637209ff23fSmrg uint32_t tmds_pll_cntl; 638209ff23fSmrg uint32_t tmds_transmitter_cntl; 639209ff23fSmrg 640209ff23fSmrg /* Computed values for PLL */ 641209ff23fSmrg uint32_t dot_clock_freq; 642209ff23fSmrg uint32_t pll_output_freq; 643209ff23fSmrg int feedback_div; 644209ff23fSmrg int reference_div; 645209ff23fSmrg int post_div; 646209ff23fSmrg 647209ff23fSmrg /* PLL registers */ 648209ff23fSmrg unsigned ppll_ref_div; 649209ff23fSmrg unsigned ppll_div_3; 650209ff23fSmrg uint32_t htotal_cntl; 651209ff23fSmrg uint32_t vclk_ecp_cntl; 652209ff23fSmrg 653209ff23fSmrg /* Computed values for PLL2 */ 654209ff23fSmrg uint32_t dot_clock_freq_2; 655209ff23fSmrg uint32_t pll_output_freq_2; 656209ff23fSmrg int feedback_div_2; 657209ff23fSmrg int reference_div_2; 658209ff23fSmrg int post_div_2; 659209ff23fSmrg 660209ff23fSmrg /* PLL2 registers */ 661209ff23fSmrg uint32_t p2pll_ref_div; 662209ff23fSmrg uint32_t p2pll_div_0; 663209ff23fSmrg uint32_t htotal_cntl2; 664209ff23fSmrg uint32_t pixclks_cntl; 665209ff23fSmrg 666209ff23fSmrg /* Pallet */ 667209ff23fSmrg Bool palette_valid; 66840732134Srjs Bool palette_saved[2]; 66940732134Srjs uint32_t palette[2][256]; 670209ff23fSmrg 671209ff23fSmrg uint32_t disp2_req_cntl1; 672209ff23fSmrg uint32_t disp2_req_cntl2; 673209ff23fSmrg uint32_t dmif_mem_cntl1; 674209ff23fSmrg uint32_t disp1_req_cntl1; 675209ff23fSmrg 676209ff23fSmrg uint32_t fp_2nd_gen_cntl; 677209ff23fSmrg uint32_t fp2_2_gen_cntl; 678209ff23fSmrg uint32_t tmds2_cntl; 679209ff23fSmrg uint32_t tmds2_transmitter_cntl; 680209ff23fSmrg 681209ff23fSmrg 682209ff23fSmrg /* TV out registers */ 683209ff23fSmrg uint32_t tv_master_cntl; 684209ff23fSmrg uint32_t tv_htotal; 685209ff23fSmrg uint32_t tv_hsize; 686209ff23fSmrg uint32_t tv_hdisp; 687209ff23fSmrg uint32_t tv_hstart; 688209ff23fSmrg uint32_t tv_vtotal; 689209ff23fSmrg uint32_t tv_vdisp; 690209ff23fSmrg uint32_t tv_timing_cntl; 691209ff23fSmrg uint32_t tv_vscaler_cntl1; 692209ff23fSmrg uint32_t tv_vscaler_cntl2; 693209ff23fSmrg uint32_t tv_sync_size; 694209ff23fSmrg uint32_t tv_vrestart; 695209ff23fSmrg uint32_t tv_hrestart; 696209ff23fSmrg uint32_t tv_frestart; 697209ff23fSmrg uint32_t tv_ftotal; 698209ff23fSmrg uint32_t tv_clock_sel_cntl; 699209ff23fSmrg uint32_t tv_clkout_cntl; 700209ff23fSmrg uint32_t tv_data_delay_a; 701209ff23fSmrg uint32_t tv_data_delay_b; 702209ff23fSmrg uint32_t tv_dac_cntl; 703209ff23fSmrg uint32_t tv_pll_cntl; 704209ff23fSmrg uint32_t tv_pll_cntl1; 705209ff23fSmrg uint32_t tv_pll_fine_cntl; 706209ff23fSmrg uint32_t tv_modulator_cntl1; 707209ff23fSmrg uint32_t tv_modulator_cntl2; 708209ff23fSmrg uint32_t tv_frame_lock_cntl; 709209ff23fSmrg uint32_t tv_pre_dac_mux_cntl; 710209ff23fSmrg uint32_t tv_rgb_cntl; 711209ff23fSmrg uint32_t tv_y_saw_tooth_cntl; 712209ff23fSmrg uint32_t tv_y_rise_cntl; 713209ff23fSmrg uint32_t tv_y_fall_cntl; 714209ff23fSmrg uint32_t tv_uv_adr; 715209ff23fSmrg uint32_t tv_upsamp_and_gain_cntl; 716209ff23fSmrg uint32_t tv_gain_limit_settings; 717209ff23fSmrg uint32_t tv_linear_gain_settings; 718209ff23fSmrg uint32_t tv_crc_cntl; 719209ff23fSmrg uint32_t tv_sync_cntl; 720209ff23fSmrg uint32_t gpiopad_a; 721209ff23fSmrg uint32_t pll_test_cntl; 722209ff23fSmrg 723209ff23fSmrg uint16_t h_code_timing[MAX_H_CODE_TIMING_LEN]; 724209ff23fSmrg uint16_t v_code_timing[MAX_V_CODE_TIMING_LEN]; 725209ff23fSmrg 726209ff23fSmrg} RADEONSaveRec, *RADEONSavePtr; 727209ff23fSmrg 728209ff23fSmrgtypedef struct 729209ff23fSmrg{ 730209ff23fSmrg Bool HasSecondary; 731209ff23fSmrg Bool HasCRTC2; /* All cards except original Radeon */ 732209ff23fSmrg /* 733209ff23fSmrg * The next two are used to make sure CRTC2 is restored before CRTC_EXT, 734209ff23fSmrg * otherwise it could lead to blank screens. 735209ff23fSmrg */ 736209ff23fSmrg Bool IsSecondaryRestored; 737209ff23fSmrg Bool RestorePrimary; 738209ff23fSmrg 739209ff23fSmrg Bool ReversedDAC; /* TVDAC used as primary dac */ 740209ff23fSmrg Bool ReversedTMDS; /* DDC_DVI is used for external TMDS */ 741209ff23fSmrg xf86CrtcPtr pCrtc[RADEON_MAX_CRTC]; 742209ff23fSmrg RADEONCrtcPrivatePtr Controller[RADEON_MAX_CRTC]; 743209ff23fSmrg 744209ff23fSmrg ScrnInfoPtr pSecondaryScrn; 745209ff23fSmrg ScrnInfoPtr pPrimaryScrn; 746209ff23fSmrg 747209ff23fSmrg RADEONSaveRec ModeReg; /* Current mode */ 748209ff23fSmrg RADEONSaveRec SavedReg; /* Original (text) mode */ 749209ff23fSmrg 750209ff23fSmrg void *MMIO; /* Map of MMIO region */ 7512f39173dSmrg int MMIO_cnt; /* Map of FB region refcount */ 7522f39173dSmrg void *FB; /* Map of FB region */ 7532f39173dSmrg int FB_cnt; /* Map of FB region refcount */ 754ad43ddacSmrg int fd; /* for sharing across zaphod heads */ 75540732134Srjs unsigned long fd_wakeup_registered; /* server generation for which fd has been registered for wakeup handling */ 756921a55d8Smrg int dri2_info_cnt; 757209ff23fSmrg} RADEONEntRec, *RADEONEntPtr; 758209ff23fSmrg 759209ff23fSmrg/* radeon_probe.c */ 760209ff23fSmrgextern PciChipsets RADEONPciChipsets[]; 761209ff23fSmrg 762209ff23fSmrg/* radeon_driver.c */ 763209ff23fSmrgextern Bool RADEONPreInit(ScrnInfoPtr, int); 76468105dcbSveegoextern Bool RADEONScreenInit(SCREEN_INIT_ARGS_DECL); 76568105dcbSveegoextern Bool RADEONSwitchMode(SWITCH_MODE_ARGS_DECL); 766209ff23fSmrg#ifdef X_XF86MiscPassMessage 767209ff23fSmrgextern Bool RADEONHandleMessage(int, const char*, const char*, 768209ff23fSmrg char**); 769209ff23fSmrg#endif 77068105dcbSveegoextern void RADEONAdjustFrame(ADJUST_FRAME_ARGS_DECL); 77168105dcbSveegoextern Bool RADEONEnterVT(VT_FUNC_ARGS_DECL); 77268105dcbSveegoextern void RADEONLeaveVT(VT_FUNC_ARGS_DECL); 77368105dcbSveegoextern void RADEONFreeScreen(FREE_SCREEN_ARGS_DECL); 77468105dcbSveegoextern ModeStatus RADEONValidMode(SCRN_ARG_TYPE, DisplayModePtr, Bool, int); 775209ff23fSmrg 776209ff23fSmrgextern const OptionInfoRec *RADEONOptionsWeak(void); 777209ff23fSmrg 778ad43ddacSmrg#ifdef XF86DRM_MODE 779ad43ddacSmrgextern Bool RADEONPreInit_KMS(ScrnInfoPtr, int); 78068105dcbSveegoextern Bool RADEONScreenInit_KMS(SCREEN_INIT_ARGS_DECL); 78168105dcbSveegoextern Bool RADEONSwitchMode_KMS(SWITCH_MODE_ARGS_DECL); 78268105dcbSveegoextern void RADEONAdjustFrame_KMS(ADJUST_FRAME_ARGS_DECL); 78368105dcbSveegoextern Bool RADEONEnterVT_KMS(VT_FUNC_ARGS_DECL); 78468105dcbSveegoextern void RADEONLeaveVT_KMS(VT_FUNC_ARGS_DECL); 78568105dcbSveegoextern void RADEONFreeScreen_KMS(FREE_SCREEN_ARGS_DECL); 786ad43ddacSmrg#endif 787ad43ddacSmrg 788209ff23fSmrg#endif /* _RADEON_PROBE_H_ */ 789