dmi: check both the AC and ID flags at the same time
[syslinux.git] / core / idle.c
blob27cdfc6f052e913b64e62fbafa9bd8dce491f5d4
1 /* ----------------------------------------------------------------------- *
2 *
3 * Copyright 2008 H. Peter Anvin - All Rights Reserved
4 * Copyright 2009-2010 Intel Corporation; author: H. Peter Anvin
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.
12 * ----------------------------------------------------------------------- */
15 * idle.c:
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.
22 #include "core.h"
23 #include <x86/cpu.h>
25 #define TICKS_TO_IDLE 4 /* Also in idle.inc */
27 static jiffies_t _IdleTimer;
28 __export uint16_t NoHalt = 0;
30 int (*idle_hook_func)(void);
32 void reset_idle(void)
34 _IdleTimer = jiffies();
35 sti(); /* Guard against BIOS/PXE brokenness... */
38 __export void __idle(void)
40 if (jiffies() - _IdleTimer < TICKS_TO_IDLE)
41 return;
43 if (idle_hook_func && idle_hook_func())
44 return; /* Nonzero return = do not idle */
46 sti();
47 if (NoHalt)
48 cpu_relax();
49 else
50 hlt();