2007-07-17 08:43:44 +02:00
|
|
|
/*
|
2008-01-30 09:52:24 +01:00
|
|
|
* Blackfin On-Chip MAC Driver
|
2007-07-17 08:43:44 +02:00
|
|
|
*
|
2008-01-30 09:52:24 +01:00
|
|
|
* Copyright 2004-2007 Analog Devices Inc.
|
2007-07-17 08:43:44 +02:00
|
|
|
*
|
2008-01-30 09:52:24 +01:00
|
|
|
* Enter bugs at http://blackfin.uclinux.org/
|
2007-07-17 08:43:44 +02:00
|
|
|
*
|
2008-01-30 09:52:24 +01:00
|
|
|
* Licensed under the GPL-2 or later.
|
2007-07-17 08:43:44 +02:00
|
|
|
*/
|
2010-05-18 02:19:40 +02:00
|
|
|
#ifndef _BFIN_MAC_H_
|
|
|
|
#define _BFIN_MAC_H_
|
|
|
|
|
|
|
|
#include <linux/net_tstamp.h>
|
2012-10-31 07:27:24 +01:00
|
|
|
#include <linux/ptp_clock_kernel.h>
|
2010-06-11 11:44:31 +02:00
|
|
|
#include <linux/timer.h>
|
2010-06-11 12:44:22 +02:00
|
|
|
#include <linux/etherdevice.h>
|
|
|
|
#include <linux/bfin_mac.h>
|
2007-07-17 08:43:44 +02:00
|
|
|
|
2011-01-10 03:54:33 +01: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 08:43:44 +02:00
|
|
|
#define BFIN_MAC_CSUM_OFFLOAD
|
2011-01-10 03:54:33 +01:00
|
|
|
#endif
|
2007-07-17 08:43:44 +02:00
|
|
|
|
2010-06-11 11:44:31 +02:00
|
|
|
#define TX_RECLAIM_JIFFIES (HZ / 5)
|
|
|
|
|
2007-07-17 08:43:44 +02: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 05:53:10 +02:00
|
|
|
struct bfin_mac_local {
|
2007-07-17 08:43:44 +02: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 17:37:36 +02:00
|
|
|
struct net_device_stats stats;
|
2007-07-17 08:43:44 +02:00
|
|
|
|
|
|
|
spinlock_t lock;
|
2007-09-19 17:37:36 +02:00
|
|
|
|
2010-05-10 07:39:11 +02:00
|
|
|
int wol; /* Wake On Lan */
|
|
|
|
int irq_wake_requested;
|
2010-06-11 11:44:31 +02:00
|
|
|
struct timer_list tx_reclaim_timer;
|
|
|
|
struct net_device *ndev;
|
2010-05-10 07:39:11 +02:00
|
|
|
|
2011-01-10 03:54:32 +01:00
|
|
|
/* Data for EMAC_VLAN1 regs */
|
|
|
|
u16 vlan1_mask, vlan2_mask;
|
|
|
|
|
2007-09-19 17:37:36 +02: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 01:29:57 +02:00
|
|
|
struct mii_bus *mii_bus;
|
2010-05-18 02:19:40 +02:00
|
|
|
|
|
|
|
#if defined(CONFIG_BFIN_MAC_USE_HWSTAMP)
|
2012-10-31 07:27:23 +01:00
|
|
|
u32 addend;
|
|
|
|
unsigned int shift;
|
2012-10-31 07:27:24 +01:00
|
|
|
s32 max_ppb;
|
2010-05-18 02:19:40 +02:00
|
|
|
struct hwtstamp_config stamp_cfg;
|
2012-10-31 07:27:24 +01:00
|
|
|
struct ptp_clock_info caps;
|
|
|
|
struct ptp_clock *clock;
|
|
|
|
int phc_index;
|
|
|
|
spinlock_t phc_lock; /* protects time lo/hi registers */
|
2010-05-18 02:19:40 +02:00
|
|
|
#endif
|
2007-07-17 08:43:44 +02:00
|
|
|
};
|
|
|
|
|
2013-09-24 00:11:30 +02:00
|
|
|
int bfin_get_ether_addr(char *addr);
|
2010-05-18 02:19:40 +02:00
|
|
|
|
|
|
|
#endif
|