/* $NetBSD: if_admswreg.h,v 1.1 2007/03/20 08:52:02 dyoung Exp $ */

/*-
* Copyright (c) 2007 Ruslan Ermilov and Vsevolod Lobko.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or
* without modification, are permitted provided that the following
* conditions are met:
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above
*    copyright notice, this list of conditions and the following
*    disclaimer in the documentation and/or other materials provided
*    with the distribution.
* 3. The names of the authors may not be used to endorse or promote
*    products derived from this software without specific prior
*    written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGE.
*/
/*
* Copyright (c) 2001 Wasabi Systems, Inc.
* All rights reserved.
*
* Written by Jason R. Thorpe for Wasabi Systems, Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the
*    documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
*    must display the following acknowledgement:
*      This product includes software developed for the NetBSD Project by
*      Wasabi Systems, Inc.
* 4. The name of Wasabi Systems, Inc. may not be used to endorse
*    or promote products derived from this software without specific prior
*    written permission.
*
* THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL WASABI SYSTEMS, INC
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _IF_ADMSWREG_H_
#define _IF_ADMSWREG_H_

/* ADMSW_ definitions Copyright (c) 2007 David Young. */
#define ADMSW_BOOT_DONE         0x0008
#define ADMSW_BOOT_DONE_BO      __BIT(0)
#define ADMSW_SW_RES            0x000c
#define ADMSW_SW_RES_SWR        __BITS(31, 0)
#define ADMSW_INT_ST            0x00b0
#define ADMSW_INT_MASK          0x00b4

#define ADMSW_INTR_RSVD __BITS(31, 25)
#define ADMSW_INTR_CPUH __BIT(24)
#define ADMSW_INTR_SDE  __BIT(23)
#define ADMSW_INTR_RDE  __BIT(22)
#define ADMSW_INTR_W1TE __BIT(21)
#define ADMSW_INTR_W0TE __BIT(20)
#define ADMSW_INTR_MI   __BIT(19)
#define ADMSW_INTR_PSC  __BIT(18)
#define ADMSW_INTR_BCS  __BIT(16)
#define ADMSW_INTR_MD   __BIT(15)
#define ADMSW_INTR_GQF  __BIT(14)
#define ADMSW_INTR_CPQ  __BIT(13)
#define ADMSW_INTR_P5QF __BIT(11)
#define ADMSW_INTR_P4QF __BIT(10)
#define ADMSW_INTR_P3QF __BIT(9)
#define ADMSW_INTR_P2QF __BIT(8)
#define ADMSW_INTR_P1QF __BIT(7)
#define ADMSW_INTR_P0QF __BIT(6)
#define ADMSW_INTR_LDF  __BIT(5)
#define ADMSW_INTR_HDF  __BIT(4)
#define ADMSW_INTR_RLD  __BIT(3)
#define ADMSW_INTR_RHD  __BIT(2)
#define ADMSW_INTR_SLD  __BIT(1)
#define ADMSW_INTR_SHD  __BIT(0)

#define ADMSW_INT_FMT   \
       "\x10"\
       "\x01SHD"\
       "\x02SLD"\
       "\x03RHD"\
       "\x04RLD"\
       "\x05HDF"\
       "\x06LDF"\
       "\x07P0QF"\
       "\x08P1QF"\
       "\x09P2QF"\
       "\x0aP3QF"\
       "\x0bP4QF"\
       "\x0cP5QF"\
       "\x0e"\
       "CPQ"\
       "\x0fGQF"\
       "\x10MD"\
       "\x11"\
       "BCS"\
       "\x13PSC"\
       "\x14MI"\
       "\x15W0TE"\
       "\x16W1TE"\
       "\x17RDE"\
       "\x18SDE"\
       "\x19"\
       "CPUH"

#define CODE_REG                0x0000
#define SFTREST_REG             0x0004
#define BOOT_DONE_REG           0x0008
#define GLOBAL_ST_REG           0x0010
#define PHY_ST_REG              0x0014
#define         PHY_ST_LINKUP           (1 << 0)
#define         PHY_ST_100M             (1 << 8)
#define         PHY_ST_FDX              (1 << 16)
#define PORT_ST_REG             0x0018
#define MEM_CONTROL_REG         0x001C
#define SW_CONF_REG             0x0020

