Subversion Repositories HelenOS

Rev

Rev 2479 | Rev 2564 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2479 Rev 2486
Line 52... Line 52...
52
    volatile sysarg_t seconds1;
52
    volatile sysarg_t seconds1;
53
    volatile sysarg_t useconds;
53
    volatile sysarg_t useconds;
54
    volatile sysarg_t seconds2;
54
    volatile sysarg_t seconds2;
55
} *ktime = NULL;
55
} *ktime = NULL;
56
 
56
 
-
 
57
/** Add microseconds to given timeval.
-
 
58
 *
-
 
59
 * @param tv        Destination timeval.
-
 
60
 * @param usecs     Number of microseconds to add.
-
 
61
 */
-
 
62
void tv_add(struct timeval *tv, suseconds_t usecs)
-
 
63
{
-
 
64
    tv->tv_sec += usecs / 1000000;
-
 
65
    tv->tv_usec += usecs % 1000000;
-
 
66
    if (tv->tv_usec > 1000000) {
-
 
67
        tv->tv_sec++;
-
 
68
        tv->tv_usec -= 1000000;
-
 
69
    }
-
 
70
}
-
 
71
 
-
 
72
/** Subtract two timevals.
-
 
73
 *
-
 
74
 * @param tv1       First timeval.
-
 
75
 * @param tv2       Second timeval.
-
 
76
 *
-
 
77
 * @return      Return difference between tv1 and tv2 (tv1 - tv2) in
-
 
78
 *          microseconds.
-
 
79
 */
-
 
80
suseconds_t tv_sub(struct timeval *tv1, struct timeval *tv2)
-
 
81
{
-
 
82
    suseconds_t result;
-
 
83
 
-
 
84
    result = tv1->tv_usec - tv2->tv_usec;
-
 
85
    result += (tv1->tv_sec - tv2->tv_sec) * 1000000;
-
 
86
 
-
 
87
    return result;
-
 
88
}
-
 
89
 
-
 
90
/** Decide if one timeval is greater than the other.
-
 
91
 *
-
 
92
 * @param t1        First timeval.
-
 
93
 * @param t2        Second timeval.
-
 
94
 *
-
 
95
 * @return      Return true tv1 is greater than tv2. Otherwise return
-
 
96
 *          false.
-
 
97
 */
-
 
98
int tv_gt(struct timeval *tv1, struct timeval *tv2)
-
 
99
{
-
 
100
    if (tv1->tv_sec > tv2->tv_sec)
-
 
101
        return 1;
-
 
102
    if (tv1->tv_sec == tv2->tv_sec && tv1->tv_usec > tv2->tv_usec)
-
 
103
        return 1;
-
 
104
    return 0;
-
 
105
}
-
 
106
 
-
 
107
/** Decide if one timeval is greater than or equal to the other.
-
 
108
 *
-
 
109
 * @param tv1       First timeval.
-
 
110
 * @param tv2       Second timeval.
-
 
111
 *
-
 
112
 * @return      Return true if tv1 is greater than or equal to tv2.
-
 
113
 *          Otherwise return false.
-
 
114
 */
-
 
115
int tv_gteq(struct timeval *tv1, struct timeval *tv2)
-
 
116
{
-
 
117
    if (tv1->tv_sec > tv2->tv_sec)
-
 
118
        return 1;
-
 
119
    if (tv1->tv_sec == tv2->tv_sec && tv1->tv_usec >= tv2->tv_usec)
-
 
120
        return 1;
-
 
121
    return 0;
-
 
122
}
-
 
123
 
57
 
124
 
58
/** POSIX gettimeofday
125
/** POSIX gettimeofday
59
 *
126
 *
60
 * The time variables are memory mapped(RO) from kernel, which updates
127
 * The time variables are memory mapped(RO) from kernel, which updates
61
 * them periodically. As it is impossible to read 2 values atomically, we
128
 * them periodically. As it is impossible to read 2 values atomically, we