3 #include <devices/timer.h>
4 #include <proto/exec.h>
6 #include <inline4/exec.h>
9 static struct MsgPort
*timer_mp
;
10 static struct timerequest
*timer_io
;
11 static struct Device
*timer_base
;
13 int setup_usleep(void) {
14 timer_mp
= CreateMsgPort();
15 timer_io
= (struct timerequest
*)CreateIORequest(timer_mp
, sizeof(*timer_io
));
17 if (!OpenDevice("timer.device", UNIT_MICROHZ
, &timer_io
->tr_node
, 0)) {
18 timer_base
= timer_io
->tr_node
.io_Device
;
25 void cleanup_usleep(void) {
27 CloseDevice(&timer_io
->tr_node
);
30 DeleteIORequest((struct IORequest
*)timer_io
);
32 DeleteMsgPort(timer_mp
);
36 int usleep(useconds_t usec
) {
37 timer_io
->tr_node
.io_Command
= TR_ADDREQUEST
;
38 timer_io
->tr_time
.tv_sec
= usec
/ 1000000UL;
39 timer_io
->tr_time
.tv_usec
= usec
% 1000000UL;
40 return DoIO(&timer_io
->tr_node
) ? -1 : 0;