Beispiel #1
0
/*
 *    Disable QuarterDeck Interrupt.
*/
GT_STATUS sampleQDIntDisable(GT_QD_DEV *dev)
{
    GT_STATUS status;
    GT_LPORT port;

    /*
     *    Writing 0 into eventSetActive(), all port interrupt will be disabled.
    */
    if((status = eventSetActive(dev,0)) != GT_OK)
    {
        MSG_PRINT(("eventSetActive returned fail.\n"));
        return status;
    }

    /*
     *    Writing 0 into gprtPhyIntEnable(), all port interrupt will be disabled.
    */
    for(port=0; port<3; port++)
    {
        if((status = gprtPhyIntEnable(dev,port,0)) != GT_OK)
        {
            MSG_PRINT(("gprtPhyIntEnable returned fail.\n"));
            return status;
        }
    }
    return GT_OK;
}
Beispiel #2
0
/*
 *    Disable Egress Monitoring and Ingress Monitoring for the monitoredPort.
*/
GT_STATUS sampleDisablePortMonitor(GT_QD_DEV *dev,GT_LPORT monitoredPort)
{
    GT_STATUS status;
    GT_U16 pav;

    /*
     *    Disable Egress Monitoring for the monitoredPort.
    */
    pav = (1<<monitoredPort);

    if((status = gpavSetPAV(dev,monitoredPort, pav)) != GT_OK)
    {
        MSG_PRINT(("gpavSetPAV return Failed\n"));
        return status;
    }

    /*
     *    Disable Ingress Monitoring for the monitoredPort.
    */
    if((status = gpavSetIngressMonitor(dev,monitoredPort, GT_FALSE)) != GT_OK)
    {
        MSG_PRINT(("gpavSetIngressMonitor return Failed\n"));
        return status;
    }

    return GT_OK;
}
Beispiel #3
0
void displayStatus_drv_1(MAD_STATUS status)
{

/* MAD error status driver level 1 */
	switch(status&MAD_ERR_ST_DRV_1_MASK)
	{
		case 0	:
			break;
		case MAD_DRV_FAIL_ACCESS_PAGE_REG	:			
			MSG_PRINT("Accessing Page Register failed \n");    
			break;
		case MAD_DRV_FAIL_WRITE_PAGED_REG	:			
			MSG_PRINT("SMI Paged register Write failed \n");    
			break;
		case MAD_DRV_NO_ABLE_READ_REG		:			
			MSG_PRINT("Not able to read Phy Register. \n");    
			break;
		case MAD_DRV_NO_ABLE_WRITE_REG		:			
			MSG_PRINT("Not able to write Phy Register. \n");    
			break;
		default:			
			MSG_PRINT("Unknown Error Driver layer 1L\n");    
			break;
	}


}
Beispiel #4
0
GT_STATUS sampleCPUTrailerEnable(GT_QD_DEV *dev, GT_BOOL en)
{
	GT_STATUS status;
	GT_INGRESS_MODE	inMode;

	if (en)	/* Enable Trailer Mode */
	{
		inMode = GT_TRAILER_INGRESS;
	}
	else
	{
		inMode = GT_UNMODIFY_INGRESS;
	}

	/*
	 *	Enable CPU's Ingress Trailer
	*/
	if((status = gprtSetIngressMode(dev,dev->cpuPortNum, inMode)) != GT_OK)
	{
		MSG_PRINT(("gprtSetIngressMode return Failed\n"));
		return status;
	}

	/*
	 *	Enable CPU's Egress Trailer
	*/
	if((status = gprtSetTrailerMode(dev,dev->cpuPortNum, en)) != GT_OK)
	{
		MSG_PRINT(("gprtSetTrailerMode return Failed\n"));
		return status;
	}

	return GT_OK;
}
Beispiel #5
0
MAD_STATUS stopExLoopback(MAD_DEV *dev,MAD_LPORT port, MAD_SPEED_MODE mode)
{
    MAD_STATUS status;

    if (dev == 0)
    {
        MSG_PRINT("MAD driver is not initialized\n");
        return MAD_FAIL;
    }

    MSG_PRINT("Stopping External Loopback for port %i\n",(int)port);

    /*
     *	Stop External Loopback
    */
    if((status = mdDiagSetExternalLoopback(dev,port,MAD_FALSE,mode)) != MAD_OK)
    {
        MSG_PRINT("mdDiagSetExternalLoopback return Failed\n");
        testMADDisplayStatus(status);
        return status;
    }

    /*
     *	Reconfigure Copper Auto-Neg mode
    */
    if((status = mdCopperSetAutoNeg(dev,port,orgAutoNegState,orgMode)) != MAD_OK)
    {
        MSG_PRINT("mdCopperSetAutoNeg return Failed\n");
        testMADDisplayStatus(status);
        return status;
    }


    return MAD_OK;
}
Beispiel #6
0
/*
 * Start Packet Generator.
 * Input:
 *      pktload - enum GT_PG_PAYLOAD (GT_PG_PAYLOAD_RANDOM or GT_PG_PAYLOAD_5AA5)
 *      length  - enum GT_PG_LENGTH  (GT_PG_LENGTH_64 or GT_PG_LENGTH_1514)
 *      tx      - enum GT_PG_TX      (GT_PG_TX_NORMAL or GT_PG_TX_ERROR)
*/
GT_STATUS startPktGenerator
(
    GT_QD_DEV      *dev,
    GT_LPORT       port,
    GT_PG_PAYLOAD  payload,
    GT_PG_LENGTH   length,
    GT_PG_TX       tx
)
{
    GT_STATUS status;
    GT_PG     pktInfo;

    if (dev == 0)
    {
        MSG_PRINT(("GT driver is not initialized\n"));
        return GT_FAIL;
    }

    MSG_PRINT(("Start Packet Generator for port %i\n",(int)port));

    pktInfo.payload = payload; /* Pseudo-random, 5AA55AA5... */
    pktInfo.length = length;   /* 64 bytes, 1514 bytes */
    pktInfo.tx = tx;           /* normal packet, error packet */

    /*
     *	Start Packet Generator
    */
    if((status = gprtSetPktGenEnable(dev,port,GT_TRUE,&pktInfo)) != GT_OK)
    {
        MSG_PRINT(("mdDiagSetPktGenEnable return Failed\n"));
        return status;
    }

    return GT_OK;
}
Beispiel #7
0
GT_STATUS samplePIRL2CustomSetup(GT_QD_DEV *dev)
{
    GT_STATUS status;
    GT_PIRL2_DATA pirlData;
    GT_U32		irlRes;
    GT_LPORT 	port;

    port = 0;
    irlRes = 0;

    pirlData.customSetup.isValid = GT_TRUE;
    pirlData.customSetup.ebsLimit = 0xFFFFFF;
    pirlData.customSetup.cbsLimit = 0x200000;
    pirlData.customSetup.bktIncrement = 0x3D;
    pirlData.customSetup.bktRateFactor = 2;

    pirlData.accountQConf 		= GT_FALSE;
    pirlData.accountFiltered	= GT_TRUE;

    pirlData.mgmtNrlEn = GT_TRUE;
    pirlData.saNrlEn   = GT_TRUE;
    pirlData.daNrlEn   = GT_FALSE;
    pirlData.samplingMode = GT_FALSE;
    pirlData.actionMode = PIRL_ACTION_USE_LIMIT_ACTION;

    pirlData.ebsLimitAction		= ESB_LIMIT_ACTION_DROP;
    pirlData.bktRateType		= BUCKET_TYPE_TRAFFIC_BASED;
    pirlData.bktTypeMask		= BUCKET_TRAFFIC_BROADCAST |
                                  BUCKET_TRAFFIC_MULTICAST |
                                  BUCKET_TRAFFIC_UNICAST   |
                                  BUCKET_TRAFFIC_MGMT_FRAME|
                                  BUCKET_TRAFFIC_ARP;

    pirlData.priORpt = GT_TRUE;
    pirlData.priMask = 0;

    pirlData.byteTobeCounted	= GT_PIRL2_COUNT_ALL_LAYER3;

    status = gpirl2WriteResource(dev,port,irlRes,&pirlData);

    switch (status)
    {
    case GT_OK:
        MSG_PRINT(("PIRL2 writing completed.\n"));
        break;
    case GT_BAD_PARAM:
        MSG_PRINT(("Invalid parameters are given.\n"));
        break;
    case GT_NOT_SUPPORTED:
        MSG_PRINT(("Device is not supporting PIRL2.\n"));
        break;
    default:
        MSG_PRINT(("Failure to configure device.\n"));
        break;
    }

    return status;
}
Beispiel #8
0
/*****************************************************************************
* sampleAdmitOnlyTaggedFrame
*
* DESCRIPTION:
*        This routine will show how to configure a port to accept only vlan
*        tagged frames.
*        This routine assumes that 802.1Q has been enabled for the given port.
*
* INPUTS:
*       port - logical port to be configured.
*
* OUTPUTS:
*       None.
*
* RETURNS:
*       GT_OK               - on success
*       GT_FAIL             - on error
*
* COMMENTS: 
*        Some device support Discard Untagged feature. If so, gprtSetDiscardUntagged
*        function will do the work.
*
*******************************************************************************/
GT_STATUS sampleAdmitOnlyTaggedFrame(GT_QD_DEV *dev,GT_LPORT port)
{
    GT_STATUS status;
    GT_VTU_ENTRY vtuEntry;
    int i;

    /*
     *    0) If device support gprtSetDiscardUntagged, call the function.
    */
    status = gprtSetDiscardUntagged(dev, port, GT_TRUE);
    switch (status)
    {
        case GT_OK:
            MSG_PRINT(("Done.\n"));
            return status;
        case GT_NOT_SUPPORTED:
            MSG_PRINT(("Try other method.\n"));
            break;
        default:
            MSG_PRINT(("Failure accessing device.\n"));
            return status;
    }
            

    /*
     *    1) Add VLAN ID 0xFFF with the given port as a member.
    */
    gtMemSet(&vtuEntry,0,sizeof(GT_VTU_ENTRY));
    vtuEntry.DBNum = 0;
    vtuEntry.vid = 0xFFF;
    for(i=0; i<dev->numOfPorts; i++)
    {
        vtuEntry.vtuData.memberTagP[i] = NOT_A_MEMBER;
    }
    vtuEntry.vtuData.memberTagP[port] = MEMBER_EGRESS_TAGGED;

    if((status = gvtuAddEntry(dev,&vtuEntry)) != GT_OK)
    {
        MSG_PRINT(("gvtuAddEntry returned fail.\n"));
        return status;
    }

    /*
     *    2) Configure the default vid for the given port with VID 0xFFF
    */
    if((status = gvlnSetPortVid(dev,port,0xFFF)) != GT_OK)
    {
        MSG_PRINT(("gvlnSetPortVid returned fail.\n"));
        return status;
    }

    return GT_OK;

}
Beispiel #9
0
GT_STATUS sampleLoadBalance(GT_QD_DEV *dev)
{
    GT_STATUS status;
    int i;
    GT_U32 mask, baseMask;

    baseMask = (1 << dev->numOfPorts) - 1;
    baseMask &= 0xFFF0;    /* clear bits for port 0 ~ 3 */

    /*
     *    Set the trunk mask table for load balancing.
    */
    for(i=0; i<8; i++)
    {
        mask = baseMask | (1 << (i%4));

        if((status = gsysSetTrunkMaskTable(dev,i,mask)) != GT_OK)
        {
            MSG_PRINT(("gsysSetTrunkMaskTable return Failed\n"));
            return status;
        }
    }

    return GT_OK;
}
Beispiel #10
0
void testMADDisplayStatus(MAD_STATUS status)
{
	MSG_PRINT("\n");    
	displayStatus_drv_0(status);
	displayStatus_drv_1(status);
	displayStatus_api_0(status);
	displayStatus_api_1(status);
}
// ============================================================================
ssize_t PacketManager::sendto_Err(int s, void *buf, size_t len, int flags,
                                  const struct sockaddr *to, socklen_t tolen)
{
    int nResult = 0;

    if (buf == NULL)
    {
        ERR_PRINT("buf pointer == NULL\n");
        exit(1);
    }

    if (len == 0)
    {
        ERR_PRINT("len == 0: %u\n", len);
        exit(1);
    }

    if (to == NULL)
    {
        ERR_PRINT("sockaddr pointer == NULL\n");
        exit(1);
    }

    ++m_MsgNo;

    uint32_t seqNo = ntohl(*(uint32_t*)(buf));
    MSG_PRINT("MSG# %3u SEQ# %3u LEN %4u FLAGS 0x%08X\n", m_MsgNo, seqNo, len, flags);

    size_t lenTmp = len;
    unsigned char bufTmp[len];
    memcpy(bufTmp, buf, lenTmp);
    void* pBuf = bufTmp;

    nResult = processEvents((void**)&pBuf, &lenTmp, m_MsgNo);
    if (nResult < 0)
    {
        ERR_PRINT("prcoessEvents\n");
        return nResult;
    }
    else if ((nResult == 0) || (nResult == 1))
    {
        ssize_t lenSent = sendto(s, pBuf, lenTmp, flags, to, tolen);
        if (lenSent == (ssize_t)lenTmp)
        {
            return len;
        }
        else
        {
            return lenSent;
        }
    }
    else
    {
        return len;
    }

    return -1;
}
// ============================================================================
ssize_t PacketManager::recv_Mod(int s, void *buf, size_t len, int flags)
{
    ssize_t ret = ::recv(s, buf, len, flags);

    uint32_t seqNo = ntohl(*(uint32_t*)(buf));
    MSG_PRINT("         SEQ# %3u LEN %4u FLAGS 0x%08X\n", seqNo, ret, flags);

    return ret;
}
// ============================================================================
ssize_t PacketManager::recvfrom_Mod(int s, void *buf, size_t len, int flags,
                                    struct sockaddr *from, socklen_t *fromlen)
{
    ssize_t ret = ::recvfrom(s, buf, len, flags, from, fromlen);

