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/ptp_clock_kernel.h> 15#include <linux/timer.h> 16#include <linux/etherdevice.h> 17#include <linux/bfin_mac.h> 18 19/* 20 * Disable hardware checksum for bug #5600 if writeback cache is 21 * enabled. Otherwize, corrupted RX packet will be sent up stack 22 * without error mark. 23 */ 24#ifndef CONFIG_BFIN_EXTMEM_WRITEBACK 25#define BFIN_MAC_CSUM_OFFLOAD 26#endif 27 28#define TX_RECLAIM_JIFFIES (HZ / 5) 29#define BFIN_MAC_RX_IRQ_DISABLED 1 30 31struct 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 38struct 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 47struct status_area_tx { 48 unsigned long status_word; /* the frame status word */ 49}; 50 51/* use two descriptors for a packet */ 52struct 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 */ 61struct 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 70struct 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 struct napi_struct napi; 85 unsigned long flags; 86 87 /* Data for EMAC_VLAN1 regs */ 88 u16 vlan1_mask, vlan2_mask; 89 90 /* MII and PHY stuffs */ 91 int old_link; /* used by bf537_adjust_link */ 92 int old_speed; 93 int old_duplex; 94 95 struct phy_device *phydev; 96 struct mii_bus *mii_bus; 97 98#if defined(CONFIG_BFIN_MAC_USE_HWSTAMP) 99 u32 addend; 100 unsigned int shift; 101 s32 max_ppb; 102 struct hwtstamp_config stamp_cfg; 103 struct ptp_clock_info caps; 104 struct ptp_clock *clock; 105 int phc_index; 106 spinlock_t phc_lock; /* protects time lo/hi registers */ 107#endif 108}; 109 110int bfin_get_ether_addr(char *addr); 111 112#endif 113