15420071dSZbigniew Bodek /*- 25420071dSZbigniew Bodek * Copyright (c) 2015 Semihalf 35420071dSZbigniew Bodek * Copyright (c) 2015 Stormshield 45420071dSZbigniew Bodek * All rights reserved. 55420071dSZbigniew Bodek * 65420071dSZbigniew Bodek * Redistribution and use in source and binary forms, with or without 75420071dSZbigniew Bodek * modification, are permitted provided that the following conditions 85420071dSZbigniew Bodek * are met: 95420071dSZbigniew Bodek * 1. Redistributions of source code must retain the above copyright 105420071dSZbigniew Bodek * notice, this list of conditions and the following disclaimer. 115420071dSZbigniew Bodek * 2. Redistributions in binary form must reproduce the above copyright 125420071dSZbigniew Bodek * notice, this list of conditions and the following disclaimer in the 135420071dSZbigniew Bodek * documentation and/or other materials provided with the distribution. 145420071dSZbigniew Bodek * 155420071dSZbigniew Bodek * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 165420071dSZbigniew Bodek * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 175420071dSZbigniew Bodek * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 185420071dSZbigniew Bodek * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 195420071dSZbigniew Bodek * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 205420071dSZbigniew Bodek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 215420071dSZbigniew Bodek * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 225420071dSZbigniew Bodek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 235420071dSZbigniew Bodek * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 245420071dSZbigniew Bodek * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 255420071dSZbigniew Bodek * SUCH DAMAGE. 265420071dSZbigniew Bodek * 275420071dSZbigniew Bodek * $FreeBSD$ 285420071dSZbigniew Bodek * 295420071dSZbigniew Bodek */ 305420071dSZbigniew Bodek 315420071dSZbigniew Bodek #ifndef _E6000SWREG_H_ 325420071dSZbigniew Bodek #define _E6000SWREG_H_ 335420071dSZbigniew Bodek 345420071dSZbigniew Bodek struct atu_opt { 355420071dSZbigniew Bodek uint16_t mac_01; 365420071dSZbigniew Bodek uint16_t mac_23; 375420071dSZbigniew Bodek uint16_t mac_45; 385420071dSZbigniew Bodek uint16_t fid; 395420071dSZbigniew Bodek }; 405420071dSZbigniew Bodek 415420071dSZbigniew Bodek /* 425420071dSZbigniew Bodek * Definitions for the Marvell 88E6000 series Ethernet Switch. 435420071dSZbigniew Bodek */ 445420071dSZbigniew Bodek 455420071dSZbigniew Bodek /* 465420071dSZbigniew Bodek * Switch Registers 475420071dSZbigniew Bodek */ 485420071dSZbigniew Bodek #define REG_GLOBAL 0x1b 495420071dSZbigniew Bodek #define REG_GLOBAL2 0x1c 505420071dSZbigniew Bodek #define REG_PORT(p) (0x10 + (p)) 515420071dSZbigniew Bodek 525420071dSZbigniew Bodek #define REG_NUM_MAX 31 535420071dSZbigniew Bodek 545420071dSZbigniew Bodek /* 555420071dSZbigniew Bodek * Per-Port Switch Registers 565420071dSZbigniew Bodek */ 575420071dSZbigniew Bodek #define PORT_STATUS 0x0 58*2dd02006SWojciech Macek #define PORT_STATUS_SPEED_MASK 0x300 59*2dd02006SWojciech Macek #define PORT_STATUS_SPEED_10 0 60*2dd02006SWojciech Macek #define PORT_STATUS_SPEED_100 1 61*2dd02006SWojciech Macek #define PORT_STATUS_SPEED_1000 2 62*2dd02006SWojciech Macek #define PORT_STATUS_DUPLEX_MASK (1 << 10) 63*2dd02006SWojciech Macek #define PORT_STATUS_LINK_MASK (1 << 11) 64*2dd02006SWojciech Macek #define PORT_STATUS_PHY_DETECT_MASK (1 << 12) 65*2dd02006SWojciech Macek 665420071dSZbigniew Bodek #define PSC_CONTROL 0x1 675420071dSZbigniew Bodek #define SWITCH_ID 0x3 685420071dSZbigniew Bodek #define PORT_CONTROL 0x4 695420071dSZbigniew Bodek #define PORT_CONTROL_1 0x5 705420071dSZbigniew Bodek #define PORT_VLAN_MAP 0x6 715420071dSZbigniew Bodek #define PORT_VID 0x7 725420071dSZbigniew Bodek #define PORT_ASSOCIATION_VECTOR 0xb 735420071dSZbigniew Bodek #define PORT_ATU_CTRL 0xc 745420071dSZbigniew Bodek #define RX_COUNTER 0x12 755420071dSZbigniew Bodek #define TX_COUNTER 0x13 765420071dSZbigniew Bodek 775420071dSZbigniew Bodek #define PORT_VID_DEF_VID 0 785420071dSZbigniew Bodek #define PORT_VID_DEF_VID_MASK 0xfff 795420071dSZbigniew Bodek #define PORT_VID_PRIORITY_MASK 0xc00 805420071dSZbigniew Bodek 815420071dSZbigniew Bodek #define PORT_CONTROL_ENABLE 0x3 825420071dSZbigniew Bodek 835420071dSZbigniew Bodek /* PORT_VLAN fields */ 845420071dSZbigniew Bodek #define PORT_VLAN_MAP_TABLE_MASK 0x7f 855420071dSZbigniew Bodek #define PORT_VLAN_MAP_FID 12 865420071dSZbigniew Bodek #define PORT_VLAN_MAP_FID_MASK 0xf000 875420071dSZbigniew Bodek /* 885420071dSZbigniew Bodek * Switch Global Register 1 accessed via REG_GLOBAL_ADDR 895420071dSZbigniew Bodek */ 905420071dSZbigniew Bodek #define SWITCH_GLOBAL_STATUS 0 915420071dSZbigniew Bodek #define SWITCH_GLOBAL_CONTROL 4 925420071dSZbigniew Bodek #define SWITCH_GLOBAL_CONTROL2 28 935420071dSZbigniew Bodek 945420071dSZbigniew Bodek #define MONITOR_CONTROL 26 955420071dSZbigniew Bodek 965420071dSZbigniew Bodek /* ATU operation */ 975420071dSZbigniew Bodek #define ATU_FID 1 985420071dSZbigniew Bodek #define ATU_CONTROL 10 995420071dSZbigniew Bodek #define ATU_OPERATION 11 1005420071dSZbigniew Bodek #define ATU_DATA 12 1015420071dSZbigniew Bodek #define ATU_MAC_ADDR01 13 1025420071dSZbigniew Bodek #define ATU_MAC_ADDR23 14 1035420071dSZbigniew Bodek #define ATU_MAC_ADDR45 15 1045420071dSZbigniew Bodek 1055420071dSZbigniew Bodek #define ATU_UNIT_BUSY (1 << 15) 1065420071dSZbigniew Bodek #define ENTRY_STATE 0xf 1075420071dSZbigniew Bodek 1085420071dSZbigniew Bodek /* ATU_CONTROL fields */ 1095420071dSZbigniew Bodek #define ATU_CONTROL_AGETIME 4 1105420071dSZbigniew Bodek #define ATU_CONTROL_AGETIME_MASK 0xff0 1115420071dSZbigniew Bodek #define ATU_CONTROL_LEARN2ALL 3 1125420071dSZbigniew Bodek 1135420071dSZbigniew Bodek /* ATU opcode */ 1145420071dSZbigniew Bodek #define NO_OPERATION (0 << 0) 1155420071dSZbigniew Bodek #define FLUSH_ALL (1 << 0) 1165420071dSZbigniew Bodek #define FLUSH_NON_STATIC (1 << 1) 1175420071dSZbigniew Bodek #define LOAD_FROM_FIB (3 << 0) 1185420071dSZbigniew Bodek #define PURGE_FROM_FIB (3 << 0) 1195420071dSZbigniew Bodek #define GET_NEXT_IN_FIB (1 << 2) 1205420071dSZbigniew Bodek #define FLUSH_ALL_IN_FIB (5 << 0) 1215420071dSZbigniew Bodek #define FLUSH_NON_STATIC_IN_FIB (3 << 1) 1225420071dSZbigniew Bodek #define GET_VIOLATION_DATA (7 << 0) 1235420071dSZbigniew Bodek #define CLEAR_VIOLATION_DATA (7 << 0) 1245420071dSZbigniew Bodek 1255420071dSZbigniew Bodek /* ATU Stats */ 1265420071dSZbigniew Bodek #define COUNT_ALL (0 << 0) 1275420071dSZbigniew Bodek 1285420071dSZbigniew Bodek /* 1295420071dSZbigniew Bodek * Switch Global Register 2 accessed via REG_GLOBAL2_ADDR 1305420071dSZbigniew Bodek */ 1315420071dSZbigniew Bodek #define MGMT_EN_2x 2 1325420071dSZbigniew Bodek #define MGMT_EN_0x 3 1335420071dSZbigniew Bodek #define SWITCH_MGMT 5 1345420071dSZbigniew Bodek #define ATU_STATS 14 1355420071dSZbigniew Bodek 1365420071dSZbigniew Bodek #define MGMT_EN_ALL 0xffff 1375420071dSZbigniew Bodek 1385420071dSZbigniew Bodek /* SWITCH_MGMT fields */ 1395420071dSZbigniew Bodek 1405420071dSZbigniew Bodek #define SWITCH_MGMT_PRI 0 1415420071dSZbigniew Bodek #define SWITCH_MGMT_PRI_MASK 7 1425420071dSZbigniew Bodek #define SWITCH_MGMT_RSVD2CPU 3 1435420071dSZbigniew Bodek #define SWITCH_MGMT_FC_PRI 4 1445420071dSZbigniew Bodek #define SWITCH_MGMT_FC_PRI_MASK (7 << 4) 1455420071dSZbigniew Bodek #define SWITCH_MGMT_FORCEFLOW 7 1465420071dSZbigniew Bodek 1475420071dSZbigniew Bodek /* ATU_STATS fields */ 1485420071dSZbigniew Bodek 1495420071dSZbigniew Bodek #define ATU_STATS_BIN 14 1505420071dSZbigniew Bodek #define ATU_STATS_FLAG 12 1515420071dSZbigniew Bodek 1525420071dSZbigniew Bodek /* 1535420071dSZbigniew Bodek * PHY registers accessed via 'Switch Global Registers' (REG_GLOBAL2). 1545420071dSZbigniew Bodek */ 1555420071dSZbigniew Bodek #define SMI_PHY_CMD_REG 0x18 1565420071dSZbigniew Bodek #define SMI_PHY_DATA_REG 0x19 1575420071dSZbigniew Bodek 1585420071dSZbigniew Bodek #define PHY_CMD 0x18 1595420071dSZbigniew Bodek #define PHY_DATA 0x19 1605420071dSZbigniew Bodek #define PHY_DATA_MASK 0xffff 1615420071dSZbigniew Bodek 1625420071dSZbigniew Bodek #define PHY_CMD_SMI_BUSY 15 1635420071dSZbigniew Bodek #define PHY_CMD_MODE 12 1645420071dSZbigniew Bodek #define PHY_CMD_MODE_MDIO 1 1655420071dSZbigniew Bodek #define PHY_CMD_MODE_XMDIO 0 1665420071dSZbigniew Bodek #define PHY_CMD_OPCODE 10 1675420071dSZbigniew Bodek #define PHY_CMD_OPCODE_WRITE 1 1685420071dSZbigniew Bodek #define PHY_CMD_OPCODE_READ 2 1695420071dSZbigniew Bodek #define PHY_CMD_DEV_ADDR 5 1705420071dSZbigniew Bodek #define PHY_CMD_DEV_ADDR_MASK 0x3e0 1715420071dSZbigniew Bodek #define PHY_CMD_REG_ADDR 0 1725420071dSZbigniew Bodek #define PHY_CMD_REG_ADDR_MASK 0x1f 1735420071dSZbigniew Bodek 1745420071dSZbigniew Bodek #define PHY_PAGE_REG 22 1755420071dSZbigniew Bodek 176f7c13d78SZbigniew Bodek /* 177f7c13d78SZbigniew Bodek * Scratch and Misc register accessed via 178f7c13d78SZbigniew Bodek * 'Switch Global Registers' (REG_GLOBAL2) 179f7c13d78SZbigniew Bodek */ 180f7c13d78SZbigniew Bodek #define SCR_AND_MISC_REG 0x1a 181f7c13d78SZbigniew Bodek 182f7c13d78SZbigniew Bodek #define SCR_AND_MISC_PTR_CFG 0x7000 183f7c13d78SZbigniew Bodek #define SCR_AND_MISC_DATA_CFG_MASK 0xf0 184f7c13d78SZbigniew Bodek 1855420071dSZbigniew Bodek #define E6000SW_NUM_PHY_REGS 29 1865420071dSZbigniew Bodek #define E6000SW_NUM_VGROUPS 8 187f7c13d78SZbigniew Bodek #define E6000SW_MAX_PORTS 10 1885420071dSZbigniew Bodek #define E6000SW_PORT_NO_VGROUP -1 1895420071dSZbigniew Bodek #define E6000SW_DEFAULT_AGETIME 20 1905420071dSZbigniew Bodek #define E6000SW_RETRIES 100 191f7c13d78SZbigniew Bodek #define E6000SW_SMI_TIMEOUT 16 1925420071dSZbigniew Bodek 1935420071dSZbigniew Bodek #endif /* _E6000SWREG_H_ */ 194