usr.sbin/vmd/i8253.c
101
evtimer_set(&i8253_channel[0].timer, i8253_fire, &i8253_channel[0]);
usr.sbin/vmd/i8253.c
102
evtimer_set(&i8253_channel[1].timer, i8253_fire, &i8253_channel[1]);
usr.sbin/vmd/i8253.c
103
evtimer_set(&i8253_channel[2].timer, i8253_fire, &i8253_channel[2]);
usr.sbin/vmd/i8253.c
128
i8253_channel[0].rbs = (data & TIMER_RB_C0) ? 1 : 0;
usr.sbin/vmd/i8253.c
129
i8253_channel[1].rbs = (data & TIMER_RB_C1) ? 1 : 0;
usr.sbin/vmd/i8253.c
130
i8253_channel[2].rbs = (data & TIMER_RB_C2) ? 1 : 0;
usr.sbin/vmd/i8253.c
138
timespecsub(&now, &i8253_channel[i].ts, &delta);
usr.sbin/vmd/i8253.c
141
if (i8253_channel[i].start)
usr.sbin/vmd/i8253.c
142
i8253_channel[i].olatch =
usr.sbin/vmd/i8253.c
143
i8253_channel[i].start -
usr.sbin/vmd/i8253.c
144
ticks % i8253_channel[i].start;
usr.sbin/vmd/i8253.c
146
i8253_channel[i].olatch = 0;
usr.sbin/vmd/i8253.c
174
if (i8253_channel[2].mode == TIMER_INTTC) {
usr.sbin/vmd/i8253.c
175
if (i8253_channel[2].state) {
usr.sbin/vmd/i8253.c
184
} else if (i8253_channel[2].mode == TIMER_SQWAVE) {
usr.sbin/vmd/i8253.c
186
timespecsub(&now, &i8253_channel[2].ts, &delta);
usr.sbin/vmd/i8253.c
189
if (i8253_channel[2].start) {
usr.sbin/vmd/i8253.c
190
cur = i8253_channel[2].start -
usr.sbin/vmd/i8253.c
191
ticks % i8253_channel[2].start;
usr.sbin/vmd/i8253.c
193
if (cur > i8253_channel[2].start / 2)
usr.sbin/vmd/i8253.c
255
timespecsub(&now, &i8253_channel[sel].ts,
usr.sbin/vmd/i8253.c
259
if (i8253_channel[sel].start) {
usr.sbin/vmd/i8253.c
260
i8253_channel[sel].olatch =
usr.sbin/vmd/i8253.c
261
i8253_channel[sel].start -
usr.sbin/vmd/i8253.c
262
ticks % i8253_channel[sel].start;
usr.sbin/vmd/i8253.c
264
i8253_channel[sel].olatch = 0;
usr.sbin/vmd/i8253.c
265
i8253_channel[sel].last_r = 1;
usr.sbin/vmd/i8253.c
272
i8253_channel[sel].last_w = 0;
usr.sbin/vmd/i8253.c
273
i8253_channel[sel].mode = (out_data & 0xe) >> 1;
usr.sbin/vmd/i8253.c
285
if (i8253_channel[sel].last_w == 0) {
usr.sbin/vmd/i8253.c
286
i8253_channel[sel].ilatch |= (out_data & 0xff);
usr.sbin/vmd/i8253.c
287
i8253_channel[sel].last_w = 1;
usr.sbin/vmd/i8253.c
289
i8253_channel[sel].ilatch |=
usr.sbin/vmd/i8253.c
291
i8253_channel[sel].start =
usr.sbin/vmd/i8253.c
292
i8253_channel[sel].ilatch;
usr.sbin/vmd/i8253.c
293
i8253_channel[sel].last_w = 0;
usr.sbin/vmd/i8253.c
295
if (i8253_channel[sel].start == 0)
usr.sbin/vmd/i8253.c
296
i8253_channel[sel].start = 0xffff;
usr.sbin/vmd/i8253.c
299
&i8253_channel[sel].ts);
usr.sbin/vmd/i8253.c
303
sel, i8253_channel[sel].mode,
usr.sbin/vmd/i8253.c
304
i8253_channel[sel].start);
usr.sbin/vmd/i8253.c
309
if (i8253_channel[sel].rbs) {
usr.sbin/vmd/i8253.c
310
i8253_channel[sel].rbs = 0;
usr.sbin/vmd/i8253.c
311
data = i8253_channel[sel].mode << 1;
usr.sbin/vmd/i8253.c
317
if (i8253_channel[sel].last_r == 0) {
usr.sbin/vmd/i8253.c
318
data = i8253_channel[sel].olatch >> 8;
usr.sbin/vmd/i8253.c
320
i8253_channel[sel].last_r = 1;
usr.sbin/vmd/i8253.c
322
data = i8253_channel[sel].olatch & 0xFF;
usr.sbin/vmd/i8253.c
324
i8253_channel[sel].last_r = 0;
usr.sbin/vmd/i8253.c
346
evtimer_del(&i8253_channel[chn].timer);
usr.sbin/vmd/i8253.c
349
i8253_channel[chn].in_use = 1;
usr.sbin/vmd/i8253.c
350
i8253_channel[chn].state = 0;
usr.sbin/vmd/i8253.c
351
tv.tv_usec = (i8253_channel[chn].start * NS_PER_TICK) / 1000;
usr.sbin/vmd/i8253.c
352
clock_gettime(CLOCK_MONOTONIC, &i8253_channel[chn].ts);
usr.sbin/vmd/i8253.c
353
evtimer_add(&i8253_channel[chn].timer, &tv);
usr.sbin/vmd/i8253.c
371
struct i8253_channel *ctr = (struct i8253_channel *)arg;
usr.sbin/vmd/i8253.c
388
evtimer_del(&i8253_channel[i].timer);
usr.sbin/vmd/i8253.c
39
struct i8253_channel i8253_channel[3];
usr.sbin/vmd/i8253.c
397
if (i8253_channel[i].in_use)
usr.sbin/vmd/i8253.c
81
memset(&i8253_channel, 0, sizeof(struct i8253_channel));
usr.sbin/vmd/i8253.c
82
clock_gettime(CLOCK_MONOTONIC, &i8253_channel[0].ts);
usr.sbin/vmd/i8253.c
83
i8253_channel[0].start = 0xFFFF;
usr.sbin/vmd/i8253.c
84
i8253_channel[0].mode = TIMER_INTTC;
usr.sbin/vmd/i8253.c
85
i8253_channel[0].last_r = 1;
usr.sbin/vmd/i8253.c
86
i8253_channel[0].vm_id = vm_id;
usr.sbin/vmd/i8253.c
87
i8253_channel[0].state = 0;
usr.sbin/vmd/i8253.c
89
i8253_channel[1].start = 0xFFFF;
usr.sbin/vmd/i8253.c
90
i8253_channel[1].mode = TIMER_INTTC;
usr.sbin/vmd/i8253.c
91
i8253_channel[1].last_r = 1;
usr.sbin/vmd/i8253.c
92
i8253_channel[1].vm_id = vm_id;
usr.sbin/vmd/i8253.c
93
i8253_channel[1].state = 0;
usr.sbin/vmd/i8253.c
95
i8253_channel[2].start = 0xFFFF;
usr.sbin/vmd/i8253.c
96
i8253_channel[2].mode = TIMER_INTTC;
usr.sbin/vmd/i8253.c
97
i8253_channel[2].last_r = 1;
usr.sbin/vmd/i8253.c
98
i8253_channel[2].vm_id = vm_id;
usr.sbin/vmd/i8253.c
99
i8253_channel[2].state = 0;