linux/drivers/gpu/drm/gma500/intel_bios.h

/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2006 Intel Corporation
 *
 * Authors:
 *    Eric Anholt <[email protected]>
 */

#ifndef _INTEL_BIOS_H_
#define _INTEL_BIOS_H_

struct drm_device;

struct vbt_header {} __packed;


struct bdb_header {};

/* strictly speaking, this is a "skip" block, but it has interesting info */
struct vbios_data {} __packed;

/*
 * There are several types of BIOS data blocks (BDBs), each block has
 * an ID and size in the first 3 bytes (ID in first, size in next 2).
 * Known types are listed below.
 */
#define BDB_GENERAL_FEATURES
#define BDB_GENERAL_DEFINITIONS
#define BDB_OLD_TOGGLE_LIST
#define BDB_MODE_SUPPORT_LIST
#define BDB_GENERIC_MODE_TABLE
#define BDB_EXT_MMIO_REGS
#define BDB_SWF_IO
#define BDB_SWF_MMIO
#define BDB_DOT_CLOCK_TABLE
#define BDB_MODE_REMOVAL_TABLE
#define BDB_CHILD_DEVICE_TABLE
#define BDB_DRIVER_FEATURES
#define BDB_DRIVER_PERSISTENCE
#define BDB_EXT_TABLE_PTRS
#define BDB_DOT_CLOCK_OVERRIDE
#define BDB_DISPLAY_SELECT
/* 17 rsvd */
#define BDB_DRIVER_ROTATION
#define BDB_DISPLAY_REMOVE
#define BDB_OEM_CUSTOM
#define BDB_EFP_LIST
#define BDB_SDVO_LVDS_OPTIONS
#define BDB_SDVO_PANEL_DTDS
#define BDB_SDVO_LVDS_PNP_IDS
#define BDB_SDVO_LVDS_POWER_SEQ
#define BDB_TV_OPTIONS
#define BDB_EDP
#define BDB_LVDS_OPTIONS
#define BDB_LVDS_LFP_DATA_PTRS
#define BDB_LVDS_LFP_DATA
#define BDB_LVDS_BACKLIGHT
#define BDB_LVDS_POWER
#define BDB_SKIP

struct bdb_general_features {} __packed;

/* pre-915 */
#define GPIO_PIN_DVI_LVDS
#define GPIO_PIN_ADD_I2C
#define GPIO_PIN_ADD_DDC
#define GPIO_PIN_ADD_DDC_I2C

/* Pre 915 */
#define DEVICE_TYPE_NONE
#define DEVICE_TYPE_CRT
#define DEVICE_TYPE_TV
#define DEVICE_TYPE_EFP
#define DEVICE_TYPE_LFP
/* On 915+ */
#define DEVICE_TYPE_CRT_DPMS
#define DEVICE_TYPE_CRT_DPMS_HOTPLUG
#define DEVICE_TYPE_TV_COMPOSITE
#define DEVICE_TYPE_TV_MACROVISION
#define DEVICE_TYPE_TV_RF_COMPOSITE
#define DEVICE_TYPE_TV_SVIDEO_COMPOSITE
#define DEVICE_TYPE_TV_SCART
#define DEVICE_TYPE_TV_CODEC_HOTPLUG_PWR
#define DEVICE_TYPE_EFP_HOTPLUG_PWR
#define DEVICE_TYPE_EFP_DVI_HOTPLUG_PWR
#define DEVICE_TYPE_EFP_DVI_I
#define DEVICE_TYPE_EFP_DVI_D_DUAL
#define DEVICE_TYPE_EFP_DVI_D_HDCP
#define DEVICE_TYPE_OPENLDI_HOTPLUG_PWR
#define DEVICE_TYPE_OPENLDI_DUALPIX
#define DEVICE_TYPE_LFP_PANELLINK
#define DEVICE_TYPE_LFP_CMOS_PWR
#define DEVICE_TYPE_LFP_LVDS_PWR
#define DEVICE_TYPE_LFP_LVDS_DUAL
#define DEVICE_TYPE_LFP_LVDS_DUAL_HDCP

#define DEVICE_CFG_NONE
#define DEVICE_CFG_12BIT_DVOB
#define DEVICE_CFG_12BIT_DVOC
#define DEVICE_CFG_24BIT_DVOBC
#define DEVICE_CFG_24BIT_DVOCB
#define DEVICE_CFG_DUAL_DVOB
#define DEVICE_CFG_DUAL_DVOC
#define DEVICE_CFG_DUAL_DVOBC
#define DEVICE_CFG_DUAL_LINK_DVOBC
#define DEVICE_CFG_DUAL_LINK_DVOCB

