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 30struct dma_descriptor { 31 struct dma_descriptor *next_dma_desc; 32 unsigned long start_addr; 33 unsigned short config; 34 unsigned short x_count; 35}; 36 37struct status_area_rx { 38#if defined(BFIN_MAC_CSUM_OFFLOAD) 39 unsigned short ip_hdr_csum; /* ip header checksum */ 40 /* ip payload(udp or tcp or others) checksum */ 41 unsigned short ip_payload_csum; 42#endif 43 unsigned long status_word; /* the frame status word */ 44}; 45 46struct status_area_tx { 47 unsigned long status_word; /* the frame status word */ 48}; 49 50/* use two descriptors for a packet */ 51struct net_dma_desc_rx { 52 struct net_dma_desc_rx *next; 53 struct sk_buff *skb; 54 struct dma_descriptor desc_a; 55 struct dma_descriptor desc_b; 56 struct status_area_rx status; 57}; 58 59/* use two descriptors for a packet */ 60struct net_dma_desc_tx { 61 struct net_dma_desc_tx *next; 62 struct sk_buff *skb; 63 struct dma_descriptor desc_a; 64 struct dma_descriptor desc_b; 65 unsigned char packet[1560]; 66 struct status_area_tx status; 67}; 68 69struct bfin_mac_local { 70 /* 71 * these are things that the kernel wants me to keep, so users 72 * can find out semi-useless statistics of how well the card is 73 * performing 74 */ 75 struct net_device_stats stats; 76 77 spinlock_t lock; 78 79 int wol; /* Wake On Lan */ 80 int irq_wake_requested; 81 struct timer_list tx_reclaim_timer; 82 struct net_device *ndev; 83 84 /* Data for EMAC_VLAN1 regs */ 85 u16 vlan1_mask, vlan2_mask; 86 87 /* MII and PHY stuffs */ 88 int old_link; /* used by bf537_adjust_link */ 89 int old_speed; 90 int old_duplex; 91 92 struct phy_device *phydev; 93 struct mii_bus *mii_bus; 94 95#if defined(CONFIG_BFIN_MAC_USE_HWSTAMP) 96 u32 addend; 97 unsigned int shift; 98 s32 max_ppb; 99 struct hwtstamp_config stamp_cfg; 100 struct ptp_clock_info caps; 101 struct ptp_clock *clock; 102 int phc_index; 103 spinlock_t phc_lock; /* protects time lo/hi registers */ 104#endif 105}; 106 107extern int bfin_get_ether_addr(char *addr); 108 109#endif 110