Skip to content
Snippets Groups Projects
commproc.h 61.7 KiB
Newer Older
  • Learn to ignore specific revisions
  • Wolfgang Denk's avatar
    Wolfgang Denk committed
    /*
     * MPC8xx Communication Processor Module.
     * Copyright (c) 1997 Dan Malek (dmalek@jlc.net)
     *
    
     * (C) Copyright 2000-2006
    
     * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
     *
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
     * This file contains structures and information for the communication
     * processor channels.  Some CPM control and status is available
     * throught the MPC8xx internal memory map.  See immap.h for details.
     * This file only contains what I need for the moment, not the total
     * CPM capabilities.  I (or someone else) will add definitions as they
     * are needed.  -- Dan
     *
     * On the MBX board, EPPC-Bug loads CPM microcode into the first 512
     * bytes of the DP RAM and relocates the I2C parameter area to the
     * IDMA1 space.  The remaining DP RAM is available for buffer descriptors
     * or other use.
     */
    #ifndef __CPM_8XX__
    #define __CPM_8XX__
    
    #include <linux/config.h>
    #include <asm/8xx_immap.h>
    
    /* CPM Command register.
    */
    
    #define CPM_CR_RST		((ushort)0x8000)
    #define CPM_CR_OPCODE		((ushort)0x0f00)
    #define CPM_CR_CHAN		((ushort)0x00f0)
    #define CPM_CR_FLG		((ushort)0x0001)
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    
    /* Some commands (there are more...later)
    */
    #define CPM_CR_INIT_TRX		((ushort)0x0000)
    #define CPM_CR_INIT_RX		((ushort)0x0001)
    #define CPM_CR_INIT_TX		((ushort)0x0002)
    #define CPM_CR_HUNT_MODE	((ushort)0x0003)
    #define CPM_CR_STOP_TX		((ushort)0x0004)
    #define CPM_CR_RESTART_TX	((ushort)0x0006)
    #define CPM_CR_SET_GADDR	((ushort)0x0008)
    
    /* Channel numbers.
    */
    
    #define CPM_CR_CH_SCC1		((ushort)0x0000)
    #define CPM_CR_CH_I2C		((ushort)0x0001)    /* I2C and IDMA1 */
    #define CPM_CR_CH_SCC2		((ushort)0x0004)
    #define CPM_CR_CH_SPI		((ushort)0x0005)    /* SPI/IDMA2/Timers */
    #define CPM_CR_CH_SCC3		((ushort)0x0008)
    #define CPM_CR_CH_SMC1		((ushort)0x0009)    /* SMC1 / DSP1 */
    #define CPM_CR_CH_SCC4		((ushort)0x000c)
    #define CPM_CR_CH_SMC2		((ushort)0x000d)    /* SMC2 / DSP2 */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    
    #define mk_cr_cmd(CH, CMD)	((CMD << 8) | (CH << 4))
    
    /*
     * DPRAM defines and allocation functions
     */
    
    /* The dual ported RAM is multi-functional.  Some areas can be (and are
     * being) used for microcode.  There is an area that can only be used
     * as data ram for buffer descriptors, which is all we use right now.
     * Currently the first 512 and last 256 bytes are used for microcode.
     */
    #ifdef  CFG_ALLOC_DPRAM
    
    #define CPM_DATAONLY_BASE	((uint)0x0800)
    #define CPM_DATAONLY_SIZE	((uint)0x0700)
    #define CPM_DP_NOSPACE		((uint)0x7fffffff)
    
    #else
    
    #define CPM_SERIAL_BASE		0x0800
    #define CPM_I2C_BASE		0x0820
    #define CPM_SPI_BASE		0x0840
    #define CPM_FEC_BASE		0x0860
    
    #define CPM_SERIAL2_BASE	0x08E0
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define CPM_SCC_BASE		0x0900
    #define CPM_POST_BASE		0x0980
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define CPM_WLKBD_BASE		0x0a00
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    
    #endif
    
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define CPM_POST_WORD_ADDR	0x07FC
    
    #else
    #define CPM_POST_WORD_ADDR	CFG_CPM_POST_WORD_ADDR
    #endif
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    
    
    #ifndef CFG_CPM_BOOTCOUNT_ADDR
    #define CPM_BOOTCOUNT_ADDR	(CPM_POST_WORD_ADDR - 2*sizeof(ulong))
    #else
    #define CPM_BOOTCOUNT_ADDR	CFG_CPM_BOOTCOUNT_ADDR
    #endif
    
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535
    #define BD_IIC_START	((uint) 0x0400) /* <- please use CPM_I2C_BASE !! */
    
    /* Export the base address of the communication processor registers
     * and dual port ram.
     */
    extern	cpm8xx_t	*cpmp;		/* Pointer to comm processor */
    
    /* Buffer descriptors used by many of the CPM protocols.
    */
    typedef struct cpm_buf_desc {
    	ushort	cbd_sc;		/* Status and Control */
    	ushort	cbd_datlen;	/* Data length in buffer */
    	uint	cbd_bufaddr;	/* Buffer address in host memory */
    } cbd_t;
    
    #define BD_SC_EMPTY	((ushort)0x8000)	/* Recieve is empty */
    #define BD_SC_READY	((ushort)0x8000)	/* Transmit is ready */
    #define BD_SC_WRAP	((ushort)0x2000)	/* Last buffer descriptor */
    #define BD_SC_INTRPT	((ushort)0x1000)	/* Interrupt on change */
    #define BD_SC_LAST	((ushort)0x0800)	/* Last buffer in frame */
    #define BD_SC_TC	((ushort)0x0400)	/* Transmit CRC */
    #define BD_SC_CM	((ushort)0x0200)	/* Continous mode */
    #define BD_SC_ID	((ushort)0x0100)	/* Rec'd too many idles */
    #define BD_SC_P		((ushort)0x0100)	/* xmt preamble */
    #define BD_SC_BR	((ushort)0x0020)	/* Break received */
    #define BD_SC_FR	((ushort)0x0010)	/* Framing error */
    #define BD_SC_PR	((ushort)0x0008)	/* Parity error */
    #define BD_SC_OV	((ushort)0x0002)	/* Overrun */
    #define BD_SC_CD	((ushort)0x0001)	/* Carrier Detect lost */
    
    /* Parameter RAM offsets.
    */
    #define PROFF_SCC1	((uint)0x0000)
    #define PROFF_IIC	((uint)0x0080)
    #define PROFF_SCC2	((uint)0x0100)
    #define PROFF_SPI	((uint)0x0180)
    #define PROFF_SCC3	((uint)0x0200)
    #define PROFF_SMC1	((uint)0x0280)
    #define PROFF_SCC4	((uint)0x0300)
    #define PROFF_SMC2	((uint)0x0380)
    
    /* Define enough so I can at least use the serial port as a UART.
     * The MBX uses SMC1 as the host serial port.
     */
    typedef struct smc_uart {
    	ushort	smc_rbase;	/* Rx Buffer descriptor base address */
    	ushort	smc_tbase;	/* Tx Buffer descriptor base address */
    	u_char	smc_rfcr;	/* Rx function code */
    	u_char	smc_tfcr;	/* Tx function code */
    	ushort	smc_mrblr;	/* Max receive buffer length */
    	uint	smc_rstate;	/* Internal */
    	uint	smc_idp;	/* Internal */
    	ushort	smc_rbptr;	/* Internal */
    	ushort	smc_ibc;	/* Internal */
    	uint	smc_rxtmp;	/* Internal */
    	uint	smc_tstate;	/* Internal */
    	uint	smc_tdp;	/* Internal */
    	ushort	smc_tbptr;	/* Internal */
    	ushort	smc_tbc;	/* Internal */
    	uint	smc_txtmp;	/* Internal */
    	ushort	smc_maxidl;	/* Maximum idle characters */
    	ushort	smc_tmpidl;	/* Temporary idle counter */
    	ushort	smc_brklen;	/* Last received break length */
    	ushort	smc_brkec;	/* rcv'd break condition counter */
    	ushort	smc_brkcr;	/* xmt break count register */
    	ushort	smc_rmask;	/* Temporary bit mask */
    } smc_uart_t;
    
    /* Function code bits.
    */
    #define SMC_EB	((u_char)0x10)	/* Set big endian byte order */
    
    /* SMC uart mode register.
    */
    #define	SMCMR_REN	((ushort)0x0001)
    #define SMCMR_TEN	((ushort)0x0002)
    #define SMCMR_DM	((ushort)0x000c)
    #define SMCMR_SM_GCI	((ushort)0x0000)
    #define SMCMR_SM_UART	((ushort)0x0020)
    #define SMCMR_SM_TRANS	((ushort)0x0030)
    #define SMCMR_SM_MASK	((ushort)0x0030)
    #define SMCMR_PM_EVEN	((ushort)0x0100)	/* Even parity, else odd */
    #define SMCMR_REVD	SMCMR_PM_EVEN
    #define SMCMR_PEN	((ushort)0x0200)	/* Parity enable */
    #define SMCMR_BS	SMCMR_PEN
    #define SMCMR_SL	((ushort)0x0400)	/* Two stops, else one */
    #define SMCR_CLEN_MASK	((ushort)0x7800)	/* Character length */
    #define smcr_mk_clen(C)	(((C) << 11) & SMCR_CLEN_MASK)
    
    /* SMC2 as Centronics parallel printer.  It is half duplex, in that
     * it can only receive or transmit.  The parameter ram values for
     * each direction are either unique or properly overlap, so we can
     * include them in one structure.
     */
    typedef struct smc_centronics {
    	ushort	scent_rbase;
    	ushort	scent_tbase;
    	u_char	scent_cfcr;
    	u_char	scent_smask;
    	ushort	scent_mrblr;
    	uint	scent_rstate;
    	uint	scent_r_ptr;
    	ushort	scent_rbptr;
    	ushort	scent_r_cnt;
    	uint	scent_rtemp;
    	uint	scent_tstate;
    	uint	scent_t_ptr;
    	ushort	scent_tbptr;
    	ushort	scent_t_cnt;
    	uint	scent_ttemp;
    	ushort	scent_max_sl;
    	ushort	scent_sl_cnt;
    	ushort	scent_character1;
    	ushort	scent_character2;
    	ushort	scent_character3;
    	ushort	scent_character4;
    	ushort	scent_character5;
    	ushort	scent_character6;
    	ushort	scent_character7;
    	ushort	scent_character8;
    	ushort	scent_rccm;
    	ushort	scent_rccr;
    } smc_cent_t;
    
    /* Centronics Status Mask Register.
    */
    #define SMC_CENT_F	((u_char)0x08)
    #define SMC_CENT_PE	((u_char)0x04)
    #define SMC_CENT_S	((u_char)0x02)
    
    /* SMC Event and Mask register.
    */
    #define	SMCM_BRKE	((unsigned char)0x40)	/* When in UART Mode */
    #define	SMCM_BRK	((unsigned char)0x10)	/* When in UART Mode */
    #define	SMCM_TXE	((unsigned char)0x10)	/* When in Transparent Mode */
    #define	SMCM_BSY	((unsigned char)0x04)
    #define	SMCM_TX		((unsigned char)0x02)
    #define	SMCM_RX		((unsigned char)0x01)
    
    /* Baud rate generators.
    */
    #define CPM_BRG_RST		((uint)0x00020000)
    #define CPM_BRG_EN		((uint)0x00010000)
    #define CPM_BRG_EXTC_INT	((uint)0x00000000)
    #define CPM_BRG_EXTC_CLK2	((uint)0x00004000)
    #define CPM_BRG_EXTC_CLK6	((uint)0x00008000)
    #define CPM_BRG_ATB		((uint)0x00002000)
    #define CPM_BRG_CD_MASK		((uint)0x00001ffe)
    #define CPM_BRG_DIV16		((uint)0x00000001)
    
    /* SI Clock Route Register
    */
    #define SICR_RCLK_SCC1_BRG1	((uint)0x00000000)
    #define SICR_TCLK_SCC1_BRG1	((uint)0x00000000)
    #define SICR_RCLK_SCC2_BRG2	((uint)0x00000800)
    #define SICR_TCLK_SCC2_BRG2	((uint)0x00000100)
    #define SICR_RCLK_SCC3_BRG3	((uint)0x00100000)
    #define SICR_TCLK_SCC3_BRG3	((uint)0x00020000)
    #define SICR_RCLK_SCC4_BRG4	((uint)0x18000000)
    #define SICR_TCLK_SCC4_BRG4	((uint)0x03000000)
    
    /* SCCs.
    */
    #define SCC_GSMRH_IRP		((uint)0x00040000)
    #define SCC_GSMRH_GDE		((uint)0x00010000)
    #define SCC_GSMRH_TCRC_CCITT	((uint)0x00008000)
    #define SCC_GSMRH_TCRC_BISYNC	((uint)0x00004000)
    #define SCC_GSMRH_TCRC_HDLC	((uint)0x00000000)
    #define SCC_GSMRH_REVD		((uint)0x00002000)
    #define SCC_GSMRH_TRX		((uint)0x00001000)
    #define SCC_GSMRH_TTX		((uint)0x00000800)
    #define SCC_GSMRH_CDP		((uint)0x00000400)
    #define SCC_GSMRH_CTSP		((uint)0x00000200)
    #define SCC_GSMRH_CDS		((uint)0x00000100)
    #define SCC_GSMRH_CTSS		((uint)0x00000080)
    #define SCC_GSMRH_TFL		((uint)0x00000040)
    #define SCC_GSMRH_RFW		((uint)0x00000020)
    #define SCC_GSMRH_TXSY		((uint)0x00000010)
    #define SCC_GSMRH_SYNL16	((uint)0x0000000c)
    #define SCC_GSMRH_SYNL8		((uint)0x00000008)
    #define SCC_GSMRH_SYNL4		((uint)0x00000004)
    #define SCC_GSMRH_RTSM		((uint)0x00000002)
    #define SCC_GSMRH_RSYN		((uint)0x00000001)
    
    #define SCC_GSMRL_SIR		((uint)0x80000000)	/* SCC2 only */
    #define SCC_GSMRL_EDGE_NONE	((uint)0x60000000)
    #define SCC_GSMRL_EDGE_NEG	((uint)0x40000000)
    #define SCC_GSMRL_EDGE_POS	((uint)0x20000000)
    #define SCC_GSMRL_EDGE_BOTH	((uint)0x00000000)
    #define SCC_GSMRL_TCI		((uint)0x10000000)
    #define SCC_GSMRL_TSNC_3	((uint)0x0c000000)
    #define SCC_GSMRL_TSNC_4	((uint)0x08000000)
    #define SCC_GSMRL_TSNC_14	((uint)0x04000000)
    #define SCC_GSMRL_TSNC_INF	((uint)0x00000000)
    #define SCC_GSMRL_RINV		((uint)0x02000000)
    #define SCC_GSMRL_TINV		((uint)0x01000000)
    #define SCC_GSMRL_TPL_128	((uint)0x00c00000)
    #define SCC_GSMRL_TPL_64	((uint)0x00a00000)
    #define SCC_GSMRL_TPL_48	((uint)0x00800000)
    #define SCC_GSMRL_TPL_32	((uint)0x00600000)
    #define SCC_GSMRL_TPL_16	((uint)0x00400000)
    #define SCC_GSMRL_TPL_8		((uint)0x00200000)
    #define SCC_GSMRL_TPL_NONE	((uint)0x00000000)
    #define SCC_GSMRL_TPP_ALL1	((uint)0x00180000)
    #define SCC_GSMRL_TPP_01	((uint)0x00100000)
    #define SCC_GSMRL_TPP_10	((uint)0x00080000)
    #define SCC_GSMRL_TPP_ZEROS	((uint)0x00000000)
    #define SCC_GSMRL_TEND		((uint)0x00040000)
    #define SCC_GSMRL_TDCR_32	((uint)0x00030000)
    #define SCC_GSMRL_TDCR_16	((uint)0x00020000)
    #define SCC_GSMRL_TDCR_8	((uint)0x00010000)
    #define SCC_GSMRL_TDCR_1	((uint)0x00000000)
    #define SCC_GSMRL_RDCR_32	((uint)0x0000c000)
    #define SCC_GSMRL_RDCR_16	((uint)0x00008000)
    #define SCC_GSMRL_RDCR_8	((uint)0x00004000)
    #define SCC_GSMRL_RDCR_1	((uint)0x00000000)
    #define SCC_GSMRL_RENC_DFMAN	((uint)0x00003000)
    #define SCC_GSMRL_RENC_MANCH	((uint)0x00002000)
    #define SCC_GSMRL_RENC_FM0	((uint)0x00001000)
    #define SCC_GSMRL_RENC_NRZI	((uint)0x00000800)
    #define SCC_GSMRL_RENC_NRZ	((uint)0x00000000)
    #define SCC_GSMRL_TENC_DFMAN	((uint)0x00000600)
    #define SCC_GSMRL_TENC_MANCH	((uint)0x00000400)
    #define SCC_GSMRL_TENC_FM0	((uint)0x00000200)
    #define SCC_GSMRL_TENC_NRZI	((uint)0x00000100)
    #define SCC_GSMRL_TENC_NRZ	((uint)0x00000000)
    #define SCC_GSMRL_DIAG_LE	((uint)0x000000c0)	/* Loop and echo */
    #define SCC_GSMRL_DIAG_ECHO	((uint)0x00000080)
    #define SCC_GSMRL_DIAG_LOOP	((uint)0x00000040)
    #define SCC_GSMRL_DIAG_NORM	((uint)0x00000000)
    #define SCC_GSMRL_ENR		((uint)0x00000020)
    #define SCC_GSMRL_ENT		((uint)0x00000010)
    #define SCC_GSMRL_MODE_ENET	((uint)0x0000000c)
    #define SCC_GSMRL_MODE_DDCMP	((uint)0x00000009)
    #define SCC_GSMRL_MODE_BISYNC	((uint)0x00000008)
    #define SCC_GSMRL_MODE_V14	((uint)0x00000007)
    #define SCC_GSMRL_MODE_AHDLC	((uint)0x00000006)
    #define SCC_GSMRL_MODE_PROFIBUS	((uint)0x00000005)
    #define SCC_GSMRL_MODE_UART	((uint)0x00000004)
    #define SCC_GSMRL_MODE_SS7	((uint)0x00000003)
    #define SCC_GSMRL_MODE_ATALK	((uint)0x00000002)
    #define SCC_GSMRL_MODE_HDLC	((uint)0x00000000)
    
    #define SCC_TODR_TOD		((ushort)0x8000)
    
    /* SCC Event and Mask register.
    */
    #define	SCCM_TXE	((unsigned char)0x10)
    #define	SCCM_BSY	((unsigned char)0x04)
    #define	SCCM_TX		((unsigned char)0x02)
    #define	SCCM_RX		((unsigned char)0x01)
    
    typedef struct scc_param {
    	ushort	scc_rbase;	/* Rx Buffer descriptor base address */
    	ushort	scc_tbase;	/* Tx Buffer descriptor base address */
    	u_char	scc_rfcr;	/* Rx function code */
    	u_char	scc_tfcr;	/* Tx function code */
    	ushort	scc_mrblr;	/* Max receive buffer length */
    	uint	scc_rstate;	/* Internal */
    	uint	scc_idp;	/* Internal */
    	ushort	scc_rbptr;	/* Internal */
    	ushort	scc_ibc;	/* Internal */
    	uint	scc_rxtmp;	/* Internal */
    	uint	scc_tstate;	/* Internal */
    	uint	scc_tdp;	/* Internal */
    	ushort	scc_tbptr;	/* Internal */
    	ushort	scc_tbc;	/* Internal */
    	uint	scc_txtmp;	/* Internal */
    	uint	scc_rcrc;	/* Internal */
    	uint	scc_tcrc;	/* Internal */
    } sccp_t;
    
    /* Function code bits.
    */
    #define SCC_EB	((u_char)0x10)	/* Set big endian byte order */
    
    /* CPM Ethernet through SCCx.
     */
    typedef struct scc_enet {
    	sccp_t	sen_genscc;
    	uint	sen_cpres;	/* Preset CRC */
    	uint	sen_cmask;	/* Constant mask for CRC */
    	uint	sen_crcec;	/* CRC Error counter */
    	uint	sen_alec;	/* alignment error counter */
    	uint	sen_disfc;	/* discard frame counter */
    	ushort	sen_pads;	/* Tx short frame pad character */
    	ushort	sen_retlim;	/* Retry limit threshold */
    	ushort	sen_retcnt;	/* Retry limit counter */
    	ushort	sen_maxflr;	/* maximum frame length register */
    	ushort	sen_minflr;	/* minimum frame length register */
    	ushort	sen_maxd1;	/* maximum DMA1 length */
    	ushort	sen_maxd2;	/* maximum DMA2 length */
    	ushort	sen_maxd;	/* Rx max DMA */
    	ushort	sen_dmacnt;	/* Rx DMA counter */
    	ushort	sen_maxb;	/* Max BD byte count */
    	ushort	sen_gaddr1;	/* Group address filter */
    	ushort	sen_gaddr2;
    	ushort	sen_gaddr3;
    	ushort	sen_gaddr4;
    	uint	sen_tbuf0data0;	/* Save area 0 - current frame */
    	uint	sen_tbuf0data1;	/* Save area 1 - current frame */
    	uint	sen_tbuf0rba;	/* Internal */
    	uint	sen_tbuf0crc;	/* Internal */
    	ushort	sen_tbuf0bcnt;	/* Internal */
    	ushort	sen_paddrh;	/* physical address (MSB) */
    	ushort	sen_paddrm;
    	ushort	sen_paddrl;	/* physical address (LSB) */
    	ushort	sen_pper;	/* persistence */
    	ushort	sen_rfbdptr;	/* Rx first BD pointer */
    	ushort	sen_tfbdptr;	/* Tx first BD pointer */
    	ushort	sen_tlbdptr;	/* Tx last BD pointer */
    	uint	sen_tbuf1data0;	/* Save area 0 - current frame */
    	uint	sen_tbuf1data1;	/* Save area 1 - current frame */
    	uint	sen_tbuf1rba;	/* Internal */
    	uint	sen_tbuf1crc;	/* Internal */
    	ushort	sen_tbuf1bcnt;	/* Internal */
    	ushort	sen_txlen;	/* Tx Frame length counter */
    	ushort	sen_iaddr1;	/* Individual address filter */
    	ushort	sen_iaddr2;
    	ushort	sen_iaddr3;
    	ushort	sen_iaddr4;
    	ushort	sen_boffcnt;	/* Backoff counter */
    
    	/* NOTE: Some versions of the manual have the following items
    	 * incorrectly documented.  Below is the proper order.
    	 */
    	ushort	sen_taddrh;	/* temp address (MSB) */
    	ushort	sen_taddrm;
    	ushort	sen_taddrl;	/* temp address (LSB) */
    } scc_enet_t;
    
    /**********************************************************************
     *
     * Board specific configuration settings.
     *
     * Please note that we use the presence of a #define SCC_ENET and/or
     * #define FEC_ENET to enable the SCC resp. FEC ethernet drivers.
     **********************************************************************/
    
    
    /***  ADS  *************************************************************/
    
    #if defined(CONFIG_MPC860) && defined(CONFIG_ADS)
    /* This ENET stuff is for the MPC860ADS with ethernet on SCC1.
     */
    
    #define	PROFF_ENET	PROFF_SCC1
    #define	CPM_CR_ENET	CPM_CR_CH_SCC1
    #define	SCC_ENET	0
    
    #define PA_ENET_RXD	((ushort)0x0001)
    #define PA_ENET_TXD	((ushort)0x0002)
    #define PA_ENET_TCLK	((ushort)0x0100)
    #define PA_ENET_RCLK	((ushort)0x0200)
    
    #define PB_ENET_TENA	((uint)0x00001000)
    
    #define PC_ENET_CLSN	((ushort)0x0010)
    #define PC_ENET_RENA	((ushort)0x0020)
    
    #define SICR_ENET_MASK	((uint)0x000000ff)
    #define SICR_ENET_CLKRT	((uint)0x0000002c)
    
    /* 68160 PHY control */
    
    #define PC_ENET_ETHLOOP ((ushort)0x0800)
    #define PC_ENET_TPFLDL	((ushort)0x0400)
    #define PC_ENET_TPSQEL  ((ushort)0x0200)
    
    #endif	/* MPC860ADS */
    
    /***  AMX860  **********************************************/
    
    #if defined(CONFIG_AMX860)
    
    /* This ENET stuff is for the AMX860 with ethernet on SCC1.
     */
    
    #define PROFF_ENET	PROFF_SCC1
    #define CPM_CR_ENET	CPM_CR_CH_SCC1
    #define SCC_ENET	0
    
    #define PA_ENET_RXD	((ushort)0x0001)
    #define PA_ENET_TXD	((ushort)0x0002)
    #define PA_ENET_TCLK	((ushort)0x0400)
    #define PA_ENET_RCLK	((ushort)0x0800)
    
    #define PB_ENET_TENA	((uint)0x00001000)
    
    #define PC_ENET_CLSN	((ushort)0x0010)
    #define PC_ENET_RENA	((ushort)0x0020)
    
    #define SICR_ENET_MASK	((uint)0x000000ff)
    #define SICR_ENET_CLKRT	((uint)0x0000003e)
    
    /* 68160 PHY control */
    
    #define PB_ENET_ETHLOOP	((uint)0x00020000)
    #define PB_ENET_TPFLDL	((uint)0x00010000)
    #define PB_ENET_TPSQEL	((uint)0x00008000)
    #define PD_ENET_ETH_EN	((ushort)0x0004)
    
    #endif	/* CONFIG_AMX860 */
    
    /***  BSEIP  **********************************************************/
    
    #ifdef CONFIG_BSEIP
    /* This ENET stuff is for the MPC823 with ethernet on SCC2.
     * This is unique to the BSE ip-Engine board.
     */
    #define	PROFF_ENET	PROFF_SCC2
    #define	CPM_CR_ENET	CPM_CR_CH_SCC2
    #define	SCC_ENET	1
    #define PA_ENET_RXD	((ushort)0x0004)
    #define PA_ENET_TXD	((ushort)0x0008)
    #define PA_ENET_TCLK	((ushort)0x0100)
    #define PA_ENET_RCLK	((ushort)0x0200)
    #define PB_ENET_TENA	((uint)0x00002000)
    #define PC_ENET_CLSN	((ushort)0x0040)
    #define PC_ENET_RENA	((ushort)0x0080)
    
    /* BSE uses port B and C bits for PHY control also.
    */
    #define PB_BSE_POWERUP	((uint)0x00000004)
    #define PB_BSE_FDXDIS	((uint)0x00008000)
    #define PC_BSE_LOOPBACK	((ushort)0x0800)
    
    #define SICR_ENET_MASK	((uint)0x0000ff00)
    #define SICR_ENET_CLKRT	((uint)0x00002c00)
    #endif	/* CONFIG_BSEIP */
    
    /***  BSEIP  **********************************************************/
    
    #ifdef CONFIG_FLAGADM
    /* Enet configuration for the FLAGADM */
    /* Enet on SCC2 */
    
    #define	PROFF_ENET	PROFF_SCC2
    #define	CPM_CR_ENET	CPM_CR_CH_SCC2
    #define	SCC_ENET	1
    
    #define PA_ENET_RXD	((ushort)0x0004)
    #define PA_ENET_TXD	((ushort)0x0008)
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define PA_ENET_TCLK	((ushort)0x0100)
    #define PA_ENET_RCLK	((ushort)0x0400)
    #define PB_ENET_TENA	((uint)0x00002000)
    #define PC_ENET_CLSN	((ushort)0x0040)
    #define PC_ENET_RENA	((ushort)0x0080)
    
    #define SICR_ENET_MASK	((uint)0x0000ff00)
    #define SICR_ENET_CLKRT	((uint)0x00003400)
    #endif	/* CONFIG_FLAGADM */
    
    /***  C2MON  **********************************************************/
    
    #ifdef CONFIG_C2MON
    
    # ifndef CONFIG_FEC_ENET	/* use SCC for 10Mbps Ethernet	*/
    #  error "Ethernet on SCC not supported on C2MON Board!"
    # else				/* Use FEC for Fast Ethernet */
    
    #undef	SCC_ENET
    #define FEC_ENET
    
    #define PD_MII_TXD1	((ushort)0x1000)	/* PD  3 */
    #define PD_MII_TXD2	((ushort)0x0800)	/* PD  4 */
    #define PD_MII_TXD3	((ushort)0x0400)	/* PD  5 */
    #define PD_MII_RX_DV	((ushort)0x0200)	/* PD  6 */
    #define PD_MII_RX_ERR	((ushort)0x0100)	/* PD  7 */
    #define PD_MII_RX_CLK	((ushort)0x0080)	/* PD  8 */
    #define PD_MII_TXD0	((ushort)0x0040)	/* PD  9 */
    #define PD_MII_RXD0	((ushort)0x0020)	/* PD 10 */
    #define PD_MII_TX_ERR	((ushort)0x0010)	/* PD 11 */
    #define PD_MII_MDC	((ushort)0x0008)	/* PD 12 */
    #define PD_MII_RXD1	((ushort)0x0004)	/* PD 13 */
    #define PD_MII_RXD2	((ushort)0x0002)	/* PD 14 */
    #define PD_MII_RXD3	((ushort)0x0001)	/* PD 15 */
    
    #define PD_MII_MASK	((ushort)0x1FFF)	/* PD 3...15 */
    
    # endif	/* CONFIG_FEC_ENET */
    #endif	/* CONFIG_C2MON */
    
    /*********************************************************************/
    
    
    /***  CCM  and  PCU E  ***********************************************/
    
    /* The PCU E  and  CCM  use the FEC on a MPC860T for Ethernet */
    
    #if defined (CONFIG_PCU_E) || defined(CONFIG_CCM)
    
    #define	FEC_ENET	/* use FEC for EThernet */
    #undef	SCC_ENET
    
    #define PD_MII_TXD1	((ushort)0x1000)	/* PD  3 */
    #define PD_MII_TXD2	((ushort)0x0800)	/* PD  4 */
    #define PD_MII_TXD3	((ushort)0x0400)	/* PD  5 */
    #define PD_MII_RX_DV	((ushort)0x0200)	/* PD  6 */
    #define PD_MII_RX_ERR	((ushort)0x0100)	/* PD  7 */
    #define PD_MII_RX_CLK	((ushort)0x0080)	/* PD  8 */
    #define PD_MII_TXD0	((ushort)0x0040)	/* PD  9 */
    #define PD_MII_RXD0	((ushort)0x0020)	/* PD 10 */
    #define PD_MII_TX_ERR	((ushort)0x0010)	/* PD 11 */
    #define PD_MII_MDC	((ushort)0x0008)	/* PD 12 */
    #define PD_MII_RXD1	((ushort)0x0004)	/* PD 13 */
    #define PD_MII_RXD2	((ushort)0x0002)	/* PD 14 */
    #define PD_MII_RXD3	((ushort)0x0001)	/* PD 15 */
    
    #define PD_MII_MASK	((ushort)0x1FFF)	/* PD 3...15 */
    
    #endif	/* CONFIG_PCU_E, CONFIG_CCM */
    
    
    /***  ELPT860 *********************************************************/
    
    #ifdef CONFIG_ELPT860
    /* Bits in parallel I/O port registers that have to be set/cleared
     * to configure the pins for SCC1 use.
     */
    #  define PROFF_ENET        PROFF_SCC1
    #  define CPM_CR_ENET       CPM_CR_CH_SCC1
    #  define SCC_ENET          0
    
    #  define PA_ENET_RXD       ((ushort)0x0001)	/* PA 15 */
    #  define PA_ENET_TXD       ((ushort)0x0002)	/* PA 14 */
    #  define PA_ENET_RCLK      ((ushort)0x0100)	/* PA  7 */
    #  define PA_ENET_TCLK      ((ushort)0x0200)	/* PA  6 */
    
    #  define PC_ENET_TENA      ((ushort)0x0001)	/* PC 15 */
    #  define PC_ENET_CLSN      ((ushort)0x0010)	/* PC 11 */
    #  define PC_ENET_RENA      ((ushort)0x0020)	/* PC 10 */
    
    /* Control bits in the SICR to route TCLK (CLK2) and RCLK (CLK1) to
     * SCC1.  Also, make sure GR1 (bit 24) and SC1 (bit 25) are zero.
     */
    #  define SICR_ENET_MASK    ((uint)0x000000FF)
    #  define SICR_ENET_CLKRT   ((uint)0x00000025)
    #endif	/* CONFIG_ELPT860 */
    
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    /***  ESTEEM 192E  **************************************************/
    #ifdef CONFIG_ESTEEM192E
    /* ESTEEM192E
     * This ENET stuff is for the MPC850 with ethernet on SCC2. This
     * is very similar to the RPX-Lite configuration.
     * Note TENA , LOOPBACK , FDPLEX_DIS on Port B.
     */
    
    #define	PROFF_ENET	PROFF_SCC2
    #define	CPM_CR_ENET	CPM_CR_CH_SCC2
    #define	SCC_ENET	1
    
    #define PA_ENET_RXD	((ushort)0x0004)
    #define PA_ENET_TXD	((ushort)0x0008)
    #define PA_ENET_TCLK	((ushort)0x0200)
    #define PA_ENET_RCLK	((ushort)0x0800)
    #define PB_ENET_TENA	((uint)0x00002000)
    #define PC_ENET_CLSN	((ushort)0x0040)
    #define PC_ENET_RENA	((ushort)0x0080)
    
    #define SICR_ENET_MASK	((uint)0x0000ff00)
    #define SICR_ENET_CLKRT	((uint)0x00003d00)
    
    #define PB_ENET_LOOPBACK ((uint)0x00004000)
    #define PB_ENET_FDPLEX_DIS ((uint)0x00008000)
    
    #endif
    
    /***  FADS823  ********************************************************/
    
    #if defined(CONFIG_MPC823FADS) && defined(CONFIG_FADS)
    /* This ENET stuff is for the MPC823FADS with ethernet on SCC2.
     */
    #ifdef CONFIG_SCC2_ENET
    #define	PROFF_ENET	PROFF_SCC2
    #define	CPM_CR_ENET	CPM_CR_CH_SCC2
    #define	SCC_ENET	1
    #define CPMVEC_ENET	CPMVEC_SCC2
    #endif
    
    #ifdef CONFIG_SCC1_ENET
    #define	PROFF_ENET	PROFF_SCC1
    #define	CPM_CR_ENET	CPM_CR_CH_SCC1
    #define	SCC_ENET	0
    #define CPMVEC_ENET	CPMVEC_SCC1
    #endif
    
    #define PA_ENET_RXD	((ushort)0x0004)
    #define PA_ENET_TXD	((ushort)0x0008)
    #define PA_ENET_TCLK	((ushort)0x0400)
    #define PA_ENET_RCLK	((ushort)0x0200)
    
    #define PB_ENET_TENA	((uint)0x00002000)
    
    #define PC_ENET_CLSN	((ushort)0x0040)
    #define PC_ENET_RENA	((ushort)0x0080)
    
    #define SICR_ENET_MASK	((uint)0x0000ff00)
    #define SICR_ENET_CLKRT	((uint)0x00002e00)
    
    #endif	/* CONFIG_FADS823FADS */
    
    /***  FADS850SAR  ********************************************************/
    
    #if defined(CONFIG_MPC850SAR) && defined(CONFIG_FADS)
    /* This ENET stuff is for the MPC850SAR with ethernet on SCC2.  Some of
     * this may be unique to the FADS850SAR configuration.
     * Note TENA is on Port B.
     */
    #define	PROFF_ENET	PROFF_SCC2
    #define	CPM_CR_ENET	CPM_CR_CH_SCC2
    #define	SCC_ENET	1
    #define PA_ENET_RXD	((ushort)0x0004)	/* PA 13 */
    #define PA_ENET_TXD	((ushort)0x0008)	/* PA 12 */
    #define PA_ENET_RCLK	((ushort)0x0200)	/* PA 6 */
    #define PA_ENET_TCLK	((ushort)0x0800)	/* PA 4 */
    #define PB_ENET_TENA	((uint)0x00002000)	/* PB 18 */
    #define PC_ENET_CLSN	((ushort)0x0040)	/* PC 9 */
    #define PC_ENET_RENA	((ushort)0x0080)	/* PC 8 */
    
    #define SICR_ENET_MASK	((uint)0x0000ff00)
    #define SICR_ENET_CLKRT	((uint)0x00002f00)	/* RCLK-CLK2, TCLK-CLK4 */
    #endif	/* CONFIG_FADS850SAR */
    
    /***  FADS860T********************************************************/
    
    
    #if defined(CONFIG_FADS) && defined(CONFIG_MPC86x)
    /*
     * This ENET stuff is for the MPC86xFADS/MPC8xxADS with ethernet on SCC1.
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
     */
    #ifdef CONFIG_SCC1_ENET
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define	SCC_ENET	0
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #define	PROFF_ENET	PROFF_SCC1
    #define	CPM_CR_ENET	CPM_CR_CH_SCC1
    
    #define PA_ENET_RXD	((ushort)0x0001)
    #define PA_ENET_TXD	((ushort)0x0002)
    #define PA_ENET_TCLK	((ushort)0x0100)
    #define PA_ENET_RCLK	((ushort)0x0200)
    
    #define PB_ENET_TENA	((uint)0x00001000)
    
    #define PC_ENET_CLSN	((ushort)0x0010)
    #define PC_ENET_RENA	((ushort)0x0020)
    
    #define SICR_ENET_MASK	((uint)0x000000ff)
    #define SICR_ENET_CLKRT	((uint)0x0000002c)
    
    
    #endif	/* CONFIG_SCC1_ETHERNET */
    
    /*
    
     * This ENET stuff is for the MPC860TFADS/MPC86xADS/MPC885ADS
     * with ethernet on FEC.
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
     */
    
    #ifdef CONFIG_FEC_ENET
    
    #define	FEC_ENET	/* Use FEC for Ethernet */
    #endif	/* CONFIG_FEC_ENET */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    
    
    #endif	/* CONFIG_FADS && CONFIG_MPC86x */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    
    
    /***  FPS850L, FPS860L  ************************************************/
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    
    
    #if defined(CONFIG_FPS850L) || defined(CONFIG_FPS860L)
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    /* Bits in parallel I/O port registers that have to be set/cleared
    
     * to configure the pins for SCC2 use.
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
     */
    #define	PROFF_ENET	PROFF_SCC2
    #define	CPM_CR_ENET	CPM_CR_CH_SCC2
    #define	SCC_ENET	1
    #define PA_ENET_RXD	((ushort)0x0004)	/* PA 13 */
    #define PA_ENET_TXD	((ushort)0x0008)	/* PA 12 */
    #define PA_ENET_RCLK	((ushort)0x0100)	/* PA  7 */
    #define PA_ENET_TCLK	((ushort)0x0400)	/* PA  5 */
    
    #define PC_ENET_TENA	((ushort)0x0002)	/* PC 14 */
    #define PC_ENET_CLSN	((ushort)0x0040)	/* PC  9 */
    #define PC_ENET_RENA	((ushort)0x0080)	/* PC  8 */
    
    /* Control bits in the SICR to route TCLK (CLK2) and RCLK (CLK4) to
     * SCC2.  Also, make sure GR2 (bit 16) and SC2 (bit 17) are zero.
     */
    #define SICR_ENET_MASK	((uint)0x0000ff00)
    #define SICR_ENET_CLKRT	((uint)0x00002600)
    
    #endif	/* CONFIG_FPS850L, CONFIG_FPS860L */
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    
    /*** GEN860T **********************************************************/
    #if defined(CONFIG_GEN860T)
    #undef	SCC_ENET
    #define	FEC_ENET
    
    #define PD_MII_TXD1	((ushort)0x1000)	/* PD  3 	*/
    #define PD_MII_TXD2	((ushort)0x0800)	/* PD  4 	*/
    #define PD_MII_TXD3	((ushort)0x0400)	/* PD  5 	*/
    #define PD_MII_RX_DV	((ushort)0x0200)	/* PD  6 	*/
    #define PD_MII_RX_ERR	((ushort)0x0100)	/* PD  7 	*/
    #define PD_MII_RX_CLK	((ushort)0x0080)	/* PD  8 	*/
    #define PD_MII_TXD0	((ushort)0x0040)	/* PD  9 	*/
    #define PD_MII_RXD0	((ushort)0x0020)	/* PD 10 	*/
    #define PD_MII_TX_ERR	((ushort)0x0010)	/* PD 11 	*/
    #define PD_MII_MDC	((ushort)0x0008)	/* PD 12 	*/
    #define PD_MII_RXD1	((ushort)0x0004)	/* PD 13 	*/
    #define PD_MII_RXD2	((ushort)0x0002)	/* PD 14 	*/
    #define PD_MII_RXD3	((ushort)0x0001)	/* PD 15 	*/
    #define PD_MII_MASK	((ushort)0x1FFF)	/* PD 3-15	*/
    #endif	/* CONFIG_GEN860T */
    
    /***  GENIETV  ********************************************************/
    
    #if defined(CONFIG_GENIETV)
    /* Ethernet is only on SCC2 */
    
    #define CONFIG_SCC2_ENET
    #define	PROFF_ENET	PROFF_SCC2
    #define	CPM_CR_ENET	CPM_CR_CH_SCC2
    #define	SCC_ENET	1
    #define CPMVEC_ENET	CPMVEC_SCC2
    
    #define PA_ENET_RXD	((ushort)0x0004)	/* PA 13 */
    #define PA_ENET_TXD	((ushort)0x0008)	/* PA 12 */
    #define PA_ENET_TCLK	((ushort)0x0400)	/* PA  5 */
    #define PA_ENET_RCLK	((ushort)0x0200)	/* PA  6 */
    
    #define PB_ENET_TENA	((uint)0x00002000)	/* PB 18 */
    
    #define PC_ENET_CLSN	((ushort)0x0040)	/* PC  9 */
    #define PC_ENET_RENA	((ushort)0x0080)	/* PC  8 */
    
    #define SICR_ENET_MASK	((uint)0x0000ff00)
    #define SICR_ENET_CLKRT	((uint)0x00002e00)
    
    #endif	/* CONFIG_GENIETV */
    
    /*** GTH ******************************************************/
    
    #ifdef CONFIG_GTH
    #ifdef CONFIG_FEC_ENET
    #define	FEC_ENET	/* use FEC for EThernet */
    #endif	/* CONFIG_FEC_ETHERNET */
    
    /* This ENET stuff is for GTH 10 Mbit ( SCC ) */
    #define	PROFF_ENET	PROFF_SCC1
    #define	CPM_CR_ENET	CPM_CR_CH_SCC1
    #define	SCC_ENET	0
    
    #define PA_ENET_RXD	((ushort)0x0001) /* PA15 */
    #define PA_ENET_TXD	((ushort)0x0002) /* PA14 */
    #define PA_ENET_TCLK	((ushort)0x0800) /* PA4 */
    #define PA_ENET_RCLK	((ushort)0x0400) /* PA5 */
    
    #define PB_ENET_TENA	((uint)0x00001000) /* PB19 */
    
    #define PC_ENET_CLSN	((ushort)0x0010) /* PC11 */
    #define PC_ENET_RENA	((ushort)0x0020) /* PC10 */
    
    /* NOTE. This is reset for 10Mbit port only */
    #define PC_ENET_RESET	((ushort)0x0100)	/* PC 7 */
    
    #define SICR_ENET_MASK	((uint)0x000000ff)
    
    /* TCLK PA4 -->CLK4, RCLK PA5 -->CLK3 */
    #define SICR_ENET_CLKRT	((uint)0x00000037)
    
    #endif	/* CONFIG_GTH */
    
    /*** HERMES-PRO ******************************************************/
    
    /* The HERMES-PRO uses the FEC on a MPC860T for Ethernet */
    
    #ifdef CONFIG_HERMES
    
    #define	FEC_ENET	/* use FEC for EThernet */
    #undef	SCC_ENET
    
    
    #define PD_MII_TXD1	((ushort)0x1000)	/* PD  3 */
    #define PD_MII_TXD2	((ushort)0x0800)	/* PD  4 */
    #define PD_MII_TXD3	((ushort)0x0400)	/* PD  5 */
    #define PD_MII_RX_DV	((ushort)0x0200)	/* PD  6 */
    #define PD_MII_RX_ERR	((ushort)0x0100)	/* PD  7 */
    #define PD_MII_RX_CLK	((ushort)0x0080)	/* PD  8 */
    #define PD_MII_TXD0	((ushort)0x0040)	/* PD  9 */
    #define PD_MII_RXD0	((ushort)0x0020)	/* PD 10 */
    #define PD_MII_TX_ERR	((ushort)0x0010)	/* PD 11 */
    #define PD_MII_MDC	((ushort)0x0008)	/* PD 12 */
    #define PD_MII_RXD1	((ushort)0x0004)	/* PD 13 */
    #define PD_MII_RXD2	((ushort)0x0002)	/* PD 14 */
    #define PD_MII_RXD3	((ushort)0x0001)	/* PD 15 */
    
    #define PD_MII_MASK	((ushort)0x1FFF)	/* PD 3...15 */
    
    #endif	/* CONFIG_HERMES */
    
    /***  IAD210  **********************************************************/
    
    /* The IAD210 uses the FEC on a MPC860P for Ethernet */
    
    #if defined(CONFIG_IAD210)
    
    # define  FEC_ENET    /* use FEC for Ethernet */
    # undef   SCC_ENET
    
    # define PD_MII_TXD1    ((ushort) 0x1000 )	/* PD  3 */
    # define PD_MII_TXD2    ((ushort) 0x0800 )	/* PD  4 */
    # define PD_MII_TXD3    ((ushort) 0x0400 )	/* PD  5 */
    # define PD_MII_RX_DV   ((ushort) 0x0200 )	/* PD  6 */
    # define PD_MII_RX_ERR  ((ushort) 0x0100 )	/* PD  7 */
    # define PD_MII_RX_CLK  ((ushort) 0x0080 )	/* PD  8 */
    # define PD_MII_TXD0    ((ushort) 0x0040 )	/* PD  9 */
    # define PD_MII_RXD0    ((ushort) 0x0020 )	/* PD 10 */
    # define PD_MII_TX_ERR  ((ushort) 0x0010 )	/* PD 11 */
    # define PD_MII_MDC     ((ushort) 0x0008 )	/* PD 12 */
    # define PD_MII_RXD1    ((ushort) 0x0004 )	/* PD 13 */
    # define PD_MII_RXD2    ((ushort) 0x0002 )	/* PD 14 */
    # define PD_MII_RXD3    ((ushort) 0x0001 )	/* PD 15 */
    
    # define PD_MII_MASK    ((ushort) 0x1FFF )   /* PD 3...15 */
    
    #endif	/* CONFIG_IAD210 */
    
    /*** ICU862  **********************************************************/
    
    #if defined(CONFIG_ICU862)
    
    #ifdef CONFIG_FEC_ENET
    #define FEC_ENET	/* use FEC for EThernet */
    #endif  /* CONFIG_FEC_ETHERNET */
    
    #endif /* CONFIG_ICU862 */
    
    /***  IP860  **********************************************************/
    
    #if defined(CONFIG_IP860)
    /* Bits in parallel I/O port registers that have to be set/cleared
     * to configure the pins for SCC1 use.
     */
    #define	PROFF_ENET	PROFF_SCC1
    #define	CPM_CR_ENET	CPM_CR_CH_SCC1
    #define	SCC_ENET	0
    #define PA_ENET_RXD	((ushort)0x0001)	/* PA 15 */
    #define PA_ENET_TXD	((ushort)0x0002)	/* PA 14 */
    #define PA_ENET_RCLK	((ushort)0x0200)	/* PA  6 */
    #define PA_ENET_TCLK	((ushort)0x0100)	/* PA  7 */
    
    #define PC_ENET_TENA	((ushort)0x0001)	/* PC 15 */
    #define PC_ENET_CLSN	((ushort)0x0010)	/* PC 11 */
    #define PC_ENET_RENA	((ushort)0x0020)	/* PC 10 */
    
    #define PB_ENET_RESET	(uint)0x00000008	/* PB 28 */
    #define PB_ENET_JABD	(uint)0x00000004	/* PB 29 */
    
    /* Control bits in the SICR to route TCLK (CLK1) and RCLK (CLK2) to
     * SCC1.  Also, make sure GR1 (bit 24) and SC1 (bit 25) are zero.
     */
    #define SICR_ENET_MASK	((uint)0x000000ff)
    #define SICR_ENET_CLKRT	((uint)0x0000002C)
    #endif	/* CONFIG_IP860 */
    
    /*** IVMS8  **********************************************************/
    
    /* The IVMS8 uses the FEC on a MPC860T for Ethernet */
    
    #if defined(CONFIG_IVMS8) || defined(CONFIG_IVML24)
    
    #define	FEC_ENET	/* use FEC for EThernet */
    #undef	SCC_ENET
    
    #define	PB_ENET_POWER	((uint)0x00010000)	/* PB 15 */
    
    #define PC_ENET_RESET	((ushort)0x0010)	/* PC 11 */
    
    #define PD_MII_TXD1	((ushort)0x1000)	/* PD  3 */
    #define PD_MII_TXD2	((ushort)0x0800)	/* PD  4 */
    #define PD_MII_TXD3	((ushort)0x0400)	/* PD  5 */
    #define PD_MII_RX_DV	((ushort)0x0200)	/* PD  6 */
    #define PD_MII_RX_ERR	((ushort)0x0100)	/* PD  7 */
    #define PD_MII_RX_CLK	((ushort)0x0080)	/* PD  8 */
    #define PD_MII_TXD0	((ushort)0x0040)	/* PD  9 */
    #define PD_MII_RXD0	((ushort)0x0020)	/* PD 10 */
    #define PD_MII_TX_ERR	((ushort)0x0010)	/* PD 11 */
    #define PD_MII_MDC	((ushort)0x0008)	/* PD 12 */
    #define PD_MII_RXD1	((ushort)0x0004)	/* PD 13 */
    #define PD_MII_RXD2	((ushort)0x0002)	/* PD 14 */
    #define PD_MII_RXD3	((ushort)0x0001)	/* PD 15 */
    
    #define PD_MII_MASK	((ushort)0x1FFF)	/* PD 3...15 */
    
    #endif	/* CONFIG_IVMS8, CONFIG_IVML24 */
    
    
    /***  KUP4K, KUP4X ****************************************************/
    /* The KUP4 boards uses the FEC on a MPC8xx for Ethernet */
    
    #if defined(CONFIG_KUP4K) || defined(CONFIG_KUP4X)
    
    
    #define	FEC_ENET	/* use FEC for EThernet */
    #undef	SCC_ENET
    
    #define	PB_ENET_POWER	((uint)0x00010000)	/* PB 15 */
    
    #define PC_ENET_RESET	((ushort)0x0010)	/* PC 11 */
    
    #define PD_MII_TXD1	((ushort)0x1000)	/* PD  3 */
    #define PD_MII_TXD2	((ushort)0x0800)	/* PD  4 */
    #define PD_MII_TXD3	((ushort)0x0400)	/* PD  5 */
    #define PD_MII_RX_DV	((ushort)0x0200)	/* PD  6 */