diff options
author | Eric Anholt <anholt@FreeBSD.org> | 2006-03-24 13:49:10 -0800 |
---|---|---|
committer | Eric Anholt <anholt@leguin.anholt.net> | 2006-04-06 15:59:28 -0700 |
commit | f6a3243f40074aee471ec1cda2cc8e5f05116284 (patch) | |
tree | db89908d69796d234466763e8e1bff70da465e0b /src/i830_bios.h | |
parent | 64756e215016730b5cc2e174f08d47c0288c0ba4 (diff) |
Add more VBT reading, so we find the panel size.
Diffstat (limited to 'src/i830_bios.h')
-rw-r--r-- | src/i830_bios.h | 75 |
1 files changed, 72 insertions, 3 deletions
diff --git a/src/i830_bios.h b/src/i830_bios.h index ed3f1826..9bd0db8a 100644 --- a/src/i830_bios.h +++ b/src/i830_bios.h @@ -26,7 +26,7 @@ */ struct vbt_header { - char signature[20]; /**< Always 'BIOS_DATA_BLOCK' */ + char signature[20]; /**< Always starts with 'VBT$' */ CARD16 version; /**< decimal */ CARD16 header_size; /**< in bytes */ CARD16 vbt_size; /**< in bytes */ @@ -37,14 +37,83 @@ struct vbt_header { CARD32 aim2_offset; /**< from beginning of VBT */ CARD32 aim3_offset; /**< from beginning of VBT */ CARD32 aim4_offset; /**< from beginning of VBT */ -}; +} __attribute__((packed)); struct bdb_header { char signature[16]; /**< Always 'BIOS_DATA_BLOCK' */ CARD16 version; /**< decimal */ CARD16 header_size; /**< in bytes */ CARD16 bdb_size; /**< in bytes */ -}; +} __attribute__((packed)); + +#define LVDS_CAP_EDID (1 << 6) +#define LVDS_CAP_DITHER (1 << 5) +#define LVDS_CAP_PFIT_AUTO_RATIO (1 << 4) +#define LVDS_CAP_PFIT_GRAPHICS_MODE (1 << 3) +#define LVDS_CAP_PFIT_TEXT_MODE (1 << 2) +#define LVDS_CAP_PFIT_GRAPHICS (1 << 1) +#define LVDS_CAP_PFIT_TEXT (1 << 0) +struct lvds_bdb_1 { + CARD8 id; /**< 40 */ + CARD16 size; + CARD8 panel_type; + CARD8 reserved0; + CARD16 caps; +} __attribute__((packed)); + +struct lvds_bdb_2_fp_params { + CARD16 x_res; + CARD16 y_res; + CARD32 lvds_reg; + CARD32 lvds_reg_val; + CARD32 pp_on_reg; + CARD32 pp_on_reg_val; + CARD32 pp_off_reg; + CARD32 pp_off_reg_val; + CARD32 pp_cycle_reg; + CARD32 pp_cycle_reg_val; + CARD32 pfit_reg; + CARD32 pfit_reg_val; + CARD16 terminator; +} __attribute__((packed)); + +struct lvds_bdb_2_fp_edid_dtd { + CARD16 dclk; /**< In 10khz */ + CARD8 hactive; + CARD8 hblank; + CARD8 high_h; /**< 7:4 = hactive 11:8, 3:0 = hblank 11:8 */ + CARD8 vactive; + CARD8 vblank; + CARD8 high_v; /**< 7:4 = vactive 11:8, 3:0 = vblank 11:8 */ + CARD8 hsync_off; + CARD8 hsync_pulse_width; + CARD8 vsync_off; + CARD8 high_hsync_off; /**< 7:6 = hsync off 9:8 */ + CARD8 h_image; + CARD8 v_image; + CARD8 max_hv; + CARD8 h_border; + CARD8 v_border; + CARD8 flags; +#define FP_EDID_FLAG_VSYNC_POSITIVE (1 << 2) +#define FP_EDID_FLAG_HSYNC_POSITIVE (1 << 1) +} __attribute__((packed)); + +struct lvds_bdb_2_entry { + CARD16 fp_params_offset; /**< From beginning of BDB */ + CARD8 fp_params_size; + CARD16 fp_edid_dtd_offset; + CARD8 fp_edid_dtd_size; + CARD16 fp_edid_pid_offset; + CARD8 fp_edid_pid_size; +} __attribute__((packed)); + +struct lvds_bdb_2 { + CARD8 id; /**< 41 */ + CARD16 size; + CARD8 table_size; /* not sure on this one */ + struct lvds_bdb_2_entry panels[16]; +} __attribute__((packed)); Bool i830GetLVDSInfoFromBIOS(ScrnInfoPtr pScrn); |