fs_enet.h revision 5b4b8454344a0391bb0f69fda0f4ec8e1f0d2fed
148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#ifndef FS_ENET_H 248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define FS_ENET_H 348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#include <linux/mii.h> 548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#include <linux/netdevice.h> 648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#include <linux/types.h> 748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#include <linux/list.h> 85b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug#include <linux/phy.h> 948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 1048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#include <linux/fs_enet_pd.h> 1148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 1248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#include <asm/dma-mapping.h> 1348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 1448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#ifdef CONFIG_CPM1 1548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#include <asm/commproc.h> 165b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug 175b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordugstruct fec_info { 185b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug fec_t* fecp; 195b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug u32 mii_speed; 205b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug}; 2148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#endif 2248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 2348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#ifdef CONFIG_CPM2 2448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#include <asm/cpm2.h> 2548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#endif 2648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 275b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug/* This is used to operate with pins. 285b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug Note that the actual port size may 295b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug be different; cpm(s) handle it OK */ 305b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordugstruct bb_info { 315b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug u8 mdio_dat_msk; 325b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug u8 mdio_dir_msk; 335b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug u8 *mdio_dir; 345b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug u8 *mdio_dat; 355b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug u8 mdc_msk; 365b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug u8 *mdc_dat; 375b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug int delay; 385b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug}; 395b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug 4048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/* hw driver ops */ 4148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antonioustruct fs_ops { 4248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou int (*setup_data)(struct net_device *dev); 4348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou int (*allocate_bd)(struct net_device *dev); 4448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*free_bd)(struct net_device *dev); 4548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*cleanup_data)(struct net_device *dev); 4648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*set_multicast_list)(struct net_device *dev); 475b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug void (*adjust_link)(struct net_device *dev); 4848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*restart)(struct net_device *dev); 4948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*stop)(struct net_device *dev); 5048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*pre_request_irq)(struct net_device *dev, int irq); 5148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*post_free_irq)(struct net_device *dev, int irq); 5248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*napi_clear_rx_event)(struct net_device *dev); 5348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*napi_enable_rx)(struct net_device *dev); 5448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*napi_disable_rx)(struct net_device *dev); 5548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*rx_bd_done)(struct net_device *dev); 5648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*tx_kickstart)(struct net_device *dev); 5748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u32 (*get_int_events)(struct net_device *dev); 5848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*clear_int_events)(struct net_device *dev, u32 int_events); 5948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*ev_error)(struct net_device *dev, u32 int_events); 6048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou int (*get_regs)(struct net_device *dev, void *p, int *sizep); 6148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou int (*get_regs_len)(struct net_device *dev); 6248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*tx_restart)(struct net_device *dev); 6348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou}; 6448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 6548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antonioustruct phy_info { 6648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou unsigned int id; 6748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou const char *name; 6848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*startup) (struct net_device * dev); 6948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*shutdown) (struct net_device * dev); 7048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*ack_int) (struct net_device * dev); 7148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou}; 7248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 7348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/* The FEC stores dest/src/type, data, and checksum for receive packets. 7448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou */ 7548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define MAX_MTU 1508 /* Allow fullsized pppoe packets over VLAN */ 7648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define MIN_MTU 46 /* this is data size */ 7748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define CRC_LEN 4 7848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 7948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define PKT_MAXBUF_SIZE (MAX_MTU+ETH_HLEN+CRC_LEN) 8048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define PKT_MINBUF_SIZE (MIN_MTU+ETH_HLEN+CRC_LEN) 8148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 8248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/* Must be a multiple of 32 (to cover both FEC & FCC) */ 8348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define PKT_MAXBLR_SIZE ((PKT_MAXBUF_SIZE + 31) & ~31) 8448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/* This is needed so that invalidate_xxx wont invalidate too much */ 8548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define ENET_RX_FRSIZE L1_CACHE_ALIGN(PKT_MAXBUF_SIZE) 8648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 8748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antonioustruct fs_enet_mii_bus { 8848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou struct list_head list; 8948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou spinlock_t mii_lock; 9048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou const struct fs_mii_bus_info *bus_info; 9148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou int refs; 9248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u32 usage_map; 9348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 9448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou int (*mii_read)(struct fs_enet_mii_bus *bus, 9548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou int phy_id, int location); 9648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 9748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void (*mii_write)(struct fs_enet_mii_bus *bus, 9848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou int phy_id, int location, int value); 9948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 10048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou union { 10148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou struct { 10248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou unsigned int mii_speed; 10348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void *fecp; 10448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou } fec; 10548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 10648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou struct { 10748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou /* note that the actual port size may */ 10848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou /* be different; cpm(s) handle it OK */ 10948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u8 mdio_msk; 11048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u8 *mdio_dir; 11148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u8 *mdio_dat; 11248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u8 mdc_msk; 11348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u8 *mdc_dir; 11448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u8 *mdc_dat; 11548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou } bitbang; 11648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 11748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou struct { 11848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u16 lpa; 11948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou } fixed; 12048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou }; 12148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou}; 12248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 12348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antonioustruct fs_enet_private { 12448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou struct device *dev; /* pointer back to the device (must be initialized first) */ 12548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou spinlock_t lock; /* during all ops except TX pckt processing */ 12648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou spinlock_t tx_lock; /* during fs_start_xmit and fs_tx */ 12748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou const struct fs_platform_info *fpi; 12848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou const struct fs_ops *ops; 12948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou int rx_ring, tx_ring; 13048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou dma_addr_t ring_mem_addr; 13148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void *ring_base; 13248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou struct sk_buff **rx_skbuff; 13348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou struct sk_buff **tx_skbuff; 13448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou cbd_t *rx_bd_base; /* Address of Rx and Tx buffers. */ 13548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou cbd_t *tx_bd_base; 13648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou cbd_t *dirty_tx; /* ring entries to be free()ed. */ 13748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou cbd_t *cur_rx; 13848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou cbd_t *cur_tx; 13948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou int tx_free; 14048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou struct net_device_stats stats; 14148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou struct timer_list phy_timer_list; 14248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou const struct phy_info *phy; 14348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u32 msg_enable; 14448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou struct mii_if_info mii_if; 14548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou unsigned int last_mii_status; 14648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou struct fs_enet_mii_bus *mii_bus; 14748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou int interrupt; 14848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 1495b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug struct phy_device *phydev; 1505b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordug int oldduplex, oldspeed, oldlink; /* current settings */ 15148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 15248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou /* event masks */ 15348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u32 ev_napi_rx; /* mask of NAPI rx events */ 15448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u32 ev_rx; /* rx event mask */ 15548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u32 ev_tx; /* tx event mask */ 15648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u32 ev_err; /* error event mask */ 15748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 15848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u16 bd_rx_empty; /* mask of BD rx empty */ 15948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u16 bd_rx_err; /* mask of BD rx errors */ 16048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 16148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou union { 16248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou struct { 16348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou int idx; /* FEC1 = 0, FEC2 = 1 */ 16448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void *fecp; /* hw registers */ 16548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u32 hthi, htlo; /* state for multicast */ 16648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou } fec; 16748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 16848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou struct { 16948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou int idx; /* FCC1-3 = 0-2 */ 17048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void *fccp; /* hw registers */ 17148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void *ep; /* parameter ram */ 17248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void *fcccp; /* hw registers cont. */ 17348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void *mem; /* FCC DPRAM */ 17448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u32 gaddrh, gaddrl; /* group address */ 17548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou } fcc; 17648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 17748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou struct { 17848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou int idx; /* FEC1 = 0, FEC2 = 1 */ 17948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void *sccp; /* hw registers */ 18048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou void *ep; /* parameter ram */ 18148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou u32 hthi, htlo; /* state for multicast */ 18248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou } scc; 18348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 18448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou }; 18548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou}; 18648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 18748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/***************************************************************************/ 1885b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordugint fs_enet_mdio_bb_init(void); 1895b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordugint fs_mii_fixed_init(struct fs_enet_mii_bus *bus); 1905b4b8454344a0391bb0f69fda0f4ec8e1f0d2fedVitaly Bordugint fs_enet_mdio_fec_init(void); 19148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 19248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniouvoid fs_init_bds(struct net_device *dev); 19348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniouvoid fs_cleanup_bds(struct net_device *dev); 19448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 19548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/***************************************************************************/ 19648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 19748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define DRV_MODULE_NAME "fs_enet" 19848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define PFX DRV_MODULE_NAME ": " 19948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define DRV_MODULE_VERSION "1.0" 20048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define DRV_MODULE_RELDATE "Aug 8, 2005" 20148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 20248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/***************************************************************************/ 20348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 20448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniouint fs_enet_platform_init(void); 20548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniouvoid fs_enet_platform_cleanup(void); 20648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 20748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/***************************************************************************/ 20848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/* buffer descriptor access macros */ 20948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 21048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/* access macros */ 21148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#if defined(CONFIG_CPM1) 21248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/* for a a CPM1 __raw_xxx's are sufficient */ 21348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define __cbd_out32(addr, x) __raw_writel(x, addr) 21448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define __cbd_out16(addr, x) __raw_writew(x, addr) 21548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define __cbd_in32(addr) __raw_readl(addr) 21648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define __cbd_in16(addr) __raw_readw(addr) 21748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#else 21848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/* for others play it safe */ 21948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define __cbd_out32(addr, x) out_be32(addr, x) 22048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define __cbd_out16(addr, x) out_be16(addr, x) 22148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define __cbd_in32(addr) in_be32(addr) 22248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define __cbd_in16(addr) in_be16(addr) 22348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#endif 22448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 22548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/* write */ 22648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define CBDW_SC(_cbd, _sc) __cbd_out16(&(_cbd)->cbd_sc, (_sc)) 22748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define CBDW_DATLEN(_cbd, _datlen) __cbd_out16(&(_cbd)->cbd_datlen, (_datlen)) 22848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define CBDW_BUFADDR(_cbd, _bufaddr) __cbd_out32(&(_cbd)->cbd_bufaddr, (_bufaddr)) 22948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 23048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/* read */ 23148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define CBDR_SC(_cbd) __cbd_in16(&(_cbd)->cbd_sc) 23248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define CBDR_DATLEN(_cbd) __cbd_in16(&(_cbd)->cbd_datlen) 23348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define CBDR_BUFADDR(_cbd) __cbd_in32(&(_cbd)->cbd_bufaddr) 23448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 23548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/* set bits */ 23648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define CBDS_SC(_cbd, _sc) CBDW_SC(_cbd, CBDR_SC(_cbd) | (_sc)) 23748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 23848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/* clear bits */ 23948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#define CBDC_SC(_cbd, _sc) CBDW_SC(_cbd, CBDR_SC(_cbd) & ~(_sc)) 24048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 24148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/*******************************************************************/ 24248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 24348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniouextern const struct fs_ops fs_fec_ops; 24448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniouextern const struct fs_ops fs_fcc_ops; 24548257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniouextern const struct fs_ops fs_scc_ops; 24648257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 24748257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/*******************************************************************/ 24848257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 24948257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/* handy pointer to the immap */ 25048257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniouextern void *fs_enet_immap; 25148257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 25248257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou/*******************************************************************/ 25348257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou 25448257c4f168e5d040394aeca4d37b59f68e0d36bPantelis Antoniou#endif 255