4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UEFI Platform to Driver Configuration Protocol is defined in UEFI specification.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This is a protocol that is optionally produced by the platform and optionally consumed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync by a UEFI Driver in its Start() function. This protocol allows the driver to receive
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync configuration information as part of being started.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef __PLATFORM_TO_DRIVER_CONFIGUARTION_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define __PLATFORM_TO_DRIVER_CONFIGUARTION_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL_GUID \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0x642cd590, 0x8059, 0x4c0a, { 0xa9, 0x58, 0xc5, 0xec, 0x7, 0xd2, 0x3c, 0x4b } }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The UEFI driver must call Query early in the Start() function
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync before any time consuming operations are performed. If
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ChildHandle is NULL the driver is requesting information from
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the platform about the ControllerHandle that is being started.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Information returned from Query may lead to the drivers Start()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync function failing.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If the UEFI driver is a bus driver and producing a ChildHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the driver must call Query after the child handle has been created
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and an EFI_DEVICE_PATH_PROTOCOL has been placed on that handle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync but before any time consuming operation is performed. If information
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return by Query may lead the driver to decide to not create the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ChildHandle. The driver must then cleanup and remove the ChildHandle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync from the system.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The UEFI driver repeatedly calls Query, processes the information
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned by the platform, and calls Response passing in the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync arguments returned from Query. The Instance value passed into
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Response must be the same value passed into the corresponding
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync call to Query.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync An Instance value of zero means return the first ParameterBlock
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in the set of unprocessed parameter blocks. The driver should
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync increment the Instance value by one for each successive call to Query.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This A pointer to the EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ControllerHandle The handle the platform will return
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync configuration information about.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ChildHandle The handle of the child controller to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return information on. This is an optional
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync parameter that may be NULL. It will be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL for device drivers and for bus
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync drivers that attempt to get options for
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the bus controller. It will not be NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for a bus driver that attempts to get
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync options for one of its child controllers.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Instance Pointer to the Instance value. Zero means
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return the first query data. The caller should
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync increment this value by one each time to retrieve
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync successive data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ParameterTypeGuid An EFI_GUID that defines the contents
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync of ParameterBlock. UEFI drivers must
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync use the ParameterTypeGuid to determine
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync how to parse the ParameterBlock. The caller
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync should not attempt to free ParameterTypeGuid.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ParameterBlock The platform returns a pointer to the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParameterBlock structure which
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync contains details about the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync configuration parameters specific to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the ParameterTypeGuid. This structure
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is defined based on the protocol and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync may be different for different
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync protocols. UEFI driver decodes this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync structure and its contents based on
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ProtocolGuid. ParameterBlock is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync allocated by the platform and the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync platform is responsible for freeing
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the ParameterBlock after Result is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync called.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ParameterBlockSize The platform returns the size of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the ParameterBlock in bytes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The platform return parameter
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync information for ControllerHandle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND No more unread Instance exists.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Instance is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR A device error occurred while
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync attempting to return parameter block
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync information for the controller
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by ControllerHandle and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ChildHandle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_RESOURCES There are not enough resources
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync available to set the configuration
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync options for the controller specified
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync by ControllerHandle and ChildHandle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_PLATFORM_TO_DRIVER_CONFIGURATION_QUERY)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_HANDLE ControllerHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_HANDLE ChildHandle OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST UINTN *Instance,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_GUID **ParameterTypeGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT VOID **ParameterBlock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINTN *ParameterBlockSize
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef enum {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The controller specified by ControllerHandle is still
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// in a usable state, and its configuration has been updated
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// via parsing the ParameterBlock. If required by the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// parameter block, and the module supports an NVRAM store,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// the configuration information from PB was successfully
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// saved to the NVRAM. No actions are required before
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// this controller can be used again with the updated
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// configuration settings.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiPlatformConfigurationActionNone = 0,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The driver has detected that the controller specified
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// by ControllerHandle is not in a usable state and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// needs to be stopped. The calling agent can use the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// DisconnectControservice to perform this operation, and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// it should be performed as soon as possible.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiPlatformConfigurationActionStopController = 1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// This controller specified by ControllerHandle needs to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// be stopped and restarted before it can be used again.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The calling agent can use the DisconnectController()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// and ConnectController() services to perform this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// operation. The restart operation can be delayed until
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// all of the configuration options have been set.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiPlatformConfigurationActionRestartController = 2,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// A configuration change has been made that requires the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// platform to be restarted before the controller
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// specified by ControllerHandle can be used again. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// calling agent can use the ResetSystem() services to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// perform this operation. The restart operation can be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// delayed until all of the configuration options have
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// been set.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiPlatformConfigurationActionRestartPlatform = 3,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The controller specified by ControllerHandle is still
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// in a usable state; its configuration has been updated
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// via parsing the ParameterBlock. The driver tried to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// update the driver's private NVRAM store with
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// information from ParameterBlock and failed. No actions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// are required before this controller can be used again
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// with the updated configuration settings, but these
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// configuration settings are not guaranteed to persist
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// after ControllerHandle is stopped.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiPlatformConfigurationActionNvramFailed = 4,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiPlatformConfigurationActionMaximum
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_PLATFORM_CONFIGURATION_ACTION;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The UEFI driver repeatedly calls Query, processes the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync information returned by the platform, and calls Response passing
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in the arguments returned from Query. The UEFI driver must
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync continuously call Query until EFI_NOT_FOUND is returned. For
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync every call to Query that returns EFI_SUCCESS a corrisponding
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync call to Response is required passing in the same
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ContollerHandle, ChildHandle, Instance, ParameterTypeGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParameterBlock, and ParameterBlockSize. The UEFI driver may
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync update values in ParameterBlock based on rules defined by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParameterTypeGuid. The platform is responsible for freeing
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParameterBlock and the UEFI driver must not try to free it.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This A pointer to the EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ControllerHandle The handle the driver is returning
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync configuration information about.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ChildHandle The handle of the child controller to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync return information on. This is an optional
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync parameter that may be NULL. It will be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync NULL for device drivers, and for bus
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync drivers that attempt to get options for
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the bus controller. It will not be NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for a bus driver that attempts to get
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync options for one of its child controllers.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Instance Instance data returned from
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Query().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Instance Instance data passed to Query().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ParameterTypeGuid ParameterTypeGuid returned from Query.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ParameterBlock ParameterBlock returned from Query.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ParameterBlockSize The ParameterBlock size returned from Query.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ConfigurationAction The driver tells the platform what
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync action is required for ParameterBlock to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync take effect.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The platform return parameter information
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for ControllerHandle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND Instance was not found.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Instance is zero.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_PLATFORM_TO_DRIVER_CONFIGURATION_RESPONSE)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_HANDLE ControllerHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_HANDLE ChildHandle OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST UINTN *Instance,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_GUID *ParameterTypeGuid,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST VOID *ParameterBlock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST UINTN ParameterBlockSize ,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CONST EFI_PLATFORM_CONFIGURATION_ACTION ConfigurationAction
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL is used by the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// UEFI driver to query the platform for configuration information.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The UEFI driver calls Query() multiple times to get
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// configuration information from the platform. For every call to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Query() there must be a matching call to Response() so the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// UEFI driver can inform the platform how it used the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// information passed in from Query(). It's legal for a UEFI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// driver to use Response() to inform the platform it does not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// understand the data returned via Query() and thus no action was
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// taken.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PLATFORM_TO_DRIVER_CONFIGURATION_QUERY Query;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PLATFORM_TO_DRIVER_CONFIGURATION_RESPONSE Response;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_PLATFORM_TO_DRIVER_CONFIGURATION_CLP_GUID \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync {0x345ecc0e, 0xcb6, 0x4b75, { 0xbb, 0x57, 0x1b, 0x12, 0x9c, 0x47, 0x33,0x3e } }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ParameterTypeGuid provides the support for parameters
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync communicated through the DMTF SM CLP Specification 1.0 Final
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Standard to be used to configure the UEFI driver. In this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync section the producer of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL is platform
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync firmware and the consumer is the UEFI driver. Note: if future
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync versions of the DMTF SM CLP Specification require changes to the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync parameter block definition, a newer ParameterTypeGuid will be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync used.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 *CLPCommand; ///< A pointer to the null-terminated UTF-8 string that specifies the DMTF SM CLP command
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< line that the driver is required to parse and process when this function is called.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< See the DMTF SM CLP Specification 1.0 Final Standard for details on the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< format and syntax of the CLP command line string. CLPCommand buffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< is allocated by the producer of the EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CLPCommandLength; ///< The length of the CLP Command in bytes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CHAR8 *CLPReturnString; ///< A pointer to the null-terminated UTF-8 string that indicates the CLP return status
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< that the driver is required to provide to the calling agent.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< The calling agent may parse and/ or pass
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< this for processing and user feedback. The SM CLP Command Response string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< buffer is filled in by the UEFI driver in the "keyword=value" format
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< described in the SM CLP Specification, unless otherwise requested via the SM
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< CLP Coutput option in the Command Line string buffer. UEFI driver's support
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< for this default "keyword=value" output format is required if the UEFI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< driver supports this protocol, while support for other SM CLP output
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< formats is optional (the UEFI Driver should return an EFI_UNSUPPORTED if
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< the SM CLP Coutput option requested by the caller is not supported by the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< UEFI Driver). CLPReturnString buffer is allocated by the consumer of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOC OL and undefined prior to the call to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< Response().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 CLPReturnStringLength; ///< The length of the CLP return status string in bytes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 CLPCmdStatus; ///< SM CLP Command Status (see DMTF SM CLP Specification 1.0 Final Standard -
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< Table 4) CLPErrorValue SM CLP Processing Error Value (see DMTF SM
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< CLP Specification 1.0 Final Standard - Table 6). This field is filled in by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< the consumer of the EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOC
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< OL and undefined prior to the call to Response().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 CLPErrorValue; ///< SM CLP Processing Error Value (see DMTF SM CLP Specification 1.0 Final Standard - Table 6).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< This field is filled in by the consumer of the EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOCOL and undefined prior to the call to Response().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 CLPMsgCode; ///< Bit 15: OEM Message Code Flag 0 = Message Code is an SM CLP Probable
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< Cause Value. (see SM CLP Specification Table 11) 1 = Message Code is OEM
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< Specific Bits 14-0: Message Code This field is filled in by the consumer of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< the EFI_PLATFORM_TO_DRIVER_CONFIGURATION_PROTOC OL and undefined prior to the call to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///< Response().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_CONFIGURE_CLP_PARAMETER_BLK;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_GUID gEfiPlatformToDriverConfigurationClpGuid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_GUID gEfiPlatformToDriverConfigurationProtocolGuid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif