mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-25 01:58:13 +01:00 
			
		
		
		
	Add support for the Xilinx ML300 platform * Patch by Stephan Linz, 17 Feb 2004: Fix watchdog support for NIOS * Patch by Josh Fryman, 16 Feb 2004: Fix byte-swapping for cfi_flash.c for different bus widths * Patch by Jon Diekema, 14 Jeb 2004: Remove duplicate "FPGA Support" notes from the README file
		
			
				
	
	
		
			463 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			463 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /******************************************************************************
 | |
| *
 | |
| *     Author: Xilinx, Inc.
 | |
| *
 | |
| *
 | |
| *     This program is free software; you can redistribute it and/or modify it
 | |
| *     under the terms of the GNU General Public License as published by the
 | |
| *     Free Software Foundation; either version 2 of the License, or (at your
 | |
| *     option) any later version.
 | |
| *
 | |
| *
 | |
| *     XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A
 | |
| *     COURTESY TO YOU. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS
 | |
| *     ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION OR STANDARD,
 | |
| *     XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION IS FREE
 | |
| *     FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE FOR OBTAINING
 | |
| *     ANY THIRD PARTY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.
 | |
| *     XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO
 | |
| *     THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY
 | |
| *     WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM
 | |
| *     CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND
 | |
| *     FITNESS FOR A PARTICULAR PURPOSE.
 | |
| *
 | |
| *
 | |
| *     Xilinx hardware products are not intended for use in life support
 | |
| *     appliances, devices, or systems. Use in such applications is
 | |
| *     expressly prohibited.
 | |
| *
 | |
| *
 | |
| *     (c) Copyright 2002-2004 Xilinx Inc.
 | |
| *     All rights reserved.
 | |
| *
 | |
| *
 | |
| *     You should have received a copy of the GNU General Public License along
 | |
| *     with this program; if not, write to the Free Software Foundation, Inc.,
 | |
| *     675 Mass Ave, Cambridge, MA 02139, USA.
 | |
| *
 | |
| ******************************************************************************/
 | |
| /*****************************************************************************/
 | |
| /**
 | |
| *
 | |
| * @file xemac_l.h
 | |
| *
 | |
| * This header file contains identifiers and low-level driver functions (or
 | |
| * macros) that can be used to access the device.  High-level driver functions
 | |
| * are defined in xemac.h.
 | |
| *
 | |
| * <pre>
 | |
| * MODIFICATION HISTORY:
 | |
| *
 | |
| * Ver	Who  Date     Changes
 | |
| * ----- ---- -------- -----------------------------------------------
 | |
| * 1.00b rpm  04/26/02 First release
 | |
| * 1.00b rmm  09/23/02 Added XEmac_mPhyReset macro
 | |
| * 1.00c rpm  12/05/02 New version includes support for simple DMA
 | |
| * </pre>
 | |
| *
 | |
| ******************************************************************************/
 | |
| 
 | |
| #ifndef XEMAC_L_H		/* prevent circular inclusions */
 | |
| #define XEMAC_L_H		/* by using protection macros */
 | |
| 
 | |
| /***************************** Include Files *********************************/
 | |
| 
 | |
| #include "xbasic_types.h"
 | |
| #include "xio.h"
 | |
| 
 | |
| /************************** Constant Definitions *****************************/
 | |
| 
 | |
| /* Offset of the MAC registers from the IPIF base address */
 | |
| #define XEM_REG_OFFSET	   0x1100UL
 | |
| 
 | |
| /*
 | |
|  * Register offsets for the Ethernet MAC. Each register is 32 bits.
 | |
|  */
 | |
| #define XEM_EMIR_OFFSET	  (XEM_REG_OFFSET + 0x0)	/* EMAC Module ID */
 | |
| #define XEM_ECR_OFFSET	  (XEM_REG_OFFSET + 0x4)	/* MAC Control */
 | |
| #define XEM_IFGP_OFFSET	  (XEM_REG_OFFSET + 0x8)	/* Interframe Gap */
 | |