#define CPUP_CONF_REG           0x0024
#define         CPUP_CONF_DCPUP         0x00000001
#define         CPUP_CONF_CRCP          0x00000002
#define         CPUP_CONF_BTM           0x00000004
#define         CPUP_CONF_DUNP_SHIFT    9
#define         CPUP_CONF_DUNP_MASK     (0x3F << CPUP_CONF_DUNP_SHIFT)
#define         CPUP_CONF_DMCP_SHIFT    16
#define         CPUP_CONF_DMCP_MASK     (0x3F << CPUP_CONF_DMCP_SHIFT)
#define         CPUP_CONF_DBCP_SHIFT    24
#define         CPUP_CONF_DBCP_MASK     (0x3F << CPUP_CONF_DBCP_SHIFT)

#define PORT_CONF0_REG          0x0028
#define         PORT_CONF0_DP_MASK      0x0000003F
#define         PORT_CONF0_EMCP_MASK    0x00003F00
#define         PORT_CONF0_EMCP_SHIFT   8
#define         PORT_CONF0_EMBP_MASK    0x003F0000
#define         PORT_CONF0_EMBP_SHIFT   16
#define PORT_CONF1_REG          0x002C
#define PORT_CONF2_REG          0x0030

#define VLAN_G1_REG             0x0040
#define VLAN_G2_REG             0x0044
#define SEND_TRIG_REG           0x0048
#define SRCH_CMD_REG            0x004C
#define ADDR_ST0_REG            0x0050
#define ADDR_ST1_REG            0x0054
#define MAC_WT0_REG             0x0058
#define         MAC_WT0_WRITE   0x00000001
#define         MAC_WT0_WRITE_DONE      0x00000002
#define         MAC_WT0_FILTER_EN       0x00000004
#define         MAC_WT0_VLANID_SHIFT    3
#define         MAC_WT0_VLANID_MASK     0x00000038
#define         MAC_WT0_VLANID_EN       0x00000040
#define         MAC_WT0_PORTMAP_MASK    0x00001F80
#define         MAC_WT0_PORTMAP_SHIFT   7
#define         MAC_WT0_AGE_MASK        (0x7    <<      13)
#define         MAC_WT0_AGE_STATIC      (0x7    <<      13)
#define         MAC_WT0_AGE_VALID       (0x1    <<      13)
#define         MAC_WT0_AGE_EMPTY       0
#define MAC_WT1_REG             0x005C
#define BW_CNTL0_REG            0x0060
#define BW_CNTL1_REG            0x0064
#define PHY_CNTL0_REG           0x0068
#define PHY_CNTL1_REG           0x006C
#define FC_TH_REG               0x0070
#define         FC_TH_FCS_MASK          0x01FF0000
#define         FC_TH_D2R_MASK          0x0000FF00
#define         FC_TH_D2S_MASK          0x000000FF
#define ADJ_PORT_TH_REG         0x0074
#define PORT_TH_REG             0x0078
#define PHY_CNTL2_REG           0x007C
#define         PHY_CNTL2_AUTONEG       (1 << 0)
#define         PHY_CNTL2_ANE_MASK      0x0000001F
#define         PHY_CNTL2_SC_MASK       0x000003E0
#define         PHY_CNTL2_SC_SHIFT      5
#define         PHY_CNTL2_100M          (1 << PHY_CNTL2_SC_SHIFT)
#define         PHY_CNTL2_DC_MASK       0x00007C00
#define         PHY_CNTL2_DC_SHIFT      10
#define         PHY_CNTL2_FDX           (1 << PHY_CNTL2_DC_SHIFT)
#define         PHY_CNTL2_RFCV_MASK     0x000F8000
#define         PHY_CNTL2_RFCV_SHIFT    15
#define         PHY_CNTL2_PHYR_MASK     0x01F00000
#define         PHY_CNTL2_PHYR_SHIFT    20
#define         PHY_CNTL2_AMDIX_MASK    0x3E000000
#define         PHY_CNTL2_AMDIX_SHIFT   25
#define         PHY_CNTL2_RMAE          0x40000000
#define PHY_CNTL3_REG           0x0080
#define         PHY_CNTL3_RNT         0x00000400

#define PRI_CNTL_REG            0x0084
#define VLAN_PRI_REG            0x0088
#define TOS_EN_REG              0x008C
#define TOS_MAP0_REG            0x0090
#define TOS_MAP1_REG            0x0094
#define CUSTOM_PRI1_REG         0x0098
#define CUSTOM_PRI2_REG         0x009C

