Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[efi] Update to current EDK2 headers
Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Oct 16, 2016
1 parent 54dcfed commit f796d5b
Show file tree
Hide file tree
Showing 15 changed files with 401 additions and 46 deletions.
2 changes: 1 addition & 1 deletion src/include/ipxe/efi/AArch64/ProcessorBind.h
Expand Up @@ -34,7 +34,7 @@ FILE_LICENCE ( BSD3 );

#if _MSC_EXTENSIONS
//
// use Microsoft* C complier dependent integer width types
// use Microsoft* C compiler dependent integer width types
//
typedef unsigned __int64 UINT64;
typedef __int64 INT64;
Expand Down
9 changes: 8 additions & 1 deletion src/include/ipxe/efi/Arm/ProcessorBind.h
Expand Up @@ -30,9 +30,16 @@ FILE_LICENCE ( BSD3 );
#pragma pack()
#endif

//
// RVCT does not support the __builtin_unreachable() macro
//
#ifdef __ARMCC_VERSION
#define UNREACHABLE()
#endif

#if _MSC_EXTENSIONS
//
// use Microsoft* C complier dependent integer width types
// use Microsoft* C compiler dependent integer width types
//
typedef unsigned __int64 UINT64;
typedef __int64 INT64;
Expand Down
151 changes: 144 additions & 7 deletions src/include/ipxe/efi/Base.h
Expand Up @@ -86,6 +86,117 @@ VERIFY_SIZE_OF (CHAR16, 2);
#define GLOBAL_REMOVE_IF_UNREFERENCED
#endif

//
// Should be used in combination with NORETURN to avoid 'noreturn' returns
// warnings.
//
#ifndef UNREACHABLE
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 4)
///
/// Signal compilers and analyzers that this call is not reachable. It is
/// up to the compiler to remove any code past that point.
/// Not implemented by GCC 4.4 or earlier.
///
#define UNREACHABLE() __builtin_unreachable ()
#elif defined (__has_feature)
#if __has_builtin (__builtin_unreachable)
///
/// Signal compilers and analyzers that this call is not reachable. It is
/// up to the compiler to remove any code past that point.
///
#define UNREACHABLE() __builtin_unreachable ()
#endif
#endif

#ifndef UNREACHABLE
///
/// Signal compilers and analyzers that this call is not reachable. It is
/// up to the compiler to remove any code past that point.
///
#define UNREACHABLE()
#endif
#endif

//
// Signaling compilers and analyzers that a certain function cannot return may
// remove all following code and thus lead to better optimization and less
// false positives.
//
#ifndef NORETURN
#if defined (__GNUC__) || defined (__clang__)
///
/// Signal compilers and analyzers that the function cannot return.
/// It is up to the compiler to remove any code past a call to functions
/// flagged with this attribute.
///
#define NORETURN __attribute__((noreturn))
#elif defined(_MSC_EXTENSIONS) && !defined(MDE_CPU_EBC)
///
/// Signal compilers and analyzers that the function cannot return.
/// It is up to the compiler to remove any code past a call to functions
/// flagged with this attribute.
///
#define NORETURN __declspec(noreturn)
#else
///
/// Signal compilers and analyzers that the function cannot return.
/// It is up to the compiler to remove any code past a call to functions
/// flagged with this attribute.
///
#define NORETURN
#endif
#endif

//
// Should be used in combination with ANALYZER_NORETURN to avoid 'noreturn'
// returns warnings.
//
#ifndef ANALYZER_UNREACHABLE
#ifdef __clang_analyzer__
#if __has_builtin (__builtin_unreachable)
///
/// Signal the analyzer that this call is not reachable.
/// This excludes compilers.
///
#define ANALYZER_UNREACHABLE() __builtin_unreachable ()
#endif
#endif

#ifndef ANALYZER_UNREACHABLE
///
/// Signal the analyzer that this call is not reachable.
/// This excludes compilers.
///
#define ANALYZER_UNREACHABLE()
#endif
#endif

