summaryrefslogtreecommitdiff
path: root/Silicon/Hisilicon/Drivers/NorFlashDxe/NorFlashHw.h
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