/* Allow the caller to discover all of the SMBIOS records. */
EFI_STATUS EFIAPI GetNextSmbiosRecord(IN CONST EFI_SMBIOS_PROTOCOL *This, IN OUT EFI_SMBIOS_ENTRY **CurrentSmbiosEntry, OUT EFI_SMBIOS_TABLE_HEADER **Record)
/* Allow the caller to discover all of the SMBIOS records. */
EFI_STATUS EFIAPI GetNextSmbiosRecord(IN CONST EFI_SMBIOS_PROTOCOL *This, IN OUT EFI_SMBIOS_ENTRY **CurrentSmbiosEntry, OUT EFI_SMBIOS_TABLE_HEADER **Record)
{
  LIST_ENTRY               *Link;
  LIST_ENTRY               *Head;
  SMBIOS_INSTANCE          *Private;
  EFI_SMBIOS_ENTRY         *SmbiosEntry;
  EFI_SMBIOS_TABLE_HEADER  *SmbiosTableHeader;
  Private = SMBIOS_INSTANCE_FROM_THIS (This);
  if (*CurrentSmbiosEntry == NULL) {
    Head = &Private->DataListHead;
  } else {
    Head = &(*CurrentSmbiosEntry)->Link;
  }
  Link = Head->ForwardLink;
  if (Link == &Private->DataListHead) {
    return EFI_NOT_FOUND;
  }
  SmbiosEntry         = SMBIOS_ENTRY_FROM_LINK (Link);
  SmbiosTableHeader   = (EFI_SMBIOS_TABLE_HEADER *)(SmbiosEntry->RecordHeader + 1);
  *Record             = SmbiosTableHeader;
  *CurrentSmbiosEntry = SmbiosEntry;
  return EFI_SUCCESS;
}