mirror of
				https://github.com/ipxe/ipxe.git
				synced 2025-10-31 08:21:32 +01:00 
			
		
		
		
	[loong64] Add CPU sleeping API for EFI LoongArch64
Signed-off-by: Xiaotian Wu <wuxiaotian@loongson.cn> Modified-by: Michael Brown <mcb30@ipxe.org> Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
		
							parent
							
								
									0c67a3632d
								
							
						
					
					
						commit
						6d98e0ca47
					
				| @ -20,6 +20,7 @@ CFLAGS		+= -fshort-wchar | |||||||
| 
 | 
 | ||||||
| # LoongArch64-specific directories containing source files
 | # LoongArch64-specific directories containing source files
 | ||||||
| SRCDIRS		+= arch/loong64/core | SRCDIRS		+= arch/loong64/core | ||||||
|  | SRCDIRS		+= arch/loong64/interface/efi | ||||||
| 
 | 
 | ||||||
| # Include platform-specific Makefile
 | # Include platform-specific Makefile
 | ||||||
| MAKEDEPS	+= arch/loong64/Makefile.$(PLATFORM) | MAKEDEPS	+= arch/loong64/Makefile.$(PLATFORM) | ||||||
|  | |||||||
| @ -9,4 +9,6 @@ | |||||||
| 
 | 
 | ||||||
| FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); | FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); | ||||||
| 
 | 
 | ||||||
| #endif /* _BITS_MAP_H */ | #include <ipxe/efi/efiloong64_nap.h> | ||||||
|  | 
 | ||||||
|  | #endif /* _BITS_NAP_H */ | ||||||
|  | |||||||
							
								
								
									
										18
									
								
								src/arch/loong64/include/ipxe/efi/efiloong64_nap.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/arch/loong64/include/ipxe/efi/efiloong64_nap.h
									
									
									
									
									
										Normal file
									
								
							| @ -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 */ | ||||||
							
								
								
									
										53
									
								
								src/arch/loong64/interface/efi/efiloong64_nap.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								src/arch/loong64/interface/efi/efiloong64_nap.c
									
									
									
									
									
										Normal file
									
								
							| @ -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 ); | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user