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