#define EMPTY_CNT_REG           0x00A4
#define PORT_CNT_SEL_REG        0x00A8
#define PORT_CNT_REG            0x00AC

#define INT_MASK        0x1FDEFFF

#define GPIO_CONF0_REG          0x00B8
#define GPIO_CONF2_REG          0x00BC

#define SWAP_IN_REG             0x00C8
#define SWAP_OUT_REG            0x00CC

#define SEND_HBADDR_REG         0x00D0
#define SEND_LBADDR_REG         0x00D4
#define RECV_HBADDR_REG         0x00D8
#define RECV_LBADDR_REG         0x00DC
#define SEND_HWADDR_REG         0x00E0
#define SEND_LWADDR_REG         0x00E4
#define RECV_HWADDR_REG         0x00E8
#define RECV_LWADDR_REG         0x00EC

#define TIMER_INT_REG           0x00F0
#define TIMER_REG               0x00F4

#define PORT0_LED_REG           0x0100
#define PORT1_LED_REG           0x0104
#define PORT2_LED_REG           0x0108
#define PORT3_LED_REG           0x010c
#define PORT4_LED_REG           0x0110

/* Hardware descriptor format */
struct admsw_desc {
       volatile uint32_t data;
       volatile uint32_t cntl;
       volatile uint32_t len;
       volatile uint32_t status;
} __attribute__((__packed__, __aligned__(4)));

#define ADM5120_DMA_MASK        0x01ffffff
#define ADM5120_DMA_OWN         0x80000000      /* buffer owner */
#define ADM5120_DMA_RINGEND     0x10000000      /* Last in DMA ring */
#define ADM5120_DMA_BUF2ENABLE  0x80000000

#define ADM5120_DMA_PORTID      0x00007000
#define ADM5120_DMA_PORTSHIFT   12
#define ADM5120_DMA_LEN         0x07ff0000
#define ADM5120_DMA_LENSHIFT    16
#define ADM5120_DMA_TYPE        0x00000003
#define ADM5120_DMA_TYPE_IP     0x00000000
#define ADM5120_DMA_TYPE_PPPOE  0x00000001
#define ADM5120_DMA_CSUM        0x80000000
#define ADM5120_DMA_CSUMFAIL    0x00000008

#define SW_DEVS 6

#if 0
/*      CODE_REG        */
#define CODE_ID_MASK    0x00FFFF
#define CODE_ADM5120_ID 0x5120

#define CODE_REV_MASK   0x0F0000
#define CODE_REV_SHIFT  16
#define CODE_REV_ADM5120_0      0x8

#define CODE_CLK_MASK   0x300000
#define CODE_CLK_SHIFT  20

#define CPU_CLK_175MHZ  0x0
#define CPU_CLK_200MHZ  0x1
#define CPU_CLK_225MHZ  0x2
#define CPU_CLK_250MHZ  0x3

#define CPU_SPEED_175M  (175000000/2)
#define CPU_SPEED_200M  (200000000/2)
#define CPU_SPEED_225M  (225000000/2)
#define CPU_SPEED_250M  (250000000/2)

#define CPU_NAND_BOOT   0x01000000
#define CPU_DCACHE_2K_WAY       (0x1    <<      25)
#define CPU_DCACHE_2WAY (0x1    <<      26)
#define CPU_ICACHE_2K_WAY       (0x1    <<      27)
#define CPU_ICACHE_2WAY (0x1    <<      28)

#define CPU_GMII_SUPPORT        0x20000000

#define CPU_PQFP_MODE   (0x1    <<      29)

#define CPU_CACHE_LINE_SIZE     16

/*      SftRest_REG     */
#define SOFTWARE_RESET  0x1

/*      Boot_done_REG   */
#define BOOT_DONE       0x1

/*      SWReset_REG     */
#define SWITCH_RESET    0x1

/*      Global_St_REG   */
#define DATA_BUF_BIST_FAILED    (0x1    <<      0)
#define LINK_TAB_BIST_FAILED    (0x1    <<      1)
#define MC_TAB_BIST_FAILED      (0x1    <<      2)
#define ADDR_TAB_BIST_FAILED    (0x1    <<      3)
#define DCACHE_D_FAILED (0x3    <<      4)
#define DCACHE_T_FAILED (0x1    <<      6)
#define ICACHE_D_FAILED (0x3    <<      7)
#define ICACHE_T_FAILED (0x1    <<      9)
#define BIST_FAILED_MASK        0x03FF

