/****************************************************************************** * DISCLAIMER * Please refer to http://www.renesas.com/disclaimer ****************************************************************************** Copyright (C) 2008. Renesas Technology Corp., All Rights Reserved. ******************************************************************************* * File Name : r_ether.h * Version : 1.02 * Description : Ethernet module device driver ****************************************************************************** * History : DD.MM.YYYY Version Description * : 15.02.2010 1.00 First Release * : 03.03.2010 1.01 Buffer size is aligned on the 32-byte boundary. * : 04.06.2010 1.02 RX62N changes ******************************************************************************/ #ifndef R_ETHER_H #define R_ETHER_H /****************************************************************************** Includes , "Project Includes" ******************************************************************************/ #include /****************************************************************************** Typedef definitions ******************************************************************************/ struct Descriptor { unsigned long status; #if __LITTLE_ENDIAN__ == 1 /* Little endian */ unsigned short size; unsigned short bufsize; #else /* Big endian */ unsigned short bufsize; unsigned short size; #endif char *buf_p; struct Descriptor *next; }; typedef struct Descriptor ethfifo; typedef enum _NETLNK { PHY_NO_LINK = 0, PHY_LINK_10H, PHY_LINK_10F, PHY_LINK_100H, PHY_LINK_100F } NETLNK; /****************************************************************************** Macro definitions ******************************************************************************/ #define BUFSIZE 256 /* Must be 32-bit aligned */ #define ENTRY 8 /* Number of RX and TX buffers */ #define ACT 0x80000000 #define DL 0x40000000 #define FP1 0x20000000 #define FP0 0x10000000 #define FE 0x08000000 #define RFOVER 0x00000200 #define RAD 0x00000100 #define RMAF 0x00000080 #define RRF 0x00000010 #define RTLF 0x00000008 #define RTSF 0x00000004 #define PRE 0x00000002 #define CERF 0x00000001 #define TAD 0x00000100 #define CND 0x00000008 #define DLC 0x00000004 #define CD 0x00000002 #define TRO 0x00000001 /** * Renesas Ethernet API return defines **/ #define R_ETHER_OK 0 #define R_ETHER_ERROR -1 /* Ether Interface definitions */ #define ETH_RMII_MODE 0 #define ETH_MII_MODE 1 /* Select Ether Interface Mode */ #define ETH_MODE_SEL ETH_MII_MODE /****************************************************************************** Variable Externs ******************************************************************************/ /****************************************************************************** Functions Prototypes ******************************************************************************/ /** * Renesas Ethernet API prototypes **/ int32_t R_Ether_Open(unsigned long ch, unsigned char mac_addr[]); int32_t R_Ether_Close(unsigned long ch); int32_t R_Ether_Write(unsigned long ch, void *buf, unsigned long len); int32_t R_Ether_Read(unsigned long ch, void *buf); /** * FreeRTOS Ethernet API prototypes. */ /* * Configure all the ethernet components (MAC, DMA, PHY) ready for communication. */ void vInitEmac( void ); /* * Auto negotiate the link, returning pass or fail depending on whether a link * was established or not. */ long lEMACWaitForLink( void ); /* * Check the Rx status, and return the number of bytes received if any. */ unsigned long ulEMACRead( void ); /* * Send uip_len bytes from uip_buf to the Tx descriptors and initiate a Tx. */ void vEMACWrite( void ); /****************************************************/ /* Ethernet statistic collection data */ struct enet_stats { unsigned long rx_packets; /* total packets received */ unsigned long tx_packets; /* total packets transmitted */ unsigned long rx_errors; /* bad packets received */ unsigned long tx_errors; /* packet transmit problems */ unsigned long rx_dropped; /* no space in buffers */ unsigned long tx_dropped; /* no space available */ unsigned long multicast; /* multicast packets received */ unsigned long collisions; /* detailed rx_errors: */ unsigned long rx_length_errors; unsigned long rx_over_errors; /* receiver ring buffer overflow */ unsigned long rx_crc_errors; /* recved pkt with crc error */ unsigned long rx_frame_errors; /* recv'd frame alignment error */ unsigned long rx_fifo_errors; /* recv'r fifo overrun */ unsigned long rx_missed_errors; /* receiver missed packet */ /* detailed tx_errors */ unsigned long tx_aborted_errors; unsigned long tx_carrier_errors; unsigned long tx_fifo_errors; unsigned long tx_heartbeat_errors; unsigned long tx_window_errors; }; struct ei_device { const char *name; unsigned char open; unsigned char Tx_act; unsigned char Rx_act; unsigned char txing; /* Transmit Active */ unsigned char irqlock; /* EDMAC's interrupt disabled when '1'. */ unsigned char dmaing; /* EDMAC Active */ ethfifo *rxcurrent; /* current receive discripter */ ethfifo *txcurrent; /* current transmit discripter */ unsigned char save_irq; /* Original dev->irq value. */ struct enet_stats stat; unsigned char mac_addr[6]; }; #endif /* R_ETHER_H */