radeon_probe.h revision 2f39173d
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 58209ff23fSmrgtypedef enum 59209ff23fSmrg{ 60209ff23fSmrg MT_UNKNOWN = -1, 61209ff23fSmrg MT_NONE = 0, 62209ff23fSmrg MT_CRT = 1, 63209ff23fSmrg MT_LCD = 2, 64209ff23fSmrg MT_DFP = 3, 65209ff23fSmrg MT_CTV = 4, 66209ff23fSmrg MT_STV = 5, 67209ff23fSmrg MT_CV = 6, 68209ff23fSmrg MT_HDMI = 7, // this should really just be MT_DFP 69209ff23fSmrg MT_DP = 8 70209ff23fSmrg} RADEONMonitorType; 71209ff23fSmrg 72209ff23fSmrgtypedef enum 73209ff23fSmrg{ 74209ff23fSmrg CONNECTOR_NONE, 75209ff23fSmrg CONNECTOR_VGA, 76209ff23fSmrg CONNECTOR_DVI_I, 77209ff23fSmrg CONNECTOR_DVI_D, 78209ff23fSmrg CONNECTOR_DVI_A, 79209ff23fSmrg CONNECTOR_STV, 80209ff23fSmrg CONNECTOR_CTV, 81209ff23fSmrg CONNECTOR_LVDS, 82209ff23fSmrg CONNECTOR_DIGITAL, 83209ff23fSmrg CONNECTOR_SCART, 84209ff23fSmrg CONNECTOR_HDMI_TYPE_A, 85209ff23fSmrg CONNECTOR_HDMI_TYPE_B, 86209ff23fSmrg CONNECTOR_0XC, 87209ff23fSmrg CONNECTOR_0XD, 88209ff23fSmrg CONNECTOR_DIN, 89209ff23fSmrg CONNECTOR_DISPLAY_PORT, 90ad43ddacSmrg CONNECTOR_EDP, 91209ff23fSmrg CONNECTOR_UNSUPPORTED 92209ff23fSmrg} RADEONConnectorType; 93209ff23fSmrg 94209ff23fSmrgtypedef enum 95209ff23fSmrg{ 96209ff23fSmrg DVI_AUTO, 97209ff23fSmrg DVI_DIGITAL, 98209ff23fSmrg DVI_ANALOG 99209ff23fSmrg} RADEONDviType; 100209ff23fSmrg 101209ff23fSmrgtypedef enum 102209ff23fSmrg{ 103209ff23fSmrg RMX_OFF, 104209ff23fSmrg RMX_FULL, 105b7e1c893Smrg RMX_CENTER, 106b7e1c893Smrg RMX_ASPECT 107209ff23fSmrg} RADEONRMXType; 108209ff23fSmrg 109209ff23fSmrgtypedef struct { 110209ff23fSmrg uint32_t freq; 111209ff23fSmrg uint32_t value; 112209ff23fSmrg}RADEONTMDSPll; 113209ff23fSmrg 114209ff23fSmrg/* standards */ 115209ff23fSmrgtypedef enum 116209ff23fSmrg{ 117209ff23fSmrg TV_STD_NTSC = 1, 118209ff23fSmrg TV_STD_PAL = 2, 119209ff23fSmrg TV_STD_PAL_M = 4, 120209ff23fSmrg TV_STD_PAL_60 = 8, 121209ff23fSmrg TV_STD_NTSC_J = 16, 122209ff23fSmrg TV_STD_SCART_PAL = 32, 123209ff23fSmrg TV_STD_SECAM = 64, 124209ff23fSmrg TV_STD_PAL_CN = 128, 125209ff23fSmrg} TVStd; 126209ff23fSmrg 127209ff23fSmrgtypedef struct 128209ff23fSmrg{ 129209ff23fSmrg Bool valid; 130209ff23fSmrg uint32_t mask_clk_reg; 131209ff23fSmrg uint32_t mask_data_reg; 132b7e1c893Smrg uint32_t a_clk_reg; 133b7e1c893Smrg uint32_t a_data_reg; 134209ff23fSmrg uint32_t put_clk_reg; 135209ff23fSmrg uint32_t put_data_reg; 136209ff23fSmrg uint32_t get_clk_reg; 137209ff23fSmrg uint32_t get_data_reg; 138209ff23fSmrg uint32_t mask_clk_mask; 139209ff23fSmrg uint32_t mask_data_mask; 140209ff23fSmrg uint32_t put_clk_mask; 141209ff23fSmrg uint32_t put_data_mask; 142209ff23fSmrg uint32_t get_clk_mask; 143209ff23fSmrg uint32_t get_data_mask; 144b7e1c893Smrg uint32_t a_clk_mask; 145b7e1c893Smrg uint32_t a_data_mask; 146b7e1c893Smrg int hw_line; 147b7e1c893Smrg Bool hw_capable; 148209ff23fSmrg} RADEONI2CBusRec, *RADEONI2CBusPtr; 149209ff23fSmrg 1502f39173dSmrgenum radeon_pll_algo { 1512f39173dSmrg RADEON_PLL_OLD, 1522f39173dSmrg RADEON_PLL_NEW 1532f39173dSmrg}; 1542f39173dSmrg 155209ff23fSmrgtypedef struct _RADEONCrtcPrivateRec { 156b7e1c893Smrg void *crtc_rotate_mem; 157b7e1c893Smrg void *cursor_mem; 158209ff23fSmrg int crtc_id; 159209ff23fSmrg int binding; 160209ff23fSmrg uint32_t cursor_offset; 161209ff23fSmrg /* Lookup table values to be set when the CRTC is enabled */ 162b7e1c893Smrg uint16_t lut_r[256], lut_g[256], lut_b[256]; 163209ff23fSmrg 164209ff23fSmrg uint32_t crtc_offset; 165209ff23fSmrg int can_tile; 166209ff23fSmrg Bool enabled; 167b7e1c893Smrg Bool initialized; 168ad43ddacSmrg Bool scaler_enabled; 169ad43ddacSmrg float vsc; 170ad43ddacSmrg float hsc; 171ad43ddacSmrg int pll_id; 1722f39173dSmrg enum radeon_pll_algo pll_algo; 173209ff23fSmrg} RADEONCrtcPrivateRec, *RADEONCrtcPrivatePtr; 174209ff23fSmrg 175b7e1c893Smrgtypedef struct _radeon_encoder { 176b7e1c893Smrg uint16_t encoder_id; 177209ff23fSmrg int devices; 178209ff23fSmrg void *dev_priv; 179b7e1c893Smrg} radeon_encoder_rec, *radeon_encoder_ptr; 180b7e1c893Smrg 181b7e1c893Smrgtypedef struct _radeon_tvout { 182b7e1c893Smrg /* TV out */ 183b7e1c893Smrg TVStd default_tvStd; 184b7e1c893Smrg TVStd tvStd; 185b7e1c893Smrg int hPos; 186b7e1c893Smrg int vPos; 187b7e1c893Smrg int hSize; 188b7e1c893Smrg float TVRefClk; 189b7e1c893Smrg int SupportedTVStds; 190b7e1c893Smrg Bool tv_on; 191b7e1c893Smrg} radeon_tvout_rec, *radeon_tvout_ptr; 192b7e1c893Smrg 193b7e1c893Smrgtypedef struct _radeon_native_mode { 194209ff23fSmrg /* panel stuff */ 195209ff23fSmrg int PanelXRes; 196209ff23fSmrg int PanelYRes; 197209ff23fSmrg int HOverPlus; 198209ff23fSmrg int HSyncWidth; 199209ff23fSmrg int HBlank; 200209ff23fSmrg int VOverPlus; 201209ff23fSmrg int VSyncWidth; 202209ff23fSmrg int VBlank; 203b7e1c893Smrg int Flags; 204209ff23fSmrg int DotClock; 205b7e1c893Smrg} radeon_native_mode_rec, *radeon_native_mode_ptr; 206b7e1c893Smrg 207b7e1c893Smrgtypedef struct _radeon_tvdac { 208b7e1c893Smrg // tv dac 209b7e1c893Smrg uint32_t ps2_tvdac_adj; 210b7e1c893Smrg uint32_t pal_tvdac_adj; 211b7e1c893Smrg uint32_t ntsc_tvdac_adj; 212b7e1c893Smrg} radeon_tvdac_rec, *radeon_tvdac_ptr; 213b7e1c893Smrg 214b7e1c893Smrgtypedef struct _radeon_tmds { 215b7e1c893Smrg // tmds 216209ff23fSmrg RADEONTMDSPll tmds_pll[4]; 217b7e1c893Smrg} radeon_tmds_rec, *radeon_tmds_ptr; 218b7e1c893Smrg 219b7e1c893Smrgtypedef struct _radeon_lvds { 220b7e1c893Smrg // panel mode 221b7e1c893Smrg radeon_native_mode_rec native_mode; 222b7e1c893Smrg // lvds 223b7e1c893Smrg int PanelPwrDly; 224b7e1c893Smrg int lvds_misc; 225b7e1c893Smrg int lvds_ss_id; 226b7e1c893Smrg} radeon_lvds_rec, *radeon_lvds_ptr; 227b7e1c893Smrg 228b7e1c893Smrgtypedef struct _radeon_dvo { 229209ff23fSmrg /* dvo */ 230c503f109Smrg I2CBusPtr pI2CBus; 231209ff23fSmrg I2CDevPtr DVOChip; 232209ff23fSmrg RADEONI2CBusRec dvo_i2c; 233209ff23fSmrg int dvo_i2c_slave_addr; 234209ff23fSmrg Bool dvo_duallink; 235b7e1c893Smrg} radeon_dvo_rec, *radeon_dvo_ptr; 236b7e1c893Smrg 237b7e1c893Smrgtypedef struct { 238b7e1c893Smrg RADEONConnectorType ConnectorType; 239b7e1c893Smrg Bool valid; 240b7e1c893Smrg int output_id; 241b7e1c893Smrg int devices; 242b7e1c893Smrg int hpd_mask; 243b7e1c893Smrg RADEONI2CBusRec ddc_i2c; 244209ff23fSmrg int igp_lane_info; 245b7e1c893Smrg Bool shared_ddc; 246b7e1c893Smrg int i2c_line_mux; 247b7e1c893Smrg Bool load_detection; 248b7e1c893Smrg Bool linkb; 249b7e1c893Smrg uint16_t connector_object; 250ad43ddacSmrg uint16_t connector_object_id; 251ad43ddacSmrg uint8_t ucI2cId; 252ad43ddacSmrg uint8_t hpd_id; 253b7e1c893Smrg} RADEONBIOSConnector; 254209ff23fSmrg 255b7e1c893Smrgtypedef struct _RADEONOutputPrivateRec { 256b7e1c893Smrg uint16_t connector_id; 257b7e1c893Smrg uint32_t devices; 258b7e1c893Smrg uint32_t active_device; 259209ff23fSmrg Bool enabled; 260b7e1c893Smrg 261b7e1c893Smrg int load_detection; 262b7e1c893Smrg 263b7e1c893Smrg // DVI/HDMI 264b7e1c893Smrg Bool coherent_mode; 265b7e1c893Smrg Bool linkb; 266b7e1c893Smrg 267b7e1c893Smrg RADEONConnectorType ConnectorType; 268ad43ddacSmrg uint16_t connector_object_id; 269b7e1c893Smrg RADEONDviType DVIType; 270b7e1c893Smrg RADEONMonitorType MonType; 271b7e1c893Smrg 272b7e1c893Smrg // DDC info 273b7e1c893Smrg I2CBusPtr pI2CBus; 274b7e1c893Smrg RADEONI2CBusRec ddc_i2c; 275b7e1c893Smrg Bool shared_ddc; 276ad43ddacSmrg 277ad43ddacSmrg Bool custom_edid; 278ad43ddacSmrg xf86MonPtr custom_mon; 279b7e1c893Smrg // router info 280b7e1c893Smrg // HDP info 281b7e1c893Smrg 282b7e1c893Smrg // panel mode 283b7e1c893Smrg radeon_native_mode_rec native_mode; 284b7e1c893Smrg 285b7e1c893Smrg // RMX 286b7e1c893Smrg RADEONRMXType rmx_type; 287b7e1c893Smrg int Flags; 288b7e1c893Smrg 289b7e1c893Smrg //tvout - move to encoder 290b7e1c893Smrg radeon_tvout_rec tvout; 291b7e1c893Smrg 292b7e1c893Smrg /* dce 3.x dig block */ 293b7e1c893Smrg int igp_lane_info; 294ad43ddacSmrg int dig_encoder; 295b7e1c893Smrg 296b7e1c893Smrg int pixel_clock; 297ad43ddacSmrg 298ad43ddacSmrg /* DP - aux bus*/ 299ad43ddacSmrg I2CBusPtr dp_pI2CBus; 300ad43ddacSmrg uint8_t ucI2cId; 301ad43ddacSmrg char dp_bus_name[20]; 302ad43ddacSmrg uint32_t dp_i2c_addr; 303ad43ddacSmrg Bool dp_i2c_running; 304ad43ddacSmrg /* DP - general config */ 305ad43ddacSmrg uint8_t dpcd[8]; 306ad43ddacSmrg int dp_lane_count; 307ad43ddacSmrg int dp_clock; 308ad43ddacSmrg uint8_t hpd_id; 309ad43ddacSmrg int pll_id; 310209ff23fSmrg} RADEONOutputPrivateRec, *RADEONOutputPrivatePtr; 311209ff23fSmrg 312209ff23fSmrgstruct avivo_pll_state { 313209ff23fSmrg uint32_t ref_div_src; 314209ff23fSmrg uint32_t ref_div; 315209ff23fSmrg uint32_t fb_div; 316209ff23fSmrg uint32_t post_div_src; 317209ff23fSmrg uint32_t post_div; 318209ff23fSmrg uint32_t ext_ppll_cntl; 319209ff23fSmrg uint32_t pll_cntl; 320209ff23fSmrg uint32_t int_ss_cntl; 321209ff23fSmrg}; 322209ff23fSmrg 323209ff23fSmrgstruct avivo_crtc_state { 324209ff23fSmrg uint32_t pll_source; 325209ff23fSmrg uint32_t h_total; 326209ff23fSmrg uint32_t h_blank_start_end; 327209ff23fSmrg uint32_t h_sync_a; 328209ff23fSmrg uint32_t h_sync_a_cntl; 329209ff23fSmrg uint32_t h_sync_b; 330209ff23fSmrg uint32_t h_sync_b_cntl; 331209ff23fSmrg uint32_t v_total; 332209ff23fSmrg uint32_t v_blank_start_end; 333209ff23fSmrg uint32_t v_sync_a; 334209ff23fSmrg uint32_t v_sync_a_cntl; 335209ff23fSmrg uint32_t v_sync_b; 336209ff23fSmrg uint32_t v_sync_b_cntl; 337209ff23fSmrg uint32_t control; 338209ff23fSmrg uint32_t blank_control; 339209ff23fSmrg uint32_t interlace_control; 340209ff23fSmrg uint32_t stereo_control; 341209ff23fSmrg uint32_t cursor_control; 342209ff23fSmrg}; 343209ff23fSmrg 344209ff23fSmrgstruct avivo_grph_state { 345209ff23fSmrg uint32_t enable; 346209ff23fSmrg uint32_t control; 347209ff23fSmrg uint32_t prim_surf_addr; 348209ff23fSmrg uint32_t sec_surf_addr; 349209ff23fSmrg uint32_t pitch; 350209ff23fSmrg uint32_t x_offset; 351209ff23fSmrg uint32_t y_offset; 352209ff23fSmrg uint32_t x_start; 353209ff23fSmrg uint32_t y_start; 354209ff23fSmrg uint32_t x_end; 355209ff23fSmrg uint32_t y_end; 356209ff23fSmrg 357b7e1c893Smrg uint32_t desktop_height; 358209ff23fSmrg uint32_t viewport_start; 359209ff23fSmrg uint32_t viewport_size; 360b7e1c893Smrg uint32_t mode_data_format; 361209ff23fSmrg}; 362209ff23fSmrg 363209ff23fSmrgstruct avivo_state 364209ff23fSmrg{ 365209ff23fSmrg uint32_t hdp_fb_location; 366209ff23fSmrg uint32_t mc_memory_map; 367209ff23fSmrg uint32_t vga_memory_base; 368209ff23fSmrg uint32_t vga_fb_start; 369209ff23fSmrg 370209ff23fSmrg uint32_t vga1_cntl; 371209ff23fSmrg uint32_t vga2_cntl; 372ad43ddacSmrg uint32_t vga_render_control; 373209ff23fSmrg 374209ff23fSmrg uint32_t crtc_master_en; 375209ff23fSmrg uint32_t crtc_tv_control; 376b7e1c893Smrg uint32_t dc_lb_memory_split; 377209ff23fSmrg 378209ff23fSmrg struct avivo_pll_state pll1; 379209ff23fSmrg struct avivo_pll_state pll2; 380209ff23fSmrg 381b7e1c893Smrg struct avivo_pll_state vga25_ppll; 382b7e1c893Smrg struct avivo_pll_state vga28_ppll; 383b7e1c893Smrg struct avivo_pll_state vga41_ppll; 384b7e1c893Smrg 385209ff23fSmrg struct avivo_crtc_state crtc1; 386209ff23fSmrg struct avivo_crtc_state crtc2; 387209ff23fSmrg 388209ff23fSmrg struct avivo_grph_state grph1; 389209ff23fSmrg struct avivo_grph_state grph2; 390209ff23fSmrg 391209ff23fSmrg /* DDIA block on RS6xx chips */ 392209ff23fSmrg uint32_t ddia[37]; 393209ff23fSmrg 394209ff23fSmrg /* scalers */ 395209ff23fSmrg uint32_t d1scl[40]; 396209ff23fSmrg uint32_t d2scl[40]; 397209ff23fSmrg uint32_t dxscl[6+2]; 398209ff23fSmrg 399209ff23fSmrg /* dac regs */ 400209ff23fSmrg uint32_t daca[26]; 401209ff23fSmrg uint32_t dacb[26]; 402209ff23fSmrg 403209ff23fSmrg /* tmdsa */ 404209ff23fSmrg uint32_t tmdsa[31]; 405209ff23fSmrg 406209ff23fSmrg /* lvtma */ 407209ff23fSmrg uint32_t lvtma[39]; 408209ff23fSmrg 409209ff23fSmrg /* dvoa */ 410209ff23fSmrg uint32_t dvoa[16]; 411209ff23fSmrg 412b7e1c893Smrg /* DCE3+ chips */ 413209ff23fSmrg uint32_t fmt1[18]; 414209ff23fSmrg uint32_t fmt2[18]; 415209ff23fSmrg uint32_t dig1[19]; 416209ff23fSmrg uint32_t dig2[19]; 417209ff23fSmrg uint32_t hdmi1[57]; 418209ff23fSmrg uint32_t hdmi2[57]; 419209ff23fSmrg uint32_t aux_cntl1[14]; 420209ff23fSmrg uint32_t aux_cntl2[14]; 421209ff23fSmrg uint32_t aux_cntl3[14]; 422209ff23fSmrg uint32_t aux_cntl4[14]; 423b7e1c893Smrg uint32_t aux_cntl5[14]; 424b7e1c893Smrg uint32_t aux_cntl6[14]; 425209ff23fSmrg uint32_t phy[10]; 426209ff23fSmrg uint32_t uniphy1[8]; 427209ff23fSmrg uint32_t uniphy2[8]; 428b7e1c893Smrg uint32_t uniphy3[8]; 429b7e1c893Smrg uint32_t uniphy4[8]; 430b7e1c893Smrg uint32_t uniphy5[8]; 431b7e1c893Smrg uint32_t uniphy6[8]; 432209ff23fSmrg 433209ff23fSmrg}; 434209ff23fSmrg 435209ff23fSmrg/* 436209ff23fSmrg * Maximum length of horizontal/vertical code timing tables for state storage 437209ff23fSmrg */ 438209ff23fSmrg#define MAX_H_CODE_TIMING_LEN 32 439209ff23fSmrg#define MAX_V_CODE_TIMING_LEN 32 440209ff23fSmrg 441209ff23fSmrgtypedef struct { 442209ff23fSmrg struct avivo_state avivo; 443209ff23fSmrg 444209ff23fSmrg /* Common registers */ 445209ff23fSmrg uint32_t ovr_clr; 446209ff23fSmrg uint32_t ovr_wid_left_right; 447209ff23fSmrg uint32_t ovr_wid_top_bottom; 448209ff23fSmrg uint32_t ov0_scale_cntl; 449209ff23fSmrg uint32_t mpp_tb_config; 450209ff23fSmrg uint32_t mpp_gp_config; 451209ff23fSmrg uint32_t subpic_cntl; 452209ff23fSmrg uint32_t viph_control; 453209ff23fSmrg uint32_t i2c_cntl_1; 454209ff23fSmrg uint32_t gen_int_cntl; 455209ff23fSmrg uint32_t cap0_trig_cntl; 456209ff23fSmrg uint32_t cap1_trig_cntl; 457209ff23fSmrg uint32_t bus_cntl; 458209ff23fSmrg 459209ff23fSmrg uint32_t bios_0_scratch; 460209ff23fSmrg uint32_t bios_1_scratch; 461209ff23fSmrg uint32_t bios_2_scratch; 462209ff23fSmrg uint32_t bios_3_scratch; 463209ff23fSmrg uint32_t bios_4_scratch; 464209ff23fSmrg uint32_t bios_5_scratch; 465209ff23fSmrg uint32_t bios_6_scratch; 466209ff23fSmrg uint32_t bios_7_scratch; 467209ff23fSmrg 468209ff23fSmrg uint32_t surface_cntl; 469209ff23fSmrg uint32_t surfaces[8][3]; 470209ff23fSmrg uint32_t mc_agp_location; 471209ff23fSmrg uint32_t mc_agp_location_hi; 472209ff23fSmrg uint32_t mc_fb_location; 473209ff23fSmrg uint32_t display_base_addr; 474209ff23fSmrg uint32_t display2_base_addr; 475209ff23fSmrg uint32_t ov0_base_addr; 476209ff23fSmrg 477209ff23fSmrg /* Other registers to save for VT switches */ 478209ff23fSmrg uint32_t dp_datatype; 479209ff23fSmrg uint32_t rbbm_soft_reset; 480209ff23fSmrg uint32_t clock_cntl_index; 481209ff23fSmrg uint32_t amcgpio_en_reg; 482209ff23fSmrg uint32_t amcgpio_mask; 483209ff23fSmrg 484209ff23fSmrg /* CRTC registers */ 485209ff23fSmrg uint32_t crtc_gen_cntl; 486209ff23fSmrg uint32_t crtc_ext_cntl; 487209ff23fSmrg uint32_t dac_cntl; 488209ff23fSmrg uint32_t crtc_h_total_disp; 489209ff23fSmrg uint32_t crtc_h_sync_strt_wid; 490209ff23fSmrg uint32_t crtc_v_total_disp; 491209ff23fSmrg uint32_t crtc_v_sync_strt_wid; 492209ff23fSmrg uint32_t crtc_offset; 493209ff23fSmrg uint32_t crtc_offset_cntl; 494209ff23fSmrg uint32_t crtc_pitch; 495209ff23fSmrg uint32_t disp_merge_cntl; 496209ff23fSmrg uint32_t grph_buffer_cntl; 497209ff23fSmrg uint32_t crtc_more_cntl; 498209ff23fSmrg uint32_t crtc_tile_x0_y0; 499209ff23fSmrg 500209ff23fSmrg /* CRTC2 registers */ 501209ff23fSmrg uint32_t crtc2_gen_cntl; 502209ff23fSmrg uint32_t dac_macro_cntl; 503209ff23fSmrg uint32_t dac2_cntl; 504209ff23fSmrg uint32_t disp_output_cntl; 505209ff23fSmrg uint32_t disp_tv_out_cntl; 506209ff23fSmrg uint32_t disp_hw_debug; 507209ff23fSmrg uint32_t disp2_merge_cntl; 508209ff23fSmrg uint32_t grph2_buffer_cntl; 509209ff23fSmrg uint32_t crtc2_h_total_disp; 510209ff23fSmrg uint32_t crtc2_h_sync_strt_wid; 511209ff23fSmrg uint32_t crtc2_v_total_disp; 512209ff23fSmrg uint32_t crtc2_v_sync_strt_wid; 513209ff23fSmrg uint32_t crtc2_offset; 514209ff23fSmrg uint32_t crtc2_offset_cntl; 515209ff23fSmrg uint32_t crtc2_pitch; 516209ff23fSmrg uint32_t crtc2_tile_x0_y0; 517209ff23fSmrg 518209ff23fSmrg /* Flat panel registers */ 519209ff23fSmrg uint32_t fp_crtc_h_total_disp; 520209ff23fSmrg uint32_t fp_crtc_v_total_disp; 521209ff23fSmrg uint32_t fp_gen_cntl; 522209ff23fSmrg uint32_t fp2_gen_cntl; 523209ff23fSmrg uint32_t fp_h_sync_strt_wid; 524209ff23fSmrg uint32_t fp_h2_sync_strt_wid; 525209ff23fSmrg uint32_t fp_horz_stretch; 526209ff23fSmrg uint32_t fp_horz_vert_active; 527209ff23fSmrg uint32_t fp_panel_cntl; 528209ff23fSmrg uint32_t fp_v_sync_strt_wid; 529209ff23fSmrg uint32_t fp_v2_sync_strt_wid; 530209ff23fSmrg uint32_t fp_vert_stretch; 531209ff23fSmrg uint32_t lvds_gen_cntl; 532209ff23fSmrg uint32_t lvds_pll_cntl; 533209ff23fSmrg uint32_t tmds_pll_cntl; 534209ff23fSmrg uint32_t tmds_transmitter_cntl; 535209ff23fSmrg 536209ff23fSmrg /* Computed values for PLL */ 537209ff23fSmrg uint32_t dot_clock_freq; 538209ff23fSmrg uint32_t pll_output_freq; 539209ff23fSmrg int feedback_div; 540209ff23fSmrg int reference_div; 541209ff23fSmrg int post_div; 542209ff23fSmrg 543209ff23fSmrg /* PLL registers */ 544209ff23fSmrg unsigned ppll_ref_div; 545209ff23fSmrg unsigned ppll_div_3; 546209ff23fSmrg uint32_t htotal_cntl; 547209ff23fSmrg uint32_t vclk_ecp_cntl; 548209ff23fSmrg 549209ff23fSmrg /* Computed values for PLL2 */ 550209ff23fSmrg uint32_t dot_clock_freq_2; 551209ff23fSmrg uint32_t pll_output_freq_2; 552209ff23fSmrg int feedback_div_2; 553209ff23fSmrg int reference_div_2; 554209ff23fSmrg int post_div_2; 555209ff23fSmrg 556209ff23fSmrg /* PLL2 registers */ 557209ff23fSmrg uint32_t p2pll_ref_div; 558209ff23fSmrg uint32_t p2pll_div_0; 559209ff23fSmrg uint32_t htotal_cntl2; 560209ff23fSmrg uint32_t pixclks_cntl; 561209ff23fSmrg 562209ff23fSmrg /* Pallet */ 563209ff23fSmrg Bool palette_valid; 564209ff23fSmrg uint32_t palette[256]; 565209ff23fSmrg uint32_t palette2[256]; 566209ff23fSmrg 567209ff23fSmrg uint32_t disp2_req_cntl1; 568209ff23fSmrg uint32_t disp2_req_cntl2; 569209ff23fSmrg uint32_t dmif_mem_cntl1; 570209ff23fSmrg uint32_t disp1_req_cntl1; 571209ff23fSmrg 572209ff23fSmrg uint32_t fp_2nd_gen_cntl; 573209ff23fSmrg uint32_t fp2_2_gen_cntl; 574209ff23fSmrg uint32_t tmds2_cntl; 575209ff23fSmrg uint32_t tmds2_transmitter_cntl; 576209ff23fSmrg 577209ff23fSmrg 578209ff23fSmrg /* TV out registers */ 579209ff23fSmrg uint32_t tv_master_cntl; 580209ff23fSmrg uint32_t tv_htotal; 581209ff23fSmrg uint32_t tv_hsize; 582209ff23fSmrg uint32_t tv_hdisp; 583209ff23fSmrg uint32_t tv_hstart; 584209ff23fSmrg uint32_t tv_vtotal; 585209ff23fSmrg uint32_t tv_vdisp; 586209ff23fSmrg uint32_t tv_timing_cntl; 587209ff23fSmrg uint32_t tv_vscaler_cntl1; 588209ff23fSmrg uint32_t tv_vscaler_cntl2; 589209ff23fSmrg uint32_t tv_sync_size; 590209ff23fSmrg uint32_t tv_vrestart; 591209ff23fSmrg uint32_t tv_hrestart; 592209ff23fSmrg uint32_t tv_frestart; 593209ff23fSmrg uint32_t tv_ftotal; 594209ff23fSmrg uint32_t tv_clock_sel_cntl; 595209ff23fSmrg uint32_t tv_clkout_cntl; 596209ff23fSmrg uint32_t tv_data_delay_a; 597209ff23fSmrg uint32_t tv_data_delay_b; 598209ff23fSmrg uint32_t tv_dac_cntl; 599209ff23fSmrg uint32_t tv_pll_cntl; 600209ff23fSmrg uint32_t tv_pll_cntl1; 601209ff23fSmrg uint32_t tv_pll_fine_cntl; 602209ff23fSmrg uint32_t tv_modulator_cntl1; 603209ff23fSmrg uint32_t tv_modulator_cntl2; 604209ff23fSmrg uint32_t tv_frame_lock_cntl; 605209ff23fSmrg uint32_t tv_pre_dac_mux_cntl; 606209ff23fSmrg uint32_t tv_rgb_cntl; 607209ff23fSmrg uint32_t tv_y_saw_tooth_cntl; 608209ff23fSmrg uint32_t tv_y_rise_cntl; 609209ff23fSmrg uint32_t tv_y_fall_cntl; 610209ff23fSmrg uint32_t tv_uv_adr; 611209ff23fSmrg uint32_t tv_upsamp_and_gain_cntl; 612209ff23fSmrg uint32_t tv_gain_limit_settings; 613209ff23fSmrg uint32_t tv_linear_gain_settings; 614209ff23fSmrg uint32_t tv_crc_cntl; 615209ff23fSmrg uint32_t tv_sync_cntl; 616209ff23fSmrg uint32_t gpiopad_a; 617209ff23fSmrg uint32_t pll_test_cntl; 618209ff23fSmrg 619209ff23fSmrg uint16_t h_code_timing[MAX_H_CODE_TIMING_LEN]; 620209ff23fSmrg uint16_t v_code_timing[MAX_V_CODE_TIMING_LEN]; 621209ff23fSmrg 622209ff23fSmrg} RADEONSaveRec, *RADEONSavePtr; 623209ff23fSmrg 624209ff23fSmrgtypedef struct 625209ff23fSmrg{ 626209ff23fSmrg Bool HasSecondary; 627209ff23fSmrg Bool HasCRTC2; /* All cards except original Radeon */ 628209ff23fSmrg /* 629209ff23fSmrg * The next two are used to make sure CRTC2 is restored before CRTC_EXT, 630209ff23fSmrg * otherwise it could lead to blank screens. 631209ff23fSmrg */ 632209ff23fSmrg Bool IsSecondaryRestored; 633209ff23fSmrg Bool RestorePrimary; 634209ff23fSmrg 635209ff23fSmrg Bool ReversedDAC; /* TVDAC used as primary dac */ 636209ff23fSmrg Bool ReversedTMDS; /* DDC_DVI is used for external TMDS */ 637209ff23fSmrg xf86CrtcPtr pCrtc[RADEON_MAX_CRTC]; 638209ff23fSmrg RADEONCrtcPrivatePtr Controller[RADEON_MAX_CRTC]; 639209ff23fSmrg 640209ff23fSmrg ScrnInfoPtr pSecondaryScrn; 641209ff23fSmrg ScrnInfoPtr pPrimaryScrn; 642209ff23fSmrg 643209ff23fSmrg RADEONSaveRec ModeReg; /* Current mode */ 644209ff23fSmrg RADEONSaveRec SavedReg; /* Original (text) mode */ 645209ff23fSmrg 646209ff23fSmrg void *MMIO; /* Map of MMIO region */ 6472f39173dSmrg int MMIO_cnt; /* Map of FB region refcount */ 6482f39173dSmrg void *FB; /* Map of FB region */ 6492f39173dSmrg int FB_cnt; /* Map of FB region refcount */ 650ad43ddacSmrg int fd; /* for sharing across zaphod heads */ 651209ff23fSmrg} RADEONEntRec, *RADEONEntPtr; 652209ff23fSmrg 653209ff23fSmrg/* radeon_probe.c */ 654209ff23fSmrgextern PciChipsets RADEONPciChipsets[]; 655209ff23fSmrg 656209ff23fSmrg/* radeon_driver.c */ 657209ff23fSmrgextern Bool RADEONPreInit(ScrnInfoPtr, int); 658209ff23fSmrgextern Bool RADEONScreenInit(int, ScreenPtr, int, char **); 659209ff23fSmrgextern Bool RADEONSwitchMode(int, DisplayModePtr, int); 660209ff23fSmrg#ifdef X_XF86MiscPassMessage 661209ff23fSmrgextern Bool RADEONHandleMessage(int, const char*, const char*, 662209ff23fSmrg char**); 663209ff23fSmrg#endif 664209ff23fSmrgextern void RADEONAdjustFrame(int, int, int, int); 665209ff23fSmrgextern Bool RADEONEnterVT(int, int); 666209ff23fSmrgextern void RADEONLeaveVT(int, int); 667209ff23fSmrgextern void RADEONFreeScreen(int, int); 668209ff23fSmrgextern ModeStatus RADEONValidMode(int, DisplayModePtr, Bool, int); 669209ff23fSmrg 670209ff23fSmrgextern const OptionInfoRec *RADEONOptionsWeak(void); 671209ff23fSmrg 672ad43ddacSmrg#ifdef XF86DRM_MODE 673ad43ddacSmrgextern Bool RADEONPreInit_KMS(ScrnInfoPtr, int); 674ad43ddacSmrgextern Bool RADEONScreenInit_KMS(int, ScreenPtr, int, char **); 675ad43ddacSmrgextern Bool RADEONSwitchMode_KMS(int, DisplayModePtr, int); 676ad43ddacSmrgextern void RADEONAdjustFrame_KMS(int, int, int, int); 677ad43ddacSmrgextern Bool RADEONEnterVT_KMS(int, int); 678ad43ddacSmrgextern void RADEONLeaveVT_KMS(int, int); 679ad43ddacSmrgextern void RADEONFreeScreen_KMS(int scrnIndex, int flags); 680ad43ddacSmrg#endif 681ad43ddacSmrg 682209ff23fSmrg#endif /* _RADEON_PROBE_H_ */ 683