mirror of https://github.com/acidanthera/audk.git
Arm Packages: Fixed coding style/Line endings to follow EDK2 coding convention
Arm Packages: Fixed mispelling Arm Packages: Reduced warnings all over the code git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12407 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
5439ccda50
commit
11c20f4e06
|
@ -35,7 +35,7 @@
|
|||
ArmLib|Include/Library/ArmLib.h
|
||||
SemihostLib|Include/Library/Semihosting.h
|
||||
UncachedMemoryAllocationLib|Include/Library/UncachedMemoryAllocationLib.h
|
||||
DefaultExceptioHandlerLib|Include/Library/DefaultExceptioHandlerLib.h
|
||||
DefaultExceptionHandlerLib|Include/Library/DefaultExceptionHandlerLib.h
|
||||
ArmDisassemblerLib|Include/Library/ArmDisassemblerLib.h
|
||||
|
||||
[Guids.common]
|
||||
|
|
|
@ -62,7 +62,7 @@
|
|||
SemihostLib|ArmPkg/Library/SemihostLib/SemihostLib.inf
|
||||
UncachedMemoryAllocationLib|ArmPkg/Library/UncachedMemoryAllocationLib/UncachedMemoryAllocationLib.inf
|
||||
DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf
|
||||
DefaultExceptioHandlerLib|ArmPkg/Library/DefaultExceptionHandlerLib/DefaultExceptionHandlerLib.inf
|
||||
DefaultExceptionHandlerLib|ArmPkg/Library/DefaultExceptionHandlerLib/DefaultExceptionHandlerLib.inf
|
||||
|
||||
ArmLib|ArmPkg/Library/ArmLib/ArmV7/ArmV7Lib.inf
|
||||
CpuLib|MdePkg/Library/BaseCpuLib/BaseCpuLib.inf
|
||||
|
|
|
@ -52,14 +52,12 @@
|
|||
[LibraryClasses]
|
||||
BaseMemoryLib
|
||||
CacheMaintenanceLib
|
||||
UefiDriverEntryPoint
|
||||
ArmLib
|
||||
CpuLib
|
||||
DebugLib
|
||||
DefaultExceptionHandlerLib
|
||||
DxeServicesTableLib
|
||||
PeCoffGetEntryPointLib
|
||||
UefiLib
|
||||
CpuLib
|
||||
DefaultExceptioHandlerLib
|
||||
DebugLib
|
||||
|
||||
[Protocols]
|
||||
gEfiCpuArchProtocolGuid
|
||||
|
|
|
@ -543,49 +543,49 @@ UpdatePageEntries (
|
|||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
// obtain page table base
|
||||
// Obtain page table base
|
||||
FirstLevelTable = (ARM_FIRST_LEVEL_DESCRIPTOR *)ArmGetTTBR0BaseAddress ();
|
||||
|
||||
// calculate number of 4KB page table entries to change
|
||||
// Calculate number of 4KB page table entries to change
|
||||
NumPageEntries = Length / TT_DESCRIPTOR_PAGE_SIZE;
|
||||
|
||||
// iterate for the number of 4KB pages to change
|
||||
// Iterate for the number of 4KB pages to change
|
||||
Offset = 0;
|
||||
for(p=0; p<NumPageEntries; p++) {
|
||||
// calculate index into first level translation table for page table value
|
||||
for(p = 0; p < NumPageEntries; p++) {
|
||||
// Calculate index into first level translation table for page table value
|
||||
|
||||
FirstLevelIdx = TT_DESCRIPTOR_SECTION_BASE_ADDRESS(BaseAddress + Offset) >> TT_DESCRIPTOR_SECTION_BASE_SHIFT;
|
||||
ASSERT (FirstLevelIdx < TRANSLATION_TABLE_SECTION_COUNT);
|
||||
|
||||
// read the descriptor from the first level page table
|
||||
// Read the descriptor from the first level page table
|
||||
Descriptor = FirstLevelTable[FirstLevelIdx];
|
||||
|
||||
// does this descriptor need to be converted from section entry to 4K pages?
|
||||
// Does this descriptor need to be converted from section entry to 4K pages?
|
||||
if (!TT_DESCRIPTOR_SECTION_TYPE_IS_PAGE_TABLE(Descriptor)) {
|
||||
Status = ConvertSectionToPages (FirstLevelIdx << TT_DESCRIPTOR_SECTION_BASE_SHIFT);
|
||||
if (EFI_ERROR(Status)) {
|
||||
// exit for loop
|
||||
// Exit for loop
|
||||
break;
|
||||
}
|
||||
|
||||
// re-read descriptor
|
||||
// Re-read descriptor
|
||||
Descriptor = FirstLevelTable[FirstLevelIdx];
|
||||
}
|
||||
|
||||
// obtain page table base address
|
||||
// Obtain page table base address
|
||||
PageTable = (ARM_PAGE_TABLE_ENTRY *)TT_DESCRIPTOR_PAGE_BASE_ADDRESS(Descriptor);
|
||||
|
||||
// calculate index into the page table
|
||||
// Calculate index into the page table
|
||||
PageTableIndex = ((BaseAddress + Offset) & TT_DESCRIPTOR_PAGE_INDEX_MASK) >> TT_DESCRIPTOR_PAGE_BASE_SHIFT;
|
||||
ASSERT (PageTableIndex < TRANSLATION_TABLE_PAGE_COUNT);
|
||||
|
||||
// get the entry
|
||||
// Get the entry
|
||||
CurrentPageTableEntry = PageTable[PageTableIndex];
|
||||
|
||||
// mask off appropriate fields
|
||||
// Mask off appropriate fields
|
||||
PageTableEntry = CurrentPageTableEntry & ~EntryMask;
|
||||
|
||||
// mask in new attributes and/or permissions
|
||||
// Mask in new attributes and/or permissions
|
||||
PageTableEntry |= EntryValue;
|
||||
|
||||
if (VirtualMask != 0) {
|
||||
|
@ -609,7 +609,7 @@ UpdatePageEntries (
|
|||
Status = EFI_SUCCESS;
|
||||
Offset += TT_DESCRIPTOR_PAGE_SIZE;
|
||||
|
||||
} // end first level translation table loop
|
||||
} // End first level translation table loop
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
@ -815,22 +815,23 @@ SetMemoryAttributes (
|
|||
EFI_STATUS Status;
|
||||
|
||||
if(((BaseAddress & 0xFFFFF) == 0) && ((Length & 0xFFFFF) == 0)) {
|
||||
// is the base and length a multiple of 1 MB?
|
||||
// Is the base and length a multiple of 1 MB?
|
||||
DEBUG ((EFI_D_PAGE, "SetMemoryAttributes(): MMU section 0x%x length 0x%x to %lx\n", (UINTN)BaseAddress, (UINTN)Length, Attributes));
|
||||
Status = UpdateSectionEntries (BaseAddress, Length, Attributes, VirtualMask);
|
||||
} else {
|
||||
// base and/or length is not a multiple of 1 MB
|
||||
// Base and/or length is not a multiple of 1 MB
|
||||
DEBUG ((EFI_D_PAGE, "SetMemoryAttributes(): MMU page 0x%x length 0x%x to %lx\n", (UINTN)BaseAddress, (UINTN)Length, Attributes));
|
||||
Status = UpdatePageEntries (BaseAddress, Length, Attributes, VirtualMask);
|
||||
}
|
||||
|
||||
// flush d-cache so descriptors make it back to uncached memory for subsequent table walks
|
||||
// Flush d-cache so descriptors make it back to uncached memory for subsequent table walks
|
||||
// flush and invalidate pages
|
||||
//TODO: Do we really need to invalidate the caches everytime we change the memory attributes ?
|
||||
ArmCleanInvalidateDataCache ();
|
||||
|
||||
ArmInvalidateInstructionCache ();
|
||||
|
||||
// invalidate all TLB entries so changes are synced
|
||||
// Invalidate all TLB entries so changes are synced
|
||||
ArmInvalidateTlb ();
|
||||
|
||||
return Status;
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
#ifndef __ARM_V7_H__
|
||||
#define __ARM_V7_H__
|
||||
|
||||
#include <Chipset/ArmV7Mmu.h>
|
||||
|
||||
// Domain Access Control Register
|
||||
#define DOMAIN_ACCESS_CONTROL_MASK(a) (3UL << (2 * (a)))
|
||||
#define DOMAIN_ACCESS_CONTROL_NONE(a) (0UL << (2 * (a)))
|
||||
|
@ -22,207 +24,6 @@
|
|||
#define DOMAIN_ACCESS_CONTROL_RESERVED(a) (2UL << (2 * (a)))
|
||||
#define DOMAIN_ACCESS_CONTROL_MANAGER(a) (3UL << (2 * (a)))
|
||||
|
||||
#define TTBR_NOT_OUTER_SHAREABLE BIT5
|
||||
#define TTBR_RGN_OUTER_NON_CACHEABLE 0
|
||||
#define TTBR_RGN_OUTER_WRITE_BACK_ALLOC BIT3
|
||||
#define TTBR_RGN_OUTER_WRITE_THROUGH BIT4
|
||||
#define TTBR_RGN_OUTER_WRITE_BACK_NO_ALLOC (BIT3|BIT4)
|
||||
#define TTBR_SHAREABLE BIT1
|
||||
#define TTBR_NON_SHAREABLE 0
|
||||
#define TTBR_INNER_CACHEABLE BIT0
|
||||
#define TTBR_NON_INNER_CACHEABLE BIT0
|
||||
#define TTBR_RGN_INNER_NON_CACHEABLE 0
|
||||
#define TTBR_RGN_INNER_WRITE_BACK_ALLOC BIT6
|
||||
#define TTBR_RGN_INNER_WRITE_THROUGH BIT0
|
||||
#define TTBR_RGN_INNER_WRITE_BACK_NO_ALLOC (BIT0|BIT6)
|
||||
|
||||
#define TTBR_WRITE_THROUGH_NO_ALLOC ( TTBR_RGN_OUTER_WRITE_BACK_ALLOC | TTBR_RGN_INNER_WRITE_BACK_ALLOC )
|
||||
#define TTBR_WRITE_BACK_NO_ALLOC ( TTBR_RGN_OUTER_WRITE_BACK_NO_ALLOC | TTBR_RGN_INNER_WRITE_BACK_NO_ALLOC )
|
||||
#define TTBR_NON_CACHEABLE ( TTBR_RGN_OUTER_NON_CACHEABLE | TTBR_RGN_INNER_NON_CACHEABLE )
|
||||
#define TTBR_WRITE_BACK_ALLOC ( TTBR_RGN_OUTER_WRITE_BACK_ALLOC | TTBR_RGN_INNER_WRITE_BACK_ALLOC )
|
||||
|
||||
|
||||
#define TRANSLATION_TABLE_SECTION_COUNT 4096
|
||||
#define TRANSLATION_TABLE_SECTION_SIZE (sizeof(UINT32) * TRANSLATION_TABLE_SECTION_COUNT)
|
||||
#define TRANSLATION_TABLE_SECTION_ALIGNMENT (sizeof(UINT32) * TRANSLATION_TABLE_SECTION_COUNT)
|
||||
#define TRANSLATION_TABLE_SECTION_ALIGNMENT_MASK (TRANSLATION_TABLE_SECTION_ALIGNMENT - 1)
|
||||
|
||||
#define TRANSLATION_TABLE_PAGE_COUNT 256
|
||||
#define TRANSLATION_TABLE_PAGE_SIZE (sizeof(UINT32) * TRANSLATION_TABLE_PAGE_COUNT)
|
||||
#define TRANSLATION_TABLE_PAGE_ALIGNMENT (sizeof(UINT32) * TRANSLATION_TABLE_PAGE_COUNT)
|
||||
#define TRANSLATION_TABLE_PAGE_ALIGNMENT_MASK (TRANSLATION_TABLE_PAGE_ALIGNMENT - 1)
|
||||
|
||||
#define TRANSLATION_TABLE_ENTRY_FOR_VIRTUAL_ADDRESS(table, address) ((UINT32 *)(table) + (((UINTN)(address)) >> 20))
|
||||
|
||||
// Translation table descriptor types
|
||||
#define TT_DESCRIPTOR_SECTION_TYPE_MASK ((1UL << 18) | (3UL << 0))
|
||||
#define TT_DESCRIPTOR_SECTION_TYPE_FAULT (0UL << 0)
|
||||
#define TT_DESCRIPTOR_SECTION_TYPE_PAGE_TABLE (1UL << 0)
|
||||
#define TT_DESCRIPTOR_SECTION_TYPE_SECTION ((0UL << 18) | (2UL << 0))
|
||||
#define TT_DESCRIPTOR_SECTION_TYPE_SUPERSECTION ((1UL << 18) | (2UL << 0))
|
||||
#define TT_DESCRIPTOR_SECTION_TYPE_IS_PAGE_TABLE(Desc) (((Desc) & 3UL) == TT_DESCRIPTOR_SECTION_TYPE_PAGE_TABLE)
|
||||
|
||||
// Translation table descriptor types
|
||||
#define TT_DESCRIPTOR_PAGE_TYPE_MASK (3UL << 0)
|
||||
#define TT_DESCRIPTOR_PAGE_TYPE_FAULT (0UL << 0)
|
||||
#define TT_DESCRIPTOR_PAGE_TYPE_PAGE (2UL << 0)
|
||||
#define TT_DESCRIPTOR_PAGE_TYPE_PAGE_XN (3UL << 0)
|
||||
#define TT_DESCRIPTOR_PAGE_TYPE_LARGEPAGE (1UL << 0)
|
||||
|
||||
// Section descriptor definitions
|
||||
#define TT_DESCRIPTOR_SECTION_SIZE (0x00100000)
|
||||
|
||||
#define TT_DESCRIPTOR_SECTION_NS_MASK (1UL << 19)
|
||||
#define TT_DESCRIPTOR_SECTION_NS_SECURE (0UL << 19)
|
||||
#define TT_DESCRIPTOR_SECTION_NS_NON_SECURE (1UL << 19)
|
||||
|
||||
#define TT_DESCRIPTOR_SECTION_NG_MASK (1UL << 17)
|
||||
#define TT_DESCRIPTOR_SECTION_NG_GLOBAL (0UL << 17)
|
||||
#define TT_DESCRIPTOR_SECTION_NG_LOCAL (1UL << 17)
|
||||
|
||||
#define TT_DESCRIPTOR_PAGE_NG_MASK (1UL << 11)
|
||||
#define TT_DESCRIPTOR_PAGE_NG_GLOBAL (0UL << 11)
|
||||
#define TT_DESCRIPTOR_PAGE_NG_LOCAL (1UL << 11)
|
||||
|
||||
#define TT_DESCRIPTOR_SECTION_S_MASK (1UL << 16)
|
||||
#define TT_DESCRIPTOR_SECTION_S_NOT_SHARED (0UL << 16)
|
||||
#define TT_DESCRIPTOR_SECTION_S_SHARED (1UL << 16)
|
||||
|
||||
#define TT_DESCRIPTOR_PAGE_S_MASK (1UL << 10)
|
||||
#define TT_DESCRIPTOR_PAGE_S_NOT_SHARED (0UL << 10)
|
||||
#define TT_DESCRIPTOR_PAGE_S_SHARED (1UL << 10)
|
||||
|
||||
#define TT_DESCRIPTOR_SECTION_AP_MASK ((1UL << 15) | (3UL << 10))
|
||||
#define TT_DESCRIPTOR_SECTION_AP_NO_NO ((0UL << 15) | (0UL << 10))
|
||||
#define TT_DESCRIPTOR_SECTION_AP_RW_NO ((0UL << 15) | (1UL << 10))
|
||||
#define TT_DESCRIPTOR_SECTION_AP_RW_RO ((0UL << 15) | (2UL << 10))
|
||||
#define TT_DESCRIPTOR_SECTION_AP_RW_RW ((0UL << 15) | (3UL << 10))
|
||||
#define TT_DESCRIPTOR_SECTION_AP_RO_NO ((1UL << 15) | (1UL << 10))
|
||||
#define TT_DESCRIPTOR_SECTION_AP_RO_RO ((1UL << 15) | (3UL << 10))
|
||||
|
||||
#define TT_DESCRIPTOR_PAGE_AP_MASK ((1UL << 9) | (3UL << 4))
|
||||
#define TT_DESCRIPTOR_PAGE_AP_NO_NO ((0UL << 9) | (0UL << 4))
|
||||
#define TT_DESCRIPTOR_PAGE_AP_RW_NO ((0UL << 9) | (1UL << 4))
|
||||
#define TT_DESCRIPTOR_PAGE_AP_RW_RO ((0UL << 9) | (2UL << 4))
|
||||
#define TT_DESCRIPTOR_PAGE_AP_RW_RW ((0UL << 9) | (3UL << 4))
|
||||
#define TT_DESCRIPTOR_PAGE_AP_RO_NO ((1UL << 9) | (1UL << 4))
|
||||
#define TT_DESCRIPTOR_PAGE_AP_RO_RO ((1UL << 9) | (3UL << 4))
|
||||
|
||||
#define TT_DESCRIPTOR_SECTION_XN_MASK (0x1UL << 4)
|
||||
#define TT_DESCRIPTOR_PAGE_XN_MASK (0x1UL << 0)
|
||||
#define TT_DESCRIPTOR_LARGEPAGE_XN_MASK (0x1UL << 15)
|
||||
|
||||
#define TT_DESCRIPTOR_SECTION_CACHE_POLICY_MASK ((3UL << 12) | (1UL << 3) | (1UL << 2))
|
||||
#define TT_DESCRIPTOR_SECTION_CACHEABLE_MASK (1UL << 3)
|
||||
#define TT_DESCRIPTOR_SECTION_CACHE_POLICY_STRONGLY_ORDERED ((0UL << 12) | (0UL << 3) | (0UL << 2))
|
||||
#define TT_DESCRIPTOR_SECTION_CACHE_POLICY_SHAREABLE_DEVICE ((0UL << 12) | (0UL << 3) | (1UL << 2))
|
||||
#define TT_DESCRIPTOR_SECTION_CACHE_POLICY_WRITE_THROUGH_NO_ALLOC ((0UL << 12) | (1UL << 3) | (0UL << 2))
|
||||
#define TT_DESCRIPTOR_SECTION_CACHE_POLICY_WRITE_BACK_NO_ALLOC ((0UL << 12) | (1UL << 3) | (1UL << 2))
|
||||
#define TT_DESCRIPTOR_SECTION_CACHE_POLICY_NON_CACHEABLE ((1UL << 12) | (0UL << 3) | (0UL << 2))
|
||||
#define TT_DESCRIPTOR_SECTION_CACHE_POLICY_WRITE_BACK_ALLOC ((1UL << 12) | (1UL << 3) | (1UL << 2))
|
||||
#define TT_DESCRIPTOR_SECTION_CACHE_POLICY_NON_SHAREABLE_DEVICE ((2UL << 12) | (0UL << 3) | (0UL << 2))
|
||||
|
||||
#define TT_DESCRIPTOR_PAGE_SIZE (0x00001000)
|
||||
|
||||
#define TT_DESCRIPTOR_PAGE_CACHE_POLICY_MASK ((3UL << 6) | (1UL << 3) | (1UL << 2))
|
||||
#define TT_DESCRIPTOR_PAGE_CACHEABLE_MASK (1UL << 3)
|
||||
#define TT_DESCRIPTOR_PAGE_CACHE_POLICY_STRONGLY_ORDERED ((0UL << 6) | (0UL << 3) | (0UL << 2))
|
||||
#define TT_DESCRIPTOR_PAGE_CACHE_POLICY_SHAREABLE_DEVICE ((0UL << 6) | (0UL << 3) | (1UL << 2))
|
||||
#define TT_DESCRIPTOR_PAGE_CACHE_POLICY_WRITE_THROUGH_NO_ALLOC ((0UL << 6) | (1UL << 3) | (0UL << 2))
|
||||
#define TT_DESCRIPTOR_PAGE_CACHE_POLICY_WRITE_BACK_NO_ALLOC ((0UL << 6) | (1UL << 3) | (1UL << 2))
|
||||
#define TT_DESCRIPTOR_PAGE_CACHE_POLICY_NON_CACHEABLE ((1UL << 6) | (0UL << 3) | (0UL << 2))
|
||||
#define TT_DESCRIPTOR_PAGE_CACHE_POLICY_WRITE_BACK_ALLOC ((1UL << 6) | (1UL << 3) | (1UL << 2))
|
||||
#define TT_DESCRIPTOR_PAGE_CACHE_POLICY_NON_SHAREABLE_DEVICE ((2UL << 6) | (0UL << 3) | (0UL << 2))
|
||||
|
||||
#define TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_MASK ((3UL << 12) | (1UL << 3) | (1UL << 2))
|
||||
#define TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_STRONGLY_ORDERED ((0UL << 12) | (0UL << 3) | (0UL << 2))
|
||||
#define TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_SHAREABLE_DEVICE ((0UL << 12) | (0UL << 3) | (1UL << 2))
|
||||
#define TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_WRITE_THROUGH_NO_ALLOC ((0UL << 12) | (1UL << 3) | (0UL << 2))
|
||||
#define TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_WRITE_BACK_NO_ALLOC ((0UL << 12) | (1UL << 3) | (1UL << 2))
|
||||
#define TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_NON_CACHEABLE ((1UL << 12) | (0UL << 3) | (0UL << 2))
|
||||
#define TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_WRITE_BACK_ALLOC ((1UL << 12) | (1UL << 3) | (1UL << 2))
|
||||
#define TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_NON_SHAREABLE_DEVICE ((2UL << 12) | (0UL << 3) | (0UL << 2))
|
||||
|
||||
#define TT_DESCRIPTOR_CONVERT_TO_PAGE_AP(Desc) ((((Desc) & TT_DESCRIPTOR_SECTION_AP_MASK) >> 6) & TT_DESCRIPTOR_PAGE_AP_MASK)
|
||||
#define TT_DESCRIPTOR_CONVERT_TO_PAGE_NG(Desc) ((((Desc) & TT_DESCRIPTOR_SECTION_NG_MASK) >> 6) & TT_DESCRIPTOR_PAGE_NG_MASK)
|
||||
#define TT_DESCRIPTOR_CONVERT_TO_PAGE_S(Desc) ((((Desc) & TT_DESCRIPTOR_SECTION_S_MASK) >> 6) & TT_DESCRIPTOR_PAGE_S_MASK)
|
||||
#define TT_DESCRIPTOR_CONVERT_TO_PAGE_XN(Desc,IsLargePage) ((IsLargePage)? \
|
||||
((((Desc) & TT_DESCRIPTOR_SECTION_XN_MASK) >> 4) & TT_DESCRIPTOR_LARGEPAGE_XN_MASK): \
|
||||
((((Desc) & TT_DESCRIPTOR_SECTION_XN_MASK) << 11) & TT_DESCRIPTOR_PAGE_XN_MASK))
|
||||
#define TT_DESCRIPTOR_CONVERT_TO_PAGE_CACHE_POLICY(Desc,IsLargePage) (IsLargePage? \
|
||||
(((Desc) & TT_DESCRIPTOR_SECTION_CACHE_POLICY_MASK) & TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_MASK): \
|
||||
(((((Desc) & (0x3 << 12)) >> 6) | (Desc & (0x3 << 2)))))
|
||||
|
||||
#define TT_DESCRIPTOR_CONVERT_TO_SECTION_AP(Desc) ((((Desc) & TT_DESCRIPTOR_PAGE_AP_MASK) << 6) & TT_DESCRIPTOR_SECTION_AP_MASK)
|
||||
|
||||
#define TT_DESCRIPTOR_CONVERT_TO_SECTION_CACHE_POLICY(Desc,IsLargePage) (IsLargePage? \
|
||||
(((Desc) & TT_DESCRIPTOR_LARGEPAGE_CACHE_POLICY_MASK) & TT_DESCRIPTOR_SECTION_CACHE_POLICY_MASK): \
|
||||
(((((Desc) & (0x3 << 6)) << 6) | (Desc & (0x3 << 2)))))
|
||||
|
||||
|
||||
#define TT_DESCRIPTOR_SECTION_DOMAIN_MASK (0x0FUL << 5)
|
||||
#define TT_DESCRIPTOR_SECTION_DOMAIN(a) (((a) & 0x0FUL) << 5)
|
||||
|
||||
#define TT_DESCRIPTOR_SECTION_BASE_ADDRESS_MASK (0xFFF00000)
|
||||
#define TT_DESCRIPTOR_SECTION_PAGETABLE_ADDRESS_MASK (0xFFFFFC00)
|
||||
#define TT_DESCRIPTOR_SECTION_BASE_ADDRESS(a) ((a) & TT_DESCRIPTOR_SECTION_BASE_ADDRESS_MASK)
|
||||
#define TT_DESCRIPTOR_SECTION_BASE_SHIFT 20
|
||||
|
||||
#define TT_DESCRIPTOR_PAGE_BASE_ADDRESS_MASK (0xFFFFF000)
|
||||
#define TT_DESCRIPTOR_PAGE_INDEX_MASK (0x000FF000)
|
||||
#define TT_DESCRIPTOR_PAGE_BASE_ADDRESS(a) ((a) & TT_DESCRIPTOR_PAGE_BASE_ADDRESS_MASK)
|
||||
#define TT_DESCRIPTOR_PAGE_BASE_SHIFT 12
|
||||
|
||||
#define TT_DESCRIPTOR_SECTION_WRITE_BACK(Secure) (TT_DESCRIPTOR_SECTION_TYPE_SECTION | \
|
||||
((Secure) ? TT_DESCRIPTOR_SECTION_NS_SECURE : TT_DESCRIPTOR_SECTION_NS_NON_SECURE ) | \
|
||||
TT_DESCRIPTOR_SECTION_NG_GLOBAL | \
|
||||
TT_DESCRIPTOR_SECTION_S_NOT_SHARED | \
|
||||
TT_DESCRIPTOR_SECTION_DOMAIN(0) | \
|
||||
TT_DESCRIPTOR_SECTION_AP_RW_RW | \
|
||||
TT_DESCRIPTOR_SECTION_CACHE_POLICY_WRITE_BACK_ALLOC)
|
||||
#define TT_DESCRIPTOR_SECTION_WRITE_THROUGH(Secure) (TT_DESCRIPTOR_SECTION_TYPE_SECTION | \
|
||||
((Secure) ? TT_DESCRIPTOR_SECTION_NS_SECURE : TT_DESCRIPTOR_SECTION_NS_NON_SECURE ) | \
|
||||
TT_DESCRIPTOR_SECTION_NG_GLOBAL | \
|
||||
TT_DESCRIPTOR_SECTION_S_NOT_SHARED | \
|
||||
TT_DESCRIPTOR_SECTION_DOMAIN(0) | \
|
||||
TT_DESCRIPTOR_SECTION_AP_RW_RW | \
|
||||
TT_DESCRIPTOR_SECTION_CACHE_POLICY_WRITE_THROUGH_NO_ALLOC)
|
||||
#define TT_DESCRIPTOR_SECTION_DEVICE(Secure) (TT_DESCRIPTOR_SECTION_TYPE_SECTION | \
|
||||
((Secure) ? TT_DESCRIPTOR_SECTION_NS_SECURE : TT_DESCRIPTOR_SECTION_NS_NON_SECURE ) | \
|
||||
TT_DESCRIPTOR_SECTION_NG_GLOBAL | \
|
||||
TT_DESCRIPTOR_SECTION_S_NOT_SHARED | \
|
||||
TT_DESCRIPTOR_SECTION_DOMAIN(0) | \
|
||||
TT_DESCRIPTOR_SECTION_AP_RW_RW | \
|
||||
TT_DESCRIPTOR_SECTION_CACHE_POLICY_SHAREABLE_DEVICE)
|
||||
#define TT_DESCRIPTOR_SECTION_UNCACHED(Secure) (TT_DESCRIPTOR_SECTION_TYPE_SECTION | \
|
||||
((Secure) ? TT_DESCRIPTOR_SECTION_NS_SECURE : TT_DESCRIPTOR_SECTION_NS_NON_SECURE ) | \
|
||||
TT_DESCRIPTOR_SECTION_NG_GLOBAL | \
|
||||
TT_DESCRIPTOR_SECTION_S_NOT_SHARED | \
|
||||
TT_DESCRIPTOR_SECTION_DOMAIN(0) | \
|
||||
TT_DESCRIPTOR_SECTION_AP_RW_RW | \
|
||||
TT_DESCRIPTOR_SECTION_CACHE_POLICY_NON_CACHEABLE)
|
||||
|
||||
#define TT_DESCRIPTOR_PAGE_WRITE_BACK (TT_DESCRIPTOR_PAGE_TYPE_PAGE | \
|
||||
TT_DESCRIPTOR_PAGE_NG_GLOBAL | \
|
||||
TT_DESCRIPTOR_PAGE_S_NOT_SHARED | \
|
||||
TT_DESCRIPTOR_PAGE_AP_RW_RW | \
|
||||
TT_DESCRIPTOR_PAGE_CACHE_POLICY_WRITE_BACK_ALLOC)
|
||||
#define TT_DESCRIPTOR_PAGE_WRITE_THROUGH (TT_DESCRIPTOR_PAGE_TYPE_PAGE | \
|
||||
TT_DESCRIPTOR_PAGE_NG_GLOBAL | \
|
||||
TT_DESCRIPTOR_PAGE_S_NOT_SHARED | \
|
||||
TT_DESCRIPTOR_PAGE_AP_RW_RW | \
|
||||
TT_DESCRIPTOR_PAGE_CACHE_POLICY_WRITE_THROUGH_NO_ALLOC)
|
||||
#define TT_DESCRIPTOR_PAGE_DEVICE (TT_DESCRIPTOR_PAGE_TYPE_PAGE | \
|
||||
TT_DESCRIPTOR_PAGE_NG_GLOBAL | \
|
||||
TT_DESCRIPTOR_PAGE_S_NOT_SHARED | \
|
||||
TT_DESCRIPTOR_PAGE_AP_RW_RW | \
|
||||
TT_DESCRIPTOR_PAGE_CACHE_POLICY_SHAREABLE_DEVICE)
|
||||
#define TT_DESCRIPTOR_PAGE_UNCACHED (TT_DESCRIPTOR_PAGE_TYPE_PAGE | \
|
||||
TT_DESCRIPTOR_PAGE_NG_GLOBAL | \
|
||||
TT_DESCRIPTOR_PAGE_S_NOT_SHARED | \
|
||||
TT_DESCRIPTOR_PAGE_AP_RW_RW | \
|
||||
TT_DESCRIPTOR_PAGE_CACHE_POLICY_NON_CACHEABLE)
|
||||
|
||||
// Cortex A9 feature bit definitions
|
||||
#define A9_FEATURE_PARITY (1<<9)
|
||||
#define A9_FEATURE_AOW (1<<8)
|
||||
|
@ -245,7 +46,7 @@
|
|||
#define SMP_GIC_CPUIF_BASE 0x100
|
||||
#define SMP_GIC_DIST_BASE 0x1000
|
||||
|
||||
// CPACR - Coprocessor Access Control Register defintions
|
||||
// CPACR - Coprocessor Access Control Register definitions
|
||||
#define CPACR_CP_DENIED(cp) 0x00
|
||||
#define CPACR_CP_PRIV(cp) ((0x1 << ((cp) << 1)) & 0x0FFFFFFF)
|
||||
#define CPACR_CP_FULL(cp) ((0x3 << ((cp) << 1)) & 0x0FFFFFFF)
|
||||
|
@ -253,7 +54,7 @@
|
|||
#define CPACR_D32DIS (1 << 30)
|
||||
#define CPACR_CP_FULL_ACCESS 0x0FFFFFFF
|
||||
|
||||
// NSACR - Non-Secure Access Control Register defintions
|
||||
// NSACR - Non-Secure Access Control Register definitions
|
||||
#define NSACR_CP(cp) ((1 << (cp)) & 0x3FFF)
|
||||
#define NSACR_NSD32DIS (1 << 14)
|
||||
#define NSACR_NSASEDIS (1 << 15)
|
||||
|
@ -262,7 +63,7 @@
|
|||
#define NSACR_NS_SMP (1 << 18)
|
||||
#define NSACR_RFR (1 << 19)
|
||||
|
||||
// SCR - Secure Configuration Register defintions
|
||||
// SCR - Secure Configuration Register definitions
|
||||
#define SCR_NS (1 << 0)
|
||||
#define SCR_IRQ (1 << 1)
|
||||
#define SCR_FIQ (1 << 2)
|
||||
|
@ -330,7 +131,6 @@ ArmInvalidScu (
|
|||
VOID
|
||||
);
|
||||
|
||||
|
||||
UINTN
|
||||
EFIAPI
|
||||
ArmGetScuBaseAddress (
|
||||
|
@ -367,7 +167,6 @@ ArmSetupSmpNonSecure (
|
|||
IN UINTN CoreId
|
||||
);
|
||||
|
||||
|
||||
UINTN
|
||||
EFIAPI
|
||||
ArmReadCbar (
|
||||
|
@ -387,14 +186,12 @@ ArmReadMpidr (
|
|||
VOID
|
||||
);
|
||||
|
||||
|
||||
UINTN
|
||||
EFIAPI
|
||||
ArmReadTpidrurw (
|
||||
VOID
|
||||
);
|
||||
|
||||
|
||||
VOID
|
||||
EFIAPI
|
||||
ArmWriteTpidrurw (
|
||||
|
|
|
@ -26,12 +26,22 @@
|
|||
/**
|
||||
FIXME: Need documentation
|
||||
**/
|
||||
EFI_STATUS TZPCSetDecProtBits(UINTN tzpc_base, UINTN tzpc_id, UINTN bits);
|
||||
EFI_STATUS
|
||||
TZPCSetDecProtBits (
|
||||
IN UINTN TzpcBase,
|
||||
IN UINTN TzpcId,
|
||||
IN UINTN Bits
|
||||
);
|
||||
|
||||
/**
|
||||
FIXME: Need documentation
|
||||
**/
|
||||
EFI_STATUS TZPCClearDecProtBits(UINTN tzpc_base, UINTN tzpc_id, UINTN bits);
|
||||
EFI_STATUS
|
||||
TZPCClearDecProtBits (
|
||||
IN UINTN TzpcBase,
|
||||
IN UINTN TzpcId,
|
||||
IN UINTN Bits
|
||||
);
|
||||
|
||||
// Setup TZ Address Space Controller
|
||||
#define TZASC_REGION_ENABLED 1
|
||||
|
@ -64,6 +74,15 @@ EFI_STATUS TZPCClearDecProtBits(UINTN tzpc_base, UINTN tzpc_id, UINTN bits);
|
|||
/**
|
||||
FIXME: Need documentation
|
||||
**/
|
||||
EFI_STATUS TZASCSetRegion(UINTN tzasc_base, UINTN region_id, UINTN enabled, UINTN low_address, UINTN high_address, UINTN size, UINTN security);
|
||||
EFI_STATUS
|
||||
TZASCSetRegion (
|
||||
IN INTN TzascBase,
|
||||
IN UINTN RegionId,
|
||||
IN UINTN Enabled,
|
||||
IN UINTN LowAddress,
|
||||
IN UINTN HighAddress,
|
||||
IN UINTN Size,
|
||||
IN UINTN Security
|
||||
);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -29,51 +29,77 @@
|
|||
/**
|
||||
FIXME: Need documentation
|
||||
**/
|
||||
EFI_STATUS TZPCSetDecProtBits(UINTN TzpcBase, UINTN TzpcId, UINTN Bits) {
|
||||
if (TzpcId > TZPC_DECPROT_MAX) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
EFI_STATUS
|
||||
TZPCSetDecProtBits (
|
||||
IN UINTN TzpcBase,
|
||||
IN UINTN TzpcId,
|
||||
IN UINTN Bits
|
||||
)
|
||||
{
|
||||
if (TzpcId > TZPC_DECPROT_MAX) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
MmioWrite32((UINTN)TzpcBase + TZPC_DECPROT0_SET_REG + (TzpcId * 0x0C), Bits);
|
||||
MmioWrite32 ((UINTN)TzpcBase + TZPC_DECPROT0_SET_REG + (TzpcId * 0x0C), Bits);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
FIXME: Need documentation
|
||||
**/
|
||||
EFI_STATUS TZPCClearDecProtBits(UINTN TzpcBase, UINTN TzpcId, UINTN Bits) {
|
||||
if (TzpcId> TZPC_DECPROT_MAX) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
EFI_STATUS
|
||||
TZPCClearDecProtBits (
|
||||
IN UINTN TzpcBase,
|
||||
IN UINTN TzpcId,
|
||||
IN UINTN Bits
|
||||
)
|
||||
{
|
||||
if (TzpcId> TZPC_DECPROT_MAX) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
MmioWrite32((UINTN)TzpcBase + TZPC_DECPROT0_CLEAR_REG + (TzpcId * 0x0C), Bits);
|
||||
MmioWrite32 ((UINTN)TzpcBase + TZPC_DECPROT0_CLEAR_REG + (TzpcId * 0x0C), Bits);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
FIXME: Need documentation
|
||||
**/
|
||||
UINT32 TZASCGetNumRegions(UINTN TzascBase) {
|
||||
return (MmioRead32((UINTN)TzascBase + TZASC_CONFIGURATION_REG) & 0xF);
|
||||
UINT32
|
||||
TZASCGetNumRegions (
|
||||
IN UINTN TzascBase
|
||||
)
|
||||
{
|
||||
return (MmioRead32 ((UINTN)TzascBase + TZASC_CONFIGURATION_REG) & 0xF);
|
||||
}
|
||||
|
||||
/**
|
||||
FIXME: Need documentation
|
||||
**/
|
||||
EFI_STATUS TZASCSetRegion(UINTN TzascBase, UINTN RegionId, UINTN Enabled, UINTN LowAddress, UINTN HighAddress, UINTN Size, UINTN Security) {
|
||||
UINT32* Region;
|
||||
EFI_STATUS
|
||||
TZASCSetRegion (
|
||||
IN INTN TzascBase,
|
||||
IN UINTN RegionId,
|
||||
IN UINTN Enabled,
|
||||
IN UINTN LowAddress,
|
||||
IN UINTN HighAddress,
|
||||
IN UINTN Size,
|
||||
IN UINTN Security
|
||||
)
|
||||
{
|
||||
UINT32* Region;
|
||||
|
||||
if (RegionId > TZASCGetNumRegions(TzascBase)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
if (RegionId > TZASCGetNumRegions(TzascBase)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
Region = (UINT32*)((UINTN)TzascBase + TZASC_REGIONS_REG + (RegionId * 0x10));
|
||||
Region = (UINT32*)((UINTN)TzascBase + TZASC_REGIONS_REG + (RegionId * 0x10));
|
||||
|
||||
MmioWrite32((UINTN)(Region), LowAddress&0xFFFF8000);
|
||||
MmioWrite32((UINTN)(Region), LowAddress&0xFFFF8000);
|
||||
MmioWrite32((UINTN)(Region+1), HighAddress);
|
||||
MmioWrite32((UINTN)(Region+2), ((Security & 0xF) <<28) | ((Size & 0x3F) << 1) | (Enabled & 0x1));
|
||||
|
||||
return EFI_SUCCESS;
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -34,8 +34,6 @@ typedef struct {
|
|||
} CPSR_CHAR;
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
Use the EFI Debug Image Table to lookup the FaultAddress and find which PE/COFF image
|
||||
it came from. As long as the PE/COFF image contains a debug directory entry a
|
||||
|
@ -61,7 +59,6 @@ GetImageName (
|
|||
UINTN Entry;
|
||||
CHAR8 *Address;
|
||||
|
||||
|
||||
DebugTable = gDebugImageTableHeader->EfiDebugImageInfoTable;
|
||||
if (DebugTable == NULL) {
|
||||
return NULL;
|
||||
|
@ -102,9 +99,9 @@ CpsrString (
|
|||
OUT CHAR8 *ReturnStr
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
CHAR8 *Str = ReturnStr;
|
||||
CHAR8 *ModeStr;
|
||||
UINTN Index;
|
||||
CHAR8* Str;
|
||||
CHAR8* ModeStr;
|
||||
CPSR_CHAR CpsrChar[] = {
|
||||
{ 31, 'n' },
|
||||
{ 30, 'z' },
|
||||
|
@ -119,6 +116,8 @@ CpsrString (
|
|||
{ 0, '?' }
|
||||
};
|
||||
|
||||
Str = ReturnStr;
|
||||
|
||||
for (Index = 0; CpsrChar[Index].BIT != 0; Index++, Str++) {
|
||||
*Str = CpsrChar[Index].Char;
|
||||
if ((Cpsr & (1 << CpsrChar[Index].BIT)) != 0) {
|
||||
|
@ -194,8 +193,7 @@ FaultStatusToString (
|
|||
return FaultSource;
|
||||
}
|
||||
|
||||
|
||||
CHAR8 *gExceptionTypeString[] = {
|
||||
STATIC CHAR8 *gExceptionTypeString[] = {
|
||||
"Reset",
|
||||
"Undefined OpCode",
|
||||
"SWI",
|
||||
|
@ -206,7 +204,6 @@ CHAR8 *gExceptionTypeString[] = {
|
|||
"FIQ"
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
This is the default action to take on an unexpected exception
|
||||
|
||||
|
@ -228,7 +225,7 @@ DefaultExceptionHandler (
|
|||
BOOLEAN DfsrWrite;
|
||||
UINT32 PcAdjust = 0;
|
||||
|
||||
DEBUG ((EFI_D_ERROR, "\n%a Exception PC at 0x%08x CPSR 0x%08x ", gExceptionTypeString[ExceptionType], SystemContext.SystemContextArm->PC, SystemContext.SystemContextArm->CPSR));
|
||||
Print(L"\n%a Exception PC at 0x%08x CPSR 0x%08x ", gExceptionTypeString[ExceptionType], SystemContext.SystemContextArm->PC, SystemContext.SystemContextArm->CPSR);
|
||||
DEBUG_CODE_BEGIN ();
|
||||
CHAR8 *Pdb;
|
||||
UINT32 ImageBase;
|
||||
|
@ -249,10 +246,10 @@ DefaultExceptionHandler (
|
|||
|
||||
//
|
||||
// A PE/COFF image loads its headers into memory so the headers are
|
||||
// included in the linked addressess. ELF and Mach-O images do not
|
||||
// included in the linked addresses. ELF and Mach-O images do not
|
||||
// include the headers so the first byte of the image is usually
|
||||
// text (code). If you look at link maps from ELF or Mach-O images
|
||||
// you need to subtact out the size of the PE/COFF header to get
|
||||
// you need to subtract out the size of the PE/COFF header to get
|
||||
// get the offset that matches the link map.
|
||||
//
|
||||
DEBUG ((EFI_D_ERROR, "loaded at 0x%08x (PE/COFF offset) 0x%x (ELF or Mach-O offset) 0x%x", ImageBase, Offset, Offset - PeCoffSizeOfHeader));
|
||||
|
|
|
@ -89,7 +89,7 @@ DeCygwinPathIfNeeded (
|
|||
Ptr[9] = Ptr[10];
|
||||
Ptr[10] = ':';
|
||||
|
||||
// switch path seperators
|
||||
// switch path separators
|
||||
for (Index = 11; Index < Len; Index++) {
|
||||
if (Ptr[Index] == '/') {
|
||||
Ptr[Index] = '\\' ;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
#/** @file
|
||||
# Arm Versatile Express package.
|
||||
#
|
||||
# Copyright (c) 2011, ARM Limited. All rights reserved.
|
||||
#
|
||||
|
@ -32,7 +31,7 @@
|
|||
Include # Root include for the package
|
||||
|
||||
[Guids.common]
|
||||
gArmPlatformTokenSpaceGuid = { 0x9c0aaed4, 0x74c5, 0x4043, { 0xb4, 0x17, 0xa3, 0x22, 0x38, 0x14, 0xce, 0x76 } }
|
||||
gArmPlatformTokenSpaceGuid = { 0x9c0aaed4, 0x74c5, 0x4043, { 0xb4, 0x17, 0xa3, 0x22, 0x38, 0x14, 0xce, 0x76 } }
|
||||
#
|
||||
# Following Guid must match FILE_GUID in MdeModulePkg/Universal/Variable/RuntimeDxe/VariableRuntimeDxe.inf
|
||||
#
|
||||
|
@ -46,7 +45,6 @@
|
|||
gArmPlatformTokenSpaceGuid.PcdSystemMemoryInitializeInSec|FALSE|BOOLEAN|0x00000002
|
||||
gArmPlatformTokenSpaceGuid.PcdSendSgiToBringUpSecondaryCores|FALSE|BOOLEAN|0x00000004
|
||||
|
||||
|
||||
[PcdsFixedAtBuild.common]
|
||||
# These PCDs should be FeaturePcds. But we used these PCDs as an '#if' in an ASM file.
|
||||
# Using a FeaturePcd make a '(BOOLEAN) casting for its value which is not understood by the preprocessor.
|
||||
|
|
|
@ -142,6 +142,8 @@ LcdPlatformGetVram (
|
|||
EFI_STATUS Status;
|
||||
EFI_CPU_ARCH_PROTOCOL *Cpu;
|
||||
|
||||
Status = EFI_SUCCESS;
|
||||
|
||||
// Is it on the motherboard or on the daughterboard?
|
||||
switch(PL111_CLCD_SITE) {
|
||||
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
UefiDriverEntryPoint
|
||||
DebugLib
|
||||
PrintLib
|
||||
BaseLib
|
||||
|
||||
[Guids]
|
||||
gEfiFileSystemInfoGuid
|
||||
|
|
|
@ -239,7 +239,7 @@ GenerateDeviceDescriptionName (
|
|||
//TODO: Fixme. we must find the best langague
|
||||
Status = ComponentName2Protocol->GetDriverName (ComponentName2Protocol,"en",&DriverName);
|
||||
if (!EFI_ERROR(Status)) {
|
||||
StrnCpy (Description,DriverName,BOOT_DEVICE_DESCRIPTION_MAX);
|
||||
StrnCpy (Description, DriverName, BOOT_DEVICE_DESCRIPTION_MAX);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -254,7 +254,7 @@ GenerateDeviceDescriptionName (
|
|||
DevicePathNode = GetLastDevicePathNode (DevicePathProtocol);
|
||||
Status = gBS->LocateProtocol (&gEfiDevicePathToTextProtocolGuid, NULL, (VOID **)&DevicePathToTextProtocol);
|
||||
ASSERT_EFI_ERROR(Status);
|
||||
DevicePathTxt = DevicePathToTextProtocol->ConvertDevicePathToText(DevicePathNode,TRUE,TRUE);
|
||||
DevicePathTxt = DevicePathToTextProtocol->ConvertDevicePathToText (DevicePathNode, TRUE, TRUE);
|
||||
StrnCpy (Description, DevicePathTxt, BOOT_DEVICE_DESCRIPTION_MAX);
|
||||
FreePool (DevicePathTxt);
|
||||
}
|
||||
|
|
|
@ -42,6 +42,9 @@
|
|||
|
||||
#define IS_ARM_BDS_BOOTENTRY(ptr) (ReadUnaligned32 ((CONST UINT32*)&((ARM_BDS_LOADER_OPTIONAL_DATA*)((ptr)->OptionalData))->Header.Signature) == ARM_BDS_OPTIONAL_DATA_SIGNATURE)
|
||||
|
||||
#define UPDATE_BOOT_ENTRY L"Update entry: "
|
||||
#define DELETE_BOOT_ENTRY L"Delete entry: "
|
||||
|
||||
typedef enum {
|
||||
BDS_LOADER_EFI_APPLICATION = 0,
|
||||
BDS_LOADER_KERNEL_LINUX_ATAG,
|
||||
|
|
|
@ -315,7 +315,7 @@ BootMenuRemoveBootOption (
|
|||
EFI_STATUS Status;
|
||||
BDS_LOAD_OPTION_ENTRY* BootOptionEntry;
|
||||
|
||||
Status = BootMenuSelectBootOption (BootOptionsList, L"Delete entry: ", FALSE, &BootOptionEntry);
|
||||
Status = BootMenuSelectBootOption (BootOptionsList, DELETE_BOOT_ENTRY, FALSE, &BootOptionEntry);
|
||||
if (EFI_ERROR(Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
@ -352,7 +352,7 @@ BootMenuUpdateBootOption (
|
|||
UINTN InitrdSize;
|
||||
UINTN CmdLineSize;
|
||||
|
||||
Status = BootMenuSelectBootOption (BootOptionsList, L"Update entry: ", TRUE, &BootOptionEntry);
|
||||
Status = BootMenuSelectBootOption (BootOptionsList, UPDATE_BOOT_ENTRY, TRUE, &BootOptionEntry);
|
||||
if (EFI_ERROR(Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
@ -476,8 +476,7 @@ BootMenuManager (
|
|||
BootManagerEntries[OptionSelected-1].Callback (BootOptionsList);
|
||||
}
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
// Should never go here
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
|
@ -619,6 +618,5 @@ BootMenuMain (
|
|||
Status = BootOptionStart (BootOption);
|
||||
}
|
||||
}
|
||||
|
||||
return Status;
|
||||
// Should never go here
|
||||
}
|
||||
|
|
|
@ -209,7 +209,7 @@ BootDeviceGetDeviceSupport (
|
|||
|
||||
// Find which supported device is the most appropriate
|
||||
for (Index = 0; Index < BDS_DEVICE_MAX; Index++) {
|
||||
if (BdsLoadOptionSupportList[Index].IsSupported(BootOption)) {
|
||||
if (BdsLoadOptionSupportList[Index].IsSupported (BootOption)) {
|
||||
*DeviceSupport = &BdsLoadOptionSupportList[Index];
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -29,16 +29,16 @@
|
|||
|
||||
#include <Drivers/SP804Timer.h>
|
||||
|
||||
#define SP804_TIMER_PERIODIC_BASE (UINTN)PcdGet32 (PcdSP804TimerPeriodicBase)
|
||||
#define SP804_TIMER_METRONOME_BASE (UINTN)PcdGet32 (PcdSP804TimerMetronomeBase)
|
||||
#define SP804_TIMER_PERFORMANCE_BASE (UINTN)PcdGet32 (PcdSP804TimerPerformanceBase)
|
||||
#define SP804_TIMER_PERIODIC_BASE ((UINTN)PcdGet32 (PcdSP804TimerPeriodicBase))
|
||||
#define SP804_TIMER_METRONOME_BASE ((UINTN)PcdGet32 (PcdSP804TimerMetronomeBase))
|
||||
#define SP804_TIMER_PERFORMANCE_BASE ((UINTN)PcdGet32 (PcdSP804TimerPerformanceBase))
|
||||
|
||||
// The notification function to call on every timer interrupt.
|
||||
volatile EFI_TIMER_NOTIFY mTimerNotifyFunction = (EFI_TIMER_NOTIFY)NULL;
|
||||
EFI_EVENT EfiExitBootServicesEvent = (EFI_EVENT)NULL;
|
||||
EFI_TIMER_NOTIFY mTimerNotifyFunction = (EFI_TIMER_NOTIFY)NULL;
|
||||
EFI_EVENT EfiExitBootServicesEvent = (EFI_EVENT)NULL;
|
||||
|
||||
// The current period of the timer interrupt
|
||||
volatile UINT64 mTimerPeriod = 0;
|
||||
UINT64 mTimerPeriod = 0;
|
||||
|
||||
// Cached copy of the Hardware Interrupt protocol instance
|
||||
EFI_HARDWARE_INTERRUPT_PROTOCOL *gInterrupt = NULL;
|
||||
|
@ -78,10 +78,10 @@ TimerInterruptHandler (
|
|||
|
||||
// If the interrupt is shared then we must check if this interrupt source is the one associated to this Timer
|
||||
if (MmioRead32 (SP804_TIMER_PERIODIC_BASE + SP804_TIMER_MSK_INT_STS_REG) != 0) {
|
||||
// clear the periodic interrupt
|
||||
// Clear the periodic interrupt
|
||||
MmioWrite32 (SP804_TIMER_PERIODIC_BASE + SP804_TIMER_INT_CLR_REG, 0);
|
||||
|
||||
// signal end of interrupt early to help avoid losing subsequent ticks from long duration handlers
|
||||
// Signal end of interrupt early to help avoid losing subsequent ticks from long duration handlers
|
||||
gInterrupt->EndOfInterrupt (gInterrupt, Source);
|
||||
|
||||
if (mTimerNotifyFunction) {
|
||||
|
@ -213,15 +213,13 @@ TimerDriverSetTimerPeriod (
|
|||
// Disable timer 0/1 interrupt for a TimerPeriod of 0
|
||||
Status = gInterrupt->DisableInterruptSource (gInterrupt, gVector);
|
||||
} else {
|
||||
// Convert TimerPeriod into 1MHz clock counts (us units = 100ns units / 10)
|
||||
// Convert TimerPeriod into 1MHz clock counts (us units = 100ns units * 10)
|
||||
TimerTicks = DivU64x32 (TimerPeriod, 10);
|
||||
TimerTicks = MultU64x32 (TimerTicks, PcdGet32(PcdSP804TimerFrequencyInMHz));
|
||||
|
||||
// if it's larger than 32-bits, pin to highest value
|
||||
if (TimerTicks > 0xffffffff) {
|
||||
|
||||
TimerTicks = 0xffffffff;
|
||||
|
||||
}
|
||||
|
||||
// Program the SP804 timer with the new count value
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
DebugAgentLib
|
||||
IoLib
|
||||
PrintLib
|
||||
SerialPortLib
|
||||
|
||||
[Ppis]
|
||||
gEfiTemporaryRamSupportPpiGuid
|
||||
|
@ -62,6 +63,3 @@
|
|||
|
||||
gArmTokenSpaceGuid.PcdGicDistributorBase
|
||||
gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase
|
||||
|
||||
gArmTokenSpaceGuid.PcdNormalFvBaseAddress
|
||||
gArmTokenSpaceGuid.PcdNormalFvSize
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include <PiPei.h>
|
||||
|
||||
#include <Library/DebugAgentLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/PrePiLib.h>
|
||||
#include <Library/IoLib.h>
|
||||
#include <Library/PrintLib.h>
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
|
||||
|
||||
CacheMaintenanceLib|ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.inf
|
||||
DefaultExceptioHandlerLib|ArmPkg/Library/DefaultExceptionHandlerLib/DefaultExceptionHandlerLib.inf
|
||||
DefaultExceptionHandlerLib|ArmPkg/Library/DefaultExceptionHandlerLib/DefaultExceptionHandlerLib.inf
|
||||
PrePiLib|EmbeddedPkg/Library/PrePiLib/PrePiLib.inf
|
||||
|
||||
SerialPortLib|Omap35xxPkg/Library/SerialPortLib/SerialPortLib.inf
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
|
||||
|
||||
CacheMaintenanceLib|ArmPkg/Library/ArmCacheMaintenanceLib/ArmCacheMaintenanceLib.inf
|
||||
DefaultExceptioHandlerLib|ArmPkg/Library/DefaultExceptionHandlerLib/DefaultExceptionHandlerLib.inf
|
||||
DefaultExceptionHandlerLib|ArmPkg/Library/DefaultExceptionHandlerLib/DefaultExceptionHandlerLib.inf
|
||||
PrePiLib|EmbeddedPkg/Library/PrePiLib/PrePiLib.inf
|
||||
|
||||
SerialPortLib|Omap35xxPkg/Library/SerialPortLib/SerialPortLib.inf
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
|
||||
@param Argc Number of command arguments in Argv
|
||||
@param Argv Array of strings that represent the parsed command line.
|
||||
Argv[0] is the comamnd name
|
||||
Argv[0] is the command name
|
||||
|
||||
@return EFI_SUCCESS
|
||||
|
||||
|
@ -122,7 +122,7 @@ EblSymbolTable (
|
|||
|
||||
@param Argc Number of command arguments in Argv
|
||||
@param Argv Array of strings that represent the parsed command line.
|
||||
Argv[0] is the comamnd name
|
||||
Argv[0] is the command name
|
||||
|
||||
@return EFI_SUCCESS
|
||||
|
||||
|
@ -204,7 +204,7 @@ CHAR8 *mTokenList[] = {
|
|||
|
||||
@param Argc Number of command arguments in Argv
|
||||
@param Argv Array of strings that represent the parsed command line.
|
||||
Argv[0] is the comamnd name
|
||||
Argv[0] is the command name
|
||||
|
||||
@return EFI_SUCCESS
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
/**
|
||||
Dump memory
|
||||
|
||||
Argv[0] - "md"[.#] # is optiona width 1, 2, 4, or 8. Default 1
|
||||
Argv[0] - "md"[.#] # is optional width 1, 2, 4, or 8. Default 1
|
||||
Argv[1] - Hex Address to dump
|
||||
Argv[2] - Number of hex bytes to dump (0x20 is default)
|
||||
|
||||
|
@ -34,7 +34,7 @@
|
|||
|
||||
@param Argc Number of command arguments in Argv
|
||||
@param Argv Array of strings that represent the parsed command line.
|
||||
Argv[0] is the comamnd name
|
||||
Argv[0] is the command name
|
||||
|
||||
@return EFI_SUCCESS
|
||||
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
|
||||
**/
|
||||
|
||||
#include "Ebl.h"
|
||||
|
||||
#define CMD_SEPARATOR ';'
|
||||
#define MAX_ARGS 32
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
|
||||
**/
|
||||
|
||||
#include "Ebl.h"
|
||||
|
||||
/**
|
||||
Entry point with Argc, Argv. Put your code here.
|
||||
|
|
|
@ -172,9 +172,6 @@
|
|||
gEmbeddedTokenSpaceGuid.PcdPrePiHobBase|0
|
||||
gEmbeddedTokenSpaceGuid.PcdPrePiStackBase|0
|
||||
gEmbeddedTokenSpaceGuid.PcdPrePiStackSize|0
|
||||
gEmbeddedTokenSpaceGuid.PcdPrePiTempMemorySize|0
|
||||
gEmbeddedTokenSpaceGuid.PcdPrePiBfvBaseAddress|0
|
||||
gEmbeddedTokenSpaceGuid.PcdPrePiBfvSize|0
|
||||
|
||||
#
|
||||
# Optinal feature to help prevent EFI memory map fragments
|
||||
|
|
|
@ -195,7 +195,7 @@ BasicReadRegister (
|
|||
}
|
||||
|
||||
|
||||
/** ‘p n’
|
||||
/**
|
||||
Reads the n-th register's value into an output buffer and sends it as a packet
|
||||
@param SystemContext Register content at time of the exception
|
||||
@param InBuffer Pointer to the input buffer received from gdb server
|
||||
|
@ -225,7 +225,7 @@ ReadNthRegister (
|
|||
}
|
||||
|
||||
|
||||
/** ‘g’
|
||||
/**
|
||||
Reads the general registers into an output buffer and sends it as a packet
|
||||
@param SystemContext Register content at time of the exception
|
||||
**/
|
||||
|
@ -452,7 +452,7 @@ RemoveSingleStep (
|
|||
|
||||
|
||||
|
||||
/** ‘c [addr ]’
|
||||
/**
|
||||
Continue. addr is Address to resume. If addr is omitted, resume at current
|
||||
Address.
|
||||
|
||||
|
|
|
@ -132,9 +132,8 @@ GdbStubEntry (
|
|||
Status = DebugSupport->GetMaximumProcessorIndex (DebugSupport, &gMaxProcessorIndex);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
// Make this an EFI_D_INFO after we get everything debugged.
|
||||
DEBUG ((EFI_D_ERROR, "Debug Support Protocol ISA %x\n", DebugSupport->Isa));
|
||||
DEBUG ((EFI_D_ERROR, "Debug Support Protocol Processor Index %d\n", gMaxProcessorIndex));
|
||||
DEBUG ((EFI_D_INFO, "Debug Support Protocol ISA %x\n", DebugSupport->Isa));
|
||||
DEBUG ((EFI_D_INFO, "Debug Support Protocol Processor Index %d\n", gMaxProcessorIndex));
|
||||
|
||||
// Call processor-specific init routine
|
||||
InitializeProcessor();
|
||||
|
|
|
@ -210,7 +210,7 @@ BasicReadRegister (
|
|||
}
|
||||
|
||||
|
||||
/** ‘p n’
|
||||
/**
|
||||
Reads the n-th register's value into an output buffer and sends it as a packet
|
||||
@param SystemContext Register content at time of the exception
|
||||
@param InBuffer Pointer to the input buffer received from gdb server
|
||||
|
@ -240,7 +240,7 @@ ReadNthRegister (
|
|||
}
|
||||
|
||||
|
||||
/** ‘g’
|
||||
/**
|
||||
Reads the general registers into an output buffer and sends it as a packet
|
||||
@param SystemContext Register content at time of the exception
|
||||
**/
|
||||
|
@ -390,7 +390,7 @@ WriteGeneralRegisters (
|
|||
|
||||
|
||||
|
||||
/** ‘c [addr ]’
|
||||
/**
|
||||
Continue. addr is Address to resume. If addr is omitted, resume at current
|
||||
Address.
|
||||
|
||||
|
|
|
@ -678,7 +678,6 @@ GdbFWrite (
|
|||
|
||||
case 'F':
|
||||
return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,11 +37,11 @@ SerialPortInitialize (
|
|||
/**
|
||||
Write data to serial device.
|
||||
|
||||
@param Buffer Point of data buffer which need to be writed.
|
||||
@param Buffer Point of data buffer which need to be written.
|
||||
@param NumberOfBytes Number of output bytes which are cached in Buffer.
|
||||
|
||||
@retval 0 Write data failed.
|
||||
@retval !0 Actual number of bytes writed to serial device.
|
||||
@retval !0 Actual number of bytes written to serial device.
|
||||
|
||||
**/
|
||||
UINTN
|
||||
|
@ -56,13 +56,13 @@ SerialPortWrite (
|
|||
|
||||
|
||||
/**
|
||||
Read data from serial device and save the datas in buffer.
|
||||
Read data from serial device and save the data in buffer.
|
||||
|
||||
@param Buffer Point of data buffer which need to be writed.
|
||||
@param Buffer Point of data buffer which need to be written.
|
||||
@param NumberOfBytes Number of output bytes which are cached in Buffer.
|
||||
|
||||
@retval 0 Read data failed.
|
||||
@retval !0 Aactual number of bytes read from serial device.
|
||||
@retval !0 Actual number of bytes read from serial device.
|
||||
|
||||
**/
|
||||
UINTN
|
||||
|
|
|
@ -25,121 +25,146 @@
|
|||
CHAR16* mLogBuffer = NULL;
|
||||
UINTN mLogRemainChar = 0;
|
||||
|
||||
CHAR16* DiagnosticInitLog(UINTN MaxBufferChar) {
|
||||
mLogRemainChar = MaxBufferChar;
|
||||
mLogBuffer = AllocatePool ((UINTN)MaxBufferChar * sizeof(CHAR16));
|
||||
return mLogBuffer;
|
||||
CHAR16*
|
||||
DiagnosticInitLog (
|
||||
UINTN MaxBufferChar
|
||||
)
|
||||
{
|
||||
mLogRemainChar = MaxBufferChar;
|
||||
mLogBuffer = AllocatePool ((UINTN)MaxBufferChar * sizeof(CHAR16));
|
||||
return mLogBuffer;
|
||||
}
|
||||
|
||||
UINTN DiagnosticLog(CONST CHAR16* Str) {
|
||||
UINTN len = StrLen (Str);
|
||||
if (len <= mLogRemainChar) {
|
||||
mLogRemainChar -= len;
|
||||
StrCpy (mLogBuffer, Str);
|
||||
mLogBuffer += len;
|
||||
return len;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
UINTN
|
||||
DiagnosticLog (
|
||||
CONST CHAR16* Str
|
||||
)
|
||||
{
|
||||
UINTN len = StrLen (Str);
|
||||
if (len <= mLogRemainChar) {
|
||||
mLogRemainChar -= len;
|
||||
StrCpy (mLogBuffer, Str);
|
||||
mLogBuffer += len;
|
||||
return len;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
VOID GenerateRandomBuffer(VOID* Buffer, UINTN BufferSize) {
|
||||
UINT64 i;
|
||||
UINT64* Buffer64 = (UINT64*)Buffer;
|
||||
VOID
|
||||
GenerateRandomBuffer (
|
||||
VOID* Buffer,
|
||||
UINTN BufferSize
|
||||
)
|
||||
{
|
||||
UINT64 i;
|
||||
UINT64* Buffer64 = (UINT64*)Buffer;
|
||||
|
||||
for (i = 0; i < (BufferSize >> 3); i++) {
|
||||
*Buffer64 = i | (~i << 32);
|
||||
Buffer64++;
|
||||
}
|
||||
for (i = 0; i < (BufferSize >> 3); i++) {
|
||||
*Buffer64 = i | (~i << 32);
|
||||
Buffer64++;
|
||||
}
|
||||
}
|
||||
|
||||
BOOLEAN CompareBuffer(VOID *BufferA, VOID *BufferB, UINTN BufferSize) {
|
||||
UINTN i;
|
||||
UINT64* BufferA64 = (UINT64*)BufferA;
|
||||
UINT64* BufferB64 = (UINT64*)BufferB;
|
||||
BOOLEAN
|
||||
CompareBuffer (
|
||||
VOID *BufferA,
|
||||
VOID *BufferB,
|
||||
UINTN BufferSize
|
||||
)
|
||||
{
|
||||
UINTN i;
|
||||
UINT64* BufferA64 = (UINT64*)BufferA;
|
||||
UINT64* BufferB64 = (UINT64*)BufferB;
|
||||
|
||||
for (i = 0; i < (BufferSize >> 3); i++) {
|
||||
if (*BufferA64 != *BufferB64) {
|
||||
DEBUG((EFI_D_ERROR, "CompareBuffer: Error at %i", i));
|
||||
DEBUG((EFI_D_ERROR, "(0x%lX) != (0x%lX)\n", *BufferA64, *BufferB64));
|
||||
return FALSE;
|
||||
}
|
||||
BufferA64++;
|
||||
BufferB64++;
|
||||
for (i = 0; i < (BufferSize >> 3); i++) {
|
||||
if (*BufferA64 != *BufferB64) {
|
||||
DEBUG((EFI_D_ERROR, "CompareBuffer: Error at %i", i));
|
||||
DEBUG((EFI_D_ERROR, "(0x%lX) != (0x%lX)\n", *BufferA64, *BufferB64));
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
BufferA64++;
|
||||
BufferB64++;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
EFI_STATUS MmcReadWriteDataTest(MMC_HOST_INSTANCE *MmcHostInstance, EFI_LBA Lba, UINTN BufferSize) {
|
||||
VOID *BackBuffer;
|
||||
VOID *WriteBuffer;
|
||||
VOID *ReadBuffer;
|
||||
EFI_STATUS Status;
|
||||
EFI_STATUS
|
||||
MmcReadWriteDataTest (
|
||||
MMC_HOST_INSTANCE *MmcHostInstance,
|
||||
EFI_LBA Lba,
|
||||
UINTN BufferSize
|
||||
)
|
||||
{
|
||||
VOID *BackBuffer;
|
||||
VOID *WriteBuffer;
|
||||
VOID *ReadBuffer;
|
||||
EFI_STATUS Status;
|
||||
|
||||
// Check if a Media is Present
|
||||
if (!MmcHostInstance->BlockIo.Media->MediaPresent) {
|
||||
DiagnosticLog(L"ERROR: No Media Present\n");
|
||||
return EFI_NO_MEDIA;
|
||||
}
|
||||
// Check if a Media is Present
|
||||
if (!MmcHostInstance->BlockIo.Media->MediaPresent) {
|
||||
DiagnosticLog (L"ERROR: No Media Present\n");
|
||||
return EFI_NO_MEDIA;
|
||||
}
|
||||
|
||||
if (MmcHostInstance->State != MmcTransferState) {
|
||||
DiagnosticLog(L"ERROR: Not ready for Transfer state\n");
|
||||
return EFI_NOT_READY;
|
||||
}
|
||||
if (MmcHostInstance->State != MmcTransferState) {
|
||||
DiagnosticLog (L"ERROR: Not ready for Transfer state\n");
|
||||
return EFI_NOT_READY;
|
||||
}
|
||||
|
||||
BackBuffer = AllocatePool(BufferSize);
|
||||
WriteBuffer = AllocatePool(BufferSize);
|
||||
ReadBuffer = AllocatePool(BufferSize);
|
||||
BackBuffer = AllocatePool (BufferSize);
|
||||
WriteBuffer = AllocatePool (BufferSize);
|
||||
ReadBuffer = AllocatePool (BufferSize);
|
||||
|
||||
// Read (and save) buffer at a specific location
|
||||
Status = MmcReadBlocks (&(MmcHostInstance->BlockIo), MmcHostInstance->BlockIo.Media->MediaId,Lba,BufferSize,BackBuffer);
|
||||
if (Status != EFI_SUCCESS) {
|
||||
DiagnosticLog(L"ERROR: Fail to Read Block (1)\n");
|
||||
return Status;
|
||||
}
|
||||
// Read (and save) buffer at a specific location
|
||||
Status = MmcReadBlocks (&(MmcHostInstance->BlockIo), MmcHostInstance->BlockIo.Media->MediaId,Lba,BufferSize,BackBuffer);
|
||||
if (Status != EFI_SUCCESS) {
|
||||
DiagnosticLog (L"ERROR: Fail to Read Block (1)\n");
|
||||
return Status;
|
||||
}
|
||||
|
||||
// Write buffer at the same location
|
||||
GenerateRandomBuffer(WriteBuffer,BufferSize);
|
||||
Status = MmcWriteBlocks (&(MmcHostInstance->BlockIo), MmcHostInstance->BlockIo.Media->MediaId,Lba,BufferSize,WriteBuffer);
|
||||
if (Status != EFI_SUCCESS) {
|
||||
DiagnosticLog(L"ERROR: Fail to Write Block (1)\n");
|
||||
return Status;
|
||||
}
|
||||
// Write buffer at the same location
|
||||
GenerateRandomBuffer (WriteBuffer,BufferSize);
|
||||
Status = MmcWriteBlocks (&(MmcHostInstance->BlockIo), MmcHostInstance->BlockIo.Media->MediaId,Lba,BufferSize,WriteBuffer);
|
||||
if (Status != EFI_SUCCESS) {
|
||||
DiagnosticLog (L"ERROR: Fail to Write Block (1)\n");
|
||||
return Status;
|
||||
}
|
||||
|
||||
// Read the buffer at the same location
|
||||
Status = MmcReadBlocks (&(MmcHostInstance->BlockIo), MmcHostInstance->BlockIo.Media->MediaId,Lba,BufferSize,ReadBuffer);
|
||||
if (Status != EFI_SUCCESS) {
|
||||
DiagnosticLog(L"ERROR: Fail to Read Block (2)\n");
|
||||
return Status;
|
||||
}
|
||||
// Read the buffer at the same location
|
||||
Status = MmcReadBlocks (&(MmcHostInstance->BlockIo), MmcHostInstance->BlockIo.Media->MediaId,Lba,BufferSize,ReadBuffer);
|
||||
if (Status != EFI_SUCCESS) {
|
||||
DiagnosticLog (L"ERROR: Fail to Read Block (2)\n");
|
||||
return Status;
|
||||
}
|
||||
|
||||
// Check that is conform
|
||||
if (!CompareBuffer(ReadBuffer,WriteBuffer,BufferSize)) {
|
||||
DiagnosticLog(L"ERROR: Fail to Read/Write Block (1)\n");
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
// Check that is conform
|
||||
if (!CompareBuffer (ReadBuffer,WriteBuffer,BufferSize)) {
|
||||
DiagnosticLog (L"ERROR: Fail to Read/Write Block (1)\n");
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
// Restore content at the original location
|
||||
Status = MmcWriteBlocks (&(MmcHostInstance->BlockIo), MmcHostInstance->BlockIo.Media->MediaId,Lba,BufferSize,BackBuffer);
|
||||
if (Status != EFI_SUCCESS) {
|
||||
DiagnosticLog(L"ERROR: Fail to Write Block (2)\n");
|
||||
return Status;
|
||||
}
|
||||
// Restore content at the original location
|
||||
Status = MmcWriteBlocks (&(MmcHostInstance->BlockIo), MmcHostInstance->BlockIo.Media->MediaId,Lba,BufferSize,BackBuffer);
|
||||
if (Status != EFI_SUCCESS) {
|
||||
DiagnosticLog (L"ERROR: Fail to Write Block (2)\n");
|
||||
return Status;
|
||||
}
|
||||
|
||||
// Read the restored content
|
||||
Status = MmcReadBlocks (&(MmcHostInstance->BlockIo), MmcHostInstance->BlockIo.Media->MediaId,Lba,BufferSize,ReadBuffer);
|
||||
if (Status != EFI_SUCCESS) {
|
||||
DiagnosticLog(L"ERROR: Fail to Read Block (3)\n");
|
||||
return Status;
|
||||
}
|
||||
// Read the restored content
|
||||
Status = MmcReadBlocks (&(MmcHostInstance->BlockIo), MmcHostInstance->BlockIo.Media->MediaId,Lba,BufferSize,ReadBuffer);
|
||||
if (Status != EFI_SUCCESS) {
|
||||
DiagnosticLog (L"ERROR: Fail to Read Block (3)\n");
|
||||
return Status;
|
||||
}
|
||||
|
||||
// Check the content is correct
|
||||
if (!CompareBuffer(ReadBuffer,BackBuffer,BufferSize)) {
|
||||
DiagnosticLog(L"ERROR: Fail to Read/Write Block (2)\n");
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
// Check the content is correct
|
||||
if (!CompareBuffer (ReadBuffer,BackBuffer,BufferSize)) {
|
||||
DiagnosticLog (L"ERROR: Fail to Read/Write Block (2)\n");
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
return EFI_SUCCESS;
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
|
@ -155,55 +180,55 @@ MmcDriverDiagnosticsRunDiagnostics (
|
|||
OUT CHAR16 **Buffer
|
||||
)
|
||||
{
|
||||
LIST_ENTRY *CurrentLink;
|
||||
MMC_HOST_INSTANCE *MmcHostInstance;
|
||||
EFI_STATUS Status;
|
||||
LIST_ENTRY *CurrentLink;
|
||||
MMC_HOST_INSTANCE *MmcHostInstance;
|
||||
EFI_STATUS Status;
|
||||
|
||||
if (Language == NULL ||
|
||||
ErrorType == NULL ||
|
||||
Buffer == NULL ||
|
||||
ControllerHandle == NULL ||
|
||||
BufferSize == NULL) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
if ((Language == NULL) ||
|
||||
(ErrorType == NULL) ||
|
||||
(Buffer == NULL) ||
|
||||
(ControllerHandle == NULL) ||
|
||||
(BufferSize == NULL)) {
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
Status = EFI_SUCCESS;
|
||||
*ErrorType = NULL;
|
||||
*BufferSize = DIAGNOSTIC_LOGBUFFER_MAXCHAR;
|
||||
*Buffer = DiagnosticInitLog(DIAGNOSTIC_LOGBUFFER_MAXCHAR);
|
||||
Status = EFI_SUCCESS;
|
||||
*ErrorType = NULL;
|
||||
*BufferSize = DIAGNOSTIC_LOGBUFFER_MAXCHAR;
|
||||
*Buffer = DiagnosticInitLog (DIAGNOSTIC_LOGBUFFER_MAXCHAR);
|
||||
|
||||
DiagnosticLog(L"MMC Driver Diagnostics\n");
|
||||
DiagnosticLog (L"MMC Driver Diagnostics\n");
|
||||
|
||||
// For each MMC instance
|
||||
CurrentLink = mMmcHostPool.ForwardLink;
|
||||
while (CurrentLink != NULL && CurrentLink != &mMmcHostPool && (Status == EFI_SUCCESS)) {
|
||||
MmcHostInstance = MMC_HOST_INSTANCE_FROM_LINK(CurrentLink);
|
||||
ASSERT(MmcHostInstance != NULL);
|
||||
// For each MMC instance
|
||||
CurrentLink = mMmcHostPool.ForwardLink;
|
||||
while (CurrentLink != NULL && CurrentLink != &mMmcHostPool && (Status == EFI_SUCCESS)) {
|
||||
MmcHostInstance = MMC_HOST_INSTANCE_FROM_LINK(CurrentLink);
|
||||
ASSERT(MmcHostInstance != NULL);
|
||||
|
||||
// LBA=1 Size=BlockSize
|
||||
DiagnosticLog(L"MMC Driver Diagnostics - Test: First Block\n");
|
||||
Status = MmcReadWriteDataTest(MmcHostInstance, 1, MmcHostInstance->BlockIo.Media->BlockSize);
|
||||
// LBA=1 Size=BlockSize
|
||||
DiagnosticLog (L"MMC Driver Diagnostics - Test: First Block\n");
|
||||
Status = MmcReadWriteDataTest (MmcHostInstance, 1, MmcHostInstance->BlockIo.Media->BlockSize);
|
||||
|
||||
// LBA=2 Size=BlockSize
|
||||
DiagnosticLog(L"MMC Driver Diagnostics - Test: Second Block\n");
|
||||
Status = MmcReadWriteDataTest(MmcHostInstance, 2, MmcHostInstance->BlockIo.Media->BlockSize);
|
||||
// LBA=2 Size=BlockSize
|
||||
DiagnosticLog (L"MMC Driver Diagnostics - Test: Second Block\n");
|
||||
Status = MmcReadWriteDataTest (MmcHostInstance, 2, MmcHostInstance->BlockIo.Media->BlockSize);
|
||||
|
||||
// LBA=10 Size=BlockSize
|
||||
DiagnosticLog(L"MMC Driver Diagnostics - Test: Any Block\n");
|
||||
Status = MmcReadWriteDataTest(MmcHostInstance, MmcHostInstance->BlockIo.Media->LastBlock >> 1, MmcHostInstance->BlockIo.Media->BlockSize);
|
||||
// LBA=10 Size=BlockSize
|
||||
DiagnosticLog (L"MMC Driver Diagnostics - Test: Any Block\n");
|
||||
Status = MmcReadWriteDataTest (MmcHostInstance, MmcHostInstance->BlockIo.Media->LastBlock >> 1, MmcHostInstance->BlockIo.Media->BlockSize);
|
||||
|
||||
// LBA=LastBlock Size=BlockSize
|
||||
DiagnosticLog(L"MMC Driver Diagnostics - Test: Last Block\n");
|
||||
Status = MmcReadWriteDataTest(MmcHostInstance, MmcHostInstance->BlockIo.Media->LastBlock, MmcHostInstance->BlockIo.Media->BlockSize);
|
||||
// LBA=LastBlock Size=BlockSize
|
||||
DiagnosticLog (L"MMC Driver Diagnostics - Test: Last Block\n");
|
||||
Status = MmcReadWriteDataTest (MmcHostInstance, MmcHostInstance->BlockIo.Media->LastBlock, MmcHostInstance->BlockIo.Media->BlockSize);
|
||||
|
||||
// LBA=1 Size=2*BlockSize
|
||||
DiagnosticLog(L"MMC Driver Diagnostics - Test: First Block / 2 BlockSSize\n");
|
||||
Status = MmcReadWriteDataTest(MmcHostInstance, 1, 2*MmcHostInstance->BlockIo.Media->BlockSize);
|
||||
// LBA=1 Size=2*BlockSize
|
||||
DiagnosticLog (L"MMC Driver Diagnostics - Test: First Block / 2 BlockSSize\n");
|
||||
Status = MmcReadWriteDataTest (MmcHostInstance, 1, 2*MmcHostInstance->BlockIo.Media->BlockSize);
|
||||
|
||||
CurrentLink = CurrentLink->ForwardLink;
|
||||
}
|
||||
CurrentLink = CurrentLink->ForwardLink;
|
||||
}
|
||||
|
||||
return Status;
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -43,9 +43,6 @@
|
|||
IoLib
|
||||
ArmLib
|
||||
|
||||
[Guids]
|
||||
|
||||
|
||||
[Protocols]
|
||||
gHardwareInterruptProtocolGuid
|
||||
gEfiCpuArchProtocolGuid
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
@param Argc Number of command arguments in Argv
|
||||
@param Argv Array of strings that represent the parsed command line.
|
||||
Argv[0] is the comamnd name
|
||||
Argv[0] is the command name
|
||||
|
||||
@return EFI_SUCCESS
|
||||
|
||||
|
|
Loading…
Reference in New Issue