#define ALLMEM_TEST_DONE        (0x1    <<      10)

#define SKIP_BLK_CNT_MASK       0x1FF000
#define SKIP_BLK_CNT_SHIFT      12


/*      PHY_st_REG      */
#define PORT_LINK_MASK  0x0000001F
#define PORT_MII_LINKFAIL       0x00000020
#define PORT_SPEED_MASK 0x00001F00

#define PORT_GMII_SPD_MASK      0x00006000
#define PORT_GMII_SPD_10M       0
#define PORT_GMII_SPD_100M      0x00002000
#define PORT_GMII_SPD_1000M     0x00004000

#define PORT_DUPLEX_MASK        0x003F0000
#define PORT_FLOWCTRL_MASK      0x1F000000

#define PORT_GMII_FLOWCTRL_MASK 0x60000000
#define PORT_GMII_FC_ON 0x20000000
#define PORT_GMII_RXFC_ON       0x20000000
#define PORT_GMII_TXFC_ON       0x40000000

/*      Port_st_REG     */
#define PORT_SECURE_ST_MASK     0x001F
#define MII_PORT_TXC_ERR        0x0080

/*      Mem_control_REG */
#define SDRAM_SIZE_4MBYTES      0x0001
#define SDRAM_SIZE_8MBYTES      0x0002
#define SDRAM_SIZE_16MBYTES     0x0003
#define SDRAM_SIZE_64MBYTES     0x0004
#define SDRAM_SIZE_128MBYTES    0x0005
#define SDRAM_SIZE_MASK 0x0007

#define MEMCNTL_SDRAM1_EN       (0x1    <<      5)

#define ROM_SIZE_DISABLE        0x0000
#define ROM_SIZE_512KBYTES      0x0001
#define ROM_SIZE_1MBYTES        0x0002
#define ROM_SIZE_2MBYTES        0x0003
#define ROM_SIZE_4MBYTES        0x0004
#define ROM_SIZE_8MBYTES        0x0005
#define ROM_SIZE_MASK   0x0007

#define ROM0_SIZE_SHIFT 8
#define ROM1_SIZE_SHIFT 16


/*      SW_conf_REG     */
#define SW_AGE_TIMER_MASK       0x000000F0
#define SW_AGE_TIMER_DISABLE    0x0
#define SW_AGE_TIMER_FAST       0x00000080
#define SW_AGE_TIMER_300SEC     0x00000010
#define SW_AGE_TIMER_600SEC     0x00000020
#define SW_AGE_TIMER_1200SEC    0x00000030
#define SW_AGE_TIMER_2400SEC    0x00000040
#define SW_AGE_TIMER_4800SEC    0x00000050
#define SW_AGE_TIMER_9600SEC    0x00000060
#define SW_AGE_TIMER_19200SEC   0x00000070
//#define       SW_AGE_TIMER_38400SEC   0x00000070

#define SW_BC_PREV_MASK 0x00000300
#define SW_BC_PREV_DISABLE      0
#define SW_BC_PREV_64BC 0x00000100
#define SW_BC_PREV_48BC 0x00000200
#define SW_BC_PREV_32BC 0x00000300

#define SW_MAX_LEN_MASK 0x00000C00
#define SW_MAX_LEN_1536 0
#define SW_MAX_LEN_1522 0x00000800
#define SW_MAX_LEN_1518 0x00000400

#define SW_DIS_COLABT   0x00001000

#define SW_HASH_ALG_MASK        0x00006000
#define SW_HASH_ALG_DIRECT      0
#define SW_HASH_ALG_XOR48       0x00002000
#define SW_HASH_ALG_XOR32       0x00004000

#define SW_DISABLE_BACKOFF_TIMER        0x00008000

#define SW_BP_NUM_MASK  0x000F0000
#define SW_BP_NUM_SHIFT 16
#define SW_BP_MODE_MASK 0x00300000
#define SW_BP_MODE_DISABLE      0
#define SW_BP_MODE_JAM  0x00100000
#define SW_BP_MODE_JAMALL       0x00200000
#define SW_BP_MODE_CARRIER      0x00300000
#define SW_RESRV_MC_FILTER      0x00400000
#define SW_BISR_DISABLE 0x00800000

