Exemplo n.º 1
0
STATUS sysNetMacAddrSet
    (
    char *	ifName,
    int		ifUnit,
    UINT8 *	ifMacAddr,
    int		ifMacAddrLen
    )
    {
    int   offset;
    char *pEnet;

    /* fetch address line & offset from glbEnetAddr[] table */

    if (sysMacOffsetGet(ifName, ifUnit, &pEnet, &offset) != OK)
        return(ERROR);

#if (NV_RAM_SIZE != NONE)
    /* check MAC address in NvRAM. */
    sysNvRamGet (pEnet, ifMacAddrLen, NV_MAC_ADRS_OFFSET+offset);
    if (0 == memcmp (ifMacAddr, pEnet, ifMacAddrLen))
	{ 
	/* same address so don't erase and rewrite flash */
	printf("Address unchanged\n");
	return (OK);
	}

    sysNvRamSet (ifMacAddr, ifMacAddrLen, NV_MAC_ADRS_OFFSET+offset);
#endif /* (NV_RAM_SIZE != NONE) */

    /* mac address in memory only */
    memcpy (ifMacAddr, pEnet, ifMacAddrLen);

    return (OK);
    }
Exemplo n.º 2
0
STATUS sysNetMacNVRamAddrGet
    (
    char *	ifName,
    int		ifUnit,
    UINT8 *	ifMacAddr,
    int		ifMacAddrLen
    )
    {
    int   offset;
    char *pEnet;

    /* fetch address line & offset from glbEnetAddr[] table */

    if (sysMacOffsetGet(ifName, ifUnit, &pEnet, &offset) != OK)
        return(ERROR);

#if (NV_RAM_SIZE != NONE)
    /* get MAC address from NvRAM. */
    sysNvRamGet (pEnet, ifMacAddrLen, NV_MAC_ADRS_OFFSET+offset);
#endif /* (NV_RAM_SIZE != NONE) */

    if ( memcmp(pEnet, sysInvalidAddr[0], MAC_ADRS_LEN) == 0 )
        return(ERROR);
    if ( memcmp(pEnet, sysInvalidAddr[1], MAC_ADRS_LEN) == 0 )
        return(ERROR);

    /* mac address in memory only */
    memcpy (ifMacAddr, pEnet, ifMacAddrLen);

    return (OK);
    }
