⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qdinit.c_orig

📁 Mavell AP32 无线模块驱动。VxWorks BSP BootRom源代码
💻 C_ORIG
📖 第 1 页 / 共 2 页
字号:
            DBG_INFO("Failed.\n");
            return retVal;
        }
    }


    dev->stpMode = 2;

    if(retVal == GT_OK)
        DBG_INFO("OK.\n");
    else
        DBG_INFO("Failed.\n");
    return retVal;

	retVal = GT_OK;
}


/////////////////////gstpSetMode 


    //}

    //dev->devEnabled = 1;
    //dev->devNum = cfg->devNum;

    DBG_INFO("OK.\n");
    return GT_OK;
}

/*******************************************************************************
* gvlnSetPortVid
*
* DESCRIPTION:
*       This routine Set the port default vlan id.
*
* INPUTS:
*       port - logical port number to set.
*       vid  - the port vlan id.
*
* OUTPUTS:
*       None.
*
* RETURNS:
*       GT_OK               - on success
*       GT_FAIL             - on error
*       GT_BAD_PARAM        - on bad parameters
*
* COMMENTS:
*
* GalTis:
*
*******************************************************************************/
GT_STATUS gvlnSetPortVid
(
    IN GT_QD_DEV    *dev,
    IN GT_LPORT     port,
    IN GT_U16       vid
)
{
    GT_STATUS       retVal;         /* Functions return value.      */
    GT_U8           phyPort;        /* Physical port.               */

    DBG_INFO("gvlnSetPortVid Called.\n");
    phyPort = GT_LPORT_2_PORT(port);

    retVal = hwSetPortRegField(dev,phyPort,QD_REG_PVID,0,12, vid);
    if(retVal != GT_OK)
    {
        DBG_INFO("Failed.\n");
        return retVal;
    }
    DBG_INFO("OK.\n");
    return GT_OK;
}




/*******************************************************************************
* gvlnSetPortVlanPorts
*
* DESCRIPTION:
*       This routine sets the port VLAN group port membership list.
*
* INPUTS:
*       port        - logical port number to set.
*       memPorts    - array of logical ports.
*       memPortsLen - number of members in memPorts array
*
* OUTPUTS:
*       None.
*
* RETURNS:
*       GT_OK               - on success
*       GT_FAIL             - on error
*       GT_BAD_PARAM        - on bad parameters
*
* COMMENTS:
*
* GalTis:
*
*******************************************************************************/
GT_STATUS gvlnSetPortVlanPorts
(
    IN GT_QD_DEV *dev,
    IN GT_LPORT  port,
    IN GT_LPORT  memPorts[],
    IN GT_U8     memPortsLen
)
{
    GT_STATUS       retVal;         /* Functions return value.      */
    GT_U16          data;           /* Data to be set into the      */
                                    /* register.                    */
    GT_U8           phyPort;        /* Physical port.               */
    GT_U8           i;

    DBG_INFO("gvlnSetPortVlanPorts Called.\n");
    if(memPorts == NULL)
    {
        DBG_INFO("Failed.\n");
        return GT_BAD_PARAM;
    }

    phyPort = GT_LPORT_2_PORT(port);
    data = 0;

	if(memPortsLen > dev->numOfPorts)
    {
        DBG_INFO("Failed (PortsLen Too Big).\n");
        return GT_BAD_PARAM;
    }

    for(i = 0; i < memPortsLen; i++)
        data |= (1 << GT_LPORT_2_PORT(memPorts[i]));

    /* memPortsLen = 3 for fullsail, =7 for others */
    retVal = hwSetPortRegField(dev,phyPort,QD_REG_PORT_VLAN_MAP,0,dev->numOfPorts,data);
    if(retVal != GT_OK)
    {
        DBG_INFO("Failed.\n");
        return retVal;
    }

    DBG_INFO("OK.\n");
    return GT_OK;
}
/*******************************************************************************
* hwReadGlobalReg
*
* DESCRIPTION:
*       This function reads a switch's global register.
*
* INPUTS:
*       regAddr - The register's address.
*
* OUTPUTS:
*       data    - The read register's data.
*
* RETURNS:
*       GT_OK on success, or
*       GT_FAIL otherwise.
*
* COMMENTS:
*       None.
*
*******************************************************************************/
GT_STATUS hwReadGlobalReg
(
    IN GT_QD_DEV *dev,
    IN  GT_U8    regAddr,
    OUT GT_U16   *pData
)
{
    GT_U8       phyAddr;
    GT_STATUS   retVal;

    phyAddr = CALC_SMI_DEV_ADDR(dev->baseRegAddr,
                                GLOBAL_REGS_START_ADDR);

    //retVal = evFFReadMii(dev,phyAddr,regAddr,(GT_U32*)pData);
    retVal = evFFReadMii(dev,(unsigned int)(0xF - 0x8),(unsigned int)regAddr,(unsigned int*)pData);
	DBG_INFO("read from global register: phyAddr 0x%x, regAddr 0x%x, ",
              phyAddr,regAddr);
    DBG_INFO("data 0x%x.\n",*pData);
    return retVal;
}


