0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef __UCC_FAST_H__
0011 #define __UCC_FAST_H__
0012
0013 #include <linux/types.h>
0014
0015 #include <soc/fsl/qe/immap_qe.h>
0016 #include <soc/fsl/qe/qe.h>
0017
0018 #include <soc/fsl/qe/ucc.h>
0019
0020
0021 #define R_E 0x80000000
0022 #define R_W 0x20000000
0023 #define R_I 0x10000000
0024 #define R_L 0x08000000
0025 #define R_F 0x04000000
0026
0027
0028 #define T_R 0x80000000
0029 #define T_W 0x20000000
0030 #define T_I 0x10000000
0031 #define T_L 0x08000000
0032
0033
0034 #define R_E_S 0x8000
0035 #define R_W_S 0x2000
0036 #define R_I_S 0x1000
0037 #define R_L_S 0x0800
0038 #define R_F_S 0x0400
0039 #define R_CM_S 0x0200
0040 #define R_LG_S 0x0020
0041 #define R_NO_S 0x0010
0042 #define R_AB_S 0x0008
0043 #define R_CR_S 0x0004
0044 #define R_OV_S 0x0002
0045 #define R_CD_S 0x0001
0046
0047
0048 #define T_R_S 0x8000
0049 #define T_W_S 0x2000
0050 #define T_I_S 0x1000
0051 #define T_L_S 0x0800
0052 #define T_TC_S 0x0400
0053 #define T_TM_S 0x0200
0054 #define T_UN_S 0x0002
0055 #define T_CT_S 0x0001
0056
0057
0058 #define UCC_FAST_RX_ALIGN 4
0059 #define UCC_FAST_MRBLR_ALIGNMENT 4
0060 #define UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT 8
0061
0062
0063 #define UCC_FAST_URFS_MIN_VAL 0x88
0064 #define UCC_FAST_RECEIVE_VIRTUAL_FIFO_SIZE_FUDGE_FACTOR 8
0065
0066
0067 enum ucc_fast_channel_protocol_mode {
0068 UCC_FAST_PROTOCOL_MODE_HDLC = 0x00000000,
0069 UCC_FAST_PROTOCOL_MODE_RESERVED01 = 0x00000001,
0070 UCC_FAST_PROTOCOL_MODE_RESERVED_QMC = 0x00000002,
0071 UCC_FAST_PROTOCOL_MODE_RESERVED02 = 0x00000003,
0072 UCC_FAST_PROTOCOL_MODE_RESERVED_UART = 0x00000004,
0073 UCC_FAST_PROTOCOL_MODE_RESERVED03 = 0x00000005,
0074 UCC_FAST_PROTOCOL_MODE_RESERVED_EX_MAC_1 = 0x00000006,
0075 UCC_FAST_PROTOCOL_MODE_RESERVED_EX_MAC_2 = 0x00000007,
0076 UCC_FAST_PROTOCOL_MODE_RESERVED_BISYNC = 0x00000008,
0077 UCC_FAST_PROTOCOL_MODE_RESERVED04 = 0x00000009,
0078 UCC_FAST_PROTOCOL_MODE_ATM = 0x0000000A,
0079 UCC_FAST_PROTOCOL_MODE_RESERVED05 = 0x0000000B,
0080 UCC_FAST_PROTOCOL_MODE_ETHERNET = 0x0000000C,
0081 UCC_FAST_PROTOCOL_MODE_RESERVED06 = 0x0000000D,
0082 UCC_FAST_PROTOCOL_MODE_POS = 0x0000000E,
0083 UCC_FAST_PROTOCOL_MODE_RESERVED07 = 0x0000000F
0084 };
0085
0086
0087 enum ucc_fast_transparent_txrx {
0088 UCC_FAST_GUMR_TRANSPARENT_TTX_TRX_NORMAL = 0x00000000,
0089 UCC_FAST_GUMR_TRANSPARENT_TTX_TRX_TRANSPARENT = 0x18000000
0090 };
0091
0092
0093 enum ucc_fast_diag_mode {
0094 UCC_FAST_DIAGNOSTIC_NORMAL = 0x0,
0095 UCC_FAST_DIAGNOSTIC_LOCAL_LOOP_BACK = 0x40000000,
0096 UCC_FAST_DIAGNOSTIC_AUTO_ECHO = 0x80000000,
0097 UCC_FAST_DIAGNOSTIC_LOOP_BACK_AND_ECHO = 0xC0000000
0098 };
0099
0100
0101 enum ucc_fast_sync_len {
0102 UCC_FAST_SYNC_LEN_NOT_USED = 0x0,
0103 UCC_FAST_SYNC_LEN_AUTOMATIC = 0x00004000,
0104 UCC_FAST_SYNC_LEN_8_BIT = 0x00008000,
0105 UCC_FAST_SYNC_LEN_16_BIT = 0x0000C000
0106 };
0107
0108
0109 enum ucc_fast_ready_to_send {
0110 UCC_FAST_SEND_IDLES_BETWEEN_FRAMES = 0x00000000,
0111 UCC_FAST_SEND_FLAGS_BETWEEN_FRAMES = 0x00002000
0112 };
0113
0114
0115 enum ucc_fast_rx_decoding_method {
0116 UCC_FAST_RX_ENCODING_NRZ = 0x00000000,
0117 UCC_FAST_RX_ENCODING_NRZI = 0x00000800,
0118 UCC_FAST_RX_ENCODING_RESERVED0 = 0x00001000,
0119 UCC_FAST_RX_ENCODING_RESERVED1 = 0x00001800
0120 };
0121
0122
0123 enum ucc_fast_tx_encoding_method {
0124 UCC_FAST_TX_ENCODING_NRZ = 0x00000000,
0125 UCC_FAST_TX_ENCODING_NRZI = 0x00000100,
0126 UCC_FAST_TX_ENCODING_RESERVED0 = 0x00000200,
0127 UCC_FAST_TX_ENCODING_RESERVED1 = 0x00000300
0128 };
0129
0130
0131 enum ucc_fast_transparent_tcrc {
0132 UCC_FAST_16_BIT_CRC = 0x00000000,
0133 UCC_FAST_CRC_RESERVED0 = 0x00000040,
0134 UCC_FAST_32_BIT_CRC = 0x00000080,
0135 UCC_FAST_CRC_RESERVED1 = 0x000000C0
0136 };
0137
0138
0139 struct ucc_fast_info {
0140 int ucc_num;
0141 int tdm_num;
0142 enum qe_clock rx_clock;
0143 enum qe_clock tx_clock;
0144 enum qe_clock rx_sync;
0145 enum qe_clock tx_sync;
0146 resource_size_t regs;
0147 int irq;
0148 u32 uccm_mask;
0149 int brkpt_support;
0150 int grant_support;
0151 int tsa;
0152 int cdp;
0153 int cds;
0154 int ctsp;
0155 int ctss;
0156 int tci;
0157 int txsy;
0158 int rtsm;
0159 int revd;
0160 int rsyn;
0161 u16 max_rx_buf_length;
0162 u16 urfs;
0163 u16 urfet;
0164 u16 urfset;
0165 u16 utfs;
0166 u16 utfet;
0167 u16 utftt;
0168 u16 ufpt;
0169 enum ucc_fast_channel_protocol_mode mode;
0170 enum ucc_fast_transparent_txrx ttx_trx;
0171 enum ucc_fast_tx_encoding_method tenc;
0172 enum ucc_fast_rx_decoding_method renc;
0173 enum ucc_fast_transparent_tcrc tcrc;
0174 enum ucc_fast_sync_len synl;
0175 };
0176
0177 struct ucc_fast_private {
0178 struct ucc_fast_info *uf_info;
0179 struct ucc_fast __iomem *uf_regs;
0180 __be32 __iomem *p_ucce;
0181 __be32 __iomem *p_uccm;
0182 #ifdef CONFIG_UGETH_TX_ON_DEMAND
0183 __be16 __iomem *p_utodr;
0184 #endif
0185 int enabled_tx;
0186 int enabled_rx;
0187 int stopped_tx;
0188
0189 int stopped_rx;
0190 s32 ucc_fast_tx_virtual_fifo_base_offset;
0191
0192 s32 ucc_fast_rx_virtual_fifo_base_offset;
0193
0194 #ifdef STATISTICS
0195 u32 tx_frames;
0196 u32 rx_frames;
0197
0198 u32 tx_discarded;
0199
0200
0201 u32 rx_discarded;
0202
0203
0204 #endif
0205 u16 mrblr;
0206 };
0207
0208
0209
0210
0211
0212
0213
0214 int ucc_fast_init(struct ucc_fast_info * uf_info, struct ucc_fast_private ** uccf_ret);
0215
0216
0217
0218
0219
0220
0221 void ucc_fast_free(struct ucc_fast_private * uccf);
0222
0223
0224
0225
0226
0227
0228
0229
0230 void ucc_fast_enable(struct ucc_fast_private * uccf, enum comm_dir mode);
0231
0232
0233
0234
0235
0236
0237
0238
0239 void ucc_fast_disable(struct ucc_fast_private * uccf, enum comm_dir mode);
0240
0241
0242
0243
0244
0245
0246
0247 void ucc_fast_irq(struct ucc_fast_private * uccf);
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260 void ucc_fast_transmit_on_demand(struct ucc_fast_private * uccf);
0261
0262 u32 ucc_fast_get_qe_cr_subblock(int uccf_num);
0263
0264 void ucc_fast_dump_regs(struct ucc_fast_private * uccf);
0265
0266 #endif