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" 4743df4709Smrg#ifdef USE_EXA 48209ff23fSmrg#include "exa.h" 4943df4709Smrg#endif 5043df4709Smrg#ifdef USE_XAA 5143df4709Smrg#include "xaa.h" 5243df4709Smrg#endif 53209ff23fSmrg 54209ff23fSmrgextern DriverRec RADEON; 55209ff23fSmrg 5643df4709Smrg#define RADEON_MAX_CRTC 6 5743df4709Smrg#define RADEON_MAX_BIOS_CONNECTOR 16 5843df4709Smrg 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 12643df4709Smrgtypedef enum 12743df4709Smrg{ 12843df4709Smrg MT_UNKNOWN = -1, 12943df4709Smrg MT_NONE = 0, 13043df4709Smrg MT_CRT = 1, 13143df4709Smrg MT_LCD = 2, 13243df4709Smrg MT_DFP = 3, 13343df4709Smrg MT_CTV = 4, 13443df4709Smrg MT_STV = 5, 13543df4709Smrg MT_CV = 6, 13643df4709Smrg MT_HDMI = 7, // this should really just be MT_DFP 13743df4709Smrg MT_DP = 8 13843df4709Smrg} RADEONMonitorType; 13943df4709Smrg 14043df4709Smrgtypedef enum 14143df4709Smrg{ 14243df4709Smrg CONNECTOR_NONE, 14343df4709Smrg CONNECTOR_VGA, 14443df4709Smrg CONNECTOR_DVI_I, 14543df4709Smrg CONNECTOR_DVI_D, 14643df4709Smrg CONNECTOR_DVI_A, 14743df4709Smrg CONNECTOR_STV, 14843df4709Smrg CONNECTOR_CTV, 14943df4709Smrg CONNECTOR_LVDS, 15043df4709Smrg CONNECTOR_DIGITAL, 15143df4709Smrg CONNECTOR_SCART, 15243df4709Smrg CONNECTOR_HDMI_TYPE_A, 15343df4709Smrg CONNECTOR_HDMI_TYPE_B, 15443df4709Smrg CONNECTOR_0XC, 15543df4709Smrg CONNECTOR_0XD, 15643df4709Smrg CONNECTOR_DIN, 15743df4709Smrg CONNECTOR_DISPLAY_PORT, 15843df4709Smrg CONNECTOR_EDP, 15943df4709Smrg CONNECTOR_UNSUPPORTED 16043df4709Smrg} RADEONConnectorType; 16143df4709Smrg 16243df4709Smrgtypedef enum 16343df4709Smrg{ 16443df4709Smrg DVI_AUTO, 16543df4709Smrg DVI_DIGITAL, 16643df4709Smrg DVI_ANALOG 16743df4709Smrg} RADEONDviType; 16843df4709Smrg 16943df4709Smrgtypedef enum 17043df4709Smrg{ 17143df4709Smrg RMX_OFF, 17243df4709Smrg RMX_FULL, 17343df4709Smrg RMX_CENTER, 17443df4709Smrg RMX_ASPECT 17543df4709Smrg} RADEONRMXType; 17643df4709Smrg 17743df4709Smrgtypedef struct { 17843df4709Smrg uint32_t freq; 17943df4709Smrg uint32_t value; 18043df4709Smrg}RADEONTMDSPll; 18143df4709Smrg 18243df4709Smrg/* standards */ 18343df4709Smrgtypedef enum 18443df4709Smrg{ 18543df4709Smrg TV_STD_NTSC = 1, 18643df4709Smrg TV_STD_PAL = 2, 18743df4709Smrg TV_STD_PAL_M = 4, 18843df4709Smrg TV_STD_PAL_60 = 8, 18943df4709Smrg TV_STD_NTSC_J = 16, 19043df4709Smrg TV_STD_SCART_PAL = 32, 19143df4709Smrg TV_STD_SECAM = 64, 19243df4709Smrg TV_STD_PAL_CN = 128, 19343df4709Smrg} TVStd; 19443df4709Smrg 195209ff23fSmrgtypedef struct 196209ff23fSmrg{ 19743df4709Smrg Bool valid; 19843df4709Smrg uint32_t mask_clk_reg; 19943df4709Smrg uint32_t mask_data_reg; 20043df4709Smrg uint32_t a_clk_reg; 20143df4709Smrg uint32_t a_data_reg; 20243df4709Smrg uint32_t put_clk_reg; 20343df4709Smrg uint32_t put_data_reg; 20443df4709Smrg uint32_t get_clk_reg; 20543df4709Smrg uint32_t get_data_reg; 20643df4709Smrg uint32_t mask_clk_mask; 20743df4709Smrg uint32_t mask_data_mask; 20843df4709Smrg uint32_t put_clk_mask; 20943df4709Smrg uint32_t put_data_mask; 21043df4709Smrg uint32_t get_clk_mask; 21143df4709Smrg uint32_t get_data_mask; 21243df4709Smrg uint32_t a_clk_mask; 21343df4709Smrg uint32_t a_data_mask; 21443df4709Smrg int hw_line; 21543df4709Smrg Bool hw_capable; 21643df4709Smrg} RADEONI2CBusRec, *RADEONI2CBusPtr; 21743df4709Smrg 21843df4709Smrgenum radeon_pll_algo { 21943df4709Smrg RADEON_PLL_OLD, 22043df4709Smrg RADEON_PLL_NEW 22143df4709Smrg}; 22243df4709Smrg 22343df4709Smrgtypedef struct _RADEONCrtcPrivateRec { 22443df4709Smrg void *crtc_rotate_mem; 22543df4709Smrg void *cursor_mem; 22643df4709Smrg int crtc_id; 22743df4709Smrg int binding; 22843df4709Smrg uint32_t cursor_offset; 22943df4709Smrg /* Lookup table values to be set when the CRTC is enabled */ 23043df4709Smrg uint16_t lut_r[256], lut_g[256], lut_b[256]; 23143df4709Smrg 23243df4709Smrg uint32_t crtc_offset; 23343df4709Smrg int can_tile; 23443df4709Smrg Bool enabled; 23543df4709Smrg Bool initialized; 23643df4709Smrg Bool scaler_enabled; 23743df4709Smrg float vsc; 23843df4709Smrg float hsc; 23943df4709Smrg int pll_id; 24043df4709Smrg enum radeon_pll_algo pll_algo; 24143df4709Smrg} RADEONCrtcPrivateRec, *RADEONCrtcPrivatePtr; 24243df4709Smrg 24343df4709Smrgtypedef struct _radeon_encoder { 24443df4709Smrg uint16_t encoder_id; 24543df4709Smrg int devices; 24643df4709Smrg void *dev_priv; 24743df4709Smrg} radeon_encoder_rec, *radeon_encoder_ptr; 24843df4709Smrg 24943df4709Smrgtypedef struct _radeon_tvout { 25043df4709Smrg /* TV out */ 25143df4709Smrg TVStd default_tvStd; 25243df4709Smrg TVStd tvStd; 25343df4709Smrg int hPos; 25443df4709Smrg int vPos; 25543df4709Smrg int hSize; 25643df4709Smrg float TVRefClk; 25743df4709Smrg int SupportedTVStds; 25843df4709Smrg Bool tv_on; 25943df4709Smrg} radeon_tvout_rec, *radeon_tvout_ptr; 26043df4709Smrg 26143df4709Smrgtypedef struct _radeon_native_mode { 26243df4709Smrg /* panel stuff */ 26343df4709Smrg int PanelXRes; 26443df4709Smrg int PanelYRes; 26543df4709Smrg int HOverPlus; 26643df4709Smrg int HSyncWidth; 26743df4709Smrg int HBlank; 26843df4709Smrg int VOverPlus; 26943df4709Smrg int VSyncWidth; 27043df4709Smrg int VBlank; 27143df4709Smrg int Flags; 27243df4709Smrg int DotClock; 27343df4709Smrg} radeon_native_mode_rec, *radeon_native_mode_ptr; 27443df4709Smrg 27543df4709Smrgtypedef struct _radeon_tvdac { 27643df4709Smrg // tv dac 27743df4709Smrg uint32_t ps2_tvdac_adj; 27843df4709Smrg uint32_t pal_tvdac_adj; 27943df4709Smrg uint32_t ntsc_tvdac_adj; 28043df4709Smrg} radeon_tvdac_rec, *radeon_tvdac_ptr; 28143df4709Smrg 28243df4709Smrgtypedef struct _radeon_tmds { 28343df4709Smrg // tmds 28443df4709Smrg RADEONTMDSPll tmds_pll[4]; 28543df4709Smrg} radeon_tmds_rec, *radeon_tmds_ptr; 28643df4709Smrg 28743df4709Smrgtypedef struct _radeon_lvds { 28843df4709Smrg // panel mode 28943df4709Smrg radeon_native_mode_rec native_mode; 29043df4709Smrg // lvds 29143df4709Smrg int PanelPwrDly; 29243df4709Smrg int lvds_misc; 29343df4709Smrg int lvds_ss_id; 29443df4709Smrg} radeon_lvds_rec, *radeon_lvds_ptr; 29543df4709Smrg 29643df4709Smrgtypedef struct _radeon_dvo { 29743df4709Smrg /* dvo */ 29843df4709Smrg I2CBusPtr pI2CBus; 29943df4709Smrg I2CDevPtr DVOChip; 30043df4709Smrg RADEONI2CBusRec dvo_i2c; 30143df4709Smrg int dvo_i2c_slave_addr; 30243df4709Smrg Bool dvo_duallink; 30343df4709Smrg} radeon_dvo_rec, *radeon_dvo_ptr; 30443df4709Smrg 30543df4709Smrgtypedef struct { 30643df4709Smrg RADEONConnectorType ConnectorType; 30743df4709Smrg Bool valid; 30843df4709Smrg int output_id; 30943df4709Smrg int devices; 31043df4709Smrg int hpd_mask; 31143df4709Smrg RADEONI2CBusRec ddc_i2c; 31243df4709Smrg int igp_lane_info; 31343df4709Smrg Bool shared_ddc; 31443df4709Smrg int i2c_line_mux; 31543df4709Smrg Bool load_detection; 31643df4709Smrg Bool linkb; 31743df4709Smrg uint16_t connector_object; 31843df4709Smrg uint16_t connector_object_id; 31943df4709Smrg uint8_t ucI2cId; 32043df4709Smrg uint8_t hpd_id; 32143df4709Smrg} RADEONBIOSConnector; 32243df4709Smrg 32343df4709Smrgtypedef struct _RADEONOutputPrivateRec { 32443df4709Smrg uint16_t connector_id; 32543df4709Smrg uint32_t devices; 32643df4709Smrg uint32_t active_device; 32743df4709Smrg Bool enabled; 32843df4709Smrg 32943df4709Smrg int load_detection; 33043df4709Smrg 33143df4709Smrg // DVI/HDMI 33243df4709Smrg Bool coherent_mode; 33343df4709Smrg Bool linkb; 33443df4709Smrg 33543df4709Smrg RADEONConnectorType ConnectorType; 33643df4709Smrg uint16_t connector_object_id; 33743df4709Smrg RADEONDviType DVIType; 33843df4709Smrg RADEONMonitorType MonType; 33943df4709Smrg 34043df4709Smrg // DDC info 34143df4709Smrg I2CBusPtr pI2CBus; 34243df4709Smrg RADEONI2CBusRec ddc_i2c; 34343df4709Smrg Bool shared_ddc; 34443df4709Smrg 34543df4709Smrg Bool custom_edid; 34643df4709Smrg xf86MonPtr custom_mon; 34743df4709Smrg // router info 34843df4709Smrg // HDP info 34943df4709Smrg 35043df4709Smrg // panel mode 35143df4709Smrg radeon_native_mode_rec native_mode; 35243df4709Smrg 35343df4709Smrg // RMX 35443df4709Smrg RADEONRMXType rmx_type; 35543df4709Smrg int Flags; 35643df4709Smrg 35743df4709Smrg //tvout - move to encoder 35843df4709Smrg radeon_tvout_rec tvout; 35943df4709Smrg 36043df4709Smrg /* dce 3.x dig block */ 36143df4709Smrg int igp_lane_info; 36243df4709Smrg int dig_encoder; 36343df4709Smrg 36443df4709Smrg int pixel_clock; 36543df4709Smrg 36643df4709Smrg /* DP - aux bus*/ 36743df4709Smrg I2CBusPtr dp_pI2CBus; 36843df4709Smrg uint8_t ucI2cId; 36943df4709Smrg char dp_bus_name[20]; 37043df4709Smrg uint32_t dp_i2c_addr; 37143df4709Smrg Bool dp_i2c_running; 37243df4709Smrg /* DP - general config */ 37343df4709Smrg uint8_t dpcd[8]; 37443df4709Smrg int dp_lane_count; 37543df4709Smrg int dp_clock; 37643df4709Smrg uint8_t hpd_id; 37743df4709Smrg int pll_id; 37843df4709Smrg} RADEONOutputPrivateRec, *RADEONOutputPrivatePtr; 37943df4709Smrg 38043df4709Smrgstruct avivo_pll_state { 38143df4709Smrg uint32_t ref_div_src; 38243df4709Smrg uint32_t ref_div; 38343df4709Smrg uint32_t fb_div; 38443df4709Smrg uint32_t post_div_src; 38543df4709Smrg uint32_t post_div; 38643df4709Smrg uint32_t ext_ppll_cntl; 38743df4709Smrg uint32_t pll_cntl; 38843df4709Smrg uint32_t int_ss_cntl; 38943df4709Smrg}; 39043df4709Smrg 39143df4709Smrgstruct avivo_crtc_state { 39243df4709Smrg uint32_t pll_source; 39343df4709Smrg uint32_t h_total; 39443df4709Smrg uint32_t h_blank_start_end; 39543df4709Smrg uint32_t h_sync_a; 39643df4709Smrg uint32_t h_sync_a_cntl; 39743df4709Smrg uint32_t h_sync_b; 39843df4709Smrg uint32_t h_sync_b_cntl; 39943df4709Smrg uint32_t v_total; 40043df4709Smrg uint32_t v_blank_start_end; 40143df4709Smrg uint32_t v_sync_a; 40243df4709Smrg uint32_t v_sync_a_cntl; 40343df4709Smrg uint32_t v_sync_b; 40443df4709Smrg uint32_t v_sync_b_cntl; 40543df4709Smrg uint32_t control; 40643df4709Smrg uint32_t blank_control; 40743df4709Smrg uint32_t interlace_control; 40843df4709Smrg uint32_t stereo_control; 40943df4709Smrg uint32_t cursor_control; 41043df4709Smrg}; 41143df4709Smrg 41243df4709Smrgstruct avivo_grph_state { 41343df4709Smrg uint32_t enable; 41443df4709Smrg uint32_t control; 41543df4709Smrg uint32_t swap_control; 41643df4709Smrg uint32_t prim_surf_addr; 41743df4709Smrg uint32_t sec_surf_addr; 41843df4709Smrg uint32_t pitch; 41943df4709Smrg uint32_t prim_surf_addr_hi; 42043df4709Smrg uint32_t sec_surf_addr_hi; 42143df4709Smrg uint32_t x_offset; 42243df4709Smrg uint32_t y_offset; 42343df4709Smrg uint32_t x_start; 42443df4709Smrg uint32_t y_start; 42543df4709Smrg uint32_t x_end; 42643df4709Smrg uint32_t y_end; 42743df4709Smrg 42843df4709Smrg uint32_t desktop_height; 42943df4709Smrg uint32_t viewport_start; 43043df4709Smrg uint32_t viewport_size; 43143df4709Smrg uint32_t mode_data_format; 43243df4709Smrg}; 43343df4709Smrg 43443df4709Smrgstruct dce4_main_block_state { 43543df4709Smrg struct avivo_grph_state grph; 43643df4709Smrg uint32_t scl[6]; 43743df4709Smrg uint32_t crtc[15]; 43843df4709Smrg uint32_t fmt[10]; 43943df4709Smrg uint32_t dig[20]; 44043df4709Smrg}; 44143df4709Smrg 44243df4709Smrgstruct dce4_state 44343df4709Smrg{ 44443df4709Smrg 44543df4709Smrg uint32_t vga1_cntl; 44643df4709Smrg uint32_t vga2_cntl; 44743df4709Smrg uint32_t vga3_cntl; 44843df4709Smrg uint32_t vga4_cntl; 44943df4709Smrg uint32_t vga5_cntl; 45043df4709Smrg uint32_t vga6_cntl; 45143df4709Smrg uint32_t vga_render_control; 45243df4709Smrg 45343df4709Smrg struct dce4_main_block_state block[6]; 45443df4709Smrg 45543df4709Smrg uint32_t vga_pll[3][3]; 45643df4709Smrg uint32_t pll[2][15]; 45743df4709Smrg uint32_t pll_route[6]; 45843df4709Smrg 45943df4709Smrg uint32_t dac[2][26]; 46043df4709Smrg uint32_t uniphy[6][10]; 46143df4709Smrg 46243df4709Smrg uint32_t dig[20]; 46343df4709Smrg}; 46443df4709Smrg 46543df4709Smrgstruct avivo_state 46643df4709Smrg{ 46743df4709Smrg uint32_t hdp_fb_location; 46843df4709Smrg uint32_t mc_memory_map; 46943df4709Smrg uint32_t vga_memory_base; 47043df4709Smrg uint32_t vga_fb_start; 47143df4709Smrg 47243df4709Smrg uint32_t vga1_cntl; 47343df4709Smrg uint32_t vga2_cntl; 47443df4709Smrg uint32_t vga3_cntl; 47543df4709Smrg uint32_t vga4_cntl; 47643df4709Smrg uint32_t vga5_cntl; 47743df4709Smrg uint32_t vga6_cntl; 47843df4709Smrg uint32_t vga_render_control; 47943df4709Smrg 48043df4709Smrg uint32_t crtc_master_en; 48143df4709Smrg uint32_t crtc_tv_control; 48243df4709Smrg uint32_t dc_lb_memory_split; 48343df4709Smrg 48443df4709Smrg struct avivo_pll_state pll[2]; 48543df4709Smrg 48643df4709Smrg struct avivo_pll_state vga25_ppll; 48743df4709Smrg struct avivo_pll_state vga28_ppll; 48843df4709Smrg struct avivo_pll_state vga41_ppll; 48943df4709Smrg 49043df4709Smrg struct avivo_crtc_state crtc[2]; 49143df4709Smrg 49243df4709Smrg struct avivo_grph_state grph[2]; 49343df4709Smrg 49443df4709Smrg /* DDIA block on RS6xx chips */ 49543df4709Smrg uint32_t ddia[37]; 49643df4709Smrg 49743df4709Smrg /* scalers */ 49843df4709Smrg uint32_t d1scl[40]; 49943df4709Smrg uint32_t d2scl[40]; 50043df4709Smrg uint32_t dxscl[6+2]; 50143df4709Smrg 50243df4709Smrg /* dac regs */ 50343df4709Smrg uint32_t daca[26]; 50443df4709Smrg uint32_t dacb[26]; 50543df4709Smrg 50643df4709Smrg /* tmdsa */ 50743df4709Smrg uint32_t tmdsa[31]; 50843df4709Smrg 50943df4709Smrg /* lvtma */ 51043df4709Smrg uint32_t lvtma[39]; 51143df4709Smrg 51243df4709Smrg /* dvoa */ 51343df4709Smrg uint32_t dvoa[16]; 51443df4709Smrg 51543df4709Smrg /* DCE3+ chips */ 51643df4709Smrg uint32_t fmt1[18]; 51743df4709Smrg uint32_t fmt2[18]; 51843df4709Smrg uint32_t dig1[19]; 51943df4709Smrg uint32_t dig2[19]; 52043df4709Smrg uint32_t hdmi1[57]; 52143df4709Smrg uint32_t hdmi2[57]; 52243df4709Smrg uint32_t aux_cntl1[14]; 52343df4709Smrg uint32_t aux_cntl2[14]; 52443df4709Smrg uint32_t aux_cntl3[14]; 52543df4709Smrg uint32_t aux_cntl4[14]; 52643df4709Smrg uint32_t aux_cntl5[14]; 52743df4709Smrg uint32_t aux_cntl6[14]; 52843df4709Smrg uint32_t phy[10]; 52943df4709Smrg uint32_t uniphy1[8]; 53043df4709Smrg uint32_t uniphy2[8]; 53143df4709Smrg uint32_t uniphy3[8]; 53243df4709Smrg uint32_t uniphy4[8]; 53343df4709Smrg uint32_t uniphy5[8]; 53443df4709Smrg uint32_t uniphy6[8]; 53543df4709Smrg 53643df4709Smrg}; 53743df4709Smrg 53843df4709Smrg/* 53943df4709Smrg * Maximum length of horizontal/vertical code timing tables for state storage 54043df4709Smrg */ 54143df4709Smrg#define MAX_H_CODE_TIMING_LEN 32 54243df4709Smrg#define MAX_V_CODE_TIMING_LEN 32 54343df4709Smrg 54443df4709Smrgtypedef struct { 54543df4709Smrg struct avivo_state avivo; 54643df4709Smrg struct dce4_state dce4; 54743df4709Smrg 54843df4709Smrg /* Common registers */ 54943df4709Smrg uint32_t ovr_clr; 55043df4709Smrg uint32_t ovr_wid_left_right; 55143df4709Smrg uint32_t ovr_wid_top_bottom; 55243df4709Smrg uint32_t ov0_scale_cntl; 55343df4709Smrg uint32_t mpp_tb_config; 55443df4709Smrg uint32_t mpp_gp_config; 55543df4709Smrg uint32_t subpic_cntl; 55643df4709Smrg uint32_t viph_control; 55743df4709Smrg uint32_t i2c_cntl_1; 55843df4709Smrg uint32_t gen_int_cntl; 55943df4709Smrg uint32_t cap0_trig_cntl; 56043df4709Smrg uint32_t cap1_trig_cntl; 56143df4709Smrg uint32_t bus_cntl; 56243df4709Smrg 56343df4709Smrg uint32_t bios_0_scratch; 56443df4709Smrg uint32_t bios_1_scratch; 56543df4709Smrg uint32_t bios_2_scratch; 56643df4709Smrg uint32_t bios_3_scratch; 56743df4709Smrg uint32_t bios_4_scratch; 56843df4709Smrg uint32_t bios_5_scratch; 56943df4709Smrg uint32_t bios_6_scratch; 57043df4709Smrg uint32_t bios_7_scratch; 57143df4709Smrg 57243df4709Smrg uint32_t surface_cntl; 57343df4709Smrg uint32_t surfaces[8][3]; 57443df4709Smrg uint32_t mc_agp_location; 57543df4709Smrg uint32_t mc_agp_location_hi; 57643df4709Smrg uint32_t mc_fb_location; 57743df4709Smrg uint32_t display_base_addr; 57843df4709Smrg uint32_t display2_base_addr; 57943df4709Smrg uint32_t ov0_base_addr; 58043df4709Smrg 58143df4709Smrg /* Other registers to save for VT switches */ 58243df4709Smrg uint32_t dp_datatype; 58343df4709Smrg uint32_t rbbm_soft_reset; 58443df4709Smrg uint32_t clock_cntl_index; 58543df4709Smrg uint32_t amcgpio_en_reg; 58643df4709Smrg uint32_t amcgpio_mask; 58743df4709Smrg 58843df4709Smrg /* CRTC registers */ 58943df4709Smrg uint32_t crtc_gen_cntl; 59043df4709Smrg uint32_t crtc_ext_cntl; 59143df4709Smrg uint32_t dac_cntl; 59243df4709Smrg uint32_t crtc_h_total_disp; 59343df4709Smrg uint32_t crtc_h_sync_strt_wid; 59443df4709Smrg uint32_t crtc_v_total_disp; 59543df4709Smrg uint32_t crtc_v_sync_strt_wid; 59643df4709Smrg uint32_t crtc_offset; 59743df4709Smrg uint32_t crtc_offset_cntl; 59843df4709Smrg uint32_t crtc_pitch; 59943df4709Smrg uint32_t disp_merge_cntl; 60043df4709Smrg uint32_t grph_buffer_cntl; 60143df4709Smrg uint32_t crtc_more_cntl; 60243df4709Smrg uint32_t crtc_tile_x0_y0; 60343df4709Smrg 60443df4709Smrg /* CRTC2 registers */ 60543df4709Smrg uint32_t crtc2_gen_cntl; 60643df4709Smrg uint32_t dac_macro_cntl; 60743df4709Smrg uint32_t dac2_cntl; 60843df4709Smrg uint32_t disp_output_cntl; 60943df4709Smrg uint32_t disp_tv_out_cntl; 61043df4709Smrg uint32_t disp_hw_debug; 61143df4709Smrg uint32_t disp2_merge_cntl; 61243df4709Smrg uint32_t grph2_buffer_cntl; 61343df4709Smrg uint32_t crtc2_h_total_disp; 61443df4709Smrg uint32_t crtc2_h_sync_strt_wid; 61543df4709Smrg uint32_t crtc2_v_total_disp; 61643df4709Smrg uint32_t crtc2_v_sync_strt_wid; 61743df4709Smrg uint32_t crtc2_offset; 61843df4709Smrg uint32_t crtc2_offset_cntl; 61943df4709Smrg uint32_t crtc2_pitch; 62043df4709Smrg uint32_t crtc2_tile_x0_y0; 62143df4709Smrg 62243df4709Smrg /* Flat panel registers */ 62343df4709Smrg uint32_t fp_crtc_h_total_disp; 62443df4709Smrg uint32_t fp_crtc_v_total_disp; 62543df4709Smrg uint32_t fp_gen_cntl; 62643df4709Smrg uint32_t fp2_gen_cntl; 62743df4709Smrg uint32_t fp_h_sync_strt_wid; 62843df4709Smrg uint32_t fp_h2_sync_strt_wid; 62943df4709Smrg uint32_t fp_horz_stretch; 63043df4709Smrg uint32_t fp_horz_vert_active; 63143df4709Smrg uint32_t fp_panel_cntl; 63243df4709Smrg uint32_t fp_v_sync_strt_wid; 63343df4709Smrg uint32_t fp_v2_sync_strt_wid; 63443df4709Smrg uint32_t fp_vert_stretch; 63543df4709Smrg uint32_t lvds_gen_cntl; 63643df4709Smrg uint32_t lvds_pll_cntl; 63743df4709Smrg uint32_t tmds_pll_cntl; 63843df4709Smrg uint32_t tmds_transmitter_cntl; 63943df4709Smrg 64043df4709Smrg /* Computed values for PLL */ 64143df4709Smrg uint32_t dot_clock_freq; 64243df4709Smrg uint32_t pll_output_freq; 64343df4709Smrg int feedback_div; 64443df4709Smrg int reference_div; 64543df4709Smrg int post_div; 64643df4709Smrg 64743df4709Smrg /* PLL registers */ 64843df4709Smrg unsigned ppll_ref_div; 64943df4709Smrg unsigned ppll_div_3; 65043df4709Smrg uint32_t htotal_cntl; 65143df4709Smrg uint32_t vclk_ecp_cntl; 65243df4709Smrg 65343df4709Smrg /* Computed values for PLL2 */ 65443df4709Smrg uint32_t dot_clock_freq_2; 65543df4709Smrg uint32_t pll_output_freq_2; 65643df4709Smrg int feedback_div_2; 65743df4709Smrg int reference_div_2; 65843df4709Smrg int post_div_2; 65943df4709Smrg 66043df4709Smrg /* PLL2 registers */ 66143df4709Smrg uint32_t p2pll_ref_div; 66243df4709Smrg uint32_t p2pll_div_0; 66343df4709Smrg uint32_t htotal_cntl2; 66443df4709Smrg uint32_t pixclks_cntl; 66543df4709Smrg 66643df4709Smrg /* Pallet */ 66743df4709Smrg Bool palette_valid; 66843df4709Smrg Bool palette_saved[2]; 66943df4709Smrg uint32_t palette[2][256]; 67043df4709Smrg 67143df4709Smrg uint32_t disp2_req_cntl1; 67243df4709Smrg uint32_t disp2_req_cntl2; 67343df4709Smrg uint32_t dmif_mem_cntl1; 67443df4709Smrg uint32_t disp1_req_cntl1; 67543df4709Smrg 67643df4709Smrg uint32_t fp_2nd_gen_cntl; 67743df4709Smrg uint32_t fp2_2_gen_cntl; 67843df4709Smrg uint32_t tmds2_cntl; 67943df4709Smrg uint32_t tmds2_transmitter_cntl; 68043df4709Smrg 68143df4709Smrg 68243df4709Smrg /* TV out registers */ 68343df4709Smrg uint32_t tv_master_cntl; 68443df4709Smrg uint32_t tv_htotal; 68543df4709Smrg uint32_t tv_hsize; 68643df4709Smrg uint32_t tv_hdisp; 68743df4709Smrg uint32_t tv_hstart; 68843df4709Smrg uint32_t tv_vtotal; 68943df4709Smrg uint32_t tv_vdisp; 69043df4709Smrg uint32_t tv_timing_cntl; 69143df4709Smrg uint32_t tv_vscaler_cntl1; 69243df4709Smrg uint32_t tv_vscaler_cntl2; 69343df4709Smrg uint32_t tv_sync_size; 69443df4709Smrg uint32_t tv_vrestart; 69543df4709Smrg uint32_t tv_hrestart; 69643df4709Smrg uint32_t tv_frestart; 69743df4709Smrg uint32_t tv_ftotal; 69843df4709Smrg uint32_t tv_clock_sel_cntl; 69943df4709Smrg uint32_t tv_clkout_cntl; 70043df4709Smrg uint32_t tv_data_delay_a; 70143df4709Smrg uint32_t tv_data_delay_b; 70243df4709Smrg uint32_t tv_dac_cntl; 70343df4709Smrg uint32_t tv_pll_cntl; 70443df4709Smrg uint32_t tv_pll_cntl1; 70543df4709Smrg uint32_t tv_pll_fine_cntl; 70643df4709Smrg uint32_t tv_modulator_cntl1; 70743df4709Smrg uint32_t tv_modulator_cntl2; 70843df4709Smrg uint32_t tv_frame_lock_cntl; 70943df4709Smrg uint32_t tv_pre_dac_mux_cntl; 71043df4709Smrg uint32_t tv_rgb_cntl; 71143df4709Smrg uint32_t tv_y_saw_tooth_cntl; 71243df4709Smrg uint32_t tv_y_rise_cntl; 71343df4709Smrg uint32_t tv_y_fall_cntl; 71443df4709Smrg uint32_t tv_uv_adr; 71543df4709Smrg uint32_t tv_upsamp_and_gain_cntl; 71643df4709Smrg uint32_t tv_gain_limit_settings; 71743df4709Smrg uint32_t tv_linear_gain_settings; 71843df4709Smrg uint32_t tv_crc_cntl; 71943df4709Smrg uint32_t tv_sync_cntl; 72043df4709Smrg uint32_t gpiopad_a; 72143df4709Smrg uint32_t pll_test_cntl; 72243df4709Smrg 72343df4709Smrg uint16_t h_code_timing[MAX_H_CODE_TIMING_LEN]; 72443df4709Smrg uint16_t v_code_timing[MAX_V_CODE_TIMING_LEN]; 72543df4709Smrg 72643df4709Smrg} RADEONSaveRec, *RADEONSavePtr; 72743df4709Smrg 72843df4709Smrgtypedef struct 72943df4709Smrg{ 73043df4709Smrg Bool HasSecondary; 731209ff23fSmrg Bool HasCRTC2; /* All cards except original Radeon */ 73243df4709Smrg /* 73343df4709Smrg * The next two are used to make sure CRTC2 is restored before CRTC_EXT, 73443df4709Smrg * otherwise it could lead to blank screens. 73543df4709Smrg */ 73643df4709Smrg Bool IsSecondaryRestored; 73743df4709Smrg Bool RestorePrimary; 73843df4709Smrg 73943df4709Smrg Bool ReversedDAC; /* TVDAC used as primary dac */ 74043df4709Smrg Bool ReversedTMDS; /* DDC_DVI is used for external TMDS */ 74143df4709Smrg xf86CrtcPtr pCrtc[RADEON_MAX_CRTC]; 74243df4709Smrg RADEONCrtcPrivatePtr Controller[RADEON_MAX_CRTC]; 74343df4709Smrg 74443df4709Smrg ScrnInfoPtr pSecondaryScrn; 74543df4709Smrg ScrnInfoPtr pPrimaryScrn; 746209ff23fSmrg 74743df4709Smrg RADEONSaveRec ModeReg; /* Current mode */ 74843df4709Smrg RADEONSaveRec SavedReg; /* Original (text) mode */ 74943df4709Smrg 75043df4709Smrg void *MMIO; /* Map of MMIO region */ 75143df4709Smrg int MMIO_cnt; /* Map of FB region refcount */ 75243df4709Smrg void *FB; /* Map of FB region */ 75343df4709Smrg 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 */ 75643df4709Smrg int dri2_info_cnt; 7576322c902Smrg} RADEONEntRec, *RADEONEntPtr; 758209ff23fSmrg 75943df4709Smrg/* radeon_probe.c */ 76043df4709Smrgextern PciChipsets RADEONPciChipsets[]; 76143df4709Smrg 76243df4709Smrg/* radeon_driver.c */ 76343df4709Smrgextern Bool RADEONPreInit(ScrnInfoPtr, int); 76443df4709Smrgextern Bool RADEONScreenInit(SCREEN_INIT_ARGS_DECL); 76543df4709Smrgextern Bool RADEONSwitchMode(SWITCH_MODE_ARGS_DECL); 76643df4709Smrg#ifdef X_XF86MiscPassMessage 76743df4709Smrgextern Bool RADEONHandleMessage(int, const char*, const char*, 76843df4709Smrg char**); 76943df4709Smrg#endif 77043df4709Smrgextern void RADEONAdjustFrame(ADJUST_FRAME_ARGS_DECL); 77143df4709Smrgextern Bool RADEONEnterVT(VT_FUNC_ARGS_DECL); 77243df4709Smrgextern void RADEONLeaveVT(VT_FUNC_ARGS_DECL); 77343df4709Smrgextern void RADEONFreeScreen(FREE_SCREEN_ARGS_DECL); 77443df4709Smrgextern ModeStatus RADEONValidMode(SCRN_ARG_TYPE, DisplayModePtr, Bool, int); 77543df4709Smrg 776209ff23fSmrgextern const OptionInfoRec *RADEONOptionsWeak(void); 777209ff23fSmrg 77843df4709Smrg#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); 78643df4709Smrg#endif 787ad43ddacSmrg 788209ff23fSmrg#endif /* _RADEON_PROBE_H_ */ 789