uboot/cpu/ixp/npe/include/IxUART.h
<<
>>
Prefs
   1/** 
   2 * @file IxUART.h
   3 *
   4 * @date 12-OCT-01
   5 *
   6 * @brief Public header for the Intel IXP400 internal UART, generic driver.
   7 * 
   8 * Design Notes:
   9 * This driver allows you to perform the following functions: 
  10 *      Device Initialization,
  11 *      send/receive characters.
  12 *
  13 * Perform Uart IOCTL for the following:
  14 *      Set/Get the current baud rate,
  15 *      set parity,
  16 *      set the number of Stop bits,
  17 *      set the character Length (5,6,7,8),
  18 *      enable/disable Hardware flow control.
  19 *
  20 * Only Polled mode is supported for now.
  21 *    
  22 * 
  23 * @par
  24 * IXP400 SW Release version 2.0
  25 * 
  26 * -- Copyright Notice --
  27 * 
  28 * @par
  29 * Copyright 2001-2005, Intel Corporation.
  30 * All rights reserved.
  31 * 
  32 * @par
  33 * Redistribution and use in source and binary forms, with or without
  34 * modification, are permitted provided that the following conditions
  35 * are met:
  36 * 1. Redistributions of source code must retain the above copyright
  37 *    notice, this list of conditions and the following disclaimer.
  38 * 2. Redistributions in binary form must reproduce the above copyright
  39 *    notice, this list of conditions and the following disclaimer in the
  40 *    documentation and/or other materials provided with the distribution.
  41 * 3. Neither the name of the Intel Corporation nor the names of its contributors
  42 *    may be used to endorse or promote products derived from this software
  43 *    without specific prior written permission.
  44 * 
  45 * @par
  46 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
  47 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  48 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  49 * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
  50 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  51 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  52 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  53 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  54 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  55 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  56 * SUCH DAMAGE.
  57 * 
  58 * @par
  59 * -- End of Copyright Notice --
  60*/
  61
  62/**
  63 * @defgroup IxUARTAccAPI IXP400 UART Access (IxUARTAcc) API
  64 *
  65 * @brief IXP400 UARTAcc Driver Public API
  66 * 
  67 * @{
  68 */
  69
  70
  71/* Defaults */
  72
  73/**
  74 * @defgroup DefaultDefines Defines for Default Values
  75 *
  76 * @brief Default values which can be used for UART configuration
  77 *
  78 * @sa ixUARTDev
  79 */
  80
  81/**
  82 * @def IX_UART_DEF_OPTS
  83 *
  84 * @brief The default hardware options to set the UART to -
  85 * no flow control, 8 bit word, 1 stop bit, no parity 
  86 *
  87 * @ingroup DefaultDefines
  88 */
  89#define IX_UART_DEF_OPTS (CLOCAL | CS8)
  90
  91/**
  92 * @def IX_UART_DEF_XMIT
  93 *
  94 * @brief The default UART FIFO size - must be no bigger than 64
  95 *
  96 * @ingroup DefaultDefines
  97 */
  98#define IX_UART_DEF_XMIT 64
  99
 100/**
 101 * @def IX_UART_DEF_BAUD
 102 *
 103 * @brief The default UART baud rate - 9600
 104 *
 105 * @ingroup DefaultDefines
 106 */
 107#define IX_UART_DEF_BAUD 9600
 108
 109/**
 110 * @def IX_UART_MIN_BAUD
 111 *
 112 * @brief The minimum UART baud rate - 9600
 113 *
 114 * @ingroup DefaultDefines
 115 */
 116#define IX_UART_MIN_BAUD 9600
 117
 118/**
 119 * @def IX_UART_MAX_BAUD
 120 *
 121 * @brief The maximum UART baud rate - 926100
 122 *
 123 * @ingroup DefaultDefines
 124 */
 125#define IX_UART_MAX_BAUD 926100
 126
 127/**
 128 * @def IX_UART_XTAL
 129 *
 130 * @brief The UART clock speed
 131 *
 132 * @ingroup DefaultDefines
 133 */
 134#define IX_UART_XTAL 14745600
 135
 136
 137
 138/* IOCTL commands (Request codes) */
 139
 140/**
 141 * @defgroup IoctlCommandDefines Defines for IOCTL Commands
 142 *
 143 * @brief IOCTL Commands (Request codes) which can be used
 144 *        with @ref ixUARTIoctl
 145 */
 146
 147
 148/**
 149 * @ingroup IoctlCommandDefines
 150 *
 151 * @def IX_BAUD_SET
 152 *
 153 * @brief Set the baud rate
 154 */
 155#define IX_BAUD_SET     0
 156
 157/**
 158 * @ingroup IoctlCommandDefines
 159 *
 160 * @def IX_BAUD_GET
 161 *
 162 * @brief Get the baud rate
 163 */
 164#define IX_BAUD_GET     1
 165
 166/**
 167 * @ingroup IoctlCommandDefines
 168 * @def IX_MODE_SET
 169 * @brief Set the UART mode of operation
 170 */
 171#define IX_MODE_SET     2
 172
 173/**
 174 * @ingroup IoctlCommandDefines
 175 *
 176 * @def IX_MODE_GET
 177 *
 178 * @brief Get the current UART mode of operation
 179 */
 180#define IX_MODE_GET     3
 181
 182/**
 183 * @ingroup IoctlCommandDefines
 184 *
 185 * @def IX_OPTS_SET
 186 *
 187 * @brief Set the UART device options
 188 */
 189#define IX_OPTS_SET     4
 190
 191/**
 192 * @ingroup IoctlCommandDefines
 193 *
 194 * @def IX_OPTS_GET
 195 *
 196 * @brief Get the UART device options
 197 */
 198#define IX_OPTS_GET     5
 199
 200/**
 201 * @ingroup IoctlCommandDefines
 202 *
 203 * @def IX_STATS_GET
 204 *
 205 * @brief Get the UART statistics
 206 */
 207#define IX_STATS_GET    6
 208
 209
 210/* POSIX style ioctl arguments */
 211
 212/**
 213 * @defgroup IoctlArgDefines Defines for IOCTL Arguments
 214 *
 215 * @brief POSIX style IOCTL arguments which can be used
 216 *        with @ref ixUARTIoctl
 217 *
 218 * @sa ixUARTMode
 219 */
 220
 221
 222/**
 223 * @ingroup IoctlArgDefines
 224 *
 225 * @def CLOCAL
 226 *
 227 * @brief Software flow control
 228 */
 229#ifdef CLOCAL
 230#undef CLOCAL
 231#endif
 232#define CLOCAL          0x1
 233
 234/**
 235 * @ingroup IoctlArgDefines
 236 *
 237 * @def CREAD
 238 *
 239 * @brief Enable interrupt receiver
 240 */
 241#ifdef CREAD
 242#undef CREAD
 243#endif
 244#define CREAD           0x2
 245
 246/**
 247 * @ingroup IoctlArgDefines
 248 *
 249 * @def CSIZE
 250 *
 251 * @brief Characters size
 252 */
 253#ifdef CSIZE
 254#undef CSIZE
 255#endif
 256#define CSIZE           0xc
 257
 258/**
 259 * @ingroup IoctlArgDefines
 260 *
 261 * @def CS5
 262 *
 263 * @brief 5 bits
 264 */
 265#ifdef CS5
 266#undef CS5
 267#endif
 268#define CS5             0x0
 269
 270/**
 271 * @ingroup IoctlArgDefines
 272 *
 273 * @def CS6
 274 *
 275 * @brief 6 bits
 276 */
 277#ifdef CS6
 278#undef CS6
 279#endif
 280#define CS6             0x4
 281
 282/**
 283 * @ingroup IoctlArgDefines
 284 *
 285 * @def CS7
 286 *
 287 * @brief 7 bits
 288 */
 289#ifdef CS7
 290#undef CS7
 291#endif
 292#define CS7             0x8
 293
 294/**
 295 * @ingroup IoctlArgDefines
 296 *
 297 * @def CS8
 298 *
 299 * @brief 8 bits
 300 */
 301#ifdef CS8
 302#undef CS8
 303#endif
 304#define CS8             0xc
 305
 306/**
 307 * @ingroup IoctlArgDefines
 308 *
 309 * @def STOPB
 310 *
 311 * @brief Send two stop bits (else one)
 312 */
 313#define STOPB           0x20
 314
 315/**
 316 * @ingroup IoctlArgDefines
 317 *
 318 * @def PARENB
 319 *
 320 * @brief Parity detection enabled (else disabled)
 321 */
 322#ifdef PARENB
 323#undef PARENB
 324#endif
 325#define PARENB          0x40
 326
 327/**
 328 * @ingroup IoctlArgDefines
 329 *
 330 * @def PARODD
 331 *
 332 * @brief Odd parity  (else even)
 333 */
 334#ifdef PARODD
 335#undef PARODD
 336#endif
 337#define PARODD          0x80
 338
 339/**
 340 * @enum ixUARTMode
 341 * @brief The mode to set to UART to.
 342 */
 343typedef enum
 344{
 345    INTERRUPT=0,        /**< Interrupt mode */
 346    POLLED,             /**< Polled mode */
 347    LOOPBACK            /**< Loopback mode */
 348} ixUARTMode;
 349
 350/**
 351 * @struct ixUARTStats
 352 * @brief Statistics for the UART.
 353 */
 354typedef struct
 355{
 356    UINT32  rxCount;
 357    UINT32  txCount;    
 358    UINT32  overrunErr;
 359    UINT32  parityErr;
 360    UINT32  framingErr;
 361    UINT32  breakErr;
 362} ixUARTStats;
 363
 364/**
 365 * @struct ixUARTDev
 366 * @brief Device descriptor for the UART.
 367 */
 368typedef struct
 369{
 370    UINT8 *addr;        /**< device base address */
 371    ixUARTMode mode;    /**< interrupt, polled or loopback */
 372    int baudRate;       /**< baud rate */
 373    int freq;           /**< UART clock frequency */     
 374    int options;        /**< hardware options */
 375    int fifoSize;       /**< FIFO xmit size */
 376
 377    ixUARTStats   stats;        /**< device statistics */
 378} ixUARTDev;
 379
 380/**
 381 * @ingroup IxUARTAccAPI
 382 *
 383 * @fn IX_STATUS ixUARTInit(ixUARTDev* pUART)
 384 * 
 385 * @param pUART @ref ixUARTDev [in] - pointer to UART structure describing our device.
 386 * 
 387 * @brief Initialise the UART. This puts the chip in a quiescent state.
 388 * 
 389 * @pre The base address for the UART must contain a valid value.
 390 *      Also the baud rate and hardware options must contain sensible values
 391 *      otherwise the defaults will be used as defined in ixUART.h
 392 *
 393 * @post UART is initialized and ready to send and receive data.
 394 *
 395 * @note This function should only be called once per device.
 396 *
 397 * @retval IX_SUCCESS - UART device successfully initialised.
 398 * @retval IX_FAIL - Critical error, device not initialised.
 399 ***************************************************************************/
 400PUBLIC IX_STATUS ixUARTInit(ixUARTDev* pUART);
 401
 402/**
 403 * @ingroup IxUARTAccAPI
 404 *
 405 * @fn IX_STATUS ixUARTPollOutput(ixUARTDev* pUART, int outChar)
 406 *
 407 * @param pUART @ref ixUARTDev [out] - pointer to UART structure describing our device.
 408 * @param outChar int [out] - character to transmit.
 409 *
 410 * @brief Transmit a character in polled mode.
 411 *
 412 * @pre UART device must be initialised.
 413 *
 414 * @retval IX_SUCCESS - character was successfully transmitted.
 415 * @retval IX_FAIL - output buffer is full (try again).
 416 ***************************************************************************/
 417PUBLIC IX_STATUS ixUARTPollOutput(ixUARTDev* pUART, int outChar);
 418
 419/**
 420 * @ingroup IxUARTAccAPI
 421 *
 422 * @fn IX_STATUS ixUARTPollInput(ixUARTDev* pUART, char *inChar)
 423 *
 424 * @param pUART @ref ixUARTDev [in] - pointer to UART structure describing our device.
 425 * @param *inChar char [in] - character read from the device.
 426 *
 427 * @brief Receive a character in polled mode.
 428 *
 429 * @pre UART device must be initialised.
 430 *
 431 * @retval IX_SUCCESS - character was successfully read.
 432 * @retval IX_FAIL - input buffer empty (try again).
 433 ***************************************************************************/
 434PUBLIC IX_STATUS ixUARTPollInput(ixUARTDev* pUART, char *inChar);
 435
 436/**
 437 * @ingroup IxUARTAccAPI
 438 *
 439 * @fn IX_STATUS ixUARTIoctl(ixUARTDev* pUART, int cmd, void* arg)
 440 *
 441 * @param pUART @ref ixUARTDev [in] - pointer to UART structure describing our device.
 442 * @param cmd int [in] - an ioctl request code.
 443 * @param arg void* [in] - optional argument used to set the device mode,
 444 *       baud rate, and hardware options.
 445 *
 446 * @brief Perform I/O control routines on the device.
 447 *
 448 * @retval IX_SUCCESS - requested feature was set/read successfully.
 449 * @retval IX_FAIL - error setting/reading the requested feature.
 450 *
 451 * @sa IoctlCommandDefines
 452 * @sa IoctlArgDefines
 453 ***************************************************************************/    
 454PUBLIC IX_STATUS ixUARTIoctl(ixUARTDev* pUART, int cmd, void* arg);
 455
 456/**
 457 * @} defgroup IxUARTAcc
 458 */
 459