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
117
118
119
120
121
122
123
124
125
126
127
128
|
/** @file MvFvbDxe.h
Copyright (c) 2011 - 2014, ARM Ltd. All rights reserved.<BR>
Copyright (c) 2017 Marvell International Ltd.<BR>
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 __FVB_FLASH_DXE_H__
#define __FVB_FLASH_DXE_H__
#include <Protocol/BlockIo.h>
#include <Protocol/FirmwareVolumeBlock.h>
#include <Protocol/Spi.h>
#include <Protocol/SpiFlash.h>
#define GET_DATA_OFFSET(BaseAddr, Lba, LbaSize) ((BaseAddr) + (UINTN)((Lba) * (LbaSize)))
#define FVB_FLASH_SIGNATURE SIGNATURE_32('S', 'n', 'o', 'r')
#define INSTANCE_FROM_FVB_THIS(a) CR(a, FVB_DEVICE, FvbProtocol, FVB_FLASH_SIGNATURE)
//
// Define two helper macro to extract the Capability field or Status field in FVB
// bit fields.
//
#define EFI_FVB2_CAPABILITIES (EFI_FVB2_READ_DISABLED_CAP | \
EFI_FVB2_READ_ENABLED_CAP | \
EFI_FVB2_WRITE_DISABLED_CAP | \
EFI_FVB2_WRITE_ENABLED_CAP | \
EFI_FVB2_LOCK_CAP)
#define EFI_FVB2_STATUS (EFI_FVB2_READ_STATUS | \
EFI_FVB2_WRITE_STATUS | \
EFI_FVB2_LOCK_STATUS)
typedef struct {
VENDOR_DEVICE_PATH Vendor;
EFI_DEVICE_PATH_PROTOCOL End;
} FVB_DEVICE_PATH;
typedef struct {
SPI_DEVICE SpiDevice;
MARVELL_SPI_FLASH_PROTOCOL *SpiFlashProtocol;
MARVELL_SPI_MASTER_PROTOCOL *SpiMasterProtocol;
EFI_HANDLE Handle;
UINT32 Signature;
UINTN DeviceBaseAddress;
UINTN RegionBaseAddress;
UINTN Size;
UINTN FvbOffset;
UINTN FvbSize;
EFI_LBA StartLba;
EFI_BLOCK_IO_MEDIA Media;
EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL FvbProtocol;
FVB_DEVICE_PATH DevicePath;
} FVB_DEVICE;
EFI_STATUS
EFIAPI
MvFvbGetAttributes(
IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL* This,
OUT EFI_FVB_ATTRIBUTES_2* Attributes
);
EFI_STATUS
EFIAPI
MvFvbSetAttributes(
IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL* This,
IN OUT EFI_FVB_ATTRIBUTES_2* Attributes
);
EFI_STATUS
EFIAPI
MvFvbGetPhysicalAddress(
IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL* This,
OUT EFI_PHYSICAL_ADDRESS* Address
);
EFI_STATUS
EFIAPI
MvFvbGetBlockSize(
IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL* This,
IN EFI_LBA Lba,
OUT UINTN* BlockSize,
OUT UINTN* NumberOfBlocks
);
EFI_STATUS
EFIAPI
MvFvbRead(
IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL* This,
IN EFI_LBA Lba,
IN UINTN Offset,
IN OUT UINTN* NumBytes,
IN OUT UINT8* Buffer
);
EFI_STATUS
EFIAPI
MvFvbWrite(
IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL* This,
IN EFI_LBA Lba,
IN UINTN Offset,
IN OUT UINTN* NumBytes,
IN UINT8* Buffer
);
EFI_STATUS
EFIAPI
MvFvbEraseBlocks(
IN CONST EFI_FIRMWARE_VOLUME_BLOCK2_PROTOCOL* This,
...
);
#endif /* __FVB_FLASH_DXE_H__ */
|