| #ifndef __RTL8019_H__ |
| #define __RTL8019_H__ |
| |
| /***************************************************************************** |
| * Module Name: Realtek 8019AS Driver |
| * |
| * Created By: Louis Beaudoin (www.embedded-creations.com) |
| * |
| * Original Release: September 21, 2002 |
| * |
| * Module Description: |
| * Provides functions to initialize the Realtek 8019AS, and send and retreive |
| * packets |
| * |
| * September 30, 2002 - Louis Beaudoin |
| * Receive functions modified to handle errors encountered when receiving a |
| * fast data stream. Functions now manually retreive data instead of |
| * using the send packet command. Interface improved by checking for |
| * overruns and data in the buffer internally. |
| * Corrected the overrun function - overrun flag was not reset after overrun |
| * Added support for the Imagecraft Compiler |
| * Added support to communicate with the NIC using general I/O ports |
| * |
| *****************************************************************************/ |
| |
| /*#include "delay.h"*/ |
| |
| #include "compiler.h" |
| |
| |
| /***************************************************************************** |
| * RTL8019beginPacketSend(unsigned int packetLength) |
| * Args: unsigned int - length of the Ethernet frame (see note) |
| * Created By: Louis Beaudoin |
| * Date: September 21, 2002 |
| * Description: Sets up the NIC to send a packet |
| * Notes: The NIC will not send packets less than 60 bytes long (the min |
| * Ethernet frame length. The transmit length is automatically |
| * increased to 60 bytes if packetLength is < 60 |
| *****************************************************************************/ |
| void RTL8019beginPacketSend(unsigned int packetLength); |
| |
| |
| /***************************************************************************** |
| * RTL8019sendPacketData(unsigned char * localBuffer, unsigned int length) |
| * Args: 1. unsigned char * localBuffer - Pointer to the beginning of |
| * the buffer to load into the NIC |
| * 2. unsigned char length - number of bytes to copy to |
| * the NIC |
| * Created By: Louis Beaudoin |
| * Date: September 21, 2002 |
| * Description: Loads length # of bytes from a local buffer to the transmit |
| * packet buffer |
| * Notes: RTL8019beginPacketSend() must be called before sending |
| * any data. |
| * Several calls to RTL8019retreivePacketData() may be made to |
| * copy packet data from different buffers |
| *****************************************************************************/ |
| void RTL8019sendPacketData(unsigned char * localBuffer, unsigned int length); |
| |
| |
| /***************************************************************************** |
| * RTL8019endPacketSend() |
| * Created By: Louis Beaudoin |
| * Date: September 21, 2002 |
| * Description: Ends a packet send operation and instructs the NIC to transmit |
| * the frame over the network |
| *****************************************************************************/ |
| void RTL8019endPacketSend(void); |
| |
| |
| /***************************************************************************** |
| * initRTL8019(void); |
| * |
| * Created By: Louis Beaudoin |
| * Date: September 21, 2002 |
| * Description: Sets up the RTL8019 NIC hardware interface, and initializes |
| * the buffers and configuration of the NIC |
| *****************************************************************************/ |
| void initRTL8019(void); |
| |
| |
| /***************************************************************************** |
| * processRTL8019Interrupt(void); |
| * |
| * Created By: Louis Beaudoin |
| * Date: September 21, 2002 |
| * Description: Reads the NIC's ISR register looking for a receive buffer |
| * overrun - which is then handled. |
| * Notes: The function does not need to be called in response to an |
| * interrupt. The function can be polled and the NIC's INT |
| * line not used. This function should be called before |
| * attempting to retreive a packet from the NIC |
| *****************************************************************************/ |
| void processRTL8019Interrupt(void); |
| |
| |
| /***************************************************************************** |
| * unsigned char RTL8019ReceiveEmpty(void); |
| * |
| * Returns: non-zero (true) if buffer is empty, zero if data in buffer |
| * Created By: Louis Beaudoin |
| * Date: September 21, 2002 |
| * Description: Compares the BNRY and CURR receive buffer pointers to see if |
| * there is a packet in the receive buffer |
| * ** Removed as of version 0.60.1 ** |
| *****************************************************************************/ |
| //unsigned char RTL8019ReceiveEmpty(void); |
| |
| |
| /***************************************************************************** |
| * unsigned int RTL8019beginPacketRetreive() |
| * Returns: unsigned int - length of the Ethernet frame (see note) |
| * Created By: Louis Beaudoin |
| * Date: September 21, 2002 |
| * Description: Sets up the NIC to retreive a packet |
| * Notes: The size returned is the size of all the data in the Ethernet |
| * frame minus the Ethernet checksum. This may include unused |
| * trailer bytes appended if data is less than the minimum |
| * Ethernet frame length (60 bytes). A size of zero indicates |
| * there are no packets available. |
| * A call to RTL8019beginPacketRetreive() must be followed by a |
| * call to RTL8019endPacketRetreive() regardless if data is |
| * retreived, unless 0 is returned. |
| *****************************************************************************/ |
| unsigned int RTL8019beginPacketRetreive(void); |
| |
| |
| /***************************************************************************** |
| * RTL8019retreivePacketData(unsigned char * localBuffer, unsigned int length) |
| * Args: 1. unsigned char * localBuffer - Pointer to the beginning of |
| * the buffer to store the ethernet frame. |
| * 2. unsigned char length - number of bytes to copy to |
| * localBuffer |
| * Created By: Louis Beaudoin |
| * Date: September 21, 2002 |
| * Description: Loads length # of bytes from the receive packet buffer to |
| * a local buffer |
| * Notes: RTL8019beginPacketRetreive() must be called before retreiving |
| * any data. |
| * Several calls to RTL8019retreivePacketData() may be made to |
| * copy packet data to different buffers |
| *****************************************************************************/ |
| void RTL8019retreivePacketData(unsigned char * localBuffer, |
| unsigned int length); |
| |
| /***************************************************************************** |
| * RTL8019endPacketRetreive() |
| * Created By: Louis Beaudoin |
| * Date: September 21, 2002 |
| * Description: Ends a packet retreive operation begun by calling |
| * RTL8019beginPacketRetreive(). The NIC buffer space used by |
| * the retreived packet is freed |
| * Notes: A packet may be removed from the buffer without being read |
| * by calling RTL8019endPacketRetreive() after |
| * RTL8019beginPacketRetreive(). |
| *****************************************************************************/ |
| void RTL8019endPacketRetreive(void); |
| |
| |
| /***************************************************************************** |
| * |
| * AVR hardware setup |
| * |
| * External SRAM Interface: |
| * The five NIC address lines are taken from A8-A12 (uses the |
| * non-multiplexed address port so no latch is required) |
| * |
| * General I/O Interface: |
| * Two full ports are required for the address and data buses. Two pins |
| * from another port are used to control the read and write lines |
| * |
| * One output pin is required for hard resetting the NIC |
| * |
| *****************************************************************************/ |
| |
| // set to 1 to use the External SRAM Interface - 0 for General I/O |
| #define MEMORY_MAPPED_NIC 1 |
| |
| #if MEMORY_MAPPED_NIC /*** NIC Interface through External SRAM Interface ****/ |
| |
| // NIC is mapped from address 0x8000 - 0x9F00 |
| #define MEMORY_MAPPED_RTL8019_OFFSET 0x8300 |
| |
| #else /************ NIC Interface through General I/O *******************/ |
| |
| // RTL8019 address port |
| #define RTL8019_ADDRESS_PORT PORTC |
| #define RTL8019_ADDRESS_DDR DDRC |
| |
| // RTL8019 data port |
| #define RTL8019_DATA_PORT PORTA |
| #define RTL8019_DATA_DDR DDRA |
| #define RTL8019_DATA_PIN PINA |
| |
| // RTL8019 control port |
| #define RTL8019_CONTROL_PORT PORTD |
| #define RTL8019_CONTROL_DDR DDRD |
| #define RTL8019_CONTROL_READPIN PD7 |
| #define RTL8019_CONTROL_WRITEPIN PD6 |
| |
| |
| // macros to control the read and write pins |
| #define RTL8019_CLEAR_READ cbi(RTL8019_CONTROL_PORT,\ |
| RTL8019_CONTROL_READPIN) |
| #define RTL8019_SET_READ sbi(RTL8019_CONTROL_PORT,\ |
| RTL8019_CONTROL_READPIN) |
| #define RTL8019_CLEAR_WRITE cbi(RTL8019_CONTROL_PORT,\ |
| RTL8019_CONTROL_WRITEPIN) |
| #define RTL8019_SET_WRITE sbi(RTL8019_CONTROL_PORT,\ |
| RTL8019_CONTROL_WRITEPIN) |
| |
| #endif /** NIC Interface **/ |
| |
| |
| |
| // RTL RESET - Port B pin 0 |
| #define RTL8019_RESET_PORT PORTE |
| #define RTL8019_RESET_DDR DDRE |
| #define RTL8019_RESET_PIN PORTE0 |
| |
| |
| |
| |
| |
| /***************************************************************************** |
| * |
| * Ethernet constants |
| * |
| *****************************************************************************/ |
| #define ETHERNET_MIN_PACKET_LENGTH 0x3C |
| #define ETHERNET_HEADER_LENGTH 0x0E |
| |
| |
| |
| /***************************************************************************** |
| * |
| * MAC address assigned to the RTL8019 |
| * |
| *****************************************************************************/ |
| /*#define MYMAC_0 '0' |
| #define MYMAC_1 'F' |
| #define MYMAC_2 'F' |
| #define MYMAC_3 'I' |
| #define MYMAC_4 'C' |
| #define MYMAC_5 'E'*/ |
| |
| #define MYMAC_0 0x00 |
| #define MYMAC_1 0x06 |
| #define MYMAC_2 0x98 |
| #define MYMAC_3 0x01 |
| #define MYMAC_4 0x02 |
| #define MYMAC_5 0x26 |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #endif /* __RTL8019_H__ */ |