home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / powerpc / include / asm / mpc52xx_psc.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  8.1 KB  |  277 lines

  1. /*
  2.  * include/asm-ppc/mpc52xx_psc.h
  3.  *
  4.  * Definitions of consts/structs to drive the Freescale MPC52xx OnChip
  5.  * PSCs. Theses are shared between multiple drivers since a PSC can be
  6.  * UART, AC97, IR, I2S, ... So this header is in asm-ppc.
  7.  *
  8.  *
  9.  * Maintainer : Sylvain Munaut <tnt@246tNt.com>
  10.  *
  11.  * Based/Extracted from some header of the 2.4 originally written by
  12.  * Dale Farnsworth <dfarnsworth@mvista.com>
  13.  *
  14.  * Copyright (C) 2004 Sylvain Munaut <tnt@246tNt.com>
  15.  * Copyright (C) 2003 MontaVista, Software, Inc.
  16.  *
  17.  * This file is licensed under the terms of the GNU General Public License
  18.  * version 2. This program is licensed "as is" without any warranty of any
  19.  * kind, whether express or implied.
  20.  */
  21.  
  22. #ifndef __ASM_MPC52xx_PSC_H__
  23. #define __ASM_MPC52xx_PSC_H__
  24.  
  25. #include <asm/types.h>
  26.  
  27. /* Max number of PSCs */
  28. #define MPC52xx_PSC_MAXNUM    6
  29.  
  30. /* Programmable Serial Controller (PSC) status register bits */
  31. #define MPC52xx_PSC_SR_CDE    0x0080
  32. #define MPC52xx_PSC_SR_RXRDY    0x0100
  33. #define MPC52xx_PSC_SR_RXFULL    0x0200
  34. #define MPC52xx_PSC_SR_TXRDY    0x0400
  35. #define MPC52xx_PSC_SR_TXEMP    0x0800
  36. #define MPC52xx_PSC_SR_OE    0x1000
  37. #define MPC52xx_PSC_SR_PE    0x2000
  38. #define MPC52xx_PSC_SR_FE    0x4000
  39. #define MPC52xx_PSC_SR_RB    0x8000
  40.  
  41. /* PSC Command values */
  42. #define MPC52xx_PSC_RX_ENABLE        0x0001
  43. #define MPC52xx_PSC_RX_DISABLE        0x0002
  44. #define MPC52xx_PSC_TX_ENABLE        0x0004
  45. #define MPC52xx_PSC_TX_DISABLE        0x0008
  46. #define MPC52xx_PSC_SEL_MODE_REG_1    0x0010
  47. #define MPC52xx_PSC_RST_RX        0x0020
  48. #define MPC52xx_PSC_RST_TX        0x0030
  49. #define MPC52xx_PSC_RST_ERR_STAT    0x0040
  50. #define MPC52xx_PSC_RST_BRK_CHG_INT    0x0050
  51. #define MPC52xx_PSC_START_BRK        0x0060
  52. #define MPC52xx_PSC_STOP_BRK        0x0070
  53.  
  54. /* PSC TxRx FIFO status bits */
  55. #define MPC52xx_PSC_RXTX_FIFO_ERR    0x0040
  56. #define MPC52xx_PSC_RXTX_FIFO_UF    0x0020
  57. #define MPC52xx_PSC_RXTX_FIFO_OF    0x0010
  58. #define MPC52xx_PSC_RXTX_FIFO_FR    0x0008
  59. #define MPC52xx_PSC_RXTX_FIFO_FULL    0x0004
  60. #define MPC52xx_PSC_RXTX_FIFO_ALARM    0x0002
  61. #define MPC52xx_PSC_RXTX_FIFO_EMPTY    0x0001
  62.  
  63. /* PSC interrupt status/mask bits */
  64. #define MPC52xx_PSC_IMR_TXRDY        0x0100
  65. #define MPC52xx_PSC_IMR_RXRDY        0x0200
  66. #define MPC52xx_PSC_IMR_DB        0x0400
  67. #define MPC52xx_PSC_IMR_TXEMP        0x0800
  68. #define MPC52xx_PSC_IMR_ORERR        0x1000
  69. #define MPC52xx_PSC_IMR_IPC        0x8000
  70.  
  71. /* PSC input port change bit */
  72. #define MPC52xx_PSC_CTS            0x01
  73. #define MPC52xx_PSC_DCD            0x02
  74. #define MPC52xx_PSC_D_CTS        0x10
  75. #define MPC52xx_PSC_D_DCD        0x20
  76.  
  77. /* PSC mode fields */
  78. #define MPC52xx_PSC_MODE_5_BITS            0x00
  79. #define MPC52xx_PSC_MODE_6_BITS            0x01
  80. #define MPC52xx_PSC_MODE_7_BITS            0x02
  81. #define MPC52xx_PSC_MODE_8_BITS            0x03
  82. #define MPC52xx_PSC_MODE_BITS_MASK        0x03
  83. #define MPC52xx_PSC_MODE_PAREVEN        0x00
  84. #define MPC52xx_PSC_MODE_PARODD            0x04
  85. #define MPC52xx_PSC_MODE_PARFORCE        0x08
  86. #define MPC52xx_PSC_MODE_PARNONE        0x10
  87. #define MPC52xx_PSC_MODE_ERR            0x20
  88. #define MPC52xx_PSC_MODE_FFULL            0x40
  89. #define MPC52xx_PSC_MODE_RXRTS            0x80
  90.  
  91. #define MPC52xx_PSC_MODE_ONE_STOP_5_BITS    0x00
  92. #define MPC52xx_PSC_MODE_ONE_STOP        0x07
  93. #define MPC52xx_PSC_MODE_TWO_STOP        0x0f
  94.  
  95. #define MPC52xx_PSC_RFNUM_MASK    0x01ff
  96.  
  97. #define MPC52xx_PSC_SICR_DTS1            (1 << 29)
  98. #define MPC52xx_PSC_SICR_SHDR            (1 << 28)
  99. #define MPC52xx_PSC_SICR_SIM_MASK        (0xf << 24)
  100. #define MPC52xx_PSC_SICR_SIM_UART        (0x0 << 24)
  101. #define MPC52xx_PSC_SICR_SIM_UART_DCD        (0x8 << 24)
  102. #define MPC52xx_PSC_SICR_SIM_CODEC_8        (0x1 << 24)
  103. #define MPC52xx_PSC_SICR_SIM_CODEC_16        (0x2 << 24)
  104. #define MPC52xx_PSC_SICR_SIM_AC97        (0x3 << 24)
  105. #define MPC52xx_PSC_SICR_SIM_SIR        (0x8 << 24)
  106. #define MPC52xx_PSC_SICR_SIM_SIR_DCD        (0xc << 24)
  107. #define MPC52xx_PSC_SICR_SIM_MIR        (0x5 << 24)
  108. #define MPC52xx_PSC_SICR_SIM_FIR        (0x6 << 24)
  109. #define MPC52xx_PSC_SICR_SIM_CODEC_24        (0x7 << 24)
  110. #define MPC52xx_PSC_SICR_SIM_CODEC_32        (0xf << 24)
  111. #define MPC52xx_PSC_SICR_GENCLK            (1 << 23)
  112. #define MPC52xx_PSC_SICR_I2S            (1 << 22)
  113. #define MPC52xx_PSC_SICR_CLKPOL            (1 << 21)
  114. #define MPC52xx_PSC_SICR_SYNCPOL        (1 << 20)
  115. #define MPC52xx_PSC_SICR_CELLSLAVE        (1 << 19)
  116. #define MPC52xx_PSC_SICR_CELL2XCLK        (1 << 18)
  117. #define MPC52xx_PSC_SICR_ESAI            (1 << 17)
  118. #define MPC52xx_PSC_SICR_ENAC97            (1 << 16)
  119. #define MPC52xx_PSC_SICR_SPI            (1 << 15)
  120. #define MPC52xx_PSC_SICR_MSTR            (1 << 14)
  121. #define MPC52xx_PSC_SICR_CPOL            (1 << 13)
  122. #define MPC52xx_PSC_SICR_CPHA            (1 << 12)
  123. #define MPC52xx_PSC_SICR_USEEOF            (1 << 11)
  124. #define MPC52xx_PSC_SICR_DISABLEEOF        (1 << 10)
  125.  
  126. /* Structure of the hardware registers */
  127. struct mpc52xx_psc {
  128.     u8        mode;        /* PSC + 0x00 */
  129.     u8        reserved0[3];
  130.     union {                /* PSC + 0x04 */
  131.         u16    status;
  132.         u16    clock_select;
  133.     } sr_csr;
  134. #define mpc52xx_psc_status    sr_csr.status
  135. #define mpc52xx_psc_clock_select sr_csr.clock_select
  136.     u16        reserved1;
  137.     u8        command;    /* PSC + 0x08 */
  138.     u8        reserved2[3];
  139.     union {                /* PSC + 0x0c */
  140.         u8    buffer_8;
  141.         u16    buffer_16;
  142.         u32    buffer_32;
  143.     } buffer;
  144. #define mpc52xx_psc_buffer_8    buffer.buffer_8
  145. #define mpc52xx_psc_buffer_16    buffer.buffer_16
  146. #define mpc52xx_psc_buffer_32    buffer.buffer_32
  147.     union {                /* PSC + 0x10 */
  148.         u8    ipcr;
  149.         u8    acr;
  150.     } ipcr_acr;
  151. #define mpc52xx_psc_ipcr    ipcr_acr.ipcr
  152. #define mpc52xx_psc_acr        ipcr_acr.acr
  153.     u8        reserved3[3];
  154.     union {                /* PSC + 0x14 */
  155.         u16    isr;
  156.         u16    imr;
  157.     } isr_imr;
  158. #define mpc52xx_psc_isr        isr_imr.isr
  159. #define mpc52xx_psc_imr        isr_imr.imr
  160.     u16        reserved4;
  161.     u8        ctur;        /* PSC + 0x18 */
  162.     u8        reserved5[3];
  163.     u8        ctlr;        /* PSC + 0x1c */
  164.     u8        reserved6[3];
  165.     /* BitClkDiv field of CCR is byte swapped in
  166.      * the hardware for mpc5200/b compatibility */
  167.     u32        ccr;        /* PSC + 0x20 */
  168.     u32        ac97_slots;    /* PSC + 0x24 */
  169.     u32        ac97_cmd;    /* PSC + 0x28 */
  170.     u32        ac97_data;    /* PSC + 0x2c */
  171.     u8        ivr;        /* PSC + 0x30 */
  172.     u8        reserved8[3];
  173.     u8        ip;        /* PSC + 0x34 */
  174.     u8        reserved9[3];
  175.     u8        op1;        /* PSC + 0x38 */
  176.     u8        reserved10[3];
  177.     u8        op0;        /* PSC + 0x3c */
  178.     u8        reserved11[3];
  179.     u32        sicr;        /* PSC + 0x40 */
  180.     u8        ircr1;        /* PSC + 0x44 */
  181.     u8        reserved13[3];
  182.     u8        ircr2;        /* PSC + 0x44 */
  183.     u8        reserved14[3];
  184.     u8        irsdr;        /* PSC + 0x4c */
  185.     u8        reserved15[3];
  186.     u8        irmdr;        /* PSC + 0x50 */
  187.     u8        reserved16[3];
  188.     u8        irfdr;        /* PSC + 0x54 */
  189.     u8        reserved17[3];
  190. };
  191.  
  192. struct mpc52xx_psc_fifo {
  193.     u16        rfnum;        /* PSC + 0x58 */
  194.     u16        reserved18;
  195.     u16        tfnum;        /* PSC + 0x5c */
  196.     u16        reserved19;
  197.     u32        rfdata;        /* PSC + 0x60 */
  198.     u16        rfstat;        /* PSC + 0x64 */
  199.     u16        reserved20;
  200.     u8        rfcntl;        /* PSC + 0x68 */
  201.     u8        reserved21[5];
  202.     u16        rfalarm;    /* PSC + 0x6e */
  203.     u16        reserved22;
  204.     u16        rfrptr;        /* PSC + 0x72 */
  205.     u16        reserved23;
  206.     u16        rfwptr;        /* PSC + 0x76 */
  207.     u16        reserved24;
  208.     u16        rflrfptr;    /* PSC + 0x7a */
  209.     u16        reserved25;
  210.     u16        rflwfptr;    /* PSC + 0x7e */
  211.     u32        tfdata;        /* PSC + 0x80 */
  212.     u16        tfstat;        /* PSC + 0x84 */
  213.     u16        reserved26;
  214.     u8        tfcntl;        /* PSC + 0x88 */
  215.     u8        reserved27[5];
  216.     u16        tfalarm;    /* PSC + 0x8e */
  217.     u16        reserved28;
  218.     u16        tfrptr;        /* PSC + 0x92 */
  219.     u16        reserved29;
  220.     u16        tfwptr;        /* PSC + 0x96 */
  221.     u16        reserved30;
  222.     u16        tflrfptr;    /* PSC + 0x9a */
  223.     u16        reserved31;
  224.     u16        tflwfptr;    /* PSC + 0x9e */
  225. };
  226.  
  227. #define MPC512x_PSC_FIFO_RESET_SLICE    0x80
  228. #define MPC512x_PSC_FIFO_ENABLE_SLICE    0x01
  229. #define MPC512x_PSC_FIFO_ENABLE_DMA    0x04
  230.  
  231. #define MPC512x_PSC_FIFO_EMPTY        0x1
  232. #define MPC512x_PSC_FIFO_FULL        0x2
  233. #define MPC512x_PSC_FIFO_ALARM        0x4
  234. #define MPC512x_PSC_FIFO_URERR        0x8
  235. #define MPC512x_PSC_FIFO_ORERR        0x01
  236. #define MPC512x_PSC_FIFO_MEMERROR    0x02
  237.  
  238. struct mpc512x_psc_fifo {
  239.     u32        reserved1[10];
  240.     u32        txcmd;        /* PSC + 0x80 */
  241.     u32        txalarm;    /* PSC + 0x84 */
  242.     u32        txsr;        /* PSC + 0x88 */
  243.     u32        txisr;        /* PSC + 0x8c */
  244.     u32        tximr;        /* PSC + 0x90 */
  245.     u32        txcnt;        /* PSC + 0x94 */
  246.     u32        txptr;        /* PSC + 0x98 */
  247.     u32        txsz;        /* PSC + 0x9c */
  248.     u32        reserved2[7];
  249.     union {
  250.         u8    txdata_8;
  251.         u16    txdata_16;
  252.         u32    txdata_32;
  253.     } txdata;             /* PSC + 0xbc */
  254. #define txdata_8 txdata.txdata_8
  255. #define txdata_16 txdata.txdata_16
  256. #define txdata_32 txdata.txdata_32
  257.     u32        rxcmd;        /* PSC + 0xc0 */
  258.     u32        rxalarm;    /* PSC + 0xc4 */
  259.     u32        rxsr;        /* PSC + 0xc8 */
  260.     u32        rxisr;        /* PSC + 0xcc */
  261.     u32        rximr;        /* PSC + 0xd0 */
  262.     u32        rxcnt;        /* PSC + 0xd4 */
  263.     u32        rxptr;        /* PSC + 0xd8 */
  264.     u32        rxsz;        /* PSC + 0xdc */
  265.     u32        reserved3[7];
  266.     union {
  267.         u8    rxdata_8;
  268.         u16    rxdata_16;
  269.         u32    rxdata_32;
  270.     } rxdata;             /* PSC + 0xfc */
  271. #define rxdata_8 rxdata.rxdata_8
  272. #define rxdata_16 rxdata.rxdata_16
  273. #define rxdata_32 rxdata.rxdata_32
  274. };
  275.  
  276. #endif  /* __ASM_MPC52xx_PSC_H__ */
  277.