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