Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[pandora-kernel.git] / arch / arm / mach-bcmring / include / csp / tmrHw.h
1 /*****************************************************************************
2 * Copyright 2004 - 2008 Broadcom Corporation.  All rights reserved.
3 *
4 * Unless you and Broadcom execute a separate written software license
5 * agreement governing use of this software, this software is licensed to you
6 * under the terms of the GNU General Public License version 2, available at
7 * http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
8 *
9 * Notwithstanding the above, under no circumstances may you combine this
10 * software in any way with any other Broadcom software provided under a
11 * license other than the GPL, without Broadcom's express prior written
12 * consent.
13 *****************************************************************************/
14
15 /****************************************************************************/
16 /**
17 *  @file    tmrHw.h
18 *
19 *  @brief   API definitions for low level Timer driver
20 *
21 */
22 /****************************************************************************/
23 #ifndef _TMRHW_H
24 #define _TMRHW_H
25
26 #include <csp/stdint.h>
27
28 typedef uint32_t tmrHw_ID_t;    /* Timer ID */
29 typedef uint32_t tmrHw_COUNT_t; /* Timer count */
30 typedef uint32_t tmrHw_INTERVAL_t;      /* Timer interval */
31 typedef uint32_t tmrHw_RATE_t;  /* Timer event (count/interrupt) rate */
32
33 typedef enum {
34         tmrHw_INTERRUPT_STATUS_SET,     /* Interrupted  */
35         tmrHw_INTERRUPT_STATUS_UNSET    /* No Interrupt */
36 } tmrHw_INTERRUPT_STATUS_e;
37
38 typedef enum {
39         tmrHw_CAPABILITY_CLOCK, /* Clock speed in HHz */
40         tmrHw_CAPABILITY_RESOLUTION     /* Timer resolution in bits */
41 } tmrHw_CAPABILITY_e;
42
43 /****************************************************************************/
44 /**
45 *  @brief   Get timer capability
46 *
47 *  This function returns various capabilities/attributes of a timer
48 *
49 *  @return  Numeric capability
50 *
51 */
52 /****************************************************************************/
53 uint32_t tmrHw_getTimerCapability(tmrHw_ID_t timerId,   /*  [ IN ] Timer Id */
54                                   tmrHw_CAPABILITY_e capability /*  [ IN ] Timer capability */
55 );
56
57 /****************************************************************************/
58 /**
59 *  @brief   Configures a periodic timer in terms of timer interrupt rate
60 *
61 *  This function initializes a periodic timer to generate specific number of
62 *  timer interrupt per second
63 *
64 *  @return   On success: Effective timer frequency
65 *            On failure: 0
66 *
67 */
68 /****************************************************************************/
69 tmrHw_RATE_t tmrHw_setPeriodicTimerRate(tmrHw_ID_t timerId,     /*  [ IN ] Timer Id */
70                                         tmrHw_RATE_t rate       /*  [ IN ] Number of timer interrupt per second */
71 );
72
73 /****************************************************************************/
74 /**
75 *  @brief   Configures a periodic timer to generate timer interrupt after
76 *           certain time interval
77 *
78 *  This function initializes a periodic timer to generate timer interrupt
79 *  after every time interval in millisecond
80 *
81 *  @return   On success: Effective interval set in mili-second
82 *            On failure: 0
83 *
84 */
85 /****************************************************************************/
86 tmrHw_INTERVAL_t tmrHw_setPeriodicTimerInterval(tmrHw_ID_t timerId,     /*  [ IN ] Timer Id */
87                                                 tmrHw_INTERVAL_t msec   /*  [ IN ] Interval in mili-second */
88 );
89
90 /****************************************************************************/
91 /**
92 *  @brief   Configures a periodic timer to generate timer interrupt just once
93 *           after certain time interval
94 *
95 *  This function initializes a periodic timer to generate a single ticks after
96 *  certain time interval in millisecond
97 *
98 *  @return   On success: Effective interval set in mili-second
99 *            On failure: 0
100 *
101 */
102 /****************************************************************************/
103 tmrHw_INTERVAL_t tmrHw_setOneshotTimerInterval(tmrHw_ID_t timerId,      /*  [ IN ] Timer Id */
104                                                tmrHw_INTERVAL_t msec    /*  [ IN ] Interval in mili-second */
105 );
106
107 /****************************************************************************/
108 /**
109 *  @brief   Configures a timer to run as a free running timer
110 *
111 *  This function initializes a timer to run as a free running timer
112 *
113 *  @return   Timer resolution (count / sec)
114 *
115 */
116 /****************************************************************************/
117 tmrHw_RATE_t tmrHw_setFreeRunningTimer(tmrHw_ID_t timerId,      /*  [ IN ] Timer Id */
118                                        uint32_t divider /*  [ IN ] Dividing the clock frequency */
119 ) __attribute__ ((section(".aramtext")));
120
121 /****************************************************************************/
122 /**
123 *  @brief   Starts a timer
124 *
125 *  This function starts a preconfigured timer
126 *
127 *  @return  -1     - On Failure
128 *            0     - On Success
129 */
130 /****************************************************************************/
131 int tmrHw_startTimer(tmrHw_ID_t timerId /*  [ IN ] Timer id */
132 ) __attribute__ ((section(".aramtext")));
133
134 /****************************************************************************/
135 /**
136 *  @brief   Stops a timer
137 *
138 *  This function stops a running timer
139 *
140 *  @return  -1     - On Failure
141 *            0     - On Success
142 */
143 /****************************************************************************/
144 int tmrHw_stopTimer(tmrHw_ID_t timerId  /*  [ IN ] Timer id */
145 );
146
147 /****************************************************************************/
148 /**
149 *  @brief   Gets current timer count
150 *
151 *  This function returns the current timer value
152 *
153 *  @return  Current downcounting timer value
154 *
155 */
156 /****************************************************************************/
157 tmrHw_COUNT_t tmrHw_GetCurrentCount(tmrHw_ID_t timerId  /*  [ IN ] Timer id */
158 ) __attribute__ ((section(".aramtext")));
159
160 /****************************************************************************/
161 /**
162 *  @brief   Gets timer count rate
163 *
164 *  This function returns the number of counts per second
165 *
166 *  @return  Count rate
167 *
168 */
169 /****************************************************************************/
170 tmrHw_RATE_t tmrHw_getCountRate(tmrHw_ID_t timerId      /*  [ IN ] Timer id */
171 ) __attribute__ ((section(".aramtext")));
172
173 /****************************************************************************/
174 /**
175 *  @brief   Enables timer interrupt
176 *
177 *  This function enables the timer interrupt
178 *
179 *  @return   N/A
180 *
181 */
182 /****************************************************************************/
183 void tmrHw_enableInterrupt(tmrHw_ID_t timerId   /*  [ IN ] Timer id */
184 );
185
186 /****************************************************************************/
187 /**
188 *  @brief   Disables timer interrupt
189 *
190 *  This function disable the timer interrupt
191 *
192 *  @return   N/A
193 */
194 /****************************************************************************/
195 void tmrHw_disableInterrupt(tmrHw_ID_t timerId  /*  [ IN ] Timer id */
196 );
197
198 /****************************************************************************/
199 /**
200 *  @brief   Clears the interrupt
201 *
202 *  This function clears the timer interrupt
203 *
204 *  @return   N/A
205 *
206 *  @note
207 *     Must be called under the context of ISR
208 */
209 /****************************************************************************/
210 void tmrHw_clearInterrupt(tmrHw_ID_t timerId    /*  [ IN ] Timer id */
211 );
212
213 /****************************************************************************/
214 /**
215 *  @brief   Gets the interrupt status
216 *
217 *  This function returns timer interrupt status
218 *
219 *  @return   Interrupt status
220 */
221 /****************************************************************************/
222 tmrHw_INTERRUPT_STATUS_e tmrHw_getInterruptStatus(tmrHw_ID_t timerId    /*  [ IN ] Timer id */
223 );
224
225 /****************************************************************************/
226 /**
227 *  @brief   Indentifies a timer causing interrupt
228 *
229 *  This functions returns a timer causing interrupt
230 *
231 *  @return  0xFFFFFFFF   : No timer causing an interrupt
232 *           ! 0xFFFFFFFF : timer causing an interrupt
233 *  @note
234 *     tmrHw_clearIntrrupt() must be called with a valid timer id after calling this function
235 */
236 /****************************************************************************/
237 tmrHw_ID_t tmrHw_getInterruptSource(void);
238
239 /****************************************************************************/
240 /**
241 *  @brief   Displays specific timer registers
242 *
243 *
244 *  @return  void
245 *
246 */
247 /****************************************************************************/
248 void tmrHw_printDebugInfo(tmrHw_ID_t timerId,   /*  [ IN ] Timer id */
249                           int (*fpPrint) (const char *, ...)    /*  [ IN ] Print callback function */
250 );
251
252 /****************************************************************************/
253 /**
254 *  @brief   Use a timer to perform a busy wait delay for a number of usecs.
255 *
256 *  @return   N/A
257 */
258 /****************************************************************************/
259 void tmrHw_udelay(tmrHw_ID_t timerId,   /*  [ IN ] Timer id */
260                   unsigned long usecs   /*  [ IN ] usec to delay */
261 ) __attribute__ ((section(".aramtext")));
262
263 #endif /* _TMRHW_H */