Xenomai 3.3.2
Loading...
Searching...
No Matches
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
68struct rbf_t
69{
70 unsigned int addr;
71 unsigned long size;
72};
73
74struct 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
80struct 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
Real-Time Driver Model for Xenomai, driver API header.
pipeline_spinlock_t rtdm_lock_t
Lock variable.
Definition driver.h:552