| #define XEM_SAH_OFFSET	  (XEM_REG_OFFSET + 0xC)	/* Station addr, high */
 | |
| #define XEM_SAL_OFFSET	  (XEM_REG_OFFSET + 0x10)	/* Station addr, low */
 | |
| #define XEM_MGTCR_OFFSET  (XEM_REG_OFFSET + 0x14)	/* MII mgmt control */
 | |
| #define XEM_MGTDR_OFFSET  (XEM_REG_OFFSET + 0x18)	/* MII mgmt data */
 | |
| #define XEM_RPLR_OFFSET	  (XEM_REG_OFFSET + 0x1C)	/* Rx packet length */
 | |
| #define XEM_TPLR_OFFSET	  (XEM_REG_OFFSET + 0x20)	/* Tx packet length */
 | |
| #define XEM_TSR_OFFSET	  (XEM_REG_OFFSET + 0x24)	/* Tx status */
 | |
| #define XEM_RMFC_OFFSET	  (XEM_REG_OFFSET + 0x28)	/* Rx missed frames */
 | |
| #define XEM_RCC_OFFSET	  (XEM_REG_OFFSET + 0x2C)	/* Rx collisions */
 | |
| #define XEM_RFCSEC_OFFSET (XEM_REG_OFFSET + 0x30)	/* Rx FCS errors */
 | |
| #define XEM_RAEC_OFFSET	  (XEM_REG_OFFSET + 0x34)	/* Rx alignment errors */
 | |
| #define XEM_TEDC_OFFSET	  (XEM_REG_OFFSET + 0x38)	/* Transmit excess
 | |
| 							 * deferral cnt */
 | |
| 
 | |
| /*
 | |
|  * Register offsets for the IPIF components
 | |
|  */
 | |
| #define XEM_ISR_OFFSET		 0x20UL /* Interrupt status */
 | |
| 
 | |
| #define XEM_DMA_OFFSET		 0x2300UL
 | |
| #define XEM_DMA_SEND_OFFSET	 (XEM_DMA_OFFSET + 0x0) /* DMA send channel */
 | |
| #define XEM_DMA_RECV_OFFSET	 (XEM_DMA_OFFSET + 0x40)	/* DMA recv channel */
 | |
| 
 | |
| #define XEM_PFIFO_OFFSET	 0x2000UL
 | |
| #define XEM_PFIFO_TXREG_OFFSET	 (XEM_PFIFO_OFFSET + 0x0)	/* Tx registers */
 | |
| #define XEM_PFIFO_RXREG_OFFSET	 (XEM_PFIFO_OFFSET + 0x10)	/* Rx registers */
 | |
| #define XEM_PFIFO_TXDATA_OFFSET	 (XEM_PFIFO_OFFSET + 0x100)	/* Tx keyhole */
 | |
| #define XEM_PFIFO_RXDATA_OFFSET	 (XEM_PFIFO_OFFSET + 0x200)	/* Rx keyhole */
 | |
| 
 | |
| /*
 | |
|  * EMAC Module Identification Register (EMIR)
 | |
|  */
 | |
| #define XEM_EMIR_VERSION_MASK	 0xFFFF0000UL	/* Device version */
 | |
| #define XEM_EMIR_TYPE_MASK	 0x0000FF00UL	/* Device type */
 | |
| 
 | |
| /*
 | |
|  * EMAC Control Register (ECR)
 | |
|  */
 | |
| #define XEM_ECR_FULL_DUPLEX_MASK	 0x80000000UL	/* Full duplex mode */
 | |
| #define XEM_ECR_XMIT_RESET_MASK		 0x40000000UL	/* Reset transmitter */
 | |
| #define XEM_ECR_XMIT_ENABLE_MASK	 0x20000000UL	/* Enable transmitter */
 | |
| #define XEM_ECR_RECV_RESET_MASK		 0x10000000UL	/* Reset receiver */
 | |
| #define XEM_ECR_RECV_ENABLE_MASK	 0x08000000UL	/* Enable receiver */
 | |
| #define XEM_ECR_PHY_ENABLE_MASK		 0x04000000UL	/* Enable PHY */
 | |
| #define XEM_ECR_XMIT_PAD_ENABLE_MASK	 0x02000000UL	/* Enable xmit pad insert */
 | |
| #define XEM_ECR_XMIT_FCS_ENABLE_MASK	 0x01000000UL	/* Enable xmit FCS insert */
 | |
| #define XEM_ECR_XMIT_ADDR_INSERT_MASK	 0x00800000UL	/* Enable xmit source addr
 | |
| 							 * insertion */
 | |
| #define XEM_ECR_XMIT_ERROR_INSERT_MASK	 0x00400000UL	/* Insert xmit error */
 | |
| #define XEM_ECR_XMIT_ADDR_OVWRT_MASK	 0x00200000UL	/* Enable xmit source addr
 | |
| 							 * overwrite */
 | |
| #define XEM_ECR_LOOPBACK_MASK		 0x00100000UL	/* Enable internal
 | |
| 							 * loopback */
 | |
| #define XEM_ECR_RECV_STRIP_ENABLE_MASK	 0x00080000UL	/* Enable recv pad/fcs strip */
 | |
| #define XEM_ECR_UNICAST_ENABLE_MASK	 0x00020000UL	/* Enable unicast addr */
 | |
| #define XEM_ECR_MULTI_ENABLE_MASK	 0x00010000UL	/* Enable multicast addr */
 | |
| #define XEM_ECR_BROAD_ENABLE_MASK	 0x00008000UL	/* Enable broadcast addr */
 | |
| #define XEM_ECR_PROMISC_ENABLE_MASK	 0x00004000UL	/* Enable promiscuous mode */
 | |
| #define XEM_ECR_RECV_ALL_MASK		 0x00002000UL	/* Receive all frames */
 | |
| #define XEM_ECR_RESERVED2_MASK		 0x00001000UL	/* Reserved */
 | |
| #define XEM_ECR_MULTI_HASH_ENABLE_MASK	 0x00000800UL	/* Enable multicast hash */
 | |
| #define XEM_ECR_PAUSE_FRAME_MASK	 0x00000400UL	/* Interpret pause frames */
 | |
| #define XEM_ECR_CLEAR_HASH_MASK		 0x00000200UL	/* Clear hash table */
 | |
| #define XEM_ECR_ADD_HASH_ADDR_MASK	 0x00000100UL	/* Add hash table address */
 | |
| 
 | |
| /*
 | |
|  * Interframe Gap Register (IFGR)
 | |
|  */
 | |
| #define XEM_IFGP_PART1_MASK	    0xF8000000UL	/* Interframe Gap Part1 */
 | |
| #define XEM_IFGP_PART1_SHIFT	    27
 | |
| #define XEM_IFGP_PART2_MASK	    0x07C00000UL	/* Interframe Gap Part2 */
 | |
| #define XEM_IFGP_PART2_SHIFT	    22
 | |
| 
 | |
| /*
 | |
|  * Station Address High Register (SAH)
 | |
|  */
 | |
| #define XEM_SAH_ADDR_MASK	    0x0000FFFFUL	/* Station address high bytes */
 | |
| 
 | |
| /*
 | |
|  * Station Address Low Register (SAL)
 | |
|  */
 | |
| #define XEM_SAL_ADDR_MASK	    0xFFFFFFFFUL	/* Station address low bytes */
 | |
| 
 | |
| /*
 | |
|  * MII Management Control Register (MGTCR)
 | |
|  */
 | |
| #define XEM_MGTCR_START_MASK	    0x80000000UL	/* Start/Busy */
 | |
| #define XEM_MGTCR_RW_NOT_MASK	    0x40000000UL	/* Read/Write Not (direction) */
 | |
| #define XEM_MGTCR_PHY_ADDR_MASK	    0x3E000000UL	/* PHY address */
 | |
| #define XEM_MGTCR_PHY_ADDR_SHIFT    25	/* PHY address shift */
 | |
| #define XEM_MGTCR_REG_ADDR_MASK	    0x01F00000UL	/* Register address */
 | |
| #define XEM_MGTCR_REG_ADDR_SHIFT    20	/* Register addr shift */
 | |
| #define XEM_MGTCR_MII_ENABLE_MASK   0x00080000UL	/* Enable MII from EMAC */
 | |
| #define XEM_MGTCR_RD_ERROR_MASK	    0x00040000UL	/* MII mgmt read error */
 | |
| 
 | |
| /*
 | |
|  * MII Management Data Register (MGTDR)
 | |
|  */
 | |
| #define XEM_MGTDR_DATA_MASK	    0x0000FFFFUL	/* MII data */
 | |
| 
 | |
| /*
 | |
|  * Receive Packet Length Register (RPLR)
 | |
|  */
 | |
| #define XEM_RPLR_LENGTH_MASK	    0x0000FFFFUL	/* Receive packet length */
 | |
| 
 | |
| /*
 | |
|  * Transmit Packet Length Register (TPLR)
 | |
|  */
 | |
| #define XEM_TPLR_LENGTH_MASK	    0x0000FFFFUL	/* Transmit packet length */
 | |
| 
 | |
| /*
 | |
|  * Transmit Status Register (TSR)
 | |
|  */
 | |
| #define XEM_TSR_EXCESS_DEFERRAL_MASK 0x80000000UL	/* Transmit excess deferral */
 | |
| #define XEM_TSR_FIFO_UNDERRUN_MASK   0x40000000UL	/* Packet FIFO underrun */
 | |
| #define XEM_TSR_ATTEMPTS_MASK	     0x3E000000UL	/* Transmission attempts */
 | |
| #define XEM_TSR_LATE_COLLISION_MASK  0x01000000UL	/* Transmit late collision */
 | |
| 
 | |
| /*
 | |
|  * Receive Missed Frame Count (RMFC)
 | |
|  */
 | |
| #define XEM_RMFC_DATA_MASK	    0x0000FFFFUL
 | |
| 
 | |
| /*
 | |
|  * Receive Collision Count (RCC)
 | |
|  */
 | |
| #define XEM_RCC_DATA_MASK	    0x0000FFFFUL
 | |
| 
 | |
| /*
 | |
|  * Receive FCS Error Count (RFCSEC)
 | |
|  */
 | |
| #define XEM_RFCSEC_DATA_MASK	    0x0000FFFFUL
 | |
| 
 | |
| /*
 | |
|  * Receive Alignment Error Count (RALN)
 | |
|  */
 | |
| #define XEM_RAEC_DATA_MASK	    0x0000FFFFUL
 | |
| 
 | |
| /*
 | |
|  * Transmit Excess Deferral Count (TEDC)
 | |
|  */
 | |
| #define XEM_TEDC_DATA_MASK	    0x0000FFFFUL
 | |
| 
 | |
| /*
 | |
|  * EMAC Interrupt Registers (Status and Enable) masks. These registers are
 | |
|  * part of the IPIF IP Interrupt registers
 | |
|  */
 | |
| #define XEM_EIR_XMIT_DONE_MASK	       0x00000001UL	/* Xmit complete */
 | |
| #define XEM_EIR_RECV_DONE_MASK	       0x00000002UL	/* Recv complete */
 | |
| #define XEM_EIR_XMIT_ERROR_MASK	       0x00000004UL	/* Xmit error */
 | |
| #define XEM_EIR_RECV_ERROR_MASK	       0x00000008UL	/* Recv error */
 | |
| #define XEM_EIR_XMIT_SFIFO_EMPTY_MASK  0x00000010UL	/* Xmit status fifo empty */
 | |
