]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
Remove zynq gem driver
authorMichal Simek <monstr@monstr.eu>
Mon, 24 Sep 2012 10:16:57 +0000 (12:16 +0200)
committerMichal Simek <monstr@monstr.eu>
Mon, 24 Sep 2012 15:12:51 +0000 (17:12 +0200)
13 files changed:
board/xilinx/zynq_common/board.c
drivers/net/Makefile
drivers/net/zynq_gem.c [deleted file]
drivers/net/zynq_gem.h [deleted file]
drivers/net/zynq_gem_bd.h [deleted file]
drivers/net/zynq_gem_bdring.c [deleted file]
drivers/net/zynq_gem_bdring.h [deleted file]
drivers/net/zynq_gem_control.c [deleted file]
drivers/net/zynq_gem_g.c [deleted file]
drivers/net/zynq_gem_hw.h [deleted file]
drivers/net/zynq_gem_sinit.c [deleted file]
drivers/net/zynq_gem_wrap.c [deleted file]
include/netdev.h

index 7da38c8bf473193bb5ded2194495aecdab0601b4..17543e956d584f5f868cbc1ab3b359562d7e8ec2 100644 (file)
@@ -110,7 +110,7 @@ int board_late_init (void)
 #ifdef CONFIG_CMD_NET
 int board_eth_init(bd_t *bis)
 {
-       return zynq_gem_initialize(bis);
+       return 0;
 }
 #endif
 
index 235d1d33fa44f10319c5602902ef6c3f21900ce4..011cd5191c8613b8bb7049ca49e8da3e9bf8c696 100644 (file)
@@ -80,8 +80,6 @@ COBJS-$(CONFIG_XILINX_AXIEMAC) += xilinx_axi_emac.o
 COBJS-$(CONFIG_XILINX_EMACLITE) += xilinx_emaclite.o
 COBJS-$(CONFIG_XILINX_LL_TEMAC) += xilinx_ll_temac.o xilinx_ll_temac_mdio.o \
                xilinx_ll_temac_fifo.o xilinx_ll_temac_sdma.o
-COBJS-$(CONFIG_ZYNQ_GEM) += zynq_gem.o zynq_gem_bdring.o zynq_gem_control.o \
-                       zynq_gem_g.o zynq_gem_sinit.o zynq_gem_wrap.o
 
 COBJS  := $(sort $(COBJS-y))
 SRCS   := $(COBJS:.o=.c)
