Home | History | Annotate | Download | only in core
      1 ;; -----------------------------------------------------------------------
      2 ;;
      3 ;;   Copyright 2009 Intel Corporation; author: H. Peter Anvin
      4 ;;
      5 ;;   This program is free software; you can redistribute it and/or modify
      6 ;;   it under the terms of the GNU General Public License as published by
      7 ;;   the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
      8 ;;   Boston MA 02110-1301, USA; either version 2 of the License, or
      9 ;;   (at your option) any later version; incorporated herein by reference.
     10 ;;
     11 ;; -----------------------------------------------------------------------
     12 
     13 ;;
     14 ;; timer.inc
     15 ;;
     16 ;; Very simple counting timer
     17 ;;
     18 ;; This lets us have a simple incrementing variable without worrying
     19 ;; about the BIOS_timer variable wrapping around at "midnight" and other
     20 ;; weird things.
     21 ;;
     22 ;; This also maintains a timer variable calibrated in milliseconds
     23 ;; (wraparound time = 49.7 days!)
     24 ;;
     25 
     26 		section .text16
     27 
     28 timer_init:
     29 		; Hook INT 1Ch
     30 		mov eax,[BIOS_timer_hook]
     31 		mov [BIOS_timer_next],eax
     32 		mov dword [BIOS_timer_hook],timer_irq
     33 		ret
     34 
     35 		global bios_timer_cleanup:function hidden
     36 bios_timer_cleanup:
     37 		; Unhook INT 1Ch
     38 		mov eax,[BIOS_timer_next]
     39 		mov [BIOS_timer_hook],eax
     40 		ret
     41 
     42 ;
     43 ; The specified frequency is 14.31818 MHz/12/65536; this turns out
     44 ; to be a period of 54.92542 ms, or 0x36.ece8(187c) hexadecimal.
     45 ;
     46 		global timer_irq:function hidden
     47 timer_irq:
     48 		inc dword [cs:__jiffies]
     49 		add word  [cs:__ms_timer_adj],0xece8
     50 		adc dword [cs:__ms_timer],0x36
     51 		jmp 0:0
     52 		global BIOS_timer_next:data hidden
     53 BIOS_timer_next	equ $-4
     54 
     55 		section .data16
     56 		alignz 4
     57 		global __jiffies:data hidden, __ms_timer
     58 __jiffies	dd 0			; Clock tick timer
     59 __ms_timer	dd 0			; Millisecond timer
     60 __ms_timer_adj	dw 0			; Millisecond timer correction factor
     61