diff options
Diffstat (limited to 'drivers/scsi/bfa/bfa_timer.c')
-rw-r--r-- | drivers/scsi/bfa/bfa_timer.c | 90 |
1 files changed, 0 insertions, 90 deletions
diff --git a/drivers/scsi/bfa/bfa_timer.c b/drivers/scsi/bfa/bfa_timer.c deleted file mode 100644 index cb76481f5cb1..000000000000 --- a/drivers/scsi/bfa/bfa_timer.c +++ /dev/null | |||
@@ -1,90 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005-2009 Brocade Communications Systems, Inc. | ||
3 | * All rights reserved | ||
4 | * www.brocade.com | ||
5 | * | ||
6 | * Linux driver for Brocade Fibre Channel Host Bus Adapter. | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify it | ||
9 | * under the terms of the GNU General Public License (GPL) Version 2 as | ||
10 | * published by the Free Software Foundation | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, but | ||
13 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
15 | * General Public License for more details. | ||
16 | */ | ||
17 | |||
18 | #include <bfa_timer.h> | ||
19 | #include <cs/bfa_debug.h> | ||
20 | |||
21 | void | ||
22 | bfa_timer_init(struct bfa_timer_mod_s *mod) | ||
23 | { | ||
24 | INIT_LIST_HEAD(&mod->timer_q); | ||
25 | } | ||
26 | |||
27 | void | ||
28 | bfa_timer_beat(struct bfa_timer_mod_s *mod) | ||
29 | { | ||
30 | struct list_head *qh = &mod->timer_q; | ||
31 | struct list_head *qe, *qe_next; | ||
32 | struct bfa_timer_s *elem; | ||
33 | struct list_head timedout_q; | ||
34 | |||
35 | INIT_LIST_HEAD(&timedout_q); | ||
36 | |||
37 | qe = bfa_q_next(qh); | ||
38 | |||
39 | while (qe != qh) { | ||
40 | qe_next = bfa_q_next(qe); | ||
41 | |||
42 | elem = (struct bfa_timer_s *) qe; | ||
43 | if (elem->timeout <= BFA_TIMER_FREQ) { | ||
44 | elem->timeout = 0; | ||
45 | list_del(&elem->qe); | ||
46 | list_add_tail(&elem->qe, &timedout_q); | ||
47 | } else { | ||
48 | elem->timeout -= BFA_TIMER_FREQ; | ||
49 | } | ||
50 | |||
51 | qe = qe_next; /* go to next elem */ | ||
52 | } | ||
53 | |||
54 | /* | ||
55 | * Pop all the timeout entries | ||
56 | */ | ||
57 | while (!list_empty(&timedout_q)) { | ||
58 | bfa_q_deq(&timedout_q, &elem); | ||
59 | elem->timercb(elem->arg); | ||
60 | } | ||
61 | } | ||
62 | |||
63 | /** | ||
64 | * Should be called with lock protection | ||
65 | */ | ||
66 | void | ||
67 | bfa_timer_begin(struct bfa_timer_mod_s *mod, struct bfa_timer_s *timer, | ||
68 | void (*timercb) (void *), void *arg, unsigned int timeout) | ||
69 | { | ||
70 | |||
71 | bfa_assert(timercb != NULL); | ||
72 | bfa_assert(!bfa_q_is_on_q(&mod->timer_q, timer)); | ||
73 | |||
74 | timer->timeout = timeout; | ||
75 | timer->timercb = timercb; | ||
76 | timer->arg = arg; | ||
77 | |||
78 | list_add_tail(&timer->qe, &mod->timer_q); | ||
79 | } | ||
80 | |||
81 | /** | ||
82 | * Should be called with lock protection | ||
83 | */ | ||
84 | void | ||
85 | bfa_timer_stop(struct bfa_timer_s *timer) | ||
86 | { | ||
87 | bfa_assert(!list_empty(&timer->qe)); | ||
88 | |||
89 | list_del(&timer->qe); | ||
90 | } | ||