| /* |
| * Copyright (c) 2009 Mindspeed Technologies, Inc. |
| * |
| * 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. |
| * |
| * 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; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
| * |
| */ |
| #ifndef _EMAC_H_ |
| #define _EMAC_H_ |
| |
| #define EMAC_NETWORK_CONTROL 0x000 |
| #define EMAC_NETWORK_CONFIG 0x004 |
| #define EMAC_NETWORK_STATUS 0x008 |
| #define EMAC_DMA_CONFIG 0x010 |
| |
| #define EMAC_PHY_MANAGEMENT 0x034 |
| |
| #define EMAC_HASH_BOT 0x080 |
| #define EMAC_HASH_TOP 0x084 |
| |
| #define EMAC_SPEC1_ADD_BOT 0x088 |
| #define EMAC_SPEC1_ADD_TOP 0x08c |
| #define EMAC_SPEC2_ADD_BOT 0x090 |
| #define EMAC_SPEC2_ADD_TOP 0x094 |
| #define EMAC_SPEC3_ADD_BOT 0x098 |
| #define EMAC_SPEC3_ADD_TOP 0x09c |
| #define EMAC_SPEC4_ADD_BOT 0x0a0 |
| #define EMAC_SPEC4_ADD_TOP 0x0a4 |
| #define EMAC_WOL_ENABLE 0x0b8 |
| |
| |
| #define EMAC_SPEC1_ADD_MASK_BOT 0x0c8 |
| #define EMAC_SPEC1_ADD_MASK_TOP 0x0cc |
| |
| #define EMAC_RMON_BASE_OFST 0x100 |
| |
| #define EMAC_SPEC5_ADD_BOT 0x300 |
| #define EMAC_SPEC5_ADD_TOP 0x304 |
| #define EMAC_SPEC6_ADD_BOT 0x308 |
| #define EMAC_SPEC6_ADD_TOP 0x30c |
| #define EMAC_SPEC7_ADD_BOT 0x310 |
| #define EMAC_SPEC7_ADD_TOP 0x314 |
| #define EMAC_SPEC8_ADD_BOT 0x318 |
| #define EMAC_SPEC8_ADD_TOP 0x31c |
| #define EMAC_SPEC9_ADD_BOT 0x320 |
| #define EMAC_SPEC9_ADD_TOP 0x324 |
| #define EMAC_SPEC10_ADD_BOT 0x328 |
| #define EMAC_SPEC10_ADD_TOP 0x32c |
| #define EMAC_SPEC11_ADD_BOT 0x330 |
| #define EMAC_SPEC11_ADD_TOP 0x334 |
| #define EMAC_SPEC12_ADD_BOT 0x338 |
| #define EMAC_SPEC12_ADD_TOP 0x33c |
| #define EMAC_SPEC13_ADD_BOT 0x340 |
| #define EMAC_SPEC13_ADD_TOP 0x344 |
| #define EMAC_SPEC14_ADD_BOT 0x348 |
| #define EMAC_SPEC14_ADD_TOP 0x34c |
| #define EMAC_SPEC15_ADD_BOT 0x350 |
| #define EMAC_SPEC15_ADD_TOP 0x354 |
| #define EMAC_SPEC16_ADD_BOT 0x358 |
| #define EMAC_SPEC16_ADD_TOP 0x35c |
| #define EMAC_SPEC17_ADD_BOT 0x360 |
| #define EMAC_SPEC17_ADD_TOP 0x364 |
| #define EMAC_SPEC18_ADD_BOT 0x368 |
| #define EMAC_SPEC18_ADD_TOP 0x36c |
| #define EMAC_SPEC19_ADD_BOT 0x370 |
| #define EMAC_SPEC19_ADD_TOP 0x374 |
| #define EMAC_SPEC20_ADD_BOT 0x378 |
| #define EMAC_SPEC20_ADD_TOP 0x37c |
| #define EMAC_SPEC21_ADD_BOT 0x380 |
| #define EMAC_SPEC21_ADD_TOP 0x384 |
| #define EMAC_SPEC22_ADD_BOT 0x388 |
| #define EMAC_SPEC22_ADD_TOP 0x38c |
| #define EMAC_SPEC23_ADD_BOT 0x390 |
| #define EMAC_SPEC23_ADD_TOP 0x394 |
| #define EMAC_SPEC24_ADD_BOT 0x398 |
| #define EMAC_SPEC24_ADD_TOP 0x39c |
| #define EMAC_SPEC25_ADD_BOT 0x3a0 |
| #define EMAC_SPEC25_ADD_TOP 0x3a4 |
| #define EMAC_SPEC26_ADD_BOT 0x3a8 |
| #define EMAC_SPEC26_ADD_TOP 0x3ac |
| #define EMAC_SPEC27_ADD_BOT 0x3b0 |
| #define EMAC_SPEC27_ADD_TOP 0x3b4 |
| #define EMAC_SPEC28_ADD_BOT 0x3b8 |
| #define EMAC_SPEC28_ADD_TOP 0x3bc |
| #define EMAC_SPEC29_ADD_BOT 0x3c0 |
| #define EMAC_SPEC29_ADD_TOP 0x3c4 |
| #define EMAC_SPEC30_ADD_BOT 0x3c8 |
| #define EMAC_SPEC30_ADD_TOP 0x3cc |
| #define EMAC_SPEC31_ADD_BOT 0x3d0 |
| #define EMAC_SPEC31_ADD_TOP 0x3d4 |
| #define EMAC_SPEC32_ADD_BOT 0x3d8 |
| #define EMAC_SPEC32_ADD_TOP 0x3dc |
| |
| #define EMAC_SPEC_ADDR_MAX 32 |
| |
| #define EMAC_CONTROL 0x7a0 |
| |
| /* An enumerated type for loopback values. This can be one of three values, no |
| * loopback -normal operation, local loopback with internal loopback module of |
| * MAC or PHY loopback which is through the external PHY. |
| */ |
| #ifndef __MAC_LOOP_ENUM__ |
| #define __MAC_LOOP_ENUM__ |
| typedef enum {LB_NONE, LB_EXT, LB_LOCAL} MAC_LOOP; |
| #endif |
| |
| /* GEMAC definitions and settings */ |
| |
| #define EMAC_PORT_0 0 |
| #define EMAC_PORT_1 1 |
| #define EMAC_PORT_2 2 |
| |
| /* The possible operating speeds of the MAC, currently supporting 10, 100 and |
| * 1000Mb modes. |
| */ |
| typedef enum {SPEED_10M, SPEED_100M, SPEED_1000M, SPEED_1000M_PCS} MAC_SPEED; |
| |
| #define GMII 1 |
| #define MII 2 |
| #define RMII 3 |
| #define RGMII 4 |
| #define SGMII 5 |
| |
| #define DUP_HALF 0x00 |
| #define DUP_FULL 0x01 |
| |
| /* EMAC_NETWORK_CONTROL bits definition */ |
| #define EMAC_LB_PHY (1 << 0) |
| #define EMAC_LB_MAC (1 << 1) |
| #define EMAC_RX_ENABLE (1 << 2) |
| #define EMAC_TX_ENABLE (1 << 3) |
| #define EMAC_MDIO_EN (1 << 4) /* Enable MDIO port */ |
| |
| /* WoL (Wake on Lan bit definition) */ |
| #define WAKE_LAN_MAGIC (1 << 16) |
| #define WAKE_LAN_ARP (1 << 17) |
| #define WAKE_LAN_SPEC_ADDR (1 << 18) |
| #define WAKE_LAN_MULTI (1 << 19) |
| |
| |
| /* EMAC_NETWORK_CONFIG bits definition */ |
| #define EMAC_SPEED_100 (1 << 0) |
| #define EMAC_HALF_DUP (0 << 1) |
| #define EMAC_FULL_DUP (1 << 1) |
| #define EMAC_DUPLEX_MASK (1 << 1) |
| #define EMAC_ENABLE_JUMBO_FRAME (1 << 3) |
| #define EMAC_ENABLE_COPY_ALL (1 << 4) |
| #define EMAC_NO_BROADCAST (1 << 5) |
| #define EMAC_ENABLE_MULTICAST (1 << 6) |
| #define EMAC_ENABLE_UNICAST (1 << 7) |
| #define EMAC_ENABLE_1536_RX (1 << 8) |
| #define EMAC_SPEED_1000 (1 << 10) |
| #define EMAC_PCS_ENABLE (1 << 11) |
| #define EMAC_ENABLE_PAUSE_RX (1 << 13) |
| #define EMAC_REMOVE_FCS (1 << 17) |
| #define EMAC_ENABLE_CHKSUM_RX (1 << 24) |
| #define EMAC_MDC_DIV_MASK (0x7 << 18) /* PCLK divisor for MDC */ |
| #define EMAC_DATA_BUS_WIDTH_SHIFT 21 |
| #define EMAC_DATA_BUS_WIDTH_MASK (0x3 << EMAC_DATA_BUS_WIDTH_SHIFT) |
| #define EMAC_DATA_BUS_WIDTH_32 (0x00 << EMAC_DATA_BUS_WIDTH_SHIFT) |
| #define EMAC_DATA_BUS_WIDTH_64 (0x01 << EMAC_DATA_BUS_WIDTH_SHIFT) |
| #define EMAC_DATA_BUS_WIDTH_128 (0x10 << EMAC_DATA_BUS_WIDTH_SHIFT) |
| #define EMAC_ENABLE_FCS_RX (1 << 26) |
| #define EMAC_SGMII_MODE_ENABLE (1 << 27) |
| |
| #define EMAC_SPEED_MASK (EMAC_SPEED_100 | EMAC_SPEED_1000) |
| |
| |
| /* EMAC_CONTROL bits definition */ |
| #define EMAC_TWO_BYTES_IP_ALIGN (1 << 0) // two bytes IP alignement |
| |
| /* EMAC_NET_STATUS bits definition */ |
| #define EMAC_PHY_IDLE (1<<2) /* PHY management is idle */ |
| #define EMAC_MDIO_IN (1<<1) /* Status of mdio_in pin */ |
| #define EMAC_LINK_STATUS (1<<0) /* Status of link pin */ |
| |
| /* EMAC_DMA_CONFIG Bit definitions */ |
| #define EMAC_ENABLE_CHKSUM_TX (1<<11) |
| |
| //RMII enable – bit 1 / RGMII enable – bit 2 |
| #define EMAC_RMII_MODE_ENABLE ((1 << 1) | (0 << 2)) |
| #define EMAC_RMII_MODE_DISABLE (0 << 1) |
| #define EMAC_RGMII_MODE_ENABLE ((0 << 1) | (1 << 2)) |
| #define EMAC_RGMII_MODE_DISABLE (0 << 2) |
| #define EMAC_MII_MODE_ENABLE (EMAC_RMII_MODE_DISABLE | EMAC_RGMII_MODE_DISABLE) |
| #define EMAC_GMII_MODE_ENABLE (EMAC_RMII_MODE_DISABLE | EMAC_RGMII_MODE_DISABLE) |
| #define EMAC_MODE_MASK (0x3 << 1) |
| |
| /* Default configuration */ |
| #define EMAC0_DEFAULT_DUPLEX_MODE FULLDUPLEX |
| #define EMAC0_DEFAULT_EMAC_MODE RGMII |
| #define EMAC0_DEFAULT_EMAC_SPEED SPEED_1000M |
| |
| #define EMAC1_DEFAULT_DUPLEX_MODE FULLDUPLEX |
| #define EMAC1_DEFAULT_EMAC_MODE RGMII |
| #define EMAC1_DEFAULT_EMAC_SPEED SPEED_1000M |
| |
| #define EMAC2_DEFAULT_DUPLEX_MODE FULLDUPLEX |
| #define EMAC2_DEFAULT_EMAC_MODE RGMII |
| #define EMAC2_DEFAULT_EMAC_SPEED SPEED_1000M |
| |
| /* EMAC Hash size */ |
| #define EMAC_HASH_REG_BITS 64 |
| |
| /* The Address organisation for the MAC device. All addresses are split into |
| * two 32-bit register fields. The first one (bottom) is the lower 32-bits of |
| * the address and the other field are the high order bits - this may be 16-bits |
| * in the case of MAC addresses, or 32-bits for the hash address. |
| * In terms of memory storage, the first item (bottom) is assumed to be at a |
| * lower address location than 'top'. i.e. top should be at address location of |
| * 'bottom' + 4 bytes. |
| */ |
| typedef struct { |
| u32 bottom; /* Lower 32-bits of address. */ |
| u32 top; /* Upper 32-bits of address. */ |
| } MAC_ADDR; |
| |
| |
| /* The following is the organisation of the address filters section of the MAC |
| * registers. The Cadence MAC contains four possible specific address match |
| * addresses, if an incoming frame corresponds to any one of these four |
| * addresses then the frame will be copied to memory. |
| * It is not necessary for all four of the address match registers to be |
| * programmed, this is application dependant. |
| */ |
| typedef struct { |
| MAC_ADDR one; /* Specific address register 1. */ |
| MAC_ADDR two; /* Specific address register 2. */ |
| MAC_ADDR three; /* Specific address register 3. */ |
| MAC_ADDR four; /* Specific address register 4. */ |
| } SPEC_ADDR; |
| |
| typedef struct { |
| u32 mode; |
| u32 speed; |
| u32 duplex; |
| } GEMAC_CFG; |
| |
| #endif /* _EMAC_H_ */ |