REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the UefiPayloadPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
		
			
				
	
	
		
			204 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			204 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  Header file for the SPI flash module.
 | 
						|
 | 
						|
  Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
 | 
						|
  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef SPI_COMMON_LIB_H_
 | 
						|
#define SPI_COMMON_LIB_H_
 | 
						|
 | 
						|
#include <PiDxe.h>
 | 
						|
#include <Uefi/UefiBaseType.h>
 | 
						|
#include <IndustryStandard/Pci30.h>
 | 
						|
#include <Library/IoLib.h>
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/BaseMemoryLib.h>
 | 
						|
#include <Library/SpiFlashLib.h>
 | 
						|
#include <Library/MemoryAllocationLib.h>
 | 
						|
#include <Library/BaseLib.h>
 | 
						|
#include <Library/HobLib.h>
 | 
						|
#include <Library/TimerLib.h>
 | 
						|
#include <Guid/SpiFlashInfoGuid.h>
 | 
						|
#include "RegsSpi.h"
 | 
						|
 | 
						|
///
 | 
						|
/// Maximum time allowed while waiting the SPI cycle to complete
 | 
						|
///  Wait Time = 6 seconds = 6000000 microseconds
 | 
						|
///  Wait Period = 10 microseconds
 | 
						|
///
 | 
						|
#define WAIT_TIME    6000000    ///< Wait Time = 6 seconds = 6000000 microseconds
 | 
						|
#define WAIT_PERIOD  10         ///< Wait Period = 10 microseconds
 | 
						|
 | 
						|
///
 | 
						|
/// Flash cycle Type
 | 
						|
///
 | 
						|
typedef enum {
 | 
						|
  FlashCycleRead,
 | 
						|
  FlashCycleWrite,
 | 
						|
  FlashCycleErase,
 | 
						|
  FlashCycleReadSfdp,
 | 
						|
  FlashCycleReadJedecId,
 | 
						|
  FlashCycleWriteStatus,
 | 
						|
  FlashCycleReadStatus,
 | 
						|
  FlashCycleMax
 | 
						|
} FLASH_CYCLE_TYPE;
 | 
						|
 | 
						|
///
 | 
						|
/// Flash Component Number
 | 
						|
///
 | 
						|
typedef enum {
 | 
						|
  FlashComponent0,
 | 
						|
  FlashComponent1,
 | 
						|
  FlashComponentMax
 | 
						|
} FLASH_COMPONENT_NUM;
 | 
						|
 | 
						|
///
 | 
						|
/// Private data structure definitions for the driver
 | 
						|
///
 | 
						|
#define SC_SPI_PRIVATE_DATA_SIGNATURE  SIGNATURE_32 ('P', 'S', 'P', 'I')
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINTN         Signature;
 | 
						|
  EFI_HANDLE    Handle;
 | 
						|
  UINT32        AcpiTmrReg;
 | 
						|
  UINTN         PchSpiBase;
 | 
						|
  UINT16        RegionPermission;
 | 
						|
  UINT32        SfdpVscc0Value;
 | 
						|
  UINT32        SfdpVscc1Value;
 | 
						|
  UINT32        StrapBaseAddress;
 | 
						|
  UINT8         NumberOfComponents;
 | 
						|
  UINT16        Flags;
 | 
						|
  UINT32        Component1StartAddr;
 | 
						|
} SPI_INSTANCE;
 | 
						|
 | 
						|
/**
 | 
						|
  Acquire SPI MMIO BAR
 | 
						|
 | 
						|
  @param[in] PchSpiBase           PCH SPI PCI Base Address
 | 
						|
 | 
						|
  @retval                         Return SPI BAR Address
 | 
						|
 | 
						|
**/
 | 
						|
UINT32
 | 
						|