#define SW_DIS_MII_WAS_TX       0x01000000
#define SW_BISS_EN      0x02000000
#define SW_BISS_TH_MASK 0x0C000000
#define SW_BISS_TH_SHIFT        26
#define SW_REQ_LATENCY_MASK     0xF0000000
#define SW_REQ_LATENCY_SHIFT    28


/*      CPUp_conf_REG   */
#define SW_CPU_PORT_DISABLE     0x00000001
#define SW_PADING_CRC   0x00000002
#define SW_BRIDGE_MODE  0x00000004

#define SW_DIS_UN_SHIFT 9
#define SW_DIS_UN_MASK  (0x3F   <<      SW_DIS_UN_SHIFT)
#define SW_DIS_MC_SHIFT 16
#define SW_DIS_MC_MASK  (0x3F   <<      SW_DIS_MC_SHIFT)
#define SW_DIS_BC_SHIFT 24
#define SW_DIS_BC_MASK  (0x3F   <<      SW_DIS_BC_SHIFT)


/*      Port_conf0_REG  */
#define SW_DISABLE_PORT_MASK    0x0000003F
#define SW_EN_MC_MASK   0x00003F00
#define SW_EN_MC_SHIFT  8
#define SW_EN_BP_MASK   0x003F0000
#define SW_EN_BP_SHIFT  16
#define SW_EN_FC_MASK   0x3F000000
#define SW_EN_FC_SHIFT  24


/*      Port_conf1_REG  */
#define SW_DIS_SA_LEARN_MASK    0x0000003F
#define SW_PORT_BLOCKING_MASK   0x00000FC0
#define SW_PORT_BLOCKING_SHIFT  6
#define SW_PORT_BLOCKING_ON     0x1

#define SW_PORT_BLOCKING_MODE_MASK      0x0003F000
#define SW_PORT_BLOCKING_MODE_SHIFT     12
#define SW_PORT_BLOCKING_CTRLONLY       0x1

#define SW_EN_PORT_AGE_MASK     0x03F00000
#define SW_EN_PORT_AGE_SHIFT    20
#define SW_EN_SA_SECURED_MASK   0xFC000000
#define SW_EN_SA_SECURED_SHIFT  26


/*      Port_conf2_REG  */
#define SW_GMII_AN_EN   0x00000001
#define SW_GMII_FORCE_SPD_MASK  0x00000006
#define SW_GMII_FORCE_SPD_10M   0
#define SW_GMII_FORCE_SPD_100M  0x2
#define SW_GMII_FORCE_SPD_1000M 0x4

#define SW_GMII_FORCE_FULL_DUPLEX       0x00000008

#define SW_GMII_FORCE_RXFC      0x00000010
#define SW_GMII_FORCE_TXFC      0x00000020

#define SW_GMII_EN      0x00000040
#define SW_GMII_REVERSE 0x00000080

#define SW_GMII_TXC_CHECK_EN    0x00000100

#define SW_LED_FLASH_TIME_MASK  0x00030000
#define SW_LED_FLASH_TIME_30MS  0
#define SW_LED_FLASH_TIME_60MS  0x00010000
#define SW_LED_FLASH_TIME_240MS 0x00020000
#define SW_LED_FLASH_TIME_480MS 0x00030000


/*      Send_trig_REG   */
#define SEND_TRIG_LOW   0x0001
#define SEND_TRIG_HIGH  0x0002


/*      Srch_cmd_REG    */
#define SW_MAC_SEARCH_START     0x000001
#define SW_MAX_SEARCH_AGAIN     0x000002


/*      MAC_wt0_REG     */
#define SW_MAC_WRITE    0x00000001
#define SW_MAC_WRITE_DONE       0x00000002
#define SW_MAC_FILTER_EN        0x00000004
#define SW_MAC_VLANID_SHIFT     3
#define SW_MAC_VLANID_MASK      0x00000038
#define SW_MAC_VLANID_EN        0x00000040
#define SW_MAC_PORTMAP_MASK     0x00001F80
#define SW_MAC_PORTMAP_SHIFT    7
#define SW_MAC_AGE_MASK (0x7    <<      13)
#define SW_MAC_AGE_STATIC       (0x7    <<      13)
#define SW_MAC_AGE_VALID        (0x1    <<      13)
#define SW_MAC_AGE_EMPTY        0

/*      BW_cntl0_REG    */
#define SW_PORT_TX_NOLIMIT      0
#define SW_PORT_TX_64K  1
#define SW_PORT_TX_128K 2
#define SW_PORT_TX_256K 3
#define SW_PORT_TX_512K 4
#define SW_PORT_TX_1M   5
#define SW_PORT_TX_4M   6
#define SW_PORT_TX_10MK 7

