/*------------------------------------------------------------------------------------------*\ * Copyright (C) 2008,2009,2010 AVM GmbH * * 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 version 2 of the License. * * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA \*------------------------------------------------------------------------------------------*/ /**************************************************************************** ** AR8216 support *****************************************************************************/ #ifndef _INC_AR_REG #define _INC_AR_REG /*------------------------------------------------------------------------------------------*\ * global Register 32bit \*------------------------------------------------------------------------------------------*/ #define AR8216_GLOBAL_DEVICE_ID 0x00 #define AR8216_DEVICE_ID 0x0101 #define AR8226_DEVICE_ID 0x0201 #define AR8316_DEVICE_ID 0x1001 #define AR8216_GLOBAL_INTERRUPT 0x10 #define AR8216_GLOBAL_INTERRUPTMASK 0x14 #define AR8216_GLOBAL_MAC_ADDRESS_HIGH 0x20 #define AR8216_GLOBAL_MAC_ADDRESS_LOW 0x24 #define AR8216_GLOBAL_CONTROL 0x30 /*------------------------------------------------------------------------------------------*\ \*------------------------------------------------------------------------------------------*/ #define AR8216_GLOBAL_VLAN_TABLE_1 0x40 #define VLAN_TABLE_1_VT_FUNC_SHIFT 0 #define VLAN_TABLE_1_VT_FUNC_MASK (((1<<2)-1)<< VLAN_TABLE_1_VT_FUNC_SHIFT) #define VLAN_TABLE_1_VT_FUNC_VALUE(value) (((value)<< VLAN_TABLE_1_VT_FUNC_SHIFT) & VLAN_TABLE_1_VT_FUNC_MASK) #define VLAN_TABLE_FUNC_NOOP 0 #define VLAN_TABLE_FUNC_FLUSH_ALL 1 #define VLAN_TABLE_FUNC_LOAD_ENTRY 2 #define VLAN_TABLE_FUNC_PURGE_ENTRY 3 #define VLAN_TABLE_FUNC_REMOVE_PORT 4 #define VLAN_TABLE_1_VT_BUSY (1 << 3) #define VLAN_TABLE_1_VT_FULL_VIO (1 << 4) #define VLAN_TABLE_1_VT_PORT_NUM_SHIFT 8 #define VLAN_TABLE_1_VT_PORT_NUM_MASK (((1<<4)-1)<< VLAN_TABLE_1_VT_PORT_NUM_SHIFT) #define VLAN_TABLE_1_VT_PORT_NUM_VALUE(value) (((value)<< VLAN_TABLE_1_VT_PORT_NUM_SHIFT) & VLAN_TABLE_1_VT_PORT_NUM_MASK) #define VLAN_TABLE_1_VID_SHIFT 16 #define VLAN_TABLE_1_VID_MASK (((1<<12)-1)<< VLAN_TABLE_1_VID_SHIFT) #define VLAN_TABLE_1_VID_VALUE(value) (((value)<< VLAN_TABLE_1_VID_SHIFT) & VLAN_TABLE_1_VID_MASK) #define VLAN_TABLE_1_VT_PRI_SHIFT 28 #define VLAN_TABLE_1_VT_PRI_MASK (((1<<3)-1)<< VLAN_TABLE_1_VT_PRI_SHIFT) #define VLAN_TABLE_1_VT_PRI_VALUE(value) (((value)<< VLAN_TABLE_1_VT_PRI_SHIFT) & VLAN_TABLE_1_VT_PRI_MASK) #define VLAN_TABLE_1_VT_PRI_EN (1U << 31) /*------------------------------------------------------------------------------------------*\ \*------------------------------------------------------------------------------------------*/ #define AR8216_GLOBAL_VLAN_TABLE_2 0x44 #define VLAN_TABLE_2_VID_MEM_SHIFT 0 #define VLAN_TABLE_2_VID_MEM_MASK (((1<<10)-1)<< VLAN_TABLE_2_VID_MEM_SHIFT) #define VLAN_TABLE_2_VID_MEM_VALUE(value) (((value)<< VLAN_TABLE_2_VID_MEM_SHIFT) & VLAN_TABLE_2_VID_MEM_MASK) #define VLAN_TABLE_2_VT_VALID (1 << 11) /*------------------------------------------------------------------------------------------*\ \*------------------------------------------------------------------------------------------*/ #define AR8216_GLOBAL_AR_1 0x50 #define AR_1_AT_ADDR_BYTE4_SHIFT 24 #define AR_1_AT_ADDR_BYTE4_MASK (((1 << 8)-1)<< AR_1_AT_ADDR_BYTE4_SHIFT) #define AR_1_AT_ADDR_BYTE4_VALUE(value) (((value)<< AR_1_AT_ADDR_BYTE4_SHIFT) & AR_1_AT_ADDR_BYTE4_MASK) #define AR_1_AT_ADDR_BYTE5_SHIFT 16 #define AR_1_AT_ADDR_BYTE5_MASK (((1 << 8)-1)<< AR_1_AT_ADDR_BYTE5_SHIFT) #define AR_1_AT_ADDR_BYTE5_VALUE(value) (((value)<< AR_1_AT_ADDR_BYTE5_SHIFT) & AR_1_AT_ADDR_BYTE5_MASK) #define AR_1_AR_FULL_VIO (1 << 12) #define AR_1_AT_PORT_NUM_SHIFT 8 #define AR_1_AT_PORT_NUM_MASK (((1<<4)-1)<< AR_1_AT_PORT_NUM_SHIFT) #define AR_1_AT_PORT_NUM_VALUE(value) (((value)<< AR_1_AT_PORT_NUM_SHIFT) & AR_1_AT_PORT_NUM_MASK) #define AR_1_AT_BUSY (1 << 3) #define AR_1_AT_FUNC_SHIFT 0 #define AR_1_AT_FUNC_MASK (((1<<3)-1)<< AR_1_AT_FUNC_SHIFT) #define AR_1_AT_FUNC_VALUE(value) (((value)<< AR_1_AT_FUNC_SHIFT) & AR_1_AT_FUNC_MASK) /*--- #define _SHIFT 0 ---*/ /*--- #define _MASK (((1<<10)-1)<< _SHIFT) ---*/ /*--- #define _VALUE(value) (((value)<< _SHIFT) & _MASK) ---*/ /*--- #define _SHIFT 0 ---*/ /*--- #define _MASK (((1<<10)-1)<< _SHIFT) ---*/ /*--- #define _VALUE(value) (((value)<< _SHIFT) & _MASK) ---*/ /*------------------------------------------------------------------------------------------*\ \*------------------------------------------------------------------------------------------*/ #define AR8216_GLOBAL_AR_2 0x54 #define AR_2_AT_ADDR_BYTE0_SHIFT 24 #define AR_2_AT_ADDR_BYTE0_MASK (((1 << 8)-1) << AR_2_AT_ADDR_BYTE0_SHIFT) #define AR_2_AT_ADDR_BYTE0_VALUE(value) (((value) << AR_2_AT_ADDR_BYTE0_SHIFT) & AR_2_AT_ADDR_BYTE0_MASK) #define AR_2_AT_ADDR_BYTE1_SHIFT 16 #define AR_2_AT_ADDR_BYTE1_MASK (((1 << 8)-1) << AR_2_AT_ADDR_BYTE1_SHIFT) #define AR_2_AT_ADDR_BYTE1_VALUE(value) (((value) << AR_2_AT_ADDR_BYTE1_SHIFT) & AR_2_AT_ADDR_BYTE1_MASK) #define AR_2_AT_ADDR_BYTE2_SHIFT 8 #define AR_2_AT_ADDR_BYTE2_MASK (((1 << 8)-1) << AR_2_AT_ADDR_BYTE2_SHIFT) #define AR_2_AT_ADDR_BYTE2_VALUE(value) (((value) << AR_2_AT_ADDR_BYTE2_SHIFT) & AR_2_AT_ADDR_BYTE2_MASK) #define AR_2_AT_ADDR_BYTE3_SHIFT 0 #define AR_2_AT_ADDR_BYTE3_MASK (((1 << 8)-1) << AR_2_AT_ADDR_BYTE3_SHIFT) #define AR_2_AT_ADDR_BYTE3_VALUE(value) (((value) << AR_2_AT_ADDR_BYTE3_SHIFT) & AR_2_AT_ADDR_BYTE3_MASK) /*------------------------------------------------------------------------------------------*\ \*------------------------------------------------------------------------------------------*/ #define AR8216_GLOBAL_AR_3 0x58 #define AR_3_DES_PORT_SHIFT 0 #define AR_3_DES_PORT_MASK (((1<<10)-1)<< AR_3_DES_PORT_SHIFT) #define AR_3_DES_PORT_VALUE(value) (((value)<< AR_3_DES_PORT_SHIFT) & _MASK) #define AR_3_AT_PRIORITY_SHIFT 10 #define AR_3_AT_PRIORITY_MASK (((1<<2)-1)<< AR_3_AT_PRIORITY_SHIFT) #define AR_3_AT_PRIORITY_VALUE(value) (((value)<< AR_3_AT_PRIORITY_SHIFT) & AR_3_AT_PRIORITY_MASK) #define AR_3_AT_PRIORITY_EN (1 << 12) #define AR_3_AT_MIRROR_EN (1 << 13) #define AR_3_AT_STATUS_SHIFT 14 #define AR_3_AT_STATUS_MASK (((1<<2)-1)<< AR_3_AT_STATUS_SHIFT) #define AR_3_AT_STATUS_VALUE(value) (((value)<< AR_3_AT_STATUS_SHIFT) & AR_3_AT_STATUS_MASK) #define AR_3_SA_DROP_EN (1 << 16) #define AR_3_REDIRECT_TO_CPU (1 << 25) #define AR_3_COPY_TO_CPU (1 << 26) /*--- #define _SHIFT 0 ---*/ /*--- #define _MASK (((1<<10)-1)<< _SHIFT) ---*/ /*--- #define _VALUE(value) (((value)<< _SHIFT) & _MASK) ---*/ /*--- #define _SHIFT 0 ---*/ /*--- #define _MASK (((1<<10)-1)<< _SHIFT) ---*/ /*--- #define _VALUE(value) (((value)<< _SHIFT) & _MASK) ---*/ /*------------------------------------------------------------------------------------------*\ \*------------------------------------------------------------------------------------------*/ #define AR8216_GLOBAL_AR_CONTROL 0x5C #define AR_CONTROL_AGE_EN (1 << 17) #define AR_CONTROL_AGE_TIME_SHIFT 0 #define AR_CONTROL_AGE_TIME_MASK (((1 << 16) - 1) << AR_CONTROL_AGE_TIME_SHIFT) #define AR_CONTROL_AGE_TIME(value) (((value) << AR_CONTROL_AGE_TIME_SHIFT) & AR_CONTROL_AGE_TIME_MASK) #define AR8216_GLOBAL_IP_PRIORITY_1 0x60 #define AR8216_GLOBAL_IP_PRIORITY_2 0x64 #define AR8216_GLOBAL_IP_PRIORITY_3 0x68 #define AR8216_GLOBAL_IP_PRIORITY_4 0x6C #define AR8216_GLOBAL_TAG_PRIORITY 0x70 #define AR8216_GLOBAL_CPUPORT 0x78 #define AR8216_GLOBAL_MIB 0x80 #define AR8216_GLOBAL_MDIO_HIGH_ADDR 0x94 #define AR8216_GLOBAL_DEST_IP 0x98 /*------------------------------------------------------------------------------------------*\ \*------------------------------------------------------------------------------------------*/ #define AR8216_PORT0_CONTROL_BASIS 0x100 #define AR8216_PORT1_CONTROL_BASIS 0x200 #define AR8216_PORT2_CONTROL_BASIS 0x300 #define AR8216_PORT3_CONTROL_BASIS 0x400 #define AR8216_PORT4_CONTROL_BASIS 0x500 #define AR8216_PORT5_CONTROL_BASIS 0x600 /*--- PORT-STATUS ---*/ #define AR8216_PORT_STATUS_OFFSET 0x00 #define ATH_PORT_STATUS_SPEED_10M (0<<0) #define ATH_PORT_STATUS_SPEED_100M (1<<0) #define ATH_PORT_STATUS_TXMACEN (1<<2) #define ATH_PORT_STATUS_RXMACEN (1<<3) #define ATH_PORT_STATUS_TXFLOWEN (1<<4) #define ATH_PORT_STATUS_RXFLOWEN (1<<5) #define ATH_PORT_STATUS_FULLDUPLEX (1<<6) #define ATH_PORT_STATUS_PHY_LINKUP (1<<8) #define ATH_PORT_STATUS_LINKEN (1<<9) #define ATH_PORT_STATUS_LINK_PAUSE (1<<10) #define ATH_PORT_STATUS_ASYNC_PAUSE (1<<11) /*--- PORT-CONTROL ---*/ #define AR8216_PORT_CONTROL_OFFSET 0x04 #define ATH_PORT_CTRL_PORTSTATE_DISABLE (0<<0) #define ATH_PORT_CTRL_PORTSTATE_BLOCKING (1) #define ATH_PORT_CTRL_PORTSTATE_LISTEN (2) #define ATH_PORT_CTRL_PORTSTATE_LERNING (3) #define ATH_PORT_CTRL_PORTSTATE_FORWARD (4) #define ATH_PORT_CTRL_LERN_ONE_LOCK (1<<7) #define ATH_PORT_CTRL_EG_VLAN_MODE(x) ((x)<<8) #define ATH_PORT_CTRL_IGMP_MLD_EN (1<<10) #define ATH_PORT_CTRL_HEAD_EN (1<<11) #define ATH_PORT_CTRL_MAC_LOOP_BACK (1<<12) #define ATH_PORT_CTRL_SINGLE_VLAN_EN (1<<13) #define ATH_PORT_CTRL_LEARN_EN (1<<14) #define ATH_PORT_CTRL_EG_MIRROR_EN (1<<16) #define ATH_PORT_CTRL_ING_MIRROR_EN (1<<17) /*--- PORT-VLAN ---*/ #define AR8216_PORT_VLAN_OFFSET 0x08 #define ATH_PORT_VLAN_VID_SHIFT 0 #define ATH_PORT_VLAN_VID_MASK (((1<<12)-1)<