1 /* ----------------------------------------------------------------------- * 2 * 3 * Copyright 2008 H. Peter Anvin - All Rights Reserved 4 * Copyright 2009-2010 Intel Corporation; author: H. Peter Anvin 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, 9 * Boston MA 02110-1301, USA; either version 2 of the License, or 10 * (at your option) any later version; incorporated herein by reference. 11 * 12 * ----------------------------------------------------------------------- */ 13 14 /* 15 * idle.c: 16 * 17 * This function provided protected-mode access to the idle handling. 18 * It needs to be carefully coordinated with idle.inc, which provides 19 * idle services to real-mode code. 20 */ 21 22 #include "core.h" 23 #include <sys/cpu.h> 24 25 #define TICKS_TO_IDLE 4 /* Also in idle.inc */ 26 27 static jiffies_t _IdleTimer; 28 __export uint16_t NoHalt = 0; 29 30 int (*idle_hook_func)(void); 31 reset_idle(void)32void reset_idle(void) 33 { 34 _IdleTimer = jiffies(); 35 sti(); /* Guard against BIOS/PXE brokenness... */ 36 } 37 __idle(void)38__export void __idle(void) 39 { 40 if (jiffies() - _IdleTimer < TICKS_TO_IDLE) 41 return; 42 43 if (idle_hook_func && idle_hook_func()) 44 return; /* Nonzero return = do not idle */ 45 46 sti(); 47 if (NoHalt) 48 cpu_relax(); 49 else 50 hlt(); 51 } 52