summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraozima <[email protected]>2014-05-15 21:46:26 +0800
committeraozima <[email protected]>2014-05-15 21:46:26 +0800
commite32c1afa3ae2a6458cc86065cdc2b9e1eb774c41 (patch)
tree48222bfa122af56010951445dac456e5506330fe
parent072fd38a439b5fa4cd703a2cac0e3dc3073a78fd (diff)
update stm32f107 ethernet driver: optimize eth_rx, use memcpy.
-rw-r--r--bsp/stm32f107/drivers/stm32_eth.c20
1 files changed, 6 insertions, 14 deletions
diff --git a/bsp/stm32f107/drivers/stm32_eth.c b/bsp/stm32f107/drivers/stm32_eth.c
index 7137ce982b..1870ac355f 100644
--- a/bsp/stm32f107/drivers/stm32_eth.c
+++ b/bsp/stm32f107/drivers/stm32_eth.c
@@ -3283,7 +3283,7 @@ rt_err_t rt_stm32_eth_tx( rt_device_t dev, struct pbuf* p)
struct pbuf *rt_stm32_eth_rx(rt_device_t dev)
{
struct pbuf* p;
- rt_uint32_t offset = 0, framelength = 0;
+ rt_uint32_t framelength = 0;
/* init p pointer */
p = RT_NULL;
@@ -3303,24 +3303,16 @@ struct pbuf *rt_stm32_eth_rx(rt_device_t dev)
p = pbuf_alloc(PBUF_LINK, framelength, PBUF_RAM);
if (p != RT_NULL)
{
- rt_uint8_t* ptr;
+ const char * from;
struct pbuf* q;
- rt_size_t len;
+
+ from = (const char *)(DMARxDescToGet->Buffer1Addr);
for (q = p; q != RT_NULL; q= q->next)
{
- ptr = q->payload;
- len = q->len;
-
/* Copy the received frame into buffer from memory pointed by the current ETHERNET DMA Rx descriptor */
- while (len)
- {
- *ptr = (*(__IO uint8_t *)((DMARxDescToGet->Buffer1Addr) + offset));
-
- offset ++;
- ptr ++;
- len --;
- }
+ memcpy(q->payload, from, q->len);
+ from += q->len;
}
#ifdef ETH_RX_DUMP