summaryrefslogtreecommitdiffstats
path: root/MdePkg/Include/Protocol/PlatformToDriverConfiguration.h
blob: 078946e501b1a516377e1661630cbc479820ca00 (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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
/** @file
  The file provides the protocol to retrieve configuration
  information for a device that a UEFI driver is about to start.

  Copyright (c) 2006 - 2007, Intel Corporation
  All rights reserved. This program and the accompanying materials                          
  are licensed and made available under the terms and conditions of the BSD License         
  which accompanies this distribution.  The full text of the license may be found at        
  http://opensource.org/licenses/bsd-license.php                                            

  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             

  Module Name:  PlatformToDriverConfiguration.h

**/

#ifndef __PLATFORM_TO_DRIVER_CONFIGUARTION_H__
#define __PLATFORM_TO_DRIVER_CONFIGUARTION_H__

#define EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL_GUID  \
  { 0x642cd590, 0x8059, 0x4c0a, { 0xa9, 0x58, 0xc5, 0xec, 0x7, 0xd2, 0x3c, 0x4b } }


typedef struct _EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL;


/**
  The UEFI driver must call Query early in the Start() function
  before any time consuming operations are performed. If
  ChildHandle is NULL the driver is requesting information from
  the platform about the ControllerHandle that is being started.
  Information returned from Query may lead to the drivers Start()
  function failing. If the UEFI driver is a bus driver and
  producing a ChildHandle the driver must call Query after the
  child handle has been created and an EFI_DEVICE_PATH_PROTOCOL
  has been placed on that handle, but before any time consuming
  operation is performed. If information return by Query may lead
  the driver to decide to not create the ChildHandle. The driver
  must then cleanup and remove the ChildHandle from the system.
  The UEFI driver repeatedly calls Query, processes the
  information returned by the platform, and calls Response passing
  in the arguments returned from Query. The Instance value passed
  into Response must be the same value returned from the
  corresponding call to Query. The UEFI driver must continuously
  call Query and Response until EFI_NOT_FOUND is returned by
  Query. The only value of Instance that has meaning to the UEFI
  driver is zero. An Instance value of zero means return the first
  ParameterBlock in the set of unprocessed parameter blocks. If a
  ParameterBlock has been processed via a Query and corresponding
  Response call it must not be returned again via a Query call.

  @param This   A pointer to the
                EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOC OL
                instance.
  
  @param ControllerHandle   The handle the platform will return
                            configuration information about.
  
  @param ChildHandle  The handle of the child controller to
                      return information on. This is an optional
                      parameter that may be NULL. It will be
                      NULL for device drivers, and for bus
                      drivers that attempt to get options for
                      the bus controller. It will not be NULL
                      for a bus driver that attempts to get
                      options for one of its child controllers.
  
  
  @param Instance   Pointer to the Instance value. On output the
                    instance associated with the parameter data
                    return. On input zero means return the first
                    query data or pass in a valid instance
                    number returned from a previous call to
                    Query.

  @param ParameterTypeGuid  An EFI_GUID that defines the
                            contents of ParameterBlock. UEFI
                            drivers must use the
                            ParameterTypeGuid to determine how
                            to parser the ParameterBlock.

  @param ParameterBlock   The platform returns a pointer to the
                          ParameterBlock structure which
                          contains details about the
                          configuration parameters specific to
                          the ParameterTypeGuid. This structure
                          is defined based on the protocol and
                          may be different for different
                          protocols. UEFI driver decodes this
                          structure and its contents based on
                          ProtocolGuid. ParameterBlock is
                          allocated by the platform and the
                          platform is responsible for freeing
                          the ParameterBlock after Result is
                          called.

  @param ParameterBlockSize   The platform returns the size of
                              the ParameterBlock in bytes.


  @retval EFI_SUCCESS   The platform return parameter
                        information for ControllerHandle.

  @retval EFI_NOT_FOUND No more unread Instance exists.

  @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid
                                EFI_HANDLE.

  @retval EFI_INVALID_PARAMETER Instance is NULL.

  @retval EFI_DEVICE_ERROR  A device error occurred while
                            attempting to return parameter block
                            information for the controller
                            specified by ControllerHandle and
                            ChildHandle.

  @retval EFI_OUT_RESOURCES There are not enough resources
                            available to set the configuration
                            options for the controller specified
                            by ControllerHandle and ChildHandle.


**/
typedef
EFI_STATUS
(EFIAPI *EFI_PLATFORM_TO_DRIVER_CONFIGURATION_QUERY) (
  IN CONST  EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL *This,
  IN CONST  EFI_HANDLE  ControllerHandle,
  IN CONST  EFI_HANDLE  ChildHandle OPTIONAL,
  IN OUT    UINTN       *Instance,
  IN OUT    EFI_GUID    **ParameterTypeGuid,
  IN OUT    VOID        **ParameterBlock,
  IN OUT    UINTN       *ParameterBlockSize
);

/**

  @param EfiPlatformConfigurationActionNone
          The controller specified by ControllerHandle is still
          in a usable state, it's configuration has been updated
          via parsing the ParameterBlock. If required by the
          parameter block and the module supports an NVRAM store
          the configuration information from PB was successfully
          saved to the NVRAM. No actions are required before
          this controller can be used again with the updated
          configuration settings.


  @param EfiPlatformConfigurationStopController 
          The driver has detected that the controller specified
          by ControllerHandle  is not in a usable state, and it
          needs to be stopped. The calling agent can use the
          DisconnectControservice to perform this operation, and
          it should be performed as soon as possible.

  @param EfiPlatformConfigurationRestartController
          This controller specified by ControllerHandle needs to
          be stopped and restarted before it can be used again.
          The calling agent can use the DisconnectController()
          and ConnectController() services to perform this
          operation. The restart operation can be delayed  until
          all of the configuratiooptions have been set.


  @param EfiPlatformConfigurationRestartPlatform
          A configuration change has been made that requires the
          platform to be restarted before the controller
          specified by ControllerHandle can be used again. The
          calling agent can use the ResetSystem() services to
          perform this operation. The restart operation can be
          delayed until all of the configuration options have
          been set.

  @param EfiPlatformConfigurationActionNvramFailed 
          The controller specified by ControllerHandle is still
          in a usable state; its configuration has been updated
          via parsing the ParameterBlock. The driver tried to
          update the driver's private NVRAM store with
          information from ParameterBlock and failed. No actions
          are required before this controller can be used again
          with the updated configuration settings, but these
          configuration settings are not guaranteed to persist
          after ControllerHandle is stopped.

**/
typedef enum {
  EfiPlatformConfigurationActionNone              = 0,
  EfiPlatformConfigurationActionStopController    = 1,
  EfiPlatformConfigurationActionRestartController = 2,
  EfiPlatformConfigurationActionRestartPlatform   = 3,
  EfiPlatformConfigurationActionNvramFailed       = 4,
  EfiPlatformConfigurationActionMaximum
} EFI_PLATFORM_CONFIGURATION_ACTION;


/**
  The UEFI driver repeatedly calls Query, processes the
  information returned by the platform, and calls Response passing
  in the arguments returned from Query. The UEFI driver must
  continuously call Query until EFI_NOT_FOUND is returned. For
  every call to Query that returns EFI_SUCCESS a corrisponding
  call to Response is required passing in the same
  ContollerHandle, ChildHandle, Instance, ParameterTypeGuid,
  ParameterBlock, and ParameterBlockSize. The UEFI driver may
  update values in ParameterBlock based on rules defined by
  ParameterTypeGuid. The platform is responsible for freeing
  ParameterBlock and the UEFI driver must not try to free it

  @param This   A pointer to the
                EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOC OL
                instance.

  @param ControllerHandle The handle the driver is returning
                          configuration information about.

  @param ChildHandle  The handle of the child controller to
                      return information on. This is an optional
                      parameter that may be NULL. It will be
                      NULL for device drivers, and for bus
                      drivers that attempt to get options for
                      the bus controller. It will not be NULL
                      for a bus driver that attempts to get
                      options for one of its child controllers.
                      Instance Instance data returned from
                      Query().

  @param ParameterTypeGuid ParameterTypeGuid returned from
                           Query.

  @param ParameterBlock ParameterBlock returned from Query.

  @param ParameterBlockSize The ParameterBlock size returned
                            from Query.

  @param Configuration  ActionThe driver tells the platform what
                        action is required for ParameterBlock to
                        take effect.
  
  
  @retval EFI_SUCCESS The platform return parameter information
                      for ControllerHandle.
  
  @retval EFI_NOT_FOUND Instance was not found.
  
  @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid
                                EFI_HANDLE.
  
  @retval EFI_INVALID_PARAMETER Instance is zero.
  
**/
typedef
EFI_STATUS
(EFIAPI *EFI_PLATFORM_TO_DRIVER_CONFIGURATION_RESPONSE) (
  IN CONST  EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL *This,
  IN CONST  EFI_HANDLE  ControllerHandle,
  IN CONST  EFI_HANDLE  ChildHandle OPTIONAL,
  IN CONST  UINTN       *Instance,
  IN CONST  EFI_GUID    *ParameterTypeGuid,
  IN CONST  VOID        *ParameterBlock,
  IN CONST  UINTN       ParameterBlockSize ,
  IN CONST  EFI_PLATFORM_CONFIGURATION_ACTION ConfigurationAction
);


/**
  The EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL is used by the
  UEFI driver to query the platform for configuration information.
  The UEFI driver calls Query() multiple times to get
  configuration information from the platform. For every call to
  Query() there must be a matching call to Response() so the
  UEFI driver can inform the platform how it used the
  information passed in from Query(). It¡¯s legal for a UEFI
  driver to use Response() to inform the platform it does not
  understand the data returned via Query() and thus no action was
  taken.

  @param  Query   Called by the UEFI Driver Start() function to
                  get configuration information from the
                  platform.
  
  @param  Response  Called by the UEFI Driver Start() function
                    to let the platform know how UEFI driver
                    processed the data return from Query.
  

**/
struct _EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL {
  EFI_PLATFORM_TO_DRIVER_CONFIGURATION_QUERY    Query;
  EFI_PLATFORM_TO_DRIVER_CONFIGURATION_RESPONSE Response;
};



#define EFI_PLATFORM_TO_DRIVER_CONFIGURATION_CLP_GUID   \
  {0x345ecc0e, 0xcb6, 0x4b75, { 0xbb, 0x57, 0x1b, 0x12, 0x9c, 0x47, 0x33,0x3e } }

/**
   
  ParameterTypeGuid provides the support for parameters
  communicated through the DMTF SM CLP Specification 1.0 Final
  Standard to be used to configure the UEFI driver. In this
  section the producer of the
  EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL is platform
  firmware and the consumer is the UEFI driver. Note: if future
  versions of the DMTF SM CLP Specification require changes to the
  parameter block definition, newer ParameterTypeGuid will be
  used.

  @param CLPCommand   A pointer to the DMTF SM CLP command line
                      null-terminated string that the driver is
                      required to parse and process when this
                      EFI_SUCCESS The platform return parameter
                      information for ControllerHandle.
                      EFI_NOT_FOUND Instance was not found.
                      EFI_INVALID_PARAMETER ControllerHandle is
                      not a valid EFI_HANDLE.
                      EFI_INVALID_PARAMETER Instance is zero.
                      function is called. See the DMTF SM CLP
                      Specification 1.0 Final Standard for
                      details on the format and syntax of the
                      CLP command line string. CLPCommand buffer
                      is allocated by the producer of the
                      EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOOL.

  @param CLPCommandLength   The length of the CLP Command in
                            bytes.

  @param CLPReturnString  A pointer to the CLP return status
                          string that the driver is required to
                          provide to the calling agent. The
                          calling agent may parse and/ or pass
                          this for processing and user feedback.
                          The SM CLP Command Response string
                          buffer is filled in by the UEFI driver
                          in the "keyword=value" format
                          described in the SM CLP Specification,
                          unless otherwise requested via the SM
                          CLP Coutput option in the Command Line
                          string buffer. UEFI driver's support
                          for this default "keyword=value"
                          output format is required if the UEFI
                          driver supports this protocol, while
                          support for other SM CLP output
                          formats is optional (the UEFI Driver
                          should return an EFI_UNSUPPORTED if
                          the SM CLP Coutput option requested by
                          the caller is not supported by the
                          UEFI Driver). CLPReturnString buffer
                          is allocated by the consumer of the
                          EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOC
                          OL and undefined prior to the call to
                          Response().

  @param CLPReturnStringLength  The length of the CLP return
                                status string in bytes.

  @param CLPReturnStatus  SM CLP Command Status (see DMTF SM CLP
                          Specification 1.0 Final Standard -
                          Table 4) CLPErrorValue SM CLP
                          Processing Error Value (see DMTF SM
                          CLP Specification 1.0 Final Standard -
                          Table 6). This field is filled in by
                          the consumer of the
                          EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOC 
                          OL and undefined prior to the call to
                          Response().

  @param CLPMessageCode   Bit 15: OEM Message Code Flag 0 =
                          Message Code is an SM CLP Probable
                          Cause Value. (see SM CLP Specification
                          Table 11) 1 = Message Code is OEM
                          Specific Bits 14-0: Message Code This
                          field is filled in by the consumer of
                          the
                          EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOC
                          OL and undefined prior to the call to
                          Response().

**/
typedef struct {
  CHAR8   *CLPCommand;
  UINT32  CLPCommandLength;
  CHAR8   *CLPReturnString;
  UINT32  CLPReturnStringLength;
  UINT8   CLPCmdStatus;
  UINT8   CLPErrorValue;
  UINT16  CLPMsgCode;
} EFI_CONFIGURE_CLP_PARAMETER_BLK;



extern EFI_GUID gEfiPlatformToDriverConfigurationClpGuid;

extern EFI_GUID gEfiPlatformToDriverConfigurationProtocolGuid;

#endif