1 /** @file
2 
3   Copyright (c) 2014-2015, ARM Ltd. All rights reserved.
4 
5   This program and the accompanying materials are licensed and made available
6   under the terms and conditions of the BSD License which accompanies this
7   distribution.  The full text of the license may be found at
8   http://opensource.org/licenses/bsd-license.php
9 
10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
11   WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 
13 **/
14 
15 #ifndef __ARM_VEXPRESS_INTERNAL_H__
16 #define __ARM_VEXPRESS_INTERNAL_H__
17 
18 #include <Uefi.h>
19 
20 #include <Library/ArmLib.h>
21 #include <Library/DebugLib.h>
22 #include <Library/IoLib.h>
23 #include <Library/PcdLib.h>
24 #include <Library/UefiBootServicesTableLib.h>
25 #include <Library/UefiLib.h>
26 
27 #include <VExpressMotherBoard.h>
28 
29 // This 'enum' is needed as variations based on existing platform exist
30 typedef enum {
31   ARM_FVP_VEXPRESS_UNKNOWN = 0,
32   ARM_FVP_VEXPRESS_A9x4,
33   ARM_FVP_VEXPRESS_A15x1,
34   ARM_FVP_VEXPRESS_A15x2,
35   ARM_FVP_VEXPRESS_A15x4,
36   ARM_FVP_VEXPRESS_A15x1_A7x1,
37   ARM_FVP_VEXPRESS_A15x4_A7x4,
38   ARM_FVP_VEXPRESS_AEMv8x4,
39   ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2,
40   ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV2_LEGACY,
41   ARM_FVP_BASE_AEMv8x4_AEMv8x4_GICV3,
42   ARM_FVP_FOUNDATION_GICV2,
43   ARM_FVP_FOUNDATION_GICV2_LEGACY,
44   ARM_FVP_FOUNDATION_GICV3,
45   ARM_HW_A9x4,
46   ARM_HW_A15x2_A7x3,
47   ARM_HW_A15,
48   ARM_HW_A5
49 } ARM_VEXPRESS_PLATFORM_ID;
50 
51 typedef struct {
52   ARM_VEXPRESS_PLATFORM_ID  Id;
53 
54   // Flattened Device Tree (FDT) File
55   CONST EFI_GUID            *FdtGuid; /// Name of the FDT when present into the FV
56   CONST CHAR16              *FdtName; /// Name of the FDT when present into a File System
57 } ARM_VEXPRESS_PLATFORM;
58 
59 // Array that contains the list of the VExpress based platform supported by this DXE driver
60 extern CONST ARM_VEXPRESS_PLATFORM ArmVExpressPlatforms[];
61 
62 /**
63   Get information about the VExpress platform the firmware is running on given its Id.
64 
65   @param[in]   PlatformId  Id of the VExpress platform.
66   @param[out]  Platform    Address where the pointer to the platform information
67                            (type ARM_VEXPRESS_PLATFORM*) should be stored.
68                            The returned pointer does not point to an allocated
69                            memory area.
70 
71   @retval  EFI_SUCCESS    The platform information was returned.
72   @retval  EFI_NOT_FOUND  The platform was not recognised.
73 
74 **/
75 EFI_STATUS
76 ArmVExpressGetPlatformFromId (
77   IN  CONST ARM_VEXPRESS_PLATFORM_ID PlatformId,
78   OUT CONST ARM_VEXPRESS_PLATFORM**  Platform
79   );
80 
81 /**
82 
83   Get information about the VExpress platform the firmware is running on.
84 
85   @param[out]  Platform   Address where the pointer to the platform information
86                           (type ARM_VEXPRESS_PLATFORM*) should be stored.
87                           The returned pointer does not point to an allocated
88                           memory area.
89 
90   @retval  EFI_SUCCESS    The platform information was returned.
91   @retval  EFI_NOT_FOUND  The platform was not recognised.
92 
93 **/
94 EFI_STATUS
95 ArmVExpressGetPlatform (
96   OUT CONST ARM_VEXPRESS_PLATFORM** Platform
97   );
98 
99 #endif // __ARM_VEXPRESS_INTERNAL_H__
100