1 /** @file
2 
3   Copyright (c) 2020 Arm, Limited. All rights reserved.
4 
5   SPDX-License-Identifier: BSD-2-Clause-Patent
6 
7 **/
8 
9 #include <Uefi.h>
10 #include <Library/BaseMemoryLib.h>
11 #include <Library/DebugLib.h>
12 #include <Library/MemoryAllocationLib.h>
13 
14 #include "BcmGenetDxe.h"
15 
16 STATIC
17 EFI_STATUS
18 EFIAPI
GenetAipGetInformation(IN EFI_ADAPTER_INFORMATION_PROTOCOL * This,IN EFI_GUID * InformationType,OUT VOID ** InformationBlock,OUT UINTN * InformationBlockSize)19 GenetAipGetInformation (
20   IN  EFI_ADAPTER_INFORMATION_PROTOCOL  *This,
21   IN  EFI_GUID                          *InformationType,
22   OUT VOID                              **InformationBlock,
23   OUT UINTN                             *InformationBlockSize
24   )
25 {
26   EFI_ADAPTER_INFO_MEDIA_STATE  *AdapterInfo;
27   GENET_PRIVATE_DATA            *Genet;
28 
29   if (This == NULL || InformationBlock == NULL ||
30       InformationBlockSize == NULL) {
31     return EFI_INVALID_PARAMETER;
32   }
33 
34   if (!CompareGuid (InformationType, &gEfiAdapterInfoMediaStateGuid)) {
35     return EFI_UNSUPPORTED;
36   }
37 
38   AdapterInfo = AllocateZeroPool (sizeof (EFI_ADAPTER_INFO_MEDIA_STATE));
39   if (AdapterInfo == NULL) {
40     return EFI_OUT_OF_RESOURCES;
41   }
42 
43   *InformationBlock = AdapterInfo;
44   *InformationBlockSize = sizeof (EFI_ADAPTER_INFO_MEDIA_STATE);
45 
46   Genet = GENET_PRIVATE_DATA_FROM_AIP_THIS (This);
47   AdapterInfo->MediaState = GenericPhyUpdateConfig (&Genet->Phy);
48 
49   return EFI_SUCCESS;
50 }
51 
52 STATIC
53 EFI_STATUS
54 EFIAPI
GenetAipSetInformation(IN EFI_ADAPTER_INFORMATION_PROTOCOL * This,IN EFI_GUID * InformationType,IN VOID * InformationBlock,IN UINTN InformationBlockSize)55 GenetAipSetInformation (
56   IN  EFI_ADAPTER_INFORMATION_PROTOCOL  *This,
57   IN  EFI_GUID                          *InformationType,
58   IN  VOID                              *InformationBlock,
59   IN  UINTN                             InformationBlockSize
60   )
61 {
62   if (This == NULL || InformationBlock == NULL) {
63     return EFI_INVALID_PARAMETER;
64   }
65 
66   if (CompareGuid (InformationType, &gEfiAdapterInfoMediaStateGuid)) {
67     return EFI_WRITE_PROTECTED;
68   }
69 
70   return EFI_UNSUPPORTED;
71 }
72 
73 STATIC
74 EFI_STATUS
75 EFIAPI
GenetAipGetSupportedTypes(IN EFI_ADAPTER_INFORMATION_PROTOCOL * This,OUT EFI_GUID ** InfoTypesBuffer,OUT UINTN * InfoTypesBufferCount)76 GenetAipGetSupportedTypes (
77   IN  EFI_ADAPTER_INFORMATION_PROTOCOL  *This,
78   OUT EFI_GUID                          **InfoTypesBuffer,
79   OUT UINTN                             *InfoTypesBufferCount
80   )
81 {
82   EFI_GUID    *Guid;
83 
84   if (This == NULL || InfoTypesBuffer == NULL ||
85       InfoTypesBufferCount == NULL) {
86     return EFI_INVALID_PARAMETER;
87   }
88 
89   Guid = AllocatePool (sizeof *Guid);
90   if (Guid == NULL) {
91     return EFI_OUT_OF_RESOURCES;
92   }
93 
94   CopyGuid (Guid, &gEfiAdapterInfoMediaStateGuid);
95 
96   *InfoTypesBuffer      = Guid;
97   *InfoTypesBufferCount = 1;
98 
99   return EFI_SUCCESS;
100 }
101 
102 CONST EFI_ADAPTER_INFORMATION_PROTOCOL gGenetAdapterInfoTemplate = {
103   GenetAipGetInformation,
104   GenetAipSetInformation,
105   GenetAipGetSupportedTypes,
106 };
107