Home | History | Annotate | Download | only in include
      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