Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/edk2/Include/Protocol/HiiConfigRouting.h
96339 views
1
/** @file
2
The file provides services to manage the movement of
3
configuration data from drivers to configuration applications.
4
It then serves as the single point to receive configuration
5
information from configuration applications, routing the
6
results to the appropriate drivers.
7
8
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
9
SPDX-License-Identifier: BSD-2-Clause-Patent
10
11
@par Revision Reference:
12
This Protocol was introduced in UEFI Specification 2.1.
13
14
15
**/
16
17
#ifndef __HII_CONFIG_ROUTING_H__
18
#define __HII_CONFIG_ROUTING_H__
19
20
#define EFI_HII_CONFIG_ROUTING_PROTOCOL_GUID \
21
{ 0x587e72d7, 0xcc50, 0x4f79, { 0x82, 0x09, 0xca, 0x29, 0x1f, 0xc1, 0xa1, 0x0f } }
22
23
typedef struct _EFI_HII_CONFIG_ROUTING_PROTOCOL EFI_HII_CONFIG_ROUTING_PROTOCOL;
24
25
/**
26
27
This function allows the caller to request the current
28
configuration for one or more named elements from one or more
29
drivers. The resulting string is in the standard HII
30
configuration string format. If Successful, Results contains an
31
equivalent string with "=" and the values associated with all
32
names added in. The expected implementation is for each
33
<ConfigRequest> substring in the Request to call the HII
34
Configuration Routing Protocol ExtractProtocol function for the
35
driver corresponding to the <ConfigHdr> at the start of the
36
<ConfigRequest> substring. The request fails if no driver
37
matches the <ConfigRequest> substring. Note: Alternative
38
configuration strings may also be appended to the end of the
39
current configuration string. If they are, they must appear
40
after the current configuration. They must contain the same
41
routing (GUID, NAME, PATH) as the current configuration string.
42
They must have an additional description indicating the type of
43
alternative configuration the string represents,
44
"ALTCFG=<StringToken>". That <StringToken> (when converted from
45
hexadecimal (encoded as text) to binary) is a reference to a string in the
46
associated string pack. As an example, assume that the Request
47
string is:
48
GUID=...&NAME=00480050&PATH=...&Fred&George&Ron&Neville A result
49
might be:
50
GUID=...&NAME=00480050&PATH=...&Fred=16&George=16&Ron=12&Neville=11&
51
GUID=...&NAME=00480050&PATH=...&ALTCFG=0037&Fred=12&Neville=7
52
53
@param This Points to the EFI_HII_CONFIG_ROUTING_PROTOCOL
54
instance.
55
56
@param Request A null-terminated string in <MultiConfigRequest> format.
57
58
@param Progress On return, points to a character in the
59
Request string. Points to the string's null
60
terminator if the request was successful. Points
61
to the most recent '&' before the first
62
failing name / value pair (or the beginning
63
of the string if the failure is in the first
64
name / value pair) if the request was not
65
successful
66
67
@param Results A null-terminated string in <MultiConfigAltResp> format
68
which has all values filled in for the names in the
69
Request string.
70
71
@retval EFI_SUCCESS The Results string is filled with the
72
values corresponding to all requested
73
names.
74
75
@retval EFI_OUT_OF_RESOURCES Not enough memory to store the
76
parts of the results that must be
77
stored awaiting possible future
78
protocols.
79
80
@retval EFI_INVALID_PARAMETER For example, passing in a NULL
81
for the Request parameter
82
would result in this type of
83
error. The Progress parameter
84
is set to NULL.
85
86
@retval EFI_NOT_FOUND Routing data doesn't match any
87
known driver. Progress set to
88
the "G" in "GUID" of the
89
routing header that doesn't
90
match. Note: There is no
91
requirement that all routing
92
data be validated before any
93
configuration extraction.
94
95
@retval EFI_INVALID_PARAMETER Illegal syntax. Progress set
96
to the most recent & before the
97
error, or the beginning of the
98
string.
99
@retval EFI_INVALID_PARAMETER The ExtractConfig function of the
100
underlying HII Configuration
101
Access Protocol returned
102
EFI_INVALID_PARAMETER. Progress
103
set to most recent & before the
104
error or the beginning of the
105
string.
106
107
**/
108
typedef
109
EFI_STATUS
110
(EFIAPI *EFI_HII_EXTRACT_CONFIG)(
111
IN CONST EFI_HII_CONFIG_ROUTING_PROTOCOL *This,
112
IN CONST EFI_STRING Request,
113
OUT EFI_STRING *Progress,
114
OUT EFI_STRING *Results
115
);
116
117
/**
118
This function allows the caller to request the current configuration
119
for the entirety of the current HII database and returns the data in
120
a null-terminated string.
121
122
This function allows the caller to request the current
123
configuration for all of the current HII database. The results
124
include both the current and alternate configurations as
125
described in ExtractConfig() above.
126
127
@param This Points to the EFI_HII_CONFIG_ROUTING_PROTOCOL instance.
128
129
@param Results Null-terminated Unicode string in
130
<MultiConfigAltResp> format which has all values
131
filled in for the entirety of the current HII
132
database. String to be allocated by the called
133
function. De-allocation is up to the caller.
134
135
@retval EFI_SUCCESS The Results string is filled with the
136
values corresponding to all requested
137
names.
138
139
@retval EFI_OUT_OF_RESOURCES Not enough memory to store the
140
parts of the results that must be
141
stored awaiting possible future
142
protocols.
143
144
@retval EFI_INVALID_PARAMETERS For example, passing in a NULL
145
for the Results parameter
146
would result in this type of
147
error.
148
149
**/
150
typedef
151
EFI_STATUS
152
(EFIAPI *EFI_HII_EXPORT_CONFIG)(
153
IN CONST EFI_HII_CONFIG_ROUTING_PROTOCOL *This,
154
OUT EFI_STRING *Results
155
);
156
157
/**
158
159
This function routes the results of processing forms to the
160
appropriate targets. It scans for <ConfigHdr> within the string
161
and passes the header and subsequent body to the driver whose
162
location is described in the <ConfigHdr>. Many <ConfigHdr>s may
163
appear as a single request. The expected implementation is to
164
hand off the various <ConfigResp> substrings to the
165
Configuration Access Protocol RouteConfig routine corresponding
166
to the driver whose routing information is defined by the
167
<ConfigHdr> in turn.
168
169
@param This Points to the EFI_HII_CONFIG_ROUTING_PROTOCOL instance.
170
171
@param Configuration A null-terminated string in <MulltiConfigResp> format.
172
173
@param Progress A pointer to a string filled in with the
174
offset of the most recent '&' before the
175
first failing name / value pair (or the
176
beginning of the string if the failure is in
177
the first name / value pair), or the
178
terminating NULL if all was successful.
179
180
@retval EFI_SUCCESS The results have been distributed or are
181
awaiting distribution.
182
183
@retval EFI_OUT_OF_RESOURCES Not enough memory to store the
184
parts of the results that must be
185
stored awaiting possible future
186
protocols.
187
188
@retval EFI_INVALID_PARAMETERS Passing in a NULL for the
189
Results parameter would result
190
in this type of error.
191
192
@retval EFI_NOT_FOUND The target for the specified routing data
193
was not found.
194
195
**/
196
typedef
197
EFI_STATUS
198
(EFIAPI *EFI_HII_ROUTE_CONFIG)(
199
IN CONST EFI_HII_CONFIG_ROUTING_PROTOCOL *This,
200
IN CONST EFI_STRING Configuration,
201
OUT EFI_STRING *Progress
202
);
203
204
/**
205
206
This function extracts the current configuration from a block of
207
bytes. To do so, it requires that the ConfigRequest string
208
consists of a list of <BlockName> formatted names. It uses the
209
offset in the name to determine the index into the Block to
210
start the extraction and the width of each name to determine the
211
number of bytes to extract. These are mapped to a string
212
using the equivalent of the C "%x" format (with optional leading
213
spaces). The call fails if, for any (offset, width) pair in
214
ConfigRequest, offset+value >= BlockSize.
215
216
@param This Points to the EFI_HII_CONFIG_ROUTING_PROTOCOL instance.
217
218
@param ConfigRequest A null-terminated string in <ConfigRequest> format.
219
220
@param Block An array of bytes defining the block's
221
configuration.
222
223
@param BlockSize The length in bytes of Block.
224
225
@param Config The filled-in configuration string. String
226
allocated by the function. Returned only if
227
call is successful. The null-terminated string
228
will be <ConfigResp> format.
229
230
@param Progress A pointer to a string filled in with the
231
offset of the most recent '&' before the
232
first failing name / value pair (or the
233
beginning of the string if the failure is in
234
the first name / value pair), or the
235
terminating NULL if all was successful.
236
237
@retval EFI_SUCCESS The request succeeded. Progress points
238
to the null terminator at the end of the
239
ConfigRequest string.
240
241
@retval EFI_OUT_OF_RESOURCES Not enough memory to allocate
242
Config. Progress points to the
243
first character of ConfigRequest.
244
245
@retval EFI_INVALID_PARAMETERS Passing in a NULL for the
246
ConfigRequest or Block
247
parameter would result in this
248
type of error. Progress points
249
to the first character of
250
ConfigRequest.
251
252
@retval EFI_NOT_FOUND The target for the specified routing data
253
was not found. Progress points to the
254
'G' in "GUID" of the errant routing
255
data.
256
@retval EFI_DEVICE_ERROR The block is not large enough. Progress undefined.
257
258
@retval EFI_INVALID_PARAMETER Encountered non <BlockName>
259
formatted string. Block is
260
left updated and Progress
261
points at the '&' preceding
262
the first non-<BlockName>.
263
264
**/
265
typedef
266
EFI_STATUS
267
(EFIAPI *EFI_HII_BLOCK_TO_CONFIG)(
268
IN CONST EFI_HII_CONFIG_ROUTING_PROTOCOL *This,
269
IN CONST EFI_STRING ConfigRequest,
270
IN CONST UINT8 *Block,
271
IN CONST UINTN BlockSize,
272
OUT EFI_STRING *Config,
273
OUT EFI_STRING *Progress
274
);
275
276
/**
277
This function maps a configuration containing a series of
278
<BlockConfig> formatted name value pairs in ConfigResp into a
279
Block so it may be stored in a linear mapped storage such as a
280
UEFI Variable. If present, the function skips GUID, NAME, and
281
PATH in <ConfigResp>. It stops when it finds a non-<BlockConfig>
282
name / value pair (after skipping the routing header) or when it
283
reaches the end of the string.
284
Example Assume an existing block containing: 00 01 02 03 04 05
285
And the ConfigResp string is:
286
OFFSET=4&WIDTH=1&VALUE=7&OFFSET=0&WIDTH=2&VALUE=AA55
287
The results are
288
55 AA 02 07 04 05
289
290
@param This Points to the EFI_HII_CONFIG_ROUTING_PROTOCOL instance.
291
292
@param ConfigResp A null-terminated string in <ConfigResp> format.
293
294
@param Block A possibly null array of bytes
295
representing the current block. Only
296
bytes referenced in the ConfigResp
297
string in the block are modified. If
298
this parameter is null or if the
299
BlockLength parameter is (on input)
300
shorter than required by the
301
Configuration string, only the BlockSize
302
parameter is updated, and an appropriate
303
status (see below) is returned.
304
305
@param BlockSize The length of the Block in units of UINT8.
306
On input, this is the size of the Block. On
307
output, if successful, contains the largest
308
index of the modified byte in the Block, or
309
the required buffer size if the Block is not
310
large enough.
311
312
@param Progress On return, points to an element of the
313
ConfigResp string filled in with the offset
314
of the most recent "&" before the first
315
failing name / value pair (or the beginning
316
of the string if the failure is in the first
317
name / value pair), or the terminating NULL
318
if all was successful.
319
320
@retval EFI_SUCCESS The request succeeded. Progress points to the null
321
terminator at the end of the ConfigResp string.
322
@retval EFI_OUT_OF_RESOURCES Not enough memory to allocate Config. Progress
323
points to the first character of ConfigResp.
324
@retval EFI_INVALID_PARAMETER Passing in a NULL for the ConfigResp or
325
Block parameter would result in this type of
326
error. Progress points to the first character of
327
ConfigResp.
328
@retval EFI_INVALID_PARAMETER Encountered non <BlockName> formatted name /
329
value pair. Block is left updated and
330
Progress points at the '&' preceding the first
331
non-<BlockName>.
332
@retval EFI_DEVICE_ERROR Block not large enough. Progress undefined.
333
@retval EFI_NOT_FOUND Target for the specified routing data was not found.
334
Progress points to the "G" in "GUID" of the errant
335
routing data.
336
@retval EFI_BUFFER_TOO_SMALL Block not large enough. Progress undefined.
337
BlockSize is updated with the required buffer size.
338
339
**/
340
typedef
341
EFI_STATUS
342
(EFIAPI *EFI_HII_CONFIG_TO_BLOCK)(
343
IN CONST EFI_HII_CONFIG_ROUTING_PROTOCOL *This,
344
IN CONST EFI_STRING ConfigResp,
345
IN OUT UINT8 *Block,
346
IN OUT UINTN *BlockSize,
347
OUT EFI_STRING *Progress
348
);
349
350
/**
351
This helper function is to be called by drivers to extract portions of
352
a larger configuration string.
353
354
@param This A pointer to the EFI_HII_CONFIG_ROUTING_PROTOCOL instance.
355
@param ConfigResp A null-terminated string in <ConfigAltResp> format.
356
@param Guid A pointer to the GUID value to search for in the
357
routing portion of the ConfigResp string when retrieving
358
the requested data. If Guid is NULL, then all GUID
359
values will be searched for.
360
@param Name A pointer to the NAME value to search for in the
361
routing portion of the ConfigResp string when retrieving
362
the requested data. If Name is NULL, then all Name
363
values will be searched for.
364
@param DevicePath A pointer to the PATH value to search for in the
365
routing portion of the ConfigResp string when retrieving
366
the requested data. If DevicePath is NULL, then all
367
DevicePath values will be searched for.
368
@param AltCfgId A pointer to the ALTCFG value to search for in the
369
routing portion of the ConfigResp string when retrieving
370
the requested data. If this parameter is NULL,
371
then the current setting will be retrieved.
372
@param AltCfgResp A pointer to a buffer which will be allocated by the
373
function which contains the retrieved string as requested.
374
This buffer is only allocated if the call was successful.
375
The null-terminated string will be <ConfigResp> format.
376
377
@retval EFI_SUCCESS The request succeeded. The requested data was extracted
378
and placed in the newly allocated AltCfgResp buffer.
379
@retval EFI_OUT_OF_RESOURCES Not enough memory to allocate AltCfgResp.
380
@retval EFI_INVALID_PARAMETER Any parameter is invalid.
381
@retval EFI_NOT_FOUND The target for the specified routing data was not found.
382
**/
383
typedef
384
EFI_STATUS
385
(EFIAPI *EFI_HII_GET_ALT_CFG)(
386
IN CONST EFI_HII_CONFIG_ROUTING_PROTOCOL *This,
387
IN CONST EFI_STRING ConfigResp,
388
IN CONST EFI_GUID *Guid,
389
IN CONST EFI_STRING Name,
390
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,
391
IN CONST UINT16 *AltCfgId,
392
OUT EFI_STRING *AltCfgResp
393
);
394
395
///
396
/// This protocol defines the configuration routing interfaces
397
/// between external applications and the HII. There may only be one
398
/// instance of this protocol in the system.
399
///
400
struct _EFI_HII_CONFIG_ROUTING_PROTOCOL {
401
EFI_HII_EXTRACT_CONFIG ExtractConfig;
402
EFI_HII_EXPORT_CONFIG ExportConfig;
403
EFI_HII_ROUTE_CONFIG RouteConfig;
404
EFI_HII_BLOCK_TO_CONFIG BlockToConfig;
405
EFI_HII_CONFIG_TO_BLOCK ConfigToBlock;
406
EFI_HII_GET_ALT_CFG GetAltConfig;
407
};
408
409
extern EFI_GUID gEfiHiiConfigRoutingProtocolGuid;
410
411
#endif
412
413