|
|
1.1 root 1: fc timer notes
2:
3: states
4: idle TS_IDLE
5: running, t/o msg enabled TS_RUN_MSG
6: running, t/o msg disabled TS_RUN_POLL
7: timeout, no msg sent TS_TIMEOUT
8: timeout, msg sent TS_TIMEOUT_MSG
9:
10: transitions
11:
12: TS_IDLE
13: ==> TS_RUN_MSG : startTimer(TRUE)
14: ==> TS_RUN_POLL : startTimer(FALSE)
15: TS_RUN_MSG
16: ==> TS_IDLE : stopTimer
17: ==> TS_TIMEOUT_MSG : floppyTimeout()
18: TS_RUN_POLL
19: ==> TS_IDLE : stopTimer
20: ==> TS_TIMEOUT : floppyTimeout()
21: TS_TIMEOUT_MSG
22: ==> TS_IDLE : stopTimer
23: ==> TS_IDLE : waitIntr
24: XXX
25: ==> TS_IDLE : stopTimer
26: timeout, no msg sent
27: timeout, msg sent
28:
29: startTimer(seconds, boolean_t msg)
30: {
31: IOTimeout();
32: timerState = TS_RUN_POLL or TS_RUN_MSG;
33: }
34:
35: stopTimer()
36: {
37: switch(timerState) {
38: case TS_TIMEOUT_MSG:
39: get the message from timerPort;
40: case TS_RUN_POLL:
41: case TS_RUN_MSG:
42: IOUnTimeout();
43: case TS_TIMEOUT:
44: case TS_IDLE:
45: nop;
46: }
47: timerState = TS_IDLE;
48: }
49:
50: timerInit() {
51: timerState = TS_IDLE;
52: }
53:
54: floppyTimeout(id)
55: {
56: switch(timerState) {
57: case TS_RUN_MSG:
58: send timeout msg to timeoutPort;
59: timerState = TS_TIMEOUT_MSG;
60: case TS_RUN_POLL:
61: timerState = TS_TIMEOUT;
62: default:
63: huh?
64: }
65:
66: waitIntr(seconds)
67: {
68: startTimer(seconds, TRUE);
69: msg_receive on fcPortSet;
70: if msg from timeoutPort {
71: timerInit();
72: rtn = timeout;
73: }
74: else {
75: timerStop();
76: rtn = OK;
77: /* old fc interrupt code to get status, etc.? */
78: }
79: }
80:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.