/******************************************************************************* * port2lport * * DESCRIPTION: * This function converts physical port number to logical port number * * INPUTS: * portVec - physical port list in vector * port - logical port number * OUTPUTS: * None. * RETURNS: * physical port number * * COMMENTS: * *******************************************************************************/ GT_LPORT port2lport ( IN GT_U16 portVec, IN GT_U8 hwPort ) { GT_U8 tmpPort,port; port = 0; if (hwPort == GT_INVALID_PORT) return (GT_LPORT)hwPort; if (!GT_IS_PORT_SET(portVec, hwPort)) return (GT_LPORT)GT_INVALID_PORT; for (tmpPort = 0; tmpPort <= hwPort; tmpPort++) { if(portVec & 0x1) { port++; } portVec >>= 1; } return (GT_LPORT)port-1; }
/******************************************************************************* * gvlnGetPortVlanPorts * * DESCRIPTION: * This routine gets the port VLAN group port membership list. * * INPUTS: * port - logical port number to set. * * OUTPUTS: * memPorts - array of logical ports in the same vlan. * memPortsLen - number of members in memPorts array * * RETURNS: * GT_OK - on success * GT_FAIL - on error * GT_BAD_PARAM - on bad parameters * * COMMENTS: * * GalTis: * *******************************************************************************/ GT_STATUS gvlnGetPortVlanPorts ( IN GT_QD_DEV *dev, IN GT_LPORT port, OUT GT_LPORT memPorts[], OUT GT_U8 *memPortsLen ) { GT_STATUS retVal; /* Functions return value. */ GT_U16 data; /* The register's read data. */ GT_U8 phyPort; /* Physical port. */ GT_U8 i; DBG_INFO(("gvlnGetPortVlanPorts Called.\n")); if((memPorts == NULL) || (memPortsLen == NULL)) { DBG_INFO(("Failed.\n")); return GT_BAD_PARAM; } phyPort = GT_LPORT_2_PORT(port); /* memPortsLen = 3 for fullsail, =7 for others */ retVal = hwGetPortRegField(dev,phyPort,QD_REG_PORT_VLAN_MAP,0,dev->maxPorts,&data); if(retVal != GT_OK) { DBG_INFO(("Failed.\n")); return retVal; } i = 0; for(phyPort = 0; phyPort < dev->maxPorts; phyPort++) { if(!GT_IS_PORT_SET(dev->validPortVec, phyPort)) continue; if(((1 << phyPort) & data) != 0) { memPorts[i] = GT_PORT_2_LPORT(phyPort); i++; } } *memPortsLen = i; DBG_INFO(("OK.\n")); return GT_OK; }