Xenomai  3.1
rt_at91_ether.h
1 /*
2  * Ethernet driver for the Atmel AT91RM9200 (Thunder)
3  *
4  * Copyright (C) SAN People (Pty) Ltd
5  *
6  * Based on an earlier Atmel EMAC macrocell driver by Atmel and Lineo Inc.
7  * Initial version by Rick Bronson.
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License
11  * as published by the Free Software Foundation; either version
12  * 2 of the License, or (at your option) any later version.
13  */
14 
15 #ifndef AT91_ETHERNET
16 #define AT91_ETHERNET
17 
18 #include <rtdm/driver.h>
19 #include <rtskb.h>
20 
21 /* Davicom 9161 PHY */
22 #define MII_DM9161_ID 0x0181b880
23 #define MII_DM9161A_ID 0x0181b8a0
24 
25 /* Davicom specific registers */
26 #define MII_DSCR_REG 16
27 #define MII_DSCSR_REG 17
28 #define MII_DSINTR_REG 21
29 
30 /* Intel LXT971A PHY */
31 #define MII_LXT971A_ID 0x001378E0
32 
33 /* Intel specific registers */
34 #define MII_ISINTE_REG 18
35 #define MII_ISINTS_REG 19
36 #define MII_LEDCTRL_REG 20
37 
38 /* Realtek RTL8201 PHY */
39 #define MII_RTL8201_ID 0x00008200
40 
41 /* Broadcom BCM5221 PHY */
42 #define MII_BCM5221_ID 0x004061e0
43 
44 /* Broadcom specific registers */
45 #define MII_BCMINTR_REG 26
46 
47 /* National Semiconductor DP83847 */
48 #define MII_DP83847_ID 0x20005c30
49 
50 /* Altima AC101L PHY */
51 #define MII_AC101L_ID 0x00225520
52 
53 /* Micrel KS8721 PHY */
54 #define MII_KS8721_ID 0x00221610
55 
56 /* ........................................................................ */
57 
58 #define MAX_RBUFF_SZ 0x600 /* 1518 rounded up */
59 #define MAX_RX_DESCR 9 /* max number of receive buffers */
60 
61 #define EMAC_DESC_DONE 0x00000001 /* bit for if DMA is done */
62 #define EMAC_DESC_WRAP 0x00000002 /* bit for wrap */
63 
64 #define EMAC_BROADCAST 0x80000000 /* broadcast address */
65 #define EMAC_MULTICAST 0x40000000 /* multicast address */
66 #define EMAC_UNICAST 0x20000000 /* unicast address */
67 
68 struct rbf_t
69 {
70  unsigned int addr;
71  unsigned long size;
72 };
73 
74 struct recv_desc_bufs
75 {
76  struct rbf_t descriptors[MAX_RX_DESCR]; /* must be on sizeof (rbf_t) boundary */
77  char recv_buf[MAX_RX_DESCR][MAX_RBUFF_SZ]; /* must be on long boundary */
78 };
79 
80 struct at91_private
81 {
82  struct net_device_stats stats;
83  struct mii_if_info mii; /* ethtool support */
84  struct at91_eth_data board_data; /* board-specific configuration */
85  struct clk *ether_clk; /* clock */
86 
87  /* PHY */
88  unsigned long phy_type; /* type of PHY (PHY_ID) */
89  rtdm_lock_t lock; /* lock for MDI interface */
90  short phy_media; /* media interface type */
91  unsigned short phy_address; /* 5-bit MDI address of PHY (0..31) */
92  struct timer_list check_timer; /* Poll link status */
93 
94  /* Transmit */
95  struct rtskb *skb; /* holds skb until xmit interrupt completes */
96  dma_addr_t skb_physaddr; /* phys addr from pci_map_single */
97  int skb_length; /* saved skb length for pci_unmap_single */
98 
99  /* Receive */
100  int rxBuffIndex; /* index into receive descriptor list */
101  struct recv_desc_bufs *dlist; /* descriptor list address */
102  struct recv_desc_bufs *dlist_phys; /* descriptor list physical address */
103 
104  /* RT Net */
105  rtdm_irq_t irq_handle;
106  rtdm_irq_t phy_irq_handle;
107 };
108 
109 #endif
ipipe_spinlock_t rtdm_lock_t
Lock variable.
Definition: driver.h:551
Real-Time Driver Model for Xenomai, driver API header.