comboot_int28:
sti
cld
- call do_idle
+ extern __idle
+ pm_call __idle
iret
;
%include "pm.inc" ; Protected mode
%include "bcopy32.inc" ; 32-bit bcopy
%include "strcpy.inc" ; strcpy()
-%include "idle.inc" ; Idle handling
%include "adv.inc" ; Auxillary Data Vector
%include "timer.inc" ; Timer handling
regs->eflags.l |= EFLAGS_ZF;
}
-extern void do_idle(void);
-
/*
* getchar: Read a character from keyboard or serial port
*/
memset(&ireg, 0, sizeof(ireg));
memset(&oreg, 0, sizeof(oreg));
while (1) {
- call16(do_idle, &zero_regs, NULL);
+ __idle();
ireg.eax.b[1] = 0x11; /* Poll keyboard */
__intcall(0x16, &ireg, &oreg);
#define TICKS_TO_IDLE 4 /* Also in idle.inc */
-extern jiffies_t _IdleTimer;
+static jiffies_t _IdleTimer;
__export uint16_t NoHalt = 0;
int (*idle_hook_func)(void);
+++ /dev/null
-;; -*- 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
-
- global do_idle:function hidden
-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
- pm_call pm_writestr
- mov si,sp
- add si,10
- mov cx,16
-.errloop:
- ss lodsw
- pm_call pm_writehex4
- dec cx
- jz .endloop
- mov al,' '
- pm_call pm_writechr
- jmp .errloop
-.endloop:
- pm_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:data hidden
-_IdleTimer dd 0
-
-hlt_err db 'ERROR: idle with IF=0', CR, LF, 0
-
- section .text16
.wait2: mov dx,[BIOS_timer]
.wait3: call pollchar
jnz .keypress
- call do_idle
+ pm_call __idle
cmp dx,[BIOS_timer]
je .wait3
loop .wait2,ecx