-/** @file\r
- If a GUID-defined section is encountered when doing section\r
- extraction, the section extraction driver calls the appropriate\r
- instance of the GUIDed Section Extraction Protocol to extract\r
- the section stream contained therein.\r
-\r
- Copyright (c) 2006 - 2007, 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
- @par Revision Reference: PI\r
- Version 1.00.\r
-\r
-**/\r
-\r
-#ifndef __GUID_SECTION_EXTRACTION_PROTOCOL_H__\r
-#define __GUID_SECTION_EXTRACTION_PROTOCOL_H__\r
-\r
-//\r
-// The protocol interface structures are identified by associating \r
-// them with a GUID. Each instance of a protocol with a given \r
-// GUID must have the same interface structure. While all instances \r
-// of the GUIDed Section Extraction Protocol must have the same \r
-// interface structure, they do not all have the same GUID. The \r
-// GUID that is associated with an instance of the GUIDed Section \r
-// Extraction Protocol is used to correlate it with the GUIDed \r
-// section type that it is intended to process. \r
-//\r
-\r
-typedef struct _EFI_GUIDED_SECTION_EXTRACTION_PROTOCOL EFI_GUIDED_SECTION_EXTRACTION_PROTOCOL;\r
-\r
-\r
-/**\r
- The ExtractSection() function processes the input section and\r
- allocates a buffer from the pool in which it returns the section\r
- contents. If the section being extracted contains\r
- authentication information (the section's\r
- GuidedSectionHeader.Attributes field has the\r
- EFI_GUIDED_SECTION_AUTH_STATUS_VALID bit set), the values\r
- returned in AuthenticationStatus must reflect the results of\r
- the authentication operation. Depending on the algorithm and\r
- size of the encapsulated data, the time that is required to do\r
- a full authentication may be prohibitively long for some\r
- classes of systems. To indicate this, use\r
- EFI_SECURITY_POLICY_PROTOCOL_GUID, which may be published by\r
- the security policy driver (see the Platform Initialization\r
- Driver Execution Environment Core Interface Specification for\r
- more details and the GUID definition). If the\r
- EFI_SECURITY_POLICY_PROTOCOL_GUID exists in the handle\r
- database, then, if possible, full authentication should be\r
- skipped and the section contents simply returned in the\r
- OutputBuffer. In this case, the\r
- EFI_AUTH_STATUS_PLATFORM_OVERRIDE bit AuthenticationStatus\r
- must be set on return. ExtractSection() is callable only from\r
- TPL_NOTIFY and below. Behavior of ExtractSection() at any\r
- EFI_TPL above TPL_NOTIFY is undefined. Type EFI_TPL is\r
- defined in RaiseTPL() in the UEFI 2.0 specification.\r
-\r
- \r
- @param This Indicates the\r
- EFI_GUIDED_SECTION_EXTRACTION_PROTOCOL instance.\r
- \r
- @param InputSection Buffer containing the input GUIDed section\r
- to be processed. OutputBuffer OutputBuffer\r
- is allocated from boot services pool\r
- memory and contains the new section\r
- stream. The caller is responsible for\r
- freeing this buffer.\r
-\r
- @param OutputSize A pointer to a caller-allocated UINTN in\r
- which the size of OutputBuffer allocation\r
- is stored. If the function returns\r
- anything other than EFI_SUCCESS, the value\r
- of OutputSize is undefined.\r
-\r
- @param AuthenticationStatus A pointer to a caller-allocated\r
- UINT32 that indicates the\r
- authentication status of the\r
- output buffer. If the input\r
- section's\r
- GuidedSectionHeader.Attributes\r
- field has the\r
- EFI_GUIDED_SECTION_AUTH_STATUS_VAL\r
- bit as clear, AuthenticationStatus\r
- must return zero. Both local bits\r
- (19:16) and aggregate bits (3:0)\r
- in AuthenticationStatus are\r
- returned by ExtractSection().\r
- These bits reflect the status of\r
- the extraction operation. The bit\r
- pattern in both regions must be\r
- the same, as the local and\r
- aggregate authentication statuses\r
- have equivalent meaning at this\r
- level. If the function returns\r
- anything other than EFI_SUCCESS,\r
- the value of AuthenticationStatus\r
- is undefined.\r
-\r
-\r
- @retval EFI_SUCCESS The InputSection was successfully\r
- processed and the section contents were\r
- returned.\r
-\r
- @retval EFI_OUT_OF_RESOURCES The system has insufficient\r
- resources to process the\r
- request.\r
-\r
- @retval EFI_INVALID_PARAMETER The GUID in InputSection does\r
- not match this instance of the\r
- GUIDed Section Extraction\r
- Protocol.\r
-\r
-**/\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_EXTRACT_GUIDED_SECTION)(\r
- IN CONST EFI_GUIDED_SECTION_EXTRACTION_PROTOCOL *This,\r
- IN CONST VOID *InputSection,\r
- OUT VOID **OutputBuffer,\r
- OUT UINTN *OutputSize,\r
- OUT UINT32 *AuthenticationStatus\r
-);\r
-\r
-\r
-/**\r
- \r
- Takes the GUIDed section as input and produces the section\r
- stream data. See the ExtractSection() function description.\r
-\r
-**/\r
-struct _EFI_GUIDED_SECTION_EXTRACTION_PROTOCOL {\r
- EFI_EXTRACT_GUIDED_SECTION ExtractSection;\r
-};\r
-\r
-\r
-#endif\r