* ========== Copyright Header Begin ==========================================
* OpenSPARC T2 Processor File: niu_init.h
* Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
* 4150 Network Circle, Santa Clara, California 95054, U.S.A.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* 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
* For the avoidance of doubt, and except that if any non-GPL license
* choice is available it will apply instead, Sun elects to use only
* the General Public License version 2 (GPLv2) at this time for any
* software where a choice of GPL license versions is made
* available with the language indicating that GPLv2 or any later version
* may be used, or where a choice of which version of the GPL is applied is
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* ========== Copyright Header End ============================================
! Initialize the NIU Packet generator from Vera
.
! Some of the initialization routines are
best_set_reg(0x6000, %l7
, %o4
)
best_set_reg(0x1000901, %l7
, %o5
)
! $EV
trig_pc_d(1, expr(@
VA(.RED_EXT_SEC
.mac_util_xmii_init_tmp
) - 4, 16, 16)) -> printf("Initializing mac_util_xmii_init_tmp",*,1)
setx xtxmac_sw_rst0_addr
, %l7
, %l0
stxa
%o3
, [%l0
]ASI_PRIMARY_LITTLE
stxa
%o3
, [%l0
]ASI_PRIMARY_LITTLE
stxa
%o5
, [%l0
]ASI_PRIMARY_LITTLE
be mac_util_xmii_init_tmp
setx XMAC0_MAX_addr
, %l7
, %l0
setx XMAC0_MAX_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx XMAC1_MAX_addr
, %l7
, %l0
setx XMAC1_MAX_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
#if (MAC_SPEED0==1000) && (MAC_SPEED1==1000)
setx xpcs0_config_vendor1
, %l7
, %l0
stxa
%g0
, [%l0
]ASI_PRIMARY_LITTLE
setx xpcs1_config_vendor1
, %l7
, %l0
stxa
%g0
, [%l0
]ASI_PRIMARY_LITTLE
#else /*Default to 10G */
! $EV
trig_pc_d(1, expr(@
VA(.RED_EXT_SEC
.xpcs_init
) + 8, 16, 16)) -> printf("Initializing xpcs_init for 10G Speed",*,1)
setx xpcs0_control1_addr
, %l7
, %l0
setx xpcs0_control1_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
#endif /* (MAC_SPEED0==1000) && (MAC_SPEED1==1000) */
/* This section only applicable to 1G not 10
/* Program ipp config register and enable the ipp0 & ipp1 */
! $EV
trig_pc_d(1, expr(@
VA(.RED_EXT_SEC
.ipp_init
) + 8, 16, 16)) -> printf("Initializing ipp_init",*,1)
setx ipp_config0_addr
, %l7
, %l0
setx ipp_config_data
, %l7
, %l3
stxa
%l3
, [%l0
]ASI_PRIMARY_LITTLE
best_set_reg(0x8000, %l1
, %l2
)
stxa
%l3
, [%l0
]ASI_PRIMARY_LITTLE
! $EV
trig_pc_d(1, expr(@
VA(.RED_EXT_SEC
.txc_init
) + 8, 16, 16)) -> printf("Initializing txc_init",*,1)
setx txc_dma_maxburst_addr
, %l7
, %l0
best_set_reg(txc_dma_maxburst_data
, %l7
, %l1
)
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx txc_port0_control_addr
, %l7
, %l0
best_set_reg(txc_port0_control_data
, %l7
, %l1
)
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx txc_control_addr
, %l7
, %l0
best_set_reg(txc_control_data
, %l7
, %l1
)
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
! This portion programs MAC_DA addresses
and MAC control words
! for supporting multi
-port
/multi
-dma in the environment
:
! - 8 MAC_DA addresses
and 8 MAC Control word info
. relative
! to each MAC_DA address
for port
0. The MAC_DA addresses
! and the mMAC control words are defined in niu_defines
.h
.
! - 8 MAC_DA addresses
and 8 MAC Control word info
. relative
! to each MAC_DA address
for port
1. The MAC_DA addresses
! and the mMAC control words are defined in niu_defines
.h
.
! - If no MULTI_TEST
, then the programming falls back to the
! single port
/single dma testing
.
setx XMAC0_ADDR3_data
, %o1
, %o3
setx XMAC0_ADDR4_data
, %o1
, %o4
setx XMAC0_ADDR5_data
, %o1
, %o5
setx XMAC0_ADDR6_data
, %o1
, %o3
setx XMAC0_ADDR7_data
, %o1
, %o4
setx XMAC0_ADDR8_data
, %o1
, %o5
setx XMAC0_ADDR9_data
, %o1
, %o3
setx XMAC0_ADDR10_data
, %o1
, %o4
setx XMAC0_ADDR11_data
, %o1
, %o5
setx XMAC0_ADDR12_data
, %o1
, %o3
setx XMAC0_ADDR13_data
, %o1
, %o4
setx XMAC0_ADDR14_data
, %o1
, %o5
setx XMAC0_ADDR15_data
, %o1
, %o3
setx XMAC0_ADDR16_data
, %o1
, %o4
setx XMAC0_ADDR17_data
, %o1
, %o5
setx XMAC0_ADDR18_data
, %o1
, %o3
setx XMAC0_ADDR19_data
, %o1
, %o4
setx XMAC0_ADDR20_data
, %o1
, %o5
setx XMAC0_ADDR21_data
, %o1
, %o3
setx XMAC0_ADDR22_data
, %o1
, %o4
setx XMAC0_ADDR23_data
, %o1
, %o5
setx XMAC0_ADDR24_data
, %o1
, %o3
setx XMAC0_ADDR25_data
, %o1
, %o4
setx XMAC0_ADDR26_data
, %o1
, %o5
call xmac_host_config
/* MAQ : Port-1 configured */
setx XMAC1_ADDR3_data
, %o1
, %o3
setx XMAC1_ADDR4_data
, %o1
, %o4
setx XMAC1_ADDR5_data
, %o1
, %o5
setx XMAC1_ADDR6_data
, %o1
, %o3
setx XMAC1_ADDR7_data
, %o1
, %o4
setx XMAC1_ADDR8_data
, %o1
, %o5
setx XMAC1_ADDR9_data
, %o1
, %o3
setx XMAC1_ADDR10_data
, %o1
, %o4
setx XMAC1_ADDR11_data
, %o1
, %o5
setx XMAC1_ADDR12_data
, %o1
, %o3
setx XMAC1_ADDR13_data
, %o1
, %o4
setx XMAC1_ADDR14_data
, %o1
, %o5
setx XMAC1_ADDR15_data
, %o1
, %o3
setx XMAC1_ADDR16_data
, %o1
, %o4
setx XMAC1_ADDR17_data
, %o1
, %o5
setx XMAC1_ADDR18_data
, %o1
, %o3
setx XMAC1_ADDR19_data
, %o1
, %o4
setx XMAC1_ADDR20_data
, %o1
, %o5
setx XMAC1_ADDR21_data
, %o1
, %o3
setx XMAC1_ADDR22_data
, %o1
, %o4
setx XMAC1_ADDR23_data
, %o1
, %o5
setx XMAC1_ADDR24_data
, %o1
, %o3
setx XMAC1_ADDR25_data
, %o1
, %o4
setx XMAC1_ADDR26_data
, %o1
, %o5
best_set_reg(XMAC_ADDR3_data
, %o1
, %o3
)
best_set_reg(XMAC_ADDR4_data
, %o1
, %o4
)
best_set_reg(XMAC_ADDR5_data
, %o1
, %o5
)
best_set_reg(XMAC_ADDR6_data
, %o1
, %o3
)
best_set_reg(XMAC_ADDR7_data
, %o1
, %o4
)
best_set_reg(XMAC_ADDR8_data
, %o1
, %o5
)
best_set_reg(XMAC_ADDR9_data
, %o1
, %o3
)
best_set_reg(XMAC_ADDR10_data
, %o1
, %o4
)
best_set_reg(XMAC_ADDR11_data
, %o1
, %o5
)
best_set_reg(XMAC_ADDR12_data
, %o1
, %o3
)
best_set_reg(XMAC_ADDR13_data
, %o1
, %o4
)
best_set_reg(XMAC_ADDR14_data
, %o1
, %o5
)
call xmac_config
/* MAQ : Port-1 configured */
best_set_reg(XMAC_ADDR3_data
, %o1
, %o3
)
best_set_reg(XMAC_ADDR4_data
, %o1
, %o4
)
best_set_reg(XMAC_ADDR5_data
, %o1
, %o5
)
best_set_reg(XMAC_ADDR6_data
, %o1
, %o3
)
best_set_reg(XMAC_ADDR7_data
, %o1
, %o4
)
best_set_reg(XMAC_ADDR8_data
, %o1
, %o5
)
best_set_reg(XMAC_ADDR9_data
, %o1
, %o3
)
best_set_reg(XMAC_ADDR10_data
, %o1
, %o4
)
best_set_reg(XMAC_ADDR11_data
, %o1
, %o5
)
best_set_reg(XMAC_ADDR12_data
, %o1
, %o3
)
best_set_reg(XMAC_ADDR13_data
, %o1
, %o4
)
best_set_reg(XMAC_ADDR14_data
, %o1
, %o5
)
restore
! Return to Main program
!/********************************************************************************
!* Reset the MAC(s) and program all other MAC registers such as config. registers
!* Parameters in registers:
!* %o2: <=0 for Port 0, >0 for Port 1
!********************************************************************************/
! $EV
trig_pc_d(1, expr(@
VA(.RED_EXT_SEC
.mac_util_xmii_init
) + 8, 16, 16)) -> printf("Initializing mac_util_xmii_init",*,1)
setx xtxmac_sw_rst0_addr
, %l7
, %l0
setx xtxmac_sw_rst1_addr
, %l7
, %l0
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx xrxmac_sw_rst0_addr
, %l7
, %l0
setx xrxmac_sw_rst1_addr
, %l7
, %l0
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx mac0_config_data
, %l7
, %l0
setx xmac_config0
, %l7
, %l1
stxa
%l0
, [%l1
]ASI_PRIMARY_LITTLE
setx mac1_config_data
, %l7
, %l0
setx xmac_config1
, %l7
, %l1
stxa
%l0
, [%l1
]ASI_PRIMARY_LITTLE
setx xmac_config0
, %l7
, %l0
ldxa
[%l0
]ASI_PRIMARY_LITTLE
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx xmac_config1
, %l7
, %l0
ldxa
[%l0
]ASI_PRIMARY_LITTLE
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx XMAC0_MAX_addr
, %l7
, %l0
setx XMAC0_MAX_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx XMAC1_MAX_addr
, %l7
, %l0
setx XMAC1_MAX_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* Initialize both ports of XPCS to desired speed (usually 10G)
!* Parameters in registers:
!********************************************************************************/
#if (MAC_SPEED0==1000) && (MAC_SPEED1==1000)
setx xpcs0_config_vendor1
, %l7
, %l0
stxa
%g0
, [%l0
]ASI_PRIMARY_LITTLE
setx xpcs1_config_vendor1
, %l7
, %l0
stxa
%g0
, [%l0
]ASI_PRIMARY_LITTLE
! $EV
trig_pc_d(1, expr(@
VA(.RED_EXT_SEC
.xpcs_util_xpcs_init
) + 8, 16, 16)) -> printf("Initializing xpcs_util_xpcs_init for 10G Speed",*,1)
setx xpcs0_control1_addr
, %l7
, %l0
setx xpcs0_control1_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
ldxa
[%l0
]ASI_PRIMARY_LITTLE
, %l4
setx xpcs1_control1_addr
, %l7
, %l0
setx xpcs1_control1_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
ldxa
[%l0
]ASI_PRIMARY_LITTLE
, %l4
#endif /* (MAC_SPEED0==1000) && (MAC_SPEED1==1000) */
!/********************************************************************************
!* Bringing up pcs0 and pcs1 with 1G speed
!* Parameters in registers:
!* %o2: <=0 for Port 0, >0 for Port 1
!********************************************************************************/
#if (MAC_SPEED0==1000) && (MAC_SPEED1==1000)
setx PCS0_CONFIGURATION_Addr
, %l7
, %l0
setx PCS0_DATAPATH_MODE_Addr
, %l7
, %l2
setx PCS1_CONFIGURATION_Addr
, %l7
, %l0
setx PCS1_DATAPATH_MODE_Addr
, %l7
, %l2
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l2
]ASI_PRIMARY_LITTLE
stxa
%l1
, [%l2
]ASI_PRIMARY_LITTLE
#endif /* (MAC_SPEED0==1000) && (MAC_SPEED1==1000) */
!/********************************************************************************
!* Programming ipp config register and enabling the ipp0 & ipp1
!* Parameters in registers:
!* %o2: <=0 for Port 0, >0 for Port 1
!********************************************************************************/
! $EV
trig_pc_d(1, expr(@
VA(.RED_EXT_SEC
.ipp_util_ipp_init
) + 8, 16, 16)) -> printf("Initializing ipp_util_ipp_init",*,1)
setx ipp_config0_addr
, %l7
, %l0
setx ipp_config1_addr
, %l7
, %l0
setx ipp_config_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* This is a mini version of programming FFLP block in NIU.
!* Config register, couple of class and cam_key entries are programmed.
!* Parameters in registers:
!********************************************************************************/
! $EV
trig_pc_d(1, expr(@
VA(.RED_EXT_SEC
.fflp_util_fflp_init
) + 8, 16, 16)) -> printf("Initializing fflp_util_fflp_init",*,1)
setx fflp_config_addr
, %l7
, %l0
setx fflp_config_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx fflp_l2_cls_2_addr
, %l7
, %l0
stxa
%g0
, [%l0
]ASI_PRIMARY_LITTLE
setx fflp_l2_cls_3_addr
, %l7
, %l0
stxa
%g0
, [%l0
]ASI_PRIMARY_LITTLE
setx fflp_l3_cls_4_start
, %l7
, %l0
setx fflp_l3_cls_4_end
, %l7
, %l1
stxa
%g0
, [%l0
]ASI_PRIMARY_LITTLE
setx fflp_cam_key_reg0_start
, %l7
, %l0
setx fflp_cam_key_reg0_end
, %l7
, %l1
stxa
%g0
, [%l0
]ASI_PRIMARY_LITTLE
setx fflp_cam_key_mask_reg0_start
, %l7
, %l0
setx fflp_cam_key_mask_reg0_end
, %l7
, %l1
stxa
%g0
, [%l0
]ASI_PRIMARY_LITTLE
setx fflp_cam_control_addr
, %l7
, %l0
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx fflp_cam_ram_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* Program txc max. burst per port registers.
!* Parameters in registers:
!********************************************************************************/
! $EV
trig_pc_d(1, expr(@
VA(.RED_EXT_SEC
.txc_util_txc_init
) + 8, 16, 16)) -> printf("Initializing txc_util_txc_init",*,1)
setx txc_dma_maxburst_addr
, %l7
, %l0
setx txc_dma_maxburst_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx txc_port0_control_addr
, %l7
, %l0
setx txc_port0_control_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx txc_port1_control_addr
, %l7
, %l0
setx txc_port1_control_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx txc_control_addr
, %l7
, %l0
setx txc_control_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* Program RDMC config and Ring Buffer and kick registers.
!* Parameters in registers:
!********************************************************************************/
! $EV
trig_pc_d(1, expr(@
VA(.RED_EXT_SEC
.dmc_util_dmc_init
) + 8, 16, 16)) -> printf("Initializing dmc_util_dmc_init",*,1)
setx RXDMA_CFIG1
, %l7
, %l0
setx RXDMA_CFIG1_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx RBR_CFIG_A
, %l7
, %l0
setx RBR_CFIG_A_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx RBR_CFIG_B
, %l7
, %l0
setx RBR_CFIG_B_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx RX_LOG_PAGE_VLD
, %l7
, %l0
setx RX_LOG_PAGE_VLD_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx RBR_KICK_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx RBR_HDH_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx RBR_HDL_data
, %l7
, %l1
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* Program MAC host register for the existing tests (before
!* multi port implementation).
!* Parameters in registers:
!* %o2: <=0 for Port 0, >0 for Port 1
!********************************************************************************/
setx XMAC_CONFIG
, %l1
, %l3
ldxa
[%l3
]ASI_PRIMARY_LITTLE
, %l4
setx XMAC_CONFIG_mask
, %l1
, %l5
stxa
%l5
, [%l3
]ASI_PRIMARY_LITTLE
ldxa
[%l3
]ASI_PRIMARY_LITTLE
, %l4
setx XMAC_CONFIG_mask1
, %l1
, %l5
stxa
%l5
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR_CMPEN_LSB
, %l1
, %l3
setx XMAC_ADDR_CMPEN_LSB_data
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO0
, %l1
, %l3
setx ctrl_word0
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO1
, %l1
, %l3
setx ctrl_word1
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO2
, %l1
, %l3
setx ctrl_word2
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO3
, %l1
, %l3
setx ctrl_word3
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* Program MAC host (mac control word) registers for MAC0
!* and MAC1 for single-port/multi-dma and multi-port/multi-dma.
!* Parameters in registers:
!* %o2: <=0 for Port 0, >0 for Port 1
!********************************************************************************/
brgz
%i2
, xmac_host_config_1
setx XMAC_CONFIG
, %l1
, %l3
ldxa
[%l3
]ASI_PRIMARY_LITTLE
, %l4
setx XMAC_CONFIG_mask
, %l1
, %l5
stxa
%l5
, [%l3
]ASI_PRIMARY_LITTLE
ldxa
[%l3
]ASI_PRIMARY_LITTLE
, %l4
setx XMAC_CONFIG_mask1
, %l1
, %l5
stxa
%l5
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR_CMPEN_LSB
, %l1
, %l3
setx XMAC_ADDR_CMPEN_LSB_data
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO0
, %l1
, %l3
setx mac1_ctrl_word0
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO1
, %l1
, %l3
setx mac1_ctrl_word1
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO2
, %l1
, %l3
setx mac1_ctrl_word2
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO3
, %l1
, %l3
setx mac1_ctrl_word3
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO4
, %l1
, %l3
setx mac1_ctrl_word4
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO5
, %l1
, %l3
setx mac1_ctrl_word5
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO6
, %l1
, %l3
setx mac1_ctrl_word6
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO7
, %l1
, %l3
setx mac1_ctrl_word7
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_CONFIG
, %l1
, %l3
ldxa
[%l3
]ASI_PRIMARY_LITTLE
, %l4
setx XMAC_CONFIG_mask
, %l1
, %l5
stxa
%l5
, [%l3
]ASI_PRIMARY_LITTLE
ldxa
[%l3
]ASI_PRIMARY_LITTLE
, %l4
setx XMAC_CONFIG_mask1
, %l1
, %l5
stxa
%l5
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR_CMPEN_LSB
, %l1
, %l3
setx XMAC_ADDR_CMPEN_LSB_data
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO0
, %l1
, %l3
setx mac0_ctrl_word0
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO1
, %l1
, %l3
setx mac0_ctrl_word1
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO2
, %l1
, %l3
setx mac0_ctrl_word2
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO3
, %l1
, %l3
setx mac0_ctrl_word3
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO4
, %l1
, %l3
setx mac0_ctrl_word4
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO5
, %l1
, %l3
setx mac0_ctrl_word5
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO6
, %l1
, %l3
setx mac0_ctrl_word6
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_HOST_INFO7
, %l1
, %l3
setx mac0_ctrl_word7
, %l1
, %l4
stxa
%l4
, [%l3
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* Parameters in registers:
!* %o2: <=0 for Port 0, >0 for Port 1
!* %o3: Value to write to XMAC_ADDR3
!* %o4: Value to write to XMAC_ADDR4
!* %o5: Value to write to XMAC_ADDR3
!********************************************************************************/
setx XMAC_ADDR3
, %l1
, %l3
stxa
%i3
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR4
, %l1
, %l3
stxa
%i4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR5
, %l1
, %l3
stxa
%i5
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR3
, %l1
, %l3
stxa
%i3
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR4
, %l1
, %l3
stxa
%i4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR5
, %l1
, %l3
stxa
%i5
, [%l3
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* Parameters in registers:
!* %o2: <=0 for Port 0, >0 for Port 1
!* %o3: Value to write to XMAC_ADDR6
!* %o4: Value to write to XMAC_ADDR7
!* %o5: Value to write to XMAC_ADDR8
!********************************************************************************/
setx XMAC_ADDR6
, %l1
, %l3
stxa
%i3
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR7
, %l1
, %l3
stxa
%i4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR8
, %l1
, %l3
stxa
%i5
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR6
, %l1
, %l3
stxa
%i3
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR7
, %l1
, %l3
stxa
%i4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR8
, %l1
, %l3
stxa
%i5
, [%l3
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* Parameters in registers:
!* %o2: <=0 for Port 0, >0 for Port 1
!* %o3: Value to write to XMAC_ADDR9
!* %o4: Value to write to XMAC_ADDR10
!* %o5: Value to write to XMAC_ADDR11
!********************************************************************************/
setx XMAC_ADDR9
, %l1
, %l3
stxa
%i3
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR10
, %l1
, %l3
stxa
%i4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR11
, %l1
, %l3
stxa
%i5
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR9
, %l1
, %l3
stxa
%i3
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR10
, %l1
, %l3
stxa
%i4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR11
, %l1
, %l3
stxa
%i5
, [%l3
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* Parameters in registers:
!* %o2: <=0 for Port 0, >0 for Port 1
!* %o3: Value to write to XMAC_ADDR12
!* %o4: Value to write to XMAC_ADDR13
!* %o5: Value to write to XMAC_ADDR14
!********************************************************************************/
setx XMAC_ADDR12
, %l1
, %l3
stxa
%i3
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR13
, %l1
, %l3
stxa
%i4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR14
, %l1
, %l3
stxa
%i5
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR12
, %l1
, %l3
stxa
%i3
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR13
, %l1
, %l3
stxa
%i4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR14
, %l1
, %l3
stxa
%i5
, [%l3
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* Parameters in registers:
!* %o2: <=0 for Port 0, >0 for Port 1
!* %o3: Value to write to XMAC_ADDR15
!* %o4: Value to write to XMAC_ADDR16
!* %o5: Value to write to XMAC_ADDR17
!********************************************************************************/
setx XMAC_ADDR15
, %l1
, %l3
stxa
%i3
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR16
, %l1
, %l3
stxa
%i4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR17
, %l1
, %l3
stxa
%i5
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR15
, %l1
, %l3
stxa
%i3
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR16
, %l1
, %l3
stxa
%i4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR17
, %l1
, %l3
stxa
%i5
, [%l3
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* Parameters in registers:
!* %o2: <=0 for Port 0, >0 for Port 1
!* %o3: Value to write to XMAC_ADDR18
!* %o4: Value to write to XMAC_ADDR19
!* %o5: Value to write to XMAC_ADDR20
!********************************************************************************/
setx XMAC_ADDR18
, %l1
, %l3
stxa
%i3
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR19
, %l1
, %l3
stxa
%i4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR20
, %l1
, %l3
stxa
%i5
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR18
, %l1
, %l3
stxa
%i3
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR19
, %l1
, %l3
stxa
%i4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR20
, %l1
, %l3
stxa
%i5
, [%l3
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* Parameters in registers:
!* %o2: <=0 for Port 0, >0 for Port 1
!* %o3: Value to write to XMAC_ADDR21
!* %o4: Value to write to XMAC_ADDR22
!* %o5: Value to write to XMAC_ADDR23
!********************************************************************************/
setx XMAC_ADDR21
, %l1
, %l3
stxa
%i3
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR22
, %l1
, %l3
stxa
%i4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR23
, %l1
, %l3
stxa
%i5
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR21
, %l1
, %l3
stxa
%i3
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR22
, %l1
, %l3
stxa
%i4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR23
, %l1
, %l3
stxa
%i5
, [%l3
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* Parameters in registers:
!* %o2: <=0 for Port 0, >0 for Port 1
!* %o3: Value to write to XMAC_ADDR24
!* %o4: Value to write to XMAC_ADDR25
!* %o5: Value to write to XMAC_ADDR26
!********************************************************************************/
setx XMAC_ADDR24
, %l1
, %l3
stxa
%i3
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR25
, %l1
, %l3
stxa
%i4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR26
, %l1
, %l3
stxa
%i5
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR24
, %l1
, %l3
stxa
%i3
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR25
, %l1
, %l3
stxa
%i4
, [%l3
]ASI_PRIMARY_LITTLE
setx XMAC_ADDR26
, %l1
, %l3
stxa
%i5
, [%l3
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* Reset the TX MAC for one port
!* Parameters in registers:
!* %o2: <=0 for Port 0, >0 for Port 1
!********************************************************************************/
setx xtxmac_sw_rst0_addr
, %l1
, %l2
setx xtxmac_sw_rst1_addr
, %l1
, %l2
stxa
%l3
, [%l2
]ASI_PRIMARY_LITTLE
ldxa
[%l2
]ASI_PRIMARY_LITTLE
, %l4
!/********************************************************************************
!* Reset the RX MAC for one port
!* Parameters in registers:
!* %o2: <=0 for Port 0, >0 for Port 1
!********************************************************************************/
setx xrxmac_sw_rst0_addr
, %l1
, %l2
setx xrxmac_sw_rst1_addr
, %l1
, %l2
stxa
%l3
, [%l2
]ASI_PRIMARY_LITTLE
ldxa
[%l2
]ASI_PRIMARY_LITTLE
, %l4
!/********************************************************************************
!* Parameters in registers:
!********************************************************************************/
ldxa
[%l2
]ASI_PRIMARY_LITTLE
, %l1
!/********************************************************************************
!* Parameters in registers:
!********************************************************************************/
setx delay_10_count
, %l1
, %l5
ldxa
[%l2
]ASI_PRIMARY_LITTLE
, %l1
!/********************************************************************************
!* Program DMA Table in zcp block for 2 dma variation
!* (It is also used for Multi-port)
!* Parameters in registers:
!********************************************************************************/
setx ZCP_RDC_TBL_Addr
, %l7
, %l0
setx zcp_16_count
, %l1
, %l5
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* Program DMA Table in zcp block for one dma variation.
!* Parameters in registers:
!********************************************************************************/
setx ZCP_RDC_TBL_Addr
, %l7
, %l0
setx zcp_128_count
, %l1
, %l5
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* Program DMA Table in zcp block for 4 dma variation.
!* Parameters in registers:
!********************************************************************************/
setx ZCP_RDC_TBL_Addr
, %l7
, %l0
setx zcp_32_count
, %l7
, %l5
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx zcp_32_count
, %l7
, %l5
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx zcp_32_count
, %l7
, %l5
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx zcp_32_count
, %l7
, %l5
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* Program DMA Table in zcp block for 8 dma variation.
!* Parameters in registers:
!********************************************************************************/
setx ZCP_RDC_TBL_Addr
, %l7
, %l0
setx zcp_16_count
, %l7
, %l5
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx zcp_16_count
, %l7
, %l5
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx zcp_16_count
, %l7
, %l5
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx zcp_16_count
, %l7
, %l5
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx zcp_16_count
, %l7
, %l5
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx zcp_16_count
, %l7
, %l5
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx zcp_16_count
, %l7
, %l5
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx zcp_16_count
, %l7
, %l5
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
/***************************************************************************
** NIU_TX_MULTI_TEST => if not defined, only support one DMA channel
** if defined, support multiple DMA channels:
***************************************************************************/
!/********************************************************************************
!* Parameters in registers:
!********************************************************************************/
!/********************************************************************************
!* Set the maximum TX burst size for the DMA channel
!* Parameters in registers:
!* %o1: Maximum TX burst size
!* %o2: Is multi-port (not currently used)
!* %o3: Bit-mask of Port 0 DMA channels to set; bit 0 == DMA channel 0, etc.
!* %o4: Bit-mask of Port 1 DMA channels to set; bit 0 == DMA channel 0, etc.
!********************************************************************************/
mov
%i1
, %o1
! MAX_BURST_DATA
! mov
%i2
, %o2
! NIU_TX_MULTI_PORT
! mov
%i3
, %o3
! NIU_TX_MULTI_DMA_P0
! mov
%i4
, %o4
! NIU_TX_MULTI_DMA_P1
brgz
%i3
, p0_SetMaxBurst_call
brgz
%i4
, p1_SetMaxBurst_call
call Start_Check_SetMaxBurst
brgz
%i4
, p1_SetMaxBurst_call
call Start_Check_SetMaxBurst
bz
%xcc
, Check_SetMaxBurst_Dma1
setx SetTxMaxBurst_DMA0_Addr
, %l7
, %l2
stxa
%i1
, [%l2
]ASI_PRIMARY_LITTLE
bz
%xcc
, Check_SetMaxBurst_Dma2
setx SetTxMaxBurst_DMA1_Addr
, %l7
, %l2
stxa
%i1
, [%l2
]ASI_PRIMARY_LITTLE
bz
%xcc
, Check_SetMaxBurst_Dma3
setx SetTxMaxBurst_DMA2_Addr
, %l7
, %l2
stxa
%i1
, [%l2
]ASI_PRIMARY_LITTLE
bz
%xcc
, Check_SetMaxBurst_Dma4
setx SetTxMaxBurst_DMA3_Addr
, %l7
, %l2
stxa
%i1
, [%l2
]ASI_PRIMARY_LITTLE
bz
%xcc
, Check_SetMaxBurst_Dma5
setx SetTxMaxBurst_DMA4_Addr
, %l7
, %l2
stxa
%i1
, [%l2
]ASI_PRIMARY_LITTLE
bz
%xcc
, Check_SetMaxBurst_Dma6
setx SetTxMaxBurst_DMA5_Addr
, %l7
, %l2
stxa
%i1
, [%l2
]ASI_PRIMARY_LITTLE
bz
%xcc
, Check_SetMaxBurst_Dma7
setx SetTxMaxBurst_DMA6_Addr
, %l7
, %l2
stxa
%i1
, [%l2
]ASI_PRIMARY_LITTLE
bz
%xcc
, Check_SetMaxBurst_Dma8
setx SetTxMaxBurst_DMA7_Addr
, %l7
, %l2
stxa
%i1
, [%l2
]ASI_PRIMARY_LITTLE
bz
%xcc
, Check_SetMaxBurst_Dma9
setx SetTxMaxBurst_DMA8_Addr
, %l7
, %l2
stxa
%i1
, [%l2
]ASI_PRIMARY_LITTLE
bz
%xcc
, Check_SetMaxBurst_Dma10
setx SetTxMaxBurst_DMA9_Addr
, %l7
, %l2
stxa
%i1
, [%l2
]ASI_PRIMARY_LITTLE
bz
%xcc
, Check_SetMaxBurst_Dma11
setx SetTxMaxBurst_DMA10_Addr
, %l7
, %l2
stxa
%i1
, [%l2
]ASI_PRIMARY_LITTLE
bz
%xcc
, Check_SetMaxBurst_Dma12
setx SetTxMaxBurst_DMA11_Addr
, %l7
, %l2
stxa
%i1
, [%l2
]ASI_PRIMARY_LITTLE
bz
%xcc
, Check_SetMaxBurst_Dma13
setx SetTxMaxBurst_DMA12_Addr
, %l7
, %l2
stxa
%i1
, [%l2
]ASI_PRIMARY_LITTLE
bz
%xcc
, Check_SetMaxBurst_Dma14
setx SetTxMaxBurst_DMA13_Addr
, %l7
, %l2
stxa
%i1
, [%l2
]ASI_PRIMARY_LITTLE
bz
%xcc
, Check_SetMaxBurst_Dma15
setx SetTxMaxBurst_DMA14_Addr
, %l7
, %l2
stxa
%i1
, [%l2
]ASI_PRIMARY_LITTLE
bz
%xcc
, SetMaxBurstValue_end
setx SetTxMaxBurst_DMA15_Addr
, %l7
, %l2
stxa
%i1
, [%l2
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* Activate specified TX DMA channels
!* Parameters in registers:
!* %o2: >0 means both ports
!* %o3: Bit-mask of Port 0 DMA channels to set; bit 0 == DMA channel 0, etc.
!* %o4: Bit-mask of Port 1 DMA channels to set; bit 0 == DMA channel 0, etc.
!********************************************************************************/
! mov
%i2
, %g4
! NIU_TX_MULTI_PORT
! mov
%i3
, %g5
! NIU_TX_MULTI_DMA_P0
! mov
%i4
, %l5
! NIU_TX_MULTI_DMA_P1
brgz
%i3
, SetPort0DMAActive
brgz
%i4
, SetPort1DMAActive
brnz
%l0
, SetPort0Active_DMA
brz
%i2
, SetTxDMAActive_End
brnz
%l0
, SetPort1Active_DMA
setx SetPort0TxDMAActive_Addr
, %l7
, %l1
stxa
%l0
, [%l1
]ASI_PRIMARY_LITTLE
setx SetPort1TxDMAActive_Addr
, %l7
, %l1
stxa
%l0
, [%l1
]ASI_PRIMARY_LITTLE
!/********************************************************************************
!* This routine programs the transmit path registers for one DMA channel.
!* The caller must use the NIU_InitTxDma user event to write the registers's
!* This subroutine retrieves the data from the PEU_SRAM and write the data
!* to each TX register mentioned below in assembly.
!* This routine must be called for each enabled DMA channel.
!* Parameters in registers:
!* %o2: NIU_TX_MULTI_PORT
!* %o3: NIU_TX_MULTI_DMA_P0
!* %o4: NIU_TX_MULTI_DMA_P1
!********************************************************************************/
mov
%i0
, %o0
! DMA NUMBER
mov
%i2
, %o2
! NIU_TX_MULTI_PORT
mov
%i3
, %o3
! NIU_TX_MULTI_DMA_P0
mov
%i4
, %o4
! NIU_TX_MULTI_DMA_P1
brgz
%o3
, Set_Tx_Reg_Multi_Dma
restore
! Return InitTxDMA
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_P0_Tx_Dma0
)) -> NIU_InitTxDma (0, 0, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_P0_Tx_Dma1
)) -> NIU_InitTxDma (0, 1, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_P0_Tx_Dma2
)) -> NIU_InitTxDma (0, 2, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_P0_Tx_Dma3
)) -> NIU_InitTxDma (0, 3, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_P0_Tx_Dma4
)) -> NIU_InitTxDma (0, 4, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_P0_Tx_Dma5
)) -> NIU_InitTxDma (0, 5, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_P0_Tx_Dma6
)) -> NIU_InitTxDma (0, 6, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_P0_Tx_Dma7
)) -> NIU_InitTxDma (0, 7, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_P0_Tx_Dma8
)) -> NIU_InitTxDma (0, 8, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_P0_Tx_Dma9
)) -> NIU_InitTxDma (0, 9, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_P0_Tx_Dma10
)) -> NIU_InitTxDma (0, a
, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_P0_Tx_Dma11
)) -> NIU_InitTxDma (0, b
, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_P0_Tx_Dma12
)) -> NIU_InitTxDma (0, c
, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_P0_Tx_Dma13
)) -> NIU_InitTxDma (0, d
, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_P0_Tx_Dma14
)) -> NIU_InitTxDma (0, e
, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_P0_Tx_Dma15
)) -> NIU_InitTxDma (0, f
, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_p1_Tx_Dma0
)) -> NIU_InitTxDma (1, 0, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_p1_Tx_Dma1
)) -> NIU_InitTxDma (1, 1, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_p1_Tx_Dma2
)) -> NIU_InitTxDma (1, 2, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_p1_Tx_Dma3
)) -> NIU_InitTxDma (1, 3, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_p1_Tx_Dma4
)) -> NIU_InitTxDma (1, 4, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_p1_Tx_Dma5
)) -> NIU_InitTxDma (1, 5, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_p1_Tx_Dma6
)) -> NIU_InitTxDma (1, 6, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_p1_Tx_Dma7
)) -> NIU_InitTxDma (1, 7, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_p1_Tx_Dma8
)) -> NIU_InitTxDma (1, 8, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_p1_Tx_Dma9
)) -> NIU_InitTxDma (1, 9, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_p1_Tx_Dma10
)) -> NIU_InitTxDma (1, a
, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_p1_Tx_Dma11
)) -> NIU_InitTxDma (1, b
, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_p1_Tx_Dma12
)) -> NIU_InitTxDma (1, c
, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_p1_Tx_Dma13
)) -> NIU_InitTxDma (1, d
, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_p1_Tx_Dma14
)) -> NIU_InitTxDma (1, e
, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
! $EV
trig_pc_d(1, @
VA(.RED_EXT_SEC
.Do_p1_Tx_Dma15
)) -> NIU_InitTxDma (1, f
, NIU_Xlate_On
, NIU_TX_MULTI_PORT
, NIU_TX_MULTI_DMA_P0
, NIU_TX_MULTI_DMA_P1
)
restore
! Return InitTxDMA
setx TX_LOG_MASK1_Addr
, %l7
, %l3
setx NIU_PKTGEN_CSR_EV2A_TX_LOG_MASK1
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
stxa
%l1
, [%l3
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l3
]ASI_PRIMARY_LITTLE
setx TX_LOG_VALUE1_Addr
, %l7
, %l3
setx NIU_PKTGEN_CSR_EV2A_TX_LOG_VALUE1
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
stxa
%l1
, [%l3
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l3
]ASI_PRIMARY_LITTLE
setx TX_LOG_PAGE_RELO1_Addr
, %l7
, %l3
setx NIU_PKTGEN_CSR_EV2A_TX_LOG_PAGE_RELO1
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
stxa
%l1
, [%l3
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l3
]ASI_PRIMARY_LITTLE
setx TX_LOG_MASK2_Addr
, %l7
, %l3
setx NIU_PKTGEN_CSR_EV2A_TX_LOG_MASK2
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
stxa
%l1
, [%l3
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l3
]ASI_PRIMARY_LITTLE
setx TX_LOG_VALUE2_Addr
, %l7
, %l3
setx NIU_PKTGEN_CSR_EV2A_TX_LOG_VALUE2
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
stxa
%l1
, [%l3
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l3
]ASI_PRIMARY_LITTLE
setx TX_LOG_PAGE_RELO2_Addr
, %l7
, %l3
setx NIU_PKTGEN_CSR_EV2A_TX_LOG_PAGE_RELO2
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
stxa
%l1
, [%l3
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l3
]ASI_PRIMARY_LITTLE
setx NIU_PKTGEN_CSR_EV2A_TX_LOG_PAGE_VLD
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
setx TX_LOG_PAGE_VLD_Addr
, %l7
, %l0
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx NIU_PKTGEN_CSR_EV2A_TX_RNG_CFIG
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
setx TX_RNG_CFIG_Addr
, %l7
, %l0
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
restore
! Return InitTxDMA
!/********************************************************************************
!* Parameters in registers:
!********************************************************************************/
mov
%g0
, %l6
! For
16 Tx channel
setx SetTxMaxBurst_DMA0_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA1_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA2_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA3_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA4_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA5_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA6_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA7_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA8_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA9_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA10_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA11_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA12_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA13_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA14_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA15_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA16_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA17_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA18_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA19_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA20_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA21_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA22_Addr
, %l7
, %l0
setx SetTxMaxBurst_DMA23_Addr
, %l7
, %l0
stxa
%i1
, [%l0
]ASI_PRIMARY_LITTLE
brgz
%i0
, SetPort1DMAActive
setx SetPort0TxDMAActive_Addr
, %l7
, %l0
setx SetPort1TxDMAActive_Addr
, %l7
, %l0
stxa
%i1
, [%l0
]ASI_PRIMARY_LITTLE
setx TX_LOG_MASK1_Addr
, %l7
, %l3
setx NIU_PKTGEN_CSR_EV2A_TX_LOG_MASK1
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
stxa
%l1
, [%l3
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l3
]ASI_PRIMARY_LITTLE
setx TX_LOG_VALUE1_Addr
, %l7
, %l3
setx NIU_PKTGEN_CSR_EV2A_TX_LOG_VALUE1
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
stxa
%l1
, [%l3
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l3
]ASI_PRIMARY_LITTLE
setx TX_LOG_PAGE_RELO1_Addr
, %l7
, %l3
setx NIU_PKTGEN_CSR_EV2A_TX_LOG_PAGE_RELO1
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
stxa
%l1
, [%l3
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l3
]ASI_PRIMARY_LITTLE
setx TX_LOG_MASK2_Addr
, %l7
, %l3
setx NIU_PKTGEN_CSR_EV2A_TX_LOG_MASK2
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
stxa
%l1
, [%l3
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l3
]ASI_PRIMARY_LITTLE
setx TX_LOG_VALUE2_Addr
, %l7
, %l3
setx NIU_PKTGEN_CSR_EV2A_TX_LOG_VALUE2
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
stxa
%l1
, [%l3
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l3
]ASI_PRIMARY_LITTLE
setx TX_LOG_PAGE_RELO2_Addr
, %l7
, %l3
setx NIU_PKTGEN_CSR_EV2A_TX_LOG_PAGE_RELO2
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
stxa
%l1
, [%l3
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l3
]ASI_PRIMARY_LITTLE
setx NIU_PKTGEN_CSR_EV2A_TX_LOG_PAGE_VLD
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
setx TX_LOG_PAGE_VLD_Addr
, %l7
, %l0
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx NIU_PKTGEN_CSR_EV2A_TX_RNG_CFIG
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
setx TX_RNG_CFIG_Addr
, %l7
, %l0
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
restore
! Return InitTxDMA
!/********************************************************************************
!* This routine programs the receive DMA channel.
!* setup_zcp_tbl programs the DMA channel in ZCP block per enabled dma
!* parameters. If "MULTI_TEST" is not present, then it program the dma channel
!* for single dma for the existing tests (single-port/single-dma).
!* NIURX_SetPage0Registers programs the following registers in RDMC block.
!* The user event first writes the value of these registers in PEU_SRAM via back
!* door. Then the assembly retrieves the data from the PEU_SRAM
!* and programs the registers.
!* Parameters in registers:
!********************************************************************************/
! setx RXDMA_CHNL
, %l7
, %g3
setx ZCP_RDC_TBL_Addr
, %l7
, %l0
stxa
%i0
, [%l0
]ASI_PRIMARY_LITTLE
stxa
%i0
, [%l0
]ASI_PRIMARY_LITTLE
stxa
%i0
, [%l0
]ASI_PRIMARY_LITTLE
stxa
%i0
, [%l0
]ASI_PRIMARY_LITTLE
stxa
%i0
, [%l0
]ASI_PRIMARY_LITTLE
setx RX_LOG_MASK1_START_Addr
, %l7
, %l3
setx NIU_PKTGEN_CSR_EV2A_RX_LOG_MASK1
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
stxa
%l1
, [%l3
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l3
]ASI_PRIMARY_LITTLE
setx RX_LOG_VAL1_START_Addr
, %l7
, %l3
setx NIU_PKTGEN_CSR_EV2A_RX_LOG_VAL1
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
stxa
%l1
, [%l3
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l3
]ASI_PRIMARY_LITTLE
setx RX_LOG_RELO1_START_Addr
, %l7
, %l3
setx NIU_PKTGEN_CSR_EV2A_RX_LOG_RELO1
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
stxa
%l1
, [%l3
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l3
]ASI_PRIMARY_LITTLE
setx RX_LOG_MASK2_START_Addr
, %l7
, %l3
setx NIU_PKTGEN_CSR_EV2A_RX_LOG_MASK2
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
stxa
%l1
, [%l3
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l3
]ASI_PRIMARY_LITTLE
setx RX_LOG_VAL2_START_Addr
, %l7
, %l3
setx NIU_PKTGEN_CSR_EV2A_RX_LOG_VAL2
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
stxa
%l1
, [%l3
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l3
]ASI_PRIMARY_LITTLE
setx RX_LOG_RELO2_START_Addr
, %l7
, %l3
setx NIU_PKTGEN_CSR_EV2A_RX_LOG_RELO2
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
stxa
%l1
, [%l3
]ASI_PRIMARY_LITTLE
stxa
%g0
, [%l3
]ASI_PRIMARY_LITTLE
setx NIU_PKTGEN_CSR_EV2A_RX_LOG_PAGE_VLD
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
setx RX_LOG_PAGE_VLD_Addr
, %l7
, %l0
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx NIU_PKTGEN_CSR_EV2A_RBR_CFIG_A
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
setx RBR_CFIG_A_Addr
, %l7
, %l0
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx NIU_PKTGEN_CSR_EV2A_RBR_CFIG_B
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
setx RBR_CFIG_B_Addr
, %l7
, %l0
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx NIU_PKTGEN_CSR_EV2A_RCR_CFIG_A
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
setx RCR_CFIG_A_Addr
, %l7
, %l0
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx NIU_PKTGEN_CSR_EV2A_RXDMA_CFIG1_0
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
setx RXDMA_CFIG1_Addr
, %l7
, %l0
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx NIU_PKTGEN_CSR_EV2A_RXDMA_CFIG2
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
setx RXDMA_CFIG2_START_Addr
, %l7
, %l0
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx NIU_PKTGEN_CSR_EV2A_RXDMA_CFIG1_1
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
setx RXDMA_CFIG1_Addr
, %l7
, %l0
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
setx NIU_PKTGEN_CSR_EV2A_RBR_KICK
, %l7
, %l0
! PEP does
not support
64-bit access
, so use two
32-bit loads
setx RBR_KICK_Addr
, %l7
, %l0
stxa
%l1
, [%l0
]ASI_PRIMARY_LITTLE
restore
! Return NiuInitRxDma
!/********************************************************************************
!* Parameters in registers:
!* %o1: Expected number of TX packets
!********************************************************************************/
.global NiuTx_check_pkt_cnt
mov
%i0
, %o0
! %i0
= Mac_id
setx TXC_PKT_XMIT_Addr
, %l7
, %l0
setx TXC_PKT_XMIT_Mask
, %l7
, %l4
ldxa
[%l0
]ASI_PRIMARY_LITTLE
, %l1
cmp
%i1
, %l1
! %i1
2nd parameter no
. of Tx pkts
mov
%l1
, %l6
! save a copy
cmp
%i2
, %i3
! %i2
= Timeout value
; %i3
= Timeout counter
! $EV
trig_pc_d(1, expr(@
VA(.RED_EXT_SEC
.NIUTxcPktXmitTimeout
) + 4, 16, 16)) -> printf("ERROR : NIUTxcPktXmitTimeout",*,1)
! $EV
trig_pc_d(1, expr(@
VA(.RED_EXT_SEC
.Count_match
) + 8, 16, 16)) -> printf("Tx Count Match",*,1)
#if (MAC_SPEED0==1000) && (MAC_SPEED1==1000) /* Extra delay for 1G after the last packet is DMA-ed */
#endif /* (MAC_SPEED0==1000) && (MAC_SPEED1==1000) */
restore
! Return NiuTx_check_pkt_cnt
:
/* ************************************************************************
mov %i0, %o0 ! %i0 = Mac_id
mov NIU_Trap_TimeOut, %i2
setx 0x300000000, %l7, %l0
loop_timeout_NIU_Trap_Rd:
ldxa [%l0]ASI_PRIMARY_LITTLE, %l1
cmp %i1, %l1 ! %i1 2nd parameter no. of Tx pkts
mov %l1, %l6 ! save a copy
cmp %i2, %i3 ! %i2 = Timeout value; %i3 = Timeout counter
bne loop_timeout_NIU_Trap_Rd
! $EV trig_pc_d(1, expr(@VA(.RED_EXT_SEC.NIU_Trap_TimeOut) + 4, 16, 16)) -> printf("ERROR : NIU_Trap_TimeOut",*,1)
! $EV trig_pc_d(1, expr(@VA(.RED_EXT_SEC.Count_match) + 8, 16, 16)) -> printf("NIU Trap Count Match",*,1)
restore ! Return Check_NIU_Int
************************************************************************ */