/*************************************************************** * Most of the definitions here are adapted right from XFree86 *
***************************************************************/
/* * Chip families. Must fit in the low 16 bits of a long word
*/ enum radeon_family {
CHIP_FAMILY_UNKNOW,
CHIP_FAMILY_LEGACY,
CHIP_FAMILY_RADEON,
CHIP_FAMILY_RV100,
CHIP_FAMILY_RS100, /* U1 (IGP320M) or A3 (IGP320)*/
CHIP_FAMILY_RV200,
CHIP_FAMILY_RS200, /* U2 (IGP330M/340M/350M) or A4 (IGP330/340/345/350),
RS250 (IGP 7000) */
CHIP_FAMILY_R200,
CHIP_FAMILY_RV250,
CHIP_FAMILY_RS300, /* Radeon 9000 IGP */
CHIP_FAMILY_RV280,
CHIP_FAMILY_R300,
CHIP_FAMILY_R350,
CHIP_FAMILY_RV350,
CHIP_FAMILY_RV380, /* RV370/RV380/M22/M24 */
CHIP_FAMILY_R420, /* R420/R423/M18 */
CHIP_FAMILY_RC410,
CHIP_FAMILY_RS400,
CHIP_FAMILY_RS480,
CHIP_FAMILY_LAST,
};
/* * PLL infos
*/ struct pll_info { int ppll_max; int ppll_min; int sclk, mclk; int ref_div; int ref_clk;
};
/* * This structure contains the various registers manipulated by this * driver for setting or restoring a mode. It's mostly copied from * XFree's RADEONSaveRec structure. A few chip settings might still be * tweaked without beeing reflected or saved in these registers though
*/ struct radeon_regs { /* Common registers */
u32 ovr_clr;
u32 ovr_wid_left_right;
u32 ovr_wid_top_bottom;
u32 ov0_scale_cntl;
u32 mpp_tb_config;
u32 mpp_gp_config;
u32 subpic_cntl;
u32 viph_control;
u32 i2c_cntl_1;
u32 gen_int_cntl;
u32 cap0_trig_cntl;
u32 cap1_trig_cntl;
u32 bus_cntl;
u32 surface_cntl;
u32 bios_5_scratch;
/* Other registers to save for VT switches or driver load/unload */
u32 dp_datatype;
u32 rbbm_soft_reset;
u32 clock_cntl_index;
u32 amcgpio_en_reg;
u32 amcgpio_mask;
struct panel_info { int xres, yres; int valid; int clock; int hOver_plus, hSync_width, hblank; int vOver_plus, vSync_width, vblank; int hAct_high, vAct_high, interlaced; int pwr_delay; int use_bios_dividers; int ref_divider; int post_divider; int fbk_divider;
};
int chipset;
u8 family;
u8 rev; unsignedint errata; unsignedlong video_ram; unsignedlong mapped_vram; int vram_width; int vram_ddr;
int pitch, bpp, depth;
int has_CRTC2; int is_mobility; int is_IGP; int reversed_DAC; int reversed_TMDS; struct panel_info panel_info; int mon1_type;
u8 *mon1_EDID; struct fb_videomode *mon1_modedb; int mon1_dbsize; int mon2_type;
u8 *mon2_EDID;
u32 dp_gui_master_cntl;
struct pll_info pll;
int wc_cookie;
u32 save_regs[100]; int asleep; int lock_blank; int dynclk; int no_schedule; enum radeon_pm_mode pm_mode;
reinit_function_ptr reinit_func;
/* Lock on register access */
spinlock_t reg_lock;
/* Timer used for delayed LVDS operations */ struct timer_list lvds_timer;
u32 pending_lvds_gen_cntl;
/* * Note about PLL register accesses: * * I have removed the spinlock on them on purpose. The driver now * expects that it will only manipulate the PLL registers in normal * task environment, where radeon_msleep() will be called, protected * by a semaphore (currently the console semaphore) so that no conflict * will happen on the PLL register index. * * With the latest changes to the VT layer, this is guaranteed for all * calls except the actual drawing/blits which aren't supposed to use * the PLL registers anyway * * This is very important for the workarounds to work properly. The only * possible exception to this rule is the call to unblank(), which may * be done at irq time if an oops is in progress.
*/ void radeon_pll_errata_after_index_slow(struct radeonfb_info *rinfo); staticinlinevoid radeon_pll_errata_after_index(struct radeonfb_info *rinfo)
{ if (rinfo->errata & CHIP_ERRATA_PLL_DUMMYREADS)
radeon_pll_errata_after_index_slow(rinfo);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.