at91_ether.h 3.0 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/*
 * Ethernet driver for the Atmel AT91RM9200 (Thunder)
 *
 *  Copyright (C) SAN People (Pty) Ltd
 *
 * Based on an earlier Atmel EMAC macrocell driver by Atmel and Lineo Inc.
 * Initial version by Rick Bronson.
 *
 * 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 of the License, or (at your option) any later version.
 */

#ifndef AT91_ETHERNET
#define AT91_ETHERNET


/* Davicom 9161 PHY */
20 21 22 23 24
#define MII_DM9161_ID		0x0181b880
#define MII_DM9161A_ID		0x0181b8a0
#define MII_DSCR_REG		16
#define MII_DSCSR_REG		17
#define MII_DSINTR_REG		21
25 26

/* Intel LXT971A PHY */
27 28 29 30
#define MII_LXT971A_ID		0x001378E0
#define MII_ISINTE_REG		18
#define MII_ISINTS_REG		19
#define MII_LEDCTRL_REG		20
31 32

/* Realtek RTL8201 PHY */
33
#define MII_RTL8201_ID		0x00008200
34 35

/* Broadcom BCM5221 PHY */
36 37
#define MII_BCM5221_ID		0x004061e0
#define MII_BCMINTR_REG		26
38 39

/* National Semiconductor DP83847 */
40 41 42 43 44 45 46
#define MII_DP83847_ID		0x20005c30

/* National Semiconductor DP83848 */
#define MII_DP83848_ID		0x20005c90
#define MII_DPPHYSTS_REG	16
#define MII_DPMICR_REG		17
#define MII_DPMISR_REG		18
47 48

/* Altima AC101L PHY */
49
#define MII_AC101L_ID		0x00225520
50 51

/* Micrel KS8721 PHY */
52 53 54 55 56 57 58 59
#define MII_KS8721_ID		0x00221610

/* Teridian 78Q2123/78Q2133 */
#define MII_T78Q21x3_ID		0x000e7230
#define MII_T78Q21INT_REG	17

/* SMSC LAN83C185 */
#define MII_LAN83C185_ID	0x0007C0A0
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88

/* ........................................................................ */

#define MAX_RBUFF_SZ	0x600		/* 1518 rounded up */
#define MAX_RX_DESCR	9		/* max number of receive buffers */

#define EMAC_DESC_DONE	0x00000001	/* bit for if DMA is done */
#define EMAC_DESC_WRAP	0x00000002	/* bit for wrap */

#define EMAC_BROADCAST	0x80000000	/* broadcast address */
#define EMAC_MULTICAST	0x40000000	/* multicast address */
#define EMAC_UNICAST	0x20000000	/* unicast address */

struct rbf_t
{
	unsigned int addr;
	unsigned long size;
};

struct recv_desc_bufs
{
	struct rbf_t descriptors[MAX_RX_DESCR];		/* must be on sizeof (rbf_t) boundary */
	char recv_buf[MAX_RX_DESCR][MAX_RBUFF_SZ];	/* must be on long boundary */
};

struct at91_private
{
	struct mii_if_info mii;			/* ethtool support */
	struct at91_eth_data board_data;	/* board-specific configuration */
89
	struct clk *ether_clk;			/* clock */
90 91 92 93 94 95

	/* PHY */
	unsigned long phy_type;			/* type of PHY (PHY_ID) */
	spinlock_t lock;			/* lock for MDI interface */
	short phy_media;			/* media interface type */
	unsigned short phy_address;		/* 5-bit MDI address of PHY (0..31) */
96
	struct timer_list check_timer;		/* Poll link status */
97 98 99 100 101 102 103 104 105 106 107 108 109

	/* Transmit */
	struct sk_buff *skb;			/* holds skb until xmit interrupt completes */
	dma_addr_t skb_physaddr;		/* phys addr from pci_map_single */
	int skb_length;				/* saved skb length for pci_unmap_single */

	/* Receive */
	int rxBuffIndex;			/* index into receive descriptor list */
	struct recv_desc_bufs *dlist;		/* descriptor list address */
	struct recv_desc_bufs *dlist_phys;	/* descriptor list physical address */
};

#endif