/** ============================================================================ * @n@b Init_Switch * * @b Description * @n This API sets up the ethernet switch subsystem and its Address Lookup * Engine (ALE) in "Switch" mode. * * @param[in] * @n mtu Maximum Frame length to configure on the switch. * * @return * @n None * ============================================================================= */ Void Init_Switch (UInt32 mtu) { CSL_CPSW_3GF_PORTSTAT portStatCfg; /* Enable the CPPI port, i.e., port 0 that does all * the data streaming in/out of EMAC. */ CSL_CPSW_3GF_enablePort0 (); CSL_CPSW_3GF_disableVlanAware (); CSL_CPSW_3GF_setPort0VlanReg (0, 0, 0); CSL_CPSW_3GF_setPort0RxMaxLen (mtu); /* Enable statistics on both the port groups: * * MAC Sliver ports - Port 1, Port 2 * CPPI Port - Port 0 */ portStatCfg.p0AStatEnable = 1; portStatCfg.p0BStatEnable = 1; portStatCfg.p1StatEnable = 1; portStatCfg.p2StatEnable = 1; CSL_CPSW_3GF_setPortStatsEnableReg (&portStatCfg); /* Setup the Address Lookup Engine (ALE) Configuration: * (1) Enable ALE. * (2) Clear stale ALE entries. * (3) Disable VLAN Aware lookups in ALE since * we are not using VLANs by default. * (4) No Flow control * (5) Configure the Unknown VLAN processing * properties for the switch, i.e., which * ports to send the packets to. */ CSL_CPSW_3GF_enableAle (); CSL_CPSW_3GF_clearAleTable (); CSL_CPSW_3GF_disableAleVlanAware (); CSL_CPSW_3GF_disableAleTxRateLimit (); CSL_CPSW_3GF_setAlePrescaleReg (125000000u/1000u); CSL_CPSW_3GF_setAleUnkownVlanReg (7, 3, 3, 7); if(cpswLpbkMode != CPSW_LOOPBACK_NONE) CSL_CPSW_3GF_enableAleBypass(); /* Done with switch configuration */ return; }
/** ============================================================================ * @n@b Init_Switch * * @b Description * @n This API sets up the ethernet switch subsystem and its Address Lookup * Engine (ALE) in "Switch" mode. * * @param[in] * @n mtu Maximum Frame length to configure on the switch. * * @return * @n None * ============================================================================= */ void Init_Switch (uint32_t mtu) { CSL_CPSW_3GF_PORTSTAT portStatCfg; uint32_t rx_max_len = mtu + 14 + 4; /* 4 bytes of FCS */ CSL_CPSW_3GF_ALE_PORTCONTROL alePortControlCfg; /* Enable the CPPI port, i.e., port 0 that does all * the data streaming in/out of EMAC. */ CSL_CPSW_3GF_enablePort0 (); CSL_CPSW_3GF_disableVlanAware (); CSL_CPSW_3GF_setPort0VlanReg (0, 0, 0); CSL_CPSW_3GF_setPort0RxMaxLen (rx_max_len); /* Enable statistics on both the port groups: * * MAC Sliver ports - Port 1, Port 2 * CPPI Port - Port 0 */ portStatCfg.p0AStatEnable = 1; portStatCfg.p0BStatEnable = 1; portStatCfg.p1StatEnable = 1; portStatCfg.p2StatEnable = 1; CSL_CPSW_3GF_setPortStatsEnableReg (&portStatCfg); /* Setup the Address Lookup Engine (ALE) Configuration: * (1) Enable ALE. * (2) Clear stale ALE entries. * (3) Disable VLAN Aware lookups in ALE since * we are not using VLANs by default. * (4) No Flow control * (5) Configure the Unknown VLAN processing * properties for the switch, i.e., which * ports to send the packets to. */ CSL_CPSW_3GF_enableAle (); CSL_CPSW_3GF_clearAleTable (); CSL_CPSW_3GF_disableAleVlanAware (); CSL_CPSW_3GF_disableAleTxRateLimit (); /* Setting the Switch MTU Size to more than needed */ CSL_CPGMAC_SL_setRxMaxLen(0, rx_max_len); CSL_CPGMAC_SL_setRxMaxLen(1, rx_max_len); /* Configure the address in "Learning"/"Forward" state */ alePortControlCfg.portState = ALE_PORTSTATE_FORWARD; alePortControlCfg.dropUntaggedEnable = 0; alePortControlCfg.vidIngressCheckEnable = 0; alePortControlCfg.noLearnModeEnable = 0; alePortControlCfg.mcastLimit = 0; alePortControlCfg.bcastLimit = 0; CSL_CPSW_3GF_setAlePortControlReg (0, &alePortControlCfg); CSL_CPSW_3GF_setAlePortControlReg (1, &alePortControlCfg); CSL_CPSW_3GF_setAlePortControlReg (2, &alePortControlCfg); #ifdef SIMULATOR_SUPPORT CSL_CPSW_3GF_enableAleBypass(); #endif /* Done with switch configuration */ return; }