Add clock

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2009-12-09 17:58:48 +01:00
parent 52d67f54e0
commit d114e89ca8
5 changed files with 18 additions and 8 deletions

View file

@ -62,8 +62,6 @@ grub_uint64_t grub_mmap_get_upper (void);
extern grub_uint32_t EXPORT_VAR (grub_arch_memsize); extern grub_uint32_t EXPORT_VAR (grub_arch_memsize);
extern grub_uint32_t EXPORT_VAR (grub_arch_highmemsize); extern grub_uint32_t EXPORT_VAR (grub_arch_highmemsize);
extern grub_uint32_t EXPORT_VAR (grub_arch_busclock);
extern grub_uint32_t EXPORT_VAR (grub_arch_cpuclock);
#endif #endif

View file

@ -21,10 +21,13 @@
#include <grub/symbol.h> #include <grub/symbol.h>
#define GRUB_TICKS_PER_SECOND 1000 #define GRUB_TICKS_PER_SECOND (grub_arch_cpuclock / 2)
/* Return the real time in ticks. */ /* Return the real time in ticks. */
grub_uint32_t EXPORT_FUNC (grub_get_rtc) (void); grub_uint64_t EXPORT_FUNC (grub_get_rtc) (void);
extern grub_uint32_t EXPORT_VAR (grub_arch_busclock);
extern grub_uint32_t EXPORT_VAR (grub_arch_cpuclock);
static inline void static inline void
grub_cpu_idle(void) grub_cpu_idle(void)

View file

@ -23,7 +23,7 @@
#include <grub/symbol.h> #include <grub/symbol.h>
#include <grub/cpu/time.h> #include <grub/cpu/time.h>
#ifdef GRUB_MACHINE_EMU #if defined (GRUB_MACHINE_EMU) || defined (GRUB_UTIL)
#define GRUB_TICKS_PER_SECOND 100000 #define GRUB_TICKS_PER_SECOND 100000
#else #else
#include <grub/machine/time.h> #include <grub/machine/time.h>

View file

@ -28,12 +28,20 @@
#include <grub/machine/memory.h> #include <grub/machine/memory.h>
#include <grub/cpu/kernel.h> #include <grub/cpu/kernel.h>
grub_uint32_t /* FIXME: use interrupt to count high. */
grub_uint64_t
grub_get_rtc (void) grub_get_rtc (void)
{ {
static grub_uint64_t calln = 0; static grub_uint32_t high = 0;
static grub_uint32_t last = 0;
grub_uint32_t low;
return (calln++) >> 8; asm volatile ("mfc0 %0, $9": "=r" (low));
if (low < last)
high++;
last = low;
return (((grub_uint64_t) high) << 32) | low;
} }
grub_err_t grub_err_t

View file

@ -30,6 +30,7 @@
/* For frequencies. */ /* For frequencies. */
#include <grub/pci.h> #include <grub/pci.h>
#include <grub/machine/time.h>
#define ELF32_LOADMASK (0x00000000UL) #define ELF32_LOADMASK (0x00000000UL)
#define ELF64_LOADMASK (0x0000000000000000ULL) #define ELF64_LOADMASK (0x0000000000000000ULL)