Exemple #1
0
static int change_gmii_mode(void)
{
    int status;

    //change to GMII first
    write_reg(MV6097_GMII_MII_REG, MV6097_GMII_EN);
    swReset();
    usleep(10000);

    if((status = qdStart(SW_CPU_PORT)) != GT_OK)
    {
        ERROR(GLOBAL_OUT_GROUP, "initialize 88e6097 failed!\n");
        return -1;
    }

    DEBUG(GLOBAL_OUT_GROUP, "initialize 88e6097 OK\n");
    return 0;
}
Exemple #2
0
int lr20xx_sw_init(void)
{
	int ret = 0;

    switchd_open();
	swReset();

	if((ret = qdStart(SW_CPU_PORT)) != GT_OK)
	{
		ERROR(GLOBAL_OUT_GROUP, "initialize 88e6161 failed!\n");

		return LR_FAILD;
	}


	GT_DOT1Q_MODE  dot1qMode;
	GT_VTU_ENTRY  vtuEntry;
	/* isolate P3 and P4*/
	GT_LPORT portList[6];
	GT_LPORT cnt = 0;
	//	portList[0] = dev->cpuPortNum;
	//	gvlnSetPortVlanPorts(dev, (GT_U8)SW_CES_PORT, portList, 1);

	//	portList[0] = SW_CES_PORT;
	//	gvlnSetPortVlanPorts(dev, (GT_U8)dev->cpuPortNum, portList, 1);

	portList[0] = SW_CES_PORT;
	set_port_isolate_base_port(SW_CPU_PORT, portList, 1);

	portList[0] = SW_CPU_PORT;
	set_port_isolate_base_port(SW_CES_PORT, portList, 1);


	// 设置 P3 和 P4 的802.1Q 模式为secured
	//	dot1qMode = GT_SECURE;
	//	gvlnSetPortVlanDot1qMode(dev, SW_CPU_PORT, dot1qMode);
	//	gvlnSetPortVlanDot1qMode(dev, SW_CES_PORT, dot1qMode);

	// 添加默认VLAN 1
	/*
	   for(int i=0; i<6; i++){
	   BASE_VLAN_PORT port;

	//	if(i == SW_CPU_PORT)
	//		continue;
	port.portid = i;
	port.portAttr.egress = EGRESS_UNTAGGED;
	gvlnSetPortVid(dev, i, 1);

	}
	*/
	memset(&vtuEntry, 0, sizeof(GT_VTU_ENTRY));
	vtuEntry.vid = 1;
	vtuEntry.vtuData.memberTagP[3] = MEMBER_EGRESS_UNTAGGED;
	gvtuAddEntry(dev, &vtuEntry);

	//TODO: serdes 速率设置
	smiWriteReg(0x0c, 0, 0x40);
	smiWriteReg(0x0c, 0x10, 0xc44b);

	set_port_link_type(SW_CPU_PORT, PORT_LINK_TYPE_TRUNK);
	set_port_link_type(SW_CES_PORT, PORT_LINK_TYPE_TRUNK);


	force_link_port(SW_CPU_PORT);
	force_link_port(SW_CES_PORT);

	smiWriteReg(0x13,0,0x0d);
	smiWriteReg(0x13,1,0x03);


	INFO(GLOBAL_OUT_GROUP, "initialize 88e6161 OK\n");

	return ret;
}
Exemple #3
0
int ptn705_sw_init(void)
{
	int ret = 0;
	swReset();
	usleep(10000);
	/* 省掉对AR8031的初始化, PTN705为放弃产品,
	 * 新软件不做完全支撑,若要启用需要更新代码*/

	if((ret = qdStart(SW_CPU_PORT)) != GT_OK){
		ERROR(GLOBAL_OUT_GROUP, "initialize 88e6097 failed!\n");
		return LR_FAILD;
	}

	// 初始化端口数据库
	ret = init_port_db();
	

	/* isolate MGNT_PORT ; PTN705 is P6 port*/
	u16 portList[MAX_SWITCH_PORTS];
	portList[0] = dev->cpuPortNum;
	set_port_unisolate_base_port(SW_MGMT_PORT, portList, 1);

	portList[0] = SW_MGMT_PORT;
	portList[1] = dev->cpuPortNum;
	for(int i=0; i< 6; i++)
		set_port_isolate_base_port(i, portList, 2);
#if 0 
	portList[0] = 0;
	portList[1] = 1;
	portList[2] = 2;
	portList[3] = 3;
	portList[4] = 4;
	portList[5] = 5;
	portList[6] = 6;
	portList[7] = 7;
	portList[8] = 8;
	portList[10] = 10;
	set_port_unisolate_base_port(dev->cpuPortNum, portList, 10);
#endif
	portList[0] = SW_MGMT_PORT;
	set_port_unisolate_base_port(dev->cpuPortNum, portList, 1);

	create_vlan_have_none_port(1);	
	for(int i=0; i<6; i++){
		BASE_VLAN_PORT port;
		port.portid = i;
		port.portAttr.egress = EGRESS_UNTAGGED;
		set_port_pvid(i, 1);
		bind_vlan_to_port(1,port); 
	}
	/* mgmt frame drop to cpu port*/
	hw_mgmt_frame_support(true);

	// flood setting
	set_egress_flood(0, BLOCK_EGRESS_NONE);

	// set ARP not mirror to CPU
	for(int i=0; i<6; i++){
		//TODO: add error handle
		set_arp_to_cpu(i, false);
	}

#if 0
	/* set Flood egress Rate limit*/
	PORT_RATE_LIMIT_MODE mode = RATE_LIMIT_FLOOD; //88e6097 not support flood rate limit, used all layer 1 
	PORT_EGRESS_RATE rate;
	rate.base = RATE_PER_BITS;
	rate.rate.kbRate = 64000 ;    // 64000kbps
	for(int i=0; i<6; i++){
		ret = set_port_egress_rate_limit(i, mode, rate);
		INFO(GLOBAL_OUT_GROUP, "set port %d egress rate limit to %d kbs %s\n", i, rate.rate.kbRate, getJsonMsg(ret));
	}

	/* 设置队列 优先级*/
	ret = set_default_ingress_rate_limit();
	INFO(GLOBAL_OUT_GROUP, "set port ingress Queue Priority %s\n",  getJsonMsg(ret));
#endif


	//force_link_port(10);


	DEBUG(GLOBAL_OUT_GROUP, "initialize 88e6097 OK\n");
	return ret;

}
Exemple #4
0
GT_STATUS qdInit(void)
{
	GT_STATUS	 status = GT_OK;	
	unsigned int i;

	status = qdStart();
	if (GT_OK != status)
	{
		gtOsPrintf("qdStart is failed: status = 0x%x\n", status);
		return status;
	}

#ifdef DB_6093_88E6218
	/* start 88E6090 device, assumes SMI Address 0x11 and CPU Port 10 */

	if(loadDev(qd_ext, SMI_MULTI_ADDR_MODE, 0x11, 10) == NULL)
	{
		gtOsPrintf("Failed to start External Device. Please check the SMI Address 0x11!\n");
	}

	/* allow larger than 1522 bytes of frame (header + marvell tag) */
	gsysSetMaxFrameSize(qd_dev,GT_FALSE);

#endif

    for (i=0; i<qd_dev->numOfPorts; i++) 
    {
      /* default port prio to three */
      gcosSetPortDefaultTc(qd_dev, i, 3);       
      /* disable IP TOS Prio */
      gqosIpPrioMapEn(qd_dev, i, GT_FALSE);  
      /* disable QOS Prio */
      gqosUserPrioMapEn(qd_dev, i, GT_FALSE);
      /* Force flow control for all ports */
      gprtSetForceFc(qd_dev, i, GT_FALSE);
    }

	/* Enable port #6 */
	status = gstpSetPortState(qd_dev, 6, GT_PORT_FORWARDING);

	if((status = gprtClearAllCtr(qd_dev)) != GT_OK)
	{		
		return status;
	}	
	for (i=0; i<GT_CPU_SWITCH_PORT; i++)
	{
		gprtSetMcRateLimit(qd_dev, i, GT_MC_100_PERCENT_RL);
	}

#ifdef QD_DEBUG
    for (i=0; i<qd_dev->numOfPorts; i++) 
	{
		short sdata;
	  
	  	hwReadPortReg(qd_dev, i, 0x4, &sdata);
	  	gtOsPrintf("Control reg for port[%d] is: %x\n",i,sdata);

	  	hwReadPortReg(qd_dev, i, 0x0, &sdata);
	  	gtOsPrintf("Status reg for port[%d] is: %x\n",i,sdata);

	}
    qdStatus();
#endif /* QD_DEBUG */

    gtOsPrintf("QD initiated\n");

	return status;    
}