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