1 /* 2 * Blackfin On-Chip MAC Driver 3 * 4 * Copyright 2004-2007 Analog Devices Inc. 5 * 6 * Enter bugs at http://blackfin.uclinux.org/ 7 * 8 * Licensed under the GPL-2 or later. 9 */ 10 #ifndef _BFIN_MAC_H_ 11 #define _BFIN_MAC_H_ 12 13 #include <linux/net_tstamp.h> 14 #include <linux/clocksource.h> 15 #include <linux/timecompare.h> 16 #include <linux/timer.h> 17 #include <linux/etherdevice.h> 18 #include <linux/bfin_mac.h> 19 20 /* 21 * Disable hardware checksum for bug #5600 if writeback cache is 22 * enabled. Otherwize, corrupted RX packet will be sent up stack 23 * without error mark. 24 */ 25 #ifndef CONFIG_BFIN_EXTMEM_WRITEBACK 26 #define BFIN_MAC_CSUM_OFFLOAD 27 #endif 28 29 #define TX_RECLAIM_JIFFIES (HZ / 5) 30 31 struct dma_descriptor { 32 struct dma_descriptor *next_dma_desc; 33 unsigned long start_addr; 34 unsigned short config; 35 unsigned short x_count; 36 }; 37 38 struct status_area_rx { 39 #if defined(BFIN_MAC_CSUM_OFFLOAD) 40 unsigned short ip_hdr_csum; /* ip header checksum */ 41 /* ip payload(udp or tcp or others) checksum */ 42 unsigned short ip_payload_csum; 43 #endif 44 unsigned long status_word; /* the frame status word */ 45 }; 46 47 struct status_area_tx { 48 unsigned long status_word; /* the frame status word */ 49 }; 50 51 /* use two descriptors for a packet */ 52 struct net_dma_desc_rx { 53 struct net_dma_desc_rx *next; 54 struct sk_buff *skb; 55 struct dma_descriptor desc_a; 56 struct dma_descriptor desc_b; 57 struct status_area_rx status; 58 }; 59 60 /* use two descriptors for a packet */ 61 struct net_dma_desc_tx { 62 struct net_dma_desc_tx *next; 63 struct sk_buff *skb; 64 struct dma_descriptor desc_a; 65 struct dma_descriptor desc_b; 66 unsigned char packet[1560]; 67 struct status_area_tx status; 68 }; 69 70 struct bfin_mac_local { 71 /* 72 * these are things that the kernel wants me to keep, so users 73 * can find out semi-useless statistics of how well the card is 74 * performing 75 */ 76 struct net_device_stats stats; 77 78 spinlock_t lock; 79 80 int wol; /* Wake On Lan */ 81 int irq_wake_requested; 82 struct timer_list tx_reclaim_timer; 83 struct net_device *ndev; 84 85 /* Data for EMAC_VLAN1 regs */ 86 u16 vlan1_mask, vlan2_mask; 87 88 /* MII and PHY stuffs */ 89 int old_link; /* used by bf537_adjust_link */ 90 int old_speed; 91 int old_duplex; 92 93 struct phy_device *phydev; 94 struct mii_bus *mii_bus; 95 96 #if defined(CONFIG_BFIN_MAC_USE_HWSTAMP) 97 struct cyclecounter cycles; 98 struct timecounter clock; 99 struct timecompare compare; 100 struct hwtstamp_config stamp_cfg; 101 #endif 102 }; 103 104 extern int bfin_get_ether_addr(char *addr); 105 106 #endif 107