| 1 | /*␊ |
| 2 | * platform.h␊ |
| 3 | * AsereBLN: reworked and extended␊ |
| 4 | *␊ |
| 5 | */␊ |
| 6 | ␊ |
| 7 | #ifndef __LIBSAIO_PLATFORM_H␊ |
| 8 | #define __LIBSAIO_PLATFORM_H␊ |
| 9 | ␊ |
| 10 | #include "libsaio.h"␊ |
| 11 | #include "cpuid.h"␊ |
| 12 | #include "cpu_data.h"␊ |
| 13 | ␊ |
| 14 | #define bitmask(h,l)␉␉((_Bit(h)|(_Bit(h)-1)) & ~(_Bit(l)-1))␊ |
| 15 | #define bitfield(x,h,l)␉␉(((x) & bitmask(h,l)) >> l)␊ |
| 16 | ␊ |
| 17 | #define quad(hi,lo) (((uint64_t)(hi)) << 32 | (lo))␊ |
| 18 | ␊ |
| 19 | /* Additional models supported by Chameleon (NOT SUPPORTED BY THE APPLE'S ORIGINAL KERNEL) */␊ |
| 20 | #define CPUID_MODEL_BANIAS 0x09␊ |
| 21 | #define CPUID_MODEL_DOTHAN 0x0D␊ |
| 22 | #define CPUID_MODEL_ATOM␉␉␉0x1C␊ |
| 23 | ␊ |
| 24 | /* CPUID Vendor */␊ |
| 25 | #define CPUID_VENDOR_INTEL 0x756E6547␊ |
| 26 | #define CPUID_VENDOR_AMD 0x68747541␊ |
| 27 | ␊ |
| 28 | /* SMBIOS Memory Types */ ␊ |
| 29 | #define SMB_MEM_TYPE_UNDEFINED␉0␊ |
| 30 | #define SMB_MEM_TYPE_OTHER␉␉1␊ |
| 31 | #define SMB_MEM_TYPE_UNKNOWN␉2␊ |
| 32 | #define SMB_MEM_TYPE_DRAM␉␉3␊ |
| 33 | #define SMB_MEM_TYPE_EDRAM␉␉4␊ |
| 34 | #define SMB_MEM_TYPE_VRAM␉␉5␊ |
| 35 | #define SMB_MEM_TYPE_SRAM␉␉6␊ |
| 36 | #define SMB_MEM_TYPE_RAM␉␉7␊ |
| 37 | #define SMB_MEM_TYPE_ROM␉␉8␊ |
| 38 | #define SMB_MEM_TYPE_FLASH␉␉9␊ |
| 39 | #define SMB_MEM_TYPE_EEPROM␉␉10␊ |
| 40 | #define SMB_MEM_TYPE_FEPROM␉␉11␊ |
| 41 | #define SMB_MEM_TYPE_EPROM␉␉12␊ |
| 42 | #define SMB_MEM_TYPE_CDRAM␉␉13␊ |
| 43 | #define SMB_MEM_TYPE_3DRAM␉␉14␊ |
| 44 | #define SMB_MEM_TYPE_SDRAM␉␉15␊ |
| 45 | #define SMB_MEM_TYPE_SGRAM␉␉16␊ |
| 46 | #define SMB_MEM_TYPE_RDRAM␉␉17␊ |
| 47 | #define SMB_MEM_TYPE_DDR␉␉18␊ |
| 48 | #define SMB_MEM_TYPE_DDR2␉␉19␊ |
| 49 | #define SMB_MEM_TYPE_FBDIMM␉␉20␊ |
| 50 | #define SMB_MEM_TYPE_DDR3␉␉24␉␉␉// Supported in 10.5.6+ AppleSMBIOS␊ |
| 51 | ␊ |
| 52 | /* Memory Configuration Types */ ␊ |
| 53 | #define SMB_MEM_CHANNEL_UNKNOWN␉␉0␊ |
| 54 | #define SMB_MEM_CHANNEL_SINGLE␉␉1␊ |
| 55 | #define SMB_MEM_CHANNEL_DUAL␉␉2␊ |
| 56 | #define SMB_MEM_CHANNEL_TRIPLE␉␉3␊ |
| 57 | ␊ |
| 58 | /* Maximum number of ram slots */␊ |
| 59 | #define MAX_RAM_SLOTS␉␉␉8␊ |
| 60 | #define RAM_SLOT_ENUMERATOR␉␉{0, 2, 4, 1, 3, 5, 6, 8, 10, 7, 9, 11}␊ |
| 61 | ␊ |
| 62 | /* Maximum number of SPD bytes */␊ |
| 63 | #define MAX_SPD_SIZE␉␉␉256␊ |
| 64 | ␊ |
| 65 | /* Size of SMBIOS UUID in bytes */␊ |
| 66 | #define UUID_LEN␉␉␉16␊ |
| 67 | ␊ |
| 68 | typedef struct _RamSlotInfo_t {␊ |
| 69 | uint32_t␉␉ModuleSize;␉␉␉␉␉␉// Size of Module in MB␊ |
| 70 | uint32_t␉␉Frequency; // in Mhz␊ |
| 71 | const char*␉␉Vendor;␊ |
| 72 | const char*␉␉PartNo;␊ |
| 73 | const char*␉␉SerialNo;␊ |
| 74 | char*␉␉␉spd;␉␉␉␉␉␉␉// SPD Dump␊ |
| 75 | bool␉␉␉InUse;␊ |
| 76 | uint8_t␉␉␉Type;␊ |
| 77 | uint8_t␉␉␉BankConnections; // table type 6, see (3.3.7)␊ |
| 78 | uint8_t␉␉␉BankConnCnt;␊ |
| 79 | ␊ |
| 80 | } RamSlotInfo_t;␊ |
| 81 | ␊ |
| 82 | #define envVendor "Vendor"␊ |
| 83 | #define envCPUIDMaxBasic "max_basic"␊ |
| 84 | #define envCPUIDMaxExt "max_ext" ␊ |
| 85 | #define envMicrocodeVersion "Microcode" ␊ |
| 86 | #define envSignature "Signature" ␊ |
| 87 | #define envStepping "Stepping" ␊ |
| 88 | #define envModel "Model" ␊ |
| 89 | ␊ |
| 90 | #define envFamily "Family" ␊ |
| 91 | #define envExtModel "ExtModel" ␊ |
| 92 | #define envExtFamily "ExtFamily" ␊ |
| 93 | #define envBrand "Brand" ␊ |
| 94 | #define envFeatures "Feat"␊ |
| 95 | #define envExtFeatures "ExtFeat"␊ |
| 96 | #define envSubCstates "sub_Csta" ␊ |
| 97 | #define envExtensions "CPUIDext" ␊ |
| 98 | #define envBrandString "BrandStr" ␊ |
| 99 | ␊ |
| 100 | #define envDynamicAcceleration "dynAcc"␊ |
| 101 | #define envInvariantAPICTimer "invAPIC"␊ |
| 102 | #define envFineGrainClockMod "fineGrain" ␊ |
| 103 | #define envNoThreads "NoThreads" ␊ |
| 104 | #define envNoCores "NoCores" ␊ |
| 105 | #define envIsMobile "isMobile" ␊ |
| 106 | #define envMaxCoef "MaxCoef" ␊ |
| 107 | #define envMaxDiv "MaxDiv" ␊ |
| 108 | #define envCurrCoef "CurrCoef" ␊ |
| 109 | #define envCurrDiv "CurrDiv" ␊ |
| 110 | #define envTSCFreq "TSCFreq" ␊ |
| 111 | #define envFSBFreq "FSBFreq" ␊ |
| 112 | #define envCPUFreq "CPUFreq"␊ |
| 113 | #define envIsServer "isServer"␊ |
| 114 | ␊ |
| 115 | #define envAdler32␉␉␉␉"adler32"␊ |
| 116 | ␊ |
| 117 | #define envCurrCoef "CurrCoef" ␊ |
| 118 | #define envCurrDiv "CurrDiv" ␊ |
| 119 | #define envTSCFreq "TSCFreq" ␊ |
| 120 | #define envFSBFreq "FSBFreq" ␊ |
| 121 | #define envCPUFreq "CPUFreq"␊ |
| 122 | ␊ |
| 123 | #define envHardwareSignature "HdwSign"␊ |
| 124 | #define envType "Type"␊ |
| 125 | #define envUUID "UUID"␊ |
| 126 | #define envSysId "SysId"␊ |
| 127 | ␊ |
| 128 | #define envgBootMode "gBootMode"␊ |
| 129 | #define envgBIOSDev "gBIOSDev"␊ |
| 130 | #define envSysConfigValid "IsSysConf"␊ |
| 131 | #define envgOverrideKernel "IsKover"␊ |
| 132 | #define envgEnableCDROMRescan "CDRescan"␊ |
| 133 | #define envgScanSingleDrive "1Drive"␊ |
| 134 | #define envgDeviceCount "DevCnt"␊ |
| 135 | #define envShouldboot "shldboot"␊ |
| 136 | ␊ |
| 137 | ␊ |
| 138 | #define envDriverExtSpec "DrvXSpec"␊ |
| 139 | #define envDriverSpec "DrvSpec"␊ |
| 140 | #define envDriverFileSpec "DrvFSpes"␊ |
| 141 | #define envDriverTempSpec "DrvTSpes"␊ |
| 142 | #define envDriverFileName "DrvFName"␊ |
| 143 | ␊ |
| 144 | #define envkCache "kCache"␊ |
| 145 | #define envMKextName "MCache"␊ |
| 146 | ␊ |
| 147 | #define envBootBanner "Banner"␊ |
| 148 | #define envBootPrompt "Prompt"␊ |
| 149 | #define envBootRescanPrompt "PromptBis"␊ |
| 150 | ␊ |
| 151 | #define envgMenuRow "MenuRow"␊ |
| 152 | #define envgMenuHeight "MenuH"␊ |
| 153 | #define envgMenuItemCount "MenuCnt"␊ |
| 154 | #define envgMenuTop "MenuTop"␊ |
| 155 | #define envgMenuBottom "MenuB"␊ |
| 156 | #define envgMenuSelection "MenuSel"␊ |
| 157 | #define envgMenuStart "MenuStart"␊ |
| 158 | #define envgMenuEnd "MenuEnd"␊ |
| 159 | #define envArgCntRemaining "ArgCntRem"␊ |
| 160 | ␊ |
| 161 | #define envgBootArgs␉␉␉␉"gBootArgs"␊ |
| 162 | ␊ |
| 163 | #define envConvMem "ConvMem"␊ |
| 164 | #define envExtMem "ExtMem"␊ |
| 165 | #define envMemoryMap "MemoryMap"␊ |
| 166 | #define envMemoryMapCnt "MemMapCnt"␊ |
| 167 | ␊ |
| 168 | ␊ |
| 169 | #define envRamFrequency "RamFreq"␊ |
| 170 | #define envRamCas "tCAS"␊ |
| 171 | #define envRamTrc "tRCD"␊ |
| 172 | #define envRamRas "tRAS"␊ |
| 173 | #define envRamTrp "tRP"␊ |
| 174 | #define envRamChannels "RamChans"␊ |
| 175 | #define envRamType "RamType"␊ |
| 176 | #define envRamCas "tCAS"␊ |
| 177 | #define envRamCas "tCAS"␊ |
| 178 | #define envRamCas "tCAS"␊ |
| 179 | #define envRamCas "tCAS"␊ |
| 180 | #define envDMIMemModules "DmiMemMod"␊ |
| 181 | #define envDMIMaxMemorySlots "DmiMaxSlt"␊ |
| 182 | #define envDMICntMemorySlots "DmiCntSlt"␊ |
| 183 | #define envRamDimm "RamDimm"␊ |
| 184 | #define envDmiDimm "DmiDimm"␊ |
| 185 | ␊ |
| 186 | #if UNUSED␊ |
| 187 | typedef struct _PlatformInfo_t {␊ |
| 188 | ␉␊ |
| 189 | struct CPU_t {␊ |
| 190 | uint64_t␉␉Features;␉␉// CPU Features like MMX, SSE2, VT ...␊ |
| 191 | uint64_t␉␉ExtFeatures; // CPU Extended Features like SYSCALL, XD, EM64T, LAHF ...␊ |
| 192 | uint32_t␉␉Vendor;␉␉␉// Vendor␊ |
| 193 | uint32_t␉␉Signature;␉␉// Signature␊ |
| 194 | uint8_t Stepping;␉␉// Stepping␊ |
| 195 | uint8_t Model;␉␉␉// Model␊ |
| 196 | uint8_t ExtModel;␉␉// Extended Model␊ |
| 197 | uint8_t Family;␉␉␉// Family␊ |
| 198 | uint8_t ExtFamily;␉␉// Extended Family␊ |
| 199 | uint32_t␉␉NoCores;␉␉// No Cores per Package␊ |
| 200 | uint32_t␉␉NoThreads;␉␉// Threads per Package␊ |
| 201 | uint8_t␉␉␉MaxCoef;␉␉// Max Multiplier␊ |
| 202 | uint8_t␉␉␉MaxDiv;␊ |
| 203 | uint8_t␉␉␉CurrCoef;␉␉// Current Multiplier␊ |
| 204 | uint8_t␉␉␉CurrDiv;␊ |
| 205 | uint64_t␉␉TSCFrequency;␉␉// TSC Frequency Hz␊ |
| 206 | uint64_t␉␉FSBFrequency;␉␉// FSB Frequency Hz␊ |
| 207 | uint64_t␉␉CPUFrequency;␉␉// CPU Frequency Hz␊ |
| 208 | char␉␉␉BrandString[48];␉// 48 Byte Branding String␊ |
| 209 | uint8_t Brand; ␊ |
| 210 | uint32_t␉␉MicrocodeVersion; // The microcode version number a.k.a. signature a.k.a. BIOS ID ␊ |
| 211 | ␊ |
| 212 | bool isMobile; ␊ |
| 213 | bool␉␉ isServer;␉␉␉// Unlike isMobile, if this value is set it will disable all kind of detection and enforce "Server" as platform (must be set by user)␊ |
| 214 | ␊ |
| 215 | boolean_t␉dynamic_acceleration;␊ |
| 216 | boolean_t␉invariant_APIC_timer;␊ |
| 217 | boolean_t␉fine_grain_clock_mod;␊ |
| 218 | ␊ |
| 219 | uint32_t cpuid_max_basic;␊ |
| 220 | ␉␉uint32_t cpuid_max_ext;␊ |
| 221 | uint32_t␉sub_Cstates;␊ |
| 222 | uint32_t extensions;␊ |
| 223 | ␊ |
| 224 | } CPU;␊ |
| 225 | ␊ |
| 226 | struct RAM_t {␊ |
| 227 | uint64_t␉␉Frequency;␉␉␉␉// Ram Frequency␊ |
| 228 | uint32_t␉␉Divider;␉␉␉␉// Memory divider␊ |
| 229 | uint8_t␉␉␉CAS;␉␉␉␉␉// CAS 1/2/2.5/3/4/5/6/7␊ |
| 230 | uint8_t␉␉␉TRC;␉␉␉␉␉␊ |
| 231 | uint8_t␉␉␉TRP;␊ |
| 232 | uint8_t␉␉␉RAS;␊ |
| 233 | uint8_t␉␉␉Channels;␉␉␉␉// Channel Configuration Single,Dual or Triple␊ |
| 234 | uint8_t␉␉␉NoSlots;␉␉␉␉// Maximum no of slots available␊ |
| 235 | uint8_t␉␉␉Type;␉␉␉␉␉// Standard SMBIOS v2.5 Memory Type␊ |
| 236 | RamSlotInfo_t␉DIMM[MAX_RAM_SLOTS];␉// Information about each slot␊ |
| 237 | } RAM;␊ |
| 238 | ␊ |
| 239 | struct DMI {␊ |
| 240 | int␉␉␉MaxMemorySlots;␉␉// number of memory slots polulated by SMBIOS␊ |
| 241 | int␉␉␉CntMemorySlots;␉␉// number of memory slots counted␊ |
| 242 | int␉␉␉MemoryModules;␉␉// number of memory modules installed␊ |
| 243 | int␉␉␉DIMM[MAX_RAM_SLOTS];␉// Information and SPD mapping for each slot␊ |
| 244 | } DMI;␊ |
| 245 | ␊ |
| 246 | ␉uint8_t␉␉␉␉Type;␉␉␉// System Type: 1=Desktop, 2=Portable... according ACPI2.0 (FACP: PreferredProfile)␊ |
| 247 | ␉uint8_t␉␉␉␉*UUID; // SMBios UUID␊ |
| 248 | ␉uint32_t␉␉␉hardware_signature;␊ |
| 249 | ␉int8_t␉␉␉␉sysid[16];␊ |
| 250 | ␊ |
| 251 | } PlatformInfo_t;␊ |
| 252 | #endif␊ |
| 253 | ␊ |
| 254 | #ifdef ShowCurrentDate␊ |
| 255 | #include "efi.h"␊ |
| 256 | extern char * Date(void);␊ |
| 257 | extern void rtc_time(EFI_TIME *time);␊ |
| 258 | #endif␊ |
| 259 | ␊ |
| 260 | #endif /* !__LIBSAIO_PLATFORM_H */␊ |
| 261 | |