From b834ddada0e0b2c46c71e17fc7c9911d324f50d9 Mon Sep 17 00:00:00 2001 From: patacongo Date: Fri, 7 Dec 2007 15:19:00 +0000 Subject: C5471 ethernet driver functional (but sensitive) git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@432 42af7a65-404d-4744-a932-0658087f49c3 --- nuttx/TODO | 8 +++----- nuttx/arch/arm/src/c5471/c5471_ethernet.c | 18 ++++++++---------- 2 files changed, 11 insertions(+), 15 deletions(-) (limited to 'nuttx') diff --git a/nuttx/TODO b/nuttx/TODO index 8e60cabb1..24dc5b027 100644 --- a/nuttx/TODO +++ b/nuttx/TODO @@ -44,7 +44,9 @@ o Network - IPv6 support is incomplete - Incoming UDP broadcast should only be accepted if listening on INADDR_ANY(?) - Should add some driver call to support throttling... when there is no listener - for new data, the driver should be throttled. + for new data, the driver should be throttled. Perhaps the driver should disable + RX interrupts when throttled and re-anable on each poll time. recvfrom would, + of course, have to un-throttle. o USB - Implement USB device support @@ -78,10 +80,6 @@ o ARM user stack allocation larger than needed. o ARM/C5471 -- Ethernet driver has problems on receive side. The cause of the problem seems - to be that the hardware waits for about 3 seconds before interrupting the driver. - By then, the sender has already retransmitted and things are out of sync. - Probable cause: TX configuration problem. o ARM/DM320 - It seems that when a lot of debug statements are added, the system no diff --git a/nuttx/arch/arm/src/c5471/c5471_ethernet.c b/nuttx/arch/arm/src/c5471/c5471_ethernet.c index 8ec28a785..5bf696680 100644 --- a/nuttx/arch/arm/src/c5471/c5471_ethernet.c +++ b/nuttx/arch/arm/src/c5471/c5471_ethernet.c @@ -238,8 +238,8 @@ #define ENET_ADR_PROMISCUOUS 0x00000008 /* Bit 3: Enable snoop address comparison */ #define ENET_ADR_BROADCAST 0x00000004 /* Bit 2: Enable broadcast address comparison */ -#define ENET_ADDR_LCOMPARE 0x00000001 /* Bit 1: Enable logical address comparison */ -#define ENET_ADDR_PCOMPARE 0x00000001 /* Bit 0: Enable physical address comparison */ +#define ENET_ADDR_LCOMPARE 0x00000002 /* Bit 1: Enable logical address comparison */ +#define ENET_ADDR_PCOMPARE 0x00000001 /* Bit 0: Enable physical address comparison */ /* ENET0_MODE bit settings */ /* Bits 16-31: reserved */ @@ -1206,7 +1206,7 @@ static void c5471_receive(struct c5471_driver_s *c5471) { /* Get the packet memory from words #2 and #3 of descriptor */ - packetmem = (uint16*)getreg32(c5471->c_txcpudesc + sizeof(uint32)); + packetmem = (uint16*)getreg32(c5471->c_txcpudesc + sizeof(uint32)); /* Divide by 2 with round up to get the number of 16-bit words. */ @@ -1321,8 +1321,6 @@ static void c5471_receive(struct c5471_driver_s *c5471) c5471->c_rxdropped++; } #endif - - } /**************************************************************************** @@ -1849,7 +1847,7 @@ static void c5471_eimconfig(struct c5471_driver_s *c5471) putreg32(pbuf, desc); desc += sizeof(uint32); - putreg32(0, pbuf);; + putreg32(0, pbuf); pbuf += EIM_PACKET_BYTES; putreg32(0, pbuf); @@ -1875,10 +1873,10 @@ static void c5471_eimconfig(struct c5471_driver_s *c5471) putreg32(pbuf, desc); desc += sizeof(uint32); - putreg32(0, pbuf);; + putreg32(0, pbuf); pbuf += EIM_PACKET_BYTES; - putreg32(0, pbuf);; + putreg32(0, pbuf); pbuf += sizeof(uint32); /* Ether Module's "Buffer Usage Word" */ } @@ -1933,10 +1931,10 @@ static void c5471_eimconfig(struct c5471_driver_s *c5471) putreg32(pbuf, desc); desc += sizeof(uint32); - putreg32(0, pbuf);; + putreg32(0, pbuf); pbuf += EIM_PACKET_BYTES; - putreg32(0, pbuf);; + putreg32(0, pbuf); pbuf += sizeof(uint32); /* Ether Module's "Buffer Usage Word" */ } ndbg("END desc: %08x pbuf: %08x\n", desc, pbuf); -- cgit v1.2.3