CloverBootloader/rEFIt_UEFI/Platform/ati2.h

322 lines
7.1 KiB
C++

/*
* ati.h
*
* Created by Slice on 19.02.12.
*
* the code ported from Chameleon project as well as from RadeonFB by Joblo and RadeonHD by dong
* big thank to Islam M. Ahmed Zaid for the updating the collection
*/
#include "../include/Pci.h"
#include "device_inject.h"
class LOADER_ENTRY;
#define OFFSET_TO_GET_ATOMBIOS_STRINGS_START 0x6e
#define DATVAL(x) {kPtr, sizeof(x), (UINT8 *)x}
#define STRVAL(x) {kStr, sizeof(x)-1, (UINT8 *)x}
#define BYTVAL(x) {kCst, 1, (UINT8 *)(UINTN)x}
#define WRDVAL(x) {kCst, 2, (UINT8 *)(UINTN)x}
#define DWRVAL(x) {kCst, 4, (UINT8 *)(UINTN)x}
// QWRVAL would work only in 64 bit
//#define QWRVAL(x) {kCst, 8, (UINT8 *)(UINTN)x}
#define NULVAL {kNul, 0, (UINT8 *)NULL}
/*Typedefs ENUMS*/
typedef enum {
kNul,
kStr,
kPtr,
kCst
} type_t;
typedef enum {
CHIP_FAMILY_UNKNOW,
/* Old */
CHIP_FAMILY_R420,
CHIP_FAMILY_R423,
CHIP_FAMILY_RV410,
CHIP_FAMILY_RV515,
CHIP_FAMILY_R520,
CHIP_FAMILY_RV530,
CHIP_FAMILY_RV560,
CHIP_FAMILY_RV570,
CHIP_FAMILY_R580,
/* IGP */
CHIP_FAMILY_RS600,
CHIP_FAMILY_RS690,
CHIP_FAMILY_RS740,
CHIP_FAMILY_RS780,
CHIP_FAMILY_RS880,
/* R600 */
CHIP_FAMILY_R600,
CHIP_FAMILY_RV610,
CHIP_FAMILY_RV620,
CHIP_FAMILY_RV630,
CHIP_FAMILY_RV635,
CHIP_FAMILY_RV670,
/* R700 */
CHIP_FAMILY_RV710,
CHIP_FAMILY_RV730,
CHIP_FAMILY_RV740,
CHIP_FAMILY_RV770,
CHIP_FAMILY_RV772,
CHIP_FAMILY_RV790,
/* Evergreen */
CHIP_FAMILY_CEDAR,
CHIP_FAMILY_CYPRESS,
CHIP_FAMILY_HEMLOCK,
CHIP_FAMILY_JUNIPER,
CHIP_FAMILY_REDWOOD,
/* Northern Islands */
CHIP_FAMILY_BARTS,
CHIP_FAMILY_CAICOS,
CHIP_FAMILY_CAYMAN,
CHIP_FAMILY_TURKS,
/* Southern Islands */
CHIP_FAMILY_PALM,
CHIP_FAMILY_SUMO,
CHIP_FAMILY_SUMO2,
CHIP_FAMILY_ARUBA,
CHIP_FAMILY_TAHITI,
CHIP_FAMILY_PITCAIRN,
CHIP_FAMILY_VERDE,
CHIP_FAMILY_OLAND,
/* Sea Islands */
CHIP_FAMILY_HAINAN,
CHIP_FAMILY_BONAIRE,
CHIP_FAMILY_KAVERI,
CHIP_FAMILY_KABINI,
CHIP_FAMILY_HAWAII,
CHIP_FAMILY_MULLINS,
/* Volcanic Islands */
CHIP_FAMILY_TOPAZ,
CHIP_FAMILY_AMETHYST,
CHIP_FAMILY_TONGA,
CHIP_FAMILY_FIJI,
CHIP_FAMILY_CARRIZO,
CHIP_FAMILY_TOBAGO,
CHIP_FAMILY_ELLESMERE, /* Polaris 10 */
CHIP_FAMILY_BAFFIN, /* Polaris 11 */
CHIP_FAMILY_GREENLAND, /* Polaris 12 */
CHIP_FAMILY_VEGA10, /* Vega 10 */
CHIP_FAMILY_VEGA20, /* Vega 20 */
CHIP_FAMILY_NAVI10,
CHIP_FAMILY_LAST
} ati_chip_family_t;
typedef struct {
const CHAR8 *name;
UINT8 ports;
} card_config_t;
typedef enum {
kNull,
/* OLDController */
kWormy,
kAlopias,
kCaretta,
kKakapo,
kKipunji,
kPeregrine,
kRaven,
kSphyrna,
/* AMD2400Controller */
kIago,
/* AMD2600Controller */
kHypoprion,
kLamna,
/* AMD3800Controller */
kMegalodon,
kTriakis,
/* AMD4600Controller */
kFlicker,
kGliff,
kShrike,
/* AMD4800Controller */
kCardinal,
kMotmot,
kQuail,
/* AMD5000Controller */
kDouc,
kLangur,
kUakari,
kZonalis,
kAlouatta,
kHoolock,
kVervet,
kBaboon,
kEulemur,
kGalago,
kColobus,
kMangabey,
kNomascus,
kOrangutan,
/* AMD6000Controller */
kPithecia,
kBulrushes,
kCattail,
kHydrilla,
kDuckweed,
kFanwort,
kElodea,
kKudzu,
kGibba,
kLotus,
kIpomoea,
kMuskgrass,
kJuncus,
kOsmunda,
kPondweed,
kSpikerush,
kTypha,
/* AMD7000Controller */
kRamen,
kTako,
kNamako,
kAji,
kBuri,
kChutoro,
kDashimaki,
kEbi,
kGari,
kFutomaki,
kHamachi,
kOPM,
kIkura,
kIkuraS,
kJunsai,
kKani,
kKaniS,
kDashimakiS,
kMaguro,
kMaguroS,
/* AMD8000Controller */
kExmoor,
kBaladi,
/* AMD9000Controller */
kMalteseS,
kLagotto,
kGreyhoundS,
kMaltese,
kBasset,
kGreyhound,
kLabrador,
/* AMD9300Controller */
kFleuveSWIP,
/* AMD9500Controller */
kAcre,
kDayman,
kGuariba,
kHuallaga,
kOrinoco,
/* AMD9510Controller*/
kBerbice,
/* AMD9515Controller */
kMazaruni,
kLongavi,
/* AMD9520Controller */
kElqui,
kCaroni,
kFlorin,
kRadeon, // this is absent FB if not set
kCfgEnd
} config_name_t;
typedef struct {
UINT16 device_id;
// UINT32 subsys_id;
ati_chip_family_t chip_family;
const CHAR8 *model_name;
config_name_t cfg_name;
} radeon_card_info_t;
typedef struct {
DevPropDevice *device;
radeon_card_info_t *info;
pci_dt_t *pci_dev;
UINT8 *fb;
UINT8 *mmio;
UINT8 *io;
UINT8 *rom;
UINT32 rom_size;
UINT64 vram_size;
const CHAR8 *cfg_name;
UINT8 ports;
UINT32 flags;
BOOLEAN posted;
} card_t;
// Chip flags
/* enum radeon_chip_flags {
RADEON_FAMILY_MASK = 0x0000ffffUL,
RADEON_FLAGS_MASK = 0xffff0000UL,
RADEON_IS_MOBILITY = 0x00010000UL,
RADEON_IS_IGP = 0x00020000UL,
RADEON_SINGLE_CRTC = 0x00040000UL,
RADEON_IS_AGP = 0x00080000UL,
RADEON_HAS_HIERZ = 0x00100000UL,
RADEON_IS_PCIE = 0x00200000UL,
RADEON_NEW_MEMMAP = 0x00400000UL,
RADEON_IS_PCI = 0x00800000UL,
RADEON_IS_IGPGART = 0x01000000UL,
};*/
#define MKFLAG(n) (1 << n)
#define FLAGTRUE MKFLAG(0)
#define EVERGREEN MKFLAG(1)
#define FLAGMOBILE MKFLAG(2)
#define FLAGOLD MKFLAG(3)
#define FLAGNOTFAKE MKFLAG(4)
#define FLAGDYNAMIC MKFLAG(5)
typedef struct {
type_t type;
UINT32 size;
UINT8 *data;
} value_t;
typedef struct {
UINT32 flags;
BOOLEAN all_ports;
CONST CHAR8 *name;
BOOLEAN (*get_value)(value_t *val, INTN index, BOOLEAN Sier);
value_t default_val;
} AtiDevProp;
BOOLEAN get_bootdisplay_val(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_vrammemory_val(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_edid_val(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_display_type(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_name_val(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_nameparent_val(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_model_val(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_conntype_val(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_vrammemsize_val(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_binimage_val(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_binimage_owr(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_romrevision_val(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_deviceid_val(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_mclk_val(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_sclk_val(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_refclk_val(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_platforminfo_val(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_vramtotalsize_val(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_dual_link_val(value_t *val, INTN index, BOOLEAN Sier);
BOOLEAN get_name_pci_val(value_t *val, INTN index, BOOLEAN Sier);
// Constants. Can be defined even if DONT_DEFINE_GLOBALS
extern const radeon_card_info_t radeon_cards[];
extern const card_config_t card_configs[];
#ifndef DONT_DEFINE_GLOBALS
extern AtiDevProp ati_devprop_list[];
extern const CHAR8 *chip_family_name[];
#endif
BOOLEAN
setup_ati_devprop (
LOADER_ENTRY *Entry,
pci_dt_t *ati_dev
);