Files
slimbootloader/BootloaderCommonPkg/Include/Service/SpiFlashService.h
T
Guo Dong 5e10bd1e07 Update BSD license to BSD+Patent license
To align with EDK2, update file license
to use BSD+Patent license

Signed-off-by: Guo Dong <guo.dong@intel.com>
2019-06-13 10:46:49 -07:00

133 lines
4.4 KiB
C

/** @file
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef __SPI_FLASH_SERVICE_H__
#define __SPI_FLASH_SERVICE_H__
#include <Guid/BootLoaderServiceGuid.h>
#define SPI_FLASH_SERVICE_SIGNATURE SIGNATURE_32 ('S', 'P', 'I', ' ')
#define SPI_FLASH_SERVICE_VERSION 1
/**
Flash Region Type
**/
typedef enum {
FlashRegionDescriptor,
FlashRegionBios,
FlashRegionMe,
FlashRegionGbE,
FlashRegionPlatformData,
FlashRegionDer,
FlashRegionAll,
FlashRegionMax
} FLASH_REGION_TYPE;
/**
Initialize an SPI library.
@retval EFI_SUCCESS The protocol instance was properly initialized
@retval EFI_UNSUPPORTED The SC is not supported by this module(exception)
**/
typedef
EFI_STATUS
(EFIAPI *SPI_FLASH_INIT) (
VOID
);
/**
Read data from the flash part.
@param[in] FlashRegionType The Flash Region type for flash cycle which is listed in the Descriptor.
@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[out] Buffer The Pointer to caller-allocated buffer containing the dada received.
It is the caller's responsibility to make sure Buffer is large enough for the total number of bytes read.
@retval EFI_SUCCESS Command succeed.
@retval EFI_INVALID_PARAMETER The parameters specified are not valid.
@retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
**/
typedef
EFI_STATUS
(EFIAPI *SPI_FLASH_READ) (
IN FLASH_REGION_TYPE FlashRegionType,
IN UINT32 Address,
IN UINT32 ByteCount,
OUT UINT8 *Buffer
);
/**
Erase some area on the flash part.
@param[in] FlashRegionType The Flash Region type for flash cycle which is listed in the Descriptor.
@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.
@retval EFI_SUCCESS Command succeed.
@retval EFI_INVALID_PARAMETER The parameters specified are not valid.
@retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
**/
typedef
EFI_STATUS
(EFIAPI *SPI_FLASH_ERASE) (
IN FLASH_REGION_TYPE FlashRegionType,
IN UINT32 Address,
IN UINT32 ByteCount
);
/**
Write data to the flash part.
@param[in] FlashRegionType The Flash Region type for flash cycle which is listed in the Descriptor.
@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] Buffer Pointer to caller-allocated buffer containing the data sent during the SPI cycle.
@retval EFI_SUCCESS Command succeed.
@retval EFI_INVALID_PARAMETER The parameters specified are not valid.
@retval EFI_DEVICE_ERROR Device error, command aborts abnormally.
**/
typedef
EFI_STATUS
(EFIAPI *SPI_FLASH_WRITE) (
IN FLASH_REGION_TYPE FlashRegionType,
IN UINT32 Address,
IN UINT32 ByteCount,
IN UINT8 *Buffer
);
/**
Get the SPI region base and size, based on the enum type
@param[in] FlashRegionType The Flash Region type for for the base address which is listed in the Descriptor.
@param[out] BaseAddress The Flash Linear Address for the Region 'n' Base
@param[out] RegionSize The size for the Region 'n'
@retval EFI_SUCCESS Read success
@retval EFI_INVALID_PARAMETER Invalid region type given
@retval EFI_DEVICE_ERROR The region is not used
**/
typedef
EFI_STATUS
(EFIAPI *SPI_FLASH_GET_REGION) (
IN FLASH_REGION_TYPE FlashRegionType,
OUT UINT32 *BaseAddress, OPTIONAL
OUT UINT32 *RegionSize OPTIONAL
);
typedef struct {
SERVICE_COMMON_HEADER Header;
SPI_FLASH_INIT SpiInit;
SPI_FLASH_READ SpiRead;
SPI_FLASH_WRITE SpiWrite;
SPI_FLASH_ERASE SpiErase;
SPI_FLASH_GET_REGION SpiGetRegion;
} SPI_FLASH_SERVICE;
#endif