ETHFW API Guide Documentation


Ethernet Firmware is a RTOS based server-client application which runs on Cortex R5F 0 core 0 in main domain of J721E, J7200 and J784S4 SoCs. ETHFW enables multiple client drivers to run independently on the remaining cores in the system. So the multiport CPSW switch present in the Jacinto family devices will be shared among all the participating cores within the SoC. ETHFW owns the CPSW switch and provides remote configuration infrastructure for other processing cores running different operating systems.

Ethernet Remote Configuration

Ethernet Firmware is in charge of performing any CPSW switch configuration required by remote cores on their behalf, which it does through its ethremotecfg framework. This framework is based on IPC low-level driver and is located at ethfw/ethremotecfg/ folder. Each and every core participating in the inter core communication creates a local endpoint(s) which are unique per core and will be used a landmarks while sending/receiving messages across cores. These endpoints can be hard-coded or assigned dynamically based on the user requirement.


Message types and endpoints supported by ETHFW are mentioned below:

Endpoint Type Endpoint Service Endpoint Owner Core Description
Dynamic Publishes "ti.ethfw.ethdevice" and subscribes "ti.autosar.ethdevice" ETHFW Main R5F 0 core 0 (mcu2_0) Handles the configurations for the remote clients
Dynamic Publishes "ti.ethfw.notifyservice" ETHFW Main R5F 0 core 1 (mcu2_0) Sends CPTS HW push events for multi-core Timesync
Dynamic Subscribes "ti.ethfw.ethdevice" Linux client A72 (mpu1_0) Requests the remote configurations to server
Dynamic Subscribes "ti.ethfw.ethdevice" QNX io-pkt client A72 (mpu1_0) Requests the remote configurations to server
Static (30U) Subscribes "ti.ethfw.notifyservice" QNX io-pkt client A72 (mpu1_0) Receives HW push events for QNX client(s)
Dynamic Subscribes "ti.ethfw.ethdevice" RTOS client Main R5F 0 core 1 (mcu2_1) Requests the remote configurations to server
Static (30U) Subscribes "ti.ethfw.notifyservice" RTOS client Main R5F 0 core 1 (mcu2_1) Receives HW push events for RTOS client(s)
Static (28U) Publishes "ti.autosar.ethdevice" AUTOSAR client Main R5F 0 core 1 (mcu2_1) Used to bind AUTOSAR with ETHFW
Static (38U) Publishes "ti.autosar.ethdevice" AUTOSAR client MCU R5F 0 core 0 (mcu1_0) Used to bind AUTOSAR with ETHFW

This table lists all client types supported by Ethernet Firmware, but no assumptions should be made for this table alone regarding remote client concurrency.


Notification are messages sent by Ethernet Firmware to all clients, they are exclusively server-to-client direction.

Notifications Params Switch Port Support MAC Port Support Description
FWINFO EthRemoteCfg_DeviceData Y Y ETHFW version info notify
HWPUSH EthRemoteCfg_NotifyServiceHwPushMsg Y Y Send CPSW HW push events
HWERROR EthRemoteCfg_CommonNotify Y Y Hardware error notify
HWRECOVERY_COMPLETE EthRemoteCfg_CommonNotify Y Y Hardware recovery completion notify


Commands are messages sent by remote clients to Ethernet Firmware for it to taken action on their behalf. All commands are composed of a request (client-to-server direction) and a response (server-to-client direction).

