• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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