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 18#define BFIN_MAC_CSUM_OFFLOAD 19 20#define TX_RECLAIM_JIFFIES (HZ / 5) 21 22struct dma_descriptor { 23 struct dma_descriptor *next_dma_desc; 24 unsigned long start_addr; 25 unsigned short config; 26 unsigned short x_count; 27}; 28 29struct status_area_rx { 30#if defined(BFIN_MAC_CSUM_OFFLOAD) 31 unsigned short ip_hdr_csum; /* ip header checksum */ 32 /* ip payload(udp or tcp or others) checksum */ 33 unsigned short ip_payload_csum; 34#endif 35 unsigned long status_word; /* the frame status word */ 36}; 37 38struct status_area_tx { 39 unsigned long status_word; /* the frame status word */ 40}; 41 42/* use two descriptors for a packet */ 43struct net_dma_desc_rx { 44 struct net_dma_desc_rx *next; 45 struct sk_buff *skb; 46 struct dma_descriptor desc_a; 47 struct dma_descriptor desc_b; 48 struct status_area_rx status; 49}; 50 51/* use two descriptors for a packet */ 52struct net_dma_desc_tx { 53 struct net_dma_desc_tx *next; 54 struct sk_buff *skb; 55 struct dma_descriptor desc_a; 56 struct dma_descriptor desc_b; 57 unsigned char packet[1560]; 58 struct status_area_tx status; 59}; 60 61struct bfin_mac_local { 62 /* 63 * these are things that the kernel wants me to keep, so users 64 * can find out semi-useless statistics of how well the card is 65 * performing 66 */ 67 struct net_device_stats stats; 68 69 unsigned char Mac[6]; /* MAC address of the board */ 70 spinlock_t lock; 71 72 int wol; /* Wake On Lan */ 73 int irq_wake_requested; 74 struct timer_list tx_reclaim_timer; 75 struct net_device *ndev; 76 77 /* MII and PHY stuffs */ 78 int old_link; /* used by bf537_adjust_link */ 79 int old_speed; 80 int old_duplex; 81 82 struct phy_device *phydev; 83 struct mii_bus *mii_bus; 84 85#if defined(CONFIG_BFIN_MAC_USE_HWSTAMP) 86 struct cyclecounter cycles; 87 struct timecounter clock; 88 struct timecompare compare; 89 struct hwtstamp_config stamp_cfg; 90#endif 91}; 92 93extern void bfin_get_ether_addr(char *addr); 94 95#endif 96