ArmPkg/Library/ArmSmcLib/ArmSmcLib.inf\r
ArmPkg/Library/ArmSmcLibNull/ArmSmcLibNull.inf\r
ArmPkg/Library/ArmHvcLib/ArmHvcLib.inf\r
+ ArmPkg/Library/ArmSvcLib/ArmSvcLib.inf\r
\r
ArmPkg/Filesystem/SemihostFs/SemihostFs.inf\r
\r
--- /dev/null
+//\r
+// Copyright (c) 2012 - 2017, 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
+.text\r
+.align 3\r
+\r
+GCC_ASM_EXPORT(ArmCallSvc)\r
+\r
+ASM_PFX(ArmCallSvc):\r
+ // Push frame pointer and return address on the stack\r
+ stp x29, x30, [sp, #-32]!\r
+ mov x29, sp\r
+\r
+ // Push x0 on the stack - The stack must always be quad-word aligned\r
+ str x0, [sp, #16]\r
+\r
+ // Load the SVC arguments values into the appropriate registers\r
+ ldp x6, x7, [x0, #48]\r
+ ldp x4, x5, [x0, #32]\r
+ ldp x2, x3, [x0, #16]\r
+ ldp x0, x1, [x0, #0]\r
+\r
+ svc #0\r
+\r
+ // Pop the ARM_SVC_ARGS structure address from the stack into x9\r
+ ldr x9, [sp, #16]\r
+\r
+ // Store the SVC returned values into the ARM_SVC_ARGS structure.\r
+ // A SVC call can return up to 4 values - we do not need to store back x4-x7.\r
+ stp x0, x1, [x9, #0]\r
+ stp x2, x3, [x9, #16]\r
+\r
+ mov x0, x9\r
+\r
+ ldp x29, x30, [sp], #32\r
+ ret\r
--- /dev/null
+//\r
+// Copyright (c) 2016 - 2017, 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
+.text\r
+.align 3\r
+\r
+GCC_ASM_EXPORT(ArmCallSvc)\r
+\r
+ASM_PFX(ArmCallSvc):\r
+ // r0 will be popped just after the SVC call\r
+ push {r0, r4-r8}\r
+\r
+ // Load the SVC arguments values into the appropriate registers\r
+ ldm r0, {r0-r7}\r
+\r
+ svc #0\r
+\r
+ // Load the ARM_SVC_ARGS structure address from the stack into r8\r
+ ldr r8, [sp]\r
+\r
+ // Load the SVC returned values into the appropriate registers\r
+ // A SVC call can return up to 4 values - we do not need to store back r4-r7.\r
+ stm r8, {r0-r3}\r
+\r
+ mov r0, r8\r
+\r
+ // Restore the registers r4-r8\r
+ pop {r1, r4-r8}\r
+ bx lr\r
--- /dev/null
+//\r
+// Copyright (c) 2016 - 2017, 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
+\r
+ INCLUDE AsmMacroExport.inc\r
+\r
+ RVCT_ASM_EXPORT ArmCallSvc\r
+ // r0 will be popped just after the SVC call\r
+ push {r0, r4-r8}\r
+\r
+ // Load the SVC arguments values into the appropriate registers\r
+ ldm r0, {r0-r7}\r
+\r
+ svc #0\r
+\r
+ // Load the ARM_SVC_ARGS structure address from the stack into r8\r
+ ldr r8, [sp]\r
+\r
+ // Load the SVC returned values into the appropriate registers\r
+ // A SVC call can return up to 4 values - we do not need to store back r4-r7.\r
+ stm r8, {r0-r3}\r
+\r
+ mov r0, r8\r
+\r
+ // Restore the registers r4-r8\r
+ pop {r1, r4-r8}\r
+ bx lr\r
+\r
+ END\r
--- /dev/null
+#/** @file\r
+#\r
+# Copyright (c) 2016 - 2017, ARM Ltd. All rights reserved.<BR>\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
+[Defines]\r
+ INF_VERSION = 0x0001001A\r
+ BASE_NAME = ArmSvcLib\r
+ FILE_GUID = 8e3618d7-f01d-4d65-b32b-4c70aacc8e49\r
+ MODULE_TYPE = BASE\r
+ VERSION_STRING = 1.0\r
+ LIBRARY_CLASS = ArmSvcLib\r
+\r
+[Sources.ARM]\r
+ Arm/ArmSvc.asm | RVCT\r
+ Arm/ArmSvc.S | GCC\r
+\r
+[Sources.AARCH64]\r
+ AArch64/ArmSvc.S\r
+\r
+[Packages]\r
+ ArmPkg/ArmPkg.dec\r
+ MdePkg/MdePkg.dec\r