/** @file * * RPi defines for constructing ACPI tables * * Copyright (c) 2020, Pete Batard * Copyright (c) 2019, ARM Ltd. All rights reserved. * Copyright (c) 2018, Andrei Warkentin * Copyright (c) Microsoft Corporation. All rights reserved. * * SPDX-License-Identifier: BSD-2-Clause-Patent * **/ #ifndef __ACPITABLES_H__ #define __ACPITABLES_H__ #include #define EFI_ACPI_OEM_ID {'R','O','C','K',' ',' '} #define EFI_ACPI_OEM_TABLE_ID SIGNATURE_64 ('R','O','C','K',' ',' ',' ',' ') #define EFI_ACPI_OEM_REVISION 0x00000200 #define EFI_ACPI_CREATOR_ID SIGNATURE_32 ('E','D','K','2') #define EFI_ACPI_CREATOR_REVISION 0x00000300 #define EFI_ACPI_VENDOR_ID SIGNATURE_32 ('R','O','C','K') // A macro to initialise the common header part of EFI ACPI tables as defined by // EFI_ACPI_DESCRIPTION_HEADER structure. #define ACPI_HEADER(Signature, Type, Revision) { \ Signature, /* UINT32 Signature */ \ sizeof (Type), /* UINT32 Length */ \ Revision, /* UINT8 Revision */ \ 0, /* UINT8 Checksum */ \ EFI_ACPI_OEM_ID, /* UINT8 OemId[6] */ \ EFI_ACPI_OEM_TABLE_ID, /* UINT64 OemTableId */ \ EFI_ACPI_OEM_REVISION, /* UINT32 OemRevision */ \ EFI_ACPI_CREATOR_ID, /* UINT32 CreatorId */ \ EFI_ACPI_CREATOR_REVISION /* UINT32 CreatorRevision */ \ } #define EFI_ACPI_CSRT_REVISION 0x00000005 #define EFI_ACPI_CSRT_DEVICE_ID_DMA 0x00000009 // Fixed id #define EFI_ACPI_CSRT_RESOURCE_ID_IN_DMA_GRP 0x0 // Count up from 0 //#define RPI_DMA_CHANNEL_COUNT 10 // All 10 DMA channels are listed, including the reserved ones //#define RPI_DMA_USED_CHANNEL_COUNT 5 // Use 5 DMA channels #define EFI_ACPI_6_3_CSRT_REVISION 0x00000000 typedef enum { EFI_ACPI_CSRT_RESOURCE_TYPE_RESERVED, // 0 EFI_ACPI_CSRT_RESOURCE_TYPE_INTERRUPT, // 1 EFI_ACPI_CSRT_RESOURCE_TYPE_TIMER, // 2 EFI_ACPI_CSRT_RESOURCE_TYPE_DMA, // 3 EFI_ACPI_CSRT_RESOURCE_TYPE_CACHE, // 4 } CSRT_RESOURCE_TYPE; typedef enum { EFI_ACPI_CSRT_RESOURCE_SUBTYPE_DMA_CHANNEL, // 0 EFI_ACPI_CSRT_RESOURCE_SUBTYPE_DMA_CONTROLLER // 1 } CSRT_DMA_SUBTYPE; //------------------------------------------------------------------------ // CSRT Resource Group header 24 bytes long //------------------------------------------------------------------------ typedef struct { UINT32 Length; // Length UINT32 VendorID; // 4 bytes UINT32 SubVendorId; // 4 bytes UINT16 DeviceId; // 2 bytes UINT16 SubdeviceId; // 2 bytes UINT16 Revision; // 2 bytes UINT16 Reserved; // 2 bytes UINT32 SharedInfoLength; // 4 bytes } EFI_ACPI_6_3_CSRT_RESOURCE_GROUP_HEADER; //------------------------------------------------------------------------ // CSRT Resource Descriptor 12 bytes total //------------------------------------------------------------------------ typedef struct { UINT32 Length; // 4 bytes UINT16 ResourceType; // 2 bytes UINT16 ResourceSubType; // 2 bytes UINT32 UID; // 4 bytes } EFI_ACPI_6_3_CSRT_RESOURCE_DESCRIPTOR_HEADER; #endif // __ACPITABLES_H__