Exemplo n.º 3
0
IX_STATUS 
ixEthAccCodeletPortConfigure(IxEthAccPortId portId,
	     IxEthAccPortRxCallback portRxCB,
	     IxEthAccPortMultiBufferRxCallback portMultiBufferRxCB,
	     IxEthAccPortTxDoneCallback portTxDoneCB,
	     UINT32 callbackTag)
{
    IxEthAccMacAddr npeMacAddr1 = IX_ETHACC_CODELET_NPEB_MAC;
    IxEthAccMacAddr npeMacAddr2 = IX_ETHACC_CODELET_NPEC_MAC;
    IxEthAccMacAddr npeMacAddr3 = IX_ETHACC_CODELET_NPEA_MAC;
    IxEthAccMacAddr npeMacAddr;
			     
    /* Clear stats */
    ixOsalMemSet(&ixEthAccCodeletStats[portId], 
	   0, 
	   sizeof(ixEthAccCodeletStats[portId]));

    /* check the PHY is up, ignore the result. This is called to 
     * display the current PHY status to the console
     */
    (void)ixEthAccCodeletLinkUpCheck(portId);
    
    /* register the datapath Rx callbacks */
    if (NULL != portRxCB)
    {
	if(ixEthAccPortRxCallbackRegister(portId,
					  portRxCB,
					  callbackTag) 
	   != IX_ETH_ACC_SUCCESS)
	{
	    printf("PortSetup: Failed to register Rx callback for port %u\n",
		   (UINT32)portId);
	    return (IX_FAIL);
	}
    }
    else if (NULL != portMultiBufferRxCB)
    {
	if(ixEthAccPortMultiBufferRxCallbackRegister(portId,
						     portMultiBufferRxCB,
						     callbackTag) 
	   != IX_ETH_ACC_SUCCESS)
	{
	    printf("PortSetup: Failed to register multiBuffer Rx callback for port %u\n",
		   (UINT32)portId);
	    return (IX_FAIL);
	}
    }
    else
    {
	printf("PortSetup: Failed to register any Rx callback for port %u\n",
	       (UINT32)portId);
	return (IX_FAIL);
    }

    /* register the datapath TxDone callbacks */
    if(ixEthAccPortTxDoneCallbackRegister(portId,
					  portTxDoneCB,
					  callbackTag) != IX_ETH_ACC_SUCCESS)
    {
	printf("PortSetup: Failed to register Tx done callback for port %u\n",
	       (UINT32)portId);
	return (IX_FAIL);
    }

#if defined (__vxworks) && defined (IX_ETHACC_CODELET_USE_NVRAM_MAC)
    printf("\nReading MAC address information from non-volatile storage...\n");

    if (portId == IX_ETH_PORT_1)
    {
	if(sysNvRamGet((UINT8 *)&npeMacAddr.macAddress, 
		       IX_IEEE803_MAC_ADDRESS_SIZE, 
		       NV_MAC_ADRS_NPE1) == ERROR)
	{
	    printf("PortSetup: Unable to read MAC address from non-volatile storage!\n");
	    return (IX_FAIL);
	}
    }
    else if (portId == IX_ETH_PORT_2)
    {
	if(sysNvRamGet((UINT8 *)&npeMacAddr.macAddress, 
		       IX_IEEE803_MAC_ADDRESS_SIZE, 
		       NV_MAC_ADRS_NPE2) == ERROR)
	{
	    printf("PortSetup: Unable to read MAC address from non-volatile storage!\n");
	    return (IX_FAIL);
	}
    }
    else
    {
	printf("PortSetup: Unsupported port!\n");
	return (IX_FAIL);
    }
#else
    if (portId == IX_ETH_PORT_1)
    {
	ixOsalMemCopy(npeMacAddr.macAddress, 
	       npeMacAddr1.macAddress, 
	       IX_IEEE803_MAC_ADDRESS_SIZE);
    }
    else if (portId == IX_ETH_PORT_2)
    {
	ixOsalMemCopy(npeMacAddr.macAddress, 
	       npeMacAddr2.macAddress, 
	       IX_IEEE803_MAC_ADDRESS_SIZE);
    }
    else if (portId == IX_ETH_PORT_3)
    {
	ixOsalMemCopy(npeMacAddr.macAddress, 
	       npeMacAddr3.macAddress, 
	       IX_IEEE803_MAC_ADDRESS_SIZE);
    }
    else
    {
	printf("PortSetup: Unsupported port!\n");
	return (IX_FAIL);
    }
#endif
    
    printf ("Configure MAC address...\n");
    if(ixEthAccPortUnicastMacAddressSet(portId, &npeMacAddr)
	   != IX_ETH_ACC_SUCCESS)
    {
	printf("PortSetup: Failed to set the Unicast MAC Address of port %u\n",
	       portId);
	return (IX_FAIL);
    }
    
    printf("Port %u MAC address is:\t\n", (UINT32)portId);
    ixEthAccPortUnicastAddressShow(portId);
    
    printf ("Provision the first RX buffers...\n");
    if(ixEthAccCodeletReplenishBuffers(portId, 
				       IX_ETHACC_CODELET_RX_MBUF_POOL_SIZE/IX_ETHACC_CODELET_MAX_PORT) 
       != IX_SUCCESS)
    {
	printf("PortSetup: Error replenishing port %u\n",
	       (UINT32)portId);
	return (IX_FAIL);
    }

    return IX_SUCCESS;
}