[edk2-devel] [PATCH v1 03/10] Silicon/Phytium: Added SMBIOS support to FT2000/4

Leif Lindholm leif at nuviainc.com
Wed Feb 10 18:52:25 UTC 2021


On Fri, Feb 05, 2021 at 18:06:23 +0800, Ling Jia wrote:
> This driver installs SMBIOS information for FT2000/4.
> 
> Signed-off-by: Ling Jia <jialing at phytium.com.cn>

Reviewed-by: Leif Lindholm <leif at nuviainc.com>

/
    Leif

> ---
>  Platform/Phytium/DurianPkg/DurianPkg.dsc                                    |   6 +
>  Platform/Phytium/DurianPkg/DurianPkg.fdf                                    |   6 +
>  Silicon/Phytium/FT2000-4Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf |  47 +
>  Silicon/Phytium/FT2000-4Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c   | 943 ++++++++++++++++++++
>  4 files changed, 1002 insertions(+)
> 
> diff --git a/Platform/Phytium/DurianPkg/DurianPkg.dsc b/Platform/Phytium/DurianPkg/DurianPkg.dsc
> index ae6e08de8dbd..75222fac578c 100644
> --- a/Platform/Phytium/DurianPkg/DurianPkg.dsc
> +++ b/Platform/Phytium/DurianPkg/DurianPkg.dsc
> @@ -266,6 +266,12 @@ [Components.common]
>    Silicon/Phytium/FT2000-4Pkg/Drivers/AcpiTables/AcpiTables.inf
>    Silicon/Phytium/PhytiumCommonPkg/Drivers/AcpiPlatformDxe/AcpiPlatformDxe.inf
>  
> +  #
> +  # SMBIOS
> +  #
> +  MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
> +  Silicon/Phytium/FT2000-4Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf
> +
>    #
>    # Bds
>    #
> diff --git a/Platform/Phytium/DurianPkg/DurianPkg.fdf b/Platform/Phytium/DurianPkg/DurianPkg.fdf
> index 63801ec8b08e..58317f24c725 100644
> --- a/Platform/Phytium/DurianPkg/DurianPkg.fdf
> +++ b/Platform/Phytium/DurianPkg/DurianPkg.fdf
> @@ -167,6 +167,12 @@ [FV.FvMain]
>    #
>    INF ShellPkg/Application/Shell/Shell.inf
>  
> +  #
> +  # SMBIOS
> +  #
> +  INF MdeModulePkg/Universal/SmbiosDxe/SmbiosDxe.inf
> +  INF Silicon/Phytium/FT2000-4Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf
> +
>    #
>    # Bds
>    #
> diff --git a/Silicon/Phytium/FT2000-4Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf b/Silicon/Phytium/FT2000-4Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf
> new file mode 100644
> index 000000000000..69a021e04823
> --- /dev/null
> +++ b/Silicon/Phytium/FT2000-4Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.inf
> @@ -0,0 +1,47 @@
> +#/** @file
> +#  This driver installs SMBIOS information for Phytium.
> +#
> +#  Copyright (C) 2020, Phytium Technology Co, Ltd. All rights reserved.<BR>
> +#
> +#  SPDX-License-Identifier: BSD-2-Clause-Patent
> +#
> +#**/
> +
> +[Defines]
> +  INF_VERSION                    = 0x0001001b
> +  BASE_NAME                      = SmbiosPlatformDxe
> +  FILE_GUID                      = d64f09f8-40dc-11eb-9be6-f7a038f956ba
> +  MODULE_TYPE                    = DXE_DRIVER
> +  VERSION_STRING                 = 1.0
> +  ENTRY_POINT                    = SmbiosTablePublishEntry
> +
> +#
> +# The following information is for reference only and not required by the build tools.
> +#
> +#  VALID_ARCHITECTURES           = AARCH64
> +#
> +[Sources]
> +  SmbiosPlatformDxe.c
> +
> +[Packages]
> +  ArmPkg/ArmPkg.dec
> +  MdeModulePkg/MdeModulePkg.dec
> +  MdePkg/MdePkg.dec
> +  Silicon/Phytium/PhytiumCommonPkg/PhytiumCommonPkg.dec
> +
> +[LibraryClasses]
> +  DebugLib
> +  IoLib
> +  UefiBootServicesTableLib
> +  UefiDriverEntryPoint
> +
> +[Guids]
> +  gEfiGlobalVariableGuid
> +
> +[Protocols]
> +  gEfiSmbiosProtocolGuid      # PROTOCOL ALWAYS_CONSUMED
> +
> +[Guids]
> +
> +[Depex]
> +  gEfiSmbiosProtocolGuid
> diff --git a/Silicon/Phytium/FT2000-4Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c b/Silicon/Phytium/FT2000-4Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c
> new file mode 100644
> index 000000000000..ffcfc6c09d8b
> --- /dev/null
> +++ b/Silicon/Phytium/FT2000-4Pkg/Drivers/SmbiosPlatformDxe/SmbiosPlatformDxe.c
> @@ -0,0 +1,943 @@
> +/** @file
> +  This driver installs SMBIOS information for Phytium Durian platforms.
> +
> +  Copyright (C) 2020, Phytium Technology Co Ltd. All rights reserved.<BR>
> +
> +  SPDX-License-Identifier: BSD-2-Clause-Patent
> +
> +**/
> +
> +
> +#include <IndustryStandard/SmBios.h>
> +#include <Library/DebugLib.h>
> +#include <Library/UefiBootServicesTableLib.h>
> +#include <Platform.h>
> +#include <Protocol/Smbios.h>
> +
> +// SMBIOS tables often reference each other using
> +// fixed constants, define a list of these constants
> +// for our hardcoded tables
> +
> +#define TYPE0_STRINGS                                         \
> +  "PHYTIUM LTD\0"                         /* Vendor */        \
> +  "V1.0\0"                                /* BiosVersion */   \
> +  __DATE__"\0"                            /* BiosReleaseDate */
> +
> +#define TYPE1_STRINGS                                        \
> +  "PHYTIUM LTD\0"                         /* Manufacturer */ \
> +  "Phytium Durian Development Platform\0" /* Product Name */ \
> +  "None\0"                                /* Version */      \
> +  "Not Set\0"                             /* SerialNumber */ \
> +  "Not set\0"                             /* SKUNumber */    \
> +  "FT-2000/4\0"                           /* Family */       \
> +
> +#define TYPE2_STRINGS                                        \
> +  "PHYTIUM LTD\0"                         /* Manufacturer */ \
> +  "Phytium Durian Development Platform\0" /* Product Name */ \
> +  "None\0"                                /* Version */        \
> +  "Not Set\0"                             /* Serial */         \
> +  "Not Set\0"                             /* BaseBoardAssetTag */ \
> +  "Not Set\0"                             /* BaseBoardChassisLocation */
> +
> +#define TYPE3_STRINGS                                       \
> +  "PHYTIUM LTD\0"                        /* Manufacturer */ \
> +  "None\0"                               /* Version */      \
> +  "Not Set\0"                            /* Serial  */      \
> +  "Not Set\0"                            /* AssetTag  */
> +
> +#define TYPE4_STRINGS                                                   \
> +  "FT-2000/4\0"                          /* socket type */              \
> +  "PHYTIUM LTD\0"                        /* manufactuer */              \
> +  "FT-2000/4\0"                          /* processor version */        \
> +  "Not Set\0"                            /* SerialNumber */             \
> +  "Not Set\0"                            /* processor 2 description */  \
> +  "Not Set\0"                            /* AssetTag */
> +
> +
> +#define TYPE7_STRINGS                              \
> +  "L1 Instruction\0"                 /* L1I  */    \
> +  "L1 Data\0"                        /* L1D  */    \
> +  "L2\0"                             /* L2   */
> +
> +#define TYPE7_L1DATA_STRINGS            \
> +  "L1 Data Cache\0"                  /* L1 data   */
> +
> +
> +#define TYPE7_L1INS_STRINGS           \
> +  "L1 Instruction Cache\0"          /* L1 ins   */
> +
> +#define TYPE7_L2_STRINGS          \
> +  "L2 Cache\0"                      /* L2   */
> +
> +#define TYPE7_L3_STRINGS          \
> +  "L3 Cache\0"                     /* L3   */
> +
> +
> +#define TYPE9_STRINGS                                     \
> +  "PCIE_SLOT0\0"                     /* Slot0 */          \
> +  "PCIE_SLOT1\0"                     /* Slot1 */          \
> +  "PCIE_SLOT2\0"                     /* Slot2 */          \
> +  "PCIE_SLOT3\0"                     /* Slot3 */
> +
> +#define TYPE9_STRINGS_PCIE0X16                            \
> +  "PCIE0_X16\0"
> +
> +#define TYPE9_STRINGS_PCIE0X1                             \
> +  "PCIE0_X1\0"
> +
> +#define TYPE9_STRINGS_PCIE1X16                            \
> +  "PCIE1_X16\0"
> +
> +#define TYPE9_STRINGS_PCIE1X1                             \
> +  "PCIE1_X1\0"
> +
> +#define TYPE13_STRINGS                                    \
> +  "en|US|iso8859-1\0"                                     \
> +  "zh|CN|unicode\0"
> +
> +
> +#define TYPE16_STRINGS                                     \
> +  "\0"                               /* nothing */
> +
> +#define TYPE17_STRINGS_CHANNEL0                            \
> +  "SOCKET 0 CHANNEL 0 DIMM 0\0"     /* location */         \
> +  "Bank0\0"                         /* bank description */ \
> +  "Not Set\0"              \
> +  "Not Set\0"              \
> +  "Not Set\0"             \
> +  "Not Set\0"
> +
> +#define TYPE17_STRINGS_CHANNEL1                          \
> +  "SOCKET 0 CHANNEL 1 DIMM 0\0"    /* location */        \
> +  "Bank0\0"                \
> +  "Not Set\0"              \
> +  "Not Set\0"              \
> +  "Not Set\0"              \
> +  "Not Set\0"
> +
> +
> +#define TYPE19_STRINGS                             \
> +  "\0"                              /* nothing */
> +
> +#define TYPE32_STRINGS                             \
> +  "\0"                              /* nothing */
> +
> +#define TYPE39_STRINGS    \
> +  "Not specified\0"       /* not specified*/    \
> +  "Not specified\0"       /* not specified*/    \
> +  "Not specified\0"       /* not specified*/    \
> +  "Not specified\0"       /* not specified*/    \
> +  "Not specified\0"       /* not specified*/    \
> +  "Not specified\0"       /* not specified*/    \
> +  "Not specified\0"       /* not specified*/
> +
> +#define TYPE38_STRINGS                         \
> +  "\0"
> +
> +//
> +// Type definition and contents of the default SMBIOS table.
> +// This table covers only the minimum structures required by
> +// the SMBIOS specification (section 6.2, version 3.0)
> +//
> +#pragma pack(1)
> +typedef struct {
> +  SMBIOS_TABLE_TYPE0 Base;
> +  INT8              Strings[sizeof(TYPE0_STRINGS)];
> +} ARM_TYPE0;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE1 Base;
> +  UINT8              Strings[sizeof(TYPE1_STRINGS)];
> +} ARM_TYPE1;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE2 Base;
> +  UINT8              Strings[sizeof(TYPE2_STRINGS)];
> +} ARM_TYPE2;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE3 Base;
> +  UINT8              Strings[sizeof(TYPE3_STRINGS)];
> +} ARM_TYPE3;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE4 Base;
> +  UINT8              Strings[sizeof(TYPE4_STRINGS)];
> +} ARM_TYPE4;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE7 Base;
> +  UINT8              Strings[sizeof(TYPE7_L1DATA_STRINGS)];
> +} ARM_TYPE7_L1DATA;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE7 Base;
> +  UINT8              Strings[sizeof(TYPE7_L1INS_STRINGS)];
> +} ARM_TYPE7_L1INS;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE7 Base;
> +  UINT8              Strings[sizeof(TYPE7_L2_STRINGS)];
> +} ARM_TYPE7_L2;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE7 Base;
> +  UINT8              Strings[sizeof(TYPE7_L3_STRINGS)];
> +} ARM_TYPE7_L3;
> +
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE9 Base;
> +  UINT8              Strings[sizeof(TYPE9_STRINGS)];
> +} ARM_TYPE9;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE9 Base;
> +  UINT8              Strings[sizeof(TYPE9_STRINGS_PCIE0X16)];
> +} ARM_TYPE9_PCIE0X16;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE9 Base;
> +  UINT8              Strings[sizeof(TYPE9_STRINGS_PCIE0X1)];
> +} ARM_TYPE9_PCIE0X1;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE9 Base;
> +  UINT8              Strings[sizeof(TYPE9_STRINGS_PCIE1X16)];
> +} ARM_TYPE9_PCIE1X16;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE9 Base;
> +  UINT8              Strings[sizeof(TYPE9_STRINGS_PCIE1X1)];
> +} ARM_TYPE9_PCIE1X1;
> +
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE13 Base;
> +  UINT8              Strings[sizeof(TYPE13_STRINGS)];
> +} ARM_TYPE13;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE16 Base;
> +  UINT8              Strings[sizeof(TYPE16_STRINGS)];
> +} ARM_TYPE16;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE17 Base;
> +  UINT8               Strings[sizeof(TYPE17_STRINGS_CHANNEL0)];
> +} ARM_TYPE17_CHANNEL0;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE17 Base;
> +  UINT8               Strings[sizeof(TYPE17_STRINGS_CHANNEL1)];
> +} ARM_TYPE17_CHANNEL1;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE19 Base;
> +  UINT8              Strings[sizeof(TYPE19_STRINGS)];
> +} ARM_TYPE19;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE32 Base;
> +  UINT8              Strings[sizeof(TYPE32_STRINGS)];
> +} ARM_TYPE32;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE38 Base;
> +  UINT8              Strings[sizeof(TYPE38_STRINGS)];
> +} ARM_TYPE38;
> +
> +typedef struct {
> +  SMBIOS_TABLE_TYPE39 Base;
> +  UINT8              Strings[sizeof(TYPE39_STRINGS)];
> +} ARM_TYPE39;
> +
> +enum SMBIOS_REFRENCE_HANDLES {
> +  SMBIOS_HANDLE_L1I = 0x1000,
> +  SMBIOS_HANDLE_L1D,
> +  SMBIOS_HANDLE_L2,
> +  SMBIOS_HANDLE_L3,
> +  SMBIOS_HANDLE_MOTHERBOARD,
> +  SMBIOS_HANDLE_CHASSIS,
> +  SMBIOS_HANDLE_CLUSTER,
> +  SMBIOS_HANDLE_MEMORY,
> +  SMBIOS_HANDLE_DIMM_0,
> +  SMBIOS_HANDLE_DIMM_1
> +};
> +
> +#define SERIAL_LEN 10  //this must be less than the buffer len allocated in the type1 structure
> +
> +#pragma pack()
> +
> +//BIOS Information (Type 0)
> +ARM_TYPE0  BiosInfo_Type0 = {
> +    {
> +      { // SMBIOS_STRUCTURE Hdr
> +        EFI_SMBIOS_TYPE_BIOS_INFORMATION,        // UINT8 Type
> +        sizeof (SMBIOS_TABLE_TYPE0),             // UINT8 Length
> +        SMBIOS_HANDLE_PI_RESERVED
> +      },
> +      1,                                           //Vendor
> +      2,                                           //BiosVersion
> +      0x8800,                                      //BiosSegment
> +      3,                                           //BiosReleaseDate
> +      0xFF,                                        //BiosSize
> +      {                                            //BiosCharacteristics
> +        0,                                         // Reserved                          :2
> +        0,                                         // Unknown                           :1
> +        0,                                         // BiosCharacteristicsNotSupported   :1
> +        0,                                         // IsaIsSupported                    :1
> +        0,                                         // McaIsSupported                    :1
> +        0,                                         // EisaIsSupported                   :1
> +        1,                                         // PciIsSupported                    :1
> +        0,                                         // PcmciaIsSupported                 :1
> +        0,                                         // PlugAndPlayIsSupported            :1
> +        0,                                         // ApmIsSupported                    :1
> +        1,                                         // BiosIsUpgradable                  :1
> +        0,                                         // BiosShadowingAllowed              :1
> +        0,                                         // VlVesaIsSupported                 :1
> +        0,                                         // EscdSupportIsAvailable            :1
> +        1,                                         // BootFromCdIsSupported             :1
> +        1,                                         // SelectableBootIsSupported         :1
> +        0,                                         // RomBiosIsSocketed                 :1
> +        0,                                         // BootFromPcmciaIsSupported         :1
> +        0,                                         // EDDSpecificationIsSupported       :1
> +        0,                                         // JapaneseNecFloppyIsSupported      :1
> +        0,                                         // JapaneseToshibaFloppyIsSupported  :1
> +        0,                                         // Floppy525_360IsSupported          :1
> +        0,                                         // Floppy525_12IsSupported           :1
> +        0,                                         // Floppy35_720IsSupported           :1
> +        0,                                         // Floppy35_288IsSupported           :1
> +        0,                                         // PrintScreenIsSupported            :1
> +        0,                                         // Keyboard8042IsSupported           :1
> +        0,                                         // SerialIsSupported                 :1
> +        0,                                         // PrinterIsSupported                :1
> +        0,                                         // CgaMonoIsSupported                :1
> +        0,                                         // NecPc98                           :1
> +        0                                          // ReservedForVendor                 :3
> +      },
> +      {
> +        0x03,                                      //BIOSCharacteristicsExtensionBytes[0]
> +        0x0D                                       //BIOSCharacteristicsExtensionBytes[1]
> +      },
> +      0xFF,                                        //SystemBiosMajorRelease;
> +      0xFF,                                        //SystemBiosMinorRelease;
> +      0xFF,                                        //EmbeddedControllerFirmwareMajorRelease;
> +      0xFF,                                        //EmbeddedControllerFirmwareMinorRelease;
> +  },
> +  TYPE0_STRINGS
> +};
> +
> +//System Information (Type 1).
> +ARM_TYPE1 SystemInfo_Type1 = {
> +    {
> +      {                                               // Hdr
> +        EFI_SMBIOS_TYPE_SYSTEM_INFORMATION,           // Type,
> +        sizeof (SMBIOS_TABLE_TYPE1),                  // UINT8 Length
> +        SMBIOS_HANDLE_PI_RESERVED                     // Handle
> +      },
> +      1,                                              // Manufacturer
> +      2,                                              // ProductName
> +      3,                                              // Version
> +      4,                                              // SerialNumber
> +      {                                               // Uuid
> +          0x12345678, 0x1234, 0x5678, {0x90, 0xab, 0xcd, 0xde, 0xef, 0xaa, 0xbb, 0xcc}
> +      },
> +      SystemWakeupTypePowerSwitch,                    // SystemWakeupType
> +      5,                                              // SKUNumber,
> +      6                                               // Family
> +  },
> +  TYPE1_STRINGS
> +};
> +
> +//Base Board (or Module) Information (Type 2)
> +ARM_TYPE2 BaseboardInfo_Type2 = {
> +    {
> +      {                                                       // Hdr
> +        EFI_SMBIOS_TYPE_BASEBOARD_INFORMATION,                // Type,
> +        sizeof (SMBIOS_TABLE_TYPE2),                          // UINT8 Length
> +        SMBIOS_HANDLE_MOTHERBOARD                             // Handle
> +      },
> +      1,                                                      // BaseBoardManufacturer
> +      2,                                                      // BaseBoardProductName
> +      3,                                                      // BaseBoardVersion
> +      4,                                                      // BaseBoardSerialNumber
> +      5,                                                      // BaseBoardAssetTag
> +      {                                                       // FeatureFlag
> +        1,                                                    // Motherboard           :1
> +        0,                                                    // RequiresDaughterCard  :1
> +        0,                                                    // Removable             :1
> +        1,                                                    // Replaceable           :1
> +        0,                                                    // HotSwappable          :1
> +        0                                                     // Reserved              :3
> +      },
> +      6,                                                      // BaseBoardChassisLocation
> +      0,                                                      // ChassisHandle;
> +      BaseBoardTypeMotherBoard,                               // BoardType;
> +      0,                                                      // NumberOfContainedObjectHandles;
> +      {
> +        0
> +      }                                                       // ContainedObjectHandles[1];
> +  },
> +  TYPE2_STRINGS
> +};
> +
> +//System Enclosure or Chassis (Type 3)
> +ARM_TYPE3 SystemEnclosure_Type3 = {
> +    {
> +      {                                                       // Hdr
> +        EFI_SMBIOS_TYPE_SYSTEM_ENCLOSURE  ,                   // Type,
> +        sizeof (SMBIOS_TABLE_TYPE3),                          // UINT8 Length
> +        SMBIOS_HANDLE_CHASSIS                                 // Handle
> +      },
> +      1,                                                      // Manufactrurer
> +      MiscChassisTypeMainServerChassis,                       // Type
> +      2,                                                      // Version
> +      3,                                                      // SerialNumber
> +      4,                                                      // AssetTag
> +      ChassisStateSafe,                                       // BootupState
> +      ChassisStateSafe,                                       // PowerSupplyState
> +      ChassisStateSafe,                                       // ThermalState
> +      ChassisSecurityStatusNone,                              // SecurityState
> +      {
> +        0,                                                    // OemDefined[0]
> +        0,                                                    // OemDefined[1]
> +        0,                                                    // OemDefined[2]
> +        0                                                     // OemDefined[3]
> +      },
> +      2,                                                      // Height
> +      1,                                                      // NumberofPowerCords
> +      0,                                                      // ContainedElementCount
> +      0,                                                      // ContainedElementRecordLength
> +      {                                                       // ContainedElements[0]
> +        {
> +            0,                                                // ContainedElementType
> +            0,                                                // ContainedElementMinimum
> +            0                                                 // ContainedElementMaximum
> +        }
> +      }
> +  },
> +  TYPE3_STRINGS
> +};
> +
> +//Processor Infomation (Type 4)
> +ARM_TYPE4 ProcessorInfo_Type4 = {
> +  {
> +    {                                           //Header
> +      EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION,    //Type
> +      sizeof (SMBIOS_TABLE_TYPE4),              //Length
> +      SMBIOS_HANDLE_CLUSTER                     //Handle
> +    },
> +    1,                                          //Socket
> +    CentralProcessor,                           //ProcessorType
> +    ProcessorFamilyIndicatorFamily2,            //ProcessorFamily
> +    2,                                          //ProcessorManufacture
> +    {                                           //ProcessorId
> +      {                                         //Signature
> +        0
> +      },
> +      {                                         //FeatureFlags
> +        0
> +      }
> +    },
> +    3,                                          //ProcessorVersion
> +    {                                           //Voltage
> +      0, 0, 0, 1, 0, 1
> +    },
> +    1,                                          //ExternalClock
> +    1,                                          //MaxSpeed
> +    0,                                          //CurrentSpeed
> +    0x41,                                       //Status
> +    ProcessorUpgradeUnknown,                    //ProcessorUpgrade
> +    SMBIOS_HANDLE_L1D,                          //L1Ins
> +    SMBIOS_HANDLE_L2,                           //L1Data
> +    SMBIOS_HANDLE_L3,                           //L2
> +    4,                                          //SerialNumber
> +    5,                                          //AssetTag
> +    6,                                          //PartNumber
> +
> +    4,                                          //CoreCount
> +    0,                                          //EnabledCoreCount
> +    0,                                          //ThreadCount
> +    0x00EC,                                     //ProcessorCharacteristics
> +
> +    ProcessorFamilyARMv8,                       //ProcessorFamily2
> +
> +    0,                                          //CoreCount2
> +    0,                                          //EnabledCoreCount2
> +    0                                           //ThreadCount2
> +  },
> +  TYPE4_STRINGS
> +};
> +
> +//Cache Information (Type7) L1 DATA
> +ARM_TYPE7_L1DATA L1Data_Type7 = {
> +  {
> +    {                                               //Header
> +      EFI_SMBIOS_TYPE_CACHE_INFORMATION,            //Type
> +      sizeof (SMBIOS_TABLE_TYPE7),                  //Length
> +      SMBIOS_HANDLE_L1D                             //Handle
> +    },
> +    1,                                              //SocketDesignation
> +    0x0180,                                         //CacheConfiguration
> +    0,                                              //MaximumCacheSize
> +    0,                                              //InstalledSize
> +    {                                               //SupportedSRAMType
> +      0,0,0,0,0,1,0,0
> +    },
> +    {                                               //CurrentSRAMType
> +        0,0,0,0,0,1,0,0
> +    },
> +    0,                                              //CacheSpeed
> +    CacheErrorSingleBit,                            //ErrorCorrectionType
> +    CacheTypeData,                                  //SystemCacheType
> +    CacheAssociativity8Way,                         //Associativity
> +    128,
> +    128
> +  },
> +  TYPE7_L1DATA_STRINGS
> +};
> +
> +//Cache Information (Type7) L1 INS
> +ARM_TYPE7_L1INS L1Ins_Type7 = {
> +  {
> +    {                                               //Header
> +      EFI_SMBIOS_TYPE_CACHE_INFORMATION,            //Type
> +      sizeof (SMBIOS_TABLE_TYPE7),                  //Length
> +      SMBIOS_HANDLE_L1I                             //Handle
> +    },
> +    1,                                              //SocketDesignation
> +    0x0180,                                         //CacheConfiguration
> +    0,                                              //MaximumCacheSize
> +    0,                                              //InstalledSize
> +    {                                               //SupportedSRAMType
> +      0,0,0,0,0,1,0,0
> +    },
> +    {                                               //CurrentSRAMType
> +       0,0,0,0,0,1,0,0
> +    },
> +    0,                                              //CacheSpeed
> +    CacheErrorParity,                               //ErrorCorrectionType
> +    CacheTypeInstruction,                           //SystemCacheType
> +    CacheAssociativity8Way,                         //Associativity
> +    128,
> +    128
> +  },
> +  TYPE7_L1INS_STRINGS
> +};
> +
> +//Cache Information (Type7) L2
> +ARM_TYPE7_L2 L2_Type7 = {
> +  {
> +    {                                               //Header
> +        EFI_SMBIOS_TYPE_CACHE_INFORMATION,          //Type
> +        sizeof (SMBIOS_TABLE_TYPE7),                //Length
> +        SMBIOS_HANDLE_L2                            //Handle
> +    },
> +    1,                                              //SocketDesignation
> +    0x0281,                                         //CacheConfiguration
> +    0,                                              //MaximumCacheSize
> +    0,                                              //InstalledSize
> +    {                                               //SupportedSRAMType
> +       0,0,0,0,0,1,0,0
> +    },
> +    {                                               //CurrentSRAMType
> +       0,0,0,0,0,1,0,0
> +    },
> +    0,                                              //CacheSpeed
> +    CacheErrorSingleBit,                            //ErrorCorrectionType
> +    CacheTypeUnified,                               //SystemCacheType
> +    CacheAssociativity8Way,                         //Associativity
> +    4096,
> +    4096
> +  },
> +  TYPE7_L2_STRINGS
> +};
> +
> +//Cache Information (Type7) L3
> +ARM_TYPE7_L3 L3_Type7 = {
> +  {
> +    {                                               //Header
> +      EFI_SMBIOS_TYPE_CACHE_INFORMATION,            //Type
> +      sizeof (SMBIOS_TABLE_TYPE7),                  //Length
> +      SMBIOS_HANDLE_L3                              //Handle
> +    },
> +    1,                                              //SocketDesignation
> +    0x0281,                                         //CacheConfiguration
> +    0,                                              //MaximumCacheSize
> +    0,                                              //InstalledSize
> +    {                                               //SupportedSRAMType
> +       0,0,0,0,0,1,0,0
> +    },
> +    {                                               //CurrentSRAMType
> +       0,0,0,0,0,1,0,0
> +    },
> +    0,                                              //CacheSpeed
> +    CacheErrorSingleBit,                            //ErrorCorrectionType
> +    CacheTypeUnified,                               //SystemCacheType
> +    CacheAssociativity8Way,                         //Associativity
> +    4096,
> +    4096
> +  },
> +  TYPE7_L3_STRINGS
> +};
> +
> +//PCIE0_X16   (Type 9)
> +ARM_TYPE9_PCIE0X16 Pcie0X16_Type9 = {
> +  {
> +    {  // SMBIOS_STRUCTURE Hdr
> +      EFI_SMBIOS_TYPE_SYSTEM_SLOTS,        // UINT8 Type
> +      sizeof (SMBIOS_TABLE_TYPE9),         // UINT8 Length
> +      SMBIOS_HANDLE_PI_RESERVED
> +    },
> +    1,
> +    SlotTypePciX,
> +    SlotDataBusWidth16X,
> +    SlotUsageInUse,
> +    SlotLengthLong,
> +    0,
> +    {0,0,1,1,0,0,0,0}, //unknown
> +    {1,0,0,0,0},  //PME and SMBUS
> +    0,
> +    0,
> +    0,
> +  },
> +  TYPE9_STRINGS_PCIE0X16
> +};
> +
> +//PCIE0_X1    (Type 9)
> +ARM_TYPE9_PCIE0X1 Pcie0X1_Type9 = {
> +  {
> +    {  // SMBIOS_STRUCTURE Hdr
> +      EFI_SMBIOS_TYPE_SYSTEM_SLOTS,        // UINT8 Type
> +      sizeof (SMBIOS_TABLE_TYPE9),         // UINT8 Length
> +      SMBIOS_HANDLE_PI_RESERVED
> +    },
> +    1,
> +    SlotTypePciX,
> +    SlotDataBusWidth1X,
> +    SlotUsageAvailable,
> +    SlotLengthShort,
> +    1,
> +    {0,0,1,1,0,0,0,0}, //unknown
> +    {1,0,0,0,0},  //PME and SMBUS
> +    0xFF,
> +    0xFF,
> +    0xFF,
> +  },
> +  TYPE9_STRINGS_PCIE0X1
> +};
> +
> +//PCIE1_X16   (Type 9)
> +ARM_TYPE9_PCIE1X16 Pcie1X16_Type9 = {
> +  {
> +    {  // SMBIOS_STRUCTURE Hdr
> +      EFI_SMBIOS_TYPE_SYSTEM_SLOTS,        // UINT8 Type
> +      sizeof (SMBIOS_TABLE_TYPE9),         // UINT8 Length
> +      SMBIOS_HANDLE_PI_RESERVED
> +    },
> +    1,
> +    SlotTypePciX,
> +    SlotDataBusWidth16X,
> +    SlotUsageAvailable,
> +    SlotLengthLong,
> +    2,
> +    {0,0,1,1,0,0,0,0}, //unknown
> +    {1,0,0,0,0},       //PME and SMBUS
> +    0xFF,
> +    0xFF,
> +    0xFF,
> +  },
> +  TYPE9_STRINGS_PCIE1X16
> +};
> +
> +//PCIE1_X1  (Type 9)
> +ARM_TYPE9_PCIE1X1 Pcie1X1_Type9 = {
> +  {
> +    {  // SMBIOS_STRUCTURE Hdr
> +      EFI_SMBIOS_TYPE_SYSTEM_SLOTS, // UINT8 Type
> +      sizeof (SMBIOS_TABLE_TYPE9),  // UINT8 Length
> +      SMBIOS_HANDLE_PI_RESERVED
> +    },
> +    1,
> +    SlotTypePciX,
> +    SlotDataBusWidth1X,
> +    SlotUsageAvailable,
> +    SlotLengthShort,
> +    3,
> +    {0,0,1,1,0,0,0,0}, //unknown
> +    {1,0,0,0,0},       //PME and SMBUS
> +    0xFF,
> +    0xFF,
> +    0xFF,
> +  },
> +  TYPE9_STRINGS_PCIE1X1
> +};
> +
> +//Bios Language Information (Type13)
> +ARM_TYPE13 BiosLangInfo_Type13 = {
> +  {
> +    { // SMBIOS_STRUCTURE Hdr
> +    EFI_SMBIOS_TYPE_BIOS_LANGUAGE_INFORMATION, // UINT8 Type
> +    sizeof (SMBIOS_TABLE_TYPE13),              // UINT8 Length
> +    SMBIOS_HANDLE_PI_RESERVED
> +    },
> +    2,
> +    0,
> +    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
> +    2
> +  },
> +  TYPE13_STRINGS
> +};
> +
> +//Physical Memory Array (Type 16)
> +ARM_TYPE16 MemArray_Type16 = {
> +  {
> +    { // SMBIOS_STRUCTURE Hdr
> +      EFI_SMBIOS_TYPE_PHYSICAL_MEMORY_ARRAY, // UINT8 Type
> +      sizeof (SMBIOS_TABLE_TYPE16),          // UINT8 Length
> +      SMBIOS_HANDLE_MEMORY
> +    },
> +    MemoryArrayLocationSystemBoard,
> +    MemoryArrayUseSystemMemory,
> +    MemoryErrorCorrectionNone,
> +    0x1000000,                                 //16G
> +    0xFFFE,
> +    2
> +  },
> +  TYPE16_STRINGS
> +};
> +
> +//Memory Device (Type17)
> +ARM_TYPE17_CHANNEL0 MemDev_Type17_0 = {
> +  {
> +    { // SMBIOS_STRUCTURE Hdr
> +      EFI_SMBIOS_TYPE_MEMORY_DEVICE, // UINT8 Type
> +      sizeof (SMBIOS_TABLE_TYPE17),  // UINT8 Length
> +      SMBIOS_HANDLE_DIMM_0
> +    },
> +    SMBIOS_HANDLE_MEMORY, //array to which this module belongs
> +    0xFFFE,               //no errors
> +    64,                   //single DIMM, no ECC is 64bits (for ecc this would be 72)
> +    64,                   //data width of this device (64-bits)
> +    0x4000,               //16GB
> +    0x09,                 //FormFactor
> +    0,                    //not part of a set
> +    1,                    //right side of board
> +    2,                    //bank 0
> +    MemoryTypeDdr4,                    //LP DDR4
> +    {0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0}, //unbuffered
> +    2400,                              //2400Mhz DDR
> +    3, //Manufacturer
> +    4, //serial
> +    5, //asset tag
> +    6, //part number
> +    0, //attrbute
> +    0x2000,     //  8G
> +    2400,       //2400MHz
> +    1500,       //Max V
> +    1500,       //Max V
> +    1500,       //Configure V
> +  },
> +  TYPE17_STRINGS_CHANNEL0
> +};
> +
> +//Memory Device (Type17)
> +ARM_TYPE17_CHANNEL1 MemDev_Type17_1 = {
> +  {
> +    { // SMBIOS_STRUCTURE Hdr
> +      EFI_SMBIOS_TYPE_MEMORY_DEVICE, // UINT8 Type
> +      sizeof (SMBIOS_TABLE_TYPE17),  // UINT8 Length
> +      SMBIOS_HANDLE_DIMM_1
> +    },
> +    SMBIOS_HANDLE_MEMORY, //array to which this module belongs
> +    0xFFFE,               //no errors
> +    64,                   //single DIMM, no ECC is 64bits (for ecc this would be 72)
> +    64,                   //data width of this device (64-bits)
> +    0x2000,               //8GB
> +    0x09,                 //FormFactor
> +    0,                    //not part of a set
> +    1,                    //right side of board
> +    2,                    //bank 0
> +    MemoryTypeDdr4,                    //LP DDR4
> +    {0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0}, //unbuffered
> +    2400,                              //2400Mhz DDR
> +    3, //varies between diffrent production runs
> +    4, //serial
> +    5, //asset tag
> +    6, //part number
> +    0, //attrbute
> +    0x4000,     //  16G
> +    2400,       //2400MHz
> +    1500,       //Max V
> +    1500,       //Max V
> +    1500,       //Configure V
> +  },
> +  TYPE17_STRINGS_CHANNEL1
> +};
> +
> +//Memory Array Mapped Address (Type 19)
> +ARM_TYPE19 MemArrayMapAddr_Type19 = {
> +  {
> +    {  // SMBIOS_STRUCTURE Hdr
> +      EFI_SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS, // UINT8 Type
> +      sizeof (SMBIOS_TABLE_TYPE19),                // UINT8 Length
> +      SMBIOS_HANDLE_PI_RESERVED
> +    },
> +    0,
> +    0x1000000,  //16G
> +    SMBIOS_HANDLE_MEMORY, //handle
> +    2,
> +    0,      //starting addr of first 2GB
> +    0,      //ending addr of first 2GB
> +  },
> +  TYPE19_STRINGS
> +};
> +
> +//System Boot Information (Type 32)
> +ARM_TYPE32 SystemBoot_Type32 = {
> +  {
> +    {                           // Hdr
> +      EFI_SMBIOS_TYPE_SYSTEM_BOOT_INFORMATION,        // Type,
> +      sizeof (SMBIOS_TABLE_TYPE32),                   // UINT8 Length
> +      SMBIOS_HANDLE_PI_RESERVED
> +    },
> +    {                                                // Reserved[6]
> +      0,
> +      0,
> +      0,
> +      0,
> +      0,
> +      0
> +    },
> +    BootInformationStatusNoError                    // BootInformationStatus
> +  },
> +  TYPE32_STRINGS
> +};
> +
> +VOID *DefaultCommonTables[]=
> +{
> +  &BiosInfo_Type0,
> +  &SystemInfo_Type1,
> +  &BaseboardInfo_Type2,
> +  &SystemEnclosure_Type3,
> +  &ProcessorInfo_Type4,
> +  &L1Data_Type7,
> +  &L1Ins_Type7,
> +  &L2_Type7,
> +  &L3_Type7,
> +  &Pcie0X16_Type9,
> +  &Pcie0X1_Type9,
> +  &Pcie1X16_Type9,
> +  &Pcie1X1_Type9,
> +  &MemArray_Type16,
> +  &MemDev_Type17_0,
> +  &MemDev_Type17_1,
> +  &MemArrayMapAddr_Type19,
> +  &BiosLangInfo_Type13,
> +  &SystemBoot_Type32,
> +  NULL
> +};
> +
> +
> +/**
> +   Installed a whole table worth of structructures.
> +
> +   @param[in] Smbios      The Pointer of Smbios Protocol.
> +
> +   @retval EFI_SUCCESS    Table data successfully installed.
> +   @retval Other          Table data was not installed.
> +
> +**/
> +EFI_STATUS
> +InstallStructures (
> +  IN EFI_SMBIOS_PROTOCOL       *Smbios,
> +  IN VOID *DefaultTables[]
> +  )
> +{
> +  EFI_STATUS                Status;
> +  EFI_SMBIOS_HANDLE         SmbiosHandle;
> +  UINT32                    TableEntry;
> +
> +  Status = EFI_SUCCESS;
> +
> +  for ( TableEntry=0; DefaultTables[TableEntry] != NULL; TableEntry++)
> +  {
> +    SmbiosHandle = ((EFI_SMBIOS_TABLE_HEADER*)DefaultTables[TableEntry])->Handle;
> +    Status = Smbios->Add (
> +    Smbios,
> +    NULL,
> +    &SmbiosHandle,
> +    (EFI_SMBIOS_TABLE_HEADER*) DefaultTables[TableEntry]
> +    );
> +    if (EFI_ERROR (Status))
> +      break;
> +    }
> +
> +  return Status;
> +}
> +
> +
> +/**
> +   Installed All SMBIOS information.
> +
> +   @param[in] Smbios      The Pointer of Smbios Protocol.
> +
> +   @retval EFI_SUCCESS    SMBIOS information successfully installed.
> +   @retval Other          SMBIOS information was not installed.
> +
> +**/
> +STATIC
> +EFI_STATUS
> +InstallAllStructures (
> +  IN EFI_SMBIOS_PROTOCOL       *Smbios
> +  )
> +{
> +  EFI_STATUS  Status;
> +
> +  Status = EFI_SUCCESS;
> +
> +  Status = InstallStructures (Smbios, DefaultCommonTables);
> +  ASSERT_EFI_ERROR (Status);
> +
> +  return Status;
> +}
> +
> +
> +/**
> +   Find the smbios protocol and installed SMBIOS information
> +   for ARM platforms.
> +
> +   @param[in] ImageHandle     Module's image handle.
> +   @param[in] SystemTable     Pointer of EFI_SYSTEM_TABLE.
> +
> +   @retval EFI_SUCCESS    Smbios data successfully installed.
> +   @retval Other          Smbios data was not installed.
> +
> +**/
> +EFI_STATUS
> +EFIAPI
> +SmbiosTablePublishEntry (
> +  IN EFI_HANDLE           ImageHandle,
> +  IN EFI_SYSTEM_TABLE     *SystemTable
> +  )
> +{
> +  EFI_STATUS                Status;
> +  EFI_SMBIOS_PROTOCOL       *Smbios;
> +
> +  //
> +  // Find the SMBIOS protocol
> +  //
> +  Status = gBS->LocateProtocol (
> +    &gEfiSmbiosProtocolGuid,
> +    NULL,
> +    (VOID**)&Smbios
> +    );
> +  if (EFI_ERROR (Status)) {
> +    return Status;
> +  }
> +
> +  Status = InstallAllStructures (Smbios);
> +
> +  return Status;
> +}
> -- 
> 2.25.1
> 


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#71578): https://edk2.groups.io/g/devel/message/71578
Mute This Topic: https://groups.io/mt/80539668/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-





More information about the edk2-devel-archive mailing list