/** @file AML Resource Data. Copyright (c) 2019 - 2020, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @par Glossary: - Rd or RD - Resource Data - Rds or RDS - Resource Data Small - Rdl or RDL - Resource Data Large **/ #include /** Check whether the resource data has the input descriptor Id. The small/large bit is included in the descriptor Id, but the size bits are not included for small resource data elements. @param [in] Header Pointer to the first byte of a resource data element. @param [in] DescriptorId The descriptor to check against. @retval TRUE The resource data has the descriptor Id. @retval FALSE Otherwise. **/ BOOLEAN EFIAPI AmlRdCompareDescId ( IN CONST AML_RD_HEADER * Header, IN AML_RD_HEADER DescriptorId ) { if (Header == NULL) { ASSERT (0); return FALSE; } if (AML_RD_IS_LARGE (Header)) { return ((*Header ^ DescriptorId) == 0); } else { return (((*Header & AML_RD_SMALL_ID_MASK) ^ DescriptorId) == 0); } } /** Get the descriptor Id of the resource data. The small/large bit is included in the descriptor Id, but the size bits are not included for small resource data elements. @param [in] Header Pointer to the first byte of a resource data. @return A descriptor Id. **/ AML_RD_HEADER EFIAPI AmlRdGetDescId ( IN CONST AML_RD_HEADER * Header ) { if (Header == NULL) { ASSERT (0); return FALSE; } if (AML_RD_IS_LARGE (Header)) { return *Header; } // Header is a small resource data element. return *Header & AML_RD_SMALL_ID_MASK; } /** Get the size of a resource data element. If the resource data element is of the large type, the Header is expected to be at least 3 bytes long. @param [in] Header Pointer to the first byte of a resource data. @return The size of the resource data element. **/ UINT32 EFIAPI AmlRdGetSize ( IN CONST AML_RD_HEADER * Header ) { if (Header == NULL) { ASSERT (0); return FALSE; } if (AML_RD_IS_LARGE (Header)) { return ((ACPI_LARGE_RESOURCE_HEADER*)Header)->Length + sizeof (ACPI_LARGE_RESOURCE_HEADER); } // Header is a small resource data element. return ((ACPI_SMALL_RESOURCE_HEADER*)Header)->Bits.Length + sizeof (ACPI_SMALL_RESOURCE_HEADER); }