summaryrefslogtreecommitdiff
path: root/MdePkg/Include/Protocol/HiiConfigRouting.h
blob: 80a9452c0f90cbfe975378c639388464610507fd (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
/** @file
  The file provides services to manage the movement of
  configuration data from drivers to configuration applications.
  It then serves as the single point to receive configuration
  information from configuration applications, routing the
  results to the appropriate drivers.
  
  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.             

**/

#ifndef __HII_CONFIG_ROUTING_H__
#define __HII_CONFIG_ROUTING_H__

#define EFI_HII_CONFIG_ROUTING_PROTOCOL_GUID \
  { 0x587e72d7, 0xcc50, 0x4f79, { 0x82, 0x09, 0xca, 0x29, 0x1f, 0xc1, 0xa1, 0x0f } }


typedef struct _EFI_HII_CONFIG_ROUTING_PROTOCOL EFI_HII_CONFIG_ROUTING_PROTOCOL;


/**
   
  This function allows the caller to request the current
  configuration for one or more named elements from one or more
  drivers. The resulting string is in the standard HII
  configuration string format. If Successful Results contains an
  equivalent string with "=" and the values associated with all
  names added in. The expected implementation is for each
  <ConfigRequest> substring in the Request, call the HII
  Configuration Routing Protocol ExtractProtocol function for the
  driver corresponding to the <ConfigHdr> at the start of the
  <ConfigRequest> substring. The request fails if no driver
  matches the <ConfigRequest> substring. Note: Alternative
  configuration strings may also be appended to the end of the
  current configuration string. If they are, they must appear
  after the current configuration. They must contain the same
  routing (GUID, NAME, PATH) as the current configuration string.
  They must have an additional description indicating the type of
  alternative configuration the string represents,
  "ALTCFG=<StringToken>". That <StringToken> (when converted from
  Hex UNICODE to binary) is a reference to a string in the
  associated string pack. As an example, assume that the Request
  string is:
  GUID=...&NAME=00480050&PATH=...&Fred&George&Ron&Neville A result
  might be:
  GUID=...&NAME=00480050&PATH=...&Fred=16&George=16&Ron=12&Neville=11&
  GUID=...&NAME=00480050&PATH=...&ALTCFG=0037&Fred=12&Neville=7

  @param This   Points to the EFI_HII_CONFIG_ROUTING_PROTOCOL
                instance.

  @param Request  A null-terminated Unicode string in
                  <MultiConfigRequest> format.

  @param Progress   On return, points to a character in the
                    Request string. Points to the string's null
                    terminator if request was successful. Points
                    to the most recent '&' before the first
                    failing name / value pair (or the beginning
                    of the string if the failure is in the first
                    name / value pair) if the request was not
                    successful

  @param Results    Null-terminated Unicode string in
                    <MultiConfigAltResp> format which has all
                    values filled in for the names in the
                    Request string. String to be allocated by
                    the called function.

  @retval EFI_SUCCESS   The Results string is filled with the
                        values corresponding to all requested
                        names.

  @retval EFI_OUT_OF_MEMORY   Not enough memory to store the
                              parts of the results that must be
                              stored awaiting possible future
                              protocols.

  @retval EFI_INVALID_PARAMETER   For example, passing in a NULL
                                  for the Request parameter
                                  would result in this type of
                                  error. The Progress parameter
                                  is set to NULL. EFI_NOT_FOUND
                                  Routing data doesn't match any
                                  known driver. Progress set to
                                  the "G" in "GUID" of the
                                  routing header that doesn't
                                  match. Note: There is no
                                  requirement that all routing
                                  data be validated before any
                                  configuration extraction.

  @retval EFI_INVALID_PARAMETER   Illegal syntax. Progress set
                                  to most recent & before the
                                  error or the beginning of the
                                  string.
  @retval EFI_INVALID_PARAMETER   Unknown name.


**/
typedef
EFI_STATUS
(EFIAPI * EFI_HII_ROUTING_EXTRACT_CONFIG ) (
  IN CONST  EFI_HII_CONFIG_ROUTING_PROTOCOL *This,
  IN CONST  EFI_STRING                      *Request,
  OUT       EFI_STRING                      *Progress,
  OUT       EFI_STRING                      *Results
);

/**
   
  This function allows the caller to request the current
  configuration for all of the current HII database. The results
  include both the current and alternate configurations as
  described in ExtractConfig() above. Implementation note: This
  call has deceptively few inputs but the implementation is likely
  to be somewhat complex. The requirement is to scan all IFR in
  the HII database to determine the list of names and then request
  the configuration using the corresponding drivers??
  EFI_HII_CONFIG_ACCESS_PROTOCOL.ExtractConfig() interfaces below.
  
  @param This   Points to the EFI_HII_CONFIG_ROUTING_PROTOCOL
                instance.
  
  @param Results  A null-terminated Unicode string in
                  <MultiConfigAltResp> format which has all
                  values filled in for the names in the Request
                  string. String to be allocated by this
                  function. De-allocation is up to the caller.
  
  @retval EFI_SUCCESS   The Results string is filled with the
                        values corresponding to all requested
                        names.
  
  @retval EFI_OUT_OF_MEMORY   Not enough memory to store the
                              parts of the results that must be
                              stored awaiting possible future
                              protocols.
  
  @retval EFI_INVALID_PARAMETERS  For example, passing in a NULL
                                  for the Results parameter
                                  would result in this type of
                                  error.

**/
typedef
EFI_STATUS
(EFIAPI * EFI_HII_ROUTING_EXPORT_CONFIG ) (
  IN CONST  EFI_HII_CONFIG_ROUTING_PROTOCOL *This,
  OUT       EFI_STRING                      *Results
);

/**
   
  This function routes the results of processing forms to the
  appropriate targets. It scans for <ConfigHdr> within the string
  and passes the header and subsequent body to the driver whose
  location is described in the <ConfigHdr>. Many <ConfigHdr>s may
  appear as a single request. The expected implementation is to
  hand off the various <ConfigResp> substrings to the
  Configuration Access Protocol RouteConfig routine corresponding
  to the driver whose routing information is defined by the
  <ConfigHdr> in turn.

  @param This   Points to the EFI_HII_CONFIG_ROUTING_PROTOCOL
                instance.

  @param Configuration  A null-terminated Unicode string in
                        <MulltiConfigResp> format.

  @param Progress   A pointer to a string filled in with the
                    offset of the most recent '&' before the
                    first failing name / value pair (or the
                    beginning of the string if the failure is in
                    the first name / value pair) or the
                    terminating NULL if all was successful.

  @retval EFI_SUCCESS   The results have been distributed or are
                        awaiting distribution.
  
  @retval EFI_OUT_OF_MEMORY   Not enough memory to store the
                              parts of the results that must be
                              stored awaiting possible future
                              protocols.
  
  @retval EFI_INVALID_PARAMETERS  Passing in a NULL for the
                                  Results parameter would result
                                  in this type of error.
  
  @retval EFI_NOT_FOUND   Target for the specified routing data
                          was not found

**/
typedef
EFI_STATUS
(EFIAPI * EFI_HII_ROUTING_ROUTE_CONFIG ) (
  IN CONST  EFI_HII_CONFIG_ROUTING_PROTOCOL *This,
  IN CONST  EFI_STRING                      Configuration,
  OUT       EFI_STRING                      *Progress
);


/**
   
  This function extracts the current configuration from a block of
  bytes. To do so, it requires that the ConfigRequest string
  consists of a list of <BlockName> formatted names. It uses the
  offset in the name to determine the index into the Block to
  start the extraction and the width of each name to determine the
  number of bytes to extract. These are mapped to a UNICODE value
  using the equivalent of the C "%x" format (with optional leading
  spaces). The call fails if, for any (offset, width) pair in
  ConfigRequest, offset+value >= BlockSize.

  @param This   Points to the EFI_HII_CONFIG_ROUTING_PROTOCOL
                instance.

  @param ConfigRequest  A null-terminated Unicode string in
                        <ConfigRequest> format.

  @param Block  Array of bytes defining the block's
                configuration.

  @param BlockSize  Length in bytes of Block.

  @param Config   Filled-in configuration string. String
                  allocated by the function. Returned only if
                  call is successful.

  @param Progress   A pointer to a string filled in with the
                    offset of the most recent '&' before the
                    first failing name / value pair (or the
                    beginning of the string if the failure is in
                    the first name / value pair) or the
                    terminating NULL if all was successful.

  @retval EFI_SUCCESS   The request succeeded. Progress points
                        to the null terminator at the end of the
                        ConfigRequest string.
  @retval EFI_OUT_OF_MEMORY   Not enough memory to allocate
                              Config. Progress points to the
                              first character of ConfigRequest.

  @retval EFI_INVALID_PARAMETERS  Passing in a NULL for the
                                  ConfigRequest or Block
                                  parameter would result in this
                                  type of error. Progress points
                                  to the first character of
                                  ConfigRequest.

  @retval EFI_NOT_FOUND   Target for the specified routing data
                          was not found. Progress points to the
                          'G' in "GUID" of the errant routing
                          data. EFI_DEVICE_ERROR Block not large
                          enough. Progress undefined.

  @retval EFI_INVALID_PARAMETER   Encountered non <BlockName>
                                  formatted string. Block is
                                  left updated and Progress
                                  points at the '&' preceding
                                  the first non-<BlockName>.

**/
typedef
EFI_STATUS
(EFIAPI * EFI_HII_ROUTING_BLOCK_TO_CONFIG ) (
  IN CONST  EFI_HII_CONFIG_ROUTING_PROTOCOL *This,
  IN CONST  EFI_STRING                      ConfigRequest,
  IN CONST  UINT8                           *Block,
  IN CONST  UINTN                           BlockSize,
  OUT       EFI_STRING                      **Config,
  OUT       EFI_STRING                      *Progress
);



/**
   
  This function maps a configuration containing a series of
  <BlockConfig> formatted name value pairs in ConfigResp into a
  Block so it may be stored in a linear mapped storage such as a
  UEFI Variable. If present, the function skips GUID, NAME, and
  PATH in <ConfigResp>. It stops when it finds a non-<BlockConfig>
  name / value pair (after skipping the routing header) or when it
  reaches the end of the string.
  Example Assume an existing block containing: 00 01 02 03 04 05
  And the ConfigResp string is:
  OFFSET=4&WIDTH=1&VALUE=7&OFFSET=0&WIDTH=2&VALUE=AA55
  The results are
  55 AA 02 07 04 05

  @param This   Points to the EFI_HII_CONFIG_ROUTING_PROTOCOL
                instance.

  @param ConfigResp   A  null-terminated Unicode string in
                      <ConfigResp> format.

  @param CurrentBlock   A possibly null array of bytes
                        representing the current block. Only
                        bytes referenced in the ConfigResp
                        string in the block are modified. If
                        this parameter is null or if the
                        BlockLength parameter is (on input)
                        shorter than required by the
                        Configuration string, only the BlockSize
                        parameter is updated and an appropriate
                        status (see below) is returned.

  @param BlockSize  The length of the Block in units of UINT8.
                    On input, this is the size of the Block. On
                    output, if successful, contains the index of
                    the last modified byte in the Block.

  @param Progress   On return, points to an element of the
                    ConfigResp string filled in with the offset
                    of the most recent "&" before the first
                    failing name / value pair (or the beginning
                    of the string if the failure is in the first
                    name / value pair) or the terminating NULL
                    if all was successful.

**/
typedef
EFI_STATUS
(EFIAPI * EFI_HII_ROUTING_CONFIG_TO_BLOCK ) (
  IN CONST  EFI_HII_CONFIG_ROUTING_PROTOCOL *This,
  IN CONST  EFI_STRING                      *ConfigResp,
  IN CONST  UINT8                           *Block,
  IN OUT    UINTN                           *BlockSize,
  OUT       EFI_STRING                      *Progress
);


/**
   
  This protocol defines the configuration routing interfaces
  between external applications and the HII. There may only be one
  instance of this protocol in the system.

**/
struct _EFI_HII_CONFIG_ROUTING_PROTOCOL {
  EFI_HII_ROUTING_EXTRACT_CONFIG  ExtractConfig;
  EFI_HII_ROUTING_EXPORT_CONFIG   ExportConfig;
  EFI_HII_ROUTING_ROUTE_CONFIG    RouteConfig;
  EFI_HII_ROUTING_BLOCK_TO_CONFIG BlockToConfig;
  EFI_HII_ROUTING_CONFIG_TO_BLOCK ConfigToBlock;
};

extern EFI_GUID gEfiHiiConfigRoutingProtocolGuid;


#endif