2007-07-17 10:43:44 +04:00
/*
2008-01-30 11:52:24 +03:00
* Blackfin On - Chip MAC Driver
2007-07-17 10:43:44 +04:00
*
2008-01-30 11:52:24 +03:00
* Copyright 2004 - 2007 Analog Devices Inc .
2007-07-17 10:43:44 +04:00
*
2008-01-30 11:52:24 +03:00
* Enter bugs at http : //blackfin.uclinux.org/
2007-07-17 10:43:44 +04:00
*
2008-01-30 11:52:24 +03:00
* Licensed under the GPL - 2 or later .
2007-07-17 10:43:44 +04:00
*/
2010-05-18 04:19:40 +04:00
# ifndef _BFIN_MAC_H_
# define _BFIN_MAC_H_
# include <linux/net_tstamp.h>
# include <linux/clocksource.h>
# include <linux/timecompare.h>
2010-06-11 13:44:31 +04:00
# include <linux/timer.h>
2010-06-11 14:44:22 +04:00
# include <linux/etherdevice.h>
# include <linux/bfin_mac.h>
2007-07-17 10:43:44 +04:00
2011-01-10 05:54:33 +03:00
/*
* Disable hardware checksum for bug # 5600 if writeback cache is
* enabled . Otherwize , corrupted RX packet will be sent up stack
* without error mark .
*/
# ifndef CONFIG_BFIN_EXTMEM_WRITEBACK
2007-07-17 10:43:44 +04:00
# define BFIN_MAC_CSUM_OFFLOAD
2011-01-10 05:54:33 +03:00
# endif
2007-07-17 10:43:44 +04:00
2010-06-11 13:44:31 +04:00
# define TX_RECLAIM_JIFFIES (HZ / 5)
2007-07-17 10:43:44 +04:00
struct dma_descriptor {
struct dma_descriptor * next_dma_desc ;
unsigned long start_addr ;
unsigned short config ;
unsigned short x_count ;
} ;
struct status_area_rx {
# if defined(BFIN_MAC_CSUM_OFFLOAD)
unsigned short ip_hdr_csum ; /* ip header checksum */
/* ip payload(udp or tcp or others) checksum */
unsigned short ip_payload_csum ;
# endif
unsigned long status_word ; /* the frame status word */
} ;
struct status_area_tx {
unsigned long status_word ; /* the frame status word */
} ;
/* use two descriptors for a packet */
struct net_dma_desc_rx {
struct net_dma_desc_rx * next ;
struct sk_buff * skb ;
struct dma_descriptor desc_a ;
struct dma_descriptor desc_b ;
struct status_area_rx status ;
} ;
/* use two descriptors for a packet */
struct net_dma_desc_tx {
struct net_dma_desc_tx * next ;
struct sk_buff * skb ;
struct dma_descriptor desc_a ;
struct dma_descriptor desc_b ;
unsigned char packet [ 1560 ] ;
struct status_area_tx status ;
} ;
2008-04-25 07:53:10 +04:00
struct bfin_mac_local {
2007-07-17 10:43:44 +04:00
/*
* these are things that the kernel wants me to keep , so users
* can find out semi - useless statistics of how well the card is
* performing
*/
2007-09-19 19:37:36 +04:00
struct net_device_stats stats ;
2007-07-17 10:43:44 +04:00
spinlock_t lock ;
2007-09-19 19:37:36 +04:00
2010-05-10 09:39:11 +04:00
int wol ; /* Wake On Lan */
int irq_wake_requested ;
2010-06-11 13:44:31 +04:00
struct timer_list tx_reclaim_timer ;
struct net_device * ndev ;
2010-05-10 09:39:11 +04:00
2011-01-10 05:54:32 +03:00
/* Data for EMAC_VLAN1 regs */
u16 vlan1_mask , vlan2_mask ;
2007-09-19 19:37:36 +04:00
/* MII and PHY stuffs */
int old_link ; /* used by bf537_adjust_link */
int old_speed ;
int old_duplex ;
struct phy_device * phydev ;
2008-10-09 03:29:57 +04:00
struct mii_bus * mii_bus ;
2010-05-18 04:19:40 +04:00
# if defined(CONFIG_BFIN_MAC_USE_HWSTAMP)
struct cyclecounter cycles ;
struct timecounter clock ;
struct timecompare compare ;
struct hwtstamp_config stamp_cfg ;
# endif
2007-07-17 10:43:44 +04:00
} ;
2007-11-15 16:21:20 +03:00
extern void bfin_get_ether_addr ( char * addr ) ;
2010-05-18 04:19:40 +04:00
# endif