Go to the documentation of this file.
32 #define TRACE_LEVEL NIC_TRACE_LEVEL
76 TRACE_INFO(
"Initializing NCV7410 Ethernet controller...\r\n");
79 interface->spiDriver->init();
82 if(interface->extIntDriver != NULL)
84 interface->extIntDriver->init();
138 interface->macAddr.b[0] =
value & 0xFF;
139 interface->macAddr.b[1] = (
value >> 8) & 0xFF;
140 interface->macAddr.b[2] = (
value >> 16) & 0xFF;
146 interface->macAddr.b[5] =
value & 0xFF;
147 interface->macAddr.b[4] = (
value >> 8) & 0xFF;
153 interface->macAddr.b[3] =
value & 0xFF;
185 interface->nicEvent =
TRUE;
201 #if (NCV7410_PLCA_SUPPORT == ENABLED)
236 if(linkState && !interface->linkState)
243 interface->linkState =
TRUE;
249 else if(!linkState && interface->linkState)
252 interface->linkState =
FALSE;
268 if(interface->extIntDriver != NULL)
270 interface->extIntDriver->enableIrq();
283 if(interface->extIntDriver != NULL)
285 interface->extIntDriver->disableIrq();
300 interface->nicEvent =
TRUE;
416 interface->spiDriver->assertCs();
421 chunk[j] = interface->spiDriver->transfer(chunk[j]);
425 interface->spiDriver->deassertCs();
435 interface->nicEvent =
TRUE;
502 interface->spiDriver->assertCs();
507 chunk[i] = interface->spiDriver->transfer(chunk[i]);
511 interface->spiDriver->deassertCs();
602 (interface->macAddr.b[2] << 24) | (interface->macAddr.b[3] << 16) |
603 (interface->macAddr.b[4] << 8) | interface->macAddr.b[5]);
607 (interface->macAddr.b[0] << 8) | interface->macAddr.b[1]);
615 acceptMulticast =
FALSE;
622 entry = &interface->macAddrFilter[i];
631 acceptMulticast =
TRUE;
639 unicastMacAddr[j++] = entry->
addr;
650 (unicastMacAddr[0].
b[2] << 24) | (unicastMacAddr[0].
b[3] << 16) |
651 (unicastMacAddr[0].
b[4] << 8) | unicastMacAddr[0].
b[5]);
655 (unicastMacAddr[0].
b[0] << 8) | unicastMacAddr[0].
b[1]);
668 (unicastMacAddr[1].
b[2] << 24) | (unicastMacAddr[1].
b[3] << 16) |
669 (unicastMacAddr[1].
b[4] << 8) | unicastMacAddr[1].
b[5]);
673 (unicastMacAddr[1].
b[0] << 8) | unicastMacAddr[1].
b[1]);
686 (unicastMacAddr[2].
b[2] << 24) | (unicastMacAddr[2].
b[3] << 16) |
687 (unicastMacAddr[2].
b[4] << 8) | unicastMacAddr[2].
b[5]);
691 (unicastMacAddr[2].
b[0] << 8) | unicastMacAddr[2].
b[1]);
756 interface->spiDriver->assertCs();
759 interface->spiDriver->transfer((header >> 24) & 0xFF);
760 interface->spiDriver->transfer((header >> 16) & 0xFF);
761 interface->spiDriver->transfer((header >> 8) & 0xFF);
762 interface->spiDriver->transfer(header & 0xFF);
765 interface->spiDriver->transfer((
data >> 24) & 0xFF);
766 interface->spiDriver->transfer((
data >> 16) & 0xFF);
767 interface->spiDriver->transfer((
data >> 8) & 0xFF);
768 interface->spiDriver->transfer(
data & 0xFF);
771 interface->spiDriver->transfer(0x00);
772 interface->spiDriver->transfer(0x00);
773 interface->spiDriver->transfer(0x00);
774 interface->spiDriver->transfer(0x00);
777 interface->spiDriver->deassertCs();
811 interface->spiDriver->assertCs();
814 interface->spiDriver->transfer((header >> 24) & 0xFF);
815 interface->spiDriver->transfer((header >> 16) & 0xFF);
816 interface->spiDriver->transfer((header >> 8) & 0xFF);
817 interface->spiDriver->transfer(header & 0xFF);
820 interface->spiDriver->transfer(0x00);
821 interface->spiDriver->transfer(0x00);
822 interface->spiDriver->transfer(0x00);
823 interface->spiDriver->transfer(0x00);
826 data = interface->spiDriver->transfer(0x00) << 24;
827 data |= interface->spiDriver->transfer(0x00) << 16;
828 data |= interface->spiDriver->transfer(0x00) << 8;
829 data |= interface->spiDriver->transfer(0x00);
832 interface->spiDriver->deassertCs();
853 for(i = 0; i < num; i++)
bool_t osSetEventFromIsr(OsEvent *event)
Set an event object to the signaled state from an interrupt service routine.
void nicNotifyLinkChange(NetInterface *interface)
Process link state change notification.
#define NCV7410_PLCACTRL0
#define NCV7410_TX_HEADER_EV
bool_t ncv7410IrqHandler(NetInterface *interface)
NCV7410 interrupt service routine.
void ncv7410Tick(NetInterface *interface)
NCV7410 timer handler.
#define NCV7410_TX_HEADER_EBO
void ncv7410DisableIrq(NetInterface *interface)
Disable interrupts.
#define NCV7410_PLCABURST_BTMR_DEFAULT
error_t ncv7410ReceivePacket(NetInterface *interface)
Receive a packet.
void macAddrToEui64(const MacAddr *macAddr, Eui64 *interfaceId)
Map a MAC address to the IPv6 modified EUI-64 identifier.
size_t netBufferRead(void *dest, const NetBuffer *src, size_t srcOffset, size_t length)
Read data from a multi-part buffer.
uint32_t ncv7410ReadReg(NetInterface *interface, uint8_t mms, uint16_t address)
Read register.
Structure describing a buffer that spans multiple chunks.
#define MAC_ADDR_FILTER_SIZE
#define NCV7410_RX_FOOTER_DV
#define NCV7410_CONFIG0_ZARFE
#define NCV7410_BUFSTS_TXC
uint_t refCount
Reference count for the current entry.
error_t ncv7410SendPacket(NetInterface *interface, const NetBuffer *buffer, size_t offset, NetTxAncillary *ancillary)
Send a packet.
#define NCV7410_PHYSTATUS
#define NCV7410_CTRL_HEADER_ADDR
#define NCV7410_CONFIG0_TXCTHRESH_16_CREDITS
#define NCV7410_ADDRFILT1H
#define NCV7410_ADDRFILT3L
#define NCV7410_PLCACTRL0_EN
#define NCV7410_TX_HEADER_NORX
#define NCV7410_RX_FOOTER_SV
void nicProcessPacket(NetInterface *interface, uint8_t *packet, size_t length, NetRxAncillary *ancillary)
Handle a packet received by the network controller.
#define macIsMulticastAddr(macAddr)
#define NCV7410_RESET_RESET
#define NCV7410_TX_HEADER_SV
#define NCV7410_RX_FOOTER_EV
#define NCV7410_PLCACTRL1_ID
#define NCV7410_CTRL_HEADER_P
#define NCV7410_MACCTRL0_BCSF
#define NCV7410_MACCTRL0_MCSF
#define NCV7410_CTRL_HEADER_MMS
void ncv7410WriteReg(NetInterface *interface, uint8_t mms, uint16_t address, uint32_t data)
Write register.
error_t ncv7410Init(NetInterface *interface)
NCV7410 controller initialization.
#define NCV7410_CHUNK_PAYLOAD_SIZE
#define osMemcpy(dest, src, length)
#define NCV7410_RX_FOOTER_RCA
#define NCV7410_MACCTRL0_TXEN
#define NCV7410_CTRL_HEADER_LEN
#define NCV7410_RX_FOOTER_EBO
const NetRxAncillary NET_DEFAULT_RX_ANCILLARY
#define NCV7410_PLCABURST_MAXBC_DEFAULT
#define NCV7410_ADDRFILT3H
#define NCV7410_DIOCFG_VAL1
#define NCV7410_PLCACTRL1_NCNT
#define NCV7410_ETH_RX_BUFFER_SIZE
#define NCV7410_BUFSTS_RCA
#define NCV7410_TX_HEADER_DV
#define NCV7410_ADDRFILT0H
const NicDriver ncv7410Driver
NCV7410 driver.
error_t ncv7410UpdateMacAddrFilter(NetInterface *interface)
Configure MAC address filtering.
size_t netBufferGetLength(const NetBuffer *buffer)
Get the actual length of a multi-part buffer.
#define NCV7410_PLCABURST
#define NCV7410_CONFIG0_SYNC
#define NCV7410_DIOCFG_FN0_LED_TX
__weak_func void ncv7410InitHook(NetInterface *interface)
NCV7410 custom configuration.
#define NCV7410_STATUS0_RESETC
#define NCV7410_CTRL_HEADER_WNR
#define NCV7410_ADDRFILT1L
#define NCV7410_ADDRFILTnH_EN
void ncv7410EventHandler(NetInterface *interface)
NCV7410 event handler.
#define NCV7410_MACCTRL0_ADRF
#define NCV7410_DIOCFG_FN1_LED_RX
#define NCV7410_CONFIG0_CSARFE
#define NCV7410_DIOCFG_SLR0
void ncv7410DumpReg(NetInterface *interface, uint8_t mms, uint16_t address, uint_t num)
Dump registers for debugging purpose.
#define NCV7410_TX_HEADER_DNC
#define NCV7410_MACCTRL0_FCSA
#define macCompAddr(macAddr1, macAddr2)
#define NCV7410_ADDRFILT2H
uint32_t reverseInt32(uint32_t value)
Reverse bit order in a 32-bit word.
void osSetEvent(OsEvent *event)
Set the specified event object to the signaled state.
#define NCV7410_NODE_COUNT
#define NCV7410_DIOCFG_VAL0
#define NCV7410_DIOCFG_SLR1
#define NCV7410_ADDRFILT2L
#define NCV7410_CTRL_HEADER_AID
#define NCV7410_PLCACTRL1
void ncv7410EnableIrq(NetInterface *interface)
Enable interrupts.
Onsemi NCV7410 10Base-T1S Ethernet controller.
#define osMemset(p, value, length)
uint32_t ncv7410CalcParity(uint32_t data)
Calculate parity bit over a 32-bit data.
#define NCV7410_ADDRFILT0L
#define NCV7410_PHYSTATUS_LKST
const MacAddr MAC_UNSPECIFIED_ADDR
#define NCV7410_PHYCTRL_LCTL
#define NCV7410_CONFIG0_CPS_64_BYTES
#define NCV7410_MACCTRL0_RXEN
@ NIC_TYPE_ETHERNET
Ethernet interface.