; **************************************************************************** ; * ; * @file ; * ; * Agesa structures and definitions ; * ; * Contains AMD AGESA core interface ; * ; * @xrefitem bom "File Content Label" "Release Content" ; * @e project: AGESA ; * @e sub-project: Include ; * @e \$Revision: 44323 $ @e \$Date: 2010-12-22 01:24:58 -0700 (Wed, 22 Dec 2010) $ ; ; **************************************************************************** ; * ; * Copyright (c) 2011, Advanced Micro Devices, Inc. ; * All rights reserved. ; * ; * Redistribution and use in source and binary forms, with or without ; * modification, are permitted provided that the following conditions are met: ; * * Redistributions of source code must retain the above copyright ; * notice, this list of conditions and the following disclaimer. ; * * Redistributions in binary form must reproduce the above copyright ; * notice, this list of conditions and the following disclaimer in the ; * documentation and/or other materials provided with the distribution. ; * * Neither the name of Advanced Micro Devices, Inc. nor the names of ; * its contributors may be used to endorse or promote products derived ; * from this software without specific prior written permission. ; * ; * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ; * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ; * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ; * DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY ; * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ; * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ; * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ; * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ; * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ; * ; * ; ************************************************************************** UINT64 TEXTEQU UINT32 TEXTEQU UINT16 TEXTEQU UINT8 TEXTEQU CHAR8 TEXTEQU BOOLEAN TEXTEQU POINTER TEXTEQU ; AGESA Types and Definitions AGESA_REVISION EQU "Arch2008" AGESA_ID EQU "AGESA" LAST_ENTRY EQU 0FFFFFFFFh IMAGE_SIGNATURE EQU 'DMA$' IOCF8 EQU 0CF8h IOCFC EQU 0CFCh ; The return status for all AGESA public services. ; Services return the most severe status of any logged event. Status other than SUCCESS, UNSUPPORTED, and BOUNDS_CHK ; will have log entries with more detail. AGESA_SUCCESS EQU 0 ; < The service completed normally. Info may be logged. AGESA_UNSUPPORTED EQU 1 ; < The dispatcher or create struct had an unimplemented function requested. ; < Not logged. AGESA_BOUNDS_CHK EQU 2 ; < A dynamic parameter was out of range and the service was not provided. ; < Example, memory address not installed, heap buffer handle not found. ; < Not Logged. ; AGESA_STATUS of greater severity (the ones below this line), always have a log entry available. AGESA_ALERT EQU 3 ; < An observed condition, but no loss of function. ; < See log. Example, HT CRC. AGESA_WARNING EQU 4 ; < Possible or minor loss of function. See Log. AGESA_ERROR EQU 5 ; < Significant loss of function, boot may be possible. See Log. AGESA_CRITICAL EQU 6 ; < Continue boot only to notify user. See Log. AGESA_FATAL EQU 7 ; < Halt booting. See Log. AgesaStatusMax EQU 8 ; < Not a status, use for limit checking. AGESA_STATUS TEXTEQU ; For checking whether a status is at or above the mandatory log level. AGESA_STATUS_LOG_LEVEL EQU AGESA_ALERT CALLOUT_ENTRY TEXTEQU IMAGE_ENTRY TEXTEQU MODULE_ENTRY TEXTEQU ; This allocation type is used by the AmdCreateStruct entry point PreMemHeap EQU 0 ; < Create heap in cache. PostMemDram EQU 1 ; < Create heap in memory. ByHost EQU 2 ; < Create heap by Host. ALLOCATION_METHOD TEXTEQU ; These width descriptors are used by the library function, and others, to specify the data size AccessWidth8 EQU 1 ; < Access width is 8 bits. AccessWidth16 EQU 2 ; < Access width is 16 bits. AccessWidth32 EQU 3 ; < Access width is 32 bits. AccessWidth64 EQU 4 ; < Access width is 64 bits. AccessS3SaveWidth8 EQU 81h ; < Save 8 bits data. AccessS3SaveWidth16 EQU 130 ; < Save 16 bits data. AccessS3SaveWidth32 EQU 131 ; < Save 32 bits data. AccessS3SaveWidth64 EQU 132 ; < Save 64 bits data. ACCESS_WIDTH TEXTEQU ; AGESA struct name ; AGESA BASIC FUNCTIONS AMD_INIT_RECOVERY EQU 00020000h AMD_CREATE_STRUCT EQU 00020001h AMD_INIT_EARLY EQU 00020002h AMD_INIT_ENV EQU 00020003h AMD_INIT_LATE EQU 00020004h AMD_INIT_MID EQU 00020005h AMD_INIT_POST EQU 00020006h AMD_INIT_RESET EQU 00020007h AMD_INIT_RESUME EQU 00020008h AMD_RELEASE_STRUCT EQU 00020009h AMD_S3LATE_RESTORE EQU 0002000Ah AMD_S3_SAVE EQU 0002000Bh AMD_GET_APIC_ID EQU 0002000Ch AMD_GET_PCI_ADDRESS EQU 0002000Dh AMD_IDENTIFY_CORE EQU 0002000Eh AMD_READ_EVENT_LOG EQU 0002000Fh AMD_LATE_RUN_AP_TASK EQU 00020010h AMD_IDENTIFY_DIMMS EQU 00020011h AGESA_STRUCT_NAME TEXTEQU ; ResetType constant values WARM_RESET_WHENEVER EQU 1 COLD_RESET_WHENEVER EQU 2 WARM_RESET_IMMEDIATELY EQU 3 COLD_RESET_IMMEDIATELY EQU 4 ; AGESA Structures ; The standard header for all AGESA services. AMD_CONFIG_PARAMS STRUCT ImageBasePtr UINT32 ? ; < The AGESA Image base address. Func UINT32 ? ; < The service desired, @sa dispatch.h. AltImageBasePtr UINT32 ? ; < Alternate Image location CalloutPtr CALLOUT_ENTRY ? ; < For Callout from AGESA HeapStatus UINT8 ? ; < For heap status from boot time slide. HeapBasePtr UINT64 ? ; < Location of the heap Reserved UINT8 (7) DUP (?) ; < This space is reserved for future use. AMD_CONFIG_PARAMS ENDS ; Create Struct Interface. AMD_INTERFACE_PARAMS STRUCT StdHeader AMD_CONFIG_PARAMS {} ; < Config header AgesaFunctionName AGESA_STRUCT_NAME ? ; < The service to init, @sa dispatch.h AllocationMethod ALLOCATION_METHOD ? ; < How to handle buffer allocation NewStructSize UINT32 ? ; < The size of the allocated data, in for ByHost, else out only. NewStructPtr POINTER ? ; < The struct for the service. ; < The struct to init for ByHost allocation, ; < the initialized struct on return. AMD_INTERFACE_PARAMS ENDS FUNC_0 EQU 0 ; bit-placed for PCI address creation FUNC_1 EQU 1 FUNC_2 EQU 2 FUNC_3 EQU 3 FUNC_4 EQU 4 FUNC_5 EQU 5 FUNC_6 EQU 6 FUNC_7 EQU 7 ; AGESA Binary module header structure AMD_IMAGE_HEADER STRUCT Signature UINT32 ? ; < Binary Signature CreatorID CHAR8 (8) DUP (?) ; < 8 characters ID Version CHAR8 (12) DUP (?) ; < 12 characters version ModuleInfoOffset UINT32 ? ; < Offset of module EntryPointAddress UINT32 ? ; < Entry address ImageBase UINT32 ? ; < Image base RelocTableOffset UINT32 ? ; < Relocate Table offset ImageSize UINT32 ? ; < Size Checksum UINT16 ? ; < Checksum ImageType UINT8 ? ; < Type V_Reserved UINT8 ? ; < Reserved AMD_IMAGE_HEADER ENDS ; AGESA Binary module header structure AMD_MODULE_HEADER STRUCT ModuleHeaderSignature UINT32 ? ; < Module signature ModuleIdentifier CHAR8 (8) DUP (?) ; < 8 characters ID ModuleVersion CHAR8 (12) DUP (?) ; < 12 characters version ModuleDispatcher POINTER ? ; < A pointer point to dispatcher NextBlock POINTER ? ; < Next module header link AMD_MODULE_HEADER ENDS ; AMD_CODE_HEADER Signatures. AGESA_CODE_SIGNATURE TEXTEQU <'!', '!', 'A', 'G', 'E', 'S', 'A', ' '> CIMXNB_CODE_SIGNATURE TEXTEQU <'!', '!', 'C', 'I', 'M', 'X', 'N', 'B'> CIMXSB_CODE_SIGNATURE TEXTEQU <'!', '!', 'C', 'I', 'M', 'X', 'S', 'B'> ; AGESA_CODE_SIGNATURE AMD_CODE_HEADER STRUCT Signature CHAR8 (8) DUP (?) ; < code header Signature ComponentName CHAR8 (8) DUP (?) ; < 8 character name of the code module Version CHAR8 (12) DUP (?) ; < 12 character version string TerminatorNull CHAR8 ? ; < null terminated string VerReserved CHAR8 (7) DUP (?) ; < reserved space AMD_CODE_HEADER ENDS ; Extended PCI address format EXT_PCI_ADDR STRUCT Register UINT32 ? ; IN OUT UINT32 Register:12; ; < Register offset ; IN OUT UINT32 Function:3; ; < Function number ; IN OUT UINT32 Device:5; ; < Device number ; IN OUT UINT32 Bus:8; ; < Bus number ; IN OUT UINT32 Segment:4; ; < Segment EXT_PCI_ADDR ENDS ; Union type for PCI address PCI_ADDR UNION AddressValue UINT32 ? ; < Formal address Address EXT_PCI_ADDR {} ; < Extended address PCI_ADDR ENDS ; SBDFO - Segment Bus Device Function Offset ; 31:28 Segment (4-bits) ; 27:20 Bus (8-bits) ; 19:15 Device (5-bits) ; 14:12 Function(3-bits) ; 11:00 Offset (12-bits) ILLEGAL_SBDFO EQU 0FFFFFFFFh ; CPUID data received registers format CPUID_DATA STRUCT EAX_Reg UINT32 ? ; < CPUID instruction result in EAX EBX_Reg UINT32 ? ; < CPUID instruction result in EBX ECX_Reg UINT32 ? ; < CPUID instruction result in ECX EDX_Reg UINT32 ? ; < CPUID instruction result in EDX CPUID_DATA ENDS ; HT frequency for external callbacks ;typedef enum { HT_FREQUENCY_200M EQU 0 ; < HT speed 200 for external callbacks HT_FREQUENCY_400M EQU 2 ; < HT speed 400 for external callbacks HT_FREQUENCY_600M EQU 4 ; < HT speed 600 for external callbacks HT_FREQUENCY_800M EQU 5 ; < HT speed 800 for external callbacks HT_FREQUENCY_1000M EQU 6 ; < HT speed 1000 for external callbacks HT_FREQUENCY_1200M EQU 7 ; < HT speed 1200 for external callbacks HT_FREQUENCY_1400M EQU 8 ; < HT speed 1400 for external callbacks HT_FREQUENCY_1600M EQU 9 ; < HT speed 1600 for external callbacks HT_FREQUENCY_1800M EQU 10 ; < HT speed 1800 for external callbacks HT_FREQUENCY_2000M EQU 11 ; < HT speed 2000 for external callbacks HT_FREQUENCY_2200M EQU 12 ; < HT speed 2200 for external callbacks HT_FREQUENCY_2400M EQU 13 ; < HT speed 2400 for external callbacks HT_FREQUENCY_2600M EQU 14 ; < HT speed 2600 for external callbacks HT_FREQUENCY_2800M EQU 17 ; < HT speed 2800 for external callbacks HT_FREQUENCY_3000M EQU 18 ; < HT speed 3000 for external callbacks HT_FREQUENCY_3200M EQU 19 ; < HT speed 3200 for external callbacks HT_FREQUENCY_MAX EQU 20 ; < Limit Check. HT_FREQUENCIES TEXTEQU ;} HT_FREQUENCIES; HT3_FREQUENCY_MIN EQU HT_FREQUENCY_1200M IFNDEF BIT0 BIT0 EQU 0000000000000001h ENDIF IFNDEF BIT1 BIT1 EQU 0000000000000002h ENDIF IFNDEF BIT2 BIT2 EQU 0000000000000004h ENDIF IFNDEF BIT3 BIT3 EQU 0000000000000008h ENDIF IFNDEF BIT4 BIT4 EQU 0000000000000010h ENDIF IFNDEF BIT5 BIT5 EQU 0000000000000020h ENDIF IFNDEF BIT6 BIT6 EQU 0000000000000040h ENDIF IFNDEF BIT7 BIT7 EQU 0000000000000080h ENDIF IFNDEF BIT8 BIT8 EQU 0000000000000100h ENDIF IFNDEF BIT9 BIT9 EQU 0000000000000200h ENDIF IFNDEF BIT10 BIT10 EQU 0000000000000400h ENDIF IFNDEF BIT11 BIT11 EQU 0000000000000800h ENDIF IFNDEF BIT12 BIT12 EQU 0000000000001000h ENDIF IFNDEF BIT13 BIT13 EQU 0000000000002000h ENDIF IFNDEF BIT14 BIT14 EQU 0000000000004000h ENDIF IFNDEF BIT15 BIT15 EQU 0000000000008000h ENDIF IFNDEF BIT16 BIT16 EQU 0000000000010000h ENDIF IFNDEF BIT17 BIT17 EQU 0000000000020000h ENDIF IFNDEF BIT18 BIT18 EQU 0000000000040000h ENDIF IFNDEF BIT19 BIT19 EQU 0000000000080000h ENDIF IFNDEF BIT20 BIT20 EQU 0000000000100000h ENDIF IFNDEF BIT21 BIT21 EQU 0000000000200000h ENDIF IFNDEF BIT22 BIT22 EQU 0000000000400000h ENDIF IFNDEF BIT23 BIT23 EQU 0000000000800000h ENDIF IFNDEF BIT24 BIT24 EQU 0000000001000000h ENDIF IFNDEF BIT25 BIT25 EQU 0000000002000000h ENDIF IFNDEF BIT26 BIT26 EQU 0000000004000000h ENDIF IFNDEF BIT27 BIT27 EQU 0000000008000000h ENDIF IFNDEF BIT28 BIT28 EQU 0000000010000000h ENDIF IFNDEF BIT29 BIT29 EQU 0000000020000000h ENDIF IFNDEF BIT30 BIT30 EQU 0000000040000000h ENDIF IFNDEF BIT31 BIT31 EQU 0000000080000000h ENDIF IFNDEF BIT32 BIT32 EQU 0000000100000000h ENDIF IFNDEF BIT33 BIT33 EQU 0000000200000000h ENDIF IFNDEF BIT34 BIT34 EQU 0000000400000000h ENDIF IFNDEF BIT35 BIT35 EQU 0000000800000000h ENDIF IFNDEF BIT36 BIT36 EQU 0000001000000000h ENDIF IFNDEF BIT37 BIT37 EQU 0000002000000000h ENDIF IFNDEF BIT38 BIT38 EQU 0000004000000000h ENDIF IFNDEF BIT39 BIT39 EQU 0000008000000000h ENDIF IFNDEF BIT40 BIT40 EQU 0000010000000000h ENDIF IFNDEF BIT41 BIT41 EQU 0000020000000000h ENDIF IFNDEF BIT42 BIT42 EQU 0000040000000000h ENDIF IFNDEF BIT43 BIT43 EQU 0000080000000000h ENDIF IFNDEF BIT44 BIT44 EQU 0000100000000000h ENDIF IFNDEF BIT45 BIT45 EQU 0000200000000000h ENDIF IFNDEF BIT46 BIT46 EQU 0000400000000000h ENDIF IFNDEF BIT47 BIT47 EQU 0000800000000000h ENDIF IFNDEF BIT48 BIT48 EQU 0001000000000000h ENDIF IFNDEF BIT49 BIT49 EQU 0002000000000000h ENDIF IFNDEF BIT50 BIT50 EQU 0004000000000000h ENDIF IFNDEF BIT51 BIT51 EQU 0008000000000000h ENDIF IFNDEF BIT52 BIT52 EQU 0010000000000000h ENDIF IFNDEF BIT53 BIT53 EQU 0020000000000000h ENDIF IFNDEF BIT54 BIT54 EQU 0040000000000000h ENDIF IFNDEF BIT55 BIT55 EQU 0080000000000000h ENDIF IFNDEF BIT56 BIT56 EQU 0100000000000000h ENDIF IFNDEF BIT57 BIT57 EQU 0200000000000000h ENDIF IFNDEF BIT58 BIT58 EQU 0400000000000000h ENDIF IFNDEF BIT59 BIT59 EQU 0800000000000000h ENDIF IFNDEF BIT60 BIT60 EQU 1000000000000000h ENDIF IFNDEF BIT61 BIT61 EQU 2000000000000000h ENDIF IFNDEF BIT62 BIT62 EQU 4000000000000000h ENDIF IFNDEF BIT63 BIT63 EQU 8000000000000000h ENDIF