| #define XEM_EIR_RECV_LFIFO_EMPTY_MASK  0x00000020UL	/* Recv length fifo empty */
 | |
| #define XEM_EIR_XMIT_LFIFO_FULL_MASK   0x00000040UL	/* Xmit length fifo full */
 | |
| #define XEM_EIR_RECV_LFIFO_OVER_MASK   0x00000080UL	/* Recv length fifo
 | |
| 							 * overrun */
 | |
| #define XEM_EIR_RECV_LFIFO_UNDER_MASK  0x00000100UL	/* Recv length fifo
 | |
| 							 * underrun */
 | |
| #define XEM_EIR_XMIT_SFIFO_OVER_MASK   0x00000200UL	/* Xmit status fifo
 | |
| 							 * overrun */
 | |
| #define XEM_EIR_XMIT_SFIFO_UNDER_MASK  0x00000400UL	/* Transmit status fifo
 | |
| 							 * underrun */
 | |
| #define XEM_EIR_XMIT_LFIFO_OVER_MASK   0x00000800UL	/* Transmit length fifo
 | |
| 							 * overrun */
 | |
| #define XEM_EIR_XMIT_LFIFO_UNDER_MASK  0x00001000UL	/* Transmit length fifo
 | |
| 							 * underrun */
 | |
| #define XEM_EIR_XMIT_PAUSE_MASK	       0x00002000UL	/* Transmit pause pkt
 | |
| 							 * received */
 | |
| #define XEM_EIR_RECV_DFIFO_OVER_MASK   0x00004000UL	/* Receive data fifo
 | |
| 							 * overrun */
 | |
| #define XEM_EIR_RECV_MISSED_FRAME_MASK 0x00008000UL	/* Receive missed frame
 | |
| 							 * error */
 | |
| #define XEM_EIR_RECV_COLLISION_MASK    0x00010000UL	/* Receive collision
 | |
| 							 * error */
 | |
| #define XEM_EIR_RECV_FCS_ERROR_MASK    0x00020000UL	/* Receive FCS error */
 | |
| #define XEM_EIR_RECV_LEN_ERROR_MASK    0x00040000UL	/* Receive length field
 | |
| 							 * error */
 | |
| #define XEM_EIR_RECV_SHORT_ERROR_MASK  0x00080000UL	/* Receive short frame
 | |
| 							 * error */
 | |
| #define XEM_EIR_RECV_LONG_ERROR_MASK   0x00100000UL	/* Receive long frame
 | |
| 							 * error */
 | |
| #define XEM_EIR_RECV_ALIGN_ERROR_MASK  0x00200000UL	/* Receive alignment
 | |
| 							 * error */
 | |
| 
 | |
| /**************************** Type Definitions *******************************/
 | |
| 
 | |
| /***************** Macros (Inline Functions) Definitions *********************/
 | |
| 
 | |
| /*****************************************************************************
 | |
| *
 | |
| * Low-level driver macros and functions. The list below provides signatures
 | |
| * to help the user use the macros.
 | |
| *
 | |
| * u32 XEmac_mReadReg(u32 BaseAddress, int RegOffset)
 | |
| * void XEmac_mWriteReg(u32 BaseAddress, int RegOffset, u32 Mask)
 | |
| *
 | |
| * void XEmac_mSetControlReg(u32 BaseAddress, u32 Mask)
 | |
| * void XEmac_mSetMacAddress(u32 BaseAddress, u8 *AddressPtr)
 | |
| *
 | |
| * void XEmac_mEnable(u32 BaseAddress)
 | |
| * void XEmac_mDisable(u32 BaseAddress)
 | |
| *
 | |
| * u32 XEmac_mIsTxDone(u32 BaseAddress)
 | |
| * u32 XEmac_mIsRxEmpty(u32 BaseAddress)
 | |
| *
 | |
| * void XEmac_SendFrame(u32 BaseAddress, u8 *FramePtr, int Size)
 | |
| * int XEmac_RecvFrame(u32 BaseAddress, u8 *FramePtr)
 | |
| *
 | |
| *****************************************************************************/
 | |
