2007-07-17 00:43:44 -06:00
|
|
|
/*
|
|
|
|
* File: drivers/net/bfin_mac.c
|
|
|
|
* Based on:
|
|
|
|
* Maintainer:
|
|
|
|
* Bryan Wu <bryan.wu@analog.com>
|
|
|
|
*
|
|
|
|
* Original author:
|
|
|
|
* Luke Yang <luke.yang@analog.com>
|
|
|
|
*
|
|
|
|
* Created:
|
|
|
|
* Description:
|
|
|
|
*
|
|
|
|
* Modified:
|
|
|
|
* Copyright 2004-2006 Analog Devices Inc.
|
|
|
|
*
|
|
|
|
* Bugs: Enter bugs at http://blackfin.uclinux.org/
|
|
|
|
*
|
|
|
|
* This program is free software ; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation ; either version 2, or (at your option)
|
|
|
|
* any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program ; see the file COPYING.
|
|
|
|
* If not, write to the Free Software Foundation,
|
|
|
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define BFIN_MAC_CSUM_OFFLOAD
|
|
|
|
|
|
|
|
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;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct bf537mac_local {
|
|
|
|
/*
|
|
|
|
* 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 09:37:36 -06:00
|
|
|
struct net_device_stats stats;
|
2007-07-17 00:43:44 -06:00
|
|
|
|
|
|
|
unsigned char Mac[6]; /* MAC address of the board */
|
|
|
|
spinlock_t lock;
|
2007-09-19 09:37:36 -06:00
|
|
|
|
|
|
|
/* MII and PHY stuffs */
|
|
|
|
int old_link; /* used by bf537_adjust_link */
|
|
|
|
int old_speed;
|
|
|
|
int old_duplex;
|
|
|
|
|
|
|
|
struct phy_device *phydev;
|
|
|
|
struct mii_bus mii_bus;
|
2007-07-17 00:43:44 -06:00
|
|
|
};
|
|
|
|
|
|
|
|
extern void get_bf537_ether_addr(char *addr);
|