]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[loong64] Add CPU sleeping API for EFI LoongArch64
authorXiaotian Wu <wuxiaotian@loongson.cn>
Thu, 29 Jun 2023 14:49:27 +0000 (15:49 +0100)
committerMichael Brown <mcb30@ipxe.org>
Thu, 29 Jun 2023 14:53:33 +0000 (15:53 +0100)
Signed-off-by: Xiaotian Wu <wuxiaotian@loongson.cn>
Modified-by: Michael Brown <mcb30@ipxe.org>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/arch/loong64/Makefile
src/arch/loong64/include/bits/nap.h
src/arch/loong64/include/ipxe/efi/efiloong64_nap.h [new file with mode: 0644]
src/arch/loong64/interface/efi/efiloong64_nap.c [new file with mode: 0644]

index f2dfc76e957b14cd329fe98a78282a21fa33163f..fd0bf137fb435dcf07342d673d4dd9a5b5c18fe2 100644 (file)
@@ -20,6 +20,7 @@ CFLAGS                += -fshort-wchar
 
 # LoongArch64-specific directories containing source files
 SRCDIRS                += arch/loong64/core
+SRCDIRS                += arch/loong64/interface/efi
 
 # Include platform-specific Makefile
 MAKEDEPS       += arch/loong64/Makefile.$(PLATFORM)
index 91e255d96eb59ada6687e77e3cb3666ec5aa0d47..2deba3558534a3a5e52604975586a52afa4edc34 100644 (file)
@@ -9,4 +9,6 @@
 
 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 
-#endif /* _BITS_MAP_H */
+#include <ipxe/efi/efiloong64_nap.h>
+
+#endif /* _BITS_NAP_H */
diff --git a/src/arch/loong64/include/ipxe/efi/efiloong64_nap.h b/src/arch/loong64/include/ipxe/efi/efiloong64_nap.h
new file mode 100644 (file)
index 0000000..5c0d386
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef _IPXE_EFILOONG64_NAP_H
+#define _IPXE_EFILOONG64_NAP_H
+
+/** @file
+ *
+ * EFI CPU sleeping
+ *
+ */
+
+FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+
+#ifdef NAP_EFILOONG64
+#define NAP_PREFIX_efiloong64
+#else
+#define NAP_PREFIX_efiloong64 __efiloong64_
+#endif
+
+#endif /* _IPXE_EFILOONG64_NAP_H */
diff --git a/src/arch/loong64/interface/efi/efiloong64_nap.c b/src/arch/loong64/interface/efi/efiloong64_nap.c
new file mode 100644 (file)
index 0000000..5cd1c1b
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2023, Xiaotian Wu <wuxiaotian@loongson.cn>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ *
+ * You can also choose to distribute this program under the terms of
+ * the Unmodified Binary Distribution Licence (as given in the file
+ * COPYING.UBDL), provided that you have satisfied its requirements.
+ */
+
+FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+
+#include <ipxe/nap.h>
+#include <ipxe/efi/efi.h>
+
+/** @file
+ *
+ * iPXE CPU sleeping API for EFI
+ *
+ */
+
+/**
+ * Sleep until next interrupt
+ *
+ */
+static void efiloong64_cpu_nap ( void ) {
+       /*
+        * I can't find any EFI API that allows us to put the CPU to
+        * sleep.  The CpuSleep() function is defined in CpuLib.h, but
+        * isn't part of any exposed protocol so we have no way to
+        * call it.
+        *
+        * The EFI shell doesn't seem to bother sleeping the CPU; it
+        * just sits there idly burning power.
+        *
+        */
+       __asm__ __volatile__ ( "idle 0" );
+}
+
+PROVIDE_NAP ( efiloong64, cpu_nap, efiloong64_cpu_nap );