/*******************************************************************************
* hwGetGlobalRegField
*
* DESCRIPTION:
*       This function reads a specified field from a switch's global register.
*
* INPUTS:
*       regAddr     - The register's address.
*       fieldOffset - The field start bit index. (0 - 15)
*       fieldLength - Number of bits to read.
*
* OUTPUTS:
*       data        - The read register field.
*
* RETURNS:
*       GT_OK on success, or
*       GT_FAIL otherwise.
*
* COMMENTS:
*       1.  The sum of fieldOffset & fieldLength parameters must be smaller-
*           equal to 16.
*
*******************************************************************************/
GT_STATUS hwGetGlobalRegField
(
    IN GT_QD_DEV *dev,
    IN  GT_U8    regAddr,
    IN  GT_U8    fieldOffset,
    IN  GT_U8    fieldLength,
    OUT GT_U16   *data
)
{
    GT_U16 mask;            /* Bits mask to be read */
    GT_U16 tmpData;

    if(hwReadGlobalReg(dev,regAddr,&tmpData) != GT_OK)
        return GT_FAIL;

    CALC_MASK(fieldOffset,fieldLength,mask);
    tmpData = (tmpData & mask) >> fieldOffset;
    *data = tmpData;
    DBG_INFO("Read from global register: regAddr 0x%x, ",
              regAddr);
    DBG_INFO("fOff %d, fLen %d, data 0x%x.\n",fieldOffset,fieldLength,*data);

    return GT_OK;
}
/*******************************************************************************
* hwWriteGlobalReg
*
* DESCRIPTION:
*       This function writes to a switch's global register.
*
* INPUTS:
*       regAddr - The register's address.
*       data    - The data to be written.
*
* OUTPUTS:
*       None.
*
* RETURNS:
*       GT_OK on success, or
*       GT_FAIL otherwise.
*
* COMMENTS:
*       None.
*
*******************************************************************************/
GT_STATUS hwWriteGlobalReg
(
    IN GT_QD_DEV *dev,
    IN  GT_U8    regAddr,
    IN  GT_U16   data
)
{
    GT_U8   phyAddr;

    phyAddr = CALC_SMI_DEV_ADDR(dev->baseRegAddr,
                                GLOBAL_REGS_START_ADDR);

    DBG_INFO("Write to global register: phyAddr 0x%x, regAddr 0x%x, ",
              phyAddr,regAddr);
    DBG_INFO("data 0x%x.\n",data);

    return evFFWriteMii(dev,phyAddr,regAddr,data);
}


