• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /******************************************************************************
2   *
3   *  Copyright (C) 2001-2012 Broadcom Corporation
4   *
5   *  Licensed under the Apache License, Version 2.0 (the "License");
6   *  you may not use this file except in compliance with the License.
7   *  You may obtain a copy of the License at:
8   *
9   *  http://www.apache.org/licenses/LICENSE-2.0
10   *
11   *  Unless required by applicable law or agreed to in writing, software
12   *  distributed under the License is distributed on an "AS IS" BASIS,
13   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   *  See the License for the specific language governing permissions and
15   *  limitations under the License.
16   *
17   ******************************************************************************/
18  #ifndef UPIO_H
19  #define UPIO_H
20  
21  /* Enumeration of UPIO features                                         */
22  /* Not all features enumerated here are supported by the hardware.      */
23  /* Use UPIO_Feature() to determine support of a particular feature.     */
24  enum
25  {
26      /* LEDs */
27      UPIO_FEAT_LED1,
28      UPIO_FEAT_LED2,
29      UPIO_FEAT_LED3,
30      UPIO_FEAT_LED4,
31      UPIO_FEAT_LED5,
32      UPIO_FEAT_LED6,
33      UPIO_FEAT_LED7,
34      UPIO_FEAT_LED8,
35  
36      /* Switches */
37      UPIO_FEAT_SWITCH1,
38      UPIO_FEAT_SWITCH2,
39      UPIO_FEAT_SWITCH3,
40      UPIO_FEAT_SWITCH4,
41      UPIO_FEAT_SWITCH5,
42      UPIO_FEAT_SWITCH6,
43      UPIO_FEAT_SWITCH7,
44      UPIO_FEAT_SWITCH8,
45      UPIO_FEAT_SWITCH9,
46      UPIO_FEAT_SWITCH10,
47      UPIO_FEAT_SWITCH11,
48      UPIO_FEAT_SWITCH12,
49      UPIO_FEAT_SWITCH13,
50      UPIO_FEAT_SWITCH14,
51      UPIO_FEAT_SWITCH15,
52      UPIO_FEAT_SWITCH16,
53  
54      /* Jumpers */
55      UPIO_FEAT_JUMPER1,
56      UPIO_FEAT_JUMPER2,
57      UPIO_FEAT_JUMPER3,
58      UPIO_FEAT_JUMPER4,
59      UPIO_FEAT_JUMPER5,
60      UPIO_FEAT_JUMPER6,
61      UPIO_FEAT_JUMPER7,
62      UPIO_FEAT_JUMPER8,
63  
64      /* Push buttons */
65      UPIO_FEAT_BUTTON1,
66      UPIO_FEAT_BUTTON2,
67      UPIO_FEAT_BUTTON3,
68      UPIO_FEAT_BUTTON4,
69      UPIO_FEAT_BUTTON5,
70      UPIO_FEAT_BUTTON6,
71      UPIO_FEAT_BUTTON7,
72      UPIO_FEAT_BUTTON8,
73  
74      /* General purpose */
75      UPIO_FEAT_GENERAL1,
76      UPIO_FEAT_GENERAL2,
77      UPIO_FEAT_GENERAL3,
78      UPIO_FEAT_GENERAL4,
79      UPIO_FEAT_GENERAL5,
80      UPIO_FEAT_GENERAL6,
81      UPIO_FEAT_GENERAL7,
82      UPIO_FEAT_GENERAL8,
83      UPIO_FEAT_GENERAL9,
84      UPIO_FEAT_GENERAL10,
85      UPIO_FEAT_GENERAL11,
86      UPIO_FEAT_GENERAL12,
87      UPIO_FEAT_GENERAL13,
88      UPIO_FEAT_GENERAL14,
89      UPIO_FEAT_GENERAL15,
90      UPIO_FEAT_GENERAL16,
91      UPIO_FEAT_GENERAL17,
92      UPIO_FEAT_GENERAL18,
93      UPIO_FEAT_GENERAL19,
94      UPIO_FEAT_GENERAL20,
95      UPIO_FEAT_GENERAL21,
96      UPIO_FEAT_GENERAL22,
97      UPIO_FEAT_GENERAL23,
98      UPIO_FEAT_GENERAL24,
99      UPIO_FEAT_GENERAL25,
100      UPIO_FEAT_GENERAL26,
101      UPIO_FEAT_GENERAL27,
102      UPIO_FEAT_GENERAL28,
103      UPIO_FEAT_GENERAL29,
104      UPIO_FEAT_GENERAL30,
105      UPIO_FEAT_GENERAL31,
106      UPIO_FEAT_GENERAL32,
107  
108      UPIO_FEAT_IN_HIGH,          /* Support for input with interrupt on high signal level. */
109      UPIO_FEAT_IN_LOW,           /* Support for input with interrupt on low signal level. */
110      UPIO_FEAT_IN_RISE,          /* Support for input with interrupt on rising edge. */
111      UPIO_FEAT_IN_FALL           /* Support for input with interrupt on falling. */
112  
113  };
114  typedef UINT8 tUPIO_FEATURE;
115  
116  
117  /* Enumeration of UPIO configurations */
118  enum
119  {
120      UPIO_OUT,
121      UPIO_IN,
122      UPIO_IN_EDGE,
123      UPIO_IN_LEVEL,
124      UPIO_NONE
125  };
126  typedef UINT8 tUPIO_CONFIG;
127  
128  
129  /* Enumeration of UPIO types */
130  enum
131  {
132      UPIO_LED,                   /* LED */
133      UPIO_SWITCH,                /* Switch */
134      UPIO_JUMPER,                /* Jumper */
135      UPIO_BUTTON,                /* Push-button switch */
136      UPIO_GENERAL,               /* General purpose I/O */
137  
138      UPIO_NUMBER_OF_TYPES
139  };
140  typedef UINT8 tUPIO_TYPE;
141  
142  
143  /* Enumeration of UPIO states */
144  enum
145  {
146      UPIO_OFF,
147      UPIO_ON,
148      UPIO_TOGGLE
149  };
150  typedef UINT8 tUPIO_STATE;
151  
152  
153  enum
154  {
155      UPIO_SW_BANK2,
156      UPIO_SW_BANK3
157  };
158  typedef UINT8 tUPIO_SW_BANK;
159  
160  /* Jumper masks */
161  #define UPIO_JUMPER1    0x00000001
162  #define UPIO_JUMPER2    0x00000002
163  #define UPIO_JUMPER3    0x00000004
164  #define UPIO_JUMPER4    0x00000008
165  #define UPIO_JUMPER5    0x00000010
166  #define UPIO_JUMPER6    0x00000020
167  #define UPIO_JUMPER7    0x00000040
168  #define UPIO_JUMPER8    0x00000080
169  
170  /* General purpose i/o masks */
171  #define UPIO_GENERAL1   0x00000001
172  #define UPIO_GENERAL2   0x00000002
173  #define UPIO_GENERAL3   0x00000004
174  #define UPIO_GENERAL4   0x00000008
175  #define UPIO_GENERAL5   0x00000010
176  #define UPIO_GENERAL6   0x00000020
177  #define UPIO_GENERAL7   0x00000040
178  #define UPIO_GENERAL8   0x00000080
179  #define UPIO_GENERAL9   0x00000100
180  #define UPIO_GENERAL10  0x00000200
181  #define UPIO_GENERAL11  0x00000400
182  #define UPIO_GENERAL12  0x00000800
183  #define UPIO_GENERAL13  0x00001000
184  #define UPIO_GENERAL14  0x00002000
185  #define UPIO_GENERAL15  0x00004000
186  #define UPIO_GENERAL16  0x00008000
187  #define UPIO_GENERAL17  0x00010000
188  #define UPIO_GENERAL18  0x00020000
189  #define UPIO_GENERAL19  0x00040000
190  #define UPIO_GENERAL20  0x00080000
191  #define UPIO_GENERAL21  0x00100000
192  #define UPIO_GENERAL22  0x00200000
193  #define UPIO_GENERAL23  0x00400000
194  #define UPIO_GENERAL24  0x00800000
195  #define UPIO_GENERAL25  0x01000000
196  #define UPIO_GENERAL26  0x02000000
197  #define UPIO_GENERAL27  0x04000000
198  #define UPIO_GENERAL28  0x08000000
199  #define UPIO_GENERAL29  0x10000000
200  #define UPIO_GENERAL30  0x20000000
201  #define UPIO_GENERAL31  0x40000000
202  #define UPIO_GENERAL32  0x80000000
203  
204  typedef UINT32 tUPIO;
205  
206  /* LED masks */
207  #define UPIO_LED1       0x00000001
208  #define UPIO_LED2       0x00000002
209  #define UPIO_LED3       0x00000004
210  #define UPIO_LED4       0x00000008
211  #define UPIO_LED5       0x00000010
212  #define UPIO_LED6       0x00000020
213  #define UPIO_LED7       0x00000040
214  #define UPIO_LED8       0x00000080
215  
216  #define UPIO_LED_ALL    (UPIO_LED1 | UPIO_LED2 | UPIO_LED3 | UPIO_LED4 | \
217                          UPIO_LED5 | UPIO_LED6 | UPIO_LED7 | UPIO_LED8)
218  
219  
220  /* Switch masks */
221  #define UPIO_SWITCH1    0x00000001
222  #define UPIO_SWITCH2    0x00000002
223  #define UPIO_SWITCH3    0x00000004
224  #define UPIO_SWITCH4    0x00000008
225  #define UPIO_SWITCH5    0x00000010
226  #define UPIO_SWITCH6    0x00000020
227  #define UPIO_SWITCH7    0x00000040
228  #define UPIO_SWITCH8    0x00000080
229  #define UPIO_SWITCH9    0x00000100
230  #define UPIO_SWITCH10   0x00000200
231  #define UPIO_SWITCH11   0x00000400
232  #define UPIO_SWITCH12   0x00000800
233  #define UPIO_SWITCH13   0x00001000
234  #define UPIO_SWITCH14   0x00002000
235  #define UPIO_SWITCH15   0x00004000
236  #define UPIO_SWITCH16   0x00008000
237  
238  /* Push button masks */
239  #define UPIO_BUTTON1    0x00000001
240  #define UPIO_BUTTON2    0x00000002
241  #define UPIO_BUTTON3    0x00000004
242  #define UPIO_BUTTON4    0x00000008
243  #define UPIO_BUTTON5    0x00000010
244  #define UPIO_BUTTON6    0x00000020
245  #define UPIO_BUTTON7    0x00000040
246  #define UPIO_BUTTON8    0x00000080
247  
248  typedef void (tUPIO_CBACK)(tUPIO_TYPE type, tUPIO pio, tUPIO_STATE state);
249  
250  #ifdef __cplusplus
251  extern "C" {
252  #endif
253  
254  /* API functions for UPIO driver */
255  
256  /*****************************************************************************
257  **
258  ** Function         UPIO_Init
259  **
260  ** Description
261  **      Initialize the GPIO service.
262  **      This function is typically called once upon system startup.
263  **
264  ** Returns          nothing
265  **
266  *****************************************************************************/
267  UDRV_API void UPIO_Init(void *p_cfg);
268  
269  
270  /*****************************************************************************
271  **
272  ** Function         UPIO_Set
273  **
274  ** Description
275  **      This function sets one or more GPIO devices to the given state.
276  **      Multiple GPIOs of the same type can be masked together to set more
277  **      than one GPIO. This function can only be used on types UPIO_LED and
278  **      UPIO_GENERAL.
279  **
280  ** Input Parameters:
281  **      type    The type of device.
282  **      pio     Indicates the particular GPIOs.
283  **      state   The desired state.
284  **
285  ** Output Parameter:
286  **      None.
287  **
288  ** Returns:
289  **      None.
290  **
291  *****************************************************************************/
292  UDRV_API void UPIO_Set(tUPIO_TYPE type, tUPIO pio, tUPIO_STATE state);
293  
294  
295  /*****************************************************************************
296  **
297  ** Function         UPIO_Read
298  **
299  ** Description
300  **      Read the state of a GPIO. This function can be used for any type of
301  **      device. Parameter pio can only indicate a single GPIO; multiple GPIOs
302  **      cannot be masked together.
303  **
304  ** Input Parameters:
305  **      Type:	The type of device.
306  **      pio:    Indicates the particular GUPIO.
307  **
308  ** Output Parameter:
309  **      None.
310  **
311  ** Returns:
312  **      State of GPIO (UPIO_ON or UPIO_OFF).
313  **
314  *****************************************************************************/
315  UDRV_API tUPIO_STATE UPIO_Read(tUPIO_TYPE type, tUPIO pio);
316  
317  
318  /*****************************************************************************
319  **
320  ** Function         UPIO_Config
321  **
322  ** Description      - Configure GPIOs of type UPIO_GENERAL as inputs or outputs
323  **                  - Configure GPIOs to be polled or interrupt driven
324  **
325  **                  Currently only support polled GPIOs.
326  **
327  ** Input Parameters:
328  **      type    The type of device.
329  **      pio     Indicates the particular GPIOs.
330  **      config
331  **      cback
332  **
333  ** Output Parameter:
334  **      None.
335  **
336  ** Returns:
337  **      None.
338  **
339  *****************************************************************************/
340  UDRV_API void UPIO_Config(tUPIO_TYPE type, tUPIO pio, tUPIO_CONFIG config, tUPIO_CBACK *cback);
341  
342  
343  /*****************************************************************************
344  **
345  ** Function         UPIO_Feature
346  **
347  ** Description
348  **      Checks whether a feature of the pio API is supported
349  **
350  ** Input Parameter:
351  **      feature     The feature to check
352  **
353  ** Output Parameter:
354  **      None.
355  **
356  ** Returns:
357  **      TRUE if feature is supported, FALSE if it is not.
358  **
359  *****************************************************************************/
360  UDRV_API BOOLEAN UPIO_Feature(tUPIO_FEATURE feature);
361  
362  #ifdef __cplusplus
363  }
364  #endif
365  
366  #endif  /* ifdef UPIO_H */
367