Go to the documentation of this file.
32 #define TRACE_LEVEL NIC_TRACE_LEVEL
79 TRACE_INFO(
"Initializing KSZ8851 Ethernet controller...\r\n");
81 #if (KSZ8851_SPI_SUPPORT == ENABLED)
83 interface->spiDriver->init();
87 if(interface->extIntDriver != NULL)
89 interface->extIntDriver->init();
166 interface->nicEvent =
TRUE;
193 if(interface->extIntDriver != NULL)
195 interface->extIntDriver->enableIrq();
208 if(interface->extIntDriver != NULL)
210 interface->extIntDriver->disableIrq();
246 interface->nicEvent =
TRUE;
275 interface->nicEvent =
TRUE;
334 interface->linkState =
TRUE;
339 interface->linkState =
FALSE;
355 while(frameCount > 0)
541 uint16_t hashTable[4];
548 osMemset(hashTable, 0,
sizeof(hashTable));
555 entry = &interface->macAddrFilter[i];
563 k = (crc >> 26) & 0x3F;
565 hashTable[k / 16] |= (1 << (k % 16));
595 #if (KSZ8851_SPI_SUPPORT == ENABLED)
609 interface->spiDriver->assertCs();
612 interface->spiDriver->transfer(command | (
address >> 6));
613 interface->spiDriver->transfer(
address << 2);
616 interface->spiDriver->transfer(
LSB(
data));
617 interface->spiDriver->transfer(
MSB(
data));
620 interface->spiDriver->deassertCs();
647 #if (KSZ8851_SPI_SUPPORT == ENABLED)
662 interface->spiDriver->assertCs();
665 interface->spiDriver->transfer(command | (
address >> 6));
666 interface->spiDriver->transfer(
address << 2);
669 data = interface->spiDriver->transfer(0x00);
671 data |= interface->spiDriver->transfer(0x00) << 8;
674 interface->spiDriver->deassertCs();
705 #if (KSZ8851_SPI_SUPPORT == ENABLED)
709 interface->spiDriver->assertCs();
715 for(i = 0; i <
length; i++)
717 interface->spiDriver->transfer(
data[i]);
721 for(; (i % 4) != 0; i++)
723 interface->spiDriver->transfer(0x00);
727 interface->spiDriver->deassertCs();
732 for(i = 0; i <
length; i += 2)
738 for(; (i % 4) != 0; i += 2)
755 #if (KSZ8851_SPI_SUPPORT == ENABLED)
759 interface->spiDriver->assertCs();
765 for(i = 0; i < 4; i++)
767 interface->spiDriver->transfer(0x00);
771 for(i = 0; i < 4; i++)
773 interface->spiDriver->transfer(0x00);
777 for(i = 0; i <
length; i++)
779 data[i] = interface->spiDriver->transfer(0x00);
783 for(; (i % 4) != 0; i++)
785 interface->spiDriver->transfer(0x00);
789 interface->spiDriver->deassertCs();
802 for(i = 0; i <
length; i += 2)
805 data [i] = temp & 0xFF;
806 data [i + 1] = (temp >> 8) & 0xFF;
810 for(; (i % 4) != 0; i += 2)
869 p = (uint8_t *)
data;
874 for(i = 0; i <
length; i++)
877 for(j = 0; j < 8; j++)
880 if((((crc >> 31) ^ (
p[i] >> j)) & 0x01) != 0)
882 crc = (crc << 1) ^ 0x04C11DB7;
903 #if (TRACE_LEVEL >= TRACE_LEVEL_DEBUG)
909 for(i = 0; i < 256; i += 16)
915 for(j = 0; j < 16; j += 2)
bool_t osSetEventFromIsr(OsEvent *event)
Set an event object to the signaled state from an interrupt service routine.
#define KSZ8851_RXCR1_RXME
void nicNotifyLinkChange(NetInterface *interface)
Process link state change notification.
#define KSZ8851_TXCR_TXPE
void ksz8851EventHandler(NetInterface *interface)
KSZ8851 event handler.
void ksz8851ClearBit(NetInterface *interface, uint8_t address, uint16_t mask)
Clear bit field.
#define KSZ8851_RXCR1_RXE
#define KSZ8851_P1SR_LINK_GOOD
void ksz8851WriteFifo(NetInterface *interface, const uint8_t *data, size_t length)
Write TX FIFO.
#define KSZ8851_RXQCR_RXFCTE
#define KSZ8851_CMD_RD_FIFO
#define KSZ8851_P1CR_FORCE_DUPLEX
#define KSZ8851_RXFHSR_RXFTL
size_t netBufferRead(void *dest, const NetBuffer *src, size_t srcOffset, size_t length)
Read data from a multi-part buffer.
uint16_t frameId
Identify a frame and its associated status.
Structure describing a buffer that spans multiple chunks.
#define MAC_ADDR_FILTER_SIZE
#define KSZ8851_CIDER_REV_ID_A3
void ksz8851Tick(NetInterface *interface)
KSZ8851 timer handler.
uint_t refCount
Reference count for the current entry.
const NicDriver ksz8851Driver
KSZ8851 driver.
#define KSZ8851_P1CR_RESTART_AN
#define KSZ8851_CMD_RD_REG
#define KSZ8851_TXCR_TXFCE
#define KSZ8851_ISR_RXWFDIS
void nicProcessPacket(NetInterface *interface, uint8_t *packet, size_t length, NetRxAncillary *ancillary)
Handle a packet received by the network controller.
#define KSZ8851_RXCR1_RXPAFMA
#define KSZ8851_ISR_TXSAIS
void ksz8851WriteReg(NetInterface *interface, uint8_t address, uint16_t data)
Write KSZ8851 register.
#define KSZ8851_RXFHSR_RXMR
void ksz8851DumpReg(NetInterface *interface)
Dump registers for debugging purpose.
#define KSZ8851_P1SR_OPERATION_SPEED
#define KSZ8851_ISR_RXMPDIS
error_t ksz8851Init(NetInterface *interface)
KSZ8851 controller initialization.
#define KSZ8851_CMD_WR_REG
#define KSZ8851_ISR_RXPSIS
__start_packed struct @0 MacAddr
MAC address.
bool_t ksz8851IrqHandler(NetInterface *interface)
KSZ8851 interrupt service routine.
void ksz8851ReadFifo(NetInterface *interface, uint8_t *data, size_t length)
Read RX FIFO.
const NetRxAncillary NET_DEFAULT_RX_ANCILLARY
@ ERROR_FAILURE
Generic error code.
#define KSZ8851_ISR_TXPSIS
#define KSZ8851_CMD_WR_FIFO
#define KSZ8851_TXQCR_METFE
#define KSZ8851_TXMIR_TXMA
size_t netBufferGetLength(const NetBuffer *buffer)
Get the actual length of a multi-part buffer.
error_t ksz8851UpdateMacAddrFilter(NetInterface *interface)
Configure MAC address filtering.
#define KSZ8851_RXCR2_IUFFP
#define KSZ8851_RXQCR_ADRFE
#define KSZ8851_RXCR1_RXBE
#define KSZ8851_TXFDPR_TXFPAI
#define KSZ8851_ETH_TX_BUFFER_SIZE
#define KSZ8851_RXQCR_RRXEF
#define KSZ8851_P1SR_OPERATION_DUPLEX
#define KSZ8851_RXFDPR_RXFPAI
#define KSZ8851_RXFHSR_RXRF
#define KSZ8851_ISR_RXOIS
error_t ksz8851ReceivePacket(NetInterface *interface)
Receive a packet.
#define KSZ8851_ISR_SPIBEIS
uint16_t ksz8851ReadReg(NetInterface *interface, uint8_t address)
Read KSZ8851 register.
#define KSZ8851_TXCR_TXCE
KSZ8851 Ethernet controller.
#define KSZ8851_RXCR2_RXIUFCEZ
void ksz8851DisableIrq(NetInterface *interface)
Disable interrupts.
void osSetEvent(OsEvent *event)
Set the specified event object to the signaled state.
#define KSZ8851_ETH_RX_BUFFER_SIZE
#define KSZ8851_RXCR2_SRDBL_SINGLE_FRAME
#define KSZ8851_CIDER_FAMILY_ID_DEFAULT
void ksz8851EnableIrq(NetInterface *interface)
Enable interrupts.
#define KSZ8851_RXCR1_RXFCE
#define KSZ8851_RXFHSR_RXFV
#define KSZ8851_TX_CTRL_TXIC
#define osMemset(p, value, length)
#define KSZ8851_CIDER_CHIP_ID_DEFAULT
__start_packed struct @0 Ksz8851TxHeader
TX packet header.
error_t ksz8851SendPacket(NetInterface *interface, const NetBuffer *buffer, size_t offset, NetTxAncillary *ancillary)
Send a packet.
#define KSZ8851_RXQCR_SDA
void ksz8851SetBit(NetInterface *interface, uint8_t address, uint16_t mask)
Set bit field.
#define KSZ8851_RXCR1_RXUE
#define KSZ8851_RXFHBCR_RXBC
#define KSZ8851_TX_CTRL_TXFID
uint32_t ksz8851CalcCrc(const void *data, size_t length)
CRC calculation.
#define KSZ8851_RXFHSR_RXCE
@ NIC_TYPE_ETHERNET
Ethernet interface.