1*3e236885SAxel Dörfler /* 2*3e236885SAxel Dörfler ** Copyright 2001, Travis Geiselbrecht. All rights reserved. 3*3e236885SAxel Dörfler ** Distributed under the terms of the NewOS License. 4*3e236885SAxel Dörfler */ 5*3e236885SAxel Dörfler 6*3e236885SAxel Dörfler 7*3e236885SAxel Dörfler #include <boot/stage2.h> 8*3e236885SAxel Dörfler #include <kernel.h> 9*3e236885SAxel Dörfler #include <debug.h> 10*3e236885SAxel Dörfler 11*3e236885SAxel Dörfler #include <timer.h> 12*3e236885SAxel Dörfler #include <arch/timer.h> 13*3e236885SAxel Dörfler 14*3e236885SAxel Dörfler 15*3e236885SAxel Dörfler static bigtime_t sTickRate; 16*3e236885SAxel Dörfler 17*3e236885SAxel Dörfler 18*3e236885SAxel Dörfler void arch_timer_set_hardware_timer(bigtime_t timeout)19*3e236885SAxel Dörflerarch_timer_set_hardware_timer(bigtime_t timeout) 20*3e236885SAxel Dörfler { 21*3e236885SAxel Dörfler bigtime_t new_val_64; 22*3e236885SAxel Dörfler 23*3e236885SAxel Dörfler if(timeout < 1000) 24*3e236885SAxel Dörfler timeout = 1000; 25*3e236885SAxel Dörfler 26*3e236885SAxel Dörfler new_val_64 = (timeout * sTickRate) / 1000000; 27*3e236885SAxel Dörfler 28*3e236885SAxel Dörfler asm("mtdec %0" :: "r"((uint32)new_val_64)); 29*3e236885SAxel Dörfler } 30*3e236885SAxel Dörfler 31*3e236885SAxel Dörfler 32*3e236885SAxel Dörfler void arch_timer_clear_hardware_timer()33*3e236885SAxel Dörflerarch_timer_clear_hardware_timer() 34*3e236885SAxel Dörfler { 35*3e236885SAxel Dörfler asm("mtdec %0" :: "r"(0x7fffffff)); 36*3e236885SAxel Dörfler } 37*3e236885SAxel Dörfler 38*3e236885SAxel Dörfler 39*3e236885SAxel Dörfler int arch_init_timer(kernel_args * ka)40*3e236885SAxel Dörflerarch_init_timer(kernel_args *ka) 41*3e236885SAxel Dörfler { 42*3e236885SAxel Dörfler sTickRate = ka->arch_args.time_base_frequency; 43*3e236885SAxel Dörfler 44*3e236885SAxel Dörfler return 0; 45*3e236885SAxel Dörfler } 46*3e236885SAxel Dörfler 47