/*      BW_cntl1_REG    */
#define SW_TRAFFIC_SHAPE_IPG    (0x1    <<      31)

/*      PHY_cntl0_REG   */
#define SW_PHY_ADDR_MASK        0x0000001F
#define PHY_ADDR_MAX    0x1f
#define SW_PHY_REG_ADDR_MASK    0x00001F00
#define SW_PHY_REG_ADDR_SHIFT   8
#define PHY_REG_ADDR_MAX        0x1f
#define SW_PHY_WRITE    0x00002000
#define SW_PHY_READ     0x00004000
#define SW_PHY_WDATA_MASK       0xFFFF0000
#define SW_PHY_WDATA_SHIFT      16


/*      PHY_cntl1_REG   */
#define SW_PHY_WRITE_DONE       0x00000001
#define SW_PHY_READ_DONE        0x00000002
#define SW_PHY_RDATA_MASK       0xFFFF0000
#define SW_PHY_RDATA_SHIFT      16

/*      FC_th_REG       */
/*      Adj_port_th_REG */
/*      Port_th_REG     */

/*      PHY_cntl2_REG   */
#define SW_PHY_AN_MASK  0x0000001F
#define SW_PHY_SPD_MASK 0x000003E0
#define SW_PHY_SPD_SHIFT        5
#define SW_PHY_DPX_MASK 0x00007C00
#define SW_PHY_DPX_SHIFT        10
#define SW_FORCE_FC_MASK        0x000F8000
#define SW_FORCE_FC_SHIFT       15
#define SW_PHY_NORMAL_MASK      0x01F00000
#define SW_PHY_NORMAL_SHIFT     20
#define SW_PHY_AUTOMDIX_MASK    0x3E000000
#define SW_PHY_AUTOMDIX_SHIFT   25
#define SW_PHY_REC_MCCAVERAGE   0x40000000


/*      PHY_cntl3_REG   */
/*      Pri_cntl_REG    */
/*      VLAN_pri_REG    */
/*      TOS_en_REG      */
/*      TOS_map0_REG    */
/*      TOS_map1_REG    */
/*      Custom_pri1_REG */
/*      Custom_pri2_REG */
/*      Empty_cnt_REG   */
/*      Port_cnt_sel_REG        */
/*      Port_cnt_REG    */


/*      SW_Int_st_REG   &       SW_Int_mask_REG */
#define SEND_H_DONE_INT 0x0000001
#define SEND_L_DONE_INT 0x0000002
#define RX_H_DONE_INT   0x0000004
#define RX_L_DONE_INT   0x0000008
#define RX_H_DESC_FULL_INT      0x0000010
#define RX_L_DESC_FULL_INT      0x0000020
#define PORT0_QUE_FULL_INT      0x0000040
#define PORT1_QUE_FULL_INT      0x0000080
#define PORT2_QUE_FULL_INT      0x0000100
#define PORT3_QUE_FULL_INT      0x0000200
#define PORT4_QUE_FULL_INT      0x0000400
#define PORT5_QUE_FULL_INT      0x0000800

#define CPU_QUE_FULL_INT        0x0002000
#define GLOBAL_QUE_FULL_INT     0x0004000
#define MUST_DROP_INT   0x0008000
#define BC_STORM_INT    0x0010000

#define PORT_STATUS_CHANGE_INT  0x0040000
#define INTRUDER_INT    0x0080000
#define WATCHDOG0_EXPR_INT      0x0100000
#define WATCHDOG1_EXPR_INT      0x0200000
#define RX_DESC_ERR_INT 0x0400000
#define SEND_DESC_ERR_INT       0x0800000
#define CPU_HOLD_INT    0x1000000
#define SWITCH_INT_MASK 0x1FDEFFF


/*      GPIO_conf0_REG  */
#define GPIO0_INPUT_MODE        0x00000001
#define GPIO1_INPUT_MODE        0x00000002
#define GPIO2_INPUT_MODE        0x00000004
#define GPIO3_INPUT_MODE        0x00000008
#define GPIO4_INPUT_MODE        0x00000010
#define GPIO5_INPUT_MODE        0x00000020
#define GPIO6_INPUT_MODE        0x00000040
#define GPIO7_INPUT_MODE        0x00000080

