16a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu/** @file
26a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  SMBIOS Protocol as defined in PI1.2 Specification VOLUME 5 Standard.
36a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
46a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  SMBIOS protocol allows consumers to log SMBIOS data records, and enables the producer
56a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  to create the SMBIOS tables for a platform.
66a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
76a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  This protocol provides an interface to add, remove or discover SMBIOS records. The driver which
86a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  produces this protocol is responsible for creating the SMBIOS data tables and installing the pointer
96a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  to the tables in the EFI System Configuration Table.
106a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  The caller is responsible for only adding SMBIOS records that are valid for the SMBIOS
116a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  MajorVersion and MinorVersion. When an enumerated SMBIOS field's values are
126a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  controlled by the DMTF, new values can be used as soon as they are defined by the DMTF without
136a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  requiring an update to MajorVersion and MinorVersion.
146a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  The SMBIOS protocol can only be called a TPL < TPL_NOTIFY.
156a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
162002bf5dd56927cbacbc748120bc6f6f2e3fe12clzeng  Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
179df063a06aef048c042498e2f542fb693e93493ahhtian  This program and the accompanying materials
186a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  are licensed and made available under the terms and conditions of the BSD License
196a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  which accompanies this distribution.  The full text of the license may be found at
206a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  http://opensource.org/licenses/bsd-license.php
216a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
226a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
236a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
246a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
256a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu**/
266a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
276a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu#ifndef __SMBIOS_PROTOCOL_H__
286a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu#define __SMBIOS_PROTOCOL_H__
296a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
30bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#include <IndustryStandard/SmBios.h>
31bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser
326a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu#define EFI_SMBIOS_PROTOCOL_GUID \
336a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu    { 0x3583ff6, 0xcb36, 0x4940, { 0x94, 0x7e, 0xb9, 0xb3, 0x9f, 0x4a, 0xfa, 0xf7 }}
346a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
35bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_BIOS_INFORMATION                     SMBIOS_TYPE_BIOS_INFORMATION
36bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_SYSTEM_INFORMATION                   SMBIOS_TYPE_SYSTEM_INFORMATION
37bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_BASEBOARD_INFORMATION                SMBIOS_TYPE_BASEBOARD_INFORMATION
38bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_SYSTEM_ENCLOSURE                     SMBIOS_TYPE_SYSTEM_ENCLOSURE
39bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_PROCESSOR_INFORMATION                SMBIOS_TYPE_PROCESSOR_INFORMATION
40bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_MEMORY_CONTROLLER_INFORMATION        SMBIOS_TYPE_MEMORY_CONTROLLER_INFORMATION
41bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_MEMORY_MODULE_INFORMATON             SMBIOS_TYPE_MEMORY_MODULE_INFORMATON
42bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_CACHE_INFORMATION                    SMBIOS_TYPE_CACHE_INFORMATION
43bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION           SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION
44bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_SYSTEM_SLOTS                         SMBIOS_TYPE_SYSTEM_SLOTS
45bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_ONBOARD_DEVICE_INFORMATION           SMBIOS_TYPE_ONBOARD_DEVICE_INFORMATION
46bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_OEM_STRINGS                          SMBIOS_TYPE_OEM_STRINGS
47bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_SYSTEM_CONFIGURATION_OPTIONS         SMBIOS_TYPE_SYSTEM_CONFIGURATION_OPTIONS
48bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_BIOS_LANGUAGE_INFORMATION            SMBIOS_TYPE_BIOS_LANGUAGE_INFORMATION
49bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_GROUP_ASSOCIATIONS                   SMBIOS_TYPE_GROUP_ASSOCIATIONS
50bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_SYSTEM_EVENT_LOG                     SMBIOS_TYPE_SYSTEM_EVENT_LOG
51bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_PHYSICAL_MEMORY_ARRAY                SMBIOS_TYPE_PHYSICAL_MEMORY_ARRAY
52bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_MEMORY_DEVICE                        SMBIOS_TYPE_MEMORY_DEVICE
53bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_32BIT_MEMORY_ERROR_INFORMATION       SMBIOS_TYPE_32BIT_MEMORY_ERROR_INFORMATION
54bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS          SMBIOS_TYPE_MEMORY_ARRAY_MAPPED_ADDRESS
55bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_MEMORY_DEVICE_MAPPED_ADDRESS         SMBIOS_TYPE_MEMORY_DEVICE_MAPPED_ADDRESS
56bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_BUILT_IN_POINTING_DEVICE             SMBIOS_TYPE_BUILT_IN_POINTING_DEVICE
57bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_PORTABLE_BATTERY                     SMBIOS_TYPE_PORTABLE_BATTERY
58bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_SYSTEM_RESET                         SMBIOS_TYPE_SYSTEM_RESET
59bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_HARDWARE_SECURITY                    SMBIOS_TYPE_HARDWARE_SECURITY
60bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_SYSTEM_POWER_CONTROLS                SMBIOS_TYPE_SYSTEM_POWER_CONTROLS
61bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_VOLTAGE_PROBE                        SMBIOS_TYPE_VOLTAGE_PROBE
62bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_COOLING_DEVICE                       SMBIOS_TYPE_COOLING_DEVICE
63bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_TEMPERATURE_PROBE                    SMBIOS_TYPE_TEMPERATURE_PROBE
64bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_ELECTRICAL_CURRENT_PROBE             SMBIOS_TYPE_ELECTRICAL_CURRENT_PROBE
65bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_OUT_OF_BAND_REMOTE_ACCESS            SMBIOS_TYPE_OUT_OF_BAND_REMOTE_ACCESS
66bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_BOOT_INTEGRITY_SERVICE               SMBIOS_TYPE_BOOT_INTEGRITY_SERVICE
67bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_SYSTEM_BOOT_INFORMATION              SMBIOS_TYPE_SYSTEM_BOOT_INFORMATION
68bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_64BIT_MEMORY_ERROR_INFORMATION       SMBIOS_TYPE_64BIT_MEMORY_ERROR_INFORMATION
69bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_MANAGEMENT_DEVICE                    SMBIOS_TYPE_MANAGEMENT_DEVICE
70bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_MANAGEMENT_DEVICE_COMPONENT          SMBIOS_TYPE_MANAGEMENT_DEVICE_COMPONENT
71bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_MANAGEMENT_DEVICE_THRESHOLD_DATA     SMBIOS_TYPE_MANAGEMENT_DEVICE_THRESHOLD_DATA
72bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_MEMORY_CHANNEL                       SMBIOS_TYPE_MEMORY_CHANNEL
73bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_IPMI_DEVICE_INFORMATION              SMBIOS_TYPE_IPMI_DEVICE_INFORMATION
74bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_SYSTEM_POWER_SUPPLY                  SMBIOS_TYPE_SYSTEM_POWER_SUPPLY
75bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_ADDITIONAL_INFORMATION               SMBIOS_TYPE_ADDITIONAL_INFORMATION
76bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_ONBOARD_DEVICES_EXTENDED_INFORMATION SMBIOS_TYPE_ONBOARD_DEVICES_EXTENDED_INFORMATION
77bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_MANAGEMENT_CONTROLLER_HOST_INTERFACE SMBIOS_TYPE_MANAGEMENT_CONTROLLER_HOST_INTERFACE
78bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_INACTIVE                             SMBIOS_TYPE_INACTIVE
79bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_TYPE_END_OF_TABLE                         SMBIOS_TYPE_END_OF_TABLE
80bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_OEM_BEGIN                                 SMBIOS_OEM_BEGIN
81bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häuser#define EFI_SMBIOS_OEM_END                                   SMBIOS_OEM_END
826a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
83bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häusertypedef SMBIOS_TABLE_STRING EFI_SMBIOS_STRING;
84bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häusertypedef SMBIOS_TYPE         EFI_SMBIOS_TYPE;
85bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häusertypedef SMBIOS_HANDLE       EFI_SMBIOS_HANDLE;
86bb7051eba96f87bbb6544cad9cd7390207b4dcc0Marvin Häusertypedef SMBIOS_STRUCTURE    EFI_SMBIOS_TABLE_HEADER;
876a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
886a0cd52dc22f0c7b4fa694cda02f4d4adced637cklutypedef struct _EFI_SMBIOS_PROTOCOL EFI_SMBIOS_PROTOCOL;
896a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
906a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu/**
916a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  Add an SMBIOS record.
926a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
936a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  This function allows any agent to add SMBIOS records. The caller is responsible for ensuring
946a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  Record is formatted in a way that matches the version of the SMBIOS specification as defined in
956a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  the MajorRevision and MinorRevision fields of the EFI_SMBIOS_PROTOCOL.
966a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  Record must follow the SMBIOS structure evolution and usage guidelines in the SMBIOS
976a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  specification. Record starts with the formatted area of the SMBIOS structure and the length is
986a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  defined by EFI_SMBIOS_TABLE_HEADER.Length. Each SMBIOS structure is terminated by a
996a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  double-null (0x0000), either directly following the formatted area (if no strings are present) or
1006a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  directly following the last string. The number of optional strings is not defined by the formatted area,
1016a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  but is fixed by the call to Add(). A string can be a place holder, but it must not be a NULL string as
1026a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  two NULL strings look like the double-null that terminates the structure.
1036a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
1046a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @param[in]        This                The EFI_SMBIOS_PROTOCOL instance.
1056a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @param[in]        ProducerHandle      The handle of the controller or driver associated with the SMBIOS information. NULL means no handle.
106eb2423c9ee10b31d6ff4d34761a083df0486c5b8lzeng  @param[in, out]   SmbiosHandle        On entry, the handle of the SMBIOS record to add. If FFFEh, then a unique handle
107eb2423c9ee10b31d6ff4d34761a083df0486c5b8lzeng                                        will be assigned to the SMBIOS record. If the SMBIOS handle is already in use,
1086a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu                                        EFI_ALREADY_STARTED is returned and the SMBIOS record is not updated.
1096a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @param[in]        Record              The data for the fixed portion of the SMBIOS record. The format of the record is
1106a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu                                        determined by EFI_SMBIOS_TABLE_HEADER.Type. The size of the formatted
1116a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu                                        area is defined by EFI_SMBIOS_TABLE_HEADER.Length and either followed
1126a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu                                        by a double-null (0x0000) or a set of null terminated strings and a null.
1136a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
1146a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @retval EFI_SUCCESS                   Record was added.
1156a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @retval EFI_OUT_OF_RESOURCES          Record was not added.
1166a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @retval EFI_ALREADY_STARTED           The SmbiosHandle passed in was already in use.
1176a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu**/
1186a0cd52dc22f0c7b4fa694cda02f4d4adced637cklutypedef
1196a0cd52dc22f0c7b4fa694cda02f4d4adced637ckluEFI_STATUS
1206a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu(EFIAPI *EFI_SMBIOS_ADD)(
1216a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  IN CONST      EFI_SMBIOS_PROTOCOL     *This,
1223e22fec9612a106e11df03acab38b2efe286e992klu  IN            EFI_HANDLE              ProducerHandle OPTIONAL,
1236a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  IN OUT        EFI_SMBIOS_HANDLE       *SmbiosHandle,
1246a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  IN            EFI_SMBIOS_TABLE_HEADER *Record
1256a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu);
1266a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
1276a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu/**
1286a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  Update the string associated with an existing SMBIOS record.
1296a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
1306a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  This function allows the update of specific SMBIOS strings. The number of valid strings for any
1316a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  SMBIOS record is defined by how many strings were present when Add() was called.
1326a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
1336a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @param[in]    This            The EFI_SMBIOS_PROTOCOL instance.
1346a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @param[in]    SmbiosHandle    SMBIOS Handle of structure that will have its string updated.
1356a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @param[in]    StringNumber    The non-zero string number of the string to update.
1366a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @param[in]    String          Update the StringNumber string with String.
1376a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
1386a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @retval EFI_SUCCESS           SmbiosHandle had its StringNumber String updated.
1396a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @retval EFI_INVALID_PARAMETER SmbiosHandle does not exist.
140eb2423c9ee10b31d6ff4d34761a083df0486c5b8lzeng  @retval EFI_UNSUPPORTED       String was not added because it is longer than the SMBIOS Table supports.
1416a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @retval EFI_NOT_FOUND         The StringNumber.is not valid for this SMBIOS record.
1426a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu**/
1436a0cd52dc22f0c7b4fa694cda02f4d4adced637cklutypedef
1446a0cd52dc22f0c7b4fa694cda02f4d4adced637ckluEFI_STATUS
1456a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu(EFIAPI *EFI_SMBIOS_UPDATE_STRING)(
1466a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu   IN CONST EFI_SMBIOS_PROTOCOL *This,
1476a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu   IN       EFI_SMBIOS_HANDLE   *SmbiosHandle,
1486a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu   IN       UINTN               *StringNumber,
1496a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu   IN       CHAR8               *String
1506a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu);
1516a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
1526a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu/**
1536a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  Remove an SMBIOS record.
1546a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
1556a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  This function removes an SMBIOS record using the handle specified by SmbiosHandle.
1566a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
1576a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @param[in]    This                The EFI_SMBIOS_PROTOCOL instance.
1586a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @param[in]    SmbiosHandle        The handle of the SMBIOS record to remove.
1596a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
1606a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @retval EFI_SUCCESS               SMBIOS record was removed.
1616a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @retval EFI_INVALID_PARAMETER     SmbiosHandle does not specify a valid SMBIOS record.
1626a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu**/
1636a0cd52dc22f0c7b4fa694cda02f4d4adced637cklutypedef
1646a0cd52dc22f0c7b4fa694cda02f4d4adced637ckluEFI_STATUS
1656a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu(EFIAPI *EFI_SMBIOS_REMOVE)(
1666a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu   IN CONST EFI_SMBIOS_PROTOCOL *This,
1676a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu   IN       EFI_SMBIOS_HANDLE   SmbiosHandle
1686a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu);
1696a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
1706a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu/**
1716a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  Allow the caller to discover all or some of the SMBIOS records.
1726a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
1736a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  This function allows all of the SMBIOS records to be discovered. It's possible to find
1746a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  only the SMBIOS records that match the optional Type argument.
1756a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
1766a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @param[in]        This            The EFI_SMBIOS_PROTOCOL instance.
1776a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @param[in, out]   SmbiosHandle    On entry, points to the previous handle of the SMBIOS record. On exit, points to the
178eb2423c9ee10b31d6ff4d34761a083df0486c5b8lzeng                                    next SMBIOS record handle. If it is FFFEh on entry, then the first SMBIOS record
179eb2423c9ee10b31d6ff4d34761a083df0486c5b8lzeng                                    handle will be returned. If it returns FFFEh on exit, then there are no more SMBIOS records.
1806a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @param[in]        Type            On entry, it points to the type of the next SMBIOS record to return. If NULL, it
1816a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu                                    indicates that the next record of any type will be returned. Type is not
1826a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu                                    modified by the this function.
1836a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @param[out]       Record          On exit, points to a pointer to the the SMBIOS Record consisting of the formatted area
1846a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu                                    followed by the unformatted area. The unformatted area optionally contains text strings.
1856a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @param[out]       ProducerHandle  On exit, points to the ProducerHandle registered by Add(). If no
1866a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu                                    ProducerHandle was passed into Add() NULL is returned. If a NULL pointer is
1876a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu                                    passed in no data will be returned.
1886a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @retval EFI_SUCCESS               SMBIOS record information was successfully returned in Record.
1896a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu                                    SmbiosHandle is the handle of the current SMBIOS record
1906a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  @retval EFI_NOT_FOUND             The SMBIOS record with SmbiosHandle was the last available record.
1916a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu**/
1926a0cd52dc22f0c7b4fa694cda02f4d4adced637cklutypedef
1936a0cd52dc22f0c7b4fa694cda02f4d4adced637ckluEFI_STATUS
1946a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu(EFIAPI *EFI_SMBIOS_GET_NEXT)(
1956a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu   IN     CONST EFI_SMBIOS_PROTOCOL     *This,
1966a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu   IN OUT       EFI_SMBIOS_HANDLE       *SmbiosHandle,
1973e22fec9612a106e11df03acab38b2efe286e992klu   IN           EFI_SMBIOS_TYPE         *Type              OPTIONAL,
1986a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu   OUT          EFI_SMBIOS_TABLE_HEADER **Record,
1993e22fec9612a106e11df03acab38b2efe286e992klu   OUT          EFI_HANDLE              *ProducerHandle    OPTIONAL
2006a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu);
2016a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
2026a0cd52dc22f0c7b4fa694cda02f4d4adced637cklustruct _EFI_SMBIOS_PROTOCOL {
2036a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  EFI_SMBIOS_ADD           Add;
2046a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  EFI_SMBIOS_UPDATE_STRING UpdateString;
2056a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  EFI_SMBIOS_REMOVE        Remove;
2066a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  EFI_SMBIOS_GET_NEXT      GetNext;
2076a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  UINT8                    MajorVersion;    ///< The major revision of the SMBIOS specification supported.
2086a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu  UINT8                    MinorVersion;    ///< The minor revision of the SMBIOS specification supported.
2096a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu};
2106a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
2116a0cd52dc22f0c7b4fa694cda02f4d4adced637ckluextern EFI_GUID gEfiSmbiosProtocolGuid;
2126a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu
2136a0cd52dc22f0c7b4fa694cda02f4d4adced637cklu#endif // __SMBIOS_PROTOCOL_H__
214