    uint32_t seqNo = ntohl(*(uint32_t*)(buf));
    MSG_PRINT("         SEQ# %3u LEN %4u FLAGS 0x%08X\n", seqNo, ret, flags);

    return ret;
}
Beispiel #14
0
/*
 * This sample is for every device that support RMON counter.
*/
GT_STATUS sampleClearRMONCounter(GT_QD_DEV *dev,GT_LPORT port)
{
    GT_STATUS status;

    if((status = gstatsFlushPort(dev,port)) != GT_OK)
    {
        MSG_PRINT(("gstatsFlushPort returned fail (%#x).\n",status));
        return status;
    }

    return GT_OK;
}
// ============================================================================
ssize_t PacketManager::send_Err(int s, void *buf, size_t len, int flags)
{
    ssize_t nResult = 0;

    if (buf == NULL)
    {
        ERR_PRINT("buf pointer == NULL\n");
        exit(1);
    }

    if (len == 0)
    {
        ERR_PRINT("len == 0: %u\n", len);
        exit(1);
    }

    ++m_MsgNo;

    uint32_t seqNo = ntohl(*(uint32_t*)(buf));
    MSG_PRINT("MSG# %3u SEQ# %3u LEN %4u FLAGS 0x%08X\n", m_MsgNo, seqNo, len, flags);

    size_t lenTmp = len;
    unsigned char bufTmp[len];
    memcpy(bufTmp, buf, lenTmp);
    void* pBuf = bufTmp;

    nResult = processEvents((void**)&pBuf, &lenTmp, m_MsgNo);
    // Error Case
    if (nResult < 0)
    {
        // Do nothing. Will return nResult
    }
    // (Non-)changed Cases
    else if ((nResult == 0) || (nResult == 1))
    {
        ssize_t lenSent = send(s, bufTmp, lenTmp, flags);
        if (lenSent == (ssize_t)lenTmp)
        {
            nResult = len;
        }
        else
        {
            nResult = lenSent;
        }
    }
    // Drop Case
    else
    {
        nResult = len;
    }

    return nResult;
}
Beispiel #16
0
/*
 * This sample is for 88E6021, 88E6063, and 88E6083.
*/
GT_STATUS sampleGetRMONCounter(GT_QD_DEV *dev)
{
    GT_STATUS status;
    GT_LPORT port;
    GT_STATS_COUNTER_SET    statsCounterSet;

    for(port=0; port<dev->numOfPorts; port++)
    {
        MSG_PRINT(("Port %i :\n",port));

        if((status = gstatsGetPortAllCounters(dev,port,&statsCounterSet)) != GT_OK)
        {
            MSG_PRINT(("gstatsGetPortAllCounters returned fail (%#x).\n",status));
            return status;
        }

        sampleDisplayCounter(&statsCounterSet);

    }

    return GT_OK;
}
Beispiel #17
0
GT_STATUS sampleCableTest(GT_QD_DEV *dev,GT_LPORT port)
{
    GT_STATUS status;
    GT_CABLE_STATUS cableStatus;
    int i;
        
    /*
     *    Start and get Cable Test Result
    */

    if((status = gvctGetCableDiag(dev,port, &cableStatus)) != GT_OK)
    {
        MSG_PRINT(("gvctGetCableDiag return Failed\n"));
        return status;
    }

    MSG_PRINT(("Cable Test Result for Port %i\n",port));

    if(cableStatus.phyType == PHY_100M)
    {
        MSG_PRINT(("RX PAIR :\n"));
        sampleDisplayCableTestResult(&cableStatus.cableStatus[MDI_RX_PAIR],
                                    &cableStatus.cableLen[MDI_RX_PAIR]);
        MSG_PRINT(("TX PAIR :\n"));
        sampleDisplayCableTestResult(&cableStatus.cableStatus[MDI_TX_PAIR],
                                    &cableStatus.cableLen[MDI_TX_PAIR]);
    }
    else /* phyType must be PHY_1000M */
    {
        for(i=0; i<GT_MDI_PAIR_NUM; i++)
        {
            MSG_PRINT(("MDI PAIR %i:\n",i));
            sampleDisplayCableTestResult(&cableStatus.cableStatus[i],
                                    &cableStatus.cableLen[i]);
        }
    }

    return GT_OK;
}
Beispiel #18
0
/*
 * Start Packet Generator.
 * Input:
 *      pktload - enum MAD_PG_PAYLOAD (MAD_PG_PAYLOAD_RANDOM or MAD_PG_PAYLOAD_5AA5)
 *      length  - enum MAD_PG_LENGTH  (MAD_PG_LENGTH_64 or MAD_PG_LENGTH_1514)
 *      tx      - enum MAD_PG_TX      (MAD_PG_TX_NORMAL or MAD_PG_TX_ERROR)
 *      en_type - enum MAD_PG_EN_TYPE (MAD_PG_DISABLE or MAD_PG_EN_COPPER...)
*/
MAD_STATUS startPktGenerator
(
    MAD_DEV         *dev,
    MAD_LPORT       port,
    MAD_PG_PAYLOAD  payload,
    MAD_PG_LENGTH   length,
    MAD_PG_TX       tx,
    MAD_PG_EN_TYPE  en_type
)
{
    MAD_STATUS status;
    MAD_PG     pktInfo;

    if (dev == 0)
    {
        MSG_PRINT("MAD driver is not initialized\n");
        return MAD_FAIL;
    }

    MSG_PRINT("Start Packet Generator for port %i\n",(int)port);

    pktInfo.payload = payload; /* Pseudo-random, 5AA55AA5... */
    pktInfo.length = length;   /* 64 bytes, 1514 bytes */
    pktInfo.tx = tx;           /* normal packet, error packet */
    pktInfo.en_type = en_type; /* Enable_type */

    /*
     *    Start Packet Generator
    */
    if((status = mdDiagSetPktGenEnable(dev,port,1,&pktInfo)) != MAD_OK)
    {
        MSG_PRINT("mdDiagSetPktGenEnable return Failed\n");
        testMADDisplayStatus(status);
        return status;
    }

    return MAD_OK;
}
Beispiel #19
0
/*
 * Stop Packet Generator.
 */
