source: trunk/Softwares/Global.or32/src/c/service_clock.c @ 2

Last change on this file since 2 was 2, checked in by kane, 17 years ago

Import Morpheo

File size: 663 bytes
Line 
1#include <time.h>
2#include <errno.h>
3#include <sys/lock.h>
4#include "mapping_memory.h"
5#include "sim2os.h"
6#include "service_clock.h"
7
8unsigned int service_clock ()
9{
10  unsigned int * addr   = (unsigned int *)(SIM2OS_BASE);
11  unsigned int   result = -1;
12
13  __lock_init    (service_lock);
14 
15  __lock_acquire (service_lock);
16
17  *(addr+0) = (unsigned int)SERVICE_CLOCK;
18 
19  // memory synchronisation
20  // (else read (with an address that depend not of store address) can be lunch before a store)
21  asm("l.msync;");
22
23  result    = (clock_t) *(addr+1);
24 
25  if (result == (clock_t)-1)
26    errno = (int) *(addr+2);
27
28  __lock_release (service_lock);
29
30  return result;
31}
Note: See TracBrowser for help on using the repository browser.