From 58271f20498ef738a53e3bdc61b938983d38bd9d Mon Sep 17 00:00:00 2001 From: edolomb Date: Tue, 30 Jan 2018 15:34:43 +0000 Subject: MAC now works with checksum offload git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11412 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.c | 21 +++++---------------- os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.h | 2 +- 2 files changed, 6 insertions(+), 17 deletions(-) (limited to 'os/hal/ports') diff --git a/os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.c b/os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.c index 0be3c7d91..35f82f4f2 100644 --- a/os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.c +++ b/os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.c @@ -358,7 +358,7 @@ void mac_lld_start(MACDriver *macp) { macp->rxptr = (sama_eth_rx_descriptor_t *)__eth_rd; for (i = 0; i < SAMA_MAC_TRANSMIT_BUFFERS; i++) - __eth_td[i].tdes1 |= SAMA_TDES1_LAST_BUFF | SAMA_TDES1_USED; + __eth_td[i].tdes1 |= SAMA_TDES1_LAST_BUFF | SAMA_TDES1_USED | (SAMA_TDES1_LENGTH_BUFF & BUFFER_SIZE); macp->txptr = (sama_eth_tx_descriptor_t *)__eth_td; @@ -387,14 +387,12 @@ void mac_lld_start(MACDriver *macp) { uint32_t ncfgr = GMAC0->GMAC_NCFGR; #if SAMA_MAC_IP_CHECKSUM_OFFLOAD - GMAC0->GMAC_NCFGR = GMAC_NCFGR_RXCOEN | GMAC_NCFGR_SPD | - GMAC_NCFGR_FD | GMAC_NCFGR_MAXFS | - GMAC_NCFGR_RFCS | ncfgr; + GMAC0->GMAC_NCFGR = GMAC_NCFGR_SPD | GMAC_NCFGR_FD | GMAC_NCFGR_RXCOEN | + GMAC_NCFGR_MAXFS | GMAC_NCFGR_RFCS | ncfgr; GMAC0->GMAC_DCFGR |= GMAC_DCFGR_TXCOEN; #else GMAC0->GMAC_NCFGR = GMAC_NCFGR_SPD | GMAC_NCFGR_FD | - GMAC_NCFGR_MAXFS | GMAC_NCFGR_RFCS | - ncfgr; + GMAC_NCFGR_MAXFS | GMAC_NCFGR_RFCS| ncfgr; #endif /* DMA configuration: @@ -428,8 +426,6 @@ void mac_lld_start(MACDriver *macp) { /* Enable RX and TX.*/ GMAC0->GMAC_NCR |= GMAC_NCR_RXEN | GMAC_NCR_TXEN; - /* Starts transmission */ -// GMAC0->GMAC_NCR |= GMAC_NCR_TSTART; } /** @@ -574,11 +570,7 @@ msg_t mac_lld_get_receive_descriptor(MACDriver *macp, /* Iterates through received frames until a valid one is found, invalid frames are discarded.*/ while (rdes->rdes0 & SAMA_RDES0_OWN) { - if (rdes->rdes1 & (SAMA_RDES1_EOF | SAMA_RDES1_SOF) -#if SAMA_MAC_IP_CHECKSUM_OFFLOAD - && (rdes->rdes1 & (SAMA_RDES1_CHECKSUM_IP_TCP | SAMA_RDES1_CHECKSUM_IP_UDP)) -#endif - ) { + if (rdes->rdes1 & (SAMA_RDES1_EOF | SAMA_RDES1_SOF)) { /* Found a valid one.*/ rdp->offset = 0; /* Only with RFCS set */ @@ -728,9 +720,6 @@ size_t mac_lld_write_transmit_descriptor(MACTransmitDescriptor *tdp, if (size > tdp->size - tdp->offset) size = tdp->size - tdp->offset; - /* Configure lentgh of buffer */ - tdp->physdesc->tdes1 |= (SAMA_TDES1_LENGTH_BUFF & size); - if (size > 0) { memcpy((uint8_t *)(tdp->physdesc->tdes0) + tdp->offset, buf, size); tdp->offset += size; diff --git a/os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.h b/os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.h index 81e019aaf..7ca57bbf2 100644 --- a/os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.h +++ b/os/hal/ports/SAMA/LLD/MACv1/hal_mac_lld.h @@ -153,7 +153,7 @@ * @brief IP checksum offload. * @details The following modes are available: * - 0 Function disabled. - * - 1 Only IP header checksum calculation and insertion are enabled. + * - 1 IP/TCP/UDP header checksum calculation and insertion are enabled. */ #if !defined(SAMA_MAC_IP_CHECKSUM_OFFLOAD) || defined(__DOXYGEN__) #define SAMA_MAC_IP_CHECKSUM_OFFLOAD 1 -- cgit v1.2.3