/*
*/
/*
* Copyright (c) 2006, 2013, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Authors:
* Eric Anholt <eric@anholt.net>
*
*/
#ifndef _I830_BIOS_H_
#define _I830_BIOS_H_
#include "drmP.h"
#pragma pack(1)
struct vbt_header {
} __attribute__((packed));
#pragma pack()
struct bdb_header {
};
/* strictly speaking, this is a "skip" block, but it has interesting info */
#pragma pack(1)
struct vbios_data {
} __attribute__((packed));
#pragma pack()
/*
* 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.
*/
/* 17 rsvd */
#pragma pack(1)
struct bdb_general_features {
/* bits 1 */
/* bits 2 */
/* bits 3 */
/* bits 4 */
/* bits 5 */
} __attribute__((packed));
#pragma pack()
/* pre-915 */
/* Pre 915 */
/* On 915+ */
#pragma pack(1)
struct child_device_config {
} __attribute__((packed));
#pragma pack()
#pragma pack(1)
struct bdb_general_definitions {
/* DDC GPIO */
/* DPMS bits */
/* boot device bits */
/*
* Device info:
* If TV is present, it'll be at devices[0].
* LVDS will be next, either devices[0] or [1], if present.
* On some platforms the number of device is 6. But could be as few as
* 4 if both TV and LVDS are missing.
* And the device num is related with the size of general definition
* block. It is obtained by using the following formula:
* number = (block_size - sizeof(bdb_general_definitions))/
* sizeof(child_device_config);
*/
/* OSOL_i915 struct child_device_config devices[0]; */
} __attribute__((packed));
#pragma pack()
#pragma pack(1)
struct __bdb_general_definitions {
/* DDC GPIO */
/* DPMS bits */
/* boot device bits */
/*
* Device info:
* If TV is present, it'll be at devices[0].
* LVDS will be next, either devices[0] or [1], if present.
* On some platforms the number of device is 6. But could be as few as
* 4 if both TV and LVDS are missing.
* And the device num is related with the size of general definition
* block. It is obtained by using the following formula:
* number = (block_size - sizeof(bdb_general_definitions))/
* sizeof(child_device_config);
*/
} __attribute__((packed));
#pragma pack()
#pragma pack(1)
struct bdb_lvds_options {
/* LVDS capabilities, stored in a dword */
} __attribute__((packed));
#pragma pack()
#pragma pack(1)
/* LFP pointer table contains entries to the struct below */
struct bdb_lvds_lfp_data_ptr {
} __attribute__((packed));
#pragma pack()
#pragma pack(1)
struct bdb_lvds_lfp_data_ptrs {
} __attribute__((packed));
#pragma pack()
#pragma pack(1)
/* LFP data has 3 blocks per entry */
struct lvds_fp_timing {
} __attribute__((packed));
#pragma pack()
#pragma pack(1)
struct lvds_dvo_timing {
} __attribute__((packed));
#pragma pack()
#pragma pack(1)
struct lvds_pnp_id {
} __attribute__((packed));
#pragma pack()
#pragma pack(1)
struct bdb_lvds_lfp_data_entry {
} __attribute__((packed));
#pragma pack()
#pragma pack(1)
struct bdb_lvds_lfp_data {
} __attribute__((packed));
#pragma pack()
#pragma pack(1)
struct aimdb_header {
} __attribute__((packed));
#pragma pack()
#pragma pack(1)
struct aimdb_block {
} __attribute__((packed));
#pragma pack()
#pragma pack(1)
struct vch_panel_data {
} __attribute__((packed));
#pragma pack()
#pragma pack(1)
struct vch_bdb_22 {
} __attribute__((packed));
#pragma pack()
#pragma pack(1)
struct bdb_sdvo_lvds_options {
} __attribute__((packed));
#pragma pack()
#define BDB_DRIVER_FEATURE_NO_LVDS 0
#pragma pack(1)
struct bdb_driver_features {
} __attribute__((packed));
#pragma pack()
#define EDP_18BPP 0
#define EDP_RATE_1_62 0
#define EDP_LANE_1 0
#define EDP_PREEMPHASIS_NONE 0
#define EDP_VSWING_0_4V 0
#pragma pack(1)
struct edp_power_seq {
} __attribute__ ((packed));
#pragma pack()
#pragma pack(1)
struct edp_link_params {
} __attribute__ ((packed));
#pragma pack()
#pragma pack(1)
struct bdb_edp {
} __attribute__ ((packed));
#pragma pack()
/*
* Driver<->VBIOS interaction occurs through scratch bits in
* GR18 & SWF*.
*/
/* GR18 bits are set on display switch and hotkey events */
/* Set by driver, cleared by VBIOS */
#define SWF00_XRES_SHIFT 0
/* Set by VBIOS at boot time and driver at runtime */
#define SWF01_TV1_FORMAT_SHIFT 0
#define SWF11_DPMS_ON 0
/* 21:19 rsvd */
/* if GR18 indicates a display switch */
/* if GR18 indicates a panel fitting request */
/* if GR18 indicates an APM change request */
/* Add the device class for LFP, TV, HDMI */
/* define the DVO port for HDMI output type */
/* define the PORT for DP output type */
#endif /* _I830_BIOS_H_ */