You've already forked slimbootloader
mirror of
https://github.com/Dasharo/slimbootloader.git
synced 2026-03-06 15:26:20 -08:00
5e10bd1e07
To align with EDK2, update file license to use BSD+Patent license Signed-off-by: Guo Dong <guo.dong@intel.com>
133 lines
4.4 KiB
C
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
|