diff --git a/drivers/net/zynq_gem.c b/drivers/net/zynq_gem.c
deleted file mode 100644 (file)
index 50ceb91..0000000
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
- * (C) Copyright 2012 Xilinx
- *
- * The XEmacPss driver. Functions in this file are the minimum required
- * functions for this driver.
- * See zynq_gem.h for a detailed description of the driver.
- *
- * 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.
- *
- * 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., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-/***************************** Include Files *********************************/
-
-#include "zynq_gem.h"
-
-/************************** Constant Definitions *****************************/
-
-
-/**************************** Type Definitions *******************************/
-
-
-/***************** Macros (Inline Functions) Definitions *********************/
-
-
-/************************** Function Prototypes ******************************/
-
-void XEmacPss_StubHandler(void);       /* Default handler routine */
-
-/************************** Variable Definitions *****************************/
-
-
-/*****************************************************************************/
-/**
-* Initialize a specific XEmacPss instance/driver. The initialization entails:
-* - Initialize fields of the XEmacPss instance structure
-* - Reset hardware and apply default options
-* - Configure the DMA channels
-*
-* The PHY is setup independently from the device. Use the MII or whatever other
-* interface may be present for setup.
-*
-* @param InstancePtr is a pointer to the instance to be worked on.
-* @param CfgPtr is the device configuration structure containing required
-*        hardware build data.
-* @param EffectiveAddress is the base address of the device. If address
-*        translation is not utilized, this parameter can be passed in using
-*        CfgPtr->Config.BaseAddress to specify the physical base address.
-*        
-* @return
-* - XST_SUCCESS if initialization was successful
-*
-******************************************************************************/
-int XEmacPss_CfgInitialize(XEmacPss *InstancePtr, XEmacPss_Config * CfgPtr,
-                          u32 EffectiveAddress)
-{
-       /* Verify arguments */
-       XASSERT_NONVOID(InstancePtr != NULL);
-       XASSERT_NONVOID(CfgPtr != NULL);
-
-       /* Set device base address and ID */
-       InstancePtr->Config.DeviceId = CfgPtr->DeviceId;
-       InstancePtr->Config.BaseAddress = EffectiveAddress;
-
-       /* Set callbacks to an initial stub routine */
-       InstancePtr->SendHandler = (XEmacPss_Handler) XEmacPss_StubHandler;
-       InstancePtr->RecvHandler = (XEmacPss_Handler) XEmacPss_StubHandler;
-       InstancePtr->ErrorHandler = (XEmacPss_ErrHandler) XEmacPss_StubHandler;
-
-       /* Reset the hardware and set default options */
-       InstancePtr->IsReady = XCOMPONENT_IS_READY;
-       XEmacPss_Reset(InstancePtr);
-
-       return (XST_SUCCESS);
-}
-
-
-/*****************************************************************************/
-/**
-* Start the Ethernet controller as follows:
-*   - Enable transmitter if XTE_TRANSMIT_ENABLE_OPTION is set
-*   - Enable receiver if XTE_RECEIVER_ENABLE_OPTION is set
-*   - Start the SG DMA send and receive channels and enable the device
-*     interrupt
-*
-* @param InstancePtr is a pointer to the instance to be worked on.
-*
-* @return N/A
-*
-* @note
-* Hardware is configured with scatter-gather DMA, the driver expects to start
-* the scatter-gather channels and expects that the user has previously set up 
-* the buffer descriptor lists.
-*
-* This function makes use of internal resources that are shared between the
-* Start, Stop, and Set/ClearOptions functions. So if one task might be setting 
-* device options while another is trying to start the device, the user is 
-* required to provide protection of this shared data (typically using a
-* semaphore).
-*
-* This function must not be preempted by an interrupt that may service the
-* device.
-*
-******************************************************************************/
-void XEmacPss_Start(XEmacPss *InstancePtr)
-{
-       u32 Reg;
-
-       /* Assert bad arguments and conditions */
-       XASSERT_VOID(InstancePtr != NULL);
-       XASSERT_VOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-       XASSERT_VOID(InstancePtr->RxBdRing.BaseBdAddr != 0);
-       XASSERT_VOID(InstancePtr->TxBdRing.BaseBdAddr != 0);
-
-        /* If already started, then there is nothing to do */
-        if (InstancePtr->IsStarted == XCOMPONENT_IS_STARTED) {
-                return;
-        }
-
-       /* Start DMA */
-       /* When starting the DMA channels, both transmit and receive sides
-        * need an initialized BD list.
-        */
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          XEMACPSS_RXQBASE_OFFSET,
-                          InstancePtr->RxBdRing.BaseBdAddr);
-
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          XEMACPSS_TXQBASE_OFFSET,
-                          InstancePtr->TxBdRing.BaseBdAddr);
-
-       /* clear any existed int status */
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress, XEMACPSS_ISR_OFFSET,
-                          XEMACPSS_IXR_ALL_MASK);
-
-       /* Enable transmitter if not already enabled */
-       if (InstancePtr->Options & XEMACPSS_TRANSMITTER_ENABLE_OPTION) {
-               Reg = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                       XEMACPSS_NWCTRL_OFFSET);
-               if (!(Reg & XEMACPSS_NWCTRL_TXEN_MASK)) {
-                       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                                          XEMACPSS_NWCTRL_OFFSET,
-                                          Reg | XEMACPSS_NWCTRL_TXEN_MASK);
-               }
-       }
-
-       /* Enable receiver if not already enabled */
-       if (InstancePtr->Options & XEMACPSS_RECEIVER_ENABLE_OPTION) {
-               Reg = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                       XEMACPSS_NWCTRL_OFFSET);
-               if (!(Reg & XEMACPSS_NWCTRL_RXEN_MASK)) {
-                       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                                          XEMACPSS_NWCTRL_OFFSET,
-                                          Reg | XEMACPSS_NWCTRL_RXEN_MASK);
-               }
-       }
-
-#if 0
-        /* Enable TX and RX interrupts */
-        XEmacPss_IntEnable(InstancePtr, (XEMACPSS_IXR_TX_ERR_MASK |
-               XEMACPSS_IXR_RX_ERR_MASK | XEMACPSS_IXR_FRAMERX_MASK |
-               XEMACPSS_IXR_TXCOMPL_MASK));
-#endif
-       /* Mark as started */
-       InstancePtr->IsStarted = XCOMPONENT_IS_STARTED;
-
-       return;
-}
-
-
-/*****************************************************************************/
-/**
-* Gracefully stop the Ethernet MAC as follows:
-*   - Disable all interrupts from this device
-*   - Stop DMA channels
-*   - Disable the tansmitter and receiver
-*
-* Device options currently in effect are not changed.
-*
-* This function will disable all interrupts. Default interrupts settings that
-* had been enabled will be restored when XEmacPss_Start() is called.
-*
-* @param InstancePtr is a pointer to the instance to be worked on.
-*
-* @note
-* This function makes use of internal resources that are shared between the
-* Start, Stop, SetOptions, and ClearOptions functions. So if one task might be 
-* setting device options while another is trying to start the device, the user
-* is required to provide protection of this shared data (typically using a
-* semaphore).
-* 
-* Stopping the DMA channels causes this function to block until the DMA
-* operation is complete.
-*
-******************************************************************************/
-void XEmacPss_Stop(XEmacPss *InstancePtr)
-{
-       u32 Reg;
-
-       XASSERT_VOID(InstancePtr != NULL);
-       XASSERT_VOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
-       /* Disable all interrupts */
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress, XEMACPSS_IDR_OFFSET,
-                          XEMACPSS_IXR_ALL_MASK);
-
-       /* Disable the receiver & transmitter */
-       Reg = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                               XEMACPSS_NWCTRL_OFFSET);
-       Reg &= ~XEMACPSS_NWCTRL_RXEN_MASK;
-       Reg &= ~XEMACPSS_NWCTRL_TXEN_MASK;
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          XEMACPSS_NWCTRL_OFFSET, Reg);
-
-       /* Mark as stopped */
-       InstancePtr->IsStarted = 0;
-}
-
-
-/*****************************************************************************/
-/**
-* Perform a graceful reset of the Ethernet MAC. Resets the DMA channels, the
-* transmitter, and the receiver.
-*
-* Steps to reset
-* - Stops transmit and receive channels
-* - Stops DMA
-* - Configure transmit and receive buffer size to default
-* - Clear transmit and receive status register and counters
-* - Clear all interrupt sources
-* - Clear phy (if there is any previously detected) address
-* - Clear MAC addresses (1-4) as well as Type IDs and hash value
-*
-* All options are placed in their default state. Any frames in the 
-* descriptor lists will remain in the lists. The side effect of doing
-* this is that after a reset and following a restart of the device, frames
-* were in the list before the reset may be transmitted or received.
-*
-* The upper layer software is responsible for re-configuring (if necessary)
-* and restarting the MAC after the reset. Note also that driver statistics
-* are not cleared on reset. It is up to the upper layer software to clear the
-* statistics if needed.
-*
-* When a reset is required, the driver notifies the upper layer software of
-* this need through the ErrorHandler callback and specific status codes.
-* The upper layer software is responsible for calling this Reset function
-* and then re-configuring the device.
-*
-* @param InstancePtr is a pointer to the instance to be worked on.
-*
-******************************************************************************/
-void XEmacPss_Reset(XEmacPss *InstancePtr)
-{
-       u32 Reg;
-       u8 i;
-       char EmacPss_zero_MAC[6] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };
-
-       XASSERT_VOID(InstancePtr != NULL);
-       XASSERT_VOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
-       /* Stop the device and reset hardware */
-       XEmacPss_Stop(InstancePtr);
-       InstancePtr->Options = XEMACPSS_DEFAULT_OPTIONS;
-
-       /* Setup hardware with default values */
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          XEMACPSS_NWCTRL_OFFSET,
-                          (XEMACPSS_NWCTRL_STATCLR_MASK |
-                          XEMACPSS_NWCTRL_MDEN_MASK) &
-                          ~XEMACPSS_NWCTRL_LOOPEN_MASK);
-
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          XEMACPSS_NWCFG_OFFSET,
-                           XEMACPSS_NWCFG_100_MASK |
-                           XEMACPSS_NWCFG_FDEN_MASK |
-                           XEMACPSS_NWCFG_UCASTHASHEN_MASK);
-
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          XEMACPSS_DMACR_OFFSET,
-                          ((((XEMACPSS_RX_BUF_SIZE / XEMACPSS_RX_BUF_UNIT) +
-                            ((XEMACPSS_RX_BUF_SIZE %
-                              XEMACPSS_RX_BUF_UNIT) ? 1 : 0)) <<
-                            XEMACPSS_DMACR_RXBUF_SHIFT) &
-                           XEMACPSS_DMACR_RXBUF_MASK) |
-                          XEMACPSS_DMACR_RXSIZE_MASK |
-                          XEMACPSS_DMACR_TXSIZE_MASK);
-
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          XEMACPSS_TXSR_OFFSET, 0x0);
-
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          XEMACPSS_RXQBASE_OFFSET, 0x0);
-
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          XEMACPSS_TXQBASE_OFFSET, 0x0);
-
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          XEMACPSS_RXSR_OFFSET, 0x0);
-
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress, XEMACPSS_IDR_OFFSET,
-                          XEMACPSS_IXR_ALL_MASK);
-
-       Reg = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                               XEMACPSS_ISR_OFFSET);
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress, XEMACPSS_ISR_OFFSET,
-                          Reg);
-
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          XEMACPSS_PHYMNTNC_OFFSET, 0x0);
-
-       XEmacPss_ClearHash(InstancePtr);
-
-       for (i = 1; i < 5; i++) {
-               XEmacPss_SetMacAddress(InstancePtr, EmacPss_zero_MAC, i);
-               XEmacPss_SetTypeIdCheck(InstancePtr, 0x0, i);
-       }
-
-       /* clear all counters */
-       for (i = 0; i < (XEMACPSS_LAST_OFFSET - XEMACPSS_OCTTXL_OFFSET) / 4;
-            i++) {
-               XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                   XEMACPSS_OCTTXL_OFFSET + i * 4);
-       }
-
-       /* Disable the receiver */
-       Reg = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                               XEMACPSS_NWCTRL_OFFSET);
-       Reg &= ~XEMACPSS_NWCTRL_RXEN_MASK;
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          XEMACPSS_NWCTRL_OFFSET, Reg);
-
-       /* Sync default options with hardware but leave receiver and
-         * transmitter disabled. They get enabled with XEmacPss_Start() if
-        * XEMACPSS_TRANSMITTER_ENABLE_OPTION and
-         * XEMACPSS_RECEIVER_ENABLE_OPTION are set.
-        */
-       XEmacPss_SetOptions(InstancePtr, InstancePtr->Options &
-                           ~(XEMACPSS_TRANSMITTER_ENABLE_OPTION |
-                             XEMACPSS_RECEIVER_ENABLE_OPTION));
-
-       XEmacPss_ClearOptions(InstancePtr, ~InstancePtr->Options);
-}
-
-
-/******************************************************************************/
-/**
- * This is a stub for the asynchronous callbacks. The stub is here in case the
- * upper layer forgot to set the handler(s). On initialization, all handlers are
- * set to this callback. It is considered an error for this handler to be
- * invoked.
- *
- ******************************************************************************/
-void XEmacPss_StubHandler(void)
-{
-       XASSERT_VOID_ALWAYS();
-}
diff --git a/drivers/net/zynq_gem.h b/drivers/net/zynq_gem.h
deleted file mode 100644 (file)
index 101db96..0000000
+++ /dev/null
@@ -1,645 +0,0 @@
-/*
- * (C) Copyright 2012 Xilinx
- *
- * The Xilinx Embedded Processor Block Ethernet driver.
- *
- * 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.
- *
- * 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., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef XEMACPSS_H             /* prevent circular inclusions */
-#define XEMACPSS_H             /* by using protection macros */
-
-/**
- * For a full description of XEMACPSS features, please see the hardware spec.
- * This driver supports the following features:
- *   - Memory mapped access to host interface registers
- *   - Statistics counter registers for RMON/MIB
- *   - API for interrupt driven frame transfers for hardware configured DMA 
- *   - Virtual memory support
- *   - Unicast, broadcast, and multicast receive address filtering
- *   - Full and half duplex operation
- *   - Automatic PAD & FCS insertion and stripping
- *   - Flow control
- *   - Support up to four 48bit addresses
- *   - Address checking for four specific 48bit addresses
- *   - VLAN frame support
- *   - Pause frame support
- *   - Large frame support up to 1536 bytes
- *   - Checksum offload
- *
- * Driver Description:
- *
- * The device driver enables higher layer software (e.g., an application) to
- * communicate to the XEmacPss. The driver handles transmission and reception
- * of Ethernet frames, as well as configuration and control. No pre or post
- * processing of frame data is performed. The driver does not validate the
- * contents of an incoming frame in addition to what has already occurred in
- * hardware.
- * A single device driver can support multiple devices even when those devices
- * have significantly different configurations.
- *
- * Initialization & Configuration:
- *
- * The XEmacPss_Config structure is used by the driver to configure itself.
- * This configuration structure is typically created by the tool-chain based
- * on hardware build properties.
- *
- * The driver instance can be initialized in 
- *
- *   - XEmacPss_CfgInitialize(InstancePtr, CfgPtr, EffectiveAddress):  Uses a 
- *     configuration structure provided by the caller. If running in a system
- *     with address translation, the provided virtual memory base address 
- *     replaces the physical address present in the configuration structure.
- *
- * The device supports DMA only as current development plan. No FIFO mode is
- * supported. The driver expects to start the DMA channels and expects that
- * the user has set up the buffer descriptor lists.
- *
- * Interrupts and Asynchronous Callbacks:
- *
- * The driver has no dependencies on the interrupt controller. When an
- * interrupt occurs, the handler will perform a small amount of
- * housekeeping work, determine the source of the interrupt, and call the
- * appropriate callback function. All callbacks are registered by the user
- * level application.
- *
- * Virtual Memory:
- *
- * All virtual to physical memory mappings must occur prior to accessing the
- * driver API.
- *
- * For DMA transactions, user buffers supplied to the driver must be in terms
- * of their physical address.
- *
- * DMA:
- *
- * The DMA engine uses buffer descriptors (BDs) to describe Ethernet frames.
- * These BDs are typically chained together into a list the hardware follows
- * when transferring data in and out of the packet buffers. Each BD describes
- * a memory region containing either a full or partial Ethernet packet.
- *
- * Interrupt coalescing is not suppoted from this built-in DMA engine.
- *
- * This API requires the user to understand how the DMA operates. The
- * following paragraphs provide some explanation, but the user is encouraged
- * to read documentation in zynq_gem_bdring.h as well as study example code
- * that accompanies this driver.
- *
- * The API is designed to get BDs to and from the DMA engine in the most
- * efficient means possible. The first step is to establish a  memory region
- * to contain all BDs for a specific channel. This is done with
- * XEmacPss_BdRingCreate(). This function sets up a BD ring that hardware will
- * follow as BDs are processed. The ring will consist of a user defined number
- * of BDs which will all be partially initialized. For example on the transmit
- * channel, the driver will initialize all BDs' so that they are configured
- * for transmit. The more fields that can be permanently setup at
- * initialization, then the fewer accesses will be needed to each BD while
- * the DMA engine is in operation resulting in better throughput and CPU
- * utilization. The best case initialization would require the user to set
- * only a frame buffer address and length prior to submitting the BD to the
- * engine.
- *
- * BDs move through the engine with the help of functions
- * XEmacPss_BdRingAlloc(), XEmacPss_BdRingToHw(), XEmacPss_BdRingFromHw(),
- * and XEmacPss_BdRingFree().
- * All these functions handle BDs that are in place. That is, there are no
- * copies of BDs kept anywhere and any BD the user interacts with is an actual
- * BD from the same ring hardware accesses.
- *
- * BDs in the ring go through a series of states as follows:
- *   1. Idle. The driver controls BDs in this state.
- *   2. The user has data to transfer. XEmacPss_BdRingAlloc() is called to
- *      reserve BD(s). Once allocated, the user may setup the BD(s) with
- *      frame buffer address, length, and other attributes. The user controls
- *      BDs in this state.
- *   3. The user submits BDs to the DMA engine with XEmacPss_BdRingToHw. BDs
- *      in this state are either waiting to be processed by hardware, are in
- *      process, or have been processed. The DMA engine controls BDs in this
- *      state.
- *   4. Processed BDs are retrieved with XEmacEpv_BdRingFromHw() by the
- *      user. Once retrieved, the user can examine each BD for the outcome of
- *      the DMA transfer. The user controls BDs in this state. After examining
- *      the BDs the user calls XEmacPss_BdRingFree() which places the BDs back
- *      into state 1.
- *
- * Each of the four BD accessor functions operate on a set of BDs. A set is
- * defined as a segment of the BD ring consisting of one or more BDs. The user
- * views the set as a pointer to the first BD along with the number of BDs for
- * that set. The set can be navigated by using macros XEmacPss_BdNext(). The
- * user must exercise extreme caution when changing BDs in a set as there is
- * nothing to prevent doing a mBdNext past the end of the set and modifying a
- * BD out of bounds.
- *
- * XEmacPss_BdRingAlloc() + XEmacPss_BdRingToHw(), as well as
- * XEmacPss_BdRingFromHw() + XEmacPss_BdRingFree() are designed to be used in
- * tandem. The same BD set retrieved with BdRingAlloc should be the same one
- * provided to hardware with BdRingToHw. Same goes with BdRingFromHw and
- * BdRIngFree.
- *
- * Alignment & Data Cache Restrictions:
- *
- * Due to the design of the hardware, all RX buffers, BDs need to be 4-byte
- * aligned. Please reference zynq_gem_bd.h for cache related macros.
- *
- * DMA Tx:
- *
- *   - If frame buffers exist in cached memory, then they must be flushed
- *     prior to committing them to hardware.
- *
- * DMA Rx:
- *
- *   - If frame buffers exist in cached memory, then the cache must be
- *     invalidated for the memory region containing the frame prior to data
- *     access
- *
- * Both cache invalidate/flush are taken care of in driver code.
- *
- * Buffer Copying:
- *
- * The driver is designed for a zero-copy buffer scheme. That is, the driver
- * will not copy buffers. This avoids potential throughput bottlenecks within
- * the driver. If byte copying is required, then the transfer will take longer
- * to complete.
- *
- * Checksum Offloading:
- *
- * The Embedded Processor Block Ethernet can be configured to perform IP, TCP
- * and UDP checksum offloading in both receive and transmit directions.
- *
- * IP packets contain a 16-bit checksum field, which is the 16-bit 1s
- * complement of the 1s complement sum of all 16-bit words in the header.
- * TCP and UDP packets contain a 16-bit checksum field, which is the 16-bit
- * 1s complement of the 1s complement sum of all 16-bit words in the header,
- * the data and a conceptual pseudo header.
- *
- * To calculate these checksums in software requires each byte of the packet
- * to be read. For TCP and UDP this can use a large amount of processing power.
- * Offloading the checksum calculation to hardware can result in significant
- * performance improvements.
- *
- * The transmit checksum offload is only available to use DMA in packet buffer
- * mode. This is because the complete frame to be transmitted must be read
- * into the packet buffer memory before the checksum can be calculated and
- * written to the header at the beginning of the frame.
- *
- * For IP, TCP or UDP receive checksum offload to be useful, the operating
- * system containing the protocol stack must be aware that this offload is
- * available so that it can make use of the fact that the hardware has verified
- * the checksum. 
- * 
- * When receive checksum offloading is enabled in the hardware, the IP header
- * checksum is checked, where the packet meets the following criteria: 
- *
- * 1. If present, the VLAN header must be four octets long and the CFI bit
- *    must not be set.
- * 2. Encapsulation must be RFC 894 Ethernet Type Encoding or RFC 1042 SNAP
- *    encoding.
- * 3. IP v4 packet.
- * 4. IP header is of a valid length.
- * 5. Good IP header checksum.
- * 6. No IP fragmentation.
- * 7. TCP or UDP packet.
- *
- * When an IP, TCP or UDP frame is received, the receive buffer descriptor
- * gives an indication if the hardware was able to verify the checksums.
- * There is also an indication if the frame had SNAP encapsulation. These
- * indication bits will replace the type ID match indication bits when the
- * receive checksum offload is enabled.
- *
- * If any of the checksums are verified incorrect by the hardware, the packet
- * is discarded and the appropriate statistics counter incremented.
- *
- * PHY Interfaces:
- *
- * RGMII 1.3 is the only interface supported.
- *
- * Asserts:
- *
- * Asserts are used within all Xilinx drivers to enforce constraints on
- * parameters. Asserts can be turned off on a system-wide basis by defining,
- * at compile time, the NDEBUG identifier. By default, asserts are turned on
- * and it is recommended that users leave asserts on during development. For
- * deployment use -DNDEBUG compiler switch to remove assert code.
- *
- * @note
- *
- * Xilinx drivers are typically composed of two parts, one is the driver
- * and the other is the adapter.  The driver is independent of OS and processor
- * and is intended to be highly portable.  The adapter is OS-specific and
- * facilitates communication between the driver and an OS.
- * This driver is intended to be RTOS and processor independent. Any needs for
- * dynamic memory management, threads or thread mutual exclusion, or cache
- * control must be satisfied bythe layer above this driver.
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/***************************** Include Files ********************************/
-
-#include "xbasic_types.h"
-#include "xstatus.h"
-#include "zynq_gem_hw.h"
-#include "zynq_gem_bd.h"
-#include "zynq_gem_bdring.h"
-
-/************************** Constant Definitions ****************************/
-
-/*
- * Device information
- */
-#define XEMACPSS_DEVICE_NAME     "xemacps"
-#define XEMACPSS_DEVICE_DESC     "Xilinx PSS 10/100/1000 MAC"
-
-/** @name Configuration options
- *
- * Device configuration options. See the XEmacPss_SetOptions(),
- * XEmacPss_ClearOptions() and XEmacPss_GetOptions() for information on how to
- * use options.
- *
- * The default state of the options are noted and are what the device and
- * driver will be set to after calling XEmacPss_Reset() or
- * XEmacPss_Initialize().
- *
- * @{
- */
-
-#define XEMACPSS_PROMISC_OPTION               0x00000001
-/**< Accept all incoming packets.
- *   This option defaults to disabled (cleared) */
-
-#define XEMACPSS_FRAME1536_OPTION             0x00000002
-/**< Frame larger than 1516 support for Tx & Rx.
- *   This option defaults to disabled (cleared) */
-
-#define XEMACPSS_VLAN_OPTION                  0x00000004
-/**< VLAN Rx & Tx frame support.
- *   This option defaults to disabled (cleared) */
-
-#define XEMACPSS_FLOW_CONTROL_OPTION          0x00000010
-/**< Enable recognition of flow control frames on Rx
- *   This option defaults to enabled (set) */
-
-#define XEMACPSS_FCS_STRIP_OPTION             0x00000020
-/**< Strip FCS and PAD from incoming frames. Note: PAD from VLAN frames is not
- *   stripped.
- *   This option defaults to enabled (set) */
-
-#define XEMACPSS_FCS_INSERT_OPTION            0x00000040
-/**< Generate FCS field and add PAD automatically for outgoing frames.
- *   This option defaults to disabled (cleared) */
-
-#define XEMACPSS_LENTYPE_ERR_OPTION           0x00000080
-/**< Enable Length/Type error checking for incoming frames. When this option is
- *   set, the MAC will filter frames that have a mismatched type/length field
- *   and if XEMACPSS_REPORT_RXERR_OPTION is set, the user is notified when these
- *   types of frames are encountered. When this option is cleared, the MAC will
- *   allow these types of frames to be received.
- *
- *   This option defaults to disabled (cleared) */
-
-#define XEMACPSS_TRANSMITTER_ENABLE_OPTION    0x00000100
-/**< Enable the transmitter.
- *   This option defaults to enabled (set) */
-
-#define XEMACPSS_RECEIVER_ENABLE_OPTION       0x00000200
-/**< Enable the receiver
- *   This option defaults to enabled (set) */
-
-#define XEMACPSS_BROADCAST_OPTION             0x00000400
-/**< Allow reception of the broadcast address
- *   This option defaults to enabled (set) */
-
-#define XEMACPSS_MULTICAST_OPTION             0x00000800
-/**< Allows reception of multicast addresses programmed into hash
- *   This option defaults to disabled (clear) */
-
-#define XEMACPSS_RX_CHKSUM_ENABLE_OPTION      0x00001000
-/**< Enable the RX checksum offload
- *   This option defaults to enabled (set) */
-
-#define XEMACPSS_TX_CHKSUM_ENABLE_OPTION      0x00002000
-/**< Enable the TX checksum offload
- *   This option defaults to enabled (set) */
-
-
-#define XEMACPSS_DEFAULT_OPTIONS                     \
-    (XEMACPSS_FLOW_CONTROL_OPTION |                  \
-     XEMACPSS_FCS_INSERT_OPTION |                    \
-     XEMACPSS_FCS_STRIP_OPTION |                     \
-     XEMACPSS_BROADCAST_OPTION |                     \
-     XEMACPSS_LENTYPE_ERR_OPTION |                   \
-     XEMACPSS_TRANSMITTER_ENABLE_OPTION |            \
-     XEMACPSS_RECEIVER_ENABLE_OPTION |               \
-     XEMACPSS_RX_CHKSUM_ENABLE_OPTION |              \
-     XEMACPSS_TX_CHKSUM_ENABLE_OPTION)
-
-/**< Default options set when device is initialized or reset */
-/*@}*/
-
-/** @name Callback identifiers
- *
- * These constants are used as parameters to XEmacPss_SetHandler()
- * @{
- */
-#define XEMACPSS_HANDLER_DMASEND 1
-#define XEMACPSS_HANDLER_DMARECV 2
-#define XEMACPSS_HANDLER_ERROR   3
-/*@}*/
-
-/* Constants to determine the configuration of the hardware device. They are
- * used to allow the driver to verify it can operate with the hardware.
- */
-#define XEMACPSS_MDIO_DIV_DFT    MDC_DIV_32 /**< Default MDIO clock divisor */
-
-/* The next few constants help upper layers determine the size of memory
- * pools used for Ethernet buffers and descriptor lists.
- */
-#define XEMACPSS_MAC_ADDR_SIZE   6     /* size of Ethernet header */
-
-#define XEMACPSS_MTU             1500  /* max MTU size of Ethernet frame */
-#define XEMACPSS_HDR_SIZE        14    /* size of Ethernet header */
-#define XEMACPSS_HDR_VLAN_SIZE   18    /* size of Ethernet header with VLAN */
-#define XEMACPSS_TRL_SIZE        4     /* size of Ethernet trailer (FCS) */
-#define XEMACPSS_MAX_FRAME_SIZE       (XEMACPSS_MTU + XEMACPSS_HDR_SIZE + \
-        XEMACPSS_TRL_SIZE)
-#define XEMACPSS_MAX_VLAN_FRAME_SIZE  (XEMACPSS_MTU + XEMACPSS_HDR_SIZE + \
-        XEMACPSS_HDR_VLAN_SIZE + XEMACPSS_TRL_SIZE)
-
-
-/**************************** Type Definitions ******************************/
-/** @name Typedefs for callback functions
- *
- * These callbacks are invoked in interrupt context.
- * @{
- */
-/**
- * Callback invoked when frame(s) have been sent or received in interrupt
- * driven DMA mode. To set the send callback, invoke XEmacPss_SetHandler().
- *
- * @param CallBackRef is user data assigned when the callback was set.
- *
- * @note
- * See zynq_gem_hw.h for bitmasks definitions and the device hardware spec for
- * further information on their meaning.
- *
- */
-typedef void (*XEmacPss_Handler) (void *CallBackRef);
-
-/**
- * Callback when an asynchronous error occurs. To set this callback, invoke
- * XEmacPss_SetHandler() with XEMACPSS_HANDLER_ERROR in the HandlerType
- * paramter.
- *
- * @param CallBackRef is user data assigned when the callback was set.
- * @param Direction defines either receive or transmit error(s) has occurred.
- * @param ErrorWord definition varies with Direction
- *
- */
-typedef void (*XEmacPss_ErrHandler) (void *CallBackRef, u8 Direction,
-                                    u32 ErrorWord);
-
-/*@}*/
-
-/**
- * This typedef contains configuration information for a device.
- */
-typedef struct {
-       u16 DeviceId;   /**< Unique ID  of device */
-       u32 BaseAddress;/**< Physical base address of IPIF registers */
-} XEmacPss_Config;
-
-
-/**
- * The XEmacPss driver instance data. The user is required to allocate a
- * structure of this type for every XEmacPss device in the system. A pointer
- * to a structure of this type is then passed to the driver API functions.
- */
-typedef struct XEmacPss {
-       XEmacPss_Config Config; /* Hardware configuration */
-       u32 IsStarted;          /* Device is currently started */
-       u32 IsReady;            /* Device is initialized and ready */
-       u32 Options;            /* Current options word */
-
-       XEmacPss_BdRing TxBdRing;       /* Transmit BD ring */
-       XEmacPss_BdRing RxBdRing;       /* Receive BD ring */
-
-       XEmacPss_Handler SendHandler;
-       XEmacPss_Handler RecvHandler;
-       void *SendRef;
-       void *RecvRef;
-
-       XEmacPss_ErrHandler ErrorHandler;
-       void *ErrorRef;
-
-} XEmacPss;
-
-
-/***************** Macros (Inline Functions) Definitions ********************/
-
-/****************************************************************************/
-/**
-* Retrieve the Tx ring object. This object can be used in the various Ring
-* API functions.
-*
-* @param  InstancePtr is the DMA channel to operate on.
-*
-* @return TxBdRing attribute
-*
-* @note
-* C-style signature:
-*    XEmacPss_BdRing XEmacPss_GetTxRing(XEmacPss *InstancePtr)
-*
-*****************************************************************************/
-#define XEmacPss_GetTxRing(InstancePtr) ((InstancePtr)->TxBdRing)
-
-/****************************************************************************/
-/**
-* Retrieve the Rx ring object. This object can be used in the various Ring
-* API functions.
-*
-* @param  InstancePtr is the DMA channel to operate on.
-*
-* @return RxBdRing attribute
-*
-* @note
-* C-style signature:
-*    XEmacPss_BdRing XEmacPss_GetRxRing(XEmacPss *InstancePtr)
-*
-*****************************************************************************/
-#define XEmacPss_GetRxRing(InstancePtr) ((InstancePtr)->RxBdRing)
-
-/****************************************************************************/
-/**
-*
-* Enable interrupts specified in <i>Mask</i>. The corresponding interrupt for
-* each bit set to 1 in <i>Mask</i>, will be enabled.
-*
-* @param InstancePtr is a pointer to the instance to be worked on.
-* @param Mask contains a bit mask of interrupts to enable. The mask can
-*        be formed using a set of bitwise or'd values.
-*
-* @note
-* The state of the transmitter and receiver are not modified by this function.
-* C-style signature
-*     void XEmacPss_IntEnable(XEmacPss *InstancePtr, u32 Mask)
-*
-*****************************************************************************/
-#define XEmacPss_IntEnable(InstancePtr, Mask)                            \
-       XEmacPss_WriteReg((InstancePtr)->Config.BaseAddress,             \
-               XEMACPSS_IER_OFFSET,                                     \
-               XEmacPss_ReadReg((InstancePtr)->Config.BaseAddress,      \
-                       XEMACPSS_IER_OFFSET) | ((Mask) & XEMACPSS_IXR_ALL_MASK));
-
-/****************************************************************************/
-/**
-*
-* Disable interrupts specified in <i>Mask</i>. The corresponding interrupt for
-* each bit set to 1 in <i>Mask</i>, will be enabled.
-*
-* @param InstancePtr is a pointer to the instance to be worked on.
-* @param Mask contains a bit mask of interrupts to disable. The mask can
-*        be formed using a set of bitwise or'd values.
-*
-* @note
-* The state of the transmitter and receiver are not modified by this function.
-* C-style signature
-*     void XEmacPss_IntDisable(XEmacPss *InstancePtr, u32 Mask)
-*
-*****************************************************************************/
-#define XEmacPss_IntDisable(InstancePtr, Mask)                           \
-       XEmacPss_WriteReg((InstancePtr)->Config.BaseAddress,             \
-               XEMACPSS_IER_OFFSET,                                     \
-               XEmacPss_ReadReg((InstancePtr)->Config.BaseAddress,      \
-                       XEMACPSS_IER_OFFSET) & ~((Mask) & XEMACPSS_IXR_ALL_MASK));
-
-/****************************************************************************/
-/**
-*
-* This macro triggers trasmit circuit to send data currently in TX buffer(s).
-*
-* @param InstancePtr is a pointer to the XEmacPss instance to be worked on.
-*
-* @return
-*
-* @note
-*
-* Signature: void XEmacPss_Transmit(XEmacPss *InstancePtr)
-*
-*****************************************************************************/
-#define XEmacPss_Transmit(InstancePtr)                              \
-        XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,          \
-        XEMACPSS_NWCTRL_OFFSET,                                     \
-        (XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,          \
-        XEMACPSS_NWCTRL_OFFSET) | XEMACPSS_NWCTRL_STARTTX_MASK))
-
-/****************************************************************************/
-/**
-*
-* This macro determines if the device is configured with checksum offloading
-* on the receive channel
-*
-* @param InstancePtr is a pointer to the XEmacPss instance to be worked on.
-*
-* @return
-*
-* Boolean TRUE if the device is configured with checksum offloading, or
-* FALSE otherwise.
-*
-* @note
-*
-* Signature: u32 XEmacPss_IsRxCsum(XEmacPss *InstancePtr)
-*
-*****************************************************************************/
-#define XEmacPss_IsRxCsum(InstancePtr)                                     \
-        ((XEmacPss_ReadReg((InstancePtr)->Config.BaseAddress,             \
-          XEMACPSS_NWCFG_OFFSET) & XEMACPSS_NWCFG_RXCHKSUMEN_MASK)         \
-          ? TRUE : FALSE)
-
-/****************************************************************************/
-/**
-*
-* This macro determines if the device is configured with checksum offloading
-* on the transmit channel
-*
-* @param InstancePtr is a pointer to the XEmacPss instance to be worked on.
-*
-* @return
-*
-* Boolean TRUE if the device is configured with checksum offloading, or
-* FALSE otherwise.
-*
-* @note
-*
-* Signature: u32 XEmacPss_IsTxCsum(XEmacPss *InstancePtr)
-*
-*****************************************************************************/
-#define XEmacPss_IsTxCsum(InstancePtr)                                     \
-        ((XEmacPss_ReadReg((InstancePtr)->Config.BaseAddress,              \
-          XEMACPSS_DMACR_OFFSET) & XEMACPSS_DMACR_TCPCKSUM_MASK)           \
-          ? TRUE : FALSE)
-
-/************************** Function Prototypes *****************************/
-
-/*
- * Initialization functions in zynq_gem.c
- */
-int XEmacPss_CfgInitialize(XEmacPss *InstancePtr, XEmacPss_Config *CfgPtr,
-                          u32 EffectiveAddress);
-void XEmacPss_Start(XEmacPss *InstancePtr);
-void XEmacPss_Stop(XEmacPss *InstancePtr);
-void XEmacPss_Reset(XEmacPss *InstancePtr);
-
-/*
- * Lookup configuration in zynq_gem_sinit.c
- */
-XEmacPss_Config *XEmacPss_LookupConfig(u16 DeviceId);
-
-/*
- * Interrupt-related functions in xemacps_intr.c
- * DMA only and FIFO is not supported. This DMA does not support coalescing.
- */
-int XEmacPss_SetHandler(XEmacPss *InstancePtr, u32 HandlerType,
-                       void *FuncPtr, void *CallBackRef);
-void XEmacPss_IntrHandler(void *InstancePtr);
-
-/*
- * MAC configuration/control functions in zynq_gem_control.c
- */
-int XEmacPss_SetOptions(XEmacPss *InstancePtr, u32 Options);
-int XEmacPss_ClearOptions(XEmacPss *InstancePtr, u32 Options);
-u32 XEmacPss_GetOptions(XEmacPss *InstancePtr);
-
-int XEmacPss_SetMacAddress(XEmacPss *InstancePtr, void *AddressPtr, u8 Index);
-void XEmacPss_GetMacAddress(XEmacPss *InstancePtr, void *AddressPtr, u8 Index);
-
-int XEmacPss_SetHash(XEmacPss *InstancePtr, void *AddressPtr);
-void XEmacPss_ClearHash(XEmacPss *InstancePtr);
-void XEmacPss_GetHash(XEmacPss *InstancePtr, void *AddressPtr);
-
-void XEmacPss_PhySetMdioDivisor(XEmacPss *InstancePtr,
-                               XEmacPss_MdcDiv Divisor);
-void XEmacPss_SetOperatingSpeed(XEmacPss *InstancePtr, u16 Speed);
-u16 XEmacPss_GetOperatingSpeed(XEmacPss *InstancePtr);
-int XEmacPss_PhyRead(XEmacPss *InstancePtr, u32 PhyAddress,
-                    u32 RegisterNum, u16 *PhyDataPtr);
-int XEmacPss_PhyWrite(XEmacPss *InstancePtr, u32 PhyAddress,
-                     u32 RegisterNum, u16 PhyData);
-int XEmacPss_SetTypeIdCheck(XEmacPss *InstancePtr, u32 Id_Check, u8 Index);
-
-int XEmacPss_SendPausePacket(XEmacPss *InstancePtr);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* end of protection macro */
diff --git a/drivers/net/zynq_gem_bd.h b/drivers/net/zynq_gem_bd.h
deleted file mode 100644 (file)
index c6e791d..0000000
+++ /dev/null
@@ -1,696 +0,0 @@
-/*
- * (C) Copyright 2012 Xilinx
- *
- * This header provides operations to manage buffer descriptors in support
- * of scatter-gather DMA.
- *
- * 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.
- *
- * 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., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef XEMACPSS_BD_H          /* prevent circular inclusions */
-#define XEMACPSS_BD_H          /* by using protection macros */
-
-/*
- *
- * The API exported by this header defines abstracted macros that allow the
- * user to read/write specific BD fields.
- *
- * Buffer Descriptors:
- *
- * A buffer descriptor (BD) defines a DMA transaction. The macros defined by
- * this header file allow access to most fields within a BD to tailor a DMA
- * transaction according to user and hardware requirements.  See the hardware
- * IP DMA spec for more information on BD fields and how they affect transfers.
- *
- * The XEmacPss_Bd structure defines a BD. The organization of this structure
- * is driven mainly by the hardware for use in scatter-gather DMA transfers.
- *
- * Performance:
- *
- * Limiting I/O to BDs can improve overall performance of the DMA channel.
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/***************************** Include Files *********************************/
-
-//#include <string.h>
-//#include "xbasic_types.h"
-#include <common.h>
-/************************** Constant Definitions *****************************/
-
-/**************************** Type Definitions *******************************/
-
-/* Minimum BD alignment */
-#define XEMACPSS_DMABD_MINIMUM_ALIGNMENT  4
-
-/**
- * The XEmacPss_Bd is the type for buffer descriptors (BDs).
- */
-#define XEMACPSS_BD_NUM_WORDS 2
-typedef u32 XEmacPss_Bd[XEMACPSS_BD_NUM_WORDS];
-
-
-/***************** Macros (Inline Functions) Definitions *********************/
-
-/*****************************************************************************/
-/**
- * Zero out BD fields
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @return Nothing
- *
- * @note
- * C-style signature:
- *    void XEmacPss_BdClear(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdClear(BdPtr)                                  \
-    memset((BdPtr), 0, sizeof(XEmacPss_Bd))
-
-/****************************************************************************/
-/**
-*
-* Read the given Buffer Descriptor word.
-*
-* @param    BaseAddress is the base address of the BD to read
-* @param    Offset is the word offset to be read
-*
-* @return   The 32-bit value of the field
-*
-* @note
-* C-style signature:
-*    u32 XEmacPss_BdRead(u32 BaseAddress, u32 Offset)
-*
-*****************************************************************************/
-#define XEmacPss_BdRead(BaseAddress, Offset)             \
-    (*(u32*)((u32)(BaseAddress) + (u32)(Offset)))
-
-/****************************************************************************/
-/**
-*
-* Write the given Buffer Descriptor word.
-*
-* @param    BaseAddress is the base address of the BD to write
-* @param    Offset is the word offset to be written
-* @param    Data is the 32-bit value to write to the field
-*
-* @return   None.
-*
-* @note
-* C-style signature:
-*    void XEmacPss_BdWrite(u32 BaseAddress, u32 Offset, u32 Data)
-*
-*****************************************************************************/
-#define XEmacPss_BdWrite(BaseAddress, Offset, Data)              \
-    (*(u32*)((u32)(BaseAddress) + (u32)(Offset)) = (Data))
-
-/*****************************************************************************/
-/**
- * Set the BD's Address field (word 0).
- *
- * @param  BdPtr is the BD pointer to operate on
- * @param  Addr  is the value to write to BD's status field.
- *
- * @note :
- * 
- * C-style signature:
- *    void XEmacPss_BdSetAddressTx(XEmacPss_Bd* BdPtr, u32 Addr)
- *
- *****************************************************************************/
-#define XEmacPss_BdSetAddressTx(BdPtr, Addr)                        \
-    (XEmacPss_BdWrite((BdPtr), XEMACPSS_BD_ADDR_OFFSET, (u32)(Addr)))
-
-
-/*****************************************************************************/
-/**
- * Set the BD's Address field (word 0).
- *
- * @param  BdPtr is the BD pointer to operate on
- * @param  Data  is the value to write to BD's status field.
- *
- * @note : Due to some bits are mixed within recevie BD's address field,
- *         read-modify-write is performed.
- * 
- * C-style signature:
- *    void XEmacPss_BdSetAddressRx(XEmacPss_Bd* BdPtr, u32 Addr)
- *
- *****************************************************************************/
-#define XEmacPss_BdSetAddressRx(BdPtr, Addr)                        \
-    XEmacPss_BdWrite((BdPtr), XEMACPSS_BD_ADDR_OFFSET,              \
-    ((XEmacPss_BdRead((BdPtr), XEMACPSS_BD_ADDR_OFFSET) &           \
-    ~XEMACPSS_RXBUF_ADD_MASK) | (u32)(Addr)))
-
-
-/*****************************************************************************/
-/**
- * Set the BD's Status field (word 1).
- *
- * @param  BdPtr is the BD pointer to operate on
- * @param  Data  is the value to write to BD's status field.
- *
- * @note
- * C-style signature:
- *    void XEmacPss_BdSetStatus(XEmacPss_Bd* BdPtr, u32 Data)
- *
- *****************************************************************************/
-#define XEmacPss_BdSetStatus(BdPtr, Data)                           \
-    XEmacPss_BdWrite((BdPtr), XEMACPSS_BD_STAT_OFFSET,              \
-    XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) | Data)
-
-
-/*****************************************************************************/
-/**
- * Retrieve the BD's Packet DMA transfer status word (word 1).
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @return Status word
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdGetStatus(XEmacPss_Bd* BdPtr)
- *
- * Due to the BD bit layout differences in transmit and receive. User's
- * caution is required.
- *****************************************************************************/
-#define XEmacPss_BdGetStatus(BdPtr)                                 \
-    XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET)
-
-
-/*****************************************************************************/
-/**
- * Get the address (bits 0..31) of the BD's buffer address (word 0)
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdGetBufAddr(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdGetBufAddr(BdPtr)                               \
-    (XEmacPss_BdRead((BdPtr), XEMACPSS_BD_ADDR_OFFSET))
-
-
-/*****************************************************************************/
-/**
- * Set transfer length in bytes for the given BD. The length must be set each
- * time a BD is submitted to hardware.
- *
- * @param  BdPtr is the BD pointer to operate on
- * @param  LenBytes is the number of bytes to transfer.
- *
- * @note
- * C-style signature:
- *    void XEmacPss_BdSetLength(XEmacPss_Bd* BdPtr, u32 LenBytes)
- *
- *****************************************************************************/
-#define XEmacPss_BdSetLength(BdPtr, LenBytes)                       \
-    XEmacPss_BdWrite((BdPtr), XEMACPSS_BD_STAT_OFFSET,              \
-    ((XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &           \
-    ~XEMACPSS_TXBUF_LEN_MASK) | (LenBytes)))
-
-
-/*****************************************************************************/
-/**
- * Retrieve the BD length field.
- *
- * For Tx channels, the returned value is the same as that written with
- * XEmacPss_BdSetLength().
- *
- * For Rx channels, the returned value is the size of the received packet.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @return Length field processed by hardware or set by
- *         XEmacPss_BdSetLength().
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdGetLength(XEmacPss_Bd* BdPtr)
- *    XEAMCPSS_RXBUF_LEN_MASK is same as XEMACPSS_TXBUF_LEN_MASK.
- *
- *****************************************************************************/
-#define XEmacPss_BdGetLength(BdPtr)                                 \
-    (XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &            \
-    XEMACPSS_RXBUF_LEN_MASK)
-
-
-/*****************************************************************************/
-/**
- * Test whether the given BD has been marked as the last BD of a packet.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @return TRUE if BD represents the "Last" BD of a packet, FALSE otherwise
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdIsLast(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdIsLast(BdPtr)                                    \
-    ((XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &           \
-    XEMACPSS_RXBUF_EOF_MASK) ? TRUE : FALSE)
-
-
-/*****************************************************************************/
-/**
- * Tell the DMA engine that the given transmit BD marks the end of the current
- * packet to be processed.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    void XEmacPss_BdSetLast(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdSetLast(BdPtr)                                   \
-    (XEmacPss_BdWrite((BdPtr), XEMACPSS_BD_STAT_OFFSET,             \
-    XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) |             \
-    XEMACPSS_TXBUF_LAST_MASK))
-
-
-/*****************************************************************************/
-/**
- * Tell the DMA engine that the current packet does not end with the given
- * BD.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    void XEmacPss_BdClearLast(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdClearLast(BdPtr)                                 \
-    (XEmacPss_BdWrite((BdPtr), XEMACPSS_BD_STAT_OFFSET,             \
-    XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &             \
-    ~XEMACPSS_TXBUF_LAST_MASK))
-
-
-/*****************************************************************************/
-/**
- * Set this bit to mark the last descriptor in the receive buffer descriptor
- * list.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    void XEmacPss_BdSetRxWrap(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdSetRxWrap(BdPtr)                                 \
-    (XEmacPss_BdWrite((BdPtr), XEMACPSS_BD_ADDR_OFFSET,             \
-    XEmacPss_BdRead((BdPtr), XEMACPSS_BD_ADDR_OFFSET) |             \
-    XEMACPSS_RXBUF_WRAP_MASK))
-
-
-/*****************************************************************************/
-/**
- * Determine the wrap bit of the receive BD which indicates end of the
- * BD list.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdIsRxWrap(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdIsRxWrap(BdPtr)                                  \
-    ((XEmacPss_BdRead((BdPtr), XEMACPSS_BD_ADDR_OFFSET) &           \
-    XEMACPSS_RXBUF_WRAP_MASK) ? TRUE : FALSE)
-
-
-/*****************************************************************************/
-/**
- * Sets this bit to mark the last descriptor in the transmit buffer
- * descriptor list.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    void XEmacPss_BdSetTxWrap(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdSetTxWrap(BdPtr)                                 \
-    (XEmacPss_BdWrite((BdPtr), XEMACPSS_BD_STAT_OFFSET,             \
-    XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) |             \
-    XEMACPSS_TXBUF_WRAP_MASK))
-
-
-/*****************************************************************************/
-/**
- * Determine the wrap bit of the transmit BD which indicates end of the
- * BD list.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdGetTxWrap(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdIsTxWrap(BdPtr)                                  \
-    ((XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &           \
-    XEMACPSS_TXBUF_WRAP_MASK) ? TRUE : FALSE)
-
-
-/*****************************************************************************/
-/*
- * Must clear this bit to enable the MAC to write data to the receive
- * buffer. Hardware sets this bit once it has successfully written a frame to
- * memory. Once set, software has to clear the bit before the buffer can be
- * used again. This macro clear the new bit of the receive BD.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    void XEmacPss_BdClearRxNew(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdClearRxNew(BdPtr)                                \
-    (XEmacPss_BdWrite((BdPtr), XEMACPSS_BD_ADDR_OFFSET,             \
-    XEmacPss_BdRead((BdPtr), XEMACPSS_BD_ADDR_OFFSET) &             \
-    ~XEMACPSS_RXBUF_NEW_MASK))
-
-
-/*****************************************************************************/
-/**
- * Determine the new bit of the receive BD.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdIsRxNew(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdIsRxNew(BdPtr)                                   \
-    ((XEmacPss_BdRead((BdPtr), XEMACPSS_BD_ADDR_OFFSET) &           \
-    XEMACPSS_RXBUF_NEW_MASK) ? TRUE : FALSE)
-
-
-/*****************************************************************************/
-/**
- * Software sets this bit to disable the buffer to be read by the hardware.
- * Hardware sets this bit for the first buffer of a frame once it has been
- * successfully transmitted. This macro sets this bit of transmit BD to avoid
- * confusion.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    void XEmacPss_BdSetTxUsed(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdSetTxUsed(BdPtr)                                 \
-    (XEmacPss_BdWrite((BdPtr), XEMACPSS_BD_STAT_OFFSET,             \
-    XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) |             \
-    XEMACPSS_TXBUF_USED_MASK))
-
-
-/*****************************************************************************/
-/**
- * Software clears this bit to enable the buffer to be read by the hardware.
- * Hardware sets this bit for the first buffer of a frame once it has been
- * successfully transmitted. This macro clears this bit of transmit BD.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    void XEmacPss_BdClearTxUsed(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdClearTxUsed(BdPtr)                               \
-    (XEmacPss_BdWrite((BdPtr), XEMACPSS_BD_STAT_OFFSET,             \
-    XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &             \
-    ~XEMACPSS_TXBUF_USED_MASK))
-
-
-/*****************************************************************************/
-/**
- * Determine the used bit of the transmit BD. 
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdIsTxUsed(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdIsTxUsed(BdPtr)                                  \
-    ((XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &           \
-    XEMACPSS_TXBUF_USED_MASK) ? TRUE : FALSE)
-
-
-/*****************************************************************************/
-/**
- * Determine if a frame fails to be transmitted due to too many retries.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdIsTxRetry(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdIsTxRetry(BdPtr)                                 \
-    ((XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &           \
-    XEMACPSS_TXBUF_RETRY_MASK) ? TRUE : FALSE)
-
-
-/*****************************************************************************/
-/**
- * Determine if a frame fails to be transmitted due to data can not be
- * feteched in time or buffers are exhausted.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdIsTxUrun(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdIsTxUrun(BdPtr)                                  \
-    ((XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &           \
-    XEMACPSS_TXBUF_URUN_MASK) ? TRUE : FALSE)
-
-
-/*****************************************************************************/
-/**
- * Determine if a frame fails to be transmitted due to buffer is exhausted
- * mid-frame.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdIsTxExh(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdIsTxExh(BdPtr)                                   \
-    ((XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &           \
-    XEMACPSS_TXBUF_EXH_MASK) ? TRUE : FALSE)
-
-
-/*****************************************************************************/
-/**
- * Sets this bit, no CRC will be appended to the current frame. This control
- * bit must be set for the first buffer in a frame and will be ignored for
- * the subsequent buffers of a frame.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * This bit must be clear when using the transmit checksum generation offload,
- * otherwise checksum generation and substitution will not occur.
- *
- * C-style signature:
- *    u32 XEmacPss_BdSetTxNoCRC(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdSetTxNoCRC(BdPtr)                                \
-    (XEmacPss_BdWrite((BdPtr), XEMACPSS_BD_STAT_OFFSET,             \
-    XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) |             \
-    XEMACPSS_TXBUF_NOCRC_MASK))
-
-
-/*****************************************************************************/
-/**
- * Clear this bit, CRC will be appended to the current frame. This control
- * bit must be set for the first buffer in a frame and will be ignored for
- * the subsequent buffers of a frame.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * This bit must be clear when using the transmit checksum generation offload,
- * otherwise checksum generation and substitution will not occur.
- *
- * C-style signature:
- *    u32 XEmacPss_BdClearTxNoCRC(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdClearTxNoCRC(BdPtr)                              \
-    (XEmacPss_BdWrite((BdPtr), XEMACPSS_BD_STAT_OFFSET,             \
-    XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &             \
-    ~XEMACPSS_TXBUF_NOCRC_MASK))
-
-
-/*****************************************************************************/
-/**
- * Determine the broadcast bit of the receive BD.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdIsRxBcast(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdIsRxBcast(BdPtr)                                 \
-    ((XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &           \
-    XEMACPSS_RXBUF_BCAST_MASK) ? TRUE : FALSE)
-
-
-/*****************************************************************************/
-/**
- * Determine the multicast hash bit of the receive BD.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdIsRxMultiHash(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdIsRxMultiHash(BdPtr)                             \
-    ((XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &           \
-    XEMACPSS_RXBUF_MULTIHASH_MASK) ? TRUE : FALSE)
-
-
-/*****************************************************************************/
-/**
- * Determine the unicast hash bit of the receive BD.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdIsRxUniHash(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdIsRxUniHash(BdPtr)                               \
-    ((XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &           \
-    XEMACPSS_RXBUF_UNIHASH_MASK) ? TRUE : FALSE)
-
-
-/*****************************************************************************/
-/**
- * Determine if the received frame is a VLAN Tagged frame.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdIsRxVlan(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdIsRxVlan(BdPtr)                                  \
-    ((XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &           \
-    XEMACPSS_RXBUF_VLAN_MASK) ? TRUE : FALSE)
-
-
-/*****************************************************************************/
-/**
- * Determine if the received frame has Type ID of 8100h and null VLAN
- * identifier(Priority tag).
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdIsRxPri(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdIsRxPri(BdPtr)                                   \
-    ((XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &           \
-    XEMACPSS_RXBUF_PRI_MASK) ? TRUE : FALSE)
-
-
-/*****************************************************************************/
-/**
- * Determine if the received frame's Concatenation Format Indicator (CFI) of
- * the frames VLANTCI field was set.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdIsRxCFI(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdIsRxCFI(BdPtr)                                   \
-    ((XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &           \
-    XEMACPSS_RXBUF_CFI_MASK) ? TRUE : FALSE)
-
-
-/*****************************************************************************/
-/**
- * Determine the End Of Frame (EOF) bit of the receive BD.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdGetRxEOF(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdIsRxEOF(BdPtr)                                   \
-    ((XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &           \
-    XEMACPSS_RXBUF_EOF_MASK) ? TRUE : FALSE)
-
-
-/*****************************************************************************/
-/**
- * Determine the Start Of Frame (SOF) bit of the receive BD.
- *
- * @param  BdPtr is the BD pointer to operate on
- *
- * @note
- * C-style signature:
- *    u32 XEmacPss_BdGetRxSOF(XEmacPss_Bd* BdPtr)
- *
- *****************************************************************************/
-#define XEmacPss_BdIsRxSOF(BdPtr)                                   \
-    ((XEmacPss_BdRead((BdPtr), XEMACPSS_BD_STAT_OFFSET) &           \
-    XEMACPSS_RXBUF_SOF_MASK) ? TRUE : FALSE)
-
-
-/************************** Function Prototypes ******************************/
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* end of protection macro */
diff --git a/drivers/net/zynq_gem_bdring.c b/drivers/net/zynq_gem_bdring.c
deleted file mode 100644 (file)
index 6e534fc..0000000
+++ /dev/null
@@ -1,983 +0,0 @@
-/*
- * (C) Copyright 2012 Xilinx
- *
- * This file implements buffer descriptor ring related functions.
- *
- * 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.
- *
- * 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., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include "xstatus.h"
-//#include "xcache.h"
-#include "zynq_gem_hw.h"
-#include "zynq_gem_bd.h"
-#include "zynq_gem_bdring.h"
-
-/************************** Constant Definitions *****************************/
-
-/**************************** Type Definitions *******************************/
-
-
-/***************** Macros (Inline Functions) Definitions *********************/
-
-/****************************************************************************
- * Define methods to flush and invalidate cache for BDs should they be
- * located in cached memory. These macros may NOPs if the underlying
- * XENV_BD_CACHE macros are not implemented or they do nothing.
- *
- * @note Assume cache line size is in word length. Please update accordingly
- *       for different system.
- ****************************************************************************/
-//#define XENV_BD_CACHE_FLUSH
-//#define XENV_BD_CACHE_INVALIDATE
-
-#ifdef XENV_BD_CACHE_FLUSH
-#  define XEMACPSS_CACHE_FLUSH(BdPtr)               \
-      XCache_FlushDCacheRange((unsigned)BdPtr, XEMACPSS_BD_NUM_WORDS * 4)
-#else
-#  define XEMACPSS_CACHE_FLUSH(BdPtr)
-#endif
-
-#ifdef XENV_BD_CACHE_INVALIDATE
-#  define XEMACPSS_CACHE_INVALIDATE(BdPtr)          \
-      XCache_InvalidateDCacheRange((unsigned)BdPtr, XEMACPSS_BD_NUM_WORDS * 4)
-#else
-#  define XEMACPSS_CACHE_INVALIDATE(BdPtr)
-#endif
-
-/****************************************************************************
- * Compute the virtual address of a descriptor from its physical address
- *
- * @param BdPtr is the physical address of the BD
- *
- * @returns Virtual address of BdPtr
- *
- * @note Assume BdPtr is always a valid BD in the ring
- ****************************************************************************/
-#define XEMACPSS_PHYS_TO_VIRT(BdPtr) \
-    ((u32)BdPtr + (RingPtr->BaseBdAddr - RingPtr->PhysBaseAddr))
-
-/****************************************************************************
- * Compute the physical address of a descriptor from its virtual address
- *
- * @param BdPtr is the physical address of the BD
- *
- * @returns Physical address of BdPtr
- *
- * @note Assume BdPtr is always a valid BD in the ring
- ****************************************************************************/
-#define XEMACPSS_VIRT_TO_PHYS(BdPtr) \
-    ((u32)BdPtr - (RingPtr->BaseBdAddr - RingPtr->PhysBaseAddr))
-
-/****************************************************************************
- * Move the BdPtr argument ahead an arbitrary number of BDs wrapping around
- * to the beginning of the ring if needed.
- *
- * We know if a wrapaound should occur if the new BdPtr is greater than
- * the high address in the ring OR if the new BdPtr crosses over the
- * 0xFFFFFFFF to 0 boundary. The latter test is a valid one since we do not
- * allow a BD space to span this boundary.
- *
- * @param RingPtr is the ring BdPtr appears in
- * @param BdPtr on input is the starting BD position and on output is the
- *        final BD position
- * @param NumBd is the number of BD spaces to increment
- *
- ****************************************************************************/
-#define XEMACPSS_RING_SEEKAHEAD(RingPtr, BdPtr, NumBd)                  \
-    {                                                                   \
-        u32 Addr = (u32)BdPtr;                                  \
-                                                                        \
-        Addr += ((RingPtr)->Separation * NumBd);                        \
-        if ((Addr > (RingPtr)->HighBdAddr) || ((u32)BdPtr > Addr))  \
-        {                                                               \
-            Addr -= (RingPtr)->Length;                                  \
-        }                                                               \
-                                                                        \
-        BdPtr = (XEmacPss_Bd*)Addr;                                     \
-    }
-
-/****************************************************************************
- * Move the BdPtr argument backwards an arbitrary number of BDs wrapping
- * around to the end of the ring if needed.
- *
- * We know if a wrapaound should occur if the new BdPtr is less than
- * the base address in the ring OR if the new BdPtr crosses over the
- * 0xFFFFFFFF to 0 boundary. The latter test is a valid one since we do not
- * allow a BD space to span this boundary.
- *
- * @param RingPtr is the ring BdPtr appears in
- * @param BdPtr on input is the starting BD position and on output is the
- *        final BD position
- * @param NumBd is the number of BD spaces to increment
- *
- ****************************************************************************/
-#define XEMACPSS_RING_SEEKBACK(RingPtr, BdPtr, NumBd)                   \
-    {                                                                   \
-        u32 Addr = (u32)BdPtr;                                  \
-                                                                        \
-        Addr -= ((RingPtr)->Separation * NumBd);                        \
-        if ((Addr < (RingPtr)->BaseBdAddr) || ((u32)BdPtr < Addr))  \
-        {                                                               \
-            Addr += (RingPtr)->Length;                                  \
-        }                                                               \
-                                                                        \
-        BdPtr = (XEmacPss_Bd*)Addr;                                     \
-    }
-
-
-/************************** Function Prototypes ******************************/
-
-
-/************************** Variable Definitions *****************************/
-
-/*****************************************************************************/
-/**
- * Using a memory segment allocated by the caller, create and setup the BD list
- * for the given DMA channel.
- *
- * @param RingPtr is the instance to be worked on.
- * @param PhysAddr is the physical base address of user memory region.
- * @param VirtAddr is the virtual base address of the user memory region. If
- *        address translation is not being utilized, then VirtAddr should be
- *        equivalent to PhysAddr.
- * @param Alignment governs the byte alignment of individual BDs. This function
- *        will enforce a minimum alignment of 4 bytes with no maximum as long
- *        as it is specified as a power of 2.
- * @param BdCount is the number of BDs to setup in the user memory region. It
- *        is assumed the region is large enough to contain the BDs.
- *
- * @return
- *
- * - XST_SUCCESS if initialization was successful
- * - XST_NO_FEATURE if the provided instance is a non DMA type
- *   channel.
- * - XST_INVALID_PARAM under any of the following conditions:
- *   1) PhysAddr and/or VirtAddr are not aligned to the given Alignment
- *      parameter;
- *   2) Alignment parameter does not meet minimum requirements or is not a
- *      power of 2 value;
- *   3) BdCount is 0.
- * - XST_DMA_SG_LIST_ERROR if the memory segment containing the list spans
- *   over address 0x00000000 in virtual address space.
- *
- * @note
- * Make sure to pass in the right alignment value.
- *****************************************************************************/
-int XEmacPss_BdRingCreate(XEmacPss_BdRing * RingPtr, u32 PhysAddr,
-                         u32 VirtAddr, u32 Alignment, unsigned BdCount)
-{
-       unsigned i;
-       u32 BdVirtAddr;
-       u32 BdPhyAddr;
-
-       /* In case there is a failure prior to creating list, make sure the
-        * following attributes are 0 to prevent calls to other functions
-        * from doing anything.
-        */
-       RingPtr->AllCnt = 0;
-       RingPtr->FreeCnt = 0;
-       RingPtr->HwCnt = 0;
-       RingPtr->PreCnt = 0;
-       RingPtr->PostCnt = 0;
-
-       /* Make sure Alignment parameter meets minimum requirements */
-       if (Alignment < XEMACPSS_DMABD_MINIMUM_ALIGNMENT) {
-               return (XST_INVALID_PARAM);
-       }
-
-       /* Make sure Alignment is a power of 2 */
-       if ((Alignment - 1) & Alignment) {
-               return (XST_INVALID_PARAM);
-       }
-
-       /* Make sure PhysAddr and VirtAddr are on same Alignment */
-       if ((PhysAddr % Alignment) || (VirtAddr % Alignment)) {
-               return (XST_INVALID_PARAM);
-       }
-
-       /* Is BdCount reasonable? */
-       if (BdCount == 0) {
-               return (XST_INVALID_PARAM);
-       }
-
-       /* Figure out how many bytes will be between the start of adjacent BDs */
-       RingPtr->Separation =
-               (sizeof(XEmacPss_Bd) + (Alignment - 1)) & ~(Alignment - 1);
-
-       /* Must make sure the ring doesn't span address 0x00000000. If it does,
-        * then the next/prev BD traversal macros will fail.
-        */
-       if (VirtAddr > (VirtAddr + (RingPtr->Separation * BdCount) - 1)) {
-               return (XST_DMA_SG_LIST_ERROR);
-       }
-
-       /* Initial ring setup:
-        *  - Clear the entire space
-        *  - Setup each BD's BDA field with the physical address of the next BD
-        */
-       memset((void *) VirtAddr, 0, (RingPtr->Separation * BdCount));
-
-       BdVirtAddr = VirtAddr;
-       BdPhyAddr = PhysAddr + RingPtr->Separation;
-       for (i = 1; i < BdCount; i++) {
-               XEMACPSS_CACHE_FLUSH(BdVirtAddr);
-               BdVirtAddr += RingPtr->Separation;
-               BdPhyAddr += RingPtr->Separation;
-       }
-
-       /* Setup and initialize pointers and counters */
-       RingPtr->RunState = XST_DMA_SG_IS_STOPPED;
-       RingPtr->BaseBdAddr = VirtAddr;
-       RingPtr->PhysBaseAddr = PhysAddr;
-       RingPtr->HighBdAddr = BdVirtAddr;
-       RingPtr->Length =
-               RingPtr->HighBdAddr - RingPtr->BaseBdAddr + RingPtr->Separation;
-       RingPtr->AllCnt = BdCount;
-       RingPtr->FreeCnt = BdCount;
-       RingPtr->FreeHead = (XEmacPss_Bd *) VirtAddr;
-       RingPtr->PreHead = (XEmacPss_Bd *) VirtAddr;
-       RingPtr->HwHead = (XEmacPss_Bd *) VirtAddr;
-       RingPtr->HwTail = (XEmacPss_Bd *) VirtAddr;
-       RingPtr->PostHead = (XEmacPss_Bd *) VirtAddr;
-       RingPtr->BdaRestart = (XEmacPss_Bd *) PhysAddr;
-
-       return (XST_SUCCESS);
-}
-
-
-/*****************************************************************************/
-/**
- * Clone the given BD into every BD in the list.
- * every field of the source BD is replicated in every BD of the list.
- *
- * This function can be called only when all BDs are in the free group such as
- * they are immediately after initialization with XEmacPss_BdRingCreate().
- * This prevents modification of BDs while they are in use by hardware or the
- * user.
- *
- * @param RingPtr is the pointer of BD ring instance to be worked on.
- * @param SrcBdPtr is the source BD template to be cloned into the list. This
- *        BD will be modified.
- *
- * @return
- *   - XST_SUCCESS if the list was modified.
- *   - XST_DMA_SG_NO_LIST if a list has not been created.
- *   - XST_DMA_SG_LIST_ERROR if some of the BDs in this channel are under
- *     hardware or user control.
- *   - XST_DEVICE_IS_STARTED if the DMA channel has not been stopped.
- *
- *****************************************************************************/
-int XEmacPss_BdRingClone(XEmacPss_BdRing * RingPtr, XEmacPss_Bd * SrcBdPtr,
-                        u8 Direction)
-{
-       unsigned i;
-       u32 CurBd;
-
-       /* Can't do this function if there isn't a ring */
-       if (RingPtr->AllCnt == 0) {
-               return (XST_DMA_SG_NO_LIST);
-       }
-
-       /* Can't do this function with the channel running */
-       if (RingPtr->RunState == XST_DMA_SG_IS_STARTED) {
-               return (XST_DEVICE_IS_STARTED);
-       }
-
-       /* Can't do this function with some of the BDs in use */
-       if (RingPtr->FreeCnt != RingPtr->AllCnt) {
-               return (XST_DMA_SG_LIST_ERROR);
-       }
-
-       if ((Direction != XEMACPSS_SEND) && (Direction != XEMACPSS_RECV)) {
-               return (XST_INVALID_PARAM);
-       }
-
-       /* Starting from the top of the ring, save BD.Next, overwrite the entire
-        * BD with the template, then restore BD.Next
-        */
-       for (i = 0, CurBd = (u32) RingPtr->BaseBdAddr;
-            i < RingPtr->AllCnt; i++, CurBd += RingPtr->Separation) {
-               memcpy((void *)CurBd, SrcBdPtr, sizeof(XEmacPss_Bd));
-               XEMACPSS_CACHE_FLUSH(CurBd);
-       }
-
-       CurBd -= RingPtr->Separation;
-
-       if (Direction == XEMACPSS_RECV) {
-               XEmacPss_BdSetRxWrap(CurBd);
-       }
-       else {
-               XEmacPss_BdSetTxWrap(CurBd);
-       }
-
-       XEMACPSS_CACHE_FLUSH(CurBd);
-
-       return (XST_SUCCESS);
-}
-
-
-/*****************************************************************************/
-/**
- * Reserve locations in the BD list. The set of returned BDs may be modified
- * in preparation for future DMA transaction(s). Once the BDs are ready to be
- * submitted to hardware, the user must call XEmacPss_BdRingToHw() in the same
- * order which they were allocated here. Example:
- *
- * <pre>
- *        NumBd = 2;
- *        Status = XEmacPss_BdRingAlloc(MyRingPtr, NumBd, &MyBdSet);
- *
- *        if (Status != XST_SUCCESS)
- *        {
- *            // Not enough BDs available for the request
- *        }
- *
- *        CurBd = MyBdSet;
- *        for (i=0; i<NumBd; i++)
- *        {
- *            // Prepare CurBd.....
- *
- *            // Onto next BD
- *            CurBd = XEmacPss_BdRingNext(MyRingPtr, CurBd);
- *        }
- *
- *        // Give list to hardware
- *        Status = XEmacPss_BdRingToHw(MyRingPtr, NumBd, MyBdSet);
- * </pre>
- *
- * A more advanced use of this function may allocate multiple sets of BDs.
- * They must be allocated and given to hardware in the correct sequence:
- * <pre>
- *        // Legal
- *        XEmacPss_BdRingAlloc(MyRingPtr, NumBd1, &MySet1);
- *        XEmacPss_BdRingToHw(MyRingPtr, NumBd1, MySet1);
- *
- *        // Legal
- *        XEmacPss_BdRingAlloc(MyRingPtr, NumBd1, &MySet1);
- *        XEmacPss_BdRingAlloc(MyRingPtr, NumBd2, &MySet2);
- *        XEmacPss_BdRingToHw(MyRingPtr, NumBd1, MySet1);
- *        XEmacPss_BdRingToHw(MyRingPtr, NumBd2, MySet2);
- *
- *        // Not legal
- *        XEmacPss_BdRingAlloc(MyRingPtr, NumBd1, &MySet1);
- *        XEmacPss_BdRingAlloc(MyRingPtr, NumBd2, &MySet2);
- *        XEmacPss_BdRingToHw(MyRingPtr, NumBd2, MySet2);
- *        XEmacPss_BdRingToHw(MyRingPtr, NumBd1, MySet1);
- * </pre>
- *
- * Use the API defined in zynq_gem_bd.h to modify individual BDs. Traversal
- * of the BD set can be done using XEmacPss_BdRingNext() and
- * XEmacPss_BdRingPrev().
- *
- * @param RingPtr is a pointer to the BD ring instance to be worked on.
- * @param NumBd is the number of BDs to allocate
- * @param BdSetPtr is an output parameter, it points to the first BD available
- *        for modification.
- *
- * @return
- *   - XST_SUCCESS if the requested number of BDs was returned in the BdSetPtr
- *     parameter.
- *   - XST_FAILURE if there were not enough free BDs to satisfy the request.
- *
- * @note This function should not be preempted by another XEmacPss_Bd function
- *       call that modifies the BD space. It is the caller's responsibility to
- *       provide a mutual exclusion mechanism.
- *
- * @note Do not modify more BDs than the number requested with the NumBd
- *       parameter. Doing so will lead to data corruption and system
- *       instability.
- *
- *****************************************************************************/
-int XEmacPss_BdRingAlloc(XEmacPss_BdRing * RingPtr, unsigned NumBd,
-                        XEmacPss_Bd ** BdSetPtr)
-{
-       /* Enough free BDs available for the request? */
-       if (RingPtr->FreeCnt < NumBd) {
-               return (XST_FAILURE);
-       }
-
-       /* Set the return argument and move FreeHead forward */
-       *BdSetPtr = RingPtr->FreeHead;
-       XEMACPSS_RING_SEEKAHEAD(RingPtr, RingPtr->FreeHead, NumBd);
-       RingPtr->FreeCnt -= NumBd;
-       RingPtr->PreCnt += NumBd;
-       return (XST_SUCCESS);
-}
-
-/*****************************************************************************/
-/**
- * Fully or partially undo an XEmacPss_BdRingAlloc() operation. Use this
- * function if all the BDs allocated by XEmacPss_BdRingAlloc() could not be
- * transferred to hardware with XEmacPss_BdRingToHw().
- *
- * This function helps out in situations when an unrelated error occurs after
- * BDs have been allocated but before they have been given to hardware.
- * An example of this type of error would be an OS running out of resources.
- *
- * This function is not the same as XEmacPss_BdRingFree(). The Free function
- * returns BDs to the free list after they have been processed by hardware,
- * while UnAlloc returns them before being processed by hardware.
- *
- * There are two scenarios where this function can be used. Full UnAlloc or
- * Partial UnAlloc. A Full UnAlloc means all the BDs Alloc'd will be returned:
- *
- * <pre>
- *    Status = XEmacPss_BdRingAlloc(MyRingPtr, 10, &BdPtr);
- *        .
- *        .
- *    if (Error)
- *    {
- *        Status = XEmacPss_BdRingUnAlloc(MyRingPtr, 10, &BdPtr);
- *    }
- * </pre>
- *
- * A partial UnAlloc means some of the BDs Alloc'd will be returned:
- *
- * <pre>
- *    Status = XEmacPss_BdRingAlloc(MyRingPtr, 10, &BdPtr);
- *    BdsLeft = 10;
- *    CurBdPtr = BdPtr;
- *
- *    while (BdsLeft)
- *    {
- *       if (Error)
- *       {
- *          Status = XEmacPss_BdRingUnAlloc(MyRingPtr, BdsLeft, CurBdPtr);
- *       }
- *
- *       CurBdPtr = XEmacPss_BdRingNext(MyRingPtr, CurBdPtr);
- *       BdsLeft--;
- *    }
- * </pre>
- *
- * A partial UnAlloc must include the last BD in the list that was Alloc'd.
- *
- * @param RingPtr is a pointer to the instance to be worked on.
- * @param NumBd is the number of BDs to allocate
- * @param BdSetPtr is an output parameter, it points to the first BD available
- *        for modification.
- *
- * @return
- *   - XST_SUCCESS if the BDs were unallocated.
- *   - XST_FAILURE if NumBd parameter was greater that the number of BDs in
- *     the preprocessing state.
- *
- * @note This function should not be preempted by another XEmacPss_Bd function
- *       call that modifies the BD space. It is the caller's responsibility to
- *       provide a mutual exclusion mechanism.
- *
- *****************************************************************************/
-int XEmacPss_BdRingUnAlloc(XEmacPss_BdRing * RingPtr, unsigned NumBd,
-                          XEmacPss_Bd * BdSetPtr)
-{
-       /* Enough BDs in the free state for the request? */
-       if (RingPtr->PreCnt < NumBd) {
-               return (XST_FAILURE);
-       }
-
-       /* Set the return argument and move FreeHead backward */
-       XEMACPSS_RING_SEEKBACK(RingPtr, RingPtr->FreeHead, NumBd);
-       RingPtr->FreeCnt += NumBd;
-       RingPtr->PreCnt -= NumBd;
-       return (XST_SUCCESS);
-}
-
-
-/*****************************************************************************/
-/**
- * Enqueue a set of BDs to hardware that were previously allocated by
- * XEmacPss_BdRingAlloc(). Once this function returns, the argument BD set goes
- * under hardware control. Any changes made to these BDs after this point will
- * corrupt the BD list leading to data corruption and system instability.
- *
- * The set will be rejected if the last BD of the set does not mark the end of
- * a packet (see XEmacPss_BdSetLast()). 
- *
- * @param RingPtr is a pointer to the instance to be worked on.
- * @param NumBd is the number of BDs in the set.
- * @param BdSetPtr is the first BD of the set to commit to hardware.
- *
- * @return 
- *   - XST_SUCCESS if the set of BDs was accepted and enqueued to hardware.
- *   - XST_FAILURE if the set of BDs was rejected because the last BD of the set
- *     did not have its "last" bit set.
- *   - XST_DMA_SG_LIST_ERROR if this function was called out of sequence with
- *     XEmacPss_BdRingAlloc().
- *
- * @note This function should not be preempted by another XEmacPss_Bd function
- *       call that modifies the BD space. It is the caller's responsibility to
- *       provide a mutual exclusion mechanism.
- *
- *****************************************************************************/
-int XEmacPss_BdRingToHw(XEmacPss_BdRing * RingPtr, unsigned NumBd,
-                       XEmacPss_Bd * BdSetPtr)
-{
-       XEmacPss_Bd *CurBdPtr;
-       unsigned i;
-
-       /* if no bds to process, simply return. */
-       if (0 == NumBd)
-               return (XST_SUCCESS);
-
-       /* Make sure we are in sync with XEmacPss_BdRingAlloc() */
-       if ((RingPtr->PreCnt < NumBd) || (RingPtr->PreHead != BdSetPtr)) {
-               return (XST_DMA_SG_LIST_ERROR);
-       }
-
-       CurBdPtr = BdSetPtr;
-       for (i = 0; i < NumBd; i++) {
-               XEMACPSS_CACHE_FLUSH(CurBdPtr);
-               CurBdPtr = XEmacPss_BdRingNext(RingPtr, CurBdPtr);
-       }
-
-       /* Adjust ring pointers & counters */
-       XEMACPSS_RING_SEEKAHEAD(RingPtr, RingPtr->PreHead, NumBd);
-       RingPtr->PreCnt -= NumBd;
-
-       RingPtr->HwTail = CurBdPtr;
-       RingPtr->HwCnt += NumBd;
-
-       return (XST_SUCCESS);
-}
-
-
-/*****************************************************************************/
-/**
- * Returns a set of BD(s) that have been processed by hardware. The returned
- * BDs may be examined to determine the outcome of the DMA transaction(s).
- * Once the BDs have been examined, the user must call XEmacPss_BdRingFree()
- * in the same order which they were retrieved here. Example:
- *
- * <pre>
- *        NumBd = XEmacPss_BdRingFromHwTx(MyRingPtr, MaxBd, &MyBdSet);
- *
- *        if (NumBd == 0)
- *        {
- *           // hardware has nothing ready for us yet
- *        }
- *
- *        CurBd = MyBdSet;
- *        for (i=0; i<NumBd; i++)
- *        {
- *           // Examine CurBd for post processing.....
- *
- *           // Onto next BD
- *           CurBd = XEmacPss_BdRingNext(MyRingPtr, CurBd);
- *           }
- *
- *           XEmacPss_BdRingFree(MyRingPtr, NumBd, MyBdSet); // Return list
- *        }
- * </pre>
- *
- * A more advanced use of this function may allocate multiple sets of BDs.
- * They must be retrieved from hardware and freed in the correct sequence:
- * <pre>
- *        // Legal
- *        XEmacPss_BdRingFromHwTx(MyRingPtr, NumBd1, &MySet1);
- *        XEmacPss_BdRingFree(MyRingPtr, NumBd1, MySet1);
- *
- *        // Legal
- *        XEmacPss_BdRingFromHwTx(MyRingPtr, NumBd1, &MySet1);
- *        XEmacPss_BdRingFromHwTx(MyRingPtr, NumBd2, &MySet2);
- *        XEmacPss_BdRingFree(MyRingPtr, NumBd1, MySet1);
- *        XEmacPss_BdRingFree(MyRingPtr, NumBd2, MySet2);
- *
- *        // Not legal
- *        XEmacPss_BdRingFromHwTx(MyRingPtr, NumBd1, &MySet1);
- *        XEmacPss_BdRingFromHwTx(MyRingPtr, NumBd2, &MySet2);
- *        XEmacPss_BdRingFree(MyRingPtr, NumBd2, MySet2);
- *        XEmacPss_BdRingFree(MyRingPtr, NumBd1, MySet1);
- * </pre>
- *
- * If hardware has only partially completed a packet spanning multiple BDs,
- * then none of the BDs for that packet will be included in the results.
- *
- * @param RingPtr is a pointer to the instance to be worked on.
- * @param BdLimit is the maximum number of BDs to return in the set.
- * @param BdSetPtr is an output parameter, it points to the first BD available
- *        for examination.
- *
- * @return 
- *   The number of BDs processed by hardware. A value of 0 indicates that no
- *   data is available. No more than BdLimit BDs will be returned.
- *
- * @note Treat BDs returned by this function as read-only.
- *
- * @note This function should not be preempted by another XEmacPss_Bd function
- *       call that modifies the BD space. It is the caller's responsibility to
- *       provide a mutual exclusion mechanism.
- *
- *****************************************************************************/
-unsigned XEmacPss_BdRingFromHwTx(XEmacPss_BdRing * RingPtr, unsigned BdLimit,
-                                XEmacPss_Bd ** BdSetPtr)
-{
-       XEmacPss_Bd *CurBdPtr;
-       u32 BdStr = 0;
-       unsigned BdCount;
-       unsigned BdPartialCount;
-
-       CurBdPtr = RingPtr->HwHead;
-       BdCount = 0;
-       BdPartialCount = 0;
-
-       /* If no BDs in work group, then there's nothing to search */
-       if (RingPtr->HwCnt == 0) {
-               *BdSetPtr = NULL;
-               return (0);
-       }
-
-       /* Starting at HwHead, keep moving forward in the list until:
-        *  - A BD is encountered with its new/used bit set which means
-        *    hardware has not completed processing of that BD.
-        *  - RingPtr->HwTail is reached and RingPtr->HwCnt is reached.
-        *  - The number of requested BDs has been processed
-        */
-       while (BdCount < BdLimit) {
-               /* Read the status */
-               XEMACPSS_CACHE_INVALIDATE(CurBdPtr);
-               BdStr = XEmacPss_BdRead(CurBdPtr, XEMACPSS_BD_STAT_OFFSET);
-
-               BdCount++;
-
-               /* hardware has processed this BD so check the "last" bit. If
-                 * it is clear, then there are more BDs for the current packet.
-                 * Keep a count of these partial packet BDs.
-                */
-               if (BdStr & XEMACPSS_TXBUF_LAST_MASK) {
-                       BdPartialCount = 0;
-               }
-                else {
-                       BdPartialCount++;
-                }
-
-               /* Reached the end of the work group */
-               if (CurBdPtr == RingPtr->HwTail) {
-                       break;
-               }
-
-               /* Move on to next BD in work group */
-               CurBdPtr = XEmacPss_BdRingNext(RingPtr, CurBdPtr);
-       }
-
-        /* Subtract off any partial packet BDs found */
-        BdCount -= BdPartialCount;
-
-       /* If BdCount is non-zero then BDs were found to return. Set return
-        * parameters, update pointers and counters, return success
-        */
-       if (BdCount > 0) {
-               *BdSetPtr = RingPtr->HwHead;
-               RingPtr->HwCnt -= BdCount;
-               RingPtr->PostCnt += BdCount;
-               XEMACPSS_RING_SEEKAHEAD(RingPtr, RingPtr->HwHead, BdCount);
-               return (BdCount);
-       }
-       else {
-               *BdSetPtr = NULL;
-               return (0);
-       }
-}
-
-
-/*****************************************************************************/
-/**
- * Returns a set of BD(s) that have been processed by hardware. The returned
- * BDs may be examined to determine the outcome of the DMA transaction(s).
- * Once the BDs have been examined, the user must call XEmacPss_BdRingFree()
- * in the same order which they were retrieved here. Example:
- *
- * <pre>
- *        NumBd = XEmacPss_BdRingFromHwRx(MyRingPtr, MaxBd, &MyBdSet);
- *
- *        if (NumBd == 0)
- *        {
- *           // hardware has nothing ready for us yet
- *        }
- *
- *        CurBd = MyBdSet;
- *        for (i=0; i<NumBd; i++)
- *        {
- *           // Examine CurBd for post processing.....
- *
- *           // Onto next BD
- *           CurBd = XEmacPss_BdRingNext(MyRingPtr, CurBd);
- *           }
- *
- *           XEmacPss_BdRingFree(MyRingPtr, NumBd, MyBdSet); // Return list
- *        }
- * </pre>
- *
- * A more advanced use of this function may allocate multiple sets of BDs.
- * They must be retrieved from hardware and freed in the correct sequence:
- * <pre>
- *        // Legal
- *        XEmacPss_BdRingFromHwRx(MyRingPtr, NumBd1, &MySet1);
- *        XEmacPss_BdRingFree(MyRingPtr, NumBd1, MySet1);
- *
- *        // Legal
- *        XEmacPss_BdRingFromHwRx(MyRingPtr, NumBd1, &MySet1);
- *        XEmacPss_BdRingFromHwRx(MyRingPtr, NumBd2, &MySet2);
- *        XEmacPss_BdRingFree(MyRingPtr, NumBd1, MySet1);
- *        XEmacPss_BdRingFree(MyRingPtr, NumBd2, MySet2);
- *
- *        // Not legal
- *        XEmacPss_BdRingFromHwRx(MyRingPtr, NumBd1, &MySet1);
- *        XEmacPss_BdRingFromHwRx(MyRingPtr, NumBd2, &MySet2);
- *        XEmacPss_BdRingFree(MyRingPtr, NumBd2, MySet2);
- *        XEmacPss_BdRingFree(MyRingPtr, NumBd1, MySet1);
- * </pre>
- *
- * If hardware has only partially completed a packet spanning multiple BDs,
- * then none of the BDs for that packet will be included in the results.
- *
- * @param RingPtr is a pointer to the instance to be worked on.
- * @param BdLimit is the maximum number of BDs to return in the set.
- * @param BdSetPtr is an output parameter, it points to the first BD available
- *        for examination.
- *
- * @return 
- *   The number of BDs processed by hardware. A value of 0 indicates that no
- *   data is available. No more than BdLimit BDs will be returned.
- *
- * @note Treat BDs returned by this function as read-only.
- *
- * @note This function should not be preempted by another XEmacPss_Bd function
- *       call that modifies the BD space. It is the caller's responsibility to
- *       provide a mutual exclusion mechanism.
- *
- *****************************************************************************/
-unsigned XEmacPss_BdRingFromHwRx(XEmacPss_BdRing * RingPtr, unsigned BdLimit,
-                                XEmacPss_Bd ** BdSetPtr)
-{
-       XEmacPss_Bd *CurBdPtr;
-       u32 BdStr = 0;
-       unsigned BdCount;
-       unsigned BdPartialCount;
-
-       CurBdPtr = RingPtr->HwHead;
-       BdCount = 0;
-        BdPartialCount = 0;
-
-       /* If no BDs in work group, then there's nothing to search */
-       if (RingPtr->HwCnt == 0) {
-               *BdSetPtr = NULL;
-               return (0);
-       }
-
-       /* Starting at HwHead, keep moving forward in the list until:
-        *  - A BD is encountered with its new/used bit set which means
-        *    hardware has completed processing of that BD.
-        *  - RingPtr->HwTail is reached and RingPtr->HwCnt is reached.
-        *  - The number of requested BDs has been processed
-        */
-       while (BdCount < BdLimit) {
-               /* Read the status */
-               XEMACPSS_CACHE_INVALIDATE(CurBdPtr);
-               BdStr = XEmacPss_BdRead(CurBdPtr, XEMACPSS_BD_STAT_OFFSET);
-
-                if (!(XEmacPss_BdIsRxNew(CurBdPtr))) {
-                        break;
-                }
-
-               BdCount++;
-
-               /* hardware has processed this BD so check the "last" bit. If
-                 * it is clear, then there are more BDs for the current packet.
-                 * Keep a count of these partial packet BDs.
-                */
-               if (BdStr & XEMACPSS_RXBUF_EOF_MASK) {
-                       BdPartialCount = 0;
-               }
-                else {
-                       BdPartialCount++; 
-                }
-
-               /* Reached the end of the work group */
-               if (CurBdPtr == RingPtr->HwTail) {
-                       break;
-               }
-
-               /* Move on to next BD in work group */
-               CurBdPtr = XEmacPss_BdRingNext(RingPtr, CurBdPtr);
-       }
-
-        /* Subtract off any partial packet BDs found */
-        BdCount -= BdPartialCount;
-
-       /* If BdCount is non-zero then BDs were found to return. Set return
-        * parameters, update pointers and counters, return success
-        */
-       if (BdCount > 0) {
-               *BdSetPtr = RingPtr->HwHead;
-               RingPtr->HwCnt -= BdCount;
-               RingPtr->PostCnt += BdCount;
-               XEMACPSS_RING_SEEKAHEAD(RingPtr, RingPtr->HwHead, BdCount);
-               return (BdCount);
-       }
-       else {
-               *BdSetPtr = NULL;
-               return (0);
-       }
-}
-
-
-/*****************************************************************************/
-/**
- * Frees a set of BDs that had been previously retrieved with
- * XEmacPss_BdRingFromHw().
- *
- * @param RingPtr is a pointer to the instance to be worked on.
- * @param NumBd is the number of BDs to free. 
- * @param BdSetPtr is the head of a list of BDs returned by
- * XEmacPss_BdRingFromHw().
- *
- * @return
- *   - XST_SUCCESS if the set of BDs was freed.
- *   - XST_DMA_SG_LIST_ERROR if this function was called out of sequence with
- *     XEmacPss_BdRingFromHw().
- *
- * @note This function should not be preempted by another XEmacPss_Bd function
- *       call that modifies the BD space. It is the caller's responsibility to
- *       provide a mutual exclusion mechanism.
- *
- *****************************************************************************/
-int XEmacPss_BdRingFree(XEmacPss_BdRing * RingPtr, unsigned NumBd,
-                       XEmacPss_Bd * BdSetPtr)
-{
-       /* if no bds to process, simply return. */
-       if (0 == NumBd)
-               return (XST_SUCCESS);
-
-       /* Make sure we are in sync with XEmacPss_BdRingFromHw() */
-       if ((RingPtr->PostCnt < NumBd) || (RingPtr->PostHead != BdSetPtr)) {
-               return (XST_DMA_SG_LIST_ERROR);
-       }
-
-       /* Update pointers and counters */
-       RingPtr->FreeCnt += NumBd;
-       RingPtr->PostCnt -= NumBd;
-       XEMACPSS_RING_SEEKAHEAD(RingPtr, RingPtr->PostHead, NumBd);
-       return (XST_SUCCESS);
-}
-
-
-/*****************************************************************************/
-/**
- * Check the internal data structures of the BD ring for the provided channel.
- * The following checks are made:
- *
- *   - Is the BD ring linked correctly in physical address space.
- *   - Do the internal pointers point to BDs in the ring.
- *   - Do the internal counters add up.
- *
- * The channel should be stopped prior to calling this function.
- *
- * @param RingPtr is a pointer to the instance to be worked on.
- *
- * @return
- *   - XST_SUCCESS if the set of BDs was freed.
- *   - XST_DMA_SG_NO_LIST if the list has not been created.
- *   - XST_IS_STARTED if the channel is not stopped.
- *   - XST_DMA_SG_LIST_ERROR if a problem is found with the internal data
- *     structures. If this value is returned, the channel should be reset to
- *     avoid data corruption or system instability.
- *
- * @note This function should not be preempted by another XEmacPss_Bd function
- *       call that modifies the BD space. It is the caller's responsibility to
- *       provide a mutual exclusion mechanism.
- *
- *****************************************************************************/
-int XEmacPss_BdRingCheck(XEmacPss_BdRing * RingPtr, u8 Direction)
-{
-       u32 AddrV, AddrP;
-       unsigned i;
-
-       if ((Direction != XEMACPSS_SEND) && (Direction != XEMACPSS_RECV)) {
-               return (XST_INVALID_PARAM);
-       }
-
-       /* Is the list created */
-       if (RingPtr->AllCnt == 0) {
-               return (XST_DMA_SG_NO_LIST);
-       }
-
-       /* Can't check if channel is running */
-       if (RingPtr->RunState == XST_DMA_SG_IS_STARTED) {
-               return (XST_IS_STARTED);
-       }
-
-       /* RunState doesn't make sense */
-       else if (RingPtr->RunState != XST_DMA_SG_IS_STOPPED) {
-               return (XST_DMA_SG_LIST_ERROR);
-       }
-
-       /* Verify internal pointers point to correct memory space */
-       AddrV = (u32) RingPtr->FreeHead;
-       if ((AddrV < RingPtr->BaseBdAddr) || (AddrV > RingPtr->HighBdAddr)) {
-               return (XST_DMA_SG_LIST_ERROR);
-       }
-
-       AddrV = (u32) RingPtr->PreHead;
-       if ((AddrV < RingPtr->BaseBdAddr) || (AddrV > RingPtr->HighBdAddr)) {
-               return (XST_DMA_SG_LIST_ERROR);
-       }
-
-       AddrV = (u32) RingPtr->HwHead;
-       if ((AddrV < RingPtr->BaseBdAddr) || (AddrV > RingPtr->HighBdAddr)) {
-               return (XST_DMA_SG_LIST_ERROR);
-       }
-
-       AddrV = (u32) RingPtr->HwTail;
-       if ((AddrV < RingPtr->BaseBdAddr) || (AddrV > RingPtr->HighBdAddr)) {
-               return (XST_DMA_SG_LIST_ERROR);
-       }
-
-       AddrV = (u32) RingPtr->PostHead;
-       if ((AddrV < RingPtr->BaseBdAddr) || (AddrV > RingPtr->HighBdAddr)) {
-               return (XST_DMA_SG_LIST_ERROR);
-       }
-
-       /* Verify internal counters add up */
-       if ((RingPtr->HwCnt + RingPtr->PreCnt + RingPtr->FreeCnt +
-            RingPtr->PostCnt) != RingPtr->AllCnt) {
-               return (XST_DMA_SG_LIST_ERROR);
-       }
-
-       /* Verify BDs are linked correctly */
-       AddrV = RingPtr->BaseBdAddr;
-       AddrP = RingPtr->PhysBaseAddr + RingPtr->Separation;
-
-       for (i = 1; i < RingPtr->AllCnt; i++) {
-               /* Check BDA for this BD. It should point to next physical addr */
-               if (XEmacPss_BdRead(AddrV, XEMACPSS_BD_ADDR_OFFSET) != AddrP) {
-                       return (XST_DMA_SG_LIST_ERROR);
-               }
-
-               /* Move on to next BD */
-               AddrV += RingPtr->Separation;
-               AddrP += RingPtr->Separation;
-       }
-
-       /* Last BD should have wrap bit set */
-       if (XEMACPSS_SEND == Direction) {
-               if (!XEmacPss_BdIsTxWrap(AddrV)) {
-                       return (XST_DMA_SG_LIST_ERROR);
-               }
-       }
-       else {                  /* XEMACPSS_RECV */
-               if (!XEmacPss_BdIsRxWrap(AddrV)) {
-                       return (XST_DMA_SG_LIST_ERROR);
-               }
-       }
-
-       /* No problems found */
-       return (XST_SUCCESS);
-}
diff --git a/drivers/net/zynq_gem_bdring.h b/drivers/net/zynq_gem_bdring.h
deleted file mode 100644 (file)
index 72d5200..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * (C) Copyright 2012 Xilinx
- *
- * The Xiline EmacPss Buffer Descriptor ring driver. This is part of EmacPss
- * DMA functionalities.
- *
- * 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.
- *
- * 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., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef XEMACPSS_BDRING_H      /* prevent curcular inclusions */
-#define XEMACPSS_BDRING_H      /* by using protection macros */
-
-/**************************** Type Definitions *******************************/
-
-/** This is an internal structure used to maintain the DMA list */
-typedef struct {
-       u32 PhysBaseAddr;/**< Physical address of 1st BD in list */
-       u32 BaseBdAddr;  /**< Virtual address of 1st BD in list */
-       u32 HighBdAddr;  /**< Virtual address of last BD in the list */
-       u32 Length;      /**< Total size of ring in bytes */
-       u32 RunState;    /**< Flag to indicate DMA is started */
-       u32 Separation;  /**< Number of bytes between the starting address
-                                  of adjacent BDs */
-       XEmacPss_Bd *RxBD_start;        /**< First BD in the Rx queue*/
-       int RxBD_current;               /**< Index to the current BD*/
-       int RxBD_end;                   /**< Index to the last BD*/
-       int Rx_first_buf;               /**< Index to the first BD*/
-       XEmacPss_Bd *FreeHead;
-                            /**< First BD in the free group */
-       XEmacPss_Bd *PreHead;/**< First BD in the pre-work group */
-       XEmacPss_Bd *HwHead; /**< First BD in the work group */
-       XEmacPss_Bd *HwTail; /**< Last BD in the work group */
-       XEmacPss_Bd *PostHead;
-                            /**< First BD in the post-work group */
-       XEmacPss_Bd *BdaRestart;
-                            /**< BDA to load when channel is started */
-       unsigned HwCnt;      /**< Number of BDs in work group */
-       unsigned PreCnt;     /**< Number of BDs in pre-work group */
-       unsigned FreeCnt;    /**< Number of allocatable BDs in the free group */
-       unsigned PostCnt;    /**< Number of BDs in post-work group */
-       unsigned AllCnt;     /**< Total Number of BDs for channel */
-} XEmacPss_BdRing;
-
-
-/***************** Macros (Inline Functions) Definitions *********************/
-
-/*****************************************************************************/
-/**
-* Use this macro at initialization time to determine how many BDs will fit
-* in a BD list within the given memory constraints.
-*
-* The results of this macro can be provided to XEmacPss_BdRingCreate().
-*
-* @param Alignment specifies what byte alignment the BDs must fall on and
-*        must be a power of 2 to get an accurate calculation (32, 64, 128,...)
-* @param Bytes is the number of bytes to be used to store BDs.
-*
-* @return Number of BDs that can fit in the given memory area
-*
-* @note
-* C-style signature:
-*    u32 XEmacPss_BdRingCntCalc(u32 Alignment, u32 Bytes)
-*
-******************************************************************************/
-#define XEmacPss_BdRingCntCalc(Alignment, Bytes)                    \
-    (u32)((Bytes) / ((sizeof(XEmacPss_Bd) + ((Alignment)-1)) &   \
-    ~((Alignment)-1)))
-
-/*****************************************************************************/
-/**
-* Use this macro at initialization time to determine how many bytes of memory
-* is required to contain a given number of BDs at a given alignment.
-*
-* @param Alignment specifies what byte alignment the BDs must fall on. This
-*        parameter must be a power of 2 to get an accurate calculation (32, 64,
-*        128,...)
-* @param NumBd is the number of BDs to calculate memory size requirements for
-*
-* @return The number of bytes of memory required to create a BD list with the
-*         given memory constraints.
-*
-* @note
-* C-style signature:
-*    u32 XEmacPss_BdRingMemCalc(u32 Alignment, u32 NumBd)
-*
-******************************************************************************/
-#define XEmacPss_BdRingMemCalc(Alignment, NumBd)                    \
-    (u32)((sizeof(XEmacPss_Bd) + ((Alignment)-1)) &              \
-    ~((Alignment)-1)) * (NumBd)
-
-/****************************************************************************/
-/**
-* Return the total number of BDs allocated by this channel with
-* XEmacPss_BdRingCreate().
-*
-* @param  InstancePtr is the DMA channel to operate on.
-*
-* @return The total number of BDs allocated for this channel.
-*
-* @note
-* C-style signature:
-*    u32 XEmacPss_BdRingGetCnt(XEmacPss_BdRing* RingPtr)
-*
-*****************************************************************************/
-#define XEmacPss_BdRingGetCnt(RingPtr) ((RingPtr)->AllCnt)
-
-/****************************************************************************/
-/**
-* Return the number of BDs allocatable with XEmacPss_BdRingAlloc() for pre-
-* processing.
-*
-* @param  InstancePtr is the DMA channel to operate on.
-*
-* @return The number of BDs currently allocatable.
-*
-* @note
-* C-style signature:
-*    u32 XEmacPss_BdRingGetFreeCnt(XEmacPss_BdRing* RingPtr)
-*
-*****************************************************************************/
-#define XEmacPss_BdRingGetFreeCnt(RingPtr)   ((RingPtr)->FreeCnt)
-
-/****************************************************************************/
-/**
-* Return the next BD from BdPtr in a list.
-*
-* @param  InstancePtr is the DMA channel to operate on.
-* @param  BdPtr is the BD to operate on.
-*
-* @return The next BD in the list relative to the BdPtr parameter.
-*
-* @note
-* C-style signature:
-*    XEmacPss_Bd *XEmacPss_BdRingNext(XEmacPss_BdRing* RingPtr,
-*                                      XEmacPss_Bd *BdPtr)
-*
-*****************************************************************************/
-#define XEmacPss_BdRingNext(RingPtr, BdPtr)                           \
-    (((u32)(BdPtr) >= (RingPtr)->HighBdAddr) ?                     \
-    (XEmacPss_Bd*)(RingPtr)->BaseBdAddr :                              \
-    (XEmacPss_Bd*)((u32)(BdPtr) + (RingPtr)->Separation))
-
-/****************************************************************************/
-/**
-* Return the previous BD from BdPtr in the list.
-*
-* @param  InstancePtr is the DMA channel to operate on.
-* @param  BdPtr is the BD to operate on
-*
-* @return The previous BD in the list relative to the BdPtr parameter.
-*
-* @note
-* C-style signature:
-*    XEmacPss_Bd *XEmacPss_BdRingPrev(XEmacPss_BdRing* RingPtr,
-*                                      XEmacPss_Bd *BdPtr)
-*
-*****************************************************************************/
-#define XEmacPss_BdRingPrev(RingPtr, BdPtr)                           \
-    (((u32)(BdPtr) <= (RingPtr)->BaseBdAddr) ?                     \
-    (XEmacPss_Bd*)(RingPtr)->HighBdAddr :                              \
-    (XEmacPss_Bd*)((u32)(BdPtr) - (RingPtr)->Separation))
-
-/************************** Function Prototypes ******************************/
-
-/*
- * Scatter gather DMA related functions in zynq_gem_bdring.c
- */
-int XEmacPss_BdRingCreate(XEmacPss_BdRing * RingPtr, u32 PhysAddr,
-                         u32 VirtAddr, u32 Alignment, unsigned BdCount);
-int XEmacPss_BdRingClone(XEmacPss_BdRing * RingPtr, XEmacPss_Bd * SrcBdPtr,
-                        u8 Direction);
-int XEmacPss_BdRingAlloc(XEmacPss_BdRing * RingPtr, unsigned NumBd,
-                        XEmacPss_Bd ** BdSetPtr);
-int XEmacPss_BdRingUnAlloc(XEmacPss_BdRing * RingPtr, unsigned NumBd,
-                          XEmacPss_Bd * BdSetPtr);
-int XEmacPss_BdRingToHw(XEmacPss_BdRing * RingPtr, unsigned NumBd,
-                       XEmacPss_Bd * BdSetPtr);
-int XEmacPss_BdRingFree(XEmacPss_BdRing * RingPtr, unsigned NumBd,
-                       XEmacPss_Bd * BdSetPtr);
-unsigned XEmacPss_BdRingFromHwTx(XEmacPss_BdRing * RingPtr, unsigned BdLimit,
-                                XEmacPss_Bd ** BdSetPtr);
-unsigned XEmacPss_BdRingFromHwRx(XEmacPss_BdRing * RingPtr, unsigned BdLimit,
-                                XEmacPss_Bd ** BdSetPtr);
-int XEmacPss_BdRingCheck(XEmacPss_BdRing * RingPtr, u8 Direction);
-
-
-#endif /* end of protection macros */
diff --git a/drivers/net/zynq_gem_control.c b/drivers/net/zynq_gem_control.c
deleted file mode 100644 (file)
index d7612ad..0000000
+++ /dev/null
@@ -1,924 +0,0 @@
-/*
- * (C) Copyright 2012 Xilinx
- *
- * Functions in this file implement general purpose command and control related
- * functionality. See zynq_gem.h for a detailed description of the driver.
- *
- * 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.
- *
- * 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., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-/***************************** Include Files *********************************/
-
-#include "zynq_gem.h"
-
-/************************** Constant Definitions *****************************/
-
-
-/**************************** Type Definitions *******************************/
-
-
-/***************** Macros (Inline Functions) Definitions *********************/
-
-
-/************************** Function Prototypes ******************************/
-
-
-/************************** Variable Definitions *****************************/
-
-
-/*****************************************************************************/
-/**
- * Set the MAC address for this driver/device.  The address is a 48-bit value.
- * The device must be stopped before calling this function.
- *
- * @param InstancePtr is a pointer to the instance to be worked on.
- * @param AddressPtr is a pointer to a 6-byte MAC address.
- * @param Index is a index to which MAC (1-4) address.
- *
- * @return
- * - XST_SUCCESS if the MAC address was set successfully
- * - XST_DEVICE_IS_STARTED if the device has not yet been stopped
- *
- *****************************************************************************/
-int XEmacPss_SetMacAddress(XEmacPss *InstancePtr, void *AddressPtr, u8 Index)
-{
-       u32 MacAddr;
-       u8 *Aptr = (u8 *) AddressPtr;
-
-       XASSERT_NONVOID(InstancePtr != NULL);
-       XASSERT_NONVOID(AddressPtr != NULL);
-       XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-       XASSERT_NONVOID((Index <= XEMACPSS_MAX_MAC_ADDR) && (Index > 0));
-
-       /* Be sure device has been stopped */
-       if (InstancePtr->IsStarted == XCOMPONENT_IS_STARTED) {
-               return (XST_DEVICE_IS_STARTED);
-       }
-
-        /* Index ranges 1 to 4, for offset calculation is 0 to 3. */
-        Index--;
-
-       /* Set the MAC bits [31:0] in BOT */
-       MacAddr = Aptr[0];
-       MacAddr |= Aptr[1] << 8;
-       MacAddr |= Aptr[2] << 16;
-       MacAddr |= Aptr[3] << 24;
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          (XEMACPSS_LADDR1L_OFFSET + Index * 8), MacAddr);
-
-       /* There are reserved bits in TOP so don't affect them */
-       MacAddr = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                   (XEMACPSS_LADDR1H_OFFSET + (Index * 8)));
-
-       MacAddr &= ~XEMACPSS_LADDR_MACH_MASK;
-
-       /* Set MAC bits [47:32] in TOP */
-       MacAddr |= Aptr[4];
-       MacAddr |= Aptr[5] << 8;
-
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          (XEMACPSS_LADDR1H_OFFSET + (Index * 8)), MacAddr);
-
-       return (XST_SUCCESS);
-}
-
-
-/*****************************************************************************/
-/**
- * Get the MAC address for this driver/device.
- *
- * @param InstancePtr is a pointer to the instance to be worked on.
- * @param AddressPtr is an output parameter, and is a pointer to a buffer into
- *        which the current MAC address will be copied.
- * @param Index is a index to which MAC (1-4) address.
- *
- *****************************************************************************/
-void XEmacPss_GetMacAddress(XEmacPss *InstancePtr, void *AddressPtr, u8 Index)
-{
-       u32 MacAddr;
-       u8 *Aptr = (u8 *) AddressPtr;
-
-       XASSERT_VOID(InstancePtr != NULL);
-       XASSERT_VOID(AddressPtr != NULL);
-       XASSERT_VOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-       XASSERT_VOID((Index <= XEMACPSS_MAX_MAC_ADDR) && (Index > 0));
-
-        /* Index ranges 1 to 4, for offset calculation is 0 to 3. */
-        Index--;
-
-       MacAddr = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                   (XEMACPSS_LADDR1L_OFFSET + (Index * 8)));
-       Aptr[0] = (u8) MacAddr;
-       Aptr[1] = (u8) (MacAddr >> 8);
-       Aptr[2] = (u8) (MacAddr >> 16);
-       Aptr[3] = (u8) (MacAddr >> 24);
-
-       /* Read MAC bits [47:32] in TOP */
-       MacAddr = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                   (XEMACPSS_LADDR1H_OFFSET + (Index * 8)));
-       Aptr[4] = (u8) MacAddr;
-       Aptr[5] = (u8) (MacAddr >> 8);
-}
-
-
-/*****************************************************************************/
-/**
- * Set 48-bit MAC addresses in hash table.
- * The device must be stopped before calling this function.
- *
- * The hash address register is 64 bits long and takes up two locations in
- * the memory map. The least significant bits are stored in hash register
- * bottom and the most significant bits in hash register top.
- *
- * The unicast hash enable and the multicast hash enable bits in the network
- * configuration register enable the reception of hash matched frames. The
- * destination address is reduced to a 6 bit index into the 64 bit hash
- * register using the following hash function. The hash function is an XOR
- * of every sixth bit of the destination address.
- *
- * <pre>
- * hash_index[05] = da[05]^da[11]^da[17]^da[23]^da[29]^da[35]^da[41]^da[47]
- * hash_index[04] = da[04]^da[10]^da[16]^da[22]^da[28]^da[34]^da[40]^da[46]
- * hash_index[03] = da[03]^da[09]^da[15]^da[21]^da[27]^da[33]^da[39]^da[45]
- * hash_index[02] = da[02]^da[08]^da[14]^da[20]^da[26]^da[32]^da[38]^da[44]
- * hash_index[01] = da[01]^da[07]^da[13]^da[19]^da[25]^da[31]^da[37]^da[43]
- * hash_index[00] = da[00]^da[06]^da[12]^da[18]^da[24]^da[30]^da[36]^da[42]
- * </pre>
- *
- * da[0] represents the least significant bit of the first byte received,
- * that is, the multicast/unicast indicator, and da[47] represents the most
- * significant bit of the last byte received.
- *
- * If the hash index points to a bit that is set in the hash register then
- * the frame will be matched according to whether the frame is multicast
- * or unicast.
- *
- * A multicast match will be signaled if the multicast hash enable bit is
- * set, da[0] is logic 1 and the hash index points to a bit set in the hash
- * register.
- *
- * A unicast match will be signaled if the unicast hash enable bit is set,
- * da[0] is logic 0 and the hash index points to a bit set in the hash
- * register.
- *
- * To receive all multicast frames, the hash register should be set with
- * all ones and the multicast hash enable bit should be set in the network
- * configuration register.
- *
- *
- * @param InstancePtr is a pointer to the instance to be worked on.
- * @param AddressPtr is a pointer to a 6-byte MAC address.
- *
- * @return
- * - XST_SUCCESS if the HASH MAC address was set successfully
- * - XST_DEVICE_IS_STARTED if the device has not yet been stopped
- * - XST_INVALID_PARAM if the HASH MAC address passed in does not meet
- *   requirement after calculation
- *
- * @note
- * Having Aptr be unsigned type prevents the following operations from sign
- * extending.
- *****************************************************************************/
-int XEmacPss_SetHash(XEmacPss *InstancePtr, void *AddressPtr)
-{
-       u32 HashAddr;
-       u8 *Aptr = (u8 *) AddressPtr;
-        u8 Temp1, Temp2, Temp3, Temp4, Temp5, Temp6, Temp7, Temp8;
-        int Result;
-
-       XASSERT_NONVOID(InstancePtr != NULL);
-       XASSERT_NONVOID(AddressPtr != NULL);
-       XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
-       /* Be sure device has been stopped */
-       if (InstancePtr->IsStarted == XCOMPONENT_IS_STARTED) {
-               return (XST_DEVICE_IS_STARTED);
-       }
-        Temp1 =   Aptr[0] & 0x3F;
-        Temp2 = ((Aptr[0] >> 6) & 0x3) | ((Aptr[1] & 0xF) << 2);
-        Temp3 = ((Aptr[1] >> 4) & 0xF) | ((Aptr[2] & 0x3) << 4);
-        Temp4 = ((Aptr[2] >> 2) & 0x3F);
-        Temp5 =   Aptr[3] & 0x3F;
-        Temp6 = ((Aptr[3] >> 6) & 0x3) | ((Aptr[4] & 0xF) << 2);
-        Temp7 = ((Aptr[4] >> 4) & 0xF) | ((Aptr[5] & 0x3) << 4);
-        Temp8 = ((Aptr[5] >> 2) & 0x3F);
-
-        Result = Temp1 ^ Temp2 ^ Temp3 ^ Temp4 ^ Temp5 ^ Temp6 ^ Temp7 ^ Temp8;
-
-        if (Result >= XEMACPSS_MAX_HASH_BITS) {
-               return (XST_INVALID_PARAM);
-        }
-
-        if (Result < 32) {
-               HashAddr = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                   XEMACPSS_HASHL_OFFSET);
-                HashAddr |= (1 << Result);
-               XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                                    XEMACPSS_HASHL_OFFSET, HashAddr);
-        } else {
-               HashAddr = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                   XEMACPSS_HASHH_OFFSET);
-                HashAddr |= (1 << (Result - 32));
-               XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                                    XEMACPSS_HASHH_OFFSET, HashAddr);
-        }
-
-       return (XST_SUCCESS);
-}
-
-/*****************************************************************************/
-/**
- * Clear the Hash registers for the mac address pointed by AddressPtr.
- *
- * @param InstancePtr is a pointer to the instance to be worked on.
- *
- *****************************************************************************/
-void XEmacPss_ClearHash(XEmacPss *InstancePtr)
-{
-       XASSERT_VOID(InstancePtr != NULL);
-       XASSERT_VOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                                   XEMACPSS_HASHL_OFFSET, 0x0);
-
-       /* write bits [63:32] in TOP */
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                                   XEMACPSS_HASHH_OFFSET, 0x0);
-}
-
-
-/*****************************************************************************/
-/**
- * Get the Hash address for this driver/device.
- *
- * @param InstancePtr is a pointer to the instance to be worked on.
- * @param AddressPtr is an output parameter, and is a pointer to a buffer into
- *        which the current HASH MAC address will be copied.
- *
- *****************************************************************************/
-void XEmacPss_GetHash(XEmacPss *InstancePtr, void *AddressPtr)
-{
-       u32 *Aptr = (u32 *) AddressPtr;
-
-       XASSERT_VOID(InstancePtr != NULL);
-       XASSERT_VOID(AddressPtr != NULL);
-       XASSERT_VOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
-       Aptr[0] = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                   XEMACPSS_HASHL_OFFSET);
-
-       /* Read Hash bits [63:32] in TOP */
-       Aptr[1] = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                   XEMACPSS_HASHH_OFFSET);
-}
-
-
-/*****************************************************************************/
-/**
- * Set the Type ID match for this driver/device.  The register is a 32-bit
- * value. The device must be stopped before calling this function.
- *
- * @param InstancePtr is a pointer to the instance to be worked on.
- * @param Id_Check.
- * @param Index is a index to which Type ID (1-4).
- *
- * @return
- * - XST_SUCCESS if the MAC address was set successfully
- * - XST_DEVICE_IS_STARTED if the device has not yet been stopped
- *
- *****************************************************************************/
-int XEmacPss_SetTypeIdCheck(XEmacPss *InstancePtr, u32 Id_Check, u8 Index)
-{
-       XASSERT_NONVOID(InstancePtr != NULL);
-       XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-       XASSERT_NONVOID((Index <= XEMACPSS_MAX_TYPE_ID) && (Index > 0));
-
-       /* Be sure device has been stopped */
-       if (InstancePtr->IsStarted == XCOMPONENT_IS_STARTED) {
-               return (XST_DEVICE_IS_STARTED);
-       }
-
-       /* Index ranges 1 to 4, for offset calculation is 0 to 3. */
-       Index--;
-
-       /* Set the ID bits in MATCHx register */
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          (XEMACPSS_MATCH1_OFFSET + (Index * 4)), Id_Check);
-
-       return (XST_SUCCESS);
-}
-
-/*****************************************************************************/
-/**
- * Set options for the driver/device. The driver should be stopped with
- * XEmacPss_Stop() before changing options.
- *
- * @param InstancePtr is a pointer to the instance to be worked on.
- * @param Options are the options to set. Multiple options can be set by OR'ing
- *        XTE_*_OPTIONS constants together. Options not specified are not
- *        affected.
- *
- * @return
- * - XST_SUCCESS if the options were set successfully
- * - XST_DEVICE_IS_STARTED if the device has not yet been stopped
- *
- * @note
- * See zynq_gem.h for a description of the available options.
- *
- *****************************************************************************/
-int XEmacPss_SetOptions(XEmacPss *InstancePtr, u32 Options)
-{
-       u32 Reg;                /* Generic register contents */
-       u32 RegNetCfg;          /* Reflects original contents of NET_CONFIG */
-       u32 RegNewNetCfg;       /* Reflects new contents of NET_CONFIG */
-
-       XASSERT_NONVOID(InstancePtr != NULL);
-       XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
-       /* Be sure device has been stopped */
-       if (InstancePtr->IsStarted == XCOMPONENT_IS_STARTED) {
-               return (XST_DEVICE_IS_STARTED);
-       }
-
-       /* Many of these options will change the NET_CONFIG registers.
-        * To reduce the amount of IO to the device, group these options here
-        * and change them all at once. 
-        */
-
-       /* Grab current register contents */
-       RegNetCfg = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                     XEMACPSS_NWCFG_OFFSET);
-       RegNewNetCfg = RegNetCfg;
-
-       /*
-        * It is configured to max 1536.
-        */
-       if (Options & XEMACPSS_FRAME1536_OPTION) {
-               RegNewNetCfg |= (XEMACPSS_NWCFG_1536RXEN_MASK);
-       }
-
-       /* Turn on VLAN packet only, only VLAN tagged will be accepted */
-       if (Options & XEMACPSS_VLAN_OPTION) {
-               RegNewNetCfg |= XEMACPSS_NWCFG_NVLANDISC_MASK;
-       }
-
-       /* Turn on FCS stripping on receive packets */
-       if (Options & XEMACPSS_FCS_STRIP_OPTION) {
-               RegNewNetCfg |= XEMACPSS_NWCFG_FCSREM_MASK;
-       }
-
-       /* Turn on length/type field checking on receive packets */
-       if (Options & XEMACPSS_LENTYPE_ERR_OPTION) {
-               RegNewNetCfg |= XEMACPSS_NWCFG_LENGTHERRDSCRD_MASK;
-       }
-
-       /* Turn on flow control */
-       if (Options & XEMACPSS_FLOW_CONTROL_OPTION) {
-               RegNewNetCfg |= XEMACPSS_NWCFG_PAUSEEN_MASK;
-       }
-
-       /* Turn on promiscuous frame filtering (all frames are received) */
-       if (Options & XEMACPSS_PROMISC_OPTION) {
-               RegNewNetCfg |= XEMACPSS_NWCFG_COPYALLEN_MASK;
-       }
-
-       /* Allow broadcast address reception */
-       if (Options & XEMACPSS_BROADCAST_OPTION) {
-               RegNewNetCfg &= ~XEMACPSS_NWCFG_BCASTDI_MASK;
-       }
-
-       /* Allow multicast address filtering */
-       if (Options & XEMACPSS_MULTICAST_OPTION) {
-               RegNewNetCfg |= XEMACPSS_NWCFG_MCASTHASHEN_MASK;
-       }
-
-       /* enable RX checksum offload */
-       if (Options & XEMACPSS_RX_CHKSUM_ENABLE_OPTION) {
-               RegNewNetCfg |= XEMACPSS_NWCFG_RXCHKSUMEN_MASK;
-       }
-
-       /* Officially change the NET_CONFIG registers if it needs to be
-        * modified.
-        */
-       if (RegNetCfg != RegNewNetCfg) {
-               XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                                  XEMACPSS_NWCFG_OFFSET, RegNewNetCfg);
-       }
-
-       /* Enable TX checksum offload */
-       if (Options & XEMACPSS_TX_CHKSUM_ENABLE_OPTION) {
-               Reg = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                       XEMACPSS_DMACR_OFFSET);
-               Reg |= XEMACPSS_DMACR_TCPCKSUM_MASK;
-               XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                                        XEMACPSS_DMACR_OFFSET, Reg);
-       }
-
-       /* Enable transmitter */
-       if (Options & XEMACPSS_TRANSMITTER_ENABLE_OPTION) {
-               Reg = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                       XEMACPSS_NWCTRL_OFFSET);
-               Reg |= XEMACPSS_NWCTRL_TXEN_MASK;
-               XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                                  XEMACPSS_NWCTRL_OFFSET, Reg);
-       }
-
-       /* Enable receiver */
-       if (Options & XEMACPSS_RECEIVER_ENABLE_OPTION) {
-               Reg = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                       XEMACPSS_NWCTRL_OFFSET);
-               Reg |= XEMACPSS_NWCTRL_RXEN_MASK;
-               XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                                  XEMACPSS_NWCTRL_OFFSET, Reg);
-       }
-
-       /* The remaining options not handled here are managed elsewhere in the
-        * driver. No register modifications are needed at this time. Reflecting
-        * the option in InstancePtr->Options is good enough for now.
-        */
-
-       /* Set options word to its new value */
-       InstancePtr->Options |= Options;
-
-       return (XST_SUCCESS);
-}
-
-
-/*****************************************************************************/
-/**
- * Clear options for the driver/device
- *
- * @param InstancePtr is a pointer to the instance to be worked on.
- * @param Options are the options to clear. Multiple options can be cleared by
- *        OR'ing XEMACPSS_*_OPTIONS constants together. Options not specified
- *        are not affected.
- *
- * @return
- * - XST_SUCCESS if the options were set successfully
- * - XST_DEVICE_IS_STARTED if the device has not yet been stopped
- *
- * @note
- * See zynq_gem.h for a description of the available options.
- *
- *****************************************************************************/
-int XEmacPss_ClearOptions(XEmacPss *InstancePtr, u32 Options)
-{
-       u32 Reg;                /* Generic */
-       u32 RegNetCfg;          /* Reflects original contents of NET_CONFIG */
-       u32 RegNewNetCfg;       /* Reflects new contents of NET_CONFIG */
-
-       XASSERT_NONVOID(InstancePtr != NULL);
-       XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
-       /* Be sure device has been stopped */
-       if (InstancePtr->IsStarted == XCOMPONENT_IS_STARTED) {
-               return (XST_DEVICE_IS_STARTED);
-       }
-
-       /* Many of these options will change the NET_CONFIG registers.
-        * To reduce the amount of IO to the device, group these options here
-        * and change them all at once. 
-        */
-
-       /* Grab current register contents */
-       RegNetCfg = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                     XEMACPSS_NWCFG_OFFSET);
-       RegNewNetCfg = RegNetCfg;
-
-       /* There is only RX configuration!?
-        * It is configured in two different length, upto 1536 and 10240 bytes
-        */
-       if (Options & XEMACPSS_FRAME1536_OPTION) {
-               RegNewNetCfg &= ~XEMACPSS_NWCFG_1536RXEN_MASK;
-       }
-
-       /* Turn off VLAN packet only */
-       if (Options & XEMACPSS_VLAN_OPTION) {
-               RegNewNetCfg &= ~XEMACPSS_NWCFG_NVLANDISC_MASK;
-       }
-
-       /* Turn off FCS stripping on receive packets */
-       if (Options & XEMACPSS_FCS_STRIP_OPTION) {
-               RegNewNetCfg &= ~XEMACPSS_NWCFG_FCSREM_MASK;
-       }
-
-       /* Turn off length/type field checking on receive packets */
-       if (Options & XEMACPSS_LENTYPE_ERR_OPTION) {
-               RegNewNetCfg &= ~XEMACPSS_NWCFG_LENGTHERRDSCRD_MASK;
-       }
-
-       /* Turn off flow control */
-       if (Options & XEMACPSS_FLOW_CONTROL_OPTION) {
-               RegNewNetCfg &= ~XEMACPSS_NWCFG_PAUSEEN_MASK;
-       }
-
-       /* Turn off promiscuous frame filtering (all frames are received) */
-       if (Options & XEMACPSS_PROMISC_OPTION) {
-               RegNewNetCfg &= ~XEMACPSS_NWCFG_COPYALLEN_MASK;
-       }
-
-       /* Disallow broadcast address filtering => broadcast reception */
-       if (Options & XEMACPSS_BROADCAST_OPTION) {
-               RegNewNetCfg |= XEMACPSS_NWCFG_BCASTDI_MASK;
-       }
-
-       /* Disallow multicast address filtering */
-       if (Options & XEMACPSS_MULTICAST_OPTION) {
-               RegNewNetCfg &= ~XEMACPSS_NWCFG_MCASTHASHEN_MASK;
-       }
-
-       /* Disable RX checksum offload */
-       if (Options & XEMACPSS_RX_CHKSUM_ENABLE_OPTION) {
-               RegNewNetCfg &= ~XEMACPSS_NWCFG_RXCHKSUMEN_MASK;
-       }
-
-       /* Officially change the NET_CONFIG registers if it needs to be
-        * modified.
-        */
-       if (RegNetCfg != RegNewNetCfg) {
-               XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                                  XEMACPSS_NWCFG_OFFSET, RegNewNetCfg);
-       }
-
-       /* Disable TX checksum offload */
-       if (Options & XEMACPSS_TX_CHKSUM_ENABLE_OPTION) {
-               Reg = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                       XEMACPSS_DMACR_OFFSET);
-               Reg &= ~XEMACPSS_DMACR_TCPCKSUM_MASK;
-               XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                                        XEMACPSS_DMACR_OFFSET, Reg);
-       }
-
-       /* Disable transmitter */
-       if (Options & XEMACPSS_TRANSMITTER_ENABLE_OPTION) {
-               Reg = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                       XEMACPSS_NWCTRL_OFFSET);
-               Reg &= ~XEMACPSS_NWCTRL_TXEN_MASK;
-               XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                                  XEMACPSS_NWCTRL_OFFSET, Reg);
-       }
-
-       /* Disable receiver */
-       if (Options & XEMACPSS_RECEIVER_ENABLE_OPTION) {
-               Reg = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                       XEMACPSS_NWCTRL_OFFSET);
-               Reg &= ~XEMACPSS_NWCTRL_RXEN_MASK;
-               XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                                  XEMACPSS_NWCTRL_OFFSET, Reg);
-       }
-
-       /* The remaining options not handled here are managed elsewhere in the
-        * driver. No register modifications are needed at this time. Reflecting
-        * option in InstancePtr->Options is good enough for now.
-        */
-
-       /* Set options word to its new value */
-       InstancePtr->Options &= ~Options;
-
-       return (XST_SUCCESS);
-}
-
-
-/*****************************************************************************/
-/**
- * Get current option settings
- *
- * @param InstancePtr is a pointer to the instance to be worked on.
- *
- * @return
- * A bitmask of XTE_*_OPTION constants. Any bit set to 1 is to be interpreted
- * as a set opion.
- *
- * @note
- * See zynq_gem.h for a description of the available options.
- *
- *****************************************************************************/
-u32 XEmacPss_GetOptions(XEmacPss *InstancePtr)
-{
-       XASSERT_NONVOID(InstancePtr != NULL);
-       XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
-       return (InstancePtr->Options);
-}
-
-
-/*****************************************************************************/
-/**
- * Send a pause packet
- *
- * @param InstancePtr is a pointer to the instance to be worked on.
- *
- * @return
- * - XST_SUCCESS if pause frame transmission was initiated
- * - XST_DEVICE_IS_STOPPED if the device has not been started.
- *
- *****************************************************************************/
-int XEmacPss_SendPausePacket(XEmacPss *InstancePtr)
-{
-       u32 Reg;
-
-       XASSERT_NONVOID(InstancePtr != NULL);
-       XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
-       /* Make sure device is ready for this operation */
-       if (InstancePtr->IsStarted != XCOMPONENT_IS_STARTED) {
-               return (XST_DEVICE_IS_STOPPED);
-       }
-
-       /* Send flow control frame */
-       Reg = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                               XEMACPSS_NWCTRL_OFFSET);
-       Reg |= XEMACPSS_NWCTRL_PAUSETX_MASK;
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          XEMACPSS_NWCTRL_OFFSET, Reg);
-       return (XST_SUCCESS);
-}
-
-/*****************************************************************************/
-/**
- * XEmacPss_GetOperatingSpeed gets the current operating link speed. This may
- * be the value set by XEmacPss_SetOperatingSpeed() or a hardware default.
- *
- * @param InstancePtr references the TEMAC channel on which to operate.
- *
- * @return XEmacPss_GetOperatingSpeed returns the link speed in units of
- *         megabits per second.
- *
- * @note
- *
- *****************************************************************************/
-u16 XEmacPss_GetOperatingSpeed(XEmacPss *InstancePtr)
-{
-       u32 Reg;
-
-       XASSERT_NONVOID(InstancePtr != NULL);
-       XASSERT_NONVOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-
-       Reg = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                       XEMACPSS_NWCFG_OFFSET);
-
-       if (Reg & XEMACPSS_NWCFG_1000_MASK) {
-               return (1000);
-       } else {
-               if (Reg & XEMACPSS_NWCFG_100_MASK) {
-                       return (100);
-               } else {
-                       return (10);
-               }
-       }
-}
-
-
-/*****************************************************************************/
-/**
- * XEmacPss_SetOperatingSpeed sets the current operating link speed. For any
- * traffic to be passed, this speed must match the current MII/GMII/SGMII/RGMII
- * link speed.
- *
- * @param InstancePtr references the TEMAC channel on which to operate.
- * @param Speed is the speed to set in units of Mbps. Valid values are 10, 100,
- *        or 1000. XEmacPss_SetOperatingSpeed ignores invalid values.
- *
- * @note
- *
- *****************************************************************************/
-void XEmacPss_SetOperatingSpeed(XEmacPss *InstancePtr, u16 Speed)
-{
-        u32 Reg;
-
-        XASSERT_VOID(InstancePtr != NULL);
-        XASSERT_VOID(InstancePtr->IsReady == XCOMPONENT_IS_READY);
-        XASSERT_VOID((Speed == 10) || (Speed == 100) || (Speed == 1000));
-
-        Reg = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                       XEMACPSS_NWCFG_OFFSET);
-       Reg &= ~(XEMACPSS_NWCFG_1000_MASK | XEMACPSS_NWCFG_100_MASK);
-
-       switch (Speed) {
-       case 10:
-                break;
-
-        case 100:
-                Reg |= XEMACPSS_NWCFG_100_MASK;
-                break;
-
-        case 1000:
-                Reg |= XEMACPSS_NWCFG_1000_MASK;
-                break;
-
-        default:
-                return;
-        }
-
-        /* Set register and return */
-        XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                XEMACPSS_NWCFG_OFFSET, Reg);
-}
-
-
-/*****************************************************************************/
-/**
- * Set the MDIO clock divisor.
- *
- * Calculating the divisor:
- *
- * <pre>
- *              f[HOSTCLK]
- *   f[MDC] = -----------------
- *            (1 + Divisor) * 2
- * </pre>
- *
- * where f[HOSTCLK] is the bus clock frequency in MHz, and f[MDC] is the
- * MDIO clock frequency in MHz to the PHY. Typically, f[MDC] should not
- * exceed 2.5 MHz. Some PHYs can tolerate faster speeds which means faster
- * access. Here is the table to show values to generate MDC,
- *
- * <pre>
- * 000 : divide pclk by   8 (pclk up to  20 MHz)
- * 001 : divide pclk by  16 (pclk up to  40 MHz)
- * 010 : divide pclk by  32 (pclk up to  80 MHz)
- * 011 : divide pclk by  48 (pclk up to 120 MHz)
- * 100 : divide pclk by  64 (pclk up to 160 MHz)
- * 101 : divide pclk by  96 (pclk up to 240 MHz)
- * 110 : divide pclk by 128 (pclk up to 320 MHz)
- * 111 : divide pclk by 224 (pclk up to 540 MHz)
- * </pre>
- *
- * @param InstancePtr is a pointer to the instance to be worked on.
- * @param Divisor is the divisor to set. Range is 0b000 to 0b111.
- *
- *****************************************************************************/
-void XEmacPss_SetMdioDivisor(XEmacPss *InstancePtr, XEmacPss_MdcDiv Divisor)
-{
-       u32 Reg;
-
-       XASSERT_VOID(InstancePtr != NULL);
-       XASSERT_VOID(InstancePtr->IsReady == XCOMPONENT_IS_READY)
-               XASSERT_VOID(Divisor <= 0x7);   /* only last three bits are valid */
-
-       Reg = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                               XEMACPSS_NWCFG_OFFSET);
-       /* clear these three bits, could be done with mask */
-       Reg &= ~XEMACPSS_NWCFG_MDCCLKDIV_MASK;
-
-       Reg |= (Divisor << XEMACPSS_NWCFG_MDC_SHIFT_MASK);
-
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          XEMACPSS_NWCFG_OFFSET, Reg);
-
-}
-
-
-/*****************************************************************************/
-/**
-* Read the current value of the PHY register indicated by the PhyAddress and
-* the RegisterNum parameters. The MAC provides the driver with the ability to
-* talk to a PHY that adheres to the Media Independent Interface (MII) as
-* defined in the IEEE 802.3 standard.
-*
-* Prior to PHY access with this function, the user should have setup the MDIO
-* clock with XEmacPss_SetMdioDivisor().
-*
-* @param InstancePtr is a pointer to the XEmacPss instance to be worked on.
-* @param PhyAddress is the address of the PHY to be read (supports multiple
-*        PHYs)
-* @param RegisterNum is the register number, 0-31, of the specific PHY register
-*        to read
-* @param PhyDataPtr is an output parameter, and points to a 16-bit buffer into
-*        which the current value of the register will be copied.
-*
-* @return
-*
-* - XST_SUCCESS if the PHY was read from successfully
-* - XST_EMAC_MII_BUSY if there is another PHY operation in progress
-*
-* @note
-*
-* This function is not thread-safe. The user must provide mutually exclusive
-* access to this function if there are to be multiple threads that can call it.
-*
-* There is the possibility that this function will not return if the hardware
-* is broken (i.e., it never sets the status bit indicating that the read is
-* done). If this is of concern to the user, the user should provide a mechanism
-* suitable to their needs for recovery.
-*
-* For the duration of this function, all host interface reads and writes are
-* blocked to the current XEmacPss instance.
-*
-******************************************************************************/
-int XEmacPss_PhyRead(XEmacPss *InstancePtr, u32 PhyAddress,
-                    u32 RegisterNum, u16 *PhyDataPtr)
-{
-       u32 Mgtcr;
-       volatile u32 Ipisr;
-
-       XASSERT_NONVOID(InstancePtr != NULL);
-
-       /* Make sure no other PHY operation is currently in progress */
-       if (!(XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                               XEMACPSS_NWSR_OFFSET) &
-             XEMACPSS_NWSR_MDIOIDLE_MASK)) {
-               return (XST_EMAC_MII_BUSY);
-       }
-
-       /* Construct Mgtcr mask for the operation */
-       Mgtcr = XEMACPSS_PHYMNTNC_OP_MASK | XEMACPSS_PHYMNTNC_OP_R_MASK |
-               (PhyAddress << XEMACPSS_PHYMNTNC_PHYAD_SHIFT_MASK) |
-               (RegisterNum << XEMACPSS_PHYMNTNC_PHREG_SHIFT_MASK);
-
-       /* Write Mgtcr and wait for completion */
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          XEMACPSS_PHYMNTNC_OFFSET, Mgtcr);
-
-       do {
-               Ipisr = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                         XEMACPSS_NWSR_OFFSET);
-       } while ((Ipisr & XEMACPSS_NWSR_MDIOIDLE_MASK) == 0);
-
-       /* Read data */
-       *PhyDataPtr = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                       XEMACPSS_PHYMNTNC_OFFSET);
-
-       return (XST_SUCCESS);
-}
-
-
-/*****************************************************************************/
-/**
-* Write data to the specified PHY register. The Ethernet driver does not
-* require the device to be stopped before writing to the PHY.  Although it is
-* probably a good idea to stop the device, it is the responsibility of the
-* application to deem this necessary. The MAC provides the driver with the
-* ability to talk to a PHY that adheres to the Media Independent Interface
-* (MII) as defined in the IEEE 802.3 standard.
-*
-* Prior to PHY access with this function, the user should have setup the MDIO
-* clock with XEmacPss_SetMdioDivisor().
-*
-* @param InstancePtr is a pointer to the XEmacPss instance to be worked on.
-* @param PhyAddress is the address of the PHY to be written (supports multiple
-*        PHYs)
-* @param RegisterNum is the register number, 0-31, of the specific PHY register
-*        to write
-* @param PhyData is the 16-bit value that will be written to the register
-*
-* @return
-*
-* - XST_SUCCESS if the PHY was written to successfully. Since there is no error
-*   status from the MAC on a write, the user should read the PHY to verify the
-*   write was successful.
-* - XST_EMAC_MII_BUSY if there is another PHY operation in progress
-*
-* @note
-*
-* This function is not thread-safe. The user must provide mutually exclusive
-* access to this function if there are to be multiple threads that can call it.
-*
-* There is the possibility that this function will not return if the hardware
-* is broken (i.e., it never sets the status bit indicating that the write is
-* done). If this is of concern to the user, the user should provide a mechanism
-* suitable to their needs for recovery.
-*
-* For the duration of this function, all host interface reads and writes are
-* blocked to the current XEmacPss instance.
-*
-******************************************************************************/
-int XEmacPss_PhyWrite(XEmacPss *InstancePtr, u32 PhyAddress,
-                     u32 RegisterNum, u16 PhyData)
-{
-       u32 Mgtcr;
-       volatile u32 Ipisr;
-
-       XASSERT_NONVOID(InstancePtr != NULL);
-
-       /* Make sure no other PHY operation is currently in progress */
-       if (!(XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                               XEMACPSS_NWSR_OFFSET) &
-             XEMACPSS_NWSR_MDIOIDLE_MASK)) {
-               return (XST_EMAC_MII_BUSY);
-       }
-
-       /* Construct Mgtcr mask for the operation */
-       Mgtcr = XEMACPSS_PHYMNTNC_OP_MASK | XEMACPSS_PHYMNTNC_OP_W_MASK |
-               (PhyAddress << XEMACPSS_PHYMNTNC_PHYAD_SHIFT_MASK) |
-               (RegisterNum << XEMACPSS_PHYMNTNC_PHREG_SHIFT_MASK) | PhyData;
-
-       /* Write Mgtcr and wait for completion */
-       XEmacPss_WriteReg(InstancePtr->Config.BaseAddress,
-                          XEMACPSS_PHYMNTNC_OFFSET, Mgtcr);
-
-       do {
-               Ipisr = XEmacPss_ReadReg(InstancePtr->Config.BaseAddress,
-                                         XEMACPSS_NWSR_OFFSET);
-       } while ((Ipisr & XEMACPSS_NWSR_MDIOIDLE_MASK) == 0);
-
-       return (XST_SUCCESS);
-}
diff --git a/drivers/net/zynq_gem_g.c b/drivers/net/zynq_gem_g.c
deleted file mode 100644 (file)
index 0439916..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * (C) Copyright 2012 Xilinx
- *
- * This file contains a configuration table that specifies the configuration of
- * ethernet devices in the system.
- *
- * 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.
- *
- * 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., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-/***************************** Include Files *********************************/
-
-#include "zynq_gem.h"
-
-/************************** Constant Definitions *****************************/
-
-
-/***************** Macros (Inline Functions) Definitions *********************/
-
-
-/************************** Function Prototypes ******************************/
-
-
-/************************** Variable Prototypes ******************************/
-
-/*
- * The configuration table for emacps device
- */
-
-XEmacPss_Config XEmacPss_ConfigTable[XPAR_XEMACPSS_NUM_INSTANCES] = {
-       {
-        XPAR_XEMACPSS_0_DEVICE_ID,  /* Device ID */
-        XPAR_XEMACPSS_0_BASEADDR    /* Device base address */
-       },
-       {
-        XPAR_XEMACPSS_1_DEVICE_ID,  /* Device ID */
-        XPAR_XEMACPSS_1_BASEADDR    /* Device base address */
-       }
-};
diff --git a/drivers/net/zynq_gem_hw.h b/drivers/net/zynq_gem_hw.h
deleted file mode 100644 (file)
index 5a3b495..0000000
+++ /dev/null
@@ -1,539 +0,0 @@
-/*
- * (C) Copyright 2012 Xilinx
- *
- * This header file contains identifiers and low-level driver functions (or
- * macros) that can be used to access the PSS Ethernet MAC (XEmacPss) device.
- * High-level driver functions are defined in zynq_gem.h.
- *
- * 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.
- *
- * 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., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef XEMACPSS_HW_H          /* prevent circular inclusions */
-#define XEMACPSS_HW_H          /* by using protection macros */
-
-/***************************** Include Files *********************************/
-
-//#include "xbasic_types.h"
-//#include "xio.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/************************** Constant Definitions *****************************/
-
-#define XEMACPSS_MAX_MAC_ADDR     4   /**< Maxmum number of mac address
-                                           supported */
-#define XEMACPSS_MAX_TYPE_ID      4   /**< Maxmum number of type id supported */
-#define XEMACPSS_BD_ALIGNMENT     4   /**< Minimum buffer descriptor alignment
-                                           on the local bus */
-#define XEMACPSS_RX_BUF_ALIGNMENT 4   /**< Minimum buffer alignment when using
-                                           options that impose alignment
-                                           restrictions on the buffer data on
-                                           the local bus */
-
-/** @name Direction identifiers
- *
- *  These are used by several functions and callbacks that need
- *  to specify whether an operation specifies a send or receive channel.
- * @{
- */
-#define XEMACPSS_SEND        1       /**< send direction */
-#define XEMACPSS_RECV        2       /**< receive direction */
-/*@}*/
-
-/**  @name MDC clock division
- *  currently supporting 8, 16, 32, 48, 64, 96, 128, 224.
- * @{
- */
-typedef enum { XMDC_DIV_8 = 0, XMDC_DIV_16, XMDC_DIV_32, XMDC_DIV_48,
-       XMDC_DIV_64, XMDC_DIV_96, XMDC_DIV_128, XMDC_DIV_224
-} XEmacPss_MdcDiv;
-
-/*@}*/
-
-#define XEMACPSS_RX_BUF_SIZE 1536 /**< Specify the receive buffer size in
-                                       bytes, 64, 128, ... 10240 */
-#define XEMACPSS_RX_BUF_UNIT   64 /**< Number of receive buffer bytes as a
-                                       unit, this is HW setup */
-
-#define XEMACPSS_MAX_RXBD     128 /**< Size of RX buffer descriptor queues */
-#define XEMACPSS_MAX_TXBD     128 /**< Size of TX buffer descriptor queues */
-
-#define XEMACPSS_MAX_HASH_BITS 64 /**< Maximum value for hash bits. 2**6 */
-
-/* Register offset definitions. Unless otherwise noted, register access is
- * 32 bit. Names are self explained here.
- */
-
-#define XEMACPSS_NWCTRL_OFFSET        0x00000000 /**< Network Control reg */
-#define XEMACPSS_NWCFG_OFFSET         0x00000004 /**< Network Config reg */
-#define XEMACPSS_NWSR_OFFSET          0x00000008 /**< Network Status reg */
-
-#define XEMACPSS_DMACR_OFFSET         0x00000010 /**< DMA Control reg */
-#define XEMACPSS_TXSR_OFFSET          0x00000014 /**< TX Status reg */
-#define XEMACPSS_RXQBASE_OFFSET       0x00000018 /**< RX Q Base address reg */
-#define XEMACPSS_TXQBASE_OFFSET       0x0000001C /**< TX Q Base address reg */
-#define XEMACPSS_RXSR_OFFSET          0x00000020 /**< RX Status reg */
-
-#define XEMACPSS_ISR_OFFSET           0x00000024 /**< Interrupt Status reg */
-#define XEMACPSS_IER_OFFSET           0x00000028 /**< Interrupt Enable reg */
-#define XEMACPSS_IDR_OFFSET           0x0000002C /**< Interrupt Disable reg */
-#define XEMACPSS_IMR_OFFSET           0x00000030 /**< Interrupt Mask reg */
-
-#define XEMACPSS_PHYMNTNC_OFFSET      0x00000034 /**< Phy Maintaince reg */
-#define XEMACPSS_RXPAUSE_OFFSET       0x00000038 /**< RX Pause Time reg */
-#define XEMACPSS_TXPAUSE_OFFSET       0x0000003C /**< TX Pause Time reg */
-
-#define XEMACPSS_HASHL_OFFSET         0x00000080 /**< Hash Low address reg */
-#define XEMACPSS_HASHH_OFFSET         0x00000084 /**< Hash High address reg */
-
-#define XEMACPSS_LADDR1L_OFFSET       0x00000088 /**< Specific1 addr low reg */
-#define XEMACPSS_LADDR1H_OFFSET       0x0000008C /**< Specific1 addr high reg */
-#define XEMACPSS_LADDR2L_OFFSET       0x00000090 /**< Specific2 addr low reg */
-#define XEMACPSS_LADDR2H_OFFSET       0x00000094 /**< Specific2 addr high reg */
-#define XEMACPSS_LADDR3L_OFFSET       0x00000098 /**< Specific3 addr low reg */
-#define XEMACPSS_LADDR3H_OFFSET       0x0000009C /**< Specific3 addr high reg */
-#define XEMACPSS_LADDR4L_OFFSET       0x000000A0 /**< Specific4 addr low reg */
-#define XEMACPSS_LADDR4H_OFFSET       0x000000A4 /**< Specific4 addr high reg */
-
-#define XEMACPSS_MATCH1_OFFSET        0x000000A8 /**< Type ID1 Match reg */
-#define XEMACPSS_MATCH2_OFFSET        0x000000AC /**< Type ID2 Match reg */
-#define XEMACPSS_MATCH3_OFFSET        0x000000B0 /**< Type ID3 Match reg */
-#define XEMACPSS_MATCH4_OFFSET        0x000000B4 /**< Type ID4 Match reg */
-
-#define XEMACPSS_STRETCH_OFFSET       0x000000BC /**< IPG Stretch reg */
-
-#define XEMACPSS_OCTTXL_OFFSET        0x00000100 /**< Octects transmitted Low
-                                                      reg */
-#define XEMACPSS_OCTTXH_OFFSET        0x00000104 /**< Octects transmitted High
-                                                      reg */
-
-#define XEMACPSS_TXCNT_OFFSET         0x00000108 /**< Error-free Frmaes
-                                                      transmitted counter */
-#define XEMACPSS_TXBCCNT_OFFSET       0x0000010C /**< Error-free Broadcast
-                                                      Frames counter*/
-#define XEMACPSS_TXMCCNT_OFFSET       0x00000110 /**< Error-free Multicast
-                                                      Frame counter */
-#define XEMACPSS_TXPAUSECNT_OFFSET    0x00000114 /**< Pause Frames Transmitted
-                                                      Counter */
-#define XEMACPSS_TX64CNT_OFFSET       0x00000118 /**< Error-free 64 byte Frames
-                                                      Transmitted counter */
-#define XEMACPSS_TX65CNT_OFFSET       0x0000011C /**< Error-free 65-127 byte
-                                                      Frames Transmitted
-                                                      counter */
-#define XEMACPSS_TX128CNT_OFFSET      0x00000120 /**< Error-free 128-255 byte
-                                                      Frames Transmitted
-                                                      counter*/
-#define XEMACPSS_TX256CNT_OFFSET      0x00000124 /**< Error-free 256-511 byte
-                                                      Frames transmitted
-                                                      counter */
-#define XEMACPSS_TX512CNT_OFFSET      0x00000128 /**< Error-free 512-1023 byte
-                                                      Frames transmitted
-                                                      counter */
-#define XEMACPSS_TX1024CNT_OFFSET     0x0000012C /**< Error-free 1024-1518 byte
-                                                      Frames transmitted
-                                                      counter */
-#define XEMACPSS_TX1519CNT_OFFSET     0x00000130 /**< Error-free larger than
-                                                      1519 byte Frames
-                                                      transmitted counter */
-#define XEMACPSS_TXURUNCNT_OFFSET     0x00000134 /**< TX under run error
-                                                      counter */
-
-#define XEMACPSS_SNGLCOLLCNT_OFFSET   0x00000138 /**< Single Collision Frame
-                                                      Counter */
-#define XEMACPSS_MULTICOLLCNT_OFFSET  0x0000013C /**< Multiple Collision Frame
-                                                      Counter */
-#define XEMACPSS_EXCESSCOLLCNT_OFFSET 0x00000140 /**< Excessive Collision Frame
-                                                      Counter */
-#define XEMACPSS_LATECOLLCNT_OFFSET   0x00000144 /**< Late Collision Frame
-                                                      Counter */
-#define XEMACPSS_TXDEFERCNT_OFFSET    0x00000148 /**< Deferred Transmission
-                                                      Frame Counter */
-#define XEMACPSS_TXCSENSECNT_OFFSET   0x0000014C /**< Transmit Carrier Sense
-                                                      Error Counter */
-
-#define XEMACPSS_OCTRXL_OFFSET        0x00000150 /**< Octects Received register
-                                                      Low */
-#define XEMACPSS_OCTRXH_OFFSET        0x00000154 /**< Octects Received register
-                                                      High */
-
-#define XEMACPSS_RXCNT_OFFSET         0x00000158 /**< Error-free Frames
-                                                      Received Counter */
-#define XEMACPSS_RXBROADCNT_OFFSET    0x0000015C /**< Error-free Broadcast
-                                                      Frames Received Counter */
-#define XEMACPSS_RXMULTICNT_OFFSET    0x00000160 /**< Error-free Multicast
-                                                      Frames Received Counter */
-#define XEMACPSS_RXPAUSECNT_OFFSET    0x00000164 /**< Pause Frames
-                                                      Received Counter */
-#define XEMACPSS_RX64CNT_OFFSET       0x00000168 /**< Error-free 64 byte Frames
-                                                      Received Counter */
-#define XEMACPSS_RX65CNT_OFFSET       0x0000016C /**< Error-free 65-127 byte
-                                                      Frames Received Counter */
-#define XEMACPSS_RX128CNT_OFFSET      0x00000170 /**< Error-free 128-255 byte
-                                                      Frames Received Counter */
-#define XEMACPSS_RX256CNT_OFFSET      0x00000174 /**< Error-free 256-512 byte
-                                                      Frames Received Counter */
-#define XEMACPSS_RX512CNT_OFFSET      0x00000178 /**< Error-free 512-1023 byte
-                                                      Frames Received Counter */
-#define XEMACPSS_RX1024CNT_OFFSET     0x0000017C /**< Error-free 1024-1518 byte
-                                                      Frames Received Counter */
-#define XEMACPSS_RX1519CNT_OFFSET     0x00000180 /**< Error-free 1519-max byte
-                                                      Frames Received Counter */
-#define XEMACPSS_RXUNDRCNT_OFFSET     0x00000184 /**< Undersize Frames Received
-                                                      Counter */
-#define XEMACPSS_RXOVRCNT_OFFSET      0x00000188 /**< Oversize Frames Received
-                                                      Counter */
-#define XEMACPSS_RXJABCNT_OFFSET      0x0000018C /**< Jabbers Received
-                                                      Counter */
-#define XEMACPSS_RXFCSCNT_OFFSET      0x00000190 /**< Frame Check Sequence
-                                                      Error Counter */
-#define XEMACPSS_RXLENGTHCNT_OFFSET   0x00000194 /**< Length Field Error
-                                                      Counter */
-#define XEMACPSS_RXSYMBCNT_OFFSET     0x00000198 /**< Symbol Error Counter */
-#define XEMACPSS_RXALIGNCNT_OFFSET    0x0000019C /**< Alignment Error Counter */
-#define XEMACPSS_RXRESERRCNT_OFFSET   0x000001A0 /**< Receive Resource Error
-                                                      Counter */
-#define XEMACPSS_RXORCNT_OFFSET       0x000001A4 /**< Receive Overrun Counter */
-#define XEMACPSS_RXIPCCNT_OFFSET      0x000001A8 /**< IP header Checksum Error 
-                                                      Counter */
-#define XEMACPSS_RXTCPCCNT_OFFSET     0x000001AC /**< TCP Checksum Error
-                                                      Counter */
-#define XEMACPSS_RXUDPCCNT_OFFSET     0x000001B0 /**< UDP Checksum Error
-                                                      Counter */
-#define XEMACPSS_LAST_OFFSET          0x000001B4 /**< Last statistic counter
-                                                     offset, for clearing */
-
-#define XEMACPSS_1588_SEC_OFFSET      0x000001D0 /**< 1588 second counter */
-#define XEMACPSS_1588_NANOSEC_OFFSET  0x000001D4 /**< 1588 nanosecond counter */
-#define XEMACPSS_1588_ADJ_OFFSET      0x000001D8 /**< 1588 nanosecond
-                                                     adjustment counter */
-#define XEMACPSS_1588_INC_OFFSET      0x000001DC /**< 1588 nanosecond
-                                                     increment counter */
-#define XEMACPSS_PTP_TXSEC_OFFSET     0x000001E0 /**< 1588 PTP transmit second
-                                                     counter */
-#define XEMACPSS_PTP_TXNANOSEC_OFFSET 0x000001E4 /**< 1588 PTP transmit 
-                                                     nanosecond counter */
-#define XEMACPSS_PTP_RXSEC_OFFSET     0x000001E8 /**< 1588 PTP receive second
-                                                     counter */
-#define XEMACPSS_PTP_RXNANOSEC_OFFSET 0x000001EC /**< 1588 PTP receive 
-                                                     nanosecond counter */
-#define XEMACPSS_PTPP_TXSEC_OFFSET    0x000001F0 /**< 1588 PTP peer transmit
-                                                     second counter */
-#define XEMACPSS_PTPP_TXNANOSEC_OFFSET 0x000001F4 /**< 1588 PTP peer transmit 
-                                                     nanosecond counter */
-#define XEMACPSS_PTPP_RXSEC_OFFSET    0x000001F8 /**< 1588 PTP peer receive
-                                                     second counter */
-#define XEMACPSS_PTPP_RXNANOSEC_OFFSET 0x000001FC /**< 1588 PTP peer receive 
-                                                     nanosecond counter */
-
-/* Define some bit positions for registers. */
-
-/** @name network control register bit definitions
- * @{
- */
-#define XEMACPSS_NWCTRL_ZEROPAUSETX_MASK 0x00000800 /**< Transmit zero quantum
-                                                         pause frame */
-#define XEMACPSS_NWCTRL_PAUSETX_MASK     0x00000800 /**< Transmit pause frame */
-#define XEMACPSS_NWCTRL_HALTTX_MASK      0x00000400 /**< Halt transmission
-                                                         after current frame */
-#define XEMACPSS_NWCTRL_STARTTX_MASK     0x00000200 /**< Start tx (tx_go) */
-
-#define XEMACPSS_NWCTRL_STATWEN_MASK     0x00000080 /**< Enable writing to
-                                                         stat counters */
-#define XEMACPSS_NWCTRL_STATINC_MASK     0x00000040 /**< Increment statistic
-                                                         registers */
-#define XEMACPSS_NWCTRL_STATCLR_MASK     0x00000020 /**< Clear statistic
-                                                         registers */
-#define XEMACPSS_NWCTRL_MDEN_MASK        0x00000010 /**< Enable MDIO port */
-#define XEMACPSS_NWCTRL_TXEN_MASK        0x00000008 /**< Enable transmit */
-#define XEMACPSS_NWCTRL_RXEN_MASK        0x00000004 /**< Enable receive */
-#define XEMACPSS_NWCTRL_LOOPEN_MASK      0x00000002 /**< local loopback */
-/*@}*/
-
-/** @name network configuration register bit definitions
- * @{
- */
-#define XEMACPSS_NWCFG_BADPREAMBEN_MASK 0x20000000 /**< disable rejection of
-                                                        non-standard preamble */
-#define XEMACPSS_NWCFG_IPDSTRETCH_MASK  0x10000000 /**< enable transmit IPG */
-#define XEMACPSS_NWCFG_FCSIGNORE_MASK   0x04000000 /**< disable rejection of
-                                                        FCS error */
-#define XEMACPSS_NWCFG_HDRXEN_MASK      0x02000000 /**< RX half duplex */
-#define XEMACPSS_NWCFG_RXCHKSUMEN_MASK  0x01000000 /**< enable RX checksum
-                                                        offload */
-#define XEMACPSS_NWCFG_PAUSECOPYDI_MASK 0x00800000 /**< Do not copy pause
-                                                        Frames to memory */
-#define XEMACPSS_NWCFG_MDC_SHIFT_MASK   18        /**< shift bits for MDC */
-#define XEMACPSS_NWCFG_MDCCLKDIV_MASK   0x001C0000 /**< MDC Mask PCLK divisor */
-#define XEMACPSS_NWCFG_FCSREM_MASK      0x00020000 /**< Discard FCS from
-                                                        received frames */
-#define XEMACPSS_NWCFG_LENGTHERRDSCRD_MASK 0x00010000
-/**< RX length error discard */
-#define XEMACPSS_NWCFG_RXOFFS_MASK      0x0000C000 /**< RX buffer offset */
-#define XEMACPSS_NWCFG_PAUSEEN_MASK     0x00002000 /**< Enable pause RX */
-#define XEMACPSS_NWCFG_RETRYTESTEN_MASK 0x00001000 /**< Retry test */
-#define XEMACPSS_NWCFG_EXTADDRMATCHEN_MASK 0x00000200
-/**< External address match enable */
-#define XEMACPSS_NWCFG_1000_MASK        0x00000400 /**< 1000 Mbps */
-#define XEMACPSS_NWCFG_1536RXEN_MASK    0x00000100 /**< Enable 1536 byte
-                                                        frames reception */
-#define XEMACPSS_NWCFG_UCASTHASHEN_MASK 0x00000080 /**< Receive unicast hash
-                                                        frames */
-#define XEMACPSS_NWCFG_MCASTHASHEN_MASK 0x00000040 /**< Receive multicast hash
-                                                        frames */
-#define XEMACPSS_NWCFG_BCASTDI_MASK     0x00000020 /**< Do not receive
-                                                        broadcast frames */
-#define XEMACPSS_NWCFG_COPYALLEN_MASK   0x00000010 /**< Copy all frames */
-#define XEMACPSS_NWCFG_JUMBO_MASK       0x00000008 /**< Jumbo frames */
-#define XEMACPSS_NWCFG_NVLANDISC_MASK   0x00000004 /**< Receive only VLAN
-                                                        frames */
-#define XEMACPSS_NWCFG_FDEN_MASK        0x00000002 /**< full duplex */
-#define XEMACPSS_NWCFG_100_MASK         0x00000001 /**< 100 Mbps */
-/*@}*/
-
-/** @name network status register bit definitaions
- * @{
- */
-#define XEMACPSS_NWSR_MDIOIDLE_MASK     0x00000004 /**< PHY management idle */
-#define XEMACPSS_NWSR_MDIO_MASK         0x00000002 /**< Status of mdio_in */
-/*@}*/
-
-
-/** @name MAC address register word 1 mask
- * @{
- */
-#define XEMACPSS_LADDR_MACH_MASK        0x0000FFFF /**< Address bits[47:32]
-                                                      bit[31:0] are in BOTTOM */
-/*@}*/
-
-
-/** @name DMA control register bit definitions
- * @{
- */
-#define XEMACPSS_DMACR_RXBUF_MASK      0x00FF0000 /**< Mask bit for RX buffer
-                                                       size */
-#define XEMACPSS_DMACR_RXBUF_SHIFT     16        /**< Shift bit for RX buffer
-                                                       size */
-#define XEMACPSS_DMACR_TCPCKSUM_MASK   0x00000800 /**< enable/disable TX
-                                                       checksum offload */
-#define XEMACPSS_DMACR_TXSIZE_MASK     0x00000400 /**< TX buffer memory size */
-#define XEMACPSS_DMACR_RXSIZE_MASK     0x00000300 /**< RX buffer memory size */
-#define XEMACPSS_DMACR_ENDIAN_MASK     0x00000080 /**< endian configuration */
-#define XEMACPSS_DMACR_BLENGTH_MASK    0x0000001F /**< buffer burst length */
-/*@}*/
-
-/** @name transmit status register bit definitions
- * @{
- */
-#define XEMACPSS_TXSR_HRESPNOK_MASK    0x00000100 /**< Transmit hresp not OK */
-#define XEMACPSS_TXSR_URUN_MASK        0x00000040 /**< Transmit underrun */
-#define XEMACPSS_TXSR_TXCOMPL_MASK     0x00000020 /**< Transmit completed OK */
-#define XEMACPSS_TXSR_BUFEXH_MASK      0x00000010 /**< Transmit buffs exhausted
-                                                       mid frame */
-#define XEMACPSS_TXSR_TXGO_MASK        0x00000008 /**< Status of go flag */
-#define XEMACPSS_TXSR_RXOVR_MASK       0x00000004 /**< Retry limit exceeded */
-#define XEMACPSS_TXSR_FRAMERX_MASK     0x00000002 /**< Collision tx frame */
-#define XEMACPSS_TXSR_USEDREAD_MASK    0x00000001 /**< TX buffer used bit set */
-
-#define XEMACPSS_TXSR_ERROR_MASK      (XEMACPSS_TXSR_HRESPNOK_MASK | \
-                                       XEMACPSS_TXSR_URUN_MASK | \
-                                       XEMACPSS_TXSR_BUFEXH_MASK | \
-                                       XEMACPSS_TXSR_RXOVR_MASK | \
-                                       XEMACPSS_TXSR_FRAMERX_MASK | \
-                                       XEMACPSS_TXSR_USEDREAD_MASK)
-/*@}*/
-
-/** @name receive status register bit definitions
- * @{
- */
-#define XEMACPSS_RXSR_HRESPNOK_MASK    0x00000008 /**< Receive hresp not OK */
-#define XEMACPSS_RXSR_RXOVR_MASK       0x00000004 /**< Receive overrun */
-#define XEMACPSS_RXSR_FRAMERX_MASK     0x00000002 /**< Frame received OK */
-#define XEMACPSS_RXSR_BUFFNA_MASK      0x00000001 /**< RX buffer used bit set */
-
-#define XEMACPSS_RXSR_ERROR_MASK      (XEMACPSS_RXSR_HRESPNOK_MASK | \
-                                       XEMACPSS_RXSR_RXOVR_MASK | \
-                                       XEMACPSS_RXSR_BUFFNA_MASK)
-/*@}*/
-
-/** @name interrupts bit definitions
- * Bits definitions are same in XEMACPSS_ISR_OFFSET,
- * XEMACPSS_IER_OFFSET, XEMACPSS_IDR_OFFSET, and XEMACPSS_IMR_OFFSET
- * @{
- */
-#define XEMACPSS_IXR_PTPPSTX_MASK    0x02000000 /**< PTP Psync transmitted */
-#define XEMACPSS_IXR_PTPPDRTX_MASK   0x01000000 /**< PTP Pdelay_req
-                                                    transmitted */
-#define XEMACPSS_IXR_PTPSTX_MASK     0x00800000 /**< PTP Sync transmitted */
-#define XEMACPSS_IXR_PTPDRTX_MASK    0x00400000 /**< PTP Delay_req transmitted
-                                               */
-#define XEMACPSS_IXR_PTPPSRX_MASK    0x00200000 /**< PTP Psync received */
-#define XEMACPSS_IXR_PTPPDRRX_MASK   0x00100000 /**< PTP Pdelay_req received */
-#define XEMACPSS_IXR_PTPSRX_MASK     0x00080000 /**< PTP Sync received */
-#define XEMACPSS_IXR_PTPDRRX_MASK    0x00040000 /**< PTP Delay_req received */
-#define XEMACPSS_IXR_PAUSETX_MASK    0x00004000        /**< Pause frame transmitted */
-#define XEMACPSS_IXR_PAUSEZERO_MASK  0x00002000        /**< Pause time has reached
-                                                     zero */
-#define XEMACPSS_IXR_PAUSENZERO_MASK 0x00001000        /**< Pause frame received */
-#define XEMACPSS_IXR_HRESPNOK_MASK   0x00000800        /**< hresp not ok */
-#define XEMACPSS_IXR_RXOVR_MASK      0x00000400        /**< Receive overrun occurred */
-#define XEMACPSS_IXR_TXCOMPL_MASK    0x00000080        /**< Frame transmitted ok */
-#define XEMACPSS_IXR_TXEXH_MASK      0x00000040        /**< Transmit err occurred or
-                                                     no buffers*/
-#define XEMACPSS_IXR_RETRY_MASK      0x00000020        /**< Retry limit exceeded */
-#define XEMACPSS_IXR_URUN_MASK       0x00000010        /**< Transmit underrun */
-#define XEMACPSS_IXR_TXUSED_MASK     0x00000008        /**< Tx buffer used bit read */
-#define XEMACPSS_IXR_RXUSED_MASK     0x00000004        /**< Rx buffer used bit read */
-#define XEMACPSS_IXR_FRAMERX_MASK    0x00000002        /**< Frame received ok */
-#define XEMACPSS_IXR_MGMNT_MASK      0x00000001        /**< PHY management complete */
-#define XEMACPSS_IXR_ALL_MASK        0x00007FFF        /**< Everything! */
-
-#define XEMACPSS_IXR_TX_ERR_MASK    (XEMACPSS_IXR_TXEXH_MASK |         \
-                                     XEMACPSS_IXR_RETRY_MASK |         \
-                                     XEMACPSS_IXR_URUN_MASK  |         \
-                                     XEMACPSS_IXR_TXUSED_MASK)
-
-
-#define XEMACPSS_IXR_RX_ERR_MASK    (XEMACPSS_IXR_HRESPNOK_MASK |      \
-                                     XEMACPSS_IXR_RXUSED_MASK |        \
-                                     XEMACPSS_IXR_RXOVR_MASK)
-
-/*@}*/
-
-/** @name PHY Maintenance bit definitions
- * @{
- */
-#define XEMACPSS_PHYMNTNC_OP_MASK    0x40020000        /**< operation mask bits */
-#define XEMACPSS_PHYMNTNC_OP_R_MASK  0x20000000        /**< read operation */
-#define XEMACPSS_PHYMNTNC_OP_W_MASK  0x10000000        /**< write operation */
-#define XEMACPSS_PHYMNTNC_ADDR_MASK  0x0F800000        /**< Address bits */
-#define XEMACPSS_PHYMNTNC_REG_MASK   0x007C0000        /**< register bits */
-#define XEMACPSS_PHYMNTNC_DATA_MASK  0x00000FFF        /**< data bits */
-#define XEMACPSS_PHYMNTNC_PHYAD_SHIFT_MASK   23        /**< Shift bits for PHYAD */
-#define XEMACPSS_PHYMNTNC_PHREG_SHIFT_MASK   18        /**< Shift bits for PHREG */
-/*@}*/
-
-/* Transmit buffer descriptor status words offset
- * @{
- */
-#define XEMACPSS_BD_ADDR_OFFSET  0x00000000 /**< word 0/addr of BDs */
-#define XEMACPSS_BD_STAT_OFFSET  0x00000004 /**< word 1/status of BDs */
-/*@}*/
-
-/* Transmit buffer descriptor status words bit positions.
- * Transmit buffer descriptor consists of two 32-bit registers,
- * the first - word0 contains a 32-bit address pointing to the location of
- * the transmit data.
- * The following register - word1, consists of various information to control
- * the XEmacPss transmit process.  After transmit, this is updated with status
- * information, whether the frame was transmitted OK or why it had failed.
- * @{
- */
-#define XEMACPSS_TXBUF_USED_MASK  0x80000000 /**< Used bit. */
-#define XEMACPSS_TXBUF_WRAP_MASK  0x40000000 /**< Wrap bit, last descriptor */
-#define XEMACPSS_TXBUF_RETRY_MASK 0x20000000 /**< Retry limit exceeded */
-#define XEMACPSS_TXBUF_URUN_MASK  0x10000000 /**< Transmit underrun occurred */
-#define XEMACPSS_TXBUF_EXH_MASK   0x08000000 /**< Buffers exhausted */
-#define XEMACPSS_TXBUF_TCP_MASK   0x04000000 /**< Late collision. */
-#define XEMACPSS_TXBUF_NOCRC_MASK 0x00010000 /**< No CRC */
-#define XEMACPSS_TXBUF_LAST_MASK  0x00008000 /**< Last buffer */
-#define XEMACPSS_TXBUF_LEN_MASK   0x00003FFF /**< Mask for length field */
-/*@}*/
-
-/* Receive buffer descriptor status words bit positions.
- * Receive buffer descriptor consists of two 32-bit registers,
- * the first - word0 contains a 32-bit word aligned address pointing to the
- * address of the buffer. The lower two bits make up the wrap bit indicating
- * the last descriptor and the ownership bit to indicate it has been used by
- * the XEmacPss.
- * The following register - word1, contains status information regarding why
- * the frame was received (the filter match condition) as well as other
- * useful info.
- * @{
- */
-#define XEMACPSS_RXBUF_BCAST_MASK     0x80000000 /**< Broadcast frame */
-#define XEMACPSS_RXBUF_MULTIHASH_MASK 0x40000000 /**< Multicast hashed frame */
-#define XEMACPSS_RXBUF_UNIHASH_MASK   0x20000000 /**< Unicast hashed frame */
-#define XEMACPSS_RXBUF_EXH_MASK       0x08000000 /**< buffer exhausted */
-#define XEMACPSS_RXBUF_AMATCH_MASK    0x06000000 /**< Specific address
-                                                      matched */
-#define XEMACPSS_RXBUF_IDFOUND_MASK   0x01000000 /**< Type ID matched */
-#define XEMACPSS_RXBUF_IDMATCH_MASK   0x00C00000 /**< ID matched mask */
-#define XEMACPSS_RXBUF_VLAN_MASK      0x00200000 /**< VLAN tagged */
-#define XEMACPSS_RXBUF_PRI_MASK       0x00100000 /**< Priority tagged */
-#define XEMACPSS_RXBUF_VPRI_MASK      0x000E0000 /**< Vlan priority */
-#define XEMACPSS_RXBUF_CFI_MASK       0x00010000 /**< CFI frame */
-#define XEMACPSS_RXBUF_EOF_MASK       0x00008000 /**< End of frame. */
-#define XEMACPSS_RXBUF_SOF_MASK       0x00004000 /**< Start of frame. */
-#define XEMACPSS_RXBUF_LEN_MASK       0x00003FFF /**< Mask for length field */
-
-#define XEMACPSS_RXBUF_WRAP_MASK      0x00000002 /**< Wrap bit, last BD */
-#define XEMACPSS_RXBUF_NEW_MASK       0x00000001 /**< Used bit.. */
-#define XEMACPSS_RXBUF_ADD_MASK       0xFFFFFFFC /**< Mask for address */
-/*@}*/
-
-/*
- * Define appropriate I/O access method to mempry mapped I/O or other
- * intarfce if necessary.
- */
-/* Defined in zynq_gem_control.c*/
-void XIo_Out32(u32 OutAddress, u32 Value);
-u32 XIo_In32(u32 InAddress);
-
-#define XEmacPss_In32  XIo_In32
-#define XEmacPss_Out32 XIo_Out32
-
-
-/****************************************************************************/
-/**
-*
-* 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
-* C-style signature:
-*    u32 XEmacPss_ReadReg(u32 BaseAddress, u32 RegOffset)
-*
-*****************************************************************************/
-#define XEmacPss_ReadReg(BaseAddress, RegOffset) \
-    XEmacPss_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
-* C-style signature:
-*    void XEmacPss_WriteReg(u32 BaseAddress, u32 RegOffset,
-*         u32 Data)
-*
-*****************************************************************************/
-#define XEmacPss_WriteReg(BaseAddress, RegOffset, Data) \
-    XEmacPss_Out32((BaseAddress) + (RegOffset), (Data))
-
-#ifdef __cplusplus
-  }
-#endif
-
-#endif /* end of protection macro */
diff --git a/drivers/net/zynq_gem_sinit.c b/drivers/net/zynq_gem_sinit.c
deleted file mode 100644 (file)
index 9f1157a..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * (C) Copyright 2012 Xilinx
- *
- * This file contains lookup method by device ID when success, it returns
- * pointer to config table to be used to initialize the device.
- *
- * 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.
- *
- * 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., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-/***************************** Include Files *********************************/
-
-#include "zynq_gem.h"
-
-/************************** Constant Definitions *****************************/
-
-/**************************** Type Definitions *******************************/
-
-
-/***************** Macros (Inline Functions) Definitions *********************/
-
-
-/************************** Function Prototypes ******************************/
-
-/*****************************************************************************/
-/**
-* Lookup the device configuration based on the unique device ID.  The table
-* contains the configuration info for each device in the system.
-*
-* @param DeviceId is the unique device ID of the device being looked up.
-*
-* @return
-* A pointer to the configuration table entry corresponding to the given
-* device ID, or NULL if no match is found.
-*
-******************************************************************************/
-XEmacPss_Config *XEmacPss_LookupConfig(u16 DeviceId)
-{
-       extern XEmacPss_Config XEmacPss_ConfigTable[];
-       XEmacPss_Config *CfgPtr = NULL;
-       int i;
-
-       for (i = 0; i < XPAR_XEMACPSS_NUM_INSTANCES; i++) {
-               if (XEmacPss_ConfigTable[i].DeviceId == DeviceId) {
-                       CfgPtr = &XEmacPss_ConfigTable[i];
-                       break;
-               }
-       }
-
-       return (CfgPtr);
-}
diff --git a/drivers/net/zynq_gem_wrap.c b/drivers/net/zynq_gem_wrap.c
deleted file mode 100644 (file)
index 9547d92..0000000
+++ /dev/null
@@ -1,759 +0,0 @@
-/*
- * (C) Copyright 2012 Xilinx
- *
- * The XEmacPss Wrapper driver.
- *
- * 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.
- *
- * 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., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <common.h>
-#include <malloc.h>
-#include <miiphy.h>
-#include <net.h>
-
-#include "zynq_gem.h"
-
-/************************ Forward function declaration **********************/
-
-static int Xgmac_process_rx(XEmacPss *EmacPssInstancePtr);
-static int Xgmac_init_rxq(XEmacPss *EmacPssInstancePtr,
-                       void *bd_start, int num_elem);
-static int Xgmac_make_rxbuff_mem(XEmacPss *EmacPssInstancePtr,
-                       void *rx_buf_start, u32 rx_buffsize);
-static int Xgmac_next_rx_buf(XEmacPss *EmacPssInstancePtr);
-static int Xgmac_phy_mgmt_idle(XEmacPss *EmacPssInstancePtr);
-static void Xgmac_set_eth_advertise(XEmacPss *EmacPssInstancePtr,
-                       int link_speed);
-
-/*************************** Constant Definitions ***************************/
-
-#define EMACPSS_DEVICE_ID   0
-#define RXBD_CNT       8       /* Number of RxBDs to use */
-#define TXBD_CNT       8       /* Number of TxBDs to use */
-
-#define phy_spinwait(e) do { while (!Xgmac_phy_mgmt_idle(e)); } while (0)
-
-#define dmb() __asm__ __volatile__ ("dmb" : : : "memory")
-
-/*************************** Variable Definitions ***************************/
-
-/*
- * Aligned memory segments to be used for buffer descriptors
- */
-//#define BRAM_BUFFERS
-#ifdef BRAM_BUFFERS
-static XEmacPss_Bd RxBdSpace[RXBD_CNT] __attribute__ ((section (".bram_buffers")));
-static XEmacPss_Bd TxBdSpace[TXBD_CNT] __attribute__ ((section (".bram_buffers")));
-static char RxBuffers[RXBD_CNT * XEMACPSS_RX_BUF_SIZE] __attribute__ ((section (".bram_buffers")));
-static uchar data_buffer[XEMACPSS_RX_BUF_SIZE] __attribute__ ((section (".bram_buffers")));
-#else
-static XEmacPss_Bd RxBdSpace[RXBD_CNT];
-static XEmacPss_Bd TxBdSpace[TXBD_CNT];
-static char RxBuffers[RXBD_CNT * XEMACPSS_RX_BUF_SIZE];
-static uchar data_buffer[XEMACPSS_RX_BUF_SIZE];
-#endif
-
-static struct {
-       u8 initialized;
-} ethstate = {0};
-
-XEmacPss EmacPssInstance;
-
-/*****************************************************************************/
-/*
-*      Following are the supporting functions to read and write GEM PHY registers.
-*/
-static int Xgmac_phy_mgmt_idle(XEmacPss * EmacPssInstancePtr)
-{
-       return ((XEmacPss_ReadReg
-                (EmacPssInstancePtr->Config.BaseAddress, XEMACPSS_NWSR_OFFSET)
-                & XEMACPSS_NWSR_MDIOIDLE_MASK) == XEMACPSS_NWSR_MDIOIDLE_MASK);
-}
-
-#if defined(CONFIG_CMD_MII) && !defined(CONFIG_BITBANGMII)
-static int Xgmac_mii_read(const char *devname, unsigned char addr,
-               unsigned char reg, unsigned short *value)
-{
-       phy_spinwait(&EmacPssInstance);
-       XEmacPss_PhyRead(&EmacPssInstance, addr, reg, value);
-       phy_spinwait(&EmacPssInstance);
-       return 0;
-}
-
-static int Xgmac_mii_write(const char *devname, unsigned char addr,
-               unsigned char reg, unsigned short value)
-{
-       phy_spinwait(&EmacPssInstance);
-       XEmacPss_PhyWrite(&EmacPssInstance, addr, reg, value);
-       phy_spinwait(&EmacPssInstance);
-       return 0;
-}
-#endif
-
-static u32 phy_rd(XEmacPss * e, u32 a)
-{
-       u16 PhyData;
-
-       phy_spinwait(e);
-       XEmacPss_PhyRead(e, CONFIG_XGMAC_PHY_ADDR, a, &PhyData);
-       phy_spinwait(e);
-       return PhyData;
-}
-
-static void phy_wr(XEmacPss * e, u32 a, u32 v)
-{
-       phy_spinwait(e);
-       XEmacPss_PhyWrite(e, CONFIG_XGMAC_PHY_ADDR, a, v);
-       phy_spinwait(e);
-}
-
-static void phy_rst(XEmacPss * e)
-{
-       int tmp;
-
-       puts("Resetting PHY...\n");
-       tmp = phy_rd(e, 0);
-       tmp |= 0x8000;
-       phy_wr(e, 0, tmp);
-
-       while (phy_rd(e, 0) & 0x8000) {
-               udelay(10000);
-               tmp++;
-               if (tmp > 1000) { /* stalled if reset unfinished after 10 seconds */
-                       puts("***Error: Reset stalled...\n");
-                       return;
-               }
-       }
-       puts("\nPHY reset complete.\n");
-}
-
-static void Out32(u32 OutAddress, u32 Value)
-{
-       *(volatile u32 *) OutAddress = Value;
-       dmb();
-}
-
-/*****************************************************************************/
-
-int Xgmac_one_time_init(void)
-{
-       int tmp;
-       int Status;
-       XEmacPss_Config *Config;
-       XEmacPss *EmacPssInstancePtr = &EmacPssInstance;
-       XEmacPss_Bd BdTemplate;
-
-       Config = XEmacPss_LookupConfig(EMACPSS_DEVICE_ID);
-
-       Status =
-           XEmacPss_CfgInitialize(EmacPssInstancePtr, Config,
-                                  Config->BaseAddress);
-       if (Status != 0) {
-               puts("Error in initialize");
-               return 0;
-       }
-
-       /*
-        * Setup RxBD space.
-        */
-
-       if (Xgmac_init_rxq(EmacPssInstancePtr, &RxBdSpace, RXBD_CNT)) {
-               puts("Xgmac_init_rxq failed!\n");
-               return -1;
-       }
-
-       /*
-        * Create the RxBD ring
-        */
-       tmp =
-           Xgmac_make_rxbuff_mem(EmacPssInstancePtr, &RxBuffers,
-                                 sizeof(RxBuffers));
-       if (tmp == 0 || tmp == -1) {
-               printf("Xgmac_make_rxbuff_mem failed! (%i)\n", tmp);
-               return -1;
-       }
-
-       /*
-        * Setup TxBD space.
-        */
-
-       XEmacPss_BdClear(&BdTemplate);
-       XEmacPss_BdSetStatus(&BdTemplate, XEMACPSS_TXBUF_USED_MASK);
-
-       /*
-        * Create the TxBD ring
-        */
-       Status =
-           XEmacPss_BdRingCreate(&(XEmacPss_GetTxRing(EmacPssInstancePtr)),
-                                 (u32) & TxBdSpace, (u32) & TxBdSpace,
-                                 XEMACPSS_BD_ALIGNMENT, TXBD_CNT);
-       if (Status != 0) {
-               puts("Error setting up TxBD space, BdRingCreate");
-               return -1;
-       }
-
-       Status = XEmacPss_BdRingClone(&(XEmacPss_GetTxRing(EmacPssInstancePtr)),
-                                     &BdTemplate, XEMACPSS_SEND);
-       if (Status != 0) {
-               puts("Error setting up TxBD space, BdRingClone");
-               return -1;
-       }
-
-       XEmacPss_WriteReg(EmacPssInstancePtr->Config.BaseAddress,
-                         XEMACPSS_TXQBASE_OFFSET,
-                         EmacPssInstancePtr->TxBdRing.BaseBdAddr);
-
-       /*************************** MAC Setup ***************************/
-       tmp = (3 << 18);        /* MDC clock division (48 for up to 120MHz) */
-       tmp |= (1 << 17);       /* set for FCS removal */
-       tmp |= (1 << 10);       /* enable gigabit */
-       tmp |= (1 << 4);        /* copy all frames */
-       tmp |= (1 << 1);        /* enable full duplex */
-
-       XEmacPss_WriteReg(EmacPssInstancePtr->Config.BaseAddress,
-                         XEMACPSS_NWCFG_OFFSET, tmp);
-
-       /* MDIO enable */
-       tmp =
-           XEmacPss_ReadReg(EmacPssInstancePtr->Config.BaseAddress,
-                            XEMACPSS_NWCTRL_OFFSET);
-       tmp |= XEMACPSS_NWCTRL_MDEN_MASK;
-       XEmacPss_WriteReg(EmacPssInstancePtr->Config.BaseAddress,
-                         XEMACPSS_NWCTRL_OFFSET, tmp);
-
-       return 0;
-}
-
-int Xgmac_init(struct eth_device *dev, bd_t * bis)
-{
-       int tmp;
-       int link_speed;
-       XEmacPss *EmacPssInstancePtr = &EmacPssInstance;
-
-       if (ethstate.initialized)
-               return 1;
-
-       /*
-        * Setup the ethernet.
-        */
-       printf("Trying to set up GEM link...\n");
-
-       /* Configure DMA */
-       XEmacPss_WriteReg(EmacPssInstancePtr->Config.BaseAddress,
-                         XEMACPSS_DMACR_OFFSET, 0x00180704);
-
-       /* Disable all the MAC Interrupts */
-       XEmacPss_WriteReg(EmacPssInstancePtr->Config.BaseAddress,
-                         XEMACPSS_IDR_OFFSET, 0xFFFFFFFF);
-
-       /* Rx and Tx enable */
-       tmp =
-           XEmacPss_ReadReg(EmacPssInstancePtr->Config.BaseAddress,
-                            XEMACPSS_NWCTRL_OFFSET);
-       tmp |= XEMACPSS_NWCTRL_RXEN_MASK | XEMACPSS_NWCTRL_TXEN_MASK;
-       XEmacPss_WriteReg(EmacPssInstancePtr->Config.BaseAddress,
-                         XEMACPSS_NWCTRL_OFFSET, tmp);
-
-       /*************************** PHY Setup ***************************/
-
-       phy_wr(EmacPssInstancePtr, 22, 0);      /* page 0 */
-
-       tmp = phy_rd(EmacPssInstancePtr, 2);
-       printf("Phy ID: %04X", tmp);
-       tmp = phy_rd(EmacPssInstancePtr, 3);
-       printf("%04X\n", tmp);
-
-       /* Auto-negotiation advertisement register */
-       tmp = phy_rd(EmacPssInstancePtr, 4);
-       tmp |= (1 << 11);       /* asymmetric pause */
-       tmp |= (1 << 10);       /* MAC pause implemented */
-       phy_wr(EmacPssInstancePtr, 4, tmp);
-
-#ifdef CONFIG_EP107
-       /* Extended PHY specific control register */
-       tmp = phy_rd(EmacPssInstancePtr, 20);
-       tmp |= (7 << 9);        /* max number of gigabit attempts */
-       tmp |= (1 << 8);        /* enable downshift */
-       tmp |= (1 << 7);        /* RGMII receive timing internally delayed */
-       tmp |= (1 << 1);        /* RGMII transmit clock internally delayed */
-       phy_wr(EmacPssInstancePtr, 20, tmp);
-#else
-       /* Copper specific control register 1 */
-       tmp = phy_rd(EmacPssInstancePtr, 16);
-       tmp |= (7 << 12);       /* max number of gigabit attempts */
-       tmp |= (1 << 11);       /* enable downshift */
-       phy_wr(EmacPssInstancePtr, 16, tmp);
-
-       /* Control register - MAC */
-       phy_wr(EmacPssInstancePtr, 22, 2);      /* page 2 */
-       tmp = phy_rd(EmacPssInstancePtr, 21);
-       tmp |= (1 << 5);        /* RGMII receive timing transition when data stable */
-       tmp |= (1 << 4);        /* RGMII transmit clock internally delayed */
-       phy_wr(EmacPssInstancePtr, 21, tmp);
-       phy_wr(EmacPssInstancePtr, 22, 0);      /* page 0 */
-#endif
-
-       /* Control register */
-       tmp = phy_rd(EmacPssInstancePtr, 0);
-       tmp |= (1 << 12);       /* auto-negotiation enable */
-       tmp |= (1 << 8);        /* enable full duplex */
-       phy_wr(EmacPssInstancePtr, 0, tmp);
-
-       /***** Try to establish a link at the highest speed possible  *****/
-#ifdef CONFIG_EP107
-       /* CR-659040:
-        * Advertise link speed as 100Mbps for ep107 targets
-        */
-       Xgmac_set_eth_advertise(EmacPssInstancePtr, 100);
-#else
-       /* CR-659040 */
-       /* Could be 1000 if an unknown bug is fixed */
-       Xgmac_set_eth_advertise(EmacPssInstancePtr, 1000);
-#endif
-       phy_rst(EmacPssInstancePtr);
-
-       /* Attempt auto-negotiation */
-       puts("Waiting for PHY to complete auto-negotiation...\n");
-       tmp = 0; /* delay counter */
-       while (!(phy_rd(EmacPssInstancePtr, 1) & (1 << 5))) {
-               udelay(10000);
-               tmp++;
-               if (tmp > 1000) { /* stalled if no link after 10 seconds */
-                       puts("***Error: Auto-negotiation stalled...\n");
-                       return -1;
-               }
-       }
-
-       /* Check if the link is up */
-       tmp = phy_rd(EmacPssInstancePtr, 17);
-       if (  ((tmp >> 10) & 1) ) {
-               /* Check for an auto-negotiation error */
-               tmp = phy_rd(EmacPssInstancePtr, 19);
-               if ( (tmp >> 15) & 1 ) {
-                       puts("***Error: Auto-negotiation error is present.\n");
-                       return -1;
-               }
-       } else {
-               puts("***Error: Link is not up.\n");
-               return -1;
-       }
-
-       /********************** Determine link speed **********************/
-       tmp = phy_rd(EmacPssInstancePtr, 17);
-       if ( ((tmp >> 14) & 3) == 2)            /* 1000Mbps */
-               link_speed = 1000;
-       else if ( ((tmp >> 14) & 3) == 1)       /* 100Mbps */
-               link_speed = 100;
-       else                                    /* 10Mbps */
-               link_speed = 10;
-
-       /*************************** MAC Setup ***************************/
-       tmp = XEmacPss_ReadReg(EmacPssInstancePtr->Config.BaseAddress,
-                         XEMACPSS_NWCFG_OFFSET);
-       if (link_speed == 10)
-               tmp &= ~(0x1);          /* enable 10Mbps */
-       else
-               tmp |= 0x1;             /* enable 100Mbps */
-       if (link_speed == 1000)
-               tmp |= 0x400;           /* enable 1000Mbps */
-       else
-               tmp &= ~(0x400);        /* disable gigabit */
-       XEmacPss_WriteReg(EmacPssInstancePtr->Config.BaseAddress,
-                         XEMACPSS_NWCFG_OFFSET, tmp);
-
-       /************************* GEM0_CLK Setup *************************/
-       /* SLCR unlock */
-       Out32(0xF8000008, 0xDF0D);
-
-       /* Configure GEM0_RCLK_CTRL */
-       Out32(0xF8000138, ((0 << 4) | (1 << 0)));
-
-       /* Set divisors for appropriate frequency in GEM0_CLK_CTRL */
-#ifdef CONFIG_EP107
-       if (link_speed == 1000)         /* 125MHz */
-               Out32(0xF8000140, ((1 << 20) | (48 << 8) | (1 << 4) | (1 << 0)));
-       else if (link_speed == 100)     /* 25 MHz */
-               Out32(0xF8000140, ((1 << 20) | (48 << 8) | (0 << 4) | (1 << 0)));
-       else                            /* 2.5 MHz */
-               Out32(0xF8000140, ((1 << 20) | (48 << 8) | (3 << 4) | (1 << 0)));
-#else
-       if (link_speed == 1000)         /* 125MHz */
-               Out32(0xF8000140, ((1 << 20) | (8 << 8) | (0 << 4) | (1 << 0)));
-       else if (link_speed == 100)     /* 25 MHz */
-               Out32(0xF8000140, ((1 << 20) | (40 << 8) | (0 << 4) | (1 << 0)));
-       else                            /* 2.5 MHz */
-               Out32(0xF8000140, ((10 << 20) | (40 << 8) | (0 << 4) | (1 << 0)));
-#endif
-
-       /* SLCR lock */
-       Out32(0xF8000004, 0x767B);
-
-       printf("Link is now at %dMbps!\n", link_speed);
-
-       ethstate.initialized = 1;
-       return 0;
-}
-
-void Xgmac_halt(struct eth_device *dev)
-{
-       return;
-}
-
-int Xgmac_send(struct eth_device *dev, void *packet, int length)
-{
-       volatile int Status;
-       XEmacPss_Bd *BdPtr;
-       XEmacPss *EmacPssInstancePtr = &EmacPssInstance;
-
-       if (!ethstate.initialized) {
-               puts("Error GMAC not initialized");
-               return 0;
-       }
-
-       Status =
-           XEmacPss_BdRingAlloc(&(XEmacPss_GetTxRing(&EmacPssInstance)), 1,
-                                &BdPtr);
-       if (Status != 0) {
-               puts("Error allocating TxBD");
-               return 0;
-       }
-
-       /*
-        * Setup TxBD
-        */
-       XEmacPss_BdSetAddressTx(BdPtr, (u32)packet);
-       XEmacPss_BdSetLength(BdPtr, length);
-       XEmacPss_BdClearTxUsed(BdPtr);
-       XEmacPss_BdSetLast(BdPtr);
-
-       /*
-        * Enqueue to HW
-        */
-       Status =
-           XEmacPss_BdRingToHw(&(XEmacPss_GetTxRing(&EmacPssInstance)), 1,
-                               BdPtr);
-       if (Status != 0) {
-               puts("Error committing TxBD to HW");
-               return 0;
-       }
-
-       /* Start transmit */
-       XEmacPss_Transmit(EmacPssInstancePtr);
-
-       /* Read the status register to know if the packet has been Transmitted. */
-       Status =
-           XEmacPss_ReadReg(EmacPssInstance.Config.BaseAddress,
-                            XEMACPSS_TXSR_OFFSET);
-       if (Status &
-           (XEMACPSS_TXSR_HRESPNOK_MASK | XEMACPSS_TXSR_URUN_MASK |
-            XEMACPSS_TXSR_BUFEXH_MASK)) {
-               printf("Something has gone wrong here!? Status is 0x%x.\n",
-                      Status);
-       }
-
-       if (Status & XEMACPSS_TXSR_TXCOMPL_MASK) {
-
-//             printf("tx packet sent\n");
-
-               /*
-                * Now that the frame has been sent, post process our TxBDs.
-                */
-               if (XEmacPss_BdRingFromHwTx
-                   (&(XEmacPss_GetTxRing(&EmacPssInstance)), 1, &BdPtr) == 0) {
-                       puts("TxBDs were not ready for post processing");
-                       return 0;
-               }
-
-               /*
-                * Free the TxBD.
-                */
-               Status =
-                   XEmacPss_BdRingFree(&(XEmacPss_GetTxRing(&EmacPssInstance)),
-                                       1, BdPtr);
-               if (Status != 0) {
-                       puts("Error freeing up TxBDs");
-                       return 0;
-               }
-       }
-       /* Clear Tx status register before leaving . */
-       XEmacPss_WriteReg(EmacPssInstance.Config.BaseAddress,
-                         XEMACPSS_TXSR_OFFSET, Status);
-       return 1;
-
-}
-
-int Xgmac_rx(struct eth_device *dev)
-{
-       u32 status, retval;
-       XEmacPss *EmacPssInstancePtr = &EmacPssInstance;
-
-       status =
-           XEmacPss_ReadReg(EmacPssInstancePtr->Config.BaseAddress,
-                            XEMACPSS_RXSR_OFFSET);
-       if (status & XEMACPSS_RXSR_FRAMERX_MASK) {
-
-//             printf("rx packet received\n");
-
-               do {
-                       retval = Xgmac_process_rx(EmacPssInstancePtr);
-               } while (retval == 0) ;
-       }
-
-       /* Clear interrupt status.
-        */
-       XEmacPss_WriteReg(EmacPssInstancePtr->Config.BaseAddress,
-                         XEMACPSS_RXSR_OFFSET, status);
-
-       return 1;
-}
-
-static int Xgmac_write_hwaddr(struct eth_device *dev)
-{
-       /* Initialize the first MAC filter with our address */
-       XEmacPss_SetMacAddress((XEmacPss *)dev->priv, dev->enetaddr, 1);
-
-       return 0;
-}
-
-int zynq_gem_initialize(bd_t *bis)
-{
-       struct eth_device *dev;
-       dev = malloc(sizeof(*dev));
-       if (dev == NULL)
-               return 1;
-
-       memset(dev, 0, sizeof(*dev));
-       sprintf(dev->name, "zynq_gem");
-
-       if (Xgmac_one_time_init() < 0) {
-               printf("zynq_gem init failed!");
-               return -1;
-       }
-       dev->iobase = EmacPssInstance.Config.BaseAddress;
-       dev->priv = &EmacPssInstance;
-       dev->init = Xgmac_init;
-       dev->halt = Xgmac_halt;
-       dev->send = Xgmac_send;
-       dev->recv = Xgmac_rx;
-       dev->write_hwaddr = Xgmac_write_hwaddr;
-
-       eth_register(dev);
-
-#if defined(CONFIG_CMD_MII) && !defined(CONFIG_BITBANGMII)
-       miiphy_register(dev->name, Xgmac_mii_read, Xgmac_mii_write);
-#endif
-       return 0;
-}
-
-/*=============================================================================
- *
- * Xgmac_process_rx- process the next incoming packet
- *
- * return's 0 if OK, -1 on error
- */
-int Xgmac_process_rx(XEmacPss * EmacPssInstancePtr)
-{
-       uchar *buffer = data_buffer;
-       u32 rx_status, hwbuf;
-       int frame_len;
-       u32 *bd_addr;
-
-    bd_addr = (u32 *) & EmacPssInstancePtr->RxBdRing.
-           RxBD_start[EmacPssInstancePtr->RxBdRing.RxBD_current];
-
-       rx_status = XEmacPss_BdRead((bd_addr), XEMACPSS_BD_ADDR_OFFSET);
-       if (! (rx_status & XEMACPSS_RXBUF_NEW_MASK)) {
-               return (-1);
-       }
-
-       rx_status = XEmacPss_BdIsRxSOF(bd_addr);
-       if (!rx_status) {
-               printf("GEM: SOF not set for last buffer received!\n");
-               return (-1);
-       }
-       rx_status = XEmacPss_BdIsRxEOF(bd_addr);
-       if (!rx_status) {
-               printf("GEM: EOF not set for last buffer received!\n");
-               return (-1);
-       }
-
-       frame_len = XEmacPss_BdGetLength(bd_addr);
-       if (frame_len == 0) {
-               printf("GEM: Hardware reported 0 length frame!\n");
-               return (-1);
-       }
-
-       hwbuf = (u32) (*bd_addr & XEMACPSS_RXBUF_ADD_MASK);
-       if (hwbuf == (u32) NULL) {
-               printf("GEM: Error swapping out buffer!\n");
-               return (-1);
-       }
-       memcpy(buffer, (void *)hwbuf, frame_len);
-       Xgmac_next_rx_buf(EmacPssInstancePtr);
-       NetReceive(buffer, frame_len);
-
-       return (0);
-}
-
-int Xgmac_init_rxq(XEmacPss * EmacPssInstancePtr, void *bd_start, int num_elem)
-{
-       XEmacPss_BdRing *r;
-       int loop = 0;
-
-       if ((num_elem <= 0) || (num_elem > RXBD_CNT)) {
-               return (-1);
-       }
-
-       for (; loop < 2 * (num_elem);) {
-               *(((u32 *) bd_start) + loop) = 0x00000000;
-               *(((u32 *) bd_start) + loop + 1) = 0xF0000000;
-               loop += 2;
-       }
-
-       r = & EmacPssInstancePtr->RxBdRing;
-       r->RxBD_start = (XEmacPss_Bd *) bd_start;
-       r->Length = num_elem;
-       r->RxBD_current = 0;
-       r->RxBD_end = 0;
-       r->Rx_first_buf = 0;
-
-       XEmacPss_WriteReg(EmacPssInstancePtr->Config.BaseAddress,
-                         XEMACPSS_RXQBASE_OFFSET, (u32) bd_start);
-
-       return 0;
-}
-
-int Xgmac_make_rxbuff_mem(XEmacPss * EmacPssInstancePtr, void *rx_buf_start,
-                         u32 rx_buffsize)
-{
-       XEmacPss_BdRing *r;
-       int num_bufs;
-       int assigned_bufs;
-       int i;
-       u32 *bd_addr;
-
-       if ((EmacPssInstancePtr == NULL) || (rx_buf_start == NULL)) {
-               return (-1);
-       }
-
-       r = & EmacPssInstancePtr->RxBdRing;
-
-       assigned_bufs = 0;
-
-       if ((num_bufs = rx_buffsize / XEMACPSS_RX_BUF_SIZE) == 0) {
-               return 0;
-       }
-       for (i = 0; i < num_bufs; i++) {
-               if (r->RxBD_end < r->Length) {
-                       memset((char *)(rx_buf_start +
-                                       (i * XEMACPSS_RX_BUF_SIZE)), 0, XEMACPSS_RX_BUF_SIZE);
-
-                       bd_addr = (u32 *) & r->RxBD_start[r->RxBD_end];
-
-                       XEmacPss_BdSetAddressRx(bd_addr,
-                                               (u32) (((char *)
-                                                       rx_buf_start) + (i * XEMACPSS_RX_BUF_SIZE)));
-
-                       r->RxBD_end++;
-                       assigned_bufs++;
-               } else {
-                       return assigned_bufs;
-               }
-       }
-       bd_addr = (u32 *) & r->RxBD_start[r->RxBD_end - 1];
-       XEmacPss_BdSetRxWrap(bd_addr);
-
-       return assigned_bufs;
-}
-
-int Xgmac_next_rx_buf(XEmacPss * EmacPssInstancePtr)
-{
-       XEmacPss_BdRing *r;
-       u32 prev_stat = 0;
-       u32 *bd_addr = NULL;
-
-       if (EmacPssInstancePtr == NULL) {
-               printf
-                   ("\ngem_clr_rx_buf with EmacPssInstancePtr as !!NULL!! \n");
-               return -1;
-       }
-
-       r = & EmacPssInstancePtr->RxBdRing;
-
-       bd_addr = (u32 *) & r->RxBD_start[r->RxBD_current];
-       prev_stat = XEmacPss_BdIsRxSOF(bd_addr);
-       if (prev_stat) {
-               r->Rx_first_buf = r->RxBD_current;
-       } else {
-               XEmacPss_BdClearRxNew(bd_addr);
-               XIo_Out32((u32) (bd_addr + 1), 0xF0000000);
-       }
-
-       if (XEmacPss_BdIsRxEOF(bd_addr)) {
-               bd_addr = (u32 *) & r->RxBD_start[r->Rx_first_buf];
-               XEmacPss_BdClearRxNew(bd_addr);
-               XIo_Out32((u32) (bd_addr + 1), 0xF0000000);
-       }
-
-       if ((++r->RxBD_current) > r->Length - 1) {
-               r->RxBD_current = 0;
-       }
-
-       return 0;
-}
-
-void Xgmac_set_eth_advertise(XEmacPss *EmacPssInstancePtr, int link_speed)
-{
-       int tmp;
-
-       /* MAC setup */
-       tmp = XEmacPss_ReadReg(EmacPssInstancePtr->Config.BaseAddress,
-                         XEMACPSS_NWCFG_OFFSET);
-       if (link_speed == 10)
-               tmp &= ~(1 << 0);       /* enable 10Mbps */
-       else if (link_speed == 100)
-               tmp |= (1 << 0);        /* enable 100Mbps */
-       XEmacPss_WriteReg(EmacPssInstancePtr->Config.BaseAddress,
-                         XEMACPSS_NWCFG_OFFSET, tmp);
-
-       phy_wr(EmacPssInstancePtr, 22, 0);      /* page 0 */
-
-       /* Auto-negotiation advertisement register */
-       tmp = phy_rd(EmacPssInstancePtr, 4);
-       if (link_speed >= 100) {
-               tmp |= (1 << 8);        /* advertise 100Mbps F */
-               tmp |= (1 << 7);        /* advertise 100Mbps H */
-       } else {
-               tmp &= ~(1 << 8);       /* advertise 100Mbps F */
-               tmp &= ~(1 << 7);       /* advertise 100Mbps H */
-       }
-       if (link_speed >= 10) {
-               tmp |= (1 << 6);        /* advertise 10Mbps F */
-               tmp |= (1 << 5);        /* advertise 10Mbps H */
-       } else {
-               tmp &= ~(1 << 6);       /* advertise 10Mbps F */
-               tmp &= ~(1 << 5);       /* advertise 10Mbps H */
-       }
-       phy_wr(EmacPssInstancePtr, 4, tmp);
-
-       /* 1000BASE-T control register */
-       tmp = phy_rd(EmacPssInstancePtr, 9);
-       if (link_speed == 1000) {
-               tmp |= (1 << 9);        /* advertise 1000Mbps F */
-               tmp |= (1 << 8);        /* advertise 1000Mbps H */
-       } else {
-               tmp &= ~(1 << 9);       /* advertise 1000Mbps F */
-               tmp &= ~(1 << 8);       /* advertise 1000Mbps H */
-       }
-       phy_wr(EmacPssInstancePtr, 9, tmp);
-
-}
-
index be6a99b6c1a5846eb51a16b65e0b029e242cdfec..d1aaf0cd2d0637b597a55c49e746d9fba1b9fd19 100644 (file)
@@ -104,7 +104,6 @@ int xilinx_emaclite_initialize(bd_t *bis, unsigned long base_addr,
                                                        int txpp, int rxpp);
 int xilinx_ll_temac_eth_init(bd_t *bis, unsigned long base_addr, int flags,
                                                unsigned long ctrl_addr);
-int zynq_gem_initialize(bd_t *bis);                                            
 
 /*
  * As long as the Xilinx xps_ll_temac ethernet driver has not its own interface