]> begriffs open source - freertos/blob - Demo/lwIP_AVR32_UC3/NETWORK/EMAC/DP83848.h
Add AVR32 port and demo files.
[freertos] / Demo / lwIP_AVR32_UC3 / NETWORK / EMAC / DP83848.h
1 /* This header file is part of the ATMEL FREERTOS-0.9.0 Release */\r
2 \r
3 /*This file has been prepared for Doxygen automatic documentation generation.*/\r
4 /*! \file *********************************************************************\r
5  *\r
6  * \brief PHY abstraction layer for AVR32 UC3 on EVK1100.\r
7  *\r
8  * - Compiler:           GNU GCC for AVR32\r
9  * - Supported devices:  All AVR32 devices can be used.\r
10  * - AppNote:\r
11  *\r
12  * \author               Atmel Corporation: http://www.atmel.com \n\r
13  *                       Support email: avr32@atmel.com\r
14  *\r
15  *****************************************************************************/\r
16 \r
17 /* Copyright (c) 2007, Atmel Corporation All rights reserved.\r
18  *\r
19  * Redistribution and use in source and binary forms, with or without\r
20  * modification, are permitted provided that the following conditions are met:\r
21  *\r
22  * 1. Redistributions of source code must retain the above copyright notice,\r
23  * this list of conditions and the following disclaimer.\r
24  *\r
25  * 2. Redistributions in binary form must reproduce the above copyright notice,\r
26  * this list of conditions and the following disclaimer in the documentation\r
27  * and/or other materials provided with the distribution.\r
28  *\r
29  * 3. The name of ATMEL may not be used to endorse or promote products derived\r
30  * from this software without specific prior written permission.\r
31  *\r
32  * THIS SOFTWARE IS PROVIDED BY ATMEL ``AS IS'' AND ANY EXPRESS OR IMPLIED\r
33  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
34  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY AND\r
35  * SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT,\r
36  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r
37  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r
38  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r
39  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
40  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\r
41  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
42  */\r
43 \r
44 /* DP83848 registers. */\r
45 /*! Generic MII registers. */\r
46 #define PHY_BMCR            0x00        /* Basic mode control register */\r
47 #define PHY_BMSR            0x01        /* Basic mode status register  */\r
48 #define PHY_PHYSID1         0x02        /* PHYS ID 1                   */\r
49 #define PHY_PHYSID2         0x03        /* PHYS ID 2                   */\r
50 #define PHY_ADVERTISE       0x04        /* Advertisement control reg   */\r
51 #define PHY_LPA             0x05        /* Link partner ability reg    */\r
52 \r
53 #if BOARD == EVK1100\r
54 /*! Extended registers for DP83848 */\r
55 #define PHY_RBR             0x17        /* RMII Bypass reg             */\r
56 #define PHY_MICR            0x11        /* Interrupt Control reg       */\r
57 #define PHY_MISR            0x12        /* Interrupt Status reg        */\r
58 #define PHY_PHYCR           0x19        /* Phy CTRL reg                */\r
59 #endif\r
60 \r
61 \r
62 /*! Basic mode control register. */\r
63 #define BMCR_RESV               0x007f  /* Unused...                   */\r
64 #define BMCR_CTST               0x0080  /* Collision test              */\r
65 #define BMCR_FULLDPLX           0x0100  /* Full duplex                 */\r
66 #define BMCR_ANRESTART          0x0200  /* Auto negotiation restart    */\r
67 #define BMCR_ISOLATE            0x0400  /* Disconnect PHY from MII     */\r
68 #define BMCR_PDOWN              0x0800  /* Powerdown the PHY           */\r
69 #define BMCR_ANENABLE           0x1000  /* Enable auto negotiation     */\r
70 #define BMCR_SPEED100           0x2000  /* Select 100Mbps              */\r
71 #define BMCR_LOOPBACK           0x4000  /* TXD loopback bits           */\r
72 #define BMCR_RESET              0x8000  /* Reset the PHY               */\r
73 \r
74 /*! Basic mode status register. */\r
75 #define BMSR_ERCAP              0x0001  /* Ext-reg capability          */\r
76 #define BMSR_JCD                0x0002  /* Jabber detected             */\r
77 #define BMSR_LSTATUS            0x0004  /* Link status                 */\r
78 #define BMSR_ANEGCAPABLE        0x0008  /* Able to do auto-negotiation */\r
79 #define BMSR_RFAULT             0x0010  /* Remote fault detected       */\r
80 #define BMSR_ANEGCOMPLETE       0x0020  /* Auto-negotiation complete   */\r
81 #define BMSR_RESV               0x00c0  /* Unused...                   */\r
82 #define BMSR_ESTATEN            0x0100  /* Extended Status in R15 */\r
83 #define BMSR_100FULL2           0x0200  /* Can do 100BASE-T2 HDX */\r
84 #define BMSR_100HALF2           0x0400  /* Can do 100BASE-T2 FDX */\r
85 #define BMSR_10HALF             0x0800  /* Can do 10mbps, half-duplex  */\r
86 #define BMSR_10FULL             0x1000  /* Can do 10mbps, full-duplex  */\r
87 #define BMSR_100HALF            0x2000  /* Can do 100mbps, half-duplex */\r
88 #define BMSR_100FULL            0x4000  /* Can do 100mbps, full-duplex */\r
89 #define BMSR_100BASE4           0x8000  /* Can do 100mbps, 4k packets  */\r
90 \r
91 /*! Advertisement control register. */\r
92 #define ADVERTISE_SLCT          0x001f  /* Selector bits               */\r
93 #define ADVERTISE_CSMA          0x0001  /* Only selector supported     */\r
94 #define ADVERTISE_10HALF        0x0020  /* Try for 10mbps half-duplex  */\r
95 #define ADVERTISE_1000XFULL     0x0020  /* Try for 1000BASE-X full-duplex */\r
96 #define ADVERTISE_10FULL        0x0040  /* Try for 10mbps full-duplex  */\r
97 #define ADVERTISE_1000XHALF     0x0040  /* Try for 1000BASE-X half-duplex */\r
98 #define ADVERTISE_100HALF       0x0080  /* Try for 100mbps half-duplex */\r
99 #define ADVERTISE_1000XPAUSE    0x0080  /* Try for 1000BASE-X pause    */\r
100 #define ADVERTISE_100FULL       0x0100  /* Try for 100mbps full-duplex */\r
101 #define ADVERTISE_1000XPSE_ASYM 0x0100  /* Try for 1000BASE-X asym pause */\r
102 #define ADVERTISE_100BASE4      0x0200  /* Try for 100mbps 4k packets  */\r
103 #define ADVERTISE_PAUSE_CAP     0x0400  /* Try for pause               */\r
104 #define ADVERTISE_PAUSE_ASYM    0x0800  /* Try for asymetric pause     */\r
105 #define ADVERTISE_RESV          0x1000  /* Unused...                   */\r
106 #define ADVERTISE_RFAULT        0x2000  /* Say we can detect faults    */\r
107 #define ADVERTISE_LPACK         0x4000  /* Ack link partners response  */\r
108 #define ADVERTISE_NPAGE         0x8000  /* Next page bit               */\r
109 \r
110 #define ADVERTISE_FULL (ADVERTISE_100FULL | ADVERTISE_10FULL | ADVERTISE_CSMA)\r
111 #define ADVERTISE_ALL (ADVERTISE_10HALF | ADVERTISE_10FULL | \\r
112                        ADVERTISE_100HALF | ADVERTISE_100FULL)\r
113 \r
114 /*! Link partner ability register. */\r
115 #define LPA_SLCT                0x001f  /* Same as advertise selector  */\r
116 #define LPA_10HALF              0x0020  /* Can do 10mbps half-duplex   */\r
117 #define LPA_1000XFULL           0x0020  /* Can do 1000BASE-X full-duplex */\r
118 #define LPA_10FULL              0x0040  /* Can do 10mbps full-duplex   */\r
119 #define LPA_1000XHALF           0x0040  /* Can do 1000BASE-X half-duplex */\r
120 #define LPA_100HALF             0x0080  /* Can do 100mbps half-duplex  */\r
121 #define LPA_1000XPAUSE          0x0080  /* Can do 1000BASE-X pause     */\r
122 #define LPA_100FULL             0x0100  /* Can do 100mbps full-duplex  */\r
123 #define LPA_1000XPAUSE_ASYM     0x0100  /* Can do 1000BASE-X pause asym*/\r
124 #define LPA_100BASE4            0x0200  /* Can do 100mbps 4k packets   */\r
125 #define LPA_PAUSE_CAP           0x0400  /* Can pause                   */\r
126 #define LPA_PAUSE_ASYM          0x0800  /* Can pause asymetrically     */\r
127 #define LPA_RESV                0x1000  /* Unused...                   */\r
128 #define LPA_RFAULT              0x2000  /* Link partner faulted        */\r
129 #define LPA_LPACK               0x4000  /* Link partner acked us       */\r
130 #define LPA_NPAGE               0x8000  /* Next page bit               */\r
131 \r
132 #define LPA_DUPLEX    (LPA_10FULL | LPA_100FULL)\r
133 #define LPA_100       (LPA_100FULL | LPA_100HALF | LPA_100BASE4)\r
134 \r
135 #if BOARD == EVK1100\r
136 /*! RMII Bypass Register */\r
137 #define RBR_RMII                 0x0020  /* RMII Mode          */\r
138 /*! Interrupt Ctrl Register */\r
139 #define MICR_INTEN               0x0002  /* Enable interrupts  */\r
140 #define MICR_INTOE               0x0001  /* Enable INT output  */\r
141 /*! Interrupt Status Register */\r
142 #define MISR_ED_INT_EN           0x0040  /* Energy Detect enabled      */\r
143 #define MISR_LINK_INT_EN         0x0020  /* Link status change enabled */\r
144 #define MISR_SPD_INT_EN          0x0010  /* Speed change enabled       */\r
145 #define MISR_DP_INT_EN           0x0008  /* Duplex mode change enabled */\r
146 #define MISR_ANC_INT_EN          0x0004  /* Auto-Neg complete enabled  */\r
147 #define MISR_FHF_INT_EN          0x0002  /* False Carrier enabled      */\r
148 #define MISR_RHF_INT_EN          0x0001  /* Receive Error enabled      */\r
149 #define MISR_ED_INT              0x4000  /* Energy Detect      */\r
150 #define MISR_LINK_INT            0x2000  /* Link status change */\r
151 #define MISR_SPD_INT             0x1000  /* Speed change       */\r
152 #define MISR_DP_INT              0x0800  /* Duplex mode change */\r
153 #define MISR_ANC_INT             0x0400  /* Auto-Neg complete  */\r
154 #define MISR_FHF_INT             0x0200  /* False Carrier      */\r
155 #define MISR_RHF_INT             0x0100  /* Receive Error      */\r
156 /*! Phy Ctrl Register */\r
157 #define PHYCR_MDIX_EN            0x8000  /* Enable Auto MDIX   */\r
158 #define PHYCR_MDIX_FORCE         0x4000  /* Force MDIX crossed */\r
159 #endif\r
160 \r
161 /*! PHY ID */\r
162 #define MII_DP83848_ID           0x20005C90     /* 0x00225541 */\r
163 \r
164 /*! PHY Address */\r
165 #define DP83848_PHY_ADDR         0x01\r
166 \r