summaryrefslogtreecommitdiffstats
path: root/MdePkg
diff options
context:
space:
mode:
authorEric Dong <eric.dong@intel.com>2015-05-06 10:39:26 +0000
committerydong10 <ydong10@Edk2>2015-05-06 10:39:26 +0000
commit7cc80bfd7c250e713d8909decb2f5bb3ba30f054 (patch)
tree6847f253e286ebd3b44e160500776cf7f80b6c5f /MdePkg
parent5d3776166198cad1d9274d6bc76d47c15188a24e (diff)
downloadedk2-7cc80bfd7c250e713d8909decb2f5bb3ba30f054.tar.gz
edk2-7cc80bfd7c250e713d8909decb2f5bb3ba30f054.tar.bz2
edk2-7cc80bfd7c250e713d8909decb2f5bb3ba30f054.zip
MdePkg: Add Regular Expression Protocol and match2 opcode definition.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Eric Dong <eric.dong@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com> Reviewed-by: Samer El-Haj-Mahmoud <samer.el-haj-mahmoud@hp.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17339 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdePkg')
-rw-r--r--MdePkg/Include/Protocol/RegularExpressionProtocol.h178
-rw-r--r--MdePkg/Include/Uefi/UefiInternalFormRepresentation.h6
-rw-r--r--MdePkg/MdePkg.dec11
3 files changed, 195 insertions, 0 deletions
diff --git a/MdePkg/Include/Protocol/RegularExpressionProtocol.h b/MdePkg/Include/Protocol/RegularExpressionProtocol.h
new file mode 100644
index 0000000000..e02dbbddd1
--- /dev/null
+++ b/MdePkg/Include/Protocol/RegularExpressionProtocol.h
@@ -0,0 +1,178 @@
+/** @file
+ This section defines the Regular Expression Protocol. This protocol isused to match
+ Unicode strings against Regular Expression patterns.
+
+Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
+This program and the accompanying materials are licensed and made available under
+the terms and conditions of the BSD License that 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 __REGULAR_EXPRESSION_PROTOCOL_H__
+#define __REGULAR_EXPRESSION_PROTOCOL_H__
+
+#define EFI_REGULAR_EXPRESSION_PROTOCOL_GUID \
+ { \
+ 0xB3F79D9A, 0x436C, 0xDC11, {0xB0, 0x52, 0xCD, 0x85, 0xDF, 0x52, 0x4C, 0xE6 } \
+ }
+
+#define EFI_REGEX_SYNTAX_TYPE_POSIX_EXTENDED_GUID \
+ { \
+ 0x5F05B20F, 0x4A56, 0xC231, {0xFA, 0x0B, 0xA7, 0xB1, 0xF1, 0x10, 0x04, 0x1D } \
+ }
+
+#define EFI_REGEX_SYNTAX_TYPE_PERL_GUID \
+ { \
+ 0x63E60A51, 0x497D, 0xD427, {0xC4, 0xA5, 0xB8, 0xAB, 0xDC, 0x3A, 0xAE, 0xB6 } \
+ }
+
+#define EFI_REGEX_SYNTAX_TYPE_ECMA_262_GUID \
+ { \
+ 0x9A473A4A, 0x4CEB, 0xB95A, {0x41, 0x5E, 0x5B, 0xA0, 0xBC, 0x63, 0x9B, 0x2E } \
+ }
+
+typedef struct _EFI_REGULAR_EXPRESSION_PROTOCOL EFI_REGULAR_EXPRESSION_PROTOCOL;
+
+
+typedef struct {
+ CONST CHAR16 *CapturePtr; // Pointer to the start of the captured sub-expression
+ // within matched String.
+
+ UINTN Length; // Length of captured sub-expression.
+} EFI_REGEX_CAPTURE;
+
+typedef EFI_GUID EFI_REGEX_SYNTAX_TYPE;
+
+//
+// Protocol member functions
+//
+/**
+ Returns information about the regular expression syntax types supported
+ by the implementation.
+
+ This A pointer to the EFI_REGULAR_EXPRESSION_PROTOCOL
+ instance.
+
+ RegExSyntaxTypeListSize On input, the size in bytes of RegExSyntaxTypeList.
+ On output with a return code of EFI_SUCCESS, the
+ size in bytes of the data returned in
+ RegExSyntaxTypeList. On output with a return code
+ of EFI_BUFFER_TOO_SMALL, the size of
+ RegExSyntaxTypeListrequired to obtain the list.
+
+ RegExSyntaxTypeList A caller-allocated memory buffer filled by the
+ driver with one EFI_REGEX_SYNTAX_TYPEelement
+ for each supported Regular expression syntax
+ type. The list must not change across multiple
+ calls to the same driver. The first syntax
+ type in the list is the default type for the
+ driver.
+
+ @retval EFI_SUCCESS The regular expression syntax types list
+ was returned successfully.
+ @retval EFI_UNSUPPORTED The service is not supported by this driver.
+ @retval EFI_DEVICE_ERROR The list of syntax types could not be
+ retrieved due to a hardware or firmware error.
+ @retval EFI_BUFFER_TOO_SMALL The buffer RegExSyntaxTypeList is too small
+ to hold the result.
+ @retval EFI_INVALID_PARAMETER RegExSyntaxTypeListSize is NULL
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_REGULAR_EXPRESSION_GET_INFO) (
+ IN EFI_REGULAR_EXPRESSION_PROTOCOL *This,
+ IN OUT UINTN *RegExSyntaxTypeListSize,
+ OUT EFI_REGEX_SYNTAX_TYPE *RegExSyntaxTypeList
+ );
+
+/**
+ Checks if the input string matches to the regular expression pattern.
+
+ This A pointer to the EFI_REGULAR_EXPRESSION_PROTOCOL instance.
+ Type EFI_REGULAR_EXPRESSION_PROTOCOL is defined in Section
+ XYZ.
+
+ String A pointer to a NULL terminated string to match against the
+ regular expression string specified by Pattern.
+
+ Pattern A pointer to a NULL terminated string that represents the
+ regular expression.
+
+ SyntaxType A pointer to the EFI_REGEX_SYNTAX_TYPE that identifies the
+ regular expression syntax type to use. May be NULL in which
+ case the function will use its default regular expression
+ syntax type.
+
+ Result On return, points to TRUE if String fully matches against
+ the regular expression Pattern using the regular expression
+ SyntaxType. Otherwise, points to FALSE.
+
+ Captures A Pointer to an array of EFI_REGEX_CAPTURE objects to receive
+ the captured groups in the event of a match. The full
+ sub-string match is put in Captures[0], and the results of N
+ capturing groups are put in Captures[1:N]. If Captures is
+ NULL, then this function doesn't allocate the memory for the
+ array and does not build up the elements. It only returns the
+ number of matching patterns in CapturesCount. If Captures is
+ not NULL, this function returns a pointer to an array and
+ builds up the elements in the array. CapturesCount is also
+ updated to the number of matching patterns found. It is the
+ caller's responsibility to free the memory pool in Captures
+ and in each CapturePtr in the array elements.
+
+ CapturesCount On output, CapturesCount is the number of matching patterns
+ found in String. Zero means no matching patterns were found
+ in the string.
+
+ @retval EFI_SUCCESS The regular expression string matching
+ completed successfully.
+ @retval EFI_UNSUPPORTED The regular expression syntax specified by
+ SyntaxTypeis not supported by this driver.
+ @retval EFI_DEVICE_ERROR The regular expression string matching
+ failed due to a hardware or firmware error.
+ @retval EFI_INVALID_PARAMETER String, Pattern, Result, or CapturesCountis
+ NULL.
+
+**/
+typedef
+EFI_STATUS
+(EFIAPI *EFI_REGULAR_EXPRESSION_MATCH) (
+ IN EFI_REGULAR_EXPRESSION_PROTOCOL *This,
+ IN CHAR16 *String,
+ IN CHAR16 *Pattern,
+ IN EFI_REGEX_SYNTAX_TYPE *SyntaxType, OPTIONAL
+ OUT BOOLEAN *Result,
+ OUT EFI_REGEX_CAPTURE **Captures, OPTIONAL
+ OUT UINTN *CapturesCount
+ );
+
+struct _EFI_REGULAR_EXPRESSION_PROTOCOL {
+ EFI_REGULAR_EXPRESSION_MATCH MatchString;
+ EFI_REGULAR_EXPRESSION_GET_INFO GetInfo;
+} ;
+
+extern EFI_GUID gEfiRegularExpressionProtocolGuid;
+
+//
+// For regular expression rules specified in the POSIX Extended Regular
+// Expression (ERE) Syntax:
+//
+extern EFI_GUID gEfiRegexSyntaxTypePosixExtendedGuid;
+
+//
+// For regular expression rules specifiedin the ECMA 262 Specification
+//
+extern EFI_GUID gEfiRegexSyntaxTypeEcma262Guid;
+
+//
+// For regular expression rules specified in the Perl standard:
+//
+extern EFI_GUID gEfiRegexSyntaxTypePerlGuid;
+
+#endif
diff --git a/MdePkg/Include/Uefi/UefiInternalFormRepresentation.h b/MdePkg/Include/Uefi/UefiInternalFormRepresentation.h
index 70b037488d..4f9549dfcc 100644
--- a/MdePkg/Include/Uefi/UefiInternalFormRepresentation.h
+++ b/MdePkg/Include/Uefi/UefiInternalFormRepresentation.h
@@ -780,6 +780,7 @@ typedef union {
#define EFI_IFR_MODAL_TAG_OP 0x61
#define EFI_IFR_REFRESH_ID_OP 0x62
#define EFI_IFR_WARNING_IF_OP 0x63
+#define EFI_IFR_MATCH2_OP 0x64
//
// Definitions of IFR Standard Headers
@@ -1399,6 +1400,11 @@ typedef struct _EFI_IFR_MATCH {
EFI_IFR_OP_HEADER Header;
} EFI_IFR_MATCH;
+typedef struct _EFI_IFR_MATCH2 {
+ EFI_IFR_OP_HEADER Header;
+ EFI_GUID SyntaxType;
+} EFI_IFR_MATCH2;
+
typedef struct _EFI_IFR_MULTIPLY {
EFI_IFR_OP_HEADER Header;
} EFI_IFR_MULTIPLY;
diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec
index bce005b7fa..a80b8e9bd9 100644
--- a/MdePkg/MdePkg.dec
+++ b/MdePkg/MdePkg.dec
@@ -563,6 +563,14 @@
## Include/Protocol/AdapterInformation.h
gEfiAdapterInfoUndiIpv6SupportGuid = { 0x4bd56be3, 0x4975, 0x4d8a, {0xa0, 0xad, 0xc4, 0x91, 0x20, 0x4b, 0x5d, 0x4d }}
+ ## Include/Protocol/RegularExpressionProtocol.h
+ gEfiRegexSyntaxTypePosixExtendedGuid = {0x5F05B20F, 0x4A56, 0xC231, {0xFA, 0x0B, 0xA7, 0xB1, 0xF1, 0x10, 0x04, 0x1D }}
+
+ ## Include/Protocol/RegularExpressionProtocol.h
+ gEfiRegexSyntaxTypeEcma262Guid = { 0x9A473A4A, 0x4CEB, 0xB95A, {0x41, 0x5E, 0x5B, 0xA0, 0xBC, 0x63, 0x9B, 0x2E }}
+
+ ## Include/Protocol/RegularExpressionProtocol.h
+ gEfiRegexSyntaxTypePerlGuid = {0x63E60A51, 0x497D, 0xD427, {0xC4, 0xA5, 0xB8, 0xAB, 0xDC, 0x3A, 0xAE, 0xB6 }}
#
# GUID defined in PI1.0
@@ -1457,6 +1465,9 @@
## Include/Protocol/BluetoothConfig.h
gEfiBluetoothConfigProtocolGuid = { 0x62960cf3, 0x40ff, 0x4263, { 0xa7, 0x7c, 0xdf, 0xde, 0xbd, 0x19, 0x1b, 0x4b }}
+ ## Include/Protocol/RegularExpressionProtocol.h
+ gEfiRegularExpressionProtocolGuid = { 0xB3F79D9A, 0x436C, 0xDC11, {0xB0, 0x52, 0xCD, 0x85, 0xDF, 0x52, 0x4C, 0xE6 }}
+
#
# [Error.gEfiMdePkgTokenSpaceGuid]
# 0x80000001 | Invalid value provided.