#define DEVICE_WIRE_NONE
#define DEVICE_WIRE_DVOB
#define DEVICE_WIRE_DVOC
#define DEVICE_WIRE_DVOBC
#define DEVICE_WIRE_DVOBB
#define DEVICE_WIRE_DVOCC
#define DEVICE_WIRE_DVOB_MASTER
#define DEVICE_WIRE_DVOC_MASTER

#define DEVICE_PORT_DVOA
#define DEVICE_PORT_DVOB
#define DEVICE_PORT_DVOC

struct child_device_config {} __packed;


struct bdb_general_definitions {};

struct bdb_lvds_options {} __packed;

struct bdb_lvds_backlight {} __packed;

/* LFP pointer table contains entries to the struct below */
struct bdb_lvds_lfp_data_ptr {} __packed;

struct bdb_lvds_lfp_data_ptrs {} __packed;

/* LFP data has 3 blocks per entry */
struct lvds_fp_timing {} __packed;

struct lvds_dvo_timing {} __packed;

struct lvds_pnp_id {} __packed;

struct bdb_lvds_lfp_data_entry {} __packed;

struct bdb_lvds_lfp_data {} __packed;

struct aimdb_header {} __packed;

struct aimdb_block {} __packed;

struct vch_panel_data {} __packed;

struct vch_bdb_22 {} __packed;

struct bdb_sdvo_lvds_options {} __packed;

#define BDB_DRIVER_FEATURE_NO_LVDS
#define BDB_DRIVER_FEATURE_INT_LVDS
#define BDB_DRIVER_FEATURE_SDVO_LVDS
#define BDB_DRIVER_FEATURE_EDP

struct bdb_driver_features {} __packed;

#define EDP_18BPP
#define EDP_24BPP
#define EDP_30BPP
#define EDP_RATE_1_62
#define EDP_RATE_2_7
#define EDP_LANE_1
#define EDP_LANE_2
#define EDP_LANE_4
#define EDP_PREEMPHASIS_NONE
#define EDP_PREEMPHASIS_3_5dB
#define EDP_PREEMPHASIS_6dB
#define EDP_PREEMPHASIS_9_5dB
#define EDP_VSWING_0_4V
#define EDP_VSWING_0_6V
#define EDP_VSWING_0_8V
#define EDP_VSWING_1_2V

struct edp_power_seq {} __attribute__ ((packed));

struct edp_link_params {} __attribute__ ((packed));

struct bdb_edp {} __attribute__ ((packed));

extern int psb_intel_init_bios(struct drm_device *dev);
extern void psb_intel_destroy_bios(struct drm_device *dev);

/*
 * Driver<->VBIOS interaction occurs through scratch bits in
 * GR18 & SWF*.
 */

/* GR18 bits are set on display switch and hotkey events */
#define GR18_DRIVER_SWITCH_EN
#define GR18_HOTKEY_MASK
#define GR18_HK_NONE
#define GR18_HK_LFP_STRETCH
#define GR18_HK_TOGGLE_DISP
#define GR18_HK_DISP_SWITCH
#define GR18_HK_POPUP_DISABLED
#define GR18_HK_POPUP_ENABLED
#define GR18_HK_PFIT
#define GR18_HK_APM_CHANGE
#define GR18_HK_MULTIPLE
#define GR18_USER_INT_EN
#define GR18_A0000_FLUSH_EN
#define GR18_SMM_EN

/* Set by driver, cleared by VBIOS */
#define SWF00_YRES_SHIFT
#define SWF00_XRES_SHIFT
#define SWF00_RES_MASK

/* Set by VBIOS at boot time and driver at runtime */
#define SWF01_TV2_FORMAT_SHIFT
#define SWF01_TV1_FORMAT_SHIFT
#define SWF01_TV_FORMAT_MASK

