Add in basic uIP files into the A2F demo. Ping is working, but nothing else has been tested yet. This check in includes some modifications to the MAC driver to make the Rx zero copy.

This commit is contained in:
Richard Barry 2011-04-17 10:32:09 +00:00
parent 521d995b9d
commit c0bf3cd7f9
14 changed files with 199 additions and 1240 deletions

View file

@ -56,40 +56,90 @@
#include "task.h"
#include "semphr.h"
/* Hardware driver includes. */
#include "mss_ethernet_mac.h"
/* uIP includes. */
#include "net/uip.h"
static void prvEMACEventListener( unsigned long ulEvents );
#define emacPHY_ADDRESS 1
/*-----------------------------------------------------------*/
/* The buffer used by the uIP stack to both receive and send. This points to
one of the Ethernet buffers when its actually in use. */
unsigned char *uip_buf = NULL;
const unsigned char ucMACAddress[] = { configMAC_ADDR0, configMAC_ADDR1, configMAC_ADDR2, configMAC_ADDR3, configMAC_ADDR4, configMAC_ADDR5 };
/*-----------------------------------------------------------*/
void vInitEmac( void )
{
unsigned long ulMACCfg;
MSS_MAC_init( emacPHY_ADDRESS );
ulMACCfg = MSS_MAC_get_configuration();
ulMACCfg &= ~( MSS_MAC_CFG_STORE_AND_FORWARD | MSS_MAC_CFG_PASS_BAD_FRAMES );
ulMACCfg |= ( MSS_MAC_CFG_RECEIVE_ALL | MSS_MAC_CFG_PROMISCUOUS_MODE | MSS_MAC_CFG_FULL_DUPLEX_MODE | MSS_MAC_CFG_TRANSMIT_THRESHOLD_MODE | MSS_MAC_CFG_THRESHOLD_CONTROL_00 );
MSS_MAC_configure( ulMACCfg );
MSS_MAC_set_mac_address( ( unsigned char *) ucMACAddress );
MSS_MAC_set_callback( prvEMACEventListener );
}
/*-----------------------------------------------------------*/
void vEMACWrite( void )
{
MSS_MAC_tx_packet( uip_buf, uip_len, 0 );
}
/*-----------------------------------------------------------*/
unsigned long ulEMACRead( void )
{
unsigned long ulBytesReceived = 0UL;
return ulBytesReceived;
return MSS_MAC_rx_packet( &uip_buf, ( MSS_RX_BUFF_SIZE + 4 ), 0UL );
}
/*-----------------------------------------------------------*/
long lEMACWaitForLink( void )
{
long lReturn = 0;
long lReturn = pdFAIL;
unsigned long ulStatus;
ulStatus = MSS_MAC_link_status();
if( ( ulStatus & ( unsigned long ) MSS_MAC_LINK_STATUS_LINK ) != 0UL )
{
lReturn = pdPASS;
}
return lReturn;
}
/*-----------------------------------------------------------*/
static void prvEMACEventListener( unsigned long ulEvents )
{
extern xSemaphoreHandle xEMACSemaphore;
long lHigherPriorityTaskWoken = pdFALSE;
if( xEMACSemaphore != NULL )
{
if( ( ulEvents & MSS_MAC_EVENT_PACKET_SEND ) != 0UL )
{
/* Handle send event. */
}
if( ( ulEvents & MSS_MAC_EVENT_PACKET_RECEIVED ) != 0UL )
{
/* Wake the uIP task as new data has arrived. */
xSemaphoreGiveFromISR( xEMACSemaphore, &lHigherPriorityTaskWoken );
}
}
portEND_SWITCHING_ISR( lHigherPriorityTaskWoken );
}

View file

@ -114,11 +114,7 @@ typedef unsigned short uip_stats_t;
*
* \hideinitializer
*/
#if __LITTLE_ENDIAN__ == 1
#define UIP_CONF_BYTE_ORDER UIP_LITTLE_ENDIAN
#else
#define UIP_CONF_BYTE_ORDER UIP_BIG_ENDIAN
#endif
#define UIP_CONF_BYTE_ORDER LITTLE_ENDIAN
/**
* Logging on or off
@ -159,8 +155,6 @@ typedef unsigned short uip_stats_t;
/*#include "webclient.h"*/
#define CCIF
#define CC_REGISTER_ARG
#endif /* __UIP_CONF_H__ */
/** @} */