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