/****************************************************************************** * 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 { __evenaccess uint32_t status; #if __LIT /* Little endian */ __evenaccess uint16_t size; __evenaccess uint16_t bufsize; #else /* Big endian */ __evenaccess uint16_t bufsize; __evenaccess uint16_t size; #endif int8_t *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(uint32_t ch, uint8_t mac_addr[]); int32_t R_Ether_Close(uint32_t ch); int32_t R_Ether_Write(uint32_t ch, void *buf, uint32_t len); int32_t R_Ether_Read(uint32_t 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 { uint32_t rx_packets; /* total packets received */ uint32_t tx_packets; /* total packets transmitted */ uint32_t rx_errors; /* bad packets received */ uint32_t tx_errors; /* packet transmit problems */ uint32_t rx_dropped; /* no space in buffers */ uint32_t tx_dropped; /* no space available */ uint32_t multicast; /* multicast packets received */ uint32_t collisions; /* detailed rx_errors: */ uint32_t rx_length_errors; uint32_t rx_over_errors; /* receiver ring buffer overflow */ uint32_t rx_crc_errors; /* recved pkt with crc error */ uint32_t rx_frame_errors; /* recv'd frame alignment error */ uint32_t rx_fifo_errors; /* recv'r fifo overrun */ uint32_t rx_missed_errors; /* receiver missed packet */ /* detailed tx_errors */ uint32_t tx_aborted_errors; uint32_t tx_carrier_errors; uint32_t tx_fifo_errors; uint32_t tx_heartbeat_errors; uint32_t tx_window_errors; }; struct ei_device { const int8_t *name; uint8_t open; uint8_t Tx_act; uint8_t Rx_act; uint8_t txing; /* Transmit Active */ uint8_t irqlock; /* EDMAC's interrupt disabled when '1'. */ uint8_t dmaing; /* EDMAC Active */ ethfifo *rxcurrent; /* current receive discripter */ ethfifo *txcurrent; /* current transmit discripter */ uint8_t save_irq; /* Original dev->irq value. */ struct enet_stats stat; uint8_t mac_addr[6]; }; #endif /* R_ETHER_H */