1 /** @file 2 * 3 * Copyright (c) 2015, Hisilicon Limited. All rights reserved. 4 * Copyright (c) 2015, Linaro Limited. All rights reserved. 5 * 6 * This program and the accompanying materials 7 * are licensed and made available under the terms and conditions of the BSD License 8 * which accompanies this distribution. The full text of the license may be found at 9 * http://opensource.org/licenses/bsd-license.php 10 * 11 * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 * 14 **/ 15 16 #ifndef _NOR_FLASH_HW_H_ 17 #define _NOR_FLASH_HW_H_ 18 19 #include <Uefi/UefiBaseType.h> 20 21 22 #define FOUR_BYTE_UNIT 4 23 #define FLASH_MAX_UNIT 4 24 25 #define FLASH_DEVICE_NUM 0x10 26 27 28 29 typedef struct { 30 UINT32 ManufacturerID; 31 UINT32 DeviceID1; 32 UINT32 DeviceID2; 33 UINT32 DeviceID3; 34 UINT8 ParallelNum; 35 UINT32 SingleChipSize; 36 UINT32 BlockSize; 37 UINT32 BufferProgramSize; 38 UINT32 CommandType; 39 }NOR_FLASH_INFO_TABLE; 40 41 /*Define Command Address And Data*/ 42 /*reset*/ 43 typedef struct { 44 UINT32 CommandType; 45 UINT32 ResetData; 46 }FLASH_COMMAND_RESET; 47 48 /*manufacture ID & Device ID*/ 49 typedef struct { 50 UINT32 CommandType; 51 UINT32 ManuIDAddressStep1; 52 UINT32 ManuIDDataStep1; 53 UINT32 ManuIDAddressStep2; 54 UINT32 ManuIDDataStep2; 55 UINT32 ManuIDAddressStep3; 56 UINT32 ManuIDDataStep3; 57 UINT32 ManuIDAddress; 58 59 UINT32 DeviceIDAddress1; 60 UINT32 DeviceIDAddress2; 61 UINT32 DeviceIDAddress3; 62 }FLASH_COMMAND_ID; 63 64 /*Write Buffer*/ 65 typedef struct { 66 UINT32 CommandType; 67 UINT32 BufferProgramAddressStep1; 68 UINT32 BufferProgramDataStep1; 69 UINT32 BufferProgramAddressStep2; 70 UINT32 BufferProgramDataStep2; 71 UINT32 BufferProgramDataStep3; 72 UINT32 BufferProgramtoFlash; 73 }FLASH_COMMAND_WRITE; 74 75 /*erase*/ 76 typedef struct { 77 UINT32 CommandType; 78 UINT32 SectorEraseAddressStep1; 79 UINT32 SectorEraseDataStep1; 80 UINT32 SectorEraseAddressStep2; 81 UINT32 SectorEraseDataStep2; 82 UINT32 SectorEraseAddressStep3; 83 UINT32 SectorEraseDataStep3; 84 UINT32 SectorEraseAddressStep4; 85 UINT32 SectorEraseDataStep4; 86 UINT32 SectorEraseAddressStep5; 87 UINT32 SectorEraseDataStep5; 88 UINT32 SectorEraseDataStep6; 89 }FLASH_COMMAND_ERASE; 90 91 92 typedef struct { 93 UINT32 Base; 94 UINT32 InfIndex; 95 UINT32 ReIndex; 96 UINT32 IdIndex; 97 UINT32 WIndex; 98 UINT32 EIndex; 99 }FLASH_INDEX; 100 101 102 extern EFI_STATUS FlashInit(UINT32 Base); 103 extern EFI_STATUS SectorErase(UINT32 Base, UINT32 Offset); 104 extern EFI_STATUS BufferWrite(UINT32 Offset, void *pData, UINT32 Length); 105 extern EFI_STATUS IsNeedToWrite(UINT32 Base, UINT32 Offset, UINT8 *Buffer, UINT32 Length); 106 107 108 extern NOR_FLASH_INFO_TABLE gFlashInfo[FLASH_DEVICE_NUM]; 109 extern FLASH_COMMAND_RESET gFlashCommandReset[FLASH_DEVICE_NUM]; 110 extern FLASH_COMMAND_ID gFlashCommandId[FLASH_DEVICE_NUM]; 111 extern FLASH_COMMAND_WRITE gFlashCommandWrite[FLASH_DEVICE_NUM]; 112 extern FLASH_COMMAND_ERASE gFlashCommandErase[FLASH_DEVICE_NUM]; 113 extern FLASH_INDEX gIndex; 114 115 116 #endif 117