| 
 | |
| /****************************************************************************/
 | |
| /**
 | |
| *
 | |
| * Read the given register.
 | |
| *
 | |
| * @param    BaseAddress is the base address of the device
 | |
| * @param    RegOffset is the register offset to be read
 | |
| *
 | |
| * @return   The 32-bit value of the register
 | |
| *
 | |
| * @note	    None.
 | |
| *
 | |
| *****************************************************************************/
 | |
| #define XEmac_mReadReg(BaseAddress, RegOffset) \
 | |
| 		    XIo_In32((BaseAddress) + (RegOffset))
 | |
| 
 | |
| /****************************************************************************/
 | |
| /**
 | |
| *
 | |
| * Write the given register.
 | |
| *
 | |
| * @param    BaseAddress is the base address of the device
 | |
| * @param    RegOffset is the register offset to be written
 | |
| * @param    Data is the 32-bit value to write to the register
 | |
| *
 | |
| * @return   None.
 | |
| *
 | |
| * @note	    None.
 | |
| *
 | |
| *****************************************************************************/
 | |
| #define XEmac_mWriteReg(BaseAddress, RegOffset, Data) \
 | |
| 		    XIo_Out32((BaseAddress) + (RegOffset), (Data))
 | |
| 
 | |
| /****************************************************************************/
 | |
| /**
 | |
| *
 | |
| * Set the contents of the control register. Use the XEM_ECR_* constants
 | |
| * defined above to create the bit-mask to be written to the register.
 | |
| *
 | |
| * @param    BaseAddress is the base address of the device
 | |
| * @param    Mask is the 16-bit value to write to the control register
 | |
| *
 | |
| * @return   None.
 | |
| *
 | |
| * @note	    None.
 | |
| *
 | |
| *****************************************************************************/
 | |
| #define XEmac_mSetControlReg(BaseAddress, Mask) \
 | |
| 		    XIo_Out32((BaseAddress) + XEM_ECR_OFFSET, (Mask))
 | |
| 
 | |
| /****************************************************************************/
 | |
| /**
 | |
| *
 | |
| * Set the station address of the EMAC device.
 | |
| *
 | |
| * @param    BaseAddress is the base address of the device
 | |
| * @param    AddressPtr is a pointer to a 6-byte MAC address
 | |
| *
 | |
| * @return   None.
 | |
| *
 | |
| * @note	    None.
 | |
| *
 | |
| *****************************************************************************/
 | |
| #define XEmac_mSetMacAddress(BaseAddress, AddressPtr)		    \
 | |
| {								    \
 | |
|     u32 MacAddr;						\
 | |
| 								    \
 | |
|     MacAddr = ((AddressPtr)[0] << 8) | (AddressPtr)[1];		    \
 | |
|     XIo_Out32((BaseAddress) + XEM_SAH_OFFSET, MacAddr);		    \
 | |
| 								    \
 | |
|     MacAddr = ((AddressPtr)[2] << 24) | ((AddressPtr)[3] << 16) |   \
 | |
| 	      ((AddressPtr)[4] << 8) | (AddressPtr)[5];		    \
 | |
| 								    \
 | |
|     XIo_Out32((BaseAddress) + XEM_SAL_OFFSET, MacAddr);		    \
 | |
| }
 | |
| 
 | |
| /****************************************************************************/
 | |
| /**
 | |
| *
 | |
| * Enable the transmitter and receiver. Preserve the contents of the control
 | |
| * register.
 | |
| *
 | |
| * @param    BaseAddress is the base address of the device
 | |
| *
 | |
| * @return   None.
 | |
| *
 | |
| * @note	    None.
 | |
| *
 | |
| *****************************************************************************/
 | |
| #define XEmac_mEnable(BaseAddress) \
 | |
