[lantiq] cleanup patches
[openwrt.git] / target / linux / lantiq / files / arch / mips / include / asm / mach-lantiq / lantiq_timer.h
1 #ifndef __DANUBE_GPTU_DEV_H__2005_07_26__10_19__
2 #define __DANUBE_GPTU_DEV_H__2005_07_26__10_19__
3
4
5 /******************************************************************************
6        Copyright (c) 2002, Infineon Technologies.  All rights reserved.
7
8                                No Warranty
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.
18
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 ******************************************************************************/
29
30
31 /*
32  * ####################################
33  *              Definition
34  * ####################################
35  */
36
37 /*
38  *  Available Timer/Counter Index
39  */
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)
48
49 /*
50  *  Flag of Timer/Counter
51  *  These flags specify the way in which timer is configured.
52  */
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
83
84
85 /*
86  *  ioctl Command
87  */
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.     */
96
97 /*
98  *  Data Type Used to Call ioctl
99  */
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  *
105                                                  *  this field.                                         *
106                                                  *  In command GPTU_GET_COUNT_VALUE, this field is      *
107                                                  *  ignored.                                            *
108                                                  *  In other command, this field is ID of timer/counter *
109                                                  *  allocated.                                          */
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  *
125                                                  *  the frequency.                                      *
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.            */
135 };
136
137 /*
138  * ####################################
139  *              Data Type
140  * ####################################
141  */
142 typedef void (*timer_callback)(unsigned long arg);
143
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);
154
155 #endif /* __DANUBE_GPTU_DEV_H__2005_07_26__10_19__ */