#define SWF10_VBIOS_BLC_I2C_EN
#define SWF10_GTT_OVERRIDE_EN
#define SWF10_LFP_DPMS_OVR
#define SWF10_ACTIVE_TOGGLE_LIST_MASK
#define SWF10_OLD_TOGGLE
#define SWF10_TOGGLE_LIST_1
#define SWF10_TOGGLE_LIST_2
#define SWF10_TOGGLE_LIST_3
#define SWF10_TOGGLE_LIST_4
#define SWF10_PANNING_EN
#define SWF10_DRIVER_LOADED
#define SWF10_EXTENDED_DESKTOP
#define SWF10_EXCLUSIVE_MODE
#define SWF10_OVERLAY_EN
#define SWF10_PLANEB_HOLDOFF
#define SWF10_PLANEA_HOLDOFF
#define SWF10_VGA_HOLDOFF
#define SWF10_ACTIVE_DISP_MASK
#define SWF10_PIPEB_LFP2
#define SWF10_PIPEB_EFP2
#define SWF10_PIPEB_TV2
#define SWF10_PIPEB_CRT2
#define SWF10_PIPEB_LFP
#define SWF10_PIPEB_EFP
#define SWF10_PIPEB_TV
#define SWF10_PIPEB_CRT
#define SWF10_PIPEA_LFP2
#define SWF10_PIPEA_EFP2
#define SWF10_PIPEA_TV2
#define SWF10_PIPEA_CRT2
#define SWF10_PIPEA_LFP
#define SWF10_PIPEA_EFP
#define SWF10_PIPEA_TV
#define SWF10_PIPEA_CRT

#define SWF11_MEMORY_SIZE_SHIFT
#define SWF11_SV_TEST_EN
#define SWF11_IS_AGP
#define SWF11_DISPLAY_HOLDOFF
#define SWF11_DPMS_REDUCED
#define SWF11_IS_VBE_MODE
#define SWF11_PIPEB_ACCESS
#define SWF11_DPMS_MASK
#define SWF11_DPMS_OFF
#define SWF11_DPMS_SUSPEND
#define SWF11_DPMS_STANDBY
#define SWF11_DPMS_ON

#define SWF14_GFX_PFIT_EN
#define SWF14_TEXT_PFIT_EN
#define SWF14_LID_STATUS_CLOSED
#define SWF14_POPUP_EN
#define SWF14_DISPLAY_HOLDOFF
#define SWF14_DISP_DETECT_EN
#define SWF14_DOCKING_STATUS_DOCKED
#define SWF14_DRIVER_STATUS
#define SWF14_OS_TYPE_WIN9X
#define SWF14_OS_TYPE_WINNT
/* 21:19 rsvd */
#define SWF14_PM_TYPE_MASK
#define SWF14_PM_ACPI_VIDEO
#define SWF14_PM_ACPI
#define SWF14_PM_APM_12
#define SWF14_PM_APM_11
#define SWF14_HK_REQUEST_MASK
	  /* if GR18 indicates a display switch */
#define SWF14_DS_PIPEB_LFP2_EN
#define SWF14_DS_PIPEB_EFP2_EN
#define SWF14_DS_PIPEB_TV2_EN
#define SWF14_DS_PIPEB_CRT2_EN
#define SWF14_DS_PIPEB_LFP_EN
#define SWF14_DS_PIPEB_EFP_EN
#define SWF14_DS_PIPEB_TV_EN
#define SWF14_DS_PIPEB_CRT_EN
#define SWF14_DS_PIPEA_LFP2_EN
#define SWF14_DS_PIPEA_EFP2_EN
#define SWF14_DS_PIPEA_TV2_EN
#define SWF14_DS_PIPEA_CRT2_EN
#define SWF14_DS_PIPEA_LFP_EN
#define SWF14_DS_PIPEA_EFP_EN
#define SWF14_DS_PIPEA_TV_EN
#define SWF14_DS_PIPEA_CRT_EN
	  /* if GR18 indicates a panel fitting request */
#define SWF14_PFIT_EN
	  /* if GR18 indicates an APM change request */
#define SWF14_APM_HIBERNATE
#define SWF14_APM_SUSPEND
#define SWF14_APM_STANDBY
#define SWF14_APM_RESTORE

/* Add the device class for LFP, TV, HDMI */
#define DEVICE_TYPE_INT_LFP
#define DEVICE_TYPE_INT_TV
#define DEVICE_TYPE_HDMI
#define DEVICE_TYPE_DP
#define DEVICE_TYPE_eDP

/* define the DVO port for HDMI output type */
#define DVO_B
#define DVO_C
#define DVO_D

/* define the PORT for DP output type */
#define PORT_IDPB
#define PORT_IDPC
#define PORT_IDPD

#endif /* _INTEL_BIOS_H_ */