// Copyright 2020 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT

#include "lib/acpi_lite/structures.h"

#include <lib/acpi_lite/internal.h>
#include <stdint.h>
#include <string.h>
#include <zircon/compiler.h>
#include <zircon/types.h>

namespace acpi_lite {

// Write the signature into the given buffer.
//
// Buffer must have a length of at least 5.
void AcpiSignature::WriteToBuffer(char* buffer) const {
  memcpy(buffer, &value, sizeof(AcpiSignature));
  buffer[sizeof(AcpiSignature)] = 0;
}

uint32_t AcpiSratProcessorAffinityEntry::proximity_domain() const {
  uint32_t domain = proximity_domain_low;
  domain |= proximity_domain_high[0] << 8;
  domain |= proximity_domain_high[1] << 16;
  domain |= proximity_domain_high[2] << 24;
  return domain;
}

}  // namespace acpi_lite