GT_STATUS stopPktGenerator(GT_QD_DEV *dev,GT_LPORT port)
{
    GT_STATUS status;

    if (dev == 0)
    {
        MSG_PRINT(("GT driver is not initialized\n"));
        return GT_FAIL;
    }

    MSG_PRINT(("Stopping Packet Generator for port %i\n",(int)port));

    /*
     *	Start Packet Generator
    */
    if((status = gprtSetPktGenEnable(dev,port,GT_FALSE,NULL)) != GT_OK)
    {
        MSG_PRINT(("mdDiagSetPktGenEnable return Failed\n"));
        return status;
    }

    return GT_OK;
}
Beispiel #20
0
GT_STATUS sampleHeaderEnable(GT_QD_DEV *dev,GT_BOOL en)
{
    GT_STATUS status;

    /*
     *	Enable/Disable Header mode
    */
    if((status = gprtSetHeaderMode(dev,dev->cpuPortNum, en)) != GT_OK)
    {
        MSG_PRINT(("gprtSetHeaderMode return Failed\n"));
        return status;
    }

    return GT_OK;
}
Beispiel #21
0
/*
 *    To enable quarterDeck interrupt, you need to call eventSetActive() and
 *    gprtPhyIntEnable(), as following sample routine.
 *    sampleQDIntEnable will enable all interrupt causes.
 *    For Port, GT_ATU_FULL, GT_ATU_DONE, GT_PHY_INTERRUPT, and GT_EE_INTERRUPT
 *    are enabled.
 *
 *    In this sample, GT_SPEED_CHANGED, GT_DUPLEX_CHANGED, and
 *  GT_LINK_STATUS_CHANGED are enabled for ports 0 ~ 2.
*/
GT_STATUS sampleQDIntEnable(GT_QD_DEV *dev)
{
    GT_STATUS status;
    GT_LPORT port;
    GT_U16 data;

    /*
     *    Enable QuarterDeck interrupt for ATUFull, ATUDone, PHYInt, and EEInt.
     *    If writing 0 into eventSetActive(), all port interrupt will be disabled.
    */
    data = GT_STATS_DONE|GT_VTU_PROB|GT_VTU_DONE|
           GT_ATU_FULL|GT_ATU_DONE|GT_EE_INTERRUPT;
/*           GT_ATU_FULL|GT_ATU_DONE|GT_PHY_INTERRUPT|GT_EE_INTERRUPT; */
    if((status = eventSetActive(dev,data)) != GT_OK)
    {
        MSG_PRINT(("eventSetActive returned fail.\n"));
        return status;
    }

    /*
     *    Enable Phy interrupt for every possible interrupt cause.
     *    If writing 0 into gprtPhyIntEnable(), all port interrupt will be disabled.
    */
    data =     GT_SPEED_CHANGED|GT_DUPLEX_CHANGED|GT_LINK_STATUS_CHANGED;

    for(port=0; port<3; port++)
    {
        if((status = gprtPhyIntEnable(dev,port,data)) != GT_OK)
        {
            MSG_PRINT(("gprtPhyIntEnable returned fail.\n"));
            return status;
        }
    }

    return GT_OK;
}
Beispiel #22
0
/*
 * Stop Packet Generator.
 */
