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 585420071dSZbigniew Bodek #define PSC_CONTROL 0x1 595420071dSZbigniew Bodek #define SWITCH_ID 0x3 605420071dSZbigniew Bodek #define PORT_CONTROL 0x4 615420071dSZbigniew Bodek #define PORT_CONTROL_1 0x5 625420071dSZbigniew Bodek #define PORT_VLAN_MAP 0x6 635420071dSZbigniew Bodek #define PORT_VID 0x7 645420071dSZbigniew Bodek #define PORT_ASSOCIATION_VECTOR 0xb 655420071dSZbigniew Bodek #define PORT_ATU_CTRL 0xc 665420071dSZbigniew Bodek #define RX_COUNTER 0x12 675420071dSZbigniew Bodek #define TX_COUNTER 0x13 685420071dSZbigniew Bodek 695420071dSZbigniew Bodek #define PORT_VID_DEF_VID 0 705420071dSZbigniew Bodek #define PORT_VID_DEF_VID_MASK 0xfff 715420071dSZbigniew Bodek #define PORT_VID_PRIORITY_MASK 0xc00 725420071dSZbigniew Bodek 735420071dSZbigniew Bodek #define PORT_CONTROL_ENABLE 0x3 745420071dSZbigniew Bodek 755420071dSZbigniew Bodek /* PORT_VLAN fields */ 765420071dSZbigniew Bodek #define PORT_VLAN_MAP_TABLE_MASK 0x7f 775420071dSZbigniew Bodek #define PORT_VLAN_MAP_FID 12 785420071dSZbigniew Bodek #define PORT_VLAN_MAP_FID_MASK 0xf000 795420071dSZbigniew Bodek /* 805420071dSZbigniew Bodek * Switch Global Register 1 accessed via REG_GLOBAL_ADDR 815420071dSZbigniew Bodek */ 825420071dSZbigniew Bodek #define SWITCH_GLOBAL_STATUS 0 835420071dSZbigniew Bodek #define SWITCH_GLOBAL_CONTROL 4 845420071dSZbigniew Bodek #define SWITCH_GLOBAL_CONTROL2 28 855420071dSZbigniew Bodek 865420071dSZbigniew Bodek #define MONITOR_CONTROL 26 875420071dSZbigniew Bodek 885420071dSZbigniew Bodek /* ATU operation */ 895420071dSZbigniew Bodek #define ATU_FID 1 905420071dSZbigniew Bodek #define ATU_CONTROL 10 915420071dSZbigniew Bodek #define ATU_OPERATION 11 925420071dSZbigniew Bodek #define ATU_DATA 12 935420071dSZbigniew Bodek #define ATU_MAC_ADDR01 13 945420071dSZbigniew Bodek #define ATU_MAC_ADDR23 14 955420071dSZbigniew Bodek #define ATU_MAC_ADDR45 15 965420071dSZbigniew Bodek 975420071dSZbigniew Bodek #define ATU_UNIT_BUSY (1 << 15) 985420071dSZbigniew Bodek #define ENTRY_STATE 0xf 995420071dSZbigniew Bodek 1005420071dSZbigniew Bodek /* ATU_CONTROL fields */ 1015420071dSZbigniew Bodek #define ATU_CONTROL_AGETIME 4 1025420071dSZbigniew Bodek #define ATU_CONTROL_AGETIME_MASK 0xff0 1035420071dSZbigniew Bodek #define ATU_CONTROL_LEARN2ALL 3 1045420071dSZbigniew Bodek 1055420071dSZbigniew Bodek /* ATU opcode */ 1065420071dSZbigniew Bodek #define NO_OPERATION (0 << 0) 1075420071dSZbigniew Bodek #define FLUSH_ALL (1 << 0) 1085420071dSZbigniew Bodek #define FLUSH_NON_STATIC (1 << 1) 1095420071dSZbigniew Bodek #define LOAD_FROM_FIB (3 << 0) 1105420071dSZbigniew Bodek #define PURGE_FROM_FIB (3 << 0) 1115420071dSZbigniew Bodek #define GET_NEXT_IN_FIB (1 << 2) 1125420071dSZbigniew Bodek #define FLUSH_ALL_IN_FIB (5 << 0) 1135420071dSZbigniew Bodek #define FLUSH_NON_STATIC_IN_FIB (3 << 1) 1145420071dSZbigniew Bodek #define GET_VIOLATION_DATA (7 << 0) 1155420071dSZbigniew Bodek #define CLEAR_VIOLATION_DATA (7 << 0) 1165420071dSZbigniew Bodek 1175420071dSZbigniew Bodek /* ATU Stats */ 1185420071dSZbigniew Bodek #define COUNT_ALL (0 << 0) 1195420071dSZbigniew Bodek 1205420071dSZbigniew Bodek /* 1215420071dSZbigniew Bodek * Switch Global Register 2 accessed via REG_GLOBAL2_ADDR 1225420071dSZbigniew Bodek */ 1235420071dSZbigniew Bodek #define MGMT_EN_2x 2 1245420071dSZbigniew Bodek #define MGMT_EN_0x 3 1255420071dSZbigniew Bodek #define SWITCH_MGMT 5 1265420071dSZbigniew Bodek #define ATU_STATS 14 1275420071dSZbigniew Bodek 1285420071dSZbigniew Bodek #define MGMT_EN_ALL 0xffff 1295420071dSZbigniew Bodek 1305420071dSZbigniew Bodek /* SWITCH_MGMT fields */ 1315420071dSZbigniew Bodek 1325420071dSZbigniew Bodek #define SWITCH_MGMT_PRI 0 1335420071dSZbigniew Bodek #define SWITCH_MGMT_PRI_MASK 7 1345420071dSZbigniew Bodek #define SWITCH_MGMT_RSVD2CPU 3 1355420071dSZbigniew Bodek #define SWITCH_MGMT_FC_PRI 4 1365420071dSZbigniew Bodek #define SWITCH_MGMT_FC_PRI_MASK (7 << 4) 1375420071dSZbigniew Bodek #define SWITCH_MGMT_FORCEFLOW 7 1385420071dSZbigniew Bodek 1395420071dSZbigniew Bodek /* ATU_STATS fields */ 1405420071dSZbigniew Bodek 1415420071dSZbigniew Bodek #define ATU_STATS_BIN 14 1425420071dSZbigniew Bodek #define ATU_STATS_FLAG 12 1435420071dSZbigniew Bodek 1445420071dSZbigniew Bodek /* 1455420071dSZbigniew Bodek * PHY registers accessed via 'Switch Global Registers' (REG_GLOBAL2). 1465420071dSZbigniew Bodek */ 1475420071dSZbigniew Bodek #define SMI_PHY_CMD_REG 0x18 1485420071dSZbigniew Bodek #define SMI_PHY_DATA_REG 0x19 1495420071dSZbigniew Bodek 1505420071dSZbigniew Bodek #define PHY_CMD 0x18 1515420071dSZbigniew Bodek #define PHY_DATA 0x19 1525420071dSZbigniew Bodek #define PHY_DATA_MASK 0xffff 1535420071dSZbigniew Bodek 1545420071dSZbigniew Bodek #define PHY_CMD_SMI_BUSY 15 1555420071dSZbigniew Bodek #define PHY_CMD_MODE 12 1565420071dSZbigniew Bodek #define PHY_CMD_MODE_MDIO 1 1575420071dSZbigniew Bodek #define PHY_CMD_MODE_XMDIO 0 1585420071dSZbigniew Bodek #define PHY_CMD_OPCODE 10 1595420071dSZbigniew Bodek #define PHY_CMD_OPCODE_WRITE 1 1605420071dSZbigniew Bodek #define PHY_CMD_OPCODE_READ 2 1615420071dSZbigniew Bodek #define PHY_CMD_DEV_ADDR 5 1625420071dSZbigniew Bodek #define PHY_CMD_DEV_ADDR_MASK 0x3e0 1635420071dSZbigniew Bodek #define PHY_CMD_REG_ADDR 0 1645420071dSZbigniew Bodek #define PHY_CMD_REG_ADDR_MASK 0x1f 1655420071dSZbigniew Bodek 1665420071dSZbigniew Bodek #define PHY_PAGE_REG 22 1675420071dSZbigniew Bodek 168*f7c13d78SZbigniew Bodek /* 169*f7c13d78SZbigniew Bodek * Scratch and Misc register accessed via 170*f7c13d78SZbigniew Bodek * 'Switch Global Registers' (REG_GLOBAL2) 171*f7c13d78SZbigniew Bodek */ 172*f7c13d78SZbigniew Bodek #define SCR_AND_MISC_REG 0x1a 173*f7c13d78SZbigniew Bodek 174*f7c13d78SZbigniew Bodek #define SCR_AND_MISC_PTR_CFG 0x7000 175*f7c13d78SZbigniew Bodek #define SCR_AND_MISC_DATA_CFG_MASK 0xf0 176*f7c13d78SZbigniew Bodek 1775420071dSZbigniew Bodek #define E6000SW_NUM_PHY_REGS 29 1785420071dSZbigniew Bodek #define E6000SW_NUM_VGROUPS 8 179*f7c13d78SZbigniew Bodek #define E6000SW_MAX_PORTS 10 1805420071dSZbigniew Bodek #define E6000SW_PORT_NO_VGROUP -1 1815420071dSZbigniew Bodek #define E6000SW_DEFAULT_AGETIME 20 1825420071dSZbigniew Bodek #define E6000SW_RETRIES 100 183*f7c13d78SZbigniew Bodek #define E6000SW_SMI_TIMEOUT 16 1845420071dSZbigniew Bodek 1855420071dSZbigniew Bodek #endif /* _E6000SWREG_H_ */ 186