/*******************************************************************************
* hwSetGlobalRegField
*
* DESCRIPTION:
*       This function writes to specified field in a switch's global register.
*
* INPUTS:
*       regAddr     - The register's address.
*       fieldOffset - The field start bit index. (0 - 15)
*       fieldLength - Number of bits to write.
*       data        - Data to be written.
*
* OUTPUTS:
*       None.
*
* RETURNS:
*       GT_OK on success, or
*       GT_FAIL otherwise.
*
* COMMENTS:
*       1.  The sum of fieldOffset & fieldLength parameters must be smaller-
*           equal to 16.
*
*******************************************************************************/
GT_STATUS hwSetGlobalRegField
(
    IN GT_QD_DEV *dev,
    IN  GT_U8    regAddr,
    IN  GT_U8    fieldOffset,
    IN  GT_U8    fieldLength,
    IN  GT_U16   data
)
{
    GT_U16 mask;
    GT_U16 tmpData;

    if(hwReadGlobalReg(dev,regAddr,&tmpData) != GT_OK)
        return GT_FAIL;

    CALC_MASK(fieldOffset,fieldLength,mask);

    /* Set the desired bits to 0.                       */
    tmpData &= ~mask;
    /* Set the given data into the above reset bits.    */
    tmpData |= ((data << fieldOffset) & mask);

    DBG_INFO("Write to global register: regAddr 0x%x, ",
              regAddr);
    DBG_INFO("fieldOff %d, fieldLen %d, data 0x%x.\n",fieldOffset,
              fieldLength,data);

    return hwWriteGlobalReg(dev,regAddr,tmpData);
}


/*******************************************************************************
* gprtClearAllCtr
*
* DESCRIPTION:
*       This routine clears all port rx/tx counters.
*
* INPUTS:
*       None.
*
* OUTPUTS:
*       None.
*
* RETURNS:
*       GT_OK   - on success
*       GT_FAIL - on error
*
* COMMENTS:
*
*
* GalTis:
*
*******************************************************************************/
GT_STATUS gprtClearAllCtr
(
    IN GT_QD_DEV    *dev
)
{
    IN GT_STATUS     retVal;         /* Functions return value.      */
    IN GT_U16        mode;           /* hold counters current mode   */

    DBG_INFO("gprtClearAllCtr Called.\n");
    /* get counter current mode  */
    if(hwGetGlobalRegField(dev,QD_REG_GLOBAL_CONTROL,8,1,&mode) != GT_OK)
    {
        DBG_INFO("Failed (Get field).\n");
        return GT_FAIL;
    }
    /* write opposite value to reset counter */
    if(hwSetGlobalRegField(dev,QD_REG_GLOBAL_CONTROL,8,1,(GT_U16)(1 - mode)) != GT_OK)
    {
        DBG_INFO("Failed (Get field).\n");
        return GT_FAIL;
    }
    /* restore counters mode */
    retVal = hwSetGlobalRegField(dev,QD_REG_GLOBAL_CONTROL,8,1,mode);

    DBG_INFO("OK.\n");
    return retVal;
}



/*
*  Initialize the QuarterDeck. This should be done in BSP driver init routine.
*	Since BSP is not combined with QuarterDeck driver, we are doing here.
*/
GT_STATUS qdStart(void) /* devId is used for simulator only */
{
	GT_STATUS status;
	//int portListIdx = 0;

	//GT_LPORT portList[MAX_SWITCH_PORTS] = {0};


	//evFFInit(qd_dev);

	//cfg.initPorts = GT_FALSE;	
	//cfg.cpuPortNum = CPU_PORT_NUM;	

    qd_dev->cpuPortNum = CPU_PORT_NUM;	
	
	
	if((status = qdLoadDriver(NULL, qd_dev)) != GT_OK)
	{		
		DBG_INFO("qdLoadDriver failed\n");
		return status;
	}
	/*
	*  start the QuarterDeck
	*/
	if (qd_dev->deviceId == GT_88E6063)
	{
		phyPatch(qd_dev);
	}

	
	/* to which VID should we set the CPU_PORT? (1 is temporary)*/
	if((status = gvlnSetPortVid(qd_dev, CPU_PORT_NUM, 1)) != GT_OK)
	{
		DBG_INFO("gprtSetPortVid returned fail.\n");
		return status;
	}

	return GT_OK;    
}

/*
 * All ports are connected to all ports!!
 * port #6 is out of the game 
 */