MAD_STATUS stopPktGenerator(MAD_DEV *dev,MAD_LPORT port)
{
    MAD_STATUS status;

    if (dev == 0)
    {
        MSG_PRINT("MAD driver is not initialized\n");
        return MAD_FAIL;
    }

    MSG_PRINT("Stopping Packet Generator for port %i\n",(int)port);

    /*
     *    Start Packet Generator
    */
    if((status = mdDiagSetPktGenEnable(dev,port,0,NULL)) != MAD_OK)
    {
        MSG_PRINT("mdDiagSetPktGenEnable return Failed\n");
        testMADDisplayStatus(status);
        return status;
    }

    return MAD_OK;
}
Beispiel #23
0
/*****************************************************************************
* sampleDisplayVIDTable
*
* DESCRIPTION:
*        This routine will show how to enumerate each vid entry in the VTU table
*
* INPUTS:
*       None.
*
* OUTPUTS:
*       None.
*
* RETURNS:
*       GT_OK               - on success
*       GT_FAIL             - on error
* COMMENTS: 
*
*******************************************************************************/
GT_STATUS sampleDisplayVIDTable(GT_QD_DEV *dev)
{
    GT_STATUS status;
        GT_VTU_ENTRY vtuEntry;
    GT_LPORT port;    
    int portIndex;

    gtMemSet(&vtuEntry,0,sizeof(GT_VTU_ENTRY));
    vtuEntry.vid = 0xfff;
    if((status = gvtuGetEntryFirst(dev,&vtuEntry)) != GT_OK)
    {
        MSG_PRINT(("gvtuGetEntryCount returned fail.\n"));
        return status;
    }

    MSG_PRINT(("DBNum:%i, VID:%i \n",vtuEntry.DBNum,vtuEntry.vid));

    for(portIndex=0; portIndex<dev->numOfPorts; portIndex++)
    {
        port = portIndex;

        MSG_PRINT(("Tag%i:%#x  ",port,vtuEntry.vtuData.memberTagP[port]));
    }
    
    MSG_PRINT(("\n"));

    while(1)
    {
        if((status = gvtuGetEntryNext(dev,&vtuEntry)) != GT_OK)
        {
            break;
        }

        MSG_PRINT(("DBNum:%i, VID:%i \n",vtuEntry.DBNum,vtuEntry.vid));

        for(portIndex=0; portIndex<dev->numOfPorts; portIndex++)
        {
            port = portIndex;

            MSG_PRINT(("Tag%i:%#x  ",port,vtuEntry.vtuData.memberTagP[port]));
        }
    
        MSG_PRINT(("\n"));

    }
    return GT_OK;
}
Beispiel #24
0
GT_STATUS samplePTPIntHandler(GT_QD_DEV *dev)
{
    GT_U32 int_ports, i, int_status;
    GT_STATUS status;
    GT_PTP_TS_STATUS    ptpStatus;

    /* disable AVB Interrupt */
    eventSetActive(dev, 0);

    /* read interrupt cause */
    if((status=eventGetIntStatus(dev,(GT_U16*)&int_status))!=GT_OK)
    {
        return GT_FAIL;
    }


    if ((int_status & GT_AVB_INT) == 0)
    {
        MSG_PRINT(("eventGetIntStatus return No AVB Interrupt\n"));
        /* it's not PTP interrupt */
        goto ret_int;
    }

    /* read AVB Int status */
    if((status = gptpGetPTPInt(dev, &int_ports)) != GT_OK)
    {
        MSG_PRINT(("gptpGetPTPInt return failed\n"));
        goto ret_int;
    }

    /* for each port, get the timestamp information if necessary */
    i = 0;
    while(int_ports)
    {
        if(!(int_ports & 0x1))
        {
            i++;
            int_ports >>= 1;
            continue;
        }

        /* check Arrival0 Time Stamp */
        if((status = gptpGetTimeStamped(dev, i, PTP_ARR0_TIME, &ptpStatus)) != GT_OK)
        {
            MSG_PRINT(("gptpGetTimeStamped return failed\n"));
            goto ret_int;
        }

        if (ptpStatus.isValid == GT_TRUE)
        {
            switch(ptpStatus.status)
            {
            case PTP_INT_NORMAL:
                /* To Do: No error condition occurred. So store the time stamp and seqId */
                break;

            case PTP_INT_OVERWRITE:
                /* To Do: PTP Logic received several PTP frames and only the last one is valid */
                break;

            case PTP_INT_DROP:
                /* To Do: PTP Logic received several PTP frames and only the first one is valid */
                break;

            default:
                MSG_PRINT(("unknown ptp status %i\n", ptpStatus.status));
                status = GT_FAIL;
                goto ret_int;

            }

            if((status = gptpResetTimeStamp(dev, i, PTP_ARR0_TIME)) != GT_OK)
            {
                MSG_PRINT(("gptpResetTimeStamp return failed\n"));
                goto ret_int;
            }
        }

        /* check Arrival1 Time Stamp */
        if((status = gptpGetTimeStamped(dev, i, PTP_ARR1_TIME, &ptpStatus)) != GT_OK)
        {
            MSG_PRINT(("gptpGetTimeStamped return failed\n"));
            goto ret_int;
        }

        if (ptpStatus.isValid == GT_TRUE)
        {
            switch(ptpStatus.status)
            {
            case PTP_INT_NORMAL:
                /* To Do: No error condition occurred. So store the time stamp and seqId */
                break;

            case PTP_INT_OVERWRITE:
                /* To Do: PTP Logic received several PTP frames and only the last one is valid */
                break;

            case PTP_INT_DROP:
                /* To Do: PTP Logic received several PTP frames and only the first one is valid */
                break;

            default:
                MSG_PRINT(("unknown ptp status %i\n", ptpStatus.status));
                status = GT_FAIL;
                goto ret_int;
            }

            if((status = gptpResetTimeStamp(dev, i, PTP_ARR1_TIME)) != GT_OK)
            {
                MSG_PRINT(("gptpResetTimeStamp return failed\n"));
                goto ret_int;
            }

        }

        /* check Departure Time Stamp */
        if((status = gptpGetTimeStamped(dev, i, PTP_DEP_TIME, &ptpStatus)) != GT_OK)
        {
            MSG_PRINT(("gptpGetTimeStamped return failed\n"));
            goto ret_int;
        }

        if (ptpStatus.isValid == GT_TRUE)
        {
            switch(ptpStatus.status)
            {
            case PTP_INT_NORMAL:
                /* To Do: No error condition occurred. So store the time stamp and seqId */
                break;

            case PTP_INT_OVERWRITE:
                /* To Do: PTP Logic received several PTP frames and only the last one is valid */
                break;

            case PTP_INT_DROP:
                /* To Do: PTP Logic received several PTP frames and only the first one is valid */
                break;

            default:
                MSG_PRINT(("unknown ptp status %i\n", ptpStatus.status));
                status = GT_FAIL;
                goto ret_int;
            }

            if((status = gptpResetTimeStamp(dev, i, PTP_DEP_TIME)) != GT_OK)
            {
                MSG_PRINT(("gptpResetTimeStamp return failed\n"));
                goto ret_int;
            }

        }

        int_ports >>= 1;

    }
Beispiel #25
0
GT_STATUS samplePTPInit(GT_QD_DEV *dev)
{
    GT_PTP_CONFIG ptpCfg;
    GT_LPORT port;
    GT_STATUS status;


    /*
     *    1) Setup each port to forward PTP frame to CPU port
    */

    /* setup EtypeType and Policy */
    for(port=0; port<dev->numOfPorts; port++)
    {
        if ((status = gprtSetPortEType(dev, port, (GT_ETYPE)0x88F7)) != GT_OK)
        {
            MSG_PRINT(("gprtSetPortEType returned not OK\n"));
            return status;
        }

        if (port == dev->cpuPortNum)
            continue;

        if ((status = gprtSetPolicy(dev, port, POLICY_TYPE_ETYPE, FRAME_POLICY_TRAP)) != GT_OK)
        {
            MSG_PRINT(("gprtSetPolicy returned not OK\n"));
            return status;
        }
    }

    /* setup Frame Mode for CPU port */
    if ((status = gprtSetFrameMode(dev, dev->cpuPortNum, GT_FRAME_MODE_ETHER_TYPE_DSA)) != GT_OK)
    {
        MSG_PRINT(("gprtSetFrameMode return failed\n"));
        return status;
    }

    /*
     *    2) Enable PTP Interrupt
    */
    eventSetActive(dev, GT_AVB_INT);


    /*
     *    3) Configure PTP
    */
    ptpCfg.ptpEType = 0x88F7;
    ptpCfg.msgIdTSEn = 0xd;        /* id 0, 2, and 3 */
    ptpCfg.tsArrPtr = 0x8;        /* id 0 and 2 for ARR0, id 3 for ARR1 */

    /* Transport specific bits present in PTP Common Header */
    ptpCfg.transSpec = 1;

    /* starting bit location for the Message ID field in the PTP Common Header */
    ptpCfg.msgIdStartBit = 4;

    ptpCfg.ptpArrIntEn = 0x3F;
    ptpCfg.ptpDepIntEn = 0x3F;
    ptpCfg.disTSOverwrite = 0;


    if ((status = gptpSetConfig(dev, &ptpCfg)) != GT_OK)
    {
        MSG_PRINT(("gptpSetConfig return failed\n"));
        return status;
    }
    if ((status = gptpSetPTPEn(dev, GT_TRUE)) != GT_OK)
    {
        MSG_PRINT(("gptpSetPTPEn return failed\n"));
        return status;
    }

    return GT_OK;
}
Beispiel #26
0
/*****************************************************************************
* sample802_1qSetup
*
* DESCRIPTION:
*        This routine will show how to configure the switch device so that it 
*        can be a Home Gateway. This example assumes that all the frames are not 
*        VLAN-Tagged.
*        1) to clear VLAN ID Table,
*         2) to enable 802.1Q in SECURE mode for each port except CPU port,
*        3) to enable 802.1Q in FALL BACK mode for the CPU port. 
*        4) to add VLAN ID 1 with member port 0 and CPU port 
*        (untagged egress),
*        5) to add VLAN ID 2 with member the rest of the ports and CPU port 
*        (untagged egress), 
*        6) to configure the default vid of each port:
*        Port 0 have PVID 1, CPU port has PVID 3, and the rest ports have PVID 2.
*        Note: CPU port's PVID should be unknown VID, so that QuarterDeck can use 
*        VlanTable (header info) for TX.
*
*
* INPUTS:
*       None.
*
* OUTPUTS:
*       None.
*
* RETURNS:
*       GT_OK               - on success
*       GT_FAIL             - on error
*
* COMMENTS: 
*        WARNING!!
*        If you create just two VLAN for this setup, Trailer mode or Header mode 
*        for the CPU port has to be enabled and Ethernet driver which connects to
*        CPU port should understand VLAN-TAGGING, Trailer mode, or Header mode.
*
*******************************************************************************/
GT_STATUS sample802_1qSetup(GT_QD_DEV *dev)
{
    GT_STATUS status;
    GT_DOT1Q_MODE mode;
        GT_VTU_ENTRY vtuEntry;
    GT_U16 vid;
    GT_LPORT port;
    int i;

    /*
     *    1) Clear VLAN ID Table
    */
    if((status = gvtuFlush(dev)) != GT_OK)
    {
        MSG_PRINT(("gvtuFlush returned fail.\n"));
        return status;
    }

    /*
     *    2) Enable 802.1Q for each port as GT_SECURE mode except CPU port.
    */
    mode = GT_SECURE;
    for(i=0; i<dev->numOfPorts; i++)
    {
        port = i;
        if (port == dev->cpuPortNum)
            continue;

        if((status = gvlnSetPortVlanDot1qMode(dev,port, mode)) != GT_OK)
        {
            MSG_PRINT(("gvlnSetPortVlanDot1qMode return Failed\n"));
            return status;
        }
    }

    /*
     *    3) Enable 802.1Q for CPU port as GT_FALLBACK mode
    */
    if((status = gvlnSetPortVlanDot1qMode(dev, dev->cpuPortNum, GT_FALLBACK)) != GT_OK)
    {
        MSG_PRINT(("gvlnSetPortVlanDot1qMode return Failed\n"));
        return status;
    }

    /*
     *    4) Add VLAN ID 1 with Port 0 and CPU Port as members of the Vlan.
    */
    gtMemSet(&vtuEntry,0,sizeof(GT_VTU_ENTRY));
    vtuEntry.DBNum = 0;
    vtuEntry.vid = 1;
    for(i=0; i<dev->numOfPorts; i++)
    {
        port = i;
        if((i==0) || (port == dev->cpuPortNum))
            vtuEntry.vtuData.memberTagP[port] = MEMBER_EGRESS_UNTAGGED;
        else
            vtuEntry.vtuData.memberTagP[port] = NOT_A_MEMBER;
    }

    if((status = gvtuAddEntry(dev,&vtuEntry)) != GT_OK)
    {
        MSG_PRINT(("gvtuAddEntry returned fail.\n"));
        return status;
    }

    /*
     *    5) Add VLAN ID 2 with the rest of the Ports and CPU Port as members of 
     *    the Vlan.
    */
    gtMemSet(&vtuEntry,0,sizeof(GT_VTU_ENTRY));
    vtuEntry.DBNum = 0;
    vtuEntry.vid = 2;
    for(i=0; i<dev->numOfPorts; i++)
    {
        port = i;
        if(i == 0)
            vtuEntry.vtuData.memberTagP[port] = NOT_A_MEMBER;
        else
            vtuEntry.vtuData.memberTagP[port] = MEMBER_EGRESS_UNTAGGED;
    }

    if((status = gvtuAddEntry(dev,&vtuEntry)) != GT_OK)
    {
        MSG_PRINT(("gvtuAddEntry returned fail.\n"));
        return status;
    }


    /*
     *    6) Configure the default vid for each port.
     *    Port 0 has PVID 1, CPU port has PVID 3, and the rest ports have PVID 2.
    */
    for(i=0; i<dev->numOfPorts; i++)
    {
        port = i;
        if(i==0)
            vid = 1;
        else if(port == dev->cpuPortNum)
            vid = 3;
        else
            vid = 2;

        if((status = gvlnSetPortVid(dev,port,vid)) != GT_OK)
        {
            MSG_PRINT(("gvlnSetPortVid returned fail.\n"));
            return status;
        }
    }

    return GT_OK;

}
Beispiel #27
0
GT_STATUS sampleCrossChipTrunk(GT_QD_DEV *dev[], TRUNK_MEMBER* tm)
{
	GT_STATUS status;
	int i,j,index;
	GT_U32 mask, trunkId;
	TRUNK_SET* ts;
	GT_U32 portVec[N_OF_QD_DEVICES];	
	GT_U32 casecadeVec = 0xC0;	/* Port 6 and 7. ToDo : get this value from user or device */

	/*
	 *	Enable Trunk for each member of the Trunk and set the Trunk ID (1).
	*/ 

	printf("Setting TRUNK\n");
	printf("Trunk ID : %i\n",(unsigned int)tm->trunkId);
	printf("N Ports  : %i\n",(unsigned int)tm->nTrunkPort);
	printf("1st Port  : Dev %i, Port %i\n",
			(unsigned int)tm->trunkSet[0].devIndex,(unsigned int)tm->trunkSet[0].port);
	printf("2nd Port  : Dev %i, Port %i\n",
			(unsigned int)tm->trunkSet[1].devIndex,(unsigned int)tm->trunkSet[1].port);
	printf("3rd Port  : Dev %i, Port %i\n",
			(unsigned int)tm->trunkSet[2].devIndex,(unsigned int)tm->trunkSet[2].port);
	printf("4th Port  : Dev %i, Port %i\n",
			(unsigned int)tm->trunkSet[3].devIndex,(unsigned int)tm->trunkSet[3].port);

	trunkId = tm->trunkId;

	for(i=0; i<N_OF_QD_DEVICES; i++)
		portVec[i] = 0;

	printf("Enabling TRUNK for each member port.\n");
	for(i=0; i<tm->nTrunkPort; i++)
	{
		ts = &tm->trunkSet[i];

		if(ts->devIndex >= N_OF_QD_DEVICES)
		{
			printf("Device %i is supported. Max Device Number is %i\n",(unsigned int)ts->devIndex,N_OF_QD_DEVICES-1);
			return GT_FAIL;
		}

		if((dev[ts->devIndex] == NULL) || (!dev[ts->devIndex]->devEnabled))
		{
			printf("Device %i is not initialized\n",(unsigned int)ts->devIndex);
			return GT_FAIL;
		}

		/* enabled trunk on the given port */
		if((status = gprtSetTrunkPort(dev[ts->devIndex],ts->port,GT_TRUE,trunkId)) != GT_OK)
		{
			MSG_PRINT(("gprtSetTrunkPort return Failed\n"));
			return status;
		}

		portVec[ts->devIndex] |= (1 << ts->port);
	}

	/*
	 *	Set Trunk Route Table for the given Trunk ID.
	*/ 
	printf("Setting TRUNK Routing Table\n");
	for(i=0; i<N_OF_QD_DEVICES; i++)
	{
		if((dev[i] == NULL) || (!dev[i]->devEnabled))
		{
			printf("Device %i is not initialized\n",i);
			break;
		}

		if((status = gsysSetTrunkRouting(dev[i],trunkId,portVec[i]|casecadeVec)) != GT_OK)
		{
			MSG_PRINT(("gsysSetTrunkRouting return Failed\n"));
			return status;
		}
	}

	/*
	 *	Set Trunk Mask Table for load balancing.
	*/ 
	printf("Setting TRUNK Mask for Load Balancing\n");
	for(i=0; i<8; i++)
	{
		/* choose a port to be used for the given addr combo index */
		index = i % tm->nTrunkPort;
		ts = &tm->trunkSet[index];
		
		for(j=0; j<N_OF_QD_DEVICES; j++)
		{
			if((dev[j] == NULL) || (!dev[j]->devEnabled))
			{
				printf("Device %i is not initialized\n",j);
				continue;
			}

			if(portVec[j] == 0)
				continue;

			if((status = gsysGetTrunkMaskTable(dev[j],i,&mask)) != GT_OK)
			{
				MSG_PRINT(("gsysGetTrunkMaskTable return Failed\n"));
				return status;
			}

			mask &= ~portVec[j];

			if(ts->devIndex == j)
				mask |= (1 << ts->port);
			
			if((status = gsysSetTrunkMaskTable(dev[j],i,mask)) != GT_OK)
			{
				MSG_PRINT(("gsysSetTrunkMaskTable return Failed\n"));
				return status;
			}
		}
	}
	
	return GT_OK;
}
Beispiel #28
0
GT_STATUS sampleFixedCrossChipTrunk(GT_QD_DEV *dev[])
{
	GT_STATUS status;
	int i;
	GT_U32 mask, trunkBit, trunkId;

	/*
	 *	Enable Trunk for each member of the Trunk and set the Trunk ID (1).
	*/ 

	trunkId = 1;

	if((dev[0] == NULL) || (!dev[0]->devEnabled))
	{
		printf("Device 0 is not initialized\n");
		return GT_FAIL;
	}
	if((dev[1] == NULL) || (!dev[1]->devEnabled))
	{
		printf("Device 1 is not initialized\n");
		return GT_FAIL;
	}

	/* setup for Device 0 port 0 */
	if((status = gprtSetTrunkPort(dev[0],0,GT_TRUE,trunkId)) != GT_OK)
	{
		MSG_PRINT(("gprtSetTrunkPort return Failed\n"));
		return status;
	}

	/* setup for Device 0 port 1 */
	if((status = gprtSetTrunkPort(dev[0],1,GT_TRUE,trunkId)) != GT_OK)
	{
		MSG_PRINT(("gprtSetTrunkPort return Failed\n"));
		return status;
	}

	/* setup for Device 0 port 2 */
	if((status = gprtSetTrunkPort(dev[0],2,GT_TRUE,trunkId)) != GT_OK)
	{
		MSG_PRINT(("gprtSetTrunkPort return Failed\n"));
		return status;
	}

	/* setup for Device 1 port 0 */
	if((status = gprtSetTrunkPort(dev[1],0,GT_TRUE,trunkId)) != GT_OK)
	{
		MSG_PRINT(("gprtSetTrunkPort return Failed\n"));
		return status;
	}


	/*
	 *	Set Trunk Route Table for the given Trunk ID.
	*/ 

	/* setup for Device 0, trunk ID 1 : port 0,1,2, and 9 (cascading port, assumption1) */
	if((status = gsysSetTrunkRouting(dev[0],trunkId,0x7|0x200)) != GT_OK)
	{
		MSG_PRINT(("gsysSetTrunkRouting return Failed\n"));
		return status;
	}

	/* setup for Device 1, trunk ID 1 : port 0, and 8 (cascading port, assumption1) */
	if((status = gsysSetTrunkRouting(dev[1],trunkId,0x1|0x100)) != GT_OK)
	{
		MSG_PRINT(("gsysSetTrunkRouting return Failed\n"));
		return status;
	}


	/*
	 *	Set Trunk Mask Table for load balancing.
	*/ 

	/*
	   Trunk Mask Table for Device 0:
 
						10	9	8	7	6	5	4	3	2	1	0
	   TrunkMask[0]		1	1	1	1	1	1	1	1	0	0	1
	   TrunkMask[1]		1	1	1	1	1	1	1	1	0	1	0
	   TrunkMask[2]		1	1	1	1	1	1	1	1	1	0	0
	   TrunkMask[3]		1	1	1	1	1	1	1	1	0	0	0
	   TrunkMask[4]		1	1	1	1	1	1	1	1	0	0	1
	   TrunkMask[5]		1	1	1	1	1	1	1	1	0	1	0
	   TrunkMask[6]		1	1	1	1	1	1	1	1	1	0	0
	   TrunkMask[7]		1	1	1	1	1	1	1	1	0	0	0


	   Trunk Mask Table for Device 1:
 
						10	9	8	7	6	5	4	3	2	1	0
	   TrunkMask[0]		1	1	1	1	1	1	1	1	1	1	0
	   TrunkMask[1]		1	1	1	1	1	1	1	1	1	1	0
	   TrunkMask[2]		1	1	1	1	1	1	1	1	1	1	0
	   TrunkMask[3]		1	1	1	1	1	1	1	1	1	1	1
	   TrunkMask[4]		1	1	1	1	1	1	1	1	1	1	0
	   TrunkMask[5]		1	1	1	1	1	1	1	1	1	1	0
	   TrunkMask[6]		1	1	1	1	1	1	1	1	1	1	0
	   TrunkMask[7]		1	1	1	1	1	1	1	1	1	1	1

	*/

	/* setup for Device 0 */
	for(i=0; i<8; i++)
	{
		if((i%4) == 3)
		{
			trunkBit = 0;
		}
		else
		{
			trunkBit = 1 << (i%4);
		}		

		mask = 0x7F8 | trunkBit;
	
		if((status = gsysSetTrunkMaskTable(dev[0],i,mask)) != GT_OK)
		{
			MSG_PRINT(("gsysSetTrunkMaskTable return Failed\n"));
			return status;
		}

	}
	
	/* setup for Device 1 */
	for(i=0; i<8; i++)
	{
		if((i%4) == 3)
		{
			trunkBit = 1;
		}
		else
		{
			trunkBit = 0;
		}		

		mask = 0x7FE | trunkBit;
	
		if((status = gsysSetTrunkMaskTable(dev[1],i,mask)) != GT_OK)
		{
			MSG_PRINT(("gsysSetTrunkMaskTable return Failed\n"));
			return status;
		}

	}
	return GT_OK;
}
Beispiel #29
0
GT_STATUS sampleIsolatedCPUPort(GT_QD_DEV *dev, GT_U8* macAddr)
{
	GT_STATUS status;
	int i;
	GT_LPORT memPorts[16], cpuPort;
	GT_U8 memPortsLen, index;
    GT_ATU_ENTRY macEntry;

	cpuPort = (GT_LPORT)dev->cpuPortNum;

	/*
	 *	Remove CPU port from VLAN Member Table.
	*/ 
	for(i=0; i<dev->numOfPorts; i++)
	{
		if((status = gvlnGetPortVlanPorts(dev,(GT_LPORT)i,memPorts,&memPortsLen)) != GT_OK)
		{
			MSG_PRINT(("gvlnGetPortVlanPorts return Failed\n"));
			return status;
		}

		for(index=0; index<memPortsLen; index++)
		{
			if (memPorts[index] == cpuPort)
				break;
		}

		if(index != memPortsLen)
		{
			/* CPU Port is the member of the port vlan */
			if((memPortsLen-1) != index)
			{
				memPorts[index] = memPorts[memPortsLen-1];
			}
			memPortsLen--;

			if((status = gvlnSetPortVlanPorts(dev,(GT_LPORT)i,memPorts,memPortsLen)) != GT_OK)
			{
				MSG_PRINT(("gvlnSetPortVlanPorts return Failed\n"));
				return status;
			}
		}
	}

	/*
	 *	Mirror ARPs to the CPU with To_CPU Marvell Tag.
	*/
	if((status = gsysSetARPDest(dev,cpuPort)) != GT_OK)
	{
		MSG_PRINT(("gsysSetARPDest return Failed\n"));
		return status;
	}

	/*
	 *	Convert unicast frames directed to the CPU into To_CPU Marvell Tag.
	 *  This sample assumes that DBNum is not used. If DBNum is used,
	 *  the macEntry has to be added for each DBNum used.
	*/
	memset(&macEntry,0,sizeof(GT_ATU_ENTRY));
	memcpy(macEntry.macAddr.arEther,macAddr,6);
	macEntry.portVec = 1 << dev->cpuPortNum;
	macEntry.prio = 0;			/* Priority (2bits). When these bits are used they override
								any other priority determined by the frame's data */
	macEntry.entryState.ucEntryState = GT_UC_TO_CPU_STATIC;
	macEntry.DBNum = 0;
	macEntry.trunkMember = GT_FALSE;

	if((status = gfdbAddMacEntry(dev,&macEntry)) != GT_OK)
	{
		MSG_PRINT(("gsysSetARPDest return Failed\n"));
		return status;
	}

	
	return GT_OK;
}
Beispiel #30
0
void sampleDisplayCableTestResult
(
	GT_TEST_STATUS *cableStatus,
	GT_CABLE_LEN *cableLen
)
{
	switch(*cableStatus)
	{
		case GT_TEST_FAIL:
			MSG_PRINT(("Cable Test Failed\n"));
			break;
		case GT_NORMAL_CABLE:
			MSG_PRINT(("Cable Test Passed. No problem found.\n"));
			switch(cableLen->normCableLen)
			{
				case GT_LESS_THAN_50M:
					MSG_PRINT(("Cable Length is less than 50M.\n"));
					break;
				case GT_50M_80M:
					MSG_PRINT(("Cable Length is between 50M and 80M.\n"));
					break;
				case GT_80M_110M:
					MSG_PRINT(("Cable Length is between 80M and 110M.\n"));
					break;
				case GT_110M_140M:
					MSG_PRINT(("Cable Length is between 110M and 140M.\n"));
					break;
				case GT_MORE_THAN_140:
					MSG_PRINT(("Cable Length is over 140M.\n"));
					break;
				default:
					MSG_PRINT(("Cable Length is unknown.\n"));
					break;
			}
			break;
		case GT_IMPEDANCE_MISMATCH:
			MSG_PRINT(("Cable Test Passed. Cable has Impedance Mismatch .\n"));
			MSG_PRINT(("Approximatly %i meters from the tested port.\n",cableLen->errCableLen));
			break;
		case GT_OPEN_CABLE:
			MSG_PRINT(("Cable Test Passed. Cable is open.\n"));
			MSG_PRINT(("Approximatly %i meters from the tested port.\n",cableLen->errCableLen));
			break;
		case GT_SHORT_CABLE:
			MSG_PRINT(("Cable Test Passed. Cable is short.\n"));
			MSG_PRINT(("Approximatly %i meters from the tested port.\n",cableLen->errCableLen));
			break;
		default:
			MSG_PRINT(("Unknown Test Result.\n"));
			break;
	}
}