audk/Vlv2TbltDevicePkg/Include/Library/Fd.h

265 lines
7.3 KiB
C

/*++
Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
Module Name:
Fd.h
Abstract:
EFI Intel82802AB/82802AC Firmware Hub.
--*/
//
// Supported SPI devices
//
//
// MFG and Device code
//
#define SST_25LF040A 0x0044BF
#define SST_25LF040 0x0040BF
#define SST_25LF080A 0x0080BF
#define SST_25VF080B 0x008EBF
#define SST_25VF016B 0x0041BF
#define SST_25VF032B 0x004ABF
#define PMC_25LV040 0x007E9D
#define ATMEL_26DF041 0x00441F
#define Atmel_AT26F004 0x00041F
#define Atmel_AT26DF081A 0x01451F
#define Atmel_AT25DF161 0x02461F
#define Atmel_AT26DF161 0x00461F
#define Atmel_AT25DF641 0x00481F
#define Atmel_AT26DF321 0x00471F
#define Macronix_MX25L8005 0x1420C2
#define Macronix_MX25L1605A 0x1520C2
#define Macronix_MX25L3205D 0x1620C2
#define STMicro_M25PE80 0x148020
#define Winbond_W25X40 0x1330EF
#define Winbond_W25X80 0x1430EF
#define Winbond_W25Q80 0x1440EF
#define Winbond_W25X16 0x1540EF // W25Q16
#define Winbond_W25X32 0x1630EF
//
// NOTE: Assuming that 8Mbit flash will only contain a 4Mbit binary.
// Treating 4Mbit and 8Mbit devices the same.
//
//
// BIOS Base Address
//
#define BIOS_BASE_ADDRESS_4M 0xFFF80000
#define BIOS_BASE_ADDRESS_8M 0xFFF00000
#define BIOS_BASE_ADDRESS_16M 0xFFE00000
//
// block and sector sizes
//
#define SECTOR_SIZE_256BYTE 0x100 // 256byte page size
#define SECTOR_SIZE_4KB 0x1000 // 4kBytes sector size
#define BLOCK_SIZE_32KB 0x00008000 // 32Kbytes block size
#define MAX_FLASH_SIZE 0x00400000 // 32Mbit (Note that this can also be used for the 4Mbit & 8Mbit)
//
// Flash commands
//
#define SPI_SST25LF_COMMAND_WRITE 0x02
#define SPI_SST25LF_COMMAND_READ 0x03
#define SPI_SST25LF_COMMAND_ERASE 0x20
#define SPI_SST25LF_COMMAND_WRITE_DISABLE 0x04
#define SPI_SST25LF_COMMAND_READ_STATUS 0x05
#define SPI_SST25LF_COMMAND_WRITE_ENABLE 0x06
#define SPI_SST25LF_COMMAND_READ_ID 0xAB
#define SPI_SST25LF_COMMAND_WRITE_S_EN 0x50
#define SPI_SST25LF_COMMAND_WRITE_S 0x01
#define SPI_PMC25LV_COMMAND_WRITE 0x02
#define SPI_PMC25LV_COMMAND_READ 0x03
#define SPI_PMC25LV_COMMAND_ERASE 0xD7
#define SPI_PMC25LV_COMMAND_WRITE_DISABLE 0x04
#define SPI_PMC25LV_COMMAND_READ_STATUS 0x05
#define SPI_PMC25LV_COMMAND_WRITE_ENABLE 0x06
#define SPI_PMC25LV_COMMAND_READ_ID 0xAB
#define SPI_PMC25LV_COMMAND_WRITE_S_EN 0x06
#define SPI_PMC25LV_COMMAND_WRITE_S 0x01
#define SPI_AT26DF_COMMAND_WRITE 0x02
#define SPI_AT26DF_COMMAND_READ 0x03
#define SPI_AT26DF_COMMAND_ERASE 0x20
#define SPI_AT26DF_COMMAND_WRITE_DISABLE 0x00
#define SPI_AT26DF_COMMAND_READ_STATUS 0x05
#define SPI_AT26DF_COMMAND_WRITE_ENABLE 0x00
#define SPI_AT26DF_COMMAND_READ_ID 0x9F
#define SPI_AT26DF_COMMAND_WRITE_S_EN 0x00
#define SPI_AT26DF_COMMAND_WRITE_S 0x00
#define SPI_AT26F_COMMAND_WRITE 0x02
#define SPI_AT26F_COMMAND_READ 0x03
#define SPI_AT26F_COMMAND_ERASE 0x20
#define SPI_AT26F_COMMAND_WRITE_DISABLE 0x04
#define SPI_AT26F_COMMAND_READ_STATUS 0x05
#define SPI_AT26F_COMMAND_WRITE_ENABLE 0x06
#define SPI_AT26F_COMMAND_JEDEC_ID 0x9F
#define SPI_AT26F_COMMAND_WRITE_S_EN 0x00
#define SPI_AT26F_COMMAND_WRITE_S 0x01
#define SPI_AT26F_COMMAND_WRITE_UNPROTECT 0x39
#define SPI_SST25VF_COMMAND_WRITE 0x02
#define SPI_SST25VF_COMMAND_READ 0x03
#define SPI_SST25VF_COMMAND_ERASE 0x20
#define SPI_SST25VF_COMMAND_WRITE_DISABLE 0x04
#define SPI_SST25VF_COMMAND_READ_STATUS 0x05
#define SPI_SST25VF_COMMAND_WRITE_ENABLE 0x06
#define SPI_SST25VF_COMMAND_READ_ID 0xAB
#define SPI_SST25VF_COMMAND_JEDEC_ID 0x9F
#define SPI_SST25VF_COMMAND_WRITE_S_EN 0x50
#define SPI_SST25VF_COMMAND_WRITE_S 0x01
#define SPI_STM25PE_COMMAND_WRITE 0x02
#define SPI_STM25PE_COMMAND_READ 0x03
#define SPI_STM25PE_COMMAND_ERASE 0xDB
#define SPI_STM25PE_COMMAND_WRITE_DISABLE 0x04
#define SPI_STM25PE_COMMAND_READ_STATUS 0x05
#define SPI_STM25PE_COMMAND_WRITE_ENABLE 0x06
#define SPI_STM25PE_COMMAND_JEDEC_ID 0x9F
#define SPI_WinbondW25X_COMMAND_WRITE_S 0x01
#define SPI_WinbondW25X_COMMAND_WRITE 0x02
#define SPI_WinbondW25X_COMMAND_READ 0x03
#define SPI_WinbondW25X_COMMAND_READ_STATUS 0x05
#define SPI_WinbondW25X_COMMAND_ERASE_S 0x20
#define SPI_WinbondW25X_COMMAND_WRITE_ENABLE 0x06
#define SPI_WinbondW25X_COMMAND_JEDEC_ID 0x9F
//
// SPI default opcode slots
//
#define SPI_OPCODE_WRITE_INDEX 0
#define SPI_OPCODE_READ_INDEX 1
#define SPI_OPCODE_ERASE_INDEX 2
#define SPI_OPCODE_READ_S_INDEX 3
#define SPI_OPCODE_READ_ID_INDEX 4
#define SPI_OPCODE_WRITE_S_INDEX 6
#define SPI_OPCODE_WRITE_UNPROTECT_INDEX 7
#define SPI_PREFIX_WRITE_S_EN 1
#define SPI_PREFIX_WRITE_EN 0
//
// Atmel AT26F00x
//
#define B_AT26F_STS_REG_SPRL 0x80
#define B_AT26F_STS_REG_SWP 0x0C
//
// Block lock bit definitions:
//
#define READ_LOCK 0x04
#define LOCK_DOWN 0x02
#define WRITE_LOCK 0x01
#define FULL_ACCESS 0x00
//
// Function Prototypes
//
EFI_STATUS
FlashGetNextBlock (
IN UINTN* Key,
OUT EFI_PHYSICAL_ADDRESS* BlockAddress,
OUT UINTN* BlockSize
);
EFI_STATUS
FlashGetSize (
OUT UINTN* Size
);
EFI_STATUS
FlashGetUniformBlockSize (
OUT UINTN* Size
);
EFI_STATUS
FlashEraseWithNoTopSwapping (
IN UINT8 *BaseAddress,
IN UINTN NumBytes
);
EFI_STATUS
FlashErase (
IN UINT8 *BaseAddress,
IN UINTN NumBytes
);
EFI_STATUS
FlashWriteWithNoTopSwapping (
IN UINT8* DstBufferPtr,
IN UINT8* SrcBufferPtr,
IN UINTN NumBytes
);
EFI_STATUS
FlashWrite (
IN UINT8 *DstBufferPtr,
IN UINT8 *SrcBufferPtr,
IN UINTN NumBytes
);
EFI_STATUS
FlashReadWithNoTopSwapping (
IN UINT8 *BaseAddress,
IN UINT8 *DstBufferPtr,
IN UINTN NumBytes
);
EFI_STATUS
FlashRead (
IN UINT8 *BaseAddress,
IN UINT8 *DstBufferPtr,
IN UINTN NumBytes
);
EFI_STATUS
FlashLockWithNoTopSwapping (
IN UINT8* BaseAddress,
IN UINTN NumBytes,
IN UINT8 LockState
);
EFI_STATUS
FlashLock(
IN UINT8 *BaseAddress,
IN UINTN NumBytes,
IN UINT8 LockState
);
EFI_STATUS
CheckIfErased(
IN UINT8 *DstBufferPtr,
IN UINTN NumBytes
);
EFI_STATUS
CheckIfFlashIsReadyForWrite (
IN UINT8 *DstBufferPtr,
IN UINT8 *SrcBufferPtr,
IN UINTN NumBytes
);