]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Add doxygen style comments for section extraction module.
authorqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 20 May 2008 07:26:10 +0000 (07:26 +0000)
committerqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 20 May 2008 07:26:10 +0000 (07:26 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5226 6f19259b-4bc3-4df7-8a09-765794883524

IntelFrameworkModulePkg/Universal/SectionExtractionDxe/SectionExtraction.c
IntelFrameworkModulePkg/Universal/SectionExtractionDxe/SectionExtraction.h
IntelFrameworkModulePkg/Universal/SectionExtractionDxe/SectionExtractionDxe.inf

index a69ec6f4407c910473bfcf81f1c68241a263fbe9..51fd75933113008f2623edec0f294291e64cb362 100644 (file)
@@ -1,4 +1,4 @@
-/**@file\r
+/** @file\r
   Section Extraction Protocol implementation.\r
   \r
   Stream database is implemented as a linked list of section streams,\r
   3) A support protocol is not found, and the data is not available to be read\r
      without it.  This results in EFI_PROTOCOL_ERROR.\r
 \r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+Copyright (c) 2006 - 2008, Intel Corporation. <BR>\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution.  The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
 \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
 **/\r
 \r
 #include "SectionExtraction.h"\r
 \r
-//\r
-// Local defines and typedefs\r
-//\r
-#define CORE_SECTION_CHILD_SIGNATURE  EFI_SIGNATURE_32('S','X','C','S')\r
-#define CHILD_SECTION_NODE_FROM_LINK(Node) \\r
-  CR (Node, CORE_SECTION_CHILD_NODE, Link, CORE_SECTION_CHILD_SIGNATURE)\r
-\r
-typedef struct {\r
-  UINT32                      Signature;\r
-  LIST_ENTRY                  Link;\r
-  UINT32                      Type;\r
-  UINT32                      Size;\r
-  //\r
-  // StreamBase + OffsetInStream == pointer to section header in stream.  The\r
-  // stream base is always known when walking the sections within.\r
-  //\r
-  UINT32                      OffsetInStream;\r
-  //\r
-  // Then EncapsulatedStreamHandle below is always 0 if the section is NOT an\r
-  // encapsulating section.  Otherwise, it contains the stream handle\r
-  // of the encapsulated stream.  This handle is ALWAYS produced any time an\r
-  // encapsulating child is encountered, irrespective of whether the\r
-  // encapsulated stream is processed further.\r
-  //\r
-  UINTN                       EncapsulatedStreamHandle;\r
-  EFI_GUID                    *EncapsulationGuid;\r
-} CORE_SECTION_CHILD_NODE;\r
-\r
-#define CORE_SECTION_STREAM_SIGNATURE EFI_SIGNATURE_32('S','X','S','S')\r
-#define STREAM_NODE_FROM_LINK(Node) \\r
-  CR (Node, CORE_SECTION_STREAM_NODE, Link, CORE_SECTION_STREAM_SIGNATURE)\r
-\r
-typedef struct {\r
-  UINT32                      Signature;\r
-  LIST_ENTRY                  Link;\r
-  UINTN                       StreamHandle;\r
-  UINT8                       *StreamBuffer;\r
-  UINTN                       StreamLength;\r
-  LIST_ENTRY                  Children;\r
-  //\r
-  // Authentication status is from GUIDed encapsulations.\r
-  //\r
-  UINT32                      AuthenticationStatus;\r
-} CORE_SECTION_STREAM_NODE;\r
-\r
-#define NULL_STREAM_HANDLE    0\r
-\r
-typedef struct {\r
-  CORE_SECTION_CHILD_NODE     *ChildNode;\r
-  CORE_SECTION_STREAM_NODE    *ParentStream;\r
-  VOID                        *Registration;\r
-  EFI_EVENT                   Event;\r
-} RPN_EVENT_CONTEXT;\r
-  \r
-  \r
-EFI_EVENT\r
-CoreCreateProtocolNotifyEvent (\r
-  IN EFI_GUID             *ProtocolGuid,\r
-  IN EFI_TPL              NotifyTpl,\r
-  IN EFI_EVENT_NOTIFY     NotifyFunction,\r
-  IN VOID                 *NotifyContext,\r
-  OUT VOID                **Registration,\r
-  IN  BOOLEAN             SignalFlag\r
-  );\r
-\r
-//\r
-// Local prototypes\r
-//\r
-\r
-STATIC\r
-BOOLEAN\r
-ChildIsType (\r
-  IN CORE_SECTION_STREAM_NODE                 *Stream,\r
-  IN CORE_SECTION_CHILD_NODE                  *Child,\r
-  IN EFI_SECTION_TYPE                         SearchType,\r
-  IN EFI_GUID                                 *SectionDefinitionGuid\r
-  );\r
-\r
-STATIC\r
-VOID\r
-EFIAPI\r
-NotifyGuidedExtraction (\r
-  IN  EFI_EVENT                             Event,\r
-  IN  VOID                                  *RpnContext\r
-  );\r
-\r
-STATIC\r
-VOID\r
-CreateGuidedExtractionRpnEvent (\r
-  IN CORE_SECTION_STREAM_NODE                 *ParentStream,\r
-  IN CORE_SECTION_CHILD_NODE                  *ChildNode\r
-  );\r
-\r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-OpenSectionStream (\r
-  IN     EFI_SECTION_EXTRACTION_PROTOCOL      *This,\r
-  IN     UINTN                                SectionStreamLength,\r
-  IN     VOID                                 *SectionStream,\r
-     OUT UINTN                                *SectionStreamHandle\r
-  );\r
-  \r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-GetSection (\r
-  IN EFI_SECTION_EXTRACTION_PROTOCOL          *This,\r
-  IN UINTN                                    SectionStreamHandle,\r
-  IN EFI_SECTION_TYPE                         *SectionType,\r
-  IN EFI_GUID                                 *SectionDefinitionGuid,\r
-  IN UINTN                                    SectionInstance,\r
-  IN VOID                                     **Buffer,\r
-  IN OUT UINTN                                *BufferSize,\r
-  OUT UINT32                                  *AuthenticationStatus\r
-  );\r
-  \r
-STATIC\r
-EFI_STATUS\r
-EFIAPI\r
-CloseSectionStream (\r
-  IN  EFI_SECTION_EXTRACTION_PROTOCOL         *This,\r
-  IN  UINTN                                   StreamHandleToClose\r
-  );\r
-  \r
-STATIC\r
-EFI_STATUS\r
-FindStreamNode (\r
-  IN  UINTN                                   SearchHandle,\r
-  OUT CORE_SECTION_STREAM_NODE                **FoundStream\r
-  );\r
-  \r
-STATIC\r
-EFI_STATUS\r
-FindChildNode (\r
-  IN     CORE_SECTION_STREAM_NODE             *SourceStream,\r
-  IN     EFI_SECTION_TYPE                     SearchType,\r
-  IN     UINTN                                *SectionInstance,\r
-  IN     EFI_GUID                             *SectionDefinitionGuid,\r
-  OUT    CORE_SECTION_CHILD_NODE              **FoundChild,\r
-  OUT    CORE_SECTION_STREAM_NODE             **FoundStream,\r
-  OUT    UINT32                               *AuthenticationStatus\r
-  );\r
-  \r
-STATIC\r
-EFI_STATUS\r
-CreateChildNode (\r
-  IN     CORE_SECTION_STREAM_NODE             *Stream,\r
-  IN     UINT32                               ChildOffset,\r
-  OUT    CORE_SECTION_CHILD_NODE              **ChildNode\r
-  );\r
-  \r
-STATIC\r
-VOID\r
-FreeChildNode (\r
-  IN  CORE_SECTION_CHILD_NODE                 *ChildNode\r
-  );\r
-  \r
-STATIC\r
-EFI_STATUS\r
-OpenSectionStreamEx (\r
-  IN     UINTN                                SectionStreamLength,\r
-  IN     VOID                                 *SectionStream,\r
-  IN     BOOLEAN                              AllocateBuffer,\r
-  IN     UINT32                               AuthenticationStatus,   \r
-     OUT UINTN                                *SectionStreamHandle\r
-  );\r
-  \r
-STATIC\r
-BOOLEAN\r
-IsValidSectionStream (\r
-  IN  VOID                                    *SectionStream,\r
-  IN  UINTN                                   SectionStreamLength\r
-  );\r
-\r
 //\r
 // Module globals\r
 //\r
@@ -233,8 +57,8 @@ EFI_SECTION_EXTRACTION_PROTOCOL mSectionExtraction = {
   Entry point of the section extraction code. Initializes an instance of the \r
   section extraction interface and installs it on a new handle.\r
 \r
-  @param ImageHandle   EFI_HANDLE: A handle for the image that is initializing this driver\r
-  @param SystemTable   EFI_SYSTEM_TABLE: A pointer to the EFI system table        \r
+  @param ImageHandle             A handle for the image that is initializing this driver\r
+  @param SystemTable             A pointer to the EFI system table        \r
 \r
   @retval EFI_SUCCESS            Driver initialized successfully\r
   @retval EFI_OUT_OF_RESOURCES   Could not allocate needed resources\r
@@ -273,13 +97,12 @@ SectionExtractionEntryPoint (
   @param SectionStreamHandle  A pointer to a caller allocated UINTN that on output\r
                               contains the new section stream handle.\r
 \r
-  @retval EFI_SUCCESS\r
-  @retval EFI_OUT_OF_RESOURCES  memory allocation failed.\r
-  @retval EFI_INVALID_PARAMETER section stream does not end concident with end of\r
+  @retval EFI_SUCCESS           Section wase opened successfully.\r
+  @retval EFI_OUT_OF_RESOURCES  Memory allocation failed.\r
+  @retval EFI_INVALID_PARAMETER Section stream does not end concident with end of\r
                                 last section.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 EFIAPI\r
 OpenSectionStream (\r
@@ -308,47 +131,46 @@ OpenSectionStream (
 /**\r
   SEP member function.  Retrieves requested section from section stream.\r
 \r
-  @param This:                 Pointer to SEP instance.\r
-  @param SectionStreamHandle:  The section stream from which to extract the requested\r
+  @param This                  Pointer to SEP instance.\r
+  @param SectionStreamHandle   The section stream from which to extract the requested\r
                                section.\r
-  @param SectionType:         A pointer to the type of section to search for.\r
-  @param SectionDefinitionGuid: If the section type is EFI_SECTION_GUID_DEFINED, then\r
-                                SectionDefinitionGuid indicates which of these types\r
-                                of sections to search for.\r
-  @param SectionInstance:      Indicates which instance of the requested section to\r
+  @param SectionType           A pointer to the type of section to search for.\r
+  @param SectionDefinitionGuid If the section type is EFI_SECTION_GUID_DEFINED, then\r
+                               SectionDefinitionGuid indicates which of these types\r
+                               of sections to search for.\r
+  @param SectionInstance       Indicates which instance of the requested section to\r
                                return.\r
-  @param Buffer:               Double indirection to buffer.  If *Buffer is non-null on\r
+  @param Buffer                Double indirection to buffer.  If *Buffer is non-null on\r
                                input, then the buffer is caller allocated.  If\r
                                *Buffer is NULL, then the buffer is callee allocated.\r
                                In either case, the requried buffer size is returned\r
                                in *BufferSize.\r
-  @param BufferSize:           On input, indicates the size of *Buffer if *Buffer is\r
+  @param BufferSize            On input, indicates the size of *Buffer if *Buffer is\r
                                non-null on input.  On output, indicates the required\r
                                size (allocated size if callee allocated) of *Buffer.\r
-  @param AuthenticationStatus: Indicates the authentication status of the retrieved\r
+  @param AuthenticationStatus  Indicates the authentication status of the retrieved\r
                                section.\r
 \r
  \r
-  @retval EFI_SUCCESS:        Section was retrieved successfully\r
-  @retval EFI_PROTOCOL_ERROR: A GUID defined section was encountered in the section \r
-                        stream with its EFI_GUIDED_SECTION_PROCESSING_REQUIRED\r
-                        bit set, but there was no corresponding GUIDed Section \r
-                        Extraction Protocol in the handle database.  *Buffer is \r
-                        unmodified.\r
-  @retval EFI_NOT_FOUND:      An error was encountered when parsing the SectionStream.\r
-                        This indicates the SectionStream  is not correctly \r
-                        formatted.\r
-  @retval EFI_NOT_FOUND:      The requested section does not exist.\r
-  @retval EFI_OUT_OF_RESOURCES: The system has insufficient resources to process the \r
-                        request.\r
-  @retval EFI_INVALID_PARAMETER: The SectionStreamHandle does not exist.\r
-  @retval EFI_WARN_TOO_SMALL: The size of the caller allocated input buffer is \r
-                        insufficient to contain the requested section.  The \r
-                        input buffer is filled and contents are section contents\r
-                        are truncated.\r
-\r
-**/  \r
-STATIC\r
+  @retval EFI_SUCCESS           Section was retrieved successfully\r
+  @retval EFI_PROTOCOL_ERROR    A GUID defined section was encountered in the section \r
+                                stream with its EFI_GUIDED_SECTION_PROCESSING_REQUIRED\r
+                                bit set, but there was no corresponding GUIDed Section \r
+                                Extraction Protocol in the handle database.  *Buffer is \r
+                                unmodified.\r
+  @retval EFI_NOT_FOUND         An error was encountered when parsing the SectionStream.\r
+                                This indicates the SectionStream  is not correctly \r
+                                formatted.\r
+  @retval EFI_NOT_FOUND         The requested section does not exist.\r
+  @retval EFI_OUT_OF_RESOURCES  The system has insufficient resources to process the \r
+                                request.\r
+  @retval EFI_INVALID_PARAMETER The SectionStreamHandle does not exist.\r
+  @retval EFI_WARN_TOO_SMALL    The size of the caller allocated input buffer is \r
+                                insufficient to contain the requested section.  The \r
+                                input buffer is filled and contents are section contents\r
+                                are truncated.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 GetSection (\r
@@ -361,7 +183,6 @@ GetSection (
   IN OUT UINTN                                          *BufferSize,\r
   OUT UINT32                                            *AuthenticationStatus\r
   )\r
-\r
 {\r
   CORE_SECTION_STREAM_NODE                              *StreamNode;\r
   EFI_TPL                                               OldTpl;\r
@@ -448,23 +269,21 @@ GetSection_Done:
 /**\r
   SEP member function.  Deletes an existing section stream\r
 \r
-  @param This                - Indicates the calling context.\r
-  @param StreamHandleToClose - Indicates the stream to close\r
+  @param This                   Indicates the calling context.\r
+  @param StreamHandleToClose    Indicates the stream to close\r
 \r
-  @retval EFI_SUCCESS\r
-  @retval EFI_OUT_OF_RESOURCES - memory allocation failed.\r
-  @retval EFI_INVALID_PARAMETER - section stream does not end concident with end of\r
-                          last section.\r
+  @retval EFI_SUCCESS           Section stream was closed successfully.\r
+  @retval EFI_OUT_OF_RESOURCES  Memory allocation failed.\r
+  @retval EFI_INVALID_PARAMETER Section stream does not end concident with end of\r
+                                last section.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 EFIAPI\r
 CloseSectionStream (\r
   IN  EFI_SECTION_EXTRACTION_PROTOCOL           *This,\r
   IN  UINTN                                     StreamHandleToClose\r
   )\r
-\r
 {\r
   CORE_SECTION_STREAM_NODE                      *StreamNode;\r
   EFI_TPL                                       OldTpl;\r
@@ -502,17 +321,16 @@ CloseSectionStream (
 /**\r
   Worker function.  Determine if the input stream:child matches the input type.\r
 \r
-  @param Stream              - Indicates the section stream associated with the child\r
-  @param Child               - Indicates the child to check\r
-  @param SearchType          - Indicates the type of section to check against for\r
-  @param SectionDefinitionGuid - Indicates the GUID to check against if the type is\r
-                        EFI_SECTION_GUID_DEFINED\r
+  @param Stream                 Indicates the section stream associated with the child\r
+  @param Child                  Indicates the child to check\r
+  @param SearchType             Indicates the type of section to check against for\r
+  @param SectionDefinitionGuid  Indicates the GUID to check against if the type is\r
+                                EFI_SECTION_GUID_DEFINED\r
 \r
-  @retval TRUE                - The child matches\r
-  @retval FALSE               - The child doesn't match\r
+  @retval TRUE                  The child matches\r
+  @retval FALSE                 The child doesn't match\r
 \r
 **/\r
-STATIC\r
 BOOLEAN\r
 ChildIsType (\r
   IN CORE_SECTION_STREAM_NODE *Stream,\r
@@ -541,26 +359,25 @@ ChildIsType (
   looking for requested section.\r
 \r
 \r
-  @param SourceStream        - Indicates the section stream in which to do the search.\r
-  @param SearchType          - Indicates the type of section to search for.\r
-  @param SectionInstance     - Indicates which instance of section to find.  This is\r
-                        an in/out parameter to deal with recursions.\r
-  @param SectionDefinitionGuid  - Guid of section definition\r
-  @param FoundChild          - Output indicating the child node that is found.\r
-  @param FoundStream         - Output indicating which section stream the child was\r
-                        found in.  If this stream was generated as a result of\r
-                        an encapsulation section, the streamhandle is visible\r
-                        within the SEP driver only.\r
-  @param AuthenticationStatus- Indicates the authentication status of the found section.\r
-\r
-  @retval EFI_SUCCESS         - Child node was found and returned.\r
-  @retval EFI_OUT_OF_RESOURCES- Memory allocation failed.\r
-  @retval EFI_NOT_FOUND       - Requested child node does not exist.\r
-  @retval EFI_PROTOCOL_ERROR  - a required GUIDED section extraction protocol does not\r
-                        exist\r
+  @param SourceStream          Indicates the section stream in which to do the search.\r
+  @param SearchType            Indicates the type of section to search for.\r
+  @param SectionInstance       Indicates which instance of section to find.  This is\r
+                               an in/out parameter to deal with recursions.\r
+  @param SectionDefinitionGuid Guid of section definition\r
+  @param FoundChild            Output indicating the child node that is found.\r
+  @param FoundStream           Output indicating which section stream the child was\r
+                               found in.  If this stream was generated as a result of\r
+                               an encapsulation section, the streamhandle is visible\r
+                               within the SEP driver only.\r
+  @param AuthenticationStatus  Indicates the authentication status of the found section.\r
+\r
+  @retval EFI_SUCCESS          Child node was found and returned.\r
+  @retval EFI_OUT_OF_RESOURCES Memory allocation failed.\r
+  @retval EFI_NOT_FOUND        Requested child node does not exist.\r
+  @retval EFI_PROTOCOL_ERROR   A required GUIDED section extraction protocol does not\r
+                               exist\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 FindChildNode (\r
   IN     CORE_SECTION_STREAM_NODE                   *SourceStream,\r
@@ -571,7 +388,6 @@ FindChildNode (
   OUT    CORE_SECTION_STREAM_NODE                   **FoundStream,\r
   OUT    UINT32                                     *AuthenticationStatus\r
   )\r
-\r
 {\r
   CORE_SECTION_CHILD_NODE                       *CurrentChildNode;\r
   CORE_SECTION_CHILD_NODE                       *RecursedChildNode;\r
@@ -691,22 +507,21 @@ FindChildNode (
 /**\r
   Worker function.  Constructor for new child nodes.\r
 \r
-  @param Stream              - Indicates the section stream in which to add the child.\r
-  @param ChildOffset         - Indicates the offset in Stream that is the beginning\r
-                        of the child section.\r
-  @param ChildNode           - Indicates the Callee allocated and initialized child.\r
+  @param Stream                Indicates the section stream in which to add the child.\r
+  @param ChildOffset           Indicates the offset in Stream that is the beginning\r
+                               of the child section.\r
+  @param ChildNode             Indicates the Callee allocated and initialized child.\r
 \r
-  @retval EFI_SUCCESS         - Child node was found and returned.\r
-  @retval EFI_OUT_OF_RESOURCES- Memory allocation failed.\r
-  @retval EFI_PROTOCOL_ERROR  - Encapsulation sections produce new stream handles when\r
-                        the child node is created.  If the section type is GUID\r
-                        defined, and the extraction GUID does not exist, and\r
-                        producing the stream requires the GUID, then a protocol\r
-                        error is generated and no child is produced.\r
-  Values returned by OpenSectionStreamEx.\r
+  @retval EFI_SUCCESS          Child node was found and returned.\r
+  @retval EFI_OUT_OF_RESOURCES Memory allocation failed.\r
+  @retval EFI_PROTOCOL_ERROR   Encapsulation sections produce new stream handles when\r
+                               the child node is created.  If the section type is GUID\r
+                               defined, and the extraction GUID does not exist, and\r
+                               producing the stream requires the GUID, then a protocol\r
+                               error is generated and no child is produced.\r
+                               Values returned by OpenSectionStreamEx.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 CreateChildNode (\r
   IN     CORE_SECTION_STREAM_NODE              *Stream,\r
@@ -969,11 +784,10 @@ CreateChildNode (
   Worker function.  Constructor for RPN event if needed to keep AuthenticationStatus\r
   cache correct when a missing GUIDED_SECTION_EXTRACTION_PROTOCOL appears...\r
 \r
-  @param ParentStream        Indicates the parent of the ecnapsulation section (child)\r
-  @param ChildNode           Indicates the child node that is the encapsulation section.\r
+  @param ParentStream        Indicates the parent of the ecnapsulation section (child)\r
+  @param ChildNode           Indicates the child node that is the encapsulation section.\r
 \r
 **/\r
-STATIC\r
 VOID\r
 CreateGuidedExtractionRpnEvent (\r
   IN CORE_SECTION_STREAM_NODE       *ParentStream,\r
@@ -1005,12 +819,11 @@ CreateGuidedExtractionRpnEvent (
   RPN callback function.  Removes a stale section stream and re-initializes it\r
   with an updated AuthenticationStatus.\r
 \r
-  @param Event               The event that fired\r
-  @param RpnContext          A pointer to the context that allows us to identify\r
-                        the relevent encapsulation...\r
+  @param Event               The event that fired\r
+  @param RpnContext          A pointer to the context that allows us to identify\r
+                             the relevent encapsulation.\r
 \r
-**/  \r
-STATIC\r
+**/\r
 VOID\r
 EFIAPI\r
 NotifyGuidedExtraction (\r
@@ -1077,15 +890,13 @@ NotifyGuidedExtraction (
 /**\r
   Worker function.  Destructor for child nodes.\r
 \r
-  @param ChildNode           Indicates the node to destroy\r
+  @param ChildNode           Indicates the node to destroy\r
 \r
 **/\r
-STATIC\r
 VOID\r
 FreeChildNode (\r
   IN  CORE_SECTION_CHILD_NODE                   *ChildNode\r
   )\r
-\r
 {\r
   ASSERT (ChildNode->Signature == CORE_SECTION_CHILD_SIGNATURE);\r
   //\r
@@ -1109,20 +920,18 @@ FreeChildNode (
 /**\r
   Worker function.  Constructor for section streams.\r
 \r
-  @param SectionStreamLength - Size in bytes of the section stream.\r
-  @param SectionStream       - Buffer containing the new section stream.\r
-  @param AllocateBuffer      - Indicates whether the stream buffer is to be copied\r
-                          or the input buffer is to be used in place.\r
-  @param AuthenticationStatus- Indicates the default authentication status for the\r
-                          new stream.\r
-  @param SectionStreamHandle - A pointer to a caller allocated section stream handle.\r
+  @param SectionStreamLength   Size in bytes of the section stream.\r
+  @param SectionStream         Buffer containing the new section stream.\r
+  @param AllocateBuffer        Indicates whether the stream buffer is to be copied\r
+                               or the input buffer is to be used in place.\r
+  @param AuthenticationStatus  Indicates the default authentication status for the\r
+                               new stream.\r
+  @param SectionStreamHandle   A pointer to a caller allocated section stream handle.\r
 \r
-  \r
-  @retval EFI_SUCCESS         - Stream was added to stream database.\r
-  @retval EFI_OUT_OF_RESOURCES - memory allocation failed.\r
+  @retval EFI_SUCCESS           Stream was added to stream database.\r
+  @retval EFI_OUT_OF_RESOURCES  Memory allocation failed.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 OpenSectionStreamEx (\r
   IN     UINTN                                     SectionStreamLength,\r
@@ -1131,7 +940,6 @@ OpenSectionStreamEx (
   IN     UINT32                                    AuthenticationStatus,   \r
      OUT UINTN                                     *SectionStreamHandle\r
   )\r
-\r
 {\r
   CORE_SECTION_STREAM_NODE    *NewStream;\r
   EFI_TPL                     OldTpl;\r
@@ -1198,21 +1006,19 @@ OpenSectionStreamEx (
 /**\r
   Worker function.  Search stream database for requested stream handle.\r
 \r
-  @param SearchHandle        Indicates which stream to look for.\r
-  @param FoundStream         Output pointer to the found stream.\r
+  @param SearchHandle        Indicates which stream to look for.\r
+  @param FoundStream         Output pointer to the found stream.\r
 \r
-  @retval EFI_SUCCESS         - StreamHandle was found and *FoundStream contains\r
-                          the stream node.\r
-  @retval EFI_NOT_FOUND       - SearchHandle was not found in the stream database.\r
+  @retval EFI_SUCCESS        StreamHandle was found and *FoundStream contains\r
+                             the stream node.\r
+  @retval EFI_NOT_FOUND      SearchHandle was not found in the stream database.\r
 \r
 **/\r
-STATIC\r
 EFI_STATUS\r
 FindStreamNode (\r
   IN  UINTN                                     SearchHandle,\r
   OUT CORE_SECTION_STREAM_NODE                  **FoundStream\r
   )\r
-\r
 {  \r
   CORE_SECTION_STREAM_NODE                      *StreamNode;\r
   \r
@@ -1237,18 +1043,17 @@ FindStreamNode (
 \r
   Check if a stream is valid.\r
 \r
-  @param SectionStream         - The section stream to be checked\r
-  @param SectionStreamLength   - The length of section stream\r
+  @param SectionStream         The section stream to be checked\r
+  @param SectionStreamLength   The length of section stream\r
+\r
+  @return The validness of a stream.\r
 \r
-  @return if a stream is valid.\r
 **/\r
-STATIC\r
 BOOLEAN\r
 IsValidSectionStream (\r
   IN  VOID              *SectionStream,\r
   IN  UINTN             SectionStreamLength\r
   )\r
-\r
 {\r
   UINTN                       TotalLength;\r
   UINTN                       SectionLength;\r
@@ -1287,19 +1092,14 @@ IsValidSectionStream (
 /**\r
   Create a protocol notification event and return it.\r
 \r
-  @param ProtocolGuid    - Protocol to register notification event on.\r
-\r
-  @param NotifyTpl        - Maximum TPL to signal the NotifyFunction.\r
-\r
-  @param NotifyFuncition  - EFI notification routine.\r
-\r
-  @param NotifyContext   - Context passed into Event when it is created.\r
-\r
-  @param Registration    - Registration key returned from RegisterProtocolNotify().\r
-\r
-  @param SignalFlag      -  Boolean value to decide whether kick the event after register or not.\r
+  @param ProtocolGuid    Protocol to register notification event on.\r
+  @param NotifyTpl       Maximum TPL to signal the NotifyFunction.\r
+  @param NotifyFunction  EFI notification routine.\r
+  @param NotifyContext   Context passed into Event when it is created.\r
+  @param Registration    Registration key returned from RegisterProtocolNotify().\r
+  @param SignalFlag      Boolean value to decide whether kick the event after register or not.\r
 \r
-  @return  The EFI_EVENT that has been registered to be signaled when a ProtocolGuid\r
+  @return The EFI_EVENT that has been registered to be signaled when a ProtocolGuid\r
            is added to the system.\r
 \r
 **/\r
index 4ec132057fd3d93e9b5741ef8b5f211b427ab003..869744afeed81fb7a68f61b2b2cd40a202ec2811 100644 (file)
@@ -1,4 +1,4 @@
-/**@file\r
+/** @file\r
   Section Extraction Protocol implementation.\r
   \r
   Stream database is implemented as a linked list of section streams,\r
      \r
   3) A support protocol is not found, and the data is not available to be read\r
      without it.  This results in EFI_PROTOCOL_ERROR.\r
-     \r
-Copyright (c) 2006, Intel Corporation                                                         \r
-All rights reserved. This program and the accompanying materials                          \r
-are licensed and made available under the terms and conditions of the BSD License         \r
-which accompanies this distribution.  The full text of the license may be found at        \r
-http://opensource.org/licenses/bsd-license.php                                            \r
-                                                                                          \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+\r
+Copyright (c) 2006 - 2008, Intel Corporation. <BR>\r
+All rights reserved. This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution.  The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
 **/\r
 \r
@@ -54,4 +54,366 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <Protocol/Decompress.h>\r
 #include <Protocol/GuidedSectionExtraction.h>\r
 \r
+//\r
+// Local defines and typedefs\r
+//\r
+#define CORE_SECTION_CHILD_SIGNATURE  EFI_SIGNATURE_32('S','X','C','S')\r
+#define CHILD_SECTION_NODE_FROM_LINK(Node) \\r
+  CR (Node, CORE_SECTION_CHILD_NODE, Link, CORE_SECTION_CHILD_SIGNATURE)\r
+\r
+typedef struct {\r
+  UINT32                      Signature;\r
+  LIST_ENTRY                  Link;\r
+  UINT32                      Type;\r
+  UINT32                      Size;\r
+  //\r
+  // StreamBase + OffsetInStream == pointer to section header in stream.  The\r
+  // stream base is always known when walking the sections within.\r
+  //\r
+  UINT32                      OffsetInStream;\r
+  //\r
+  // Then EncapsulatedStreamHandle below is always 0 if the section is NOT an\r
+  // encapsulating section.  Otherwise, it contains the stream handle\r
+  // of the encapsulated stream.  This handle is ALWAYS produced any time an\r
+  // encapsulating child is encountered, irrespective of whether the\r
+  // encapsulated stream is processed further.\r
+  //\r
+  UINTN                       EncapsulatedStreamHandle;\r
+  EFI_GUID                    *EncapsulationGuid;\r
+} CORE_SECTION_CHILD_NODE;\r
+\r
+#define CORE_SECTION_STREAM_SIGNATURE EFI_SIGNATURE_32('S','X','S','S')\r
+#define STREAM_NODE_FROM_LINK(Node) \\r
+  CR (Node, CORE_SECTION_STREAM_NODE, Link, CORE_SECTION_STREAM_SIGNATURE)\r
+\r
+typedef struct {\r
+  UINT32                      Signature;\r
+  LIST_ENTRY                  Link;\r
+  UINTN                       StreamHandle;\r
+  UINT8                       *StreamBuffer;\r
+  UINTN                       StreamLength;\r
+  LIST_ENTRY                  Children;\r
+  //\r
+  // Authentication status is from GUIDed encapsulations.\r
+  //\r
+  UINT32                      AuthenticationStatus;\r
+} CORE_SECTION_STREAM_NODE;\r
+\r
+#define NULL_STREAM_HANDLE    0\r
+\r
+typedef struct {\r
+  CORE_SECTION_CHILD_NODE     *ChildNode;\r
+  CORE_SECTION_STREAM_NODE    *ParentStream;\r
+  VOID                        *Registration;\r
+  EFI_EVENT                   Event;\r
+} RPN_EVENT_CONTEXT;\r
+  \r
+  \r
+/**\r
+  Create a protocol notification event and return it.\r
+\r
+  @param ProtocolGuid    Protocol to register notification event on.\r
+  @param NotifyTpl       Maximum TPL to signal the NotifyFunction.\r
+  @param NotifyFunction  EFI notification routine.\r
+  @param NotifyContext   Context passed into Event when it is created.\r
+  @param Registration    Registration key returned from RegisterProtocolNotify().\r
+  @param SignalFlag      Boolean value to decide whether kick the event after register or not.\r
+\r
+  @return The EFI_EVENT that has been registered to be signaled when a ProtocolGuid\r
+           is added to the system.\r
+\r
+**/\r
+EFI_EVENT\r
+CoreCreateProtocolNotifyEvent (\r
+  IN EFI_GUID             *ProtocolGuid,\r
+  IN EFI_TPL              NotifyTpl,\r
+  IN EFI_EVENT_NOTIFY     NotifyFunction,\r
+  IN VOID                 *NotifyContext,\r
+  OUT VOID                **Registration,\r
+  IN  BOOLEAN             SignalFlag\r
+  );\r
+\r
+//\r
+// Local prototypes\r
+//\r
+\r
+/**\r
+  Worker function.  Determine if the input stream:child matches the input type.\r
+\r
+  @param Stream                 Indicates the section stream associated with the child\r
+  @param Child                  Indicates the child to check\r
+  @param SearchType             Indicates the type of section to check against for\r
+  @param SectionDefinitionGuid  Indicates the GUID to check against if the type is\r
+                                EFI_SECTION_GUID_DEFINED\r
+\r
+  @retval TRUE                  The child matches\r
+  @retval FALSE                 The child doesn't match\r
+\r
+**/\r
+BOOLEAN\r
+ChildIsType (\r
+  IN CORE_SECTION_STREAM_NODE *Stream,\r
+  IN CORE_SECTION_CHILD_NODE  *Child,\r
+  IN EFI_SECTION_TYPE         SearchType,\r
+  IN EFI_GUID                 *SectionDefinitionGuid\r
+  );\r
+\r
+/**\r
+  RPN callback function.  Removes a stale section stream and re-initializes it\r
+  with an updated AuthenticationStatus.\r
+\r
+  @param Event               The event that fired\r
+  @param RpnContext          A pointer to the context that allows us to identify\r
+                             the relevent encapsulation.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+NotifyGuidedExtraction (\r
+  IN   EFI_EVENT   Event,\r
+  IN   VOID        *RpnContext\r
+  );\r
+\r
+/**\r
+  Worker function.  Constructor for RPN event if needed to keep AuthenticationStatus\r
+  cache correct when a missing GUIDED_SECTION_EXTRACTION_PROTOCOL appears...\r
+\r
+  @param ParentStream        Indicates the parent of the ecnapsulation section (child)\r
+  @param ChildNode           Indicates the child node that is the encapsulation section.\r
+\r
+**/\r
+VOID\r
+CreateGuidedExtractionRpnEvent (\r
+  IN CORE_SECTION_STREAM_NODE       *ParentStream,\r
+  IN CORE_SECTION_CHILD_NODE        *ChildNode\r
+  );\r
+\r
+/**\r
+  SEP member function.  This function creates and returns a new section stream\r
+  handle to represent the new section stream.\r
+\r
+  @param This                 Indicates the calling context.\r
+  @param SectionStreamLength  Size in bytes of the section stream.\r
+  @param SectionStream        Buffer containing the new section stream.\r
+  @param SectionStreamHandle  A pointer to a caller allocated UINTN that on output\r
+                              contains the new section stream handle.\r
+\r
+  @retval EFI_SUCCESS           Section wase opened successfully.\r
+  @retval EFI_OUT_OF_RESOURCES  Memory allocation failed.\r
+  @retval EFI_INVALID_PARAMETER Section stream does not end concident with end of\r
+                                last section.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+OpenSectionStream (\r
+  IN     EFI_SECTION_EXTRACTION_PROTOCOL           *This,\r
+  IN     UINTN                                     SectionStreamLength,\r
+  IN     VOID                                      *SectionStream,\r
+     OUT UINTN                                     *SectionStreamHandle\r
+  );\r
+  \r
+/**\r
+  SEP member function.  Retrieves requested section from section stream.\r
+\r
+  @param This                  Pointer to SEP instance.\r
+  @param SectionStreamHandle   The section stream from which to extract the requested\r
+                               section.\r
+  @param SectionType           A pointer to the type of section to search for.\r
+  @param SectionDefinitionGuid If the section type is EFI_SECTION_GUID_DEFINED, then\r
+                               SectionDefinitionGuid indicates which of these types\r
+                               of sections to search for.\r
+  @param SectionInstance       Indicates which instance of the requested section to\r
+                               return.\r
+  @param Buffer                Double indirection to buffer.  If *Buffer is non-null on\r
+                               input, then the buffer is caller allocated.  If\r
+                               *Buffer is NULL, then the buffer is callee allocated.\r
+                               In either case, the requried buffer size is returned\r
+                               in *BufferSize.\r
+  @param BufferSize            On input, indicates the size of *Buffer if *Buffer is\r
+                               non-null on input.  On output, indicates the required\r
+                               size (allocated size if callee allocated) of *Buffer.\r
+  @param AuthenticationStatus  Indicates the authentication status of the retrieved\r
+                               section.\r
+\r
\r
+  @retval EFI_SUCCESS           Section was retrieved successfully\r
+  @retval EFI_PROTOCOL_ERROR    A GUID defined section was encountered in the section \r
+                                stream with its EFI_GUIDED_SECTION_PROCESSING_REQUIRED\r
+                                bit set, but there was no corresponding GUIDed Section \r
+                                Extraction Protocol in the handle database.  *Buffer is \r
+                                unmodified.\r
+  @retval EFI_NOT_FOUND         An error was encountered when parsing the SectionStream.\r
+                                This indicates the SectionStream  is not correctly \r
+                                formatted.\r
+  @retval EFI_NOT_FOUND         The requested section does not exist.\r
+  @retval EFI_OUT_OF_RESOURCES  The system has insufficient resources to process the \r
+                                request.\r
+  @retval EFI_INVALID_PARAMETER The SectionStreamHandle does not exist.\r
+  @retval EFI_WARN_TOO_SMALL    The size of the caller allocated input buffer is \r
+                                insufficient to contain the requested section.  The \r
+                                input buffer is filled and contents are section contents\r
+                                are truncated.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+GetSection (\r
+  IN EFI_SECTION_EXTRACTION_PROTOCOL                    *This,\r
+  IN UINTN                                              SectionStreamHandle,\r
+  IN EFI_SECTION_TYPE                                   *SectionType,\r
+  IN EFI_GUID                                           *SectionDefinitionGuid,\r
+  IN UINTN                                              SectionInstance,\r
+  IN VOID                                               **Buffer,\r
+  IN OUT UINTN                                          *BufferSize,\r
+  OUT UINT32                                            *AuthenticationStatus\r
+  );\r
+  \r
+/**\r
+  SEP member function.  Deletes an existing section stream\r
+\r
+  @param This                   Indicates the calling context.\r
+  @param StreamHandleToClose    Indicates the stream to close\r
+\r
+  @retval EFI_SUCCESS           Section stream was closed successfully.\r
+  @retval EFI_OUT_OF_RESOURCES  Memory allocation failed.\r
+  @retval EFI_INVALID_PARAMETER Section stream does not end concident with end of\r
+                                last section.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CloseSectionStream (\r
+  IN  EFI_SECTION_EXTRACTION_PROTOCOL           *This,\r
+  IN  UINTN                                     StreamHandleToClose\r
+  );\r
+  \r
+/**\r
+  Worker function.  Search stream database for requested stream handle.\r
+\r
+  @param SearchHandle        Indicates which stream to look for.\r
+  @param FoundStream         Output pointer to the found stream.\r
+\r
+  @retval EFI_SUCCESS        StreamHandle was found and *FoundStream contains\r
+                             the stream node.\r
+  @retval EFI_NOT_FOUND      SearchHandle was not found in the stream database.\r
+\r
+**/\r
+EFI_STATUS\r
+FindStreamNode (\r
+  IN  UINTN                                     SearchHandle,\r
+  OUT CORE_SECTION_STREAM_NODE                  **FoundStream\r
+  );\r
+  \r
+/**\r
+  Worker function  Recursively searches / builds section stream database\r
+  looking for requested section.\r
+\r
+\r
+  @param SourceStream          Indicates the section stream in which to do the search.\r
+  @param SearchType            Indicates the type of section to search for.\r
+  @param SectionInstance       Indicates which instance of section to find.  This is\r
+                               an in/out parameter to deal with recursions.\r
+  @param SectionDefinitionGuid Guid of section definition\r
+  @param FoundChild            Output indicating the child node that is found.\r
+  @param FoundStream           Output indicating which section stream the child was\r
+                               found in.  If this stream was generated as a result of\r
+                               an encapsulation section, the streamhandle is visible\r
+                               within the SEP driver only.\r
+  @param AuthenticationStatus  Indicates the authentication status of the found section.\r
+\r
+  @retval EFI_SUCCESS          Child node was found and returned.\r
+  @retval EFI_OUT_OF_RESOURCES Memory allocation failed.\r
+  @retval EFI_NOT_FOUND        Requested child node does not exist.\r
+  @retval EFI_PROTOCOL_ERROR   A required GUIDED section extraction protocol does not\r
+                               exist\r
+\r
+**/\r
+EFI_STATUS\r
+FindChildNode (\r
+  IN     CORE_SECTION_STREAM_NODE                   *SourceStream,\r
+  IN     EFI_SECTION_TYPE                           SearchType,\r
+  IN OUT UINTN                                      *SectionInstance,\r
+  IN     EFI_GUID                                   *SectionDefinitionGuid,\r
+  OUT    CORE_SECTION_CHILD_NODE                    **FoundChild,\r
+  OUT    CORE_SECTION_STREAM_NODE                   **FoundStream,\r
+  OUT    UINT32                                     *AuthenticationStatus\r
+  );\r
+  \r
+/**\r
+  Worker function.  Constructor for new child nodes.\r
+\r
+  @param Stream                Indicates the section stream in which to add the child.\r
+  @param ChildOffset           Indicates the offset in Stream that is the beginning\r
+                               of the child section.\r
+  @param ChildNode             Indicates the Callee allocated and initialized child.\r
+\r
+  @retval EFI_SUCCESS          Child node was found and returned.\r
+  @retval EFI_OUT_OF_RESOURCES Memory allocation failed.\r
+  @retval EFI_PROTOCOL_ERROR   Encapsulation sections produce new stream handles when\r
+                               the child node is created.  If the section type is GUID\r
+                               defined, and the extraction GUID does not exist, and\r
+                               producing the stream requires the GUID, then a protocol\r
+                               error is generated and no child is produced.\r
+                               Values returned by OpenSectionStreamEx.\r
+\r
+**/\r
+EFI_STATUS\r
+CreateChildNode (\r
+  IN     CORE_SECTION_STREAM_NODE              *Stream,\r
+  IN     UINT32                                ChildOffset,\r
+     OUT CORE_SECTION_CHILD_NODE               **ChildNode\r
+  );\r
+  \r
+/**\r
+  Worker function.  Destructor for child nodes.\r
+\r
+  @param ChildNode           Indicates the node to destroy\r
+\r
+**/\r
+VOID\r
+FreeChildNode (\r
+  IN  CORE_SECTION_CHILD_NODE                   *ChildNode\r
+  );\r
+  \r
+/**\r
+  Worker function.  Constructor for section streams.\r
+\r
+  @param SectionStreamLength   Size in bytes of the section stream.\r
+  @param SectionStream         Buffer containing the new section stream.\r
+  @param AllocateBuffer        Indicates whether the stream buffer is to be copied\r
+                               or the input buffer is to be used in place.\r
+  @param AuthenticationStatus  Indicates the default authentication status for the\r
+                               new stream.\r
+  @param SectionStreamHandle   A pointer to a caller allocated section stream handle.\r
+\r
+  @retval EFI_SUCCESS           Stream was added to stream database.\r
+  @retval EFI_OUT_OF_RESOURCES  Memory allocation failed.\r
+\r
+**/\r
+EFI_STATUS\r
+OpenSectionStreamEx (\r
+  IN     UINTN                                     SectionStreamLength,\r
+  IN     VOID                                      *SectionStream,\r
+  IN     BOOLEAN                                   AllocateBuffer,\r
+  IN     UINT32                                    AuthenticationStatus,   \r
+     OUT UINTN                                     *SectionStreamHandle\r
+  );\r
+  \r
+/**\r
+\r
+  Check if a stream is valid.\r
+\r
+  @param SectionStream         The section stream to be checked\r
+  @param SectionStreamLength   The length of section stream\r
+\r
+  @return The validness of a stream.\r
+\r
+**/\r
+BOOLEAN\r
+IsValidSectionStream (\r
+  IN  VOID              *SectionStream,\r
+  IN  UINTN             SectionStreamLength\r
+  );\r
+\r
 #endif  // _SECTION_EXTRACTION_H_\r
index ce43aa96c8e526423ff44d6458214d00ec0e6aa2..e8a5a99fc90767d67f29aa30764350b7392f1c03 100644 (file)
@@ -1,19 +1,19 @@
 #/** @file\r
-# Section Extraction Dxe Driver.\r
-#\r
-# Status Code Architectural Protocol implementation as defined in Tiano\r
-#  Architecture Specification. This driver has limited functionality\r
-#  at runtime and will not log to Data Hub at runtime.\r
-# Copyright (c) 2006, Intel Corporation.\r
-#\r
+#  \r
+#  Section Extraction Dxe Driver.\r
+#    \r
+#  Section Extraction Protocol implementation as defined in Intel Framework\r
+#  Specification. \r
+#  \r
+#  Copyright (c) 2006 - 2008, Intel Corporation. <BR>\r
 #  All rights reserved. This program and the accompanying materials\r
 #  are licensed and made available under the terms and conditions of the BSD License\r
-#  which accompanies this distribution. The full text of the license may be found at\r
+#  which accompanies this distribution.  The full text of the license may be found at\r
 #  http://opensource.org/licenses/bsd-license.php\r
+#  \r
 #  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
 #  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-#\r
+#  \r
 #**/\r
 \r
 [Defines]\r