+++ /dev/null
-//\r
-// Copyright (c) 2011, ARM Limited. All rights reserved.\r
-// \r
-# This program and the accompanying materials \r
-# are licensed and made available under the terms and conditions of the BSD License \r
-# which accompanies this distribution. The full text of the license may be found at \r
-# http://opensource.org/licenses/bsd-license.php\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
-#\r
-#\r
-\r
-#include <AsmMacroIoLib.h>\r
-#include <Base.h>\r
-#include <AutoGen.h>\r
-\r
-#start of the code section\r
-.text\r
-.align 5\r
-\r
-# IMPORT\r
-GCC_ASM_IMPORT(PrePiCommonExceptionEntry)\r
-\r
-# EXPORT\r
-GCC_ASM_EXPORT(PrePiVectorTable)\r
-\r
-//============================================================\r
-//Default Exception Handlers\r
-//============================================================\r
- \r
-ASM_PFX(PrePiVectorTable):\r
- b _DefaultResetHandler\r
- b _DefaultUndefined\r
- b _DefaultSWI\r
- b _DefaultPrefetchAbort\r
- b _DefaultDataAbort\r
- b _DefaultReserved\r
- b _DefaultIrq\r
- b _DefaultFiq\r
-\r
-//\r
-// Default Exception handlers: There is no plan to return from any of these exceptions.\r
-// No context saving at all.\r
-//\r
-_DefaultResetHandler:\r
- mov r1, lr\r
- # Switch to SVC for common stack\r
- cps #0x13\r
- mov r0, #0\r
- blx ASM_PFX(PrePiCommonExceptionEntry)\r
-\r
-_DefaultUndefined:\r
- sub r1, LR, #4\r
- # Switch to SVC for common stack\r
- cps #0x13\r
- mov r0, #1\r
- blx ASM_PFX(PrePiCommonExceptionEntry)\r
-\r
-_DefaultSWI:\r
- sub r1, LR, #4\r
- # Switch to SVC for common stack\r
- cps #0x13\r
- mov r0, #2\r
- blx ASM_PFX(PrePiCommonExceptionEntry)\r
-\r
-_DefaultPrefetchAbort:\r
- sub r1, LR, #4\r
- # Switch to SVC for common stack\r
- cps #0x13\r
- mov r0, #3\r
- blx ASM_PFX(PrePiCommonExceptionEntry)\r
-\r
-_DefaultDataAbort:\r
- sub r1, LR, #8\r
- # Switch to SVC for common stack\r
- cps #0x13\r
- mov r0, #4\r
- blx ASM_PFX(PrePiCommonExceptionEntry)\r
-\r
-_DefaultReserved:\r
- mov r1, lr\r
- # Switch to SVC for common stack\r
- cps #0x13\r
- mov r0, #5\r
- blx ASM_PFX(PrePiCommonExceptionEntry)\r
-\r
-_DefaultIrq:\r
- sub r1, LR, #4\r
- # Switch to SVC for common stack\r
- cps #0x13\r
- mov r0, #6\r
- blx ASM_PFX(PrePiCommonExceptionEntry)\r
-\r
-_DefaultFiq:\r
- sub r1, LR, #4\r
- # Switch to SVC for common stack\r
- cps #0x13\r
- mov r0, #7\r
- blx ASM_PFX(PrePiCommonExceptionEntry)\r
-\r
+++ /dev/null
-//
-// Copyright (c) 2011, ARM 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.
-//
-//
-
-#include <AsmMacroIoLib.h>
-#include <Base.h>
-#include <AutoGen.h>
-
- IMPORT PrePiCommonExceptionEntry
- EXPORT PrePiVectorTable
-
- PRESERVE8
- AREA PrePeiCoreException, CODE, READONLY, CODEALIGN, ALIGN=5
-
-//============================================================
-//Default Exception Handlers
-//============================================================
-//TODO: there should be better way to handle the exceptions during the early stage. At the moment they are spinning in infinite loop
-
-PrePiVectorTable
- b _DefaultResetHandler
- b _DefaultUndefined
- b _DefaultSWI
- b _DefaultPrefetchAbort
- b _DefaultDataAbort
- b _DefaultReserved
- b _DefaultIrq
- b _DefaultFiq
-
-//
-// Default Exception handlers: There is no plan to return from any of these exceptions.
-// No context saving at all.
-//
-_DefaultResetHandler
- mov r1, lr
- cps #0x13 ; Switch to SVC for common stack
- mov r0, #0
- blx PrePiCommonExceptionEntry
-
-_DefaultUndefined
- sub r1, LR, #4
- cps #0x13 ; Switch to SVC for common stack
- mov r0, #1
- blx PrePiCommonExceptionEntry
-
-_DefaultSWI
- sub r1, LR, #4
- cps #0x13 ; Switch to SVC for common stack
- mov r0, #2
- blx PrePiCommonExceptionEntry
-
-_DefaultPrefetchAbort
- sub r1, LR, #4
- cps #0x13 ; Switch to SVC for common stack
- mov r0, #3
- blx PrePiCommonExceptionEntry
-
-_DefaultDataAbort
- sub r1, LR, #8
- cps #0x13 ; Switch to SVC for common stack
- mov r0, #4
- blx PrePiCommonExceptionEntry
-
-_DefaultReserved
- mov r1, lr
- cps #0x13 ; Switch to SVC for common stack
- mov r0, #5
- blx PrePiCommonExceptionEntry
-
-_DefaultIrq
- sub r1, LR, #4
- cps #0x13 ; Switch to SVC for common stack
- mov r0, #6
- blx PrePiCommonExceptionEntry
-
-_DefaultFiq
- sub r1, LR, #4
- cps #0x13 ; Switch to SVC for common stack
- mov r0, #7
- blx PrePiCommonExceptionEntry
-
- END
PrePi.c\r
ModuleEntryPoint.S | GCC\r
ModuleEntryPoint.asm | RVCT\r
- Exception.S | GCC\r
- Exception.asm | RVCT\r
MainMPCore.c\r
\r
[Packages]\r
PrePi.c\r
ModuleEntryPoint.S | GCC\r
ModuleEntryPoint.asm | RVCT\r
- Exception.asm | RVCT\r
- Exception.S | GCC\r
MainUniCore.c\r
\r
[Packages]\r
// Not used when PrePi in run in XIP mode\r
UINTN mGlobalVariableBase = 0;\r
\r
-VOID\r
-PrePiCommonExceptionEntry (\r
- IN UINT32 Entry,\r
- IN UINT32 LR\r
- );\r
-\r
EFI_STATUS\r
EFIAPI\r
ExtractGuidedSectionLibConstructor (\r
}\r
}\r
\r
- // Write VBAR - The Vector table must be 32-byte aligned\r
- ASSERT (((UINT32)PrePiVectorTable & ((1 << 5)-1)) == 0);\r
- ArmWriteVBar ((UINT32)PrePiVectorTable);\r
-\r
// If not primary Jump to Secondary Main\r
if (IS_PRIMARY_CORE(MpId)) {\r
// Goto primary Main.\r
ASSERT (FALSE);\r
}\r
\r
-VOID\r
-PrePiCommonExceptionEntry (\r
- IN UINT32 Entry,\r
- IN UINT32 LR\r
- )\r
-{\r
- CHAR8 Buffer[100];\r
- UINTN CharCount;\r
-\r
- switch (Entry) {\r
- case 0:\r
- CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"Reset Exception at 0x%X\n\r",LR);\r
- break;\r
- case 1:\r
- CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"Undefined Exception at 0x%X\n\r",LR);\r
- break;\r
- case 2:\r
- CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"SWI Exception at 0x%X\n\r",LR);\r
- break;\r
- case 3:\r
- CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"PrefetchAbort Exception at 0x%X\n\r",LR);\r
- break;\r
- case 4:\r
- CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"DataAbort Exception at 0x%X\n\r",LR);\r
- break;\r
- case 5:\r
- CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"Reserved Exception at 0x%X\n\r",LR);\r
- break;\r
- case 6:\r
- CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"IRQ Exception at 0x%X\n\r",LR);\r
- break;\r
- case 7:\r
- CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"FIQ Exception at 0x%X\n\r",LR);\r
- break;\r
- default:\r
- CharCount = AsciiSPrint (Buffer,sizeof (Buffer),"Unknown Exception at 0x%X\n\r",LR);\r
- break;\r
- }\r
- SerialPortWrite ((UINT8 *) Buffer, CharCount);\r
- while(1);\r
-}\r
/** @file\r
*\r
-* Copyright (c) 2011, ARM Limited. All rights reserved.\r
+* Copyright (c) 2011-2012, ARM Limited. All rights reserved.\r
*\r
* This program and the accompanying materials\r
* are licensed and made available under the terms and conditions of the BSD License\r
\r
#define SerialPrint(txt) SerialPortWrite (txt, AsciiStrLen(txt)+1);\r
\r
-// Vector Table for PrePi Phase\r
-VOID\r
-PrePiVectorTable (\r
- VOID\r
- );\r
-\r
RETURN_STATUS\r
EFIAPI\r
TimerConstructor (\r