1 /*++
2 
3 Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution.  The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8 
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11 
12 Module Name:
13 
14   HiiConfigAccess.h
15 
16 Abstract:
17 
18   EFI_HII_CONFIG_ACCESS_PROTOCOL as defined in UEFI 2.1 spec.
19 
20 --*/
21 
22 #ifndef _HII_CONFIG_ACCESS_H_
23 #define _HII_CONFIG_ACCESS_H_
24 
25 #include EFI_PROTOCOL_DEFINITION (FormBrowser2)
26 
27 #define EFI_HII_CONFIG_ACCESS_PROTOCOL_GUID \
28   { \
29     0x330d4706, 0xf2a0, 0x4e4f, {0xa3, 0x69, 0xb6, 0x6f, 0xa8, 0xd5, 0x43, 0x85} \
30   }
31 
32 //
33 // Forward reference for pure ANSI compatability
34 //
35 EFI_FORWARD_DECLARATION (EFI_HII_CONFIG_ACCESS_PROTOCOL);
36 
37 typedef UINTN EFI_BROWSER_ACTION;
38 
39 #define EFI_BROWSER_ACTION_CHANGING 0
40 #define EFI_BROWSER_ACTION_CHANGED  1
41 
42 
43 typedef
44 EFI_STATUS
45 (EFIAPI *EFI_HII_ACCESS_EXTRACT_CONFIG) (
46   IN  CONST EFI_HII_CONFIG_ACCESS_PROTOCOL   *This,
47   IN  CONST EFI_STRING                       Request,
48   OUT EFI_STRING                             *Progress,
49   OUT EFI_STRING                             *Results
50   )
51 /*++
52 
53   Routine Description:
54     This function allows a caller to extract the current configuration for one
55     or more named elements from the target driver.
56 
57   Arguments:
58     This       - Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
59     Request    - A null-terminated Unicode string in <ConfigRequest> format.
60     Progress   - On return, points to a character in the Request string.
61                  Points to the string's null terminator if request was successful.
62                  Points to the most recent '&' before the first failing name/value
63                  pair (or the beginning of the string if the failure is in the
64                  first name/value pair) if the request was not successful.
65     Results    - A null-terminated Unicode string in <ConfigAltResp> format which
66                  has all values filled in for the names in the Request string.
67                  String to be allocated by the called function.
68 
69   Returns:
70     EFI_SUCCESS           - The Results is filled with the requested values.
71     EFI_OUT_OF_RESOURCES  - Not enough memory to store the results.
72     EFI_INVALID_PARAMETER - Request is NULL, illegal syntax, or unknown name.
73     EFI_NOT_FOUND         - Routing data doesn't match any storage in this driver.
74 
75 --*/
76 ;
77 
78 typedef
79 EFI_STATUS
80 (EFIAPI *EFI_HII_ACCESS_ROUTE_CONFIG) (
81   IN  EFI_HII_CONFIG_ACCESS_PROTOCOL         *This,
82   IN  CONST EFI_STRING                       Configuration,
83   OUT EFI_STRING                             *Progress
84   )
85 /*++
86 
87   Routine Description:
88     This function processes the results of changes in configuration.
89 
90   Arguments:
91     This          - Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
92     Configuration - A null-terminated Unicode string in <ConfigResp> format.
93     Progress      - A pointer to a string filled in with the offset of the most
94                     recent '&' before the first failing name/value pair (or the
95                     beginning of the string if the failure is in the first
96                     name/value pair) or the terminating NULL if all was successful.
97 
98   Returns:
99     EFI_SUCCESS           - The Results is processed successfully.
100     EFI_INVALID_PARAMETER - Configuration is NULL.
101     EFI_NOT_FOUND         - Routing data doesn't match any storage in this driver.
102 
103 --*/
104 ;
105 
106 typedef
107 EFI_STATUS
108 (EFIAPI *EFI_HII_ACCESS_FORM_CALLBACK) (
109   IN  CONST EFI_HII_CONFIG_ACCESS_PROTOCOL   *This,
110   IN  EFI_BROWSER_ACTION                     Action,
111   IN  EFI_QUESTION_ID                        QuestionId,
112   IN  UINT8                                  Type,
113   IN  EFI_IFR_TYPE_VALUE                     *Value,
114   OUT EFI_BROWSER_ACTION_REQUEST             *ActionRequest
115   )
116 /*++
117 
118   Routine Description:
119     This function processes the results of changes in configuration.
120 
121   Arguments:
122     This          - Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
123     Action        - Specifies the type of action taken by the browser.
124     QuestionId    - A unique value which is sent to the original exporting driver
125                     so that it can identify the type of data to expect.
126     Type          - The type of value for the question.
127     Value         - A pointer to the data being sent to the original exporting driver.
128     ActionRequest - On return, points to the action requested by the callback function.
129 
130   Returns:
131     EFI_SUCCESS          - The callback successfully handled the action.
132     EFI_OUT_OF_RESOURCES - Not enough storage is available to hold the variable and its data.
133     EFI_DEVICE_ERROR     - The variable could not be saved.
134     EFI_UNSUPPORTED      - The specified Action is not supported by the callback.
135 
136 --*/
137 ;
138 
139 struct _EFI_HII_CONFIG_ACCESS_PROTOCOL {
140   EFI_HII_ACCESS_EXTRACT_CONFIG     ExtractConfig;
141   EFI_HII_ACCESS_ROUTE_CONFIG       RouteConfig;
142   EFI_HII_ACCESS_FORM_CALLBACK      Callback;
143 };
144 
145 extern EFI_GUID gEfiHiiConfigAccessProtocolGuid;
146 
147 #endif
148