mirror of https://github.com/acidanthera/audk.git
134 lines
4.1 KiB
C
134 lines
4.1 KiB
C
/** @file
|
|
Opal Password PEI driver which is used to unlock Opal Password for S3.
|
|
|
|
Copyright (c) 2016 - 2018, 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
|
|
which 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 _OPAL_PASSWORD_PEI_H_
|
|
#define _OPAL_PASSWORD_PEI_H_
|
|
|
|
#include <PiPei.h>
|
|
#include <IndustryStandard/Atapi.h>
|
|
#include <IndustryStandard/Pci.h>
|
|
|
|
#include <Library/DebugLib.h>
|
|
#include <Library/IoLib.h>
|
|
#include <Library/PciLib.h>
|
|
#include <Library/BaseLib.h>
|
|
#include <Library/BaseMemoryLib.h>
|
|
#include <Library/MemoryAllocationLib.h>
|
|
#include <Library/PeimEntryPoint.h>
|
|
#include <Library/PeiServicesLib.h>
|
|
#include <Library/HobLib.h>
|
|
#include <Library/TimerLib.h>
|
|
#include <Library/LockBoxLib.h>
|
|
#include <Library/TcgStorageOpalLib.h>
|
|
#include <Library/Tcg2PhysicalPresenceLib.h>
|
|
|
|
#include <Protocol/StorageSecurityCommand.h>
|
|
|
|
#include <Ppi/IoMmu.h>
|
|
|
|
#include "OpalPasswordCommon.h"
|
|
#include "OpalAhciMode.h"
|
|
#include "OpalNvmeMode.h"
|
|
|
|
//
|
|
// Time out Value for ATA pass through protocol
|
|
//
|
|
#define ATA_TIMEOUT 30000000
|
|
|
|
//
|
|
// The payload Length of HDD related ATA commands
|
|
//
|
|
#define HDD_PAYLOAD 512
|
|
//
|
|
// According to ATA spec, the max Length of hdd password is 32 bytes
|
|
//
|
|
#define OPAL_PASSWORD_MAX_LENGTH 32
|
|
|
|
#pragma pack(1)
|
|
|
|
/**
|
|
* Opal I/O Type utilized by the Trusted IO callback
|
|
*
|
|
* The type indicates if the I/O is a send or receive
|
|
*/
|
|
typedef enum {
|
|
//
|
|
// I/O is a TCG Trusted Send command
|
|
//
|
|
OpalSend,
|
|
|
|
//
|
|
// I/O is a TCG Trusted Receive command
|
|
//
|
|
OpalRecv
|
|
} OPAL_IO_TYPE;
|
|
|
|
#define OPAL_PEI_DEVICE_SIGNATURE SIGNATURE_32 ('o', 'p', 'd', 's')
|
|
|
|
typedef struct {
|
|
UINTN Signature;
|
|
EFI_STORAGE_SECURITY_COMMAND_PROTOCOL Sscp;
|
|
UINT8 DeviceType;
|
|
OPAL_DEVICE_COMMON *Device;
|
|
VOID *Context;
|
|
} OPAL_PEI_DEVICE;
|
|
|
|
#define OPAL_PEI_DEVICE_FROM_THIS(a) CR (a, OPAL_PEI_DEVICE, Sscp, OPAL_PEI_DEVICE_SIGNATURE)
|
|
|
|
#pragma pack()
|
|
|
|
/**
|
|
Allocates pages that are suitable for an OperationBusMasterCommonBuffer or
|
|
OperationBusMasterCommonBuffer64 mapping.
|
|
|
|
@param Pages The number of pages to allocate.
|
|
@param HostAddress A pointer to store the base system memory address of the
|
|
allocated range.
|
|
@param DeviceAddress The resulting map address for the bus master PCI controller to use to
|
|
access the hosts HostAddress.
|
|
@param Mapping A resulting value to pass to Unmap().
|
|
|
|
@retval EFI_SUCCESS The requested memory pages were allocated.
|
|
@retval EFI_UNSUPPORTED Attributes is unsupported. The only legal attribute bits are
|
|
MEMORY_WRITE_COMBINE and MEMORY_CACHED.
|
|
@retval EFI_INVALID_PARAMETER One or more parameters are invalid.
|
|
@retval EFI_OUT_OF_RESOURCES The memory pages could not be allocated.
|
|
|
|
**/
|
|
EFI_STATUS
|
|
IoMmuAllocateBuffer (
|
|
IN UINTN Pages,
|
|
OUT VOID **HostAddress,
|
|
OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
|
|
OUT VOID **Mapping
|
|
);
|
|
|
|
/**
|
|
Frees memory that was allocated with AllocateBuffer().
|
|
|
|
@param Pages The number of pages to free.
|
|
@param HostAddress The base system memory address of the allocated range.
|
|
@param Mapping The mapping value returned from Map().
|
|
|
|
**/
|
|
VOID
|
|
IoMmuFreeBuffer (
|
|
IN UINTN Pages,
|
|
IN VOID *HostAddress,
|
|
IN VOID *Mapping
|
|
);
|
|
|
|
#endif // _OPAL_PASSWORD_PEI_H_
|
|
|