1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * MPC8xx Communication Processor Module. 3*4882a593Smuzhiyun * Copyright (c) 1997 Dan Malek (dmalek@jlc.net) 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * (C) Copyright 2000-2006 6*4882a593Smuzhiyun * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * This file contains structures and information for the communication 9*4882a593Smuzhiyun * processor channels. Some CPM control and status is available 10*4882a593Smuzhiyun * through the MPC8xx internal memory map. See immap.h for details. 11*4882a593Smuzhiyun * This file only contains what I need for the moment, not the total 12*4882a593Smuzhiyun * CPM capabilities. I (or someone else) will add definitions as they 13*4882a593Smuzhiyun * are needed. -- Dan 14*4882a593Smuzhiyun * 15*4882a593Smuzhiyun */ 16*4882a593Smuzhiyun #ifndef __CPM_8XX__ 17*4882a593Smuzhiyun #define __CPM_8XX__ 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #include <asm/immap_8xx.h> 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun /* CPM Command register. 22*4882a593Smuzhiyun */ 23*4882a593Smuzhiyun #define CPM_CR_RST ((ushort)0x8000) 24*4882a593Smuzhiyun #define CPM_CR_OPCODE ((ushort)0x0f00) 25*4882a593Smuzhiyun #define CPM_CR_CHAN ((ushort)0x00f0) 26*4882a593Smuzhiyun #define CPM_CR_FLG ((ushort)0x0001) 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun /* Some commands (there are more...later) 29*4882a593Smuzhiyun */ 30*4882a593Smuzhiyun #define CPM_CR_INIT_TRX ((ushort)0x0000) 31*4882a593Smuzhiyun #define CPM_CR_INIT_RX ((ushort)0x0001) 32*4882a593Smuzhiyun #define CPM_CR_INIT_TX ((ushort)0x0002) 33*4882a593Smuzhiyun #define CPM_CR_HUNT_MODE ((ushort)0x0003) 34*4882a593Smuzhiyun #define CPM_CR_STOP_TX ((ushort)0x0004) 35*4882a593Smuzhiyun #define CPM_CR_RESTART_TX ((ushort)0x0006) 36*4882a593Smuzhiyun #define CPM_CR_SET_GADDR ((ushort)0x0008) 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun /* Channel numbers. 39*4882a593Smuzhiyun */ 40*4882a593Smuzhiyun #define CPM_CR_CH_SCC1 ((ushort)0x0000) 41*4882a593Smuzhiyun #define CPM_CR_CH_I2C ((ushort)0x0001) /* I2C and IDMA1 */ 42*4882a593Smuzhiyun #define CPM_CR_CH_SCC2 ((ushort)0x0004) 43*4882a593Smuzhiyun #define CPM_CR_CH_SPI ((ushort)0x0005) /* SPI/IDMA2/Timers */ 44*4882a593Smuzhiyun #define CPM_CR_CH_SCC3 ((ushort)0x0008) 45*4882a593Smuzhiyun #define CPM_CR_CH_SMC1 ((ushort)0x0009) /* SMC1 / DSP1 */ 46*4882a593Smuzhiyun #define CPM_CR_CH_SCC4 ((ushort)0x000c) 47*4882a593Smuzhiyun #define CPM_CR_CH_SMC2 ((ushort)0x000d) /* SMC2 / DSP2 */ 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun #define mk_cr_cmd(CH, CMD) ((CMD << 8) | (CH << 4)) 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun /* 52*4882a593Smuzhiyun * DPRAM defines and allocation functions 53*4882a593Smuzhiyun */ 54*4882a593Smuzhiyun #define CPM_SERIAL_BASE 0x0800 55*4882a593Smuzhiyun #define CPM_I2C_BASE 0x0820 56*4882a593Smuzhiyun #define CPM_SPI_BASE 0x0840 57*4882a593Smuzhiyun #define CPM_FEC_BASE 0x0860 58*4882a593Smuzhiyun #define CPM_SERIAL2_BASE 0x08E0 59*4882a593Smuzhiyun #define CPM_SCC_BASE 0x0900 60*4882a593Smuzhiyun #define CPM_POST_BASE 0x0980 61*4882a593Smuzhiyun #define CPM_WLKBD_BASE 0x0a00 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun #define BD_IIC_START ((uint) 0x0400) /* <- please use CPM_I2C_BASE !! */ 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun /* Export the base address of the communication processor registers 66*4882a593Smuzhiyun * and dual port ram. 67*4882a593Smuzhiyun */ 68*4882a593Smuzhiyun extern cpm8xx_t *cpmp; /* Pointer to comm processor */ 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun /* Buffer descriptors used by many of the CPM protocols. 71*4882a593Smuzhiyun */ 72*4882a593Smuzhiyun typedef struct cpm_buf_desc { 73*4882a593Smuzhiyun ushort cbd_sc; /* Status and Control */ 74*4882a593Smuzhiyun ushort cbd_datlen; /* Data length in buffer */ 75*4882a593Smuzhiyun uint cbd_bufaddr; /* Buffer address in host memory */ 76*4882a593Smuzhiyun } cbd_t; 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun #define BD_SC_EMPTY ((ushort)0x8000) /* Receive is empty */ 79*4882a593Smuzhiyun #define BD_SC_READY ((ushort)0x8000) /* Transmit is ready */ 80*4882a593Smuzhiyun #define BD_SC_WRAP ((ushort)0x2000) /* Last buffer descriptor */ 81*4882a593Smuzhiyun #define BD_SC_INTRPT ((ushort)0x1000) /* Interrupt on change */ 82*4882a593Smuzhiyun #define BD_SC_LAST ((ushort)0x0800) /* Last buffer in frame */ 83*4882a593Smuzhiyun #define BD_SC_TC ((ushort)0x0400) /* Transmit CRC */ 84*4882a593Smuzhiyun #define BD_SC_CM ((ushort)0x0200) /* Continuous mode */ 85*4882a593Smuzhiyun #define BD_SC_ID ((ushort)0x0100) /* Rec'd too many idles */ 86*4882a593Smuzhiyun #define BD_SC_P ((ushort)0x0100) /* xmt preamble */ 87*4882a593Smuzhiyun #define BD_SC_BR ((ushort)0x0020) /* Break received */ 88*4882a593Smuzhiyun #define BD_SC_FR ((ushort)0x0010) /* Framing error */ 89*4882a593Smuzhiyun #define BD_SC_PR ((ushort)0x0008) /* Parity error */ 90*4882a593Smuzhiyun #define BD_SC_OV ((ushort)0x0002) /* Overrun */ 91*4882a593Smuzhiyun #define BD_SC_CD ((ushort)0x0001) /* Carrier Detect lost */ 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun /* Parameter RAM offsets. 94*4882a593Smuzhiyun */ 95*4882a593Smuzhiyun #define PROFF_SCC1 ((uint)0x0000) 96*4882a593Smuzhiyun #define PROFF_IIC ((uint)0x0080) 97*4882a593Smuzhiyun #define PROFF_REVNUM ((uint)0x00b0) 98*4882a593Smuzhiyun #define PROFF_SCC2 ((uint)0x0100) 99*4882a593Smuzhiyun #define PROFF_SPI ((uint)0x0180) 100*4882a593Smuzhiyun #define PROFF_SCC3 ((uint)0x0200) 101*4882a593Smuzhiyun #define PROFF_SMC1 ((uint)0x0280) 102*4882a593Smuzhiyun #define PROFF_SCC4 ((uint)0x0300) 103*4882a593Smuzhiyun #define PROFF_SMC2 ((uint)0x0380) 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun /* Define enough so I can at least use the serial port as a UART. 106*4882a593Smuzhiyun */ 107*4882a593Smuzhiyun typedef struct smc_uart { 108*4882a593Smuzhiyun ushort smc_rbase; /* Rx Buffer descriptor base address */ 109*4882a593Smuzhiyun ushort smc_tbase; /* Tx Buffer descriptor base address */ 110*4882a593Smuzhiyun u_char smc_rfcr; /* Rx function code */ 111*4882a593Smuzhiyun u_char smc_tfcr; /* Tx function code */ 112*4882a593Smuzhiyun ushort smc_mrblr; /* Max receive buffer length */ 113*4882a593Smuzhiyun uint smc_rstate; /* Internal */ 114*4882a593Smuzhiyun uint smc_idp; /* Internal */ 115*4882a593Smuzhiyun ushort smc_rbptr; /* Internal */ 116*4882a593Smuzhiyun ushort smc_ibc; /* Internal */ 117*4882a593Smuzhiyun uint smc_rxtmp; /* Internal */ 118*4882a593Smuzhiyun uint smc_tstate; /* Internal */ 119*4882a593Smuzhiyun uint smc_tdp; /* Internal */ 120*4882a593Smuzhiyun ushort smc_tbptr; /* Internal */ 121*4882a593Smuzhiyun ushort smc_tbc; /* Internal */ 122*4882a593Smuzhiyun uint smc_txtmp; /* Internal */ 123*4882a593Smuzhiyun ushort smc_maxidl; /* Maximum idle characters */ 124*4882a593Smuzhiyun ushort smc_tmpidl; /* Temporary idle counter */ 125*4882a593Smuzhiyun ushort smc_brklen; /* Last received break length */ 126*4882a593Smuzhiyun ushort smc_brkec; /* rcv'd break condition counter */ 127*4882a593Smuzhiyun ushort smc_brkcr; /* xmt break count register */ 128*4882a593Smuzhiyun ushort smc_rmask; /* Temporary bit mask */ 129*4882a593Smuzhiyun u_char res1[8]; 130*4882a593Smuzhiyun ushort smc_rpbase; /* Relocation pointer */ 131*4882a593Smuzhiyun } smc_uart_t; 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun /* Function code bits. 134*4882a593Smuzhiyun */ 135*4882a593Smuzhiyun #define SMC_EB ((u_char)0x10) /* Set big endian byte order */ 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun /* SMC uart mode register. 138*4882a593Smuzhiyun */ 139*4882a593Smuzhiyun #define SMCMR_REN ((ushort)0x0001) 140*4882a593Smuzhiyun #define SMCMR_TEN ((ushort)0x0002) 141*4882a593Smuzhiyun #define SMCMR_DM ((ushort)0x000c) 142*4882a593Smuzhiyun #define SMCMR_SM_GCI ((ushort)0x0000) 143*4882a593Smuzhiyun #define SMCMR_SM_UART ((ushort)0x0020) 144*4882a593Smuzhiyun #define SMCMR_SM_TRANS ((ushort)0x0030) 145*4882a593Smuzhiyun #define SMCMR_SM_MASK ((ushort)0x0030) 146*4882a593Smuzhiyun #define SMCMR_PM_EVEN ((ushort)0x0100) /* Even parity, else odd */ 147*4882a593Smuzhiyun #define SMCMR_REVD SMCMR_PM_EVEN 148*4882a593Smuzhiyun #define SMCMR_PEN ((ushort)0x0200) /* Parity enable */ 149*4882a593Smuzhiyun #define SMCMR_BS SMCMR_PEN 150*4882a593Smuzhiyun #define SMCMR_SL ((ushort)0x0400) /* Two stops, else one */ 151*4882a593Smuzhiyun #define SMCR_CLEN_MASK ((ushort)0x7800) /* Character length */ 152*4882a593Smuzhiyun #define smcr_mk_clen(C) (((C) << 11) & SMCR_CLEN_MASK) 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun /* SMC2 as Centronics parallel printer. It is half duplex, in that 155*4882a593Smuzhiyun * it can only receive or transmit. The parameter ram values for 156*4882a593Smuzhiyun * each direction are either unique or properly overlap, so we can 157*4882a593Smuzhiyun * include them in one structure. 158*4882a593Smuzhiyun */ 159*4882a593Smuzhiyun typedef struct smc_centronics { 160*4882a593Smuzhiyun ushort scent_rbase; 161*4882a593Smuzhiyun ushort scent_tbase; 162*4882a593Smuzhiyun u_char scent_cfcr; 163*4882a593Smuzhiyun u_char scent_smask; 164*4882a593Smuzhiyun ushort scent_mrblr; 165*4882a593Smuzhiyun uint scent_rstate; 166*4882a593Smuzhiyun uint scent_r_ptr; 167*4882a593Smuzhiyun ushort scent_rbptr; 168*4882a593Smuzhiyun ushort scent_r_cnt; 169*4882a593Smuzhiyun uint scent_rtemp; 170*4882a593Smuzhiyun uint scent_tstate; 171*4882a593Smuzhiyun uint scent_t_ptr; 172*4882a593Smuzhiyun ushort scent_tbptr; 173*4882a593Smuzhiyun ushort scent_t_cnt; 174*4882a593Smuzhiyun uint scent_ttemp; 175*4882a593Smuzhiyun ushort scent_max_sl; 176*4882a593Smuzhiyun ushort scent_sl_cnt; 177*4882a593Smuzhiyun ushort scent_character1; 178*4882a593Smuzhiyun ushort scent_character2; 179*4882a593Smuzhiyun ushort scent_character3; 180*4882a593Smuzhiyun ushort scent_character4; 181*4882a593Smuzhiyun ushort scent_character5; 182*4882a593Smuzhiyun ushort scent_character6; 183*4882a593Smuzhiyun ushort scent_character7; 184*4882a593Smuzhiyun ushort scent_character8; 185*4882a593Smuzhiyun ushort scent_rccm; 186*4882a593Smuzhiyun ushort scent_rccr; 187*4882a593Smuzhiyun } smc_cent_t; 188*4882a593Smuzhiyun 189*4882a593Smuzhiyun /* Centronics Status Mask Register. 190*4882a593Smuzhiyun */ 191*4882a593Smuzhiyun #define SMC_CENT_F ((u_char)0x08) 192*4882a593Smuzhiyun #define SMC_CENT_PE ((u_char)0x04) 193*4882a593Smuzhiyun #define SMC_CENT_S ((u_char)0x02) 194*4882a593Smuzhiyun 195*4882a593Smuzhiyun /* SMC Event and Mask register. 196*4882a593Smuzhiyun */ 197*4882a593Smuzhiyun #define SMCM_BRKE ((unsigned char)0x40) /* When in UART Mode */ 198*4882a593Smuzhiyun #define SMCM_BRK ((unsigned char)0x10) /* When in UART Mode */ 199*4882a593Smuzhiyun #define SMCM_TXE ((unsigned char)0x10) /* When in Transparent Mode */ 200*4882a593Smuzhiyun #define SMCM_BSY ((unsigned char)0x04) 201*4882a593Smuzhiyun #define SMCM_TX ((unsigned char)0x02) 202*4882a593Smuzhiyun #define SMCM_RX ((unsigned char)0x01) 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun /* Baud rate generators. 205*4882a593Smuzhiyun */ 206*4882a593Smuzhiyun #define CPM_BRG_RST ((uint)0x00020000) 207*4882a593Smuzhiyun #define CPM_BRG_EN ((uint)0x00010000) 208*4882a593Smuzhiyun #define CPM_BRG_EXTC_INT ((uint)0x00000000) 209*4882a593Smuzhiyun #define CPM_BRG_EXTC_CLK2 ((uint)0x00004000) 210*4882a593Smuzhiyun #define CPM_BRG_EXTC_CLK6 ((uint)0x00008000) 211*4882a593Smuzhiyun #define CPM_BRG_ATB ((uint)0x00002000) 212*4882a593Smuzhiyun #define CPM_BRG_CD_MASK ((uint)0x00001ffe) 213*4882a593Smuzhiyun #define CPM_BRG_DIV16 ((uint)0x00000001) 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun /* SI Clock Route Register 216*4882a593Smuzhiyun */ 217*4882a593Smuzhiyun #define SICR_RCLK_SCC1_BRG1 ((uint)0x00000000) 218*4882a593Smuzhiyun #define SICR_TCLK_SCC1_BRG1 ((uint)0x00000000) 219*4882a593Smuzhiyun #define SICR_RCLK_SCC2_BRG2 ((uint)0x00000800) 220*4882a593Smuzhiyun #define SICR_TCLK_SCC2_BRG2 ((uint)0x00000100) 221*4882a593Smuzhiyun #define SICR_RCLK_SCC3_BRG3 ((uint)0x00100000) 222*4882a593Smuzhiyun #define SICR_TCLK_SCC3_BRG3 ((uint)0x00020000) 223*4882a593Smuzhiyun #define SICR_RCLK_SCC4_BRG4 ((uint)0x18000000) 224*4882a593Smuzhiyun #define SICR_TCLK_SCC4_BRG4 ((uint)0x03000000) 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun /* SCCs. 227*4882a593Smuzhiyun */ 228*4882a593Smuzhiyun #define SCC_GSMRH_IRP ((uint)0x00040000) 229*4882a593Smuzhiyun #define SCC_GSMRH_GDE ((uint)0x00010000) 230*4882a593Smuzhiyun #define SCC_GSMRH_TCRC_CCITT ((uint)0x00008000) 231*4882a593Smuzhiyun #define SCC_GSMRH_TCRC_BISYNC ((uint)0x00004000) 232*4882a593Smuzhiyun #define SCC_GSMRH_TCRC_HDLC ((uint)0x00000000) 233*4882a593Smuzhiyun #define SCC_GSMRH_REVD ((uint)0x00002000) 234*4882a593Smuzhiyun #define SCC_GSMRH_TRX ((uint)0x00001000) 235*4882a593Smuzhiyun #define SCC_GSMRH_TTX ((uint)0x00000800) 236*4882a593Smuzhiyun #define SCC_GSMRH_CDP ((uint)0x00000400) 237*4882a593Smuzhiyun #define SCC_GSMRH_CTSP ((uint)0x00000200) 238*4882a593Smuzhiyun #define SCC_GSMRH_CDS ((uint)0x00000100) 239*4882a593Smuzhiyun #define SCC_GSMRH_CTSS ((uint)0x00000080) 240*4882a593Smuzhiyun #define SCC_GSMRH_TFL ((uint)0x00000040) 241*4882a593Smuzhiyun #define SCC_GSMRH_RFW ((uint)0x00000020) 242*4882a593Smuzhiyun #define SCC_GSMRH_TXSY ((uint)0x00000010) 243*4882a593Smuzhiyun #define SCC_GSMRH_SYNL16 ((uint)0x0000000c) 244*4882a593Smuzhiyun #define SCC_GSMRH_SYNL8 ((uint)0x00000008) 245*4882a593Smuzhiyun #define SCC_GSMRH_SYNL4 ((uint)0x00000004) 246*4882a593Smuzhiyun #define SCC_GSMRH_RTSM ((uint)0x00000002) 247*4882a593Smuzhiyun #define SCC_GSMRH_RSYN ((uint)0x00000001) 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun #define SCC_GSMRL_SIR ((uint)0x80000000) /* SCC2 only */ 250*4882a593Smuzhiyun #define SCC_GSMRL_EDGE_NONE ((uint)0x60000000) 251*4882a593Smuzhiyun #define SCC_GSMRL_EDGE_NEG ((uint)0x40000000) 252*4882a593Smuzhiyun #define SCC_GSMRL_EDGE_POS ((uint)0x20000000) 253*4882a593Smuzhiyun #define SCC_GSMRL_EDGE_BOTH ((uint)0x00000000) 254*4882a593Smuzhiyun #define SCC_GSMRL_TCI ((uint)0x10000000) 255*4882a593Smuzhiyun #define SCC_GSMRL_TSNC_3 ((uint)0x0c000000) 256*4882a593Smuzhiyun #define SCC_GSMRL_TSNC_4 ((uint)0x08000000) 257*4882a593Smuzhiyun #define SCC_GSMRL_TSNC_14 ((uint)0x04000000) 258*4882a593Smuzhiyun #define SCC_GSMRL_TSNC_INF ((uint)0x00000000) 259*4882a593Smuzhiyun #define SCC_GSMRL_RINV ((uint)0x02000000) 260*4882a593Smuzhiyun #define SCC_GSMRL_TINV ((uint)0x01000000) 261*4882a593Smuzhiyun #define SCC_GSMRL_TPL_128 ((uint)0x00c00000) 262*4882a593Smuzhiyun #define SCC_GSMRL_TPL_64 ((uint)0x00a00000) 263*4882a593Smuzhiyun #define SCC_GSMRL_TPL_48 ((uint)0x00800000) 264*4882a593Smuzhiyun #define SCC_GSMRL_TPL_32 ((uint)0x00600000) 265*4882a593Smuzhiyun #define SCC_GSMRL_TPL_16 ((uint)0x00400000) 266*4882a593Smuzhiyun #define SCC_GSMRL_TPL_8 ((uint)0x00200000) 267*4882a593Smuzhiyun #define SCC_GSMRL_TPL_NONE ((uint)0x00000000) 268*4882a593Smuzhiyun #define SCC_GSMRL_TPP_ALL1 ((uint)0x00180000) 269*4882a593Smuzhiyun #define SCC_GSMRL_TPP_01 ((uint)0x00100000) 270*4882a593Smuzhiyun #define SCC_GSMRL_TPP_10 ((uint)0x00080000) 271*4882a593Smuzhiyun #define SCC_GSMRL_TPP_ZEROS ((uint)0x00000000) 272*4882a593Smuzhiyun #define SCC_GSMRL_TEND ((uint)0x00040000) 273*4882a593Smuzhiyun #define SCC_GSMRL_TDCR_32 ((uint)0x00030000) 274*4882a593Smuzhiyun #define SCC_GSMRL_TDCR_16 ((uint)0x00020000) 275*4882a593Smuzhiyun #define SCC_GSMRL_TDCR_8 ((uint)0x00010000) 276*4882a593Smuzhiyun #define SCC_GSMRL_TDCR_1 ((uint)0x00000000) 277*4882a593Smuzhiyun #define SCC_GSMRL_RDCR_32 ((uint)0x0000c000) 278*4882a593Smuzhiyun #define SCC_GSMRL_RDCR_16 ((uint)0x00008000) 279*4882a593Smuzhiyun #define SCC_GSMRL_RDCR_8 ((uint)0x00004000) 280*4882a593Smuzhiyun #define SCC_GSMRL_RDCR_1 ((uint)0x00000000) 281*4882a593Smuzhiyun #define SCC_GSMRL_RENC_DFMAN ((uint)0x00003000) 282*4882a593Smuzhiyun #define SCC_GSMRL_RENC_MANCH ((uint)0x00002000) 283*4882a593Smuzhiyun #define SCC_GSMRL_RENC_FM0 ((uint)0x00001000) 284*4882a593Smuzhiyun #define SCC_GSMRL_RENC_NRZI ((uint)0x00000800) 285*4882a593Smuzhiyun #define SCC_GSMRL_RENC_NRZ ((uint)0x00000000) 286*4882a593Smuzhiyun #define SCC_GSMRL_TENC_DFMAN ((uint)0x00000600) 287*4882a593Smuzhiyun #define SCC_GSMRL_TENC_MANCH ((uint)0x00000400) 288*4882a593Smuzhiyun #define SCC_GSMRL_TENC_FM0 ((uint)0x00000200) 289*4882a593Smuzhiyun #define SCC_GSMRL_TENC_NRZI ((uint)0x00000100) 290*4882a593Smuzhiyun #define SCC_GSMRL_TENC_NRZ ((uint)0x00000000) 291*4882a593Smuzhiyun #define SCC_GSMRL_DIAG_LE ((uint)0x000000c0) /* Loop and echo */ 292*4882a593Smuzhiyun #define SCC_GSMRL_DIAG_ECHO ((uint)0x00000080) 293*4882a593Smuzhiyun #define SCC_GSMRL_DIAG_LOOP ((uint)0x00000040) 294*4882a593Smuzhiyun #define SCC_GSMRL_DIAG_NORM ((uint)0x00000000) 295*4882a593Smuzhiyun #define SCC_GSMRL_ENR ((uint)0x00000020) 296*4882a593Smuzhiyun #define SCC_GSMRL_ENT ((uint)0x00000010) 297*4882a593Smuzhiyun #define SCC_GSMRL_MODE_ENET ((uint)0x0000000c) 298*4882a593Smuzhiyun #define SCC_GSMRL_MODE_DDCMP ((uint)0x00000009) 299*4882a593Smuzhiyun #define SCC_GSMRL_MODE_BISYNC ((uint)0x00000008) 300*4882a593Smuzhiyun #define SCC_GSMRL_MODE_V14 ((uint)0x00000007) 301*4882a593Smuzhiyun #define SCC_GSMRL_MODE_AHDLC ((uint)0x00000006) 302*4882a593Smuzhiyun #define SCC_GSMRL_MODE_PROFIBUS ((uint)0x00000005) 303*4882a593Smuzhiyun #define SCC_GSMRL_MODE_UART ((uint)0x00000004) 304*4882a593Smuzhiyun #define SCC_GSMRL_MODE_SS7 ((uint)0x00000003) 305*4882a593Smuzhiyun #define SCC_GSMRL_MODE_ATALK ((uint)0x00000002) 306*4882a593Smuzhiyun #define SCC_GSMRL_MODE_HDLC ((uint)0x00000000) 307*4882a593Smuzhiyun 308*4882a593Smuzhiyun #define SCC_TODR_TOD ((ushort)0x8000) 309*4882a593Smuzhiyun 310*4882a593Smuzhiyun /* SCC Event and Mask register. 311*4882a593Smuzhiyun */ 312*4882a593Smuzhiyun #define SCCM_TXE ((unsigned char)0x10) 313*4882a593Smuzhiyun #define SCCM_BSY ((unsigned char)0x04) 314*4882a593Smuzhiyun #define SCCM_TX ((unsigned char)0x02) 315*4882a593Smuzhiyun #define SCCM_RX ((unsigned char)0x01) 316*4882a593Smuzhiyun 317*4882a593Smuzhiyun typedef struct scc_param { 318*4882a593Smuzhiyun ushort scc_rbase; /* Rx Buffer descriptor base address */ 319*4882a593Smuzhiyun ushort scc_tbase; /* Tx Buffer descriptor base address */ 320*4882a593Smuzhiyun u_char scc_rfcr; /* Rx function code */ 321*4882a593Smuzhiyun u_char scc_tfcr; /* Tx function code */ 322*4882a593Smuzhiyun ushort scc_mrblr; /* Max receive buffer length */ 323*4882a593Smuzhiyun uint scc_rstate; /* Internal */ 324*4882a593Smuzhiyun uint scc_idp; /* Internal */ 325*4882a593Smuzhiyun ushort scc_rbptr; /* Internal */ 326*4882a593Smuzhiyun ushort scc_ibc; /* Internal */ 327*4882a593Smuzhiyun uint scc_rxtmp; /* Internal */ 328*4882a593Smuzhiyun uint scc_tstate; /* Internal */ 329*4882a593Smuzhiyun uint scc_tdp; /* Internal */ 330*4882a593Smuzhiyun ushort scc_tbptr; /* Internal */ 331*4882a593Smuzhiyun ushort scc_tbc; /* Internal */ 332*4882a593Smuzhiyun uint scc_txtmp; /* Internal */ 333*4882a593Smuzhiyun uint scc_rcrc; /* Internal */ 334*4882a593Smuzhiyun uint scc_tcrc; /* Internal */ 335*4882a593Smuzhiyun } sccp_t; 336*4882a593Smuzhiyun 337*4882a593Smuzhiyun /* Function code bits. 338*4882a593Smuzhiyun */ 339*4882a593Smuzhiyun #define SCC_EB ((u_char)0x10) /* Set big endian byte order */ 340*4882a593Smuzhiyun 341*4882a593Smuzhiyun /* CPM Ethernet through SCCx. 342*4882a593Smuzhiyun */ 343*4882a593Smuzhiyun typedef struct scc_enet { 344*4882a593Smuzhiyun sccp_t sen_genscc; 345*4882a593Smuzhiyun uint sen_cpres; /* Preset CRC */ 346*4882a593Smuzhiyun uint sen_cmask; /* Constant mask for CRC */ 347*4882a593Smuzhiyun uint sen_crcec; /* CRC Error counter */ 348*4882a593Smuzhiyun uint sen_alec; /* alignment error counter */ 349*4882a593Smuzhiyun uint sen_disfc; /* discard frame counter */ 350*4882a593Smuzhiyun ushort sen_pads; /* Tx short frame pad character */ 351*4882a593Smuzhiyun ushort sen_retlim; /* Retry limit threshold */ 352*4882a593Smuzhiyun ushort sen_retcnt; /* Retry limit counter */ 353*4882a593Smuzhiyun ushort sen_maxflr; /* maximum frame length register */ 354*4882a593Smuzhiyun ushort sen_minflr; /* minimum frame length register */ 355*4882a593Smuzhiyun ushort sen_maxd1; /* maximum DMA1 length */ 356*4882a593Smuzhiyun ushort sen_maxd2; /* maximum DMA2 length */ 357*4882a593Smuzhiyun ushort sen_maxd; /* Rx max DMA */ 358*4882a593Smuzhiyun ushort sen_dmacnt; /* Rx DMA counter */ 359*4882a593Smuzhiyun ushort sen_maxb; /* Max BD byte count */ 360*4882a593Smuzhiyun ushort sen_gaddr1; /* Group address filter */ 361*4882a593Smuzhiyun ushort sen_gaddr2; 362*4882a593Smuzhiyun ushort sen_gaddr3; 363*4882a593Smuzhiyun ushort sen_gaddr4; 364*4882a593Smuzhiyun uint sen_tbuf0data0; /* Save area 0 - current frame */ 365*4882a593Smuzhiyun uint sen_tbuf0data1; /* Save area 1 - current frame */ 366*4882a593Smuzhiyun uint sen_tbuf0rba; /* Internal */ 367*4882a593Smuzhiyun uint sen_tbuf0crc; /* Internal */ 368*4882a593Smuzhiyun ushort sen_tbuf0bcnt; /* Internal */ 369*4882a593Smuzhiyun ushort sen_paddrh; /* physical address (MSB) */ 370*4882a593Smuzhiyun ushort sen_paddrm; 371*4882a593Smuzhiyun ushort sen_paddrl; /* physical address (LSB) */ 372*4882a593Smuzhiyun ushort sen_pper; /* persistence */ 373*4882a593Smuzhiyun ushort sen_rfbdptr; /* Rx first BD pointer */ 374*4882a593Smuzhiyun ushort sen_tfbdptr; /* Tx first BD pointer */ 375*4882a593Smuzhiyun ushort sen_tlbdptr; /* Tx last BD pointer */ 376*4882a593Smuzhiyun uint sen_tbuf1data0; /* Save area 0 - current frame */ 377*4882a593Smuzhiyun uint sen_tbuf1data1; /* Save area 1 - current frame */ 378*4882a593Smuzhiyun uint sen_tbuf1rba; /* Internal */ 379*4882a593Smuzhiyun uint sen_tbuf1crc; /* Internal */ 380*4882a593Smuzhiyun ushort sen_tbuf1bcnt; /* Internal */ 381*4882a593Smuzhiyun ushort sen_txlen; /* Tx Frame length counter */ 382*4882a593Smuzhiyun ushort sen_iaddr1; /* Individual address filter */ 383*4882a593Smuzhiyun ushort sen_iaddr2; 384*4882a593Smuzhiyun ushort sen_iaddr3; 385*4882a593Smuzhiyun ushort sen_iaddr4; 386*4882a593Smuzhiyun ushort sen_boffcnt; /* Backoff counter */ 387*4882a593Smuzhiyun 388*4882a593Smuzhiyun /* NOTE: Some versions of the manual have the following items 389*4882a593Smuzhiyun * incorrectly documented. Below is the proper order. 390*4882a593Smuzhiyun */ 391*4882a593Smuzhiyun ushort sen_taddrh; /* temp address (MSB) */ 392*4882a593Smuzhiyun ushort sen_taddrm; 393*4882a593Smuzhiyun ushort sen_taddrl; /* temp address (LSB) */ 394*4882a593Smuzhiyun } scc_enet_t; 395*4882a593Smuzhiyun 396*4882a593Smuzhiyun /*********************************************************************/ 397*4882a593Smuzhiyun 398*4882a593Smuzhiyun /* SCC Event register as used by Ethernet. 399*4882a593Smuzhiyun */ 400*4882a593Smuzhiyun #define SCCE_ENET_GRA ((ushort)0x0080) /* Graceful stop complete */ 401*4882a593Smuzhiyun #define SCCE_ENET_TXE ((ushort)0x0010) /* Transmit Error */ 402*4882a593Smuzhiyun #define SCCE_ENET_RXF ((ushort)0x0008) /* Full frame received */ 403*4882a593Smuzhiyun #define SCCE_ENET_BSY ((ushort)0x0004) /* All incoming buffers full */ 404*4882a593Smuzhiyun #define SCCE_ENET_TXB ((ushort)0x0002) /* A buffer was transmitted */ 405*4882a593Smuzhiyun #define SCCE_ENET_RXB ((ushort)0x0001) /* A buffer was received */ 406*4882a593Smuzhiyun 407*4882a593Smuzhiyun /* SCC Mode Register (PSMR) as used by Ethernet. 408*4882a593Smuzhiyun */ 409*4882a593Smuzhiyun #define SCC_PSMR_HBC ((ushort)0x8000) /* Enable heartbeat */ 410*4882a593Smuzhiyun #define SCC_PSMR_FC ((ushort)0x4000) /* Force collision */ 411*4882a593Smuzhiyun #define SCC_PSMR_RSH ((ushort)0x2000) /* Receive short frames */ 412*4882a593Smuzhiyun #define SCC_PSMR_IAM ((ushort)0x1000) /* Check individual hash */ 413*4882a593Smuzhiyun #define SCC_PSMR_ENCRC ((ushort)0x0800) /* Ethernet CRC mode */ 414*4882a593Smuzhiyun #define SCC_PSMR_PRO ((ushort)0x0200) /* Promiscuous mode */ 415*4882a593Smuzhiyun #define SCC_PSMR_BRO ((ushort)0x0100) /* Catch broadcast pkts */ 416*4882a593Smuzhiyun #define SCC_PSMR_SBT ((ushort)0x0080) /* Special backoff timer */ 417*4882a593Smuzhiyun #define SCC_PSMR_LPB ((ushort)0x0040) /* Set Loopback mode */ 418*4882a593Smuzhiyun #define SCC_PSMR_SIP ((ushort)0x0020) /* Sample Input Pins */ 419*4882a593Smuzhiyun #define SCC_PSMR_LCW ((ushort)0x0010) /* Late collision window */ 420*4882a593Smuzhiyun #define SCC_PSMR_NIB22 ((ushort)0x000a) /* Start frame search */ 421*4882a593Smuzhiyun #define SCC_PSMR_FDE ((ushort)0x0001) /* Full duplex enable */ 422*4882a593Smuzhiyun 423*4882a593Smuzhiyun /* Buffer descriptor control/status used by Ethernet receive. 424*4882a593Smuzhiyun */ 425*4882a593Smuzhiyun #define BD_ENET_RX_EMPTY ((ushort)0x8000) 426*4882a593Smuzhiyun #define BD_ENET_RX_WRAP ((ushort)0x2000) 427*4882a593Smuzhiyun #define BD_ENET_RX_INTR ((ushort)0x1000) 428*4882a593Smuzhiyun #define BD_ENET_RX_LAST ((ushort)0x0800) 429*4882a593Smuzhiyun #define BD_ENET_RX_FIRST ((ushort)0x0400) 430*4882a593Smuzhiyun #define BD_ENET_RX_MISS ((ushort)0x0100) 431*4882a593Smuzhiyun #define BD_ENET_RX_LG ((ushort)0x0020) 432*4882a593Smuzhiyun #define BD_ENET_RX_NO ((ushort)0x0010) 433*4882a593Smuzhiyun #define BD_ENET_RX_SH ((ushort)0x0008) 434*4882a593Smuzhiyun #define BD_ENET_RX_CR ((ushort)0x0004) 435*4882a593Smuzhiyun #define BD_ENET_RX_OV ((ushort)0x0002) 436*4882a593Smuzhiyun #define BD_ENET_RX_CL ((ushort)0x0001) 437*4882a593Smuzhiyun #define BD_ENET_RX_STATS ((ushort)0x013f) /* All status bits */ 438*4882a593Smuzhiyun 439*4882a593Smuzhiyun /* Buffer descriptor control/status used by Ethernet transmit. 440*4882a593Smuzhiyun */ 441*4882a593Smuzhiyun #define BD_ENET_TX_READY ((ushort)0x8000) 442*4882a593Smuzhiyun #define BD_ENET_TX_PAD ((ushort)0x4000) 443*4882a593Smuzhiyun #define BD_ENET_TX_WRAP ((ushort)0x2000) 444*4882a593Smuzhiyun #define BD_ENET_TX_INTR ((ushort)0x1000) 445*4882a593Smuzhiyun #define BD_ENET_TX_LAST ((ushort)0x0800) 446*4882a593Smuzhiyun #define BD_ENET_TX_TC ((ushort)0x0400) 447*4882a593Smuzhiyun #define BD_ENET_TX_DEF ((ushort)0x0200) 448*4882a593Smuzhiyun #define BD_ENET_TX_HB ((ushort)0x0100) 449*4882a593Smuzhiyun #define BD_ENET_TX_LC ((ushort)0x0080) 450*4882a593Smuzhiyun #define BD_ENET_TX_RL ((ushort)0x0040) 451*4882a593Smuzhiyun #define BD_ENET_TX_RCMASK ((ushort)0x003c) 452*4882a593Smuzhiyun #define BD_ENET_TX_UN ((ushort)0x0002) 453*4882a593Smuzhiyun #define BD_ENET_TX_CSL ((ushort)0x0001) 454*4882a593Smuzhiyun #define BD_ENET_TX_STATS ((ushort)0x03ff) /* All status bits */ 455*4882a593Smuzhiyun 456*4882a593Smuzhiyun /* SCC as UART 457*4882a593Smuzhiyun */ 458*4882a593Smuzhiyun typedef struct scc_uart { 459*4882a593Smuzhiyun sccp_t scc_genscc; 460*4882a593Smuzhiyun uint scc_res1; /* Reserved */ 461*4882a593Smuzhiyun uint scc_res2; /* Reserved */ 462*4882a593Smuzhiyun ushort scc_maxidl; /* Maximum idle chars */ 463*4882a593Smuzhiyun ushort scc_idlc; /* temp idle counter */ 464*4882a593Smuzhiyun ushort scc_brkcr; /* Break count register */ 465*4882a593Smuzhiyun ushort scc_parec; /* receive parity error counter */ 466*4882a593Smuzhiyun ushort scc_frmec; /* receive framing error counter */ 467*4882a593Smuzhiyun ushort scc_nosec; /* receive noise counter */ 468*4882a593Smuzhiyun ushort scc_brkec; /* receive break condition counter */ 469*4882a593Smuzhiyun ushort scc_brkln; /* last received break length */ 470*4882a593Smuzhiyun ushort scc_uaddr1; /* UART address character 1 */ 471*4882a593Smuzhiyun ushort scc_uaddr2; /* UART address character 2 */ 472*4882a593Smuzhiyun ushort scc_rtemp; /* Temp storage */ 473*4882a593Smuzhiyun ushort scc_toseq; /* Transmit out of sequence char */ 474*4882a593Smuzhiyun ushort scc_char1; /* control character 1 */ 475*4882a593Smuzhiyun ushort scc_char2; /* control character 2 */ 476*4882a593Smuzhiyun ushort scc_char3; /* control character 3 */ 477*4882a593Smuzhiyun ushort scc_char4; /* control character 4 */ 478*4882a593Smuzhiyun ushort scc_char5; /* control character 5 */ 479*4882a593Smuzhiyun ushort scc_char6; /* control character 6 */ 480*4882a593Smuzhiyun ushort scc_char7; /* control character 7 */ 481*4882a593Smuzhiyun ushort scc_char8; /* control character 8 */ 482*4882a593Smuzhiyun ushort scc_rccm; /* receive control character mask */ 483*4882a593Smuzhiyun ushort scc_rccr; /* receive control character register */ 484*4882a593Smuzhiyun ushort scc_rlbc; /* receive last break character */ 485*4882a593Smuzhiyun } scc_uart_t; 486*4882a593Smuzhiyun 487*4882a593Smuzhiyun /* SCC Event and Mask registers when it is used as a UART. 488*4882a593Smuzhiyun */ 489*4882a593Smuzhiyun #define UART_SCCM_GLR ((ushort)0x1000) 490*4882a593Smuzhiyun #define UART_SCCM_GLT ((ushort)0x0800) 491*4882a593Smuzhiyun #define UART_SCCM_AB ((ushort)0x0200) 492*4882a593Smuzhiyun #define UART_SCCM_IDL ((ushort)0x0100) 493*4882a593Smuzhiyun #define UART_SCCM_GRA ((ushort)0x0080) 494*4882a593Smuzhiyun #define UART_SCCM_BRKE ((ushort)0x0040) 495*4882a593Smuzhiyun #define UART_SCCM_BRKS ((ushort)0x0020) 496*4882a593Smuzhiyun #define UART_SCCM_CCR ((ushort)0x0008) 497*4882a593Smuzhiyun #define UART_SCCM_BSY ((ushort)0x0004) 498*4882a593Smuzhiyun #define UART_SCCM_TX ((ushort)0x0002) 499*4882a593Smuzhiyun #define UART_SCCM_RX ((ushort)0x0001) 500*4882a593Smuzhiyun 501*4882a593Smuzhiyun /* The SCC PSMR when used as a UART. 502*4882a593Smuzhiyun */ 503*4882a593Smuzhiyun #define SCU_PSMR_FLC ((ushort)0x8000) 504*4882a593Smuzhiyun #define SCU_PSMR_SL ((ushort)0x4000) 505*4882a593Smuzhiyun #define SCU_PSMR_CL ((ushort)0x3000) 506*4882a593Smuzhiyun #define SCU_PSMR_UM ((ushort)0x0c00) 507*4882a593Smuzhiyun #define SCU_PSMR_FRZ ((ushort)0x0200) 508*4882a593Smuzhiyun #define SCU_PSMR_RZS ((ushort)0x0100) 509*4882a593Smuzhiyun #define SCU_PSMR_SYN ((ushort)0x0080) 510*4882a593Smuzhiyun #define SCU_PSMR_DRT ((ushort)0x0040) 511*4882a593Smuzhiyun #define SCU_PSMR_PEN ((ushort)0x0010) 512*4882a593Smuzhiyun #define SCU_PSMR_RPM ((ushort)0x000c) 513*4882a593Smuzhiyun #define SCU_PSMR_REVP ((ushort)0x0008) 514*4882a593Smuzhiyun #define SCU_PSMR_TPM ((ushort)0x0003) 515*4882a593Smuzhiyun #define SCU_PSMR_TEVP ((ushort)0x0003) 516*4882a593Smuzhiyun 517*4882a593Smuzhiyun /* CPM Transparent mode SCC. 518*4882a593Smuzhiyun */ 519*4882a593Smuzhiyun typedef struct scc_trans { 520*4882a593Smuzhiyun sccp_t st_genscc; 521*4882a593Smuzhiyun uint st_cpres; /* Preset CRC */ 522*4882a593Smuzhiyun uint st_cmask; /* Constant mask for CRC */ 523*4882a593Smuzhiyun } scc_trans_t; 524*4882a593Smuzhiyun 525*4882a593Smuzhiyun #define BD_SCC_TX_LAST ((ushort)0x0800) 526*4882a593Smuzhiyun 527*4882a593Smuzhiyun /* IIC parameter RAM. 528*4882a593Smuzhiyun */ 529*4882a593Smuzhiyun typedef struct iic { 530*4882a593Smuzhiyun ushort iic_rbase; /* Rx Buffer descriptor base address */ 531*4882a593Smuzhiyun ushort iic_tbase; /* Tx Buffer descriptor base address */ 532*4882a593Smuzhiyun u_char iic_rfcr; /* Rx function code */ 533*4882a593Smuzhiyun u_char iic_tfcr; /* Tx function code */ 534*4882a593Smuzhiyun ushort iic_mrblr; /* Max receive buffer length */ 535*4882a593Smuzhiyun uint iic_rstate; /* Internal */ 536*4882a593Smuzhiyun uint iic_rdp; /* Internal */ 537*4882a593Smuzhiyun ushort iic_rbptr; /* Internal */ 538*4882a593Smuzhiyun ushort iic_rbc; /* Internal */ 539*4882a593Smuzhiyun uint iic_rxtmp; /* Internal */ 540*4882a593Smuzhiyun uint iic_tstate; /* Internal */ 541*4882a593Smuzhiyun uint iic_tdp; /* Internal */ 542*4882a593Smuzhiyun ushort iic_tbptr; /* Internal */ 543*4882a593Smuzhiyun ushort iic_tbc; /* Internal */ 544*4882a593Smuzhiyun uint iic_txtmp; /* Internal */ 545*4882a593Smuzhiyun uint iic_res; /* reserved */ 546*4882a593Smuzhiyun ushort iic_rpbase; /* Relocation pointer */ 547*4882a593Smuzhiyun ushort iic_res2; /* reserved */ 548*4882a593Smuzhiyun } iic_t; 549*4882a593Smuzhiyun 550*4882a593Smuzhiyun /* SPI parameter RAM. 551*4882a593Smuzhiyun */ 552*4882a593Smuzhiyun typedef struct spi { 553*4882a593Smuzhiyun ushort spi_rbase; /* Rx Buffer descriptor base address */ 554*4882a593Smuzhiyun ushort spi_tbase; /* Tx Buffer descriptor base address */ 555*4882a593Smuzhiyun u_char spi_rfcr; /* Rx function code */ 556*4882a593Smuzhiyun u_char spi_tfcr; /* Tx function code */ 557*4882a593Smuzhiyun ushort spi_mrblr; /* Max receive buffer length */ 558*4882a593Smuzhiyun uint spi_rstate; /* Internal */ 559*4882a593Smuzhiyun uint spi_rdp; /* Internal */ 560*4882a593Smuzhiyun ushort spi_rbptr; /* Internal */ 561*4882a593Smuzhiyun ushort spi_rbc; /* Internal */ 562*4882a593Smuzhiyun uint spi_rxtmp; /* Internal */ 563*4882a593Smuzhiyun uint spi_tstate; /* Internal */ 564*4882a593Smuzhiyun uint spi_tdp; /* Internal */ 565*4882a593Smuzhiyun ushort spi_tbptr; /* Internal */ 566*4882a593Smuzhiyun ushort spi_tbc; /* Internal */ 567*4882a593Smuzhiyun uint spi_txtmp; /* Internal */ 568*4882a593Smuzhiyun uint spi_res; 569*4882a593Smuzhiyun ushort spi_rpbase; /* Relocation pointer */ 570*4882a593Smuzhiyun ushort spi_res2; 571*4882a593Smuzhiyun } spi_t; 572*4882a593Smuzhiyun 573*4882a593Smuzhiyun /* SPI Mode register. 574*4882a593Smuzhiyun */ 575*4882a593Smuzhiyun #define SPMODE_LOOP ((ushort)0x4000) /* Loopback */ 576*4882a593Smuzhiyun #define SPMODE_CI ((ushort)0x2000) /* Clock Invert */ 577*4882a593Smuzhiyun #define SPMODE_CP ((ushort)0x1000) /* Clock Phase */ 578*4882a593Smuzhiyun #define SPMODE_DIV16 ((ushort)0x0800) /* BRG/16 mode */ 579*4882a593Smuzhiyun #define SPMODE_REV ((ushort)0x0400) /* Reversed Data */ 580*4882a593Smuzhiyun #define SPMODE_MSTR ((ushort)0x0200) /* SPI Master */ 581*4882a593Smuzhiyun #define SPMODE_EN ((ushort)0x0100) /* Enable */ 582*4882a593Smuzhiyun #define SPMODE_LENMSK ((ushort)0x00f0) /* character length */ 583*4882a593Smuzhiyun #define SPMODE_PMMSK ((ushort)0x000f) /* prescale modulus */ 584*4882a593Smuzhiyun 585*4882a593Smuzhiyun #define SPMODE_LEN(x) ((((x) - 1) & 0xF) << 4) 586*4882a593Smuzhiyun #define SPMODE_PM(x) ((x) & 0xF) 587*4882a593Smuzhiyun 588*4882a593Smuzhiyun /* HDLC parameter RAM. 589*4882a593Smuzhiyun */ 590*4882a593Smuzhiyun 591*4882a593Smuzhiyun typedef struct hdlc_pram_s { 592*4882a593Smuzhiyun /* 593*4882a593Smuzhiyun * SCC parameter RAM 594*4882a593Smuzhiyun */ 595*4882a593Smuzhiyun ushort rbase; /* Rx Buffer descriptor base address */ 596*4882a593Smuzhiyun ushort tbase; /* Tx Buffer descriptor base address */ 597*4882a593Smuzhiyun uchar rfcr; /* Rx function code */ 598*4882a593Smuzhiyun uchar tfcr; /* Tx function code */ 599*4882a593Smuzhiyun ushort mrblr; /* Rx buffer length */ 600*4882a593Smuzhiyun ulong rstate; /* Rx internal state */ 601*4882a593Smuzhiyun ulong rptr; /* Rx internal data pointer */ 602*4882a593Smuzhiyun ushort rbptr; /* rb BD Pointer */ 603*4882a593Smuzhiyun ushort rcount; /* Rx internal byte count */ 604*4882a593Smuzhiyun ulong rtemp; /* Rx temp */ 605*4882a593Smuzhiyun ulong tstate; /* Tx internal state */ 606*4882a593Smuzhiyun ulong tptr; /* Tx internal data pointer */ 607*4882a593Smuzhiyun ushort tbptr; /* Tx BD pointer */ 608*4882a593Smuzhiyun ushort tcount; /* Tx byte count */ 609*4882a593Smuzhiyun ulong ttemp; /* Tx temp */ 610*4882a593Smuzhiyun ulong rcrc; /* temp receive CRC */ 611*4882a593Smuzhiyun ulong tcrc; /* temp transmit CRC */ 612*4882a593Smuzhiyun /* 613*4882a593Smuzhiyun * HDLC specific parameter RAM 614*4882a593Smuzhiyun */ 615*4882a593Smuzhiyun uchar res[4]; /* reserved */ 616*4882a593Smuzhiyun ulong c_mask; /* CRC constant */ 617*4882a593Smuzhiyun ulong c_pres; /* CRC preset */ 618*4882a593Smuzhiyun ushort disfc; /* discarded frame counter */ 619*4882a593Smuzhiyun ushort crcec; /* CRC error counter */ 620*4882a593Smuzhiyun ushort abtsc; /* abort sequence counter */ 621*4882a593Smuzhiyun ushort nmarc; /* nonmatching address rx cnt */ 622*4882a593Smuzhiyun ushort retrc; /* frame retransmission cnt */ 623*4882a593Smuzhiyun ushort mflr; /* maximum frame length reg */ 624*4882a593Smuzhiyun ushort max_cnt; /* maximum length counter */ 625*4882a593Smuzhiyun ushort rfthr; /* received frames threshold */ 626*4882a593Smuzhiyun ushort rfcnt; /* received frames count */ 627*4882a593Smuzhiyun ushort hmask; /* user defined frm addr mask */ 628*4882a593Smuzhiyun ushort haddr1; /* user defined frm address 1 */ 629*4882a593Smuzhiyun ushort haddr2; /* user defined frm address 2 */ 630*4882a593Smuzhiyun ushort haddr3; /* user defined frm address 3 */ 631*4882a593Smuzhiyun ushort haddr4; /* user defined frm address 4 */ 632*4882a593Smuzhiyun ushort tmp; /* temp */ 633*4882a593Smuzhiyun ushort tmp_mb; /* temp */ 634*4882a593Smuzhiyun } hdlc_pram_t; 635*4882a593Smuzhiyun 636*4882a593Smuzhiyun /* CPM interrupts. There are nearly 32 interrupts generated by CPM 637*4882a593Smuzhiyun * channels or devices. All of these are presented to the PPC core 638*4882a593Smuzhiyun * as a single interrupt. The CPM interrupt handler dispatches its 639*4882a593Smuzhiyun * own handlers, in a similar fashion to the PPC core handler. We 640*4882a593Smuzhiyun * use the table as defined in the manuals (i.e. no special high 641*4882a593Smuzhiyun * priority and SCC1 == SCCa, etc...). 642*4882a593Smuzhiyun */ 643*4882a593Smuzhiyun #define CPMVEC_NR 32 644*4882a593Smuzhiyun #define CPMVEC_OFFSET 0x00010000 645*4882a593Smuzhiyun #define CPMVEC_PIO_PC15 ((ushort)0x1f | CPMVEC_OFFSET) 646*4882a593Smuzhiyun #define CPMVEC_SCC1 ((ushort)0x1e | CPMVEC_OFFSET) 647*4882a593Smuzhiyun #define CPMVEC_SCC2 ((ushort)0x1d | CPMVEC_OFFSET) 648*4882a593Smuzhiyun #define CPMVEC_SCC3 ((ushort)0x1c | CPMVEC_OFFSET) 649*4882a593Smuzhiyun #define CPMVEC_SCC4 ((ushort)0x1b | CPMVEC_OFFSET) 650*4882a593Smuzhiyun #define CPMVEC_PIO_PC14 ((ushort)0x1a | CPMVEC_OFFSET) 651*4882a593Smuzhiyun #define CPMVEC_TIMER1 ((ushort)0x19 | CPMVEC_OFFSET) 652*4882a593Smuzhiyun #define CPMVEC_PIO_PC13 ((ushort)0x18 | CPMVEC_OFFSET) 653*4882a593Smuzhiyun #define CPMVEC_PIO_PC12 ((ushort)0x17 | CPMVEC_OFFSET) 654*4882a593Smuzhiyun #define CPMVEC_SDMA_CB_ERR ((ushort)0x16 | CPMVEC_OFFSET) 655*4882a593Smuzhiyun #define CPMVEC_IDMA1 ((ushort)0x15 | CPMVEC_OFFSET) 656*4882a593Smuzhiyun #define CPMVEC_IDMA2 ((ushort)0x14 | CPMVEC_OFFSET) 657*4882a593Smuzhiyun #define CPMVEC_TIMER2 ((ushort)0x12 | CPMVEC_OFFSET) 658*4882a593Smuzhiyun #define CPMVEC_RISCTIMER ((ushort)0x11 | CPMVEC_OFFSET) 659*4882a593Smuzhiyun #define CPMVEC_I2C ((ushort)0x10 | CPMVEC_OFFSET) 660*4882a593Smuzhiyun #define CPMVEC_PIO_PC11 ((ushort)0x0f | CPMVEC_OFFSET) 661*4882a593Smuzhiyun #define CPMVEC_PIO_PC10 ((ushort)0x0e | CPMVEC_OFFSET) 662*4882a593Smuzhiyun #define CPMVEC_TIMER3 ((ushort)0x0c | CPMVEC_OFFSET) 663*4882a593Smuzhiyun #define CPMVEC_PIO_PC9 ((ushort)0x0b | CPMVEC_OFFSET) 664*4882a593Smuzhiyun #define CPMVEC_PIO_PC8 ((ushort)0x0a | CPMVEC_OFFSET) 665*4882a593Smuzhiyun #define CPMVEC_PIO_PC7 ((ushort)0x09 | CPMVEC_OFFSET) 666*4882a593Smuzhiyun #define CPMVEC_TIMER4 ((ushort)0x07 | CPMVEC_OFFSET) 667*4882a593Smuzhiyun #define CPMVEC_PIO_PC6 ((ushort)0x06 | CPMVEC_OFFSET) 668*4882a593Smuzhiyun #define CPMVEC_SPI ((ushort)0x05 | CPMVEC_OFFSET) 669*4882a593Smuzhiyun #define CPMVEC_SMC1 ((ushort)0x04 | CPMVEC_OFFSET) 670*4882a593Smuzhiyun #define CPMVEC_SMC2 ((ushort)0x03 | CPMVEC_OFFSET) 671*4882a593Smuzhiyun #define CPMVEC_PIO_PC5 ((ushort)0x02 | CPMVEC_OFFSET) 672*4882a593Smuzhiyun #define CPMVEC_PIO_PC4 ((ushort)0x01 | CPMVEC_OFFSET) 673*4882a593Smuzhiyun #define CPMVEC_ERROR ((ushort)0x00 | CPMVEC_OFFSET) 674*4882a593Smuzhiyun 675*4882a593Smuzhiyun void irq_install_handler(int vec, void (*handler)(void *), void *dev_id); 676*4882a593Smuzhiyun 677*4882a593Smuzhiyun /* CPM interrupt configuration vector. 678*4882a593Smuzhiyun */ 679*4882a593Smuzhiyun #define CICR_SCD_SCC4 ((uint)0x00c00000) /* SCC4 @ SCCd */ 680*4882a593Smuzhiyun #define CICR_SCC_SCC3 ((uint)0x00200000) /* SCC3 @ SCCc */ 681*4882a593Smuzhiyun #define CICR_SCB_SCC2 ((uint)0x00040000) /* SCC2 @ SCCb */ 682*4882a593Smuzhiyun #define CICR_SCA_SCC1 ((uint)0x00000000) /* SCC1 @ SCCa */ 683*4882a593Smuzhiyun #define CICR_IRL_MASK ((uint)0x0000e000) /* Core interrupt */ 684*4882a593Smuzhiyun #define CICR_HP_MASK ((uint)0x00001f00) /* Hi-pri int. */ 685*4882a593Smuzhiyun #define CICR_IEN ((uint)0x00000080) /* Int. enable */ 686*4882a593Smuzhiyun #define CICR_SPS ((uint)0x00000001) /* SCC Spread */ 687*4882a593Smuzhiyun #endif /* __CPM_8XX__ */ 688