GT_STATUS starVlan(GT_QD_DEV *dev, unsigned int numOfPorts)
{
	GT_STATUS status = GT_OK;
	GT_LPORT port;
	GT_LPORT portList[MAX_SWITCH_PORTS];
	do {
		/* 
		*  set Port VLAN Mapping.
		*	port 0 <--> 5 VLAN #1.
		*	port 1 <--> 5 VLAN #2.
		*	port 2 <--> 5 VLAN #3.
		*	port 3 <--> 5 VLAN #4.
		*	port 4 <--> 5 VLAN #5.
		*/
		portList[0] = 5;
		for (port = 0; port < 5; port++) 
		{
			/* port #port : set VLAN ID (i+1) */
			if((status = gvlnSetPortVid(dev, port, (port+1) )) != GT_OK)
				break;
			/* port #port : set port 5 */
			if((status = gvlnSetPortVlanPorts(dev, port, portList,1)) != GT_OK)
				return status;
		}

	/* assign the VID of the CPU port to 1 ??? */
	if((status = gvlnSetPortVid(dev, 5, 1)) != GT_OK)
		break;

	/* port 5 : set port 0,1,2,3,4 */
	portList[0] = 0;
	portList[1] = 1;
	portList[2] = 2;
	portList[3] = 3;
	portList[4] = 4;
	
	if((status = gvlnSetPortVlanPorts(dev, 5,portList,5)) != GT_OK)
		break;
	
	}while(0);
	
	return GT_OK;
}



/*******************************************************************************
* gqosSetPortDefaultTc
*
* DESCRIPTION:
*       Sets the default traffic class for a specific port.
*
* INPUTS:
*       port      - logical port number
*       trafClass - default traffic class of a port.
*
* OUTPUTS:
*       None.
*
* RETURNS:
*       GT_OK   - on success
*       GT_FAIL - on error
*
* COMMENTS:
*       None.
*
* GalTis:
*
*******************************************************************************/
GT_STATUS gcosSetPortDefaultTc
(
    IN  GT_QD_DEV *dev,
    IN GT_LPORT   port,
    IN GT_U8      trafClass
)
{
    GT_STATUS       retVal;         /* Functions return value.      */
    GT_U8           hwPort;         /* the physical port number     */

    DBG_INFO("gcosSetPortDefaultTc Called.\n");
    /* translate LPORT to hardware port */
    hwPort = GT_LPORT_2_PORT(port);

    /* check if device supports this feature */
    if((retVal = IS_VALID_API_CALL(dev,hwPort, DEV_QoS)) != GT_OK ) 
      return retVal;
	
    /* Set the default port pri.  */
    retVal = hwSetPortRegField(dev,hwPort,QD_REG_PVID,14,2,trafClass);
    if(retVal != GT_OK)
        DBG_INFO("Failed.\n");
    else
        DBG_INFO("OK.\n");
    return retVal;
}



GT_STATUS qdInit(void)
{
	GT_STATUS	 status = GT_OK;	
	unsigned int i;
	status = qdStart();
	if (GT_OK != status)
	{
		DBG_INFO("qdStart failed !!!\n");
		
		return status;
	}



	status = gstpSetPortState(qd_dev, 6, GT_PORT_DISABLE);
	
	if((status = gprtClearAllCtr(qd_dev)) != GT_OK)
	{		
		DBG_INFO("Error in QD init 2\n");
		return status;
	}  
	/*
	for (i= 0; i < 5; i++)
	{
		gprtSetMcRateLimit(qd_dev, i, GT_MC_100_PERCENT_RL);
	}
	*/
	
	/* Setting port default priority to zero */
	/* and disabling IP TOS Priority and and 802.3a TAG */
	for (i= 0; i <= 6; i++)
	{
	  gcosSetPortDefaultTc(qd_dev,i,0);
	  //gqosIpPrioMapEn(qd_dev, i, GT_FALSE);
	  //gqosUserPrioMapEn(qd_dev, i, GT_FALSE);
	  //gprtSetForceFc(qd_dev, i, GT_TRUE);
	}

	status = starVlan(qd_dev, 6); 
	if( status == GT_OK)
		DBG_INFO("Successfult QD init!\n");
	else
		DBG_INFO("Error in QD init!\n");
	return status;    
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -