REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the RedfishPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Abner Chang <abner.chang@hpe.com>
		
			
				
	
	
		
			121 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  RedfishSmbiosHostInterface.c
 | 
						|
 | 
						|
  Discover Redfish SMBIOS Host Interface.
 | 
						|
 | 
						|
  (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR>
 | 
						|
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#include "RedfishDiscoverInternal.h"
 | 
						|
 | 
						|
SMBIOS_TABLE_TYPE42  *mType42Record;
 | 
						|
 | 
						|
/**
 | 
						|
  The function gets information reported in Redfish Host Interface.
 | 
						|
 | 
						|
  It simply frees the packet.
 | 
						|
 | 
						|
  @param[in]  Smbios           SMBIOS protocol.
 | 
						|
  @param[out] DeviceDescriptor Pointer to REDFISH_INTERFACE_DATA.
 | 
						|
  @param[out] ProtocolData     Pointer to REDFISH_OVER_IP_PROTOCOL_DATA.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS    Get host interface succesfully.
 | 
						|
  @retval Otherwise      Fail to tet host interface.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
RedfishGetHostInterfaceProtocolData (
 | 
						|
  IN EFI_SMBIOS_PROTOCOL             *Smbios,
 | 
						|
  OUT REDFISH_INTERFACE_DATA         **DeviceDescriptor,
 | 
						|
  OUT REDFISH_OVER_IP_PROTOCOL_DATA  **ProtocolData
 | 
						|
  )
 | 
						|
{
 | 
						|
  EFI_STATUS               Status;
 | 
						|
  EFI_SMBIOS_HANDLE        SmbiosHandle;
 | 
						|
  EFI_SMBIOS_TABLE_HEADER  *Record;
 | 
						|
  UINT16                   Offset;
 | 
						|
  UINT8                    *RecordTmp;
 | 
						|
  UINT8                    ProtocolLength;
 | 
						|
  UINT8                    SpecificDataLen;
 | 
						|
 | 
						|
  if ((Smbios == NULL) || (ProtocolData == NULL)) {
 | 
						|
    return EFI_INVALID_PARAMETER;
 | 
						|
  }
 | 
						|
 | 
						|
  SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
 | 
						|
  Status       = Smbios->GetNext (Smbios, &SmbiosHandle, NULL, &Record, NULL);
 | 
						|
  while (!EFI_ERROR (Status) && SmbiosHandle != SMBIOS_HANDLE_PI_RESERVED) {
 | 
						|
    if (Record->Type == SMBIOS_TYPE_MANAGEMENT_CONTROLLER_HOST_INTERFACE) {
 | 
						|
      //
 | 
						|
      // Check Interface Type, should be Network Host Interface = 40h
 | 
						|
      //
 | 
						|
      mType42Record = (SMBIOS_TABLE_TYPE42 *)Record;
 | 
						|
      if (mType42Record->InterfaceType == MCHostInterfaceTypeNetworkHostInterface) {
 | 
						|
        ASSERT (Record->Length >= 9);
 | 
						|
        Offset    = 5;
 | 
						|
        RecordTmp = (UINT8 *)Record + Offset;
 | 
						|
        //
 | 
						|
        // Get interface specific data length.
 | 
						|
        //
 | 
						|
        SpecificDataLen = *RecordTmp;
 | 
						|
        Offset         += 1;
 | 
						|
        RecordTmp       = (UINT8 *)Record + Offset;
 | 
						|
 | 
						|
        //
 | 
						|
        // Check Device Type, only PCI/PCIe Network Interface v2 is supported now.
 | 
						|
        //
 | 
						|
        if (*RecordTmp == REDFISH_HOST_INTERFACE_DEVICE_TYPE_PCI_PCIE_V2) {
 | 
						|
          ASSERT (SpecificDataLen == sizeof (PCI_OR_PCIE_INTERFACE_DEVICE_DESCRIPTOR_V2) + 1);
 | 
						|
          *DeviceDescriptor = (REDFISH_INTERFACE_DATA *)RecordTmp;
 | 
						|
          Offset            = Offset + SpecificDataLen;
 | 
						|
          RecordTmp         = (UINT8 *)Record + Offset;
 | 
						|
          //
 | 
						|
          // Check Protocol count. if > 1, only use the first protocol.
 | 
						|
          //
 | 
						|
          ASSERT (*RecordTmp == 1);
 | 
						|
          Offset   += 1;
 | 
						|
          RecordTmp = (UINT8 *)Record + Offset;
 | 
						|
          //
 | 
						|
          // Check protocol identifier.
 | 
						|
          //
 | 
						|
          if (*RecordTmp == MCHostInterfaceProtocolTypeRedfishOverIP) {
 | 
						|
            Offset        += 1;
 | 
						|
            RecordTmp      = (UINT8 *)Record + Offset;
 | 
						|
            ProtocolLength = *RecordTmp;
 | 
						|
 | 
						|
            Offset   += 1;
 | 
						|
            RecordTmp = (UINT8 *)Record + Offset;
 | 
						|
 | 
						|
            //
 | 
						|
            // This SMBIOS record is invalid, if the length of protocol specific data for
 | 
						|
            // Redfish Over IP protocol is wrong.
 | 
						|
            //
 | 
						|
            if ((*(RecordTmp + 90) + sizeof (REDFISH_OVER_IP_PROTOCOL_DATA) - 1) != ProtocolLength) {
 | 
						|
              return EFI_SECURITY_VIOLATION;
 | 
						|
            }
 | 
						|
 | 
						|
            Offset += ProtocolLength;
 | 
						|
            //
 | 
						|
            // This SMBIOS record is invalid, if the length is smaller than the offset.
 | 
						|
            //
 | 
						|
            if (Offset > mType42Record->Hdr.Length) {
 | 
						|
              return EFI_SECURITY_VIOLATION;
 | 
						|
            }
 | 
						|
 | 
						|
            *ProtocolData = (REDFISH_OVER_IP_PROTOCOL_DATA *)RecordTmp;
 | 
						|
            return EFI_SUCCESS;
 | 
						|
          }
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    Status = Smbios->GetNext (Smbios, &SmbiosHandle, NULL, &Record, NULL);
 | 
						|
  }
 | 
						|
 | 
						|
  *ProtocolData = NULL;
 | 
						|
  return EFI_NOT_FOUND;
 | 
						|
}
 |