Home | History | Annotate | Download | only in efi
      1 /*
      2  * Copyright (C) 2008 Michael Brown <mbrown (at) fensystems.co.uk>.
      3  *
      4  * This program is free software; you can redistribute it and/or
      5  * modify it under the terms of the GNU General Public License as
      6  * published by the Free Software Foundation; either version 2 of the
      7  * License, or any later version.
      8  *
      9  * This program is distributed in the hope that it will be useful, but
     10  * WITHOUT ANY WARRANTY; without even the implied warranty of
     11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     12  * General Public License for more details.
     13  *
     14  * You should have received a copy of the GNU General Public License
     15  * along with this program; if not, write to the Free Software
     16  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
     17  */
     18 
     19 FILE_LICENCE ( GPL2_OR_LATER );
     20 
     21 #include <gpxe/nap.h>
     22 #include <gpxe/efi/efi.h>
     23 
     24 /** @file
     25  *
     26  * gPXE CPU sleeping API for EFI
     27  *
     28  */
     29 
     30 /**
     31  * Sleep until next interrupt
     32  *
     33  */
     34 static void efix86_cpu_nap ( void ) {
     35 	/*
     36 	 * I can't find any EFI API that allows us to put the CPU to
     37 	 * sleep.  The CpuSleep() function is defined in CpuLib.h, but
     38 	 * isn't part of any exposed protocol so we have no way to
     39 	 * call it.
     40 	 *
     41 	 * The EFI shell doesn't seem to bother sleeping the CPU; it
     42 	 * just sits there idly burning power.
     43 	 *
     44 	 */
     45 	__asm__ __volatile__ ( "hlt" );
     46 }
     47 
     48 PROVIDE_NAP ( efix86, cpu_nap, efix86_cpu_nap );
     49