| { \
 | |
|     u32 Control; \
 | |
|     Control = XIo_In32((BaseAddress) + XEM_ECR_OFFSET); \
 | |
|     Control &= ~(XEM_ECR_XMIT_RESET_MASK | XEM_ECR_RECV_RESET_MASK); \
 | |
|     Control |= (XEM_ECR_XMIT_ENABLE_MASK | XEM_ECR_RECV_ENABLE_MASK); \
 | |
|     XIo_Out32((BaseAddress) + XEM_ECR_OFFSET, Control); \
 | |
| }
 | |
| 
 | |
| /****************************************************************************/
 | |
| /**
 | |
| *
 | |
| * Disable the transmitter and receiver. Preserve the contents of the control
 | |
| * register.
 | |
| *
 | |
| * @param    BaseAddress is the base address of the device
 | |
| *
 | |
| * @return   None.
 | |
| *
 | |
| * @note	    None.
 | |
| *
 | |
| *****************************************************************************/
 | |
| #define XEmac_mDisable(BaseAddress) \
 | |
| 		XIo_Out32((BaseAddress) + XEM_ECR_OFFSET, \
 | |
| 		    XIo_In32((BaseAddress) + XEM_ECR_OFFSET) & \
 | |
| 		    ~(XEM_ECR_XMIT_ENABLE_MASK | XEM_ECR_RECV_ENABLE_MASK))
 | |
| 
 | |
| /****************************************************************************/
 | |
| /**
 | |
| *
 | |
| * Check to see if the transmission is complete.
 | |
| *
 | |
| * @param    BaseAddress is the base address of the device
 | |
| *
 | |
| * @return   TRUE if it is done, or FALSE if it is not.
 | |
| *
 | |
| * @note	    None.
 | |
| *
 | |
| *****************************************************************************/
 | |
| #define XEmac_mIsTxDone(BaseAddress) \
 | |
| 	     (XIo_In32((BaseAddress) + XEM_ISR_OFFSET) & XEM_EIR_XMIT_DONE_MASK)
 | |
| 
 | |
| /****************************************************************************/
 | |
| /**
 | |
| *
 | |
| * Check to see if the receive FIFO is empty.
 | |
| *
 | |
| * @param    BaseAddress is the base address of the device
 | |
| *
 | |
| * @return   TRUE if it is empty, or FALSE if it is not.
 | |
| *
 | |
| * @note	    None.
 | |
| *
 | |
| *****************************************************************************/
 | |
| #define XEmac_mIsRxEmpty(BaseAddress) \
 | |
| 	  (!(XIo_In32((BaseAddress) + XEM_ISR_OFFSET) & XEM_EIR_RECV_DONE_MASK))
 | |
| 
 | |
| /****************************************************************************/
 | |
| /**
 | |
| *
 | |
| * Reset MII compliant PHY
 | |
| *
 | |
| * @param    BaseAddress is the base address of the device
 | |
| *
 | |
| * @return   None.
 | |
| *
 | |
| * @note	    None.
 | |
| *
 | |
| *****************************************************************************/
 | |
| #define XEmac_mPhyReset(BaseAddress) \
 | |
| { \
 | |
|     u32 Control;				    \
 | |
|     Control = XIo_In32((BaseAddress) + XEM_ECR_OFFSET); \
 | |
|     Control &= ~XEM_ECR_PHY_ENABLE_MASK;		\
 | |
|     XIo_Out32((BaseAddress) + XEM_ECR_OFFSET, Control); \
 | |
|     Control |= XEM_ECR_PHY_ENABLE_MASK;			\
 | |
|     XIo_Out32((BaseAddress) + XEM_ECR_OFFSET, Control); \
 | |
| }
 | |
| 
 | |
| /************************** Function Prototypes ******************************/
 | |
| 
 | |
| void XEmac_SendFrame(u32 BaseAddress, u8 * FramePtr, int Size);
 | |
| int XEmac_RecvFrame(u32 BaseAddress, u8 * FramePtr);
 | |
| 
 | |
| #endif				/* end of protection macro */
 |