1 /*++
2 
3 Copyright (c) 2004 - 2010, 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   VfrError.h
15 
16 Abstract:
17 
18 --*/
19 
20 #ifndef _VFRERROR_H_
21 #define _VFRERROR_H_
22 
23 #include "Tiano.h"
24 #include "EfiTypes.h"
25 
26 typedef enum {
27   VFR_RETURN_SUCCESS = 0,
28   VFR_RETURN_ERROR_SKIPED,
29   VFR_RETURN_FATAL_ERROR,
30   VFR_RETURN_MISMATCHED,
31   VFR_RETURN_INVALID_PARAMETER,
32   VFR_RETURN_OUT_FOR_RESOURCES,
33   VFR_RETURN_UNSUPPORTED,
34   VFR_RETURN_REDEFINED,
35   VFR_RETURN_FORMID_REDEFINED,
36   VFR_RETURN_QUESTIONID_REDEFINED,
37   VFR_RETURN_VARSTOREID_REDEFINED,
38   VFR_RETURN_UNDEFINED,
39   VFR_RETURN_VAR_NOTDEFINED_BY_QUESTION,
40   VFR_RETURN_GET_EFIVARSTORE_ERROR,
41   VFR_RETURN_EFIVARSTORE_USE_ERROR,
42   VFR_RETURN_EFIVARSTORE_SIZE_ERROR,
43   VFR_RETURN_GET_NVVARSTORE_ERROR,
44   VFR_RETURN_QVAR_REUSE,
45   VFR_RETURN_FLAGS_UNSUPPORTED,
46   VFR_RETURN_ERROR_ARRARY_NUM,
47   VFR_RETURN_DATA_STRING_ERROR,
48   VFR_RETURN_DEFAULT_VALUE_REDEFINED,
49   VFR_RETURN_CONSTANT_ONLY,
50   VFR_RETURN_CODEUNDEFINED
51 } EFI_VFR_RETURN_CODE;
52 
53 typedef struct _SVFR_ERROR_HANDLE {
54   EFI_VFR_RETURN_CODE    mErrorCode;
55   INT8                   *mErrorMsg;
56 } SVFR_ERROR_HANDLE;
57 
58 struct SVfrFileScopeRecord {
59   INT8                  *mFileName;
60   UINT32                mWholeScopeLine;
61   UINT32                mScopeLineStart;
62   SVfrFileScopeRecord *mNext;
63 
64   SVfrFileScopeRecord (IN INT8 *, IN UINT32);
65   ~SVfrFileScopeRecord();
66 };
67 
68 class CVfrErrorHandle {
69 private:
70   INT8                *mInputFileName;
71   SVFR_ERROR_HANDLE   *mVfrErrorHandleTable;
72   SVfrFileScopeRecord *mScopeRecordListHead;
73   SVfrFileScopeRecord *mScopeRecordListTail;
74 
75 public:
76   CVfrErrorHandle (VOID);
77   ~CVfrErrorHandle (VOID);
78 
79   VOID  SetInputFile (IN INT8 *);
80   VOID  ParseFileScopeRecord (IN INT8 *, IN UINT32);
81   VOID  GetFileNameLineNum (IN UINT32, OUT INT8 **, OUT UINT32 *);
82   UINT8 HandleError (IN EFI_VFR_RETURN_CODE, IN UINT32 LineNum = 0, IN INT8 *TokName = "\0");
83   VOID  PrintMsg (IN UINT32 LineNum = 0, IN INT8 *TokName = "\0", IN INT8 *MsgType = "Error", IN INT8 *ErrorMsg = "\0");
84 };
85 
86 #define CHECK_ERROR_RETURN(f, v) do { EFI_VFR_RETURN_CODE r; if ((r = (f)) != (v)) { return r; } } while (0)
87 
88 extern CVfrErrorHandle gCVfrErrorHandle;
89 
90 #endif
91