mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-11 14:28:08 +01:00
323 lines
7.1 KiB
C++
323 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_NAVI20,
|
|
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
|
|
);
|
|
|