summaryrefslogtreecommitdiff
path: root/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnTransport.c
blob: 70e463ca15c6796284314e2ff58d65c3baf88c58 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/** @file
  IPMI Command - NetFnTransport.

  Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR>
  Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent
**/

#include <PiPei.h>
#include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h>
#include <Library/IpmiLib.h>

#include <IndustryStandard/Ipmi.h>

/**
  This function sends command to BMC to notify a remote application
  that a SOL payload is activating on another channel.

  @param [in]   SolActivatingRequest  The get channel information request.
  @param [out]  CompletionCode        IPMI completetion code, refer to Ipmi.h.

  @retval EFI_STATUS   See the return values of IpmiSubmitCommand () function.

**/
EFI_STATUS
EFIAPI
IpmiSolActivating (
  IN  IPMI_SOL_ACTIVATING_REQUEST  *SolActivatingRequest,
  OUT UINT8                        *CompletionCode
  )
{
  EFI_STATUS  Status;
  UINT32      DataSize;

  DataSize = sizeof (*CompletionCode);
  Status   = IpmiSubmitCommand (
               IPMI_NETFN_TRANSPORT,
               IPMI_TRANSPORT_SOL_ACTIVATING,
               (VOID *)SolActivatingRequest,
               sizeof (*SolActivatingRequest),
               (VOID *)CompletionCode,
               &DataSize
               );
  return Status;
}

/**
  This function is used to set parameters such as the network addressing
  information required for SOL payload operation.

  @param [in]   SetConfigurationParametersRequest      Pointer to IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST.
  @param [in]   SetConfigurationParametersRequestSize  Size of entire SetConfigurationParametersRequestSize.
  @param [out]  CompletionCode                         IPMI completetion code, refer to Ipmi.h.

  @retval EFI_STATUS   See the return values of IpmiSubmitCommand () function.

**/
EFI_STATUS
EFIAPI
IpmiSetSolConfigurationParameters (
  IN  IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST  *SetConfigurationParametersRequest,
  IN  UINT32                                         SetConfigurationParametersRequestSize,
  OUT UINT8                                          *CompletionCode
  )
{
  EFI_STATUS  Status;
  UINT32      DataSize;

  DataSize = sizeof (*CompletionCode);
  Status   = IpmiSubmitCommand (
               IPMI_NETFN_TRANSPORT,
               IPMI_TRANSPORT_SET_SOL_CONFIG_PARAM,
               (VOID *)SetConfigurationParametersRequest,
               SetConfigurationParametersRequestSize,
               (VOID *)CompletionCode,
               &DataSize
               );
  return Status;
}

/**
  This function is used to retrieve the configuration parameters from the
  Set SOL Configuration Parameters.

  @param [in]       GetConfigurationParametersRequest       Pointer to IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST.
  @param [out]      GetConfigurationParametersResponse      Pointer to receive IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE
  @param [in, out]  GetConfigurationParametersResponseSize  When in, which is the expected size of
                                                            response. When out, which is the actual
                                                            size returned.

  @retval EFI_STATUS   See the return values of IpmiSubmitCommand () function.

**/
EFI_STATUS
EFIAPI
IpmiGetSolConfigurationParameters (
  IN  IPMI_GET_SOL_CONFIGURATION_PARAMETERS_REQUEST   *GetConfigurationParametersRequest,
  OUT IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE  *GetConfigurationParametersResponse,
  IN OUT UINT32                                       *GetConfigurationParametersResponseSize
  )
{
  EFI_STATUS  Status;

  Status = IpmiSubmitCommand (
             IPMI_NETFN_TRANSPORT,
             IPMI_TRANSPORT_GET_SOL_CONFIG_PARAM,
             (VOID *)GetConfigurationParametersRequest,
             sizeof (*GetConfigurationParametersRequest),
             (VOID *)GetConfigurationParametersResponse,
             GetConfigurationParametersResponseSize
             );
  return Status;
}

/**
  This function gets the LAN configuration parameter.

  @param[in]      GetLanConfigurationParametersRequest   Request data
  @param[out]     GetLanConfigurationParametersResponse  Response data
  @param[in,out]  GetLanConfigurationParametersSize      When input, the expected size of response data.
                                                         When out, the exact  size of response data.

  @retval EFI_SUCCESS            Lan configuration parameter is returned in the response.
  @retval EFI_INVALID_PARAMETER  One of the given input parameters is invalid.
  @retval Others                 Other errors.

**/
EFI_STATUS
EFIAPI
IpmiGetLanConfigurationParameters (
  IN     IPMI_GET_LAN_CONFIGURATION_PARAMETERS_REQUEST   *GetLanConfigurationParametersRequest,
  OUT    IPMI_GET_LAN_CONFIGURATION_PARAMETERS_RESPONSE  *GetLanConfigurationParametersResponse,
  IN OUT UINT32                                          *GetLanConfigurationParametersSize
  )
{
  EFI_STATUS  Status;

  if ((GetLanConfigurationParametersRequest == NULL) ||
      (GetLanConfigurationParametersResponse == NULL) ||
      (GetLanConfigurationParametersSize == NULL))
  {
    return EFI_INVALID_PARAMETER;
  }

  Status = IpmiSubmitCommand (
             IPMI_NETFN_TRANSPORT,
             IPMI_TRANSPORT_GET_LAN_CONFIG_PARAMETERS,
             (UINT8 *)GetLanConfigurationParametersRequest,
             sizeof (*GetLanConfigurationParametersRequest),
             (UINT8 *)GetLanConfigurationParametersResponse,
             GetLanConfigurationParametersSize
             );
  return Status;
}