#define GPIO0_OUTPUT_MODE       0
#define GPIO1_OUTPUT_MODE       0
#define GPIO2_OUTPUT_MODE       0
#define GPIO3_OUTPUT_MODE       0
#define GPIO4_OUTPUT_MODE       0
#define GPIO5_OUTPUT_MODE       0
#define GPIO6_OUTPUT_MODE       0
#define GPIO7_OUTPUT_MODE       0

#define GPIO0_INPUT_MASK        0x00000100
#define GPIO1_INPUT_MASK        0x00000200
#define GPIO2_INPUT_MASK        0x00000400
#define GPIO3_INPUT_MASK        0x00000800
#define GPIO4_INPUT_MASK        0x00001000
#define GPIO5_INPUT_MASK        0x00002000
#define GPIO6_INPUT_MASK        0x00004000
#define GPIO7_INPUT_MASK        0x00008000

#define GPIO0_OUTPUT_EN 0x00010000
#define GPIO1_OUTPUT_EN 0x00020000
#define GPIO2_OUTPUT_EN 0x00040000
#define GPIO3_OUTPUT_EN 0x00080000
#define GPIO4_OUTPUT_EN 0x00100000
#define GPIO5_OUTPUT_EN 0x00200000
#define GPIO6_OUTPUT_EN 0x00400000
#define GPIO7_OUTPUT_EN 0x00800000

#define GPIO_CONF0_OUTEN_MASK   0x00ff0000

#define GPIO0_OUTPUT_HI 0x01000000
#define GPIO1_OUTPUT_HI 0x02000000
#define GPIO2_OUTPUT_HI 0x04000000
#define GPIO3_OUTPUT_HI 0x08000000
#define GPIO4_OUTPUT_HI 0x10000000
#define GPIO5_OUTPUT_HI 0x20000000
#define GPIO6_OUTPUT_HI 0x40000000
#define GPIO7_OUTPUT_HI 0x80000000

#define GPIO0_OUTPUT_LOW        0
#define GPIO1_OUTPUT_LOW        0
#define GPIO2_OUTPUT_LOW        0
#define GPIO3_OUTPUT_LOW        0
#define GPIO4_OUTPUT_LOW        0
#define GPIO5_OUTPUT_LOW        0
#define GPIO6_OUTPUT_LOW        0
#define GPIO7_OUTPUT_LOW        0


/*      GPIO_conf2_REG  */
#define EXTIO_WAIT_EN   (0x1    <<      6)
#define EXTIO_CS1_INT1_EN       (0x1    <<      5)
#define EXTIO_CS0_INT0_EN       (0x1    <<      4)

/*      Timer_int_REG   */
#define SW_TIMER_INT_DISABLE    0x10000
#define SW_TIMER_INT    0x1

/*      Timer_REG       */
#define SW_TIMER_EN     0x10000
#define SW_TIMER_MASK   0xffff
#define SW_TIMER_10MS_TICKS     0x3D09
#define SW_TIMER_1MS_TICKS      0x61A
#define SW_TIMER_100US_TICKS    0x9D


/*      Port0_LED_REG,  Port1_LED_REG,  Port2_LED_REG,  Port3_LED_REG,  Port4_LED_REG*/
#define GPIOL_INPUT_MODE        0x00
#define GPIOL_OUTPUT_FLASH      0x01
#define GPIOL_OUTPUT_LOW        0x02
#define GPIOL_OUTPUT_HIGH       0x03
#define GPIOL_LINK_LED  0x04
#define GPIOL_SPEED_LED 0x05
#define GPIOL_DUPLEX_LED        0x06
#define GPIOL_ACT_LED   0x07
#define GPIOL_COL_LED   0x08
#define GPIOL_LINK_ACT_LED      0x09
#define GPIOL_DUPLEX_COL_LED    0x0A
#define GPIOL_10MLINK_ACT_LED   0x0B
#define GPIOL_100MLINK_ACT_LED  0x0C
#define GPIOL_CTRL_MASK 0x0F

#define GPIOL_INPUT_MASK        0x7000
#define GPIOL_INPUT_0_MASK      0x1000
#define GPIOL_INPUT_1_MASK      0x2000
#define GPIOL_INPUT_2_MASK      0x4000

#define PORT_LED0_SHIFT 0
#define PORT_LED1_SHIFT 4
#define PORT_LED2_SHIFT 8
#endif
#endif /* _IF_ADMSWREG_H_ */