//
// Static Analyzers may issue errors about potential NULL-dereferences when
// dereferencing a pointer, that has been checked before, outside of a
// NULL-check. This may lead to false positives, such as when using ASSERT()
// for verification.
//
#ifndef ANALYZER_NORETURN
#ifdef __has_feature
#if __has_feature (attribute_analyzer_noreturn)
///
/// Signal analyzers that the function cannot return.
/// This excludes compilers.
///
#define ANALYZER_NORETURN __attribute__((analyzer_noreturn))
#endif
#endif

#ifndef ANALYZER_NORETURN
///
/// Signal the analyzer that the function cannot return.
/// This excludes compilers.
///
#define ANALYZER_NORETURN
#endif
#endif

//
// For symbol name in assembly code, an extra "_" is sometimes necessary
//
Expand Down Expand Up @@ -193,7 +304,7 @@ struct _LIST_ENTRY {

//
// UEFI specification claims 1 and 0. We are concerned about the
// complier portability so we did it this way.
// compiler portability so we did it this way.
//

///
Expand Down Expand Up @@ -480,7 +591,31 @@ struct _LIST_ENTRY {

#define VA_COPY(Dest, Start) __va_copy (Dest, Start)

#elif defined(__GNUC__) && !defined(NO_BUILTIN_VA_FUNCS)
#elif defined(__GNUC__)

#if defined(MDE_CPU_X64) && !defined(NO_MSABI_VA_FUNCS)
//
// X64 only. Use MS ABI version of GCC built-in macros for variable argument lists.
//
///
/// Both GCC and LLVM 3.8 for X64 support new variable argument intrinsics for Microsoft ABI
///

///
/// Variable used to traverse the list of arguments. This type can vary by
/// implementation and could be an array or structure.
///
typedef __builtin_ms_va_list VA_LIST;

#define VA_START(Marker, Parameter) __builtin_ms_va_start (Marker, Parameter)

#define VA_ARG(Marker, TYPE) ((sizeof (TYPE) < sizeof (UINTN)) ? (TYPE)(__builtin_va_arg (Marker, UINTN)) : (TYPE)(__builtin_va_arg (Marker, TYPE)))

#define VA_END(Marker) __builtin_ms_va_end (Marker)

#define VA_COPY(Dest, Start) __builtin_ms_va_copy (Dest, Start)

#else
//
// Use GCC built-in macros for variable argument lists.
//
Expand All @@ -499,6 +634,8 @@ typedef __builtin_va_list VA_LIST;

#define VA_COPY(Dest, Start) __builtin_va_copy (Dest, Start)

#endif

#else
///
/// Variable used to traverse the list of arguments. This type can vary by
Expand Down Expand Up @@ -1038,35 +1175,35 @@ typedef UINTN RETURN_STATUS;
#if defined(_MSC_EXTENSIONS) && !defined (__INTEL_COMPILER) && !defined (MDE_CPU_EBC)
#pragma intrinsic(_ReturnAddress)
/**
Get the return address of the calling funcation.
Get the return address of the calling function.
Based on intrinsic function _ReturnAddress that provides the address of
the instruction in the calling function that will be executed after
control returns to the caller.
@param L Return Level.
@return The return address of the calling funcation or 0 if L != 0.
@return The return address of the calling function or 0 if L != 0.
**/
#define RETURN_ADDRESS(L) ((L == 0) ? _ReturnAddress() : (VOID *) 0)
#elif defined(__GNUC__)
void * __builtin_return_address (unsigned int level);
/**
Get the return address of the calling funcation.
Get the return address of the calling function.
Based on built-in Function __builtin_return_address that returns
the return address of the current function, or of one of its callers.
@param L Return Level.
@return The return address of the calling funcation.
@return The return address of the calling function.
**/
#define RETURN_ADDRESS(L) __builtin_return_address (L)
#else
/**
Get the return address of the calling funcation.
Get the return address of the calling function.
@param L Return Level.
Expand Down
4 changes: 2 additions & 2 deletions src/include/ipxe/efi/Ia32/ProcessorBind.h
Expand Up @@ -81,7 +81,7 @@ FILE_LICENCE ( BSD3 );
#pragma warning ( disable : 4057 )

//
// ASSERT(FALSE) or while (TRUE) are legal constructes so supress this warning
// ASSERT(FALSE) or while (TRUE) are legal constructs so suppress this warning
//
#pragma warning ( disable : 4127 )

Expand Down Expand Up @@ -121,7 +121,7 @@ FILE_LICENCE ( BSD3 );
#if defined(_MSC_EXTENSIONS)

//
// use Microsoft C complier dependent integer width types
// use Microsoft C compiler dependent integer width types
//

///
Expand Down
56 changes: 38 additions & 18 deletions src/include/ipxe/efi/IndustryStandard/Pci22.h
Expand Up @@ -5,11 +5,10 @@
PCI Local Bus Specification, 2.2
PCI-to-PCI Bridge Architecture Specification, Revision 1.2
PC Card Standard, 8.0
PCI Power Management Interface Specifiction, Revision 1.2
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2014 - 2105, Hewlett-Packard Development Company, L.P.<BR>
Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2014 - 2015, Hewlett-Packard Development Company, L.P.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
Expand Down Expand Up @@ -638,6 +637,7 @@ typedef union {
#define EFI_PCI_CAPABILITY_ID_SLOTID 0x04
#define EFI_PCI_CAPABILITY_ID_MSI 0x05
#define EFI_PCI_CAPABILITY_ID_HOTPLUG 0x06
#define EFI_PCI_CAPABILITY_ID_SHPC 0x0C

///
/// Capabilities List Header
Expand All @@ -648,18 +648,6 @@ typedef struct {
UINT8 NextItemPtr;
} EFI_PCI_CAPABILITY_HDR;

///
/// Power Management Register Block Definition
/// Section 3.2, PCI Power Management Interface Specifiction, Revision 1.2
///
typedef struct {
EFI_PCI_CAPABILITY_HDR Hdr;
UINT16 PMC;
UINT16 PMCSR;
UINT8 BridgeExtention;
UINT8 Data;
} EFI_PCI_CAPABILITY_PMI;

///
/// PMC - Power Management Capabilities
/// Section 3.2.3, PCI Power Management Interface Specifiction, Revision 1.2
Expand All @@ -668,7 +656,7 @@ typedef union {
struct {
UINT16 Version : 3;
UINT16 PmeClock : 1;
UINT16 : 1;
UINT16 Reserved : 1;
UINT16 DeviceSpecificInitialization : 1;
UINT16 AuxCurrent : 3;
UINT16 D1Support : 1;
Expand All @@ -687,7 +675,9 @@ typedef union {
typedef union {
struct {
UINT16 PowerState : 2;
UINT16 : 6;
UINT16 ReservedForPciExpress : 1;
UINT16 NoSoftReset : 1;
UINT16 Reserved : 4;
UINT16 PmeEnable : 1;
UINT16 DataSelect : 4;
UINT16 DataScale : 2;
Expand All @@ -696,6 +686,36 @@ typedef union {
UINT16 Data;
} EFI_PCI_PMCSR;

#define PCI_POWER_STATE_D0 0
#define PCI_POWER_STATE_D1 1
#define PCI_POWER_STATE_D2 2
#define PCI_POWER_STATE_D3_HOT 3

///
/// PMCSR_BSE - PMCSR PCI-to-PCI Bridge Support Extensions
/// Section 3.2.5, PCI Power Management Interface Specifiction, Revision 1.2
///
typedef union {
struct {
UINT8 Reserved : 6;
UINT8 B2B3 : 1;
UINT8 BusPowerClockControl : 1;
} Bits;
UINT8 Uint8;
} EFI_PCI_PMCSR_BSE;

///
/// Power Management Register Block Definition
/// Section 3.2, PCI Power Management Interface Specifiction, Revision 1.2
///
typedef struct {
EFI_PCI_CAPABILITY_HDR Hdr;
EFI_PCI_PMC PMC;
EFI_PCI_PMCSR PMCSR;
EFI_PCI_PMCSR_BSE BridgeExtention;
UINT8 Data;
} EFI_PCI_CAPABILITY_PMI;

///
/// A.G.P Capability
/// Section 6.1.4, Accelerated Graphics Port Interface Specification, Revision 1.0
Expand Down

0 comments on commit f796d5b

Please sign in to comment.