1 #ifndef __DANUBE_GPTU_DEV_H__2005_07_26__10_19__
2 #define __DANUBE_GPTU_DEV_H__2005_07_26__10_19__
5 /******************************************************************************
6 Copyright (c) 2002, Infineon Technologies. All rights reserved.
9 Because the program is licensed free of charge, there is no warranty for
10 the program, to the extent permitted by applicable law. Except when
11 otherwise stated in writing the copyright holders and/or other parties
12 provide the program "as is" without warranty of any kind, either
13 expressed or implied, including, but not limited to, the implied
14 warranties of merchantability and fitness for a particular purpose. The
15 entire risk as to the quality and performance of the program is with
16 you. should the program prove defective, you assume the cost of all
17 necessary servicing, repair or correction.
19 In no event unless required by applicable law or agreed to in writing
20 will any copyright holder, or any other party who may modify and/or
21 redistribute the program as permitted above, be liable to you for
22 damages, including any general, special, incidental or consequential
23 damages arising out of the use or inability to use the program
24 (including but not limited to loss of data or data being rendered
25 inaccurate or losses sustained by you or third parties or a failure of
26 the program to operate with any other programs), even if such holder or
27 other party has been advised of the possibility of such damages.
28 ******************************************************************************/
32 * ####################################
34 * ####################################
38 * Available Timer/Counter Index
40 #define TIMER(n, X) (n * 2 + (X ? 1 : 0))
41 #define TIMER_ANY 0x00
42 #define TIMER1A TIMER(1, 0)
43 #define TIMER1B TIMER(1, 1)
44 #define TIMER2A TIMER(2, 0)
45 #define TIMER2B TIMER(2, 1)
46 #define TIMER3A TIMER(3, 0)
47 #define TIMER3B TIMER(3, 1)
50 * Flag of Timer/Counter
51 * These flags specify the way in which timer is configured.
53 /* Bit size of timer/counter. */
54 #define TIMER_FLAG_16BIT 0x0000
55 #define TIMER_FLAG_32BIT 0x0001
56 /* Switch between timer and counter. */
57 #define TIMER_FLAG_TIMER 0x0000
58 #define TIMER_FLAG_COUNTER 0x0002
59 /* Stop or continue when overflowing/underflowing. */
60 #define TIMER_FLAG_ONCE 0x0000
61 #define TIMER_FLAG_CYCLIC 0x0004
62 /* Count up or counter down. */
63 #define TIMER_FLAG_UP 0x0000
64 #define TIMER_FLAG_DOWN 0x0008
65 /* Count on specific level or edge. */
66 #define TIMER_FLAG_HIGH_LEVEL_SENSITIVE 0x0000
67 #define TIMER_FLAG_LOW_LEVEL_SENSITIVE 0x0040
68 #define TIMER_FLAG_RISE_EDGE 0x0010
69 #define TIMER_FLAG_FALL_EDGE 0x0020
70 #define TIMER_FLAG_ANY_EDGE 0x0030
71 /* Signal is syncronous to module clock or not. */
72 #define TIMER_FLAG_UNSYNC 0x0000
73 #define TIMER_FLAG_SYNC 0x0080
74 /* Different interrupt handle type. */
75 #define TIMER_FLAG_NO_HANDLE 0x0000
76 #if defined(__KERNEL__)
77 #define TIMER_FLAG_CALLBACK_IN_IRQ 0x0100
78 #endif // defined(__KERNEL__)
79 #define TIMER_FLAG_SIGNAL 0x0300
80 /* Internal clock source or external clock source */
81 #define TIMER_FLAG_INT_SRC 0x0000
82 #define TIMER_FLAG_EXT_SRC 0x1000
88 #define GPTU_REQUEST_TIMER 0x01 /* General method to setup timer/counter. */
89 #define GPTU_FREE_TIMER 0x02 /* Free timer/counter. */
90 #define GPTU_START_TIMER 0x03 /* Start or resume timer/counter. */
91 #define GPTU_STOP_TIMER 0x04 /* Suspend timer/counter. */
92 #define GPTU_GET_COUNT_VALUE 0x05 /* Get current count value. */
93 #define GPTU_CALCULATE_DIVIDER 0x06 /* Calculate timer divider from given freq.*/
94 #define GPTU_SET_TIMER 0x07 /* Simplified method to setup timer. */
95 #define GPTU_SET_COUNTER 0x08 /* Simplified method to setup counter. */
98 * Data Type Used to Call ioctl
100 struct gptu_ioctl_param {
101 unsigned int timer; /* In command GPTU_REQUEST_TIMER, GPTU_SET_TIMER, and *
102 * GPTU_SET_COUNTER, this field is ID of expected *
103 * timer/counter. If it's zero, a timer/counter would *
104 * be dynamically allocated and ID would be stored in *
106 * In command GPTU_GET_COUNT_VALUE, this field is *
108 * In other command, this field is ID of timer/counter *
110 unsigned int flag; /* In command GPTU_REQUEST_TIMER, GPTU_SET_TIMER, and *
111 * GPTU_SET_COUNTER, this field contains flags to *
112 * specify how to configure timer/counter. *
113 * In command GPTU_START_TIMER, zero indicate start *
114 * and non-zero indicate resume timer/counter. *
115 * In other command, this field is ignored. */
116 unsigned long value; /* In command GPTU_REQUEST_TIMER, this field contains *
117 * init/reload value. *
118 * In command GPTU_SET_TIMER, this field contains *
119 * frequency (0.001Hz) of timer. *
120 * In command GPTU_GET_COUNT_VALUE, current count *
121 * value would be stored in this field. *
122 * In command GPTU_CALCULATE_DIVIDER, this field *
123 * contains frequency wanted, and after calculation, *
124 * divider would be stored in this field to overwrite *
126 * In other command, this field is ignored. */
127 int pid; /* In command GPTU_REQUEST_TIMER and GPTU_SET_TIMER, *
128 * if signal is required, this field contains process *
129 * ID to which signal would be sent. *
130 * In other command, this field is ignored. */
131 int sig; /* In command GPTU_REQUEST_TIMER and GPTU_SET_TIMER, *
132 * if signal is required, this field contains signal *
133 * number which would be sent. *
134 * In other command, this field is ignored. */
138 * ####################################
140 * ####################################
142 typedef void (*timer_callback)(unsigned long arg);
144 extern int lq_request_timer(unsigned int, unsigned int, unsigned long, unsigned long, unsigned long);
145 extern int lq_free_timer(unsigned int);
146 extern int lq_start_timer(unsigned int, int);
147 extern int lq_stop_timer(unsigned int);
148 extern int lq_reset_counter_flags(u32 timer, u32 flags);
149 extern int lq_get_count_value(unsigned int, unsigned long *);
150 extern u32 lq_cal_divider(unsigned long);
151 extern int lq_set_timer(unsigned int, unsigned int, int, int, unsigned int, unsigned long, unsigned long);
152 extern int lq_set_counter(unsigned int timer, unsigned int flag,
153 u32 reload, unsigned long arg1, unsigned long arg2);
155 #endif /* __DANUBE_GPTU_DEV_H__2005_07_26__10_19__ */