smc-ircc.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:6k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*********************************************************************
  2.  *                
  3.  * Filename:      smc-ircc.h
  4.  * Version:       0.3
  5.  * Description:   Definitions for the SMC IrCC chipset
  6.  * Status:        Experimental.
  7.  * Author:        Thomas Davis (tadavis@jps.net)
  8.  *
  9.  *     Copyright (c) 1999-2000, Dag Brattli <dagb@cs.uit.no>
  10.  *     Copyright (c) 1998-1999, Thomas Davis (tadavis@jps.net>
  11.  *     All Rights Reserved
  12.  *      
  13.  *     This program is free software; you can redistribute it and/or 
  14.  *     modify it under the terms of the GNU General Public License as 
  15.  *     published by the Free Software Foundation; either version 2 of 
  16.  *     the License, or (at your option) any later version.
  17.  * 
  18.  *     This program is distributed in the hope that it will be useful,
  19.  *     but WITHOUT ANY WARRANTY; without even the implied warranty of
  20.  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  21.  *     GNU General Public License for more details.
  22.  * 
  23.  *     You should have received a copy of the GNU General Public License 
  24.  *     along with this program; if not, write to the Free Software 
  25.  *     Foundation, Inc., 59 Temple Place, Suite 330, Boston, 
  26.  *     MA 02111-1307 USA
  27.  *
  28.  ********************************************************************/
  29. #ifndef SMC_IRCC_H
  30. #define SMC_IRCC_H
  31. #include <linux/spinlock.h>
  32. #include <linux/pm.h>
  33. #include <net/irda/irport.h>
  34. /* DMA modes needed */
  35. #define DMA_TX_MODE                0x08    /* Mem to I/O, ++, demand. */
  36. #define DMA_RX_MODE                0x04    /* I/O to mem, ++, demand. */
  37. /* Master Control Register */
  38. #define IRCC_MASTER                0x07
  39. #define   IRCC_MASTER_POWERDOWN    0x80
  40. #define   IRCC_MASTER_RESET        0x40
  41. #define   IRCC_MASTER_INT_EN       0x20
  42. #define   IRCC_MASTER_ERROR_RESET  0x10
  43. /* Register block 0 */
  44. /* Interrupt Identification */
  45. #define IRCC_IIR                   0x01
  46. #define   IRCC_IIR_ACTIVE_FRAME    0x80
  47. #define   IRCC_IIR_EOM             0x40
  48. #define   IRCC_IIR_RAW_MODE        0x20
  49. #define   IRCC_IIR_FIFO    0x10
  50. /* Interrupt Enable */
  51. #define IRCC_IER                   0x02
  52. #define   IRCC_IER_ACTIVE_FRAME    0x80
  53. #define   IRCC_IER_EOM     0x40
  54. #define   IRCC_IER_RAW_MODE        0x20
  55. #define   IRCC_IER_FIFO    0x10
  56. /* Line Status Register */
  57. #define IRCC_LSR                   0x03
  58. #define   IRCC_LSR_UNDERRUN        0x80
  59. #define   IRCC_LSR_OVERRUN         0x40
  60. #define   IRCC_LSR_FRAME_ERROR     0x20
  61. #define   IRCC_LSR_SIZE_ERROR      0x10
  62. #define   IRCC_LSR_CRC_ERROR       0x80
  63. #define   IRCC_LSR_FRAME_ABORT     0x40
  64. /* Line Control Register A */
  65. #define IRCC_LCR_A                 0x04
  66. #define   IRCC_LCR_A_FIFO_RESET    0x80
  67. #define   IRCC_LCR_A_FAST          0x40
  68. #define   IRCC_LCR_A_GP_DATA       0x20
  69. #define   IRCC_LCR_A_RAW_TX        0x10
  70. #define   IRCC_LCR_A_RAW_RX        0x08
  71. #define   IRCC_LCR_A_ABORT         0x04
  72. #define   IRCC_LCR_A_DATA_DONE     0x02
  73. /* Line Control Register B */
  74. #define IRCC_LCR_B                 0x05
  75. #define   IRCC_LCR_B_SCE_DISABLED  0x00
  76. #define   IRCC_LCR_B_SCE_TRANSMIT  0x40
  77. #define   IRCC_LCR_B_SCE_RECEIVE   0x80
  78. #define   IRCC_LCR_B_SCE_UNDEFINED 0xc0
  79. #define   IRCC_LCR_B_SIP_ENABLE    0x20
  80. #define   IRCC_LCR_B_BRICK_WALL    0x10
  81. /* Bus Status Register */
  82. #define IRCC_BSR                   0x06
  83. #define   IRCC_BSR_NOT_EMPTY    0x80
  84. #define   IRCC_BSR_FIFO_FULL    0x40
  85. #define   IRCC_BSR_TIMEOUT    0x20
  86. /* Register block 1 */
  87. #define IRCC_FIFO_THRESHOLD    0x02
  88. #define IRCC_SCE_CFGA            0x00
  89. #define   IRCC_CFGA_AUX_IR    0x80
  90. #define   IRCC_CFGA_HALF_DUPLEX    0x04
  91. #define   IRCC_CFGA_TX_POLARITY    0x02
  92. #define   IRCC_CFGA_RX_POLARITY    0x01
  93. #define   IRCC_CFGA_COM    0x00
  94. #define   IRCC_CFGA_IRDA_SIR_A    0x08
  95. #define   IRCC_CFGA_ASK_SIR    0x10
  96. #define   IRCC_CFGA_IRDA_SIR_B    0x18
  97. #define   IRCC_CFGA_IRDA_HDLC     0x20
  98. #define   IRCC_CFGA_IRDA_4PPM     0x28
  99. #define   IRCC_CFGA_CONSUMER    0x30
  100. #define   IRCC_CFGA_RAW_IR    0x38
  101. #define   IRCC_CFGA_OTHER          0x40
  102. #define IRCC_IR_HDLC               0x04
  103. #define IRCC_IR_4PPM               0x01
  104. #define IRCC_IR_CONSUMER           0x02
  105. #define IRCC_SCE_CFGB            0x01
  106. #define IRCC_CFGB_LOOPBACK         0x20
  107. #define IRCC_CFGB_LPBCK_TX_CRC    0x10
  108. #define IRCC_CFGB_NOWAIT    0x08
  109. #define IRCC_CFGB_STRING_MOVE    0x04
  110. #define IRCC_CFGB_DMA_BURST     0x02
  111. #define IRCC_CFGB_DMA_ENABLE    0x01
  112. #define IRCC_CFGB_MUX_COM          0x00
  113. #define IRCC_CFGB_MUX_IR           0x40
  114. #define IRCC_CFGB_MUX_AUX          0x80
  115. #define IRCC_CFGB_MUX_INACTIVE    0xc0
  116. /* Register block 3 - Identification Registers! */
  117. #define IRCC_ID_HIGH            0x00   /* 0x10 */
  118. #define IRCC_ID_LOW            0x01   /* 0xB8 */
  119. #define IRCC_CHIP_ID             0x02   /* 0xF1 */
  120. #define IRCC_VERSION            0x03   /* 0x01 */
  121. #define IRCC_INTERFACE            0x04   /* low 4 = DMA, high 4 = IRQ */
  122. /* Register block 4 - IrDA */
  123. #define IRCC_CONTROL               0x00
  124. #define IRCC_BOF_COUNT_LO          0x01 /* Low byte */
  125. #define IRCC_BOF_COUNT_HI          0x00 /* High nibble (bit 0-3) */
  126. #define IRCC_BRICKWALL_CNT_LO      0x02 /* Low byte */
  127. #define IRCC_BRICKWALL_CNT_HI      0x03 /* High nibble (bit 4-7) */
  128. #define IRCC_TX_SIZE_LO            0x04 /* Low byte */
  129. #define IRCC_TX_SIZE_HI            0x03 /* High nibble (bit 0-3) */
  130. #define IRCC_RX_SIZE_HI            0x05 /* High nibble (bit 0-3) */
  131. #define IRCC_RX_SIZE_LO            0x06 /* Low byte */
  132. #define IRCC_1152                  0x80
  133. #define IRCC_CRC                   0x40
  134. /* Private data for each instance */
  135. struct ircc_cb {
  136. struct net_device *netdev;     /* Yes! we are some kind of netdevice */
  137. struct irlap_cb    *irlap; /* The link layer we are binded to */
  138. chipio_t *io;               /* IrDA controller information */
  139. iobuff_t tx_buff;          /* Transmit buffer */
  140. iobuff_t rx_buff;          /* Receive buffer */
  141. struct irport_cb *irport;
  142. spinlock_t lock;           /* For serializing operations */
  143. __u32 new_speed;
  144. __u32 flags;               /* Interface flags */
  145. int tx_buff_offsets[10];   /* Offsets between frames in tx_buff */
  146. int tx_len;                /* Number of frames in tx_buff */
  147. struct pm_dev *pmdev;
  148. };
  149. #endif /* SMC_IRCC_H */