Commands Request Params Response Params Switch Port
MAC Port
VIRT_PORT_INFO EthRemoteCfg_CommonReq EthRemoteCfg_OfferVirtPortRes NA NA Allocates virtual ports
ATTACH EthRemoteCfg_AttachReq EthRemoteCfg_AttachRes Y Y Attachs client to ETHFW
ATTACH_EXT EthRemoteCfg_AttachReq EthRemoteCfg_AttachExtRes Y Y Attachs and returns extended attach info
DETACH EthRemoteCfg_CommonReq EthRemoteCfg_StatusRes Y Y Detaches the client
PORT_LINK_STATUS EthRemoteCfg_CommonReq EthRemoteCfg_PortLinkStatusRes Y Y Queries link status of the port
ALLOC_TX EthRemoteCfg_AllocTxReq EthRemoteCfg_AllocTxRes Y Y Allocates Tx channel
ALLOC_RX EthRemoteCfg_AllocRxReq EthRemoteCfg_AllocRxRes Y Y Allocates Rx flow
ALLOC_MAC EthRemoteCfg_CommonReq EthRemoteCfg_AllocMacRes Y Y Allocates MAC Address
FREE_TX EthRemoteCfg_FreeTxReq EthRemoteCfg_StatusRes Y Y Frees the allocated Tx channel
FREE_RX EthRemoteCfg_FreeRxReq EthRemoteCfg_StatusRes Y Y Frees the allocated Rx channel
FREE_MAC EthRemoteCfg_FreeMacReq EthRemoteCfg_StatusRes Y Y Frees the allocated MAC Address
REGISTER_MAC EthRemoteCfg_MacAddrRxFlowReq EthRemoteCfg_StatusRes Y Y Registers macAddr with the Rx flow ID
DEREGISTER_MAC EthRemoteCfg_MacAddrRxFlowReq EthRemoteCfg_StatusRes Y Y Unregisters macAddr with the Rx flow ID
SET_RX_DEFAULTFLOW EthRemoteCfg_RxDefaultFlowRegisterReq EthRemoteCfg_StatusRes Y N Registers default flow routing to client
DEL_RX_DEFAULTFLOW EthRemoteCfg_RxDefaultFlowRegisterReq EthRemoteCfg_StatusRes Y N Unregisters default flow
REGISTER_IPv4 EthRemoteCfg_IPv4AddrRegisterReq EthRemoteCfg_StatusRes Y N Associates IP addr with MAC addr
DEREGISTER_IPv4 EthRemoteCfg_IPv4AddrDeregisterReq EthRemoteCfg_StatusRes Y N Deletes the IP addr:MAC addr mapping
JOIN_VLAN EthRemoteCfg_VlanJoinReq EthRemoteCfg_StatusRes Y Y Joins a VLAN
LEAVE_VLAN EthRemoteCfg_VlanLeaveReq EthRemoteCfg_StatusRes Y Y Leaves a VLAN
ADD_FILTER_MAC EthRemoteCfg_FilterMacAddReq EthRemoteCfg_StatusRes Y N Adds multicast macAddr to Rx filter
DEL_FILTER_MAC EthRemoteCfg_FilterMacDelReq EthRemoteCfg_StatusRes Y N Deletes multicast macAddr from Rx filter
ENABLE_PROMISC EthRemoteCfg_CommonReq EthRemoteCfg_StatusRes N Y Enables promiscous mode
DISABLE_PROMISC EthRemoteCfg_CommonReq EthRemoteCfg_StatusRes N Y Disables promiscous mode
READ_REGISTER EthRemoteCfg_RegReadReq EthRemoteCfg_RegReadRes NA NA Reads from a register
WRITE_REGISTER EthRemoteCfg_RegWriteReq EthRemoteCfg_StatusRes NA NA Writes to a register
REGISTER_MATCH_ETHTYPE EthRemoteCfg_MatchEthertypeAddReq EthRemoteCfg_StatusRes Y N Registers for ethertype based route
DEREGISTER_MATCH_ETHTYPE EthRemoteCfg_MatchEthertypeDelReq EthRemoteCfg_StatusRes Y N Unregisters the ethertype based route
REGISTER_REMOTE_TIMER EthRemoteCfg_RemoteTimerRegisterReq EthRemoteCfg_StatusRes Y Y Registers remote timer for timesync
DEREGISTER_REMOTE_TIMER EthRemoteCfg_RemoteTimerDeregisterReq EthRemoteCfg_StatusRes Y Y Unregisters remote timer for timesync
MESSAGE_PING EthRemoteCfg_PingReq EthRemoteCfg_PingRes NA NA Pings Ethernet Firmware
GET_SERVER_STATUS EthRemoteCfg_CommonReq EthRemoteCfg_ServerStatusRes NA NA Provides the remote server status
TEARDOWN_COMPLETION EthRemoteCfg_CommonReq EthRemoteCfg_StatusRes Y Y Notifies DMA teardown completion
IOCTL EthRemoteCfg_IoctlReq EthRemoteCfg_IoctlRes Y Y Invokes ENET LLD IOCTLs by the clients
DUMP EthRemoteCfg_CommonReq EthRemoteCfg_StatusRes Y Y Dumps CPSW Stats

Back To Top