summaryrefslogtreecommitdiff
path: root/EdkCompatibilityPkg/Sample/Tools/Source/UefiVfrCompile/VfrError.h
blob: 5e8ac51ec9d3d7b95c2bd7e33bf844c0a9c34c3e (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
#ifndef _VFRERROR_H_
#define _VFRERROR_H_

#include "Tiano.h"
#include "EfiTypes.h"

typedef enum {
  VFR_RETURN_SUCCESS = 0,
  VFR_RETURN_ERROR_SKIPED,
  VFR_RETURN_FATAL_ERROR,
  VFR_RETURN_MISMATCHED,
  VFR_RETURN_INVALID_PARAMETER,
  VFR_RETURN_OUT_FOR_RESOURCES,
  VFR_RETURN_UNSUPPORTED,
  VFR_RETURN_REDEFINED,
  VFR_RETURN_FORMID_REDEFINED,
  VFR_RETURN_QUESTIONID_REDEFINED,
  VFR_RETURN_VARSTOREID_REDEFINED,
  VFR_RETURN_UNDEFINED,
  VFR_RETURN_VAR_NOTDEFINED_BY_QUESTION,
  VFR_RETURN_GET_EFIVARSTORE_ERROR,
  VFR_RETURN_EFIVARSTORE_USE_ERROR,
  VFR_RETURN_EFIVARSTORE_SIZE_ERROR,
  VFR_RETURN_GET_NVVARSTORE_ERROR,
  VFR_RETURN_QVAR_REUSE,
  VFR_RETURN_FLAGS_UNSUPPORTED,
  VFR_RETURN_ERROR_ARRARY_NUM,
  VFR_RETURN_DATA_STRING_ERROR,
  VFR_RETURN_CODEUNDEFINED
} EFI_VFR_RETURN_CODE;

typedef struct _SVFR_ERROR_HANDLE {
  EFI_VFR_RETURN_CODE    mErrorCode;
  INT8                   *mErrorMsg;
} SVFR_ERROR_HANDLE;

struct SVfrFileScopeRecord {
  INT8                  *mFileName;
  UINT32                mWholeScopeLine;
  UINT32                mScopeLineStart;
  SVfrFileScopeRecord *mNext;

  SVfrFileScopeRecord (IN INT8 *, IN UINT32);
  ~SVfrFileScopeRecord();
};

class CVfrErrorHandle {
private:
  SVFR_ERROR_HANDLE   *mVfrErrorHandleTable;
  SVfrFileScopeRecord *mScopeRecordListHead;
  SVfrFileScopeRecord *mScopeRecordListTail;

public:
  CVfrErrorHandle (VOID);
  ~CVfrErrorHandle (VOID);

  VOID  ParseFileScopeRecord (IN INT8 *, IN UINT32);
  VOID  GetFileNameLineNum (IN UINT32, OUT INT8 **, OUT UINT32 *);
  UINT8 HandleError (IN EFI_VFR_RETURN_CODE, IN UINT32 LineNum = 0, IN INT8 *TokName = "\0");
  VOID  PrintError (IN UINT32 LineNum = 0, IN INT8 *TokName = "\0", IN INT8 *ErrorMsg = "\0");
};

#define CHECK_ERROR_RETURN(f, v) do { EFI_VFR_RETURN_CODE r; if ((r = (f)) != (v)) { return r; } } while (0)

extern CVfrErrorHandle gCVfrErrorHandle;

#endif