AcquireSpiBar0 (
 | 
						|
  IN  UINTN  PchSpiBase
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Release SPI MMIO BAR. Do nothing.
 | 
						|
 | 
						|
  @param[in] PchSpiBase           PCH SPI PCI Base Address
 | 
						|
 | 
						|
  @retval None
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
ReleaseSpiBar0 (
 | 
						|
  IN  UINTN  PchSpiBase
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function is a hook for Spi to disable BIOS Write Protect
 | 
						|
 | 
						|
  @param[in] PchSpiBase           PCH SPI PCI Base Address
 | 
						|
  @param[in] CpuSmmBwp            Need to disable CPU SMM Bios write protection or not
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             The protocol instance was properly initialized
 | 
						|
  @retval EFI_ACCESS_DENIED       The BIOS Region can only be updated in SMM phase
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
DisableBiosWriteProtect (
 | 
						|
  IN  UINTN  PchSpiBase,
 | 
						|
  IN  UINT8  CpuSmmBwp
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function is a hook for Spi to enable BIOS Write Protect
 | 
						|
 | 
						|
  @param[in] PchSpiBase           PCH SPI PCI Base Address
 | 
						|
  @param[in] CpuSmmBwp            Need to disable CPU SMM Bios write protection or not
 | 
						|
 | 
						|
  @retval None
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
EnableBiosWriteProtect (
 | 
						|
  IN  UINTN  PchSpiBase,
 | 
						|
  IN  UINT8  CpuSmmBwp
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function disables SPI Prefetching and caching,
 | 
						|
  and returns previous BIOS Control Register value before disabling.
 | 
						|
 | 
						|
  @param[in] PchSpiBase           PCH SPI PCI Base Address
 | 
						|
 | 
						|
  @retval                         Previous BIOS Control Register value
 | 
						|
 | 
						|
**/
 | 
						|
UINT8
 | 
						|
SaveAndDisableSpiPrefetchCache (
 | 
						|
  IN  UINTN  PchSpiBase
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function updates BIOS Control Register with the given value.
 | 
						|
 | 
						|
  @param[in] PchSpiBase           PCH SPI PCI Base Address
 | 
						|
  @param[in] BiosCtlValue         BIOS Control Register Value to be updated
 | 
						|
 | 
						|
  @retval None
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
SetSpiBiosControlRegister (
 | 
						|
  IN  UINTN  PchSpiBase,
 | 
						|
  IN  UINT8  BiosCtlValue
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  This function sends the programmed SPI command to the slave device.
 | 
						|
 | 
						|
  @param[in] SpiRegionType        The SPI Region type for flash cycle which is listed in the Descriptor
 | 
						|
  @param[in] FlashCycleType       The Flash SPI cycle type list in HSFC (Hardware Sequencing Flash Control Register) register
 | 
						|
  @param[in] Address              The Flash Linear Address must fall within a region for which BIOS has access permissions.
 | 
						|
  @param[in] ByteCount            Number of bytes in the data portion of the SPI cycle.
 | 
						|
  @param[in,out] Buffer           Pointer to caller-allocated buffer containing the data received or sent during the SPI cycle.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS             SPI command completes successfully.
 | 
						|
  @retval EFI_DEVICE_ERROR        Device error, the command aborts abnormally.
 | 
						|
  @retval EFI_ACCESS_DENIED       Some unrecognized command encountered in hardware sequencing mode
 | 
						|
  @retval EFI_INVALID_PARAMETER   The parameters specified are not valid.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
SendSpiCmd (
 | 
						|
  IN     FLASH_REGION_TYPE  FlashRegionType,
 | 
						|
  IN     FLASH_CYCLE_TYPE   FlashCycleType,
 | 
						|
  IN     UINT32             Address,
 | 
						|
  IN     UINT32             ByteCount,
 | 
						|
  IN OUT UINT8              *Buffer
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Wait execution cycle to complete on the SPI interface.
 | 
						|
 | 
						|
  @param[in] PchSpiBar0           Spi MMIO base address
 | 
						|
  @param[in] ErrorCheck           TRUE if the SpiCycle needs to do the error check
 | 
						|
 | 
						|
  @retval TRUE                    SPI cycle completed on the interface.
 | 
						|
  @retval FALSE                   Time out while waiting the SPI cycle to complete.
 | 
						|
                                  It's not safe to program the next command on the SPI interface.
 | 
						|
**/
 | 
						|
BOOLEAN
 | 
						|
WaitForSpiCycleComplete (
 | 
						|
  IN     UINT32   PchSpiBar0,
 | 
						|
  IN     BOOLEAN  ErrorCheck
 | 
						|
  );
 | 
						|
 | 
						|
#endif
 |