summaryrefslogtreecommitdiff
path: root/MdePkg/Include/Protocol/HiiConfigAccess.h
blob: 54cc489304d48b6ea9d3a0822eafc318d34b5b65 (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
/** @file

  The file provides services to forward results to PCOL-based
  handler if EFI HII results processing protocol invokes this
  protocol.
  
  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 __EFI_HII_CONFIG_ACCESS_H__
#define __EFI_HII_CONFIG_ACCESS_H__

#include <Protocol/FormBrowser2.h>

#define EFI_HII_CONFIG_ACCESS_PROTOCOL_GUID  \
  { 0x330d4706, 0xf2a0, 0x4e4f, { 0xa3, 0x69, 0xb6, 0x6f, 0xa8, 0xd5, 0x43, 0x85 } }

typedef struct _EFI_HII_CONFIG_ACCESS_PROTOCOL  EFI_HII_CONFIG_ACCESS_PROTOCOL;

typedef UINTN EFI_BROWSER_ACTION;

#define EFI_BROWSER_ACTION_CHANGING 0
#define EFI_BROWSER_ACTION_CHANGED  1

/**
   
  This function allows the caller to request the current
  configuration for one or more named elements. The resulting
  string is in <ConfigAltResp> format. Any and all alternative
  configuration strings shall 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.

  @param This   Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.

  @param Request  A null-terminated Unicode string in
                  <ConfigRequest> format. Note that this
                  includes the routing information as well as
                  the configurable name / value pairs. It is
                  invalid for this string to be 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  A null-terminated Unicode string in
                  <ConfigAltResp> 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. In this case, the
                                  Progress parameter would be
                                  set to NULL. 

  @retval EFI_NOT_FOUND   Routing data doesn't match any
                          known driver. Progress set to the
                          first character in the routing header.
                          Note: There is no requirement that the
                          driver validate the routing data. It
                          must skip the <ConfigHdr> in order to
                          process the names.

  @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. Progress points
                                  to the & before the name in
                                  question.

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


/**
   
  This function applies changes in a driver's configuration.
  Input is a Configuration, which has the routing data for this
  driver followed by name / value configuration pairs. The driver
  must apply those pairs to its configurable storage. If the
  driver's configuration is stored in a linear block of data
  and the driver????s name / value pairs are in <BlockConfig>
  format, it may use the ConfigToBlock helper function (above) to
  simplify the job.

  @param This   Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.

  @param Configuration  A null-terminated Unicode string in
                        <ConfigString> format. Progress a
                        pointer to a string filled in with the
                        offset of the most recent '&' before the
                        first failing name / value pair (or the
                        beginn ing 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_ACCESS_ROUTE_CONFIG)(
  IN CONST  EFI_HII_CONFIG_ACCESS_PROTOCOL  *This,
  IN CONST  EFI_STRING                      Configuration,
  OUT       EFI_STRING                      *Progress
);

/**
   
  This function is called to provide results data to the driver.
  This data consists of a unique key that is used to identify
  which data is either being passed back or being asked for.

  @param This   Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.

  @param KeyValue   A unique value which is sent to the original
                    exporting driver so that it can identify the
                    type of data to expect. The format of the
                    data tends to vary based on the opcode that
                    generated the callback.

  @param Data   A pointer to the data being sent to the original
                exporting driver. The format of the data should
                be the same as that of the question invoking the
                callback and will be known to the recipient.

  @retval EFI_SUCCESS   The firmware has successfully stored the
                        variable and its data as defined by the
                        Attributes.

  @retval EFI_INVALID_PARAMETER   An invalid combination of
                                  Attributes bits was supplied,
                                  or the DataSize exceeds the
                                  maximum allowed.

  @retval EFI_OUT_OF_RESOURCES  Not enough storage is available
                                to hold the variable and its
                                data.

  @retval EFI_DEVICE_ERROR  The variable could not be saved due
                            to a hardware failure.


**/
typedef
EFI_STATUS
(EFIAPI *EFI_HII_ACCESS_FORM_CALLBACK)(
  IN  CONST EFI_HII_CONFIG_ACCESS_PROTOCOL   *This,
  IN  EFI_BROWSER_ACTION                     Action,
  IN  EFI_QUESTION_ID                        QuestionId,
  IN  UINT8                                  Type,
  IN  EFI_IFR_TYPE_VALUE                     *Value,
  OUT EFI_BROWSER_ACTION_REQUEST             *ActionRequest
  )
  ;
/**
   
  This protocol provides a callable interface between the HII and
  drivers. Only drivers which provide IFR data to HII are required
  to publish this protocol.

  @param ExtractConfig  This function breaks apart the UNICODE
                        request strings routing them to the
                        appropriate drivers. This function is
                        analogous to the similarly named
                        function in the HII Routing Protocol.
  
  @param RouteConfig  This function breaks apart the UNICODE
                      results strings and returns configuration
                      information as specified by the request.
  
  @param Callback   This function is called from the
                    configuration browser to communicate certain
                    activities that were initiated by a user.


**/
struct _EFI_HII_CONFIG_ACCESS_PROTOCOL {
  EFI_HII_ACCESS_EXTRACT_CONFIG     ExtractConfig;
  EFI_HII_ACCESS_ROUTE_CONFIG       RouteConfig;
  EFI_HII_ACCESS_FORM_CALLBACK      Callback;
} ;

extern EFI_GUID gEfiHiiConfigAccessProtocolGuid;

#endif