diff options
Diffstat (limited to 'contrib/syslinux-4.02/core/idle.inc')
-rw-r--r-- | contrib/syslinux-4.02/core/idle.inc | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/contrib/syslinux-4.02/core/idle.inc b/contrib/syslinux-4.02/core/idle.inc new file mode 100644 index 0000000..9677c82 --- /dev/null +++ b/contrib/syslinux-4.02/core/idle.inc @@ -0,0 +1,81 @@ +;; -*- fundamental -*- --------------------------------------------------- +;; +;; Copyright 2008 H. Peter Anvin - All Rights Reserved +;; Copyright 2009-2010 Intel Corporation; author: H. Peter Anvin +;; +;; 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, Inc., 51 Franklin St, Fifth Floor, +;; Boston MA 02110-1301, USA; either version 2 of the License, or +;; (at your option) any later version; incorporated herein by reference. +;; +;; ----------------------------------------------------------------------- + + section .text16 +TICKS_TO_IDLE equ 4 ; Also in idle.c + +reset_idle: + push eax + mov eax,[cs:__jiffies] + mov [cs:_IdleTimer],eax + pop eax + sti ; Guard against BIOS/PXE brokenness... + ret + +do_idle: + push eax + push ds + push es + mov ax,cs + mov ds,ax + mov es,ax + pushf + pop ax + test ah,2 + jnz .ok + push si + push cx + mov si,hlt_err + call writestr + mov si,sp + add si,10 + mov cx,16 +.errloop: + ss lodsw + call writehex4 + dec cx + jz .endloop + mov al,' ' + call writechr + jmp .errloop +.endloop: + call crlf + pop cx + pop si + sti +.ok: + ; Don't spend time jumping to PM unless we're actually idle... + + mov eax,[__jiffies] + sub eax,[_IdleTimer] + cmp eax,TICKS_TO_IDLE + jb .done + + extern __idle + pm_call __idle +.done: + pop es + pop ds + pop eax +.ret: ret + + section .data16 + alignz 4 + global _IdleTimer +_IdleTimer dd 0 + global NoHalt +NoHalt dw 0 + +hlt_err db 'ERROR: idle with IF=0', CR, LF, 0 + + section .text16 |