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; }
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; }
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; }
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; }